xref: /minix3/minix/drivers/vmm_guest/vbox/vmmdev.h (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc #ifndef _VBOX_VMMDEV_H
2*433d6423SLionel Sambuc #define _VBOX_VMMDEV_H
3*433d6423SLionel Sambuc 
4*433d6423SLionel Sambuc #define VMMDEV_PCI_VID 0x80ee
5*433d6423SLionel Sambuc #define VMMDEV_PCI_DID 0xcafe
6*433d6423SLionel Sambuc 
7*433d6423SLionel Sambuc #define VMMDEV_REQ_HOSTTIME		10
8*433d6423SLionel Sambuc #define VMMDEV_REQ_ACKNOWLEDGEEVENTS	41
9*433d6423SLionel Sambuc #define VMMDEV_REQ_REPORTGUESTINFO	50
10*433d6423SLionel Sambuc #define VMMDEV_REQ_HGCMCONNECT		60
11*433d6423SLionel Sambuc #define VMMDEV_REQ_HGCMDISCONNECT	61
12*433d6423SLionel Sambuc #define VMMDEV_REQ_HGCMCALL		62
13*433d6423SLionel Sambuc #define VMMDEV_REQ_HGCMCANCEL		64
14*433d6423SLionel Sambuc 
15*433d6423SLionel Sambuc #define VMMDEV_ERR_OK			0		/* success */
16*433d6423SLionel Sambuc #define VMMDEV_ERR_GENERIC		(-1)		/* general failure */
17*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_NOT_FOUND	(-2900)		/* service not found */
18*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_DENIED		2901		/* client rejected */
19*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_INVALID_ADDR	(-2902)		/* invalid address */
20*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_ASYNC_EXEC	2903		/* call in progress */
21*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_INTERNAL	(-2904)		/* internal error */
22*433d6423SLionel Sambuc #define VMMDEV_ERR_HGCM_INVALID_ID	(-2905)		/* invalid client ID */
23*433d6423SLionel Sambuc 
24*433d6423SLionel Sambuc #define VMMDEV_MAKEWORD(m,n)	(((m) << 16) | (n))
25*433d6423SLionel Sambuc 
26*433d6423SLionel Sambuc #define VMMDEV_BACKDOOR_VERSION	VMMDEV_MAKEWORD(1, 1)
27*433d6423SLionel Sambuc #define VMMDEV_GUEST_VERSION	VMMDEV_MAKEWORD(1, 4)
28*433d6423SLionel Sambuc #define VMMDEV_GUEST_OS_OTHER	0x90000		/* this is L4 - close enough */
29*433d6423SLionel Sambuc 
30*433d6423SLionel Sambuc struct VMMDevRequestHeader {
31*433d6423SLionel Sambuc 	u32_t size;
32*433d6423SLionel Sambuc 	u32_t version;
33*433d6423SLionel Sambuc 	u32_t type;
34*433d6423SLionel Sambuc 	i32_t result;
35*433d6423SLionel Sambuc 	u32_t reserved[2];
36*433d6423SLionel Sambuc };
37*433d6423SLionel Sambuc 
38*433d6423SLionel Sambuc struct VMMDevReportGuestInfo {
39*433d6423SLionel Sambuc 	struct VMMDevRequestHeader header;
40*433d6423SLionel Sambuc 	u32_t add_version;
41*433d6423SLionel Sambuc 	u32_t os_type;
42*433d6423SLionel Sambuc };
43*433d6423SLionel Sambuc 
44*433d6423SLionel Sambuc struct VMMDevReqHostTime {
45*433d6423SLionel Sambuc 	struct VMMDevRequestHeader header;
46*433d6423SLionel Sambuc 	u64_t time;
47*433d6423SLionel Sambuc };
48*433d6423SLionel Sambuc 
49*433d6423SLionel Sambuc #define VMMDEV_EVENT_HGCM	(1 << 1)
50*433d6423SLionel Sambuc 
51*433d6423SLionel Sambuc struct VMMDevEvents {
52*433d6423SLionel Sambuc 	struct VMMDevRequestHeader header;
53*433d6423SLionel Sambuc 	u32_t events;
54*433d6423SLionel Sambuc };
55*433d6423SLionel Sambuc 
56*433d6423SLionel Sambuc #define VMMDEV_HGCM_REQ_DONE	(1 << 0)
57*433d6423SLionel Sambuc 
58*433d6423SLionel Sambuc struct VMMDevHGCMHeader {
59*433d6423SLionel Sambuc 	struct VMMDevRequestHeader header;
60*433d6423SLionel Sambuc 	u32_t flags;
61*433d6423SLionel Sambuc 	i32_t result;
62*433d6423SLionel Sambuc };
63*433d6423SLionel Sambuc 
64*433d6423SLionel Sambuc #define VMMDEV_HGCM_SVCLOC_LOCALHOST_EXISTING 2
65*433d6423SLionel Sambuc 
66*433d6423SLionel Sambuc #define VMMDEV_HGCM_NAME_SIZE 128
67*433d6423SLionel Sambuc 
68*433d6423SLionel Sambuc struct VMMDevHGCMConnect {
69*433d6423SLionel Sambuc 	struct VMMDevHGCMHeader header;
70*433d6423SLionel Sambuc 	u32_t type;
71*433d6423SLionel Sambuc 	char name[VMMDEV_HGCM_NAME_SIZE];
72*433d6423SLionel Sambuc 	u32_t client_id;
73*433d6423SLionel Sambuc };
74*433d6423SLionel Sambuc 
75*433d6423SLionel Sambuc struct VMMDevHGCMDisconnect {
76*433d6423SLionel Sambuc 	struct VMMDevHGCMHeader header;
77*433d6423SLionel Sambuc 	u32_t client_id;
78*433d6423SLionel Sambuc };
79*433d6423SLionel Sambuc 
80*433d6423SLionel Sambuc #define VMMDEV_HGCM_FLAG_TO_HOST	0x01
81*433d6423SLionel Sambuc #define VMMDEV_HGCM_FLAG_FROM_HOST	0x02
82*433d6423SLionel Sambuc 
83*433d6423SLionel Sambuc struct VMMDevHGCMPageList {
84*433d6423SLionel Sambuc 	u32_t flags;
85*433d6423SLionel Sambuc 	u16_t offset;
86*433d6423SLionel Sambuc 	u16_t count;
87*433d6423SLionel Sambuc 	u64_t addr[1];
88*433d6423SLionel Sambuc };
89*433d6423SLionel Sambuc 
90*433d6423SLionel Sambuc #define VMMDEV_HGCM_PARAM_U32		1
91*433d6423SLionel Sambuc #define VMMDEV_HGCM_PARAM_U64		2
92*433d6423SLionel Sambuc #define VMMDEV_HGCM_PARAM_PAGELIST	10
93*433d6423SLionel Sambuc 
94*433d6423SLionel Sambuc struct VMMDevHGCMParam {
95*433d6423SLionel Sambuc 	u32_t type;
96*433d6423SLionel Sambuc 	union {
97*433d6423SLionel Sambuc 		u32_t u32;
98*433d6423SLionel Sambuc 		u64_t u64;
99*433d6423SLionel Sambuc 		struct {
100*433d6423SLionel Sambuc 			u32_t size;
101*433d6423SLionel Sambuc 			union {
102*433d6423SLionel Sambuc 				u32_t phys;
103*433d6423SLionel Sambuc 				void *vir;
104*433d6423SLionel Sambuc 			} addr;
105*433d6423SLionel Sambuc 		} ptr;
106*433d6423SLionel Sambuc 		struct {
107*433d6423SLionel Sambuc 			u32_t size;
108*433d6423SLionel Sambuc 			u32_t offset;
109*433d6423SLionel Sambuc 		} pagelist;
110*433d6423SLionel Sambuc 	};
111*433d6423SLionel Sambuc };
112*433d6423SLionel Sambuc 
113*433d6423SLionel Sambuc struct VMMDevHGCMCall {
114*433d6423SLionel Sambuc 	struct VMMDevHGCMHeader header;
115*433d6423SLionel Sambuc 	u32_t client_id;
116*433d6423SLionel Sambuc 	u32_t function;
117*433d6423SLionel Sambuc 	u32_t count;
118*433d6423SLionel Sambuc };
119*433d6423SLionel Sambuc 
120*433d6423SLionel Sambuc struct VMMDevHGCMCancel {
121*433d6423SLionel Sambuc 	struct VMMDevHGCMHeader header;
122*433d6423SLionel Sambuc };
123*433d6423SLionel Sambuc 
124*433d6423SLionel Sambuc #define VMMDEV_BUF_SIZE		4096		/* just one page */
125*433d6423SLionel Sambuc 
126*433d6423SLionel Sambuc #endif /* _VBOX_VMMDEV_H */
127