134 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2// Copyright (c) 2021-2021 Hisilicon Limited.3 4#ifndef __HCLGE_COMM_RSS_H5#define __HCLGE_COMM_RSS_H6#include <linux/types.h>7 8#include "hnae3.h"9#include "hclge_comm_cmd.h"10 11#define HCLGE_COMM_RSS_HASH_ALGO_TOEPLITZ 012#define HCLGE_COMM_RSS_HASH_ALGO_SIMPLE 113#define HCLGE_COMM_RSS_HASH_ALGO_SYMMETRIC 214 15#define HCLGE_COMM_RSS_INPUT_TUPLE_OTHER GENMASK(3, 0)16#define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP GENMASK(4, 0)17 18#define HCLGE_COMM_D_PORT_BIT BIT(0)19#define HCLGE_COMM_S_PORT_BIT BIT(1)20#define HCLGE_COMM_D_IP_BIT BIT(2)21#define HCLGE_COMM_S_IP_BIT BIT(3)22#define HCLGE_COMM_V_TAG_BIT BIT(4)23#define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP_NO_PORT \24 (HCLGE_COMM_D_IP_BIT | HCLGE_COMM_S_IP_BIT | HCLGE_COMM_V_TAG_BIT)25#define HCLGE_COMM_MAX_TC_NUM 826 27#define HCLGE_COMM_RSS_TC_OFFSET_S 028#define HCLGE_COMM_RSS_TC_OFFSET_M GENMASK(10, 0)29#define HCLGE_COMM_RSS_TC_SIZE_MSB_B 1130#define HCLGE_COMM_RSS_TC_SIZE_S 1231#define HCLGE_COMM_RSS_TC_SIZE_M GENMASK(14, 12)32#define HCLGE_COMM_RSS_TC_VALID_B 1533#define HCLGE_COMM_RSS_TC_SIZE_MSB_OFFSET 334 35struct hclge_comm_rss_tuple_cfg {36 u8 ipv4_tcp_en;37 u8 ipv4_udp_en;38 u8 ipv4_sctp_en;39 u8 ipv4_fragment_en;40 u8 ipv6_tcp_en;41 u8 ipv6_udp_en;42 u8 ipv6_sctp_en;43 u8 ipv6_fragment_en;44};45 46#define HCLGE_COMM_RSS_KEY_SIZE 4047#define HCLGE_COMM_RSS_CFG_TBL_SIZE 1648#define HCLGE_COMM_RSS_CFG_TBL_BW_H 2U49#define HCLGE_COMM_RSS_CFG_TBL_BW_L 8U50#define HCLGE_COMM_RSS_CFG_TBL_SIZE_H 451#define HCLGE_COMM_RSS_SET_BITMAP_MSK GENMASK(15, 0)52#define HCLGE_COMM_RSS_HASH_ALGO_MASK GENMASK(3, 0)53#define HCLGE_COMM_RSS_HASH_KEY_OFFSET_B 454 55#define HCLGE_COMM_RSS_HASH_KEY_NUM 1656struct hclge_comm_rss_config_cmd {57 u8 hash_config;58 u8 rsv[7];59 u8 hash_key[HCLGE_COMM_RSS_HASH_KEY_NUM];60};61 62struct hclge_comm_rss_cfg {63 u8 rss_hash_key[HCLGE_COMM_RSS_KEY_SIZE]; /* user configured hash keys */64 65 /* shadow table */66 u16 *rss_indirection_tbl;67 u32 rss_algo;68 69 struct hclge_comm_rss_tuple_cfg rss_tuple_sets;70 u32 rss_size;71};72 73struct hclge_comm_rss_input_tuple_cmd {74 u8 ipv4_tcp_en;75 u8 ipv4_udp_en;76 u8 ipv4_sctp_en;77 u8 ipv4_fragment_en;78 u8 ipv6_tcp_en;79 u8 ipv6_udp_en;80 u8 ipv6_sctp_en;81 u8 ipv6_fragment_en;82 u8 rsv[16];83};84 85struct hclge_comm_rss_ind_tbl_cmd {86 __le16 start_table_index;87 __le16 rss_set_bitmap;88 u8 rss_qid_h[HCLGE_COMM_RSS_CFG_TBL_SIZE_H];89 u8 rss_qid_l[HCLGE_COMM_RSS_CFG_TBL_SIZE];90};91 92struct hclge_comm_rss_tc_mode_cmd {93 __le16 rss_tc_mode[HCLGE_COMM_MAX_TC_NUM];94 u8 rsv[8];95};96 97u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle);98void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,99 struct hclge_comm_rss_cfg *rss_cfg);100int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,101 u8 *tuple_sets);102int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,103 const u8 hfunc, u8 *hash_algo);104void hclge_comm_get_rss_hash_info(struct hclge_comm_rss_cfg *rss_cfg, u8 *key,105 u8 *hfunc);106void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,107 u32 *indir, u16 rss_ind_tbl_size);108int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,109 const u8 *key);110int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,111 struct ethtool_rxnfc *nfc,112 struct hnae3_ae_dev *ae_dev,113 struct hclge_comm_rss_input_tuple_cmd *req);114u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);115int hclge_comm_set_rss_input_tuple(struct hclge_comm_hw *hw,116 struct hclge_comm_rss_cfg *rss_cfg);117int hclge_comm_set_rss_indir_table(struct hnae3_ae_dev *ae_dev,118 struct hclge_comm_hw *hw, const u16 *indir);119int hclge_comm_rss_init_cfg(struct hnae3_handle *nic,120 struct hnae3_ae_dev *ae_dev,121 struct hclge_comm_rss_cfg *rss_cfg);122void hclge_comm_get_rss_tc_info(u16 rss_size, u8 hw_tc_map, u16 *tc_offset,123 u16 *tc_valid, u16 *tc_size);124int hclge_comm_set_rss_tc_mode(struct hclge_comm_hw *hw, u16 *tc_offset,125 u16 *tc_valid, u16 *tc_size);126int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,127 struct hclge_comm_hw *hw, const u8 *key,128 const u8 hfunc);129int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,130 struct hclge_comm_hw *hw,131 struct hclge_comm_rss_cfg *rss_cfg,132 struct ethtool_rxnfc *nfc);133#endif134