X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ftarget%2Farm11.h;h=c3f4e8643bfa6fc6aab38551f869734cd6b484d0;hb=97fbd793b3a4edec490b2b034f7b6fe5261ca03e;hp=be5e77bd1a7f554e515a567b9a19c4d50eeb1cac;hpb=da3196bf5e52a6d01f27cf228f87e395523cf901;p=openocd diff --git a/src/target/arm11.h b/src/target/arm11.h index be5e77bd..c3f4e864 100644 --- a/src/target/arm11.h +++ b/src/target/arm11.h @@ -23,52 +23,22 @@ #ifndef ARM11_H #define ARM11_H -#include "target.h" -#include "register.h" -#include "jtag.h" +#include "armv4_5.h" +#include "arm_dpm.h" -#define asizeof(x) (sizeof(x) / sizeof((x)[0])) - -#define NEW(type, variable, items) \ - type * variable = calloc(1, sizeof(type) * items) - -/* For MinGW use 'I' prefix to print size_t (instead of 'z') */ -/* Except if __USE_MINGW_ANSI_STDIO is defined with MinGW */ - -#if (!defined(__MSVCRT__) || defined(__USE_MINGW_ANSI_STDIO)) -#define ZU "%zu" -#else -#define ZU "%Iu" -#endif - -#define ARM11_REGCACHE_MODEREGS 0 -#define ARM11_REGCACHE_FREGS 0 - -#define ARM11_REGCACHE_COUNT (20 + \ - 23 * ARM11_REGCACHE_MODEREGS + \ - 9 * ARM11_REGCACHE_FREGS) +#define ARM11_REGCACHE_COUNT 3 #define ARM11_TAP_DEFAULT TAP_INVALID - -#define CHECK_RETVAL(action) \ -do { \ - int __retval = (action); \ - \ - if (__retval != ERROR_OK) \ - { \ - LOG_DEBUG("error while calling \"" # action "\""); \ - return __retval; \ - } \ - \ -} while (0) - - -typedef struct arm11_register_history_s -{ - uint32_t value; - uint8_t valid; -}arm11_register_history_t; +#define CHECK_RETVAL(action) \ + do { \ + int __retval = (action); \ + if (__retval != ERROR_OK) { \ + LOG_DEBUG("error while calling \"%s\"", \ + # action ); \ + return __retval; \ + } \ + } while (0) enum arm11_debug_version { @@ -78,22 +48,20 @@ enum arm11_debug_version ARM11_DEBUG_V7_CP14 = 0x04, }; -typedef struct arm11_common_s +struct arm11_common { - target_t * target; /**< Reference back to the owner */ + struct arm arm; + struct target * target; /**< Reference back to the owner */ + + /** Debug module state. */ + struct arm_dpm dpm; /** \name Processor type detection */ /*@{*/ - uint32_t device_id; /**< IDCODE readout */ - uint32_t didr; /**< DIDR readout (debug capabilities) */ - uint8_t implementor; /**< DIDR Implementor readout */ - size_t brp; /**< Number of Breakpoint Register Pairs from DIDR */ size_t wrp; /**< Number of Watchpoint Register Pairs from DIDR */ - enum arm11_debug_version - debug_version; /**< ARM debug architecture from DIDR */ /*@}*/ uint32_t last_dscr; /**< Last retrieved DSCR value; @@ -101,24 +69,28 @@ typedef struct arm11_common_s bool simulate_reset_on_next_halt; /**< Perform cleanups of the ARM state on next halt */ - /** \name Shadow registers to save processor state */ + /** \name Shadow registers to save debug state */ /*@{*/ - reg_t * reg_list; /**< target register list */ + struct reg * reg_list; /**< target register list */ uint32_t reg_values[ARM11_REGCACHE_COUNT]; /**< data for registers */ /*@}*/ - arm11_register_history_t - reg_history[ARM11_REGCACHE_COUNT]; /**< register state before last resume */ - size_t free_brps; /**< keep track of breakpoints allocated by arm11_add_breakpoint() */ size_t free_wrps; /**< keep track of breakpoints allocated by arm11_add_watchpoint() */ // GA - reg_cache_t *core_cache; -} arm11_common_t; + struct reg_cache *core_cache; + + struct arm_jtag jtag_info; +}; +static inline struct arm11_common *target_to_arm11(struct target *target) +{ + return container_of(target->arch_info, struct arm11_common, + arm); +} /** * ARM11 DBGTAP instructions @@ -176,12 +148,10 @@ enum arm11_sc7 ARM11_SC7_WCR0 = 112, }; -typedef struct arm11_reg_state_s +struct arm11_reg_state { uint32_t def_index; - target_t * target; -} arm11_reg_state_t; - -int arm11_register_commands(struct command_context_s *cmd_ctx); + struct target * target; +}; #endif /* ARM11_H */