valgrind-monitor.py regular expressions should use raw strings
[valgrind.git] / include / vki / vki-xen-hvm.h
blobc6ce0d90b85d3011910f3fc9f8102a61e32edc2b
1 /*
2 This file is part of Valgrind, a dynamic binary instrumentation
3 framework.
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;
42 vki_uint8_t level;
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;
49 vki_uint8_t isa_irq;
50 vki_uint8_t level;
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;
57 vki_uint8_t link;
58 vki_uint8_t isa_irq;
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;
75 vki_uint32_t nr;
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;
84 vki_uint32_t nr;
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 */
93 vki_uint64_t pfn;
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;
100 vki_uint32_t vcpuid;
101 vki_uint32_t vector;
102 vki_uint32_t type;
103 vki_uint32_t error_code;
104 vki_uint32_t insn_len;
105 vki_uint64_t cr2;
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 */
120 vki_uint8_t state;
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;
127 vki_uint32_t pad;
128 /* #VE info area gfn */
129 vki_uint64_t 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 */
136 vki_uint16_t view;
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 {
145 /* view */
146 vki_uint16_t view;
147 /* Memory type */
148 vki_uint16_t hvmmem_access; /* xenmem_access_t */
149 vki_uint32_t pad;
150 /* gfn */
151 vki_uint64_t gfn;
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 {
157 /* view */
158 vki_uint16_t view;
159 vki_uint16_t pad1;
160 vki_uint32_t pad2;
161 /* old 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 */
171 vki_uint32_t cmd;
172 vki_xen_domid_t domain;
173 vki_uint16_t pad1;
174 vki_uint32_t pad2;
175 union {
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;
181 vki_uint8_t pad[64];
182 } u;
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 /*--------------------------------------------------------------------*/
190 /*--- end ---*/
191 /*--------------------------------------------------------------------*/