0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __UAPI_VBOXGUEST_H__
0009 #define __UAPI_VBOXGUEST_H__
0010
0011 #include <asm/bitsperlong.h>
0012 #include <linux/ioctl.h>
0013 #include <linux/vbox_err.h>
0014 #include <linux/vbox_vmmdev_types.h>
0015
0016
0017 #define VBG_IOCTL_HDR_VERSION 0x10001
0018
0019 #define VBG_IOCTL_HDR_TYPE_DEFAULT 0
0020
0021
0022
0023
0024
0025
0026
0027 struct vbg_ioctl_hdr {
0028
0029 __u32 size_in;
0030
0031 __u32 version;
0032
0033 __u32 type;
0034
0035
0036
0037
0038 __s32 rc;
0039
0040 __u32 size_out;
0041
0042 __u32 reserved;
0043 };
0044 VMMDEV_ASSERT_SIZE(vbg_ioctl_hdr, 24);
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 #define VBG_IOC_VERSION 0x00010000u
0057
0058
0059
0060
0061
0062
0063
0064 struct vbg_ioctl_driver_version_info {
0065
0066 struct vbg_ioctl_hdr hdr;
0067 union {
0068 struct {
0069
0070 __u32 req_version;
0071
0072
0073
0074
0075 __u32 min_version;
0076
0077 __u32 reserved1;
0078
0079 __u32 reserved2;
0080 } in;
0081 struct {
0082
0083 __u32 session_version;
0084
0085 __u32 driver_version;
0086
0087 __u32 driver_revision;
0088
0089 __u32 reserved1;
0090
0091 __u32 reserved2;
0092 } out;
0093 } u;
0094 };
0095 VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20);
0096
0097 #define VBG_IOCTL_DRIVER_VERSION_INFO \
0098 _IOWR('V', 0, struct vbg_ioctl_driver_version_info)
0099
0100
0101
0102 #define VBG_IOCTL_VMMDEV_REQUEST(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 2, s)
0103
0104
0105
0106 #define VBG_IOCTL_VMMDEV_REQUEST_BIG _IO('V', 3)
0107
0108
0109
0110 struct vbg_ioctl_hgcm_connect {
0111 struct vbg_ioctl_hdr hdr;
0112 union {
0113 struct {
0114 struct vmmdev_hgcm_service_location loc;
0115 } in;
0116 struct {
0117 __u32 client_id;
0118 } out;
0119 } u;
0120 };
0121 VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_connect, 24 + 132);
0122
0123 #define VBG_IOCTL_HGCM_CONNECT \
0124 _IOWR('V', 4, struct vbg_ioctl_hgcm_connect)
0125
0126
0127
0128 struct vbg_ioctl_hgcm_disconnect {
0129 struct vbg_ioctl_hdr hdr;
0130 union {
0131 struct {
0132 __u32 client_id;
0133 } in;
0134 } u;
0135 };
0136 VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_disconnect, 24 + 4);
0137
0138 #define VBG_IOCTL_HGCM_DISCONNECT \
0139 _IOWR('V', 5, struct vbg_ioctl_hgcm_disconnect)
0140
0141
0142
0143 struct vbg_ioctl_hgcm_call {
0144
0145 struct vbg_ioctl_hdr hdr;
0146
0147 __u32 client_id;
0148
0149 __u32 function;
0150
0151
0152
0153
0154 __u32 timeout_ms;
0155
0156 __u8 interruptible;
0157
0158 __u8 reserved;
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168 __u16 parm_count;
0169
0170
0171
0172
0173 };
0174 VMMDEV_ASSERT_SIZE(vbg_ioctl_hgcm_call, 24 + 16);
0175
0176 #define VBG_IOCTL_HGCM_CALL_32(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 6, s)
0177 #define VBG_IOCTL_HGCM_CALL_64(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 7, s)
0178 #if __BITS_PER_LONG == 64
0179 #define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_64(s)
0180 #else
0181 #define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_32(s)
0182 #endif
0183
0184
0185
0186 struct vbg_ioctl_log {
0187
0188 struct vbg_ioctl_hdr hdr;
0189 union {
0190 struct {
0191
0192
0193
0194
0195
0196 char msg[1];
0197 } in;
0198 } u;
0199 };
0200
0201 #define VBG_IOCTL_LOG(s) _IO('V', 9)
0202
0203
0204
0205 struct vbg_ioctl_wait_for_events {
0206
0207 struct vbg_ioctl_hdr hdr;
0208 union {
0209 struct {
0210
0211 __u32 timeout_ms;
0212
0213 __u32 events;
0214 } in;
0215 struct {
0216
0217 __u32 events;
0218 } out;
0219 } u;
0220 };
0221 VMMDEV_ASSERT_SIZE(vbg_ioctl_wait_for_events, 24 + 8);
0222
0223 #define VBG_IOCTL_WAIT_FOR_EVENTS \
0224 _IOWR('V', 10, struct vbg_ioctl_wait_for_events)
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236 #define VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS \
0237 _IOWR('V', 11, struct vbg_ioctl_hdr)
0238
0239
0240
0241 struct vbg_ioctl_change_filter {
0242
0243 struct vbg_ioctl_hdr hdr;
0244 union {
0245 struct {
0246
0247 __u32 or_mask;
0248
0249 __u32 not_mask;
0250 } in;
0251 } u;
0252 };
0253 VMMDEV_ASSERT_SIZE(vbg_ioctl_change_filter, 24 + 8);
0254
0255
0256 #define VBG_IOCTL_CHANGE_FILTER_MASK \
0257 _IOWR('V', 12, struct vbg_ioctl_change_filter)
0258
0259
0260
0261 struct vbg_ioctl_acquire_guest_caps {
0262
0263 struct vbg_ioctl_hdr hdr;
0264 union {
0265 struct {
0266
0267 __u32 flags;
0268
0269 __u32 or_mask;
0270
0271 __u32 not_mask;
0272 } in;
0273 } u;
0274 };
0275 VMMDEV_ASSERT_SIZE(vbg_ioctl_acquire_guest_caps, 24 + 12);
0276
0277 #define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE 0x00000001
0278 #define VBGL_IOC_AGC_FLAGS_VALID_MASK 0x00000001
0279
0280 #define VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES \
0281 _IOWR('V', 13, struct vbg_ioctl_acquire_guest_caps)
0282
0283
0284
0285 struct vbg_ioctl_set_guest_caps {
0286
0287 struct vbg_ioctl_hdr hdr;
0288 union {
0289 struct {
0290
0291 __u32 or_mask;
0292
0293 __u32 not_mask;
0294 } in;
0295 struct {
0296
0297 __u32 session_caps;
0298
0299 __u32 global_caps;
0300 } out;
0301 } u;
0302 };
0303 VMMDEV_ASSERT_SIZE(vbg_ioctl_set_guest_caps, 24 + 8);
0304
0305 #define VBG_IOCTL_CHANGE_GUEST_CAPABILITIES \
0306 _IOWR('V', 14, struct vbg_ioctl_set_guest_caps)
0307
0308
0309
0310 struct vbg_ioctl_check_balloon {
0311
0312 struct vbg_ioctl_hdr hdr;
0313 union {
0314 struct {
0315
0316 __u32 balloon_chunks;
0317
0318
0319
0320
0321 __u8 handle_in_r3;
0322
0323 __u8 padding[3];
0324 } out;
0325 } u;
0326 };
0327 VMMDEV_ASSERT_SIZE(vbg_ioctl_check_balloon, 24 + 8);
0328
0329
0330
0331
0332
0333
0334
0335
0336 #define VBG_IOCTL_CHECK_BALLOON \
0337 _IOWR('V', 17, struct vbg_ioctl_check_balloon)
0338
0339
0340
0341 struct vbg_ioctl_write_coredump {
0342 struct vbg_ioctl_hdr hdr;
0343 union {
0344 struct {
0345 __u32 flags;
0346 } in;
0347 } u;
0348 };
0349 VMMDEV_ASSERT_SIZE(vbg_ioctl_write_coredump, 24 + 4);
0350
0351 #define VBG_IOCTL_WRITE_CORE_DUMP \
0352 _IOWR('V', 19, struct vbg_ioctl_write_coredump)
0353
0354 #endif