]> git.sur5r.net Git - openocd/blobdiff - src/target/armv7m.c
command_handler: change 'args' to CMD_ARGV
[openocd] / src / target / armv7m.c
index d8718f9e97eb96fe342939d29ae3ab96d9a57b22..4fe57943e428346fd4cec7c4f5df2a16626b30f0 100644 (file)
@@ -40,8 +40,6 @@
 #include "algorithm.h"
 #include "register.h"
 
-#define ARRAY_SIZE(x)  ((int)(sizeof(x)/sizeof((x)[0])))
-
 
 #if 0
 #define _DEBUG_INSTRUCTION_EXECUTION_
@@ -74,7 +72,6 @@ static struct reg armv7m_gdb_dummy_fp_reg =
        .valid = 1,
        .size = 96,
        .arch_info = NULL,
-       .arch_type = 0,
 };
 
 static uint8_t armv7m_gdb_dummy_fps_value[4];
@@ -87,7 +84,6 @@ static struct reg armv7m_gdb_dummy_fps_reg =
        .valid = 1,
        .size = 32,
        .arch_info = NULL,
-       .arch_type = 0,
 };
 
 #ifdef ARMV7_GDB_HACKS
@@ -101,7 +97,6 @@ struct reg armv7m_gdb_dummy_cpsr_reg =
        .valid = 1,
        .size = 32,
        .arch_info = NULL,
-       .arch_type = 0,
 };
 #endif
 
