31
31
#include "includeCheck.h"
34
/* Macros to operate on the driver version number. */
35
#define VMCI_MAJOR_VERSION(v) (((v) >> 16) & 0xffff)
36
#define VMCI_MINOR_VERSION(v) ((v) & 0xffff)
38
#include "vmci_defs.h"
39
#include "vmci_call_defs.h"
42
/* PUBLIC: VMCI Device Usage API. */
44
Bool VMCI_DeviceGet(void);
45
void VMCI_DeviceRelease(void);
47
/* PUBLIC: VMCI Datagram API. */
49
int VMCIDatagram_CreateHnd(VMCIId resourceID, uint32 flags,
50
VMCIDatagramRecvCB recvCB, void *clientData,
51
VMCIHandle *outHandle);
52
int VMCIDatagram_CreateHndPriv(VMCIId resourceID, uint32 flags,
53
VMCIPrivilegeFlags privFlags,
54
VMCIDatagramRecvCB recvCB, void *clientData,
55
VMCIHandle *outHandle);
56
int VMCIDatagram_DestroyHnd(VMCIHandle handle);
57
int VMCIDatagram_Send(VMCIDatagram *msg);
59
/* VMCI Utility API. */
61
VMCIId VMCI_GetContextID(void);
62
uint32 VMCI_Version(void);
63
int VMCI_ContextID2HostVmID(VMCIId contextID, void *hostVmID,
68
typedef void (*VMCI_EventCB)(VMCIId subID, VMCI_EventData *ed,
71
int VMCIEvent_Subscribe(VMCI_Event event, uint32 flags, VMCI_EventCB callback,
72
void *callbackData, VMCIId *subID);
73
int VMCIEvent_Unsubscribe(VMCIId subID);
75
/* VMCI Context API */
77
VMCIPrivilegeFlags VMCIContext_GetPrivFlags(VMCIId contextID);
79
/* VMCI Discovery Service API. */
81
int VMCIDs_Lookup(const char *name, VMCIHandle *out);
83
/* VMCI Doorbell API. */
85
#define VMCI_FLAG_DELAYED_CB 0x01
87
typedef void (*VMCICallback)(void *clientData);
89
int VMCIDoorbell_Create(VMCIHandle *handle, uint32 flags,
90
VMCIPrivilegeFlags privFlags,
91
VMCICallback notifyCB, void *clientData);
92
int VMCIDoorbell_Destroy(VMCIHandle handle);
93
int VMCIDoorbell_Notify(VMCIHandle handle,
94
VMCIPrivilegeFlags privFlags);
96
/* VMCI Queue Pair API. */
98
typedef struct VMCIQPair VMCIQPair;
100
int VMCIQPair_Alloc(VMCIQPair **qpair,
106
VMCIPrivilegeFlags privFlags);
108
void VMCIQPair_Detach(VMCIQPair **qpair);
110
void VMCIQPair_Init(VMCIQPair *qpair);
111
void VMCIQPair_GetProduceIndexes(const VMCIQPair *qpair,
112
uint64 *producerTail,
113
uint64 *consumerHead);
114
void VMCIQPair_GetConsumeIndexes(const VMCIQPair *qpair,
115
uint64 *consumerTail,
116
uint64 *producerHead);
117
int64 VMCIQPair_ProduceFreeSpace(const VMCIQPair *qpair);
118
int64 VMCIQPair_ProduceBufReady(const VMCIQPair *qpair);
119
int64 VMCIQPair_ConsumeFreeSpace(const VMCIQPair *qpair);
120
int64 VMCIQPair_ConsumeBufReady(const VMCIQPair *qpair);
121
ssize_t VMCIQPair_Enqueue(VMCIQPair *qpair,
125
ssize_t VMCIQPair_Dequeue(VMCIQPair *qpair,
129
ssize_t VMCIQPair_Peek(VMCIQPair *qpair,
134
#if defined (SOLARIS) || (defined(__APPLE__) && !defined (VMX86_TOOLS)) || \
135
(defined(__linux__) && defined(__KERNEL__))
137
* Environments that support struct iovec
140
ssize_t VMCIQPair_EnqueueV(VMCIQPair *qpair,
144
ssize_t VMCIQPair_DequeueV(VMCIQPair *qpair,
148
ssize_t VMCIQPair_PeekV(VMCIQPair *qpair,
152
#endif /* Systems that support struct iovec */
34
/* With this file you always get the latest version. */
35
#include "vmciKernelAPI1.h"
36
#include "vmciKernelAPI2.h"
154
39
#endif /* !__VMCI_KERNELAPI_H__ */