1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Huawei Technologies Co., Ltd
5 #ifndef _HINIC_PMD_RX_H_
6 #define _HINIC_PMD_RX_H_
8 #define HINIC_DEFAULT_RX_FREE_THRESH 32
10 #define HINIC_RSS_OFFLOAD_ALL ( \
13 ETH_RSS_NONFRAG_IPV4_TCP | \
14 ETH_RSS_NONFRAG_IPV4_UDP | \
17 ETH_RSS_NONFRAG_IPV6_TCP | \
18 ETH_RSS_NONFRAG_IPV6_UDP | \
20 ETH_RSS_IPV6_TCP_EX | \
23 enum rq_completion_fmt {
27 struct hinic_rq_ctrl {
38 #if defined(RTE_ARCH_ARM64)
39 } __rte_cache_aligned;
44 struct hinic_rq_cqe_sect {
49 struct hinic_rq_bufdesc {
55 struct hinic_rq_ctrl ctrl;
57 struct hinic_rq_cqe_sect cqe_sect;
58 struct hinic_rq_bufdesc buf_desc;
61 struct hinic_rxq_stats {
70 /* Attention, Do not add any member in hinic_rx_info
71 * as rxq bulk rearm mode will write mbuf in rx_info
73 struct hinic_rx_info {
74 struct rte_mbuf *mbuf;
79 volatile u16 *pi_virt_addr;
92 struct hinic_rxq_stats rxq_stats;
94 struct hinic_nic_dev *nic_dev;
96 struct hinic_rx_info *rx_info;
97 volatile struct hinic_rq_cqe *rx_cqe;
99 dma_addr_t cqe_start_paddr;
100 void *cqe_start_vaddr;
101 struct rte_mempool *mb_pool;
104 int hinic_setup_rx_resources(struct hinic_rxq *rxq);
106 void hinic_free_all_rx_resources(struct rte_eth_dev *eth_dev);
108 void hinic_free_all_rx_mbuf(struct rte_eth_dev *eth_dev);
110 void hinic_free_rx_resources(struct hinic_rxq *rxq);
112 u16 hinic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, u16 nb_pkts);
114 void hinic_free_all_rx_mbufs(struct hinic_rxq *rxq);
116 void hinic_rx_alloc_pkts(struct hinic_rxq *rxq);
118 void hinic_rxq_get_stats(struct hinic_rxq *rxq, struct hinic_rxq_stats *stats);
120 void hinic_rxq_stats_reset(struct hinic_rxq *rxq);
122 int hinic_config_mq_mode(struct rte_eth_dev *dev, bool on);
124 int hinic_rx_configure(struct rte_eth_dev *dev);
126 void hinic_rx_remove_configure(struct rte_eth_dev *dev);
128 void hinic_get_func_rx_buf_size(struct hinic_nic_dev *nic_dev);
130 int hinic_create_rq(struct hinic_hwdev *hwdev, u16 q_id,
131 u16 rq_depth, unsigned int socket_id);
133 void hinic_destroy_rq(struct hinic_hwdev *hwdev, u16 q_id);
135 #endif /* _HINIC_PMD_RX_H_ */