target/armv7m: rework Cortex-M register handling part 1
[fw/openocd] / src / target / arm966e.c
index 0429c54b50c4a01c892c8f04a34056998158ea14..b6d3e50e3fef7ae5f345ecb5ab51129a013245f0 100644 (file)
@@ -56,11 +56,21 @@ static int arm966e_target_create(struct target *target, Jim_Interp *interp)
        return arm966e_init_arch_info(target, arm966e, target->tap);
 }
 
-static int arm966e_verify_pointer(struct command_context *cmd_ctx,
+static void arm966e_deinit_target(struct target *target)
+{
+       struct arm *arm = target_to_arm(target);
+       struct arm966e_common *arm966e = target_to_arm966(target);
+
+       arm7_9_deinit(target);
+       arm_free_reg_cache(arm);
+       free(arm966e);
+}
+
+static int arm966e_verify_pointer(struct command_invocation *cmd,
                struct arm966e_common *arm966e)
 {
        if (arm966e->common_magic != ARM966E_COMMON_MAGIC) {
-               command_print(cmd_ctx, "target is not an ARM966");
+               command_print(cmd, "target is not an ARM966");
                return ERROR_TARGET_INVALID;
        }
        return ERROR_OK;
@@ -170,12 +180,12 @@ COMMAND_HANDLER(arm966e_handle_cp15_command)
        struct target *target = get_current_target(CMD_CTX);
        struct arm966e_common *arm966e = target_to_arm966(target);
 
-       retval = arm966e_verify_pointer(CMD_CTX, arm966e);
+       retval = arm966e_verify_pointer(CMD, arm966e);
        if (retval != ERROR_OK)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
 
@@ -188,8 +198,8 @@ COMMAND_HANDLER(arm966e_handle_cp15_command)
                        uint32_t value;
                        retval = arm966e_read_cp15(target, address, &value);
                        if (retval != ERROR_OK) {
-                               command_print(CMD_CTX,
-                                               "couldn't access reg %" PRIi32,
+                               command_print(CMD,
+                                               "couldn't access reg %" PRIu32,
                                                address);
                                return ERROR_OK;
                        }
@@ -197,19 +207,19 @@ COMMAND_HANDLER(arm966e_handle_cp15_command)
                        if (retval != ERROR_OK)
                                return retval;
 
-                       command_print(CMD_CTX, "%" PRIi32 ": %8.8" PRIx32,
+                       command_print(CMD, "%" PRIu32 ": %8.8" PRIx32,
                                        address, value);
                } else if (CMD_ARGC == 2) {
                        uint32_t value;
                        COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
                        retval = arm966e_write_cp15(target, address, value);
                        if (retval != ERROR_OK) {
-                               command_print(CMD_CTX,
-                                               "couldn't access reg %" PRIi32,
+                               command_print(CMD,
+                                               "couldn't access reg %" PRIu32,
                                                address);
                                return ERROR_OK;
                        }
-                       command_print(CMD_CTX, "%" PRIi32 ": %8.8" PRIx32,
+                       command_print(CMD, "%" PRIu32 ": %8.8" PRIx32,
                                        address, value);
                }
        }
@@ -259,6 +269,7 @@ struct target_type arm966e_target = {
        .deassert_reset = arm7_9_deassert_reset,
        .soft_reset_halt = arm7_9_soft_reset_halt,
 
+       .get_gdb_arch = arm_get_gdb_arch,
        .get_gdb_reg_list = arm_get_gdb_reg_list,
 
        .read_memory = arm7_9_read_memory,
@@ -277,6 +288,7 @@ struct target_type arm966e_target = {
        .commands = arm966e_command_handlers,
        .target_create = arm966e_target_create,
        .init_target = arm9tdmi_init_target,
+       .deinit_target = arm966e_deinit_target,
        .examine = arm7_9_examine,
        .check_reset = arm7_9_check_reset,
 };