linux/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h

/* SPDX-License-Identifier: GPL-2.0+ */
// Copyright (c) 2021-2021 Hisilicon Limited.

#ifndef __HCLGE_COMM_RSS_H
#define __HCLGE_COMM_RSS_H
#include <linux/types.h>

#include "hnae3.h"
#include "hclge_comm_cmd.h"

#define HCLGE_COMM_RSS_HASH_ALGO_TOEPLITZ
#define HCLGE_COMM_RSS_HASH_ALGO_SIMPLE
#define HCLGE_COMM_RSS_HASH_ALGO_SYMMETRIC

#define HCLGE_COMM_RSS_INPUT_TUPLE_OTHER
#define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP

#define HCLGE_COMM_D_PORT_BIT
#define HCLGE_COMM_S_PORT_BIT
#define HCLGE_COMM_D_IP_BIT
#define HCLGE_COMM_S_IP_BIT
#define HCLGE_COMM_V_TAG_BIT
#define HCLGE_COMM_RSS_INPUT_TUPLE_SCTP_NO_PORT
#define HCLGE_COMM_MAX_TC_NUM

#define HCLGE_COMM_RSS_TC_OFFSET_S
#define HCLGE_COMM_RSS_TC_OFFSET_M
#define HCLGE_COMM_RSS_TC_SIZE_MSB_B
#define HCLGE_COMM_RSS_TC_SIZE_S
#define HCLGE_COMM_RSS_TC_SIZE_M
#define HCLGE_COMM_RSS_TC_VALID_B
#define HCLGE_COMM_RSS_TC_SIZE_MSB_OFFSET

struct hclge_comm_rss_tuple_cfg {};

#define HCLGE_COMM_RSS_KEY_SIZE
#define HCLGE_COMM_RSS_CFG_TBL_SIZE
#define HCLGE_COMM_RSS_CFG_TBL_BW_H
#define HCLGE_COMM_RSS_CFG_TBL_BW_L
#define HCLGE_COMM_RSS_CFG_TBL_SIZE_H
#define HCLGE_COMM_RSS_SET_BITMAP_MSK
#define HCLGE_COMM_RSS_HASH_ALGO_MASK
#define HCLGE_COMM_RSS_HASH_KEY_OFFSET_B

#define HCLGE_COMM_RSS_HASH_KEY_NUM
struct hclge_comm_rss_config_cmd {};

struct hclge_comm_rss_cfg {};

struct hclge_comm_rss_input_tuple_cmd {};

struct hclge_comm_rss_ind_tbl_cmd {};

struct hclge_comm_rss_tc_mode_cmd {};

u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle);
void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,
				   struct hclge_comm_rss_cfg *rss_cfg);
int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,
			     u8 *tuple_sets);
int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,
			       const u8 hfunc, u8 *hash_algo);
void hclge_comm_get_rss_hash_info(struct hclge_comm_rss_cfg *rss_cfg, u8 *key,
				  u8 *hfunc);
void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,
				  u32 *indir, u16 rss_ind_tbl_size);
int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
				const u8 *key);
int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
				  struct ethtool_rxnfc *nfc,
				  struct hnae3_ae_dev *ae_dev,
				  struct hclge_comm_rss_input_tuple_cmd *req);
u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);
int hclge_comm_set_rss_input_tuple(struct hclge_comm_hw *hw,
				   struct hclge_comm_rss_cfg *rss_cfg);
int hclge_comm_set_rss_indir_table(struct hnae3_ae_dev *ae_dev,
				   struct hclge_comm_hw *hw, const u16 *indir);
int hclge_comm_rss_init_cfg(struct hnae3_handle *nic,
			    struct hnae3_ae_dev *ae_dev,
			    struct hclge_comm_rss_cfg *rss_cfg);
void hclge_comm_get_rss_tc_info(u16 rss_size, u8 hw_tc_map, u16 *tc_offset,
				u16 *tc_valid, u16 *tc_size);
int hclge_comm_set_rss_tc_mode(struct hclge_comm_hw *hw, u16 *tc_offset,
			       u16 *tc_valid, u16 *tc_size);
int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,
				struct hclge_comm_hw *hw, const u8 *key,
				const u8 hfunc);
int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
			     struct hclge_comm_hw *hw,
			     struct hclge_comm_rss_cfg *rss_cfg,
			     struct ethtool_rxnfc *nfc);
#endif