xref: /freebsd/sys/dev/vmware/vmci/vmci_kernel_api_1.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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