Skip to content
This repository was archived by the owner on Jan 28, 2023. It is now read-only.

Commit 761d8f2

Browse files
committed
Unified IOCTL definitions
Signed-off-by: Alexandro Sanchez Bach <[email protected]>
1 parent 6cbfdc4 commit 761d8f2

File tree

5 files changed

+86
-128
lines changed

5 files changed

+86
-128
lines changed

include/darwin/hax_interface_mac.h

+11-36
Original file line numberDiff line numberDiff line change
@@ -33,42 +33,17 @@
3333

3434
#include <mach/mach_types.h>
3535

36-
/* The mac specific interface to qemu because of mac's
37-
* special handling like hax tunnel allocation etc */
38-
/* HAX model level ioctl */
39-
#define HAX_IOCTL_VERSION _IOWR(0, 0x20, struct hax_module_version)
40-
#define HAX_IOCTL_CREATE_VM _IOWR(0, 0x21, uint32_t)
41-
#define HAX_IOCTL_DESTROY_VM _IOW(0, 0x22, uint32_t)
42-
#define HAX_IOCTL_CAPABILITY _IOR(0, 0x23, struct hax_capabilityinfo)
43-
#define HAX_IOCTL_SET_MEMLIMIT _IOWR(0, 0x24, struct hax_set_memlimit)
44-
45-
// Only for backward compatibility with old Qemu.
46-
#define HAX_VM_IOCTL_VCPU_CREATE_ORIG _IOR(0, 0x80, int)
47-
48-
#define HAX_VM_IOCTL_VCPU_CREATE _IOWR(0, 0x80, uint32_t)
49-
#define HAX_VM_IOCTL_ALLOC_RAM _IOWR(0, 0x81, struct hax_alloc_ram_info)
50-
#define HAX_VM_IOCTL_SET_RAM _IOWR(0, 0x82, struct hax_set_ram_info)
51-
#define HAX_VM_IOCTL_VCPU_DESTROY _IOR(0, 0x83, uint32_t)
52-
#define HAX_VM_IOCTL_ADD_RAMBLOCK _IOW(0, 0x85, struct hax_ramblock_info)
53-
#define HAX_VM_IOCTL_SET_RAM2 _IOWR(0, 0x86, struct hax_set_ram_info2)
54-
#define HAX_VM_IOCTL_PROTECT_RAM _IOWR(0, 0x87, struct hax_protect_ram_info)
55-
56-
#define HAX_VCPU_IOCTL_RUN _IO(0, 0xc0)
57-
#define HAX_VCPU_IOCTL_SET_MSRS _IOWR(0, 0xc1, struct hax_msr_data)
58-
#define HAX_VCPU_IOCTL_GET_MSRS _IOWR(0, 0xc2, struct hax_msr_data)
59-
60-
#define HAX_VCPU_IOCTL_SET_FPU _IOW(0, 0xc3, struct fx_layout)
61-
#define HAX_VCPU_IOCTL_GET_FPU _IOR(0, 0xc4, struct fx_layout)
62-
63-
#define HAX_VCPU_IOCTL_SETUP_TUNNEL _IOWR(0, 0xc5, struct hax_tunnel_info)
64-
#define HAX_VCPU_IOCTL_INTERRUPT _IOWR(0, 0xc6, uint32_t)
65-
#define HAX_VCPU_IOCTL_SET_REGS _IOWR(0, 0xc7, struct vcpu_state_t)
66-
#define HAX_VCPU_IOCTL_GET_REGS _IOWR(0, 0xc8, struct vcpu_state_t)
67-
68-
/* API 2.0 */
69-
#define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION _IOW(0, 0x84, struct hax_qemu_version)
70-
71-
#define HAX_VCPU_IOCTL_DEBUG _IOW(0, 0xc9, struct hax_debug_t)
36+
#define HAX_IOCTL_HAX_IO(access, code, type) \
37+
_IO(0, code)
38+
#define HAX_IOCTL_HAX_IOR(access, code, type) \
39+
_IOR(0, code, type)
40+
#define HAX_IOCTL_HAX_IOW(access, code, type) \
41+
_IOW(0, code, type)
42+
#define HAX_IOCTL_HAX_IOWR(access, code, type) \
43+
_IOWR(0, code, type)
44+
45+
#define HAX_IOCTL(access, code, type) \
46+
HAX_IOCTL_##access(0, code, type)
7247

7348
#define HAX_KERNEL64_CS 0x80
7449
#define HAX_KERNEL32_CS 0x08

include/hax_interface.h

+59
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,65 @@
4949
#include "windows/hax_interface_windows.h"
5050
#endif
5151

