target: document possibly unreachable target in deinit_target()
[fw/openocd] / src / target / xscale.h
index 2bb2ba5ea14dee84dd66456bdc7ad747511c4543..a86edb2fba6a35bc091060ee475cf38ee2e89fb4 100644 (file)
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
-#ifndef XSCALE_H
-#define XSCALE_H
 
-#include <target/armv4_5.h>
-#include <target/armv4_5_mmu.h>
-#include <target/trace.h>
+#ifndef OPENOCD_TARGET_XSCALE_H
+#define OPENOCD_TARGET_XSCALE_H
+
+#include "arm.h"
+#include "armv4_5_mmu.h"
+#include "trace.h"
 
 #define        XSCALE_COMMON_MAGIC 0x58534341
 
 #define        XSCALE_IXP4XX_PXA2XX    0x0
 #define        XSCALE_PXA3XX           0x4
 
-enum xscale_debug_reason
-{
+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,
 };
 
-struct xscale_trace_entry
-{
+struct xscale_trace_entry {
        uint8_t data;
        enum xscale_trace_entry_type type;
 };
 
-struct xscale_trace_data
-{
+struct xscale_trace_data {
        struct xscale_trace_entry *entries;
        int depth;
        uint32_t chkpt0;
        uint32_t chkpt1;
        uint32_t last_instruction;
+       unsigned int num_checkpoints;
        struct xscale_trace_data *next;
 };
 
-struct xscale_trace
-{
-       trace_status_t capture_status;  /* current state of capture run */
+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_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;
-       arm_state_t core_state;         /* current core state (ARM, Thumb, Jazelle) */
+       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
-{
+struct xscale_common {
        /* armv4/5 common stuff */
-       struct arm armv4_5_common;
+       struct arm arm;
 
        int common_magic;
 
@@ -141,18 +139,15 @@ struct xscale_common
 static inline struct xscale_common *
 target_to_xscale(struct target *target)
 {
-       return container_of(target->arch_info, struct xscale_common,
-                       armv4_5_common);
+       return container_of(target->arch_info, struct xscale_common, arm);
 }
 
-struct xscale_reg
-{
+struct xscale_reg {
        int dbg_handler_number;
        struct target *target;
 };
 
-enum
-{
+enum {
        XSCALE_MAINID,          /* 0 */
        XSCALE_CACHETYPE,
        XSCALE_CTRL,
@@ -177,6 +172,17 @@ enum
        XSCALE_TXRXCTRL,
 };
 
-#define ERROR_XSCALE_NO_TRACE_DATA     (-1500)
+#define ERROR_XSCALE_NO_TRACE_DATA     (-700)
+
+/* DCSR bit and field definitions */
+#define DCSR_TR        (1 << 16)
+#define DCSR_TU        (1 << 17)
+#define DCSR_TS        (1 << 18)
+#define DCSR_TA        (1 << 19)
+#define DCSR_TD        (1 << 20)
+#define DCSR_TI        (1 << 22)
+#define DCSR_TF        (1 << 23)
+#define DCSR_TRAP_MASK \
+       (DCSR_TF | DCSR_TI | DCSR_TD | DCSR_TA | DCSR_TS | DCSR_TU | DCSR_TR)
 
-#endif /* XSCALE_H */
+#endif /* OPENOCD_TARGET_XSCALE_H */