1d71d8381SJian Shen // SPDX-License-Identifier: GPL-2.0+ 2d71d8381SJian Shen // Copyright (c) 2016-2017 Hisilicon Limited. 346a3df9fSSalil 446a3df9fSSalil #ifndef __HCLGE_MAIN_H 546a3df9fSSalil #define __HCLGE_MAIN_H 646a3df9fSSalil #include <linux/fs.h> 746a3df9fSSalil #include <linux/types.h> 846a3df9fSSalil #include <linux/phy.h> 9dc8131d8SYunsheng Lin #include <linux/if_vlan.h> 10dc8131d8SYunsheng Lin 1146a3df9fSSalil #include "hclge_cmd.h" 1246a3df9fSSalil #include "hnae3.h" 1346a3df9fSSalil 143c7624d8SXi Wang #define HCLGE_MOD_VERSION "1.0" 1546a3df9fSSalil #define HCLGE_DRIVER_NAME "hclge" 1646a3df9fSSalil 1739932473SJian Shen #define HCLGE_MAX_PF_NUM 8 1839932473SJian Shen 1946a3df9fSSalil #define HCLGE_INVALID_VPORT 0xffff 2046a3df9fSSalil 2146a3df9fSSalil #define HCLGE_PF_CFG_BLOCK_SIZE 32 2246a3df9fSSalil #define HCLGE_PF_CFG_DESC_NUM \ 2346a3df9fSSalil (HCLGE_PF_CFG_BLOCK_SIZE / HCLGE_CFG_RD_LEN_BYTES) 2446a3df9fSSalil 2546a3df9fSSalil #define HCLGE_VECTOR_REG_BASE 0x20000 26466b0c00SLipeng #define HCLGE_MISC_VECTOR_REG_BASE 0x20400 2746a3df9fSSalil 2846a3df9fSSalil #define HCLGE_VECTOR_REG_OFFSET 0x4 2946a3df9fSSalil #define HCLGE_VECTOR_VF_OFFSET 0x100000 3046a3df9fSSalil 3146a3df9fSSalil #define HCLGE_RSS_IND_TBL_SIZE 512 325392902dSYunsheng Lin #define HCLGE_RSS_SET_BITMAP_MSK GENMASK(15, 0) 3346a3df9fSSalil #define HCLGE_RSS_KEY_SIZE 40 3446a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_TOEPLITZ 0 3546a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SIMPLE 1 3646a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SYMMETRIC 2 37c79301d8SJian Shen #define HCLGE_RSS_HASH_ALGO_MASK GENMASK(3, 0) 3846a3df9fSSalil #define HCLGE_RSS_CFG_TBL_NUM \ 3946a3df9fSSalil (HCLGE_RSS_IND_TBL_SIZE / HCLGE_RSS_CFG_TBL_SIZE) 4046a3df9fSSalil 41f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_OTHER GENMASK(3, 0) 42f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_SCTP GENMASK(4, 0) 43f7db940aSLipeng #define HCLGE_D_PORT_BIT BIT(0) 44f7db940aSLipeng #define HCLGE_S_PORT_BIT BIT(1) 45f7db940aSLipeng #define HCLGE_D_IP_BIT BIT(2) 46f7db940aSLipeng #define HCLGE_S_IP_BIT BIT(3) 47f7db940aSLipeng #define HCLGE_V_TAG_BIT BIT(4) 48f7db940aSLipeng 4946a3df9fSSalil #define HCLGE_RSS_TC_SIZE_0 1 5046a3df9fSSalil #define HCLGE_RSS_TC_SIZE_1 2 5146a3df9fSSalil #define HCLGE_RSS_TC_SIZE_2 4 5246a3df9fSSalil #define HCLGE_RSS_TC_SIZE_3 8 5346a3df9fSSalil #define HCLGE_RSS_TC_SIZE_4 16 5446a3df9fSSalil #define HCLGE_RSS_TC_SIZE_5 32 5546a3df9fSSalil #define HCLGE_RSS_TC_SIZE_6 64 5646a3df9fSSalil #define HCLGE_RSS_TC_SIZE_7 128 5746a3df9fSSalil 5839932473SJian Shen #define HCLGE_UMV_TBL_SIZE 3072 5939932473SJian Shen #define HCLGE_DEFAULT_UMV_SPACE_PER_PF \ 6039932473SJian Shen (HCLGE_UMV_TBL_SIZE / HCLGE_MAX_PF_NUM) 6139932473SJian Shen 6246a3df9fSSalil #define HCLGE_TQP_RESET_TRY_TIMES 10 6346a3df9fSSalil 6446a3df9fSSalil #define HCLGE_PHY_PAGE_MDIX 0 6546a3df9fSSalil #define HCLGE_PHY_PAGE_COPPER 0 6646a3df9fSSalil 6746a3df9fSSalil /* Page Selection Reg. */ 6846a3df9fSSalil #define HCLGE_PHY_PAGE_REG 22 6946a3df9fSSalil 7046a3df9fSSalil /* Copper Specific Control Register */ 7146a3df9fSSalil #define HCLGE_PHY_CSC_REG 16 7246a3df9fSSalil 7346a3df9fSSalil /* Copper Specific Status Register */ 7446a3df9fSSalil #define HCLGE_PHY_CSS_REG 17 7546a3df9fSSalil 76a10829c4SJian Shen #define HCLGE_PHY_MDIX_CTRL_S 5 775392902dSYunsheng Lin #define HCLGE_PHY_MDIX_CTRL_M GENMASK(6, 5) 7846a3df9fSSalil 79a10829c4SJian Shen #define HCLGE_PHY_MDIX_STATUS_B 6 80a10829c4SJian Shen #define HCLGE_PHY_SPEED_DUP_RESOLVE_B 11 8146a3df9fSSalil 825f6ea83fSPeng Li /* Factor used to calculate offset and bitmap of VF num */ 835f6ea83fSPeng Li #define HCLGE_VF_NUM_PER_CMD 64 845f6ea83fSPeng Li #define HCLGE_VF_NUM_PER_BYTE 8 855f6ea83fSPeng Li 8611732868SJian Shen enum HLCGE_PORT_TYPE { 8711732868SJian Shen HOST_PORT, 8811732868SJian Shen NETWORK_PORT 8911732868SJian Shen }; 9011732868SJian Shen 9111732868SJian Shen #define HCLGE_PF_ID_S 0 9211732868SJian Shen #define HCLGE_PF_ID_M GENMASK(2, 0) 9311732868SJian Shen #define HCLGE_VF_ID_S 3 9411732868SJian Shen #define HCLGE_VF_ID_M GENMASK(10, 3) 9511732868SJian Shen #define HCLGE_PORT_TYPE_B 11 9611732868SJian Shen #define HCLGE_NETWORK_PORT_ID_S 0 9711732868SJian Shen #define HCLGE_NETWORK_PORT_ID_M GENMASK(3, 0) 9811732868SJian Shen 994ed340abSLipeng /* Reset related Registers */ 100*6dd22bbcSHuazhong Tan #define HCLGE_PF_OTHER_INT_REG 0x20600 1014ed340abSLipeng #define HCLGE_MISC_RESET_STS_REG 0x20700 1029ca8d1a7SHuazhong Tan #define HCLGE_MISC_VECTOR_INT_STS 0x20800 1034ed340abSLipeng #define HCLGE_GLOBAL_RESET_REG 0x20A00 104f8a91784SJian Shen #define HCLGE_GLOBAL_RESET_BIT 0 105f8a91784SJian Shen #define HCLGE_CORE_RESET_BIT 1 10665e41e7eSHuazhong Tan #define HCLGE_IMP_RESET_BIT 2 1074ed340abSLipeng #define HCLGE_FUN_RST_ING 0x20C00 1084ed340abSLipeng #define HCLGE_FUN_RST_ING_B 0 1094ed340abSLipeng 1104ed340abSLipeng /* Vector0 register bits define */ 1114ed340abSLipeng #define HCLGE_VECTOR0_GLOBALRESET_INT_B 5 1124ed340abSLipeng #define HCLGE_VECTOR0_CORERESET_INT_B 6 1134ed340abSLipeng #define HCLGE_VECTOR0_IMPRESET_INT_B 7 1144ed340abSLipeng 115c1a81619SSalil Mehta /* Vector0 interrupt CMDQ event source register(RW) */ 116c1a81619SSalil Mehta #define HCLGE_VECTOR0_CMDQ_SRC_REG 0x27100 117c1a81619SSalil Mehta /* CMDQ register bits for RX event(=MBX event) */ 118c1a81619SSalil Mehta #define HCLGE_VECTOR0_RX_CMDQ_INT_B 1 119c1a81619SSalil Mehta 120*6dd22bbcSHuazhong Tan #define HCLGE_VECTOR0_IMP_RESET_INT_B 1 121*6dd22bbcSHuazhong Tan 1222866ccb2SFuyun Liang #define HCLGE_MAC_DEFAULT_FRAME \ 1232866ccb2SFuyun Liang (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN + ETH_DATA_LEN) 1242866ccb2SFuyun Liang #define HCLGE_MAC_MIN_FRAME 64 1252866ccb2SFuyun Liang #define HCLGE_MAC_MAX_FRAME 9728 1262866ccb2SFuyun Liang 1270979aa0bSFuyun Liang #define HCLGE_SUPPORT_1G_BIT BIT(0) 1280979aa0bSFuyun Liang #define HCLGE_SUPPORT_10G_BIT BIT(1) 1290979aa0bSFuyun Liang #define HCLGE_SUPPORT_25G_BIT BIT(2) 1300979aa0bSFuyun Liang #define HCLGE_SUPPORT_50G_BIT BIT(3) 1310979aa0bSFuyun Liang #define HCLGE_SUPPORT_100G_BIT BIT(4) 1320979aa0bSFuyun Liang 13346a3df9fSSalil enum HCLGE_DEV_STATE { 13446a3df9fSSalil HCLGE_STATE_REINITING, 13546a3df9fSSalil HCLGE_STATE_DOWN, 13646a3df9fSSalil HCLGE_STATE_DISABLED, 13746a3df9fSSalil HCLGE_STATE_REMOVING, 13846a3df9fSSalil HCLGE_STATE_SERVICE_INITED, 13946a3df9fSSalil HCLGE_STATE_SERVICE_SCHED, 140cb1b9f77SSalil Mehta HCLGE_STATE_RST_SERVICE_SCHED, 141cb1b9f77SSalil Mehta HCLGE_STATE_RST_HANDLING, 142c1a81619SSalil Mehta HCLGE_STATE_MBX_SERVICE_SCHED, 14346a3df9fSSalil HCLGE_STATE_MBX_HANDLING, 144c5f65480SJian Shen HCLGE_STATE_STATISTICS_UPDATING, 1458d40854fSHuazhong Tan HCLGE_STATE_CMD_DISABLE, 14646a3df9fSSalil HCLGE_STATE_MAX 14746a3df9fSSalil }; 14846a3df9fSSalil 149ca1d7669SSalil Mehta enum hclge_evt_cause { 150ca1d7669SSalil Mehta HCLGE_VECTOR0_EVENT_RST, 151ca1d7669SSalil Mehta HCLGE_VECTOR0_EVENT_MBX, 152ca1d7669SSalil Mehta HCLGE_VECTOR0_EVENT_OTHER, 153ca1d7669SSalil Mehta }; 154ca1d7669SSalil Mehta 15546a3df9fSSalil #define HCLGE_MPF_ENBALE 1 15646a3df9fSSalil 15746a3df9fSSalil enum HCLGE_MAC_SPEED { 15846a3df9fSSalil HCLGE_MAC_SPEED_10M = 10, /* 10 Mbps */ 15946a3df9fSSalil HCLGE_MAC_SPEED_100M = 100, /* 100 Mbps */ 16046a3df9fSSalil HCLGE_MAC_SPEED_1G = 1000, /* 1000 Mbps = 1 Gbps */ 16146a3df9fSSalil HCLGE_MAC_SPEED_10G = 10000, /* 10000 Mbps = 10 Gbps */ 16246a3df9fSSalil HCLGE_MAC_SPEED_25G = 25000, /* 25000 Mbps = 25 Gbps */ 16346a3df9fSSalil HCLGE_MAC_SPEED_40G = 40000, /* 40000 Mbps = 40 Gbps */ 16446a3df9fSSalil HCLGE_MAC_SPEED_50G = 50000, /* 50000 Mbps = 50 Gbps */ 16546a3df9fSSalil HCLGE_MAC_SPEED_100G = 100000 /* 100000 Mbps = 100 Gbps */ 16646a3df9fSSalil }; 16746a3df9fSSalil 16846a3df9fSSalil enum HCLGE_MAC_DUPLEX { 16946a3df9fSSalil HCLGE_MAC_HALF, 17046a3df9fSSalil HCLGE_MAC_FULL 17146a3df9fSSalil }; 17246a3df9fSSalil 17346a3df9fSSalil struct hclge_mac { 17446a3df9fSSalil u8 phy_addr; 17546a3df9fSSalil u8 flag; 17646a3df9fSSalil u8 media_type; 17746a3df9fSSalil u8 mac_addr[ETH_ALEN]; 17846a3df9fSSalil u8 autoneg; 17946a3df9fSSalil u8 duplex; 18046a3df9fSSalil u32 speed; 18146a3df9fSSalil int link; /* store the link status of mac & phy (if phy exit)*/ 18246a3df9fSSalil struct phy_device *phydev; 18346a3df9fSSalil struct mii_bus *mdio_bus; 18446a3df9fSSalil phy_interface_t phy_if; 1850979aa0bSFuyun Liang __ETHTOOL_DECLARE_LINK_MODE_MASK(supported); 1860979aa0bSFuyun Liang __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); 18746a3df9fSSalil }; 18846a3df9fSSalil 18946a3df9fSSalil struct hclge_hw { 19046a3df9fSSalil void __iomem *io_base; 19146a3df9fSSalil struct hclge_mac mac; 19246a3df9fSSalil int num_vec; 19346a3df9fSSalil struct hclge_cmq cmq; 19446a3df9fSSalil }; 19546a3df9fSSalil 19646a3df9fSSalil /* TQP stats */ 19746a3df9fSSalil struct hlcge_tqp_stats { 19846a3df9fSSalil /* query_tqp_tx_queue_statistics ,opcode id: 0x0B03 */ 19946a3df9fSSalil u64 rcb_tx_ring_pktnum_rcd; /* 32bit */ 20046a3df9fSSalil /* query_tqp_rx_queue_statistics ,opcode id: 0x0B13 */ 20146a3df9fSSalil u64 rcb_rx_ring_pktnum_rcd; /* 32bit */ 20246a3df9fSSalil }; 20346a3df9fSSalil 20446a3df9fSSalil struct hclge_tqp { 205fdace1bcSJian Shen /* copy of device pointer from pci_dev, 206fdace1bcSJian Shen * used when perform DMA mapping 207fdace1bcSJian Shen */ 208fdace1bcSJian Shen struct device *dev; 20946a3df9fSSalil struct hnae3_queue q; 21046a3df9fSSalil struct hlcge_tqp_stats tqp_stats; 21146a3df9fSSalil u16 index; /* Global index in a NIC controller */ 21246a3df9fSSalil 21346a3df9fSSalil bool alloced; 21446a3df9fSSalil }; 21546a3df9fSSalil 21646a3df9fSSalil enum hclge_fc_mode { 21746a3df9fSSalil HCLGE_FC_NONE, 21846a3df9fSSalil HCLGE_FC_RX_PAUSE, 21946a3df9fSSalil HCLGE_FC_TX_PAUSE, 22046a3df9fSSalil HCLGE_FC_FULL, 22146a3df9fSSalil HCLGE_FC_PFC, 22246a3df9fSSalil HCLGE_FC_DEFAULT 22346a3df9fSSalil }; 22446a3df9fSSalil 22546a3df9fSSalil #define HCLGE_PG_NUM 4 22646a3df9fSSalil #define HCLGE_SCH_MODE_SP 0 22746a3df9fSSalil #define HCLGE_SCH_MODE_DWRR 1 22846a3df9fSSalil struct hclge_pg_info { 22946a3df9fSSalil u8 pg_id; 23046a3df9fSSalil u8 pg_sch_mode; /* 0: sp; 1: dwrr */ 23146a3df9fSSalil u8 tc_bit_map; 23246a3df9fSSalil u32 bw_limit; 23346a3df9fSSalil u8 tc_dwrr[HNAE3_MAX_TC]; 23446a3df9fSSalil }; 23546a3df9fSSalil 23646a3df9fSSalil struct hclge_tc_info { 23746a3df9fSSalil u8 tc_id; 23846a3df9fSSalil u8 tc_sch_mode; /* 0: sp; 1: dwrr */ 23946a3df9fSSalil u8 pgid; 24046a3df9fSSalil u32 bw_limit; 24146a3df9fSSalil }; 24246a3df9fSSalil 24346a3df9fSSalil struct hclge_cfg { 24446a3df9fSSalil u8 vmdq_vport_num; 24546a3df9fSSalil u8 tc_num; 24646a3df9fSSalil u16 tqp_desc_num; 24746a3df9fSSalil u16 rx_buf_len; 2480e7a40cdSPeng Li u16 rss_size_max; 24946a3df9fSSalil u8 phy_addr; 25046a3df9fSSalil u8 media_type; 25146a3df9fSSalil u8 mac_addr[ETH_ALEN]; 25246a3df9fSSalil u8 default_speed; 25346a3df9fSSalil u32 numa_node_map; 2540979aa0bSFuyun Liang u8 speed_ability; 25539932473SJian Shen u16 umv_space; 25646a3df9fSSalil }; 25746a3df9fSSalil 25846a3df9fSSalil struct hclge_tm_info { 25946a3df9fSSalil u8 num_tc; 26046a3df9fSSalil u8 num_pg; /* It must be 1 if vNET-Base schd */ 26146a3df9fSSalil u8 pg_dwrr[HCLGE_PG_NUM]; 262c5795c53SYunsheng Lin u8 prio_tc[HNAE3_MAX_USER_PRIO]; 26346a3df9fSSalil struct hclge_pg_info pg_info[HCLGE_PG_NUM]; 26446a3df9fSSalil struct hclge_tc_info tc_info[HNAE3_MAX_TC]; 26546a3df9fSSalil enum hclge_fc_mode fc_mode; 26646a3df9fSSalil u8 hw_pfc_map; /* Allow for packet drop or not on this TC */ 26746a3df9fSSalil }; 26846a3df9fSSalil 26946a3df9fSSalil struct hclge_comm_stats_str { 27046a3df9fSSalil char desc[ETH_GSTRING_LEN]; 27146a3df9fSSalil unsigned long offset; 27246a3df9fSSalil }; 27346a3df9fSSalil 27446a3df9fSSalil /* mac stats ,opcode id: 0x0032 */ 27546a3df9fSSalil struct hclge_mac_stats { 27646a3df9fSSalil u64 mac_tx_mac_pause_num; 27746a3df9fSSalil u64 mac_rx_mac_pause_num; 27846a3df9fSSalil u64 mac_tx_pfc_pri0_pkt_num; 27946a3df9fSSalil u64 mac_tx_pfc_pri1_pkt_num; 28046a3df9fSSalil u64 mac_tx_pfc_pri2_pkt_num; 28146a3df9fSSalil u64 mac_tx_pfc_pri3_pkt_num; 28246a3df9fSSalil u64 mac_tx_pfc_pri4_pkt_num; 28346a3df9fSSalil u64 mac_tx_pfc_pri5_pkt_num; 28446a3df9fSSalil u64 mac_tx_pfc_pri6_pkt_num; 28546a3df9fSSalil u64 mac_tx_pfc_pri7_pkt_num; 28646a3df9fSSalil u64 mac_rx_pfc_pri0_pkt_num; 28746a3df9fSSalil u64 mac_rx_pfc_pri1_pkt_num; 28846a3df9fSSalil u64 mac_rx_pfc_pri2_pkt_num; 28946a3df9fSSalil u64 mac_rx_pfc_pri3_pkt_num; 29046a3df9fSSalil u64 mac_rx_pfc_pri4_pkt_num; 29146a3df9fSSalil u64 mac_rx_pfc_pri5_pkt_num; 29246a3df9fSSalil u64 mac_rx_pfc_pri6_pkt_num; 29346a3df9fSSalil u64 mac_rx_pfc_pri7_pkt_num; 29446a3df9fSSalil u64 mac_tx_total_pkt_num; 29546a3df9fSSalil u64 mac_tx_total_oct_num; 29646a3df9fSSalil u64 mac_tx_good_pkt_num; 29746a3df9fSSalil u64 mac_tx_bad_pkt_num; 29846a3df9fSSalil u64 mac_tx_good_oct_num; 29946a3df9fSSalil u64 mac_tx_bad_oct_num; 30046a3df9fSSalil u64 mac_tx_uni_pkt_num; 30146a3df9fSSalil u64 mac_tx_multi_pkt_num; 30246a3df9fSSalil u64 mac_tx_broad_pkt_num; 30346a3df9fSSalil u64 mac_tx_undersize_pkt_num; 304200a88c6SJian Shen u64 mac_tx_oversize_pkt_num; 30546a3df9fSSalil u64 mac_tx_64_oct_pkt_num; 30646a3df9fSSalil u64 mac_tx_65_127_oct_pkt_num; 30746a3df9fSSalil u64 mac_tx_128_255_oct_pkt_num; 30846a3df9fSSalil u64 mac_tx_256_511_oct_pkt_num; 30946a3df9fSSalil u64 mac_tx_512_1023_oct_pkt_num; 31046a3df9fSSalil u64 mac_tx_1024_1518_oct_pkt_num; 31191f384f6SJian Shen u64 mac_tx_1519_2047_oct_pkt_num; 31291f384f6SJian Shen u64 mac_tx_2048_4095_oct_pkt_num; 31391f384f6SJian Shen u64 mac_tx_4096_8191_oct_pkt_num; 314dbecc779SXi Wang u64 rsv0; 315dbecc779SXi Wang u64 mac_tx_8192_9216_oct_pkt_num; 316dbecc779SXi Wang u64 mac_tx_9217_12287_oct_pkt_num; 31791f384f6SJian Shen u64 mac_tx_12288_16383_oct_pkt_num; 31891f384f6SJian Shen u64 mac_tx_1519_max_good_oct_pkt_num; 31991f384f6SJian Shen u64 mac_tx_1519_max_bad_oct_pkt_num; 32091f384f6SJian Shen 32146a3df9fSSalil u64 mac_rx_total_pkt_num; 32246a3df9fSSalil u64 mac_rx_total_oct_num; 32346a3df9fSSalil u64 mac_rx_good_pkt_num; 32446a3df9fSSalil u64 mac_rx_bad_pkt_num; 32546a3df9fSSalil u64 mac_rx_good_oct_num; 32646a3df9fSSalil u64 mac_rx_bad_oct_num; 32746a3df9fSSalil u64 mac_rx_uni_pkt_num; 32846a3df9fSSalil u64 mac_rx_multi_pkt_num; 32946a3df9fSSalil u64 mac_rx_broad_pkt_num; 33046a3df9fSSalil u64 mac_rx_undersize_pkt_num; 331200a88c6SJian Shen u64 mac_rx_oversize_pkt_num; 33246a3df9fSSalil u64 mac_rx_64_oct_pkt_num; 33346a3df9fSSalil u64 mac_rx_65_127_oct_pkt_num; 33446a3df9fSSalil u64 mac_rx_128_255_oct_pkt_num; 33546a3df9fSSalil u64 mac_rx_256_511_oct_pkt_num; 33646a3df9fSSalil u64 mac_rx_512_1023_oct_pkt_num; 33746a3df9fSSalil u64 mac_rx_1024_1518_oct_pkt_num; 33891f384f6SJian Shen u64 mac_rx_1519_2047_oct_pkt_num; 33991f384f6SJian Shen u64 mac_rx_2048_4095_oct_pkt_num; 34091f384f6SJian Shen u64 mac_rx_4096_8191_oct_pkt_num; 341dbecc779SXi Wang u64 rsv1; 342dbecc779SXi Wang u64 mac_rx_8192_9216_oct_pkt_num; 343dbecc779SXi Wang u64 mac_rx_9217_12287_oct_pkt_num; 34491f384f6SJian Shen u64 mac_rx_12288_16383_oct_pkt_num; 34591f384f6SJian Shen u64 mac_rx_1519_max_good_oct_pkt_num; 34691f384f6SJian Shen u64 mac_rx_1519_max_bad_oct_pkt_num; 34746a3df9fSSalil 348a6c51c26SJian Shen u64 mac_tx_fragment_pkt_num; 349a6c51c26SJian Shen u64 mac_tx_undermin_pkt_num; 350a6c51c26SJian Shen u64 mac_tx_jabber_pkt_num; 351a6c51c26SJian Shen u64 mac_tx_err_all_pkt_num; 352a6c51c26SJian Shen u64 mac_tx_from_app_good_pkt_num; 353a6c51c26SJian Shen u64 mac_tx_from_app_bad_pkt_num; 354a6c51c26SJian Shen u64 mac_rx_fragment_pkt_num; 355a6c51c26SJian Shen u64 mac_rx_undermin_pkt_num; 356a6c51c26SJian Shen u64 mac_rx_jabber_pkt_num; 357a6c51c26SJian Shen u64 mac_rx_fcs_err_pkt_num; 358a6c51c26SJian Shen u64 mac_rx_send_app_good_pkt_num; 359a6c51c26SJian Shen u64 mac_rx_send_app_bad_pkt_num; 36046a3df9fSSalil }; 36146a3df9fSSalil 362c5f65480SJian Shen #define HCLGE_STATS_TIMER_INTERVAL (60 * 5) 36346a3df9fSSalil struct hclge_hw_stats { 36446a3df9fSSalil struct hclge_mac_stats mac_stats; 365c5f65480SJian Shen u32 stats_timer; 36646a3df9fSSalil }; 36746a3df9fSSalil 3685f6ea83fSPeng Li struct hclge_vlan_type_cfg { 3695f6ea83fSPeng Li u16 rx_ot_fst_vlan_type; 3705f6ea83fSPeng Li u16 rx_ot_sec_vlan_type; 3715f6ea83fSPeng Li u16 rx_in_fst_vlan_type; 3725f6ea83fSPeng Li u16 rx_in_sec_vlan_type; 3735f6ea83fSPeng Li u16 tx_ot_vlan_type; 3745f6ea83fSPeng Li u16 tx_in_vlan_type; 3755f6ea83fSPeng Li }; 3765f6ea83fSPeng Li 377d695964dSJian Shen enum HCLGE_FD_MODE { 378d695964dSJian Shen HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1, 379d695964dSJian Shen HCLGE_FD_MODE_DEPTH_1K_WIDTH_400B_STAGE_2, 380d695964dSJian Shen HCLGE_FD_MODE_DEPTH_4K_WIDTH_200B_STAGE_1, 381d695964dSJian Shen HCLGE_FD_MODE_DEPTH_2K_WIDTH_200B_STAGE_2, 382d695964dSJian Shen }; 383d695964dSJian Shen 384d695964dSJian Shen enum HCLGE_FD_KEY_TYPE { 385d695964dSJian Shen HCLGE_FD_KEY_BASE_ON_PTYPE, 386d695964dSJian Shen HCLGE_FD_KEY_BASE_ON_TUPLE, 387d695964dSJian Shen }; 388d695964dSJian Shen 389d695964dSJian Shen enum HCLGE_FD_STAGE { 390d695964dSJian Shen HCLGE_FD_STAGE_1, 391d695964dSJian Shen HCLGE_FD_STAGE_2, 392d695964dSJian Shen }; 393d695964dSJian Shen 394d695964dSJian Shen /* OUTER_XXX indicates tuples in tunnel header of tunnel packet 395d695964dSJian Shen * INNER_XXX indicate tuples in tunneled header of tunnel packet or 396d695964dSJian Shen * tuples of non-tunnel packet 397d695964dSJian Shen */ 398d695964dSJian Shen enum HCLGE_FD_TUPLE { 399d695964dSJian Shen OUTER_DST_MAC, 400d695964dSJian Shen OUTER_SRC_MAC, 401d695964dSJian Shen OUTER_VLAN_TAG_FST, 402d695964dSJian Shen OUTER_VLAN_TAG_SEC, 403d695964dSJian Shen OUTER_ETH_TYPE, 404d695964dSJian Shen OUTER_L2_RSV, 405d695964dSJian Shen OUTER_IP_TOS, 406d695964dSJian Shen OUTER_IP_PROTO, 407d695964dSJian Shen OUTER_SRC_IP, 408d695964dSJian Shen OUTER_DST_IP, 409d695964dSJian Shen OUTER_L3_RSV, 410d695964dSJian Shen OUTER_SRC_PORT, 411d695964dSJian Shen OUTER_DST_PORT, 412d695964dSJian Shen OUTER_L4_RSV, 413d695964dSJian Shen OUTER_TUN_VNI, 414d695964dSJian Shen OUTER_TUN_FLOW_ID, 415d695964dSJian Shen INNER_DST_MAC, 416d695964dSJian Shen INNER_SRC_MAC, 417d695964dSJian Shen INNER_VLAN_TAG_FST, 418d695964dSJian Shen INNER_VLAN_TAG_SEC, 419d695964dSJian Shen INNER_ETH_TYPE, 420d695964dSJian Shen INNER_L2_RSV, 421d695964dSJian Shen INNER_IP_TOS, 422d695964dSJian Shen INNER_IP_PROTO, 423d695964dSJian Shen INNER_SRC_IP, 424d695964dSJian Shen INNER_DST_IP, 425d695964dSJian Shen INNER_L3_RSV, 426d695964dSJian Shen INNER_SRC_PORT, 427d695964dSJian Shen INNER_DST_PORT, 428d695964dSJian Shen INNER_L4_RSV, 429d695964dSJian Shen MAX_TUPLE, 430d695964dSJian Shen }; 431d695964dSJian Shen 432d695964dSJian Shen enum HCLGE_FD_META_DATA { 433d695964dSJian Shen PACKET_TYPE_ID, 434d695964dSJian Shen IP_FRAGEMENT, 435d695964dSJian Shen ROCE_TYPE, 436d695964dSJian Shen NEXT_KEY, 437d695964dSJian Shen VLAN_NUMBER, 438d695964dSJian Shen SRC_VPORT, 439d695964dSJian Shen DST_VPORT, 440d695964dSJian Shen TUNNEL_PACKET, 441d695964dSJian Shen MAX_META_DATA, 442d695964dSJian Shen }; 443d695964dSJian Shen 444d695964dSJian Shen struct key_info { 445d695964dSJian Shen u8 key_type; 446d695964dSJian Shen u8 key_length; 447d695964dSJian Shen }; 448d695964dSJian Shen 449d695964dSJian Shen static const struct key_info meta_data_key_info[] = { 450d695964dSJian Shen { PACKET_TYPE_ID, 6}, 451d695964dSJian Shen { IP_FRAGEMENT, 1}, 452d695964dSJian Shen { ROCE_TYPE, 1}, 453d695964dSJian Shen { NEXT_KEY, 5}, 454d695964dSJian Shen { VLAN_NUMBER, 2}, 455d695964dSJian Shen { SRC_VPORT, 12}, 456d695964dSJian Shen { DST_VPORT, 12}, 457d695964dSJian Shen { TUNNEL_PACKET, 1}, 458d695964dSJian Shen }; 459d695964dSJian Shen 460d695964dSJian Shen static const struct key_info tuple_key_info[] = { 461d695964dSJian Shen { OUTER_DST_MAC, 48}, 462d695964dSJian Shen { OUTER_SRC_MAC, 48}, 463d695964dSJian Shen { OUTER_VLAN_TAG_FST, 16}, 464d695964dSJian Shen { OUTER_VLAN_TAG_SEC, 16}, 465d695964dSJian Shen { OUTER_ETH_TYPE, 16}, 466d695964dSJian Shen { OUTER_L2_RSV, 16}, 467d695964dSJian Shen { OUTER_IP_TOS, 8}, 468d695964dSJian Shen { OUTER_IP_PROTO, 8}, 469d695964dSJian Shen { OUTER_SRC_IP, 32}, 470d695964dSJian Shen { OUTER_DST_IP, 32}, 471d695964dSJian Shen { OUTER_L3_RSV, 16}, 472d695964dSJian Shen { OUTER_SRC_PORT, 16}, 473d695964dSJian Shen { OUTER_DST_PORT, 16}, 474d695964dSJian Shen { OUTER_L4_RSV, 32}, 475d695964dSJian Shen { OUTER_TUN_VNI, 24}, 476d695964dSJian Shen { OUTER_TUN_FLOW_ID, 8}, 477d695964dSJian Shen { INNER_DST_MAC, 48}, 478d695964dSJian Shen { INNER_SRC_MAC, 48}, 479d695964dSJian Shen { INNER_VLAN_TAG_FST, 16}, 480d695964dSJian Shen { INNER_VLAN_TAG_SEC, 16}, 481d695964dSJian Shen { INNER_ETH_TYPE, 16}, 482d695964dSJian Shen { INNER_L2_RSV, 16}, 483d695964dSJian Shen { INNER_IP_TOS, 8}, 484d695964dSJian Shen { INNER_IP_PROTO, 8}, 485d695964dSJian Shen { INNER_SRC_IP, 32}, 486d695964dSJian Shen { INNER_DST_IP, 32}, 487d695964dSJian Shen { INNER_L3_RSV, 16}, 488d695964dSJian Shen { INNER_SRC_PORT, 16}, 489d695964dSJian Shen { INNER_DST_PORT, 16}, 490d695964dSJian Shen { INNER_L4_RSV, 32}, 491d695964dSJian Shen }; 492d695964dSJian Shen 493d695964dSJian Shen #define MAX_KEY_LENGTH 400 494d695964dSJian Shen #define MAX_KEY_DWORDS DIV_ROUND_UP(MAX_KEY_LENGTH / 8, 4) 495d695964dSJian Shen #define MAX_KEY_BYTES (MAX_KEY_DWORDS * 4) 496d695964dSJian Shen #define MAX_META_DATA_LENGTH 32 497d695964dSJian Shen 498d695964dSJian Shen enum HCLGE_FD_PACKET_TYPE { 499d695964dSJian Shen NIC_PACKET, 500d695964dSJian Shen ROCE_PACKET, 501d695964dSJian Shen }; 502d695964dSJian Shen 50311732868SJian Shen enum HCLGE_FD_ACTION { 50411732868SJian Shen HCLGE_FD_ACTION_ACCEPT_PACKET, 50511732868SJian Shen HCLGE_FD_ACTION_DROP_PACKET, 50611732868SJian Shen }; 50711732868SJian Shen 508d695964dSJian Shen struct hclge_fd_key_cfg { 509d695964dSJian Shen u8 key_sel; 510d695964dSJian Shen u8 inner_sipv6_word_en; 511d695964dSJian Shen u8 inner_dipv6_word_en; 512d695964dSJian Shen u8 outer_sipv6_word_en; 513d695964dSJian Shen u8 outer_dipv6_word_en; 514d695964dSJian Shen u32 tuple_active; 515d695964dSJian Shen u32 meta_data_active; 516d695964dSJian Shen }; 517d695964dSJian Shen 518d695964dSJian Shen struct hclge_fd_cfg { 519d695964dSJian Shen u8 fd_mode; 520d695964dSJian Shen u8 fd_en; 521d695964dSJian Shen u16 max_key_length; 522d695964dSJian Shen u32 proto_support; 523d695964dSJian Shen u32 rule_num[2]; /* rule entry number */ 524d695964dSJian Shen u16 cnt_num[2]; /* rule hit counter number */ 525d695964dSJian Shen struct hclge_fd_key_cfg key_cfg[2]; 526d695964dSJian Shen }; 527d695964dSJian Shen 52811732868SJian Shen struct hclge_fd_rule_tuples { 52911732868SJian Shen u8 src_mac[6]; 53011732868SJian Shen u8 dst_mac[6]; 53111732868SJian Shen u32 src_ip[4]; 53211732868SJian Shen u32 dst_ip[4]; 53311732868SJian Shen u16 src_port; 53411732868SJian Shen u16 dst_port; 53511732868SJian Shen u16 vlan_tag1; 53611732868SJian Shen u16 ether_proto; 53711732868SJian Shen u8 ip_tos; 53811732868SJian Shen u8 ip_proto; 53911732868SJian Shen }; 54011732868SJian Shen 54111732868SJian Shen struct hclge_fd_rule { 54211732868SJian Shen struct hlist_node rule_node; 54311732868SJian Shen struct hclge_fd_rule_tuples tuples; 54411732868SJian Shen struct hclge_fd_rule_tuples tuples_mask; 54511732868SJian Shen u32 unused_tuple; 54611732868SJian Shen u32 flow_type; 54711732868SJian Shen u8 action; 54811732868SJian Shen u16 vf_id; 54911732868SJian Shen u16 queue_id; 55011732868SJian Shen u16 location; 55111732868SJian Shen }; 55211732868SJian Shen 55311732868SJian Shen struct hclge_fd_ad_data { 55411732868SJian Shen u16 ad_id; 55511732868SJian Shen u8 drop_packet; 55611732868SJian Shen u8 forward_to_direct_queue; 55711732868SJian Shen u16 queue_id; 55811732868SJian Shen u8 use_counter; 55911732868SJian Shen u8 counter_id; 56011732868SJian Shen u8 use_next_stage; 56111732868SJian Shen u8 write_rule_id_to_bd; 56211732868SJian Shen u8 next_input_key; 56311732868SJian Shen u16 rule_id; 56411732868SJian Shen }; 56511732868SJian Shen 56611732868SJian Shen /* For each bit of TCAM entry, it uses a pair of 'x' and 56711732868SJian Shen * 'y' to indicate which value to match, like below: 56811732868SJian Shen * ---------------------------------- 56911732868SJian Shen * | bit x | bit y | search value | 57011732868SJian Shen * ---------------------------------- 57111732868SJian Shen * | 0 | 0 | always hit | 57211732868SJian Shen * ---------------------------------- 57311732868SJian Shen * | 1 | 0 | match '0' | 57411732868SJian Shen * ---------------------------------- 57511732868SJian Shen * | 0 | 1 | match '1' | 57611732868SJian Shen * ---------------------------------- 57711732868SJian Shen * | 1 | 1 | invalid | 57811732868SJian Shen * ---------------------------------- 57911732868SJian Shen * Then for input key(k) and mask(v), we can calculate the value by 58011732868SJian Shen * the formulae: 58111732868SJian Shen * x = (~k) & v 58211732868SJian Shen * y = (k ^ ~v) & k 58311732868SJian Shen */ 58411732868SJian Shen #define calc_x(x, k, v) ((x) = (~(k) & (v))) 58511732868SJian Shen #define calc_y(y, k, v) \ 58611732868SJian Shen do { \ 58711732868SJian Shen const typeof(k) _k_ = (k); \ 58811732868SJian Shen const typeof(v) _v_ = (v); \ 58911732868SJian Shen (y) = (_k_ ^ ~_v_) & (_k_); \ 59011732868SJian Shen } while (0) 59111732868SJian Shen 592dc8131d8SYunsheng Lin #define HCLGE_VPORT_NUM 256 59346a3df9fSSalil struct hclge_dev { 59446a3df9fSSalil struct pci_dev *pdev; 59546a3df9fSSalil struct hnae3_ae_dev *ae_dev; 59646a3df9fSSalil struct hclge_hw hw; 597466b0c00SLipeng struct hclge_misc_vector misc_vector; 59846a3df9fSSalil struct hclge_hw_stats hw_stats; 59946a3df9fSSalil unsigned long state; 6000742ed7cSHuazhong Tan unsigned long last_reset_time; 60146a3df9fSSalil 6024ed340abSLipeng enum hnae3_reset_type reset_type; 6030742ed7cSHuazhong Tan enum hnae3_reset_type reset_level; 604720bd583SHuazhong Tan unsigned long default_reset_request; 605cb1b9f77SSalil Mehta unsigned long reset_request; /* reset has been requested */ 606ca1d7669SSalil Mehta unsigned long reset_pending; /* client rst is pending to be served */ 6074d60291bSHuazhong Tan unsigned long reset_count; /* the number of reset has been done */ 60865e41e7eSHuazhong Tan u32 reset_fail_cnt; 60946a3df9fSSalil u32 fw_version; 61046a3df9fSSalil u16 num_vmdq_vport; /* Num vmdq vport this PF has set up */ 61146a3df9fSSalil u16 num_tqps; /* Num task queue pairs of this PF */ 61246a3df9fSSalil u16 num_req_vfs; /* Num VFs requested for this PF */ 61346a3df9fSSalil 614fdace1bcSJian Shen u16 base_tqp_pid; /* Base task tqp physical id of this PF */ 61546a3df9fSSalil u16 alloc_rss_size; /* Allocated RSS task queue */ 61646a3df9fSSalil u16 rss_size_max; /* HW defined max RSS task queue */ 61746a3df9fSSalil 618fdace1bcSJian Shen u16 fdir_pf_filter_count; /* Num of guaranteed filters for this PF */ 61946a3df9fSSalil u16 num_alloc_vport; /* Num vports this driver supports */ 62046a3df9fSSalil u32 numa_node_mask; 62146a3df9fSSalil u16 rx_buf_len; 62246a3df9fSSalil u16 num_desc; 62346a3df9fSSalil u8 hw_tc_map; 62446a3df9fSSalil u8 tc_num_last_time; 62546a3df9fSSalil enum hclge_fc_mode fc_mode_last_time; 62646a3df9fSSalil 62746a3df9fSSalil #define HCLGE_FLAG_TC_BASE_SCH_MODE 1 62846a3df9fSSalil #define HCLGE_FLAG_VNET_BASE_SCH_MODE 2 62946a3df9fSSalil u8 tx_sch_mode; 630cacde272SYunsheng Lin u8 tc_max; 631cacde272SYunsheng Lin u8 pfc_max; 63246a3df9fSSalil 63346a3df9fSSalil u8 default_up; 634cacde272SYunsheng Lin u8 dcbx_cap; 63546a3df9fSSalil struct hclge_tm_info tm_info; 63646a3df9fSSalil 63746a3df9fSSalil u16 num_msi; 63846a3df9fSSalil u16 num_msi_left; 63946a3df9fSSalil u16 num_msi_used; 640375dd5e4SJian Shen u16 roce_base_msix_offset; 64146a3df9fSSalil u32 base_msi_vector; 64246a3df9fSSalil u16 *vector_status; 643887c3820SSalil Mehta int *vector_irq; 644887c3820SSalil Mehta u16 num_roce_msi; /* Num of roce vectors for this PF */ 645887c3820SSalil Mehta int roce_base_vector; 64646a3df9fSSalil 64746a3df9fSSalil u16 pending_udp_bitmap; 64846a3df9fSSalil 64946a3df9fSSalil u16 rx_itr_default; 65046a3df9fSSalil u16 tx_itr_default; 65146a3df9fSSalil 65246a3df9fSSalil u16 adminq_work_limit; /* Num of admin receive queue desc to process */ 65346a3df9fSSalil unsigned long service_timer_period; 65446a3df9fSSalil unsigned long service_timer_previous; 65546a3df9fSSalil struct timer_list service_timer; 65665e41e7eSHuazhong Tan struct timer_list reset_timer; 65746a3df9fSSalil struct work_struct service_task; 658cb1b9f77SSalil Mehta struct work_struct rst_service_task; 659c1a81619SSalil Mehta struct work_struct mbx_service_task; 66046a3df9fSSalil 66146a3df9fSSalil bool cur_promisc; 66246a3df9fSSalil int num_alloc_vfs; /* Actual number of VFs allocated */ 66346a3df9fSSalil 66446a3df9fSSalil struct hclge_tqp *htqp; 66546a3df9fSSalil struct hclge_vport *vport; 66646a3df9fSSalil 66746a3df9fSSalil struct dentry *hclge_dbgfs; 66846a3df9fSSalil 66946a3df9fSSalil struct hnae3_client *nic_client; 67046a3df9fSSalil struct hnae3_client *roce_client; 67146a3df9fSSalil 672887c3820SSalil Mehta #define HCLGE_FLAG_MAIN BIT(0) 673887c3820SSalil Mehta #define HCLGE_FLAG_DCB_CAPABLE BIT(1) 674887c3820SSalil Mehta #define HCLGE_FLAG_DCB_ENABLE BIT(2) 675887c3820SSalil Mehta #define HCLGE_FLAG_MQPRIO_ENABLE BIT(3) 67646a3df9fSSalil u32 flag; 67746a3df9fSSalil 67846a3df9fSSalil u32 pkt_buf_size; /* Total pf buf size for tx/rx */ 67946a3df9fSSalil u32 mps; /* Max packet size */ 68046a3df9fSSalil 6815f6ea83fSPeng Li struct hclge_vlan_type_cfg vlan_type_cfg; 682716aaac1SJian Shen 683dc8131d8SYunsheng Lin unsigned long vlan_table[VLAN_N_VID][BITS_TO_LONGS(HCLGE_VPORT_NUM)]; 684d695964dSJian Shen 685d695964dSJian Shen struct hclge_fd_cfg fd_cfg; 686dd74f815SJian Shen struct hlist_head fd_rule_list; 687dd74f815SJian Shen u16 hclge_fd_rule_num; 68839932473SJian Shen 68939932473SJian Shen u16 wanted_umv_size; 69039932473SJian Shen /* max available unicast mac vlan space */ 69139932473SJian Shen u16 max_umv_size; 69239932473SJian Shen /* private unicast mac vlan space, it's same for PF and its VFs */ 69339932473SJian Shen u16 priv_umv_size; 69439932473SJian Shen /* unicast mac vlan space shared by PF and its VFs */ 69539932473SJian Shen u16 share_umv_size; 69639932473SJian Shen struct mutex umv_mutex; /* protect share_umv_size */ 6975f6ea83fSPeng Li }; 6985f6ea83fSPeng Li 6995f6ea83fSPeng Li /* VPort level vlan tag configuration for TX direction */ 7005f6ea83fSPeng Li struct hclge_tx_vtag_cfg { 701dcb35cceSPeng Li bool accept_tag1; /* Whether accept tag1 packet from host */ 702dcb35cceSPeng Li bool accept_untag1; /* Whether accept untag1 packet from host */ 703dcb35cceSPeng Li bool accept_tag2; 704dcb35cceSPeng Li bool accept_untag2; 7055f6ea83fSPeng Li bool insert_tag1_en; /* Whether insert inner vlan tag */ 7065f6ea83fSPeng Li bool insert_tag2_en; /* Whether insert outer vlan tag */ 7075f6ea83fSPeng Li u16 default_tag1; /* The default inner vlan tag to insert */ 7085f6ea83fSPeng Li u16 default_tag2; /* The default outer vlan tag to insert */ 7095f6ea83fSPeng Li }; 7105f6ea83fSPeng Li 7115f6ea83fSPeng Li /* VPort level vlan tag configuration for RX direction */ 7125f6ea83fSPeng Li struct hclge_rx_vtag_cfg { 7135f6ea83fSPeng Li bool strip_tag1_en; /* Whether strip inner vlan tag */ 7145f6ea83fSPeng Li bool strip_tag2_en; /* Whether strip outer vlan tag */ 7155f6ea83fSPeng Li bool vlan1_vlan_prionly;/* Inner VLAN Tag up to descriptor Enable */ 7165f6ea83fSPeng Li bool vlan2_vlan_prionly;/* Outer VLAN Tag up to descriptor Enable */ 71746a3df9fSSalil }; 71846a3df9fSSalil 7196f2af429SYunsheng Lin struct hclge_rss_tuple_cfg { 7206f2af429SYunsheng Lin u8 ipv4_tcp_en; 7216f2af429SYunsheng Lin u8 ipv4_udp_en; 7226f2af429SYunsheng Lin u8 ipv4_sctp_en; 7236f2af429SYunsheng Lin u8 ipv4_fragment_en; 7246f2af429SYunsheng Lin u8 ipv6_tcp_en; 7256f2af429SYunsheng Lin u8 ipv6_udp_en; 7266f2af429SYunsheng Lin u8 ipv6_sctp_en; 7276f2af429SYunsheng Lin u8 ipv6_fragment_en; 7286f2af429SYunsheng Lin }; 7296f2af429SYunsheng Lin 73046a3df9fSSalil struct hclge_vport { 73146a3df9fSSalil u16 alloc_tqps; /* Allocated Tx/Rx queues */ 73246a3df9fSSalil 73346a3df9fSSalil u8 rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */ 73446a3df9fSSalil /* User configured lookup table entries */ 73546a3df9fSSalil u8 rss_indirection_tbl[HCLGE_RSS_IND_TBL_SIZE]; 73689523cfaSYunsheng Lin int rss_algo; /* User configured hash algorithm */ 7376f2af429SYunsheng Lin /* User configured rss tuple sets */ 7386f2af429SYunsheng Lin struct hclge_rss_tuple_cfg rss_tuple_sets; 73989523cfaSYunsheng Lin 74068ece54eSYunsheng Lin u16 alloc_rss_size; 74146a3df9fSSalil 74246a3df9fSSalil u16 qs_offset; 74346a3df9fSSalil u16 bw_limit; /* VSI BW Limit (0 = disabled) */ 74446a3df9fSSalil u8 dwrr; 74546a3df9fSSalil 7465f6ea83fSPeng Li struct hclge_tx_vtag_cfg txvlan_cfg; 7475f6ea83fSPeng Li struct hclge_rx_vtag_cfg rxvlan_cfg; 7485f6ea83fSPeng Li 74939932473SJian Shen u16 used_umv_num; 75039932473SJian Shen 75146a3df9fSSalil int vport_id; 75246a3df9fSSalil struct hclge_dev *back; /* Back reference to associated dev */ 75346a3df9fSSalil struct hnae3_handle nic; 75446a3df9fSSalil struct hnae3_handle roce; 75546a3df9fSSalil }; 75646a3df9fSSalil 75746a3df9fSSalil void hclge_promisc_param_init(struct hclge_promisc_param *param, bool en_uc, 75846a3df9fSSalil bool en_mc, bool en_bc, int vport_id); 75946a3df9fSSalil 76046a3df9fSSalil int hclge_add_uc_addr_common(struct hclge_vport *vport, 76146a3df9fSSalil const unsigned char *addr); 76246a3df9fSSalil int hclge_rm_uc_addr_common(struct hclge_vport *vport, 76346a3df9fSSalil const unsigned char *addr); 76446a3df9fSSalil int hclge_add_mc_addr_common(struct hclge_vport *vport, 76546a3df9fSSalil const unsigned char *addr); 76646a3df9fSSalil int hclge_rm_mc_addr_common(struct hclge_vport *vport, 76746a3df9fSSalil const unsigned char *addr); 76846a3df9fSSalil 76946a3df9fSSalil struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle); 77084e095d6SSalil Mehta int hclge_bind_ring_with_vector(struct hclge_vport *vport, 77184e095d6SSalil Mehta int vector_id, bool en, 77246a3df9fSSalil struct hnae3_ring_chain_node *ring_chain); 77384e095d6SSalil Mehta 77446a3df9fSSalil static inline int hclge_get_queue_id(struct hnae3_queue *queue) 77546a3df9fSSalil { 77646a3df9fSSalil struct hclge_tqp *tqp = container_of(queue, struct hclge_tqp, q); 77746a3df9fSSalil 77846a3df9fSSalil return tqp->index; 77946a3df9fSSalil } 78046a3df9fSSalil 781*6dd22bbcSHuazhong Tan static inline bool hclge_is_reset_pending(struct hclge_dev *hdev) 782*6dd22bbcSHuazhong Tan { 783*6dd22bbcSHuazhong Tan return !!hdev->reset_pending; 784*6dd22bbcSHuazhong Tan } 785*6dd22bbcSHuazhong Tan 786dea846e8SHuazhong Tan int hclge_inform_reset_assert_to_vf(struct hclge_vport *vport); 78746a3df9fSSalil int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex); 788dc8131d8SYunsheng Lin int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto, 789dc8131d8SYunsheng Lin u16 vlan_id, bool is_kill); 790b2641e2aSYunsheng Lin int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable); 79177f255c1SYunsheng Lin 79277f255c1SYunsheng Lin int hclge_buffer_alloc(struct hclge_dev *hdev); 79377f255c1SYunsheng Lin int hclge_rss_init_hw(struct hclge_dev *hdev); 794268f5dfaSYunsheng Lin void hclge_rss_indir_init_cfg(struct hclge_dev *hdev); 795dde1a86eSSalil Mehta 796aa5c4f17SHuazhong Tan int hclge_inform_reset_assert_to_vf(struct hclge_vport *vport); 797dde1a86eSSalil Mehta void hclge_mbx_handler(struct hclge_dev *hdev); 7987fa6be4fSHuazhong Tan int hclge_reset_tqp(struct hnae3_handle *handle, u16 queue_id); 7991a426f8bSPeng Li void hclge_reset_vf_queue(struct hclge_vport *vport, u16 queue_id); 8001770a7a3SPeng Li int hclge_cfg_flowctrl(struct hclge_dev *hdev); 8012bfbd35dSSalil Mehta int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id); 80246a3df9fSSalil #endif 803