1a576ab5bSrab /* 2a576ab5bSrab * Permission is hereby granted, free of charge, to any person obtaining a copy 3a576ab5bSrab * of this software and associated documentation files (the "Software"), to 4a576ab5bSrab * deal in the Software without restriction, including without limitation the 5a576ab5bSrab * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 6a576ab5bSrab * sell copies of the Software, and to permit persons to whom the Software is 7a576ab5bSrab * furnished to do so, subject to the following conditions: 8a576ab5bSrab * 9a576ab5bSrab * The above copyright notice and this permission notice shall be included in 10a576ab5bSrab * all copies or substantial portions of the Software. 11a576ab5bSrab * 12a576ab5bSrab * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13a576ab5bSrab * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14a576ab5bSrab * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15a576ab5bSrab * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 16a576ab5bSrab * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17a576ab5bSrab * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 18a576ab5bSrab * DEALINGS IN THE SOFTWARE. 19a576ab5bSrab */ 20a576ab5bSrab 21843e1988Sjohnlev #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ 22843e1988Sjohnlev #define __XEN_PUBLIC_HVM_HVM_OP_H__ 23843e1988Sjohnlev 24843e1988Sjohnlev /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ 25843e1988Sjohnlev #define HVMOP_set_param 0 26843e1988Sjohnlev #define HVMOP_get_param 1 27843e1988Sjohnlev struct xen_hvm_param { 28843e1988Sjohnlev domid_t domid; /* IN */ 29843e1988Sjohnlev uint32_t index; /* IN */ 30843e1988Sjohnlev uint64_t value; /* IN/OUT */ 31843e1988Sjohnlev }; 32843e1988Sjohnlev typedef struct xen_hvm_param xen_hvm_param_t; 33843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); 34843e1988Sjohnlev 35843e1988Sjohnlev /* Set the logical level of one of a domain's PCI INTx wires. */ 36843e1988Sjohnlev #define HVMOP_set_pci_intx_level 2 37843e1988Sjohnlev struct xen_hvm_set_pci_intx_level { 38843e1988Sjohnlev /* Domain to be updated. */ 39843e1988Sjohnlev domid_t domid; 40843e1988Sjohnlev /* PCI INTx identification in PCI topology (domain:bus:device:intx). */ 41843e1988Sjohnlev uint8_t domain, bus, device, intx; 42843e1988Sjohnlev /* Assertion level (0 = unasserted, 1 = asserted). */ 43843e1988Sjohnlev uint8_t level; 44843e1988Sjohnlev }; 45843e1988Sjohnlev typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t; 46843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t); 47843e1988Sjohnlev 48843e1988Sjohnlev /* Set the logical level of one of a domain's ISA IRQ wires. */ 49843e1988Sjohnlev #define HVMOP_set_isa_irq_level 3 50843e1988Sjohnlev struct xen_hvm_set_isa_irq_level { 51843e1988Sjohnlev /* Domain to be updated. */ 52843e1988Sjohnlev domid_t domid; 53843e1988Sjohnlev /* ISA device identification, by ISA IRQ (0-15). */ 54843e1988Sjohnlev uint8_t isa_irq; 55843e1988Sjohnlev /* Assertion level (0 = unasserted, 1 = asserted). */ 56843e1988Sjohnlev uint8_t level; 57843e1988Sjohnlev }; 58843e1988Sjohnlev typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t; 59843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t); 60843e1988Sjohnlev 61843e1988Sjohnlev #define HVMOP_set_pci_link_route 4 62843e1988Sjohnlev struct xen_hvm_set_pci_link_route { 63843e1988Sjohnlev /* Domain to be updated. */ 64843e1988Sjohnlev domid_t domid; 65843e1988Sjohnlev /* PCI link identifier (0-3). */ 66843e1988Sjohnlev uint8_t link; 67843e1988Sjohnlev /* ISA IRQ (1-15), or 0 (disable link). */ 68843e1988Sjohnlev uint8_t isa_irq; 69843e1988Sjohnlev }; 70843e1988Sjohnlev typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t; 71843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t); 72843e1988Sjohnlev 73a576ab5bSrab /* Flushes all VCPU TLBs: @arg must be NULL. */ 74a576ab5bSrab #define HVMOP_flush_tlbs 5 75a576ab5bSrab 76*349b53ddSStuart Maybee /* Following tools-only interfaces may change in future. */ 77*349b53ddSStuart Maybee #if defined(__XEN__) || defined(__XEN_TOOLS__) 78*349b53ddSStuart Maybee 79*349b53ddSStuart Maybee /* Track dirty VRAM. */ 80*349b53ddSStuart Maybee #define HVMOP_track_dirty_vram 6 81*349b53ddSStuart Maybee struct xen_hvm_track_dirty_vram { 82*349b53ddSStuart Maybee /* Domain to be tracked. */ 83*349b53ddSStuart Maybee domid_t domid; 84*349b53ddSStuart Maybee /* First pfn to track. */ 85*349b53ddSStuart Maybee uint64_aligned_t first_pfn; 86*349b53ddSStuart Maybee /* Number of pages to track. */ 87*349b53ddSStuart Maybee uint64_aligned_t nr; 88*349b53ddSStuart Maybee /* OUT variable. */ 89*349b53ddSStuart Maybee /* Dirty bitmap buffer. */ 90*349b53ddSStuart Maybee XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; 91*349b53ddSStuart Maybee }; 92*349b53ddSStuart Maybee typedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t; 93*349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t); 94*349b53ddSStuart Maybee 95*349b53ddSStuart Maybee /* Notify that some pages got modified by the Device Model. */ 96*349b53ddSStuart Maybee #define HVMOP_modified_memory 7 97*349b53ddSStuart Maybee struct xen_hvm_modified_memory { 98*349b53ddSStuart Maybee /* Domain to be updated. */ 99*349b53ddSStuart Maybee domid_t domid; 100*349b53ddSStuart Maybee /* First pfn. */ 101*349b53ddSStuart Maybee uint64_aligned_t first_pfn; 102*349b53ddSStuart Maybee /* Number of pages. */ 103*349b53ddSStuart Maybee uint64_aligned_t nr; 104*349b53ddSStuart Maybee }; 105*349b53ddSStuart Maybee typedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t; 106*349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t); 107*349b53ddSStuart Maybee 108*349b53ddSStuart Maybee #define HVMOP_set_mem_type 8 109*349b53ddSStuart Maybee typedef enum { 110*349b53ddSStuart Maybee HVMMEM_ram_rw, /* Normal read/write guest RAM */ 111*349b53ddSStuart Maybee HVMMEM_ram_ro, /* Read-only; writes are discarded */ 112*349b53ddSStuart Maybee HVMMEM_mmio_dm, /* Reads and write go to the device model */ 113*349b53ddSStuart Maybee } hvmmem_type_t; 114*349b53ddSStuart Maybee /* Notify that a region of memory is to be treated in a specific way. */ 115*349b53ddSStuart Maybee struct xen_hvm_set_mem_type { 116*349b53ddSStuart Maybee /* Domain to be updated. */ 117*349b53ddSStuart Maybee domid_t domid; 118*349b53ddSStuart Maybee /* Memory type */ 119*349b53ddSStuart Maybee hvmmem_type_t hvmmem_type; 120*349b53ddSStuart Maybee /* First pfn. */ 121*349b53ddSStuart Maybee uint64_aligned_t first_pfn; 122*349b53ddSStuart Maybee /* Number of pages. */ 123*349b53ddSStuart Maybee uint64_aligned_t nr; 124*349b53ddSStuart Maybee }; 125*349b53ddSStuart Maybee typedef struct xen_hvm_set_mem_type xen_hvm_set_mem_type_t; 126*349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_type_t); 127*349b53ddSStuart Maybee 128*349b53ddSStuart Maybee 129*349b53ddSStuart Maybee #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 130*349b53ddSStuart Maybee 131843e1988Sjohnlev #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ 132