brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · cdafa63 Raw
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