1181624Skmacy/****************************************************************************** 2181624Skmacy * platform.h 3181624Skmacy * 4181624Skmacy * Hardware platform operations. Intended for use by domain-0 kernel. 5181624Skmacy * 6181624Skmacy * Permission is hereby granted, free of charge, to any person obtaining a copy 7181624Skmacy * of this software and associated documentation files (the "Software"), to 8181624Skmacy * deal in the Software without restriction, including without limitation the 9181624Skmacy * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10181624Skmacy * sell copies of the Software, and to permit persons to whom the Software is 11181624Skmacy * furnished to do so, subject to the following conditions: 12181624Skmacy * 13181624Skmacy * The above copyright notice and this permission notice shall be included in 14181624Skmacy * all copies or substantial portions of the Software. 15181624Skmacy * 16181624Skmacy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17181624Skmacy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18181624Skmacy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19181624Skmacy * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20181624Skmacy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21181624Skmacy * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22181624Skmacy * DEALINGS IN THE SOFTWARE. 23181624Skmacy * 24181624Skmacy * Copyright (c) 2002-2006, K Fraser 25181624Skmacy */ 26181624Skmacy 27181624Skmacy#ifndef __XEN_PUBLIC_PLATFORM_H__ 28181624Skmacy#define __XEN_PUBLIC_PLATFORM_H__ 29181624Skmacy 30181624Skmacy#include "xen.h" 31181624Skmacy 32181624Skmacy#define XENPF_INTERFACE_VERSION 0x03000001 33181624Skmacy 34181624Skmacy/* 35181624Skmacy * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC, 36181624Skmacy * 1 January, 1970 if the current system time was <system_time>. 37181624Skmacy */ 38181624Skmacy#define XENPF_settime 17 39181624Skmacystruct xenpf_settime { 40181624Skmacy /* IN variables. */ 41181624Skmacy uint32_t secs; 42181624Skmacy uint32_t nsecs; 43181624Skmacy uint64_t system_time; 44181624Skmacy}; 45181624Skmacytypedef struct xenpf_settime xenpf_settime_t; 46181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_settime_t); 47181624Skmacy 48181624Skmacy/* 49181624Skmacy * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type. 50181624Skmacy * On x86, @type is an architecture-defined MTRR memory type. 51181624Skmacy * On success, returns the MTRR that was used (@reg) and a handle that can 52181624Skmacy * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting. 53181624Skmacy * (x86-specific). 54181624Skmacy */ 55181624Skmacy#define XENPF_add_memtype 31 56181624Skmacystruct xenpf_add_memtype { 57181624Skmacy /* IN variables. */ 58181624Skmacy xen_pfn_t mfn; 59181624Skmacy uint64_t nr_mfns; 60181624Skmacy uint32_t type; 61181624Skmacy /* OUT variables. */ 62181624Skmacy uint32_t handle; 63181624Skmacy uint32_t reg; 64181624Skmacy}; 65181624Skmacytypedef struct xenpf_add_memtype xenpf_add_memtype_t; 66181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t); 67181624Skmacy 68181624Skmacy/* 69181624Skmacy * Tear down an existing memory-range type. If @handle is remembered then it 70181624Skmacy * should be passed in to accurately tear down the correct setting (in case 71181624Skmacy * of overlapping memory regions with differing types). If it is not known 72181624Skmacy * then @handle should be set to zero. In all cases @reg must be set. 73181624Skmacy * (x86-specific). 74181624Skmacy */ 75181624Skmacy#define XENPF_del_memtype 32 76181624Skmacystruct xenpf_del_memtype { 77181624Skmacy /* IN variables. */ 78181624Skmacy uint32_t handle; 79181624Skmacy uint32_t reg; 80181624Skmacy}; 81181624Skmacytypedef struct xenpf_del_memtype xenpf_del_memtype_t; 82181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t); 83181624Skmacy 84181624Skmacy/* Read current type of an MTRR (x86-specific). */ 85181624Skmacy#define XENPF_read_memtype 33 86181624Skmacystruct xenpf_read_memtype { 87181624Skmacy /* IN variables. */ 88181624Skmacy uint32_t reg; 89181624Skmacy /* OUT variables. */ 90181624Skmacy xen_pfn_t mfn; 91181624Skmacy uint64_t nr_mfns; 92181624Skmacy uint32_t type; 93181624Skmacy}; 94181624Skmacytypedef struct xenpf_read_memtype xenpf_read_memtype_t; 95181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t); 96181624Skmacy 97181624Skmacy#define XENPF_microcode_update 35 98181624Skmacystruct xenpf_microcode_update { 99181624Skmacy /* IN variables. */ 100183375Skmacy XEN_GUEST_HANDLE(const_void) data;/* Pointer to microcode data */ 101181624Skmacy uint32_t length; /* Length of microcode data. */ 102181624Skmacy}; 103181624Skmacytypedef struct xenpf_microcode_update xenpf_microcode_update_t; 104181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t); 105181624Skmacy 106181624Skmacy#define XENPF_platform_quirk 39 107181624Skmacy#define QUIRK_NOIRQBALANCING 1 /* Do not restrict IO-APIC RTE targets */ 108181624Skmacy#define QUIRK_IOAPIC_BAD_REGSEL 2 /* IO-APIC REGSEL forgets its value */ 109181624Skmacy#define QUIRK_IOAPIC_GOOD_REGSEL 3 /* IO-APIC REGSEL behaves properly */ 110181624Skmacystruct xenpf_platform_quirk { 111181624Skmacy /* IN variables. */ 112181624Skmacy uint32_t quirk_id; 113181624Skmacy}; 114181624Skmacytypedef struct xenpf_platform_quirk xenpf_platform_quirk_t; 115181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t); 116181624Skmacy 117251767Sgibbs#define XENPF_efi_runtime_call 49 118251767Sgibbs#define XEN_EFI_get_time 1 119251767Sgibbs#define XEN_EFI_set_time 2 120251767Sgibbs#define XEN_EFI_get_wakeup_time 3 121251767Sgibbs#define XEN_EFI_set_wakeup_time 4 122251767Sgibbs#define XEN_EFI_get_next_high_monotonic_count 5 123251767Sgibbs#define XEN_EFI_get_variable 6 124251767Sgibbs#define XEN_EFI_set_variable 7 125251767Sgibbs#define XEN_EFI_get_next_variable_name 8 126251767Sgibbs#define XEN_EFI_query_variable_info 9 127251767Sgibbs#define XEN_EFI_query_capsule_capabilities 10 128251767Sgibbs#define XEN_EFI_update_capsule 11 129251767Sgibbsstruct xenpf_efi_runtime_call { 130251767Sgibbs uint32_t function; 131251767Sgibbs /* 132251767Sgibbs * This field is generally used for per sub-function flags (defined 133251767Sgibbs * below), except for the XEN_EFI_get_next_high_monotonic_count case, 134251767Sgibbs * where it holds the single returned value. 135251767Sgibbs */ 136251767Sgibbs uint32_t misc; 137251767Sgibbs unsigned long status; 138251767Sgibbs union { 139251767Sgibbs#define XEN_EFI_GET_TIME_SET_CLEARS_NS 0x00000001 140251767Sgibbs struct { 141251767Sgibbs struct xenpf_efi_time { 142251767Sgibbs uint16_t year; 143251767Sgibbs uint8_t month; 144251767Sgibbs uint8_t day; 145251767Sgibbs uint8_t hour; 146251767Sgibbs uint8_t min; 147251767Sgibbs uint8_t sec; 148251767Sgibbs uint32_t ns; 149251767Sgibbs int16_t tz; 150251767Sgibbs uint8_t daylight; 151251767Sgibbs } time; 152251767Sgibbs uint32_t resolution; 153251767Sgibbs uint32_t accuracy; 154251767Sgibbs } get_time; 155251767Sgibbs 156251767Sgibbs struct xenpf_efi_time set_time; 157251767Sgibbs 158251767Sgibbs#define XEN_EFI_GET_WAKEUP_TIME_ENABLED 0x00000001 159251767Sgibbs#define XEN_EFI_GET_WAKEUP_TIME_PENDING 0x00000002 160251767Sgibbs struct xenpf_efi_time get_wakeup_time; 161251767Sgibbs 162251767Sgibbs#define XEN_EFI_SET_WAKEUP_TIME_ENABLE 0x00000001 163251767Sgibbs#define XEN_EFI_SET_WAKEUP_TIME_ENABLE_ONLY 0x00000002 164251767Sgibbs struct xenpf_efi_time set_wakeup_time; 165251767Sgibbs 166251767Sgibbs#define XEN_EFI_VARIABLE_NON_VOLATILE 0x00000001 167251767Sgibbs#define XEN_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 168251767Sgibbs#define XEN_EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 169251767Sgibbs struct { 170251767Sgibbs XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 171251767Sgibbs unsigned long size; 172251767Sgibbs XEN_GUEST_HANDLE(void) data; 173251767Sgibbs struct xenpf_efi_guid { 174251767Sgibbs uint32_t data1; 175251767Sgibbs uint16_t data2; 176251767Sgibbs uint16_t data3; 177251767Sgibbs uint8_t data4[8]; 178251767Sgibbs } vendor_guid; 179251767Sgibbs } get_variable, set_variable; 180251767Sgibbs 181251767Sgibbs struct { 182251767Sgibbs unsigned long size; 183251767Sgibbs XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 184251767Sgibbs struct xenpf_efi_guid vendor_guid; 185251767Sgibbs } get_next_variable_name; 186251767Sgibbs 187251767Sgibbs struct { 188251767Sgibbs uint32_t attr; 189251767Sgibbs uint64_t max_store_size; 190251767Sgibbs uint64_t remain_store_size; 191251767Sgibbs uint64_t max_size; 192251767Sgibbs } query_variable_info; 193251767Sgibbs 194251767Sgibbs struct { 195251767Sgibbs XEN_GUEST_HANDLE(void) capsule_header_array; 196251767Sgibbs unsigned long capsule_count; 197251767Sgibbs uint64_t max_capsule_size; 198251767Sgibbs unsigned int reset_type; 199251767Sgibbs } query_capsule_capabilities; 200251767Sgibbs 201251767Sgibbs struct { 202251767Sgibbs XEN_GUEST_HANDLE(void) capsule_header_array; 203251767Sgibbs unsigned long capsule_count; 204251767Sgibbs uint64_t sg_list; /* machine address */ 205251767Sgibbs } update_capsule; 206251767Sgibbs } u; 207251767Sgibbs}; 208251767Sgibbstypedef struct xenpf_efi_runtime_call xenpf_efi_runtime_call_t; 209251767SgibbsDEFINE_XEN_GUEST_HANDLE(xenpf_efi_runtime_call_t); 210251767Sgibbs 211181624Skmacy#define XENPF_firmware_info 50 212181624Skmacy#define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */ 213181624Skmacy#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */ 214181624Skmacy#define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */ 215251767Sgibbs#define XEN_FW_EFI_INFO 4 /* from EFI */ 216251767Sgibbs#define XEN_FW_EFI_VERSION 0 217251767Sgibbs#define XEN_FW_EFI_CONFIG_TABLE 1 218251767Sgibbs#define XEN_FW_EFI_VENDOR 2 219251767Sgibbs#define XEN_FW_EFI_MEM_INFO 3 220251767Sgibbs#define XEN_FW_EFI_RT_VERSION 4 221181624Skmacystruct xenpf_firmware_info { 222181624Skmacy /* IN variables. */ 223181624Skmacy uint32_t type; 224181624Skmacy uint32_t index; 225181624Skmacy /* OUT variables. */ 226181624Skmacy union { 227181624Skmacy struct { 228181624Skmacy /* Int13, Fn48: Check Extensions Present. */ 229181624Skmacy uint8_t device; /* %dl: bios device number */ 230181624Skmacy uint8_t version; /* %ah: major version */ 231181624Skmacy uint16_t interface_support; /* %cx: support bitmap */ 232181624Skmacy /* Int13, Fn08: Legacy Get Device Parameters. */ 233181624Skmacy uint16_t legacy_max_cylinder; /* %cl[7:6]:%ch: max cyl # */ 234181624Skmacy uint8_t legacy_max_head; /* %dh: max head # */ 235181624Skmacy uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector # */ 236181624Skmacy /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */ 237181624Skmacy /* NB. First uint16_t of buffer must be set to buffer size. */ 238183375Skmacy XEN_GUEST_HANDLE(void) edd_params; 239181624Skmacy } disk_info; /* XEN_FW_DISK_INFO */ 240181624Skmacy struct { 241181624Skmacy uint8_t device; /* bios device number */ 242181624Skmacy uint32_t mbr_signature; /* offset 0x1b8 in mbr */ 243181624Skmacy } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */ 244181624Skmacy struct { 245181624Skmacy /* Int10, AX=4F15: Get EDID info. */ 246181624Skmacy uint8_t capabilities; 247181624Skmacy uint8_t edid_transfer_time; 248181624Skmacy /* must refer to 128-byte buffer */ 249183375Skmacy XEN_GUEST_HANDLE(uint8) edid; 250181624Skmacy } vbeddc_info; /* XEN_FW_VBEDDC_INFO */ 251251767Sgibbs union xenpf_efi_info { 252251767Sgibbs uint32_t version; 253251767Sgibbs struct { 254251767Sgibbs uint64_t addr; /* EFI_CONFIGURATION_TABLE */ 255251767Sgibbs uint32_t nent; 256251767Sgibbs } cfg; 257251767Sgibbs struct { 258251767Sgibbs uint32_t revision; 259251767Sgibbs uint32_t bufsz; /* input, in bytes */ 260251767Sgibbs XEN_GUEST_HANDLE(void) name; /* UCS-2/UTF-16 string */ 261251767Sgibbs } vendor; 262251767Sgibbs struct { 263251767Sgibbs uint64_t addr; 264251767Sgibbs uint64_t size; 265251767Sgibbs uint64_t attr; 266251767Sgibbs uint32_t type; 267251767Sgibbs } mem; 268251767Sgibbs } efi_info; /* XEN_FW_EFI_INFO */ 269181624Skmacy } u; 270181624Skmacy}; 271181624Skmacytypedef struct xenpf_firmware_info xenpf_firmware_info_t; 272181624SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t); 273181624Skmacy 274183375Skmacy#define XENPF_enter_acpi_sleep 51 275183375Skmacystruct xenpf_enter_acpi_sleep { 276183375Skmacy /* IN variables */ 277183375Skmacy uint16_t pm1a_cnt_val; /* PM1a control value. */ 278183375Skmacy uint16_t pm1b_cnt_val; /* PM1b control value. */ 279183375Skmacy uint32_t sleep_state; /* Which state to enter (Sn). */ 280183375Skmacy uint32_t flags; /* Must be zero. */ 281183375Skmacy}; 282183375Skmacytypedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t; 283183375SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t); 284183375Skmacy 285183375Skmacy#define XENPF_change_freq 52 286183375Skmacystruct xenpf_change_freq { 287183375Skmacy /* IN variables */ 288183375Skmacy uint32_t flags; /* Must be zero. */ 289183375Skmacy uint32_t cpu; /* Physical cpu. */ 290183375Skmacy uint64_t freq; /* New frequency (Hz). */ 291183375Skmacy}; 292183375Skmacytypedef struct xenpf_change_freq xenpf_change_freq_t; 293183375SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t); 294183375Skmacy 295183375Skmacy/* 296183375Skmacy * Get idle times (nanoseconds since boot) for physical CPUs specified in the 297183375Skmacy * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is 298183375Skmacy * indexed by CPU number; only entries with the corresponding @cpumap_bitmap 299183375Skmacy * bit set are written to. On return, @cpumap_bitmap is modified so that any 300183375Skmacy * non-existent CPUs are cleared. Such CPUs have their @idletime array entry 301183375Skmacy * cleared. 302183375Skmacy */ 303183375Skmacy#define XENPF_getidletime 53 304183375Skmacystruct xenpf_getidletime { 305183375Skmacy /* IN/OUT variables */ 306183375Skmacy /* IN: CPUs to interrogate; OUT: subset of IN which are present */ 307183375Skmacy XEN_GUEST_HANDLE(uint8) cpumap_bitmap; 308183375Skmacy /* IN variables */ 309183375Skmacy /* Size of cpumap bitmap. */ 310183375Skmacy uint32_t cpumap_nr_cpus; 311183375Skmacy /* Must be indexable for every cpu in cpumap_bitmap. */ 312183375Skmacy XEN_GUEST_HANDLE(uint64) idletime; 313183375Skmacy /* OUT variables */ 314183375Skmacy /* System time when the idletime snapshots were taken. */ 315183375Skmacy uint64_t now; 316183375Skmacy}; 317183375Skmacytypedef struct xenpf_getidletime xenpf_getidletime_t; 318183375SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t); 319183375Skmacy 320183375Skmacy#define XENPF_set_processor_pminfo 54 321183375Skmacy 322183375Skmacy/* ability bits */ 323183375Skmacy#define XEN_PROCESSOR_PM_CX 1 324183375Skmacy#define XEN_PROCESSOR_PM_PX 2 325183375Skmacy#define XEN_PROCESSOR_PM_TX 4 326183375Skmacy 327183375Skmacy/* cmd type */ 328183375Skmacy#define XEN_PM_CX 0 329183375Skmacy#define XEN_PM_PX 1 330183375Skmacy#define XEN_PM_TX 2 331251767Sgibbs#define XEN_PM_PDC 3 332183375Skmacy 333183375Skmacy/* Px sub info type */ 334183375Skmacy#define XEN_PX_PCT 1 335183375Skmacy#define XEN_PX_PSS 2 336183375Skmacy#define XEN_PX_PPC 4 337183375Skmacy#define XEN_PX_PSD 8 338183375Skmacy 339183375Skmacystruct xen_power_register { 340183375Skmacy uint32_t space_id; 341183375Skmacy uint32_t bit_width; 342183375Skmacy uint32_t bit_offset; 343183375Skmacy uint32_t access_size; 344183375Skmacy uint64_t address; 345183375Skmacy}; 346183375Skmacy 347183375Skmacystruct xen_processor_csd { 348183375Skmacy uint32_t domain; /* domain number of one dependent group */ 349183375Skmacy uint32_t coord_type; /* coordination type */ 350183375Skmacy uint32_t num; /* number of processors in same domain */ 351183375Skmacy}; 352183375Skmacytypedef struct xen_processor_csd xen_processor_csd_t; 353183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t); 354183375Skmacy 355183375Skmacystruct xen_processor_cx { 356183375Skmacy struct xen_power_register reg; /* GAS for Cx trigger register */ 357183375Skmacy uint8_t type; /* cstate value, c0: 0, c1: 1, ... */ 358183375Skmacy uint32_t latency; /* worst latency (ms) to enter/exit this cstate */ 359183375Skmacy uint32_t power; /* average power consumption(mW) */ 360183375Skmacy uint32_t dpcnt; /* number of dependency entries */ 361183375Skmacy XEN_GUEST_HANDLE(xen_processor_csd_t) dp; /* NULL if no dependency */ 362183375Skmacy}; 363183375Skmacytypedef struct xen_processor_cx xen_processor_cx_t; 364183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t); 365183375Skmacy 366183375Skmacystruct xen_processor_flags { 367183375Skmacy uint32_t bm_control:1; 368183375Skmacy uint32_t bm_check:1; 369183375Skmacy uint32_t has_cst:1; 370183375Skmacy uint32_t power_setup_done:1; 371183375Skmacy uint32_t bm_rld_set:1; 372183375Skmacy}; 373183375Skmacy 374183375Skmacystruct xen_processor_power { 375183375Skmacy uint32_t count; /* number of C state entries in array below */ 376183375Skmacy struct xen_processor_flags flags; /* global flags of this processor */ 377183375Skmacy XEN_GUEST_HANDLE(xen_processor_cx_t) states; /* supported c states */ 378183375Skmacy}; 379183375Skmacy 380183375Skmacystruct xen_pct_register { 381183375Skmacy uint8_t descriptor; 382183375Skmacy uint16_t length; 383183375Skmacy uint8_t space_id; 384183375Skmacy uint8_t bit_width; 385183375Skmacy uint8_t bit_offset; 386183375Skmacy uint8_t reserved; 387183375Skmacy uint64_t address; 388183375Skmacy}; 389183375Skmacy 390183375Skmacystruct xen_processor_px { 391183375Skmacy uint64_t core_frequency; /* megahertz */ 392183375Skmacy uint64_t power; /* milliWatts */ 393183375Skmacy uint64_t transition_latency; /* microseconds */ 394183375Skmacy uint64_t bus_master_latency; /* microseconds */ 395183375Skmacy uint64_t control; /* control value */ 396183375Skmacy uint64_t status; /* success indicator */ 397183375Skmacy}; 398183375Skmacytypedef struct xen_processor_px xen_processor_px_t; 399183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_processor_px_t); 400183375Skmacy 401183375Skmacystruct xen_psd_package { 402183375Skmacy uint64_t num_entries; 403183375Skmacy uint64_t revision; 404183375Skmacy uint64_t domain; 405183375Skmacy uint64_t coord_type; 406183375Skmacy uint64_t num_processors; 407183375Skmacy}; 408183375Skmacy 409183375Skmacystruct xen_processor_performance { 410183375Skmacy uint32_t flags; /* flag for Px sub info type */ 411183375Skmacy uint32_t platform_limit; /* Platform limitation on freq usage */ 412183375Skmacy struct xen_pct_register control_register; 413183375Skmacy struct xen_pct_register status_register; 414183375Skmacy uint32_t state_count; /* total available performance states */ 415183375Skmacy XEN_GUEST_HANDLE(xen_processor_px_t) states; 416183375Skmacy struct xen_psd_package domain_info; 417183375Skmacy uint32_t shared_type; /* coordination type of this processor */ 418183375Skmacy}; 419183375Skmacytypedef struct xen_processor_performance xen_processor_performance_t; 420183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t); 421183375Skmacy 422183375Skmacystruct xenpf_set_processor_pminfo { 423183375Skmacy /* IN variables */ 424183375Skmacy uint32_t id; /* ACPI CPU ID */ 425183375Skmacy uint32_t type; /* {XEN_PM_CX, XEN_PM_PX} */ 426183375Skmacy union { 427183375Skmacy struct xen_processor_power power;/* Cx: _CST/_CSD */ 428183375Skmacy struct xen_processor_performance perf; /* Px: _PPC/_PCT/_PSS/_PSD */ 429251767Sgibbs XEN_GUEST_HANDLE(uint32) pdc; /* _PDC */ 430183375Skmacy } u; 431183375Skmacy}; 432183375Skmacytypedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t; 433183375SkmacyDEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t); 434183375Skmacy 435251767Sgibbs#define XENPF_get_cpuinfo 55 436251767Sgibbsstruct xenpf_pcpuinfo { 437251767Sgibbs /* IN */ 438251767Sgibbs uint32_t xen_cpuid; 439251767Sgibbs /* OUT */ 440251767Sgibbs /* The maxium cpu_id that is present */ 441251767Sgibbs uint32_t max_present; 442251767Sgibbs#define XEN_PCPU_FLAGS_ONLINE 1 443251767Sgibbs /* Correponding xen_cpuid is not present*/ 444251767Sgibbs#define XEN_PCPU_FLAGS_INVALID 2 445251767Sgibbs uint32_t flags; 446251767Sgibbs uint32_t apic_id; 447251767Sgibbs uint32_t acpi_id; 448251767Sgibbs}; 449251767Sgibbstypedef struct xenpf_pcpuinfo xenpf_pcpuinfo_t; 450251767SgibbsDEFINE_XEN_GUEST_HANDLE(xenpf_pcpuinfo_t); 451251767Sgibbs 452251767Sgibbs#define XENPF_get_cpu_version 48 453251767Sgibbsstruct xenpf_pcpu_version { 454251767Sgibbs /* IN */ 455251767Sgibbs uint32_t xen_cpuid; 456251767Sgibbs /* OUT */ 457251767Sgibbs /* The maxium cpu_id that is present */ 458251767Sgibbs uint32_t max_present; 459251767Sgibbs char vendor_id[12]; 460251767Sgibbs uint32_t family; 461251767Sgibbs uint32_t model; 462251767Sgibbs uint32_t stepping; 463251767Sgibbs}; 464251767Sgibbstypedef struct xenpf_pcpu_version xenpf_pcpu_version_t; 465251767SgibbsDEFINE_XEN_GUEST_HANDLE(xenpf_pcpu_version_t); 466251767Sgibbs 467251767Sgibbs#define XENPF_cpu_online 56 468251767Sgibbs#define XENPF_cpu_offline 57 469251767Sgibbsstruct xenpf_cpu_ol 470251767Sgibbs{ 471251767Sgibbs uint32_t cpuid; 472251767Sgibbs}; 473251767Sgibbstypedef struct xenpf_cpu_ol xenpf_cpu_ol_t; 474251767SgibbsDEFINE_XEN_GUEST_HANDLE(xenpf_cpu_ol_t); 475251767Sgibbs 476251767Sgibbs#define XENPF_cpu_hotadd 58 477251767Sgibbsstruct xenpf_cpu_hotadd 478251767Sgibbs{ 479251767Sgibbs uint32_t apic_id; 480251767Sgibbs uint32_t acpi_id; 481251767Sgibbs uint32_t pxm; 482251767Sgibbs}; 483251767Sgibbs 484251767Sgibbs#define XENPF_mem_hotadd 59 485251767Sgibbsstruct xenpf_mem_hotadd 486251767Sgibbs{ 487251767Sgibbs uint64_t spfn; 488251767Sgibbs uint64_t epfn; 489251767Sgibbs uint32_t pxm; 490251767Sgibbs uint32_t flags; 491251767Sgibbs}; 492251767Sgibbs 493251767Sgibbs#define XENPF_core_parking 60 494251767Sgibbs 495251767Sgibbs#define XEN_CORE_PARKING_SET 1 496251767Sgibbs#define XEN_CORE_PARKING_GET 2 497251767Sgibbsstruct xenpf_core_parking { 498251767Sgibbs /* IN variables */ 499251767Sgibbs uint32_t type; 500251767Sgibbs /* IN variables: set cpu nums expected to be idled */ 501251767Sgibbs /* OUT variables: get cpu nums actually be idled */ 502251767Sgibbs uint32_t idle_nums; 503251767Sgibbs}; 504251767Sgibbstypedef struct xenpf_core_parking xenpf_core_parking_t; 505251767SgibbsDEFINE_XEN_GUEST_HANDLE(xenpf_core_parking_t); 506251767Sgibbs 507251767Sgibbs/* 508251767Sgibbs * ` enum neg_errnoval 509251767Sgibbs * ` HYPERVISOR_platform_op(const struct xen_platform_op*); 510251767Sgibbs */ 511181624Skmacystruct xen_platform_op { 512181624Skmacy uint32_t cmd; 513181624Skmacy uint32_t interface_version; /* XENPF_INTERFACE_VERSION */ 514181624Skmacy union { 515181624Skmacy struct xenpf_settime settime; 516181624Skmacy struct xenpf_add_memtype add_memtype; 517181624Skmacy struct xenpf_del_memtype del_memtype; 518181624Skmacy struct xenpf_read_memtype read_memtype; 519181624Skmacy struct xenpf_microcode_update microcode; 520181624Skmacy struct xenpf_platform_quirk platform_quirk; 521251767Sgibbs struct xenpf_efi_runtime_call efi_runtime_call; 522181624Skmacy struct xenpf_firmware_info firmware_info; 523183375Skmacy struct xenpf_enter_acpi_sleep enter_acpi_sleep; 524183375Skmacy struct xenpf_change_freq change_freq; 525183375Skmacy struct xenpf_getidletime getidletime; 526183375Skmacy struct xenpf_set_processor_pminfo set_pminfo; 527251767Sgibbs struct xenpf_pcpuinfo pcpu_info; 528251767Sgibbs struct xenpf_pcpu_version pcpu_version; 529251767Sgibbs struct xenpf_cpu_ol cpu_ol; 530251767Sgibbs struct xenpf_cpu_hotadd cpu_add; 531251767Sgibbs struct xenpf_mem_hotadd mem_add; 532251767Sgibbs struct xenpf_core_parking core_parking; 533181624Skmacy uint8_t pad[128]; 534181624Skmacy } u; 535181624Skmacy}; 536181624Skmacytypedef struct xen_platform_op xen_platform_op_t; 537181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_platform_op_t); 538181624Skmacy 539181624Skmacy#endif /* __XEN_PUBLIC_PLATFORM_H__ */ 540181624Skmacy 541181624Skmacy/* 542181624Skmacy * Local variables: 543181624Skmacy * mode: C 544181624Skmacy * c-set-style: "BSD" 545181624Skmacy * c-basic-offset: 4 546181624Skmacy * tab-width: 4 547181624Skmacy * indent-tabs-mode: nil 548181624Skmacy * End: 549181624Skmacy */ 550