135130acb88e29b9200479bc806d7d2d87669c2d0sewardj/*
235130acb88e29b9200479bc806d7d2d87669c2d0sewardj   This file is part of Valgrind, a dynamic binary instrumentation
335130acb88e29b9200479bc806d7d2d87669c2d0sewardj   framework.
435130acb88e29b9200479bc806d7d2d87669c2d0sewardj
535130acb88e29b9200479bc806d7d2d87669c2d0sewardj   Copyright (C) 2012-2015 Citrix
635130acb88e29b9200479bc806d7d2d87669c2d0sewardj
735130acb88e29b9200479bc806d7d2d87669c2d0sewardj   This program is free software; you can redistribute it and/or
835130acb88e29b9200479bc806d7d2d87669c2d0sewardj   modify it under the terms of the GNU General Public License as
935130acb88e29b9200479bc806d7d2d87669c2d0sewardj   published by the Free Software Foundation; either version 2 of the
1035130acb88e29b9200479bc806d7d2d87669c2d0sewardj   License, or (at your option) any later version.
1135130acb88e29b9200479bc806d7d2d87669c2d0sewardj
1235130acb88e29b9200479bc806d7d2d87669c2d0sewardj   This program is distributed in the hope that it will be useful, but
1335130acb88e29b9200479bc806d7d2d87669c2d0sewardj   WITHOUT ANY WARRANTY; without even the implied warranty of
1435130acb88e29b9200479bc806d7d2d87669c2d0sewardj   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1535130acb88e29b9200479bc806d7d2d87669c2d0sewardj   General Public License for more details.
1635130acb88e29b9200479bc806d7d2d87669c2d0sewardj
1735130acb88e29b9200479bc806d7d2d87669c2d0sewardj   You should have received a copy of the GNU General Public License
1835130acb88e29b9200479bc806d7d2d87669c2d0sewardj   along with this program; if not, write to the Free Software
1935130acb88e29b9200479bc806d7d2d87669c2d0sewardj   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
2035130acb88e29b9200479bc806d7d2d87669c2d0sewardj   02111-1307, USA.
2135130acb88e29b9200479bc806d7d2d87669c2d0sewardj
2235130acb88e29b9200479bc806d7d2d87669c2d0sewardj   The GNU General Public License is contained in the file COPYING.
2335130acb88e29b9200479bc806d7d2d87669c2d0sewardj*/
2435130acb88e29b9200479bc806d7d2d87669c2d0sewardj
2535130acb88e29b9200479bc806d7d2d87669c2d0sewardj/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
2635130acb88e29b9200479bc806d7d2d87669c2d0sewardj   and Ian Campbell <ian.campbell@citrix.com> */
2735130acb88e29b9200479bc806d7d2d87669c2d0sewardj
2851e61da70d98443ae4008c2e3bb82add77d9c15cbart#ifndef __VKI_XEN_HVM_H
2951e61da70d98443ae4008c2e3bb82add77d9c15cbart#define __VKI_XEN_HVM_H
3051e61da70d98443ae4008c2e3bb82add77d9c15cbart
3151e61da70d98443ae4008c2e3bb82add77d9c15cbart/* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */
3251e61da70d98443ae4008c2e3bb82add77d9c15cbart#define VKI_XEN_HVMOP_set_param           0
3351e61da70d98443ae4008c2e3bb82add77d9c15cbart#define VKI_XEN_HVMOP_get_param           1
3451e61da70d98443ae4008c2e3bb82add77d9c15cbartstruct vki_xen_hvm_param {
3551e61da70d98443ae4008c2e3bb82add77d9c15cbart    vki_xen_domid_t  domid;    /* IN */
3651e61da70d98443ae4008c2e3bb82add77d9c15cbart    vki_uint32_t index;    /* IN */
3751e61da70d98443ae4008c2e3bb82add77d9c15cbart    vki_uint64_t value;    /* IN/OUT */
3851e61da70d98443ae4008c2e3bb82add77d9c15cbart};
3951e61da70d98443ae4008c2e3bb82add77d9c15cbart
40f38a8f0978b1d9f0ba715289842a8e4629c639e9bart#define VKI_XEN_HVMOP_set_pci_intx_level  2
41f38a8f0978b1d9f0ba715289842a8e4629c639e9bartstruct vki_xen_hvm_set_pci_intx_level {
42f38a8f0978b1d9f0ba715289842a8e4629c639e9bart    vki_xen_domid_t  domid;
43f38a8f0978b1d9f0ba715289842a8e4629c639e9bart    vki_uint8_t  domain, bus, device, intx;
44f38a8f0978b1d9f0ba715289842a8e4629c639e9bart    vki_uint8_t  level;
45f38a8f0978b1d9f0ba715289842a8e4629c639e9bart};
46f38a8f0978b1d9f0ba715289842a8e4629c639e9barttypedef struct vki_xen_hvm_set_pci_intx_level vki_xen_hvm_set_pci_intx_level_t;
47f38a8f0978b1d9f0ba715289842a8e4629c639e9bart
48a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart#define VKI_XEN_HVMOP_set_isa_irq_level 3
49a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bartstruct vki_xen_hvm_set_isa_irq_level {
50a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart    vki_xen_domid_t  domid;
51a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart    vki_uint8_t  isa_irq;
52a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart    vki_uint8_t  level;
53a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart};
54a5f81a0f931c6e5a0cb17f415c304255f08e7ba8barttypedef struct vki_xen_hvm_set_isa_irq_level vki_xen_hvm_set_isa_irq_level_t;
55a5f81a0f931c6e5a0cb17f415c304255f08e7ba8bart
562c28071a87233c88c850c9a5b85896c3b7bda3acbart#define VKI_XEN_HVMOP_set_pci_link_route 4
572c28071a87233c88c850c9a5b85896c3b7bda3acbartstruct vki_xen_hvm_set_pci_link_route {
582c28071a87233c88c850c9a5b85896c3b7bda3acbart    vki_xen_domid_t  domid;
592c28071a87233c88c850c9a5b85896c3b7bda3acbart    vki_uint8_t  link;
602c28071a87233c88c850c9a5b85896c3b7bda3acbart    vki_uint8_t  isa_irq;
612c28071a87233c88c850c9a5b85896c3b7bda3acbart};
622c28071a87233c88c850c9a5b85896c3b7bda3acbarttypedef struct vki_xen_hvm_set_pci_link_route vki_xen_hvm_set_pci_link_route_t;
632c28071a87233c88c850c9a5b85896c3b7bda3acbart
64d1388da83ea2523699b237e7f034e16997ebaca6bart#define VKI_XEN_HVMOP_track_dirty_vram 6
65d1388da83ea2523699b237e7f034e16997ebaca6bartstruct vki_xen_hvm_track_dirty_vram {
66d1388da83ea2523699b237e7f034e16997ebaca6bart    vki_xen_domid_t  domid;                          /* IN  */
67d1388da83ea2523699b237e7f034e16997ebaca6bart    vki_xen_uint64_aligned_t first_pfn;              /* IN  */
68d1388da83ea2523699b237e7f034e16997ebaca6bart    vki_xen_uint64_aligned_t nr;                     /* IN  */
69d1388da83ea2523699b237e7f034e16997ebaca6bart    VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap; /* OUT */
70d1388da83ea2523699b237e7f034e16997ebaca6bart};
71d1388da83ea2523699b237e7f034e16997ebaca6barttypedef struct vki_xen_hvm_track_dirty_vram vki_xen_hvm_track_dirty_vram_t;
72d1388da83ea2523699b237e7f034e16997ebaca6bart
7365056673598941d349716fbca2319f0a9d87ef8cbart#define VKI_XEN_HVMOP_set_mem_type 8
7465056673598941d349716fbca2319f0a9d87ef8cbartstruct vki_xen_hvm_set_mem_type {
7565056673598941d349716fbca2319f0a9d87ef8cbart    vki_xen_domid_t  domid;
7665056673598941d349716fbca2319f0a9d87ef8cbart    vki_uint16_t hvmmem_type;
7765056673598941d349716fbca2319f0a9d87ef8cbart    vki_uint32_t nr;
789e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint64_t first_pfn;
7965056673598941d349716fbca2319f0a9d87ef8cbart};
8065056673598941d349716fbca2319f0a9d87ef8cbarttypedef struct vki_xen_hvm_set_mem_type vki_xen_hvm_set_mem_type_t;
8165056673598941d349716fbca2319f0a9d87ef8cbart
829e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj#define VKI_XEN_HVMOP_set_mem_access        12
839e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjstruct vki_xen_hvm_set_mem_access {
849e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_xen_domid_t domid;
859e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint16_t hvmmem_access;
869e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t nr;
879e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint64_t first_pfn;
889e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj};
899e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjtypedef struct vki_xen_hvm_set_mem_access vki_xen_hvm_set_mem_access_t;
909e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj
919e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj#define VKI_XEN_HVMOP_get_mem_access        13
929e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjstruct vki_xen_hvm_get_mem_access {
939e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_xen_domid_t domid;
949e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint16_t hvmmem_access; /* OUT */
959e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint64_t pfn;
969e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj};
979e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjtypedef struct vki_xen_hvm_get_mem_access vki_xen_hvm_get_mem_access_t;
989e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj
999e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj#define VKI_XEN_HVMOP_inject_trap            14
1009e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjstruct vki_xen_hvm_inject_trap {
1019e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_xen_domid_t domid;
1029e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t vcpuid;
1039e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t vector;
1049e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t type;
1059e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t error_code;
1069e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint32_t insn_len;
1079e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj    vki_uint64_t cr2;
1089e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj};
1099e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardjtypedef struct vki_xen_hvm_inject_trap vki_xen_hvm_inject_trap_t;
1109e4ec3aa2cdc4cdca092538ef2e65b0a494932afsewardj
11151e61da70d98443ae4008c2e3bb82add77d9c15cbart#endif // __VKI_XEN_HVM_H
11251e61da70d98443ae4008c2e3bb82add77d9c15cbart
11351e61da70d98443ae4008c2e3bb82add77d9c15cbart/*--------------------------------------------------------------------*/
11451e61da70d98443ae4008c2e3bb82add77d9c15cbart/*--- end                                                          ---*/
11551e61da70d98443ae4008c2e3bb82add77d9c15cbart/*--------------------------------------------------------------------*/
116