LCOV - code coverage report
Current view: top level - drivers/net/hns3 - hns3_rss.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 9 0.0 %
Date: 2025-01-02 22:41:34 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 6 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2018-2021 HiSilicon Limited.
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef HNS3_RSS_H
       6                 :            : #define HNS3_RSS_H
       7                 :            : 
       8                 :            : #include <rte_ethdev.h>
       9                 :            : #include <rte_flow.h>
      10                 :            : 
      11                 :            : #define HNS3_RSS_SUPPORT_L3_SRC_DST     (RTE_ETH_RSS_L3_SRC_ONLY | \
      12                 :            :                                          RTE_ETH_RSS_L3_DST_ONLY)
      13                 :            : #define HNS3_RSS_SUPPORT_L4_SRC_DST     (RTE_ETH_RSS_L4_SRC_ONLY | \
      14                 :            :                                          RTE_ETH_RSS_L4_DST_ONLY)
      15                 :            : #define HNS3_RSS_SUPPORT_L3L4           (HNS3_RSS_SUPPORT_L3_SRC_DST | \
      16                 :            :                                          HNS3_RSS_SUPPORT_L4_SRC_DST)
      17                 :            : 
      18                 :            : #define HNS3_RSS_SUPPORT_FLOW_TYPE      (RTE_ETH_RSS_IPV4 | \
      19                 :            :                                          RTE_ETH_RSS_FRAG_IPV4 | \
      20                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV4_TCP | \
      21                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
      22                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV4_SCTP | \
      23                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \
      24                 :            :                                          RTE_ETH_RSS_IPV6 | \
      25                 :            :                                          RTE_ETH_RSS_FRAG_IPV6 | \
      26                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV6_TCP | \
      27                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV6_UDP | \
      28                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV6_SCTP | \
      29                 :            :                                          RTE_ETH_RSS_NONFRAG_IPV6_OTHER)
      30                 :            : 
      31                 :            : #define HNS3_ETH_RSS_SUPPORT            (HNS3_RSS_SUPPORT_FLOW_TYPE | \
      32                 :            :                                          HNS3_RSS_SUPPORT_L3L4)
      33                 :            : 
      34                 :            : enum hns3_tuple_field {
      35                 :            :         /* IPV4_TCP ENABLE FIELD */
      36                 :            :         HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D = 0,
      37                 :            :         HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S,
      38                 :            :         HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D,
      39                 :            :         HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S,
      40                 :            : 
      41                 :            :         /* IPV4_UDP ENABLE FIELD */
      42                 :            :         HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D = 8,
      43                 :            :         HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S,
      44                 :            :         HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D,
      45                 :            :         HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S,
      46                 :            : 
      47                 :            :         /* IPV4_SCTP ENABLE FIELD */
      48                 :            :         HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D = 16,
      49                 :            :         HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S,
      50                 :            :         HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D,
      51                 :            :         HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S,
      52                 :            : 
      53                 :            :         /* IPV4 ENABLE FIELD */
      54                 :            :         HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D = 24,
      55                 :            :         HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S,
      56                 :            :         HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D,
      57                 :            :         HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S,
      58                 :            : 
      59                 :            :         /* IPV6_TCP ENABLE FIELD */
      60                 :            :         HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D = 32,
      61                 :            :         HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S,
      62                 :            :         HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D,
      63                 :            :         HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S,
      64                 :            : 
      65                 :            :         /* IPV6_UDP ENABLE FIELD */
      66                 :            :         HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D = 40,
      67                 :            :         HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S,
      68                 :            :         HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D,
      69                 :            :         HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S,
      70                 :            : 
      71                 :            :         /* IPV6_SCTP ENABLE FIELD */
      72                 :            :         HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D = 48,
      73                 :            :         HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S,
      74                 :            :         HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D,
      75                 :            :         HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S,
      76                 :            : 
      77                 :            :         /* IPV6 ENABLE FIELD */
      78                 :            :         HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D = 56,
      79                 :            :         HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S,
      80                 :            :         HNS3_RSS_FIELD_IPV6_FRAG_IP_D,
      81                 :            :         HNS3_RSS_FIELD_IPV6_FRAG_IP_S
      82                 :            : };
      83                 :            : 
      84                 :            : #define HNS3_RSS_PCTYPE_IPV4_TCP        BIT_ULL(0)
      85                 :            : #define HNS3_RSS_PCTYPE_IPV4_UDP        BIT_ULL(8)
      86                 :            : #define HNS3_RSS_PCTYPE_IPV4_SCTP       BIT_ULL(16)
      87                 :            : #define HNS3_RSS_PCTYPE_IPV4_NONF       BIT_ULL(24)
      88                 :            : #define HNS3_RSS_PCTYPE_IPV4_FLAG       BIT_ULL(26)
      89                 :            : #define HNS3_RSS_PCTYPE_IPV6_TCP        BIT_ULL(32)
      90                 :            : #define HNS3_RSS_PCTYPE_IPV6_UDP        BIT_ULL(40)
      91                 :            : #define HNS3_RSS_PCTYPE_IPV6_SCTP       BIT_ULL(48)
      92                 :            : #define HNS3_RSS_PCTYPE_IPV6_NONF       BIT_ULL(56)
      93                 :            : #define HNS3_RSS_PCTYPE_IPV6_FLAG       BIT_ULL(58)
      94                 :            : 
      95                 :            : #define HNS3_RSS_TUPLE_IPV4_TCP_M       GENMASK(3, 0)
      96                 :            : #define HNS3_RSS_TUPLE_IPV4_UDP_M       GENMASK(11, 8)
      97                 :            : #define HNS3_RSS_TUPLE_IPV4_SCTP_M      GENMASK(19, 16)
      98                 :            : #define HNS3_RSS_TUPLE_IPV4_NONF_M      GENMASK(25, 24)
      99                 :            : #define HNS3_RSS_TUPLE_IPV4_FLAG_M      GENMASK(27, 26)
     100                 :            : #define HNS3_RSS_TUPLE_IPV6_TCP_M       GENMASK(35, 32)
     101                 :            : #define HNS3_RSS_TUPLE_IPV6_UDP_M       GENMASK(43, 40)
     102                 :            : #define HNS3_RSS_TUPLE_IPV6_SCTP_M      GENMASK(51, 48)
     103                 :            : #define HNS3_RSS_TUPLE_IPV6_NONF_M      GENMASK(57, 56)
     104                 :            : #define HNS3_RSS_TUPLE_IPV6_FLAG_M      GENMASK(59, 58)
     105                 :            : 
     106                 :            : #define HNS3_RSS_IND_TBL_SIZE   512 /* The size of hash lookup table */
     107                 :            : #define HNS3_RSS_IND_TBL_SIZE_MAX 2048
     108                 :            : #define HNS3_RSS_KEY_SIZE       40
     109                 :            : #define HNS3_RSS_KEY_SIZE_MAX   128
     110                 :            : #define HNS3_RSS_SET_BITMAP_MSK 0xffff
     111                 :            : 
     112                 :            : #define HNS3_RSS_HASH_ALGO_TOEPLITZ     0
     113                 :            : #define HNS3_RSS_HASH_ALGO_SIMPLE       1
     114                 :            : #define HNS3_RSS_HASH_ALGO_SYMMETRIC_TOEP 2
     115                 :            : #define HNS3_RSS_HASH_ALGO_MASK         0xf
     116                 :            : 
     117                 :            : /* Same as the Max queue num under TC */
     118                 :            : #define HNS3_RSS_QUEUES_BUFFER_NUM      512
     119                 :            : struct hns3_rss_conf {
     120                 :            :         uint64_t rss_hf;
     121                 :            :         uint8_t hash_algo; /* hash function type defined by hardware */
     122                 :            :         uint8_t key[HNS3_RSS_KEY_SIZE_MAX];  /* Hash key */
     123                 :            :         uint16_t rss_indirection_tbl[HNS3_RSS_IND_TBL_SIZE_MAX];
     124                 :            :         /*
     125                 :            :          * For IPv6 SCTP packets type, check whether the NIC hardware support
     126                 :            :          * RSS hash using the src/dst port as the input tuple. For Kunpeng920
     127                 :            :          * NIC hardware, it is not supported
     128                 :            :          */
     129                 :            :         bool ipv6_sctp_offload_supported;
     130                 :            : };
     131                 :            : 
     132                 :            : #ifndef ilog2
     133                 :            : static inline int rss_ilog2(uint32_t x)
     134                 :            : {
     135                 :            :         int log = 0;
     136                 :          0 :         x >>= 1;
     137                 :            : 
     138         [ #  # ]:          0 :         while (x) {
     139                 :          0 :                 log++;
     140                 :          0 :                 x >>= 1;
     141                 :            :         }
     142                 :            :         return log;
     143                 :            : }
     144                 :            : #define ilog2(x) rss_ilog2(x)
     145                 :            : #endif
     146                 :            : 
     147                 :            : static inline uint32_t fls(uint32_t x)
     148                 :            : {
     149                 :            :         uint32_t position;
     150                 :            :         uint32_t i;
     151                 :            : 
     152                 :          0 :         if (x == 0)
     153                 :            :                 return 0;
     154                 :            : 
     155         [ #  # ]:          0 :         for (i = (x >> 1), position = 0; i != 0; ++position)
     156                 :          0 :                 i >>= 1;
     157                 :            : 
     158                 :          0 :         return position + 1;
     159                 :            : }
     160                 :            : 
     161                 :            : static inline uint32_t roundup_pow_of_two(uint32_t x)
     162                 :            : {
     163         [ #  # ]:          0 :         return 1UL << fls(x - 1);
     164                 :            : }
     165                 :            : 
     166                 :            : extern const uint8_t hns3_hash_key[HNS3_RSS_KEY_SIZE];
     167                 :            : 
     168                 :            : struct hns3_adapter;
     169                 :            : struct hns3_hw;
     170                 :            : 
     171                 :            : int hns3_dev_rss_hash_update(struct rte_eth_dev *dev,
     172                 :            :                              struct rte_eth_rss_conf *rss_conf);
     173                 :            : int hns3_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
     174                 :            :                                struct rte_eth_rss_conf *rss_conf);
     175                 :            : int hns3_dev_rss_reta_update(struct rte_eth_dev *dev,
     176                 :            :                              struct rte_eth_rss_reta_entry64 *reta_conf,
     177                 :            :                              uint16_t reta_size);
     178                 :            : int hns3_dev_rss_reta_query(struct rte_eth_dev *dev,
     179                 :            :                             struct rte_eth_rss_reta_entry64 *reta_conf,
     180                 :            :                             uint16_t reta_size);
     181                 :            : void hns3_rss_set_default_args(struct hns3_hw *hw);
     182                 :            : int hns3_set_rss_indir_table(struct hns3_hw *hw, uint16_t *indir,
     183                 :            :                              uint16_t size);
     184                 :            : int hns3_rss_reset_indir_table(struct hns3_hw *hw);
     185                 :            : int hns3_config_rss(struct hns3_adapter *hns);
     186                 :            : void hns3_rss_uninit(struct hns3_adapter *hns);
     187                 :            : bool hns3_check_rss_types_valid(struct hns3_hw *hw, uint64_t types);
     188                 :            : int hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf);
     189                 :            : int hns3_set_rss_tuple_field(struct hns3_hw *hw, uint64_t tuple_fields);
     190                 :            : int hns3_get_rss_tuple_field(struct hns3_hw *hw, uint64_t *tuple_fields);
     191                 :            : uint64_t hns3_rss_calc_tuple_filed(uint64_t rss_hf);
     192                 :            : int hns3_update_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo,
     193                 :            :                              uint8_t *key, uint8_t key_len);
     194                 :            : 
     195                 :            : #endif /* HNS3_RSS_H */

Generated by: LCOV version 1.14