cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hclge_comm_rss.h (4463B)


      1/* SPDX-License-Identifier: GPL-2.0+ */
      2// Copyright (c) 2021-2021 Hisilicon Limited.
      3
      4#ifndef __HCLGE_COMM_RSS_H
      5#define __HCLGE_COMM_RSS_H
      6#include <linux/types.h>
      7
      8#include "hnae3.h"
      9#include "hclge_comm_cmd.h"
     10
     11#define HCLGE_COMM_RSS_HASH_ALGO_TOEPLITZ	0
     12#define HCLGE_COMM_RSS_HASH_ALGO_SIMPLE		1
     13#define HCLGE_COMM_RSS_HASH_ALGO_SYMMETRIC	2
     14
     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		8
     26
     27#define HCLGE_COMM_RSS_TC_OFFSET_S		0
     28#define HCLGE_COMM_RSS_TC_OFFSET_M		GENMASK(10, 0)
     29#define HCLGE_COMM_RSS_TC_SIZE_MSB_B	11
     30#define HCLGE_COMM_RSS_TC_SIZE_S		12
     31#define HCLGE_COMM_RSS_TC_SIZE_M		GENMASK(14, 12)
     32#define HCLGE_COMM_RSS_TC_VALID_B		15
     33#define HCLGE_COMM_RSS_TC_SIZE_MSB_OFFSET	3
     34
     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		40
     47#define HCLGE_COMM_RSS_CFG_TBL_SIZE	16
     48#define HCLGE_COMM_RSS_CFG_TBL_BW_H	2U
     49#define HCLGE_COMM_RSS_CFG_TBL_BW_L	8U
     50#define HCLGE_COMM_RSS_CFG_TBL_SIZE_H	4
     51#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	4
     54
     55#define HCLGE_COMM_RSS_HASH_KEY_NUM	16
     56struct 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_get_rss_type(struct hnae3_handle *nic,
     99			     struct hclge_comm_rss_tuple_cfg *rss_tuple_sets);
    100void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,
    101				   struct hclge_comm_rss_cfg *rss_cfg);
    102int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,
    103			     u8 *tuple_sets);
    104int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,
    105			       const u8 hfunc, u8 *hash_algo);
    106void hclge_comm_get_rss_hash_info(struct hclge_comm_rss_cfg *rss_cfg, u8 *key,
    107				  u8 *hfunc);
    108void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,
    109				  u32 *indir, u16 rss_ind_tbl_size);
    110int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
    111				const u8 *key);
    112int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
    113				  struct ethtool_rxnfc *nfc,
    114				  struct hnae3_ae_dev *ae_dev,
    115				  struct hclge_comm_rss_input_tuple_cmd *req);
    116u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);
    117int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic,
    118				   struct hclge_comm_hw *hw, bool is_pf,
    119				   struct hclge_comm_rss_cfg *rss_cfg);
    120int hclge_comm_set_rss_indir_table(struct hnae3_ae_dev *ae_dev,
    121				   struct hclge_comm_hw *hw, const u16 *indir);
    122int hclge_comm_rss_init_cfg(struct hnae3_handle *nic,
    123			    struct hnae3_ae_dev *ae_dev,
    124			    struct hclge_comm_rss_cfg *rss_cfg);
    125void hclge_comm_get_rss_tc_info(u16 rss_size, u8 hw_tc_map, u16 *tc_offset,
    126				u16 *tc_valid, u16 *tc_size);
    127int hclge_comm_set_rss_tc_mode(struct hclge_comm_hw *hw, u16 *tc_offset,
    128			       u16 *tc_valid, u16 *tc_size);
    129int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,
    130				struct hclge_comm_hw *hw, const u8 *key,
    131				const u8 hfunc);
    132int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
    133			     struct hclge_comm_hw *hw,
    134			     struct hclge_comm_rss_cfg *rss_cfg,
    135			     struct ethtool_rxnfc *nfc);
    136#endif