NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_eth_txq_cpu_data_path.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 
23 #ifndef DOCA_ETH_TXQ_CPU_DATA_PATH_H_
24 #define DOCA_ETH_TXQ_CPU_DATA_PATH_H_
25 
26 #include <doca_compat.h>
27 #include <doca_error.h>
28 #include <doca_pe.h>
29 #include <doca_types.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 /**********************************************************************************************************************
36  * DOCA core opaque types
37  *********************************************************************************************************************/
38 
39 struct doca_buf;
40 struct doca_task_batch;
41 
45 struct doca_eth_txq;
46 
50 struct doca_eth_txq_task_send;
51 struct doca_eth_txq_task_lso_send;
59 };
60 
86 typedef void (*doca_eth_txq_task_send_completion_cb_t)(struct doca_eth_txq_task_send *task_send,
87  union doca_data task_user_data,
88  union doca_data ctx_user_data);
89 
101 typedef void (*doca_eth_txq_task_lso_send_completion_cb_t)(struct doca_eth_txq_task_lso_send *task_lso_send,
102  union doca_data task_user_data,
103  union doca_data ctx_user_data);
104 
129 typedef void (*doca_eth_txq_task_batch_send_completion_cb_t)(struct doca_task_batch *task_batch,
130  uint16_t tasks_num,
131  union doca_data ctx_user_data,
132  union doca_data task_batch_user_data,
133  union doca_data *task_user_data_array,
134  struct doca_buf **pkt_array,
135  doca_error_t *status_array);
136 
163 typedef void (*doca_eth_txq_task_batch_lso_send_completion_cb_t)(struct doca_task_batch *task_batch,
164  uint16_t tasks_num,
165  union doca_data ctx_user_data,
166  union doca_data task_batch_user_data,
167  union doca_data *task_user_data_array,
168  struct doca_buf **pkt_payload_array,
169  struct doca_gather_list **headers_array,
170  doca_error_t *status_array);
171 
193 doca_error_t doca_eth_txq_task_send_set_conf(struct doca_eth_txq *eth_txq,
196  uint32_t task_send_num);
197 
222  uint32_t task_lso_send_num);
223 
248  enum doca_task_batch_max_tasks_number max_tasks_number,
249  uint16_t num_task_batches,
250  doca_eth_txq_task_batch_send_completion_cb_t success_completion_cb,
252 
277  struct doca_eth_txq *eth_txq,
278  enum doca_task_batch_max_tasks_number max_tasks_number,
279  uint16_t num_task_batches,
282 
302 doca_error_t doca_eth_txq_task_send_num_expand(struct doca_eth_txq *eth_txq, uint32_t task_send_num);
303 
323 doca_error_t doca_eth_txq_task_lso_send_num_expand(struct doca_eth_txq *eth_txq, uint32_t task_lso_send_num);
324 
344 doca_error_t doca_eth_txq_task_batch_send_num_expand(struct doca_eth_txq *eth_txq, uint16_t task_batches_num);
345 
365 doca_error_t doca_eth_txq_task_batch_lso_send_num_expand(struct doca_eth_txq *eth_txq, uint16_t task_batches_num);
366 
392  struct doca_buf *pkt,
393  union doca_data user_data,
394  struct doca_eth_txq_task_send **task_send);
395 
423  struct doca_buf *pkt_payload,
424  struct doca_gather_list *headers,
425  union doca_data user_data,
426  struct doca_eth_txq_task_lso_send **task_lso_send);
427 
457  uint16_t tasks_num,
458  union doca_data task_batch_user_data,
459  struct doca_buf ***pkt_array,
460  union doca_data **task_user_data_array,
461  struct doca_task_batch **task_batch);
462 
494  uint16_t tasks_num,
495  union doca_data task_batch_user_data,
496  struct doca_buf ***pkt_payload_array,
497  struct doca_gather_list ***headers_array,
498  union doca_data **task_user_data_array,
499  struct doca_task_batch **task_batch);
500 
512 void doca_eth_txq_task_send_set_pkt(struct doca_eth_txq_task_send *task_send, struct doca_buf *pkt);
513 
525 void doca_eth_txq_task_lso_send_set_pkt_payload(struct doca_eth_txq_task_lso_send *task_lso_send,
526  struct doca_buf *pkt_payload);
527 
539 void doca_eth_txq_task_lso_send_set_headers(struct doca_eth_txq_task_lso_send *task_lso_send,
540  struct doca_gather_list *headers);
541 
558 doca_error_t doca_eth_txq_task_send_get_pkt(const struct doca_eth_txq_task_send *task_send, struct doca_buf **pkt);
559 
576 doca_error_t doca_eth_txq_task_lso_send_get_pkt_payload(const struct doca_eth_txq_task_lso_send *task_lso_send,
577  struct doca_buf **pkt_payload);
578 
595 doca_error_t doca_eth_txq_task_lso_send_get_headers(const struct doca_eth_txq_task_lso_send *task_lso_send,
596  struct doca_gather_list **headers);
597 
615 doca_error_t doca_eth_txq_task_send_get_metadata_array(struct doca_eth_txq_task_send *task_send,
616  uint32_t **metadata_array);
617 
635 doca_error_t doca_eth_txq_task_lso_send_get_metadata_array(struct doca_eth_txq_task_lso_send *task_lso_send,
636  uint32_t **metadata_array);
637 
656 doca_error_t doca_eth_txq_task_batch_send_get_metadata_array(struct doca_task_batch *task_batch_send,
657  uint32_t **metadata_array);
658 
677 doca_error_t doca_eth_txq_task_batch_lso_send_get_metadata_array(struct doca_task_batch *task_batch_lso_send,
678  uint32_t **metadata_array);
679 
691 void doca_eth_txq_task_lso_send_set_mss(struct doca_eth_txq_task_lso_send *task_lso_send, uint16_t mss);
692 
711 doca_error_t doca_eth_txq_task_batch_lso_send_get_mss_array(struct doca_task_batch *task_batch_lso_send,
712  uint16_t **mss_array);
713 
725 void doca_eth_txq_task_send_set_ol_flags(struct doca_eth_txq_task_send *task_send, uint16_t ol_flags);
726 
738 void doca_eth_txq_task_lso_send_set_ol_flags(struct doca_eth_txq_task_lso_send *task_lso_send, uint16_t ol_flags);
739 
758 doca_error_t doca_eth_txq_task_batch_send_get_ol_flags_array(struct doca_task_batch *task_batch_send,
759  uint16_t **ol_flags_array);
760 
779 doca_error_t doca_eth_txq_task_batch_lso_send_get_ol_flags_array(struct doca_task_batch *task_batch_lso_send,
780  uint16_t **ol_flags_array);
781 
793 struct doca_task *doca_eth_txq_task_send_as_doca_task(struct doca_eth_txq_task_send *task_send);
794 
806 struct doca_task *doca_eth_txq_task_lso_send_as_doca_task(struct doca_eth_txq_task_lso_send *task_lso_send);
807 
824 #define doca_eth_txq_task_batch_metadata_array_get_metadata(metadata_array, metadata_num, packet_index, metadata_index) \
825  metadata_array[packet_index * metadata_num + metadata_index]
826 
827 #ifdef __cplusplus
828 } /* extern "C" */
829 #endif
830 
831 #endif /* DOCA_ETH_TXQ_CPU_DATA_PATH_H_ */
832 
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
#define DOCA_EXPERIMENTAL
To set a Symbol (or specifically a function) as experimental.
Definition: doca_compat.h:103
enum doca_error doca_error_t
DOCA API return codes.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_send_get_metadata_array(struct doca_eth_txq_task_send *task_send, uint32_t **metadata_array)
This method gets a pointer to internal metadata array from send task. This pointer can be used to rea...
DOCA_EXPERIMENTAL struct doca_task * doca_eth_txq_task_lso_send_as_doca_task(struct doca_eth_txq_task_lso_send *task_lso_send)
This method converts a doca_eth_txq_task_lso_send task to doca_task.
void(* doca_eth_txq_task_send_completion_cb_t)(struct doca_eth_txq_task_send *task_send, union doca_data task_user_data, union doca_data ctx_user_data)
Function to execute on task completion.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_get_metadata_array(struct doca_eth_txq_task_lso_send *task_lso_send, uint32_t **metadata_array)
This method gets a pointer to internal metadata array from LSO send task. This pointer can be used to...
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_allocate_init(struct doca_eth_txq *eth_txq, struct doca_buf *pkt_payload, struct doca_gather_list *headers, union doca_data user_data, struct doca_eth_txq_task_lso_send **task_lso_send)
This method allocates and initializes a doca_eth_txq_task_lso_send task.
DOCA_EXPERIMENTAL struct doca_task * doca_eth_txq_task_send_as_doca_task(struct doca_eth_txq_task_send *task_send)
This method converts a doca_eth_txq_task_send task to doca_task.
DOCA_EXPERIMENTAL void doca_eth_txq_task_lso_send_set_ol_flags(struct doca_eth_txq_task_lso_send *task_lso_send, uint16_t ol_flags)
This method sets overrides the default ol_flags value set by the enabled offloads of the context.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_send_get_ol_flags_array(struct doca_task_batch *task_batch_send, uint16_t **ol_flags_array)
This method gets a pointer to internal ol_flags array from send task batch. This pointer can be used ...
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_send_num_expand(struct doca_eth_txq *eth_txq, uint32_t task_send_num)
This method expands the number of doca_eth_txq_task_send tasks.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_send_allocate_init(struct doca_eth_txq *eth_txq, struct doca_buf *pkt, union doca_data user_data, struct doca_eth_txq_task_send **task_send)
This method allocates and initializes a doca_eth_txq_task_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_get_ol_flags_array(struct doca_task_batch *task_batch_lso_send, uint16_t **ol_flags_array)
This method gets a pointer to internal ol_flags array from LSO send task batch. This pointer can be u...
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_allocate(struct doca_eth_txq *eth_txq, uint16_t tasks_num, union doca_data task_batch_user_data, struct doca_buf ***pkt_payload_array, struct doca_gather_list ***headers_array, union doca_data **task_user_data_array, struct doca_task_batch **task_batch)
This method allocates a doca_taskbtach of doca_eth_txq_task_lso_send tasks.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_set_conf(struct doca_eth_txq *eth_txq, enum doca_task_batch_max_tasks_number max_tasks_number, uint16_t num_task_batches, doca_eth_txq_task_batch_lso_send_completion_cb_t success_completion_cb, doca_eth_txq_task_batch_lso_send_completion_cb_t error_completion_cb)
This method sets the task_batch of LSO send tasks configuration.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_get_mss_array(struct doca_task_batch *task_batch_lso_send, uint16_t **mss_array)
This method gets a pointer to internal MSS array from LSO send task batch. This pointer can be used t...
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_send_get_pkt(const struct doca_eth_txq_task_send *task_send, struct doca_buf **pkt)
This method gets packet buffer from doca_eth_txq_task_send task.
DOCA_EXPERIMENTAL void doca_eth_txq_task_lso_send_set_pkt_payload(struct doca_eth_txq_task_lso_send *task_lso_send, struct doca_buf *pkt_payload)
This method sets packet payload buffer to doca_eth_txq_task_lso_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_send_set_conf(struct doca_eth_txq *eth_txq, enum doca_task_batch_max_tasks_number max_tasks_number, uint16_t num_task_batches, doca_eth_txq_task_batch_send_completion_cb_t success_completion_cb, doca_eth_txq_task_batch_send_completion_cb_t error_completion_cb)
This method sets the task_batch of send tasks configuration.
DOCA_EXPERIMENTAL void doca_eth_txq_task_send_set_pkt(struct doca_eth_txq_task_send *task_send, struct doca_buf *pkt)
This method sets packet buffer to doca_eth_txq_task_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_get_pkt_payload(const struct doca_eth_txq_task_lso_send *task_lso_send, struct doca_buf **pkt_payload)
This method gets payload buffer from doca_eth_txq_task_lso_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_num_expand(struct doca_eth_txq *eth_txq, uint32_t task_lso_send_num)
This method expands the number of doca_eth_txq_task_lso_send tasks.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_get_headers(const struct doca_eth_txq_task_lso_send *task_lso_send, struct doca_gather_list **headers)
This method gets headers from doca_eth_txq_task_lso_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_lso_send_set_conf(struct doca_eth_txq *eth_txq, doca_eth_txq_task_lso_send_completion_cb_t task_completion_cb, doca_eth_txq_task_lso_send_completion_cb_t task_error_cb, uint32_t task_lso_send_num)
This method sets the doca_eth_txq_task_lso_send tasks configuration.
DOCA_EXPERIMENTAL void doca_eth_txq_task_lso_send_set_mss(struct doca_eth_txq_task_lso_send *task_lso_send, uint16_t mss)
This method sets overrides the default MSS value set by "doca_eth_txq_set_mss()" to a specific LSO se...
void(* doca_eth_txq_task_batch_lso_send_completion_cb_t)(struct doca_task_batch *task_batch, uint16_t tasks_num, union doca_data ctx_user_data, union doca_data task_batch_user_data, union doca_data *task_user_data_array, struct doca_buf **pkt_payload_array, struct doca_gather_list **headers_array, doca_error_t *status_array)
Function to execute on task_batch completion.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_send_set_conf(struct doca_eth_txq *eth_txq, doca_eth_txq_task_send_completion_cb_t task_completion_cb, doca_eth_txq_task_send_completion_cb_t task_error_cb, uint32_t task_send_num)
This method sets the doca_eth_txq_task_send tasks configuration.
DOCA_EXPERIMENTAL void doca_eth_txq_task_lso_send_set_headers(struct doca_eth_txq_task_lso_send *task_lso_send, struct doca_gather_list *headers)
This method sets headers to doca_eth_txq_task_lso_send task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_send_allocate(struct doca_eth_txq *eth_txq, uint16_t tasks_num, union doca_data task_batch_user_data, struct doca_buf ***pkt_array, union doca_data **task_user_data_array, struct doca_task_batch **task_batch)
This method allocates a doca_taskbtach of doca_eth_txq_task_send tasks.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_send_get_metadata_array(struct doca_task_batch *task_batch_send, uint32_t **metadata_array)
This method gets a pointer to internal metadata array from send task batch. This pointer can be used ...
void(* doca_eth_txq_task_lso_send_completion_cb_t)(struct doca_eth_txq_task_lso_send *task_lso_send, union doca_data task_user_data, union doca_data ctx_user_data)
Function to execute on task completion.
void(* doca_eth_txq_task_batch_send_completion_cb_t)(struct doca_task_batch *task_batch, uint16_t tasks_num, union doca_data ctx_user_data, union doca_data task_batch_user_data, union doca_data *task_user_data_array, struct doca_buf **pkt_array, doca_error_t *status_array)
Function to execute on task_batch completion.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_get_metadata_array(struct doca_task_batch *task_batch_lso_send, uint32_t **metadata_array)
This method gets a pointer to internal metadata array from LSO send task batch. This pointer can be u...
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_lso_send_num_expand(struct doca_eth_txq *eth_txq, uint16_t task_batches_num)
This method expands the number of doca_eth_txq_task_batch_lso_send tasks.
DOCA_EXPERIMENTAL void doca_eth_txq_task_send_set_ol_flags(struct doca_eth_txq_task_send *task_send, uint16_t ol_flags)
This method sets overrides the default ol_flags value set by the enabled offloads of the context.
DOCA_EXPERIMENTAL doca_error_t doca_eth_txq_task_batch_send_num_expand(struct doca_eth_txq *eth_txq, uint16_t task_batches_num)
This method expands the number of doca_eth_txq_task_batch_send tasks.
@ DOCA_ETH_TXQ_OL_FLAGS_L4_CSUM
@ DOCA_ETH_TXQ_OL_FLAGS_L3_CSUM
doca_task_batch_max_tasks_number
Definition: doca_pe.h:48
Struct to represent a gather list.
Definition: doca_types.h:64
Convenience type for representing opaque data.
Definition: doca_types.h:56