1/*
2 * This header was generated from the Linux kernel headers by update_headers.py,
3 * to provide necessary information from kernel to userspace, such as constants,
4 * structures, and macros, and thus, contains no copyrightable information.
5 */
6#ifndef __UAPI_VBOXGUEST_H__
7#define __UAPI_VBOXGUEST_H__
8#include <asm/bitsperlong.h>
9#include <linux/ioctl.h>
10#include <linux/vbox_err.h>
11#include <linux/vbox_vmmdev_types.h>
12#define VBG_IOCTL_HDR_VERSION		0x10001
13#define VBG_IOCTL_HDR_TYPE_DEFAULT		0
14struct vbg_ioctl_hdr {
15
16	__u32 size_in;
17
18	__u32 version;
19
20	__u32 type;
21
22	__s32 rc;
23
24	__u32 size_out;
25
26	__u32 reserved;
27};
28VMMDEV_ASSERT_SIZE(vbg_ioctl_hdr, 24);
29#define VBG_IOC_VERSION		0x00010000u
30struct vbg_ioctl_driver_version_info {
31
32	struct vbg_ioctl_hdr hdr;
33	union {
34		struct {
35
36			__u32 req_version;
37
38			__u32 min_version;
39
40			__u32 reserved1;
41
42			__u32 reserved2;
43		} in;
44		struct {
45
46			__u32 session_version;
47
48			__u32 driver_version;
49
50			__u32 driver_revision;
51
52			__u32 reserved1;
53
54			__u32 reserved2;
55		} out;
56	} u;
57};
58VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20);
59#define VBG_IOCTL_DRIVER_VERSION_INFO \
60	_IOWR('V', 0, struct vbg_ioctl_driver_version_info)
61#define VBG_IOCTL_VMMDEV_REQUEST(s)	_IOC(_IOC_READ | _IOC_WRITE, 'V', 2, s)
62#define VBG_IOCTL_VMMDEV_REQUEST_BIG	_IO('V', 3)
63struct vbg_ioctl_hgcm_connect {
64	struct vbg_ioctl_hdr hdr;
65	union {
66		struct {
67			struct vmmdev_hgcm_service_location loc;
68		} in;
69		struct {
70			__u32 client_id;
71		} out;
72	} u;
73};
74VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_connect, 24 + 132);
75#define VBG_IOCTL_HGCM_CONNECT \
76	_IOWR('V', 4, struct vbg_ioctl_hgcm_connect)
77struct vbg_ioctl_hgcm_disconnect {
78	struct vbg_ioctl_hdr hdr;
79	union {
80		struct {
81			__u32 client_id;
82		} in;
83	} u;
84};
85VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_disconnect, 24 + 4);
86#define VBG_IOCTL_HGCM_DISCONNECT \
87	_IOWR('V', 5, struct vbg_ioctl_hgcm_disconnect)
88struct vbg_ioctl_hgcm_call {
89
90	struct vbg_ioctl_hdr hdr;
91
92	__u32 client_id;
93
94	__u32 function;
95
96	__u32 timeout_ms;
97
98	__u8 interruptible;
99
100	__u8 reserved;
101
102	__u16 parm_count;
103
104};
105VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_call, 24 + 16);
106#define VBG_IOCTL_HGCM_CALL_32(s)	_IOC(_IOC_READ | _IOC_WRITE, 'V', 6, s)
107#define VBG_IOCTL_HGCM_CALL_64(s)	_IOC(_IOC_READ | _IOC_WRITE, 'V', 7, s)
108#if __BITS_PER_LONG == 64
109#define VBG_IOCTL_HGCM_CALL(s)		VBG_IOCTL_HGCM_CALL_64(s)
110#else
111#define VBG_IOCTL_HGCM_CALL(s)		VBG_IOCTL_HGCM_CALL_32(s)
112#endif
113struct vbg_ioctl_log {
114
115	struct vbg_ioctl_hdr hdr;
116	union {
117		struct {
118
119			char msg[1];
120		} in;
121	} u;
122};
123#define VBG_IOCTL_LOG(s)		_IO('V', 9)
124struct vbg_ioctl_wait_for_events {
125
126	struct vbg_ioctl_hdr hdr;
127	union {
128		struct {
129
130			__u32 timeout_ms;
131
132			__u32 events;
133		} in;
134		struct {
135
136			__u32 events;
137		} out;
138	} u;
139};
140VMMDEV_ASSERT_SIZE(vbg_ioctl_wait_for_events, 24 + 8);
141#define VBG_IOCTL_WAIT_FOR_EVENTS \
142	_IOWR('V', 10, struct vbg_ioctl_wait_for_events)
143#define VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS \
144	_IOWR('V', 11, struct vbg_ioctl_hdr)
145struct vbg_ioctl_change_filter {
146
147	struct vbg_ioctl_hdr hdr;
148	union {
149		struct {
150
151			__u32 or_mask;
152
153			__u32 not_mask;
154		} in;
155	} u;
156};
157VMMDEV_ASSERT_SIZE(vbg_ioctl_change_filter, 24 + 8);
158#define VBG_IOCTL_CHANGE_FILTER_MASK \
159	_IOWR('V', 12, struct vbg_ioctl_change_filter)
160struct vbg_ioctl_set_guest_caps {
161
162	struct vbg_ioctl_hdr hdr;
163	union {
164		struct {
165
166			__u32 or_mask;
167
168			__u32 not_mask;
169		} in;
170		struct {
171
172			__u32 session_caps;
173
174			__u32 global_caps;
175		} out;
176	} u;
177};
178VMMDEV_ASSERT_SIZE(vbg_ioctl_set_guest_caps, 24 + 8);
179#define VBG_IOCTL_CHANGE_GUEST_CAPABILITIES \
180	_IOWR('V', 14, struct vbg_ioctl_set_guest_caps)
181struct vbg_ioctl_check_balloon {
182
183	struct vbg_ioctl_hdr hdr;
184	union {
185		struct {
186
187			__u32 balloon_chunks;
188
189			__u8 handle_in_r3;
190
191			__u8 padding[3];
192		} out;
193	} u;
194};
195VMMDEV_ASSERT_SIZE(vbg_ioctl_check_balloon, 24 + 8);
196#define VBG_IOCTL_CHECK_BALLOON \
197	_IOWR('V', 17, struct vbg_ioctl_check_balloon)
198struct vbg_ioctl_write_coredump {
199	struct vbg_ioctl_hdr hdr;
200	union {
201		struct {
202			__u32 flags;
203		} in;
204	} u;
205};
206VMMDEV_ASSERT_SIZE(vbg_ioctl_write_coredump, 24 + 4);
207#define VBG_IOCTL_WRITE_CORE_DUMP \
208	_IOWR('V', 19, struct vbg_ioctl_write_coredump)
209#endif
210