hvm_op.h revision 183375
1181624Skmacy/* 2181624Skmacy * Permission is hereby granted, free of charge, to any person obtaining a copy 3181624Skmacy * of this software and associated documentation files (the "Software"), to 4181624Skmacy * deal in the Software without restriction, including without limitation the 5181624Skmacy * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 6181624Skmacy * sell copies of the Software, and to permit persons to whom the Software is 7181624Skmacy * furnished to do so, subject to the following conditions: 8181624Skmacy * 9181624Skmacy * The above copyright notice and this permission notice shall be included in 10181624Skmacy * all copies or substantial portions of the Software. 11181624Skmacy * 12181624Skmacy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13181624Skmacy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14181624Skmacy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15181624Skmacy * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 16181624Skmacy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 17181624Skmacy * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 18181624Skmacy * DEALINGS IN THE SOFTWARE. 19181624Skmacy */ 20181624Skmacy 21181624Skmacy#ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ 22181624Skmacy#define __XEN_PUBLIC_HVM_HVM_OP_H__ 23181624Skmacy 24181624Skmacy/* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ 25181624Skmacy#define HVMOP_set_param 0 26181624Skmacy#define HVMOP_get_param 1 27181624Skmacystruct xen_hvm_param { 28181624Skmacy domid_t domid; /* IN */ 29181624Skmacy uint32_t index; /* IN */ 30181624Skmacy uint64_t value; /* IN/OUT */ 31181624Skmacy}; 32181624Skmacytypedef struct xen_hvm_param xen_hvm_param_t; 33181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); 34181624Skmacy 35181624Skmacy/* Set the logical level of one of a domain's PCI INTx wires. */ 36181624Skmacy#define HVMOP_set_pci_intx_level 2 37181624Skmacystruct xen_hvm_set_pci_intx_level { 38181624Skmacy /* Domain to be updated. */ 39181624Skmacy domid_t domid; 40181624Skmacy /* PCI INTx identification in PCI topology (domain:bus:device:intx). */ 41181624Skmacy uint8_t domain, bus, device, intx; 42181624Skmacy /* Assertion level (0 = unasserted, 1 = asserted). */ 43181624Skmacy uint8_t level; 44181624Skmacy}; 45181624Skmacytypedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t; 46181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t); 47181624Skmacy 48181624Skmacy/* Set the logical level of one of a domain's ISA IRQ wires. */ 49181624Skmacy#define HVMOP_set_isa_irq_level 3 50181624Skmacystruct xen_hvm_set_isa_irq_level { 51181624Skmacy /* Domain to be updated. */ 52181624Skmacy domid_t domid; 53181624Skmacy /* ISA device identification, by ISA IRQ (0-15). */ 54181624Skmacy uint8_t isa_irq; 55181624Skmacy /* Assertion level (0 = unasserted, 1 = asserted). */ 56181624Skmacy uint8_t level; 57181624Skmacy}; 58181624Skmacytypedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t; 59181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t); 60181624Skmacy 61181624Skmacy#define HVMOP_set_pci_link_route 4 62181624Skmacystruct xen_hvm_set_pci_link_route { 63181624Skmacy /* Domain to be updated. */ 64181624Skmacy domid_t domid; 65181624Skmacy /* PCI link identifier (0-3). */ 66181624Skmacy uint8_t link; 67181624Skmacy /* ISA IRQ (1-15), or 0 (disable link). */ 68181624Skmacy uint8_t isa_irq; 69181624Skmacy}; 70181624Skmacytypedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t; 71181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t); 72181624Skmacy 73181624Skmacy/* Flushes all VCPU TLBs: @arg must be NULL. */ 74181624Skmacy#define HVMOP_flush_tlbs 5 75181624Skmacy 76183375Skmacy/* Following tools-only interfaces may change in future. */ 77183375Skmacy#if defined(__XEN__) || defined(__XEN_TOOLS__) 78183375Skmacy 79183375Skmacy/* Track dirty VRAM. */ 80183375Skmacy#define HVMOP_track_dirty_vram 6 81183375Skmacystruct xen_hvm_track_dirty_vram { 82183375Skmacy /* Domain to be tracked. */ 83183375Skmacy domid_t domid; 84183375Skmacy /* First pfn to track. */ 85183375Skmacy uint64_aligned_t first_pfn; 86183375Skmacy /* Number of pages to track. */ 87183375Skmacy uint64_aligned_t nr; 88183375Skmacy /* OUT variable. */ 89183375Skmacy /* Dirty bitmap buffer. */ 90183375Skmacy XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; 91183375Skmacy}; 92183375Skmacytypedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t; 93183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t); 94183375Skmacy 95183375Skmacy/* Notify that some pages got modified by the Device Model. */ 96183375Skmacy#define HVMOP_modified_memory 7 97183375Skmacystruct xen_hvm_modified_memory { 98183375Skmacy /* Domain to be updated. */ 99183375Skmacy domid_t domid; 100183375Skmacy /* First pfn. */ 101183375Skmacy uint64_aligned_t first_pfn; 102183375Skmacy /* Number of pages. */ 103183375Skmacy uint64_aligned_t nr; 104183375Skmacy}; 105183375Skmacytypedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t; 106183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t); 107183375Skmacy 108183375Skmacy#define HVMOP_set_mem_type 8 109183375Skmacytypedef enum { 110183375Skmacy HVMMEM_ram_rw, /* Normal read/write guest RAM */ 111183375Skmacy HVMMEM_ram_ro, /* Read-only; writes are discarded */ 112183375Skmacy HVMMEM_mmio_dm, /* Reads and write go to the device model */ 113183375Skmacy} hvmmem_type_t; 114183375Skmacy/* Notify that a region of memory is to be treated in a specific way. */ 115183375Skmacystruct xen_hvm_set_mem_type { 116183375Skmacy /* Domain to be updated. */ 117183375Skmacy domid_t domid; 118183375Skmacy /* Memory type */ 119183375Skmacy hvmmem_type_t hvmmem_type; 120183375Skmacy /* First pfn. */ 121183375Skmacy uint64_aligned_t first_pfn; 122183375Skmacy /* Number of pages. */ 123183375Skmacy uint64_aligned_t nr; 124183375Skmacy}; 125183375Skmacytypedef struct xen_hvm_set_mem_type xen_hvm_set_mem_type_t; 126183375SkmacyDEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_type_t); 127183375Skmacy 128183375Skmacy 129183375Skmacy#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ 130183375Skmacy 131181624Skmacy#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ 132