Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 // Copyright (c) 2021-2021 Hisilicon Limited.
0003 
0004 #ifndef __HCLGE_COMM_RSS_H
0005 #define __HCLGE_COMM_RSS_H
0006 #include <linux/types.h>
0007 
0008 #include "hnae3.h"
0009 #include "hclge_comm_cmd.h"
0010 
0011 #define HCLGE_COMM_RSS_HASH_ALGO_TOEPLITZ   0
0012 #define HCLGE_COMM_RSS_HASH_ALGO_SIMPLE     1
0013 #define HCLGE_COMM_RSS_HASH_ALGO_SYMMETRIC  2
0014 
0015 #define HCLGE_COMM_RSS_INPUT_TUPLE_OTHER    GENMASK(3, 0)
0016 #define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP     GENMASK(4, 0)
0017 
0018 #define HCLGE_COMM_D_PORT_BIT       BIT(0)
0019 #define HCLGE_COMM_S_PORT_BIT       BIT(1)
0020 #define HCLGE_COMM_D_IP_BIT     BIT(2)
0021 #define HCLGE_COMM_S_IP_BIT     BIT(3)
0022 #define HCLGE_COMM_V_TAG_BIT        BIT(4)
0023 #define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP_NO_PORT \
0024     (HCLGE_COMM_D_IP_BIT | HCLGE_COMM_S_IP_BIT | HCLGE_COMM_V_TAG_BIT)
0025 #define HCLGE_COMM_MAX_TC_NUM       8
0026 
0027 #define HCLGE_COMM_RSS_TC_OFFSET_S      0
0028 #define HCLGE_COMM_RSS_TC_OFFSET_M      GENMASK(10, 0)
0029 #define HCLGE_COMM_RSS_TC_SIZE_MSB_B    11
0030 #define HCLGE_COMM_RSS_TC_SIZE_S        12
0031 #define HCLGE_COMM_RSS_TC_SIZE_M        GENMASK(14, 12)
0032 #define HCLGE_COMM_RSS_TC_VALID_B       15
0033 #define HCLGE_COMM_RSS_TC_SIZE_MSB_OFFSET   3
0034 
0035 struct hclge_comm_rss_tuple_cfg {
0036     u8 ipv4_tcp_en;
0037     u8 ipv4_udp_en;
0038     u8 ipv4_sctp_en;
0039     u8 ipv4_fragment_en;
0040     u8 ipv6_tcp_en;
0041     u8 ipv6_udp_en;
0042     u8 ipv6_sctp_en;
0043     u8 ipv6_fragment_en;
0044 };
0045 
0046 #define HCLGE_COMM_RSS_KEY_SIZE     40
0047 #define HCLGE_COMM_RSS_CFG_TBL_SIZE 16
0048 #define HCLGE_COMM_RSS_CFG_TBL_BW_H 2U
0049 #define HCLGE_COMM_RSS_CFG_TBL_BW_L 8U
0050 #define HCLGE_COMM_RSS_CFG_TBL_SIZE_H   4
0051 #define HCLGE_COMM_RSS_SET_BITMAP_MSK   GENMASK(15, 0)
0052 #define HCLGE_COMM_RSS_HASH_ALGO_MASK   GENMASK(3, 0)
0053 #define HCLGE_COMM_RSS_HASH_KEY_OFFSET_B    4
0054 
0055 #define HCLGE_COMM_RSS_HASH_KEY_NUM 16
0056 struct hclge_comm_rss_config_cmd {
0057     u8 hash_config;
0058     u8 rsv[7];
0059     u8 hash_key[HCLGE_COMM_RSS_HASH_KEY_NUM];
0060 };
0061 
0062 struct hclge_comm_rss_cfg {
0063     u8 rss_hash_key[HCLGE_COMM_RSS_KEY_SIZE]; /* user configured hash keys */
0064 
0065     /* shadow table */
0066     u16 *rss_indirection_tbl;
0067     u32 rss_algo;
0068 
0069     struct hclge_comm_rss_tuple_cfg rss_tuple_sets;
0070     u32 rss_size;
0071 };
0072 
0073 struct hclge_comm_rss_input_tuple_cmd {
0074     u8 ipv4_tcp_en;
0075     u8 ipv4_udp_en;
0076     u8 ipv4_sctp_en;
0077     u8 ipv4_fragment_en;
0078     u8 ipv6_tcp_en;
0079     u8 ipv6_udp_en;
0080     u8 ipv6_sctp_en;
0081     u8 ipv6_fragment_en;
0082     u8 rsv[16];
0083 };
0084 
0085 struct hclge_comm_rss_ind_tbl_cmd {
0086     __le16 start_table_index;
0087     __le16 rss_set_bitmap;
0088     u8 rss_qid_h[HCLGE_COMM_RSS_CFG_TBL_SIZE_H];
0089     u8 rss_qid_l[HCLGE_COMM_RSS_CFG_TBL_SIZE];
0090 };
0091 
0092 struct hclge_comm_rss_tc_mode_cmd {
0093     __le16 rss_tc_mode[HCLGE_COMM_MAX_TC_NUM];
0094     u8 rsv[8];
0095 };
0096 
0097 u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle);
0098 void hclge_comm_get_rss_type(struct hnae3_handle *nic,
0099                  struct hclge_comm_rss_tuple_cfg *rss_tuple_sets);
0100 void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,
0101                    struct hclge_comm_rss_cfg *rss_cfg);
0102 int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,
0103                  u8 *tuple_sets);
0104 int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,
0105                    const u8 hfunc, u8 *hash_algo);
0106 void hclge_comm_get_rss_hash_info(struct hclge_comm_rss_cfg *rss_cfg, u8 *key,
0107                   u8 *hfunc);
0108 void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,
0109                   u32 *indir, u16 rss_ind_tbl_size);
0110 int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
0111                 const u8 *key);
0112 int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
0113                   struct ethtool_rxnfc *nfc,
0114                   struct hnae3_ae_dev *ae_dev,
0115                   struct hclge_comm_rss_input_tuple_cmd *req);
0116 u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);
0117 int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic,
0118                    struct hclge_comm_hw *hw, bool is_pf,
0119                    struct hclge_comm_rss_cfg *rss_cfg);
0120 int hclge_comm_set_rss_indir_table(struct hnae3_ae_dev *ae_dev,
0121                    struct hclge_comm_hw *hw, const u16 *indir);
0122 int hclge_comm_rss_init_cfg(struct hnae3_handle *nic,
0123                 struct hnae3_ae_dev *ae_dev,
0124                 struct hclge_comm_rss_cfg *rss_cfg);
0125 void hclge_comm_get_rss_tc_info(u16 rss_size, u8 hw_tc_map, u16 *tc_offset,
0126                 u16 *tc_valid, u16 *tc_size);
0127 int hclge_comm_set_rss_tc_mode(struct hclge_comm_hw *hw, u16 *tc_offset,
0128                    u16 *tc_valid, u16 *tc_size);
0129 int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,
0130                 struct hclge_comm_hw *hw, const u8 *key,
0131                 const u8 hfunc);
0132 int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
0133                  struct hclge_comm_hw *hw,
0134                  struct hclge_comm_rss_cfg *rss_cfg,
0135                  struct ethtool_rxnfc *nfc);
0136 #endif