use COMMAND_HANDLER macro to define all commands
[fw/openocd] / src / target / etm.h
index c751aac46f3102eed06e0e3cb527f5700a270103..ead45855e95805001943757d6c12314e95971644 100644 (file)
@@ -25,7 +25,6 @@
 
 #include "trace.h"
 #include "arm_jtag.h"
-#include "armv4_5.h"
 
 struct image_s;
 
@@ -69,6 +68,7 @@ enum
        /* N task contexts */
        ETM_CONTEXTID_COMPARATOR_VALUE = 0x6c,
        ETM_CONTEXTID_COMPARATOR_MASK = 0x6f,
+       ETM_ID = 0x79,
 };
 
 typedef struct etm_reg_s
@@ -84,7 +84,13 @@ typedef enum
        ETM_PORT_4BIT           = 0x00,
        ETM_PORT_8BIT           = 0x10,
        ETM_PORT_16BIT          = 0x20,
-       ETM_PORT_WIDTH_MASK     = 0x70,
+       ETM_PORT_24BIT          = 0x30,
+       ETM_PORT_32BIT          = 0x40,
+       ETM_PORT_48BIT          = 0x50,
+       ETM_PORT_64BIT          = 0x60,
+       ETM_PORT_1BIT           = 0x00 | (1 << 21),
+       ETM_PORT_2BIT           = 0x10 | (1 << 21),
+       ETM_PORT_WIDTH_MASK     = 0x70 | (1 << 21),
        /* Port modes */
        ETM_PORT_NORMAL    = 0x00000,
        ETM_PORT_MUXED     = 0x10000,
@@ -115,17 +121,17 @@ typedef enum
 } etmv1_tracemode_t;
 
 /* forward-declare ETM context */
-struct etm_context_s;
+struct etm;
 
 typedef struct etm_capture_driver_s
 {
        char *name;
        int (*register_commands)(struct command_context_s *cmd_ctx);
-       int (*init)(struct etm_context_s *etm_ctx);
-       trace_status_t (*status)(struct etm_context_s *etm_ctx);
-       int (*read_trace)(struct etm_context_s *etm_ctx);
-       int (*start_capture)(struct etm_context_s *etm_ctx);
-       int (*stop_capture)(struct etm_context_s *etm_ctx);
+       int (*init)(struct etm *etm_ctx);
+       trace_status_t (*status)(struct etm *etm_ctx);
+       int (*read_trace)(struct etm *etm_ctx);
+       int (*start_capture)(struct etm *etm_ctx);
+       int (*stop_capture)(struct etm *etm_ctx);
 } etm_capture_driver_t;
 
 enum
@@ -146,7 +152,7 @@ typedef struct etmv1_trace_data_s
  * this will have to be split into version independent elements
  * and a version specific part
  */
-typedef struct etm_context_s
+typedef struct etm
 {
        target_t *target;               /* target this ETM is connected to */
        reg_cache_t *reg_cache;         /* ETM register cache */
@@ -158,7 +164,7 @@ typedef struct etm_context_s
        uint32_t trace_depth;           /* number of cycles to be analyzed, 0 if no data available */
        etm_portmode_t portmode;        /* normal, multiplexed or demultiplexed */
        etmv1_tracemode_t tracemode;    /* type of info trace contains */
-       armv4_5_state_t core_state;     /* current core state */
+       int /*armv4_5_state_t*/ core_state;     /* current core state */
        struct image_s *image;          /* source for target opcodes */
        uint32_t pipe_index;            /* current trace cycle */
        uint32_t data_index;            /* cycle holding next data packet */
@@ -167,6 +173,7 @@ typedef struct etm_context_s
        bool ptr_ok;                    /* whether last_ptr is valid */
        uint8_t bcd_vers;               /* e.g. 0x13 == ETMv1.3 */
        uint32_t config;                /* cache of ETM_CONFIG value */
+       uint32_t id;                    /* cache of ETM_ID value, or 0 */
        uint32_t current_pc;            /* current program counter */
        uint32_t last_branch;           /* last branch address output */
        uint32_t last_branch_reason;    /* type of last branch encountered */