1*8ac98aedSDavid Woodhouse /* SPDX-License-Identifier: MIT */ 250c88402SJoao Martins /****************************************************************************** 350c88402SJoao Martins * arch-x86/cpuid.h 450c88402SJoao Martins * 550c88402SJoao Martins * CPUID interface to Xen. 650c88402SJoao Martins * 750c88402SJoao Martins * Copyright (c) 2007 Citrix Systems, Inc. 850c88402SJoao Martins * 950c88402SJoao Martins * Authors: 1050c88402SJoao Martins * Keir Fraser <keir@xen.org> 1150c88402SJoao Martins */ 1250c88402SJoao Martins 1350c88402SJoao Martins #ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__ 1450c88402SJoao Martins #define __XEN_PUBLIC_ARCH_X86_CPUID_H__ 1550c88402SJoao Martins 1650c88402SJoao Martins /* 1750c88402SJoao Martins * For compatibility with other hypervisor interfaces, the Xen cpuid leaves 1850c88402SJoao Martins * can be found at the first otherwise unused 0x100 aligned boundary starting 1950c88402SJoao Martins * from 0x40000000. 2050c88402SJoao Martins * 2150c88402SJoao Martins * e.g If viridian extensions are enabled for an HVM domain, the Xen cpuid 2250c88402SJoao Martins * leaves will start at 0x40000100 2350c88402SJoao Martins */ 2450c88402SJoao Martins 2550c88402SJoao Martins #define XEN_CPUID_FIRST_LEAF 0x40000000 2650c88402SJoao Martins #define XEN_CPUID_LEAF(i) (XEN_CPUID_FIRST_LEAF + (i)) 2750c88402SJoao Martins 2850c88402SJoao Martins /* 2950c88402SJoao Martins * Leaf 1 (0x40000x00) 3050c88402SJoao Martins * EAX: Largest Xen-information leaf. All leaves up to an including @EAX 3150c88402SJoao Martins * are supported by the Xen host. 3250c88402SJoao Martins * EBX-EDX: "XenVMMXenVMM" signature, allowing positive identification 3350c88402SJoao Martins * of a Xen host. 3450c88402SJoao Martins */ 3550c88402SJoao Martins #define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */ 3650c88402SJoao Martins #define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */ 3750c88402SJoao Martins #define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */ 3850c88402SJoao Martins 3950c88402SJoao Martins /* 4050c88402SJoao Martins * Leaf 2 (0x40000x01) 4150c88402SJoao Martins * EAX[31:16]: Xen major version. 4250c88402SJoao Martins * EAX[15: 0]: Xen minor version. 4350c88402SJoao Martins * EBX-EDX: Reserved (currently all zeroes). 4450c88402SJoao Martins */ 4550c88402SJoao Martins 4650c88402SJoao Martins /* 4750c88402SJoao Martins * Leaf 3 (0x40000x02) 4850c88402SJoao Martins * EAX: Number of hypercall transfer pages. This register is always guaranteed 4950c88402SJoao Martins * to specify one hypercall page. 5050c88402SJoao Martins * EBX: Base address of Xen-specific MSRs. 5150c88402SJoao Martins * ECX: Features 1. Unused bits are set to zero. 5250c88402SJoao Martins * EDX: Features 2. Unused bits are set to zero. 5350c88402SJoao Martins */ 5450c88402SJoao Martins 5550c88402SJoao Martins /* Does the host support MMU_PT_UPDATE_PRESERVE_AD for this guest? */ 5650c88402SJoao Martins #define _XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD 0 5750c88402SJoao Martins #define XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD (1u<<0) 5850c88402SJoao Martins 5950c88402SJoao Martins /* 6050c88402SJoao Martins * Leaf 4 (0x40000x03) 6150c88402SJoao Martins * Sub-leaf 0: EAX: bit 0: emulated tsc 6250c88402SJoao Martins * bit 1: host tsc is known to be reliable 6350c88402SJoao Martins * bit 2: RDTSCP instruction available 6450c88402SJoao Martins * EBX: tsc_mode: 0=default (emulate if necessary), 1=emulate, 6550c88402SJoao Martins * 2=no emulation, 3=no emulation + TSC_AUX support 6650c88402SJoao Martins * ECX: guest tsc frequency in kHz 6750c88402SJoao Martins * EDX: guest tsc incarnation (migration count) 6850c88402SJoao Martins * Sub-leaf 1: EAX: tsc offset low part 6950c88402SJoao Martins * EBX: tsc offset high part 7050c88402SJoao Martins * ECX: multiplicator for tsc->ns conversion 7150c88402SJoao Martins * EDX: shift amount for tsc->ns conversion 7250c88402SJoao Martins * Sub-leaf 2: EAX: host tsc frequency in kHz 7350c88402SJoao Martins */ 7450c88402SJoao Martins 7550c88402SJoao Martins /* 7650c88402SJoao Martins * Leaf 5 (0x40000x04) 7750c88402SJoao Martins * HVM-specific features 7850c88402SJoao Martins * Sub-leaf 0: EAX: Features 7950c88402SJoao Martins * Sub-leaf 0: EBX: vcpu id (iff EAX has XEN_HVM_CPUID_VCPU_ID_PRESENT flag) 8050c88402SJoao Martins * Sub-leaf 0: ECX: domain id (iff EAX has XEN_HVM_CPUID_DOMID_PRESENT flag) 8150c88402SJoao Martins */ 8250c88402SJoao Martins #define XEN_HVM_CPUID_APIC_ACCESS_VIRT (1u << 0) /* Virtualized APIC registers */ 8350c88402SJoao Martins #define XEN_HVM_CPUID_X2APIC_VIRT (1u << 1) /* Virtualized x2APIC accesses */ 8450c88402SJoao Martins /* Memory mapped from other domains has valid IOMMU entries */ 8550c88402SJoao Martins #define XEN_HVM_CPUID_IOMMU_MAPPINGS (1u << 2) 8650c88402SJoao Martins #define XEN_HVM_CPUID_VCPU_ID_PRESENT (1u << 3) /* vcpu id is present in EBX */ 8750c88402SJoao Martins #define XEN_HVM_CPUID_DOMID_PRESENT (1u << 4) /* domid is present in ECX */ 88*8ac98aedSDavid Woodhouse /* 89*8ac98aedSDavid Woodhouse * With interrupt format set to 0 (non-remappable) bits 55:49 from the 90*8ac98aedSDavid Woodhouse * IO-APIC RTE and bits 11:5 from the MSI address can be used to store 91*8ac98aedSDavid Woodhouse * high bits for the Destination ID. This expands the Destination ID 92*8ac98aedSDavid Woodhouse * field from 8 to 15 bits, allowing to target APIC IDs up 32768. 93*8ac98aedSDavid Woodhouse */ 94*8ac98aedSDavid Woodhouse #define XEN_HVM_CPUID_EXT_DEST_ID (1u << 5) 95*8ac98aedSDavid Woodhouse /* 96*8ac98aedSDavid Woodhouse * Per-vCPU event channel upcalls work correctly with physical IRQs 97*8ac98aedSDavid Woodhouse * bound to event channels. 98*8ac98aedSDavid Woodhouse */ 99*8ac98aedSDavid Woodhouse #define XEN_HVM_CPUID_UPCALL_VECTOR (1u << 6) 10050c88402SJoao Martins 10150c88402SJoao Martins /* 10250c88402SJoao Martins * Leaf 6 (0x40000x05) 10350c88402SJoao Martins * PV-specific parameters 10450c88402SJoao Martins * Sub-leaf 0: EAX: max available sub-leaf 10550c88402SJoao Martins * Sub-leaf 0: EBX: bits 0-7: max machine address width 10650c88402SJoao Martins */ 10750c88402SJoao Martins 10850c88402SJoao Martins /* Max. address width in bits taking memory hotplug into account. */ 10950c88402SJoao Martins #define XEN_CPUID_MACHINE_ADDRESS_WIDTH_MASK (0xffu << 0) 11050c88402SJoao Martins 11150c88402SJoao Martins #define XEN_CPUID_MAX_NUM_LEAVES 5 11250c88402SJoao Martins 11350c88402SJoao Martins #endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */ 114