MIPS: merge mips fast_data patch from David N. Claffey
[fw/openocd] / src / target / arm9tdmi.c
index 3f074be86bee15d45cd272cbe23ffa2c27b452dd..ae0c4e05edd30462e0e7667758e8e708e2de8984 100644 (file)
@@ -30,6 +30,7 @@
 #include "arm9tdmi.h"
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
@@ -268,8 +269,6 @@ int arm9tdmi_clock_data_in(struct arm_jtag *jtag_info, uint32_t *in)
        return ERROR_OK;
 }
 
-extern void arm_endianness(uint8_t *tmp, void *in, int size, int be, int flip);
-
 static int arm9endianness(jtag_callback_data_t arg,
        jtag_callback_data_t size, jtag_callback_data_t be,
        jtag_callback_data_t captured)
@@ -664,7 +663,7 @@ static void arm9tdmi_branch_resume_thumb(struct target *target)
        LOG_DEBUG("-");
 
        struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
-       struct armv4_5_common_s *armv4_5 = &arm7_9->armv4_5_common;
+       struct arm *armv4_5 = &arm7_9->armv4_5_common;
        struct arm_jtag *jtag_info = &arm7_9->jtag_info;
        struct reg *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
 
@@ -751,10 +750,9 @@ void arm9tdmi_disable_single_step(struct target *target)
 static void arm9tdmi_build_reg_cache(struct target *target)
 {
        struct reg_cache **cache_p = register_get_last_cache_p(&target->reg_cache);
-       struct armv4_5_common_s *armv4_5 = target_to_armv4_5(target);
+       struct arm *armv4_5 = target_to_arm(target);
 
-       (*cache_p) = armv4_5_build_reg_cache(target, armv4_5);
-       armv4_5->core_cache = (*cache_p);
+       (*cache_p) = arm_build_reg_cache(target, armv4_5);
 }
 
 int arm9tdmi_init_target(struct command_context *cmd_ctx,
@@ -831,15 +829,21 @@ static int arm9tdmi_target_create(struct target *target, Jim_Interp *interp)
 
 COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
 {
-       struct target *target = get_current_target(cmd_ctx);
+       struct target *target = get_current_target(CMD_CTX);
        struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
        struct reg *vector_catch;
        uint32_t vector_catch_value;
 
+       if (!target_was_examined(target))
+       {
+               LOG_ERROR("Target not examined yet");
+               return ERROR_FAIL;
+       }
+
        /* it's uncommon, but some ARM7 chips can support this */
        if (arm7_9->common_magic != ARM7_9_COMMON_MAGIC
                        || !arm7_9->has_vector_catch) {
-               command_print(cmd_ctx, "target doesn't have EmbeddedICE "
+               command_print(CMD_CTX, "target doesn't have EmbeddedICE "
                                "with vector_catch");
                return ERROR_TARGET_INVALID;
        }
@@ -882,7 +886,7 @@ COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
                                /* complain if vector wasn't found */
                                if (!arm9tdmi_vectors[j].name)
                                {
-                                       command_print(cmd_ctx, "vector '%s' not found, leaving current setting unchanged", CMD_ARGV[i]);
+                                       command_print(CMD_CTX, "vector '%s' not found, leaving current setting unchanged", CMD_ARGV[i]);
 
                                        /* reread current setting */
                                        vector_catch_value = buf_get_u32(
@@ -901,7 +905,7 @@ COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
 
        /* output current settings */
        for (unsigned i = 0; arm9tdmi_vectors[i].name; i++) {
-               command_print(cmd_ctx, "%s: %s", arm9tdmi_vectors[i].name,
+               command_print(CMD_CTX, "%s: %s", arm9tdmi_vectors[i].name,
                        (vector_catch_value & arm9tdmi_vectors[i].value)
                                ? "catch" : "don't catch");
        }
@@ -909,21 +913,27 @@ COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
        return ERROR_OK;
 }
 
-int arm9tdmi_register_commands(struct command_context *cmd_ctx)
-{
-       int retval;
-       struct command *arm9tdmi_cmd;
-
-       retval = arm7_9_register_commands(cmd_ctx);
-       arm9tdmi_cmd = register_command(cmd_ctx, NULL, "arm9",
-                       NULL, COMMAND_ANY,
-                       "arm9 specific commands");
-       register_command(cmd_ctx, arm9tdmi_cmd, "vector_catch",
-                       handle_arm9tdmi_catch_vectors_command, COMMAND_EXEC,
-                       "arm9 vector_catch [all|none|reset|undef|swi|pabt|dabt|irq|fiq] ...");
-
-       return retval;
-}
+static const struct command_registration arm9tdmi_exec_command_handlers[] = {
+       {
+               .name = "vector_catch",
+               .handler = handle_arm9tdmi_catch_vectors_command,
+               .mode = COMMAND_EXEC,
+               .usage = "[all|none|reset|undef|swi|pabt|dabt|irq|fiq] ...",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+const struct command_registration arm9tdmi_command_handlers[] = {
+       {
+               .chain = arm7_9_command_handlers,
+       },
+       {
+               .name = "arm9tdmi",
+               .mode = COMMAND_ANY,
+               .help = "arm9tdmi command group",
+               .chain = arm9tdmi_exec_command_handlers,
+       },
+       COMMAND_REGISTRATION_DONE
+};
 
 /** Holds methods for ARM9TDMI targets. */
 struct target_type arm9tdmi_target =
@@ -931,7 +941,7 @@ struct target_type arm9tdmi_target =
        .name = "arm9tdmi",
 
        .poll = arm7_9_poll,
-       .arch_state = armv4_5_arch_state,
+       .arch_state = arm_arch_state,
 
        .target_request_data = arm7_9_target_request_data,
 
@@ -943,7 +953,7 @@ struct target_type arm9tdmi_target =
        .deassert_reset = arm7_9_deassert_reset,
        .soft_reset_halt = arm7_9_soft_reset_halt,
 
-       .get_gdb_reg_list = armv4_5_get_gdb_reg_list,
+       .get_gdb_reg_list = arm_get_gdb_reg_list,
 
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
@@ -959,7 +969,7 @@ struct target_type arm9tdmi_target =
        .add_watchpoint = arm7_9_add_watchpoint,
        .remove_watchpoint = arm7_9_remove_watchpoint,
 
-       .register_commands = arm9tdmi_register_commands,
+       .commands = arm9tdmi_command_handlers,
        .target_create = arm9tdmi_target_create,
        .init_target = arm9tdmi_init_target,
        .examine = arm7_9_examine,