1*3a9fd824SRoger Pau Monné /* 2*3a9fd824SRoger Pau Monné * Permission is hereby granted, free of charge, to any person obtaining a copy 3*3a9fd824SRoger Pau Monné * of this software and associated documentation files (the "Software"), to 4*3a9fd824SRoger Pau Monné * deal in the Software without restriction, including without limitation the 5*3a9fd824SRoger Pau Monné * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 6*3a9fd824SRoger Pau Monné * sell copies of the Software, and to permit persons to whom the Software is 7*3a9fd824SRoger Pau Monné * furnished to do so, subject to the following conditions: 8*3a9fd824SRoger Pau Monné * 9*3a9fd824SRoger Pau Monné * The above copyright notice and this permission notice shall be included in 10*3a9fd824SRoger Pau Monné * all copies or substantial portions of the Software. 11*3a9fd824SRoger Pau Monné * 12*3a9fd824SRoger Pau Monné * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13*3a9fd824SRoger Pau Monné * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14*3a9fd824SRoger Pau Monné * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15*3a9fd824SRoger Pau Monné * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 16*3a9fd824SRoger Pau Monné * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17*3a9fd824SRoger Pau Monné * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 18*3a9fd824SRoger Pau Monné * DEALINGS IN THE SOFTWARE. 19*3a9fd824SRoger Pau Monné * 20*3a9fd824SRoger Pau Monné * Copyright (c) 2007, Keir Fraser 21*3a9fd824SRoger Pau Monné */ 22*3a9fd824SRoger Pau Monné 23*3a9fd824SRoger Pau Monné #ifndef __XEN_PUBLIC_HVM_PARAMS_H__ 24*3a9fd824SRoger Pau Monné #define __XEN_PUBLIC_HVM_PARAMS_H__ 25*3a9fd824SRoger Pau Monné 26*3a9fd824SRoger Pau Monné #include "hvm_op.h" 27*3a9fd824SRoger Pau Monné 28*3a9fd824SRoger Pau Monné /* These parameters are deprecated and their meaning is undefined. */ 29*3a9fd824SRoger Pau Monné #if defined(__XEN__) || defined(__XEN_TOOLS__) 30*3a9fd824SRoger Pau Monné 31*3a9fd824SRoger Pau Monné #define HVM_PARAM_PAE_ENABLED 4 32*3a9fd824SRoger Pau Monné #define HVM_PARAM_DM_DOMAIN 13 33*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_CR0 20 34*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_CR3 21 35*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_CR4 22 36*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_INT3 23 37*3a9fd824SRoger Pau Monné #define HVM_PARAM_NESTEDHVM 24 38*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP 25 39*3a9fd824SRoger Pau Monné #define HVM_PARAM_BUFIOREQ_EVTCHN 26 40*3a9fd824SRoger Pau Monné #define HVM_PARAM_MEMORY_EVENT_MSR 30 41*3a9fd824SRoger Pau Monné 42*3a9fd824SRoger Pau Monné #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 43*3a9fd824SRoger Pau Monné 44*3a9fd824SRoger Pau Monné /* 45*3a9fd824SRoger Pau Monné * Parameter space for HVMOP_{set,get}_param. 46*3a9fd824SRoger Pau Monné */ 47*3a9fd824SRoger Pau Monné 48*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_IRQ 0 49*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_IRQ_TYPE_MASK xen_mk_ullong(0xFF00000000000000) 50*3a9fd824SRoger Pau Monné /* 51*3a9fd824SRoger Pau Monné * How should CPU0 event-channel notifications be delivered? 52*3a9fd824SRoger Pau Monné * 53*3a9fd824SRoger Pau Monné * If val == 0 then CPU0 event-channel notifications are not delivered. 54*3a9fd824SRoger Pau Monné * If val != 0, val[63:56] encodes the type, as follows: 55*3a9fd824SRoger Pau Monné */ 56*3a9fd824SRoger Pau Monné 57*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_GSI 0 58*3a9fd824SRoger Pau Monné /* 59*3a9fd824SRoger Pau Monné * val[55:0] is a delivery GSI. GSI 0 cannot be used, as it aliases val == 0, 60*3a9fd824SRoger Pau Monné * and disables all notifications. 61*3a9fd824SRoger Pau Monné */ 62*3a9fd824SRoger Pau Monné 63*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_PCI_INTX 1 64*3a9fd824SRoger Pau Monné /* 65*3a9fd824SRoger Pau Monné * val[55:0] is a delivery PCI INTx line: 66*3a9fd824SRoger Pau Monné * Domain = val[47:32], Bus = val[31:16] DevFn = val[15:8], IntX = val[1:0] 67*3a9fd824SRoger Pau Monné */ 68*3a9fd824SRoger Pau Monné 69*3a9fd824SRoger Pau Monné #if defined(__i386__) || defined(__x86_64__) 70*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_VECTOR 2 71*3a9fd824SRoger Pau Monné /* 72*3a9fd824SRoger Pau Monné * val[7:0] is a vector number. Check for XENFEAT_hvm_callback_vector to know 73*3a9fd824SRoger Pau Monné * if this delivery method is available. 74*3a9fd824SRoger Pau Monné */ 75*3a9fd824SRoger Pau Monné #elif defined(__arm__) || defined(__aarch64__) 76*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_PPI 2 77*3a9fd824SRoger Pau Monné /* 78*3a9fd824SRoger Pau Monné * val[55:16] needs to be zero. 79*3a9fd824SRoger Pau Monné * val[15:8] is interrupt flag of the PPI used by event-channel: 80*3a9fd824SRoger Pau Monné * bit 8: the PPI is edge(1) or level(0) triggered 81*3a9fd824SRoger Pau Monné * bit 9: the PPI is active low(1) or high(0) 82*3a9fd824SRoger Pau Monné * val[7:0] is a PPI number used by event-channel. 83*3a9fd824SRoger Pau Monné * This is only used by ARM/ARM64 and masking/eoi the interrupt associated to 84*3a9fd824SRoger Pau Monné * the notification is handled by the interrupt controller. 85*3a9fd824SRoger Pau Monné */ 86*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_PPI_FLAG_MASK 0xFF00 87*3a9fd824SRoger Pau Monné #define HVM_PARAM_CALLBACK_TYPE_PPI_FLAG_LOW_LEVEL 2 88*3a9fd824SRoger Pau Monné #endif 89*3a9fd824SRoger Pau Monné 90*3a9fd824SRoger Pau Monné /* 91*3a9fd824SRoger Pau Monné * These are not used by Xen. They are here for convenience of HVM-guest 92*3a9fd824SRoger Pau Monné * xenbus implementations. 93*3a9fd824SRoger Pau Monné */ 94*3a9fd824SRoger Pau Monné #define HVM_PARAM_STORE_PFN 1 95*3a9fd824SRoger Pau Monné #define HVM_PARAM_STORE_EVTCHN 2 96*3a9fd824SRoger Pau Monné 97*3a9fd824SRoger Pau Monné #define HVM_PARAM_IOREQ_PFN 5 98*3a9fd824SRoger Pau Monné 99*3a9fd824SRoger Pau Monné #define HVM_PARAM_BUFIOREQ_PFN 6 100*3a9fd824SRoger Pau Monné 101*3a9fd824SRoger Pau Monné #if defined(__i386__) || defined(__x86_64__) 102*3a9fd824SRoger Pau Monné 103*3a9fd824SRoger Pau Monné /* 104*3a9fd824SRoger Pau Monné * Viridian enlightenments 105*3a9fd824SRoger Pau Monné * 106*3a9fd824SRoger Pau Monné * (See http://download.microsoft.com/download/A/B/4/AB43A34E-BDD0-4FA6-BDEF-79EEF16E880B/Hypervisor%20Top%20Level%20Functional%20Specification%20v4.0.docx) 107*3a9fd824SRoger Pau Monné * 108*3a9fd824SRoger Pau Monné * To expose viridian enlightenments to the guest set this parameter 109*3a9fd824SRoger Pau Monné * to the desired feature mask. The base feature set must be present 110*3a9fd824SRoger Pau Monné * in any valid feature mask. 111*3a9fd824SRoger Pau Monné */ 112*3a9fd824SRoger Pau Monné #define HVM_PARAM_VIRIDIAN 9 113*3a9fd824SRoger Pau Monné 114*3a9fd824SRoger Pau Monné /* Base+Freq viridian feature sets: 115*3a9fd824SRoger Pau Monné * 116*3a9fd824SRoger Pau Monné * - Hypercall MSRs (HV_X64_MSR_GUEST_OS_ID and HV_X64_MSR_HYPERCALL) 117*3a9fd824SRoger Pau Monné * - APIC access MSRs (HV_X64_MSR_EOI, HV_X64_MSR_ICR and HV_X64_MSR_TPR) 118*3a9fd824SRoger Pau Monné * - Virtual Processor index MSR (HV_X64_MSR_VP_INDEX) 119*3a9fd824SRoger Pau Monné * - Timer frequency MSRs (HV_X64_MSR_TSC_FREQUENCY and 120*3a9fd824SRoger Pau Monné * HV_X64_MSR_APIC_FREQUENCY) 121*3a9fd824SRoger Pau Monné */ 122*3a9fd824SRoger Pau Monné #define _HVMPV_base_freq 0 123*3a9fd824SRoger Pau Monné #define HVMPV_base_freq (1 << _HVMPV_base_freq) 124*3a9fd824SRoger Pau Monné 125*3a9fd824SRoger Pau Monné /* Feature set modifications */ 126*3a9fd824SRoger Pau Monné 127*3a9fd824SRoger Pau Monné /* Disable timer frequency MSRs (HV_X64_MSR_TSC_FREQUENCY and 128*3a9fd824SRoger Pau Monné * HV_X64_MSR_APIC_FREQUENCY). 129*3a9fd824SRoger Pau Monné * This modification restores the viridian feature set to the 130*3a9fd824SRoger Pau Monné * original 'base' set exposed in releases prior to Xen 4.4. 131*3a9fd824SRoger Pau Monné */ 132*3a9fd824SRoger Pau Monné #define _HVMPV_no_freq 1 133*3a9fd824SRoger Pau Monné #define HVMPV_no_freq (1 << _HVMPV_no_freq) 134*3a9fd824SRoger Pau Monné 135*3a9fd824SRoger Pau Monné /* Enable Partition Time Reference Counter (HV_X64_MSR_TIME_REF_COUNT) */ 136*3a9fd824SRoger Pau Monné #define _HVMPV_time_ref_count 2 137*3a9fd824SRoger Pau Monné #define HVMPV_time_ref_count (1 << _HVMPV_time_ref_count) 138*3a9fd824SRoger Pau Monné 139*3a9fd824SRoger Pau Monné /* Enable Reference TSC Page (HV_X64_MSR_REFERENCE_TSC) */ 140*3a9fd824SRoger Pau Monné #define _HVMPV_reference_tsc 3 141*3a9fd824SRoger Pau Monné #define HVMPV_reference_tsc (1 << _HVMPV_reference_tsc) 142*3a9fd824SRoger Pau Monné 143*3a9fd824SRoger Pau Monné /* Use Hypercall for remote TLB flush */ 144*3a9fd824SRoger Pau Monné #define _HVMPV_hcall_remote_tlb_flush 4 145*3a9fd824SRoger Pau Monné #define HVMPV_hcall_remote_tlb_flush (1 << _HVMPV_hcall_remote_tlb_flush) 146*3a9fd824SRoger Pau Monné 147*3a9fd824SRoger Pau Monné /* Use APIC assist */ 148*3a9fd824SRoger Pau Monné #define _HVMPV_apic_assist 5 149*3a9fd824SRoger Pau Monné #define HVMPV_apic_assist (1 << _HVMPV_apic_assist) 150*3a9fd824SRoger Pau Monné 151*3a9fd824SRoger Pau Monné /* Enable crash MSRs */ 152*3a9fd824SRoger Pau Monné #define _HVMPV_crash_ctl 6 153*3a9fd824SRoger Pau Monné #define HVMPV_crash_ctl (1 << _HVMPV_crash_ctl) 154*3a9fd824SRoger Pau Monné 155*3a9fd824SRoger Pau Monné /* Enable SYNIC MSRs */ 156*3a9fd824SRoger Pau Monné #define _HVMPV_synic 7 157*3a9fd824SRoger Pau Monné #define HVMPV_synic (1 << _HVMPV_synic) 158*3a9fd824SRoger Pau Monné 159*3a9fd824SRoger Pau Monné /* Enable STIMER MSRs */ 160*3a9fd824SRoger Pau Monné #define _HVMPV_stimer 8 161*3a9fd824SRoger Pau Monné #define HVMPV_stimer (1 << _HVMPV_stimer) 162*3a9fd824SRoger Pau Monné 163*3a9fd824SRoger Pau Monné /* Use Synthetic Cluster IPI Hypercall */ 164*3a9fd824SRoger Pau Monné #define _HVMPV_hcall_ipi 9 165*3a9fd824SRoger Pau Monné #define HVMPV_hcall_ipi (1 << _HVMPV_hcall_ipi) 166*3a9fd824SRoger Pau Monné 167*3a9fd824SRoger Pau Monné /* Enable ExProcessorMasks */ 168*3a9fd824SRoger Pau Monné #define _HVMPV_ex_processor_masks 10 169*3a9fd824SRoger Pau Monné #define HVMPV_ex_processor_masks (1 << _HVMPV_ex_processor_masks) 170*3a9fd824SRoger Pau Monné 171*3a9fd824SRoger Pau Monné /* Allow more than 64 VPs */ 172*3a9fd824SRoger Pau Monné #define _HVMPV_no_vp_limit 11 173*3a9fd824SRoger Pau Monné #define HVMPV_no_vp_limit (1 << _HVMPV_no_vp_limit) 174*3a9fd824SRoger Pau Monné 175*3a9fd824SRoger Pau Monné /* Enable vCPU hotplug */ 176*3a9fd824SRoger Pau Monné #define _HVMPV_cpu_hotplug 12 177*3a9fd824SRoger Pau Monné #define HVMPV_cpu_hotplug (1 << _HVMPV_cpu_hotplug) 178*3a9fd824SRoger Pau Monné 179*3a9fd824SRoger Pau Monné #define HVMPV_feature_mask \ 180*3a9fd824SRoger Pau Monné (HVMPV_base_freq | \ 181*3a9fd824SRoger Pau Monné HVMPV_no_freq | \ 182*3a9fd824SRoger Pau Monné HVMPV_time_ref_count | \ 183*3a9fd824SRoger Pau Monné HVMPV_reference_tsc | \ 184*3a9fd824SRoger Pau Monné HVMPV_hcall_remote_tlb_flush | \ 185*3a9fd824SRoger Pau Monné HVMPV_apic_assist | \ 186*3a9fd824SRoger Pau Monné HVMPV_crash_ctl | \ 187*3a9fd824SRoger Pau Monné HVMPV_synic | \ 188*3a9fd824SRoger Pau Monné HVMPV_stimer | \ 189*3a9fd824SRoger Pau Monné HVMPV_hcall_ipi | \ 190*3a9fd824SRoger Pau Monné HVMPV_ex_processor_masks | \ 191*3a9fd824SRoger Pau Monné HVMPV_no_vp_limit | \ 192*3a9fd824SRoger Pau Monné HVMPV_cpu_hotplug) 193*3a9fd824SRoger Pau Monné 194*3a9fd824SRoger Pau Monné #endif 195*3a9fd824SRoger Pau Monné 196*3a9fd824SRoger Pau Monné /* 197*3a9fd824SRoger Pau Monné * Set mode for virtual timers (currently x86 only): 198*3a9fd824SRoger Pau Monné * delay_for_missed_ticks (default): 199*3a9fd824SRoger Pau Monné * Do not advance a vcpu's time beyond the correct delivery time for 200*3a9fd824SRoger Pau Monné * interrupts that have been missed due to preemption. Deliver missed 201*3a9fd824SRoger Pau Monné * interrupts when the vcpu is rescheduled and advance the vcpu's virtual 202*3a9fd824SRoger Pau Monné * time stepwise for each one. 203*3a9fd824SRoger Pau Monné * no_delay_for_missed_ticks: 204*3a9fd824SRoger Pau Monné * As above, missed interrupts are delivered, but guest time always tracks 205*3a9fd824SRoger Pau Monné * wallclock (i.e., real) time while doing so. 206*3a9fd824SRoger Pau Monné * no_missed_ticks_pending: 207*3a9fd824SRoger Pau Monné * No missed interrupts are held pending. Instead, to ensure ticks are 208*3a9fd824SRoger Pau Monné * delivered at some non-zero rate, if we detect missed ticks then the 209*3a9fd824SRoger Pau Monné * internal tick alarm is not disabled if the VCPU is preempted during the 210*3a9fd824SRoger Pau Monné * next tick period. 211*3a9fd824SRoger Pau Monné * one_missed_tick_pending: 212*3a9fd824SRoger Pau Monné * Missed interrupts are collapsed together and delivered as one 'late tick'. 213*3a9fd824SRoger Pau Monné * Guest time always tracks wallclock (i.e., real) time. 214*3a9fd824SRoger Pau Monné */ 215*3a9fd824SRoger Pau Monné #define HVM_PARAM_TIMER_MODE 10 216*3a9fd824SRoger Pau Monné #define HVMPTM_delay_for_missed_ticks 0 217*3a9fd824SRoger Pau Monné #define HVMPTM_no_delay_for_missed_ticks 1 218*3a9fd824SRoger Pau Monné #define HVMPTM_no_missed_ticks_pending 2 219*3a9fd824SRoger Pau Monné #define HVMPTM_one_missed_tick_pending 3 220*3a9fd824SRoger Pau Monné 221*3a9fd824SRoger Pau Monné /* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */ 222*3a9fd824SRoger Pau Monné #define HVM_PARAM_HPET_ENABLED 11 223*3a9fd824SRoger Pau Monné 224*3a9fd824SRoger Pau Monné /* Identity-map page directory used by Intel EPT when CR0.PG=0. */ 225*3a9fd824SRoger Pau Monné #define HVM_PARAM_IDENT_PT 12 226*3a9fd824SRoger Pau Monné 227*3a9fd824SRoger Pau Monné /* ACPI S state: currently support S0 and S3 on x86. */ 228*3a9fd824SRoger Pau Monné #define HVM_PARAM_ACPI_S_STATE 14 229*3a9fd824SRoger Pau Monné 230*3a9fd824SRoger Pau Monné /* TSS used on Intel when CR0.PE=0. */ 231*3a9fd824SRoger Pau Monné #define HVM_PARAM_VM86_TSS 15 232*3a9fd824SRoger Pau Monné 233*3a9fd824SRoger Pau Monné /* Boolean: Enable aligning all periodic vpts to reduce interrupts */ 234*3a9fd824SRoger Pau Monné #define HVM_PARAM_VPT_ALIGN 16 235*3a9fd824SRoger Pau Monné 236*3a9fd824SRoger Pau Monné /* Console debug shared memory ring and event channel */ 237*3a9fd824SRoger Pau Monné #define HVM_PARAM_CONSOLE_PFN 17 238*3a9fd824SRoger Pau Monné #define HVM_PARAM_CONSOLE_EVTCHN 18 239*3a9fd824SRoger Pau Monné 240*3a9fd824SRoger Pau Monné /* 241*3a9fd824SRoger Pau Monné * Select location of ACPI PM1a and TMR control blocks. Currently two locations 242*3a9fd824SRoger Pau Monné * are supported, specified by version 0 or 1 in this parameter: 243*3a9fd824SRoger Pau Monné * - 0: default, use the old addresses 244*3a9fd824SRoger Pau Monné * PM1A_EVT == 0x1f40; PM1A_CNT == 0x1f44; PM_TMR == 0x1f48 245*3a9fd824SRoger Pau Monné * - 1: use the new default qemu addresses 246*3a9fd824SRoger Pau Monné * PM1A_EVT == 0xb000; PM1A_CNT == 0xb004; PM_TMR == 0xb008 247*3a9fd824SRoger Pau Monné * You can find these address definitions in <hvm/ioreq.h> 248*3a9fd824SRoger Pau Monné */ 249*3a9fd824SRoger Pau Monné #define HVM_PARAM_ACPI_IOPORTS_LOCATION 19 250*3a9fd824SRoger Pau Monné 251*3a9fd824SRoger Pau Monné /* Params for the mem event rings */ 252*3a9fd824SRoger Pau Monné #define HVM_PARAM_PAGING_RING_PFN 27 253*3a9fd824SRoger Pau Monné #define HVM_PARAM_MONITOR_RING_PFN 28 254*3a9fd824SRoger Pau Monné #define HVM_PARAM_SHARING_RING_PFN 29 255*3a9fd824SRoger Pau Monné 256*3a9fd824SRoger Pau Monné /* SHUTDOWN_* action in case of a triple fault */ 257*3a9fd824SRoger Pau Monné #define HVM_PARAM_TRIPLE_FAULT_REASON 31 258*3a9fd824SRoger Pau Monné 259*3a9fd824SRoger Pau Monné #define HVM_PARAM_IOREQ_SERVER_PFN 32 260*3a9fd824SRoger Pau Monné #define HVM_PARAM_NR_IOREQ_SERVER_PAGES 33 261*3a9fd824SRoger Pau Monné 262*3a9fd824SRoger Pau Monné /* Location of the VM Generation ID in guest physical address space. */ 263*3a9fd824SRoger Pau Monné #define HVM_PARAM_VM_GENERATION_ID_ADDR 34 264*3a9fd824SRoger Pau Monné 265*3a9fd824SRoger Pau Monné /* 266*3a9fd824SRoger Pau Monné * Set mode for altp2m: 267*3a9fd824SRoger Pau Monné * disabled: don't activate altp2m (default) 268*3a9fd824SRoger Pau Monné * mixed: allow access to all altp2m ops for both in-guest and external tools 269*3a9fd824SRoger Pau Monné * external: allow access to external privileged tools only 270*3a9fd824SRoger Pau Monné * limited: guest only has limited access (ie. control VMFUNC and #VE) 271*3a9fd824SRoger Pau Monné * 272*3a9fd824SRoger Pau Monné * Note that 'mixed' mode has not been evaluated for safety from a 273*3a9fd824SRoger Pau Monné * security perspective. Before using this mode in a 274*3a9fd824SRoger Pau Monné * security-critical environment, each subop should be evaluated for 275*3a9fd824SRoger Pau Monné * safety, with unsafe subops blacklisted in XSM. 276*3a9fd824SRoger Pau Monné */ 277*3a9fd824SRoger Pau Monné #define HVM_PARAM_ALTP2M 35 278*3a9fd824SRoger Pau Monné #define XEN_ALTP2M_disabled 0 279*3a9fd824SRoger Pau Monné #define XEN_ALTP2M_mixed 1 280*3a9fd824SRoger Pau Monné #define XEN_ALTP2M_external 2 281*3a9fd824SRoger Pau Monné #define XEN_ALTP2M_limited 3 282*3a9fd824SRoger Pau Monné 283*3a9fd824SRoger Pau Monné /* 284*3a9fd824SRoger Pau Monné * Size of the x87 FPU FIP/FDP registers that the hypervisor needs to 285*3a9fd824SRoger Pau Monné * save/restore. This is a workaround for a hardware limitation that 286*3a9fd824SRoger Pau Monné * does not allow the full FIP/FDP and FCS/FDS to be restored. 287*3a9fd824SRoger Pau Monné * 288*3a9fd824SRoger Pau Monné * Valid values are: 289*3a9fd824SRoger Pau Monné * 290*3a9fd824SRoger Pau Monné * 8: save/restore 64-bit FIP/FDP and clear FCS/FDS (default if CPU 291*3a9fd824SRoger Pau Monné * has FPCSDS feature). 292*3a9fd824SRoger Pau Monné * 293*3a9fd824SRoger Pau Monné * 4: save/restore 32-bit FIP/FDP, FCS/FDS, and clear upper 32-bits of 294*3a9fd824SRoger Pau Monné * FIP/FDP. 295*3a9fd824SRoger Pau Monné * 296*3a9fd824SRoger Pau Monné * 0: allow hypervisor to choose based on the value of FIP/FDP 297*3a9fd824SRoger Pau Monné * (default if CPU does not have FPCSDS). 298*3a9fd824SRoger Pau Monné * 299*3a9fd824SRoger Pau Monné * If FPCSDS (bit 13 in CPUID leaf 0x7, subleaf 0x0) is set, the CPU 300*3a9fd824SRoger Pau Monné * never saves FCS/FDS and this parameter should be left at the 301*3a9fd824SRoger Pau Monné * default of 8. 302*3a9fd824SRoger Pau Monné */ 303*3a9fd824SRoger Pau Monné #define HVM_PARAM_X87_FIP_WIDTH 36 304*3a9fd824SRoger Pau Monné 305*3a9fd824SRoger Pau Monné /* 306*3a9fd824SRoger Pau Monné * TSS (and its size) used on Intel when CR0.PE=0. The address occupies 307*3a9fd824SRoger Pau Monné * the low 32 bits, while the size is in the high 32 ones. 308*3a9fd824SRoger Pau Monné */ 309*3a9fd824SRoger Pau Monné #define HVM_PARAM_VM86_TSS_SIZED 37 310*3a9fd824SRoger Pau Monné 311*3a9fd824SRoger Pau Monné /* Enable MCA capabilities. */ 312*3a9fd824SRoger Pau Monné #define HVM_PARAM_MCA_CAP 38 313*3a9fd824SRoger Pau Monné #define XEN_HVM_MCA_CAP_LMCE (xen_mk_ullong(1) << 0) 314*3a9fd824SRoger Pau Monné #define XEN_HVM_MCA_CAP_MASK XEN_HVM_MCA_CAP_LMCE 315*3a9fd824SRoger Pau Monné 316*3a9fd824SRoger Pau Monné #define HVM_NR_PARAMS 39 317*3a9fd824SRoger Pau Monné 318*3a9fd824SRoger Pau Monné #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ 319