Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


timer fixes
[palacios.git] / palacios / include / devices / apic_regs.h
1 /* 
2  * This file is part of the Palacios Virtual Machine Monitor developed
3  * by the V3VEE Project with funding from the United States National 
4  * Science Foundation and the Department of Energy.  
5  *
6  * The V3VEE Project is a joint project between Northwestern University
7  * and the University of New Mexico.  You can find out more at 
8  * http://www.v3vee.org
9  *
10  * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> 
11  * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org> 
12  * All rights reserved.
13  *
14  * Author: Jack Lange <jarusl@cs.northwestern.edu>
15  *
16  * This is free software.  You are permitted to use,
17  * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
18  */
19
20
21
22 struct lapic_id_reg {
23   union {
24     uint32_t val;
25     struct {
26       uint_t rsvd          : 24;
27       uint_t apic_id       : 8;
28     } __attribute__((packed));
29   } __attribute__((packed));
30 } __attribute__((packed));
31
32 struct apic_ver_reg {
33   union {
34     uint32_t val;
35     struct {
36       uint_t ver           : 8;
37       uint_t rsvd1         : 8;
38       uint_t max_lvts      : 8;
39       uint_t rsvd2         : 7;
40       uint_t ext_reg_present : 1;
41     } __attribute__((packed));
42   } __attribute__((packed));
43 } __attribute__((packed));
44
45
46 struct ext_apic_ctrl_reg {
47   union {
48     uint32_t val;
49     struct {
50       uint_t ver           : 1;
51       uint_t seoi_enable   : 1;
52       uint_t ext_id_enable : 1;
53       uint_t rsvd2         : 29;
54     } __attribute__((packed));
55   } __attribute__((packed));
56 } __attribute__((packed));
57
58
59
60 struct local_vec_tbl_reg {
61   union {
62     uint32_t val;
63     struct {
64       uint_t vec           : 8;
65       uint_t msg_type      : 3;
66       uint_t rsvd1         : 1;
67       uint_t del_status    : 1;
68       uint_t rsvd2         : 1;
69       uint_t rem_irr       : 1;
70       uint_t trig_mode     : 1;
71       uint_t mask          : 1;
72       uint_t tmr_mode      : 1;
73       uint_t rsvd3         : 14;
74     } __attribute__((packed));
75   } __attribute__((packed));
76 } __attribute__((packed));
77
78
79 struct tmr_vec_tbl_reg {
80   union {
81     uint32_t val;
82     struct {
83       uint_t vec           : 8;
84       uint_t rsvd          : 4;
85       uint_t del_status    : 1;
86       uint_t rsvd2         : 3;
87       uint_t mask          : 1;
88 #define APIC_TMR_ONESHOT  0
89 #define APIC_TMR_PERIODIC 1
90       uint_t tmr_mode      : 1;
91       uint_t rsvd3         : 14;
92     } __attribute__((packed));
93   } __attribute__((packed));
94 } __attribute__((packed));
95
96
97 struct tmr_div_cfg_reg {
98 #define APIC_TMR_DIV1    0xb // 1011
99 #define APIC_TMR_DIV2    0x0 // 0000
100 #define APIC_TMR_DIV4    0x1 // 0001
101 #define APIC_TMR_DIV8    0x2 // 0010
102 #define APIC_TMR_DIV16   0x3 // 0011
103 #define APIC_TMR_DIV32   0x8 // 1000
104 #define APIC_TMR_DIV64   0x9 // 1001
105 #define APIC_TMR_DIV128  0xa // 1010
106   union {
107     uint32_t val;
108     struct {
109       uint_t div_val       : 2;
110       uint_t rsvd1         : 1;
111       uint_t div_val2      : 1;
112       uint_t rsvd2         : 28;
113     } __attribute__((packed));
114   } __attribute__((packed));
115 } __attribute__((packed));
116
117
118 struct lint_vec_tbl_reg {
119   union {
120     uint32_t val;
121     struct {
122       uint_t vec           : 8;
123       uint_t msg_type      : 3;
124       uint_t rsvd1         : 1;
125       uint_t del_status    : 1;
126       uint_t rsvd2         : 1;
127       uint_t rem_irr       : 1;
128       uint_t trig_mode     : 1;
129       uint_t mask          : 1;
130       uint_t rsvd3         : 15;
131     } __attribute__((packed));
132   } __attribute__((packed));
133 } __attribute__((packed));
134
135
136 struct perf_ctr_loc_vec_tbl_reg {
137   union {
138     uint32_t val;
139     struct {
140       uint_t vec           : 8;
141       uint_t msg_type      : 3;
142       uint_t rsvd1         : 1;
143       uint_t del_status    : 1;
144       uint_t rsvd2         : 3;
145       uint_t mask          : 1;
146       uint_t rsvd3         : 15;
147     } __attribute__((packed));
148   } __attribute__((packed));
149 } __attribute__((packed));
150
151
152 struct therm_loc_vec_tbl_reg {
153   union {
154     uint32_t val;
155     struct {
156       uint_t vec           : 8;
157       uint_t msg_type      : 3;
158       uint_t rsvd1         : 1;
159       uint_t del_status    : 1;
160       uint_t rsvd2         : 3;
161       uint_t mask          : 1;
162       uint_t rsvd3         : 15;
163     } __attribute__((packed));
164   } __attribute__((packed));
165 } __attribute__((packed));
166
167 struct err_vec_tbl_reg {
168   union {
169     uint32_t val;
170     struct {
171       uint_t vec           : 8;
172       uint_t msg_type      : 3;
173       uint_t rsvd1         : 1;
174       uint_t del_status    : 1;
175       uint_t rsvd2         : 3;
176       uint_t mask          : 1;
177       uint_t rsvd3         : 15;
178     } __attribute__((packed));
179   } __attribute__((packed));
180 } __attribute__((packed));
181
182
183 struct err_status_reg {
184   union {
185     uint32_t val;
186     struct {
187       uint_t rsvd1         : 2;
188       uint_t sent_acc_err  : 1;
189       uint_t recv_acc_err  : 1;
190       uint_t rsvd2         : 1;
191       uint_t sent_ill_err  : 1;
192       uint_t recv_ill_err  : 1;
193       uint_t ill_reg_addr  : 1;
194       uint_t rsvd3         : 24;
195     } __attribute__((packed));
196   } __attribute__((packed));
197 } __attribute__((packed));
198
199
200 struct spurious_int_reg {
201   union {
202     uint32_t val;
203     struct {
204       uint_t vec           : 8;
205       uint_t apic_soft_en  : 1;
206       uint_t foc_cpu_chk   : 1;
207       uint_t rsvd1         : 22;
208     } __attribute__((packed));
209   } __attribute__((packed));
210 } __attribute__((packed));
211
212 struct int_cmd_reg {
213   union {
214     uint64_t val;
215
216     struct {
217       uint32_t lo;
218       uint32_t hi;
219     } __attribute__((packed));
220
221     struct {
222       uint_t vec           : 8;
223       uint_t msg_type      : 3;
224       uint_t dst_mode      : 1;
225       uint_t del_status    : 1;
226       uint_t rsvd1         : 1;
227       uint_t lvl           : 1;
228       uint_t trig_mode     : 1;
229       uint_t rem_rd_status : 2;
230       uint_t dst_shorthand : 2;
231       uint64_t rsvd2       : 36;
232       uint32_t dst         : 8;
233     } __attribute__((packed));
234   } __attribute__((packed));
235 } __attribute__((packed));
236
237
238 struct log_dst_reg {
239   union {
240     uint32_t val;
241     struct {
242       uint_t rsvd1         : 24;
243       uint_t dst_log_id    : 8;
244     } __attribute__((packed));
245   } __attribute__((packed));
246 } __attribute__((packed));
247
248
249 struct dst_fmt_reg {
250   union {
251     uint32_t val;
252     struct {
253       uint_t rsvd1         : 28;
254       uint_t model         : 4;
255     } __attribute__((packed));
256   } __attribute__((packed));
257 } __attribute__((packed));
258
259
260 struct arb_prio_reg {
261   union {
262     uint32_t val;
263     struct {
264       uint_t arb_prio_sub  : 4;
265       uint_t arb_prio      : 4;
266       uint_t rsvd1         : 24;
267     } __attribute__((packed));
268   } __attribute__((packed));
269 } __attribute__((packed));
270
271
272
273
274 struct task_prio_reg {
275   union {
276     uint32_t val;
277     struct {
278       uint_t task_prio_sub  : 4;
279       uint_t task_prio      : 4;
280       uint_t rsvd1         : 24;
281     } __attribute__((packed));
282   } __attribute__((packed));
283 } __attribute__((packed));
284
285
286
287 struct proc_prio_reg {
288   union {
289     uint32_t val;
290     struct {
291       uint_t proc_prio_sub  : 4;
292       uint_t proc_prio      : 4;
293       uint_t rsvd1         : 24;
294     } __attribute__((packed));
295   } __attribute__((packed));
296 } __attribute__((packed));
297
298 struct ext_apic_feature_reg {
299   union {
300     uint32_t val;
301     struct {
302       uint_t int_en_reg_cap : 1;
303       uint_t spec_eoi_cap   : 1;
304       uint_t ext_apic_id_cap: 1;
305       uint_t rsvd1          : 13;
306       uint_t ext_lvt_cnt    : 8;
307       uint_t rsvd2          : 8;
308     } __attribute__((packed));
309   } __attribute__((packed));
310 } __attribute__((packed));
311
312
313 struct spec_eoi_reg {
314   union {
315     uint32_t val;
316     struct {
317       uint_t vec           : 8;
318       uint_t rsvd1         : 24;
319     } __attribute__((packed));
320   } __attribute__((packed));
321 } __attribute__((packed));
322
323