- fixed endianness helper macros (thanks to obilix and wiml for finding and fixing...
[fw/openocd] / src / target / xscale.h
index 9fcb265e4721b3b5bf260a3494de7b826595b0f9..86acfbdee7a3f724bafd31345c2f92a60df10582 100644 (file)
@@ -24,6 +24,8 @@
 #include "register.h"
 #include "armv4_5.h"
 #include "armv4_5_mmu.h"
+#include "trace.h"
+#include "image.h"
 
 #define        XSCALE_COMMON_MAGIC 0x58534341
 
@@ -47,6 +49,40 @@ enum xscale_debug_reason
        XSCALE_DBG_REASON_TB_FULL,
 };
 
+enum xscale_trace_entry_type
+{
+       XSCALE_TRACE_MESSAGE,
+       XSCALE_TRACE_ADDRESS,
+};
+
+typedef struct xscale_trace_entry_s
+{
+       u8 data;
+       enum xscale_trace_entry_type type;
+} xscale_trace_entry_t;
+
+typedef struct xscale_trace_data_s
+{
+       xscale_trace_entry_t *entries;
+       int depth;
+       u32 chkpt0;
+       u32 chkpt1;
+       u32 last_instruction;
+       struct xscale_trace_data_s *next;
+} xscale_trace_data_t;
+
+typedef struct xscale_trace_s
+{
+       trace_status_t capture_status;  /* current state of capture run */
+       image_t *image;                                 /* source for target opcodes */
+       xscale_trace_data_t *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;
+       u32 current_pc;
+       armv4_5_state_t core_state;             /* current core state (ARM, Thumb, Jazelle) */
+} xscale_trace_t;
+
 typedef struct xscale_common_s
 {
        int common_magic;
@@ -93,9 +129,8 @@ typedef struct xscale_common_s
        u16 thumb_bkpt;
        
        u8 vector_catch;
-       
-       int trace_buffer_enabled;
-       int trace_buffer_fill;
+
+       xscale_trace_t trace;
        
        int arch_debug_reason;
        
@@ -142,4 +177,6 @@ enum
        XSCALE_TXRXCTRL,
 };
 
+#define ERROR_XSCALE_NO_TRACE_DATA     (-1500)
+
 #endif /* XSCALE_H */