1*8ac98aedSDavid Woodhouse /* SPDX-License-Identifier: MIT */ 250c88402SJoao Martins /****************************************************************************** 350c88402SJoao Martins * features.h 450c88402SJoao Martins * 550c88402SJoao Martins * Feature flags, reported by XENVER_get_features. 650c88402SJoao Martins * 750c88402SJoao Martins * Copyright (c) 2006, Keir Fraser <keir@xensource.com> 850c88402SJoao Martins */ 950c88402SJoao Martins 1050c88402SJoao Martins #ifndef __XEN_PUBLIC_FEATURES_H__ 1150c88402SJoao Martins #define __XEN_PUBLIC_FEATURES_H__ 1250c88402SJoao Martins 1350c88402SJoao Martins /* 1450c88402SJoao Martins * `incontents 200 elfnotes_features XEN_ELFNOTE_FEATURES 1550c88402SJoao Martins * 1650c88402SJoao Martins * The list of all the features the guest supports. They are set by 1750c88402SJoao Martins * parsing the XEN_ELFNOTE_FEATURES and XEN_ELFNOTE_SUPPORTED_FEATURES 1850c88402SJoao Martins * string. The format is the feature names (as given here without the 1950c88402SJoao Martins * "XENFEAT_" prefix) separated by '|' characters. 2050c88402SJoao Martins * If a feature is required for the kernel to function then the feature name 2150c88402SJoao Martins * must be preceded by a '!' character. 2250c88402SJoao Martins * 2350c88402SJoao Martins * Note that if XEN_ELFNOTE_SUPPORTED_FEATURES is used, then in the 2450c88402SJoao Martins * XENFEAT_dom0 MUST be set if the guest is to be booted as dom0, 2550c88402SJoao Martins */ 2650c88402SJoao Martins 2750c88402SJoao Martins /* 2850c88402SJoao Martins * If set, the guest does not need to write-protect its pagetables, and can 2950c88402SJoao Martins * update them via direct writes. 3050c88402SJoao Martins */ 3150c88402SJoao Martins #define XENFEAT_writable_page_tables 0 3250c88402SJoao Martins 3350c88402SJoao Martins /* 3450c88402SJoao Martins * If set, the guest does not need to write-protect its segment descriptor 3550c88402SJoao Martins * tables, and can update them via direct writes. 3650c88402SJoao Martins */ 3750c88402SJoao Martins #define XENFEAT_writable_descriptor_tables 1 3850c88402SJoao Martins 3950c88402SJoao Martins /* 4050c88402SJoao Martins * If set, translation between the guest's 'pseudo-physical' address space 4150c88402SJoao Martins * and the host's machine address space are handled by the hypervisor. In this 4250c88402SJoao Martins * mode the guest does not need to perform phys-to/from-machine translations 4350c88402SJoao Martins * when performing page table operations. 4450c88402SJoao Martins */ 4550c88402SJoao Martins #define XENFEAT_auto_translated_physmap 2 4650c88402SJoao Martins 4750c88402SJoao Martins /* If set, the guest is running in supervisor mode (e.g., x86 ring 0). */ 4850c88402SJoao Martins #define XENFEAT_supervisor_mode_kernel 3 4950c88402SJoao Martins 5050c88402SJoao Martins /* 5150c88402SJoao Martins * If set, the guest does not need to allocate x86 PAE page directories 5250c88402SJoao Martins * below 4GB. This flag is usually implied by auto_translated_physmap. 5350c88402SJoao Martins */ 5450c88402SJoao Martins #define XENFEAT_pae_pgdir_above_4gb 4 5550c88402SJoao Martins 5650c88402SJoao Martins /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */ 5750c88402SJoao Martins #define XENFEAT_mmu_pt_update_preserve_ad 5 5850c88402SJoao Martins 5950c88402SJoao Martins /* x86: Does this Xen host support the MMU_{CLEAR,COPY}_PAGE hypercall? */ 6050c88402SJoao Martins #define XENFEAT_highmem_assist 6 6150c88402SJoao Martins 6250c88402SJoao Martins /* 6350c88402SJoao Martins * If set, GNTTABOP_map_grant_ref honors flags to be placed into guest kernel 6450c88402SJoao Martins * available pte bits. 6550c88402SJoao Martins */ 6650c88402SJoao Martins #define XENFEAT_gnttab_map_avail_bits 7 6750c88402SJoao Martins 6850c88402SJoao Martins /* x86: Does this Xen host support the HVM callback vector type? */ 6950c88402SJoao Martins #define XENFEAT_hvm_callback_vector 8 7050c88402SJoao Martins 7150c88402SJoao Martins /* x86: pvclock algorithm is safe to use on HVM */ 7250c88402SJoao Martins #define XENFEAT_hvm_safe_pvclock 9 7350c88402SJoao Martins 7450c88402SJoao Martins /* x86: pirq can be used by HVM guests */ 7550c88402SJoao Martins #define XENFEAT_hvm_pirqs 10 7650c88402SJoao Martins 7750c88402SJoao Martins /* operation as Dom0 is supported */ 7850c88402SJoao Martins #define XENFEAT_dom0 11 7950c88402SJoao Martins 8050c88402SJoao Martins /* Xen also maps grant references at pfn = mfn. 8150c88402SJoao Martins * This feature flag is deprecated and should not be used. 8250c88402SJoao Martins #define XENFEAT_grant_map_identity 12 8350c88402SJoao Martins */ 8450c88402SJoao Martins 8550c88402SJoao Martins /* Guest can use XENMEMF_vnode to specify virtual node for memory op. */ 8650c88402SJoao Martins #define XENFEAT_memory_op_vnode_supported 13 8750c88402SJoao Martins 8850c88402SJoao Martins /* arm: Hypervisor supports ARM SMC calling convention. */ 8950c88402SJoao Martins #define XENFEAT_ARM_SMCCC_supported 14 9050c88402SJoao Martins 9150c88402SJoao Martins /* 9250c88402SJoao Martins * x86/PVH: If set, ACPI RSDP can be placed at any address. Otherwise RSDP 9350c88402SJoao Martins * must be located in lower 1MB, as required by ACPI Specification for IA-PC 9450c88402SJoao Martins * systems. 9550c88402SJoao Martins * This feature flag is only consulted if XEN_ELFNOTE_GUEST_OS contains 9650c88402SJoao Martins * the "linux" string. 9750c88402SJoao Martins */ 9850c88402SJoao Martins #define XENFEAT_linux_rsdp_unrestricted 15 9950c88402SJoao Martins 10050c88402SJoao Martins /* 10150c88402SJoao Martins * A direct-mapped (or 1:1 mapped) domain is a domain for which its 10250c88402SJoao Martins * local pages have gfn == mfn. If a domain is direct-mapped, 10350c88402SJoao Martins * XENFEAT_direct_mapped is set; otherwise XENFEAT_not_direct_mapped 10450c88402SJoao Martins * is set. 10550c88402SJoao Martins * 10650c88402SJoao Martins * If neither flag is set (e.g. older Xen releases) the assumptions are: 10750c88402SJoao Martins * - not auto_translated domains (x86 only) are always direct-mapped 10850c88402SJoao Martins * - on x86, auto_translated domains are not direct-mapped 10950c88402SJoao Martins * - on ARM, Dom0 is direct-mapped, DomUs are not 11050c88402SJoao Martins */ 11150c88402SJoao Martins #define XENFEAT_not_direct_mapped 16 11250c88402SJoao Martins #define XENFEAT_direct_mapped 17 11350c88402SJoao Martins 11450c88402SJoao Martins #define XENFEAT_NR_SUBMAPS 1 11550c88402SJoao Martins 11650c88402SJoao Martins #endif /* __XEN_PUBLIC_FEATURES_H__ */ 11750c88402SJoao Martins 11850c88402SJoao Martins /* 11950c88402SJoao Martins * Local variables: 12050c88402SJoao Martins * mode: C 12150c88402SJoao Martins * c-file-style: "BSD" 12250c88402SJoao Martins * c-basic-offset: 4 12350c88402SJoao Martins * tab-width: 4 12450c88402SJoao Martins * indent-tabs-mode: nil 12550c88402SJoao Martins * End: 12650c88402SJoao Martins */ 127