summaryrefslogtreecommitdiff
path: root/src/target/etm.c
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-17 09:06:45 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-11-17 09:06:45 -0800
commitf4788652e45662d1e43933dc0620561bc4cddae0 (patch)
tree0cda3c8b5ad766f3dea26d83c2a70b7cb52837d7 /src/target/etm.c
parent959b373f8cdc2c1ad11c67c6916f88f48769438f (diff)
downloadopenocd+libswd-f4788652e45662d1e43933dc0620561bc4cddae0.tar.gz
openocd+libswd-f4788652e45662d1e43933dc0620561bc4cddae0.tar.bz2
openocd+libswd-f4788652e45662d1e43933dc0620561bc4cddae0.tar.xz
openocd+libswd-f4788652e45662d1e43933dc0620561bc4cddae0.zip
target: simplify register get/set ops
No need to indirect from registered integers to pointers. Just stash the pointers directly in the register struct, and don't even bother registering. This is a small code shrink, speeds register access just a smidgeon, and gets rid of another rude exit() path. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src/target/etm.c')
-rw-r--r--src/target/etm.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/target/etm.c b/src/target/etm.c
index fa7a71b2..31b8bb2d 100644
--- a/src/target/etm.c
+++ b/src/target/etm.c
@@ -214,8 +214,6 @@ static const struct etm_reg_info etm_outputs[] = {
{ 0x6f, 32, RO, 0x20, "ETM_contextid_comparator_mask", }
#endif
-static int etm_reg_arch_type = -1;
-
static int etm_get_reg(struct reg *reg);
static int etm_read_reg_w_check(struct reg *reg,
uint8_t* check_value, uint8_t* check_mask);
@@ -225,6 +223,10 @@ static int etm_write_reg(struct reg *reg, uint32_t value);
static struct command *etm_cmd;
+static const struct reg_arch_type etm_scan6_type = {
+ .get = etm_get_reg,
+ .set = etm_set_reg_w_exec,
+};
/* Look up register by ID ... most ETM instances only
* support a subset of the possible registers.
@@ -269,7 +271,7 @@ static void etm_reg_add(unsigned bcd_vers, struct arm_jtag *jtag_info,
reg->size = r->size;
reg->value = &ereg->value;
reg->arch_info = ereg;
- reg->arch_type = etm_reg_arch_type;
+ reg->type = &etm_scan6_type;
reg++;
cache->num_regs++;
@@ -287,11 +289,6 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
struct etm_reg *arch_info = NULL;
unsigned bcd_vers, config;
- /* register a register arch-type for etm registers only once */
- if (etm_reg_arch_type == -1)
- etm_reg_arch_type = register_reg_arch_type(etm_get_reg,
- etm_set_reg_w_exec);
-
/* the actual registers are kept in two arrays */
reg_list = calloc(128, sizeof(struct reg));
arch_info = calloc(128, sizeof(struct etm_reg));