minix/drivers/vbox/vmmdev.h
David van Moolenbroek 6aa61efd09 VBOX: add host/guest communication interface
This interface can be used by other system processes by means of the
newly provided vbox API in libsys.
2012-04-09 15:56:20 +02:00

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 */