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