0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __XEN_PUBLIC_PLATFORM_H__
0011 #define __XEN_PUBLIC_PLATFORM_H__
0012
0013 #include <xen/interface/xen.h>
0014
0015 #define XENPF_INTERFACE_VERSION 0x03000001
0016
0017
0018
0019
0020
0021 #define XENPF_settime32 17
0022 struct xenpf_settime32 {
0023
0024 uint32_t secs;
0025 uint32_t nsecs;
0026 uint64_t system_time;
0027 };
0028 DEFINE_GUEST_HANDLE_STRUCT(xenpf_settime32_t);
0029 #define XENPF_settime64 62
0030 struct xenpf_settime64 {
0031
0032 uint64_t secs;
0033 uint32_t nsecs;
0034 uint32_t mbz;
0035 uint64_t system_time;
0036 };
0037 DEFINE_GUEST_HANDLE_STRUCT(xenpf_settime64_t);
0038
0039
0040
0041
0042
0043
0044
0045
0046 #define XENPF_add_memtype 31
0047 struct xenpf_add_memtype {
0048
0049 xen_pfn_t mfn;
0050 uint64_t nr_mfns;
0051 uint32_t type;
0052
0053 uint32_t handle;
0054 uint32_t reg;
0055 };
0056 DEFINE_GUEST_HANDLE_STRUCT(xenpf_add_memtype_t);
0057
0058
0059
0060
0061
0062
0063
0064
0065 #define XENPF_del_memtype 32
0066 struct xenpf_del_memtype {
0067
0068 uint32_t handle;
0069 uint32_t reg;
0070 };
0071 DEFINE_GUEST_HANDLE_STRUCT(xenpf_del_memtype_t);
0072
0073
0074 #define XENPF_read_memtype 33
0075 struct xenpf_read_memtype {
0076
0077 uint32_t reg;
0078
0079 xen_pfn_t mfn;
0080 uint64_t nr_mfns;
0081 uint32_t type;
0082 };
0083 DEFINE_GUEST_HANDLE_STRUCT(xenpf_read_memtype_t);
0084
0085 #define XENPF_microcode_update 35
0086 struct xenpf_microcode_update {
0087
0088 GUEST_HANDLE(void) data;
0089 uint32_t length;
0090 };
0091 DEFINE_GUEST_HANDLE_STRUCT(xenpf_microcode_update_t);
0092
0093 #define XENPF_platform_quirk 39
0094 #define QUIRK_NOIRQBALANCING 1
0095 #define QUIRK_IOAPIC_BAD_REGSEL 2
0096 #define QUIRK_IOAPIC_GOOD_REGSEL 3
0097 struct xenpf_platform_quirk {
0098
0099 uint32_t quirk_id;
0100 };
0101 DEFINE_GUEST_HANDLE_STRUCT(xenpf_platform_quirk_t);
0102
0103 #define XENPF_efi_runtime_call 49
0104 #define XEN_EFI_get_time 1
0105 #define XEN_EFI_set_time 2
0106 #define XEN_EFI_get_wakeup_time 3
0107 #define XEN_EFI_set_wakeup_time 4
0108 #define XEN_EFI_get_next_high_monotonic_count 5
0109 #define XEN_EFI_get_variable 6
0110 #define XEN_EFI_set_variable 7
0111 #define XEN_EFI_get_next_variable_name 8
0112 #define XEN_EFI_query_variable_info 9
0113 #define XEN_EFI_query_capsule_capabilities 10
0114 #define XEN_EFI_update_capsule 11
0115
0116 struct xenpf_efi_runtime_call {
0117 uint32_t function;
0118
0119
0120
0121
0122
0123 uint32_t misc;
0124 xen_ulong_t status;
0125 union {
0126 #define XEN_EFI_GET_TIME_SET_CLEARS_NS 0x00000001
0127 struct {
0128 struct xenpf_efi_time {
0129 uint16_t year;
0130 uint8_t month;
0131 uint8_t day;
0132 uint8_t hour;
0133 uint8_t min;
0134 uint8_t sec;
0135 uint32_t ns;
0136 int16_t tz;
0137 uint8_t daylight;
0138 } time;
0139 uint32_t resolution;
0140 uint32_t accuracy;
0141 } get_time;
0142
0143 struct xenpf_efi_time set_time;
0144
0145 #define XEN_EFI_GET_WAKEUP_TIME_ENABLED 0x00000001
0146 #define XEN_EFI_GET_WAKEUP_TIME_PENDING 0x00000002
0147 struct xenpf_efi_time get_wakeup_time;
0148
0149 #define XEN_EFI_SET_WAKEUP_TIME_ENABLE 0x00000001
0150 #define XEN_EFI_SET_WAKEUP_TIME_ENABLE_ONLY 0x00000002
0151 struct xenpf_efi_time set_wakeup_time;
0152
0153 #define XEN_EFI_VARIABLE_NON_VOLATILE 0x00000001
0154 #define XEN_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
0155 #define XEN_EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
0156 struct {
0157 GUEST_HANDLE(void) name;
0158 xen_ulong_t size;
0159 GUEST_HANDLE(void) data;
0160 struct xenpf_efi_guid {
0161 uint32_t data1;
0162 uint16_t data2;
0163 uint16_t data3;
0164 uint8_t data4[8];
0165 } vendor_guid;
0166 } get_variable, set_variable;
0167
0168 struct {
0169 xen_ulong_t size;
0170 GUEST_HANDLE(void) name;
0171 struct xenpf_efi_guid vendor_guid;
0172 } get_next_variable_name;
0173
0174 struct {
0175 uint32_t attr;
0176 uint64_t max_store_size;
0177 uint64_t remain_store_size;
0178 uint64_t max_size;
0179 } query_variable_info;
0180
0181 struct {
0182 GUEST_HANDLE(void) capsule_header_array;
0183 xen_ulong_t capsule_count;
0184 uint64_t max_capsule_size;
0185 uint32_t reset_type;
0186 } query_capsule_capabilities;
0187
0188 struct {
0189 GUEST_HANDLE(void) capsule_header_array;
0190 xen_ulong_t capsule_count;
0191 uint64_t sg_list;
0192 } update_capsule;
0193 } u;
0194 };
0195 DEFINE_GUEST_HANDLE_STRUCT(xenpf_efi_runtime_call);
0196
0197 #define XEN_FW_EFI_VERSION 0
0198 #define XEN_FW_EFI_CONFIG_TABLE 1
0199 #define XEN_FW_EFI_VENDOR 2
0200 #define XEN_FW_EFI_MEM_INFO 3
0201 #define XEN_FW_EFI_RT_VERSION 4
0202
0203 #define XENPF_firmware_info 50
0204 #define XEN_FW_DISK_INFO 1
0205 #define XEN_FW_DISK_MBR_SIGNATURE 2
0206 #define XEN_FW_VBEDDC_INFO 3
0207 #define XEN_FW_EFI_INFO 4
0208 #define XEN_FW_KBD_SHIFT_FLAGS 5
0209
0210 struct xenpf_firmware_info {
0211
0212 uint32_t type;
0213 uint32_t index;
0214
0215 union {
0216 struct {
0217
0218 uint8_t device;
0219 uint8_t version;
0220 uint16_t interface_support;
0221
0222 uint16_t legacy_max_cylinder;
0223 uint8_t legacy_max_head;
0224 uint8_t legacy_sectors_per_track;
0225
0226
0227 GUEST_HANDLE(void) edd_params;
0228 } disk_info;
0229 struct {
0230 uint8_t device;
0231 uint32_t mbr_signature;
0232 } disk_mbr_signature;
0233 struct {
0234
0235 uint8_t capabilities;
0236 uint8_t edid_transfer_time;
0237
0238 GUEST_HANDLE(uchar) edid;
0239 } vbeddc_info;
0240
0241 union xenpf_efi_info {
0242 uint32_t version;
0243 struct {
0244 uint64_t addr;
0245 uint32_t nent;
0246 } cfg;
0247 struct {
0248 uint32_t revision;
0249 uint32_t bufsz;
0250 GUEST_HANDLE(void) name;
0251
0252 } vendor;
0253 struct {
0254 uint64_t addr;
0255 uint64_t size;
0256 uint64_t attr;
0257 uint32_t type;
0258 } mem;
0259 } efi_info;
0260
0261 uint8_t kbd_shift_flags;
0262 } u;
0263 };
0264 DEFINE_GUEST_HANDLE_STRUCT(xenpf_firmware_info_t);
0265
0266 #define XENPF_enter_acpi_sleep 51
0267 struct xenpf_enter_acpi_sleep {
0268
0269 uint16_t val_a;
0270 uint16_t val_b;
0271 uint32_t sleep_state;
0272 #define XENPF_ACPI_SLEEP_EXTENDED 0x00000001
0273 uint32_t flags;
0274 };
0275 DEFINE_GUEST_HANDLE_STRUCT(xenpf_enter_acpi_sleep_t);
0276
0277 #define XENPF_change_freq 52
0278 struct xenpf_change_freq {
0279
0280 uint32_t flags;
0281 uint32_t cpu;
0282 uint64_t freq;
0283 };
0284 DEFINE_GUEST_HANDLE_STRUCT(xenpf_change_freq_t);
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294 #define XENPF_getidletime 53
0295 struct xenpf_getidletime {
0296
0297
0298 GUEST_HANDLE(uchar) cpumap_bitmap;
0299
0300
0301 uint32_t cpumap_nr_cpus;
0302
0303 GUEST_HANDLE(uint64_t) idletime;
0304
0305
0306 uint64_t now;
0307 };
0308 DEFINE_GUEST_HANDLE_STRUCT(xenpf_getidletime_t);
0309
0310 #define XENPF_set_processor_pminfo 54
0311
0312
0313 #define XEN_PROCESSOR_PM_CX 1
0314 #define XEN_PROCESSOR_PM_PX 2
0315 #define XEN_PROCESSOR_PM_TX 4
0316
0317
0318 #define XEN_PM_CX 0
0319 #define XEN_PM_PX 1
0320 #define XEN_PM_TX 2
0321 #define XEN_PM_PDC 3
0322
0323 #define XEN_PX_PCT 1
0324 #define XEN_PX_PSS 2
0325 #define XEN_PX_PPC 4
0326 #define XEN_PX_PSD 8
0327
0328 struct xen_power_register {
0329 uint32_t space_id;
0330 uint32_t bit_width;
0331 uint32_t bit_offset;
0332 uint32_t access_size;
0333 uint64_t address;
0334 };
0335
0336 struct xen_processor_csd {
0337 uint32_t domain;
0338 uint32_t coord_type;
0339 uint32_t num;
0340 };
0341 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_csd);
0342
0343 struct xen_processor_cx {
0344 struct xen_power_register reg;
0345 uint8_t type;
0346 uint32_t latency;
0347 uint32_t power;
0348 uint32_t dpcnt;
0349 GUEST_HANDLE(xen_processor_csd) dp;
0350 };
0351 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_cx);
0352
0353 struct xen_processor_flags {
0354 uint32_t bm_control:1;
0355 uint32_t bm_check:1;
0356 uint32_t has_cst:1;
0357 uint32_t power_setup_done:1;
0358 uint32_t bm_rld_set:1;
0359 };
0360
0361 struct xen_processor_power {
0362 uint32_t count;
0363 struct xen_processor_flags flags;
0364 GUEST_HANDLE(xen_processor_cx) states;
0365 };
0366
0367 struct xen_pct_register {
0368 uint8_t descriptor;
0369 uint16_t length;
0370 uint8_t space_id;
0371 uint8_t bit_width;
0372 uint8_t bit_offset;
0373 uint8_t reserved;
0374 uint64_t address;
0375 };
0376
0377 struct xen_processor_px {
0378 uint64_t core_frequency;
0379 uint64_t power;
0380 uint64_t transition_latency;
0381 uint64_t bus_master_latency;
0382 uint64_t control;
0383 uint64_t status;
0384 };
0385 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_px);
0386
0387 struct xen_psd_package {
0388 uint64_t num_entries;
0389 uint64_t revision;
0390 uint64_t domain;
0391 uint64_t coord_type;
0392 uint64_t num_processors;
0393 };
0394
0395 struct xen_processor_performance {
0396 uint32_t flags;
0397 uint32_t platform_limit;
0398 struct xen_pct_register control_register;
0399 struct xen_pct_register status_register;
0400 uint32_t state_count;
0401 GUEST_HANDLE(xen_processor_px) states;
0402 struct xen_psd_package domain_info;
0403 uint32_t shared_type;
0404 };
0405 DEFINE_GUEST_HANDLE_STRUCT(xen_processor_performance);
0406
0407 struct xenpf_set_processor_pminfo {
0408
0409 uint32_t id;
0410 uint32_t type;
0411 union {
0412 struct xen_processor_power power;
0413 struct xen_processor_performance perf;
0414 GUEST_HANDLE(uint32_t) pdc;
0415 };
0416 };
0417 DEFINE_GUEST_HANDLE_STRUCT(xenpf_set_processor_pminfo);
0418
0419 #define XENPF_get_cpuinfo 55
0420 struct xenpf_pcpuinfo {
0421
0422 uint32_t xen_cpuid;
0423
0424
0425 uint32_t max_present;
0426 #define XEN_PCPU_FLAGS_ONLINE 1
0427
0428 #define XEN_PCPU_FLAGS_INVALID 2
0429 uint32_t flags;
0430 uint32_t apic_id;
0431 uint32_t acpi_id;
0432 };
0433 DEFINE_GUEST_HANDLE_STRUCT(xenpf_pcpuinfo);
0434
0435 #define XENPF_cpu_online 56
0436 #define XENPF_cpu_offline 57
0437 struct xenpf_cpu_ol {
0438 uint32_t cpuid;
0439 };
0440 DEFINE_GUEST_HANDLE_STRUCT(xenpf_cpu_ol);
0441
0442 #define XENPF_cpu_hotadd 58
0443 struct xenpf_cpu_hotadd {
0444 uint32_t apic_id;
0445 uint32_t acpi_id;
0446 uint32_t pxm;
0447 };
0448
0449 #define XENPF_mem_hotadd 59
0450 struct xenpf_mem_hotadd {
0451 uint64_t spfn;
0452 uint64_t epfn;
0453 uint32_t pxm;
0454 uint32_t flags;
0455 };
0456
0457 #define XENPF_core_parking 60
0458 struct xenpf_core_parking {
0459
0460 #define XEN_CORE_PARKING_SET 1
0461 #define XEN_CORE_PARKING_GET 2
0462 uint32_t type;
0463
0464
0465 uint32_t idle_nums;
0466 };
0467 DEFINE_GUEST_HANDLE_STRUCT(xenpf_core_parking);
0468
0469 #define XENPF_get_symbol 63
0470 struct xenpf_symdata {
0471
0472 uint32_t namelen;
0473
0474
0475 uint32_t symnum;
0476
0477
0478
0479
0480 GUEST_HANDLE(char) name;
0481 uint64_t address;
0482 char type;
0483 };
0484 DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata);
0485
0486 struct xen_platform_op {
0487 uint32_t cmd;
0488 uint32_t interface_version;
0489 union {
0490 struct xenpf_settime32 settime32;
0491 struct xenpf_settime64 settime64;
0492 struct xenpf_add_memtype add_memtype;
0493 struct xenpf_del_memtype del_memtype;
0494 struct xenpf_read_memtype read_memtype;
0495 struct xenpf_microcode_update microcode;
0496 struct xenpf_platform_quirk platform_quirk;
0497 struct xenpf_efi_runtime_call efi_runtime_call;
0498 struct xenpf_firmware_info firmware_info;
0499 struct xenpf_enter_acpi_sleep enter_acpi_sleep;
0500 struct xenpf_change_freq change_freq;
0501 struct xenpf_getidletime getidletime;
0502 struct xenpf_set_processor_pminfo set_pminfo;
0503 struct xenpf_pcpuinfo pcpu_info;
0504 struct xenpf_cpu_ol cpu_ol;
0505 struct xenpf_cpu_hotadd cpu_add;
0506 struct xenpf_mem_hotadd mem_add;
0507 struct xenpf_core_parking core_parking;
0508 struct xenpf_symdata symdata;
0509 uint8_t pad[128];
0510 } u;
0511 };
0512 DEFINE_GUEST_HANDLE_STRUCT(xen_platform_op_t);
0513
0514 #endif