X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ftarget%2Fmips32_pracc.c;h=4f9a7042276373144d40118593d779abf3a46c39;hb=e232dea176cc8c831e77a10903120ff057337f6c;hp=0d33f391469402cc889e8118a5d5c0edb652da2a;hpb=2e779198535580515dfa9c8bfe1f3fe08abdb84b;p=openocd diff --git a/src/target/mips32_pracc.c b/src/target/mips32_pracc.c index 0d33f391..4f9a7042 100644 --- a/src/target/mips32_pracc.c +++ b/src/target/mips32_pracc.c @@ -77,19 +77,20 @@ Nico Coesel #include "mips32.h" #include "mips32_pracc.h" -typedef struct { +struct mips32_pracc_context +{ uint32_t *local_iparam; int num_iparam; uint32_t *local_oparam; int num_oparam; - uint32_t *code; + const uint32_t *code; int code_len; uint32_t stack[32]; int stack_offset; - mips_ejtag_t *ejtag_info; -} mips32_pracc_context; + struct mips_ejtag *ejtag_info; +}; -static int wait_for_pracc_rw(mips_ejtag_t *ejtag_info, uint32_t *ctrl) +static int wait_for_pracc_rw(struct mips_ejtag *ejtag_info, uint32_t *ctrl) { uint32_t ejtag_ctrl; @@ -108,9 +109,9 @@ static int wait_for_pracc_rw(mips_ejtag_t *ejtag_info, uint32_t *ctrl) return ERROR_OK; } -static int mips32_pracc_exec_read(mips32_pracc_context *ctx, uint32_t address) +static int mips32_pracc_exec_read(struct mips32_pracc_context *ctx, uint32_t address) { - mips_ejtag_t *ejtag_info = ctx->ejtag_info; + struct mips_ejtag *ejtag_info = ctx->ejtag_info; int offset; uint32_t ejtag_ctrl, data; @@ -164,11 +165,11 @@ static int mips32_pracc_exec_read(mips32_pracc_context *ctx, uint32_t address) return ERROR_OK; } -static int mips32_pracc_exec_write(mips32_pracc_context *ctx, uint32_t address) +static int mips32_pracc_exec_write(struct mips32_pracc_context *ctx, uint32_t address) { uint32_t ejtag_ctrl,data; int offset; - mips_ejtag_t *ejtag_info = ctx->ejtag_info; + struct mips_ejtag *ejtag_info = ctx->ejtag_info; mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_DATA, NULL); mips_ejtag_drscan_32(ctx->ejtag_info, &data); @@ -207,11 +208,11 @@ static int mips32_pracc_exec_write(mips32_pracc_context *ctx, uint32_t address) return ERROR_OK; } -int mips32_pracc_exec(mips_ejtag_t *ejtag_info, int code_len, uint32_t *code, int num_param_in, uint32_t *param_in, int num_param_out, uint32_t *param_out, int cycle) +int mips32_pracc_exec(struct mips_ejtag *ejtag_info, int code_len, const uint32_t *code, int num_param_in, uint32_t *param_in, int num_param_out, uint32_t *param_out, int cycle) { uint32_t ejtag_ctrl; uint32_t address, data; - mips32_pracc_context ctx; + struct mips32_pracc_context ctx; int retval; int pass = 0; @@ -269,7 +270,7 @@ int mips32_pracc_exec(mips_ejtag_t *ejtag_info, int code_len, uint32_t *code, in return ERROR_OK; } -int mips32_pracc_read_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf) +int mips32_pracc_read_mem(struct mips_ejtag *ejtag_info, uint32_t addr, int size, int count, void *buf) { switch (size) { @@ -287,9 +288,9 @@ int mips32_pracc_read_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int return ERROR_OK; } -int mips32_pracc_read_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint32_t *buf) +int mips32_pracc_read_mem32(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint32_t *buf) { - uint32_t code[] = { + 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 */ @@ -361,9 +362,9 @@ int mips32_pracc_read_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count, return retval; } -int mips32_pracc_read_u32(mips_ejtag_t *ejtag_info, uint32_t addr, uint32_t *buf) +int mips32_pracc_read_u32(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *buf) { - uint32_t code[] = { + 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 */ @@ -395,9 +396,9 @@ int mips32_pracc_read_u32(mips_ejtag_t *ejtag_info, uint32_t addr, uint32_t *buf return retval; } -int mips32_pracc_read_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint16_t *buf) +int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint16_t *buf) { - uint32_t code[] = { + 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 */ @@ -439,7 +440,7 @@ int mips32_pracc_read_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, }; // /* TODO remove array */ - uint32_t param_out[count]; + uint32_t *param_out = malloc(count * sizeof(uint32_t)); int i; // int retval; @@ -471,12 +472,14 @@ int mips32_pracc_read_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, buf[i] = param_out[i]; } + free(param_out); + return ERROR_OK; } -int mips32_pracc_read_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint8_t *buf) +int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint8_t *buf) { - uint32_t code[] = { + 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 */ @@ -518,7 +521,7 @@ int mips32_pracc_read_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, u }; // /* TODO remove array */ - uint32_t param_out[count]; + uint32_t *param_out = malloc(count * sizeof(uint32_t)); int i; // int retval; @@ -550,10 +553,12 @@ int mips32_pracc_read_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, u buf[i] = param_out[i]; } + free(param_out); + return ERROR_OK; } -int mips32_pracc_write_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf) +int mips32_pracc_write_mem(struct mips_ejtag *ejtag_info, uint32_t addr, int size, int count, void *buf) { switch (size) { @@ -571,11 +576,11 @@ int mips32_pracc_write_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, in return ERROR_OK; } -int mips32_pracc_write_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint32_t *buf) +int mips32_pracc_write_mem32(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint32_t *buf) { //NC: use destination pointer as loop counter (last address is in $10) - uint32_t code[] = { + 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 */ @@ -608,21 +613,23 @@ int mips32_pracc_write_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count, }; /* TODO remove array */ - uint32_t param_in[count + 2]; + 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)); mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \ - sizeof(param_in)/sizeof(param_in[0]),param_in, 0, NULL, 1); + count + 2, param_in, 0, NULL, 1); + + free(param_in); return ERROR_OK; } -int mips32_pracc_write_u32(mips_ejtag_t *ejtag_info, uint32_t addr, uint32_t *buf) +int mips32_pracc_write_u32(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *buf) { - uint32_t code[] = { + 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 */ @@ -653,9 +660,9 @@ int mips32_pracc_write_u32(mips_ejtag_t *ejtag_info, uint32_t addr, uint32_t *bu return ERROR_OK; } -int mips32_pracc_write_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint16_t *buf) +int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint16_t *buf) { - uint32_t code[] = { + 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 */ @@ -697,7 +704,7 @@ int mips32_pracc_write_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, }; /* TODO remove array */ - uint32_t param_in[count + 2]; + uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t)); int i; param_in[0] = addr; param_in[1] = count; @@ -708,14 +715,16 @@ int mips32_pracc_write_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count, } mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \ - sizeof(param_in)/sizeof(param_in[0]), param_in, 0, NULL, 1); + count + 2, param_in, 0, NULL, 1); + + free(param_in); return ERROR_OK; } -int mips32_pracc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, uint8_t *buf) +int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint8_t *buf) { - uint32_t code[] = { + 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 */ @@ -757,7 +766,7 @@ int mips32_pracc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, }; /* TODO remove array */ - uint32_t param_in[count + 2]; + uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t)); int retval; int i; param_in[0] = addr; @@ -769,14 +778,16 @@ int mips32_pracc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, } retval = mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \ - sizeof(param_in)/sizeof(param_in[0]), param_in, 0, NULL, 1); + count +2, param_in, 0, NULL, 1); + + free(param_in); return retval; } -int mips32_pracc_write_regs(mips_ejtag_t *ejtag_info, uint32_t *regs) +int mips32_pracc_write_regs(struct mips_ejtag *ejtag_info, uint32_t *regs) { - uint32_t code[] = { + static const uint32_t code[] = { /* start: */ MIPS32_LUI(2,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $2 = MIPS32_PRACC_PARAM_IN */ MIPS32_ORI(2,2,LOWER16(MIPS32_PRACC_PARAM_IN)), @@ -846,9 +857,9 @@ int mips32_pracc_write_regs(mips_ejtag_t *ejtag_info, uint32_t *regs) return retval; } -int mips32_pracc_read_regs(mips_ejtag_t *ejtag_info, uint32_t *regs) +int mips32_pracc_read_regs(struct mips_ejtag *ejtag_info, uint32_t *regs) { - uint32_t code[] = { + static const uint32_t code[] = { /* start: */ MIPS32_MTC0(2,31,0), /* move $2 to COP0 DeSave */ MIPS32_LUI(2,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $2 = MIPS32_PRACC_PARAM_OUT */