-static int mips32_pracc_write_mem32(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint32_t *buf)
-{
- static const uint32_t code[] = {
- /* start: */
- MIPS32_MTC0(15, 31, 0), /* move $15 to COP0 DeSave */
- MIPS32_LUI(15, UPPER16(MIPS32_PRACC_STACK)), /* $15 = MIPS32_PRACC_STACK */
- MIPS32_ORI(15, 15, LOWER16(MIPS32_PRACC_STACK)),
- MIPS32_SW(8, 0, 15), /* sw $8,($15) */
- MIPS32_SW(9, 0, 15), /* sw $9,($15) */
- MIPS32_SW(10, 0, 15), /* sw $10,($15) */
- MIPS32_SW(11, 0, 15), /* sw $11,($15) */
-
- MIPS32_ADDI(8, 15, NEG16(MIPS32_PRACC_STACK-MIPS32_PRACC_PARAM_IN)), /* $8= MIPS32_PRACC_PARAM_IN */
- MIPS32_LW(9, 0, 8), /* Load write addr to $9 */
- MIPS32_LW(10, 4, 8), /* Load write count to $10 */
- MIPS32_ADDI(8, 8, 8), /* $8 += 8 beginning of data */
-
- /* loop: */
- MIPS32_LW(11, 0, 8), /* lw $11,0($8), Load $11 with the word @mem[$8] */
- MIPS32_SW(11, 0, 9), /* sw $11,0($9) */
-
- MIPS32_ADDI(9, 9, 4), /* $9 += 4 */
- MIPS32_BNE(10, 9, NEG16(4)), /* bne $10, $9, loop */
- MIPS32_ADDI(8, 8, 4), /* $8 += 4 */
-
- /* end: */
- MIPS32_LW(11, 0, 15), /* lw $11,($15) */
- MIPS32_LW(10, 0, 15), /* lw $10,($15) */
- MIPS32_LW(9, 0, 15), /* lw $9,($15) */
- MIPS32_LW(8, 0, 15), /* lw $8,($15) */
- MIPS32_B(NEG16(21)), /* b start */
- MIPS32_MFC0(15, 31, 0), /* move COP0 DeSave to $15 */
- };
-
- /* TODO remove array */
- uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
- param_in[0] = addr;
- param_in[1] = addr + (count * sizeof(uint32_t)); /* last address */
-
- memcpy(¶m_in[2], buf, count * sizeof(uint32_t));
-
- int retval;
- retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- count + 2, param_in, 0, NULL, 1);
-
- free(param_in);
-
- return retval;
-}
-
-static int mips32_pracc_write_u32(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *buf)
-{
- static const uint32_t code[] = {
- /* start: */
- MIPS32_MTC0(15, 31, 0), /* move $15 to COP0 DeSave */
- MIPS32_LUI(15, UPPER16(MIPS32_PRACC_STACK)), /* $15 = MIPS32_PRACC_STACK */
- MIPS32_ORI(15, 15, LOWER16(MIPS32_PRACC_STACK)),
- MIPS32_SW(8, 0, 15), /* sw $8,($15) */
- MIPS32_SW(9, 0, 15), /* sw $9,($15) */
-
- MIPS32_LW(8, NEG16((MIPS32_PRACC_STACK-MIPS32_PRACC_PARAM_IN)-4), 15), /* load R8 @ param_in[1] = data */
- MIPS32_LW(9, NEG16(MIPS32_PRACC_STACK-MIPS32_PRACC_PARAM_IN), 15), /* load R9 @ param_in[0] = address */
-
- MIPS32_SW(8, 0, 9), /* sw $8,0($9) */
-
- MIPS32_LW(9, 0, 15), /* lw $9,($15) */
- MIPS32_LW(8, 0, 15), /* lw $8,($15) */
- MIPS32_B(NEG16(11)), /* b start */
- MIPS32_MFC0(15, 31, 0), /* move COP0 DeSave to $15 */
- };
-
- /* TODO remove array */
- uint32_t param_in[1 + 1];
- param_in[0] = addr;
- param_in[1] = *buf;
-
- return mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- ARRAY_SIZE(param_in), param_in, 0, NULL, 1);
-}
-
-static int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint16_t *buf)
-{
- static const uint32_t code[] = {
- /* start: */
- MIPS32_MTC0(15, 31, 0), /* move $15 to COP0 DeSave */
- MIPS32_LUI(15, UPPER16(MIPS32_PRACC_STACK)), /* $15 = MIPS32_PRACC_STACK */
- MIPS32_ORI(15, 15, LOWER16(MIPS32_PRACC_STACK)),
- MIPS32_SW(8, 0, 15), /* sw $8,($15) */
- MIPS32_SW(9, 0, 15), /* sw $9,($15) */
- MIPS32_SW(10, 0, 15), /* sw $10,($15) */
- MIPS32_SW(11, 0, 15), /* sw $11,($15) */
-
- MIPS32_LUI(8, UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
- MIPS32_ORI(8, 8, LOWER16(MIPS32_PRACC_PARAM_IN)),
- MIPS32_LW(9, 0, 8), /* Load write addr to $9 */
- MIPS32_LW(10, 4, 8), /* Load write count to $10 */
- MIPS32_ADDI(8, 8, 8), /* $8 += 8 */
- /* loop: */
- MIPS32_BEQ(0, 10, 8), /* beq $0, $10, end */
- MIPS32_NOP,
-
- MIPS32_LW(11, 0, 8), /* lw $11,0($8), Load $11 with the word @mem[$8] */
- MIPS32_SH(11, 0, 9), /* sh $11,0($9) */
-
- MIPS32_ADDI(10, 10, NEG16(1)), /* $10-- */
- MIPS32_ADDI(9, 9, 2), /* $9 += 2 */
- MIPS32_ADDI(8, 8, 4), /* $8 += 4 */
-
- MIPS32_B(NEG16(8)), /* b loop */
- MIPS32_NOP,
- /* end: */
- MIPS32_LW(11, 0, 15), /* lw $11,($15) */
- MIPS32_LW(10, 0, 15), /* lw $10,($15) */
- MIPS32_LW(9, 0, 15), /* lw $9,($15) */
- MIPS32_LW(8, 0, 15), /* lw $8,($15) */
- MIPS32_B(NEG16(26)), /* b start */
- MIPS32_MFC0(15, 31, 0), /* move COP0 DeSave to $15 */
- };
-
- /* TODO remove array */
- uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
- int i;
- param_in[0] = addr;
- param_in[1] = count;
-
- for (i = 0; i < count; i++)
- param_in[i + 2] = buf[i];
-
- int retval;
- retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- count + 2, param_in, 0, NULL, 1);
-
- free(param_in);
-
- return retval;
-}
-
-static int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint8_t *buf)
-{
- static const uint32_t code[] = {
- /* start: */
- MIPS32_MTC0(15, 31, 0), /* move $15 to COP0 DeSave */
- MIPS32_LUI(15, UPPER16(MIPS32_PRACC_STACK)), /* $15 = MIPS32_PRACC_STACK */
- MIPS32_ORI(15, 15, LOWER16(MIPS32_PRACC_STACK)),
- MIPS32_SW(8, 0, 15), /* sw $8,($15) */
- MIPS32_SW(9, 0, 15), /* sw $9,($15) */
- MIPS32_SW(10, 0, 15), /* sw $10,($15) */
- MIPS32_SW(11, 0, 15), /* sw $11,($15) */
-
- MIPS32_LUI(8, UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
- MIPS32_ORI(8, 8, LOWER16(MIPS32_PRACC_PARAM_IN)),
- MIPS32_LW(9, 0, 8), /* Load write addr to $9 */
- MIPS32_LW(10, 4, 8), /* Load write count to $10 */
- MIPS32_ADDI(8, 8, 8), /* $8 += 8 */
- /* loop: */
- MIPS32_BEQ(0, 10, 8), /* beq $0, $10, end */
- MIPS32_NOP,
-
- MIPS32_LW(11, 0, 8), /* lw $11,0($8), Load $11 with the word @mem[$8] */
- MIPS32_SB(11, 0, 9), /* sb $11,0($9) */
-
- MIPS32_ADDI(10, 10, NEG16(1)), /* $10-- */
- MIPS32_ADDI(9, 9, 1), /* $9 += 1 */
- MIPS32_ADDI(8, 8, 4), /* $8 += 4 */
-
- MIPS32_B(NEG16(8)), /* b loop */
- MIPS32_NOP,
- /* end: */
- MIPS32_LW(11, 0, 15), /* lw $11,($15) */
- MIPS32_LW(10, 0, 15), /* lw $10,($15) */
- MIPS32_LW(9, 0, 15), /* lw $9,($15) */
- MIPS32_LW(8, 0, 15), /* lw $8,($15) */
- MIPS32_B(NEG16(26)), /* b start */
- MIPS32_MFC0(15, 31, 0), /* move COP0 DeSave to $15 */
- };
-
- /* TODO remove array */
- uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
- int retval;
- int i;
- param_in[0] = addr;
- param_in[1] = count;
-
- for (i = 0; i < count; i++)
- param_in[i + 2] = buf[i];
-
- retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- count + 2, param_in, 0, NULL, 1);
-
- free(param_in);
-
- return retval;
-}
-