Home | History | Annotate | Download | only in linux
      1 /****************************************************************************
      2  ****************************************************************************
      3  ***
      4  ***   This header was automatically generated from a Linux kernel header
      5  ***   of the same name, to make information necessary for userspace to
      6  ***   call into the kernel available to libc.  It contains only constants,
      7  ***   structures, and macros generated from the original header, and thus,
      8  ***   contains no copyrightable information.
      9  ***
     10  ***   To edit the content of this header, modify the corresponding
     11  ***   source file (e.g. under external/kernel-headers/original/) then
     12  ***   run bionic/libc/kernel/tools/update_all.py
     13  ***
     14  ***   Any manual change here will be lost the next time this script will
     15  ***   be run. You've been warned!
     16  ***
     17  ****************************************************************************
     18  ****************************************************************************/
     19 #ifndef _UAPI_HYPERV_H
     20 #define _UAPI_HYPERV_H
     21 #include <linux/uuid.h>
     22 #define UTIL_FW_MINOR 0
     23 #define UTIL_WS2K8_FW_MAJOR 1
     24 #define UTIL_WS2K8_FW_VERSION (UTIL_WS2K8_FW_MAJOR << 16 | UTIL_FW_MINOR)
     25 #define UTIL_FW_MAJOR 3
     26 #define UTIL_FW_VERSION (UTIL_FW_MAJOR << 16 | UTIL_FW_MINOR)
     27 #define VSS_OP_REGISTER 128
     28 #define VSS_OP_REGISTER1 129
     29 enum hv_vss_op {
     30   VSS_OP_CREATE = 0,
     31   VSS_OP_DELETE,
     32   VSS_OP_HOT_BACKUP,
     33   VSS_OP_GET_DM_INFO,
     34   VSS_OP_BU_COMPLETE,
     35   VSS_OP_FREEZE,
     36   VSS_OP_THAW,
     37   VSS_OP_AUTO_RECOVER,
     38   VSS_OP_COUNT
     39 };
     40 struct hv_vss_hdr {
     41   __u8 operation;
     42   __u8 reserved[7];
     43 } __attribute__((packed));
     44 #define VSS_HBU_NO_AUTO_RECOVERY 0x00000005
     45 struct hv_vss_check_feature {
     46   __u32 flags;
     47 } __attribute__((packed));
     48 struct hv_vss_check_dm_info {
     49   __u32 flags;
     50 } __attribute__((packed));
     51 struct hv_vss_msg {
     52   union {
     53     struct hv_vss_hdr vss_hdr;
     54     int error;
     55   };
     56   union {
     57     struct hv_vss_check_feature vss_cf;
     58     struct hv_vss_check_dm_info dm_info;
     59   };
     60 } __attribute__((packed));
     61 #define FCOPY_VERSION_0 0
     62 #define FCOPY_VERSION_1 1
     63 #define FCOPY_CURRENT_VERSION FCOPY_VERSION_1
     64 #define W_MAX_PATH 260
     65 enum hv_fcopy_op {
     66   START_FILE_COPY = 0,
     67   WRITE_TO_FILE,
     68   COMPLETE_FCOPY,
     69   CANCEL_FCOPY,
     70 };
     71 struct hv_fcopy_hdr {
     72   __u32 operation;
     73   uuid_le service_id0;
     74   uuid_le service_id1;
     75 } __attribute__((packed));
     76 #define OVER_WRITE 0x1
     77 #define CREATE_PATH 0x2
     78 struct hv_start_fcopy {
     79   struct hv_fcopy_hdr hdr;
     80   __u16 file_name[W_MAX_PATH];
     81   __u16 path_name[W_MAX_PATH];
     82   __u32 copy_flags;
     83   __u64 file_size;
     84 } __attribute__((packed));
     85 #define DATA_FRAGMENT (6 * 1024)
     86 struct hv_do_fcopy {
     87   struct hv_fcopy_hdr hdr;
     88   __u32 pad;
     89   __u64 offset;
     90   __u32 size;
     91   __u8 data[DATA_FRAGMENT];
     92 } __attribute__((packed));
     93 #define HV_KVP_EXCHANGE_MAX_VALUE_SIZE (2048)
     94 #define HV_KVP_EXCHANGE_MAX_KEY_SIZE (512)
     95 #define REG_SZ 1
     96 #define REG_U32 4
     97 #define REG_U64 8
     98 #define KVP_OP_REGISTER 4
     99 #define KVP_OP_REGISTER1 100
    100 enum hv_kvp_exchg_op {
    101   KVP_OP_GET = 0,
    102   KVP_OP_SET,
    103   KVP_OP_DELETE,
    104   KVP_OP_ENUMERATE,
    105   KVP_OP_GET_IP_INFO,
    106   KVP_OP_SET_IP_INFO,
    107   KVP_OP_COUNT
    108 };
    109 enum hv_kvp_exchg_pool {
    110   KVP_POOL_EXTERNAL = 0,
    111   KVP_POOL_GUEST,
    112   KVP_POOL_AUTO,
    113   KVP_POOL_AUTO_EXTERNAL,
    114   KVP_POOL_AUTO_INTERNAL,
    115   KVP_POOL_COUNT
    116 };
    117 #define HV_S_OK 0x00000000
    118 #define HV_E_FAIL 0x80004005
    119 #define HV_S_CONT 0x80070103
    120 #define HV_ERROR_NOT_SUPPORTED 0x80070032
    121 #define HV_ERROR_MACHINE_LOCKED 0x800704F7
    122 #define HV_ERROR_DEVICE_NOT_CONNECTED 0x8007048F
    123 #define HV_INVALIDARG 0x80070057
    124 #define HV_GUID_NOTFOUND 0x80041002
    125 #define HV_ERROR_ALREADY_EXISTS 0x80070050
    126 #define HV_ERROR_DISK_FULL 0x80070070
    127 #define ADDR_FAMILY_NONE 0x00
    128 #define ADDR_FAMILY_IPV4 0x01
    129 #define ADDR_FAMILY_IPV6 0x02
    130 #define MAX_ADAPTER_ID_SIZE 128
    131 #define MAX_IP_ADDR_SIZE 1024
    132 #define MAX_GATEWAY_SIZE 512
    133 struct hv_kvp_ipaddr_value {
    134   __u16 adapter_id[MAX_ADAPTER_ID_SIZE];
    135   __u8 addr_family;
    136   __u8 dhcp_enabled;
    137   __u16 ip_addr[MAX_IP_ADDR_SIZE];
    138   __u16 sub_net[MAX_IP_ADDR_SIZE];
    139   __u16 gate_way[MAX_GATEWAY_SIZE];
    140   __u16 dns_addr[MAX_IP_ADDR_SIZE];
    141 } __attribute__((packed));
    142 struct hv_kvp_hdr {
    143   __u8 operation;
    144   __u8 pool;
    145   __u16 pad;
    146 } __attribute__((packed));
    147 struct hv_kvp_exchg_msg_value {
    148   __u32 value_type;
    149   __u32 key_size;
    150   __u32 value_size;
    151   __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
    152   union {
    153     __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
    154     __u32 value_u32;
    155     __u64 value_u64;
    156   };
    157 } __attribute__((packed));
    158 struct hv_kvp_msg_enumerate {
    159   __u32 index;
    160   struct hv_kvp_exchg_msg_value data;
    161 } __attribute__((packed));
    162 struct hv_kvp_msg_get {
    163   struct hv_kvp_exchg_msg_value data;
    164 };
    165 struct hv_kvp_msg_set {
    166   struct hv_kvp_exchg_msg_value data;
    167 };
    168 struct hv_kvp_msg_delete {
    169   __u32 key_size;
    170   __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
    171 };
    172 struct hv_kvp_register {
    173   __u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
    174 };
    175 struct hv_kvp_msg {
    176   union {
    177     struct hv_kvp_hdr kvp_hdr;
    178     int error;
    179   };
    180   union {
    181     struct hv_kvp_msg_get kvp_get;
    182     struct hv_kvp_msg_set kvp_set;
    183     struct hv_kvp_msg_delete kvp_delete;
    184     struct hv_kvp_msg_enumerate kvp_enum_data;
    185     struct hv_kvp_ipaddr_value kvp_ip_val;
    186     struct hv_kvp_register kvp_register;
    187   } body;
    188 } __attribute__((packed));
    189 struct hv_kvp_ip_msg {
    190   __u8 operation;
    191   __u8 pool;
    192   struct hv_kvp_ipaddr_value kvp_ip_val;
    193 } __attribute__((packed));
    194 #endif
    195