125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR MIT) */ 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/****************************************************************************** 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * privcmd.h 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Interface to /proc/xen/privcmd. 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2003-2005, K A Fraser 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * modify it under the terms of the GNU General Public License version 2 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * as published by the Free Software Foundation; or, when distributed 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * separately from the Linux kernel or incorporated into other 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * software packages, subject to the following license: 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Permission is hereby granted, free of charge, to any person obtaining a copy 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * of this source file (the "Software"), to deal in the Software without 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * restriction, including without limitation the rights to use, copy, modify, 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * merge, publish, distribute, sublicense, and/or sell copies of the Software, 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * and to permit persons to whom the Software is furnished to do so, subject to 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the following conditions: 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The above copyright notice and this permission notice shall be included in 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * all copies or substantial portions of the Software. 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IN THE SOFTWARE. 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef __LINUX_PUBLIC_PRIVCMD_H__ 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define __LINUX_PUBLIC_PRIVCMD_H__ 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/compiler.h> 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <xen/interface/xen.h> 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct privcmd_hypercall { 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 op; 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 arg[5]; 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct privcmd_mmap_entry { 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 va; 4812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris /* 4912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * This should be a GFN. It's not possible to change the name because 5012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * it's exposed to the user-space. 5112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris */ 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 mfn; 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 npages; 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct privcmd_mmap { 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int num; 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng domid_t dom; /* target domain */ 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct privcmd_mmap_entry __user *entry; 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct privcmd_mmapbatch { 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int num; /* number of pages to populate */ 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng domid_t dom; /* target domain */ 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 addr; /* virtual address */ 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng xen_pfn_t __user *arr; /* array of mfns - or'd with 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PRIVCMD_MMAPBATCH_*_ERROR on err */ 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PRIVCMD_MMAPBATCH_MFN_ERROR 0xf0000000U 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PRIVCMD_MMAPBATCH_PAGED_ERROR 0x80000000U 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct privcmd_mmapbatch_v2 { 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int num; /* number of pages to populate */ 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng domid_t dom; /* target domain */ 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 addr; /* virtual address */ 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng const xen_pfn_t __user *arr; /* array of mfns */ 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int __user *err; /* array of error codes */ 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 810543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferrisstruct privcmd_dm_op_buf { 820543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris void __user *uptr; 830543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris size_t size; 840543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris}; 850543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 860543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferrisstruct privcmd_dm_op { 870543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris domid_t dom; 880543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u16 num; 890543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris const struct privcmd_dm_op_buf __user *ubufs; 900543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris}; 910543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @cmd: IOCTL_PRIVCMD_HYPERCALL 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @arg: &privcmd_hypercall_t 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Return: Value returned from execution of the specified hypercall. 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @cmd: IOCTL_PRIVCMD_MMAPBATCH_V2 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @arg: &struct privcmd_mmapbatch_v2 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Return: 0 on success (i.e., arg->err contains valid error codes for 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * each frame). On an error other than a failed frame remap, -1 is 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * returned and errno is set to EINVAL, EFAULT etc. As an exception, 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * if the operation was otherwise successful but any frame failed with 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * -ENOENT, then -1 is returned and errno is set to ENOENT. 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IOCTL_PRIVCMD_HYPERCALL \ 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall)) 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IOCTL_PRIVCMD_MMAP \ 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap)) 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IOCTL_PRIVCMD_MMAPBATCH \ 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch)) 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IOCTL_PRIVCMD_MMAPBATCH_V2 \ 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2)) 1130543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define IOCTL_PRIVCMD_DM_OP \ 1140543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris _IOC(_IOC_NONE, 'P', 5, sizeof(struct privcmd_dm_op)) 1150543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define IOCTL_PRIVCMD_RESTRICT \ 1160543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris _IOC(_IOC_NONE, 'P', 6, sizeof(domid_t)) 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */ 119