1
2
3
4
5
6
7
8#ifndef __VMW_VMCI_API_H__
9#define __VMW_VMCI_API_H__
10
11#include <linux/uidgid.h>
12#include <linux/vmw_vmci_defs.h>
13
14#undef VMCI_KERNEL_API_VERSION
15#define VMCI_KERNEL_API_VERSION_1 1
16#define VMCI_KERNEL_API_VERSION_2 2
17#define VMCI_KERNEL_API_VERSION VMCI_KERNEL_API_VERSION_2
18
19struct msghdr;
20typedef void (vmci_device_shutdown_fn) (void *device_registration,
21 void *user_data);
22
23int vmci_datagram_create_handle(u32 resource_id, u32 flags,
24 vmci_datagram_recv_cb recv_cb,
25 void *client_data,
26 struct vmci_handle *out_handle);
27int vmci_datagram_create_handle_priv(u32 resource_id, u32 flags, u32 priv_flags,
28 vmci_datagram_recv_cb recv_cb,
29 void *client_data,
30 struct vmci_handle *out_handle);
31int vmci_datagram_destroy_handle(struct vmci_handle handle);
32int vmci_datagram_send(struct vmci_datagram *msg);
33int vmci_doorbell_create(struct vmci_handle *handle, u32 flags,
34 u32 priv_flags,
35 vmci_callback notify_cb, void *client_data);
36int vmci_doorbell_destroy(struct vmci_handle handle);
37int vmci_doorbell_notify(struct vmci_handle handle, u32 priv_flags);
38u32 vmci_get_context_id(void);
39bool vmci_is_context_owner(u32 context_id, kuid_t uid);
40
41int vmci_event_subscribe(u32 event,
42 vmci_event_cb callback, void *callback_data,
43 u32 *subid);
44int vmci_event_unsubscribe(u32 subid);
45u32 vmci_context_get_priv_flags(u32 context_id);
46int vmci_qpair_alloc(struct vmci_qp **qpair,
47 struct vmci_handle *handle,
48 u64 produce_qsize,
49 u64 consume_qsize,
50 u32 peer, u32 flags, u32 priv_flags);
51int vmci_qpair_detach(struct vmci_qp **qpair);
52int vmci_qpair_get_produce_indexes(const struct vmci_qp *qpair,
53 u64 *producer_tail,
54 u64 *consumer_head);
55int vmci_qpair_get_consume_indexes(const struct vmci_qp *qpair,
56 u64 *consumer_tail,
57 u64 *producer_head);
58s64 vmci_qpair_produce_free_space(const struct vmci_qp *qpair);
59s64 vmci_qpair_produce_buf_ready(const struct vmci_qp *qpair);
60s64 vmci_qpair_consume_free_space(const struct vmci_qp *qpair);
61s64 vmci_qpair_consume_buf_ready(const struct vmci_qp *qpair);
62ssize_t vmci_qpair_enqueue(struct vmci_qp *qpair,
63 const void *buf, size_t buf_size, int mode);
64ssize_t vmci_qpair_dequeue(struct vmci_qp *qpair,
65 void *buf, size_t buf_size, int mode);
66ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size,
67 int mode);
68ssize_t vmci_qpair_enquev(struct vmci_qp *qpair,
69 struct msghdr *msg, size_t iov_size, int mode);
70ssize_t vmci_qpair_dequev(struct vmci_qp *qpair,
71 struct msghdr *msg, size_t iov_size, int mode);
72ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size,
73 int mode);
74
75#endif
76