/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef __UAPI_VBOX_VMMDEV_TYPES_H__
#define __UAPI_VBOX_VMMDEV_TYPES_H__
#include <asm/bitsperlong.h>
#include <linux/types.h>
#define VMMDEV_ASSERT_SIZE(type,size) typedef char type ##_asrt_size[1 - 2 * ! ! (sizeof(struct type) != (size))]
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,
  VMMDEVREQ_DEREGISTER_PATCH_MEMORY = 23,
  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,
  VMMDEVREQ_REPORT_GUEST_STATUS = 59,
  VMMDEVREQ_REPORT_GUEST_USER_STATE = 74,
  VMMDEVREQ_GET_DISPLAY_CHANGE_REQ = 51,
  VMMDEVREQ_VIDEMODE_SUPPORTED = 52,
  VMMDEVREQ_GET_HEIGHT_REDUCTION = 53,
  VMMDEVREQ_GET_DISPLAY_CHANGE_REQ2 = 54,
  VMMDEVREQ_REPORT_GUEST_CAPABILITIES = 55,
  VMMDEVREQ_SET_GUEST_CAPABILITIES = 56,
  VMMDEVREQ_VIDEMODE_SUPPORTED2 = 57,
  VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX = 80,
  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,
  VMMDEVREQ_WRITE_COREDUMP = 218,
  VMMDEVREQ_GUEST_HEARTBEAT = 219,
  VMMDEVREQ_HEARTBEAT_CONFIGURE = 220,
  VMMDEVREQ_SIZEHACK = 0x7fffffff
};
#if __BITS_PER_LONG == 64
#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL64
#else
#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL32
#endif
#define VMMDEV_REQUESTOR_USR_NOT_GIVEN 0x00000000
#define VMMDEV_REQUESTOR_USR_DRV 0x00000001
#define VMMDEV_REQUESTOR_USR_DRV_OTHER 0x00000002
#define VMMDEV_REQUESTOR_USR_ROOT 0x00000003
#define VMMDEV_REQUESTOR_USR_USER 0x00000006
#define VMMDEV_REQUESTOR_USR_MASK 0x00000007
#define VMMDEV_REQUESTOR_KERNEL 0x00000000
#define VMMDEV_REQUESTOR_USERMODE 0x00000008
#define VMMDEV_REQUESTOR_MODE_MASK 0x00000008
#define VMMDEV_REQUESTOR_CON_DONT_KNOW 0x00000000
#define VMMDEV_REQUESTOR_CON_NO 0x00000010
#define VMMDEV_REQUESTOR_CON_YES 0x00000020
#define VMMDEV_REQUESTOR_CON_MASK 0x00000030
#define VMMDEV_REQUESTOR_GRP_VBOX 0x00000080
#define VMMDEV_REQUESTOR_TRUST_NOT_GIVEN 0x00000000
#define VMMDEV_REQUESTOR_TRUST_UNTRUSTED 0x00001000
#define VMMDEV_REQUESTOR_TRUST_LOW 0x00002000
#define VMMDEV_REQUESTOR_TRUST_MEDIUM 0x00003000
#define VMMDEV_REQUESTOR_TRUST_MEDIUM_PLUS 0x00004000
#define VMMDEV_REQUESTOR_TRUST_HIGH 0x00005000
#define VMMDEV_REQUESTOR_TRUST_SYSTEM 0x00006000
#define VMMDEV_REQUESTOR_TRUST_PROTECTED 0x00007000
#define VMMDEV_REQUESTOR_TRUST_MASK 0x00007000
#define VMMDEV_REQUESTOR_USER_DEVICE 0x00008000
enum vmmdev_hgcm_service_location_type {
  VMMDEV_HGCM_LOC_INVALID = 0,
  VMMDEV_HGCM_LOC_LOCALHOST = 1,
  VMMDEV_HGCM_LOC_LOCALHOST_EXISTING = 2,
  VMMDEV_HGCM_LOC_SIZEHACK = 0x7fffffff
};
struct vmmdev_hgcm_service_location_localhost {
  char service_name[128];
};
struct vmmdev_hgcm_service_location {
  enum vmmdev_hgcm_service_location_type type;
  union {
    struct vmmdev_hgcm_service_location_localhost localhost;
  } u;
};
enum vmmdev_hgcm_function_parameter_type {
  VMMDEV_HGCM_PARM_TYPE_INVALID = 0,
  VMMDEV_HGCM_PARM_TYPE_32BIT = 1,
  VMMDEV_HGCM_PARM_TYPE_64BIT = 2,
  VMMDEV_HGCM_PARM_TYPE_PHYSADDR = 3,
  VMMDEV_HGCM_PARM_TYPE_LINADDR = 4,
  VMMDEV_HGCM_PARM_TYPE_LINADDR_IN = 5,
  VMMDEV_HGCM_PARM_TYPE_LINADDR_OUT = 6,
  VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL = 7,
  VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_IN = 8,
  VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_OUT = 9,
  VMMDEV_HGCM_PARM_TYPE_PAGELIST = 10,
  VMMDEV_HGCM_PARM_TYPE_SIZEHACK = 0x7fffffff
};
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 {
      __u32 size;
      __u32 offset;
    } page_list;
  } u;
} __packed;
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 {
      __u32 size;
      __u32 offset;
    } page_list;
  } __packed u;
} __packed;
#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 {
  __u32 flags;
  __u16 offset_first_page;
  __u16 page_count;
  __u64 pages[1];
};
#endif
