13a9fd824SRoger Pau Monné /****************************************************************************** 23a9fd824SRoger Pau Monné * platform.h 33a9fd824SRoger Pau Monné * 43a9fd824SRoger Pau Monné * Hardware platform operations. Intended for use by domain-0 kernel. 53a9fd824SRoger Pau Monné * 63a9fd824SRoger Pau Monné * Permission is hereby granted, free of charge, to any person obtaining a copy 73a9fd824SRoger Pau Monné * of this software and associated documentation files (the "Software"), to 83a9fd824SRoger Pau Monné * deal in the Software without restriction, including without limitation the 93a9fd824SRoger Pau Monné * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 103a9fd824SRoger Pau Monné * sell copies of the Software, and to permit persons to whom the Software is 113a9fd824SRoger Pau Monné * furnished to do so, subject to the following conditions: 123a9fd824SRoger Pau Monné * 133a9fd824SRoger Pau Monné * The above copyright notice and this permission notice shall be included in 143a9fd824SRoger Pau Monné * all copies or substantial portions of the Software. 153a9fd824SRoger Pau Monné * 163a9fd824SRoger Pau Monné * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 173a9fd824SRoger Pau Monné * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 183a9fd824SRoger Pau Monné * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 193a9fd824SRoger Pau Monné * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 203a9fd824SRoger Pau Monné * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 213a9fd824SRoger Pau Monné * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 223a9fd824SRoger Pau Monné * DEALINGS IN THE SOFTWARE. 233a9fd824SRoger Pau Monné * 243a9fd824SRoger Pau Monné * Copyright (c) 2002-2006, K Fraser 253a9fd824SRoger Pau Monné */ 263a9fd824SRoger Pau Monné 273a9fd824SRoger Pau Monné #ifndef __XEN_PUBLIC_PLATFORM_H__ 283a9fd824SRoger Pau Monné #define __XEN_PUBLIC_PLATFORM_H__ 293a9fd824SRoger Pau Monné 303a9fd824SRoger Pau Monné #include "xen.h" 313a9fd824SRoger Pau Monné 323a9fd824SRoger Pau Monné #define XENPF_INTERFACE_VERSION 0x03000001 333a9fd824SRoger Pau Monné 343a9fd824SRoger Pau Monné /* 353a9fd824SRoger Pau Monné * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC, 363a9fd824SRoger Pau Monné * 1 January, 1970 if the current system time was <system_time>. 373a9fd824SRoger Pau Monné */ 383a9fd824SRoger Pau Monné #define XENPF_settime32 17 393a9fd824SRoger Pau Monné struct xenpf_settime32 { 403a9fd824SRoger Pau Monné /* IN variables. */ 413a9fd824SRoger Pau Monné uint32_t secs; 423a9fd824SRoger Pau Monné uint32_t nsecs; 433a9fd824SRoger Pau Monné uint64_t system_time; 443a9fd824SRoger Pau Monné }; 453a9fd824SRoger Pau Monné typedef struct xenpf_settime32 xenpf_settime32_t; 463a9fd824SRoger Pau Monné #define XENPF_settime64 62 473a9fd824SRoger Pau Monné struct xenpf_settime64 { 483a9fd824SRoger Pau Monné /* IN variables. */ 493a9fd824SRoger Pau Monné uint64_t secs; 503a9fd824SRoger Pau Monné uint32_t nsecs; 513a9fd824SRoger Pau Monné uint32_t mbz; 523a9fd824SRoger Pau Monné uint64_t system_time; 533a9fd824SRoger Pau Monné }; 543a9fd824SRoger Pau Monné typedef struct xenpf_settime64 xenpf_settime64_t; 553a9fd824SRoger Pau Monné #if __XEN_INTERFACE_VERSION__ < 0x00040600 563a9fd824SRoger Pau Monné #define XENPF_settime XENPF_settime32 573a9fd824SRoger Pau Monné #define xenpf_settime xenpf_settime32 583a9fd824SRoger Pau Monné #else 593a9fd824SRoger Pau Monné #define XENPF_settime XENPF_settime64 603a9fd824SRoger Pau Monné #define xenpf_settime xenpf_settime64 613a9fd824SRoger Pau Monné #endif 623a9fd824SRoger Pau Monné typedef struct xenpf_settime xenpf_settime_t; 633a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t); 643a9fd824SRoger Pau Monné 653a9fd824SRoger Pau Monné /* 663a9fd824SRoger Pau Monné * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type. 673a9fd824SRoger Pau Monné * On x86, @type is an architecture-defined MTRR memory type. 683a9fd824SRoger Pau Monné * On success, returns the MTRR that was used (@reg) and a handle that can 693a9fd824SRoger Pau Monné * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting. 703a9fd824SRoger Pau Monné * (x86-specific). 713a9fd824SRoger Pau Monné */ 723a9fd824SRoger Pau Monné #define XENPF_add_memtype 31 733a9fd824SRoger Pau Monné struct xenpf_add_memtype { 743a9fd824SRoger Pau Monné /* IN variables. */ 753a9fd824SRoger Pau Monné xen_pfn_t mfn; 763a9fd824SRoger Pau Monné uint64_t nr_mfns; 773a9fd824SRoger Pau Monné uint32_t type; 783a9fd824SRoger Pau Monné /* OUT variables. */ 793a9fd824SRoger Pau Monné uint32_t handle; 803a9fd824SRoger Pau Monné uint32_t reg; 813a9fd824SRoger Pau Monné }; 823a9fd824SRoger Pau Monné typedef struct xenpf_add_memtype xenpf_add_memtype_t; 833a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t); 843a9fd824SRoger Pau Monné 853a9fd824SRoger Pau Monné /* 863a9fd824SRoger Pau Monné * Tear down an existing memory-range type. If @handle is remembered then it 873a9fd824SRoger Pau Monné * should be passed in to accurately tear down the correct setting (in case 883a9fd824SRoger Pau Monné * of overlapping memory regions with differing types). If it is not known 893a9fd824SRoger Pau Monné * then @handle should be set to zero. In all cases @reg must be set. 903a9fd824SRoger Pau Monné * (x86-specific). 913a9fd824SRoger Pau Monné */ 923a9fd824SRoger Pau Monné #define XENPF_del_memtype 32 933a9fd824SRoger Pau Monné struct xenpf_del_memtype { 943a9fd824SRoger Pau Monné /* IN variables. */ 953a9fd824SRoger Pau Monné uint32_t handle; 963a9fd824SRoger Pau Monné uint32_t reg; 973a9fd824SRoger Pau Monné }; 983a9fd824SRoger Pau Monné typedef struct xenpf_del_memtype xenpf_del_memtype_t; 993a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t); 1003a9fd824SRoger Pau Monné 1013a9fd824SRoger Pau Monné /* Read current type of an MTRR (x86-specific). */ 1023a9fd824SRoger Pau Monné #define XENPF_read_memtype 33 1033a9fd824SRoger Pau Monné struct xenpf_read_memtype { 1043a9fd824SRoger Pau Monné /* IN variables. */ 1053a9fd824SRoger Pau Monné uint32_t reg; 1063a9fd824SRoger Pau Monné /* OUT variables. */ 1073a9fd824SRoger Pau Monné xen_pfn_t mfn; 1083a9fd824SRoger Pau Monné uint64_t nr_mfns; 1093a9fd824SRoger Pau Monné uint32_t type; 1103a9fd824SRoger Pau Monné }; 1113a9fd824SRoger Pau Monné typedef struct xenpf_read_memtype xenpf_read_memtype_t; 1123a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t); 1133a9fd824SRoger Pau Monné 1143a9fd824SRoger Pau Monné #define XENPF_microcode_update 35 1153a9fd824SRoger Pau Monné struct xenpf_microcode_update { 1163a9fd824SRoger Pau Monné /* IN variables. */ 1173a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(const_void) data;/* Pointer to microcode data */ 1183a9fd824SRoger Pau Monné uint32_t length; /* Length of microcode data. */ 1193a9fd824SRoger Pau Monné }; 1203a9fd824SRoger Pau Monné typedef struct xenpf_microcode_update xenpf_microcode_update_t; 1213a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t); 1223a9fd824SRoger Pau Monné 1233a9fd824SRoger Pau Monné #define XENPF_platform_quirk 39 1243a9fd824SRoger Pau Monné #define QUIRK_NOIRQBALANCING 1 /* Do not restrict IO-APIC RTE targets */ 1253a9fd824SRoger Pau Monné #define QUIRK_IOAPIC_BAD_REGSEL 2 /* IO-APIC REGSEL forgets its value */ 1263a9fd824SRoger Pau Monné #define QUIRK_IOAPIC_GOOD_REGSEL 3 /* IO-APIC REGSEL behaves properly */ 1273a9fd824SRoger Pau Monné struct xenpf_platform_quirk { 1283a9fd824SRoger Pau Monné /* IN variables. */ 1293a9fd824SRoger Pau Monné uint32_t quirk_id; 1303a9fd824SRoger Pau Monné }; 1313a9fd824SRoger Pau Monné typedef struct xenpf_platform_quirk xenpf_platform_quirk_t; 1323a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t); 1333a9fd824SRoger Pau Monné 1343a9fd824SRoger Pau Monné #define XENPF_efi_runtime_call 49 1353a9fd824SRoger Pau Monné #define XEN_EFI_get_time 1 1363a9fd824SRoger Pau Monné #define XEN_EFI_set_time 2 1373a9fd824SRoger Pau Monné #define XEN_EFI_get_wakeup_time 3 1383a9fd824SRoger Pau Monné #define XEN_EFI_set_wakeup_time 4 1393a9fd824SRoger Pau Monné #define XEN_EFI_get_next_high_monotonic_count 5 1403a9fd824SRoger Pau Monné #define XEN_EFI_get_variable 6 1413a9fd824SRoger Pau Monné #define XEN_EFI_set_variable 7 1423a9fd824SRoger Pau Monné #define XEN_EFI_get_next_variable_name 8 1433a9fd824SRoger Pau Monné #define XEN_EFI_query_variable_info 9 1443a9fd824SRoger Pau Monné #define XEN_EFI_query_capsule_capabilities 10 1453a9fd824SRoger Pau Monné #define XEN_EFI_update_capsule 11 1463a9fd824SRoger Pau Monné 1473a9fd824SRoger Pau Monné struct xenpf_efi_time { 1483a9fd824SRoger Pau Monné uint16_t year; 1493a9fd824SRoger Pau Monné uint8_t month; 1503a9fd824SRoger Pau Monné uint8_t day; 1513a9fd824SRoger Pau Monné uint8_t hour; 1523a9fd824SRoger Pau Monné uint8_t min; 1533a9fd824SRoger Pau Monné uint8_t sec; 1543a9fd824SRoger Pau Monné uint32_t ns; 1553a9fd824SRoger Pau Monné int16_t tz; 1563a9fd824SRoger Pau Monné uint8_t daylight; 1573a9fd824SRoger Pau Monné }; 1583a9fd824SRoger Pau Monné 1593a9fd824SRoger Pau Monné struct xenpf_efi_guid { 1603a9fd824SRoger Pau Monné uint32_t data1; 1613a9fd824SRoger Pau Monné uint16_t data2; 1623a9fd824SRoger Pau Monné uint16_t data3; 1633a9fd824SRoger Pau Monné uint8_t data4[8]; 1643a9fd824SRoger Pau Monné }; 1653a9fd824SRoger Pau Monné 1663a9fd824SRoger Pau Monné struct xenpf_efi_runtime_call { 1673a9fd824SRoger Pau Monné uint32_t function; 1683a9fd824SRoger Pau Monné /* 1693a9fd824SRoger Pau Monné * This field is generally used for per sub-function flags (defined 1703a9fd824SRoger Pau Monné * below), except for the XEN_EFI_get_next_high_monotonic_count case, 1713a9fd824SRoger Pau Monné * where it holds the single returned value. 1723a9fd824SRoger Pau Monné */ 1733a9fd824SRoger Pau Monné uint32_t misc; 1743a9fd824SRoger Pau Monné xen_ulong_t status; 1753a9fd824SRoger Pau Monné union { 1763a9fd824SRoger Pau Monné #define XEN_EFI_GET_TIME_SET_CLEARS_NS 0x00000001 1773a9fd824SRoger Pau Monné struct { 1783a9fd824SRoger Pau Monné struct xenpf_efi_time time; 1793a9fd824SRoger Pau Monné uint32_t resolution; 1803a9fd824SRoger Pau Monné uint32_t accuracy; 1813a9fd824SRoger Pau Monné } get_time; 1823a9fd824SRoger Pau Monné 1833a9fd824SRoger Pau Monné struct xenpf_efi_time set_time; 1843a9fd824SRoger Pau Monné 1853a9fd824SRoger Pau Monné #define XEN_EFI_GET_WAKEUP_TIME_ENABLED 0x00000001 1863a9fd824SRoger Pau Monné #define XEN_EFI_GET_WAKEUP_TIME_PENDING 0x00000002 1873a9fd824SRoger Pau Monné struct xenpf_efi_time get_wakeup_time; 1883a9fd824SRoger Pau Monné 1893a9fd824SRoger Pau Monné #define XEN_EFI_SET_WAKEUP_TIME_ENABLE 0x00000001 1903a9fd824SRoger Pau Monné #define XEN_EFI_SET_WAKEUP_TIME_ENABLE_ONLY 0x00000002 1913a9fd824SRoger Pau Monné struct xenpf_efi_time set_wakeup_time; 1923a9fd824SRoger Pau Monné 1933a9fd824SRoger Pau Monné #define XEN_EFI_VARIABLE_NON_VOLATILE 0x00000001 1943a9fd824SRoger Pau Monné #define XEN_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 1953a9fd824SRoger Pau Monné #define XEN_EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 1963a9fd824SRoger Pau Monné struct { 1973a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 1983a9fd824SRoger Pau Monné xen_ulong_t size; 1993a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) data; 2003a9fd824SRoger Pau Monné struct xenpf_efi_guid vendor_guid; 2013a9fd824SRoger Pau Monné } get_variable, set_variable; 2023a9fd824SRoger Pau Monné 2033a9fd824SRoger Pau Monné struct { 2043a9fd824SRoger Pau Monné xen_ulong_t size; 2053a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 2063a9fd824SRoger Pau Monné struct xenpf_efi_guid vendor_guid; 2073a9fd824SRoger Pau Monné } get_next_variable_name; 2083a9fd824SRoger Pau Monné 2093a9fd824SRoger Pau Monné #define XEN_EFI_VARINFO_BOOT_SNAPSHOT 0x00000001 2103a9fd824SRoger Pau Monné struct { 2113a9fd824SRoger Pau Monné uint32_t attr; 2123a9fd824SRoger Pau Monné uint64_t max_store_size; 2133a9fd824SRoger Pau Monné uint64_t remain_store_size; 2143a9fd824SRoger Pau Monné uint64_t max_size; 2153a9fd824SRoger Pau Monné } query_variable_info; 2163a9fd824SRoger Pau Monné 2173a9fd824SRoger Pau Monné struct { 2183a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) capsule_header_array; 2193a9fd824SRoger Pau Monné xen_ulong_t capsule_count; 2203a9fd824SRoger Pau Monné uint64_t max_capsule_size; 2213a9fd824SRoger Pau Monné uint32_t reset_type; 2223a9fd824SRoger Pau Monné } query_capsule_capabilities; 2233a9fd824SRoger Pau Monné 2243a9fd824SRoger Pau Monné struct { 2253a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) capsule_header_array; 2263a9fd824SRoger Pau Monné xen_ulong_t capsule_count; 2273a9fd824SRoger Pau Monné uint64_t sg_list; /* machine address */ 2283a9fd824SRoger Pau Monné } update_capsule; 2293a9fd824SRoger Pau Monné } u; 2303a9fd824SRoger Pau Monné }; 2313a9fd824SRoger Pau Monné typedef struct xenpf_efi_runtime_call xenpf_efi_runtime_call_t; 2323a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_efi_runtime_call_t); 2333a9fd824SRoger Pau Monné 2343a9fd824SRoger Pau Monné #define XENPF_firmware_info 50 2353a9fd824SRoger Pau Monné #define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */ 2363a9fd824SRoger Pau Monné #define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */ 2373a9fd824SRoger Pau Monné #define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */ 2383a9fd824SRoger Pau Monné #define XEN_FW_EFI_INFO 4 /* from EFI */ 2393a9fd824SRoger Pau Monné #define XEN_FW_EFI_VERSION 0 2403a9fd824SRoger Pau Monné #define XEN_FW_EFI_CONFIG_TABLE 1 2413a9fd824SRoger Pau Monné #define XEN_FW_EFI_VENDOR 2 2423a9fd824SRoger Pau Monné #define XEN_FW_EFI_MEM_INFO 3 2433a9fd824SRoger Pau Monné #define XEN_FW_EFI_RT_VERSION 4 2443a9fd824SRoger Pau Monné #define XEN_FW_EFI_PCI_ROM 5 2453a9fd824SRoger Pau Monné #define XEN_FW_EFI_APPLE_PROPERTIES 6 2463a9fd824SRoger Pau Monné #define XEN_FW_KBD_SHIFT_FLAGS 5 2473a9fd824SRoger Pau Monné struct xenpf_firmware_info { 2483a9fd824SRoger Pau Monné /* IN variables. */ 2493a9fd824SRoger Pau Monné uint32_t type; 2503a9fd824SRoger Pau Monné uint32_t index; 2513a9fd824SRoger Pau Monné /* OUT variables. */ 2523a9fd824SRoger Pau Monné union { 2533a9fd824SRoger Pau Monné struct { 2543a9fd824SRoger Pau Monné /* Int13, Fn48: Check Extensions Present. */ 2553a9fd824SRoger Pau Monné uint8_t device; /* %dl: bios device number */ 2563a9fd824SRoger Pau Monné uint8_t version; /* %ah: major version */ 2573a9fd824SRoger Pau Monné uint16_t interface_support; /* %cx: support bitmap */ 2583a9fd824SRoger Pau Monné /* Int13, Fn08: Legacy Get Device Parameters. */ 2593a9fd824SRoger Pau Monné uint16_t legacy_max_cylinder; /* %cl[7:6]:%ch: max cyl # */ 2603a9fd824SRoger Pau Monné uint8_t legacy_max_head; /* %dh: max head # */ 2613a9fd824SRoger Pau Monné uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector # */ 2623a9fd824SRoger Pau Monné /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */ 2633a9fd824SRoger Pau Monné /* NB. First uint16_t of buffer must be set to buffer size. */ 2643a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) edd_params; 2653a9fd824SRoger Pau Monné } disk_info; /* XEN_FW_DISK_INFO */ 2663a9fd824SRoger Pau Monné struct { 2673a9fd824SRoger Pau Monné uint8_t device; /* bios device number */ 2683a9fd824SRoger Pau Monné uint32_t mbr_signature; /* offset 0x1b8 in mbr */ 2693a9fd824SRoger Pau Monné } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */ 2703a9fd824SRoger Pau Monné struct { 2713a9fd824SRoger Pau Monné /* Int10, AX=4F15: Get EDID info. */ 2723a9fd824SRoger Pau Monné uint8_t capabilities; 2733a9fd824SRoger Pau Monné uint8_t edid_transfer_time; 2743a9fd824SRoger Pau Monné /* must refer to 128-byte buffer */ 2753a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(uint8) edid; 2763a9fd824SRoger Pau Monné } vbeddc_info; /* XEN_FW_VBEDDC_INFO */ 2773a9fd824SRoger Pau Monné union xenpf_efi_info { 2783a9fd824SRoger Pau Monné uint32_t version; 2793a9fd824SRoger Pau Monné struct { 2803a9fd824SRoger Pau Monné uint64_t addr; /* EFI_CONFIGURATION_TABLE */ 2813a9fd824SRoger Pau Monné uint32_t nent; 2823a9fd824SRoger Pau Monné } cfg; 2833a9fd824SRoger Pau Monné struct { 2843a9fd824SRoger Pau Monné uint32_t revision; 2853a9fd824SRoger Pau Monné uint32_t bufsz; /* input, in bytes */ 2863a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 2873a9fd824SRoger Pau Monné } vendor; 2883a9fd824SRoger Pau Monné struct { 2893a9fd824SRoger Pau Monné uint64_t addr; 2903a9fd824SRoger Pau Monné uint64_t size; 2913a9fd824SRoger Pau Monné uint64_t attr; 2923a9fd824SRoger Pau Monné uint32_t type; 2933a9fd824SRoger Pau Monné } mem; 2943a9fd824SRoger Pau Monné struct { 2953a9fd824SRoger Pau Monné /* IN variables */ 2963a9fd824SRoger Pau Monné uint16_t segment; 2973a9fd824SRoger Pau Monné uint8_t bus; 2983a9fd824SRoger Pau Monné uint8_t devfn; 2993a9fd824SRoger Pau Monné uint16_t vendor; 3003a9fd824SRoger Pau Monné uint16_t devid; 3013a9fd824SRoger Pau Monné /* OUT variables */ 3023a9fd824SRoger Pau Monné uint64_t address; 3033a9fd824SRoger Pau Monné xen_ulong_t size; 3043a9fd824SRoger Pau Monné } pci_rom; 3053a9fd824SRoger Pau Monné struct { 3063a9fd824SRoger Pau Monné /* OUT variables */ 3073a9fd824SRoger Pau Monné uint64_t address; 3083a9fd824SRoger Pau Monné xen_ulong_t size; 3093a9fd824SRoger Pau Monné } apple_properties; 3103a9fd824SRoger Pau Monné } efi_info; /* XEN_FW_EFI_INFO */ 3113a9fd824SRoger Pau Monné 3123a9fd824SRoger Pau Monné /* Int16, Fn02: Get keyboard shift flags. */ 3133a9fd824SRoger Pau Monné uint8_t kbd_shift_flags; /* XEN_FW_KBD_SHIFT_FLAGS */ 3143a9fd824SRoger Pau Monné } u; 3153a9fd824SRoger Pau Monné }; 3163a9fd824SRoger Pau Monné typedef struct xenpf_firmware_info xenpf_firmware_info_t; 3173a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t); 3183a9fd824SRoger Pau Monné 3193a9fd824SRoger Pau Monné #define XENPF_enter_acpi_sleep 51 3203a9fd824SRoger Pau Monné struct xenpf_enter_acpi_sleep { 3213a9fd824SRoger Pau Monné /* IN variables */ 3223a9fd824SRoger Pau Monné #if __XEN_INTERFACE_VERSION__ < 0x00040300 3233a9fd824SRoger Pau Monné uint16_t pm1a_cnt_val; /* PM1a control value. */ 3243a9fd824SRoger Pau Monné uint16_t pm1b_cnt_val; /* PM1b control value. */ 3253a9fd824SRoger Pau Monné #else 3263a9fd824SRoger Pau Monné uint16_t val_a; /* PM1a control / sleep type A. */ 3273a9fd824SRoger Pau Monné uint16_t val_b; /* PM1b control / sleep type B. */ 3283a9fd824SRoger Pau Monné #endif 3293a9fd824SRoger Pau Monné uint32_t sleep_state; /* Which state to enter (Sn). */ 3303a9fd824SRoger Pau Monné #define XENPF_ACPI_SLEEP_EXTENDED 0x00000001 3313a9fd824SRoger Pau Monné uint32_t flags; /* XENPF_ACPI_SLEEP_*. */ 3323a9fd824SRoger Pau Monné }; 3333a9fd824SRoger Pau Monné typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t; 3343a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t); 3353a9fd824SRoger Pau Monné 3363a9fd824SRoger Pau Monné #define XENPF_change_freq 52 3373a9fd824SRoger Pau Monné struct xenpf_change_freq { 3383a9fd824SRoger Pau Monné /* IN variables */ 3393a9fd824SRoger Pau Monné uint32_t flags; /* Must be zero. */ 3403a9fd824SRoger Pau Monné uint32_t cpu; /* Physical cpu. */ 3413a9fd824SRoger Pau Monné uint64_t freq; /* New frequency (Hz). */ 3423a9fd824SRoger Pau Monné }; 3433a9fd824SRoger Pau Monné typedef struct xenpf_change_freq xenpf_change_freq_t; 3443a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t); 3453a9fd824SRoger Pau Monné 3463a9fd824SRoger Pau Monné /* 3473a9fd824SRoger Pau Monné * Get idle times (nanoseconds since boot) for physical CPUs specified in the 3483a9fd824SRoger Pau Monné * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is 3493a9fd824SRoger Pau Monné * indexed by CPU number; only entries with the corresponding @cpumap_bitmap 3503a9fd824SRoger Pau Monné * bit set are written to. On return, @cpumap_bitmap is modified so that any 3513a9fd824SRoger Pau Monné * non-existent CPUs are cleared. Such CPUs have their @idletime array entry 3523a9fd824SRoger Pau Monné * cleared. 3533a9fd824SRoger Pau Monné */ 3543a9fd824SRoger Pau Monné #define XENPF_getidletime 53 3553a9fd824SRoger Pau Monné struct xenpf_getidletime { 3563a9fd824SRoger Pau Monné /* IN/OUT variables */ 3573a9fd824SRoger Pau Monné /* IN: CPUs to interrogate; OUT: subset of IN which are present */ 3583a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(uint8) cpumap_bitmap; 3593a9fd824SRoger Pau Monné /* IN variables */ 3603a9fd824SRoger Pau Monné /* Size of cpumap bitmap. */ 3613a9fd824SRoger Pau Monné uint32_t cpumap_nr_cpus; 3623a9fd824SRoger Pau Monné /* Must be indexable for every cpu in cpumap_bitmap. */ 3633a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(uint64) idletime; 3643a9fd824SRoger Pau Monné /* OUT variables */ 3653a9fd824SRoger Pau Monné /* System time when the idletime snapshots were taken. */ 3663a9fd824SRoger Pau Monné uint64_t now; 3673a9fd824SRoger Pau Monné }; 3683a9fd824SRoger Pau Monné typedef struct xenpf_getidletime xenpf_getidletime_t; 3693a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t); 3703a9fd824SRoger Pau Monné 3713a9fd824SRoger Pau Monné #define XENPF_set_processor_pminfo 54 3723a9fd824SRoger Pau Monné 3733a9fd824SRoger Pau Monné /* ability bits */ 3743a9fd824SRoger Pau Monné #define XEN_PROCESSOR_PM_CX 1 3753a9fd824SRoger Pau Monné #define XEN_PROCESSOR_PM_PX 2 3763a9fd824SRoger Pau Monné #define XEN_PROCESSOR_PM_TX 4 3773a9fd824SRoger Pau Monné 3783a9fd824SRoger Pau Monné /* cmd type */ 3793a9fd824SRoger Pau Monné #define XEN_PM_CX 0 3803a9fd824SRoger Pau Monné #define XEN_PM_PX 1 3813a9fd824SRoger Pau Monné #define XEN_PM_TX 2 3823a9fd824SRoger Pau Monné #define XEN_PM_PDC 3 3833a9fd824SRoger Pau Monné 3843a9fd824SRoger Pau Monné /* Px sub info type */ 3853a9fd824SRoger Pau Monné #define XEN_PX_PCT 1 3863a9fd824SRoger Pau Monné #define XEN_PX_PSS 2 3873a9fd824SRoger Pau Monné #define XEN_PX_PPC 4 3883a9fd824SRoger Pau Monné #define XEN_PX_PSD 8 3893a9fd824SRoger Pau Monné 3903a9fd824SRoger Pau Monné struct xen_power_register { 3913a9fd824SRoger Pau Monné uint32_t space_id; 3923a9fd824SRoger Pau Monné uint32_t bit_width; 3933a9fd824SRoger Pau Monné uint32_t bit_offset; 3943a9fd824SRoger Pau Monné uint32_t access_size; 3953a9fd824SRoger Pau Monné uint64_t address; 3963a9fd824SRoger Pau Monné }; 3973a9fd824SRoger Pau Monné 3983a9fd824SRoger Pau Monné struct xen_processor_csd { 3993a9fd824SRoger Pau Monné uint32_t domain; /* domain number of one dependent group */ 4003a9fd824SRoger Pau Monné uint32_t coord_type; /* coordination type */ 4013a9fd824SRoger Pau Monné uint32_t num; /* number of processors in same domain */ 4023a9fd824SRoger Pau Monné }; 4033a9fd824SRoger Pau Monné typedef struct xen_processor_csd xen_processor_csd_t; 4043a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t); 4053a9fd824SRoger Pau Monné 4063a9fd824SRoger Pau Monné struct xen_processor_cx { 4073a9fd824SRoger Pau Monné struct xen_power_register reg; /* GAS for Cx trigger register */ 4083a9fd824SRoger Pau Monné uint8_t type; /* cstate value, c0: 0, c1: 1, ... */ 4093a9fd824SRoger Pau Monné uint32_t latency; /* worst latency (ms) to enter/exit this cstate */ 4103a9fd824SRoger Pau Monné uint32_t power; /* average power consumption(mW) */ 4113a9fd824SRoger Pau Monné uint32_t dpcnt; /* number of dependency entries */ 4123a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(xen_processor_csd_t) dp; /* NULL if no dependency */ 4133a9fd824SRoger Pau Monné }; 4143a9fd824SRoger Pau Monné typedef struct xen_processor_cx xen_processor_cx_t; 4153a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t); 4163a9fd824SRoger Pau Monné 4173a9fd824SRoger Pau Monné struct xen_processor_flags { 4183a9fd824SRoger Pau Monné uint32_t bm_control:1; 4193a9fd824SRoger Pau Monné uint32_t bm_check:1; 4203a9fd824SRoger Pau Monné uint32_t has_cst:1; 4213a9fd824SRoger Pau Monné uint32_t power_setup_done:1; 4223a9fd824SRoger Pau Monné uint32_t bm_rld_set:1; 4233a9fd824SRoger Pau Monné }; 4243a9fd824SRoger Pau Monné 4253a9fd824SRoger Pau Monné struct xen_processor_power { 4263a9fd824SRoger Pau Monné uint32_t count; /* number of C state entries in array below */ 4273a9fd824SRoger Pau Monné struct xen_processor_flags flags; /* global flags of this processor */ 4283a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(xen_processor_cx_t) states; /* supported c states */ 4293a9fd824SRoger Pau Monné }; 4303a9fd824SRoger Pau Monné 4313a9fd824SRoger Pau Monné struct xen_pct_register { 4323a9fd824SRoger Pau Monné uint8_t descriptor; 4333a9fd824SRoger Pau Monné uint16_t length; 4343a9fd824SRoger Pau Monné uint8_t space_id; 4353a9fd824SRoger Pau Monné uint8_t bit_width; 4363a9fd824SRoger Pau Monné uint8_t bit_offset; 4373a9fd824SRoger Pau Monné uint8_t reserved; 4383a9fd824SRoger Pau Monné uint64_t address; 4393a9fd824SRoger Pau Monné }; 4403a9fd824SRoger Pau Monné 4413a9fd824SRoger Pau Monné struct xen_processor_px { 4423a9fd824SRoger Pau Monné uint64_t core_frequency; /* megahertz */ 4433a9fd824SRoger Pau Monné uint64_t power; /* milliWatts */ 4443a9fd824SRoger Pau Monné uint64_t transition_latency; /* microseconds */ 4453a9fd824SRoger Pau Monné uint64_t bus_master_latency; /* microseconds */ 4463a9fd824SRoger Pau Monné uint64_t control; /* control value */ 4473a9fd824SRoger Pau Monné uint64_t status; /* success indicator */ 4483a9fd824SRoger Pau Monné }; 4493a9fd824SRoger Pau Monné typedef struct xen_processor_px xen_processor_px_t; 4503a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xen_processor_px_t); 4513a9fd824SRoger Pau Monné 4523a9fd824SRoger Pau Monné struct xen_psd_package { 4533a9fd824SRoger Pau Monné uint64_t num_entries; 4543a9fd824SRoger Pau Monné uint64_t revision; 4553a9fd824SRoger Pau Monné uint64_t domain; 4563a9fd824SRoger Pau Monné uint64_t coord_type; 4573a9fd824SRoger Pau Monné uint64_t num_processors; 4583a9fd824SRoger Pau Monné }; 4593a9fd824SRoger Pau Monné 4603a9fd824SRoger Pau Monné struct xen_processor_performance { 4613a9fd824SRoger Pau Monné uint32_t flags; /* flag for Px sub info type */ 4623a9fd824SRoger Pau Monné uint32_t platform_limit; /* Platform limitation on freq usage */ 4633a9fd824SRoger Pau Monné struct xen_pct_register control_register; 4643a9fd824SRoger Pau Monné struct xen_pct_register status_register; 4653a9fd824SRoger Pau Monné uint32_t state_count; /* total available performance states */ 4663a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(xen_processor_px_t) states; 4673a9fd824SRoger Pau Monné struct xen_psd_package domain_info; 468b93f47eaSRoger Pau Monné /* Coordination type of this processor */ 469b93f47eaSRoger Pau Monné #define XEN_CPUPERF_SHARED_TYPE_HW 1 /* HW does needed coordination */ 470b93f47eaSRoger Pau Monné #define XEN_CPUPERF_SHARED_TYPE_ALL 2 /* All dependent CPUs should set freq */ 471b93f47eaSRoger Pau Monné #define XEN_CPUPERF_SHARED_TYPE_ANY 3 /* Freq can be set from any dependent CPU */ 472b93f47eaSRoger Pau Monné uint32_t shared_type; 4733a9fd824SRoger Pau Monné }; 4743a9fd824SRoger Pau Monné typedef struct xen_processor_performance xen_processor_performance_t; 4753a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t); 4763a9fd824SRoger Pau Monné 4773a9fd824SRoger Pau Monné struct xenpf_set_processor_pminfo { 4783a9fd824SRoger Pau Monné /* IN variables */ 4793a9fd824SRoger Pau Monné uint32_t id; /* ACPI CPU ID */ 4803a9fd824SRoger Pau Monné uint32_t type; /* {XEN_PM_CX, XEN_PM_PX} */ 4813a9fd824SRoger Pau Monné union { 4823a9fd824SRoger Pau Monné struct xen_processor_power power;/* Cx: _CST/_CSD */ 4833a9fd824SRoger Pau Monné struct xen_processor_performance perf; /* Px: _PPC/_PCT/_PSS/_PSD */ 4843a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(uint32) pdc; /* _PDC */ 4853a9fd824SRoger Pau Monné } u; 4863a9fd824SRoger Pau Monné }; 4873a9fd824SRoger Pau Monné typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t; 4883a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t); 4893a9fd824SRoger Pau Monné 4903a9fd824SRoger Pau Monné #define XENPF_get_cpuinfo 55 4913a9fd824SRoger Pau Monné struct xenpf_pcpuinfo { 4923a9fd824SRoger Pau Monné /* IN */ 4933a9fd824SRoger Pau Monné uint32_t xen_cpuid; 4943a9fd824SRoger Pau Monné /* OUT */ 4953a9fd824SRoger Pau Monné /* The maxium cpu_id that is present */ 4963a9fd824SRoger Pau Monné uint32_t max_present; 4973a9fd824SRoger Pau Monné #define XEN_PCPU_FLAGS_ONLINE 1 4983a9fd824SRoger Pau Monné /* Correponding xen_cpuid is not present*/ 4993a9fd824SRoger Pau Monné #define XEN_PCPU_FLAGS_INVALID 2 5003a9fd824SRoger Pau Monné uint32_t flags; 5013a9fd824SRoger Pau Monné uint32_t apic_id; 5023a9fd824SRoger Pau Monné uint32_t acpi_id; 5033a9fd824SRoger Pau Monné }; 5043a9fd824SRoger Pau Monné typedef struct xenpf_pcpuinfo xenpf_pcpuinfo_t; 5053a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_pcpuinfo_t); 5063a9fd824SRoger Pau Monné 5073a9fd824SRoger Pau Monné #define XENPF_get_cpu_version 48 5083a9fd824SRoger Pau Monné struct xenpf_pcpu_version { 5093a9fd824SRoger Pau Monné /* IN */ 5103a9fd824SRoger Pau Monné uint32_t xen_cpuid; 5113a9fd824SRoger Pau Monné /* OUT */ 5123a9fd824SRoger Pau Monné /* The maxium cpu_id that is present */ 5133a9fd824SRoger Pau Monné uint32_t max_present; 5143a9fd824SRoger Pau Monné char vendor_id[12]; 5153a9fd824SRoger Pau Monné uint32_t family; 5163a9fd824SRoger Pau Monné uint32_t model; 5173a9fd824SRoger Pau Monné uint32_t stepping; 5183a9fd824SRoger Pau Monné }; 5193a9fd824SRoger Pau Monné typedef struct xenpf_pcpu_version xenpf_pcpu_version_t; 5203a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_pcpu_version_t); 5213a9fd824SRoger Pau Monné 5223a9fd824SRoger Pau Monné #define XENPF_cpu_online 56 5233a9fd824SRoger Pau Monné #define XENPF_cpu_offline 57 5243a9fd824SRoger Pau Monné struct xenpf_cpu_ol 5253a9fd824SRoger Pau Monné { 5263a9fd824SRoger Pau Monné uint32_t cpuid; 5273a9fd824SRoger Pau Monné }; 5283a9fd824SRoger Pau Monné typedef struct xenpf_cpu_ol xenpf_cpu_ol_t; 5293a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_cpu_ol_t); 5303a9fd824SRoger Pau Monné 5313a9fd824SRoger Pau Monné #define XENPF_cpu_hotadd 58 5323a9fd824SRoger Pau Monné struct xenpf_cpu_hotadd 5333a9fd824SRoger Pau Monné { 5343a9fd824SRoger Pau Monné uint32_t apic_id; 5353a9fd824SRoger Pau Monné uint32_t acpi_id; 5363a9fd824SRoger Pau Monné uint32_t pxm; 5373a9fd824SRoger Pau Monné }; 5383a9fd824SRoger Pau Monné typedef struct xenpf_cpu_hotadd xenpf_cpu_hotadd_t; 5393a9fd824SRoger Pau Monné 5403a9fd824SRoger Pau Monné #define XENPF_mem_hotadd 59 5413a9fd824SRoger Pau Monné struct xenpf_mem_hotadd 5423a9fd824SRoger Pau Monné { 5433a9fd824SRoger Pau Monné uint64_t spfn; 5443a9fd824SRoger Pau Monné uint64_t epfn; 5453a9fd824SRoger Pau Monné uint32_t pxm; 5463a9fd824SRoger Pau Monné uint32_t flags; 5473a9fd824SRoger Pau Monné }; 5483a9fd824SRoger Pau Monné typedef struct xenpf_mem_hotadd xenpf_mem_hotadd_t; 5493a9fd824SRoger Pau Monné 5503a9fd824SRoger Pau Monné #define XENPF_core_parking 60 5513a9fd824SRoger Pau Monné 5523a9fd824SRoger Pau Monné #define XEN_CORE_PARKING_SET 1 5533a9fd824SRoger Pau Monné #define XEN_CORE_PARKING_GET 2 5543a9fd824SRoger Pau Monné struct xenpf_core_parking { 5553a9fd824SRoger Pau Monné /* IN variables */ 5563a9fd824SRoger Pau Monné uint32_t type; 5573a9fd824SRoger Pau Monné /* IN variables: set cpu nums expected to be idled */ 5583a9fd824SRoger Pau Monné /* OUT variables: get cpu nums actually be idled */ 5593a9fd824SRoger Pau Monné uint32_t idle_nums; 5603a9fd824SRoger Pau Monné }; 5613a9fd824SRoger Pau Monné typedef struct xenpf_core_parking xenpf_core_parking_t; 5623a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_core_parking_t); 5633a9fd824SRoger Pau Monné 5643a9fd824SRoger Pau Monné /* 5653a9fd824SRoger Pau Monné * Access generic platform resources(e.g., accessing MSR, port I/O, etc) 5663a9fd824SRoger Pau Monné * in unified way. Batch resource operations in one call are supported and 5673a9fd824SRoger Pau Monné * they are always non-preemptible and executed in their original order. 5683a9fd824SRoger Pau Monné * The batch itself returns a negative integer for general errors, or a 5693a9fd824SRoger Pau Monné * non-negative integer for the number of successful operations. For the latter 5703a9fd824SRoger Pau Monné * case, the @ret in the failed entry (if any) indicates the exact error. 5713a9fd824SRoger Pau Monné */ 5723a9fd824SRoger Pau Monné #define XENPF_resource_op 61 5733a9fd824SRoger Pau Monné 5743a9fd824SRoger Pau Monné #define XEN_RESOURCE_OP_MSR_READ 0 5753a9fd824SRoger Pau Monné #define XEN_RESOURCE_OP_MSR_WRITE 1 5763a9fd824SRoger Pau Monné 5773a9fd824SRoger Pau Monné /* 5783a9fd824SRoger Pau Monné * Specially handled MSRs: 5793a9fd824SRoger Pau Monné * - MSR_IA32_TSC 5803a9fd824SRoger Pau Monné * READ: Returns the scaled system time(ns) instead of raw timestamp. In 5813a9fd824SRoger Pau Monné * multiple entry case, if other MSR read is followed by a MSR_IA32_TSC 5823a9fd824SRoger Pau Monné * read, then both reads are guaranteed to be performed atomically (with 5833a9fd824SRoger Pau Monné * IRQ disabled). The return time indicates the point of reading that MSR. 5843a9fd824SRoger Pau Monné * WRITE: Not supported. 5853a9fd824SRoger Pau Monné */ 5863a9fd824SRoger Pau Monné 5873a9fd824SRoger Pau Monné struct xenpf_resource_entry { 5883a9fd824SRoger Pau Monné union { 5893a9fd824SRoger Pau Monné uint32_t cmd; /* IN: XEN_RESOURCE_OP_* */ 5903a9fd824SRoger Pau Monné int32_t ret; /* OUT: return value for failed entry */ 5913a9fd824SRoger Pau Monné } u; 5923a9fd824SRoger Pau Monné uint32_t rsvd; /* IN: padding and must be zero */ 5933a9fd824SRoger Pau Monné uint64_t idx; /* IN: resource address to access */ 5943a9fd824SRoger Pau Monné uint64_t val; /* IN/OUT: resource value to set/get */ 5953a9fd824SRoger Pau Monné }; 5963a9fd824SRoger Pau Monné typedef struct xenpf_resource_entry xenpf_resource_entry_t; 5973a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_resource_entry_t); 5983a9fd824SRoger Pau Monné 5993a9fd824SRoger Pau Monné struct xenpf_resource_op { 6003a9fd824SRoger Pau Monné uint32_t nr_entries; /* number of resource entry */ 6013a9fd824SRoger Pau Monné uint32_t cpu; /* which cpu to run */ 6023a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(xenpf_resource_entry_t) entries; 6033a9fd824SRoger Pau Monné }; 6043a9fd824SRoger Pau Monné typedef struct xenpf_resource_op xenpf_resource_op_t; 6053a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_resource_op_t); 6063a9fd824SRoger Pau Monné 6073a9fd824SRoger Pau Monné #define XENPF_get_symbol 63 6083a9fd824SRoger Pau Monné struct xenpf_symdata { 6093a9fd824SRoger Pau Monné /* IN/OUT variables */ 6103a9fd824SRoger Pau Monné uint32_t namelen; /* IN: size of name buffer */ 6113a9fd824SRoger Pau Monné /* OUT: strlen(name) of hypervisor symbol (may be */ 6123a9fd824SRoger Pau Monné /* larger than what's been copied to guest) */ 6133a9fd824SRoger Pau Monné uint32_t symnum; /* IN: Symbol to read */ 6143a9fd824SRoger Pau Monné /* OUT: Next available symbol. If same as IN then */ 6153a9fd824SRoger Pau Monné /* we reached the end */ 6163a9fd824SRoger Pau Monné 6173a9fd824SRoger Pau Monné /* OUT variables */ 6183a9fd824SRoger Pau Monné XEN_GUEST_HANDLE(char) name; 6193a9fd824SRoger Pau Monné uint64_t address; 6203a9fd824SRoger Pau Monné char type; 6213a9fd824SRoger Pau Monné }; 6223a9fd824SRoger Pau Monné typedef struct xenpf_symdata xenpf_symdata_t; 6233a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_symdata_t); 6243a9fd824SRoger Pau Monné 625*6f80738bSRoger Pau Monné #define XENPF_get_dom0_console 64 626*6f80738bSRoger Pau Monné typedef struct dom0_vga_console_info xenpf_dom0_console_t; 627*6f80738bSRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xenpf_dom0_console_t); 628*6f80738bSRoger Pau Monné 6293a9fd824SRoger Pau Monné /* 6303a9fd824SRoger Pau Monné * ` enum neg_errnoval 6313a9fd824SRoger Pau Monné * ` HYPERVISOR_platform_op(const struct xen_platform_op*); 6323a9fd824SRoger Pau Monné */ 6333a9fd824SRoger Pau Monné struct xen_platform_op { 6343a9fd824SRoger Pau Monné uint32_t cmd; 6353a9fd824SRoger Pau Monné uint32_t interface_version; /* XENPF_INTERFACE_VERSION */ 6363a9fd824SRoger Pau Monné union { 6373a9fd824SRoger Pau Monné xenpf_settime_t settime; 6383a9fd824SRoger Pau Monné xenpf_settime32_t settime32; 6393a9fd824SRoger Pau Monné xenpf_settime64_t settime64; 6403a9fd824SRoger Pau Monné xenpf_add_memtype_t add_memtype; 6413a9fd824SRoger Pau Monné xenpf_del_memtype_t del_memtype; 6423a9fd824SRoger Pau Monné xenpf_read_memtype_t read_memtype; 6433a9fd824SRoger Pau Monné xenpf_microcode_update_t microcode; 6443a9fd824SRoger Pau Monné xenpf_platform_quirk_t platform_quirk; 6453a9fd824SRoger Pau Monné xenpf_efi_runtime_call_t efi_runtime_call; 6463a9fd824SRoger Pau Monné xenpf_firmware_info_t firmware_info; 6473a9fd824SRoger Pau Monné xenpf_enter_acpi_sleep_t enter_acpi_sleep; 6483a9fd824SRoger Pau Monné xenpf_change_freq_t change_freq; 6493a9fd824SRoger Pau Monné xenpf_getidletime_t getidletime; 6503a9fd824SRoger Pau Monné xenpf_set_processor_pminfo_t set_pminfo; 6513a9fd824SRoger Pau Monné xenpf_pcpuinfo_t pcpu_info; 6523a9fd824SRoger Pau Monné xenpf_pcpu_version_t pcpu_version; 6533a9fd824SRoger Pau Monné xenpf_cpu_ol_t cpu_ol; 6543a9fd824SRoger Pau Monné xenpf_cpu_hotadd_t cpu_add; 6553a9fd824SRoger Pau Monné xenpf_mem_hotadd_t mem_add; 6563a9fd824SRoger Pau Monné xenpf_core_parking_t core_parking; 6573a9fd824SRoger Pau Monné xenpf_resource_op_t resource_op; 6583a9fd824SRoger Pau Monné xenpf_symdata_t symdata; 659*6f80738bSRoger Pau Monné xenpf_dom0_console_t dom0_console; 6603a9fd824SRoger Pau Monné uint8_t pad[128]; 6613a9fd824SRoger Pau Monné } u; 6623a9fd824SRoger Pau Monné }; 6633a9fd824SRoger Pau Monné typedef struct xen_platform_op xen_platform_op_t; 6643a9fd824SRoger Pau Monné DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t); 6653a9fd824SRoger Pau Monné 6663a9fd824SRoger Pau Monné #endif /* __XEN_PUBLIC_PLATFORM_H__ */ 6673a9fd824SRoger Pau Monné 6683a9fd824SRoger Pau Monné /* 6693a9fd824SRoger Pau Monné * Local variables: 6703a9fd824SRoger Pau Monné * mode: C 6713a9fd824SRoger Pau Monné * c-file-style: "BSD" 6723a9fd824SRoger Pau Monné * c-basic-offset: 4 6733a9fd824SRoger Pau Monné * tab-width: 4 6743a9fd824SRoger Pau Monné * indent-tabs-mode: nil 6753a9fd824SRoger Pau Monné * End: 6763a9fd824SRoger Pau Monné */ 677