NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_comch_consumer.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 
28 #ifndef DOCA_COMCH_CONSUMER_H_
29 #define DOCA_COMCH_CONSUMER_H_
30 
31 #include <stddef.h>
32 #include <stdint.h>
33 
34 #include <doca_compat.h>
35 #include <doca_error.h>
36 #include <doca_types.h>
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 struct doca_buf;
43 struct doca_dev;
44 struct doca_devinfo;
45 struct doca_mmap;
46 struct doca_dpa_thread;
47 
48 /* Representantion of a comms channel point to point connection */
49 struct doca_comch_connection;
50 
51 /* Instance of a doca_comch consumer */
52 struct doca_comch_consumer;
53 
54 /* Opaque structure representing DPA consumer completion context */
55 struct doca_comch_consumer_completion;
56 
61 
66 
67 /*********************************************************************************************************************
68  * Consumer Creation
69  *********************************************************************************************************************/
70 
90 doca_error_t doca_comch_consumer_create(struct doca_comch_connection *comch_connection,
91  struct doca_mmap *buf_mmap,
92  struct doca_comch_consumer **consumer);
93 
107 doca_error_t doca_comch_consumer_destroy(struct doca_comch_consumer *consumer);
108 
122 doca_error_t doca_comch_consumer_cap_is_supported(const struct doca_devinfo *devinfo);
123 
138 doca_error_t doca_comch_consumer_get_id(const struct doca_comch_consumer *consumer, uint32_t *id);
139 
154 doca_error_t doca_comch_consumer_cap_get_max_num_tasks(const struct doca_devinfo *devinfo, uint32_t *max_num_tasks);
155 
171 doca_error_t doca_comch_consumer_cap_get_max_buf_size(const struct doca_devinfo *devinfo, uint32_t *max_buf_size);
172 
189  uint32_t *max_buf_list_len);
190 
205 doca_error_t doca_comch_consumer_cap_get_max_consumers(const struct doca_devinfo *devinfo, uint32_t *max_consumers);
206 
222  uint32_t *max_imm_data_len);
223 
238 doca_error_t doca_comch_consumer_get_imm_data_len(const struct doca_comch_consumer *consumer, uint32_t *imm_data_len);
239 
257 doca_error_t doca_comch_consumer_set_imm_data_len(struct doca_comch_consumer *consumer, uint32_t imm_data_len);
258 
269 struct doca_ctx *doca_comch_consumer_as_ctx(struct doca_comch_consumer *consumer);
270 
271 /*********************************************************************************************************************
272  * Consumer Creation on DPA
273  *********************************************************************************************************************/
274 
286 doca_error_t doca_comch_consumer_completion_create(struct doca_comch_consumer_completion **consumer_comp);
287 
303 doca_error_t doca_comch_consumer_completion_set_dpa_thread(struct doca_comch_consumer_completion *consumer_comp,
304  struct doca_dpa_thread *dpa_thread);
305 
319 doca_error_t doca_comch_consumer_completion_destroy(struct doca_comch_consumer_completion *consumer_comp);
320 
340 doca_error_t doca_comch_consumer_completion_start(struct doca_comch_consumer_completion *consumer_comp);
341 
363 doca_error_t doca_comch_consumer_completion_stop(struct doca_comch_consumer_completion *consumer_comp);
364 
379  struct doca_comch_consumer_completion *consumer_comp,
380  doca_dpa_dev_comch_consumer_completion_t *consumer_comp_handle);
381 
395 doca_error_t doca_comch_consumer_completion_set_max_num_consumers(struct doca_comch_consumer_completion *consumer_comp,
396  uint32_t max_num_consumers);
397 
412  const struct doca_comch_consumer_completion *consumer_comp,
413  uint32_t *max_num_consumers);
414 
428 doca_error_t doca_comch_consumer_completion_set_max_num_recv(struct doca_comch_consumer_completion *consumer_comp,
429  uint32_t max_num_recv);
430 
444 doca_error_t doca_comch_consumer_completion_get_max_num_recv(const struct doca_comch_consumer_completion *consumer_comp,
445  uint32_t *max_num_recv);
446 
464 doca_error_t doca_comch_consumer_completion_set_imm_data_len(struct doca_comch_consumer_completion *consumer_comp,
465  uint32_t imm_data_len);
466 
481 doca_error_t doca_comch_consumer_completion_get_imm_data_len(const struct doca_comch_consumer_completion *consumer_comp,
482  uint32_t *imm_data_len);
483 
497 doca_error_t doca_comch_consumer_set_dev_max_num_recv(struct doca_comch_consumer *consumer, uint32_t dev_num_recv);
498 
516 doca_error_t doca_comch_consumer_set_completion(struct doca_comch_consumer *consumer,
517  struct doca_comch_consumer_completion *consumer_comp,
518  uint32_t user_data);
519 
535 doca_error_t doca_comch_consumer_get_dpa_handle(struct doca_comch_consumer *consumer,
537 
538 /*********************************************************************************************************************
539  * Consumer Post Receive Task
540  *********************************************************************************************************************/
541 
542 /* Task instance for consumer to do a post receive */
543 struct doca_comch_consumer_task_post_recv;
544 
557 typedef void (*doca_comch_consumer_task_post_recv_completion_cb_t)(struct doca_comch_consumer_task_post_recv *task,
558  union doca_data task_user_data,
559  union doca_data ctx_user_data);
560 
582  struct doca_comch_consumer *consumer,
585  uint32_t num_post_recv_tasks);
586 
607 doca_error_t doca_comch_consumer_task_post_recv_alloc_init(struct doca_comch_consumer *consumer,
608  struct doca_buf *buf,
609  struct doca_comch_consumer_task_post_recv **task);
610 
621 struct doca_buf *doca_comch_consumer_task_post_recv_get_buf(const struct doca_comch_consumer_task_post_recv *task);
622 
632 void doca_comch_consumer_task_post_recv_set_buf(struct doca_comch_consumer_task_post_recv *task, struct doca_buf *buf);
633 
647 uint32_t doca_comch_consumer_task_post_recv_get_producer_id(const struct doca_comch_consumer_task_post_recv *task);
648 
662 const uint8_t *doca_comch_consumer_task_post_recv_get_imm_data(const struct doca_comch_consumer_task_post_recv *task);
663 
677 uint32_t doca_comch_consumer_task_post_recv_get_imm_data_len(const struct doca_comch_consumer_task_post_recv *task);
678 
689 struct doca_task *doca_comch_consumer_task_post_recv_as_task(struct doca_comch_consumer_task_post_recv *task);
690 
691 #ifdef __cplusplus
692 }
693 #endif
694 
697 #endif /* DOCA_COMCH_CONSUMER_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 dpa_consumer
DOCA_STABLE doca_error_t doca_comch_consumer_set_imm_data_len(struct doca_comch_consumer *consumer, uint32_t imm_data_len)
DOCA_STABLE struct doca_buf * doca_comch_consumer_task_post_recv_get_buf(const struct doca_comch_consumer_task_post_recv *task)
void(* doca_comch_consumer_task_post_recv_completion_cb_t)(struct doca_comch_consumer_task_post_recv *task, union doca_data task_user_data, union doca_data ctx_user_data)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_create(struct doca_comch_consumer_completion **consumer_comp)
Allocate DOCA Comch consumer completion context on DPA.
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_set_completion(struct doca_comch_consumer *consumer, struct doca_comch_consumer_completion *consumer_comp, uint32_t user_data)
Associate consumer with DPA completion context.
uint64_t doca_dpa_dev_comch_consumer_completion_t
DPA handle for DPA consumer completion context.
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_get_max_num_consumers(const struct doca_comch_consumer_completion *consumer_comp, uint32_t *max_num_consumers)
Get the maximal number of consumers that can be associated with the completion context.
DOCA_STABLE void doca_comch_consumer_task_post_recv_set_buf(struct doca_comch_consumer_task_post_recv *task, struct doca_buf *buf)
DOCA_STABLE doca_error_t doca_comch_consumer_get_id(const struct doca_comch_consumer *consumer, uint32_t *id)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_stop(struct doca_comch_consumer_completion *consumer_comp)
Stop DOCA Comch consumer completion context.
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_set_max_num_recv(struct doca_comch_consumer_completion *consumer_comp, uint32_t max_num_recv)
Set the maximal number of receive operations across all consumers associated with the completion cont...
DOCA_STABLE doca_error_t doca_comch_consumer_create(struct doca_comch_connection *comch_connection, struct doca_mmap *buf_mmap, struct doca_comch_consumer **consumer)
uint64_t doca_dpa_dev_comch_consumer_t
DPA handle for DPA consumer.
DOCA_STABLE doca_error_t doca_comch_consumer_destroy(struct doca_comch_consumer *consumer)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_get_dpa_handle(struct doca_comch_consumer *consumer, doca_dpa_dev_comch_consumer_t *dpa_consumer)
Retrieve the handle in the dpa memory space of a doca_comch_consumer.
DOCA_STABLE uint32_t doca_comch_consumer_task_post_recv_get_producer_id(const struct doca_comch_consumer_task_post_recv *task)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_get_max_num_recv(const struct doca_comch_consumer_completion *consumer_comp, uint32_t *max_num_recv)
Get the maximal number of receive operations across all consumers associated with the completion cont...
DOCA_STABLE doca_error_t doca_comch_consumer_cap_get_max_consumers(const struct doca_devinfo *devinfo, uint32_t *max_consumers)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_get_dpa_handle(struct doca_comch_consumer_completion *consumer_comp, doca_dpa_dev_comch_consumer_completion_t *consumer_comp_handle)
Get the DPA handle for the DOCA Comch consumer completion context.
DOCA_STABLE doca_error_t doca_comch_consumer_task_post_recv_set_conf(struct doca_comch_consumer *consumer, doca_comch_consumer_task_post_recv_completion_cb_t task_completion_cb, doca_comch_consumer_task_post_recv_completion_cb_t task_error_cb, uint32_t num_post_recv_tasks)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_destroy(struct doca_comch_consumer_completion *consumer_comp)
Destroy the DOCA Comch consumer completion context.
DOCA_STABLE doca_error_t doca_comch_consumer_cap_get_max_imm_data_len(const struct doca_devinfo *devinfo, uint32_t *max_imm_data_len)
DOCA_STABLE uint32_t doca_comch_consumer_task_post_recv_get_imm_data_len(const struct doca_comch_consumer_task_post_recv *task)
DOCA_STABLE const uint8_t * doca_comch_consumer_task_post_recv_get_imm_data(const struct doca_comch_consumer_task_post_recv *task)
DOCA_STABLE doca_error_t doca_comch_consumer_get_imm_data_len(const struct doca_comch_consumer *consumer, uint32_t *imm_data_len)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_set_max_num_consumers(struct doca_comch_consumer_completion *consumer_comp, uint32_t max_num_consumers)
Set the maximal number of consumers that can be associated with the completion context.
DOCA_STABLE doca_error_t doca_comch_consumer_cap_get_max_buf_list_len(const struct doca_devinfo *devinfo, uint32_t *max_buf_list_len)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_get_imm_data_len(const struct doca_comch_consumer_completion *consumer_comp, uint32_t *imm_data_len)
DOCA_STABLE doca_error_t doca_comch_consumer_cap_get_max_num_tasks(const struct doca_devinfo *devinfo, uint32_t *max_num_tasks)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_set_dev_max_num_recv(struct doca_comch_consumer *consumer, uint32_t dev_num_recv)
Set the maximal number of receive operations for a DPA consumer.
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_set_imm_data_len(struct doca_comch_consumer_completion *consumer_comp, uint32_t imm_data_len)
DOCA_STABLE doca_error_t doca_comch_consumer_task_post_recv_alloc_init(struct doca_comch_consumer *consumer, struct doca_buf *buf, struct doca_comch_consumer_task_post_recv **task)
Allocate and initialize a doca_consumer post receive task.
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_set_dpa_thread(struct doca_comch_consumer_completion *consumer_comp, struct doca_dpa_thread *dpa_thread)
Set the DOCA DPA thread of the completion context.
DOCA_STABLE doca_error_t doca_comch_consumer_cap_is_supported(const struct doca_devinfo *devinfo)
DOCA_STABLE struct doca_ctx * doca_comch_consumer_as_ctx(struct doca_comch_consumer *consumer)
DOCA_STABLE struct doca_task * doca_comch_consumer_task_post_recv_as_task(struct doca_comch_consumer_task_post_recv *task)
DOCA_EXPERIMENTAL doca_error_t doca_comch_consumer_completion_start(struct doca_comch_consumer_completion *consumer_comp)
Start DOCA Comch consumer completion context.
DOCA_STABLE doca_error_t doca_comch_consumer_cap_get_max_buf_size(const struct doca_devinfo *devinfo, uint32_t *max_buf_size)
#define DOCA_EXPERIMENTAL
To set a Symbol (or specifically a function) as experimental.
Definition: doca_compat.h:103
#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