NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_comch.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES, ALL RIGHTS RESERVED.
3  *
4  * This software product is a proprietary product of NVIDIA CORPORATION &
5  * AFFILIATES (the "Company") and all right, title, and interest in and to the
6  * software product, including all associated intellectual property rights, are
7  * and shall remain exclusively with the Company.
8  *
9  * This software product is governed by the End User License Agreement
10  * provided with the software product.
11  *
12  */
13 
25 #ifndef DOCA_COMCH_H_
26 #define DOCA_COMCH_H_
27 
28 #include <stddef.h>
29 #include <stdint.h>
30 
31 #include <doca_compat.h>
32 #include <doca_error.h>
33 #include <doca_types.h>
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 struct doca_dev;
40 struct doca_dev_rep;
41 struct doca_devinfo;
42 
43 /*********************************************************************************************************************
44  * DOCA Comch Connection
45  *********************************************************************************************************************/
46 
47 /* Representantion of a comms channel point to point connection */
48 struct doca_comch_connection;
49 
62 doca_error_t doca_comch_connection_set_user_data(struct doca_comch_connection *connection, union doca_data user_data);
63 
74 union doca_data doca_comch_connection_get_user_data(const struct doca_comch_connection *connection);
75 
87 struct doca_comch_server *doca_comch_server_get_server_ctx(const struct doca_comch_connection *connection);
88 
100 struct doca_comch_client *doca_comch_client_get_client_ctx(const struct doca_comch_connection *connection);
101 
102 /*********************************************************************************************************************
103  * DOCA Comch General Capabilities
104  *********************************************************************************************************************/
105 
120 doca_error_t doca_comch_cap_get_max_name_len(const struct doca_devinfo *devinfo, uint32_t *max_name_len);
121 
136 doca_error_t doca_comch_cap_get_max_msg_size(const struct doca_devinfo *devinfo, uint32_t *size);
137 
152 doca_error_t doca_comch_cap_get_max_recv_queue_size(const struct doca_devinfo *devinfo, uint32_t *size);
153 
168 doca_error_t doca_comch_cap_get_max_clients(const struct doca_devinfo *devinfo, uint32_t *num_clients);
169 
170 /*********************************************************************************************************************
171  * DOCA Comch server Context
172  *********************************************************************************************************************/
173 
174 /* DOCA Comch server end point instance */
175 struct doca_comch_server;
176 
199  struct doca_dev_rep *repr,
200  const char *name,
201  struct doca_comch_server **comch_server);
202 
216 doca_error_t doca_comch_server_destroy(struct doca_comch_server *comch_server);
217 
231 doca_error_t doca_comch_cap_server_is_supported(const struct doca_devinfo *devinfo);
232 
249 doca_error_t doca_comch_server_set_max_msg_size(struct doca_comch_server *comch_server, uint32_t size);
250 
266 doca_error_t doca_comch_server_get_max_msg_size(const struct doca_comch_server *comch_server, uint32_t *size);
267 
284 doca_error_t doca_comch_server_set_recv_queue_size(struct doca_comch_server *comch_server, uint32_t size);
285 
300 doca_error_t doca_comch_server_get_recv_queue_size(const struct doca_comch_server *comch_server, uint32_t *size);
301 
317 doca_error_t doca_comch_server_get_device(const struct doca_comch_server *comch_server, struct doca_dev **dev);
318 
334 doca_error_t doca_comch_server_get_device_rep(const struct doca_comch_server *comch_server, struct doca_dev_rep **rep);
335 
346 struct doca_ctx *doca_comch_server_as_ctx(struct doca_comch_server *comch_server);
347 
367 doca_error_t doca_comch_server_disconnect(struct doca_comch_server *comch_server,
368  struct doca_comch_connection *connection);
369 
370 /*********************************************************************************************************************
371  * DOCA Comch Client Context
372  *********************************************************************************************************************/
373 
374 /* DOCA Comch Client end point instance */
375 struct doca_comch_client;
376 
396 doca_error_t doca_comch_client_create(struct doca_dev *dev, const char *name, struct doca_comch_client **comch_client);
397 
411 doca_error_t doca_comch_client_destroy(struct doca_comch_client *comch_client);
412 
426 doca_error_t doca_comch_cap_client_is_supported(const struct doca_devinfo *devinfo);
427 
444 doca_error_t doca_comch_client_set_max_msg_size(struct doca_comch_client *comch_client, uint32_t size);
445 
461 doca_error_t doca_comch_client_get_max_msg_size(const struct doca_comch_client *comch_client, uint32_t *size);
462 
479 doca_error_t doca_comch_client_set_recv_queue_size(struct doca_comch_client *comch_client, uint32_t size);
480 
495 doca_error_t doca_comch_client_get_recv_queue_size(const struct doca_comch_client *comch_client, uint32_t *size);
496 
512 doca_error_t doca_comch_client_get_device(const struct doca_comch_client *comch_client, struct doca_dev **dev);
513 
524 struct doca_ctx *doca_comch_client_as_ctx(struct doca_comch_client *comch_client);
525 
541 doca_error_t doca_comch_client_get_connection(const struct doca_comch_client *comch_client,
542  struct doca_comch_connection **connection);
543 
544 /*********************************************************************************************************************
545  * DOCA Comch - Send Task
546  *********************************************************************************************************************/
547 
548 /* Task instance to send a message on the control channel */
549 struct doca_comch_task_send;
550 
563 typedef void (*doca_comch_task_send_completion_cb_t)(struct doca_comch_task_send *task,
564  union doca_data task_user_data,
565  union doca_data ctx_user_data);
566 
581 doca_error_t doca_comch_cap_get_max_send_tasks(const struct doca_devinfo *devinfo, uint32_t *max_send_tasks);
582 
602 doca_error_t doca_comch_server_task_send_set_conf(struct doca_comch_server *comch_server,
605  uint32_t num_send_tasks);
606 
626 doca_error_t doca_comch_client_task_send_set_conf(struct doca_comch_client *comch_client,
629  uint32_t num_send_tasks);
630 
652 doca_error_t doca_comch_server_task_send_alloc_init(struct doca_comch_server *comch_server,
653  struct doca_comch_connection *peer,
654  const void *msg,
655  uint32_t len,
656  struct doca_comch_task_send **task);
657 
679 doca_error_t doca_comch_client_task_send_alloc_init(struct doca_comch_client *comch_client,
680  struct doca_comch_connection *peer,
681  const void *msg,
682  uint32_t len,
683  struct doca_comch_task_send **task);
684 
695 struct doca_task *doca_comch_task_send_as_task(struct doca_comch_task_send *task);
696 
697 /*********************************************************************************************************************
698  * DOCA Comch - Receive Message Event Registration
699  *********************************************************************************************************************/
700 
701 /* Async event instance for receiving a message from a connected endpoint */
702 struct doca_comch_event_msg_recv;
703 
718 typedef void (*doca_comch_event_msg_recv_cb_t)(struct doca_comch_event_msg_recv *event,
719  uint8_t *recv_buffer,
720  uint32_t msg_len,
721  struct doca_comch_connection *comch_connection);
722 
738 doca_error_t doca_comch_server_event_msg_recv_register(struct doca_comch_server *comch_server,
739  doca_comch_event_msg_recv_cb_t recv_event_cb);
740 
756 doca_error_t doca_comch_client_event_msg_recv_register(struct doca_comch_client *comch_client,
757  doca_comch_event_msg_recv_cb_t recv_event_cb);
758 
759 /*********************************************************************************************************************
760  * DOCA Comch - Connection Event Registration
761  *********************************************************************************************************************/
762 
763 /* Async event instance for a connection status change */
764 struct doca_comch_event_connection_status_changed;
765 
778 typedef void (*doca_comch_event_connection_status_changed_cb_t)(struct doca_comch_event_connection_status_changed *event,
779  struct doca_comch_connection *comch_connection,
780  uint8_t change_successful);
781 
800  struct doca_comch_server *comch_server,
803 
804 /*********************************************************************************************************************
805  * DOCA Comch - Connection Statistics
806  *********************************************************************************************************************/
807 
810  DOCA_COMCH_COUNTER_SENT_MESSAGES = 1, /* total messages sent over a given comch_connection from local side. */
811  DOCA_COMCH_COUNTER_SENT_BYTES = 2, /* total bytes sent over a given comch_connection from local side. */
812  DOCA_COMCH_COUNTER_RECV_MESSAGES = 3, /* total messages received on local side over a given comch_connection. */
813  DOCA_COMCH_COUNTER_RECV_BYTES = 4, /* total bytes received on local side over a given comch_connection. */
814 };
815 
831 doca_error_t doca_comch_connection_update_info(struct doca_comch_connection *comch_connection);
832 
851 doca_error_t doca_comch_connection_get_counter(const struct doca_comch_connection *comch_connection,
852  enum doca_comch_counter counter_type,
853  uint64_t *counter_value);
854 
855 /*********************************************************************************************************************
856  * DOCA Comch - Consumer Event Registration
857  *********************************************************************************************************************/
858 
859 /* Async event instance for a consumer change*/
860 struct doca_comch_event_consumer;
861 
874 typedef void (*doca_comch_event_consumer_cb_t)(struct doca_comch_event_consumer *event,
875  struct doca_comch_connection *comch_connection,
876  uint32_t id);
877 
895 doca_error_t doca_comch_server_event_consumer_register(struct doca_comch_server *comch_server,
896  doca_comch_event_consumer_cb_t new_consumer_event_cb,
897  doca_comch_event_consumer_cb_t expired_consumer_event_cb);
898 
916 doca_error_t doca_comch_client_event_consumer_register(struct doca_comch_client *comch_client,
917  doca_comch_event_consumer_cb_t new_consumer_event_cb,
918  doca_comch_event_consumer_cb_t expired_consumer_event_cb);
919 
920 #ifdef __cplusplus
921 }
922 #endif
923 
926 #endif /* DOCA_COMCH_H_ */
static void task_error_cb(struct doca_task *se_task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: common_common.c:65
static void task_completion_cb(struct doca_task *se_task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: common_common.c:48
uint64_t len
DOCA_STABLE doca_error_t doca_comch_server_get_device(const struct doca_comch_server *comch_server, struct doca_dev **dev)
DOCA_STABLE doca_error_t doca_comch_client_get_recv_queue_size(const struct doca_comch_client *comch_client, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_client_set_max_msg_size(struct doca_comch_client *comch_client, uint32_t size)
DOCA_STABLE doca_error_t doca_comch_connection_update_info(struct doca_comch_connection *comch_connection)
update statistics for given comch_connection
DOCA_STABLE doca_error_t doca_comch_client_get_connection(const struct doca_comch_client *comch_client, struct doca_comch_connection **connection)
DOCA_STABLE struct doca_comch_server * doca_comch_server_get_server_ctx(const struct doca_comch_connection *connection)
DOCA_STABLE doca_error_t doca_comch_server_event_msg_recv_register(struct doca_comch_server *comch_server, doca_comch_event_msg_recv_cb_t recv_event_cb)
Configure the doca_comch recv event callback for server context.
DOCA_STABLE doca_error_t doca_comch_server_event_connection_status_changed_register(struct doca_comch_server *comch_server, doca_comch_event_connection_status_changed_cb_t connect_event_cb, doca_comch_event_connection_status_changed_cb_t disconnect_event_cb)
Configure the doca_comch recv event callback for server context.
DOCA_STABLE doca_error_t doca_comch_client_event_consumer_register(struct doca_comch_client *comch_client, doca_comch_event_consumer_cb_t new_consumer_event_cb, doca_comch_event_consumer_cb_t expired_consumer_event_cb)
Configure the doca_comch callback for for receiving consumer events on client context.
DOCA_STABLE doca_error_t doca_comch_connection_set_user_data(struct doca_comch_connection *connection, union doca_data user_data)
DOCA_STABLE union doca_data doca_comch_connection_get_user_data(const struct doca_comch_connection *connection)
DOCA_STABLE doca_error_t doca_comch_client_set_recv_queue_size(struct doca_comch_client *comch_client, uint32_t size)
DOCA_STABLE struct doca_ctx * doca_comch_client_as_ctx(struct doca_comch_client *comch_client)
DOCA_STABLE doca_error_t doca_comch_server_event_consumer_register(struct doca_comch_server *comch_server, doca_comch_event_consumer_cb_t new_consumer_event_cb, doca_comch_event_consumer_cb_t expired_consumer_event_cb)
Configure the doca_comch callback for for receiving consumer events on server context.
void(* doca_comch_event_consumer_cb_t)(struct doca_comch_event_consumer *event, struct doca_comch_connection *comch_connection, uint32_t id)
Definition: doca_comch.h:874
DOCA_STABLE doca_error_t doca_comch_client_task_send_alloc_init(struct doca_comch_client *comch_client, struct doca_comch_connection *peer, const void *msg, uint32_t len, struct doca_comch_task_send **task)
DOCA_STABLE doca_error_t doca_comch_cap_get_max_msg_size(const struct doca_devinfo *devinfo, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_server_destroy(struct doca_comch_server *comch_server)
DOCA_STABLE doca_error_t doca_comch_cap_client_is_supported(const struct doca_devinfo *devinfo)
DOCA_STABLE doca_error_t doca_comch_server_task_send_set_conf(struct doca_comch_server *comch_server, doca_comch_task_send_completion_cb_t task_completion_cb, doca_comch_task_send_completion_cb_t task_error_cb, uint32_t num_send_tasks)
DOCA_STABLE doca_error_t doca_comch_client_task_send_set_conf(struct doca_comch_client *comch_client, doca_comch_task_send_completion_cb_t task_completion_cb, doca_comch_task_send_completion_cb_t task_error_cb, uint32_t num_send_tasks)
DOCA_STABLE doca_error_t doca_comch_server_set_recv_queue_size(struct doca_comch_server *comch_server, uint32_t size)
DOCA_STABLE doca_error_t doca_comch_cap_get_max_name_len(const struct doca_devinfo *devinfo, uint32_t *max_name_len)
DOCA_STABLE doca_error_t doca_comch_client_event_msg_recv_register(struct doca_comch_client *comch_client, doca_comch_event_msg_recv_cb_t recv_event_cb)
Configure the doca_comch recv event callback for client context.
void(* doca_comch_event_msg_recv_cb_t)(struct doca_comch_event_msg_recv *event, uint8_t *recv_buffer, uint32_t msg_len, struct doca_comch_connection *comch_connection)
Definition: doca_comch.h:718
DOCA_STABLE doca_error_t doca_comch_server_get_max_msg_size(const struct doca_comch_server *comch_server, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_client_destroy(struct doca_comch_client *comch_client)
DOCA_STABLE doca_error_t doca_comch_client_get_device(const struct doca_comch_client *comch_client, struct doca_dev **dev)
DOCA_STABLE doca_error_t doca_comch_server_create(struct doca_dev *dev, struct doca_dev_rep *repr, const char *name, struct doca_comch_server **comch_server)
void(* doca_comch_task_send_completion_cb_t)(struct doca_comch_task_send *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: doca_comch.h:563
DOCA_STABLE struct doca_task * doca_comch_task_send_as_task(struct doca_comch_task_send *task)
DOCA_STABLE doca_error_t doca_comch_cap_get_max_recv_queue_size(const struct doca_devinfo *devinfo, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_server_get_recv_queue_size(const struct doca_comch_server *comch_server, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_server_set_max_msg_size(struct doca_comch_server *comch_server, uint32_t size)
doca_comch_counter
Definition: doca_comch.h:809
DOCA_STABLE struct doca_comch_client * doca_comch_client_get_client_ctx(const struct doca_comch_connection *connection)
DOCA_STABLE doca_error_t doca_comch_client_get_max_msg_size(const struct doca_comch_client *comch_client, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_cap_server_is_supported(const struct doca_devinfo *devinfo)
DOCA_STABLE doca_error_t doca_comch_connection_get_counter(const struct doca_comch_connection *comch_connection, enum doca_comch_counter counter_type, uint64_t *counter_value)
get statistics counter for a given comch_connection
DOCA_STABLE doca_error_t doca_comch_client_create(struct doca_dev *dev, const char *name, struct doca_comch_client **comch_client)
DOCA_STABLE doca_error_t doca_comch_server_task_send_alloc_init(struct doca_comch_server *comch_server, struct doca_comch_connection *peer, const void *msg, uint32_t len, struct doca_comch_task_send **task)
DOCA_STABLE doca_error_t doca_comch_cap_get_max_clients(const struct doca_devinfo *devinfo, uint32_t *num_clients)
DOCA_STABLE doca_error_t doca_comch_cap_get_max_send_tasks(const struct doca_devinfo *devinfo, uint32_t *max_send_tasks)
DOCA_STABLE doca_error_t doca_comch_server_get_device_rep(const struct doca_comch_server *comch_server, struct doca_dev_rep **rep)
void(* doca_comch_event_connection_status_changed_cb_t)(struct doca_comch_event_connection_status_changed *event, struct doca_comch_connection *comch_connection, uint8_t change_successful)
Definition: doca_comch.h:778
DOCA_STABLE struct doca_ctx * doca_comch_server_as_ctx(struct doca_comch_server *comch_server)
DOCA_STABLE doca_error_t doca_comch_server_disconnect(struct doca_comch_server *comch_server, struct doca_comch_connection *connection)
@ DOCA_COMCH_COUNTER_SENT_BYTES
Definition: doca_comch.h:811
@ DOCA_COMCH_COUNTER_RECV_MESSAGES
Definition: doca_comch.h:812
@ DOCA_COMCH_COUNTER_RECV_BYTES
Definition: doca_comch.h:813
@ DOCA_COMCH_COUNTER_SENT_MESSAGES
Definition: doca_comch.h:810
#define DOCA_STABLE
To set a Symbol (or specifically a function) as stable API, i.e. it won't be changed.
Definition: doca_compat.h:96
enum doca_error doca_error_t
DOCA API return codes.
Convenience type for representing opaque data.
Definition: doca_types.h:56