@@ -150,8 +145,6 @@ static const struct {
 
 #define ARMV7M_NUM_REGS        ARRAY_SIZE(armv7m_regs)
 
-static int armv7m_core_reg_arch_type = -1;
-
 /**
  * Restores target context using the cache of core registers set up
  * by armv7m_build_reg_cache(), calling optional core-specific hooks.
@@ -236,14 +229,14 @@ static int armv7m_set_core_reg(struct reg *reg, uint8_t *buf)
        return ERROR_OK;
 }
 
-static int armv7m_read_core_reg(struct target *target, int num)
+static int armv7m_read_core_reg(struct target *target, unsigned num)
 {
        uint32_t reg_value;
        int retval;
        struct armv7m_core_reg * armv7m_core_reg;
        struct armv7m_common *armv7m = target_to_armv7m(target);
 
-       if ((num < 0) || (num >= ARMV7M_NUM_REGS))
+       if (num >= ARMV7M_NUM_REGS)
                return ERROR_INVALID_ARGUMENTS;
 
        armv7m_core_reg = armv7m->core_cache->reg_list[num].arch_info;
@@ -255,14 +248,14 @@ static int armv7m_read_core_reg(struct target *target, int num)
        return retval;
 }
 
-static int armv7m_write_core_reg(struct target *target, int num)
+static int armv7m_write_core_reg(struct target *target, unsigned num)
 {
        int retval;
        uint32_t reg_value;
        struct armv7m_core_reg *armv7m_core_reg;
        struct armv7m_common *armv7m = target_to_armv7m(target);
 
-       if ((num < 0) || (num >= ARMV7M_NUM_REGS))
+       if (num >= ARMV7M_NUM_REGS)
                return ERROR_INVALID_ARGUMENTS;
 
        reg_value = buf_get_u32(armv7m->core_cache->reg_list[num].value, 0, 32);
@@ -389,7 +382,6 @@ int armv7m_run_algorithm(struct target *target,
        struct armv7m_algorithm *armv7m_algorithm_info = arch_info;
        enum armv7m_mode core_mode = armv7m->core_mode;
        int retval = ERROR_OK;
-       int i;
        uint32_t context[ARMV7M_NUM_REGS];
 
        if (armv7m_algorithm_info->common_magic != ARMV7M_COMMON_MAGIC)
@@ -406,20 +398,20 @@ int armv7m_run_algorithm(struct target *target,
 
        /* refresh core register cache */
        /* Not needed if core register cache is always consistent with target process state */
-       for (i = 0; i < ARMV7M_NUM_REGS; i++)
+       for (unsigned i = 0; i < ARMV7M_NUM_REGS; i++)
        {
                if (!armv7m->core_cache->reg_list[i].valid)
                        armv7m->read_core_reg(target, i);
                context[i] = buf_get_u32(armv7m->core_cache->reg_list[i].value, 0, 32);
        }
 
-       for (i = 0; i < num_mem_params; i++)
+       for (int i = 0; i < num_mem_params; i++)
        {
                if ((retval = target_write_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK)
                        return retval;
        }
 
-       for (i = 0; i < num_reg_params; i++)
+       for (int i = 0; i < num_reg_params; i++)
        {
                struct reg *reg = register_get_by_name(armv7m->core_cache, reg_params[i].reg_name, 0);
 //             uint32_t regvalue;
@@ -427,13 +419,13 @@ int armv7m_run_algorithm(struct target *target,
                if (!reg)
                {
                        LOG_ERROR("BUG: register '%s' not found", reg_params[i].reg_name);
-                       exit(-1);
+                       return ERROR_INVALID_ARGUMENTS;
                }
 
                if (reg->size != reg_params[i].size)
                {
                        LOG_ERROR("BUG: register '%s' size doesn't match reg_params[i].size", reg_params[i].reg_name);
-                       exit(-1);
+                       return ERROR_INVALID_ARGUMENTS;
                }
 
 //             regvalue = buf_get_u32(reg_params[i].value, 0, 32);
@@ -471,7 +463,7 @@ int armv7m_run_algorithm(struct target *target,
        }
 
        /* Read memory values to mem_params[] */
-       for (i = 0; i < num_mem_params; i++)
+       for (int i = 0; i < num_mem_params; i++)
        {
                if (mem_params[i].direction != PARAM_OUT)
                        if ((retval = target_read_buffer(target, mem_params[i].address, mem_params[i].size, mem_params[i].value)) != ERROR_OK)
@@ -481,7 +473,7 @@ int armv7m_run_algorithm(struct target *target,
        }
 
        /* Copy core register values to reg_params[] */
-       for (i = 0; i < num_reg_params; i++)
+       for (int i = 0; i < num_reg_params; i++)
        {
                if (reg_params[i].direction != PARAM_OUT)
                {
@@ -490,20 +482,20 @@ int armv7m_run_algorithm(struct target *target,
                        if (!reg)
                        {
                                LOG_ERROR("BUG: register '%s' not found", reg_params[i].reg_name);
-                               exit(-1);
+                               return ERROR_INVALID_ARGUMENTS;
                        }
 
                        if (reg->size != reg_params[i].size)
                        {
                                LOG_ERROR("BUG: register '%s' size doesn't match reg_params[i].size", reg_params[i].reg_name);
-                               exit(-1);
+                               return ERROR_INVALID_ARGUMENTS;
                        }
 
                        buf_set_u32(reg_params[i].value, 0, 32, buf_get_u32(reg->value, 0, 32));
                }
        }
 
-       for (i = ARMV7M_NUM_REGS - 1; i >= 0; i--)
+       for (int i = ARMV7M_NUM_REGS - 1; i >= 0; i--)
        {
                uint32_t regvalue;
                regvalue = buf_get_u32(armv7m->core_cache->reg_list[i].value, 0, 32);
@@ -545,6 +537,10 @@ int armv7m_arch_state(struct target *target)
 
        return ERROR_OK;
 }
+static const struct reg_arch_type armv7m_reg_type = {
+       .get = armv7m_get_core_reg,
+       .set = armv7m_set_core_reg,
+};
 
 /** Builds cache of architecturally defined registers.  */
 struct reg_cache *armv7m_build_reg_cache(struct target *target)
@@ -557,11 +553,6 @@ struct reg_cache *armv7m_build_reg_cache(struct target *target)
        struct armv7m_core_reg *arch_info = calloc(num_regs, sizeof(struct armv7m_core_reg));
        int i;
 
-       if (armv7m_core_reg_arch_type == -1)
-       {
-               armv7m_core_reg_arch_type = register_reg_arch_type(armv7m_get_core_reg, armv7m_set_core_reg);
-       }
-
        register_init_dummy(&armv7m_gdb_dummy_fps_reg);
 #ifdef ARMV7_GDB_HACKS
        register_init_dummy(&armv7m_gdb_dummy_cpsr_reg);
@@ -586,7 +577,7 @@ struct reg_cache *armv7m_build_reg_cache(struct target *target)
                reg_list[i].value = calloc(1, 4);
                reg_list[i].dirty = 0;
                reg_list[i].valid = 0;
-               reg_list[i].arch_type = armv7m_core_reg_arch_type;
+               reg_list[i].type = &armv7m_reg_type;
                reg_list[i].arch_info = &arch_info[i];
        }
 
@@ -775,12 +766,12 @@ COMMAND_HANDLER(handle_dap_baseaddr_command)
        int retval;
 
        apselsave = swjdp->apsel;
-       switch (argc) {
+       switch (CMD_ARGC) {
        case 0:
                apsel = swjdp->apsel;
                break;
        case 1:
-               COMMAND_PARSE_NUMBER(u32, args[0], apsel);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
                break;
        default:
                return ERROR_COMMAND_SYNTAX_ERROR;
@@ -838,12 +829,12 @@ COMMAND_HANDLER(handle_dap_info_command)
        struct swjdp_common *swjdp = &armv7m->swjdp_info;
        uint32_t apsel;
 
-       switch (argc) {
+       switch (CMD_ARGC) {
        case 0:
                apsel = swjdp->apsel;
                break;
        case 1:
-               COMMAND_PARSE_NUMBER(u32, args[0], apsel);
+               COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], apsel);
                break;
        default:
                return ERROR_COMMAND_SYNTAX_ERROR;