#define XSCALE_COMMON_MAGIC 0x58534341
-typedef struct xscale_jtag_s
-{
- /* position in JTAG scan chain */
- jtag_tap_t *tap;
-
- /* IR length and instructions */
- int ir_length;
- uint32_t dbgrx;
- uint32_t dbgtx;
- uint32_t ldic;
- uint32_t dcsr;
-} xscale_jtag_t;
+/* These four JTAG instructions are architecturally defined.
+ * Lengths are core-specific; originally 5 bits, later 7.
+ */
+#define XSCALE_DBGRX 0x02
+#define XSCALE_DBGTX 0x10
+#define XSCALE_LDIC 0x07
+#define XSCALE_SELDCSR 0x09
enum xscale_debug_reason
{
XSCALE_TRACE_ADDRESS = 0x1,
};
-typedef struct xscale_trace_entry_s
+struct xscale_trace_entry
{
uint8_t data;
enum xscale_trace_entry_type type;
-} xscale_trace_entry_t;
+};
-typedef struct xscale_trace_data_s
+struct xscale_trace_data
{
- xscale_trace_entry_t *entries;
+ struct xscale_trace_entry *entries;
int depth;
uint32_t chkpt0;
uint32_t chkpt1;
uint32_t last_instruction;
- struct xscale_trace_data_s *next;
-} xscale_trace_data_t;
+ struct xscale_trace_data *next;
+};
-typedef struct xscale_trace_s
+struct xscale_trace
{
trace_status_t capture_status; /* current state of capture run */
- struct image_s *image; /* source for target opcodes */
- xscale_trace_data_t *data; /* linked list of collected trace data */
+ struct image *image; /* source for target opcodes */
+ struct xscale_trace_data *data; /* linked list of collected trace data */
int buffer_enabled; /* whether trace buffer is enabled */
int buffer_fill; /* maximum number of trace runs to read (-1 for wrap-around) */
int pc_ok;
uint32_t current_pc;
armv4_5_state_t core_state; /* current core state (ARM, Thumb, Jazelle) */
-} xscale_trace_t;
+};
-typedef struct xscale_common_s
+struct xscale_common
{
+ /* armv4/5 common stuff */
+ struct arm armv4_5_common;
+
int common_magic;
/* XScale registers (CP15, DBG) */
- reg_cache_t *reg_cache;
-
- /* pxa250, pxa255, pxa27x, ixp42x, ... */
- char *variant;
-
- xscale_jtag_t jtag_info;
+ struct reg_cache *reg_cache;
/* current state of the debug handler */
- int handler_installed;
- int handler_running;
uint32_t handler_address;
/* target-endian buffers with exception vectors */
uint8_t vector_catch;
- xscale_trace_t trace;
+ struct xscale_trace trace;
int arch_debug_reason;
- /* armv4/5 common stuff */
- armv4_5_common_t armv4_5_common;
-
/* MMU/Caches */
- armv4_5_mmu_common_t armv4_5_mmu;
+ struct armv4_5_mmu_common armv4_5_mmu;
uint32_t cp15_control_reg;
- /* possible future enhancements that go beyond XScale common stuff */
- void *arch_info;
-
int fast_memory_access;
-} xscale_common_t;
+};
+
+static inline struct xscale_common *
+target_to_xscale(struct target *target)
+{
+ return container_of(target->arch_info, struct xscale_common,
+ armv4_5_common);
+}
-typedef struct xscale_reg_s
+struct xscale_reg
{
int dbg_handler_number;
- target_t *target;
-} xscale_reg_t;
+ struct target *target;
+};
enum
{