xref: /dpdk/drivers/common/idpf/idpf_common_rxtx.h (revision e12a0166c80f65e35408f4715b2f3a60763c3741)
18b95ced4SBeilei Xing /* SPDX-License-Identifier: BSD-3-Clause
28b95ced4SBeilei Xing  * Copyright(c) 2023 Intel Corporation
38b95ced4SBeilei Xing  */
48b95ced4SBeilei Xing 
58b95ced4SBeilei Xing #ifndef _IDPF_COMMON_RXTX_H_
68b95ced4SBeilei Xing #define _IDPF_COMMON_RXTX_H_
78b95ced4SBeilei Xing 
8c008a5e7SBeilei Xing #include <rte_mbuf.h>
98b95ced4SBeilei Xing #include <rte_mbuf_ptype.h>
108b95ced4SBeilei Xing #include <rte_mbuf_core.h>
118b95ced4SBeilei Xing 
128b95ced4SBeilei Xing #include "idpf_common_device.h"
138b95ced4SBeilei Xing 
14c008a5e7SBeilei Xing #define IDPF_RX_MAX_BURST		32
15c008a5e7SBeilei Xing 
16c008a5e7SBeilei Xing #define IDPF_RX_OFFLOAD_IPV4_CKSUM		RTE_BIT64(1)
17c008a5e7SBeilei Xing #define IDPF_RX_OFFLOAD_UDP_CKSUM		RTE_BIT64(2)
18c008a5e7SBeilei Xing #define IDPF_RX_OFFLOAD_TCP_CKSUM		RTE_BIT64(3)
19c008a5e7SBeilei Xing #define IDPF_RX_OFFLOAD_OUTER_IPV4_CKSUM	RTE_BIT64(6)
20c008a5e7SBeilei Xing #define IDPF_RX_OFFLOAD_TIMESTAMP		RTE_BIT64(14)
21c008a5e7SBeilei Xing 
22c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_IPV4_CKSUM       RTE_BIT64(1)
23c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_UDP_CKSUM        RTE_BIT64(2)
24c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_TCP_CKSUM        RTE_BIT64(3)
25c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_SCTP_CKSUM       RTE_BIT64(4)
26c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_TCP_TSO          RTE_BIT64(5)
27c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_MULTI_SEGS       RTE_BIT64(15)
28c008a5e7SBeilei Xing #define IDPF_TX_OFFLOAD_MBUF_FAST_FREE   RTE_BIT64(16)
29c008a5e7SBeilei Xing 
308c6098afSBeilei Xing #define IDPF_TX_MAX_MTU_SEG	10
318c6098afSBeilei Xing 
328c6098afSBeilei Xing #define IDPF_MIN_TSO_MSS	88
338c6098afSBeilei Xing #define IDPF_MAX_TSO_MSS	9728
348c6098afSBeilei Xing #define IDPF_MAX_TSO_FRAME_SIZE	262143
358c6098afSBeilei Xing #define IDPF_TX_MAX_MTU_SEG     10
368c6098afSBeilei Xing 
374fc6c4d9SWenjun Wu #define IDPF_RLAN_CTX_DBUF_S	7
384fc6c4d9SWenjun Wu #define IDPF_RX_MAX_DATA_BUF_SIZE	(16 * 1024 - 128)
394fc6c4d9SWenjun Wu 
408c6098afSBeilei Xing #define IDPF_TX_CKSUM_OFFLOAD_MASK (		\
418c6098afSBeilei Xing 		RTE_MBUF_F_TX_IP_CKSUM |	\
428c6098afSBeilei Xing 		RTE_MBUF_F_TX_L4_MASK |		\
438c6098afSBeilei Xing 		RTE_MBUF_F_TX_TCP_SEG)
448c6098afSBeilei Xing 
458c6098afSBeilei Xing #define IDPF_TX_OFFLOAD_MASK (			\
468c6098afSBeilei Xing 		IDPF_TX_CKSUM_OFFLOAD_MASK |	\
478c6098afSBeilei Xing 		RTE_MBUF_F_TX_IPV4 |		\
488c6098afSBeilei Xing 		RTE_MBUF_F_TX_IPV6)
498c6098afSBeilei Xing 
508c6098afSBeilei Xing #define IDPF_TX_OFFLOAD_NOTSUP_MASK \
518c6098afSBeilei Xing 		(RTE_MBUF_F_TX_OFFLOAD_MASK ^ IDPF_TX_OFFLOAD_MASK)
528c6098afSBeilei Xing 
530fac6a1cSBeilei Xing /* used for Vector PMD */
540fac6a1cSBeilei Xing #define IDPF_VPMD_RX_MAX_BURST		32
550fac6a1cSBeilei Xing #define IDPF_VPMD_TX_MAX_BURST		32
560fac6a1cSBeilei Xing #define IDPF_VPMD_DESCS_PER_LOOP	4
570fac6a1cSBeilei Xing #define IDPF_RXQ_REARM_THRESH		64
58e528d7c7SWenjun Wu #define IDPD_TXQ_SCAN_CQ_THRESH	64
59e528d7c7SWenjun Wu #define IDPF_TX_CTYPE_NUM	8
600fac6a1cSBeilei Xing 
618c6098afSBeilei Xing /* MTS */
628c6098afSBeilei Xing #define GLTSYN_CMD_SYNC_0_0	(PF_TIMESYNC_BASE + 0x0)
638c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_0_0	(PF_TIMESYNC_BASE + 0x4)
648c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_0	(PF_TIMESYNC_BASE + 0x8)
658c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_0	(PF_TIMESYNC_BASE + 0xC)
668c6098afSBeilei Xing #define GLTSYN_ART_L_0		(PF_TIMESYNC_BASE + 0x10)
678c6098afSBeilei Xing #define GLTSYN_ART_H_0		(PF_TIMESYNC_BASE + 0x14)
688c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_0_1	(PF_TIMESYNC_BASE + 0x24)
698c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_1	(PF_TIMESYNC_BASE + 0x28)
708c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_1	(PF_TIMESYNC_BASE + 0x2C)
718c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_0_2	(PF_TIMESYNC_BASE + 0x44)
728c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_2	(PF_TIMESYNC_BASE + 0x48)
738c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_2	(PF_TIMESYNC_BASE + 0x4C)
748c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_0_3	(PF_TIMESYNC_BASE + 0x64)
758c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_3	(PF_TIMESYNC_BASE + 0x68)
768c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_3	(PF_TIMESYNC_BASE + 0x6C)
778c6098afSBeilei Xing 
788c6098afSBeilei Xing #define PF_TIMESYNC_BAR4_BASE	0x0E400000
798c6098afSBeilei Xing #define GLTSYN_ENA		(PF_TIMESYNC_BAR4_BASE + 0x90)
808c6098afSBeilei Xing #define GLTSYN_CMD		(PF_TIMESYNC_BAR4_BASE + 0x94)
818c6098afSBeilei Xing #define GLTSYC_TIME_L		(PF_TIMESYNC_BAR4_BASE + 0x104)
828c6098afSBeilei Xing #define GLTSYC_TIME_H		(PF_TIMESYNC_BAR4_BASE + 0x108)
838c6098afSBeilei Xing 
848c6098afSBeilei Xing #define GLTSYN_CMD_SYNC_0_4	(PF_TIMESYNC_BAR4_BASE + 0x110)
858c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_4	(PF_TIMESYNC_BAR4_BASE + 0x118)
868c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_4	(PF_TIMESYNC_BAR4_BASE + 0x11C)
878c6098afSBeilei Xing #define GLTSYN_INCVAL_L		(PF_TIMESYNC_BAR4_BASE + 0x150)
888c6098afSBeilei Xing #define GLTSYN_INCVAL_H		(PF_TIMESYNC_BAR4_BASE + 0x154)
898c6098afSBeilei Xing #define GLTSYN_SHADJ_L		(PF_TIMESYNC_BAR4_BASE + 0x158)
908c6098afSBeilei Xing #define GLTSYN_SHADJ_H		(PF_TIMESYNC_BAR4_BASE + 0x15C)
918c6098afSBeilei Xing 
928c6098afSBeilei Xing #define GLTSYN_CMD_SYNC_0_5	(PF_TIMESYNC_BAR4_BASE + 0x130)
938c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_L_5	(PF_TIMESYNC_BAR4_BASE + 0x138)
948c6098afSBeilei Xing #define PF_GLTSYN_SHTIME_H_5	(PF_TIMESYNC_BAR4_BASE + 0x13C)
958c6098afSBeilei Xing 
96181348d3SMingxia Liu #define IDPF_RX_SPLIT_BUFQ1_ID	1
97181348d3SMingxia Liu #define IDPF_RX_SPLIT_BUFQ2_ID	2
98181348d3SMingxia Liu 
998b95ced4SBeilei Xing struct idpf_rx_stats {
100*e12a0166STyler Retzlaff 	RTE_ATOMIC(uint64_t) mbuf_alloc_failed;
1018b95ced4SBeilei Xing };
1028b95ced4SBeilei Xing 
1038b95ced4SBeilei Xing struct idpf_rx_queue {
1048b95ced4SBeilei Xing 	struct idpf_adapter *adapter;   /* the adapter this queue belongs to */
1058b95ced4SBeilei Xing 	struct rte_mempool *mp;         /* mbuf pool to populate Rx ring */
1068b95ced4SBeilei Xing 	const struct rte_memzone *mz;   /* memzone for Rx ring */
1078b95ced4SBeilei Xing 	volatile void *rx_ring;
1088b95ced4SBeilei Xing 	struct rte_mbuf **sw_ring;      /* address of SW ring */
1098b95ced4SBeilei Xing 	uint64_t rx_ring_phys_addr;     /* Rx ring DMA address */
1108b95ced4SBeilei Xing 
1118b95ced4SBeilei Xing 	uint16_t nb_rx_desc;            /* ring length */
1128b95ced4SBeilei Xing 	uint16_t rx_tail;               /* current value of tail */
1138b95ced4SBeilei Xing 	volatile uint8_t *qrx_tail;     /* register address of tail */
1148b95ced4SBeilei Xing 	uint16_t rx_free_thresh;        /* max free RX desc to hold */
1158b95ced4SBeilei Xing 	uint16_t nb_rx_hold;            /* number of held free RX desc */
1168b95ced4SBeilei Xing 	struct rte_mbuf *pkt_first_seg; /* first segment of current packet */
1178b95ced4SBeilei Xing 	struct rte_mbuf *pkt_last_seg;  /* last segment of current packet */
1188b95ced4SBeilei Xing 	struct rte_mbuf fake_mbuf;      /* dummy mbuf */
1198b95ced4SBeilei Xing 
1208b95ced4SBeilei Xing 	/* used for VPMD */
1218b95ced4SBeilei Xing 	uint16_t rxrearm_nb;       /* number of remaining to be re-armed */
1228b95ced4SBeilei Xing 	uint16_t rxrearm_start;    /* the idx we start the re-arming from */
1238b95ced4SBeilei Xing 	uint64_t mbuf_initializer; /* value to init mbufs */
1248b95ced4SBeilei Xing 
1258b95ced4SBeilei Xing 	uint16_t rx_nb_avail;
1268b95ced4SBeilei Xing 	uint16_t rx_next_avail;
1278b95ced4SBeilei Xing 
1288b95ced4SBeilei Xing 	uint16_t port_id;       /* device port ID */
1298b95ced4SBeilei Xing 	uint16_t queue_id;      /* Rx queue index */
1308b95ced4SBeilei Xing 	uint16_t rx_buf_len;    /* The packet buffer size */
1318b95ced4SBeilei Xing 	uint16_t rx_hdr_len;    /* The header buffer size */
1328b95ced4SBeilei Xing 	uint16_t max_pkt_len;   /* Maximum packet length */
1338b95ced4SBeilei Xing 	uint8_t rxdid;
1348b95ced4SBeilei Xing 
1358b95ced4SBeilei Xing 	bool q_set;             /* if rx queue has been configured */
1368b95ced4SBeilei Xing 	bool q_started;         /* if rx queue has been started */
1378b95ced4SBeilei Xing 	bool rx_deferred_start; /* don't start this queue in dev start */
1388b95ced4SBeilei Xing 	const struct idpf_rxq_ops *ops;
1398b95ced4SBeilei Xing 
1408b95ced4SBeilei Xing 	struct idpf_rx_stats rx_stats;
1418b95ced4SBeilei Xing 
1428b95ced4SBeilei Xing 	/* only valid for split queue mode */
1438b95ced4SBeilei Xing 	uint8_t expected_gen_id;
1448b95ced4SBeilei Xing 	struct idpf_rx_queue *bufq1;
1458b95ced4SBeilei Xing 	struct idpf_rx_queue *bufq2;
1468b95ced4SBeilei Xing 
1478b95ced4SBeilei Xing 	uint64_t offloads;
1488b95ced4SBeilei Xing 	uint32_t hw_register_set;
1498b95ced4SBeilei Xing };
1508b95ced4SBeilei Xing 
1518b95ced4SBeilei Xing struct idpf_tx_entry {
1528b95ced4SBeilei Xing 	struct rte_mbuf *mbuf;
1538b95ced4SBeilei Xing 	uint16_t next_id;
1548b95ced4SBeilei Xing 	uint16_t last_id;
1558b95ced4SBeilei Xing };
1568b95ced4SBeilei Xing 
1578b95ced4SBeilei Xing /* Structure associated with each TX queue. */
1588b95ced4SBeilei Xing struct idpf_tx_queue {
1598b95ced4SBeilei Xing 	const struct rte_memzone *mz;		/* memzone for Tx ring */
160bab8149aSSimei Su 	volatile struct idpf_base_tx_desc *tx_ring;	/* Tx ring virtual address */
1618b95ced4SBeilei Xing 	volatile union {
1628b95ced4SBeilei Xing 		struct idpf_flex_tx_sched_desc *desc_ring;
1638b95ced4SBeilei Xing 		struct idpf_splitq_tx_compl_desc *compl_ring;
1648b95ced4SBeilei Xing 	};
1658b95ced4SBeilei Xing 	uint64_t tx_ring_phys_addr;		/* Tx ring DMA address */
1668b95ced4SBeilei Xing 	struct idpf_tx_entry *sw_ring;		/* address array of SW ring */
1678b95ced4SBeilei Xing 
1688b95ced4SBeilei Xing 	uint16_t nb_tx_desc;		/* ring length */
1698b95ced4SBeilei Xing 	uint16_t tx_tail;		/* current value of tail */
1708b95ced4SBeilei Xing 	volatile uint8_t *qtx_tail;	/* register address of tail */
1718b95ced4SBeilei Xing 	/* number of used desc since RS bit set */
1728b95ced4SBeilei Xing 	uint16_t nb_used;
1738b95ced4SBeilei Xing 	uint16_t nb_free;
1748b95ced4SBeilei Xing 	uint16_t last_desc_cleaned;	/* last desc have been cleaned*/
1758b95ced4SBeilei Xing 	uint16_t free_thresh;
1768b95ced4SBeilei Xing 	uint16_t rs_thresh;
1778b95ced4SBeilei Xing 
1788b95ced4SBeilei Xing 	uint16_t port_id;
1798b95ced4SBeilei Xing 	uint16_t queue_id;
1808b95ced4SBeilei Xing 	uint64_t offloads;
1818b95ced4SBeilei Xing 	uint16_t next_dd;	/* next to set RS, for VPMD */
1828b95ced4SBeilei Xing 	uint16_t next_rs;	/* next to check DD,  for VPMD */
1838b95ced4SBeilei Xing 
1848b95ced4SBeilei Xing 	bool q_set;		/* if tx queue has been configured */
1858b95ced4SBeilei Xing 	bool q_started;		/* if tx queue has been started */
1868b95ced4SBeilei Xing 	bool tx_deferred_start; /* don't start this queue in dev start */
1878b95ced4SBeilei Xing 	const struct idpf_txq_ops *ops;
1888b95ced4SBeilei Xing 
1898b95ced4SBeilei Xing 	/* only valid for split queue mode */
1908b95ced4SBeilei Xing 	uint16_t sw_nb_desc;
1918b95ced4SBeilei Xing 	uint16_t sw_tail;
1928b95ced4SBeilei Xing 	void **txqs;
1938b95ced4SBeilei Xing 	uint32_t tx_start_qid;
1948b95ced4SBeilei Xing 	uint8_t expected_gen_id;
1958b95ced4SBeilei Xing 	struct idpf_tx_queue *complq;
196e528d7c7SWenjun Wu 	uint16_t ctype[IDPF_TX_CTYPE_NUM];
1978b95ced4SBeilei Xing };
1988b95ced4SBeilei Xing 
1998c6098afSBeilei Xing /* Offload features */
2008c6098afSBeilei Xing union idpf_tx_offload {
2018c6098afSBeilei Xing 	uint64_t data;
2028c6098afSBeilei Xing 	struct {
2038c6098afSBeilei Xing 		uint64_t l2_len:7; /* L2 (MAC) Header Length. */
2048c6098afSBeilei Xing 		uint64_t l3_len:9; /* L3 (IP) Header Length. */
2058c6098afSBeilei Xing 		uint64_t l4_len:8; /* L4 Header Length. */
2068c6098afSBeilei Xing 		uint64_t tso_segsz:16; /* TCP TSO segment size */
2078c6098afSBeilei Xing 		/* uint64_t unused : 24; */
2088c6098afSBeilei Xing 	};
2098c6098afSBeilei Xing };
2108c6098afSBeilei Xing 
2110fac6a1cSBeilei Xing struct idpf_tx_vec_entry {
2120fac6a1cSBeilei Xing 	struct rte_mbuf *mbuf;
2130fac6a1cSBeilei Xing };
2140fac6a1cSBeilei Xing 
215e528d7c7SWenjun Wu union idpf_tx_desc {
216e528d7c7SWenjun Wu 	struct idpf_base_tx_desc *tx_ring;
217e528d7c7SWenjun Wu 	struct idpf_flex_tx_sched_desc *desc_ring;
218e528d7c7SWenjun Wu 	struct idpf_splitq_tx_compl_desc *compl_ring;
219e528d7c7SWenjun Wu };
220e528d7c7SWenjun Wu 
221c008a5e7SBeilei Xing struct idpf_rxq_ops {
222c008a5e7SBeilei Xing 	void (*release_mbufs)(struct idpf_rx_queue *rxq);
223c008a5e7SBeilei Xing };
224c008a5e7SBeilei Xing 
225c008a5e7SBeilei Xing struct idpf_txq_ops {
226c008a5e7SBeilei Xing 	void (*release_mbufs)(struct idpf_tx_queue *txq);
227c008a5e7SBeilei Xing };
228c008a5e7SBeilei Xing 
2298c6098afSBeilei Xing extern int idpf_timestamp_dynfield_offset;
2308c6098afSBeilei Xing extern uint64_t idpf_timestamp_dynflag;
2318c6098afSBeilei Xing 
232c008a5e7SBeilei Xing __rte_internal
233715939a7SBeilei Xing int idpf_qc_rx_thresh_check(uint16_t nb_desc, uint16_t thresh);
234c008a5e7SBeilei Xing __rte_internal
235715939a7SBeilei Xing int idpf_qc_tx_thresh_check(uint16_t nb_desc, uint16_t tx_rs_thresh,
236c008a5e7SBeilei Xing 			    uint16_t tx_free_thresh);
237c008a5e7SBeilei Xing __rte_internal
238715939a7SBeilei Xing void idpf_qc_rxq_mbufs_release(struct idpf_rx_queue *rxq);
239c008a5e7SBeilei Xing __rte_internal
240715939a7SBeilei Xing void idpf_qc_txq_mbufs_release(struct idpf_tx_queue *txq);
241c008a5e7SBeilei Xing __rte_internal
242715939a7SBeilei Xing void idpf_qc_split_rx_descq_reset(struct idpf_rx_queue *rxq);
243c008a5e7SBeilei Xing __rte_internal
244715939a7SBeilei Xing void idpf_qc_split_rx_bufq_reset(struct idpf_rx_queue *rxq);
245c008a5e7SBeilei Xing __rte_internal
246715939a7SBeilei Xing void idpf_qc_split_rx_queue_reset(struct idpf_rx_queue *rxq);
247c008a5e7SBeilei Xing __rte_internal
248715939a7SBeilei Xing void idpf_qc_single_rx_queue_reset(struct idpf_rx_queue *rxq);
249c008a5e7SBeilei Xing __rte_internal
250715939a7SBeilei Xing void idpf_qc_split_tx_descq_reset(struct idpf_tx_queue *txq);
251c008a5e7SBeilei Xing __rte_internal
252715939a7SBeilei Xing void idpf_qc_split_tx_complq_reset(struct idpf_tx_queue *cq);
253c008a5e7SBeilei Xing __rte_internal
254715939a7SBeilei Xing void idpf_qc_single_tx_queue_reset(struct idpf_tx_queue *txq);
255c008a5e7SBeilei Xing __rte_internal
256715939a7SBeilei Xing void idpf_qc_rx_queue_release(void *rxq);
257c008a5e7SBeilei Xing __rte_internal
258715939a7SBeilei Xing void idpf_qc_tx_queue_release(void *txq);
259c008a5e7SBeilei Xing __rte_internal
260715939a7SBeilei Xing int idpf_qc_ts_mbuf_register(struct idpf_rx_queue *rxq);
2618c6098afSBeilei Xing __rte_internal
262715939a7SBeilei Xing int idpf_qc_single_rxq_mbufs_alloc(struct idpf_rx_queue *rxq);
263c008a5e7SBeilei Xing __rte_internal
264715939a7SBeilei Xing int idpf_qc_split_rxq_mbufs_alloc(struct idpf_rx_queue *rxq);
2658c6098afSBeilei Xing __rte_internal
2669ebf3f6bSBeilei Xing uint16_t idpf_dp_splitq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
2678c6098afSBeilei Xing 				  uint16_t nb_pkts);
2688c6098afSBeilei Xing __rte_internal
2699ebf3f6bSBeilei Xing uint16_t idpf_dp_splitq_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
2708c6098afSBeilei Xing 				  uint16_t nb_pkts);
2718c6098afSBeilei Xing __rte_internal
2729ebf3f6bSBeilei Xing uint16_t idpf_dp_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
2738c6098afSBeilei Xing 				   uint16_t nb_pkts);
2748c6098afSBeilei Xing __rte_internal
2759ebf3f6bSBeilei Xing uint16_t idpf_dp_singleq_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
2768c6098afSBeilei Xing 				   uint16_t nb_pkts);
2778c6098afSBeilei Xing __rte_internal
2789ebf3f6bSBeilei Xing uint16_t idpf_dp_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
2798c6098afSBeilei Xing 			   uint16_t nb_pkts);
280f580252dSBeilei Xing __rte_internal
281715939a7SBeilei Xing int idpf_qc_singleq_rx_vec_setup(struct idpf_rx_queue *rxq);
2820fac6a1cSBeilei Xing __rte_internal
283e528d7c7SWenjun Wu int idpf_qc_splitq_rx_vec_setup(struct idpf_rx_queue *rxq);
284e528d7c7SWenjun Wu __rte_internal
285e528d7c7SWenjun Wu int idpf_qc_tx_vec_avx512_setup(struct idpf_tx_queue *txq);
286e528d7c7SWenjun Wu __rte_internal
287e528d7c7SWenjun Wu int idpf_qc_tx_vec_avx512_setup(struct idpf_tx_queue *txq);
2880fac6a1cSBeilei Xing __rte_internal
2899ebf3f6bSBeilei Xing uint16_t idpf_dp_singleq_recv_pkts_avx512(void *rx_queue,
2900fac6a1cSBeilei Xing 					  struct rte_mbuf **rx_pkts,
2910fac6a1cSBeilei Xing 					  uint16_t nb_pkts);
2920fac6a1cSBeilei Xing __rte_internal
293e528d7c7SWenjun Wu uint16_t idpf_dp_splitq_recv_pkts_avx512(void *tx_queue, struct rte_mbuf **tx_pkts,
294e528d7c7SWenjun Wu 					 uint16_t nb_pkts);
295e528d7c7SWenjun Wu __rte_internal
2969ebf3f6bSBeilei Xing uint16_t idpf_dp_singleq_xmit_pkts_avx512(void *tx_queue,
2970fac6a1cSBeilei Xing 					  struct rte_mbuf **tx_pkts,
2980fac6a1cSBeilei Xing 					  uint16_t nb_pkts);
299e528d7c7SWenjun Wu __rte_internal
300e528d7c7SWenjun Wu uint16_t idpf_dp_splitq_xmit_pkts_avx512(void *tx_queue, struct rte_mbuf **tx_pkts,
301e528d7c7SWenjun Wu 					 uint16_t nb_pkts);
30213145ac4SMingxia Liu __rte_internal
30313145ac4SMingxia Liu uint16_t idpf_dp_singleq_recv_scatter_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
30413145ac4SMingxia Liu 			  uint16_t nb_pkts);
305c008a5e7SBeilei Xing 
3068b95ced4SBeilei Xing #endif /* _IDPF_COMMON_RXTX_H_ */
307