1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #ifndef __XEN_PUBLIC_PLATFORM_H__
28 #define __XEN_PUBLIC_PLATFORM_H__
29
30 #include <xen/interface/xen.h>
31
32 #define XENPF_INTERFACE_VERSION 0x03000001
33
34
35
36
37
38 #define XENPF_settime32 17
39 struct xenpf_settime32 {
40
41 uint32_t secs;
42 uint32_t nsecs;
43 uint64_t system_time;
44 };
45 DEFINE_GUEST_HANDLE_STRUCT(xenpf_settime32_t);
46 #define XENPF_settime64 62
47 struct xenpf_settime64 {
48
49 uint64_t secs;
50 uint32_t nsecs;
51 uint32_t mbz;
52 uint64_t system_time;
53 };
54 DEFINE_GUEST_HANDLE_STRUCT(xenpf_settime64_t);
55
56
57
58
59
60
61
62
63 #define XENPF_add_memtype 31
64 struct xenpf_add_memtype {
65
66 xen_pfn_t mfn;
67 uint64_t nr_mfns;
68 uint32_t type;
69
70 uint32_t handle;
71 uint32_t reg;
72 };
73 DEFINE_GUEST_HANDLE_STRUCT(xenpf_add_memtype_t);
74
75
76
77
78
79
80
81
82 #define XENPF_del_memtype 32
83 struct xenpf_del_memtype {
84
85 uint32_t handle;
86 uint32_t reg;
87 };
88 DEFINE_GUEST_HANDLE_STRUCT(xenpf_del_memtype_t);
89
90
91 #define XENPF_read_memtype 33
92 struct xenpf_read_memtype {
93
94 uint32_t reg;
95
96 xen_pfn_t mfn;
97 uint64_t nr_mfns;
98 uint32_t type;
99 };
100 DEFINE_GUEST_HANDLE_STRUCT(xenpf_read_memtype_t);
101
102 #define XENPF_microcode_update 35
103 struct xenpf_microcode_update {
104
105 GUEST_HANDLE(void) data;
106 uint32_t length;
107 };
108 DEFINE_GUEST_HANDLE_STRUCT(xenpf_microcode_update_t);
109
110 #define XENPF_platform_quirk 39
111 #define QUIRK_NOIRQBALANCING 1
112 #define QUIRK_IOAPIC_BAD_REGSEL 2
113 #define QUIRK_IOAPIC_GOOD_REGSEL 3
114 struct xenpf_platform_quirk {
115
116 uint32_t quirk_id;
117 };
118 DEFINE_GUEST_HANDLE_STRUCT(xenpf_platform_quirk_t);
119
120 #define XENPF_efi_runtime_call 49
121 #define XEN_EFI_get_time 1
122 #define XEN_EFI_set_time 2
123 #define XEN_EFI_get_wakeup_time 3
124 #define XEN_EFI_set_wakeup_time 4
125 #define XEN_EFI_get_next_high_monotonic_count 5
126 #define XEN_EFI_get_variable 6
127 #define XEN_EFI_set_variable 7
128 #define XEN_EFI_get_next_variable_name 8
129 #define XEN_EFI_query_variable_info 9
130 #define XEN_EFI_query_capsule_capabilities 10
131 #define XEN_EFI_update_capsule 11
132
133 struct xenpf_efi_runtime_call {
134 uint32_t function;
135
136
137
138
139
140 uint32_t misc;
141 xen_ulong_t status;
142 union {
143 #define XEN_EFI_GET_TIME_SET_CLEARS_NS 0x00000001
144 struct {
145 struct xenpf_efi_time {
146 uint16_t year;
147 uint8_t month;
148 uint8_t day;
149 uint8_t hour;
150 uint8_t min;
151 uint8_t sec;
152 uint32_t ns;
153 int16_t tz;
154 uint8_t daylight;
155 } time;
156 uint32_t resolution;
157 uint32_t accuracy;
158 } get_time;
159
160 struct xenpf_efi_time set_time;
161
162 #define XEN_EFI_GET_WAKEUP_TIME_ENABLED 0x00000001
163 #define XEN_EFI_GET_WAKEUP_TIME_PENDING 0x00000002
164 struct xenpf_efi_time get_wakeup_time;
165
166 #define XEN_EFI_SET_WAKEUP_TIME_ENABLE 0x00000001
167 #define XEN_EFI_SET_WAKEUP_TIME_ENABLE_ONLY 0x00000002
168 struct xenpf_efi_time set_wakeup_time;
169
170 #define XEN_EFI_VARIABLE_NON_VOLATILE 0x00000001
171 #define XEN_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
172 #define XEN_EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
173 struct {
174 GUEST_HANDLE(void) name;
175 xen_ulong_t size;
176 GUEST_HANDLE(void) data;
177 struct xenpf_efi_guid {
178 uint32_t data1;
179 uint16_t data2;
180 uint16_t data3;
181 uint8_t data4[8];
182 } vendor_guid;
183 } get_variable, set_variable;
184
185 struct {
186 xen_ulong_t size;
187 GUEST_HANDLE(void) name;
188 struct xenpf_efi_guid vendor_guid;
189 } get_next_variable_name;
190
191 struct {
192 uint32_t attr;
193 uint64_t max_store_size;
194 uint64_t remain_store_size;
195 uint64_t max_size;
196 } query_variable_info;
197
198 struct {
199 GUEST_HANDLE(void) capsule_header_array;
200 xen_ulong_t capsule_count;
201 uint64_t max_capsule_size;
202 uint32_t reset_type;
203 } query_capsule_capabilities;
204
205 struct {
206 GUEST_HANDLE(void) capsule_header_array;
207 xen_ulong_t capsule_count;
208 uint64_t sg_list;
209 } update_capsule;
210 } u;
211 };
212 DEFINE_GUEST_HANDLE_STRUCT(xenpf_efi_runtime_call);
213
214 #define XEN_FW_EFI_VERSION 0
215 #define XEN_FW_EFI_CONFIG_TABLE 1
216 #define XEN_FW_EFI_VENDOR 2
217 #define XEN_FW_EFI_MEM_INFO 3
218 #define XEN_FW_EFI_RT_VERSION 4
219
220 #define XENPF_firmware_info 50
221 #define XEN_FW_DISK_INFO 1
222 #define XEN_FW_DISK_MBR_SIGNATURE 2
223 #define XEN_FW_VBEDDC_INFO 3
224 #define XEN_FW_EFI_INFO 4
225 #define XEN_FW_KBD_SHIFT_FLAGS 5
226
227 struct xenpf_firmware_info {
228
229 uint32_t type;
230 uint32_t index;
231
232 union {
233 struct {
234
235 uint8_t device;
236 uint8_t version;
237 uint16_t interface_support;
238
239 uint16_t legacy_max_cylinder;
240 uint8_t legacy_max_head;
241 uint8_t legacy_sectors_per_track;
242
243
244 GUEST_HANDLE(void) edd_params;
245 } disk_info;
246 struct {
247 uint8_t device;
248 uint32_t mbr_signature;
249 } disk_mbr_signature;
250 struct {
251
252 uint8_t capabilities;
253 uint8_t edid_transfer_time;
254
255 GUEST_HANDLE(uchar) edid;
256 } vbeddc_info;
257
258 union xenpf_efi_info {
259 uint32_t version;
260 struct {
261 uint64_t addr;
262 uint32_t nent;
263 } cfg;
264 struct {
265 uint32_t revision;
266 uint32_t bufsz;
267 GUEST_HANDLE(void) name;
268
269 } vendor;
270 struct {
271 uint64_t addr;
272 uint64_t size;
273 uint64_t attr;
274 uint32_t type;
275 } mem;
276 } efi_info;
277
278 uint8_t kbd_shift_flags;
279 } u;
280 };
281 DEFINE_GUEST_HANDLE_STRUCT(xenpf_firmware_info_t);
282
283 #define XENPF_enter_acpi_sleep 51
284 struct xenpf_enter_acpi_sleep {
285
286 uint16_t val_a;
287 uint16_t val_b;
288 uint32_t sleep_state;
289 #define XENPF_ACPI_SLEEP_EXTENDED 0x00000001
290 uint32_t flags;
291 };
292 DEFINE_GUEST_HANDLE_STRUCT(xenpf_enter_acpi_sleep_t);
293
294 #define XENPF_change_freq 52
295 struct xenpf_change_freq {
296
297 uint32_t flags;
298 uint32_t cpu;
299 uint64_t freq;
300 };
301 DEFINE_GUEST_HANDLE_STRUCT(xenpf_change_freq_t);
302
303
304
305
306
307
308
309
310
311 #define XENPF_getidletime 53
312 struct xenpf_getidletime {
313
314
315 GUEST_HANDLE(uchar) cpumap_bitmap;
316
317
318 uint32_t cpumap_nr_cpus;
319
320 GUEST_HANDLE(uint64_t) idletime;
321
322
323 uint64_t now;
324 };
325 DEFINE_GUEST_HANDLE_STRUCT(xenpf_getidletime_t);
326
327 #define XENPF_set_processor_pminfo 54
328
329
330 #define XEN_PROCESSOR_PM_CX 1
331 #define XEN_PROCESSOR_PM_PX 2
332 #define XEN_PROCESSOR_PM_TX 4
333
334
335 #define XEN_PM_CX 0
336 #define XEN_PM_PX 1
337 #define XEN_PM_TX 2
338 #define XEN_PM_PDC 3
339
340 #define XEN_PX_PCT 1
341 #define XEN_PX_PSS 2
342 #define XEN_PX_PPC 4
343 #define XEN_PX_PSD 8
344
345 struct xen_power_register {
346 uint32_t space_id;
347 uint32_t bit_width;
348 uint32_t bit_offset;
349 uint32_t access_size;
350 uint64_t address;
351 };
352
353 struct xen_processor_csd {
354 uint32_t domain;
355 uint32_t coord_type;
356 uint32_t num;
357 };
358 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_csd);
359
360 struct xen_processor_cx {
361 struct xen_power_register reg;
362 uint8_t type;
363 uint32_t latency;
364 uint32_t power;
365 uint32_t dpcnt;
366 GUEST_HANDLE(xen_processor_csd) dp;
367 };
368 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_cx);
369
370 struct xen_processor_flags {
371 uint32_t bm_control:1;
372 uint32_t bm_check:1;
373 uint32_t has_cst:1;
374 uint32_t power_setup_done:1;
375 uint32_t bm_rld_set:1;
376 };
377
378 struct xen_processor_power {
379 uint32_t count;
380 struct xen_processor_flags flags;
381 GUEST_HANDLE(xen_processor_cx) states;
382 };
383
384 struct xen_pct_register {
385 uint8_t descriptor;
386 uint16_t length;
387 uint8_t space_id;
388 uint8_t bit_width;
389 uint8_t bit_offset;
390 uint8_t reserved;
391 uint64_t address;
392 };
393
394 struct xen_processor_px {
395 uint64_t core_frequency;
396 uint64_t power;
397 uint64_t transition_latency;
398 uint64_t bus_master_latency;
399 uint64_t control;
400 uint64_t status;
401 };
402 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_px);
403
404 struct xen_psd_package {
405 uint64_t num_entries;
406 uint64_t revision;
407 uint64_t domain;
408 uint64_t coord_type;
409 uint64_t num_processors;
410 };
411
412 struct xen_processor_performance {
413 uint32_t flags;
414 uint32_t platform_limit;
415 struct xen_pct_register control_register;
416 struct xen_pct_register status_register;
417 uint32_t state_count;
418 GUEST_HANDLE(xen_processor_px) states;
419 struct xen_psd_package domain_info;
420 uint32_t shared_type;
421 };
422 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_performance);
423
424 struct xenpf_set_processor_pminfo {
425
426 uint32_t id;
427 uint32_t type;
428 union {
429 struct xen_processor_power power;
430 struct xen_processor_performance perf;
431 GUEST_HANDLE(uint32_t) pdc;
432 };
433 };
434 DEFINE_GUEST_HANDLE_STRUCT(xenpf_set_processor_pminfo);
435
436 #define XENPF_get_cpuinfo 55
437 struct xenpf_pcpuinfo {
438
439 uint32_t xen_cpuid;
440
441
442 uint32_t max_present;
443 #define XEN_PCPU_FLAGS_ONLINE 1
444
445 #define XEN_PCPU_FLAGS_INVALID 2
446 uint32_t flags;
447 uint32_t apic_id;
448 uint32_t acpi_id;
449 };
450 DEFINE_GUEST_HANDLE_STRUCT(xenpf_pcpuinfo);
451
452 #define XENPF_cpu_online 56
453 #define XENPF_cpu_offline 57
454 struct xenpf_cpu_ol {
455 uint32_t cpuid;
456 };
457 DEFINE_GUEST_HANDLE_STRUCT(xenpf_cpu_ol);
458
459 #define XENPF_cpu_hotadd 58
460 struct xenpf_cpu_hotadd {
461 uint32_t apic_id;
462 uint32_t acpi_id;
463 uint32_t pxm;
464 };
465
466 #define XENPF_mem_hotadd 59
467 struct xenpf_mem_hotadd {
468 uint64_t spfn;
469 uint64_t epfn;
470 uint32_t pxm;
471 uint32_t flags;
472 };
473
474 #define XENPF_core_parking 60
475 struct xenpf_core_parking {
476
477 #define XEN_CORE_PARKING_SET 1
478 #define XEN_CORE_PARKING_GET 2
479 uint32_t type;
480
481
482 uint32_t idle_nums;
483 };
484 DEFINE_GUEST_HANDLE_STRUCT(xenpf_core_parking);
485
486 #define XENPF_get_symbol 63
487 struct xenpf_symdata {
488
489 uint32_t namelen;
490
491
492 uint32_t symnum;
493
494
495
496
497 GUEST_HANDLE(char) name;
498 uint64_t address;
499 char type;
500 };
501 DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata);
502
503 struct xen_platform_op {
504 uint32_t cmd;
505 uint32_t interface_version;
506 union {
507 struct xenpf_settime32 settime32;
508 struct xenpf_settime64 settime64;
509 struct xenpf_add_memtype add_memtype;
510 struct xenpf_del_memtype del_memtype;
511 struct xenpf_read_memtype read_memtype;
512 struct xenpf_microcode_update microcode;
513 struct xenpf_platform_quirk platform_quirk;
514 struct xenpf_efi_runtime_call efi_runtime_call;
515 struct xenpf_firmware_info firmware_info;
516 struct xenpf_enter_acpi_sleep enter_acpi_sleep;
517 struct xenpf_change_freq change_freq;
518 struct xenpf_getidletime getidletime;
519 struct xenpf_set_processor_pminfo set_pminfo;
520 struct xenpf_pcpuinfo pcpu_info;
521 struct xenpf_cpu_ol cpu_ol;
522 struct xenpf_cpu_hotadd cpu_add;
523 struct xenpf_mem_hotadd mem_add;
524 struct xenpf_core_parking core_parking;
525 struct xenpf_symdata symdata;
526 uint8_t pad[128];
527 } u;
528 };
529 DEFINE_GUEST_HANDLE_STRUCT(xen_platform_op_t);
530
531 #endif