NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_eth_rxq_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_RXQ_CPU_DATA_PATH_H_
24 #define DOCA_ETH_RXQ_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 
44 struct doca_eth_rxq;
45 
50 struct doca_eth_rxq_task_recv;
58 struct doca_eth_rxq_event_managed_recv;
62 struct doca_eth_rxq_event_batch_managed_recv;
89 typedef void (*doca_eth_rxq_task_recv_completion_cb_t)(struct doca_eth_rxq_task_recv *task_recv,
90  union doca_data task_user_data,
91  union doca_data ctx_user_data);
92 
111 typedef void (*doca_eth_rxq_event_managed_recv_handler_cb_t)(struct doca_eth_rxq_event_managed_recv *event_managed_recv,
112  struct doca_buf *pkt,
113  union doca_data event_user_data);
114 
138  struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
139  uint16_t events_number,
140  union doca_data event_batch_user_data,
141  doca_error_t status,
142  struct doca_buf **pkt_array);
143 
167 doca_error_t doca_eth_rxq_task_recv_set_conf(struct doca_eth_rxq *eth_rxq,
170  uint32_t task_recv_num);
171 
195  union doca_data user_data,
196  doca_eth_rxq_event_managed_recv_handler_cb_t success_event_handler,
198 
227  struct doca_eth_rxq *eth_rxq,
228  enum doca_event_batch_events_number events_number_max,
229  enum doca_event_batch_events_number events_number_min,
230  union doca_data user_data,
231  doca_eth_rxq_event_batch_managed_recv_handler_cb_t success_event_batch_handler,
232  doca_eth_rxq_event_batch_managed_recv_handler_cb_t error_event_batch_handler);
233 
259  struct doca_buf *pkt,
260  union doca_data user_data,
261  struct doca_eth_rxq_task_recv **task_recv);
262 
274 void doca_eth_rxq_task_recv_set_pkt(struct doca_eth_rxq_task_recv *task_recv, struct doca_buf *pkt);
275 
292 doca_error_t doca_eth_rxq_task_recv_get_pkt(const struct doca_eth_rxq_task_recv *task_recv, struct doca_buf **pkt);
293 
310 doca_error_t doca_eth_rxq_task_recv_get_l3_ok(const struct doca_eth_rxq_task_recv *task_recv, uint8_t *l3_ok);
311 
328 doca_error_t doca_eth_rxq_event_managed_recv_get_l3_ok(const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
329  uint8_t *l3_ok);
330 
348  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
349  const uint8_t **l3_ok_array);
350 
367 doca_error_t doca_eth_rxq_task_recv_get_l4_ok(const struct doca_eth_rxq_task_recv *task_recv, uint8_t *l4_ok);
368 
385 doca_error_t doca_eth_rxq_event_managed_recv_get_l4_ok(const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
386  uint8_t *l4_ok);
387 
405  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
406  const uint8_t **l4_ok_array);
407 
424 doca_error_t doca_eth_rxq_task_recv_get_metadata_array(const struct doca_eth_rxq_task_recv *task_recv,
425  const uint32_t **metadata_array);
426 
444  const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
445  const uint32_t **metadata_array);
446 
466  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
467  const uint32_t **metadata_array);
468 
485 doca_error_t doca_eth_rxq_task_recv_get_flow_tag(const struct doca_eth_rxq_task_recv *task_recv, uint32_t *flow_tag);
486 
504  const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
505  uint32_t *flow_tag);
506 
524  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
525  const uint32_t **flow_tag_array);
526 
543 doca_error_t doca_eth_rxq_task_recv_get_rx_hash(const struct doca_eth_rxq_task_recv *task_recv, uint32_t *rx_hash);
544 
562  const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
563  uint32_t *rx_hash);
564 
582  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
583  const uint32_t **rx_hash_array);
584 
601 doca_error_t doca_eth_rxq_task_recv_get_timestamp(const struct doca_eth_rxq_task_recv *task_recv, uint64_t *timestamp);
602 
620  const struct doca_eth_rxq_event_managed_recv *event_managed_recv,
621  uint64_t *timestamp);
622 
640  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv,
641  const uint64_t **timestamp_array);
642 
657  const struct doca_eth_rxq_event_managed_recv *event_managed_recv);
658 
676 #define doca_eth_rxq_event_batch_managed_recv_metadata_array_get_metadata(metadata_array, \
677  metadata_num, \
678  packet_index, \
679  metadata_index) \
680  metadata_array[packet_index * metadata_num + metadata_index]
681 
696 
709  const struct doca_eth_rxq_event_managed_recv *event_managed_recv);
710 
723  const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv);
724 
736 struct doca_task *doca_eth_rxq_task_recv_as_doca_task(struct doca_eth_rxq_task_recv *task_recv);
737 
738 #ifdef __cplusplus
739 } /* extern "C" */
740 #endif
741 
742 #endif /* DOCA_ETH_RXQ_CPU_DATA_PATH_H_ */
743 
doca_telemetry_exporter_timestamp_t timestamp
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_rxq_event_managed_recv_get_timestamp(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, uint64_t *timestamp)
This method gets the timestamp of a managed receive event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_flow_tag(const struct doca_eth_rxq_task_recv *task_recv, uint32_t *flow_tag)
This method gets the flow tag of a finished receive task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_allocate_init(struct doca_eth_rxq *eth_rxq, struct doca_buf *pkt, union doca_data user_data, struct doca_eth_rxq_task_recv **task_recv)
This method allocates and initializes a doca_eth_rxq_task_recv task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_status(const struct doca_eth_rxq_event_managed_recv *event_managed_recv)
This method gets status of finished doca_eth_rxq_event_managed_recv event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_pkt(const struct doca_eth_rxq_task_recv *task_recv, struct doca_buf **pkt)
This method gets packet buffer from doca_eth_rxq_task_recv task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_metadata_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint32_t **metadata_array)
This method gets metadata array for the packet received by managed receive event batch.
DOCA_EXPERIMENTAL struct doca_ctx * doca_eth_rxq_event_batch_managed_recv_get_ctx(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv)
This method gets context of finished doca_eth_rxq_event_batch_managed_recv event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_l4_ok(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, uint8_t *l4_ok)
This method checks if L4 checksum of finished doca_eth_rxq_event_managed_recv event is ok.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_l4_ok_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint8_t **l4_ok_array)
This method checks if L4 checksums of received packets in managed receive event batch are ok.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_register(struct doca_eth_rxq *eth_rxq, union doca_data user_data, doca_eth_rxq_event_managed_recv_handler_cb_t success_event_handler, doca_eth_rxq_event_managed_recv_handler_cb_t error_event_handler)
This method registers a doca_eth_rxq_event_managed_recv event. can only be called before calling doca...
DOCA_EXPERIMENTAL void doca_eth_rxq_event_batch_managed_recv_pkt_array_free(struct doca_buf **pkt_array)
This method frees the packet array acquired using managed receive event batch and returns it to the o...
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_metadata_array(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, const uint32_t **metadata_array)
This method gets metadata array for the packet received by managed receive event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_set_conf(struct doca_eth_rxq *eth_rxq, doca_eth_rxq_task_recv_completion_cb_t task_completion_cb, doca_eth_rxq_task_recv_completion_cb_t task_error_cb, uint32_t task_recv_num)
This method sets the doca_eth_rxq_task_recv tasks configuration. can only be called before calling do...
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_l3_ok_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint8_t **l3_ok_array)
This method checks if L3 checksums of received packets in managed receive event batch are ok.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_flow_tag_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint32_t **flow_tag_array)
This method gets the flow tag array of a managed receive event batch.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_timestamp_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint64_t **timestamp_array)
This method gets the timestamp array of a managed receive event batch.
DOCA_EXPERIMENTAL void doca_eth_rxq_task_recv_set_pkt(struct doca_eth_rxq_task_recv *task_recv, struct doca_buf *pkt)
This method sets packet buffer to doca_eth_rxq_task_recv task.
void(* doca_eth_rxq_event_batch_managed_recv_handler_cb_t)(struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, uint16_t events_number, union doca_data event_batch_user_data, doca_error_t status, struct doca_buf **pkt_array)
Function to be executed on managed receive event batch occurrence.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_l4_ok(const struct doca_eth_rxq_task_recv *task_recv, uint8_t *l4_ok)
This method checks if L4 checksum of finished doca_eth_rxq_task_recv task is ok.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_rx_hash(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, uint32_t *rx_hash)
This method gets the RX hash of a managed receive event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_flow_tag(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, uint32_t *flow_tag)
This method gets the flow tag of a managed receive event.
void(* doca_eth_rxq_event_managed_recv_handler_cb_t)(struct doca_eth_rxq_event_managed_recv *event_managed_recv, struct doca_buf *pkt, union doca_data event_user_data)
Function to be executed on managed receive event occurrence.
void(* doca_eth_rxq_task_recv_completion_cb_t)(struct doca_eth_rxq_task_recv *task_recv, 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_rxq_task_recv_get_metadata_array(const struct doca_eth_rxq_task_recv *task_recv, const uint32_t **metadata_array)
This method gets metadata array for the packet received by receive task.
DOCA_EXPERIMENTAL struct doca_ctx * doca_eth_rxq_event_managed_recv_get_ctx(const struct doca_eth_rxq_event_managed_recv *event_managed_recv)
This method gets context of finished doca_eth_rxq_event_managed_recv event.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_managed_recv_get_l3_ok(const struct doca_eth_rxq_event_managed_recv *event_managed_recv, uint8_t *l3_ok)
This method checks if L3 checksum of finished doca_eth_rxq_event_managed_recv event is ok.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_timestamp(const struct doca_eth_rxq_task_recv *task_recv, uint64_t *timestamp)
This method gets the timestamp of a finished receive task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_rx_hash(const struct doca_eth_rxq_task_recv *task_recv, uint32_t *rx_hash)
This method gets the RX hash of a finished receive task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_task_recv_get_l3_ok(const struct doca_eth_rxq_task_recv *task_recv, uint8_t *l3_ok)
This method checks if L3 checksum of finished doca_eth_rxq_task_recv task is ok.
DOCA_EXPERIMENTAL struct doca_task * doca_eth_rxq_task_recv_as_doca_task(struct doca_eth_rxq_task_recv *task_recv)
This method converts a doca_eth_rxq_task_recv task to doca_task.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_get_rx_hash_array(const struct doca_eth_rxq_event_batch_managed_recv *event_batch_managed_recv, const uint32_t **rx_hash_array)
This method gets the RX hash array of a managed receive event batch.
DOCA_EXPERIMENTAL doca_error_t doca_eth_rxq_event_batch_managed_recv_register(struct doca_eth_rxq *eth_rxq, enum doca_event_batch_events_number events_number_max, enum doca_event_batch_events_number events_number_min, union doca_data user_data, doca_eth_rxq_event_batch_managed_recv_handler_cb_t success_event_batch_handler, doca_eth_rxq_event_batch_managed_recv_handler_cb_t error_event_batch_handler)
This method registers a doca_eth_rxq_event_managed_recv event batch. Allows user to get multiple even...
doca_event_batch_events_number
Definition: doca_pe.h:58
Convenience type for representing opaque data.
Definition: doca_types.h:56