1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR MIT) */ 2*f80ad8b4SAndroid Build Coastguard Worker /****************************************************************************** 3*f80ad8b4SAndroid Build Coastguard Worker * privcmd.h 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * Interface to /proc/xen/privcmd. 6*f80ad8b4SAndroid Build Coastguard Worker * 7*f80ad8b4SAndroid Build Coastguard Worker * Copyright (c) 2003-2005, K A Fraser 8*f80ad8b4SAndroid Build Coastguard Worker * 9*f80ad8b4SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or 10*f80ad8b4SAndroid Build Coastguard Worker * modify it under the terms of the GNU General Public License version 2 11*f80ad8b4SAndroid Build Coastguard Worker * as published by the Free Software Foundation; or, when distributed 12*f80ad8b4SAndroid Build Coastguard Worker * separately from the Linux kernel or incorporated into other 13*f80ad8b4SAndroid Build Coastguard Worker * software packages, subject to the following license: 14*f80ad8b4SAndroid Build Coastguard Worker * 15*f80ad8b4SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy 16*f80ad8b4SAndroid Build Coastguard Worker * of this source file (the "Software"), to deal in the Software without 17*f80ad8b4SAndroid Build Coastguard Worker * restriction, including without limitation the rights to use, copy, modify, 18*f80ad8b4SAndroid Build Coastguard Worker * merge, publish, distribute, sublicense, and/or sell copies of the Software, 19*f80ad8b4SAndroid Build Coastguard Worker * and to permit persons to whom the Software is furnished to do so, subject to 20*f80ad8b4SAndroid Build Coastguard Worker * the following conditions: 21*f80ad8b4SAndroid Build Coastguard Worker * 22*f80ad8b4SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in 23*f80ad8b4SAndroid Build Coastguard Worker * all copies or substantial portions of the Software. 24*f80ad8b4SAndroid Build Coastguard Worker * 25*f80ad8b4SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 26*f80ad8b4SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 27*f80ad8b4SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 28*f80ad8b4SAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 29*f80ad8b4SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 30*f80ad8b4SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 31*f80ad8b4SAndroid Build Coastguard Worker * IN THE SOFTWARE. 32*f80ad8b4SAndroid Build Coastguard Worker */ 33*f80ad8b4SAndroid Build Coastguard Worker 34*f80ad8b4SAndroid Build Coastguard Worker #ifndef __LINUX_PUBLIC_PRIVCMD_H__ 35*f80ad8b4SAndroid Build Coastguard Worker #define __LINUX_PUBLIC_PRIVCMD_H__ 36*f80ad8b4SAndroid Build Coastguard Worker 37*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 38*f80ad8b4SAndroid Build Coastguard Worker #include <linux/compiler.h> 39*f80ad8b4SAndroid Build Coastguard Worker #include <xen/interface/xen.h> 40*f80ad8b4SAndroid Build Coastguard Worker 41*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_hypercall { 42*f80ad8b4SAndroid Build Coastguard Worker __u64 op; 43*f80ad8b4SAndroid Build Coastguard Worker __u64 arg[5]; 44*f80ad8b4SAndroid Build Coastguard Worker }; 45*f80ad8b4SAndroid Build Coastguard Worker 46*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmap_entry { 47*f80ad8b4SAndroid Build Coastguard Worker __u64 va; 48*f80ad8b4SAndroid Build Coastguard Worker /* 49*f80ad8b4SAndroid Build Coastguard Worker * This should be a GFN. It's not possible to change the name because 50*f80ad8b4SAndroid Build Coastguard Worker * it's exposed to the user-space. 51*f80ad8b4SAndroid Build Coastguard Worker */ 52*f80ad8b4SAndroid Build Coastguard Worker __u64 mfn; 53*f80ad8b4SAndroid Build Coastguard Worker __u64 npages; 54*f80ad8b4SAndroid Build Coastguard Worker }; 55*f80ad8b4SAndroid Build Coastguard Worker 56*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmap { 57*f80ad8b4SAndroid Build Coastguard Worker int num; 58*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; /* target domain */ 59*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmap_entry __user *entry; 60*f80ad8b4SAndroid Build Coastguard Worker }; 61*f80ad8b4SAndroid Build Coastguard Worker 62*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmapbatch { 63*f80ad8b4SAndroid Build Coastguard Worker int num; /* number of pages to populate */ 64*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; /* target domain */ 65*f80ad8b4SAndroid Build Coastguard Worker __u64 addr; /* virtual address */ 66*f80ad8b4SAndroid Build Coastguard Worker xen_pfn_t __user *arr; /* array of mfns - or'd with 67*f80ad8b4SAndroid Build Coastguard Worker PRIVCMD_MMAPBATCH_*_ERROR on err */ 68*f80ad8b4SAndroid Build Coastguard Worker }; 69*f80ad8b4SAndroid Build Coastguard Worker 70*f80ad8b4SAndroid Build Coastguard Worker #define PRIVCMD_MMAPBATCH_MFN_ERROR 0xf0000000U 71*f80ad8b4SAndroid Build Coastguard Worker #define PRIVCMD_MMAPBATCH_PAGED_ERROR 0x80000000U 72*f80ad8b4SAndroid Build Coastguard Worker 73*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmapbatch_v2 { 74*f80ad8b4SAndroid Build Coastguard Worker unsigned int num; /* number of pages to populate */ 75*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; /* target domain */ 76*f80ad8b4SAndroid Build Coastguard Worker __u64 addr; /* virtual address */ 77*f80ad8b4SAndroid Build Coastguard Worker const xen_pfn_t __user *arr; /* array of mfns */ 78*f80ad8b4SAndroid Build Coastguard Worker int __user *err; /* array of error codes */ 79*f80ad8b4SAndroid Build Coastguard Worker }; 80*f80ad8b4SAndroid Build Coastguard Worker 81*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_dm_op_buf { 82*f80ad8b4SAndroid Build Coastguard Worker void __user *uptr; 83*f80ad8b4SAndroid Build Coastguard Worker size_t size; 84*f80ad8b4SAndroid Build Coastguard Worker }; 85*f80ad8b4SAndroid Build Coastguard Worker 86*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_dm_op { 87*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; 88*f80ad8b4SAndroid Build Coastguard Worker __u16 num; 89*f80ad8b4SAndroid Build Coastguard Worker const struct privcmd_dm_op_buf __user *ubufs; 90*f80ad8b4SAndroid Build Coastguard Worker }; 91*f80ad8b4SAndroid Build Coastguard Worker 92*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_mmap_resource { 93*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; 94*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 95*f80ad8b4SAndroid Build Coastguard Worker __u32 id; 96*f80ad8b4SAndroid Build Coastguard Worker __u32 idx; 97*f80ad8b4SAndroid Build Coastguard Worker __u64 num; 98*f80ad8b4SAndroid Build Coastguard Worker __u64 addr; 99*f80ad8b4SAndroid Build Coastguard Worker }; 100*f80ad8b4SAndroid Build Coastguard Worker 101*f80ad8b4SAndroid Build Coastguard Worker /* For privcmd_irqfd::flags */ 102*f80ad8b4SAndroid Build Coastguard Worker #define PRIVCMD_IRQFD_FLAG_DEASSIGN (1 << 0) 103*f80ad8b4SAndroid Build Coastguard Worker 104*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_irqfd { 105*f80ad8b4SAndroid Build Coastguard Worker __u64 dm_op; 106*f80ad8b4SAndroid Build Coastguard Worker __u32 size; /* Size of structure pointed by dm_op */ 107*f80ad8b4SAndroid Build Coastguard Worker __u32 fd; 108*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 109*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; 110*f80ad8b4SAndroid Build Coastguard Worker __u8 pad[2]; 111*f80ad8b4SAndroid Build Coastguard Worker }; 112*f80ad8b4SAndroid Build Coastguard Worker 113*f80ad8b4SAndroid Build Coastguard Worker /* For privcmd_ioeventfd::flags */ 114*f80ad8b4SAndroid Build Coastguard Worker #define PRIVCMD_IOEVENTFD_FLAG_DEASSIGN (1 << 0) 115*f80ad8b4SAndroid Build Coastguard Worker 116*f80ad8b4SAndroid Build Coastguard Worker struct privcmd_ioeventfd { 117*f80ad8b4SAndroid Build Coastguard Worker __u64 ioreq; 118*f80ad8b4SAndroid Build Coastguard Worker __u64 ports; 119*f80ad8b4SAndroid Build Coastguard Worker __u64 addr; 120*f80ad8b4SAndroid Build Coastguard Worker __u32 addr_len; 121*f80ad8b4SAndroid Build Coastguard Worker __u32 event_fd; 122*f80ad8b4SAndroid Build Coastguard Worker __u32 vcpus; 123*f80ad8b4SAndroid Build Coastguard Worker __u32 vq; 124*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 125*f80ad8b4SAndroid Build Coastguard Worker domid_t dom; 126*f80ad8b4SAndroid Build Coastguard Worker __u8 pad[2]; 127*f80ad8b4SAndroid Build Coastguard Worker }; 128*f80ad8b4SAndroid Build Coastguard Worker 129*f80ad8b4SAndroid Build Coastguard Worker /* 130*f80ad8b4SAndroid Build Coastguard Worker * @cmd: IOCTL_PRIVCMD_HYPERCALL 131*f80ad8b4SAndroid Build Coastguard Worker * @arg: &privcmd_hypercall_t 132*f80ad8b4SAndroid Build Coastguard Worker * Return: Value returned from execution of the specified hypercall. 133*f80ad8b4SAndroid Build Coastguard Worker * 134*f80ad8b4SAndroid Build Coastguard Worker * @cmd: IOCTL_PRIVCMD_MMAPBATCH_V2 135*f80ad8b4SAndroid Build Coastguard Worker * @arg: &struct privcmd_mmapbatch_v2 136*f80ad8b4SAndroid Build Coastguard Worker * Return: 0 on success (i.e., arg->err contains valid error codes for 137*f80ad8b4SAndroid Build Coastguard Worker * each frame). On an error other than a failed frame remap, -1 is 138*f80ad8b4SAndroid Build Coastguard Worker * returned and errno is set to EINVAL, EFAULT etc. As an exception, 139*f80ad8b4SAndroid Build Coastguard Worker * if the operation was otherwise successful but any frame failed with 140*f80ad8b4SAndroid Build Coastguard Worker * -ENOENT, then -1 is returned and errno is set to ENOENT. 141*f80ad8b4SAndroid Build Coastguard Worker */ 142*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_HYPERCALL \ 143*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall)) 144*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_MMAP \ 145*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap)) 146*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_MMAPBATCH \ 147*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch)) 148*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_MMAPBATCH_V2 \ 149*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2)) 150*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_DM_OP \ 151*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 5, sizeof(struct privcmd_dm_op)) 152*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_RESTRICT \ 153*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 6, sizeof(domid_t)) 154*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_MMAP_RESOURCE \ 155*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'P', 7, sizeof(struct privcmd_mmap_resource)) 156*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_IRQFD \ 157*f80ad8b4SAndroid Build Coastguard Worker _IOW('P', 8, struct privcmd_irqfd) 158*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_PRIVCMD_IOEVENTFD \ 159*f80ad8b4SAndroid Build Coastguard Worker _IOW('P', 9, struct privcmd_ioeventfd) 160*f80ad8b4SAndroid Build Coastguard Worker 161*f80ad8b4SAndroid Build Coastguard Worker #endif /* __LINUX_PUBLIC_PRIVCMD_H__ */ 162