source: mainline/kernel/arch/ia64/include/register.h@ 2f23341

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 2f23341 was 598f90e, checked in by Jiri Svoboda <jiri@…>, 15 years ago

Use istate_t definitions from kernel instead of duplicating them.

  • Property mode set to 100644
File size: 8.1 KB
Line 
1/*
2 * Copyright (c) 2005 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup ia64
30 * @{
31 */
32/** @file
33 */
34
35#ifndef KERN_ia64_REGISTER_H_
36#define KERN_ia64_REGISTER_H_
37
38#define DCR_PP_MASK (1 << 0)
39#define DCR_BE_MASK (1 << 1)
40#define DCR_LC_MASK (1 << 2)
41#define DCR_DM_MASK (1 << 8)
42#define DCR_DP_MASK (1 << 9)
43#define DCR_DK_MASK (1 << 10)
44#define DCR_DX_MASK (1 << 11)
45#define DCR_DR_MASK (1 << 12)
46#define DCR_DA_MASK (1 << 13)
47#define DCR_DD_MASK (1 << 14)
48
49#define CR_IVR_MASK 0x0f
50
51#define PSR_IC_MASK (1 << 13)
52#define PSR_I_MASK (1 << 14)
53#define PSR_PK_MASK (1 << 15)
54#define PSR_DT_MASK (1 << 17)
55#define PSR_DFL_MASK (1 << 18)
56#define PSR_DFH_MASK (1 << 19)
57#define PSR_RT_MASK (1 << 27)
58#define PSR_IT_MASK (1 << 36)
59
60#define PSR_CPL_SHIFT 32
61#define PSR_CPL_MASK_SHIFTED 3
62
63#define PFM_MASK (~0x3fffffffff)
64
65#define RSC_MODE_MASK 3
66#define RSC_PL_MASK 12
67
68/** Application registers. */
69#define AR_KR0 0
70#define AR_KR1 1
71#define AR_KR2 2
72#define AR_KR3 3
73#define AR_KR4 4
74#define AR_KR5 5
75#define AR_KR6 6
76#define AR_KR7 7
77/* ARs 8-15 are reserved */
78#define AR_RSC 16
79#define AR_BSP 17
80#define AR_BSPSTORE 18
81#define AR_RNAT 19
82/* AR 20 is reserved */
83#define AR_FCR 21
84/* ARs 22-23 are reserved */
85#define AR_EFLAG 24
86#define AR_CSD 25
87#define AR_SSD 26
88#define AR_CFLG 27
89#define AR_FSR 28
90#define AR_FIR 29
91#define AR_FDR 30
92/* AR 31 is reserved */
93#define AR_CCV 32
94/* ARs 33-35 are reserved */
95#define AR_UNAT 36
96/* ARs 37-39 are reserved */
97#define AR_FPSR 40
98/* ARs 41-43 are reserved */
99#define AR_ITC 44
100/* ARs 45-47 are reserved */
101/* ARs 48-63 are ignored */
102#define AR_PFS 64
103#define AR_LC 65
104#define AR_EC 66
105/* ARs 67-111 are reserved */
106/* ARs 112-127 are ignored */
107
108/** Control registers. */
109#define CR_DCR 0
110#define CR_ITM 1
111#define CR_IVA 2
112/* CR3-CR7 are reserved */
113#define CR_PTA 8
114/* CR9-CR15 are reserved */
115#define CR_IPSR 16
116#define CR_ISR 17
117/* CR18 is reserved */
118#define CR_IIP 19
119#define CR_IFA 20
120#define CR_ITIR 21
121#define CR_IIPA 22
122#define CR_IFS 23
123#define CR_IIM 24
124#define CR_IHA 25
125/* CR26-CR63 are reserved */
126#define CR_LID 64
127#define CR_IVR 65
128#define CR_TPR 66
129#define CR_EOI 67
130#define CR_IRR0 68
131#define CR_IRR1 69
132#define CR_IRR2 70
133#define CR_IRR3 71
134#define CR_ITV 72
135#define CR_PMV 73
136#define CR_CMCV 74
137/* CR75-CR79 are reserved */
138#define CR_LRR0 80
139#define CR_LRR1 81
140/* CR82-CR127 are reserved */
141
142#ifndef __ASM__
143
144#ifdef KERNEL
145#include <typedefs.h>
146#else
147#include <sys/types.h>
148#endif
149
150/** Processor Status Register. */
151typedef union {
152 uint64_t value;
153 struct {
154 unsigned int : 1;
155 unsigned int be : 1; /**< Big-Endian data accesses. */
156 unsigned int up : 1; /**< User Performance monitor enable. */
157 unsigned int ac : 1; /**< Alignment Check. */
158 unsigned int mfl : 1; /**< Lower floating-point register written. */
159 unsigned int mfh : 1; /**< Upper floating-point register written. */
160 unsigned int : 7;
161 unsigned int ic : 1; /**< Interruption Collection. */
162 unsigned int i : 1; /**< Interrupt Bit. */
163 unsigned int pk : 1; /**< Protection Key enable. */
164 unsigned int : 1;
165 unsigned int dt : 1; /**< Data address Translation. */
166 unsigned int dfl : 1; /**< Disabled Floating-point Low register set. */
167 unsigned int dfh : 1; /**< Disabled Floating-point High register set. */
168 unsigned int sp : 1; /**< Secure Performance monitors. */
169 unsigned int pp : 1; /**< Privileged Performance monitor enable. */
170 unsigned int di : 1; /**< Disable Instruction set transition. */
171 unsigned int si : 1; /**< Secure Interval timer. */
172 unsigned int db : 1; /**< Debug Breakpoint fault. */
173 unsigned int lp : 1; /**< Lower Privilege transfer trap. */
174 unsigned int tb : 1; /**< Taken Branch trap. */
175 unsigned int rt : 1; /**< Register Stack Translation. */
176 unsigned int : 4;
177 unsigned int cpl : 2; /**< Current Privilege Level. */
178 unsigned int is : 1; /**< Instruction Set. */
179 unsigned int mc : 1; /**< Machine Check abort mask. */
180 unsigned int it : 1; /**< Instruction address Translation. */
181 unsigned int id : 1; /**< Instruction Debug fault disable. */
182 unsigned int da : 1; /**< Disable Data Access and Dirty-bit faults. */
183 unsigned int dd : 1; /**< Data Debug fault disable. */
184 unsigned int ss : 1; /**< Single Step enable. */
185 unsigned int ri : 2; /**< Restart Instruction. */
186 unsigned int ed : 1; /**< Exception Deferral. */
187 unsigned int bn : 1; /**< Register Bank. */
188 unsigned int ia : 1; /**< Disable Instruction Access-bit faults. */
189 } __attribute__ ((packed));
190} psr_t;
191
192/** Register Stack Configuration Register */
193typedef union {
194 uint64_t value;
195 struct {
196 unsigned int mode : 2;
197 unsigned int pl : 2; /**< Privilege Level. */
198 unsigned int be : 1; /**< Big-endian. */
199 unsigned int : 11;
200 unsigned int loadrs : 14;
201 } __attribute__ ((packed));
202} rsc_t;
203
204/** External Interrupt Vector Register */
205typedef union {
206 uint8_t vector;
207 uint64_t value;
208} cr_ivr_t;
209
210/** Task Priority Register */
211typedef union {
212 uint64_t value;
213 struct {
214 unsigned int : 4;
215 unsigned int mic: 4; /**< Mask Interrupt Class. */
216 unsigned int : 8;
217 unsigned int mmi: 1; /**< Mask Maskable Interrupts. */
218 } __attribute__ ((packed));
219} cr_tpr_t;
220
221/** Interval Timer Vector */
222typedef union {
223 uint64_t value;
224 struct {
225 unsigned int vector : 8;
226 unsigned int : 4;
227 unsigned int : 1;
228 unsigned int : 3;
229 unsigned int m : 1; /**< Mask. */
230 } __attribute__ ((packed));
231} cr_itv_t;
232
233/** Interruption Status Register */
234typedef union {
235 uint64_t value;
236 struct {
237 union {
238 /** General Exception code field structuring. */
239 uint16_t code;
240 struct {
241 unsigned int ge_na : 4;
242 unsigned int ge_code : 4;
243 } __attribute__ ((packed));
244 };
245 uint8_t vector;
246 unsigned int : 8;
247 unsigned int x : 1; /**< Execute exception. */
248 unsigned int w : 1; /**< Write exception. */
249 unsigned int r : 1; /**< Read exception. */
250 unsigned int na : 1; /**< Non-access exception. */
251 unsigned int sp : 1; /**< Speculative load exception. */
252 unsigned int rs : 1; /**< Register stack. */
253 unsigned int ir : 1; /**< Incomplete Register frame. */
254 unsigned int ni : 1; /**< Nested Interruption. */
255 unsigned int so : 1; /**< IA-32 Supervisor Override. */
256 unsigned int ei : 2; /**< Excepting Instruction. */
257 unsigned int ed : 1; /**< Exception Deferral. */
258 unsigned int : 20;
259 } __attribute__ ((packed));
260} cr_isr_t;
261
262/** CPUID Register 3 */
263typedef union {
264 uint64_t value;
265 struct {
266 uint8_t number;
267 uint8_t revision;
268 uint8_t model;
269 uint8_t family;
270 uint8_t archrev;
271 } __attribute__ ((packed));
272} cpuid3_t;
273
274#endif /* !__ASM__ */
275
276#endif
277
278/** @}
279 */
Note: See TracBrowser for help on using the repository browser.