xscale_trace_t -> struct xscale_trace
[openocd.git] / src / target / xscale.h
index 8d1c25cca8c19e884bfa0f71462b3bd11a9609af..936782cf3705f85cc7e943ab6b8aff25f96f6350 100644 (file)
@@ -2,6 +2,9 @@
  *   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"
-#include "image.h"
 
 #define        XSCALE_COMMON_MAGIC 0x58534341
 
-typedef struct xscale_jtag_s
-{
-       /* position in JTAG scan chain */
-       int chain_pos;
-
-       /* IR length and instructions */        
-       int ir_length;
-       u32 dbgrx;
-       u32 dbgtx;
-       u32 ldic;
-       u32 dcsr;
-} xscale_jtag_t;
+/* These four JTAG instructions are architecturally defined.
+ * Lengths are core-specific; originally 5 bits, later 7.
+ */
+#define XSCALE_DBGRX   0x02
+#define XSCALE_DBGTX   0x10
+#define XSCALE_LDIC    0x07
+#define XSCALE_SELDCSR 0x09
 
 enum xscale_debug_reason
 {
@@ -55,101 +50,99 @@ enum xscale_trace_entry_type
        XSCALE_TRACE_ADDRESS = 0x1,
 };
 
-typedef struct xscale_trace_entry_s
+struct xscale_trace_entry
 {
-       u8 data;
+       uint8_t data;
        enum xscale_trace_entry_type type;
-} xscale_trace_entry_t;
+};
 
-typedef struct xscale_trace_data_s
+struct xscale_trace_data
 {
-       xscale_trace_entry_t *entries;
+       struct xscale_trace_entry *entries;
        int depth;
-       u32 chkpt0;
-       u32 chkpt1;
-       u32 last_instruction;
-       struct xscale_trace_data_s *next;
-} xscale_trace_data_t;
+       uint32_t chkpt0;
+       uint32_t chkpt1;
+       uint32_t last_instruction;
+       struct xscale_trace_data *next;
+};
 
-typedef struct xscale_trace_s
+struct xscale_trace
 {
        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 */
+       struct image_s *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;
-       u32 current_pc;
+       uint32_t current_pc;
        armv4_5_state_t core_state;             /* current core state (ARM, Thumb, Jazelle) */
-} xscale_trace_t;
+};
 
-typedef struct xscale_common_s
+struct xscale_common
 {
+       /* armv4/5 common stuff */
+       armv4_5_common_t armv4_5_common;
+
        int common_magic;
-       
-       /* XScale registers (CP15, DBG) */
-       reg_cache_t *reg_cache;
 
-       /* pxa250, pxa255, pxa27x, ixp42x, ... */
-       char *variant;
+       /* XScale registers (CP15, DBG) */
+       struct reg_cache *reg_cache;
 
-       xscale_jtag_t jtag_info;
-       
        /* current state of the debug handler */
-       int handler_installed;
-       int handler_running;
-       u32 handler_address;
-       
+       uint32_t handler_address;
+
        /* target-endian buffers with exception vectors */
-       u32 low_vectors[8];
-       u32 high_vectors[8];
-       
+       uint32_t low_vectors[8];
+       uint32_t high_vectors[8];
+
        /* static low vectors */
-       u8 static_low_vectors_set;      /* bit field with static vectors set by the user */
-       u8 static_high_vectors_set; /* bit field with static vectors set by the user */
-       u32 static_low_vectors[8];
-       u32 static_high_vectors[8];
-
-       /* DCache cleaning */   
-       u32 cache_clean_address;
-       
+       uint8_t static_low_vectors_set; /* bit field with static vectors set by the user */
+       uint8_t static_high_vectors_set; /* bit field with static vectors set by the user */
+       uint32_t static_low_vectors[8];
+       uint32_t static_high_vectors[8];
+
+       /* DCache cleaning */
+       uint32_t cache_clean_address;
+
        /* whether hold_rst and ext_dbg_break should be set */
        int hold_rst;
        int external_debug_break;
-       
+
        /* breakpoint / watchpoint handling */
-       int force_hw_bkpts;
        int dbr_available;
        int dbr0_used;
        int dbr1_used;
        int ibcr_available;
        int ibcr0_used;
        int     ibcr1_used;
-       u32 arm_bkpt;
-       u16 thumb_bkpt;
-       
-       u8 vector_catch;
+       uint32_t arm_bkpt;
+       uint16_t thumb_bkpt;
+
+       uint8_t vector_catch;
+
+       struct xscale_trace trace;
 
-       xscale_trace_t 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;
-       u32 cp15_control_reg;
-       
-       /* possible future enhancements that go beyond XScale common stuff */
-       void *arch_info;
-} xscale_common_t;
-
-typedef struct xscale_reg_s
+       struct armv4_5_mmu_common armv4_5_mmu;
+       uint32_t cp15_control_reg;
+
+       int fast_memory_access;
+};
+
+static inline struct xscale_common *
+target_to_xscale(struct target_s *target)
+{
+       return container_of(target->arch_info, struct xscale_common,
+                       armv4_5_common);
+}
+
+struct xscale_reg
 {
        int dbg_handler_number;
        target_t *target;
-} xscale_reg_t;
+};
 
 enum
 {

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)