2 This file is part of Valgrind, a dynamic binary instrumentation
5 Copyright (C) 2012-2017 Citrix
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the
10 License, or (at your option) any later version.
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 The GNU General Public License is contained in the file COPYING.
23 /* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
24 and Ian Campbell <ian.campbell@citrix.com> */
26 #ifndef __VKI_XEN_HVM_H
27 #define __VKI_XEN_HVM_H
29 /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */
30 #define VKI_XEN_HVMOP_set_param 0
31 #define VKI_XEN_HVMOP_get_param 1
32 struct vki_xen_hvm_param
{
33 vki_xen_domid_t domid
; /* IN */
34 vki_uint32_t index
; /* IN */
35 vki_uint64_t value
; /* IN/OUT */
38 #define VKI_XEN_HVMOP_set_pci_intx_level 2
39 struct vki_xen_hvm_set_pci_intx_level
{
40 vki_xen_domid_t domid
;
41 vki_uint8_t domain
, bus
, device
, intx
;
44 typedef struct vki_xen_hvm_set_pci_intx_level vki_xen_hvm_set_pci_intx_level_t
;
46 #define VKI_XEN_HVMOP_set_isa_irq_level 3
47 struct vki_xen_hvm_set_isa_irq_level
{
48 vki_xen_domid_t domid
;
52 typedef struct vki_xen_hvm_set_isa_irq_level vki_xen_hvm_set_isa_irq_level_t
;
54 #define VKI_XEN_HVMOP_set_pci_link_route 4
55 struct vki_xen_hvm_set_pci_link_route
{
56 vki_xen_domid_t domid
;
60 typedef struct vki_xen_hvm_set_pci_link_route vki_xen_hvm_set_pci_link_route_t
;
62 #define VKI_XEN_HVMOP_track_dirty_vram 6
63 struct vki_xen_hvm_track_dirty_vram
{
64 vki_xen_domid_t domid
; /* IN */
65 vki_xen_uint64_aligned_t first_pfn
; /* IN */
66 vki_xen_uint64_aligned_t nr
; /* IN */
67 VKI_XEN_GUEST_HANDLE_64(vki_uint8
) dirty_bitmap
; /* OUT */
69 typedef struct vki_xen_hvm_track_dirty_vram vki_xen_hvm_track_dirty_vram_t
;
71 #define VKI_XEN_HVMOP_set_mem_type 8
72 struct vki_xen_hvm_set_mem_type
{
73 vki_xen_domid_t domid
;
74 vki_uint16_t hvmmem_type
;
76 vki_uint64_t first_pfn
;
78 typedef struct vki_xen_hvm_set_mem_type vki_xen_hvm_set_mem_type_t
;
80 #define VKI_XEN_HVMOP_set_mem_access 12
81 struct vki_xen_hvm_set_mem_access
{
82 vki_xen_domid_t domid
;
83 vki_uint16_t hvmmem_access
;
85 vki_uint64_t first_pfn
;
87 typedef struct vki_xen_hvm_set_mem_access vki_xen_hvm_set_mem_access_t
;
89 #define VKI_XEN_HVMOP_get_mem_access 13
90 struct vki_xen_hvm_get_mem_access
{
91 vki_xen_domid_t domid
;
92 vki_uint16_t hvmmem_access
; /* OUT */
95 typedef struct vki_xen_hvm_get_mem_access vki_xen_hvm_get_mem_access_t
;
97 #define VKI_XEN_HVMOP_inject_trap 14
98 struct vki_xen_hvm_inject_trap
{
99 vki_xen_domid_t domid
;
103 vki_uint32_t error_code
;
104 vki_uint32_t insn_len
;
107 typedef struct vki_xen_hvm_inject_trap vki_xen_hvm_inject_trap_t
;
109 #define VKI_XEN_HVMOP_altp2m 25
110 #define VKI_XEN_HVMOP_altp2m_get_domain_state 1
111 #define VKI_XEN_HVMOP_altp2m_set_domain_state 2
112 #define VKI_XEN_HVMOP_altp2m_vcpu_enable_notify 3
113 #define VKI_XEN_HVMOP_altp2m_create_p2m 4
114 #define VKI_XEN_HVMOP_altp2m_destroy_p2m 5
115 #define VKI_XEN_HVMOP_altp2m_switch_p2m 6
116 #define VKI_XEN_HVMOP_altp2m_set_mem_access 7
117 #define VKI_XEN_HVMOP_altp2m_change_gfn 8
118 struct vki_xen_hvm_altp2m_domain_state
{
119 /* IN or OUT variable on/off */
122 typedef struct vki_xen_hvm_altp2m_domain_state vki_xen_hvm_altp2m_domain_state_t
;
123 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_domain_state_t
);
125 struct vki_xen_hvm_altp2m_vcpu_enable_notify
{
126 vki_uint32_t vcpu_id
;
128 /* #VE info area gfn */
131 typedef struct vki_xen_hvm_altp2m_vcpu_enable_notify vki_xen_hvm_altp2m_vcpu_enable_notify_t
;
132 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_vcpu_enable_notify_t
);
134 struct vki_xen_hvm_altp2m_view
{
135 /* IN/OUT variable */
137 /* Create view only: default access type
138 * NOTE: currently ignored */
139 vki_uint16_t hvmmem_default_access
; /* xenmem_access_t */
141 typedef struct vki_xen_hvm_altp2m_view vki_xen_hvm_altp2m_view_t
;
142 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_view_t
);
144 struct vki_xen_hvm_altp2m_set_mem_access
{
148 vki_uint16_t hvmmem_access
; /* xenmem_access_t */
153 typedef struct vki_xen_hvm_altp2m_set_mem_access vki_xen_hvm_altp2m_set_mem_access_t
;
154 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_set_mem_access_t
);
156 struct vki_xen_hvm_altp2m_change_gfn
{
162 vki_uint64_t old_gfn
;
163 /* new gfn, INVALID_GFN (~0UL) means revert */
164 vki_uint64_t new_gfn
;
166 typedef struct vki_xen_hvm_altp2m_change_gfn vki_xen_hvm_altp2m_change_gfn_t
;
167 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_change_gfn_t
);
169 struct vki_xen_hvm_altp2m_op
{
170 vki_uint32_t version
; /* HVMOP_ALTP2M_INTERFACE_VERSION */
172 vki_xen_domid_t domain
;
176 struct vki_xen_hvm_altp2m_domain_state domain_state
;
177 struct vki_xen_hvm_altp2m_vcpu_enable_notify enable_notify
;
178 struct vki_xen_hvm_altp2m_view view
;
179 struct vki_xen_hvm_altp2m_set_mem_access set_mem_access
;
180 struct vki_xen_hvm_altp2m_change_gfn change_gfn
;
184 typedef struct vki_xen_hvm_altp2m_op vki_xen_hvm_altp2m_op_t
;
185 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_hvm_altp2m_op_t
);
187 #endif // __VKI_XEN_HVM_H
189 /*--------------------------------------------------------------------*/
191 /*--------------------------------------------------------------------*/