target: target_get_name() --> target_type_name()
[fw/openocd] / src / target / target.c
index 68172f1b2d90db430371605f7c0647f6e331ddff..f46fc67b4bc35aa57883e3c71c0a35ed8c04debc 100644 (file)
@@ -36,6 +36,7 @@
 #include "target.h"
 #include "target_type.h"
 #include "target_request.h"
+#include "breakpoints.h"
 #include "time_support.h"
 #include "register.h"
 #include "trace.h"
 
 static int jim_mcrmrc(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
 
-static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv);
-static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv);
+static int target_array2mem(Jim_Interp *interp, struct target *target, int argc, Jim_Obj *const *argv);
+static int target_mem2array(Jim_Interp *interp, struct target *target, int argc, Jim_Obj *const *argv);
 
 /* targets */
-extern target_type_t arm7tdmi_target;
-extern target_type_t arm720t_target;
-extern target_type_t arm9tdmi_target;
-extern target_type_t arm920t_target;
-extern target_type_t arm966e_target;
-extern target_type_t arm926ejs_target;
-extern target_type_t fa526_target;
-extern target_type_t feroceon_target;
-extern target_type_t dragonite_target;
-extern target_type_t xscale_target;
-extern target_type_t cortexm3_target;
-extern target_type_t cortexa8_target;
-extern target_type_t arm11_target;
-extern target_type_t mips_m4k_target;
-extern target_type_t avr_target;
-
-target_type_t *target_types[] =
+extern struct target_type arm7tdmi_target;
+extern struct target_type arm720t_target;
+extern struct target_type arm9tdmi_target;
+extern struct target_type arm920t_target;
+extern struct target_type arm966e_target;
+extern struct target_type arm926ejs_target;
+extern struct target_type fa526_target;
+extern struct target_type feroceon_target;
+extern struct target_type dragonite_target;
+extern struct target_type xscale_target;
+extern struct target_type cortexm3_target;
+extern struct target_type cortexa8_target;
+extern struct target_type arm11_target;
+extern struct target_type mips_m4k_target;
+extern struct target_type avr_target;
+extern struct target_type testee_target;
+
+struct target_type *target_types[] =
 {
        &arm7tdmi_target,
        &arm9tdmi_target,
@@ -82,10 +84,11 @@ target_type_t *target_types[] =
        &arm11_target,
        &mips_m4k_target,
        &avr_target,
+       &testee_target,
        NULL,
 };
 
-target_t *all_targets = NULL;
+struct target *all_targets = NULL;
 struct target_event_callback *target_event_callbacks = NULL;
 struct target_timer_callback *target_timer_callbacks = NULL;
 
@@ -213,7 +216,7 @@ const Jim_Nvp nvp_reset_modes[] = {
 };
 
 const char *
-target_state_name( target_t *t )
+target_state_name( struct target *t )
 {
        const char *cp;
        cp = Jim_Nvp_value2name_simple(nvp_target_state, t->state)->name;
@@ -227,7 +230,7 @@ target_state_name( target_t *t )
 /* determine the number of the new target */
 static int new_target_number(void)
 {
-       target_t *t;
+       struct target *t;
        int x;
 
        /* number is 0 based */
@@ -243,7 +246,7 @@ static int new_target_number(void)
 }
 
 /* read a uint32_t from a buffer in target memory endianness */
-uint32_t target_buffer_get_u32(target_t *target, const uint8_t *buffer)
+uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer)
 {
        if (target->endianness == TARGET_LITTLE_ENDIAN)
                return le_to_h_u32(buffer);
@@ -252,7 +255,7 @@ uint32_t target_buffer_get_u32(target_t *target, const uint8_t *buffer)
 }
 
 /* read a uint16_t from a buffer in target memory endianness */
-uint16_t target_buffer_get_u16(target_t *target, const uint8_t *buffer)
+uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer)
 {
        if (target->endianness == TARGET_LITTLE_ENDIAN)
                return le_to_h_u16(buffer);
@@ -261,13 +264,13 @@ uint16_t target_buffer_get_u16(target_t *target, const uint8_t *buffer)
 }
 
 /* read a uint8_t from a buffer in target memory endianness */
-uint8_t target_buffer_get_u8(target_t *target, const uint8_t *buffer)
+uint8_t target_buffer_get_u8(struct target *target, const uint8_t *buffer)
 {
        return *buffer & 0x0ff;
 }
 
 /* write a uint32_t to a buffer in target memory endianness */
-void target_buffer_set_u32(target_t *target, uint8_t *buffer, uint32_t value)
+void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t value)
 {
        if (target->endianness == TARGET_LITTLE_ENDIAN)
                h_u32_to_le(buffer, value);
@@ -276,7 +279,7 @@ void target_buffer_set_u32(target_t *target, uint8_t *buffer, uint32_t value)
 }
 
 /* write a uint16_t to a buffer in target memory endianness */
-void target_buffer_set_u16(target_t *target, uint8_t *buffer, uint16_t value)
+void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value)
 {
        if (target->endianness == TARGET_LITTLE_ENDIAN)
                h_u16_to_le(buffer, value);
@@ -285,15 +288,15 @@ void target_buffer_set_u16(target_t *target, uint8_t *buffer, uint16_t value)
 }
 
 /* write a uint8_t to a buffer in target memory endianness */
-void target_buffer_set_u8(target_t *target, uint8_t *buffer, uint8_t value)
+void target_buffer_set_u8(struct target *target, uint8_t *buffer, uint8_t value)
 {
        *buffer = value;
 }
 
 /* return a pointer to a configured target; id is name or number */
