]> git.sur5r.net Git - openocd/blob - src/target/xscale.h
- merged XScale branch back into trunk
[openocd] / src / target / xscale.h
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20 #ifndef XSCALE_H
21 #define XSCALE_H
22
23 #include "target.h"
24 #include "register.h"
25 #include "armv4_5.h"
26 #include "armv4_5_mmu.h"
27
28 #define XSCALE_COMMON_MAGIC 0x58534341
29
30 typedef struct xscale_jtag_s
31 {
32         /* position in JTAG scan chain */
33         int chain_pos;
34
35         /* IR length and instructions */        
36         int ir_length;
37         u32 dbgrx;
38         u32 dbgtx;
39         u32 ldic;
40         u32 dcsr;
41 } xscale_jtag_t;
42
43 enum xscale_debug_reason
44 {
45         XSCALE_DBG_REASON_GENERIC,
46         XSCALE_DBG_REASON_RESET,
47         XSCALE_DBG_REASON_TB_FULL,
48 };
49
50 typedef struct xscale_common_s
51 {
52         int common_magic;
53         
54         /* XScale registers (CP15, DBG) */
55         reg_cache_t *reg_cache;
56
57         /* pxa250, pxa255, pxa27x, ixp42x, ... */
58         char *variant;
59
60         xscale_jtag_t jtag_info;
61         
62         /* current state of the debug handler */
63         int handler_installed;
64         int handler_running;
65         u32 handler_address;
66         
67         /* target-endian buffers with exception vectors */
68         u32 low_vectors[8];
69         u32 high_vectors[8];
70         
71         /* static low vectors */
72         u8 static_low_vectors_set;      /* bit field with static vectors set by the user */
73         u8 static_high_vectors_set; /* bit field with static vectors set by the user */
74         u32 static_low_vectors[8];
75         u32 static_high_vectors[8];
76
77         /* DCache cleaning */   
78         u32 cache_clean_address;
79         
80         /* whether hold_rst and ext_dbg_break should be set */
81         int hold_rst;
82         int external_debug_break;
83         
84         /* breakpoint / watchpoint handling */
85         int force_hw_bkpts;
86         int dbr_available;
87         int dbr0_used;
88         int dbr1_used;
89         int ibcr_available;
90         int ibcr0_used;
91         int     ibcr1_used;
92         u32 arm_bkpt;
93         u16 thumb_bkpt;
94         
95         u8 vector_catch;
96         
97         int trace_buffer_enabled;
98         int trace_buffer_fill;
99         
100         int arch_debug_reason;
101         
102         /* armv4/5 common stuff */
103         armv4_5_common_t armv4_5_common;
104         
105         /* MMU/Caches */
106         armv4_5_mmu_common_t armv4_5_mmu;
107         u32 cp15_control_reg;
108         
109         /* possible future enhancements that go beyond XScale common stuff */
110         void *arch_info;
111 } xscale_common_t;
112
113 typedef struct xscale_reg_s
114 {
115         int dbg_handler_number;
116         target_t *target;
117 } xscale_reg_t;
118
119 enum
120 {
121         XSCALE_MAINID,          /* 0 */
122         XSCALE_CACHETYPE,
123         XSCALE_CTRL,
124         XSCALE_AUXCTRL,
125         XSCALE_TTB,
126         XSCALE_DAC,
127         XSCALE_FSR,
128         XSCALE_FAR,
129         XSCALE_PID,
130         XSCALE_CPACCESS,
131         XSCALE_IBCR0,           /* 10 */
132         XSCALE_IBCR1,
133         XSCALE_DBR0,
134         XSCALE_DBR1,
135         XSCALE_DBCON,
136         XSCALE_TBREG,
137         XSCALE_CHKPT0,
138         XSCALE_CHKPT1,
139         XSCALE_DCSR,
140         XSCALE_TX,
141         XSCALE_RX,                      /* 20 */
142         XSCALE_TXRXCTRL,
143 };
144
145 #endif /* XSCALE_H */