1*8ac98aedSDavid Woodhouse /* SPDX-License-Identifier: MIT */ 250c88402SJoao Martins /* 350c88402SJoao Martins * Copyright (c) 2007, Keir Fraser 450c88402SJoao Martins */ 550c88402SJoao Martins 650c88402SJoao Martins #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ 750c88402SJoao Martins #define __XEN_PUBLIC_HVM_HVM_OP_H__ 850c88402SJoao Martins 950c88402SJoao Martins #include "../xen.h" 1050c88402SJoao Martins #include "../trace.h" 1150c88402SJoao Martins #include "../event_channel.h" 1250c88402SJoao Martins 1350c88402SJoao Martins /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ 1450c88402SJoao Martins #define HVMOP_set_param 0 1550c88402SJoao Martins #define HVMOP_get_param 1 1650c88402SJoao Martins struct xen_hvm_param { 1750c88402SJoao Martins domid_t domid; /* IN */ 1850c88402SJoao Martins uint16_t pad; 1950c88402SJoao Martins uint32_t index; /* IN */ 2050c88402SJoao Martins uint64_t value; /* IN/OUT */ 2150c88402SJoao Martins }; 2250c88402SJoao Martins typedef struct xen_hvm_param xen_hvm_param_t; 2350c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); 2450c88402SJoao Martins 2550c88402SJoao Martins struct xen_hvm_altp2m_suppress_ve { 2650c88402SJoao Martins uint16_t view; 2750c88402SJoao Martins uint8_t suppress_ve; /* Boolean type. */ 2850c88402SJoao Martins uint8_t pad1; 2950c88402SJoao Martins uint32_t pad2; 3050c88402SJoao Martins uint64_t gfn; 3150c88402SJoao Martins }; 3250c88402SJoao Martins 3350c88402SJoao Martins struct xen_hvm_altp2m_suppress_ve_multi { 3450c88402SJoao Martins uint16_t view; 3550c88402SJoao Martins uint8_t suppress_ve; /* Boolean type. */ 3650c88402SJoao Martins uint8_t pad1; 3750c88402SJoao Martins int32_t first_error; /* Should be set to 0. */ 3850c88402SJoao Martins uint64_t first_gfn; /* Value may be updated. */ 3950c88402SJoao Martins uint64_t last_gfn; 4050c88402SJoao Martins uint64_t first_error_gfn; /* Gfn of the first error. */ 4150c88402SJoao Martins }; 4250c88402SJoao Martins 4350c88402SJoao Martins #if __XEN_INTERFACE_VERSION__ < 0x00040900 4450c88402SJoao Martins 4550c88402SJoao Martins /* Set the logical level of one of a domain's PCI INTx wires. */ 4650c88402SJoao Martins #define HVMOP_set_pci_intx_level 2 4750c88402SJoao Martins struct xen_hvm_set_pci_intx_level { 4850c88402SJoao Martins /* Domain to be updated. */ 4950c88402SJoao Martins domid_t domid; 5050c88402SJoao Martins /* PCI INTx identification in PCI topology (domain:bus:device:intx). */ 5150c88402SJoao Martins uint8_t domain, bus, device, intx; 5250c88402SJoao Martins /* Assertion level (0 = unasserted, 1 = asserted). */ 5350c88402SJoao Martins uint8_t level; 5450c88402SJoao Martins }; 5550c88402SJoao Martins typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t; 5650c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t); 5750c88402SJoao Martins 5850c88402SJoao Martins /* Set the logical level of one of a domain's ISA IRQ wires. */ 5950c88402SJoao Martins #define HVMOP_set_isa_irq_level 3 6050c88402SJoao Martins struct xen_hvm_set_isa_irq_level { 6150c88402SJoao Martins /* Domain to be updated. */ 6250c88402SJoao Martins domid_t domid; 6350c88402SJoao Martins /* ISA device identification, by ISA IRQ (0-15). */ 6450c88402SJoao Martins uint8_t isa_irq; 6550c88402SJoao Martins /* Assertion level (0 = unasserted, 1 = asserted). */ 6650c88402SJoao Martins uint8_t level; 6750c88402SJoao Martins }; 6850c88402SJoao Martins typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t; 6950c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t); 7050c88402SJoao Martins 7150c88402SJoao Martins #define HVMOP_set_pci_link_route 4 7250c88402SJoao Martins struct xen_hvm_set_pci_link_route { 7350c88402SJoao Martins /* Domain to be updated. */ 7450c88402SJoao Martins domid_t domid; 7550c88402SJoao Martins /* PCI link identifier (0-3). */ 7650c88402SJoao Martins uint8_t link; 7750c88402SJoao Martins /* ISA IRQ (1-15), or 0 (disable link). */ 7850c88402SJoao Martins uint8_t isa_irq; 7950c88402SJoao Martins }; 8050c88402SJoao Martins typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t; 8150c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t); 8250c88402SJoao Martins 8350c88402SJoao Martins #endif /* __XEN_INTERFACE_VERSION__ < 0x00040900 */ 8450c88402SJoao Martins 8550c88402SJoao Martins /* Flushes all VCPU TLBs: @arg must be NULL. */ 8650c88402SJoao Martins #define HVMOP_flush_tlbs 5 8750c88402SJoao Martins 8850c88402SJoao Martins /* 8950c88402SJoao Martins * hvmmem_type_t should not be defined when generating the corresponding 9050c88402SJoao Martins * compat header. This will ensure that the improperly named HVMMEM_(*) 9150c88402SJoao Martins * values are defined only once. 9250c88402SJoao Martins */ 9350c88402SJoao Martins #ifndef XEN_GENERATING_COMPAT_HEADERS 9450c88402SJoao Martins 9550c88402SJoao Martins typedef enum { 9650c88402SJoao Martins HVMMEM_ram_rw, /* Normal read/write guest RAM */ 9750c88402SJoao Martins HVMMEM_ram_ro, /* Read-only; writes are discarded */ 9850c88402SJoao Martins HVMMEM_mmio_dm, /* Reads and write go to the device model */ 9950c88402SJoao Martins #if __XEN_INTERFACE_VERSION__ < 0x00040700 10050c88402SJoao Martins HVMMEM_mmio_write_dm, /* Read-only; writes go to the device model */ 10150c88402SJoao Martins #else 10250c88402SJoao Martins HVMMEM_unused, /* Placeholder; setting memory to this type 10350c88402SJoao Martins will fail for code after 4.7.0 */ 10450c88402SJoao Martins #endif 10550c88402SJoao Martins HVMMEM_ioreq_server /* Memory type claimed by an ioreq server; type 10650c88402SJoao Martins changes to this value are only allowed after 10750c88402SJoao Martins an ioreq server has claimed its ownership. 10850c88402SJoao Martins Only pages with HVMMEM_ram_rw are allowed to 10950c88402SJoao Martins change to this type; conversely, pages with 11050c88402SJoao Martins this type are only allowed to be changed back 11150c88402SJoao Martins to HVMMEM_ram_rw. */ 11250c88402SJoao Martins } hvmmem_type_t; 11350c88402SJoao Martins 11450c88402SJoao Martins #endif /* XEN_GENERATING_COMPAT_HEADERS */ 11550c88402SJoao Martins 11650c88402SJoao Martins /* Hint from PV drivers for pagetable destruction. */ 11750c88402SJoao Martins #define HVMOP_pagetable_dying 9 11850c88402SJoao Martins struct xen_hvm_pagetable_dying { 11950c88402SJoao Martins /* Domain with a pagetable about to be destroyed. */ 12050c88402SJoao Martins domid_t domid; 12150c88402SJoao Martins uint16_t pad[3]; /* align next field on 8-byte boundary */ 12250c88402SJoao Martins /* guest physical address of the toplevel pagetable dying */ 12350c88402SJoao Martins uint64_t gpa; 12450c88402SJoao Martins }; 12550c88402SJoao Martins typedef struct xen_hvm_pagetable_dying xen_hvm_pagetable_dying_t; 12650c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_pagetable_dying_t); 12750c88402SJoao Martins 12850c88402SJoao Martins /* Get the current Xen time, in nanoseconds since system boot. */ 12950c88402SJoao Martins #define HVMOP_get_time 10 13050c88402SJoao Martins struct xen_hvm_get_time { 13150c88402SJoao Martins uint64_t now; /* OUT */ 13250c88402SJoao Martins }; 13350c88402SJoao Martins typedef struct xen_hvm_get_time xen_hvm_get_time_t; 13450c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_time_t); 13550c88402SJoao Martins 13650c88402SJoao Martins #define HVMOP_xentrace 11 13750c88402SJoao Martins struct xen_hvm_xentrace { 13850c88402SJoao Martins uint16_t event, extra_bytes; 13950c88402SJoao Martins uint8_t extra[TRACE_EXTRA_MAX * sizeof(uint32_t)]; 14050c88402SJoao Martins }; 14150c88402SJoao Martins typedef struct xen_hvm_xentrace xen_hvm_xentrace_t; 14250c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_xentrace_t); 14350c88402SJoao Martins 14450c88402SJoao Martins /* Following tools-only interfaces may change in future. */ 14550c88402SJoao Martins #if defined(__XEN__) || defined(__XEN_TOOLS__) 14650c88402SJoao Martins 14750c88402SJoao Martins /* Deprecated by XENMEM_access_op_set_access */ 14850c88402SJoao Martins #define HVMOP_set_mem_access 12 14950c88402SJoao Martins 15050c88402SJoao Martins /* Deprecated by XENMEM_access_op_get_access */ 15150c88402SJoao Martins #define HVMOP_get_mem_access 13 15250c88402SJoao Martins 15350c88402SJoao Martins #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 15450c88402SJoao Martins 15550c88402SJoao Martins #define HVMOP_get_mem_type 15 15650c88402SJoao Martins /* Return hvmmem_type_t for the specified pfn. */ 15750c88402SJoao Martins struct xen_hvm_get_mem_type { 15850c88402SJoao Martins /* Domain to be queried. */ 15950c88402SJoao Martins domid_t domid; 16050c88402SJoao Martins /* OUT variable. */ 16150c88402SJoao Martins uint16_t mem_type; 16250c88402SJoao Martins uint16_t pad[2]; /* align next field on 8-byte boundary */ 16350c88402SJoao Martins /* IN variable. */ 16450c88402SJoao Martins uint64_t pfn; 16550c88402SJoao Martins }; 16650c88402SJoao Martins typedef struct xen_hvm_get_mem_type xen_hvm_get_mem_type_t; 16750c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_mem_type_t); 16850c88402SJoao Martins 16950c88402SJoao Martins /* Following tools-only interfaces may change in future. */ 17050c88402SJoao Martins #if defined(__XEN__) || defined(__XEN_TOOLS__) 17150c88402SJoao Martins 17250c88402SJoao Martins /* 17350c88402SJoao Martins * Definitions relating to DMOP_create_ioreq_server. (Defined here for 17450c88402SJoao Martins * backwards compatibility). 17550c88402SJoao Martins */ 17650c88402SJoao Martins 17750c88402SJoao Martins #define HVM_IOREQSRV_BUFIOREQ_OFF 0 17850c88402SJoao Martins #define HVM_IOREQSRV_BUFIOREQ_LEGACY 1 17950c88402SJoao Martins /* 18050c88402SJoao Martins * Use this when read_pointer gets updated atomically and 18150c88402SJoao Martins * the pointer pair gets read atomically: 18250c88402SJoao Martins */ 18350c88402SJoao Martins #define HVM_IOREQSRV_BUFIOREQ_ATOMIC 2 18450c88402SJoao Martins 18550c88402SJoao Martins #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 18650c88402SJoao Martins 18750c88402SJoao Martins #if defined(__i386__) || defined(__x86_64__) 18850c88402SJoao Martins 18950c88402SJoao Martins /* 19050c88402SJoao Martins * HVMOP_set_evtchn_upcall_vector: Set a <vector> that should be used for event 19150c88402SJoao Martins * channel upcalls on the specified <vcpu>. If set, 19250c88402SJoao Martins * this vector will be used in preference to the 19350c88402SJoao Martins * domain global callback via (see 19450c88402SJoao Martins * HVM_PARAM_CALLBACK_IRQ). 19550c88402SJoao Martins */ 19650c88402SJoao Martins #define HVMOP_set_evtchn_upcall_vector 23 19750c88402SJoao Martins struct xen_hvm_evtchn_upcall_vector { 19850c88402SJoao Martins uint32_t vcpu; 19950c88402SJoao Martins uint8_t vector; 20050c88402SJoao Martins }; 20150c88402SJoao Martins typedef struct xen_hvm_evtchn_upcall_vector xen_hvm_evtchn_upcall_vector_t; 20250c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_evtchn_upcall_vector_t); 20350c88402SJoao Martins 20450c88402SJoao Martins #endif /* defined(__i386__) || defined(__x86_64__) */ 20550c88402SJoao Martins 20650c88402SJoao Martins #define HVMOP_guest_request_vm_event 24 20750c88402SJoao Martins 20850c88402SJoao Martins /* HVMOP_altp2m: perform altp2m state operations */ 20950c88402SJoao Martins #define HVMOP_altp2m 25 21050c88402SJoao Martins 21150c88402SJoao Martins #define HVMOP_ALTP2M_INTERFACE_VERSION 0x00000001 21250c88402SJoao Martins 21350c88402SJoao Martins struct xen_hvm_altp2m_domain_state { 21450c88402SJoao Martins /* IN or OUT variable on/off */ 21550c88402SJoao Martins uint8_t state; 21650c88402SJoao Martins }; 21750c88402SJoao Martins typedef struct xen_hvm_altp2m_domain_state xen_hvm_altp2m_domain_state_t; 21850c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_domain_state_t); 21950c88402SJoao Martins 22050c88402SJoao Martins struct xen_hvm_altp2m_vcpu_enable_notify { 22150c88402SJoao Martins uint32_t vcpu_id; 22250c88402SJoao Martins uint32_t pad; 22350c88402SJoao Martins /* #VE info area gfn */ 22450c88402SJoao Martins uint64_t gfn; 22550c88402SJoao Martins }; 22650c88402SJoao Martins typedef struct xen_hvm_altp2m_vcpu_enable_notify xen_hvm_altp2m_vcpu_enable_notify_t; 22750c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_enable_notify_t); 22850c88402SJoao Martins 22950c88402SJoao Martins struct xen_hvm_altp2m_vcpu_disable_notify { 23050c88402SJoao Martins uint32_t vcpu_id; 23150c88402SJoao Martins }; 23250c88402SJoao Martins typedef struct xen_hvm_altp2m_vcpu_disable_notify xen_hvm_altp2m_vcpu_disable_notify_t; 23350c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_disable_notify_t); 23450c88402SJoao Martins 23550c88402SJoao Martins struct xen_hvm_altp2m_view { 23650c88402SJoao Martins /* IN/OUT variable */ 23750c88402SJoao Martins uint16_t view; 23850c88402SJoao Martins uint16_t hvmmem_default_access; /* xenmem_access_t */ 23950c88402SJoao Martins }; 24050c88402SJoao Martins typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t; 24150c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t); 24250c88402SJoao Martins 24350c88402SJoao Martins #if __XEN_INTERFACE_VERSION__ < 0x00040a00 24450c88402SJoao Martins struct xen_hvm_altp2m_set_mem_access { 24550c88402SJoao Martins /* view */ 24650c88402SJoao Martins uint16_t view; 24750c88402SJoao Martins /* Memory type */ 24850c88402SJoao Martins uint16_t access; /* xenmem_access_t */ 24950c88402SJoao Martins uint32_t pad; 25050c88402SJoao Martins /* gfn */ 25150c88402SJoao Martins uint64_t gfn; 25250c88402SJoao Martins }; 25350c88402SJoao Martins typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t; 25450c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t); 25550c88402SJoao Martins #endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */ 25650c88402SJoao Martins 25750c88402SJoao Martins struct xen_hvm_altp2m_mem_access { 25850c88402SJoao Martins /* view */ 25950c88402SJoao Martins uint16_t view; 26050c88402SJoao Martins /* Memory type */ 26150c88402SJoao Martins uint16_t access; /* xenmem_access_t */ 26250c88402SJoao Martins uint32_t pad; 26350c88402SJoao Martins /* gfn */ 26450c88402SJoao Martins uint64_t gfn; 26550c88402SJoao Martins }; 26650c88402SJoao Martins typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t; 26750c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t); 26850c88402SJoao Martins 26950c88402SJoao Martins struct xen_hvm_altp2m_set_mem_access_multi { 27050c88402SJoao Martins /* view */ 27150c88402SJoao Martins uint16_t view; 27250c88402SJoao Martins uint16_t pad; 27350c88402SJoao Martins /* Number of pages */ 27450c88402SJoao Martins uint32_t nr; 27550c88402SJoao Martins /* 27650c88402SJoao Martins * Used for continuation purposes. 27750c88402SJoao Martins * Must be set to zero upon initial invocation. 27850c88402SJoao Martins */ 27950c88402SJoao Martins uint64_t opaque; 28050c88402SJoao Martins /* List of pfns to set access for */ 28150c88402SJoao Martins XEN_GUEST_HANDLE(const_uint64) pfn_list; 28250c88402SJoao Martins /* Corresponding list of access settings for pfn_list */ 28350c88402SJoao Martins XEN_GUEST_HANDLE(const_uint8) access_list; 28450c88402SJoao Martins }; 28550c88402SJoao Martins 28650c88402SJoao Martins struct xen_hvm_altp2m_change_gfn { 28750c88402SJoao Martins /* view */ 28850c88402SJoao Martins uint16_t view; 28950c88402SJoao Martins uint16_t pad1; 29050c88402SJoao Martins uint32_t pad2; 29150c88402SJoao Martins /* old gfn */ 29250c88402SJoao Martins uint64_t old_gfn; 29350c88402SJoao Martins /* new gfn, INVALID_GFN (~0UL) means revert */ 29450c88402SJoao Martins uint64_t new_gfn; 29550c88402SJoao Martins }; 29650c88402SJoao Martins typedef struct xen_hvm_altp2m_change_gfn xen_hvm_altp2m_change_gfn_t; 29750c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_change_gfn_t); 29850c88402SJoao Martins 29950c88402SJoao Martins struct xen_hvm_altp2m_get_vcpu_p2m_idx { 30050c88402SJoao Martins uint32_t vcpu_id; 30150c88402SJoao Martins uint16_t altp2m_idx; 30250c88402SJoao Martins }; 30350c88402SJoao Martins 30450c88402SJoao Martins struct xen_hvm_altp2m_set_visibility { 30550c88402SJoao Martins uint16_t altp2m_idx; 30650c88402SJoao Martins uint8_t visible; 30750c88402SJoao Martins uint8_t pad; 30850c88402SJoao Martins }; 30950c88402SJoao Martins 31050c88402SJoao Martins struct xen_hvm_altp2m_op { 31150c88402SJoao Martins uint32_t version; /* HVMOP_ALTP2M_INTERFACE_VERSION */ 31250c88402SJoao Martins uint32_t cmd; 31350c88402SJoao Martins /* Get/set the altp2m state for a domain */ 31450c88402SJoao Martins #define HVMOP_altp2m_get_domain_state 1 31550c88402SJoao Martins #define HVMOP_altp2m_set_domain_state 2 31650c88402SJoao Martins /* Set a given VCPU to receive altp2m event notifications */ 31750c88402SJoao Martins #define HVMOP_altp2m_vcpu_enable_notify 3 31850c88402SJoao Martins /* Create a new view */ 31950c88402SJoao Martins #define HVMOP_altp2m_create_p2m 4 32050c88402SJoao Martins /* Destroy a view */ 32150c88402SJoao Martins #define HVMOP_altp2m_destroy_p2m 5 32250c88402SJoao Martins /* Switch view for an entire domain */ 32350c88402SJoao Martins #define HVMOP_altp2m_switch_p2m 6 32450c88402SJoao Martins /* Notify that a page of memory is to have specific access types */ 32550c88402SJoao Martins #define HVMOP_altp2m_set_mem_access 7 32650c88402SJoao Martins /* Change a p2m entry to have a different gfn->mfn mapping */ 32750c88402SJoao Martins #define HVMOP_altp2m_change_gfn 8 32850c88402SJoao Martins /* Set access for an array of pages */ 32950c88402SJoao Martins #define HVMOP_altp2m_set_mem_access_multi 9 33050c88402SJoao Martins /* Set the "Suppress #VE" bit on a page */ 33150c88402SJoao Martins #define HVMOP_altp2m_set_suppress_ve 10 33250c88402SJoao Martins /* Get the "Suppress #VE" bit of a page */ 33350c88402SJoao Martins #define HVMOP_altp2m_get_suppress_ve 11 33450c88402SJoao Martins /* Get the access of a page of memory from a certain view */ 33550c88402SJoao Martins #define HVMOP_altp2m_get_mem_access 12 33650c88402SJoao Martins /* Disable altp2m event notifications for a given VCPU */ 33750c88402SJoao Martins #define HVMOP_altp2m_vcpu_disable_notify 13 33850c88402SJoao Martins /* Get the active vcpu p2m index */ 33950c88402SJoao Martins #define HVMOP_altp2m_get_p2m_idx 14 34050c88402SJoao Martins /* Set the "Supress #VE" bit for a range of pages */ 34150c88402SJoao Martins #define HVMOP_altp2m_set_suppress_ve_multi 15 34250c88402SJoao Martins /* Set visibility for a given altp2m view */ 34350c88402SJoao Martins #define HVMOP_altp2m_set_visibility 16 34450c88402SJoao Martins domid_t domain; 34550c88402SJoao Martins uint16_t pad1; 34650c88402SJoao Martins uint32_t pad2; 34750c88402SJoao Martins union { 34850c88402SJoao Martins struct xen_hvm_altp2m_domain_state domain_state; 34950c88402SJoao Martins struct xen_hvm_altp2m_vcpu_enable_notify enable_notify; 35050c88402SJoao Martins struct xen_hvm_altp2m_view view; 35150c88402SJoao Martins #if __XEN_INTERFACE_VERSION__ < 0x00040a00 35250c88402SJoao Martins struct xen_hvm_altp2m_set_mem_access set_mem_access; 35350c88402SJoao Martins #endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */ 35450c88402SJoao Martins struct xen_hvm_altp2m_mem_access mem_access; 35550c88402SJoao Martins struct xen_hvm_altp2m_change_gfn change_gfn; 35650c88402SJoao Martins struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi; 35750c88402SJoao Martins struct xen_hvm_altp2m_suppress_ve suppress_ve; 35850c88402SJoao Martins struct xen_hvm_altp2m_suppress_ve_multi suppress_ve_multi; 35950c88402SJoao Martins struct xen_hvm_altp2m_vcpu_disable_notify disable_notify; 36050c88402SJoao Martins struct xen_hvm_altp2m_get_vcpu_p2m_idx get_vcpu_p2m_idx; 36150c88402SJoao Martins struct xen_hvm_altp2m_set_visibility set_visibility; 36250c88402SJoao Martins uint8_t pad[64]; 36350c88402SJoao Martins } u; 36450c88402SJoao Martins }; 36550c88402SJoao Martins typedef struct xen_hvm_altp2m_op xen_hvm_altp2m_op_t; 36650c88402SJoao Martins DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_op_t); 36750c88402SJoao Martins 36850c88402SJoao Martins #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ 36950c88402SJoao Martins 37050c88402SJoao Martins /* 37150c88402SJoao Martins * Local variables: 37250c88402SJoao Martins * mode: C 37350c88402SJoao Martins * c-file-style: "BSD" 37450c88402SJoao Martins * c-basic-offset: 4 37550c88402SJoao Martins * tab-width: 4 37650c88402SJoao Martins * indent-tabs-mode: nil 37750c88402SJoao Martins * End: 37850c88402SJoao Martins */ 379