52+
#define HAX_IOCTL_VERSION \
53+
HAX_IOCTL(HAX_IOWR, 0x00, struct hax_module_version)
54+
#define HAX_IOCTL_CREATE_VM \
55+
HAX_IOCTL(HAX_IOWR, 0x01, uint32_t)
56+
#define HAX_IOCTL_DESTROY_VM \
57+
HAX_IOCTL(HAX_IOW, 0x02, uint32_t)
58+
#define HAX_IOCTL_CAPABILITY \
59+
HAX_IOCTL(HAX_IOR, 0x03, struct hax_capabilityinfo)
60+
#define HAX_IOCTL_SET_MEMLIMIT \
61+
HAX_IOCTL(HAX_IOWR, 0x04, struct hax_set_memlimit)
62+
63+
// Only for backward compatibility with old Qemu.
64+
#define HAX_VM_IOCTL_VCPU_CREATE_ORIG \
65+
HAX_IOCTL(HAX_IOR, 0x00, int)
66+
67+
#define HAX_VM_IOCTL_VCPU_CREATE \
68+
HAX_IOCTL(HAX_IOWR, 0x00, uint32_t)
69+
#define HAX_VM_IOCTL_ALLOC_RAM \
70+
HAX_IOCTL(HAX_IOWR, 0x01, struct hax_alloc_ram_info)
71+
#define HAX_VM_IOCTL_SET_RAM \
72+
HAX_IOCTL(HAX_IOWR, 0x02, struct hax_set_ram_info)
73+
#define HAX_VM_IOCTL_VCPU_DESTROY \
74+
HAX_IOCTL(HAX_IOR, 0x03, uint32_t)
75+
#define HAX_VM_IOCTL_ADD_RAMBLOCK \
76+
HAX_IOCTL(HAX_IOW, 0x04, struct hax_ramblock_info)
77+
#define HAX_VM_IOCTL_SET_RAM2 \
78+
HAX_IOCTL(HAX_IOWR, 0x05, struct hax_set_ram_info2)
79+
#define HAX_VM_IOCTL_PROTECT_RAM \
80+
HAX_IOCTL(HAX_IOWR, 0x06, struct hax_protect_ram_info)
81+
82+
#define HAX_VCPU_IOCTL_RUN \
83+
HAX_IOCTL(HAX_IO, 0x00, HAX_UNUSED)
84+
#define HAX_VCPU_IOCTL_SETUP_TUNNEL \
85+
HAX_IOCTL(HAX_IOWR, 0x01, struct hax_tunnel_info)
86+
#define HAX_VCPU_IOCTL_GET_REGS \
87+
HAX_IOCTL(HAX_IOWR, 0x02, struct vcpu_state_t)
88+
#define HAX_VCPU_IOCTL_SET_REGS \
89+
HAX_IOCTL(HAX_IOWR, 0x03, struct vcpu_state_t)
90+
#define HAX_VCPU_IOCTL_GET_FPU \
91+
HAX_IOCTL(HAX_IOR, 0x04, struct fx_layout)
92+
#define HAX_VCPU_IOCTL_SET_FPU \
93+
HAX_IOCTL(HAX_IOW, 0x05, struct fx_layout)
94+
#define HAX_VCPU_IOCTL_GET_MSRS \
95+
HAX_IOCTL(HAX_IOWR, 0x06, struct hax_msr_data)
96+
#define HAX_VCPU_IOCTL_SET_MSRS \
97+
HAX_IOCTL(HAX_IOWR, 0x07, struct hax_msr_data)
98+
#define HAX_VCPU_IOCTL_INTERRUPT \
99+
HAX_IOCTL(HAX_IOWR, 0x08, uint32_t)
100+
101+
#define HAX_VCPU_IOCTL_KICKOFF \
102+
HAX_IOCTL(HAX_IO, 0x40, HAX_UNUSED)
103+
104+
/* API 2.0 */
105+
#define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION \
106+
HAX_IOCTL(HAX_IOW, 0x07, struct hax_qemu_version)
107+
108+
#define HAX_VCPU_IOCTL_DEBUG \
109+
HAX_IOCTL(HAX_IOW, 0x09, struct hax_debug_t)
110+
52111
#include "vcpu_state.h"
53112

