]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/abi/virt-ia32-amd64.cpp
dcf1d8098f32f03d9d8776077abe41a19d9e3914
[l4.git] / kernel / fiasco / src / abi / virt-ia32-amd64.cpp
1 INTERFACE [svm]:
2
3 #include "l4_types.h"
4
5 // TODO: Make this sharable with user-land (see uarts)
6 struct Vmcb_control_area
7 {
8   Unsigned16 intercept_rd_crX;
9   Unsigned16 intercept_wr_crX;
10
11   Unsigned16 intercept_rd_drX;
12   Unsigned16 intercept_wr_drX;
13
14   Unsigned32 intercept_exceptions;
15
16   Unsigned32 intercept_instruction0;
17   Unsigned32 intercept_instruction1;
18
19   Unsigned8 _reserved0[44];
20
21   Unsigned64 iopm_base_pa;
22   Unsigned64 msrpm_base_pa;
23   Unsigned64 tsc_offset;
24   Unsigned64 guest_asid_tlb_ctl;
25   Unsigned64 interrupt_ctl;
26   Unsigned64 interrupt_shadow;
27   Unsigned64 exitcode;
28   Unsigned64 exitinfo1;
29   Unsigned64 exitinfo2;
30   Unsigned64 exitintinfo;
31   Unsigned64 np_enable;
32
33   Unsigned8 _reserved1[16];
34
35   Unsigned64 eventinj;
36   Unsigned64 n_cr3;
37   Unsigned64 lbr_virtualization_enable;
38
39   Unsigned8 _reserved2[832];
40 } __attribute__((packed));
41
42 struct Vmcb_state_save_area
43 {
44   Unsigned16 es_sel;
45   Unsigned16 es_attrib;
46   Unsigned32 es_limit;
47   Unsigned64 es_base;
48
49   Unsigned16 cs_sel;
50   Unsigned16 cs_attrib;
51   Unsigned32 cs_limit;
52   Unsigned64 cs_base;
53
54   Unsigned16 ss_sel;
55   Unsigned16 ss_attrib;
56   Unsigned32 ss_limit;
57   Unsigned64 ss_base;
58
59   Unsigned16 ds_sel;
60   Unsigned16 ds_attrib;
61   Unsigned32 ds_limit;
62   Unsigned64 ds_base;
63
64   Unsigned16 fs_sel;
65   Unsigned16 fs_attrib;
66   Unsigned32 fs_limit;
67   Unsigned64 fs_base;
68
69   Unsigned16 gs_sel;
70   Unsigned16 gs_attrib;
71   Unsigned32 gs_limit;
72   Unsigned64 gs_base;
73
74   Unsigned16 gdtr_sel;
75   Unsigned16 gdtr_attrib;
76   Unsigned32 gdtr_limit;
77   Unsigned64 gdtr_base;
78
79   Unsigned16 ldtr_sel;
80   Unsigned16 ldtr_attrib;
81   Unsigned32 ldtr_limit;
82   Unsigned64 ldtr_base;
83
84   Unsigned16 idtr_sel;
85   Unsigned16 idtr_attrib;
86   Unsigned32 idtr_limit;
87   Unsigned64 idtr_base;
88
89   Unsigned16 tr_sel;
90   Unsigned16 tr_attrib;
91   Unsigned32 tr_limit;
92   Unsigned64 tr_base;
93
94   Unsigned8 _reserved0[43];
95
96   Unsigned8 cpl;
97
98   Unsigned32 _reserved1;
99
100   Unsigned64 efer;
101
102   Unsigned8 _reserved2[112];
103
104   Unsigned64 cr4;
105   Unsigned64 cr3;
106   Unsigned64 cr0;
107   Unsigned64 dr7;
108   Unsigned64 dr6;
109   Unsigned64 rflags;
110   Unsigned64 rip;
111
112   Unsigned8 _reserved3[88];
113
114   Unsigned64 rsp;
115
116   Unsigned8 _reserved4[24];
117
118   Unsigned64 rax;
119   Unsigned64 star;
120   Unsigned64 lstar;
121   Unsigned64 cstar;
122   Unsigned64 sfmask;
123   Unsigned64 kernelgsbase;
124   Unsigned64 sysenter_cs;
125   Unsigned64 sysenter_esp;
126   Unsigned64 sysenter_eip;
127   Unsigned64 cr2;
128
129   Unsigned8 _reserved5[32];
130
131   Unsigned64 g_pat;
132   Unsigned64 dbgctl;
133   Unsigned64 br_from;
134   Unsigned64 br_to;
135   Unsigned64 lastexcpfrom;
136   Unsigned64 last_excpto;
137
138   Unsigned8 _reserved6[2408];
139 } __attribute__((packed));
140
141 struct Vmcb
142 {
143   unsigned np_enabled() const { return control_area.np_enable & 1; }
144
145   Vmcb_control_area control_area;
146   Vmcb_state_save_area state_save_area;
147 } __attribute__((packed));
148