ARM7TDMI uses the new inheritance/nesting scheme
authorDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 6 Nov 2009 06:04:04 +0000 (22:04 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 6 Nov 2009 06:04:04 +0000 (22:04 -0800)
Use target_to_arm7_9(), replacing needless pointer traversals.

Also:  remove now-useless contents of arm7tdmi struct; it's
almost ready to be removed.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/target/arm7tdmi.c
src/target/arm7tdmi.h

index 27a8337fcfc79c3b647b5a5cd9220883aa7ee2a3..8b929d49b1aad26a33f06cb379a0567e40033055 100644 (file)
@@ -44,9 +44,7 @@
 static int arm7tdmi_examine_debug_reason(target_t *target)
 {
        int retval = ERROR_OK;
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
 
        /* only check the debug reason if we don't know it already */
        if ((target->debug_reason != DBG_REASON_DBGRQ)
@@ -268,9 +266,7 @@ static int arm7tdmi_clock_data_in_endianness(arm_jtag_t *jtag_info,
 static void arm7tdmi_change_to_arm(target_t *target,
                uint32_t *r0, uint32_t *pc)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* save r0 before using it and put system in ARM state
@@ -327,9 +323,7 @@ static void arm7tdmi_read_core_regs(target_t *target,
                uint32_t mask, uint32_t* core_regs[16])
 {
        int i;
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* STMIA r0-15, [r0] at debug speed
@@ -354,9 +348,7 @@ static void arm7tdmi_read_core_regs_target_buffer(target_t *target,
                uint32_t mask, void* buffer, int size)
 {
        int i;
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
        int be = (target->endianness == TARGET_BIG_ENDIAN) ? 1 : 0;
        uint32_t *buf_u32 = buffer;
@@ -396,9 +388,7 @@ static void arm7tdmi_read_core_regs_target_buffer(target_t *target,
 
 static void arm7tdmi_read_xpsr(target_t *target, uint32_t *xpsr, int spsr)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* MRS r0, cpsr */
@@ -416,9 +406,7 @@ static void arm7tdmi_read_xpsr(target_t *target, uint32_t *xpsr, int spsr)
 
 static void arm7tdmi_write_xpsr(target_t *target, uint32_t xpsr, int spsr)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        LOG_DEBUG("xpsr: %8.8" PRIx32 ", spsr: %i", xpsr, spsr);
@@ -448,9 +436,7 @@ static void arm7tdmi_write_xpsr(target_t *target, uint32_t xpsr, int spsr)
 static void arm7tdmi_write_xpsr_im8(target_t *target,
                uint8_t xpsr_im, int rot, int spsr)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        LOG_DEBUG("xpsr_im: %2.2x, rot: %i, spsr: %i", xpsr_im, rot, spsr);
@@ -469,9 +455,7 @@ static void arm7tdmi_write_core_regs(target_t *target,
                uint32_t mask, uint32_t core_regs[16])
 {
        int i;
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* LDMIA r0-15, [r0] at debug speed
@@ -495,9 +479,7 @@ static void arm7tdmi_write_core_regs(target_t *target,
 
 static void arm7tdmi_load_word_regs(target_t *target, uint32_t mask)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed load-multiple into the pipeline */
@@ -508,9 +490,7 @@ static void arm7tdmi_load_word_regs(target_t *target, uint32_t mask)
 
 static void arm7tdmi_load_hword_reg(target_t *target, int num)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed load half-word into the pipeline */
@@ -521,9 +501,7 @@ static void arm7tdmi_load_hword_reg(target_t *target, int num)
 
 static void arm7tdmi_load_byte_reg(target_t *target, int num)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed load byte into the pipeline */
@@ -534,9 +512,7 @@ static void arm7tdmi_load_byte_reg(target_t *target, int num)
 
 static void arm7tdmi_store_word_regs(target_t *target, uint32_t mask)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed store-multiple into the pipeline */
@@ -547,9 +523,7 @@ static void arm7tdmi_store_word_regs(target_t *target, uint32_t mask)
 
 static void arm7tdmi_store_hword_reg(target_t *target, int num)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed store half-word into the pipeline */
@@ -560,9 +534,7 @@ static void arm7tdmi_store_hword_reg(target_t *target, int num)
 
 static void arm7tdmi_store_byte_reg(target_t *target, int num)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* put system-speed store byte into the pipeline */
@@ -573,9 +545,7 @@ static void arm7tdmi_store_byte_reg(target_t *target, int num)
 
 static void arm7tdmi_write_pc(target_t *target, uint32_t pc)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        /* LDMIA r0-15, [r0] at debug speed
@@ -600,9 +570,7 @@ static void arm7tdmi_write_pc(target_t *target, uint32_t pc)
 
 static void arm7tdmi_branch_resume(target_t *target)
 {
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
 
        arm7tdmi_clock_out(jtag_info, ARMV4_5_NOP, NULL, 1);
@@ -611,14 +579,13 @@ static void arm7tdmi_branch_resume(target_t *target)
 
 static void arm7tdmi_branch_resume_thumb(target_t *target)
 {
-       LOG_DEBUG("-");
-
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
+       struct armv4_5_common_s *armv4_5 = &arm7_9->armv4_5_common;
        arm_jtag_t *jtag_info = &arm7_9->jtag_info;
        reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
 
+       LOG_DEBUG("-");
+
        /* LDMIA r0, [r0] at debug speed
         * register values will start to appear on 4th DCLK
         */
@@ -673,8 +640,7 @@ static void arm7tdmi_branch_resume_thumb(target_t *target)
 static void arm7tdmi_build_reg_cache(target_t *target)
 {
        reg_cache_t **cache_p = register_get_last_cache_p(&target->reg_cache);
-       /* get pointers to arch-specific information */
-       armv4_5_common_t *armv4_5 = target->arch_info;
+       struct armv4_5_common_s *armv4_5 = target_to_armv4_5(target);
 
        (*cache_p) = armv4_5_build_reg_cache(target, armv4_5);
        armv4_5->core_cache = (*cache_p);
@@ -682,9 +648,10 @@ static void arm7tdmi_build_reg_cache(target_t *target)
 
 int arm7tdmi_examine(struct target_s *target)
 {
+       struct arm7_9_common_s *arm7_9 = target_to_arm7_9(target);
        int retval;
-       armv4_5_common_t *armv4_5 = target->arch_info;
-       arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+
+
        if (!target_was_examined(target))
        {
                /* get pointers to arch-specific information */
@@ -725,11 +692,7 @@ int arm7tdmi_init_target(struct command_context_s *cmd_ctx, struct target_s *tar
 
 int arm7tdmi_init_arch_info(target_t *target, arm7tdmi_common_t *arm7tdmi, jtag_tap_t *tap)
 {
-       armv4_5_common_t *armv4_5;
-       arm7_9_common_t *arm7_9;
-
-       arm7_9 = &arm7tdmi->arm7_9_common;
-       armv4_5 = &arm7_9->armv4_5_common;
+       struct arm7_9_common_s *arm7_9 = &arm7tdmi->arm7_9_common;
 
        /* prepare JTAG information for the new target */
        arm7_9->jtag_info.tap = tap;
@@ -771,10 +734,6 @@ int arm7tdmi_init_arch_info(target_t *target, arm7tdmi_common_t *arm7tdmi, jtag_
        arm7_9->thumb_bkpt = 0xdeee;
 
        arm7_9->dbgreq_adjust_pc = 2;
-       arm7_9->arch_info = arm7tdmi;
-
-       arm7tdmi->arch_info = NULL;
-       arm7tdmi->common_magic = ARM7TDMI_COMMON_MAGIC;
 
        arm7_9_init_arch_info(target, arm7_9);
 
index da5c0401958260fff94ee159b613302796e32af0..f69ba49ef519fc3a9caa9a60565b8d609cd1dc20 100644 (file)
 
 #include "embeddedice.h"
 
-#define        ARM7TDMI_COMMON_MAGIC 0x00a700a7
-
+/* FIXME we don't really need a separate arm7tdmi struct any more...
+ * remove it, the arm7/arm9 common struct suffices.
+ */
 typedef struct arm7tdmi_common_s
 {
-       int common_magic;
-       void *arch_info;
        arm7_9_common_t arm7_9_common;
 } arm7tdmi_common_t;
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)