 6aa61efd09
			
		
	
	
		6aa61efd09
		
	
	
	
	
		
			
			This interface can be used by other system processes by means of the newly provided vbox API in libsys.
		
			
				
	
	
		
			127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _VBOX_VMMDEV_H
 | |
| #define _VBOX_VMMDEV_H
 | |
| 
 | |
| #define VMMDEV_PCI_VID 0x80ee
 | |
| #define VMMDEV_PCI_DID 0xcafe
 | |
| 
 | |
| #define VMMDEV_REQ_HOSTTIME		10
 | |
| #define VMMDEV_REQ_ACKNOWLEDGEEVENTS	41
 | |
| #define VMMDEV_REQ_REPORTGUESTINFO	50
 | |
| #define VMMDEV_REQ_HGCMCONNECT		60
 | |
| #define VMMDEV_REQ_HGCMDISCONNECT	61
 | |
| #define VMMDEV_REQ_HGCMCALL		62
 | |
| #define VMMDEV_REQ_HGCMCANCEL		64
 | |
| 
 | |
| #define VMMDEV_ERR_OK			0		/* success */
 | |
| #define VMMDEV_ERR_GENERIC		(-1)		/* general failure */
 | |
| #define VMMDEV_ERR_HGCM_NOT_FOUND	(-2900)		/* service not found */
 | |
| #define VMMDEV_ERR_HGCM_DENIED		2901		/* client rejected */
 | |
| #define VMMDEV_ERR_HGCM_INVALID_ADDR	(-2902)		/* invalid address */
 | |
| #define VMMDEV_ERR_HGCM_ASYNC_EXEC	2903		/* call in progress */
 | |
| #define VMMDEV_ERR_HGCM_INTERNAL	(-2904)		/* internal error */
 | |
| #define VMMDEV_ERR_HGCM_INVALID_ID	(-2905)		/* invalid client ID */
 | |
| 
 | |
| #define VMMDEV_MAKEWORD(m,n)	(((m) << 16) | (n))
 | |
| 
 | |
| #define VMMDEV_BACKDOOR_VERSION	VMMDEV_MAKEWORD(1, 1)
 | |
| #define VMMDEV_GUEST_VERSION	VMMDEV_MAKEWORD(1, 4)
 | |
| #define VMMDEV_GUEST_OS_OTHER	0x90000		/* this is L4 - close enough */
 | |
| 
 | |
| struct VMMDevRequestHeader {
 | |
| 	u32_t size;
 | |
| 	u32_t version;
 | |
| 	u32_t type;
 | |
| 	i32_t result;
 | |
| 	u32_t reserved[2];
 | |
| };
 | |
| 
 | |
| struct VMMDevReportGuestInfo {
 | |
| 	struct VMMDevRequestHeader header;
 | |
| 	u32_t add_version;
 | |
| 	u32_t os_type;
 | |
| };
 | |
| 
 | |
| struct VMMDevReqHostTime {
 | |
| 	struct VMMDevRequestHeader header;
 | |
| 	u64_t time;
 | |
| };
 | |
| 
 | |
| #define VMMDEV_EVENT_HGCM	(1 << 1)
 | |
| 
 | |
| struct VMMDevEvents {
 | |
| 	struct VMMDevRequestHeader header;
 | |
| 	u32_t events;
 | |
| };
 | |
| 
 | |
| #define VMMDEV_HGCM_REQ_DONE	(1 << 0)
 | |
| 
 | |
| struct VMMDevHGCMHeader {
 | |
| 	struct VMMDevRequestHeader header;
 | |
| 	u32_t flags;
 | |
| 	i32_t result;
 | |
| };
 | |
| 
 | |
| #define VMMDEV_HGCM_SVCLOC_LOCALHOST_EXISTING 2
 | |
| 
 | |
| #define VMMDEV_HGCM_NAME_SIZE 128
 | |
| 
 | |
| struct VMMDevHGCMConnect {
 | |
| 	struct VMMDevHGCMHeader header;
 | |
| 	u32_t type;
 | |
| 	char name[VMMDEV_HGCM_NAME_SIZE];
 | |
| 	u32_t client_id;
 | |
| };
 | |
| 
 | |
| struct VMMDevHGCMDisconnect {
 | |
| 	struct VMMDevHGCMHeader header;
 | |
| 	u32_t client_id;
 | |
| };
 | |
| 
 | |
| #define VMMDEV_HGCM_FLAG_TO_HOST	0x01
 | |
| #define VMMDEV_HGCM_FLAG_FROM_HOST	0x02
 | |
| 
 | |
| struct VMMDevHGCMPageList {
 | |
| 	u32_t flags;
 | |
| 	u16_t offset;
 | |
| 	u16_t count;
 | |
| 	u64_t addr[1];
 | |
| };
 | |
| 
 | |
| #define VMMDEV_HGCM_PARAM_U32		1
 | |
| #define VMMDEV_HGCM_PARAM_U64		2
 | |
| #define VMMDEV_HGCM_PARAM_PAGELIST	10
 | |
| 
 | |
| struct VMMDevHGCMParam {
 | |
| 	u32_t type;
 | |
| 	union {
 | |
| 		u32_t u32;
 | |
| 		u64_t u64;
 | |
| 		struct {
 | |
| 			u32_t size;
 | |
| 			union {
 | |
| 				u32_t phys;
 | |
| 				void *vir;
 | |
| 			} addr;
 | |
| 		} ptr;
 | |
| 		struct {
 | |
| 			u32_t size;
 | |
| 			u32_t offset;
 | |
| 		} pagelist;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| struct VMMDevHGCMCall {
 | |
| 	struct VMMDevHGCMHeader header;
 | |
| 	u32_t client_id;
 | |
| 	u32_t function;
 | |
| 	u32_t count;
 | |
| };
 | |
| 
 | |
| struct VMMDevHGCMCancel {
 | |
| 	struct VMMDevHGCMHeader header;
 | |
| };
 | |
| 
 | |
| #define VMMDEV_BUF_SIZE		4096		/* just one page */
 | |
| 
 | |
| #endif /* _VBOX_VMMDEV_H */
 |