54113
struct vmx_msr {

include/linux/hax_interface_linux.h

+11-36
Original file line numberDiff line numberDiff line change
@@ -34,42 +34,17 @@
3434

3535
#include <asm/ioctl.h>
3636

37-
/* The mac specific interface to qemu because of mac's
38-
* special handling like hax tunnel allocation etc */
39-
/* HAX model level ioctl */
40-
#define HAX_IOCTL_VERSION _IOWR(0, 0x20, struct hax_module_version)
41-
#define HAX_IOCTL_CREATE_VM _IOWR(0, 0x21, uint32_t)
42-
#define HAX_IOCTL_DESTROY_VM _IOW(0, 0x22, uint32_t)
43-
#define HAX_IOCTL_CAPABILITY _IOR(0, 0x23, struct hax_capabilityinfo)
44-
#define HAX_IOCTL_SET_MEMLIMIT _IOWR(0, 0x24, struct hax_set_memlimit)
45-
46-
// Only for backward compatibility with old Qemu.
47-
#define HAX_VM_IOCTL_VCPU_CREATE_ORIG _IOR(0, 0x80, int)
48-
49-
#define HAX_VM_IOCTL_VCPU_CREATE _IOWR(0, 0x80, uint32_t)
50-
#define HAX_VM_IOCTL_ALLOC_RAM _IOWR(0, 0x81, struct hax_alloc_ram_info)
51-
#define HAX_VM_IOCTL_SET_RAM _IOWR(0, 0x82, struct hax_set_ram_info)
52-
#define HAX_VM_IOCTL_VCPU_DESTROY _IOR(0, 0x83, uint32_t)
53-
#define HAX_VM_IOCTL_ADD_RAMBLOCK _IOW(0, 0x85, struct hax_ramblock_info)
54-
#define HAX_VM_IOCTL_SET_RAM2 _IOWR(0, 0x86, struct hax_set_ram_info2)
55-
#define HAX_VM_IOCTL_PROTECT_RAM _IOWR(0, 0x87, struct hax_protect_ram_info)
56-
57-
#define HAX_VCPU_IOCTL_RUN _IO(0, 0xc0)
58-
#define HAX_VCPU_IOCTL_SET_MSRS _IOWR(0, 0xc1, struct hax_msr_data)
59-
#define HAX_VCPU_IOCTL_GET_MSRS _IOWR(0, 0xc2, struct hax_msr_data)
60-
61-
#define HAX_VCPU_IOCTL_SET_FPU _IOW(0, 0xc3, struct fx_layout)
62-
#define HAX_VCPU_IOCTL_GET_FPU _IOR(0, 0xc4, struct fx_layout)
63-
64-
#define HAX_VCPU_IOCTL_SETUP_TUNNEL _IOWR(0, 0xc5, struct hax_tunnel_info)
65-
#define HAX_VCPU_IOCTL_INTERRUPT _IOWR(0, 0xc6, uint32_t)
66-
#define HAX_VCPU_IOCTL_SET_REGS _IOWR(0, 0xc7, struct vcpu_state_t)
67-
#define HAX_VCPU_IOCTL_GET_REGS _IOWR(0, 0xc8, struct vcpu_state_t)
68-
69-
/* API 2.0 */
70-
#define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION _IOW(0, 0x84, struct hax_qemu_version)
71-
72-
#define HAX_VCPU_IOCTL_DEBUG _IOW(0, 0xc9, struct hax_debug_t)
37+
#define HAX_IOCTL_HAX_IO(access, code, type) \
38+
_IO(0, code)
39+
#define HAX_IOCTL_HAX_IOR(access, code, type) \
40+
_IOR(0, code, type)
41+
#define HAX_IOCTL_HAX_IOW(access, code, type) \
42+
_IOW(0, code, type)
43+
#define HAX_IOCTL_HAX_IOWR(access, code, type) \
44+
_IOWR(0, code, type)
45+
46+
#define HAX_IOCTL(access, code, type) \
47+
HAX_IOCTL_##access(0, code, type)
7348

7449
#define HAX_KERNEL64_CS 0x80
7550
#define HAX_KERNEL32_CS 0x08

include/windows/hax_interface_windows.h

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
#ifndef HAX_WINDOWS_HAX_INTERFACE_WINDOWS_H_
3232
#define HAX_WINDOWS_HAX_INTERFACE_WINDOWS_H_
3333

34+
#define HAX_DEVICE_TYPE 0x4000
35+
36+
#define HAX_IOCTL(access, code, type) \
37+
CTL_CODE(HAX_DEVICE_TYPE, (0x800 | code), METHOD_BUFFERED, FILE_ANY_ACCESS)
38+
3439
/*
3540
* This is for MAC compatible mode, so should not be used
3641
* But how can we make sure it is really not used??

platforms/windows/hax_entry.h

-56
Original file line numberDiff line numberDiff line change
@@ -110,60 +110,4 @@ int smpc_dpc_exit(void);
110110

111111
extern PDRIVER_OBJECT HaxDriverObject;
112112

113-
#define HAX_DEVICE_TYPE 0x4000
114-
115-
#define HAX_IOCTL_VERSION \
116-
CTL_CODE(HAX_DEVICE_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS)
117-
#define HAX_IOCTL_CREATE_VM \
118-
CTL_CODE(HAX_DEVICE_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS)
119-
#define HAX_IOCTL_CAPABILITY \
120-
CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS)
121-
#define HAX_IOCTL_SET_MEMLIMIT \
122-
CTL_CODE(HAX_DEVICE_TYPE, 0x911, METHOD_BUFFERED, FILE_ANY_ACCESS)
123-
124-
#define HAX_VM_IOCTL_VCPU_CREATE \
125-
CTL_CODE(HAX_DEVICE_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS)
126-
#define HAX_VM_IOCTL_ALLOC_RAM \
127-
CTL_CODE(HAX_DEVICE_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS)
128-
#define HAX_VM_IOCTL_SET_RAM \
129-
CTL_CODE(HAX_DEVICE_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)
130-
#define HAX_VM_IOCTL_VCPU_DESTROY \
131-
CTL_CODE(HAX_DEVICE_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)
132-
#define HAX_VM_IOCTL_ADD_RAMBLOCK \
133-
CTL_CODE(HAX_DEVICE_TYPE, 0x913, METHOD_BUFFERED, FILE_ANY_ACCESS)
134-
#define HAX_VM_IOCTL_SET_RAM2 \
135-
CTL_CODE(HAX_DEVICE_TYPE, 0x914, METHOD_BUFFERED, FILE_ANY_ACCESS)
136-
#define HAX_VM_IOCTL_PROTECT_RAM \
137-
CTL_CODE(HAX_DEVICE_TYPE, 0x915, METHOD_BUFFERED, FILE_ANY_ACCESS)
138-
139-
#define HAX_VCPU_IOCTL_RUN \
140-
CTL_CODE(HAX_DEVICE_TYPE, 0x906, METHOD_BUFFERED, FILE_ANY_ACCESS)
141-
#define HAX_VCPU_IOCTL_SET_MSRS \
142-
CTL_CODE(HAX_DEVICE_TYPE, 0x907, METHOD_BUFFERED, FILE_ANY_ACCESS)
143-
#define HAX_VCPU_IOCTL_GET_MSRS \
144-
CTL_CODE(HAX_DEVICE_TYPE, 0x908, METHOD_BUFFERED, FILE_ANY_ACCESS)
145-
146-
#define HAX_VCPU_IOCTL_SET_FPU \
147-
CTL_CODE(HAX_DEVICE_TYPE, 0x909, METHOD_BUFFERED, FILE_ANY_ACCESS)
148-
#define HAX_VCPU_IOCTL_GET_FPU \
149-
CTL_CODE(HAX_DEVICE_TYPE, 0x90a, METHOD_BUFFERED, FILE_ANY_ACCESS)
150-
151-
#define HAX_VCPU_IOCTL_SETUP_TUNNEL \
152-
CTL_CODE(HAX_DEVICE_TYPE, 0x90b, METHOD_BUFFERED, FILE_ANY_ACCESS)
153-
#define HAX_VCPU_IOCTL_INTERRUPT \
154-
CTL_CODE(HAX_DEVICE_TYPE, 0x90c, METHOD_BUFFERED, FILE_ANY_ACCESS)
155-
#define HAX_VCPU_IOCTL_SET_REGS \
156-
CTL_CODE(HAX_DEVICE_TYPE, 0x90d, METHOD_BUFFERED, FILE_ANY_ACCESS)
157-
#define HAX_VCPU_IOCTL_GET_REGS \
158-
CTL_CODE(HAX_DEVICE_TYPE, 0x90e, METHOD_BUFFERED, FILE_ANY_ACCESS)
159-
#define HAX_VCPU_IOCTL_KICKOFF \
160-
CTL_CODE(HAX_DEVICE_TYPE, 0x90f, METHOD_BUFFERED, FILE_ANY_ACCESS)
161-
162-
/* API version 2.0 */
163-
#define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION \
164-
CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS)
165-
166-
#define HAX_VCPU_IOCTL_DEBUG \
167-
CTL_CODE(HAX_DEVICE_TYPE, 0x916, METHOD_BUFFERED, FILE_ANY_ACCESS)
168-
169113
#endif // HAX_WINDOWS_HAX_ENTRY_H_

0 commit comments

Comments
 (0)