163a93856SMark Peek /*- 2*3eeb7511SMark Peek * Copyright (c) 2018 VMware, Inc. 363a93856SMark Peek * 48c302b2eSMark Peek * SPDX-License-Identifier: (BSD-2-Clause OR GPL-2.0) 563a93856SMark Peek */ 663a93856SMark Peek 763a93856SMark Peek /* Kernel API (v1) exported from the VMCI guest driver. */ 863a93856SMark Peek 963a93856SMark Peek #ifndef _VMCI_KERNEL_API_1_H_ 1063a93856SMark Peek #define _VMCI_KERNEL_API_1_H_ 1163a93856SMark Peek 1263a93856SMark Peek #include "vmci_call_defs.h" 1363a93856SMark Peek #include "vmci_defs.h" 1463a93856SMark Peek 1563a93856SMark Peek /* Define version 1. */ 1663a93856SMark Peek #undef VMCI_KERNEL_API_VERSION 1763a93856SMark Peek #define VMCI_KERNEL_API_VERSION_1 1 1863a93856SMark Peek #define VMCI_KERNEL_API_VERSION VMCI_KERNEL_API_VERSION_1 1963a93856SMark Peek 2063a93856SMark Peek /* VMCI Datagram API. */ 2163a93856SMark Peek int vmci_datagram_create_handle(uint32_t resource_id, uint32_t flags, 2263a93856SMark Peek vmci_datagram_recv_cb recv_cb, void *client_data, 2363a93856SMark Peek struct vmci_handle *out_handle); 2463a93856SMark Peek int vmci_datagram_create_handle_priv(uint32_t resource_id, uint32_t flags, 2563a93856SMark Peek vmci_privilege_flags priv_flags, vmci_datagram_recv_cb recv_cb, 2663a93856SMark Peek void *client_data, struct vmci_handle *out_handle); 2763a93856SMark Peek int vmci_datagram_destroy_handle(struct vmci_handle handle); 2863a93856SMark Peek int vmci_datagram_send(struct vmci_datagram *msg); 2963a93856SMark Peek 3063a93856SMark Peek /* VMCI Utility API. */ 3163a93856SMark Peek vmci_id vmci_get_context_id(void); 3263a93856SMark Peek 3363a93856SMark Peek /* VMCI Event API. */ 3463a93856SMark Peek typedef void (*vmci_event_cb)(vmci_id sub_id, struct vmci_event_data *ed, 3563a93856SMark Peek void *client_data); 3663a93856SMark Peek 3763a93856SMark Peek int vmci_event_subscribe(vmci_event_type event, vmci_event_cb callback, 3863a93856SMark Peek void *callback_data, vmci_id *sub_id); 3963a93856SMark Peek int vmci_event_unsubscribe(vmci_id sub_id); 4063a93856SMark Peek 4163a93856SMark Peek /* VMCI Queue Pair API. */ 4263a93856SMark Peek struct vmci_qpair; 4363a93856SMark Peek 4463a93856SMark Peek int vmci_qpair_alloc(struct vmci_qpair **qpair, struct vmci_handle *handle, 4563a93856SMark Peek uint64_t produce_q_size, uint64_t consume_q_size, vmci_id peer, 4663a93856SMark Peek uint32_t flags, vmci_privilege_flags priv_flags); 4763a93856SMark Peek int vmci_qpair_detach(struct vmci_qpair **qpair); 4863a93856SMark Peek int vmci_qpair_get_produce_indexes(const struct vmci_qpair *qpair, 4963a93856SMark Peek uint64_t *producer_tail, uint64_t *consumer_head); 5063a93856SMark Peek int vmci_qpair_get_consume_indexes(const struct vmci_qpair *qpair, 5163a93856SMark Peek uint64_t *consumer_tail, uint64_t *producer_head); 5263a93856SMark Peek int64_t vmci_qpair_produce_free_space(const struct vmci_qpair *qpair); 5363a93856SMark Peek int64_t vmci_qpair_produce_buf_ready(const struct vmci_qpair *qpair); 5463a93856SMark Peek int64_t vmci_qpair_consume_free_space(const struct vmci_qpair *qpair); 5563a93856SMark Peek int64_t vmci_qpair_consume_buf_ready(const struct vmci_qpair *qpair); 5663a93856SMark Peek ssize_t vmci_qpair_enqueue(struct vmci_qpair *qpair, const void *buf, 5763a93856SMark Peek size_t buf_size, int mode); 5863a93856SMark Peek ssize_t vmci_qpair_dequeue(struct vmci_qpair *qpair, void *buf, 5963a93856SMark Peek size_t buf_size, int mode); 6063a93856SMark Peek ssize_t vmci_qpair_peek(struct vmci_qpair *qpair, void *buf, 6163a93856SMark Peek size_t buf_size, int mode); 6263a93856SMark Peek ssize_t vmci_qpair_enquev(struct vmci_qpair *qpair, void *iov, size_t iov_size, 6363a93856SMark Peek int mode); 6463a93856SMark Peek ssize_t vmci_qpair_dequev(struct vmci_qpair *qpair, void *iov, size_t iov_size, 6563a93856SMark Peek int mode); 6663a93856SMark Peek ssize_t vmci_qpair_peekv(struct vmci_qpair *qpair, void *iov, size_t iov_size, 6763a93856SMark Peek int mode); 6863a93856SMark Peek 6963a93856SMark Peek #endif /* !_VMCI_KERNEL_API_1_H_ */ 70