1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR CDDL-1.0) */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * VBoxGuest - VirtualBox Guest Additions Driver Interface. 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 2006-2016 Oracle Corporation 6*f80ad8b4SAndroid Build Coastguard Worker */ 7*f80ad8b4SAndroid Build Coastguard Worker 8*f80ad8b4SAndroid Build Coastguard Worker #ifndef __UAPI_VBOXGUEST_H__ 9*f80ad8b4SAndroid Build Coastguard Worker #define __UAPI_VBOXGUEST_H__ 10*f80ad8b4SAndroid Build Coastguard Worker 11*f80ad8b4SAndroid Build Coastguard Worker #include <asm/bitsperlong.h> 12*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h> 13*f80ad8b4SAndroid Build Coastguard Worker #include <linux/vbox_err.h> 14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/vbox_vmmdev_types.h> 15*f80ad8b4SAndroid Build Coastguard Worker 16*f80ad8b4SAndroid Build Coastguard Worker /* Version of vbg_ioctl_hdr structure. */ 17*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HDR_VERSION 0x10001 18*f80ad8b4SAndroid Build Coastguard Worker /* Default request type. Use this for non-VMMDev requests. */ 19*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HDR_TYPE_DEFAULT 0 20*f80ad8b4SAndroid Build Coastguard Worker 21*f80ad8b4SAndroid Build Coastguard Worker /** 22*f80ad8b4SAndroid Build Coastguard Worker * Common ioctl header. 23*f80ad8b4SAndroid Build Coastguard Worker * 24*f80ad8b4SAndroid Build Coastguard Worker * This is a mirror of vmmdev_request_header to prevent duplicating data and 25*f80ad8b4SAndroid Build Coastguard Worker * needing to verify things multiple times. 26*f80ad8b4SAndroid Build Coastguard Worker */ 27*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr { 28*f80ad8b4SAndroid Build Coastguard Worker /** IN: The request input size, and output size if size_out is zero. */ 29*f80ad8b4SAndroid Build Coastguard Worker __u32 size_in; 30*f80ad8b4SAndroid Build Coastguard Worker /** IN: Structure version (VBG_IOCTL_HDR_VERSION) */ 31*f80ad8b4SAndroid Build Coastguard Worker __u32 version; 32*f80ad8b4SAndroid Build Coastguard Worker /** IN: The VMMDev request type or VBG_IOCTL_HDR_TYPE_DEFAULT. */ 33*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 34*f80ad8b4SAndroid Build Coastguard Worker /** 35*f80ad8b4SAndroid Build Coastguard Worker * OUT: The VBox status code of the operation, out direction only. 36*f80ad8b4SAndroid Build Coastguard Worker * This is a VINF_ or VERR_ value as defined in vbox_err.h. 37*f80ad8b4SAndroid Build Coastguard Worker */ 38*f80ad8b4SAndroid Build Coastguard Worker __s32 rc; 39*f80ad8b4SAndroid Build Coastguard Worker /** IN: Output size. Set to zero to use size_in as output size. */ 40*f80ad8b4SAndroid Build Coastguard Worker __u32 size_out; 41*f80ad8b4SAndroid Build Coastguard Worker /** Reserved, MBZ. */ 42*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 43*f80ad8b4SAndroid Build Coastguard Worker }; 44*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_hdr, 24); 45*f80ad8b4SAndroid Build Coastguard Worker 46*f80ad8b4SAndroid Build Coastguard Worker 47*f80ad8b4SAndroid Build Coastguard Worker /* 48*f80ad8b4SAndroid Build Coastguard Worker * The VBoxGuest I/O control version. 49*f80ad8b4SAndroid Build Coastguard Worker * 50*f80ad8b4SAndroid Build Coastguard Worker * As usual, the high word contains the major version and changes to it 51*f80ad8b4SAndroid Build Coastguard Worker * signifies incompatible changes. 52*f80ad8b4SAndroid Build Coastguard Worker * 53*f80ad8b4SAndroid Build Coastguard Worker * The lower word is the minor version number, it is increased when new 54*f80ad8b4SAndroid Build Coastguard Worker * functions are added or existing changed in a backwards compatible manner. 55*f80ad8b4SAndroid Build Coastguard Worker */ 56*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOC_VERSION 0x00010000u 57*f80ad8b4SAndroid Build Coastguard Worker 58*f80ad8b4SAndroid Build Coastguard Worker /** 59*f80ad8b4SAndroid Build Coastguard Worker * VBG_IOCTL_DRIVER_VERSION_INFO data structure 60*f80ad8b4SAndroid Build Coastguard Worker * 61*f80ad8b4SAndroid Build Coastguard Worker * Note VBG_IOCTL_DRIVER_VERSION_INFO may switch the session to a backwards 62*f80ad8b4SAndroid Build Coastguard Worker * compatible interface version if uClientVersion indicates older client code. 63*f80ad8b4SAndroid Build Coastguard Worker */ 64*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_driver_version_info { 65*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 66*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 67*f80ad8b4SAndroid Build Coastguard Worker union { 68*f80ad8b4SAndroid Build Coastguard Worker struct { 69*f80ad8b4SAndroid Build Coastguard Worker /** Requested interface version (VBG_IOC_VERSION). */ 70*f80ad8b4SAndroid Build Coastguard Worker __u32 req_version; 71*f80ad8b4SAndroid Build Coastguard Worker /** 72*f80ad8b4SAndroid Build Coastguard Worker * Minimum interface version number (typically the 73*f80ad8b4SAndroid Build Coastguard Worker * major version part of VBG_IOC_VERSION). 74*f80ad8b4SAndroid Build Coastguard Worker */ 75*f80ad8b4SAndroid Build Coastguard Worker __u32 min_version; 76*f80ad8b4SAndroid Build Coastguard Worker /** Reserved, MBZ. */ 77*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved1; 78*f80ad8b4SAndroid Build Coastguard Worker /** Reserved, MBZ. */ 79*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved2; 80*f80ad8b4SAndroid Build Coastguard Worker } in; 81*f80ad8b4SAndroid Build Coastguard Worker struct { 82*f80ad8b4SAndroid Build Coastguard Worker /** Version for this session (typ. VBG_IOC_VERSION). */ 83*f80ad8b4SAndroid Build Coastguard Worker __u32 session_version; 84*f80ad8b4SAndroid Build Coastguard Worker /** Version of the IDC interface (VBG_IOC_VERSION). */ 85*f80ad8b4SAndroid Build Coastguard Worker __u32 driver_version; 86*f80ad8b4SAndroid Build Coastguard Worker /** The SVN revision of the driver, or 0. */ 87*f80ad8b4SAndroid Build Coastguard Worker __u32 driver_revision; 88*f80ad8b4SAndroid Build Coastguard Worker /** Reserved \#1 (zero until defined). */ 89*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved1; 90*f80ad8b4SAndroid Build Coastguard Worker /** Reserved \#2 (zero until defined). */ 91*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved2; 92*f80ad8b4SAndroid Build Coastguard Worker } out; 93*f80ad8b4SAndroid Build Coastguard Worker } u; 94*f80ad8b4SAndroid Build Coastguard Worker }; 95*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20); 96*f80ad8b4SAndroid Build Coastguard Worker 97*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_DRIVER_VERSION_INFO \ 98*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 0, struct vbg_ioctl_driver_version_info) 99*f80ad8b4SAndroid Build Coastguard Worker 100*f80ad8b4SAndroid Build Coastguard Worker 101*f80ad8b4SAndroid Build Coastguard Worker /* IOCTL to perform a VMM Device request less than 1KB in size. */ 102*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_VMMDEV_REQUEST(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 2, s) 103*f80ad8b4SAndroid Build Coastguard Worker 104*f80ad8b4SAndroid Build Coastguard Worker 105*f80ad8b4SAndroid Build Coastguard Worker /* IOCTL to perform a VMM Device request larger then 1KB. */ 106*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_VMMDEV_REQUEST_BIG _IO('V', 3) 107*f80ad8b4SAndroid Build Coastguard Worker 108*f80ad8b4SAndroid Build Coastguard Worker 109*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_HGCM_CONNECT data structure. */ 110*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hgcm_connect { 111*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 112*f80ad8b4SAndroid Build Coastguard Worker union { 113*f80ad8b4SAndroid Build Coastguard Worker struct { 114*f80ad8b4SAndroid Build Coastguard Worker struct vmmdev_hgcm_service_location loc; 115*f80ad8b4SAndroid Build Coastguard Worker } in; 116*f80ad8b4SAndroid Build Coastguard Worker struct { 117*f80ad8b4SAndroid Build Coastguard Worker __u32 client_id; 118*f80ad8b4SAndroid Build Coastguard Worker } out; 119*f80ad8b4SAndroid Build Coastguard Worker } u; 120*f80ad8b4SAndroid Build Coastguard Worker }; 121*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_connect, 24 + 132); 122*f80ad8b4SAndroid Build Coastguard Worker 123*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_CONNECT \ 124*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 4, struct vbg_ioctl_hgcm_connect) 125*f80ad8b4SAndroid Build Coastguard Worker 126*f80ad8b4SAndroid Build Coastguard Worker 127*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_HGCM_DISCONNECT data structure. */ 128*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hgcm_disconnect { 129*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 130*f80ad8b4SAndroid Build Coastguard Worker union { 131*f80ad8b4SAndroid Build Coastguard Worker struct { 132*f80ad8b4SAndroid Build Coastguard Worker __u32 client_id; 133*f80ad8b4SAndroid Build Coastguard Worker } in; 134*f80ad8b4SAndroid Build Coastguard Worker } u; 135*f80ad8b4SAndroid Build Coastguard Worker }; 136*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_disconnect, 24 + 4); 137*f80ad8b4SAndroid Build Coastguard Worker 138*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_DISCONNECT \ 139*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 5, struct vbg_ioctl_hgcm_disconnect) 140*f80ad8b4SAndroid Build Coastguard Worker 141*f80ad8b4SAndroid Build Coastguard Worker 142*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_HGCM_CALL data structure. */ 143*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hgcm_call { 144*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 145*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 146*f80ad8b4SAndroid Build Coastguard Worker /** Input: The id of the caller. */ 147*f80ad8b4SAndroid Build Coastguard Worker __u32 client_id; 148*f80ad8b4SAndroid Build Coastguard Worker /** Input: Function number. */ 149*f80ad8b4SAndroid Build Coastguard Worker __u32 function; 150*f80ad8b4SAndroid Build Coastguard Worker /** 151*f80ad8b4SAndroid Build Coastguard Worker * Input: How long to wait (milliseconds) for completion before 152*f80ad8b4SAndroid Build Coastguard Worker * cancelling the call. Set to -1 to wait indefinitely. 153*f80ad8b4SAndroid Build Coastguard Worker */ 154*f80ad8b4SAndroid Build Coastguard Worker __u32 timeout_ms; 155*f80ad8b4SAndroid Build Coastguard Worker /** Interruptable flag, ignored for userspace calls. */ 156*f80ad8b4SAndroid Build Coastguard Worker __u8 interruptible; 157*f80ad8b4SAndroid Build Coastguard Worker /** Explicit padding, MBZ. */ 158*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved; 159*f80ad8b4SAndroid Build Coastguard Worker /** 160*f80ad8b4SAndroid Build Coastguard Worker * Input: How many parameters following this structure. 161*f80ad8b4SAndroid Build Coastguard Worker * 162*f80ad8b4SAndroid Build Coastguard Worker * The parameters are either HGCMFunctionParameter64 or 32, 163*f80ad8b4SAndroid Build Coastguard Worker * depending on whether we're receiving a 64-bit or 32-bit request. 164*f80ad8b4SAndroid Build Coastguard Worker * 165*f80ad8b4SAndroid Build Coastguard Worker * The current maximum is 61 parameters (given a 1KB max request size, 166*f80ad8b4SAndroid Build Coastguard Worker * and a 64-bit parameter size of 16 bytes). 167*f80ad8b4SAndroid Build Coastguard Worker */ 168*f80ad8b4SAndroid Build Coastguard Worker __u16 parm_count; 169*f80ad8b4SAndroid Build Coastguard Worker /* 170*f80ad8b4SAndroid Build Coastguard Worker * Parameters follow in form: 171*f80ad8b4SAndroid Build Coastguard Worker * struct hgcm_function_parameter<32|64> parms[parm_count] 172*f80ad8b4SAndroid Build Coastguard Worker */ 173*f80ad8b4SAndroid Build Coastguard Worker }; 174*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_call, 24 + 16); 175*f80ad8b4SAndroid Build Coastguard Worker 176*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_CALL_32(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 6, s) 177*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_CALL_64(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 7, s) 178*f80ad8b4SAndroid Build Coastguard Worker #if __BITS_PER_LONG == 64 179*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_64(s) 180*f80ad8b4SAndroid Build Coastguard Worker #else 181*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_32(s) 182*f80ad8b4SAndroid Build Coastguard Worker #endif 183*f80ad8b4SAndroid Build Coastguard Worker 184*f80ad8b4SAndroid Build Coastguard Worker 185*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_LOG data structure. */ 186*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_log { 187*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 188*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 189*f80ad8b4SAndroid Build Coastguard Worker union { 190*f80ad8b4SAndroid Build Coastguard Worker struct { 191*f80ad8b4SAndroid Build Coastguard Worker /** 192*f80ad8b4SAndroid Build Coastguard Worker * The log message, this may be zero terminated. If it 193*f80ad8b4SAndroid Build Coastguard Worker * is not zero terminated then the length is determined 194*f80ad8b4SAndroid Build Coastguard Worker * from the input size. 195*f80ad8b4SAndroid Build Coastguard Worker */ 196*f80ad8b4SAndroid Build Coastguard Worker char msg[1]; 197*f80ad8b4SAndroid Build Coastguard Worker } in; 198*f80ad8b4SAndroid Build Coastguard Worker } u; 199*f80ad8b4SAndroid Build Coastguard Worker }; 200*f80ad8b4SAndroid Build Coastguard Worker 201*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_LOG(s) _IO('V', 9) 202*f80ad8b4SAndroid Build Coastguard Worker 203*f80ad8b4SAndroid Build Coastguard Worker 204*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_WAIT_FOR_EVENTS data structure. */ 205*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_wait_for_events { 206*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 207*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 208*f80ad8b4SAndroid Build Coastguard Worker union { 209*f80ad8b4SAndroid Build Coastguard Worker struct { 210*f80ad8b4SAndroid Build Coastguard Worker /** Timeout in milliseconds. */ 211*f80ad8b4SAndroid Build Coastguard Worker __u32 timeout_ms; 212*f80ad8b4SAndroid Build Coastguard Worker /** Events to wait for. */ 213*f80ad8b4SAndroid Build Coastguard Worker __u32 events; 214*f80ad8b4SAndroid Build Coastguard Worker } in; 215*f80ad8b4SAndroid Build Coastguard Worker struct { 216*f80ad8b4SAndroid Build Coastguard Worker /** Events that occurred. */ 217*f80ad8b4SAndroid Build Coastguard Worker __u32 events; 218*f80ad8b4SAndroid Build Coastguard Worker } out; 219*f80ad8b4SAndroid Build Coastguard Worker } u; 220*f80ad8b4SAndroid Build Coastguard Worker }; 221*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_wait_for_events, 24 + 8); 222*f80ad8b4SAndroid Build Coastguard Worker 223*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_WAIT_FOR_EVENTS \ 224*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 10, struct vbg_ioctl_wait_for_events) 225*f80ad8b4SAndroid Build Coastguard Worker 226*f80ad8b4SAndroid Build Coastguard Worker 227*f80ad8b4SAndroid Build Coastguard Worker /* 228*f80ad8b4SAndroid Build Coastguard Worker * IOCTL to VBoxGuest to interrupt (cancel) any pending 229*f80ad8b4SAndroid Build Coastguard Worker * VBG_IOCTL_WAIT_FOR_EVENTS and return. 230*f80ad8b4SAndroid Build Coastguard Worker * 231*f80ad8b4SAndroid Build Coastguard Worker * Handled inside the vboxguest driver and not seen by the host at all. 232*f80ad8b4SAndroid Build Coastguard Worker * After calling this, VBG_IOCTL_WAIT_FOR_EVENTS should no longer be called in 233*f80ad8b4SAndroid Build Coastguard Worker * the same session. Any VBOXGUEST_IOCTL_WAITEVENT calls in the same session 234*f80ad8b4SAndroid Build Coastguard Worker * done after calling this will directly exit with -EINTR. 235*f80ad8b4SAndroid Build Coastguard Worker */ 236*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS \ 237*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 11, struct vbg_ioctl_hdr) 238*f80ad8b4SAndroid Build Coastguard Worker 239*f80ad8b4SAndroid Build Coastguard Worker 240*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_CHANGE_FILTER_MASK data structure. */ 241*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_change_filter { 242*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 243*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 244*f80ad8b4SAndroid Build Coastguard Worker union { 245*f80ad8b4SAndroid Build Coastguard Worker struct { 246*f80ad8b4SAndroid Build Coastguard Worker /** Flags to set. */ 247*f80ad8b4SAndroid Build Coastguard Worker __u32 or_mask; 248*f80ad8b4SAndroid Build Coastguard Worker /** Flags to remove. */ 249*f80ad8b4SAndroid Build Coastguard Worker __u32 not_mask; 250*f80ad8b4SAndroid Build Coastguard Worker } in; 251*f80ad8b4SAndroid Build Coastguard Worker } u; 252*f80ad8b4SAndroid Build Coastguard Worker }; 253*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_change_filter, 24 + 8); 254*f80ad8b4SAndroid Build Coastguard Worker 255*f80ad8b4SAndroid Build Coastguard Worker /* IOCTL to VBoxGuest to control the event filter mask. */ 256*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_CHANGE_FILTER_MASK \ 257*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 12, struct vbg_ioctl_change_filter) 258*f80ad8b4SAndroid Build Coastguard Worker 259*f80ad8b4SAndroid Build Coastguard Worker 260*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES data structure. */ 261*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_acquire_guest_caps { 262*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 263*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 264*f80ad8b4SAndroid Build Coastguard Worker union { 265*f80ad8b4SAndroid Build Coastguard Worker struct { 266*f80ad8b4SAndroid Build Coastguard Worker /** Flags (VBGL_IOC_AGC_FLAGS_XXX). */ 267*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 268*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */ 269*f80ad8b4SAndroid Build Coastguard Worker __u32 or_mask; 270*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */ 271*f80ad8b4SAndroid Build Coastguard Worker __u32 not_mask; 272*f80ad8b4SAndroid Build Coastguard Worker } in; 273*f80ad8b4SAndroid Build Coastguard Worker } u; 274*f80ad8b4SAndroid Build Coastguard Worker }; 275*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_acquire_guest_caps, 24 + 12); 276*f80ad8b4SAndroid Build Coastguard Worker 277*f80ad8b4SAndroid Build Coastguard Worker #define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE 0x00000001 278*f80ad8b4SAndroid Build Coastguard Worker #define VBGL_IOC_AGC_FLAGS_VALID_MASK 0x00000001 279*f80ad8b4SAndroid Build Coastguard Worker 280*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES \ 281*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 13, struct vbg_ioctl_acquire_guest_caps) 282*f80ad8b4SAndroid Build Coastguard Worker 283*f80ad8b4SAndroid Build Coastguard Worker 284*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_CHANGE_GUEST_CAPABILITIES data structure. */ 285*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_set_guest_caps { 286*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 287*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 288*f80ad8b4SAndroid Build Coastguard Worker union { 289*f80ad8b4SAndroid Build Coastguard Worker struct { 290*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */ 291*f80ad8b4SAndroid Build Coastguard Worker __u32 or_mask; 292*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */ 293*f80ad8b4SAndroid Build Coastguard Worker __u32 not_mask; 294*f80ad8b4SAndroid Build Coastguard Worker } in; 295*f80ad8b4SAndroid Build Coastguard Worker struct { 296*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities held by the session after the call. */ 297*f80ad8b4SAndroid Build Coastguard Worker __u32 session_caps; 298*f80ad8b4SAndroid Build Coastguard Worker /** Capabilities for all the sessions after the call. */ 299*f80ad8b4SAndroid Build Coastguard Worker __u32 global_caps; 300*f80ad8b4SAndroid Build Coastguard Worker } out; 301*f80ad8b4SAndroid Build Coastguard Worker } u; 302*f80ad8b4SAndroid Build Coastguard Worker }; 303*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_set_guest_caps, 24 + 8); 304*f80ad8b4SAndroid Build Coastguard Worker 305*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_CHANGE_GUEST_CAPABILITIES \ 306*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 14, struct vbg_ioctl_set_guest_caps) 307*f80ad8b4SAndroid Build Coastguard Worker 308*f80ad8b4SAndroid Build Coastguard Worker 309*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_CHECK_BALLOON data structure. */ 310*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_check_balloon { 311*f80ad8b4SAndroid Build Coastguard Worker /** The header. */ 312*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 313*f80ad8b4SAndroid Build Coastguard Worker union { 314*f80ad8b4SAndroid Build Coastguard Worker struct { 315*f80ad8b4SAndroid Build Coastguard Worker /** The size of the balloon in chunks of 1MB. */ 316*f80ad8b4SAndroid Build Coastguard Worker __u32 balloon_chunks; 317*f80ad8b4SAndroid Build Coastguard Worker /** 318*f80ad8b4SAndroid Build Coastguard Worker * false = handled in R0, no further action required. 319*f80ad8b4SAndroid Build Coastguard Worker * true = allocate balloon memory in R3. 320*f80ad8b4SAndroid Build Coastguard Worker */ 321*f80ad8b4SAndroid Build Coastguard Worker __u8 handle_in_r3; 322*f80ad8b4SAndroid Build Coastguard Worker /** Explicit padding, MBZ. */ 323*f80ad8b4SAndroid Build Coastguard Worker __u8 padding[3]; 324*f80ad8b4SAndroid Build Coastguard Worker } out; 325*f80ad8b4SAndroid Build Coastguard Worker } u; 326*f80ad8b4SAndroid Build Coastguard Worker }; 327*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_check_balloon, 24 + 8); 328*f80ad8b4SAndroid Build Coastguard Worker 329*f80ad8b4SAndroid Build Coastguard Worker /* 330*f80ad8b4SAndroid Build Coastguard Worker * IOCTL to check memory ballooning. 331*f80ad8b4SAndroid Build Coastguard Worker * 332*f80ad8b4SAndroid Build Coastguard Worker * The guest kernel module will ask the host for the current size of the 333*f80ad8b4SAndroid Build Coastguard Worker * balloon and adjust the size. Or it will set handle_in_r3 = true and R3 is 334*f80ad8b4SAndroid Build Coastguard Worker * responsible for allocating memory and calling VBG_IOCTL_CHANGE_BALLOON. 335*f80ad8b4SAndroid Build Coastguard Worker */ 336*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_CHECK_BALLOON \ 337*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 17, struct vbg_ioctl_check_balloon) 338*f80ad8b4SAndroid Build Coastguard Worker 339*f80ad8b4SAndroid Build Coastguard Worker 340*f80ad8b4SAndroid Build Coastguard Worker /** VBG_IOCTL_WRITE_CORE_DUMP data structure. */ 341*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_write_coredump { 342*f80ad8b4SAndroid Build Coastguard Worker struct vbg_ioctl_hdr hdr; 343*f80ad8b4SAndroid Build Coastguard Worker union { 344*f80ad8b4SAndroid Build Coastguard Worker struct { 345*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; /** Flags (reserved, MBZ). */ 346*f80ad8b4SAndroid Build Coastguard Worker } in; 347*f80ad8b4SAndroid Build Coastguard Worker } u; 348*f80ad8b4SAndroid Build Coastguard Worker }; 349*f80ad8b4SAndroid Build Coastguard Worker VMMDEV_ASSERT_SIZE(vbg_ioctl_write_coredump, 24 + 4); 350*f80ad8b4SAndroid Build Coastguard Worker 351*f80ad8b4SAndroid Build Coastguard Worker #define VBG_IOCTL_WRITE_CORE_DUMP \ 352*f80ad8b4SAndroid Build Coastguard Worker _IOWR('V', 19, struct vbg_ioctl_write_coredump) 353*f80ad8b4SAndroid Build Coastguard Worker 354*f80ad8b4SAndroid Build Coastguard Worker #endif 355