This interface can be used by other system processes by means of the newly provided vbox API in libsys.
126 lines
2.6 KiB
C
126 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 */
|