1579db9d4SHans de Goede /* SPDX-License-Identifier: (GPL-2.0 OR CDDL-1.0) */ 2579db9d4SHans de Goede /* 3579db9d4SHans de Goede * Virtual Device for Guest <-> VMM/Host communication interface 4579db9d4SHans de Goede * 5579db9d4SHans de Goede * Copyright (C) 2006-2016 Oracle Corporation 6579db9d4SHans de Goede */ 7579db9d4SHans de Goede 8579db9d4SHans de Goede #ifndef __VBOX_VMMDEV_H__ 9579db9d4SHans de Goede #define __VBOX_VMMDEV_H__ 10579db9d4SHans de Goede 11579db9d4SHans de Goede #include <asm/bitsperlong.h> 12579db9d4SHans de Goede #include <linux/sizes.h> 13579db9d4SHans de Goede #include <linux/types.h> 14579db9d4SHans de Goede #include <linux/vbox_vmmdev_types.h> 15579db9d4SHans de Goede 16579db9d4SHans de Goede /* Port for generic request interface (relative offset). */ 17579db9d4SHans de Goede #define VMMDEV_PORT_OFF_REQUEST 0 18579db9d4SHans de Goede 19579db9d4SHans de Goede /** Layout of VMMDEV RAM region that contains information for guest. */ 20579db9d4SHans de Goede struct vmmdev_memory { 21579db9d4SHans de Goede /** The size of this structure. */ 22579db9d4SHans de Goede u32 size; 23579db9d4SHans de Goede /** The structure version. (VMMDEV_MEMORY_VERSION) */ 24579db9d4SHans de Goede u32 version; 25579db9d4SHans de Goede 26579db9d4SHans de Goede union { 27579db9d4SHans de Goede struct { 28579db9d4SHans de Goede /** Flag telling that VMMDev has events pending. */ 29579db9d4SHans de Goede u8 have_events; 30579db9d4SHans de Goede /** Explicit padding, MBZ. */ 31579db9d4SHans de Goede u8 padding[3]; 32579db9d4SHans de Goede } V1_04; 33579db9d4SHans de Goede 34579db9d4SHans de Goede struct { 35579db9d4SHans de Goede /** Pending events flags, set by host. */ 36579db9d4SHans de Goede u32 host_events; 37579db9d4SHans de Goede /** Mask of events the guest wants, set by guest. */ 38579db9d4SHans de Goede u32 guest_event_mask; 39579db9d4SHans de Goede } V1_03; 40579db9d4SHans de Goede } V; 41579db9d4SHans de Goede 42579db9d4SHans de Goede /* struct vbva_memory, not used */ 43579db9d4SHans de Goede }; 44579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_memory, 8 + 8); 45579db9d4SHans de Goede 46579db9d4SHans de Goede /** Version of vmmdev_memory structure (vmmdev_memory::version). */ 47579db9d4SHans de Goede #define VMMDEV_MEMORY_VERSION (1) 48579db9d4SHans de Goede 49579db9d4SHans de Goede /* Host mouse capabilities has been changed. */ 50579db9d4SHans de Goede #define VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED BIT(0) 51579db9d4SHans de Goede /* HGCM event. */ 52579db9d4SHans de Goede #define VMMDEV_EVENT_HGCM BIT(1) 53579db9d4SHans de Goede /* A display change request has been issued. */ 54579db9d4SHans de Goede #define VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST BIT(2) 55579db9d4SHans de Goede /* Credentials are available for judgement. */ 56579db9d4SHans de Goede #define VMMDEV_EVENT_JUDGE_CREDENTIALS BIT(3) 57579db9d4SHans de Goede /* The guest has been restored. */ 58579db9d4SHans de Goede #define VMMDEV_EVENT_RESTORED BIT(4) 59579db9d4SHans de Goede /* Seamless mode state changed. */ 60579db9d4SHans de Goede #define VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST BIT(5) 61579db9d4SHans de Goede /* Memory balloon size changed. */ 62579db9d4SHans de Goede #define VMMDEV_EVENT_BALLOON_CHANGE_REQUEST BIT(6) 63579db9d4SHans de Goede /* Statistics interval changed. */ 64579db9d4SHans de Goede #define VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST BIT(7) 65579db9d4SHans de Goede /* VRDP status changed. */ 66579db9d4SHans de Goede #define VMMDEV_EVENT_VRDP BIT(8) 67579db9d4SHans de Goede /* New mouse position data available. */ 68579db9d4SHans de Goede #define VMMDEV_EVENT_MOUSE_POSITION_CHANGED BIT(9) 69579db9d4SHans de Goede /* CPU hotplug event occurred. */ 70579db9d4SHans de Goede #define VMMDEV_EVENT_CPU_HOTPLUG BIT(10) 71579db9d4SHans de Goede /* The mask of valid events, for sanity checking. */ 72579db9d4SHans de Goede #define VMMDEV_EVENT_VALID_EVENT_MASK 0x000007ffU 73579db9d4SHans de Goede 74579db9d4SHans de Goede /* 75579db9d4SHans de Goede * Additions are allowed to work only if additions_major == vmmdev_current && 76579db9d4SHans de Goede * additions_minor <= vmmdev_current. Additions version is reported to host 77579db9d4SHans de Goede * (VMMDev) by VMMDEVREQ_REPORT_GUEST_INFO. 78579db9d4SHans de Goede */ 79579db9d4SHans de Goede #define VMMDEV_VERSION 0x00010004 80579db9d4SHans de Goede #define VMMDEV_VERSION_MAJOR (VMMDEV_VERSION >> 16) 81579db9d4SHans de Goede #define VMMDEV_VERSION_MINOR (VMMDEV_VERSION & 0xffff) 82579db9d4SHans de Goede 83579db9d4SHans de Goede /* Maximum request packet size. */ 84579db9d4SHans de Goede #define VMMDEV_MAX_VMMDEVREQ_SIZE 1048576 85579db9d4SHans de Goede 86579db9d4SHans de Goede /* Version of vmmdev_request_header structure. */ 87579db9d4SHans de Goede #define VMMDEV_REQUEST_HEADER_VERSION 0x10001 88579db9d4SHans de Goede 89579db9d4SHans de Goede /** struct vmmdev_request_header - Generic VMMDev request header. */ 90579db9d4SHans de Goede struct vmmdev_request_header { 91579db9d4SHans de Goede /** IN: Size of the structure in bytes (including body). */ 92579db9d4SHans de Goede u32 size; 93579db9d4SHans de Goede /** IN: Version of the structure. */ 94579db9d4SHans de Goede u32 version; 95579db9d4SHans de Goede /** IN: Type of the request. */ 96579db9d4SHans de Goede enum vmmdev_request_type request_type; 97579db9d4SHans de Goede /** OUT: Return code. */ 98579db9d4SHans de Goede s32 rc; 99579db9d4SHans de Goede /** Reserved field no.1. MBZ. */ 100579db9d4SHans de Goede u32 reserved1; 1010532a1b0SHans de Goede /** IN: Requestor information (VMMDEV_REQUESTOR_*) */ 1020532a1b0SHans de Goede u32 requestor; 103579db9d4SHans de Goede }; 104579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_request_header, 24); 105579db9d4SHans de Goede 106579db9d4SHans de Goede /** 107579db9d4SHans de Goede * struct vmmdev_mouse_status - Mouse status request structure. 108579db9d4SHans de Goede * 109579db9d4SHans de Goede * Used by VMMDEVREQ_GET_MOUSE_STATUS and VMMDEVREQ_SET_MOUSE_STATUS. 110579db9d4SHans de Goede */ 111579db9d4SHans de Goede struct vmmdev_mouse_status { 112579db9d4SHans de Goede /** header */ 113579db9d4SHans de Goede struct vmmdev_request_header header; 114579db9d4SHans de Goede /** Mouse feature mask. See VMMDEV_MOUSE_*. */ 115579db9d4SHans de Goede u32 mouse_features; 116579db9d4SHans de Goede /** Mouse x position. */ 117579db9d4SHans de Goede s32 pointer_pos_x; 118579db9d4SHans de Goede /** Mouse y position. */ 119579db9d4SHans de Goede s32 pointer_pos_y; 120579db9d4SHans de Goede }; 121579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_mouse_status, 24 + 12); 122579db9d4SHans de Goede 123579db9d4SHans de Goede /* The guest can (== wants to) handle absolute coordinates. */ 124579db9d4SHans de Goede #define VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE BIT(0) 125579db9d4SHans de Goede /* 126579db9d4SHans de Goede * The host can (== wants to) send absolute coordinates. 127579db9d4SHans de Goede * (Input not captured.) 128579db9d4SHans de Goede */ 129579db9d4SHans de Goede #define VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE BIT(1) 130579db9d4SHans de Goede /* 131579db9d4SHans de Goede * The guest can *NOT* switch to software cursor and therefore depends on the 132579db9d4SHans de Goede * host cursor. 133579db9d4SHans de Goede * 134579db9d4SHans de Goede * When guest additions are installed and the host has promised to display the 135579db9d4SHans de Goede * cursor itself, the guest installs a hardware mouse driver. Don't ask the 136579db9d4SHans de Goede * guest to switch to a software cursor then. 137579db9d4SHans de Goede */ 138579db9d4SHans de Goede #define VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR BIT(2) 139579db9d4SHans de Goede /* The host does NOT provide support for drawing the cursor itself. */ 140579db9d4SHans de Goede #define VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER BIT(3) 141579db9d4SHans de Goede /* The guest can read VMMDev events to find out about pointer movement */ 142579db9d4SHans de Goede #define VMMDEV_MOUSE_NEW_PROTOCOL BIT(4) 143579db9d4SHans de Goede /* 144579db9d4SHans de Goede * If the guest changes the status of the VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR 145579db9d4SHans de Goede * bit, the host will honour this. 146579db9d4SHans de Goede */ 147579db9d4SHans de Goede #define VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR BIT(5) 148579db9d4SHans de Goede /* 149579db9d4SHans de Goede * The host supplies an absolute pointing device. The Guest Additions may 150579db9d4SHans de Goede * wish to use this to decide whether to install their own driver. 151579db9d4SHans de Goede */ 152579db9d4SHans de Goede #define VMMDEV_MOUSE_HOST_HAS_ABS_DEV BIT(6) 153579db9d4SHans de Goede 154579db9d4SHans de Goede /* The minimum value our pointing device can return. */ 155579db9d4SHans de Goede #define VMMDEV_MOUSE_RANGE_MIN 0 156579db9d4SHans de Goede /* The maximum value our pointing device can return. */ 157579db9d4SHans de Goede #define VMMDEV_MOUSE_RANGE_MAX 0xFFFF 158579db9d4SHans de Goede 159579db9d4SHans de Goede /** 160579db9d4SHans de Goede * struct vmmdev_host_version - VirtualBox host version request structure. 161579db9d4SHans de Goede * 162579db9d4SHans de Goede * VBG uses this to detect the precense of new features in the interface. 163579db9d4SHans de Goede */ 164579db9d4SHans de Goede struct vmmdev_host_version { 165579db9d4SHans de Goede /** Header. */ 166579db9d4SHans de Goede struct vmmdev_request_header header; 167579db9d4SHans de Goede /** Major version. */ 168579db9d4SHans de Goede u16 major; 169579db9d4SHans de Goede /** Minor version. */ 170579db9d4SHans de Goede u16 minor; 171579db9d4SHans de Goede /** Build number. */ 172579db9d4SHans de Goede u32 build; 173579db9d4SHans de Goede /** SVN revision. */ 174579db9d4SHans de Goede u32 revision; 175579db9d4SHans de Goede /** Feature mask. */ 176579db9d4SHans de Goede u32 features; 177579db9d4SHans de Goede }; 178579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_host_version, 24 + 16); 179579db9d4SHans de Goede 180579db9d4SHans de Goede /* Physical page lists are supported by HGCM. */ 181579db9d4SHans de Goede #define VMMDEV_HVF_HGCM_PHYS_PAGE_LIST BIT(0) 182579db9d4SHans de Goede 183579db9d4SHans de Goede /** 184579db9d4SHans de Goede * struct vmmdev_mask - Structure to set / clear bits in a mask used for 185579db9d4SHans de Goede * VMMDEVREQ_SET_GUEST_CAPABILITIES and VMMDEVREQ_CTL_GUEST_FILTER_MASK. 186579db9d4SHans de Goede */ 187579db9d4SHans de Goede struct vmmdev_mask { 188579db9d4SHans de Goede /** Header. */ 189579db9d4SHans de Goede struct vmmdev_request_header header; 190579db9d4SHans de Goede /** Mask of bits to be set. */ 191579db9d4SHans de Goede u32 or_mask; 192579db9d4SHans de Goede /** Mask of bits to be cleared. */ 193579db9d4SHans de Goede u32 not_mask; 194579db9d4SHans de Goede }; 195579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_mask, 24 + 8); 196579db9d4SHans de Goede 197579db9d4SHans de Goede /* The guest supports seamless display rendering. */ 198579db9d4SHans de Goede #define VMMDEV_GUEST_SUPPORTS_SEAMLESS BIT(0) 199579db9d4SHans de Goede /* The guest supports mapping guest to host windows. */ 200579db9d4SHans de Goede #define VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING BIT(1) 201579db9d4SHans de Goede /* 202579db9d4SHans de Goede * The guest graphical additions are active. 203579db9d4SHans de Goede * Used for fast activation and deactivation of certain graphical operations 204579db9d4SHans de Goede * (e.g. resizing & seamless). The legacy VMMDEVREQ_REPORT_GUEST_CAPABILITIES 205579db9d4SHans de Goede * request sets this automatically, but VMMDEVREQ_SET_GUEST_CAPABILITIES does 206579db9d4SHans de Goede * not. 207579db9d4SHans de Goede */ 208579db9d4SHans de Goede #define VMMDEV_GUEST_SUPPORTS_GRAPHICS BIT(2) 209*59d1d2e8SHans de Goede /* The mask of valid capabilities, for sanity checking. */ 210*59d1d2e8SHans de Goede #define VMMDEV_GUEST_CAPABILITIES_MASK 0x00000007U 211579db9d4SHans de Goede 212579db9d4SHans de Goede /** struct vmmdev_hypervisorinfo - Hypervisor info structure. */ 213579db9d4SHans de Goede struct vmmdev_hypervisorinfo { 214579db9d4SHans de Goede /** Header. */ 215579db9d4SHans de Goede struct vmmdev_request_header header; 216579db9d4SHans de Goede /** 217579db9d4SHans de Goede * Guest virtual address of proposed hypervisor start. 218579db9d4SHans de Goede * Not used by VMMDEVREQ_GET_HYPERVISOR_INFO. 219579db9d4SHans de Goede */ 220579db9d4SHans de Goede u32 hypervisor_start; 221579db9d4SHans de Goede /** Hypervisor size in bytes. */ 222579db9d4SHans de Goede u32 hypervisor_size; 223579db9d4SHans de Goede }; 224579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hypervisorinfo, 24 + 8); 225579db9d4SHans de Goede 226579db9d4SHans de Goede /** struct vmmdev_events - Pending events structure. */ 227579db9d4SHans de Goede struct vmmdev_events { 228579db9d4SHans de Goede /** Header. */ 229579db9d4SHans de Goede struct vmmdev_request_header header; 230579db9d4SHans de Goede /** OUT: Pending event mask. */ 231579db9d4SHans de Goede u32 events; 232579db9d4SHans de Goede }; 233579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_events, 24 + 4); 234579db9d4SHans de Goede 235579db9d4SHans de Goede #define VMMDEV_OSTYPE_LINUX26 0x53000 236579db9d4SHans de Goede #define VMMDEV_OSTYPE_X64 BIT(8) 237579db9d4SHans de Goede 238579db9d4SHans de Goede /** struct vmmdev_guestinfo - Guest information report. */ 239579db9d4SHans de Goede struct vmmdev_guest_info { 240579db9d4SHans de Goede /** Header. */ 241579db9d4SHans de Goede struct vmmdev_request_header header; 242579db9d4SHans de Goede /** 243579db9d4SHans de Goede * The VMMDev interface version expected by additions. 244579db9d4SHans de Goede * *Deprecated*, do not use anymore! Will be removed. 245579db9d4SHans de Goede */ 246579db9d4SHans de Goede u32 interface_version; 247579db9d4SHans de Goede /** Guest OS type. */ 248579db9d4SHans de Goede u32 os_type; 249579db9d4SHans de Goede }; 250579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_guest_info, 24 + 8); 251579db9d4SHans de Goede 2520532a1b0SHans de Goede #define VMMDEV_GUEST_INFO2_ADDITIONS_FEATURES_REQUESTOR_INFO BIT(0) 2530532a1b0SHans de Goede 254579db9d4SHans de Goede /** struct vmmdev_guestinfo2 - Guest information report, version 2. */ 255579db9d4SHans de Goede struct vmmdev_guest_info2 { 256579db9d4SHans de Goede /** Header. */ 257579db9d4SHans de Goede struct vmmdev_request_header header; 258579db9d4SHans de Goede /** Major version. */ 259579db9d4SHans de Goede u16 additions_major; 260579db9d4SHans de Goede /** Minor version. */ 261579db9d4SHans de Goede u16 additions_minor; 262579db9d4SHans de Goede /** Build number. */ 263579db9d4SHans de Goede u32 additions_build; 264579db9d4SHans de Goede /** SVN revision. */ 265579db9d4SHans de Goede u32 additions_revision; 2660532a1b0SHans de Goede /** Feature mask. */ 267579db9d4SHans de Goede u32 additions_features; 268579db9d4SHans de Goede /** 269579db9d4SHans de Goede * The intentional meaning of this field was: 270579db9d4SHans de Goede * Some additional information, for example 'Beta 1' or something like 271579db9d4SHans de Goede * that. 272579db9d4SHans de Goede * 273579db9d4SHans de Goede * The way it was implemented was implemented: VBG_VERSION_STRING. 274579db9d4SHans de Goede * 275579db9d4SHans de Goede * This means the first three members are duplicated in this field (if 276579db9d4SHans de Goede * the guest build config is sane). So, the user must check this and 277579db9d4SHans de Goede * chop it off before usage. There is, because of the Main code's blind 278579db9d4SHans de Goede * trust in the field's content, no way back. 279579db9d4SHans de Goede */ 280579db9d4SHans de Goede char name[128]; 281579db9d4SHans de Goede }; 282579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_guest_info2, 24 + 144); 283579db9d4SHans de Goede 284579db9d4SHans de Goede enum vmmdev_guest_facility_type { 285579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_UNKNOWN = 0, 286579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_VBOXGUEST_DRIVER = 20, 287579db9d4SHans de Goede /* VBoxGINA / VBoxCredProv / pam_vbox. */ 288579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_AUTO_LOGON = 90, 289579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_VBOX_SERVICE = 100, 290579db9d4SHans de Goede /* VBoxTray (Windows), VBoxClient (Linux, Unix). */ 291579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_VBOX_TRAY_CLIENT = 101, 292579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_SEAMLESS = 1000, 293579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_GRAPHICS = 1100, 294579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_ALL = 0x7ffffffe, 295579db9d4SHans de Goede /* Ensure the enum is a 32 bit data-type */ 296579db9d4SHans de Goede VBOXGUEST_FACILITY_TYPE_SIZEHACK = 0x7fffffff 297579db9d4SHans de Goede }; 298579db9d4SHans de Goede 299579db9d4SHans de Goede enum vmmdev_guest_facility_status { 300579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_INACTIVE = 0, 301579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_PAUSED = 1, 302579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_PRE_INIT = 20, 303579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_INIT = 30, 304579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_ACTIVE = 50, 305579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_TERMINATING = 100, 306579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_TERMINATED = 101, 307579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_FAILED = 800, 308579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_UNKNOWN = 999, 309579db9d4SHans de Goede /* Ensure the enum is a 32 bit data-type */ 310579db9d4SHans de Goede VBOXGUEST_FACILITY_STATUS_SIZEHACK = 0x7fffffff 311579db9d4SHans de Goede }; 312579db9d4SHans de Goede 313579db9d4SHans de Goede /** struct vmmdev_guest_status - Guest Additions status structure. */ 314579db9d4SHans de Goede struct vmmdev_guest_status { 315579db9d4SHans de Goede /** Header. */ 316579db9d4SHans de Goede struct vmmdev_request_header header; 317579db9d4SHans de Goede /** Facility the status is indicated for. */ 318579db9d4SHans de Goede enum vmmdev_guest_facility_type facility; 319579db9d4SHans de Goede /** Current guest status. */ 320579db9d4SHans de Goede enum vmmdev_guest_facility_status status; 321579db9d4SHans de Goede /** Flags, not used at the moment. */ 322579db9d4SHans de Goede u32 flags; 323579db9d4SHans de Goede }; 324579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_guest_status, 24 + 12); 325579db9d4SHans de Goede 326579db9d4SHans de Goede #define VMMDEV_MEMORY_BALLOON_CHUNK_SIZE (1048576) 327579db9d4SHans de Goede #define VMMDEV_MEMORY_BALLOON_CHUNK_PAGES (1048576 / 4096) 328579db9d4SHans de Goede 329579db9d4SHans de Goede /** struct vmmdev_memballoon_info - Memory-balloon info structure. */ 330579db9d4SHans de Goede struct vmmdev_memballoon_info { 331579db9d4SHans de Goede /** Header. */ 332579db9d4SHans de Goede struct vmmdev_request_header header; 333579db9d4SHans de Goede /** Balloon size in megabytes. */ 334579db9d4SHans de Goede u32 balloon_chunks; 335579db9d4SHans de Goede /** Guest ram size in megabytes. */ 336579db9d4SHans de Goede u32 phys_mem_chunks; 337579db9d4SHans de Goede /** 338579db9d4SHans de Goede * Setting this to VMMDEV_EVENT_BALLOON_CHANGE_REQUEST indicates that 339579db9d4SHans de Goede * the request is a response to that event. 340579db9d4SHans de Goede * (Don't confuse this with VMMDEVREQ_ACKNOWLEDGE_EVENTS.) 341579db9d4SHans de Goede */ 342579db9d4SHans de Goede u32 event_ack; 343579db9d4SHans de Goede }; 344579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_memballoon_info, 24 + 12); 345579db9d4SHans de Goede 346579db9d4SHans de Goede /** struct vmmdev_memballoon_change - Change the size of the balloon. */ 347579db9d4SHans de Goede struct vmmdev_memballoon_change { 348579db9d4SHans de Goede /** Header. */ 349579db9d4SHans de Goede struct vmmdev_request_header header; 350579db9d4SHans de Goede /** The number of pages in the array. */ 351579db9d4SHans de Goede u32 pages; 352579db9d4SHans de Goede /** true = inflate, false = deflate. */ 353579db9d4SHans de Goede u32 inflate; 354579db9d4SHans de Goede /** Physical address (u64) of each page. */ 355579db9d4SHans de Goede u64 phys_page[VMMDEV_MEMORY_BALLOON_CHUNK_PAGES]; 356579db9d4SHans de Goede }; 357579db9d4SHans de Goede 358579db9d4SHans de Goede /** struct vmmdev_write_core_dump - Write Core Dump request data. */ 359579db9d4SHans de Goede struct vmmdev_write_core_dump { 360579db9d4SHans de Goede /** Header. */ 361579db9d4SHans de Goede struct vmmdev_request_header header; 362579db9d4SHans de Goede /** Flags (reserved, MBZ). */ 363579db9d4SHans de Goede u32 flags; 364579db9d4SHans de Goede }; 365579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_write_core_dump, 24 + 4); 366579db9d4SHans de Goede 367579db9d4SHans de Goede /** struct vmmdev_heartbeat - Heart beat check state structure. */ 368579db9d4SHans de Goede struct vmmdev_heartbeat { 369579db9d4SHans de Goede /** Header. */ 370579db9d4SHans de Goede struct vmmdev_request_header header; 371579db9d4SHans de Goede /** OUT: Guest heartbeat interval in nanosec. */ 372579db9d4SHans de Goede u64 interval_ns; 373579db9d4SHans de Goede /** Heartbeat check flag. */ 374579db9d4SHans de Goede u8 enabled; 375579db9d4SHans de Goede /** Explicit padding, MBZ. */ 376579db9d4SHans de Goede u8 padding[3]; 377579db9d4SHans de Goede } __packed; 378579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_heartbeat, 24 + 12); 379579db9d4SHans de Goede 380579db9d4SHans de Goede #define VMMDEV_HGCM_REQ_DONE BIT(0) 381579db9d4SHans de Goede #define VMMDEV_HGCM_REQ_CANCELLED BIT(1) 382579db9d4SHans de Goede 383579db9d4SHans de Goede /** struct vmmdev_hgcmreq_header - vmmdev HGCM requests header. */ 384579db9d4SHans de Goede struct vmmdev_hgcmreq_header { 385579db9d4SHans de Goede /** Request header. */ 386579db9d4SHans de Goede struct vmmdev_request_header header; 387579db9d4SHans de Goede 388579db9d4SHans de Goede /** HGCM flags. */ 389579db9d4SHans de Goede u32 flags; 390579db9d4SHans de Goede 391579db9d4SHans de Goede /** Result code. */ 392579db9d4SHans de Goede s32 result; 393579db9d4SHans de Goede }; 394579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hgcmreq_header, 24 + 8); 395579db9d4SHans de Goede 396579db9d4SHans de Goede /** struct vmmdev_hgcm_connect - HGCM connect request structure. */ 397579db9d4SHans de Goede struct vmmdev_hgcm_connect { 398579db9d4SHans de Goede /** HGCM request header. */ 399579db9d4SHans de Goede struct vmmdev_hgcmreq_header header; 400579db9d4SHans de Goede 401579db9d4SHans de Goede /** IN: Description of service to connect to. */ 402579db9d4SHans de Goede struct vmmdev_hgcm_service_location loc; 403579db9d4SHans de Goede 404579db9d4SHans de Goede /** OUT: Client identifier assigned by local instance of HGCM. */ 405579db9d4SHans de Goede u32 client_id; 406579db9d4SHans de Goede }; 407579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hgcm_connect, 32 + 132 + 4); 408579db9d4SHans de Goede 409579db9d4SHans de Goede /** struct vmmdev_hgcm_disconnect - HGCM disconnect request structure. */ 410579db9d4SHans de Goede struct vmmdev_hgcm_disconnect { 411579db9d4SHans de Goede /** HGCM request header. */ 412579db9d4SHans de Goede struct vmmdev_hgcmreq_header header; 413579db9d4SHans de Goede 414579db9d4SHans de Goede /** IN: Client identifier. */ 415579db9d4SHans de Goede u32 client_id; 416579db9d4SHans de Goede }; 417579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hgcm_disconnect, 32 + 4); 418579db9d4SHans de Goede 419579db9d4SHans de Goede #define VMMDEV_HGCM_MAX_PARMS 32 420579db9d4SHans de Goede 421579db9d4SHans de Goede /** struct vmmdev_hgcm_call - HGCM call request structure. */ 422579db9d4SHans de Goede struct vmmdev_hgcm_call { 423579db9d4SHans de Goede /* request header */ 424579db9d4SHans de Goede struct vmmdev_hgcmreq_header header; 425579db9d4SHans de Goede 426579db9d4SHans de Goede /** IN: Client identifier. */ 427579db9d4SHans de Goede u32 client_id; 428579db9d4SHans de Goede /** IN: Service function number. */ 429579db9d4SHans de Goede u32 function; 430579db9d4SHans de Goede /** IN: Number of parameters. */ 431579db9d4SHans de Goede u32 parm_count; 432579db9d4SHans de Goede /** Parameters follow in form: HGCMFunctionParameter32|64 parms[X]; */ 433579db9d4SHans de Goede }; 434579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hgcm_call, 32 + 12); 435579db9d4SHans de Goede 436579db9d4SHans de Goede /** 437579db9d4SHans de Goede * struct vmmdev_hgcm_cancel2 - HGCM cancel request structure, version 2. 438579db9d4SHans de Goede * 439579db9d4SHans de Goede * After the request header.rc will be: 440579db9d4SHans de Goede * 441579db9d4SHans de Goede * VINF_SUCCESS when cancelled. 442579db9d4SHans de Goede * VERR_NOT_FOUND if the specified request cannot be found. 443579db9d4SHans de Goede * VERR_INVALID_PARAMETER if the address is invalid valid. 444579db9d4SHans de Goede */ 445579db9d4SHans de Goede struct vmmdev_hgcm_cancel2 { 446579db9d4SHans de Goede /** Header. */ 447579db9d4SHans de Goede struct vmmdev_request_header header; 448579db9d4SHans de Goede /** The physical address of the request to cancel. */ 449579db9d4SHans de Goede u32 phys_req_to_cancel; 450579db9d4SHans de Goede }; 451579db9d4SHans de Goede VMMDEV_ASSERT_SIZE(vmmdev_hgcm_cancel2, 24 + 4); 452579db9d4SHans de Goede 453579db9d4SHans de Goede #endif 454