* Copyright (C) 2005 by Dominic Rath *
* Dominic.Rath@gmx.de *
* *
+ * Copyright (C) 2007,2008 Øyvind Harboe *
+ * oyvind.harboe@zylin.com *
+ * *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
#ifndef XSCALE_H
#define XSCALE_H
-#include "target.h"
-#include "register.h"
#include "armv4_5.h"
#include "armv4_5_mmu.h"
+#include "trace.h"
#define XSCALE_COMMON_MAGIC 0x58534341
typedef struct xscale_jtag_s
{
/* position in JTAG scan chain */
- int chain_pos;
+ jtag_tap_t *tap;
/* IR length and instructions */
int ir_length;
XSCALE_DBG_REASON_TB_FULL,
};
+enum xscale_trace_entry_type
+{
+ XSCALE_TRACE_MESSAGE = 0x0,
+ XSCALE_TRACE_ADDRESS = 0x1,
+};
+
+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 */
+ 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;
+ 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;
int external_debug_break;
/* breakpoint / watchpoint handling */
- int force_hw_bkpts;
int dbr_available;
int dbr0_used;
int dbr1_used;
u16 thumb_bkpt;
u8 vector_catch;
-
- int trace_buffer_enabled;
- int trace_buffer_fill;
+
+ xscale_trace_t trace;
int arch_debug_reason;
/* possible future enhancements that go beyond XScale common stuff */
void *arch_info;
+
+ int fast_memory_access;
} xscale_common_t;
typedef struct xscale_reg_s
XSCALE_TXRXCTRL,
};
+#define ERROR_XSCALE_NO_TRACE_DATA (-1500)
+
#endif /* XSCALE_H */