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.


more updates
[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