LCOV - code coverage report
Current view: top level - drivers/net/hinic3 - hinic3_rx.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 5 0.0 %
Date: 2026-04-01 20:02:27 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 12 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2025 Huawei Technologies Co., Ltd
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef _HINIC3_RX_H_
       6                 :            : #define _HINIC3_RX_H_
       7                 :            : 
       8                 :            : #define RQ_CQE_OFFOLAD_TYPE_PTYPE_OFFLOAD_SHIFT 0
       9                 :            : #define RQ_CQE_OFFOLAD_TYPE_VLAN_EN_SHIFT       21
      10                 :            : #define RQ_CQE_OFFOLAD_TYPE_RSS_TYPE_SHIFT      24
      11                 :            : 
      12                 :            : #define RQ_CQE_OFFOLAD_TYPE_PTYPE_OFFLOAD_MASK  0xFFFU
      13                 :            : #define RQ_CQE_OFFOLAD_TYPE_VLAN_EN_MASK        0x1U
      14                 :            : #define RQ_CQE_OFFOLAD_TYPE_RSS_TYPE_MASK       0xFFU
      15                 :            : 
      16                 :            : #define DPI_EXT_ACTION_FILED (1ULL << 32)
      17                 :            : 
      18                 :            : #define RQ_CQE_OFFOLAD_TYPE_GET(val, member)               \
      19                 :            :         (((val) >> RQ_CQE_OFFOLAD_TYPE_##member##_SHIFT) & \
      20                 :            :          RQ_CQE_OFFOLAD_TYPE_##member##_MASK)
      21                 :            : 
      22                 :            : #define HINIC3_GET_RX_PTYPE_OFFLOAD(offload_type) \
      23                 :            :         RQ_CQE_OFFOLAD_TYPE_GET(offload_type, PTYPE_OFFLOAD)
      24                 :            : 
      25                 :            : #define HINIC3_GET_RX_PKT_TYPE(offload_type) \
      26                 :            :         RQ_CQE_OFFOLAD_TYPE_GET(offload_type, PKT_TYPE)
      27                 :            : 
      28                 :            : #define HINIC3_GET_RX_PKT_UMBCAST(offload_type) \
      29                 :            :         RQ_CQE_OFFOLAD_TYPE_GET(offload_type, PKT_UMBCAST)
      30                 :            : 
      31                 :            : #define HINIC3_GET_RX_VLAN_OFFLOAD_EN(offload_type) \
      32                 :            :         RQ_CQE_OFFOLAD_TYPE_GET(offload_type, VLAN_EN)
      33                 :            : 
      34                 :            : #define HINIC3_GET_RSS_TYPES(offload_type) \
      35                 :            :         RQ_CQE_OFFOLAD_TYPE_GET(offload_type, RSS_TYPE)
      36                 :            : 
      37                 :            : #define RQ_CQE_SGE_VLAN_SHIFT 0
      38                 :            : #define RQ_CQE_SGE_LEN_SHIFT  16
      39                 :            : 
      40                 :            : #define RQ_CQE_SGE_VLAN_MASK 0xFFFFU
      41                 :            : #define RQ_CQE_SGE_LEN_MASK  0xFFFFU
      42                 :            : 
      43                 :            : #define RQ_CQE_SGE_GET(val, member) \
      44                 :            :         (((val) >> RQ_CQE_SGE_##member##_SHIFT) & RQ_CQE_SGE_##member##_MASK)
      45                 :            : 
      46                 :            : #define HINIC3_GET_RX_VLAN_TAG(vlan_len) RQ_CQE_SGE_GET(vlan_len, VLAN)
      47                 :            : 
      48                 :            : #define HINIC3_GET_RX_PKT_LEN(vlan_len) RQ_CQE_SGE_GET(vlan_len, LEN)
      49                 :            : 
      50                 :            : #define RQ_CQE_STATUS_CSUM_ERR_SHIFT  0
      51                 :            : #define RQ_CQE_STATUS_NUM_LRO_SHIFT   16
      52                 :            : #define RQ_CQE_STATUS_LRO_PUSH_SHIFT  25
      53                 :            : #define RQ_CQE_STATUS_LRO_ENTER_SHIFT 26
      54                 :            : #define RQ_CQE_STATUS_LRO_INTR_SHIFT  27
      55                 :            : 
      56                 :            : #define RQ_CQE_STATUS_BP_EN_SHIFT     30
      57                 :            : #define RQ_CQE_STATUS_RXDONE_SHIFT    31
      58                 :            : #define RQ_CQE_STATUS_DECRY_PKT_SHIFT 29
      59                 :            : #define RQ_CQE_STATUS_FLUSH_SHIFT     28
      60                 :            : 
      61                 :            : #define RQ_CQE_STATUS_CSUM_ERR_MASK  0xFFFFU
      62                 :            : #define RQ_CQE_STATUS_NUM_LRO_MASK   0xFFU
      63                 :            : #define RQ_CQE_STATUS_LRO_PUSH_MASK  0X1U
      64                 :            : #define RQ_CQE_STATUS_LRO_ENTER_MASK 0X1U
      65                 :            : #define RQ_CQE_STATUS_LRO_INTR_MASK  0X1U
      66                 :            : #define RQ_CQE_STATUS_BP_EN_MASK     0X1U
      67                 :            : #define RQ_CQE_STATUS_RXDONE_MASK    0x1U
      68                 :            : #define RQ_CQE_STATUS_FLUSH_MASK     0x1U
      69                 :            : #define RQ_CQE_STATUS_DECRY_PKT_MASK 0x1U
      70                 :            : 
      71                 :            : #define RQ_CQE_STATUS_GET(val, member)               \
      72                 :            :         (((val) >> RQ_CQE_STATUS_##member##_SHIFT) & \
      73                 :            :          RQ_CQE_STATUS_##member##_MASK)
      74                 :            : 
      75                 :            : #define HINIC3_GET_RX_CSUM_ERR(status) RQ_CQE_STATUS_GET(status, CSUM_ERR)
      76                 :            : 
      77                 :            : #define HINIC3_GET_RX_DONE(status) RQ_CQE_STATUS_GET(status, RXDONE)
      78                 :            : 
      79                 :            : #define HINIC3_GET_RX_FLUSH(status) RQ_CQE_STATUS_GET(status, FLUSH)
      80                 :            : 
      81                 :            : #define HINIC3_GET_RX_BP_EN(status) RQ_CQE_STATUS_GET(status, BP_EN)
      82                 :            : 
      83                 :            : #define HINIC3_GET_RX_NUM_LRO(status) RQ_CQE_STATUS_GET(status, NUM_LRO)
      84                 :            : 
      85                 :            : #define HINIC3_RX_IS_DECRY_PKT(status) RQ_CQE_STATUS_GET(status, DECRY_PKT)
      86                 :            : 
      87                 :            : #define RQ_CQE_SUPER_CQE_EN_SHIFT  0
      88                 :            : #define RQ_CQE_PKT_NUM_SHIFT       1
      89                 :            : #define RQ_CQE_PKT_LAST_LEN_SHIFT  6
      90                 :            : #define RQ_CQE_PKT_FIRST_LEN_SHIFT 19
      91                 :            : 
      92                 :            : #define RQ_CQE_SUPER_CQE_EN_MASK  0x1
      93                 :            : #define RQ_CQE_PKT_NUM_MASK       0x1FU
      94                 :            : #define RQ_CQE_PKT_FIRST_LEN_MASK 0x1FFFU
      95                 :            : #define RQ_CQE_PKT_LAST_LEN_MASK  0x1FFFU
      96                 :            : 
      97                 :            : #define RQ_CQE_PKT_NUM_GET(val, member) \
      98                 :            :         (((val) >> RQ_CQE_PKT_##member##_SHIFT) & RQ_CQE_PKT_##member##_MASK)
      99                 :            : #define HINIC3_GET_RQ_CQE_PKT_NUM(pkt_info) RQ_CQE_PKT_NUM_GET(pkt_info, NUM)
     100                 :            : 
     101                 :            : #define RQ_CQE_SUPER_CQE_EN_GET(val, member) \
     102                 :            :         (((val) >> RQ_CQE_##member##_SHIFT) & RQ_CQE_##member##_MASK)
     103                 :            : 
     104                 :            : #define HINIC3_GET_SUPER_CQE_EN(pkt_info) \
     105                 :            :         RQ_CQE_SUPER_CQE_EN_GET(pkt_info, SUPER_CQE_EN)
     106                 :            : 
     107                 :            : #define RQ_CQE_PKT_LEN_GET(val, member) \
     108                 :            :         (((val) >> RQ_CQE_PKT_##member##_SHIFT) & RQ_CQE_PKT_##member##_MASK)
     109                 :            : 
     110                 :            : #define RQ_CQE_DECRY_INFO_DECRY_STATUS_SHIFT  8
     111                 :            : #define RQ_CQE_DECRY_INFO_ESP_NEXT_HEAD_SHIFT 0
     112                 :            : 
     113                 :            : #define RQ_CQE_DECRY_INFO_DECRY_STATUS_MASK  0xFFU
     114                 :            : #define RQ_CQE_DECRY_INFO_ESP_NEXT_HEAD_MASK 0xFFU
     115                 :            : 
     116                 :            : #define RQ_CQE_DECRY_INFO_GET(val, member)               \
     117                 :            :         (((val) >> RQ_CQE_DECRY_INFO_##member##_SHIFT) & \
     118                 :            :          RQ_CQE_DECRY_INFO_##member##_MASK)
     119                 :            : 
     120                 :            : #define HINIC3_GET_DECRYPT_STATUS(decry_info) \
     121                 :            :         RQ_CQE_DECRY_INFO_GET(decry_info, DECRY_STATUS)
     122                 :            : 
     123                 :            : #define HINIC3_GET_ESP_NEXT_HEAD(decry_info) \
     124                 :            :         RQ_CQE_DECRY_INFO_GET(decry_info, ESP_NEXT_HEAD)
     125                 :            : 
     126                 :            : /* Compact CQE Field */
     127                 :            : /* cqe dw0 */
     128                 :            : #define RQ_COMPACT_CQE_STATUS_RXDONE_SHIFT              31
     129                 :            : #define RQ_COMPACT_CQE_STATUS_CQE_TYPE_SHIFT            30
     130                 :            : #define RQ_COMPACT_CQE_STATUS_TS_FLAG_SHIFT             29
     131                 :            : #define RQ_COMPACT_CQE_STATUS_VLAN_EN_SHIFT             28
     132                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_FORMAT_SHIFT          25
     133                 :            : #define RQ_COMPACT_CQE_STATUS_IP_TYPE_SHIFT             24
     134                 :            : #define RQ_COMPACT_CQE_STATUS_CQE_LEN_SHIFT             23
     135                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_MC_SHIFT              21
     136                 :            : #define RQ_COMPACT_CQE_STATUS_CSUM_ERR_SHIFT            19
     137                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_TYPE_SHIFT            16
     138                 :            : #define RQ_COMPACT_CQE_STATUS_PTYPE_SHIFT               16
     139                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_LEN_SHIFT             0
     140                 :            : 
     141                 :            : #define RQ_COMPACT_CQE_STATUS_RXDONE_MASK               0x1U
     142                 :            : #define RQ_COMPACT_CQE_STATUS_CQE_TYPE_MASK             0x1U
     143                 :            : #define RQ_COMPACT_CQE_STATUS_TS_FLAG_MASK              0x1U
     144                 :            : #define RQ_COMPACT_CQE_STATUS_VLAN_EN_MASK              0x1U
     145                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_FORMAT_MASK   0x7U
     146                 :            : #define RQ_COMPACT_CQE_STATUS_IP_TYPE_MASK              0x1U
     147                 :            : #define RQ_COMPACT_CQE_STATUS_CQE_LEN_MASK              0x1U
     148                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_MC_MASK               0x1U
     149                 :            : #define RQ_COMPACT_CQE_STATUS_CSUM_ERR_MASK             0x3U
     150                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_TYPE_MASK             0x7U
     151                 :            : #define RQ_COMPACT_CQE_STATUS_PTYPE_MASK                0xFFFU
     152                 :            : #define RQ_COMPACT_CQE_STATUS_PKT_LEN_MASK              0xFFFFU
     153                 :            : 
     154                 :            : #define HINIC3_RQ_COMPACT_CQE_STATUS_GET(val, member) \
     155                 :            :         ((((val) >> RQ_COMPACT_CQE_STATUS_##member##_SHIFT) & \
     156                 :            :                 RQ_COMPACT_CQE_STATUS_##member##_MASK))
     157                 :            : 
     158                 :            : #define HINIC3_RQ_CQE_SEPARATE  0
     159                 :            : #define HINIC3_RQ_CQE_INTEGRATE 1
     160                 :            : 
     161                 :            : /* cqe dw2 */
     162                 :            : #define RQ_COMPACT_CQE_OFFLOAD_NUM_LRO_SHIFT            24
     163                 :            : #define RQ_COMPACT_CQE_OFFLOAD_VLAN_SHIFT               8
     164                 :            : 
     165                 :            : #define RQ_COMPACT_CQE_OFFLOAD_NUM_LRO_MASK             0xFFU
     166                 :            : #define RQ_COMPACT_CQE_OFFLOAD_VLAN_MASK                0xFFFFU
     167                 :            : 
     168                 :            : #define HINIC3_RQ_COMPACT_CQE_OFFLOAD_GET(val, member) \
     169                 :            :         (((val) >> RQ_COMPACT_CQE_OFFLOAD_##member##_SHIFT) & \
     170                 :            :         RQ_COMPACT_CQE_OFFLOAD_##member##_MASK)
     171                 :            : 
     172                 :            : #define HINIC3_RQ_COMPACT_CQE_16BYTE    0
     173                 :            : #define HINIC3_RQ_COMPACT_CQE_8BYTE     1
     174                 :            : /* Rx cqe checksum err */
     175                 :            : #define HINIC3_RX_CSUM_IP_CSUM_ERR      RTE_BIT32(0)
     176                 :            : #define HINIC3_RX_CSUM_TCP_CSUM_ERR     RTE_BIT32(1)
     177                 :            : #define HINIC3_RX_CSUM_UDP_CSUM_ERR     RTE_BIT32(2)
     178                 :            : #define HINIC3_RX_CSUM_IGMP_CSUM_ERR    RTE_BIT32(3)
     179                 :            : #define HINIC3_RX_CSUM_ICMP_V4_CSUM_ERR RTE_BIT32(4)
     180                 :            : #define HINIC3_RX_CSUM_ICMP_V6_CSUM_ERR RTE_BIT32(5)
     181                 :            : #define HINIC3_RX_CSUM_SCTP_CRC_ERR     RTE_BIT32(6)
     182                 :            : #define HINIC3_RX_CSUM_HW_CHECK_NONE    RTE_BIT32(7)
     183                 :            : #define HINIC3_RX_CSUM_IPSU_OTHER_ERR   RTE_BIT32(8)
     184                 :            : 
     185                 :            : #define HINIC3_DEFAULT_RX_CSUM_OFFLOAD 0xFFF
     186                 :            : #define HINIC3_CQE_LEN                 32
     187                 :            : 
     188                 :            : #define HINIC3_RSS_OFFLOAD_ALL (         \
     189                 :            :         RTE_ETH_RSS_IPV4 |               \
     190                 :            :         RTE_ETH_RSS_FRAG_IPV4 |          \
     191                 :            :         RTE_ETH_RSS_NONFRAG_IPV4_TCP |   \
     192                 :            :         RTE_ETH_RSS_NONFRAG_IPV4_UDP |   \
     193                 :            :         RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \
     194                 :            :         RTE_ETH_RSS_IPV6 |               \
     195                 :            :         RTE_ETH_RSS_FRAG_IPV6 |          \
     196                 :            :         RTE_ETH_RSS_NONFRAG_IPV6_TCP |   \
     197                 :            :         RTE_ETH_RSS_NONFRAG_IPV6_UDP |   \
     198                 :            :         RTE_ETH_RSS_NONFRAG_IPV6_OTHER | \
     199                 :            :         RTE_ETH_RSS_IPV6_EX |            \
     200                 :            :         RTE_ETH_RSS_IPV6_TCP_EX |        \
     201                 :            :         RTE_ETH_RSS_IPV6_UDP_EX)
     202                 :            : 
     203                 :            : struct hinic3_rxq_stats {
     204                 :            :         uint64_t packets;
     205                 :            :         uint64_t bytes;
     206                 :            :         uint64_t errors;
     207                 :            :         uint64_t csum_errors;
     208                 :            :         uint64_t other_errors;
     209                 :            :         uint64_t unlock_bp;
     210                 :            :         uint64_t dropped;
     211                 :            : 
     212                 :            :         uint64_t rx_nombuf;
     213                 :            :         uint64_t rx_discards;
     214                 :            :         uint64_t burst_pkts;
     215                 :            :         uint64_t empty;
     216                 :            :         uint64_t tsc;
     217                 :            : #ifdef HINIC3_XSTAT_MBUF_USE
     218                 :            :         uint64_t rx_alloc_mbuf_bytes;
     219                 :            :         uint64_t rx_free_mbuf_bytes;
     220                 :            :         uint64_t rx_left_mbuf_bytes;
     221                 :            : #endif
     222                 :            : 
     223                 :            : #ifdef HINIC3_XSTAT_RXBUF_INFO
     224                 :            :         uint64_t rx_mbuf;
     225                 :            :         uint64_t rx_avail;
     226                 :            :         uint64_t rx_hole;
     227                 :            : #endif
     228                 :            : 
     229                 :            : #ifdef HINIC3_XSTAT_PROF_RX
     230                 :            :         uint64_t app_tsc;
     231                 :            :         uint64_t pmd_tsc;
     232                 :            : #endif
     233                 :            : };
     234                 :            : 
     235                 :            : struct __rte_cache_aligned hinic3_rq_cqe {
     236                 :            :         RTE_ATOMIC(uint32_t)status;
     237                 :            :         uint32_t vlan_len;
     238                 :            : 
     239                 :            :         uint32_t offload_type;
     240                 :            :         uint32_t hash_val;
     241                 :            :         uint32_t mark_id_0;
     242                 :            :         uint32_t mark_id_1;
     243                 :            :         uint32_t mark_id_2;
     244                 :            :         uint32_t pkt_info;
     245                 :            : };
     246                 :            : 
     247                 :            : struct hinic3_cqe_info {
     248                 :            :         uint8_t data_offset;
     249                 :            :         uint8_t lro_num;
     250                 :            :         uint8_t vlan_offload;
     251                 :            :         uint8_t cqe_len;
     252                 :            : 
     253                 :            :         uint8_t cqe_type;
     254                 :            :         uint8_t ts_flag;
     255                 :            :         uint16_t csum_err;
     256                 :            : 
     257                 :            :         uint16_t vlan_tag;
     258                 :            :         uint16_t ptype;
     259                 :            : 
     260                 :            :         uint16_t pkt_len;
     261                 :            :         uint16_t rss_type;
     262                 :            : 
     263                 :            :         uint32_t rss_hash_value;
     264                 :            : };
     265                 :            : 
     266                 :            : /**
     267                 :            :  * Attention: please do not add any member in hinic3_rx_info
     268                 :            :  * because rxq bulk rearm mode will write mbuf in rx_info.
     269                 :            :  */
     270                 :            : struct hinic3_rx_info {
     271                 :            :         struct rte_mbuf *mbuf;
     272                 :            : };
     273                 :            : 
     274                 :            : struct hinic3_sge_sect {
     275                 :            :         struct hinic3_sge sge;
     276                 :            :         uint32_t rsvd;
     277                 :            : };
     278                 :            : 
     279                 :            : struct hinic3_rq_extend_wqe {
     280                 :            :         struct hinic3_sge_sect buf_desc;
     281                 :            :         struct hinic3_sge_sect cqe_sect;
     282                 :            : };
     283                 :            : 
     284                 :            : struct hinic3_rq_normal_wqe {
     285                 :            :         uint32_t buf_hi_addr;
     286                 :            :         uint32_t buf_lo_addr;
     287                 :            :         uint32_t cqe_hi_addr;
     288                 :            :         uint32_t cqe_lo_addr;
     289                 :            : };
     290                 :            : 
     291                 :            : struct hinic3_rq_compact_wqe {
     292                 :            :         uint32_t buf_hi_addr;
     293                 :            :         uint32_t buf_lo_addr;
     294                 :            : };
     295                 :            : 
     296                 :            : struct hinic3_rq_wqe {
     297                 :            :         union {
     298                 :            :                 struct hinic3_rq_compact_wqe compact_wqe;
     299                 :            :                 struct hinic3_rq_normal_wqe normal_wqe;
     300                 :            :                 struct hinic3_rq_extend_wqe extend_wqe;
     301                 :            :         };
     302                 :            : };
     303                 :            : 
     304                 :            : struct hinic3_rq_ci_wb {
     305                 :            :         union {
     306                 :            :                 struct {
     307                 :            :                         uint16_t cqe_num;
     308                 :            :                         uint16_t hw_ci;
     309                 :            :                 } bs;
     310                 :            :                 RTE_ATOMIC(uint32_t) value;
     311                 :            :         } dw1;
     312                 :            : 
     313                 :            :         uint32_t rsvd[3];
     314                 :            : };
     315                 :            : 
     316                 :            : 
     317                 :            : struct __rte_cache_aligned hinic3_rxq {
     318                 :            :         struct hinic3_nic_dev *nic_dev;
     319                 :            : 
     320                 :            :         uint16_t q_id;
     321                 :            :         uint16_t q_depth;
     322                 :            :         uint16_t q_mask;
     323                 :            :         uint16_t buf_len;
     324                 :            : 
     325                 :            :         uint32_t rx_buff_shift;
     326                 :            : 
     327                 :            :         uint16_t rx_free_thresh;
     328                 :            :         uint16_t rxinfo_align_end;
     329                 :            :         uint16_t wqebb_shift;
     330                 :            :         uint16_t wqebb_size;
     331                 :            : 
     332                 :            :         uint16_t wqe_type;
     333                 :            :         uint16_t cons_idx;
     334                 :            :         uint16_t prod_idx;
     335                 :            :         uint16_t delta;
     336                 :            : 
     337                 :            :         uint16_t next_to_update;
     338                 :            :         uint16_t port_id;
     339                 :            : 
     340                 :            :         const struct rte_memzone *rq_mz;
     341                 :            :         void *queue_buf_vaddr; /**< rxq dma info */
     342                 :            :         rte_iova_t queue_buf_paddr;
     343                 :            : 
     344                 :            :         const struct rte_memzone *pi_mz;
     345                 :            :         uint16_t *pi_virt_addr;
     346                 :            :         void *db_addr;
     347                 :            :         rte_iova_t pi_dma_addr;
     348                 :            : 
     349                 :            :         struct hinic3_rx_info *rx_info;
     350                 :            :         struct hinic3_rq_cqe *rx_cqe;
     351                 :            :         struct rte_mempool *mb_pool;
     352                 :            : 
     353                 :            :         const struct rte_memzone *ci_mz;
     354                 :            :         struct hinic3_rq_ci_wb *rq_ci;
     355                 :            :         rte_iova_t rq_ci_paddr;
     356                 :            : 
     357                 :            :         const struct rte_memzone *cqe_mz;
     358                 :            :         rte_iova_t cqe_start_paddr;
     359                 :            :         void *cqe_start_vaddr;
     360                 :            :         uint8_t dp_intr_en;
     361                 :            :         uint16_t msix_entry_idx;
     362                 :            : 
     363                 :            :         bool rx_deferred_start; /* don't start this queue in dev start */
     364                 :            :         unsigned long status;
     365                 :            :         uint64_t wait_time_cycle;
     366                 :            : 
     367                 :            :         struct hinic3_rxq_stats rxq_stats;
     368                 :            : #ifdef HINIC3_XSTAT_PROF_RX
     369                 :            :         uint64_t prof_rx_end_tsc; /**< Performance profiling. */
     370                 :            : #endif
     371                 :            : };
     372                 :            : 
     373                 :            : /* Rx CQE info get callback function */
     374                 :            : typedef void  (*nic_rx_get_cqe_info_t)(struct hinic3_rxq *rxq,
     375                 :            :                                        volatile struct hinic3_rq_cqe *rx_cqe,
     376                 :            :                                        struct hinic3_cqe_info *cqe_info);
     377                 :            : 
     378                 :            : /* Rx CQE check status callback function */
     379                 :            : typedef bool  (*nic_rx_cqe_done_t)(struct hinic3_rxq *rxq,
     380                 :            :                                    volatile struct hinic3_rq_cqe **rx_cqe);
     381                 :            : 
     382                 :            : /* Rx CQE empty poll callback function */
     383                 :            : typedef int   (*nic_rx_poll_rq_empty_t)(struct hinic3_rxq *rxq);
     384                 :            : 
     385                 :            : struct hinic3_nic_rx_ops {
     386                 :            :         nic_rx_get_cqe_info_t           nic_rx_get_cqe_info;
     387                 :            :         nic_rx_cqe_done_t               nic_rx_cqe_done;
     388                 :            :         nic_rx_poll_rq_empty_t          nic_rx_poll_rq_empty;
     389                 :            : };
     390                 :            : 
     391                 :            : uint16_t hinic3_rx_fill_wqe(struct hinic3_rxq *rxq);
     392                 :            : 
     393                 :            : uint16_t hinic3_rx_fill_buffers(struct hinic3_rxq *rxq);
     394                 :            : 
     395                 :            : void hinic3_free_rxq_mbufs(struct hinic3_rxq *rxq);
     396                 :            : 
     397                 :            : void hinic3_free_all_rxq_mbufs(struct hinic3_nic_dev *nic_dev);
     398                 :            : 
     399                 :            : int hinic3_update_rss_config(struct rte_eth_dev *dev,
     400                 :            :                              struct rte_eth_rss_conf *rss_conf);
     401                 :            : 
     402                 :            : int hinic3_poll_integrated_cqe_rq_empty(struct hinic3_rxq *rxq);
     403                 :            : int hinic3_poll_rq_empty(struct hinic3_rxq *rxq);
     404                 :            : 
     405                 :            : void hinic3_dump_cqe_status(struct hinic3_rxq *rxq, uint32_t *cqe_done_cnt,
     406                 :            :                             uint32_t *cqe_hole_cnt, uint32_t *head_ci, uint32_t *head_done);
     407                 :            : 
     408                 :            : int hinic3_stop_rq(struct rte_eth_dev *eth_dev, struct hinic3_rxq *rxq);
     409                 :            : 
     410                 :            : int hinic3_start_rq(struct rte_eth_dev *eth_dev, struct hinic3_rxq *rxq);
     411                 :            : 
     412                 :            : uint16_t hinic3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
     413                 :            : 
     414                 :            : void hinic3_add_rq_to_rx_queue_list(struct hinic3_nic_dev *nic_dev,
     415                 :            :                                     uint16_t queue_id);
     416                 :            : 
     417                 :            : int hinic3_refill_indir_rqid(struct hinic3_rxq *rxq);
     418                 :            : 
     419                 :            : void hinic3_init_rx_queue_list(struct hinic3_nic_dev *nic_dev);
     420                 :            : 
     421                 :            : void hinic3_remove_rq_from_rx_queue_list(struct hinic3_nic_dev *nic_dev,
     422                 :            :                                          uint16_t queue_id);
     423                 :            : int hinic3_start_all_rqs(struct rte_eth_dev *eth_dev);
     424                 :            : 
     425                 :            : #ifdef HINIC3_XSTAT_RXBUF_INFO
     426                 :            : void hinic3_get_stats(struct hinic3_rxq *rxq);
     427                 :            : #endif
     428                 :            : 
     429                 :            : /**
     430                 :            :  * Get receive queue local ci.
     431                 :            :  *
     432                 :            :  * @param[in] rxq
     433                 :            :  * Pointer to receive queue structure.
     434                 :            :  * @return
     435                 :            :  * Receive queue local ci.
     436                 :            :  */
     437                 :            : static inline uint16_t
     438                 :            : hinic3_get_rq_local_ci(struct hinic3_rxq *rxq)
     439                 :            : {
     440   [ #  #  #  #  :          0 :         return MASKED_QUEUE_IDX(rxq, rxq->cons_idx);
                   #  # ]
     441                 :            : }
     442                 :            : 
     443                 :            : static inline uint16_t
     444                 :            : hinic3_get_rq_free_wqebb(struct hinic3_rxq *rxq)
     445                 :            : {
     446   [ #  #  #  # ]:          0 :         return rxq->delta - 1;
     447                 :            : }
     448                 :            : 
     449                 :            : /**
     450                 :            :  * Update receive queue local ci.
     451                 :            :  *
     452                 :            :  * @param[in] rxq
     453                 :            :  * Pointer to receive queue structure.
     454                 :            :  * @param[out] wqe_cnt
     455                 :            :  * Wqebb counters.
     456                 :            :  */
     457                 :            : static inline void
     458                 :            : hinic3_update_rq_local_ci(struct hinic3_rxq *rxq, uint16_t wqe_cnt)
     459                 :            : {
     460                 :          0 :         rxq->cons_idx += wqe_cnt;
     461         [ #  # ]:          0 :         rxq->delta += wqe_cnt;
     462                 :          0 : }
     463                 :            : 
     464                 :            : /**
     465                 :            :  * Get receive cqe information
     466                 :            :  *
     467                 :            :  * @param[in] rxq
     468                 :            :  *   Receive queue
     469                 :            :  * @param[in] rx_cqe
     470                 :            :  *   Receive cqe
     471                 :            :  * @param[in] cqe_info
     472                 :            :  *   Packet information parsed from cqe
     473                 :            :  */
     474                 :            : void
     475                 :            : hinic3_rx_get_cqe_info(struct hinic3_rxq *rxq, volatile struct hinic3_rq_cqe *rx_cqe,
     476                 :            :                        struct hinic3_cqe_info *cqe_info);
     477                 :            : 
     478                 :            : /**
     479                 :            :  * Get receive compact cqe information
     480                 :            :  *
     481                 :            :  * @param[in] rx_queue
     482                 :            :  *   Receive queue
     483                 :            :  * @param[in] rx_cqe
     484                 :            :  *   Receive compact cqe
     485                 :            :  * @param[in] cqe_info
     486                 :            :  *   Packet information parsed from cqe
     487                 :            :  */
     488                 :            : void
     489                 :            : hinic3_rx_get_compact_cqe_info(struct hinic3_rxq *rxq, volatile struct hinic3_rq_cqe *rx_cqe,
     490                 :            :                                struct hinic3_cqe_info *cqe_info);
     491                 :            : 
     492                 :            : /**
     493                 :            :  * Check whether pkt is received when CQE is separated
     494                 :            :  *
     495                 :            :  * @param[in] rxq
     496                 :            :  *   Receive queue
     497                 :            :  * @param[in] rx_cqe
     498                 :            :  *   The CQE written by hw
     499                 :            :  * @return
     500                 :            :  *   True: Packet is received
     501                 :            :  *   False: Packet is not received
     502                 :            :  */
     503                 :            : bool
     504                 :            : hinic3_rx_separate_cqe_done(struct hinic3_rxq *rxq, volatile struct hinic3_rq_cqe **rx_cqe);
     505                 :            : 
     506                 :            : /**
     507                 :            :  * Check whether pkt is received when CQE is integrated
     508                 :            :  *
     509                 :            :  * @param[in] rxq
     510                 :            :  *   Receive queue
     511                 :            :  * @param[in] rx_cqe
     512                 :            :  *   The CQE written by hw
     513                 :            :  * @return
     514                 :            :  *   True: Packet is received
     515                 :            :  *   False: Packet is not received
     516                 :            :  */
     517                 :            : bool
     518                 :            : hinic3_rx_integrated_cqe_done(struct hinic3_rxq *rxq, volatile struct hinic3_rq_cqe **rx_cqe);
     519                 :            : 
     520                 :            : #endif /* _HINIC3_RX_H_ */

Generated by: LCOV version 1.14