1 /* $NetBSD: xenio.h,v 1.10 2015/09/07 03:49:46 dholland Exp $ */ 2 3 /****************************************************************************** 4 * privcmd.h 5 * 6 * Copyright (c) 2003-2004, K A Fraser 7 * 8 * This file may be distributed separately from the Linux kernel, or 9 * incorporated into other software packages, subject to the following license: 10 * 11 * Permission is hereby granted, free of charge, to any person obtaining a copy 12 * of this source file (the "Software"), to deal in the Software without 13 * restriction, including without limitation the rights to use, copy, modify, 14 * merge, publish, distribute, sublicense, and/or sell copies of the Software, 15 * and to permit persons to whom the Software is furnished to do so, subject to 16 * the following conditions: 17 * 18 * The above copyright notice and this permission notice shall be included in 19 * all copies or substantial portions of the Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 27 * IN THE SOFTWARE. 28 */ 29 30 #ifndef __XEN_XENIO_H__ 31 #define __XEN_XENIO_H__ 32 33 /* Interface to /proc/xen/privcmd */ 34 35 #include <sys/ioccom.h> 36 37 38 typedef struct privcmd_hypercall 39 { 40 unsigned long op; 41 unsigned long arg[5]; 42 long retval; 43 } privcmd_hypercall_t; 44 45 typedef struct privcmd_mmap_entry { 46 unsigned long va; 47 unsigned long mfn; 48 unsigned long npages; 49 } privcmd_mmap_entry_t; 50 51 typedef struct privcmd_mmap { 52 int num; 53 domid_t dom; /* target domain */ 54 privcmd_mmap_entry_t *entry; 55 } privcmd_mmap_t; 56 57 typedef struct privcmd_mmapbatch { 58 int num; /* number of pages to populate */ 59 domid_t dom; /* target domain */ 60 unsigned long addr; /* virtual address */ 61 unsigned long *arr; /* array of mfns - top nibble set on err */ 62 } privcmd_mmapbatch_t; 63 64 typedef struct privcmd_mmapbatch_v2 { 65 int num; /* number of pages to populate */ 66 domid_t dom; /* target domain */ 67 uint64_t addr; /* virtual address */ 68 const xen_pfn_t *arr; /* array of mfns */ 69 int *err; /* array of error codes */ 70 } privcmd_mmapbatch_v2_t; 71 72 typedef struct privcmd_blkmsg 73 { 74 unsigned long op; 75 void *buf; 76 int buf_size; 77 } privcmd_blkmsg_t; 78 79 /* 80 * @cmd: IOCTL_PRIVCMD_HYPERCALL 81 * @arg: &privcmd_hypercall_t 82 * Return: Value returned from execution of the specified hypercall. 83 */ 84 #define IOCTL_PRIVCMD_HYPERCALL \ 85 _IOWR('P', 0, privcmd_hypercall_t) 86 87 #if defined(_KERNEL) 88 /* compat */ 89 #define IOCTL_PRIVCMD_INITDOMAIN_EVTCHN_OLD \ 90 _IO('P', 1) 91 92 typedef struct oprivcmd_hypercall 93 { 94 unsigned long op; 95 unsigned long arg[5]; 96 } oprivcmd_hypercall_t; 97 98 #define IOCTL_PRIVCMD_HYPERCALL_OLD \ 99 _IOWR('P', 0, oprivcmd_hypercall_t) 100 #endif /* defined(_KERNEL) */ 101 102 #define IOCTL_PRIVCMD_MMAP \ 103 _IOW('P', 2, privcmd_mmap_t) 104 #define IOCTL_PRIVCMD_MMAPBATCH \ 105 _IOW('P', 3, privcmd_mmapbatch_t) 106 #define IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN \ 107 _IOR('P', 4, unsigned long) 108 109 /* 110 * @cmd: IOCTL_PRIVCMD_INITDOMAIN_EVTCHN 111 * @arg: n/a 112 * Return: Port associated with domain-controller end of control event channel 113 * for the initial domain. 114 */ 115 #define IOCTL_PRIVCMD_INITDOMAIN_EVTCHN \ 116 _IOR('P', 5, int) 117 #define IOCTL_PRIVCMD_MMAPBATCH_V2 \ 118 _IOW('P', 6, privcmd_mmapbatch_v2_t) 119 120 /* Interface to /dev/xenevt */ 121 /* EVTCHN_RESET: Clear and reinit the event buffer. Clear error condition. */ 122 #define EVTCHN_RESET _IO('E', 1) 123 /* EVTCHN_BIND: Bind to the specified event-channel port. */ 124 #define EVTCHN_BIND _IOW('E', 2, unsigned long) 125 /* EVTCHN_UNBIND: Unbind from the specified event-channel port. */ 126 #define EVTCHN_UNBIND _IOW('E', 3, unsigned long) 127 128 #endif /* __XEN_XENIO_H__ */ 129