-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
virt: Add vboxguest driver for Virtual Box Guest integration UAPI
This commit adds the headers describing the ioctl API for the /dev/vboxguest device used by the Virtual Box Guest Additions in Virtual Box virtual machines. The driver providing the /dev/vboxguest device will allow Virtual Box Guest Additions features such as copy-and-paste, seamless mode and OpenGL pass-through. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- Loading branch information
Hans de Goede
authored and
Greg Kroah-Hartman
committed
Dec 18, 2017
1 parent
12eaa7a
commit f6ddd09
Showing
4 changed files
with
714 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
/* SPDX-License-Identifier: MIT */ | ||
/* Copyright (C) 2017 Oracle Corporation */ | ||
|
||
#ifndef __UAPI_VBOX_ERR_H__ | ||
#define __UAPI_VBOX_ERR_H__ | ||
|
||
#define VINF_SUCCESS 0 | ||
#define VERR_GENERAL_FAILURE (-1) | ||
#define VERR_INVALID_PARAMETER (-2) | ||
#define VERR_INVALID_MAGIC (-3) | ||
#define VERR_INVALID_HANDLE (-4) | ||
#define VERR_LOCK_FAILED (-5) | ||
#define VERR_INVALID_POINTER (-6) | ||
#define VERR_IDT_FAILED (-7) | ||
#define VERR_NO_MEMORY (-8) | ||
#define VERR_ALREADY_LOADED (-9) | ||
#define VERR_PERMISSION_DENIED (-10) | ||
#define VERR_VERSION_MISMATCH (-11) | ||
#define VERR_NOT_IMPLEMENTED (-12) | ||
#define VERR_INVALID_FLAGS (-13) | ||
|
||
#define VERR_NOT_EQUAL (-18) | ||
#define VERR_NOT_SYMLINK (-19) | ||
#define VERR_NO_TMP_MEMORY (-20) | ||
#define VERR_INVALID_FMODE (-21) | ||
#define VERR_WRONG_ORDER (-22) | ||
#define VERR_NO_TLS_FOR_SELF (-23) | ||
#define VERR_FAILED_TO_SET_SELF_TLS (-24) | ||
#define VERR_NO_CONT_MEMORY (-26) | ||
#define VERR_NO_PAGE_MEMORY (-27) | ||
#define VERR_THREAD_IS_DEAD (-29) | ||
#define VERR_THREAD_NOT_WAITABLE (-30) | ||
#define VERR_PAGE_TABLE_NOT_PRESENT (-31) | ||
#define VERR_INVALID_CONTEXT (-32) | ||
#define VERR_TIMER_BUSY (-33) | ||
#define VERR_ADDRESS_CONFLICT (-34) | ||
#define VERR_UNRESOLVED_ERROR (-35) | ||
#define VERR_INVALID_FUNCTION (-36) | ||
#define VERR_NOT_SUPPORTED (-37) | ||
#define VERR_ACCESS_DENIED (-38) | ||
#define VERR_INTERRUPTED (-39) | ||
#define VERR_TIMEOUT (-40) | ||
#define VERR_BUFFER_OVERFLOW (-41) | ||
#define VERR_TOO_MUCH_DATA (-42) | ||
#define VERR_MAX_THRDS_REACHED (-43) | ||
#define VERR_MAX_PROCS_REACHED (-44) | ||
#define VERR_SIGNAL_REFUSED (-45) | ||
#define VERR_SIGNAL_PENDING (-46) | ||
#define VERR_SIGNAL_INVALID (-47) | ||
#define VERR_STATE_CHANGED (-48) | ||
#define VERR_INVALID_UUID_FORMAT (-49) | ||
#define VERR_PROCESS_NOT_FOUND (-50) | ||
#define VERR_PROCESS_RUNNING (-51) | ||
#define VERR_TRY_AGAIN (-52) | ||
#define VERR_PARSE_ERROR (-53) | ||
#define VERR_OUT_OF_RANGE (-54) | ||
#define VERR_NUMBER_TOO_BIG (-55) | ||
#define VERR_NO_DIGITS (-56) | ||
#define VERR_NEGATIVE_UNSIGNED (-57) | ||
#define VERR_NO_TRANSLATION (-58) | ||
|
||
#define VERR_NOT_FOUND (-78) | ||
#define VERR_INVALID_STATE (-79) | ||
#define VERR_OUT_OF_RESOURCES (-80) | ||
|
||
#define VERR_FILE_NOT_FOUND (-102) | ||
#define VERR_PATH_NOT_FOUND (-103) | ||
#define VERR_INVALID_NAME (-104) | ||
#define VERR_ALREADY_EXISTS (-105) | ||
#define VERR_TOO_MANY_OPEN_FILES (-106) | ||
#define VERR_SEEK (-107) | ||
#define VERR_NEGATIVE_SEEK (-108) | ||
#define VERR_SEEK_ON_DEVICE (-109) | ||
#define VERR_EOF (-110) | ||
#define VERR_READ_ERROR (-111) | ||
#define VERR_WRITE_ERROR (-112) | ||
#define VERR_WRITE_PROTECT (-113) | ||
#define VERR_SHARING_VIOLATION (-114) | ||
#define VERR_FILE_LOCK_FAILED (-115) | ||
#define VERR_FILE_LOCK_VIOLATION (-116) | ||
#define VERR_CANT_CREATE (-117) | ||
#define VERR_CANT_DELETE_DIRECTORY (-118) | ||
#define VERR_NOT_SAME_DEVICE (-119) | ||
#define VERR_FILENAME_TOO_LONG (-120) | ||
#define VERR_MEDIA_NOT_PRESENT (-121) | ||
#define VERR_MEDIA_NOT_RECOGNIZED (-122) | ||
#define VERR_FILE_NOT_LOCKED (-123) | ||
#define VERR_FILE_LOCK_LOST (-124) | ||
#define VERR_DIR_NOT_EMPTY (-125) | ||
#define VERR_NOT_A_DIRECTORY (-126) | ||
#define VERR_IS_A_DIRECTORY (-127) | ||
#define VERR_FILE_TOO_BIG (-128) | ||
|
||
#define VERR_NET_IO_ERROR (-400) | ||
#define VERR_NET_OUT_OF_RESOURCES (-401) | ||
#define VERR_NET_HOST_NOT_FOUND (-402) | ||
#define VERR_NET_PATH_NOT_FOUND (-403) | ||
#define VERR_NET_PRINT_ERROR (-404) | ||
#define VERR_NET_NO_NETWORK (-405) | ||
#define VERR_NET_NOT_UNIQUE_NAME (-406) | ||
|
||
#define VERR_NET_IN_PROGRESS (-436) | ||
#define VERR_NET_ALREADY_IN_PROGRESS (-437) | ||
#define VERR_NET_NOT_SOCKET (-438) | ||
#define VERR_NET_DEST_ADDRESS_REQUIRED (-439) | ||
#define VERR_NET_MSG_SIZE (-440) | ||
#define VERR_NET_PROTOCOL_TYPE (-441) | ||
#define VERR_NET_PROTOCOL_NOT_AVAILABLE (-442) | ||
#define VERR_NET_PROTOCOL_NOT_SUPPORTED (-443) | ||
#define VERR_NET_SOCKET_TYPE_NOT_SUPPORTED (-444) | ||
#define VERR_NET_OPERATION_NOT_SUPPORTED (-445) | ||
#define VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED (-446) | ||
#define VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED (-447) | ||
#define VERR_NET_ADDRESS_IN_USE (-448) | ||
#define VERR_NET_ADDRESS_NOT_AVAILABLE (-449) | ||
#define VERR_NET_DOWN (-450) | ||
#define VERR_NET_UNREACHABLE (-451) | ||
#define VERR_NET_CONNECTION_RESET (-452) | ||
#define VERR_NET_CONNECTION_ABORTED (-453) | ||
#define VERR_NET_CONNECTION_RESET_BY_PEER (-454) | ||
#define VERR_NET_NO_BUFFER_SPACE (-455) | ||
#define VERR_NET_ALREADY_CONNECTED (-456) | ||
#define VERR_NET_NOT_CONNECTED (-457) | ||
#define VERR_NET_SHUTDOWN (-458) | ||
#define VERR_NET_TOO_MANY_REFERENCES (-459) | ||
#define VERR_NET_CONNECTION_TIMED_OUT (-460) | ||
#define VERR_NET_CONNECTION_REFUSED (-461) | ||
#define VERR_NET_HOST_DOWN (-464) | ||
#define VERR_NET_HOST_UNREACHABLE (-465) | ||
#define VERR_NET_PROTOCOL_ERROR (-466) | ||
#define VERR_NET_INCOMPLETE_TX_PACKET (-467) | ||
|
||
/* misc. unsorted codes */ | ||
#define VERR_RESOURCE_BUSY (-138) | ||
#define VERR_DISK_FULL (-152) | ||
#define VERR_TOO_MANY_SYMLINKS (-156) | ||
#define VERR_NO_MORE_FILES (-201) | ||
#define VERR_INTERNAL_ERROR (-225) | ||
#define VERR_INTERNAL_ERROR_2 (-226) | ||
#define VERR_INTERNAL_ERROR_3 (-227) | ||
#define VERR_INTERNAL_ERROR_4 (-228) | ||
#define VERR_DEV_IO_ERROR (-250) | ||
#define VERR_IO_BAD_LENGTH (-255) | ||
#define VERR_BROKEN_PIPE (-301) | ||
#define VERR_NO_DATA (-304) | ||
#define VERR_SEM_DESTROYED (-363) | ||
#define VERR_DEADLOCK (-365) | ||
#define VERR_BAD_EXE_FORMAT (-608) | ||
#define VINF_HGCM_ASYNC_EXECUTE (2903) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,226 @@ | ||
/* SPDX-License-Identifier: (GPL-2.0 OR CDDL-1.0) */ | ||
/* | ||
* Virtual Device for Guest <-> VMM/Host communication, type definitions | ||
* which are also used for the vboxguest ioctl interface / by vboxsf | ||
* | ||
* Copyright (C) 2006-2016 Oracle Corporation | ||
*/ | ||
|
||
#ifndef __UAPI_VBOX_VMMDEV_TYPES_H__ | ||
#define __UAPI_VBOX_VMMDEV_TYPES_H__ | ||
|
||
#include <asm/bitsperlong.h> | ||
#include <linux/types.h> | ||
|
||
/* | ||
* We cannot use linux' compiletime_assert here because it expects to be used | ||
* inside a function only. Use a typedef to a char array with a negative size. | ||
*/ | ||
#define VMMDEV_ASSERT_SIZE(type, size) \ | ||
typedef char type ## _asrt_size[1 - 2*!!(sizeof(struct type) != (size))] | ||
|
||
/** enum vmmdev_request_type - VMMDev request types. */ | ||
enum vmmdev_request_type { | ||
VMMDEVREQ_INVALID_REQUEST = 0, | ||
VMMDEVREQ_GET_MOUSE_STATUS = 1, | ||
VMMDEVREQ_SET_MOUSE_STATUS = 2, | ||
VMMDEVREQ_SET_POINTER_SHAPE = 3, | ||
VMMDEVREQ_GET_HOST_VERSION = 4, | ||
VMMDEVREQ_IDLE = 5, | ||
VMMDEVREQ_GET_HOST_TIME = 10, | ||
VMMDEVREQ_GET_HYPERVISOR_INFO = 20, | ||
VMMDEVREQ_SET_HYPERVISOR_INFO = 21, | ||
VMMDEVREQ_REGISTER_PATCH_MEMORY = 22, /* since version 3.0.6 */ | ||
VMMDEVREQ_DEREGISTER_PATCH_MEMORY = 23, /* since version 3.0.6 */ | ||
VMMDEVREQ_SET_POWER_STATUS = 30, | ||
VMMDEVREQ_ACKNOWLEDGE_EVENTS = 41, | ||
VMMDEVREQ_CTL_GUEST_FILTER_MASK = 42, | ||
VMMDEVREQ_REPORT_GUEST_INFO = 50, | ||
VMMDEVREQ_REPORT_GUEST_INFO2 = 58, /* since version 3.2.0 */ | ||
VMMDEVREQ_REPORT_GUEST_STATUS = 59, /* since version 3.2.8 */ | ||
VMMDEVREQ_REPORT_GUEST_USER_STATE = 74, /* since version 4.3 */ | ||
/* Retrieve a display resize request sent by the host, deprecated. */ | ||
VMMDEVREQ_GET_DISPLAY_CHANGE_REQ = 51, | ||
VMMDEVREQ_VIDEMODE_SUPPORTED = 52, | ||
VMMDEVREQ_GET_HEIGHT_REDUCTION = 53, | ||
/** | ||
* @VMMDEVREQ_GET_DISPLAY_CHANGE_REQ2: | ||
* Retrieve a display resize request sent by the host. | ||
* | ||
* Queries a display resize request sent from the host. If the | ||
* event_ack member is sent to true and there is an unqueried request | ||
* available for one of the virtual display then that request will | ||
* be returned. If several displays have unqueried requests the lowest | ||
* numbered display will be chosen first. Only the most recent unseen | ||
* request for each display is remembered. | ||
* If event_ack is set to false, the last host request queried with | ||
* event_ack set is resent, or failing that the most recent received | ||
* from the host. If no host request was ever received then all zeros | ||
* are returned. | ||
*/ | ||
VMMDEVREQ_GET_DISPLAY_CHANGE_REQ2 = 54, | ||
VMMDEVREQ_REPORT_GUEST_CAPABILITIES = 55, | ||
VMMDEVREQ_SET_GUEST_CAPABILITIES = 56, | ||
VMMDEVREQ_VIDEMODE_SUPPORTED2 = 57, /* since version 3.2.0 */ | ||
VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX = 80, /* since version 4.2.4 */ | ||
VMMDEVREQ_HGCM_CONNECT = 60, | ||
VMMDEVREQ_HGCM_DISCONNECT = 61, | ||
VMMDEVREQ_HGCM_CALL32 = 62, | ||
VMMDEVREQ_HGCM_CALL64 = 63, | ||
VMMDEVREQ_HGCM_CANCEL = 64, | ||
VMMDEVREQ_HGCM_CANCEL2 = 65, | ||
VMMDEVREQ_VIDEO_ACCEL_ENABLE = 70, | ||
VMMDEVREQ_VIDEO_ACCEL_FLUSH = 71, | ||
VMMDEVREQ_VIDEO_SET_VISIBLE_REGION = 72, | ||
VMMDEVREQ_GET_SEAMLESS_CHANGE_REQ = 73, | ||
VMMDEVREQ_QUERY_CREDENTIALS = 100, | ||
VMMDEVREQ_REPORT_CREDENTIALS_JUDGEMENT = 101, | ||
VMMDEVREQ_REPORT_GUEST_STATS = 110, | ||
VMMDEVREQ_GET_MEMBALLOON_CHANGE_REQ = 111, | ||
VMMDEVREQ_GET_STATISTICS_CHANGE_REQ = 112, | ||
VMMDEVREQ_CHANGE_MEMBALLOON = 113, | ||
VMMDEVREQ_GET_VRDPCHANGE_REQ = 150, | ||
VMMDEVREQ_LOG_STRING = 200, | ||
VMMDEVREQ_GET_CPU_HOTPLUG_REQ = 210, | ||
VMMDEVREQ_SET_CPU_HOTPLUG_STATUS = 211, | ||
VMMDEVREQ_REGISTER_SHARED_MODULE = 212, | ||
VMMDEVREQ_UNREGISTER_SHARED_MODULE = 213, | ||
VMMDEVREQ_CHECK_SHARED_MODULES = 214, | ||
VMMDEVREQ_GET_PAGE_SHARING_STATUS = 215, | ||
VMMDEVREQ_DEBUG_IS_PAGE_SHARED = 216, | ||
VMMDEVREQ_GET_SESSION_ID = 217, /* since version 3.2.8 */ | ||
VMMDEVREQ_WRITE_COREDUMP = 218, | ||
VMMDEVREQ_GUEST_HEARTBEAT = 219, | ||
VMMDEVREQ_HEARTBEAT_CONFIGURE = 220, | ||
/* Ensure the enum is a 32 bit data-type */ | ||
VMMDEVREQ_SIZEHACK = 0x7fffffff | ||
}; | ||
|
||
#if __BITS_PER_LONG == 64 | ||
#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL64 | ||
#else | ||
#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL32 | ||
#endif | ||
|
||
/** HGCM service location types. */ | ||
enum vmmdev_hgcm_service_location_type { | ||
VMMDEV_HGCM_LOC_INVALID = 0, | ||
VMMDEV_HGCM_LOC_LOCALHOST = 1, | ||
VMMDEV_HGCM_LOC_LOCALHOST_EXISTING = 2, | ||
/* Ensure the enum is a 32 bit data-type */ | ||
VMMDEV_HGCM_LOC_SIZEHACK = 0x7fffffff | ||
}; | ||
|
||
/** HGCM host service location. */ | ||
struct vmmdev_hgcm_service_location_localhost { | ||
/** Service name */ | ||
char service_name[128]; | ||
}; | ||
VMMDEV_ASSERT_SIZE(vmmdev_hgcm_service_location_localhost, 128); | ||
|
||
/** HGCM service location. */ | ||
struct vmmdev_hgcm_service_location { | ||
/** Type of the location. */ | ||
enum vmmdev_hgcm_service_location_type type; | ||
|
||
union { | ||
struct vmmdev_hgcm_service_location_localhost localhost; | ||
} u; | ||
}; | ||
VMMDEV_ASSERT_SIZE(vmmdev_hgcm_service_location, 128 + 4); | ||
|
||
/** HGCM function parameter type. */ | ||
enum vmmdev_hgcm_function_parameter_type { | ||
VMMDEV_HGCM_PARM_TYPE_INVALID = 0, | ||
VMMDEV_HGCM_PARM_TYPE_32BIT = 1, | ||
VMMDEV_HGCM_PARM_TYPE_64BIT = 2, | ||
/** Deprecated Doesn't work, use PAGELIST. */ | ||
VMMDEV_HGCM_PARM_TYPE_PHYSADDR = 3, | ||
/** In and Out, user-memory */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR = 4, | ||
/** In, user-memory (read; host<-guest) */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR_IN = 5, | ||
/** Out, user-memory (write; host->guest) */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR_OUT = 6, | ||
/** In and Out, kernel-memory */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL = 7, | ||
/** In, kernel-memory (read; host<-guest) */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_IN = 8, | ||
/** Out, kernel-memory (write; host->guest) */ | ||
VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_OUT = 9, | ||
/** Physical addresses of locked pages for a buffer. */ | ||
VMMDEV_HGCM_PARM_TYPE_PAGELIST = 10, | ||
/* Ensure the enum is a 32 bit data-type */ | ||
VMMDEV_HGCM_PARM_TYPE_SIZEHACK = 0x7fffffff | ||
}; | ||
|
||
/** HGCM function parameter, 32-bit client. */ | ||
struct vmmdev_hgcm_function_parameter32 { | ||
enum vmmdev_hgcm_function_parameter_type type; | ||
union { | ||
__u32 value32; | ||
__u64 value64; | ||
struct { | ||
__u32 size; | ||
union { | ||
__u32 phys_addr; | ||
__u32 linear_addr; | ||
} u; | ||
} pointer; | ||
struct { | ||
/** Size of the buffer described by the page list. */ | ||
__u32 size; | ||
/** Relative to the request header. */ | ||
__u32 offset; | ||
} page_list; | ||
} u; | ||
} __packed; | ||
VMMDEV_ASSERT_SIZE(vmmdev_hgcm_function_parameter32, 4 + 8); | ||
|
||
/** HGCM function parameter, 64-bit client. */ | ||
struct vmmdev_hgcm_function_parameter64 { | ||
enum vmmdev_hgcm_function_parameter_type type; | ||
union { | ||
__u32 value32; | ||
__u64 value64; | ||
struct { | ||
__u32 size; | ||
union { | ||
__u64 phys_addr; | ||
__u64 linear_addr; | ||
} u; | ||
} __packed pointer; | ||
struct { | ||
/** Size of the buffer described by the page list. */ | ||
__u32 size; | ||
/** Relative to the request header. */ | ||
__u32 offset; | ||
} page_list; | ||
} __packed u; | ||
} __packed; | ||
VMMDEV_ASSERT_SIZE(vmmdev_hgcm_function_parameter64, 4 + 12); | ||
|
||
#if __BITS_PER_LONG == 64 | ||
#define vmmdev_hgcm_function_parameter vmmdev_hgcm_function_parameter64 | ||
#else | ||
#define vmmdev_hgcm_function_parameter vmmdev_hgcm_function_parameter32 | ||
#endif | ||
|
||
#define VMMDEV_HGCM_F_PARM_DIRECTION_NONE 0x00000000U | ||
#define VMMDEV_HGCM_F_PARM_DIRECTION_TO_HOST 0x00000001U | ||
#define VMMDEV_HGCM_F_PARM_DIRECTION_FROM_HOST 0x00000002U | ||
#define VMMDEV_HGCM_F_PARM_DIRECTION_BOTH 0x00000003U | ||
|
||
/** | ||
* struct vmmdev_hgcm_pagelist - VMMDEV_HGCM_PARM_TYPE_PAGELIST parameters | ||
* point to this structure to actually describe the buffer. | ||
*/ | ||
struct vmmdev_hgcm_pagelist { | ||
__u32 flags; /** VMMDEV_HGCM_F_PARM_*. */ | ||
__u16 offset_first_page; /** Data offset in the first page. */ | ||
__u16 page_count; /** Number of pages. */ | ||
__u64 pages[1]; /** Page addresses. */ | ||
}; | ||
VMMDEV_ASSERT_SIZE(vmmdev_hgcm_pagelist, 4 + 2 + 2 + 8); | ||
|
||
#endif |
Oops, something went wrong.