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