1
2
3
4
5
6
7
8 #ifndef __VBOX_VMMDEV_H__
9 #define __VBOX_VMMDEV_H__
10
11 #include <asm/bitsperlong.h>
12 #include <linux/sizes.h>
13 #include <linux/types.h>
14 #include <linux/vbox_vmmdev_types.h>
15
16
17 #define VMMDEV_PORT_OFF_REQUEST 0
18
19
20 struct vmmdev_memory {
21
22 u32 size;
23
24 u32 version;
25
26 union {
27 struct {
28
29 u8 have_events;
30
31 u8 padding[3];
32 } V1_04;
33
34 struct {
35
36 u32 host_events;
37
38 u32 guest_event_mask;
39 } V1_03;
40 } V;
41
42
43 };
44 VMMDEV_ASSERT_SIZE(vmmdev_memory, 8 + 8);
45
46
47 #define VMMDEV_MEMORY_VERSION (1)
48
49
50 #define VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED BIT(0)
51
52 #define VMMDEV_EVENT_HGCM BIT(1)
53
54 #define VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST BIT(2)
55
56 #define VMMDEV_EVENT_JUDGE_CREDENTIALS BIT(3)
57
58 #define VMMDEV_EVENT_RESTORED BIT(4)
59
60 #define VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST BIT(5)
61
62 #define VMMDEV_EVENT_BALLOON_CHANGE_REQUEST BIT(6)
63
64 #define VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST BIT(7)
65
66 #define VMMDEV_EVENT_VRDP BIT(8)
67
68 #define VMMDEV_EVENT_MOUSE_POSITION_CHANGED BIT(9)
69
70 #define VMMDEV_EVENT_CPU_HOTPLUG BIT(10)
71
72 #define VMMDEV_EVENT_VALID_EVENT_MASK 0x000007ffU
73
74
75
76
77
78
79 #define VMMDEV_VERSION 0x00010004
80 #define VMMDEV_VERSION_MAJOR (VMMDEV_VERSION >> 16)
81 #define VMMDEV_VERSION_MINOR (VMMDEV_VERSION & 0xffff)
82
83
84 #define VMMDEV_MAX_VMMDEVREQ_SIZE 1048576
85
86
87 #define VMMDEV_REQUEST_HEADER_VERSION 0x10001
88
89
90 struct vmmdev_request_header {
91
92 u32 size;
93
94 u32 version;
95
96 enum vmmdev_request_type request_type;
97
98 s32 rc;
99
100 u32 reserved1;
101
102 u32 requestor;
103 };
104 VMMDEV_ASSERT_SIZE(vmmdev_request_header, 24);
105
106
107
108
109
110
111 struct vmmdev_mouse_status {
112
113 struct vmmdev_request_header header;
114
115 u32 mouse_features;
116
117 s32 pointer_pos_x;
118
119 s32 pointer_pos_y;
120 };
121 VMMDEV_ASSERT_SIZE(vmmdev_mouse_status, 24 + 12);
122
123
124 #define VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE BIT(0)
125
126
127
128
129 #define VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE BIT(1)
130
131
132
133
134
135
136
137
138 #define VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR BIT(2)
139
140 #define VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER BIT(3)
141
142 #define VMMDEV_MOUSE_NEW_PROTOCOL BIT(4)
143
144
145
146
147 #define VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR BIT(5)
148
149
150
151
152 #define VMMDEV_MOUSE_HOST_HAS_ABS_DEV BIT(6)
153
154
155 #define VMMDEV_MOUSE_RANGE_MIN 0
156
157 #define VMMDEV_MOUSE_RANGE_MAX 0xFFFF
158
159
160
161
162
163
164 struct vmmdev_host_version {
165
166 struct vmmdev_request_header header;
167
168 u16 major;
169
170 u16 minor;
171
172 u32 build;
173
174 u32 revision;
175
176 u32 features;
177 };
178 VMMDEV_ASSERT_SIZE(vmmdev_host_version, 24 + 16);
179
180
181 #define VMMDEV_HVF_HGCM_PHYS_PAGE_LIST BIT(0)
182
183
184
185
186
187 struct vmmdev_mask {
188
189 struct vmmdev_request_header header;
190
191 u32 or_mask;
192
193 u32 not_mask;
194 };
195 VMMDEV_ASSERT_SIZE(vmmdev_mask, 24 + 8);
196
197
198 #define VMMDEV_GUEST_SUPPORTS_SEAMLESS BIT(0)
199
200 #define VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING BIT(1)
201
202
203
204
205
206
207
208 #define VMMDEV_GUEST_SUPPORTS_GRAPHICS BIT(2)
209
210
211 struct vmmdev_hypervisorinfo {
212
213 struct vmmdev_request_header header;
214
215
216
217
218 u32 hypervisor_start;
219
220 u32 hypervisor_size;
221 };
222 VMMDEV_ASSERT_SIZE(vmmdev_hypervisorinfo, 24 + 8);
223
224
225 struct vmmdev_events {
226
227 struct vmmdev_request_header header;
228
229 u32 events;
230 };
231 VMMDEV_ASSERT_SIZE(vmmdev_events, 24 + 4);
232
233 #define VMMDEV_OSTYPE_LINUX26 0x53000
234 #define VMMDEV_OSTYPE_X64 BIT(8)
235
236
237 struct vmmdev_guest_info {
238
239 struct vmmdev_request_header header;
240
241
242
243
244 u32 interface_version;
245
246 u32 os_type;
247 };
248 VMMDEV_ASSERT_SIZE(vmmdev_guest_info, 24 + 8);
249
250 #define VMMDEV_GUEST_INFO2_ADDITIONS_FEATURES_REQUESTOR_INFO BIT(0)
251
252
253 struct vmmdev_guest_info2 {
254
255 struct vmmdev_request_header header;
256
257 u16 additions_major;
258
259 u16 additions_minor;
260
261 u32 additions_build;
262
263 u32 additions_revision;
264
265 u32 additions_features;
266
267
268
269
270
271
272
273
274
275
276
277
278 char name[128];
279 };
280 VMMDEV_ASSERT_SIZE(vmmdev_guest_info2, 24 + 144);
281
282 enum vmmdev_guest_facility_type {
283 VBOXGUEST_FACILITY_TYPE_UNKNOWN = 0,
284 VBOXGUEST_FACILITY_TYPE_VBOXGUEST_DRIVER = 20,
285
286 VBOXGUEST_FACILITY_TYPE_AUTO_LOGON = 90,
287 VBOXGUEST_FACILITY_TYPE_VBOX_SERVICE = 100,
288
289 VBOXGUEST_FACILITY_TYPE_VBOX_TRAY_CLIENT = 101,
290 VBOXGUEST_FACILITY_TYPE_SEAMLESS = 1000,
291 VBOXGUEST_FACILITY_TYPE_GRAPHICS = 1100,
292 VBOXGUEST_FACILITY_TYPE_ALL = 0x7ffffffe,
293
294 VBOXGUEST_FACILITY_TYPE_SIZEHACK = 0x7fffffff
295 };
296
297 enum vmmdev_guest_facility_status {
298 VBOXGUEST_FACILITY_STATUS_INACTIVE = 0,
299 VBOXGUEST_FACILITY_STATUS_PAUSED = 1,
300 VBOXGUEST_FACILITY_STATUS_PRE_INIT = 20,
301 VBOXGUEST_FACILITY_STATUS_INIT = 30,
302 VBOXGUEST_FACILITY_STATUS_ACTIVE = 50,
303 VBOXGUEST_FACILITY_STATUS_TERMINATING = 100,
304 VBOXGUEST_FACILITY_STATUS_TERMINATED = 101,
305 VBOXGUEST_FACILITY_STATUS_FAILED = 800,
306 VBOXGUEST_FACILITY_STATUS_UNKNOWN = 999,
307
308 VBOXGUEST_FACILITY_STATUS_SIZEHACK = 0x7fffffff
309 };
310
311
312 struct vmmdev_guest_status {
313
314 struct vmmdev_request_header header;
315
316 enum vmmdev_guest_facility_type facility;
317
318 enum vmmdev_guest_facility_status status;
319
320 u32 flags;
321 };
322 VMMDEV_ASSERT_SIZE(vmmdev_guest_status, 24 + 12);
323
324 #define VMMDEV_MEMORY_BALLOON_CHUNK_SIZE (1048576)
325 #define VMMDEV_MEMORY_BALLOON_CHUNK_PAGES (1048576 / 4096)
326
327
328 struct vmmdev_memballoon_info {
329
330 struct vmmdev_request_header header;
331
332 u32 balloon_chunks;
333
334 u32 phys_mem_chunks;
335
336
337
338
339
340 u32 event_ack;
341 };
342 VMMDEV_ASSERT_SIZE(vmmdev_memballoon_info, 24 + 12);
343
344
345 struct vmmdev_memballoon_change {
346
347 struct vmmdev_request_header header;
348
349 u32 pages;
350
351 u32 inflate;
352
353 u64 phys_page[VMMDEV_MEMORY_BALLOON_CHUNK_PAGES];
354 };
355
356
357 struct vmmdev_write_core_dump {
358
359 struct vmmdev_request_header header;
360
361 u32 flags;
362 };
363 VMMDEV_ASSERT_SIZE(vmmdev_write_core_dump, 24 + 4);
364
365
366 struct vmmdev_heartbeat {
367
368 struct vmmdev_request_header header;
369
370 u64 interval_ns;
371
372 u8 enabled;
373
374 u8 padding[3];
375 } __packed;
376 VMMDEV_ASSERT_SIZE(vmmdev_heartbeat, 24 + 12);
377
378 #define VMMDEV_HGCM_REQ_DONE BIT(0)
379 #define VMMDEV_HGCM_REQ_CANCELLED BIT(1)
380
381
382 struct vmmdev_hgcmreq_header {
383
384 struct vmmdev_request_header header;
385
386
387 u32 flags;
388
389
390 s32 result;
391 };
392 VMMDEV_ASSERT_SIZE(vmmdev_hgcmreq_header, 24 + 8);
393
394
395 struct vmmdev_hgcm_connect {
396
397 struct vmmdev_hgcmreq_header header;
398
399
400 struct vmmdev_hgcm_service_location loc;
401
402
403 u32 client_id;
404 };
405 VMMDEV_ASSERT_SIZE(vmmdev_hgcm_connect, 32 + 132 + 4);
406
407
408 struct vmmdev_hgcm_disconnect {
409
410 struct vmmdev_hgcmreq_header header;
411
412
413 u32 client_id;
414 };
415 VMMDEV_ASSERT_SIZE(vmmdev_hgcm_disconnect, 32 + 4);
416
417 #define VMMDEV_HGCM_MAX_PARMS 32
418
419
420 struct vmmdev_hgcm_call {
421
422 struct vmmdev_hgcmreq_header header;
423
424
425 u32 client_id;
426
427 u32 function;
428
429 u32 parm_count;
430
431 };
432 VMMDEV_ASSERT_SIZE(vmmdev_hgcm_call, 32 + 12);
433
434
435
436
437
438
439
440
441
442
443 struct vmmdev_hgcm_cancel2 {
444
445 struct vmmdev_request_header header;
446
447 u32 phys_req_to_cancel;
448 };
449 VMMDEV_ASSERT_SIZE(vmmdev_hgcm_cancel2, 24 + 4);
450
451 #endif