Introduced device_* helper macros.

This commit is contained in:
Daniel Beer 2011-03-15 13:12:48 +13:00
parent 9a0173607e
commit fdaf99a70e
6 changed files with 57 additions and 47 deletions

View File

@ -38,14 +38,14 @@ int cmd_regs(char **arg)
uint8_t code[16];
int len = sizeof(code);
if (device_default->getregs(device_default, regs) < 0)
if (device_getregs(regs) < 0)
return -1;
show_regs(regs);
/* Try to disassemble the instruction at PC */
if (len > 0x10000 - regs[0])
len = 0x10000 - regs[0];
if (device_default->readmem(device_default, regs[0], code, len) < 0)
if (device_readmem(regs[0], code, len) < 0)
return 0;
disassemble(regs[0], (uint8_t *)code, len);
@ -85,8 +85,7 @@ int cmd_md(char **arg)
uint8_t buf[4096];
int blen = length > sizeof(buf) ? sizeof(buf) : length;
if (device_default->readmem(device_default,
offset, buf, blen) < 0)
if (device_readmem(offset, buf, blen) < 0)
return -1;
hexdump(offset, buf, blen);
@ -127,7 +126,7 @@ int cmd_mw(char **arg)
if (!length)
return 0;
if (device_default->writemem(device_default, offset, buf, length) < 0)
if (device_writemem(offset, buf, length) < 0)
return -1;
return 0;
@ -135,7 +134,7 @@ int cmd_mw(char **arg)
int cmd_reset(char **arg)
{
return device_default->ctl(device_default, DEVICE_CTL_RESET);
return device_ctl(DEVICE_CTL_RESET);
}
int cmd_erase(char **arg)
@ -167,11 +166,11 @@ int cmd_erase(char **arg)
}
}
if (device_default->ctl(device_default, DEVICE_CTL_HALT) < 0)
if (device_ctl(DEVICE_CTL_HALT) < 0)
return -1;
printc("Erasing...\n");
return device_default->erase(device_default, type, segment);
return device_erase(type, segment);
}
int cmd_step(char **arg)
@ -188,7 +187,7 @@ int cmd_step(char **arg)
}
for (i = 0; i < count; i++)
if (device_default->ctl(device_default, DEVICE_CTL_STEP) < 0)
if (device_ctl(DEVICE_CTL_STEP) < 0)
return -1;
reader_set_repeat("step");
@ -200,7 +199,7 @@ int cmd_run(char **arg)
device_status_t status;
address_t regs[DEVICE_NUM_REGS];
if (device_default->getregs(device_default, regs) < 0) {
if (device_getregs(regs) < 0) {
printc_err("warning: device: can't fetch registers\n");
} else {
int i;
@ -217,11 +216,11 @@ int cmd_run(char **arg)
if (i < device_default->max_breakpoints) {
printc("Stepping over breakpoint #%d at 0x%04x\n",
i, regs[0]);
device_default->ctl(device_default, DEVICE_CTL_STEP);
device_ctl(DEVICE_CTL_STEP);
}
}
if (device_default->ctl(device_default, DEVICE_CTL_RUN) < 0) {
if (device_ctl(DEVICE_CTL_RUN) < 0) {
printc_err("run: failed to start CPU\n");
return -1;
}
@ -229,7 +228,7 @@ int cmd_run(char **arg)
printc("Running. Press Ctrl+C to interrupt...\n");
do {
status = device_default->poll(device_default);
status = device_poll();
} while (status == DEVICE_STATUS_RUNNING);
if (status == DEVICE_STATUS_INTR)
@ -238,7 +237,7 @@ int cmd_run(char **arg)
if (status == DEVICE_STATUS_ERROR)
return -1;
if (device_default->ctl(device_default, DEVICE_CTL_HALT) < 0)
if (device_ctl(DEVICE_CTL_HALT) < 0)
return -1;
return cmd_regs(NULL);
@ -268,10 +267,10 @@ int cmd_set(char **arg)
return -1;
}
if (device_default->getregs(device_default, regs) < 0)
if (device_getregs(regs) < 0)
return -1;
regs[reg] = value;
if (device_default->setregs(device_default, regs) < 0)
if (device_setregs(regs) < 0)
return -1;
show_regs(regs);
@ -312,8 +311,7 @@ int cmd_dis(char **arg)
return -1;
}
if (device_default->readmem(device_default,
offset, buf, length) < 0) {
if (device_readmem(offset, buf, length) < 0) {
free(buf);
return -1;
}
@ -457,8 +455,7 @@ int cmd_hexout(char **arg)
count = sizeof(buf);
printc("Reading %4d bytes from 0x%04x...\n", count, off);
if (device_default->readmem(device_default,
off, buf, count) < 0) {
if (device_readmem(off, buf, count) < 0) {
pr_error("hexout: can't read memory");
goto fail;
}
@ -505,7 +502,7 @@ static int do_cmd_prog(char **arg, int prog_flags)
return -1;
}
if (device_default->ctl(device_default, DEVICE_CTL_HALT) < 0) {
if (device_ctl(DEVICE_CTL_HALT) < 0) {
fclose(in);
return -1;
}
@ -527,7 +524,7 @@ static int do_cmd_prog(char **arg, int prog_flags)
if (prog_flush(&prog) < 0)
return -1;
if (device_default->ctl(device_default, DEVICE_CTL_RESET) < 0) {
if (device_ctl(DEVICE_CTL_RESET) < 0) {
printc_err("prog: failed to reset after programming\n");
return -1;
}
@ -664,7 +661,7 @@ int cmd_locka(char **arg)
}
}
if (device_default->readmem(device_default, FCTL3, regval, 2) < 0) {
if (device_readmem(FCTL3, regval, 2) < 0) {
printc_err("locka: can't read FCTL3 register\n");
return -1;
}
@ -681,14 +678,12 @@ int cmd_locka(char **arg)
regval[0] |= FCTL3_LOCKA;
regval[1] = FWKEY;
if (device_default->writemem(device_default, FCTL3,
regval, 2) < 0) {
if (device_writemem(FCTL3, regval, 2) < 0) {
printc_err("locka: can't write FCTL3 register\n");
return -1;
}
if (device_default->readmem(device_default, FCTL3,
regval, 2) < 0) {
if (device_readmem(FCTL3, regval, 2) < 0) {
printc_err("locka: can't read FCTL3 register\n");
return -1;
}

View File

@ -25,8 +25,6 @@
struct device;
typedef struct device *device_t;
extern device_t device_default;
typedef enum {
DEVICE_CTL_RESET,
DEVICE_CTL_RUN,
@ -101,4 +99,23 @@ struct device {
*/
int device_setbrk(device_t dev, int which, int enabled, address_t address);
extern device_t device_default;
/* Helper macros for operating on the default device */
#define device_destroy() device_default->destroy(device_default)
#define device_readmem(addr, mem, len) \
device_default->readmem(device_default, addr, mem, len)
#define device_writemem(addr, mem, len) \
device_default->writemem(device_default, addr, mem, len)
#define device_erase(type, addr) \
device_default->erase(device_default, type, addr)
#define device_getregs(regs) \
device_default->getregs(device_default, regs)
#define device_setregs(regs) \
device_default->setregs(device_default, regs)
#define device_ctl(op) \
device_default->ctl(device_default, op)
#define device_poll() \
device_default->poll(device_default)
#endif

22
gdb.c
View File

@ -209,7 +209,7 @@ static int read_registers(struct gdb_data *data)
int i;
printc("Reading registers\n");
if (device_default->getregs(device_default, regs) < 0)
if (device_getregs(regs) < 0)
return gdb_send(data, "E00");
gdb_packet_start(data);
@ -298,7 +298,7 @@ static int write_registers(struct gdb_data *data, char *buf)
buf += 4;
}
if (device_default->setregs(device_default, regs) < 0)
if (device_setregs(regs) < 0)
return gdb_send(data, "E00");
return gdb_send(data, "OK");
@ -326,7 +326,7 @@ static int read_memory(struct gdb_data *data, char *text)
printc("Reading %4d bytes from 0x%04x\n", length, addr);
if (device_default->readmem(device_default, addr, buf, length) < 0)
if (device_readmem(addr, buf, length) < 0)
return gdb_send(data, "E00");
gdb_packet_start(data);
@ -369,7 +369,7 @@ static int write_memory(struct gdb_data *data, char *text)
printc("Writing %4d bytes to 0x%04x\n", length, addr);
if (device_default->writemem(device_default, addr, buf, buflen) < 0)
if (device_writemem(addr, buf, buflen) < 0)
return gdb_send(data, "E00");
return gdb_send(data, "OK");
@ -382,11 +382,11 @@ static int run_set_pc(struct gdb_data *data, char *buf)
if (!*buf)
return 0;
if (device_default->getregs(device_default, regs) < 0)
if (device_getregs(regs) < 0)
return -1;
regs[0] = strtoul(buf, NULL, 16);
return device_default->setregs(device_default, regs);
return device_setregs(regs);
}
static int run_final_status(struct gdb_data *data)
@ -394,7 +394,7 @@ static int run_final_status(struct gdb_data *data)
address_t regs[DEVICE_NUM_REGS];
int i;
if (device_default->getregs(device_default, regs) < 0)
if (device_getregs(regs) < 0)
return gdb_send(data, "E00");
gdb_packet_start(data);
@ -423,7 +423,7 @@ static int single_step(struct gdb_data *data, char *buf)
printc("Single stepping\n");
if (run_set_pc(data, buf) < 0 ||
device_default->ctl(device_default, DEVICE_CTL_STEP) < 0)
device_ctl(DEVICE_CTL_STEP) < 0)
gdb_send(data, "E00");
return run_final_status(data);
@ -434,11 +434,11 @@ static int run(struct gdb_data *data, char *buf)
printc("Running\n");
if (run_set_pc(data, buf) < 0 ||
device_default->ctl(device_default, DEVICE_CTL_RUN) < 0)
device_ctl(DEVICE_CTL_RUN) < 0)
return gdb_send(data, "E00");
for (;;) {
device_status_t status = device_default->poll(device_default);
device_status_t status = device_poll();
if (status == DEVICE_STATUS_ERROR)
return gdb_send(data, "E00");
@ -465,7 +465,7 @@ static int run(struct gdb_data *data, char *buf)
}
out:
if (device_default->ctl(device_default, DEVICE_CTL_HALT) < 0)
if (device_ctl(DEVICE_CTL_HALT) < 0)
return gdb_send(data, "E00");
return run_final_status(data);

2
main.c
View File

@ -464,7 +464,7 @@ int main(int argc, char **argv)
simio_exit();
stab_destroy(stab_default);
device_default->destroy(device_default);
device_destroy();
return ret;
}

6
prog.c
View File

@ -34,8 +34,7 @@ int prog_flush(struct prog_data *prog)
if (!prog->have_erased && (prog->flags & PROG_WANT_ERASE)) {
printc("Erasing...\n");
if (device_default->erase(device_default,
DEVICE_ERASE_MAIN, 0) < 0)
if (device_erase(DEVICE_ERASE_MAIN, 0) < 0)
return -1;
printc("Programming...\n");
@ -43,8 +42,7 @@ int prog_flush(struct prog_data *prog)
}
printc_dbg("Writing %4d bytes to %04x...\n", prog->len, prog->addr);
if (device_default->writemem(device_default, prog->addr,
prog->buf, prog->len) < 0)
if (device_writemem(prog->addr, prog->buf, prog->len) < 0)
return -1;
prog->addr += prog->len;

View File

@ -353,7 +353,7 @@ static int do_isearch(address_t addr, address_t len,
return -1;
}
if (device_default->readmem(device_default, addr, mbuf, len) < 0) {
if (device_readmem(addr, mbuf, len) < 0) {
printc_err("isearch: couldn't read device memory\n");
free(mbuf);
return -1;
@ -940,7 +940,7 @@ int cmd_cgraph(char **arg)
return -1;
}
if (device_default->readmem(device_default, offset, memory, len) < 0) {
if (device_readmem(offset, memory, len) < 0) {
printc_err("cgraph: couldn't fetch memory\n");
free(memory);
return -1;