1 /* 2 * Permission is hereby granted, free of charge, to any person obtaining a copy 3 * of this software and associated documentation files (the "Software"), to 4 * deal in the Software without restriction, including without limitation the 5 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 6 * sell copies of the Software, and to permit persons to whom the Software is 7 * furnished to do so, subject to the following conditions: 8 * 9 * The above copyright notice and this permission notice shall be included in 10 * all copies or substantial portions of the Software. 11 * 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 18 * DEALINGS IN THE SOFTWARE. 19 */ 20 21 #ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ 22 #define __XEN_PUBLIC_HVM_HVM_OP_H__ 23 24 /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ 25 #define HVMOP_set_param 0 26 #define HVMOP_get_param 1 27 struct xen_hvm_param { 28 domid_t domid; /* IN */ 29 uint32_t index; /* IN */ 30 uint64_t value; /* IN/OUT */ 31 }; 32 typedef struct xen_hvm_param xen_hvm_param_t; 33 DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); 34 35 /* Set the logical level of one of a domain's PCI INTx wires. */ 36 #define HVMOP_set_pci_intx_level 2 37 struct xen_hvm_set_pci_intx_level { 38 /* Domain to be updated. */ 39 domid_t domid; 40 /* PCI INTx identification in PCI topology (domain:bus:device:intx). */ 41 uint8_t domain, bus, device, intx; 42 /* Assertion level (0 = unasserted, 1 = asserted). */ 43 uint8_t level; 44 }; 45 typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t; 46 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t); 47 48 /* Set the logical level of one of a domain's ISA IRQ wires. */ 49 #define HVMOP_set_isa_irq_level 3 50 struct xen_hvm_set_isa_irq_level { 51 /* Domain to be updated. */ 52 domid_t domid; 53 /* ISA device identification, by ISA IRQ (0-15). */ 54 uint8_t isa_irq; 55 /* Assertion level (0 = unasserted, 1 = asserted). */ 56 uint8_t level; 57 }; 58 typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t; 59 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t); 60 61 #define HVMOP_set_pci_link_route 4 62 struct xen_hvm_set_pci_link_route { 63 /* Domain to be updated. */ 64 domid_t domid; 65 /* PCI link identifier (0-3). */ 66 uint8_t link; 67 /* ISA IRQ (1-15), or 0 (disable link). */ 68 uint8_t isa_irq; 69 }; 70 typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t; 71 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t); 72 73 /* Flushes all VCPU TLBs: @arg must be NULL. */ 74 #define HVMOP_flush_tlbs 5 75 76 /* Following tools-only interfaces may change in future. */ 77 #if defined(__XEN__) || defined(__XEN_TOOLS__) 78 79 /* Track dirty VRAM. */ 80 #define HVMOP_track_dirty_vram 6 81 struct xen_hvm_track_dirty_vram { 82 /* Domain to be tracked. */ 83 domid_t domid; 84 /* First pfn to track. */ 85 uint64_aligned_t first_pfn; 86 /* Number of pages to track. */ 87 uint64_aligned_t nr; 88 /* OUT variable. */ 89 /* Dirty bitmap buffer. */ 90 XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; 91 }; 92 typedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t; 93 DEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t); 94 95 /* Notify that some pages got modified by the Device Model. */ 96 #define HVMOP_modified_memory 7 97 struct xen_hvm_modified_memory { 98 /* Domain to be updated. */ 99 domid_t domid; 100 /* First pfn. */ 101 uint64_aligned_t first_pfn; 102 /* Number of pages. */ 103 uint64_aligned_t nr; 104 }; 105 typedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t; 106 DEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t); 107 108 #define HVMOP_set_mem_type 8 109 typedef enum { 110 HVMMEM_ram_rw, /* Normal read/write guest RAM */ 111 HVMMEM_ram_ro, /* Read-only; writes are discarded */ 112 HVMMEM_mmio_dm, /* Reads and write go to the device model */ 113 } hvmmem_type_t; 114 /* Notify that a region of memory is to be treated in a specific way. */ 115 struct xen_hvm_set_mem_type { 116 /* Domain to be updated. */ 117 domid_t domid; 118 /* Memory type */ 119 hvmmem_type_t hvmmem_type; 120 /* First pfn. */ 121 uint64_aligned_t first_pfn; 122 /* Number of pages. */ 123 uint64_aligned_t nr; 124 }; 125 typedef struct xen_hvm_set_mem_type xen_hvm_set_mem_type_t; 126 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_type_t); 127 128 129 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 130 131 #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ 132