-target_t *get_target(const char *id)
+struct target *get_target(const char *id)
 {
-       target_t *target;
+       struct target *target;
 
        /* try as tcltarget name */
        for (target = all_targets; target; target = target->next) {
@@ -322,9 +325,9 @@ target_t *get_target(const char *id)
 }
 
 /* returns a pointer to the n-th configured target */
-static target_t *get_target_by_num(int num)
+static struct target *get_target_by_num(int num)
 {
-       target_t *target = all_targets;
+       struct target *target = all_targets;
 
        while (target) {
                if (target->target_number == num) {
@@ -336,9 +339,9 @@ static target_t *get_target_by_num(int num)
        return NULL;
 }
 
-target_t* get_current_target(command_context_t *cmd_ctx)
+struct target* get_current_target(struct command_context *cmd_ctx)
 {
-       target_t *target = get_target_by_num(cmd_ctx->current_target);
+       struct target *target = get_target_by_num(cmd_ctx->current_target);
 
        if (target == NULL)
        {
@@ -349,7 +352,7 @@ target_t* get_current_target(command_context_t *cmd_ctx)
        return target;
 }
 
-int target_poll(struct target_s *target)
+int target_poll(struct target *target)
 {
        int retval;
 
@@ -384,7 +387,7 @@ int target_poll(struct target_s *target)
        return ERROR_OK;
 }
 
-int target_halt(struct target_s *target)
+int target_halt(struct target *target)
 {
        int retval;
        /* We can't poll until after examine */
@@ -404,7 +407,7 @@ int target_halt(struct target_s *target)
        return ERROR_OK;
 }
 
-int target_resume(struct target_s *target, int current, uint32_t address, int handle_breakpoints, int debug_execution)
+int target_resume(struct target *target, int current, uint32_t address, int handle_breakpoints, int debug_execution)
 {
        int retval;
 
@@ -425,7 +428,7 @@ int target_resume(struct target_s *target, int current, uint32_t address, int ha
        return retval;
 }
 
-int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mode reset_mode)
+int target_process_reset(struct command_context *cmd_ctx, enum target_reset_mode reset_mode)
 {
        char buf[100];
        int retval;
@@ -460,33 +463,33 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo
        return retval;
 }
 
-static int identity_virt2phys(struct target_s *target,
+static int identity_virt2phys(struct target *target,
                uint32_t virtual, uint32_t *physical)
 {
        *physical = virtual;
        return ERROR_OK;
 }
 
-static int no_mmu(struct target_s *target, int *enabled)
+static int no_mmu(struct target *target, int *enabled)
 {
        *enabled = 0;
        return ERROR_OK;
 }
 
-static int default_examine(struct target_s *target)
+static int default_examine(struct target *target)
 {
        target_set_examined(target);
        return ERROR_OK;
 }
 
-int target_examine_one(struct target_s *target)
+int target_examine_one(struct target *target)
 {
        return target->type->examine(target);
 }
 
 static int jtag_enable_callback(enum jtag_event event, void *priv)
 {
-       target_t *target = priv;
+       struct target *target = priv;
 
        if (event != JTAG_TAP_EVENT_ENABLE || !target->tap->enabled)
                return ERROR_OK;
@@ -504,7 +507,7 @@ static int jtag_enable_callback(enum jtag_event event, void *priv)
 int target_examine(void)
 {
        int retval = ERROR_OK;
-       target_t *target;
+       struct target *target;
 
        for (target = all_targets; target; target = target->next)
        {
@@ -519,12 +522,12 @@ int target_examine(void)
        }
        return retval;
 }
-const char *target_get_name(struct target_s *target)
+const char *target_type_name(struct target *target)
 {
        return target->type->name;
 }
 
-static int target_write_memory_imp(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+static int target_write_memory_imp(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        if (!target_was_examined(target))
        {
@@ -534,7 +537,7 @@ static int target_write_memory_imp(struct target_s *target, uint32_t address, ui
        return target->type->write_memory_imp(target, address, size, count, buffer);
 }
 
-static int target_read_memory_imp(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+static int target_read_memory_imp(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        if (!target_was_examined(target))
        {
@@ -544,7 +547,7 @@ static int target_read_memory_imp(struct target_s *target, uint32_t address, uin
        return target->type->read_memory_imp(target, address, size, count, buffer);
 }
 
-static int target_soft_reset_halt_imp(struct target_s *target)
+static int target_soft_reset_halt_imp(struct target *target)
 {
        if (!target_was_examined(target))
        {
@@ -559,7 +562,7 @@ static int target_soft_reset_halt_imp(struct target_s *target)
        return target->type->soft_reset_halt_imp(target);
 }
 
-static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info)
+static int target_run_algorithm_imp(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info)
 {
        if (!target_was_examined(target))
        {
@@ -569,71 +572,71 @@ static int target_run_algorithm_imp(struct target_s *target, int num_mem_params,
        return target->type->run_algorithm_imp(target, num_mem_params, mem_params, num_reg_params, reg_param, entry_point, exit_point, timeout_ms, arch_info);
 }
 
-int target_read_memory(struct target_s *target,
+int target_read_memory(struct target *target,
                uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        return target->type->read_memory(target, address, size, count, buffer);
 }
 
-int target_read_phys_memory(struct target_s *target,
+int target_read_phys_memory(struct target *target,
                uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        return target->type->read_phys_memory(target, address, size, count, buffer);
 }
 
-int target_write_memory(struct target_s *target,
+int target_write_memory(struct target *target,
                uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        return target->type->write_memory(target, address, size, count, buffer);
 }
 
-int target_write_phys_memory(struct target_s *target,
+int target_write_phys_memory(struct target *target,
                uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
 {
        return target->type->write_phys_memory(target, address, size, count, buffer);
 }
 
-int target_bulk_write_memory(struct target_s *target,
+int target_bulk_write_memory(struct target *target,
                uint32_t address, uint32_t count, uint8_t *buffer)
 {
        return target->type->bulk_write_memory(target, address, count, buffer);
 }
 
-int target_add_breakpoint(struct target_s *target,
+int target_add_breakpoint(struct target *target,
                struct breakpoint *breakpoint)
 {
        return target->type->add_breakpoint(target, breakpoint);
 }
-int target_remove_breakpoint(struct target_s *target,
+int target_remove_breakpoint(struct target *target,
                struct breakpoint *breakpoint)
 {
        return target->type->remove_breakpoint(target, breakpoint);
 }
 
-int target_add_watchpoint(struct target_s *target,
+int target_add_watchpoint(struct target *target,
                struct watchpoint *watchpoint)
 {
        return target->type->add_watchpoint(target, watchpoint);
 }
-int target_remove_watchpoint(struct target_s *target,
+int target_remove_watchpoint(struct target *target,
                struct watchpoint *watchpoint)
 {
        return target->type->remove_watchpoint(target, watchpoint);
 }
 
-int target_get_gdb_reg_list(struct target_s *target,
-               struct reg_s **reg_list[], int *reg_list_size)
+int target_get_gdb_reg_list(struct target *target,
+               struct reg **reg_list[], int *reg_list_size)
 {
        return target->type->get_gdb_reg_list(target, reg_list, reg_list_size);
 }
-int target_step(struct target_s *target,
+int target_step(struct target *target,
                int current, uint32_t address, int handle_breakpoints)
 {
        return target->type->step(target, current, address, handle_breakpoints);
 }
 
 
-int target_run_algorithm(struct target_s *target,
+int target_run_algorithm(struct target *target,
                int num_mem_params, struct mem_param *mem_params,
                int num_reg_params, struct reg_param *reg_param,
                uint32_t entry_point, uint32_t exit_point,
@@ -644,37 +647,30 @@ int target_run_algorithm(struct target_s *target,
                        entry_point, exit_point, timeout_ms, arch_info);
 }
 
-/// @returns @c true if the target has been examined.
-bool target_was_examined(struct target_s *target)
-{
-       return target->type->examined;
-}
-/// Sets the @c examined flag for the given target.
-void target_set_examined(struct target_s *target)
-{
-       target->type->examined = true;
-}
-// Reset the @c examined flag for the given target.
-void target_reset_examined(struct target_s *target)
+/**
+ * Reset the @c examined flag for the given target.
+ * Pure paranoia -- targets are zeroed on allocation.
+ */
+static void target_reset_examined(struct target *target)
 {
-       target->type->examined = false;
+       target->examined = false;
 }
 
 
 
-static int default_mrc(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value)
+static int default_mrc(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value)
 {
        LOG_ERROR("Not implemented: %s", __func__);
        return ERROR_FAIL;
 }
 
-static int default_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value)
+static int default_mcr(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value)
 {
        LOG_ERROR("Not implemented: %s", __func__);
        return ERROR_FAIL;
 }
 
-static int arm_cp_check(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm)
+static int arm_cp_check(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm)
 {
        /* basic check */
        if (!target_was_examined(target))
@@ -716,7 +712,7 @@ static int arm_cp_check(struct target_s *target, int cpnum, uint32_t op1, uint32
        return ERROR_OK;
 }
 
-int target_mrc(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value)
+int target_mrc(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value)
 {
        int retval;
 
@@ -727,7 +723,7 @@ int target_mrc(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u
        return target->type->mrc(target, cpnum, op1, op2, CRn, CRm, value);
 }
 
-int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value)
+int target_mcr(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value)
 {
        int retval;
 
@@ -739,7 +735,7 @@ int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u
 }
 
 static int
-err_read_phys_memory(struct target_s *target, uint32_t address,
+err_read_phys_memory(struct target *target, uint32_t address,
                uint32_t size, uint32_t count, uint8_t *buffer)
 {
        LOG_ERROR("Not implemented: %s", __func__);
@@ -747,20 +743,20 @@ err_read_phys_memory(struct target_s *target, uint32_t address,
 }
 
 static int
-err_write_phys_memory(struct target_s *target, uint32_t address,
+err_write_phys_memory(struct target *target, uint32_t address,
                uint32_t size, uint32_t count, uint8_t *buffer)
 {
        LOG_ERROR("Not implemented: %s", __func__);
        return ERROR_FAIL;
 }
 
-int target_init(struct command_context_s *cmd_ctx)
+int target_init(struct command_context *cmd_ctx)
 {
-       struct target_s *target;
+       struct target *target;
        int retval;
 
        for (target = all_targets; target; target = target->next) {
-               struct target_type_s *type = target->type;
+               struct target_type *type = target->type;
 
                target_reset_examined(target);
                if (target->type->examine == NULL)
@@ -770,7 +766,7 @@ int target_init(struct command_context_s *cmd_ctx)
 
                if ((retval = target->type->init_target(cmd_ctx, target)) != ERROR_OK)
                {
-                       LOG_ERROR("target '%s' init failed", target_get_name(target));
+                       LOG_ERROR("target '%s' init failed", target_type_name(target));
                        return retval;
                }
 
@@ -783,12 +779,14 @@ int target_init(struct command_context_s *cmd_ctx)
                        target->type->mcr = default_mcr;
                } else
                {
-                       /* FIX! multiple targets will generally register global commands
-                        * multiple times. Only register this one if *one* of the
-                        * targets need the command. Hmm... make it a command on the
-                        * Jim Tcl target object?
-                        */
-                       register_jim(cmd_ctx, "mcr", jim_mcrmrc, "write coprocessor <cpnum> <op1> <op2> <CRn> <CRm> <value>");
+                       const struct command_registration mcr_cmd = {
+                               .name = "mcr",
+                               .mode = COMMAND_EXEC,
+                               .jim_handler = &jim_mcrmrc,
+                               .help = "write coprocessor",
+                               .usage = "<cpnum> <op1> <op2> <CRn> <CRm> <value>",
+                       };
+                       register_command(cmd_ctx, NULL, &mcr_cmd);
                }
 
                if (target->type->mrc == NULL)
@@ -796,7 +794,13 @@ int target_init(struct command_context_s *cmd_ctx)
                        target->type->mrc = default_mrc;
                } else
                {
-                       register_jim(cmd_ctx, "mrc", jim_mcrmrc, "read coprocessor <cpnum> <op1> <op2> <CRn> <CRm>");
+                       const struct command_registration mrc_cmd = {
+                               .name = "mrc",
+                               .jim_handler = &jim_mcrmrc,
+                               .help = "read coprocessor",
+                               .usage = "<cpnum> <op1> <op2> <CRn> <CRm>",
+                       };
+                       register_command(cmd_ctx, NULL, &mrc_cmd);
                }
 
 
@@ -870,7 +874,7 @@ int target_init(struct command_context_s *cmd_ctx)
        return ERROR_OK;
 }
 
-int target_register_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv)
+int target_register_event_callback(int (*callback)(struct target *target, enum target_event event, void *priv), void *priv)
 {
        struct target_event_callback **callbacks_p = &target_event_callbacks;
 
@@ -932,7 +936,7 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int
        return ERROR_OK;
 }
 
-int target_unregister_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv)
+int target_unregister_event_callback(int (*callback)(struct target *target, enum target_event event, void *priv), void *priv)
 {
        struct target_event_callback **p = &target_event_callbacks;
        struct target_event_callback *c = target_event_callbacks;
@@ -986,7 +990,7 @@ int target_unregister_timer_callback(int (*callback)(void *priv), void *priv)
        return ERROR_OK;
 }
 
-int target_call_event_callbacks(target_t *target, enum target_event event)
+int target_call_event_callbacks(struct target *target, enum target_event event)
 {
        struct target_event_callback *callback = target_event_callbacks;
        struct target_event_callback *next_callback;
@@ -1082,7 +1086,7 @@ int target_call_timer_callbacks_now(void)
        return target_call_timer_callbacks_check_time(0);
 }
 
-int target_alloc_working_area(struct target_s *target, uint32_t size, struct working_area **area)
+int target_alloc_working_area(struct target *target, uint32_t size, struct working_area **area)
 {
        struct working_area *c = target->working_areas;
        struct working_area *new_wa = NULL;
@@ -1202,7 +1206,7 @@ int target_alloc_working_area(struct target_s *target, uint32_t size, struct wor
        return ERROR_OK;
 }
 
-int target_free_working_area_restore(struct target_s *target, struct working_area *area, int restore)
+int target_free_working_area_restore(struct target *target, struct working_area *area, int restore)
 {
        if (area->free)
                return ERROR_OK;
@@ -1223,7 +1227,7 @@ int target_free_working_area_restore(struct target_s *target, struct working_are
        return ERROR_OK;
 }
 
-int target_free_working_area(struct target_s *target, struct working_area *area)
+int target_free_working_area(struct target *target, struct working_area *area)
 {
        return target_free_working_area_restore(target, area, 1);
 }
@@ -1231,7 +1235,7 @@ int target_free_working_area(struct target_s *target, struct working_area *area)
 /* free resources and restore memory, if restoring memory fails,
  * free up resources anyway
  */
-void target_free_all_working_areas_restore(struct target_s *target, int restore)
+void target_free_all_working_areas_restore(struct target *target, int restore)
 {
        struct working_area *c = target->working_areas;
 
@@ -1251,12 +1255,12 @@ void target_free_all_working_areas_restore(struct target_s *target, int restore)
        target->working_areas = NULL;
 }
 
-void target_free_all_working_areas(struct target_s *target)
+void target_free_all_working_areas(struct target *target)
 {
        target_free_all_working_areas_restore(target, 1);
 }
 
-int target_arch_state(struct target_s *target)
+int target_arch_state(struct target *target)
 {
        int retval;
        if (target == NULL)
@@ -1278,7 +1282,7 @@ int target_arch_state(struct target_s *target)
  * mode respectively, otherwise data is handled as quickly as
  * possible
  */
-int target_write_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer)
+int target_write_buffer(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer)
 {
        int retval;
        LOG_DEBUG("writing buffer of %i byte at 0x%8.8x",
@@ -1360,7 +1364,7 @@ int target_write_buffer(struct target_s *target, uint32_t address, uint32_t size
  * mode respectively, otherwise data is handled as quickly as
  * possible
  */
-int target_read_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer)
+int target_read_buffer(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer)
 {
        int retval;
        LOG_DEBUG("reading buffer of %i byte at 0x%8.8x",
@@ -1441,7 +1445,7 @@ int target_read_buffer(struct target_s *target, uint32_t address, uint32_t size,
        return ERROR_OK;
 }
 
-int target_checksum_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t* crc)
+int target_checksum_memory(struct target *target, uint32_t address, uint32_t size, uint32_t* crc)
 {
        uint8_t *buffer;
        int retval;
@@ -1486,7 +1490,7 @@ int target_checksum_memory(struct target_s *target, uint32_t address, uint32_t s
        return retval;
 }
 
-int target_blank_check_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t* blank)
+int target_blank_check_memory(struct target *target, uint32_t address, uint32_t size, uint32_t* blank)
 {
        int retval;
        if (!target_was_examined(target))
@@ -1503,7 +1507,7 @@ int target_blank_check_memory(struct target_s *target, uint32_t address, uint32_
        return retval;
 }
 
-int target_read_u32(struct target_s *target, uint32_t address, uint32_t *value)
+int target_read_u32(struct target *target, uint32_t address, uint32_t *value)
 {
        uint8_t value_buf[4];
        if (!target_was_examined(target))
@@ -1531,7 +1535,7 @@ int target_read_u32(struct target_s *target, uint32_t address, uint32_t *value)
        return retval;
 }
 
-int target_read_u16(struct target_s *target, uint32_t address, uint16_t *value)
+int target_read_u16(struct target *target, uint32_t address, uint16_t *value)
 {
        uint8_t value_buf[2];
        if (!target_was_examined(target))
@@ -1559,7 +1563,7 @@ int target_read_u16(struct target_s *target, uint32_t address, uint16_t *value)
        return retval;
 }
 
-int target_read_u8(struct target_s *target, uint32_t address, uint8_t *value)
+int target_read_u8(struct target *target, uint32_t address, uint8_t *value)
 {
        int retval = target_read_memory(target, address, 1, 1, value);
        if (!target_was_examined(target))
@@ -1584,7 +1588,7 @@ int target_read_u8(struct target_s *target, uint32_t address, uint8_t *value)
        return retval;
 }
 
-int target_write_u32(struct target_s *target, uint32_t address, uint32_t value)
+int target_write_u32(struct target *target, uint32_t address, uint32_t value)
 {
        int retval;
        uint8_t value_buf[4];
@@ -1607,7 +1611,7 @@ int target_write_u32(struct target_s *target, uint32_t address, uint32_t value)
        return retval;
 }
 
-int target_write_u16(struct target_s *target, uint32_t address, uint16_t value)
+int target_write_u16(struct target *target, uint32_t address, uint16_t value)
 {
        int retval;
        uint8_t value_buf[2];
@@ -1630,7 +1634,7 @@ int target_write_u16(struct target_s *target, uint32_t address, uint16_t value)
        return retval;
 }
 
-int target_write_u8(struct target_s *target, uint32_t address, uint8_t value)
+int target_write_u8(struct target *target, uint32_t address, uint8_t value)
 {
        int retval;
        if (!target_was_examined(target))
@@ -1652,30 +1656,30 @@ int target_write_u8(struct target_s *target, uint32_t address, uint8_t value)
 
 COMMAND_HANDLER(handle_targets_command)
 {
-       target_t *target = all_targets;
+       struct target *target = all_targets;
 
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               target = get_target(args[0]);
+               target = get_target(CMD_ARGV[0]);
                if (target == NULL) {
-                       command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0]);
+                       command_print(CMD_CTX,"Target: %s is unknown, try one of:\n", CMD_ARGV[0]);
                        goto DumpTargets;
                }
                if (!target->tap->enabled) {
-                       command_print(cmd_ctx,"Target: TAP %s is disabled, "
+                       command_print(CMD_CTX,"Target: TAP %s is disabled, "
                                        "can't be the current target\n",
                                        target->tap->dotted_name);
                        return ERROR_FAIL;
                }
 
-               cmd_ctx->current_target = target->target_number;
+               CMD_CTX->current_target = target->target_number;
                return ERROR_OK;
        }
 DumpTargets:
 
        target = all_targets;
-       command_print(cmd_ctx, "    TargetName         Type       Endian TapName            State       ");
-       command_print(cmd_ctx, "--  ------------------ ---------- ------ ------------------ ------------");
+       command_print(CMD_CTX, "    TargetName         Type       Endian TapName            State       ");
+       command_print(CMD_CTX, "--  ------------------ ---------- ------ ------------------ ------------");
        while (target)
        {
                const char *state;
@@ -1686,15 +1690,15 @@ DumpTargets:
                else
                        state = "tap-disabled";
 
-               if (cmd_ctx->current_target == target->target_number)
+               if (CMD_CTX->current_target == target->target_number)
                        marker = '*';
 
                /* keep columns lined up to match the headers above */
-               command_print(cmd_ctx, "%2d%c %-18s %-10s %-6s %-18s %s",
+               command_print(CMD_CTX, "%2d%c %-18s %-10s %-6s %-18s %s",
                                          target->target_number,
                                          marker,
                                          target->cmd_name,
-                                         target_get_name(target),
+                                         target_type_name(target),
                                          Jim_Nvp_value2name_simple(nvp_target_endian,
                                                                target->endianness)->name,
                                          target->tap->dotted_name,
@@ -1774,7 +1778,7 @@ static int sense_handler(void)
 }
 
 static void target_call_event_callbacks_all(enum target_event e) {
-       target_t *target;
+       struct target *target;
        target = all_targets;
        while (target) {
                target_call_event_callbacks(target, e);
@@ -1840,7 +1844,7 @@ int handle_target(void *priv)
        /* Poll targets for state changes unless that's globally disabled.
         * Skip targets that are currently disabled.
         */
-       for (target_t *target = all_targets;
+       for (struct target *target = all_targets;
                        is_jtag_poll_safe() && target;
                        target = target->next)
        {
@@ -1864,26 +1868,26 @@ int handle_target(void *priv)
 
 COMMAND_HANDLER(handle_reg_command)
 {
-       target_t *target;
-       reg_t *reg = NULL;
-       int count = 0;
+       struct target *target;
+       struct reg *reg = NULL;
+       unsigned count = 0;
        char *value;
 
        LOG_DEBUG("-");
 
-       target = get_current_target(cmd_ctx);
+       target = get_current_target(CMD_CTX);
 
        /* list all available registers for the current target */
-       if (argc == 0)
+       if (CMD_ARGC == 0)
        {
                struct reg_cache *cache = target->reg_cache;
 
                count = 0;
                while (cache)
                {
-                       int i;
+                       unsigned i;
 
-                       command_print(cmd_ctx, "===== %s", cache->name);
+                       command_print(CMD_CTX, "===== %s", cache->name);
 
                        for (i = 0, reg = cache->reg_list;
                                        i < cache->num_regs;
@@ -1893,7 +1897,7 @@ COMMAND_HANDLER(handle_reg_command)
                                if (reg->valid) {
                                        value = buf_to_str(reg->value,
                                                        reg->size, 16);
-                                       command_print(cmd_ctx,
+                                       command_print(CMD_CTX,
                                                        "(%i) %s (/%" PRIu32 "): 0x%s%s",
                                                        count, reg->name,
                                                        reg->size, value,
@@ -1902,7 +1906,7 @@ COMMAND_HANDLER(handle_reg_command)
                                                                : "");
                                        free(value);
                                } else {
-                                       command_print(cmd_ctx, "(%i) %s (/%" PRIu32 ")",
+                                       command_print(CMD_CTX, "(%i) %s (/%" PRIu32 ")",
                                                          count, reg->name,
                                                          reg->size) ;
                                }
@@ -1914,19 +1918,19 @@ COMMAND_HANDLER(handle_reg_command)
        }
 
        /* access a single register by its ordinal number */
-       if ((args[0][0] >= '0') && (args[0][0] <= '9'))
+       if ((CMD_ARGV[0][0] >= '0') && (CMD_ARGV[0][0] <= '9'))
        {
                unsigned num;
-               COMMAND_PARSE_NUMBER(uint, args[0], num);
+               COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], num);
 
                struct reg_cache *cache = target->reg_cache;
                count = 0;
                while (cache)
                {
-                       int i;
+                       unsigned i;
                        for (i = 0; i < cache->num_regs; i++)
                        {
-                               if (count++ == (int)num)
+                               if (count++ == num)
                                {
                                        reg = &cache->reg_list[i];
                                        break;
@@ -1939,48 +1943,46 @@ COMMAND_HANDLER(handle_reg_command)
 
                if (!reg)
                {
-                       command_print(cmd_ctx, "%i is out of bounds, the current target has only %i registers (0 - %i)", num, count, count - 1);
+                       command_print(CMD_CTX, "%i is out of bounds, the current target has only %i registers (0 - %i)", num, count, count - 1);
                        return ERROR_OK;
                }
        } else /* access a single register by its name */
        {
-               reg = register_get_by_name(target->reg_cache, args[0], 1);
+               reg = register_get_by_name(target->reg_cache, CMD_ARGV[0], 1);
 
                if (!reg)
                {
-                       command_print(cmd_ctx, "register %s not found in current target", args[0]);
+                       command_print(CMD_CTX, "register %s not found in current target", CMD_ARGV[0]);
                        return ERROR_OK;
                }
        }
 
        /* display a register */
-       if ((argc == 1) || ((argc == 2) && !((args[1][0] >= '0') && (args[1][0] <= '9'))))
+       if ((CMD_ARGC == 1) || ((CMD_ARGC == 2) && !((CMD_ARGV[1][0] >= '0') && (CMD_ARGV[1][0] <= '9'))))
        {
-               if ((argc == 2) && (strcmp(args[1], "force") == 0))
+               if ((CMD_ARGC == 2) && (strcmp(CMD_ARGV[1], "force") == 0))
                        reg->valid = 0;
 
                if (reg->valid == 0)
                {
-                       struct reg_arch_type *arch_type = register_get_arch_type(reg->arch_type);
-                       arch_type->get(reg);
+                       reg->type->get(reg);
                }
                value = buf_to_str(reg->value, reg->size, 16);
-               command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
+               command_print(CMD_CTX, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
                free(value);
                return ERROR_OK;
        }
 
        /* set register value */
-       if (argc == 2)
+       if (CMD_ARGC == 2)
        {
-               uint8_t *buf = malloc(CEIL(reg->size, 8));
-               str_to_buf(args[1], strlen(args[1]), buf, reg->size, 0);
+               uint8_t *buf = malloc(DIV_ROUND_UP(reg->size, 8));
+               str_to_buf(CMD_ARGV[1], strlen(CMD_ARGV[1]), buf, reg->size, 0);
 
-               struct reg_arch_type *arch_type = register_get_arch_type(reg->arch_type);
-               arch_type->set(reg, buf);
+               reg->type->set(reg, buf);
 
                value = buf_to_str(reg->value, reg->size, 16);
-               command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
+               command_print(CMD_CTX, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
                free(value);
 
                free(buf);
@@ -1988,7 +1990,7 @@ COMMAND_HANDLER(handle_reg_command)
                return ERROR_OK;
        }
 
-       command_print(cmd_ctx, "usage: reg <#|name> [value]");
+       command_print(CMD_CTX, "usage: reg <#|name> [value]");
 
        return ERROR_OK;
 }
@@ -1996,13 +1998,13 @@ COMMAND_HANDLER(handle_reg_command)
 COMMAND_HANDLER(handle_poll_command)
 {
        int retval = ERROR_OK;
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
-       if (argc == 0)
+       if (CMD_ARGC == 0)
        {
-               command_print(cmd_ctx, "background polling: %s",
+               command_print(CMD_CTX, "background polling: %s",
                                jtag_poll_get_enabled() ? "on" : "off");
-               command_print(cmd_ctx, "TAP: %s (%s)",
+               command_print(CMD_CTX, "TAP: %s (%s)",
                                target->tap->dotted_name,
                                target->tap->enabled ? "enabled" : "disabled");
                if (!target->tap->enabled)
@@ -2011,23 +2013,14 @@ COMMAND_HANDLER(handle_poll_command)
                        return retval;
                if ((retval = target_arch_state(target)) != ERROR_OK)
                        return retval;
-
        }
-       else if (argc == 1)
+       else if (CMD_ARGC == 1)
        {
-               if (strcmp(args[0], "on") == 0)
-               {
-                       jtag_poll_set_enabled(true);
-               }
-               else if (strcmp(args[0], "off") == 0)
-               {
-                       jtag_poll_set_enabled(false);
-               }
-               else
-               {
-                       command_print(cmd_ctx, "arg is \"on\" or \"off\"");
-               }
-       } else
+               bool enable;
+               COMMAND_PARSE_ON_OFF(CMD_ARGV[0], enable);
+               jtag_poll_set_enabled(enable);
+       }
+       else
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
@@ -2037,23 +2030,23 @@ COMMAND_HANDLER(handle_poll_command)
 
 COMMAND_HANDLER(handle_wait_halt_command)
 {
-       if (argc > 1)
+       if (CMD_ARGC > 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        unsigned ms = 5000;
-       if (1 == argc)
+       if (1 == CMD_ARGC)
        {
-               int retval = parse_uint(args[0], &ms);
+               int retval = parse_uint(CMD_ARGV[0], &ms);
                if (ERROR_OK != retval)
                {
-                       command_print(cmd_ctx, "usage: %s [seconds]", CMD_NAME);
+                       command_print(CMD_CTX, "usage: %s [seconds]", CMD_NAME);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
                // convert seconds (given) to milliseconds (needed)
                ms *= 1000;
        }
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        return target_wait_state(target, TARGET_HALTED, ms);
 }
 
@@ -2063,7 +2056,7 @@ COMMAND_HANDLER(handle_wait_halt_command)
  *
  * After 500ms, keep_alive() is invoked
  */
-int target_wait_state(target_t *target, enum target_state state, int ms)
+int target_wait_state(struct target *target, enum target_state state, int ms)
 {
        int retval;
        long long then = 0, cur;
@@ -2106,15 +2099,15 @@ COMMAND_HANDLER(handle_halt_command)
 {
        LOG_DEBUG("-");
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        int retval = target_halt(target);
        if (ERROR_OK != retval)
                return retval;
 
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
                unsigned wait;
-               retval = parse_uint(args[0], &wait);
+               retval = parse_uint(CMD_ARGV[0], &wait);
                if (ERROR_OK != retval)
                        return ERROR_COMMAND_SYNTAX_ERROR;
                if (!wait)
@@ -2126,7 +2119,7 @@ COMMAND_HANDLER(handle_halt_command)
 
 COMMAND_HANDLER(handle_soft_reset_halt_command)
 {
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
        LOG_USER("requesting target halt and executing a soft reset");
 
@@ -2137,14 +2130,14 @@ COMMAND_HANDLER(handle_soft_reset_halt_command)
 
 COMMAND_HANDLER(handle_reset_command)
 {
-       if (argc > 1)
+       if (CMD_ARGC > 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        enum target_reset_mode reset_mode = RESET_RUN;
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
                const Jim_Nvp *n;
-               n = Jim_Nvp_name2value_simple(nvp_reset_modes, args[0]);
+               n = Jim_Nvp_name2value_simple(nvp_reset_modes, CMD_ARGV[0]);
                if ((n->name == NULL) || (n->value == RESET_UNKNOWN)) {
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
@@ -2152,26 +2145,26 @@ COMMAND_HANDLER(handle_reset_command)
        }
 
        /* reset *all* targets */
-       return target_process_reset(cmd_ctx, reset_mode);
+       return target_process_reset(CMD_CTX, reset_mode);
 }
 
 
 COMMAND_HANDLER(handle_resume_command)
 {
        int current = 1;
-       if (argc > 1)
+       if (CMD_ARGC > 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        target_handle_event(target, TARGET_EVENT_OLD_pre_resume);
 
-       /* with no args, resume from current pc, addr = 0,
-        * with one arguments, addr = args[0],
+       /* with no CMD_ARGV, resume from current pc, addr = 0,
+        * with one arguments, addr = CMD_ARGV[0],
         * handle breakpoints, not debugging */
        uint32_t addr = 0;
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               COMMAND_PARSE_NUMBER(u32, args[0], addr);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
                current = 0;
        }
 
@@ -2180,29 +2173,29 @@ COMMAND_HANDLER(handle_resume_command)
 
 COMMAND_HANDLER(handle_step_command)
 {
-       if (argc > 1)
+       if (CMD_ARGC > 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        LOG_DEBUG("-");
 
-       /* with no args, step from current pc, addr = 0,
-        * with one argument addr = args[0],
+       /* with no CMD_ARGV, step from current pc, addr = 0,
+        * with one argument addr = CMD_ARGV[0],
         * handle breakpoints, debugging */
        uint32_t addr = 0;
        int current_pc = 1;
-       if (argc == 1)
+       if (CMD_ARGC == 1)
        {
-               COMMAND_PARSE_NUMBER(u32, args[0], addr);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
                current_pc = 0;
        }
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
        return target->type->step(target, current_pc, addr, 1);
 }
 
-static void handle_md_output(struct command_context_s *cmd_ctx,
-               struct target_s *target, uint32_t address, unsigned size,
+static void handle_md_output(struct command_context *cmd_ctx,
+               struct target *target, uint32_t address, unsigned size,
                unsigned count, const uint8_t *buffer)
 {
        const unsigned line_bytecnt = 32;
@@ -2252,7 +2245,7 @@ static void handle_md_output(struct command_context_s *cmd_ctx,
 
 COMMAND_HANDLER(handle_md_command)
 {
-       if (argc < 1)
+       if (CMD_ARGC < 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        unsigned size = 0;
@@ -2263,36 +2256,36 @@ COMMAND_HANDLER(handle_md_command)
        default: return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       bool physical=strcmp(args[0], "phys")==0;
-       int (*fn)(struct target_s *target,
+       bool physical=strcmp(CMD_ARGV[0], "phys")==0;
+       int (*fn)(struct target *target,
                        uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
        if (physical)
        {
-               argc--;
-               args++;
+               CMD_ARGC--;
+               CMD_ARGV++;
                fn=target_read_phys_memory;
        } else
        {
                fn=target_read_memory;
        }
-       if ((argc < 1) || (argc > 2))
+       if ((CMD_ARGC < 1) || (CMD_ARGC > 2))
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
        uint32_t address;
-       COMMAND_PARSE_NUMBER(u32, args[0], address);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], address);
 
        unsigned count = 1;
-       if (argc == 2)
-               COMMAND_PARSE_NUMBER(uint, args[1], count);
+       if (CMD_ARGC == 2)
+               COMMAND_PARSE_NUMBER(uint, CMD_ARGV[1], count);
 
        uint8_t *buffer = calloc(count, size);
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        int retval = fn(target, address, size, count, buffer);
        if (ERROR_OK == retval)
-               handle_md_output(cmd_ctx, target, address, size, count, buffer);
+               handle_md_output(CMD_CTX, target, address, size, count, buffer);
 
        free(buffer);
 
@@ -2301,36 +2294,36 @@ COMMAND_HANDLER(handle_md_command)
 
 COMMAND_HANDLER(handle_mw_command)
 {
-       if (argc < 2)
+       if (CMD_ARGC < 2)
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
-       bool physical=strcmp(args[0], "phys")==0;
-       int (*fn)(struct target_s *target,
+       bool physical=strcmp(CMD_ARGV[0], "phys")==0;
+       int (*fn)(struct target *target,
                        uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
        if (physical)
        {
-               argc--;
-               args++;
+               CMD_ARGC--;
+               CMD_ARGV++;
                fn=target_write_phys_memory;
        } else
        {
                fn=target_write_memory;
        }
-       if ((argc < 2) || (argc > 3))
+       if ((CMD_ARGC < 2) || (CMD_ARGC > 3))
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        uint32_t address;
-       COMMAND_PARSE_NUMBER(u32, args[0], address);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], address);
 
        uint32_t value;
-       COMMAND_PARSE_NUMBER(u32, args[1], value);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
 
        unsigned count = 1;
-       if (argc == 3)
-               COMMAND_PARSE_NUMBER(uint, args[2], count);
+       if (CMD_ARGC == 3)
+               COMMAND_PARSE_NUMBER(uint, CMD_ARGV[2], count);
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        unsigned wordsize;
        uint8_t value_buf[4];
        switch (CMD_NAME[2])
@@ -2363,18 +2356,18 @@ COMMAND_HANDLER(handle_mw_command)
 
 }
 
-static COMMAND_HELPER(parse_load_image_command_args, image_t *image,
+static COMMAND_HELPER(parse_load_image_command_CMD_ARGV, struct image *image,
                uint32_t *min_address, uint32_t *max_address)
 {
-       if (argc < 1 || argc > 5)
+       if (CMD_ARGC < 1 || CMD_ARGC > 5)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        /* a base address isn't always necessary,
         * default to 0x0 (i.e. don't relocate) */
-       if (argc >= 2)
+       if (CMD_ARGC >= 2)
        {
                uint32_t addr;
-               COMMAND_PARSE_NUMBER(u32, args[1], addr);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], addr);
                image->base_address = addr;
                image->base_address_set = 1;
        }
@@ -2383,13 +2376,13 @@ static COMMAND_HELPER(parse_load_image_command_args, image_t *image,
 
        image->start_address_set = 0;
 
-       if (argc >= 4)
+       if (CMD_ARGC >= 4)
        {
-               COMMAND_PARSE_NUMBER(u32, args[3], *min_address);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[3], *min_address);
        }
-       if (argc == 5)
+       if (CMD_ARGC == 5)
        {
-               COMMAND_PARSE_NUMBER(u32, args[4], *max_address);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[4], *max_address);
                // use size (given) to find max (required)
                *max_address += *min_address;
        }
@@ -2403,24 +2396,24 @@ static COMMAND_HELPER(parse_load_image_command_args, image_t *image,
 COMMAND_HANDLER(handle_load_image_command)
 {
        uint8_t *buffer;
-       uint32_t buf_cnt;
+       size_t buf_cnt;
        uint32_t image_size;
        uint32_t min_address = 0;
        uint32_t max_address = 0xffffffff;
        int i;
-       image_t image;
+       struct image image;
 
-       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_args,
+       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_CMD_ARGV,
                        &image, &min_address, &max_address);
        if (ERROR_OK != retval)
                return retval;
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
        struct duration bench;
        duration_start(&bench);
 
-       if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
+       if (image_open(&image, CMD_ARGV[0], (CMD_ARGC >= 3) ? CMD_ARGV[2] : NULL) != ERROR_OK)
        {
                return ERROR_OK;
        }
@@ -2432,7 +2425,7 @@ COMMAND_HANDLER(handle_load_image_command)
                buffer = malloc(image.sections[i].size);
                if (buffer == NULL)
                {
-                       command_print(cmd_ctx,
+                       command_print(CMD_CTX,
                                                  "error allocating buffer for section (%d bytes)",
                                                  (int)(image.sections[i].size));
                        break;
@@ -2470,7 +2463,7 @@ COMMAND_HANDLER(handle_load_image_command)
                                break;
                        }
                        image_size += length;
-                       command_print(cmd_ctx, "%u bytes written at address 0x%8.8" PRIx32 "",
+                       command_print(CMD_CTX, "%u bytes written at address 0x%8.8" PRIx32 "",
                                                  (unsigned int)length,
                                                  image.sections[i].base_address + offset);
                }
@@ -2480,7 +2473,7 @@ COMMAND_HANDLER(handle_load_image_command)
 
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
-               command_print(cmd_ctx, "downloaded %" PRIu32 " bytes "
+               command_print(CMD_CTX, "downloaded %" PRIu32 " bytes "
                                "in %fs (%0.3f kb/s)", image_size,
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));
        }
@@ -2499,20 +2492,20 @@ COMMAND_HANDLER(handle_dump_image_command)
        int retvaltemp;
 
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
-       if (argc != 3)
+       if (CMD_ARGC != 3)
        {
-               command_print(cmd_ctx, "usage: dump_image <filename> <address> <size>");
+               command_print(CMD_CTX, "usage: dump_image <filename> <address> <size>");
                return ERROR_OK;
        }
 
        uint32_t address;
-       COMMAND_PARSE_NUMBER(u32, args[1], address);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], address);
        uint32_t size;
-       COMMAND_PARSE_NUMBER(u32, args[2], size);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], size);
 
-       if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
+       if (fileio_open(&fileio, CMD_ARGV[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
        {
                return ERROR_OK;
        }
@@ -2523,7 +2516,7 @@ COMMAND_HANDLER(handle_dump_image_command)
        int retval = ERROR_OK;
        while (size > 0)
        {
-               uint32_t size_written;
+               size_t size_written;
                uint32_t this_run_size = (size > 560) ? 560 : size;
                retval = target_read_buffer(target, address, this_run_size, buffer);
                if (retval != ERROR_OK)
@@ -2546,8 +2539,8 @@ COMMAND_HANDLER(handle_dump_image_command)
 
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
-               command_print(cmd_ctx,
-                               "dumped %lld bytes in %fs (%0.3f kb/s)", fileio.size,
+               command_print(CMD_CTX,
+                               "dumped %zu bytes in %fs (%0.3f kb/s)", fileio.size,
                                duration_elapsed(&bench), duration_kbps(&bench, fileio.size));
        }
 
@@ -2557,18 +2550,18 @@ COMMAND_HANDLER(handle_dump_image_command)
 static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
 {
        uint8_t *buffer;
-       uint32_t buf_cnt;
+       size_t buf_cnt;
        uint32_t image_size;
        int i;
        int retval;
        uint32_t checksum = 0;
        uint32_t mem_checksum = 0;
 
-       image_t image;
+       struct image image;
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
@@ -2582,10 +2575,10 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
        struct duration bench;
        duration_start(&bench);
 
-       if (argc >= 2)
+       if (CMD_ARGC >= 2)
        {
                uint32_t addr;
-               COMMAND_PARSE_NUMBER(u32, args[1], addr);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], addr);
                image.base_address = addr;
                image.base_address_set = 1;
        }
@@ -2597,7 +2590,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
 
        image.start_address_set = 0;
 
-       if ((retval = image_open(&image, args[0], (argc == 3) ? args[2] : NULL)) != ERROR_OK)
+       if ((retval = image_open(&image, CMD_ARGV[0], (CMD_ARGC == 3) ? CMD_ARGV[2] : NULL)) != ERROR_OK)
        {
                return retval;
        }
@@ -2609,7 +2602,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
                buffer = malloc(image.sections[i].size);
                if (buffer == NULL)
                {
-                       command_print(cmd_ctx,
+                       command_print(CMD_CTX,
                                                  "error allocating buffer for section (%d bytes)",
                                                  (int)(image.sections[i].size));
                        break;
@@ -2637,7 +2630,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
                                /* failed crc checksum, fall back to a binary compare */
                                uint8_t *data;
 
-                               command_print(cmd_ctx, "checksum mismatch - attempting binary compare");
+                               command_print(CMD_CTX, "checksum mismatch - attempting binary compare");
 
                                data = (uint8_t*)malloc(buf_cnt);
 
@@ -2657,7 +2650,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
                                        {
                                                if (data[t] != buffer[t])
                                                {
-                                                       command_print(cmd_ctx,
+                                                       command_print(CMD_CTX,
                                                                                  "Verify operation failed address 0x%08x. Was 0x%02x instead of 0x%02x\n",
                                                                                  (unsigned)(t + image.sections[i].base_address),
                                                                                  data[t],
@@ -2678,7 +2671,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
                        }
                } else
                {
-                       command_print(cmd_ctx, "address 0x%08" PRIx32 " length 0x%08" PRIx32 "",
+                       command_print(CMD_CTX, "address 0x%08" PRIx32 " length 0x%08zx",
                                                  image.sections[i].base_address,
                                                  buf_cnt);
                }
@@ -2689,7 +2682,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
 done:
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
-               command_print(cmd_ctx, "verified %" PRIu32 " bytes "
+               command_print(CMD_CTX, "verified %" PRIu32 " bytes "
                                "in %fs (%0.3f kb/s)", image_size,
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));
        }
@@ -2709,9 +2702,9 @@ COMMAND_HANDLER(handle_test_image_command)
        return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 0);
 }
 
-static int handle_bp_command_list(struct command_context_s *cmd_ctx)
+static int handle_bp_command_list(struct command_context *cmd_ctx)
 {
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(cmd_ctx);
        struct breakpoint *breakpoint = target->breakpoints;
        while (breakpoint)
        {
@@ -2737,10 +2730,10 @@ static int handle_bp_command_list(struct command_context_s *cmd_ctx)
        return ERROR_OK;
 }
 
-static int handle_bp_command_set(struct command_context_s *cmd_ctx,
+static int handle_bp_command_set(struct command_context *cmd_ctx,
                uint32_t addr, uint32_t length, int hw)
 {
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(cmd_ctx);
        int retval = breakpoint_add(target, addr, length, hw);
        if (ERROR_OK == retval)
                command_print(cmd_ctx, "breakpoint set at 0x%8.8" PRIx32 "", addr);
@@ -2751,41 +2744,41 @@ static int handle_bp_command_set(struct command_context_s *cmd_ctx,
 
 COMMAND_HANDLER(handle_bp_command)
 {
-       if (argc == 0)
-               return handle_bp_command_list(cmd_ctx);
+       if (CMD_ARGC == 0)
+               return handle_bp_command_list(CMD_CTX);
 
-       if (argc < 2 || argc > 3)
+       if (CMD_ARGC < 2 || CMD_ARGC > 3)
        {
-               command_print(cmd_ctx, "usage: bp <address> <length> ['hw']");
+               command_print(CMD_CTX, "usage: bp <address> <length> ['hw']");
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
        uint32_t addr;
-       COMMAND_PARSE_NUMBER(u32, args[0], addr);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
        uint32_t length;
-       COMMAND_PARSE_NUMBER(u32, args[1], length);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], length);
 
        int hw = BKPT_SOFT;
-       if (argc == 3)
+       if (CMD_ARGC == 3)
        {
-               if (strcmp(args[2], "hw") == 0)
+               if (strcmp(CMD_ARGV[2], "hw") == 0)
                        hw = BKPT_HARD;
                else
                        return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       return handle_bp_command_set(cmd_ctx, addr, length, hw);
+       return handle_bp_command_set(CMD_CTX, addr, length, hw);
 }
 
 COMMAND_HANDLER(handle_rbp_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        uint32_t addr;
-       COMMAND_PARSE_NUMBER(u32, args[0], addr);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        breakpoint_remove(target, addr);
 
        return ERROR_OK;
@@ -2793,21 +2786,23 @@ COMMAND_HANDLER(handle_rbp_command)
 
 COMMAND_HANDLER(handle_wp_command)
 {
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
 
-       if (argc == 0)
+       if (CMD_ARGC == 0)
        {
                struct watchpoint *watchpoint = target->watchpoints;
 
                while (watchpoint)
                {
-                       command_print(cmd_ctx,
-                                                 "address: 0x%8.8" PRIx32 ", len: 0x%8.8x, r/w/a: %i, value: 0x%8.8" PRIx32 ", mask: 0x%8.8" PRIx32 "",
-                                                 watchpoint->address,
-                                                 watchpoint->length,
-                                                 (int)(watchpoint->rw),
-                                                 watchpoint->value,
-                                                 watchpoint->mask);
+                       command_print(CMD_CTX, "address: 0x%8.8" PRIx32
+                                       ", len: 0x%8.8" PRIx32
+                                       ", r/w/a: %i, value: 0x%8.8" PRIx32
+                                       ", mask: 0x%8.8" PRIx32,
+                                       watchpoint->address,
+                                       watchpoint->length,
+                                       (int)watchpoint->rw,
+                                       watchpoint->value,
+                                       watchpoint->mask);
                        watchpoint = watchpoint->next;
                }
                return ERROR_OK;
@@ -2819,16 +2814,16 @@ COMMAND_HANDLER(handle_wp_command)
        uint32_t data_value = 0x0;
        uint32_t data_mask = 0xffffffff;
 
-       switch (argc)
+       switch (CMD_ARGC)
        {
        case 5:
-               COMMAND_PARSE_NUMBER(u32, args[4], data_mask);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[4], data_mask);
                // fall through
        case 4:
-               COMMAND_PARSE_NUMBER(u32, args[3], data_value);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[3], data_value);
                // fall through
        case 3:
-               switch (args[2][0])
+               switch (CMD_ARGV[2][0])
                {
                case 'r':
                        type = WPT_READ;
@@ -2840,17 +2835,17 @@ COMMAND_HANDLER(handle_wp_command)
                        type = WPT_ACCESS;
                        break;
                default:
-                       LOG_ERROR("invalid watchpoint mode ('%c')", args[2][0]);
+                       LOG_ERROR("invalid watchpoint mode ('%c')", CMD_ARGV[2][0]);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
                // fall through
        case 2:
-               COMMAND_PARSE_NUMBER(u32, args[1], length);
-               COMMAND_PARSE_NUMBER(u32, args[0], addr);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], length);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
                break;
 
        default:
-               command_print(cmd_ctx, "usage: wp [address length "
+               command_print(CMD_CTX, "usage: wp [address length "
                                "[(r|w|a) [value [mask]]]]");
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
@@ -2865,13 +2860,13 @@ COMMAND_HANDLER(handle_wp_command)
 
 COMMAND_HANDLER(handle_rwp_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        uint32_t addr;
-       COMMAND_PARSE_NUMBER(u32, args[0], addr);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], addr);
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        watchpoint_remove(target, addr);
 
        return ERROR_OK;
@@ -2886,17 +2881,17 @@ COMMAND_HANDLER(handle_rwp_command)
  */
 COMMAND_HANDLER(handle_virt2phys_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        uint32_t va;
-       COMMAND_PARSE_NUMBER(u32, args[0], va);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], va);
        uint32_t pa;
 
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        int retval = target->type->virt2phys(target, va, &pa);
        if (retval == ERROR_OK)
-               command_print(cmd_ctx, "Physical address 0x%08" PRIx32 "", pa);
+               command_print(CMD_CTX, "Physical address 0x%08" PRIx32 "", pa);
 
        return retval;
 }
@@ -3020,20 +3015,20 @@ static void writeGmon(uint32_t *samples, uint32_t sampleNum, const char *filenam
 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
 COMMAND_HANDLER(handle_profile_command)
 {
-       target_t *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        struct timeval timeout, now;
 
        gettimeofday(&timeout, NULL);
-       if (argc != 2)
+       if (CMD_ARGC != 2)
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
        unsigned offset;
-       COMMAND_PARSE_NUMBER(uint, args[0], offset);
+       COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], offset);
 
        timeval_add_time(&timeout, offset, 0);
 
-       command_print(cmd_ctx, "Starting profiling. Halting and resuming the target as often as we can...");
+       command_print(CMD_CTX, "Starting profiling. Halting and resuming the target as often as we can...");
 
        static const int maxSample = 10000;
        uint32_t *samples = malloc(sizeof(uint32_t)*maxSample);
@@ -3042,7 +3037,7 @@ COMMAND_HANDLER(handle_profile_command)
 
        int numSamples = 0;
        /* hopefully it is safe to cache! We want to stop/restart as quickly as possible. */
-       reg_t *reg = register_get_by_name(target->reg_cache, "pc", 1);
+       struct reg *reg = register_get_by_name(target->reg_cache, "pc", 1);
 
        for (;;)
        {
@@ -3065,7 +3060,7 @@ COMMAND_HANDLER(handle_profile_command)
                        }
                } else
                {
-                       command_print(cmd_ctx, "Target not halted or running");
+                       command_print(CMD_CTX, "Target not halted or running");
                        retval = ERROR_OK;
                        break;
                }
@@ -3077,7 +3072,7 @@ COMMAND_HANDLER(handle_profile_command)
                gettimeofday(&now, NULL);
                if ((numSamples >= maxSample) || ((now.tv_sec >= timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
                {
-                       command_print(cmd_ctx, "Profiling completed. %d samples.", numSamples);
+                       command_print(CMD_CTX, "Profiling completed. %d samples.", numSamples);
                        if ((retval = target_poll(target)) != ERROR_OK)
                        {
                                free(samples);
@@ -3092,8 +3087,8 @@ COMMAND_HANDLER(handle_profile_command)
                                free(samples);
                                return retval;
                        }
-                       writeGmon(samples, numSamples, args[1]);
-                       command_print(cmd_ctx, "Wrote %s", args[1]);
+                       writeGmon(samples, numSamples, CMD_ARGV[1]);
+                       command_print(CMD_CTX, "Wrote %s", CMD_ARGV[1]);
                        break;
                }
        }
@@ -3132,8 +3127,8 @@ static int new_int_array_element(Jim_Interp * interp, const char *varname, int i
 
 static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
-       command_context_t *context;
-       target_t *target;
+       struct command_context *context;
+       struct target *target;
 
        context = Jim_GetAssocData(interp, "context");
        if (context == NULL)
@@ -3151,7 +3146,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
        return  target_mem2array(interp, target, argc-1, argv + 1);
 }
 
-static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
+static int target_mem2array(Jim_Interp *interp, struct target *target, int argc, Jim_Obj *const *argv)
 {
        long l;
        uint32_t width;
@@ -3160,7 +3155,6 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_
        uint32_t count;
        uint32_t v;
        const char *varname;
-       uint8_t buffer[4096];
        int  n, e, retval;
        uint32_t i;
 
@@ -3242,14 +3236,20 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_
 
        /* index counter */
        n = 0;
+
+       size_t buffersize = 4096;
+       uint8_t *buffer = malloc(buffersize);
+       if (buffer == NULL)
+               return JIM_ERR;
+
        /* assume ok */
        e = JIM_OK;
        while (len) {
                /* Slurp... in buffer size chunks */
 
                count = len; /* in objects.. */
-               if (count > (sizeof(buffer)/width)) {
-                       count = (sizeof(buffer)/width);
+               if (count > (buffersize/width)) {
+                       count = (buffersize/width);
                }
 
                retval = target_read_memory(target, addr, width, count, buffer);
@@ -3283,6 +3283,8 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_
                }
        }
 
+       free(buffer);
+
        Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 
        return JIM_OK;
@@ -3321,8 +3323,8 @@ static int get_int_array_element(Jim_Interp * interp, const char *varname, int i
 
 static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
-       command_context_t *context;
-       target_t *target;
+       struct command_context *context;
+       struct target *target;
 
        context = Jim_GetAssocData(interp, "context");
        if (context == NULL) {
@@ -3337,7 +3339,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 
        return target_array2mem(interp,target, argc-1, argv + 1);
 }
-static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
+static int target_array2mem(Jim_Interp *interp, struct target *target, int argc, Jim_Obj *const *argv)
 {
        long l;
        uint32_t width;
@@ -3346,7 +3348,6 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_
        uint32_t count;
        uint32_t v;
        const char *varname;
-       uint8_t buffer[4096];
        int  n, e, retval;
        uint32_t i;
 
@@ -3430,12 +3431,18 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_
        n = 0;
        /* assume ok */
        e = JIM_OK;
+
+       size_t buffersize = 4096;
+       uint8_t *buffer = malloc(buffersize);
+       if (buffer == NULL)
+               return JIM_ERR;
+
        while (len) {
                /* Slurp... in buffer size chunks */
 
                count = len; /* in objects.. */
-               if (count > (sizeof(buffer)/width)) {
-                       count = (sizeof(buffer)/width);
+               if (count > (buffersize/width)) {
+                       count = (buffersize/width);
                }
 
                v = 0; /* shut up gcc */
@@ -3469,6 +3476,8 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_
                }
        }
 
+       free(buffer);
+
        Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
 
        return JIM_OK;
@@ -3476,7 +3485,7 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_
 
 void target_all_handle_event(enum target_event e)
 {
-       target_t *target;
+       struct target *target;
 
        LOG_DEBUG("**all*targets: event: %d, %s",
                           (int)e,
@@ -3493,7 +3502,7 @@ void target_all_handle_event(enum target_event e)
 /* FIX? should we propagate errors here rather than printing them
  * and continuing?
  */
-void target_handle_event(target_t *target, enum target_event e)
+void target_handle_event(struct target *target, enum target_event e)
 {
        struct target_event_action *teap;
 
@@ -3502,7 +3511,7 @@ void target_handle_event(target_t *target, enum target_event e)
                        LOG_DEBUG("target: (%d) %s (%s) event: %d (%s) action: %s",
                                           target->target_number,
                                           target->cmd_name,
-                                          target_get_name(target),
+                                          target_type_name(target),
                                           e,
                                           Jim_Nvp_value2name_simple(nvp_target_event, e)->name,
                                           Jim_GetString(teap->body, NULL));
@@ -3540,7 +3549,7 @@ static Jim_Nvp nvp_config_opts[] = {
        { .name = NULL, .value = -1 }
 };
 
-static int target_configure(Jim_GetOptInfo *goi, target_t *target)
+static int target_configure(Jim_GetOptInfo *goi, struct target *target)
 {
        Jim_Nvp *n;
        Jim_Obj *o;
@@ -3576,16 +3585,20 @@ static int target_configure(Jim_GetOptInfo *goi, target_t *target)
                case TCFG_TYPE:
                        /* not setable */
                        if (goi->isconfigure) {
-                               Jim_SetResult_sprintf(goi->interp, "not setable: %s", n->name);
+                               Jim_SetResult_sprintf(goi->interp,
+                                               "not settable: %s", n->name);
                                return JIM_ERR;
                        } else {
                        no_params:
                                if (goi->argc != 0) {
-                                       Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "NO PARAMS");
+                                       Jim_WrongNumArgs(goi->interp,
+                                                       goi->argc, goi->argv,
+                                                       "NO PARAMS");
                                        return JIM_ERR;
                                }
                        }
-                       Jim_SetResultString(goi->interp, target_get_name(target), -1);
+                       Jim_SetResultString(goi->interp,
+                                       target_type_name(target), -1);
                        /* loop for more */
                        break;
                case TCFG_EVENT:
@@ -3821,8 +3834,8 @@ static int tcl_target_func(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
        int x,y,z;
        uint8_t  target_buf[32];
        Jim_Nvp *n;
-       target_t *target;
-       struct command_context_s *cmd_ctx;
+       struct target *target;
+       struct command_context *cmd_ctx;
        int e;
 
        enum {
@@ -4237,8 +4250,8 @@ static int target_create(Jim_GetOptInfo *goi)
        char *cp2;
        int e;
        int x;
-       target_t *target;
-       struct command_context_s *cmd_ctx;
+       struct target *target;
+       struct command_context *cmd_ctx;
 
        cmd_ctx = Jim_GetAssocData(goi->interp, "context");
        if (goi->argc < 3) {
@@ -4285,14 +4298,14 @@ static int target_create(Jim_GetOptInfo *goi)
        }
 
        /* Create it */
-       target = calloc(1,sizeof(target_t));
+       target = calloc(1,sizeof(struct target));
        /* set target number */
        target->target_number = new_target_number();
 
        /* allocate memory for each unique target type */
-       target->type = (target_type_t*)calloc(1,sizeof(target_type_t));
+       target->type = (struct target_type*)calloc(1,sizeof(struct target_type));
 
-       memcpy(target->type, target_types[x], sizeof(target_type_t));
+       memcpy(target->type, target_types[x], sizeof(struct target_type));
 
        /* will be set by "-endian" */
        target->endianness = TARGET_ENDIAN_UNKNOWN;
@@ -4354,9 +4367,14 @@ static int target_create(Jim_GetOptInfo *goi)
        if (!target->variant)
                target->variant = strdup("");
 
+       cp = Jim_GetString(new_cmd, NULL);
+       target->cmd_name = strdup(cp);
+
        /* create the target specific commands */
-       if (target->type->register_commands) {
-               (*(target->type->register_commands))(cmd_ctx);
+       if (target->type->commands) {
+               e = register_commands(cmd_ctx, NULL, target->type->commands);
+               if (ERROR_OK != e)
+                       LOG_ERROR("unable to register '%s' commands", cp);
        }
        if (target->type->target_create) {
                (*(target->type->target_create))(target, goi->interp);
@@ -4364,7 +4382,7 @@ static int target_create(Jim_GetOptInfo *goi)
 
        /* append to end of list */
        {
-               target_t **tpp;
+               struct target **tpp;
                tpp = &(all_targets);
                while (*tpp) {
                        tpp = &((*tpp)->next);
@@ -4372,26 +4390,23 @@ static int target_create(Jim_GetOptInfo *goi)
                *tpp = target;
        }
 
-       cp = Jim_GetString(new_cmd, NULL);
-       target->cmd_name = strdup(cp);
-
        /* now - create the new target name command */
-       e = Jim_CreateCommand(goi->interp,
-                                                  /* name */
-                                                  cp,
-                                                  tcl_target_func, /* C function */
-                                                  target, /* private data */
-                                                  NULL); /* no del proc */
-
-       return e;
+       const struct command_registration target_command = {
+               .name = cp,
+               .jim_handler = &tcl_target_func,
+               .jim_handler_data = target,
+               .help = "target command group",
+       };
+       struct command *c = register_command(cmd_ctx, NULL, &target_command);
+       return (NULL != c) ? ERROR_OK : ERROR_FAIL;
 }
 
 static int jim_target(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
        int x,r,e;
        jim_wide w;
-       struct command_context_s *cmd_ctx;
-       target_t *target;
+       struct command_context *cmd_ctx;
+       struct target *target;
        Jim_GetOptInfo goi;
        enum tcmd {
                /* TG = target generic */
@@ -4539,15 +4554,15 @@ static void free_fastload(void)
 COMMAND_HANDLER(handle_fast_load_image_command)
 {
        uint8_t *buffer;
-       uint32_t buf_cnt;
+       size_t buf_cnt;
        uint32_t image_size;
        uint32_t min_address = 0;
        uint32_t max_address = 0xffffffff;
        int i;
 
-       image_t image;
+       struct image image;
 
-       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_args,
+       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_CMD_ARGV,
                        &image, &min_address, &max_address);
        if (ERROR_OK != retval)
                return retval;
@@ -4555,7 +4570,7 @@ COMMAND_HANDLER(handle_fast_load_image_command)
        struct duration bench;
        duration_start(&bench);
 
-       if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
+       if (image_open(&image, CMD_ARGV[0], (CMD_ARGC >= 3) ? CMD_ARGV[2] : NULL) != ERROR_OK)
        {
                return ERROR_OK;
        }
@@ -4575,7 +4590,7 @@ COMMAND_HANDLER(handle_fast_load_image_command)
                buffer = malloc(image.sections[i].size);
                if (buffer == NULL)
                {
-                       command_print(cmd_ctx, "error allocating buffer for section (%d bytes)",
+                       command_print(CMD_CTX, "error allocating buffer for section (%d bytes)",
                                                  (int)(image.sections[i].size));
                        break;
                }
@@ -4618,7 +4633,7 @@ COMMAND_HANDLER(handle_fast_load_image_command)
                        fastload[i].length = length;
 
                        image_size += length;
-                       command_print(cmd_ctx, "%u bytes written at address 0x%8.8x",
+                       command_print(CMD_CTX, "%u bytes written at address 0x%8.8x",
                                                  (unsigned int)length,
                                                  ((unsigned int)(image.sections[i].base_address + offset)));
                }
@@ -4628,11 +4643,11 @@ COMMAND_HANDLER(handle_fast_load_image_command)
 
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
-               command_print(cmd_ctx, "Loaded %" PRIu32 " bytes "
+               command_print(CMD_CTX, "Loaded %" PRIu32 " bytes "
                                "in %fs (%0.3f kb/s)", image_size, 
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));
 
-               command_print(cmd_ctx,
+               command_print(CMD_CTX,
                                "WARNING: image has not been loaded to target!"
                                "You can issue a 'fast_load' to finish loading.");
        }
@@ -4649,7 +4664,7 @@ COMMAND_HANDLER(handle_fast_load_image_command)
 
 COMMAND_HANDLER(handle_fast_load_command)
 {
-       if (argc > 0)
+       if (CMD_ARGC > 0)
                return ERROR_COMMAND_SYNTAX_ERROR;
        if (fastload == NULL)
        {
@@ -4662,8 +4677,8 @@ COMMAND_HANDLER(handle_fast_load_command)
        int retval = ERROR_OK;
        for (i = 0; i < fastload_num;i++)
        {
-               target_t *target = get_current_target(cmd_ctx);
-               command_print(cmd_ctx, "Write to 0x%08x, length 0x%08x",
+               struct target *target = get_current_target(CMD_CTX);
+               command_print(CMD_CTX, "Write to 0x%08x, length 0x%08x",
                                          (unsigned int)(fastload[i].address),
                                          (unsigned int)(fastload[i].length));
                if (retval == ERROR_OK)
@@ -4673,14 +4688,14 @@ COMMAND_HANDLER(handle_fast_load_command)
                size += fastload[i].length;
        }
        int after = timeval_ms();
-       command_print(cmd_ctx, "Loaded image %f kBytes/s", (float)(size/1024.0)/((float)(after-ms)/1000.0));
+       command_print(CMD_CTX, "Loaded image %f kBytes/s", (float)(size/1024.0)/((float)(after-ms)/1000.0));
        return retval;
 }
 
 static int jim_mcrmrc(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
-       command_context_t *context;
-       target_t *target;
+       struct command_context *context;
+       struct target *target;
        int retval;
 
        context = Jim_GetAssocData(interp, "context");
@@ -4763,20 +4778,233 @@ static int jim_mcrmrc(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
        return JIM_OK;
 }
 
-int target_register_commands(struct command_context_s *cmd_ctx)
-{
-
-       register_command(cmd_ctx, NULL, "targets",
-                       handle_targets_command, COMMAND_EXEC,
-                       "change current command line target (one parameter) "
-                       "or list targets (no parameters)");
-
-       register_jim(cmd_ctx, "target", jim_target, "configure target");
+static const struct command_registration target_command_handlers[] = {
+       {
+               .name = "targets",
+               .handler = &handle_targets_command,
+               .mode = COMMAND_ANY,
+               .help = "change current command line target (one parameter) "
+                       "or list targets (no parameters)",
+               .usage = "[<new_current_target>]",
+       },
+       {
+               .name = "target",
+               .mode = COMMAND_CONFIG,
+               .jim_handler = &jim_target,
+               .help = "configure target",
+       },
+       COMMAND_REGISTRATION_DONE
+};
 
-       return ERROR_OK;
+int target_register_commands(struct command_context *cmd_ctx)
+{
+       return register_commands(cmd_ctx, NULL, target_command_handlers);
 }
 
-int target_register_user_commands(struct command_context_s *cmd_ctx)
+static const struct command_registration target_exec_command_handlers[] = {
+       {
+               .name = "fast_load_image",
+               .handler = &handle_fast_load_image_command,
+               .mode = COMMAND_ANY,
+               .help = "Load image into memory, mainly for profiling purposes",
+               .usage = "<file> <address> ['bin'|'ihex'|'elf'|'s19'] "
+                       "[min_address] [max_length]",
+       },
+       {
+               .name = "fast_load",
+               .handler = &handle_fast_load_command,
+               .mode = COMMAND_ANY,
+               .help = "loads active fast load image to current target "
+                       "- mainly for profiling purposes",
+       },
+       {
+               .name = "profile",
+               .handler = &handle_profile_command,
+               .mode = COMMAND_EXEC,
+               .help = "profiling samples the CPU PC",
+       },
+       /** @todo don't register virt2phys() unless target supports it */
+       {
+               .name = "virt2phys",
+               .handler = &handle_virt2phys_command,
+               .mode = COMMAND_ANY,
+               .help = "translate a virtual address into a physical address",
+       },
+
+       {
+               .name = "reg",
+               .handler = &handle_reg_command,
+               .mode = COMMAND_EXEC,
+               .help = "display or set a register",
+       },
+
+       {
+               .name = "poll",
+               .handler = &handle_poll_command,
+               .mode = COMMAND_EXEC,
+               .help = "poll target state",
+       },
+       {
+               .name = "wait_halt",
+               .handler = &handle_wait_halt_command,
+               .mode = COMMAND_EXEC,
+               .help = "wait for target halt",
+               .usage = "[time (s)]",
+       },
+       {
+               .name = "halt",
+               .handler = &handle_halt_command,
+               .mode = COMMAND_EXEC,
+               .help = "halt target",
+       },
+       {
+               .name = "resume",
+               .handler = &handle_resume_command,
+               .mode = COMMAND_EXEC,
+               .help = "resume target",
+               .usage = "[<address>]",
+       },
+       {
+               .name = "reset",
+               .handler = &handle_reset_command,
+               .mode = COMMAND_EXEC,
+               .usage = "[run|halt|init]",
+               .help = "Reset all targets into the specified mode."
+                       "Default reset mode is run, if not given.",
+       },
+       {
+               .name = "soft_reset_halt",
+               .handler = &handle_soft_reset_halt_command,
+               .mode = COMMAND_EXEC,
+               .help = "halt the target and do a soft reset",
+       },
+       {
+
+               .name = "step",
+               .handler = &handle_step_command,
+               .mode = COMMAND_EXEC,
+               .help = "step one instruction from current PC or [addr]",
+               .usage = "[<address>]",
+       },
+       {
+
+               .name = "mdw",
+               .handler = &handle_md_command,
+               .mode = COMMAND_EXEC,
+               .help = "display memory words",
+               .usage = "[phys] <addr> [count]",
+       },
+       {
+               .name = "mdh",
+               .handler = &handle_md_command,
+               .mode = COMMAND_EXEC,
+               .help = "display memory half-words",
+               .usage = "[phys] <addr> [count]",
+       },
+       {
+               .name = "mdb",
+               .handler = &handle_md_command,
+               .mode = COMMAND_EXEC,
+               .help = "display memory bytes",
+               .usage = "[phys] <addr> [count]",
+       },
+       {
+
+               .name = "mww",
+               .handler = &handle_mw_command,
+               .mode = COMMAND_EXEC,
+               .help = "write memory word",
+               .usage = "[phys]  <addr> <value> [count]",
+       },
+       {
+               .name = "mwh",
+               .handler = &handle_mw_command,
+               .mode = COMMAND_EXEC,
+               .help = "write memory half-word",
+               .usage = "[phys] <addr> <value> [count]",
+       },
+       {
+               .name = "mwb",
+               .handler = &handle_mw_command,
+               .mode = COMMAND_EXEC,
+               .help = "write memory byte",
+               .usage = "[phys] <addr> <value> [count]",
+       },
+       {
+
+               .name = "bp",
+               .handler = &handle_bp_command,
+               .mode = COMMAND_EXEC,
+               .help = "list or set breakpoint",
+               .usage = "[<address> <length> [hw]]",
+       },
+       {
+               .name = "rbp",
+               .handler = &handle_rbp_command,
+               .mode = COMMAND_EXEC,
+               .help = "remove breakpoint",
+               .usage = "<address>",
+       },
+       {
+
+               .name = "wp",
+               .handler = &handle_wp_command,
+               .mode = COMMAND_EXEC,
+               .help = "list or set watchpoint",
+               .usage = "[<address> <length> <r/w/a> [value] [mask]]",
+       },
+       {
+               .name = "rwp",
+               .handler = &handle_rwp_command,
+               .mode = COMMAND_EXEC,
+               .help = "remove watchpoint",
+               .usage = "<address>",
+
+       },
+       {
+               .name = "load_image",
+               .handler = &handle_load_image_command,
+               .mode = COMMAND_EXEC,
+               .usage = "<file> <address> ['bin'|'ihex'|'elf'|'s19'] "
+                       "[min_address] [max_length]",
+       },
+       {
+               .name = "dump_image",
+               .handler = &handle_dump_image_command,
+               .mode = COMMAND_EXEC,
+               .usage = "<file> <address> <size>",
+       },
+       {
+               .name = "verify_image",
+               .handler = &handle_verify_image_command,
+               .mode = COMMAND_EXEC,
+               .usage = "<file> [offset] [type]",
+       },
+       {
+               .name = "test_image",
+               .handler = &handle_test_image_command,
+               .mode = COMMAND_EXEC,
+               .usage = "<file> [offset] [type]",
+       },
+       {
+               .name = "ocd_mem2array",
+               .mode = COMMAND_EXEC,
+               .jim_handler = &jim_mem2array,
+               .help = "read memory and return as a TCL array "
+                       "for script processing",
+               .usage = "<arrayname> <width=32|16|8> <address> <count>",
+       },
+       {
+               .name = "ocd_array2mem",
+               .mode = COMMAND_EXEC,
+               .jim_handler = &jim_array2mem,
+               .help = "convert a TCL array to memory locations "
+                       "and write the values",
+               .usage = "<arrayname> <width=32|16|8> <address> <count>",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+int target_register_user_commands(struct command_context *cmd_ctx)
 {
        int retval = ERROR_OK;
        if ((retval = target_request_register_commands(cmd_ctx)) != ERROR_OK)
@@ -4785,108 +5013,6 @@ int target_register_user_commands(struct command_context_s *cmd_ctx)
        if ((retval = trace_register_commands(cmd_ctx)) != ERROR_OK)
                return retval;
 
-       register_command(cmd_ctx, NULL, "profile",
-                       handle_profile_command, COMMAND_EXEC,
-                       "profiling samples the CPU PC");
-
-       register_jim(cmd_ctx, "ocd_mem2array", jim_mem2array,
-                       "read memory and return as a TCL array for script processing "
-                       "<ARRAYNAME> <WIDTH = 32/16/8> <ADDRESS> <COUNT>");
 
-       register_jim(cmd_ctx, "ocd_array2mem", jim_array2mem,
-                       "convert a TCL array to memory locations and write the values "
-                       "<ARRAYNAME> <WIDTH = 32/16/8> <ADDRESS> <COUNT>");
-
-       register_command(cmd_ctx, NULL, "fast_load_image",
-                       handle_fast_load_image_command, COMMAND_ANY,
-                       "same args as load_image, image stored in memory "
-                       "- mainly for profiling purposes");
-
-       register_command(cmd_ctx, NULL, "fast_load",
-                       handle_fast_load_command, COMMAND_ANY,
-                       "loads active fast load image to current target "
-                       "- mainly for profiling purposes");
-
-       /** @todo don't register virt2phys() unless target supports it */
-       register_command(cmd_ctx, NULL, "virt2phys",
-                       handle_virt2phys_command, COMMAND_ANY,
-                       "translate a virtual address into a physical address");
-
-       register_command(cmd_ctx,  NULL, "reg",
-                       handle_reg_command, COMMAND_EXEC,
-                       "display or set a register");
-
-       register_command(cmd_ctx,  NULL, "poll",
-                       handle_poll_command, COMMAND_EXEC,
-                       "poll target state");
-       register_command(cmd_ctx,  NULL, "wait_halt",
-                       handle_wait_halt_command, COMMAND_EXEC,
-                       "wait for target halt [time (s)]");
-       register_command(cmd_ctx,  NULL, "halt",
-                       handle_halt_command, COMMAND_EXEC,
-                       "halt target");
-       register_command(cmd_ctx,  NULL, "resume",
-                       handle_resume_command, COMMAND_EXEC,
-                       "resume target [addr]");
-       register_command(cmd_ctx,  NULL, "reset",
-                       handle_reset_command, COMMAND_EXEC,
-                       "reset target [run | halt | init] - default is run");
-       register_command(cmd_ctx,  NULL, "soft_reset_halt",
-                       handle_soft_reset_halt_command, COMMAND_EXEC,
-                       "halt the target and do a soft reset");
-
-       register_command(cmd_ctx,  NULL, "step",
-                       handle_step_command, COMMAND_EXEC,
-                       "step one instruction from current PC or [addr]");
-
-       register_command(cmd_ctx,  NULL, "mdw",
-                       handle_md_command, COMMAND_EXEC,
-                       "display memory words [phys] <addr> [count]");
-       register_command(cmd_ctx,  NULL, "mdh",
-                       handle_md_command, COMMAND_EXEC,
-                       "display memory half-words [phys] <addr> [count]");
-       register_command(cmd_ctx,  NULL, "mdb",
-                       handle_md_command, COMMAND_EXEC,
-                       "display memory bytes [phys] <addr> [count]");
-
-       register_command(cmd_ctx,  NULL, "mww",
-                       handle_mw_command, COMMAND_EXEC,
-                       "write memory word [phys]  <addr> <value> [count]");
-       register_command(cmd_ctx,  NULL, "mwh",
-                       handle_mw_command, COMMAND_EXEC,
-                       "write memory half-word [phys]  <addr> <value> [count]");
-       register_command(cmd_ctx,  NULL, "mwb",
-                       handle_mw_command, COMMAND_EXEC,
-                       "write memory byte [phys] <addr> <value> [count]");
-
-       register_command(cmd_ctx,  NULL, "bp",
-                       handle_bp_command, COMMAND_EXEC,
-                       "list or set breakpoint [<address> <length> [hw]]");
-       register_command(cmd_ctx,  NULL, "rbp",
-                       handle_rbp_command, COMMAND_EXEC,
-                       "remove breakpoint <address>");
-
-       register_command(cmd_ctx,  NULL, "wp",
-                       handle_wp_command, COMMAND_EXEC,
-                       "list or set watchpoint "
-                               "[<address> <length> <r/w/a> [value] [mask]]");
-       register_command(cmd_ctx,  NULL, "rwp",
-                       handle_rwp_command, COMMAND_EXEC,
-                       "remove watchpoint <address>");
-
-       register_command(cmd_ctx,  NULL, "load_image",
-                       handle_load_image_command, COMMAND_EXEC,
-                       "load_image <file> <address> "
-                       "['bin'|'ihex'|'elf'|'s19'] [min_address] [max_length]");
-       register_command(cmd_ctx,  NULL, "dump_image",
-                       handle_dump_image_command, COMMAND_EXEC,
-                       "dump_image <file> <address> <size>");
-       register_command(cmd_ctx,  NULL, "verify_image",
-                       handle_verify_image_command, COMMAND_EXEC,
-                       "verify_image <file> [offset] [type]");
-       register_command(cmd_ctx,  NULL, "test_image",
-                       handle_test_image_command, COMMAND_EXEC,
-                       "test_image <file> [offset] [type]");
-
-       return ERROR_OK;
+       return register_commands(cmd_ctx, NULL, target_exec_command_handlers);
 }