* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+
#ifndef XSCALE_H
#define XSCALE_H
-#include "armv4_5.h"
+#include "arm.h"
#include "armv4_5_mmu.h"
#include "trace.h"
#define XSCALE_LDIC 0x07
#define XSCALE_SELDCSR 0x09
-enum xscale_debug_reason
-{
+/* Possible CPU types */
+#define XSCALE_IXP4XX_PXA2XX 0x0
+#define XSCALE_PXA3XX 0x4
+
+enum xscale_debug_reason {
XSCALE_DBG_REASON_GENERIC,
XSCALE_DBG_REASON_RESET,
XSCALE_DBG_REASON_TB_FULL,
};
-enum xscale_trace_entry_type
-{
+enum xscale_trace_entry_type {
XSCALE_TRACE_MESSAGE = 0x0,
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
-{
- xscale_trace_entry_t *entries;
+struct xscale_trace_data {
+ 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;
+ unsigned int num_checkpoints;
+ struct xscale_trace_data *next;
+};
+
+enum trace_mode {
+ XSCALE_TRACE_DISABLED,
+ XSCALE_TRACE_FILL,
+ XSCALE_TRACE_WRAP
+};
+
+struct xscale_trace {
+ struct image *image; /* source for target opcodes */
+ struct xscale_trace_data *data; /* linked list of collected trace data */
+ int buffer_fill; /* maximum number of trace runs to read */
+ int fill_counter; /* running count during trace collection */
+ enum trace_mode mode;
+ enum arm_state core_state; /* current core state (ARM, Thumb) */
+};
+
+struct xscale_common {
+ /* armv4/5 common stuff */
+ struct arm arm;
-typedef struct xscale_trace_s
-{
- 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 */
- 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
-{
int common_magic;
/* XScale registers (CP15, DBG) */
- reg_cache_t *reg_cache;
+ struct reg_cache *reg_cache;
/* current state of the debug handler */
uint32_t handler_address;
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_s *
-target_to_xscale(struct target_s *target)
+ /* CPU variant */
+ int xscale_variant;
+};
+
+static inline struct xscale_common *
+target_to_xscale(struct target *target)
{
- return container_of(target->arch_info, struct xscale_common_s,
- armv4_5_common);
+ return container_of(target->arch_info, struct xscale_common, arm);
}
-typedef struct xscale_reg_s
-{
+struct xscale_reg {
int dbg_handler_number;
- target_t *target;
-} xscale_reg_t;
+ struct target *target;
+};
-enum
-{
+enum {
XSCALE_MAINID, /* 0 */
XSCALE_CACHETYPE,
XSCALE_CTRL,
XSCALE_TXRXCTRL,
};
-#define ERROR_XSCALE_NO_TRACE_DATA (-1500)
+#define ERROR_XSCALE_NO_TRACE_DATA (-700)
#endif /* XSCALE_H */