xref: /linux/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h (revision d991452dd7900cf152ffb43db3b1d385e1a01579)
12ef17216SNishad Kamdar /* 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>
10a6345787SWeihang Li #include <linux/kfifo.h>
11dc8131d8SYunsheng Lin 
1246a3df9fSSalil #include "hclge_cmd.h"
1346a3df9fSSalil #include "hnae3.h"
1446a3df9fSSalil 
153c7624d8SXi Wang #define HCLGE_MOD_VERSION "1.0"
1646a3df9fSSalil #define HCLGE_DRIVER_NAME "hclge"
1746a3df9fSSalil 
1839932473SJian Shen #define HCLGE_MAX_PF_NUM		8
1939932473SJian Shen 
20693e4415SGuoJia Liao #define HCLGE_VF_VPORT_START_NUM	1
21693e4415SGuoJia Liao 
22d174ea75Sliuzhongzhu #define HCLGE_RD_FIRST_STATS_NUM        2
23d174ea75Sliuzhongzhu #define HCLGE_RD_OTHER_STATS_NUM        4
24d174ea75Sliuzhongzhu 
2546a3df9fSSalil #define HCLGE_INVALID_VPORT 0xffff
2646a3df9fSSalil 
2746a3df9fSSalil #define HCLGE_PF_CFG_BLOCK_SIZE		32
2846a3df9fSSalil #define HCLGE_PF_CFG_DESC_NUM \
2946a3df9fSSalil 	(HCLGE_PF_CFG_BLOCK_SIZE / HCLGE_CFG_RD_LEN_BYTES)
3046a3df9fSSalil 
3146a3df9fSSalil #define HCLGE_VECTOR_REG_BASE		0x20000
323a6863e4SYufeng Mo #define HCLGE_VECTOR_EXT_REG_BASE	0x30000
33466b0c00SLipeng #define HCLGE_MISC_VECTOR_REG_BASE	0x20400
3446a3df9fSSalil 
3546a3df9fSSalil #define HCLGE_VECTOR_REG_OFFSET		0x4
363a6863e4SYufeng Mo #define HCLGE_VECTOR_REG_OFFSET_H	0x1000
3746a3df9fSSalil #define HCLGE_VECTOR_VF_OFFSET		0x100000
3846a3df9fSSalil 
39ea4750caSJian Shen #define HCLGE_CMDQ_TX_ADDR_L_REG	0x27000
40ea4750caSJian Shen #define HCLGE_CMDQ_TX_ADDR_H_REG	0x27004
41ea4750caSJian Shen #define HCLGE_CMDQ_TX_DEPTH_REG		0x27008
42ea4750caSJian Shen #define HCLGE_CMDQ_TX_TAIL_REG		0x27010
43ea4750caSJian Shen #define HCLGE_CMDQ_TX_HEAD_REG		0x27014
44ea4750caSJian Shen #define HCLGE_CMDQ_RX_ADDR_L_REG	0x27018
45ea4750caSJian Shen #define HCLGE_CMDQ_RX_ADDR_H_REG	0x2701C
46ea4750caSJian Shen #define HCLGE_CMDQ_RX_DEPTH_REG		0x27020
47ea4750caSJian Shen #define HCLGE_CMDQ_RX_TAIL_REG		0x27024
48ea4750caSJian Shen #define HCLGE_CMDQ_RX_HEAD_REG		0x27028
49ea4750caSJian Shen #define HCLGE_CMDQ_INTR_STS_REG		0x27104
50ea4750caSJian Shen #define HCLGE_CMDQ_INTR_EN_REG		0x27108
51ea4750caSJian Shen #define HCLGE_CMDQ_INTR_GEN_REG		0x2710C
52ea4750caSJian Shen 
53ea4750caSJian Shen /* bar registers for common func */
54ea4750caSJian Shen #define HCLGE_VECTOR0_OTER_EN_REG	0x20600
55ea4750caSJian Shen #define HCLGE_GRO_EN_REG		0x28000
5679664077SHuazhong Tan #define HCLGE_RXD_ADV_LAYOUT_EN_REG	0x28008
57ea4750caSJian Shen 
58ea4750caSJian Shen /* bar registers for rcb */
59ea4750caSJian Shen #define HCLGE_RING_RX_ADDR_L_REG	0x80000
60ea4750caSJian Shen #define HCLGE_RING_RX_ADDR_H_REG	0x80004
61ea4750caSJian Shen #define HCLGE_RING_RX_BD_NUM_REG	0x80008
62ea4750caSJian Shen #define HCLGE_RING_RX_BD_LENGTH_REG	0x8000C
63ea4750caSJian Shen #define HCLGE_RING_RX_MERGE_EN_REG	0x80014
64ea4750caSJian Shen #define HCLGE_RING_RX_TAIL_REG		0x80018
65ea4750caSJian Shen #define HCLGE_RING_RX_HEAD_REG		0x8001C
66ea4750caSJian Shen #define HCLGE_RING_RX_FBD_NUM_REG	0x80020
67ea4750caSJian Shen #define HCLGE_RING_RX_OFFSET_REG	0x80024
68ea4750caSJian Shen #define HCLGE_RING_RX_FBD_OFFSET_REG	0x80028
69ea4750caSJian Shen #define HCLGE_RING_RX_STASH_REG		0x80030
70ea4750caSJian Shen #define HCLGE_RING_RX_BD_ERR_REG	0x80034
71ea4750caSJian Shen #define HCLGE_RING_TX_ADDR_L_REG	0x80040
72ea4750caSJian Shen #define HCLGE_RING_TX_ADDR_H_REG	0x80044
73ea4750caSJian Shen #define HCLGE_RING_TX_BD_NUM_REG	0x80048
74ea4750caSJian Shen #define HCLGE_RING_TX_PRIORITY_REG	0x8004C
75ea4750caSJian Shen #define HCLGE_RING_TX_TC_REG		0x80050
76ea4750caSJian Shen #define HCLGE_RING_TX_MERGE_EN_REG	0x80054
77ea4750caSJian Shen #define HCLGE_RING_TX_TAIL_REG		0x80058
78ea4750caSJian Shen #define HCLGE_RING_TX_HEAD_REG		0x8005C
79ea4750caSJian Shen #define HCLGE_RING_TX_FBD_NUM_REG	0x80060
80ea4750caSJian Shen #define HCLGE_RING_TX_OFFSET_REG	0x80064
81ea4750caSJian Shen #define HCLGE_RING_TX_EBD_NUM_REG	0x80068
82ea4750caSJian Shen #define HCLGE_RING_TX_EBD_OFFSET_REG	0x80070
83ea4750caSJian Shen #define HCLGE_RING_TX_BD_ERR_REG	0x80074
84ea4750caSJian Shen #define HCLGE_RING_EN_REG		0x80090
85ea4750caSJian Shen 
86ea4750caSJian Shen /* bar registers for tqp interrupt */
87ea4750caSJian Shen #define HCLGE_TQP_INTR_CTRL_REG		0x20000
88ea4750caSJian Shen #define HCLGE_TQP_INTR_GL0_REG		0x20100
89ea4750caSJian Shen #define HCLGE_TQP_INTR_GL1_REG		0x20200
90ea4750caSJian Shen #define HCLGE_TQP_INTR_GL2_REG		0x20300
91ea4750caSJian Shen #define HCLGE_TQP_INTR_RL_REG		0x20900
92ea4750caSJian Shen 
9346a3df9fSSalil #define HCLGE_RSS_IND_TBL_SIZE		512
945392902dSYunsheng Lin #define HCLGE_RSS_SET_BITMAP_MSK	GENMASK(15, 0)
9546a3df9fSSalil #define HCLGE_RSS_KEY_SIZE		40
9646a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_TOEPLITZ	0
9746a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SIMPLE	1
9846a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SYMMETRIC	2
99c79301d8SJian Shen #define HCLGE_RSS_HASH_ALGO_MASK	GENMASK(3, 0)
10046a3df9fSSalil 
101f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_OTHER	GENMASK(3, 0)
102f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_SCTP	GENMASK(4, 0)
103f7db940aSLipeng #define HCLGE_D_PORT_BIT		BIT(0)
104f7db940aSLipeng #define HCLGE_S_PORT_BIT		BIT(1)
105f7db940aSLipeng #define HCLGE_D_IP_BIT			BIT(2)
106f7db940aSLipeng #define HCLGE_S_IP_BIT			BIT(3)
107f7db940aSLipeng #define HCLGE_V_TAG_BIT			BIT(4)
108ab6e32d2SJian Shen #define HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT	\
109ab6e32d2SJian Shen 		(HCLGE_D_IP_BIT | HCLGE_S_IP_BIT | HCLGE_V_TAG_BIT)
110f7db940aSLipeng 
11146a3df9fSSalil #define HCLGE_RSS_TC_SIZE_0		1
11246a3df9fSSalil #define HCLGE_RSS_TC_SIZE_1		2
11346a3df9fSSalil #define HCLGE_RSS_TC_SIZE_2		4
11446a3df9fSSalil #define HCLGE_RSS_TC_SIZE_3		8
11546a3df9fSSalil #define HCLGE_RSS_TC_SIZE_4		16
11646a3df9fSSalil #define HCLGE_RSS_TC_SIZE_5		32
11746a3df9fSSalil #define HCLGE_RSS_TC_SIZE_6		64
11846a3df9fSSalil #define HCLGE_RSS_TC_SIZE_7		128
11946a3df9fSSalil 
12039932473SJian Shen #define HCLGE_UMV_TBL_SIZE		3072
12139932473SJian Shen #define HCLGE_DEFAULT_UMV_SPACE_PER_PF \
12239932473SJian Shen 	(HCLGE_UMV_TBL_SIZE / HCLGE_MAX_PF_NUM)
12339932473SJian Shen 
124e8df45c2SZhongzhu Liu #define HCLGE_TQP_RESET_TRY_TIMES	200
12546a3df9fSSalil 
12646a3df9fSSalil #define HCLGE_PHY_PAGE_MDIX		0
12746a3df9fSSalil #define HCLGE_PHY_PAGE_COPPER		0
12846a3df9fSSalil 
12946a3df9fSSalil /* Page Selection Reg. */
13046a3df9fSSalil #define HCLGE_PHY_PAGE_REG		22
13146a3df9fSSalil 
13246a3df9fSSalil /* Copper Specific Control Register */
13346a3df9fSSalil #define HCLGE_PHY_CSC_REG		16
13446a3df9fSSalil 
13546a3df9fSSalil /* Copper Specific Status Register */
13646a3df9fSSalil #define HCLGE_PHY_CSS_REG		17
13746a3df9fSSalil 
138a10829c4SJian Shen #define HCLGE_PHY_MDIX_CTRL_S		5
1395392902dSYunsheng Lin #define HCLGE_PHY_MDIX_CTRL_M		GENMASK(6, 5)
14046a3df9fSSalil 
141a10829c4SJian Shen #define HCLGE_PHY_MDIX_STATUS_B		6
142a10829c4SJian Shen #define HCLGE_PHY_SPEED_DUP_RESOLVE_B	11
14346a3df9fSSalil 
1449027d043SGuojia Liao #define HCLGE_GET_DFX_REG_TYPE_CNT	4
1459027d043SGuojia Liao 
1465f6ea83fSPeng Li /* Factor used to calculate offset and bitmap of VF num */
1475f6ea83fSPeng Li #define HCLGE_VF_NUM_PER_CMD           64
1485f6ea83fSPeng Li 
1493f094bd1SGuangbin Huang #define HCLGE_MAX_QSET_NUM		1024
1503f094bd1SGuangbin Huang 
1511a7ff828SJiaran Zhang #define HCLGE_DBG_RESET_INFO_LEN	1024
1521a7ff828SJiaran Zhang 
15311732868SJian Shen enum HLCGE_PORT_TYPE {
15411732868SJian Shen 	HOST_PORT,
15511732868SJian Shen 	NETWORK_PORT
15611732868SJian Shen };
15711732868SJian Shen 
158dd2956eaSYufeng Mo #define PF_VPORT_ID			0
159dd2956eaSYufeng Mo 
16011732868SJian Shen #define HCLGE_PF_ID_S			0
16111732868SJian Shen #define HCLGE_PF_ID_M			GENMASK(2, 0)
16211732868SJian Shen #define HCLGE_VF_ID_S			3
16311732868SJian Shen #define HCLGE_VF_ID_M			GENMASK(10, 3)
16411732868SJian Shen #define HCLGE_PORT_TYPE_B		11
16511732868SJian Shen #define HCLGE_NETWORK_PORT_ID_S		0
16611732868SJian Shen #define HCLGE_NETWORK_PORT_ID_M		GENMASK(3, 0)
16711732868SJian Shen 
1684ed340abSLipeng /* Reset related Registers */
1696dd22bbcSHuazhong Tan #define HCLGE_PF_OTHER_INT_REG		0x20600
1704ed340abSLipeng #define HCLGE_MISC_RESET_STS_REG	0x20700
1719ca8d1a7SHuazhong Tan #define HCLGE_MISC_VECTOR_INT_STS	0x20800
1724ed340abSLipeng #define HCLGE_GLOBAL_RESET_REG		0x20A00
173f8a91784SJian Shen #define HCLGE_GLOBAL_RESET_BIT		0
174f8a91784SJian Shen #define HCLGE_CORE_RESET_BIT		1
17565e41e7eSHuazhong Tan #define HCLGE_IMP_RESET_BIT		2
17674e78d6bSHuazhong Tan #define HCLGE_RESET_INT_M		GENMASK(7, 5)
1774ed340abSLipeng #define HCLGE_FUN_RST_ING		0x20C00
1784ed340abSLipeng #define HCLGE_FUN_RST_ING_B		0
1794ed340abSLipeng 
1804ed340abSLipeng /* Vector0 register bits define */
1814ed340abSLipeng #define HCLGE_VECTOR0_GLOBALRESET_INT_B	5
1824ed340abSLipeng #define HCLGE_VECTOR0_CORERESET_INT_B	6
1834ed340abSLipeng #define HCLGE_VECTOR0_IMPRESET_INT_B	7
1844ed340abSLipeng 
185c1a81619SSalil Mehta /* Vector0 interrupt CMDQ event source register(RW) */
186c1a81619SSalil Mehta #define HCLGE_VECTOR0_CMDQ_SRC_REG	0x27100
187c1a81619SSalil Mehta /* CMDQ register bits for RX event(=MBX event) */
188c1a81619SSalil Mehta #define HCLGE_VECTOR0_RX_CMDQ_INT_B	1
189c1a81619SSalil Mehta 
1906dd22bbcSHuazhong Tan #define HCLGE_VECTOR0_IMP_RESET_INT_B	1
191a83d2961SWeihang Li #define HCLGE_VECTOR0_IMP_CMDQ_ERR_B	4U
192a83d2961SWeihang Li #define HCLGE_VECTOR0_IMP_RD_POISON_B	5U
1936dd22bbcSHuazhong Tan 
1942866ccb2SFuyun Liang #define HCLGE_MAC_DEFAULT_FRAME \
195a0b43717SYunsheng Lin 	(ETH_HLEN + ETH_FCS_LEN + 2 * VLAN_HLEN + ETH_DATA_LEN)
1962866ccb2SFuyun Liang #define HCLGE_MAC_MIN_FRAME		64
1972866ccb2SFuyun Liang #define HCLGE_MAC_MAX_FRAME		9728
1982866ccb2SFuyun Liang 
1990979aa0bSFuyun Liang #define HCLGE_SUPPORT_1G_BIT		BIT(0)
2000979aa0bSFuyun Liang #define HCLGE_SUPPORT_10G_BIT		BIT(1)
2010979aa0bSFuyun Liang #define HCLGE_SUPPORT_25G_BIT		BIT(2)
2020979aa0bSFuyun Liang #define HCLGE_SUPPORT_50G_BIT		BIT(3)
2030979aa0bSFuyun Liang #define HCLGE_SUPPORT_100G_BIT		BIT(4)
20488d10bd6SJian Shen /* to be compatible with exsit board */
20588d10bd6SJian Shen #define HCLGE_SUPPORT_40G_BIT		BIT(5)
206f18635d5SJian Shen #define HCLGE_SUPPORT_100M_BIT		BIT(6)
207f18635d5SJian Shen #define HCLGE_SUPPORT_10M_BIT		BIT(7)
208ae6f010cSGuangbin Huang #define HCLGE_SUPPORT_200G_BIT		BIT(8)
209f18635d5SJian Shen #define HCLGE_SUPPORT_GE \
210f18635d5SJian Shen 	(HCLGE_SUPPORT_1G_BIT | HCLGE_SUPPORT_100M_BIT | HCLGE_SUPPORT_10M_BIT)
2110979aa0bSFuyun Liang 
21246a3df9fSSalil enum HCLGE_DEV_STATE {
21346a3df9fSSalil 	HCLGE_STATE_REINITING,
21446a3df9fSSalil 	HCLGE_STATE_DOWN,
21546a3df9fSSalil 	HCLGE_STATE_DISABLED,
21646a3df9fSSalil 	HCLGE_STATE_REMOVING,
217bd9109c9SHuazhong Tan 	HCLGE_STATE_NIC_REGISTERED,
2182a0bfc36SHuazhong Tan 	HCLGE_STATE_ROCE_REGISTERED,
21946a3df9fSSalil 	HCLGE_STATE_SERVICE_INITED,
220cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_SERVICE_SCHED,
221cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_HANDLING,
222c1a81619SSalil Mehta 	HCLGE_STATE_MBX_SERVICE_SCHED,
22346a3df9fSSalil 	HCLGE_STATE_MBX_HANDLING,
224d991452dSJiaran Zhang 	HCLGE_STATE_ERR_SERVICE_SCHED,
225c5f65480SJian Shen 	HCLGE_STATE_STATISTICS_UPDATING,
2268d40854fSHuazhong Tan 	HCLGE_STATE_CMD_DISABLE,
2271c6dfe6fSYunsheng Lin 	HCLGE_STATE_LINK_UPDATING,
228d5432455SGuojia Liao 	HCLGE_STATE_RST_FAIL,
229fc4243b8SJian Shen 	HCLGE_STATE_FD_TBL_CHANGED,
230fc4243b8SJian Shen 	HCLGE_STATE_FD_CLEAR_ALL,
23167b0e142SJian Shen 	HCLGE_STATE_FD_USER_DEF_CHANGED,
23246a3df9fSSalil 	HCLGE_STATE_MAX
23346a3df9fSSalil };
23446a3df9fSSalil 
235ca1d7669SSalil Mehta enum hclge_evt_cause {
236ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_RST,
237ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_MBX,
238f6162d44SSalil Mehta 	HCLGE_VECTOR0_EVENT_ERR,
239ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_OTHER,
240ca1d7669SSalil Mehta };
241ca1d7669SSalil Mehta 
24246a3df9fSSalil enum HCLGE_MAC_SPEED {
2435d497936SPeng Li 	HCLGE_MAC_SPEED_UNKNOWN = 0,		/* unknown */
24446a3df9fSSalil 	HCLGE_MAC_SPEED_10M	= 10,		/* 10 Mbps */
24546a3df9fSSalil 	HCLGE_MAC_SPEED_100M	= 100,		/* 100 Mbps */
24646a3df9fSSalil 	HCLGE_MAC_SPEED_1G	= 1000,		/* 1000 Mbps   = 1 Gbps */
24746a3df9fSSalil 	HCLGE_MAC_SPEED_10G	= 10000,	/* 10000 Mbps  = 10 Gbps */
24846a3df9fSSalil 	HCLGE_MAC_SPEED_25G	= 25000,	/* 25000 Mbps  = 25 Gbps */
24946a3df9fSSalil 	HCLGE_MAC_SPEED_40G	= 40000,	/* 40000 Mbps  = 40 Gbps */
25046a3df9fSSalil 	HCLGE_MAC_SPEED_50G	= 50000,	/* 50000 Mbps  = 50 Gbps */
251ae6f010cSGuangbin Huang 	HCLGE_MAC_SPEED_100G	= 100000,	/* 100000 Mbps = 100 Gbps */
252ae6f010cSGuangbin Huang 	HCLGE_MAC_SPEED_200G	= 200000	/* 200000 Mbps = 200 Gbps */
25346a3df9fSSalil };
25446a3df9fSSalil 
25546a3df9fSSalil enum HCLGE_MAC_DUPLEX {
25646a3df9fSSalil 	HCLGE_MAC_HALF,
25746a3df9fSSalil 	HCLGE_MAC_FULL
25846a3df9fSSalil };
25946a3df9fSSalil 
26088d10bd6SJian Shen #define QUERY_SFP_SPEED		0
26188d10bd6SJian Shen #define QUERY_ACTIVE_SPEED	1
26288d10bd6SJian Shen 
26346a3df9fSSalil struct hclge_mac {
264ded45d40SYufeng Mo 	u8 mac_id;
26546a3df9fSSalil 	u8 phy_addr;
26646a3df9fSSalil 	u8 flag;
26788d10bd6SJian Shen 	u8 media_type;	/* port media type, e.g. fibre/copper/backplane */
26846a3df9fSSalil 	u8 mac_addr[ETH_ALEN];
26946a3df9fSSalil 	u8 autoneg;
27046a3df9fSSalil 	u8 duplex;
27188d10bd6SJian Shen 	u8 support_autoneg;
27288d10bd6SJian Shen 	u8 speed_type;	/* 0: sfp speed, 1: active speed */
27346a3df9fSSalil 	u32 speed;
274ee9e4424SYonglong Liu 	u32 max_speed;
27588d10bd6SJian Shen 	u32 speed_ability; /* speed ability supported by current media */
27688d10bd6SJian Shen 	u32 module_type; /* sub media type, e.g. kr/cr/sr/lr */
2777e6ec914SJian Shen 	u32 fec_mode; /* active fec mode */
2787e6ec914SJian Shen 	u32 user_fec_mode;
2797e6ec914SJian Shen 	u32 fec_ability;
280a3a0ff01SGuangbin Huang 	int link;	/* store the link status of mac & phy (if phy exists) */
28146a3df9fSSalil 	struct phy_device *phydev;
28246a3df9fSSalil 	struct mii_bus *mdio_bus;
28346a3df9fSSalil 	phy_interface_t phy_if;
2840979aa0bSFuyun Liang 	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
2850979aa0bSFuyun Liang 	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
28646a3df9fSSalil };
28746a3df9fSSalil 
28846a3df9fSSalil struct hclge_hw {
28946a3df9fSSalil 	void __iomem *io_base;
29030ae7f8aSHuazhong Tan 	void __iomem *mem_base;
29146a3df9fSSalil 	struct hclge_mac mac;
29246a3df9fSSalil 	int num_vec;
29346a3df9fSSalil 	struct hclge_cmq cmq;
29446a3df9fSSalil };
29546a3df9fSSalil 
29646a3df9fSSalil /* TQP stats */
29746a3df9fSSalil struct hlcge_tqp_stats {
29846a3df9fSSalil 	/* query_tqp_tx_queue_statistics ,opcode id:  0x0B03 */
29946a3df9fSSalil 	u64 rcb_tx_ring_pktnum_rcd; /* 32bit */
30046a3df9fSSalil 	/* query_tqp_rx_queue_statistics ,opcode id:  0x0B13 */
30146a3df9fSSalil 	u64 rcb_rx_ring_pktnum_rcd; /* 32bit */
30246a3df9fSSalil };
30346a3df9fSSalil 
30446a3df9fSSalil struct hclge_tqp {
305fdace1bcSJian Shen 	/* copy of device pointer from pci_dev,
306fdace1bcSJian Shen 	 * used when perform DMA mapping
307fdace1bcSJian Shen 	 */
308fdace1bcSJian Shen 	struct device *dev;
30946a3df9fSSalil 	struct hnae3_queue q;
31046a3df9fSSalil 	struct hlcge_tqp_stats tqp_stats;
31146a3df9fSSalil 	u16 index;	/* Global index in a NIC controller */
31246a3df9fSSalil 
31346a3df9fSSalil 	bool alloced;
31446a3df9fSSalil };
31546a3df9fSSalil 
31646a3df9fSSalil enum hclge_fc_mode {
31746a3df9fSSalil 	HCLGE_FC_NONE,
31846a3df9fSSalil 	HCLGE_FC_RX_PAUSE,
31946a3df9fSSalil 	HCLGE_FC_TX_PAUSE,
32046a3df9fSSalil 	HCLGE_FC_FULL,
32146a3df9fSSalil 	HCLGE_FC_PFC,
32246a3df9fSSalil 	HCLGE_FC_DEFAULT
32346a3df9fSSalil };
32446a3df9fSSalil 
3250ca821daSJian Shen #define HCLGE_FILTER_TYPE_VF		0
3260ca821daSJian Shen #define HCLGE_FILTER_TYPE_PORT		1
3270ca821daSJian Shen #define HCLGE_FILTER_FE_EGRESS_V1_B	BIT(0)
3280ca821daSJian Shen #define HCLGE_FILTER_FE_NIC_INGRESS_B	BIT(0)
3290ca821daSJian Shen #define HCLGE_FILTER_FE_NIC_EGRESS_B	BIT(1)
3300ca821daSJian Shen #define HCLGE_FILTER_FE_ROCE_INGRESS_B	BIT(2)
3310ca821daSJian Shen #define HCLGE_FILTER_FE_ROCE_EGRESS_B	BIT(3)
3320ca821daSJian Shen #define HCLGE_FILTER_FE_EGRESS		(HCLGE_FILTER_FE_NIC_EGRESS_B \
3330ca821daSJian Shen 					| HCLGE_FILTER_FE_ROCE_EGRESS_B)
3340ca821daSJian Shen #define HCLGE_FILTER_FE_INGRESS		(HCLGE_FILTER_FE_NIC_INGRESS_B \
3350ca821daSJian Shen 					| HCLGE_FILTER_FE_ROCE_INGRESS_B)
3360ca821daSJian Shen 
3372ba30662SJian Shen enum hclge_vlan_fltr_cap {
3382ba30662SJian Shen 	HCLGE_VLAN_FLTR_DEF,
3392ba30662SJian Shen 	HCLGE_VLAN_FLTR_CAN_MDF,
3402ba30662SJian Shen };
341ed8fb4b2SJian Shen enum hclge_link_fail_code {
342ed8fb4b2SJian Shen 	HCLGE_LF_NORMAL,
343ed8fb4b2SJian Shen 	HCLGE_LF_REF_CLOCK_LOST,
344ed8fb4b2SJian Shen 	HCLGE_LF_XSFP_TX_DISABLE,
345ed8fb4b2SJian Shen 	HCLGE_LF_XSFP_ABSENT,
346ed8fb4b2SJian Shen };
347ed8fb4b2SJian Shen 
348fac24df7SJian Shen #define HCLGE_LINK_STATUS_DOWN 0
349fac24df7SJian Shen #define HCLGE_LINK_STATUS_UP   1
350fac24df7SJian Shen 
35146a3df9fSSalil #define HCLGE_PG_NUM		4
35246a3df9fSSalil #define HCLGE_SCH_MODE_SP	0
35346a3df9fSSalil #define HCLGE_SCH_MODE_DWRR	1
35446a3df9fSSalil struct hclge_pg_info {
35546a3df9fSSalil 	u8 pg_id;
35646a3df9fSSalil 	u8 pg_sch_mode;		/* 0: sp; 1: dwrr */
35746a3df9fSSalil 	u8 tc_bit_map;
35846a3df9fSSalil 	u32 bw_limit;
35946a3df9fSSalil 	u8 tc_dwrr[HNAE3_MAX_TC];
36046a3df9fSSalil };
36146a3df9fSSalil 
36246a3df9fSSalil struct hclge_tc_info {
36346a3df9fSSalil 	u8 tc_id;
36446a3df9fSSalil 	u8 tc_sch_mode;		/* 0: sp; 1: dwrr */
36546a3df9fSSalil 	u8 pgid;
36646a3df9fSSalil 	u32 bw_limit;
36746a3df9fSSalil };
36846a3df9fSSalil 
36946a3df9fSSalil struct hclge_cfg {
37046a3df9fSSalil 	u8 tc_num;
3712ba30662SJian Shen 	u8 vlan_fliter_cap;
37246a3df9fSSalil 	u16 tqp_desc_num;
37346a3df9fSSalil 	u16 rx_buf_len;
374f1c2e66dSGuojia Liao 	u16 vf_rss_size_max;
375f1c2e66dSGuojia Liao 	u16 pf_rss_size_max;
37646a3df9fSSalil 	u8 phy_addr;
37746a3df9fSSalil 	u8 media_type;
37846a3df9fSSalil 	u8 mac_addr[ETH_ALEN];
37946a3df9fSSalil 	u8 default_speed;
38046a3df9fSSalil 	u32 numa_node_map;
381ae6f010cSGuangbin Huang 	u16 speed_ability;
38239932473SJian Shen 	u16 umv_space;
38346a3df9fSSalil };
38446a3df9fSSalil 
38546a3df9fSSalil struct hclge_tm_info {
38646a3df9fSSalil 	u8 num_tc;
38746a3df9fSSalil 	u8 num_pg;      /* It must be 1 if vNET-Base schd */
38846a3df9fSSalil 	u8 pg_dwrr[HCLGE_PG_NUM];
389c5795c53SYunsheng Lin 	u8 prio_tc[HNAE3_MAX_USER_PRIO];
39046a3df9fSSalil 	struct hclge_pg_info pg_info[HCLGE_PG_NUM];
39146a3df9fSSalil 	struct hclge_tc_info tc_info[HNAE3_MAX_TC];
39246a3df9fSSalil 	enum hclge_fc_mode fc_mode;
39346a3df9fSSalil 	u8 hw_pfc_map; /* Allow for packet drop or not on this TC */
394d3ad430aSYunsheng Lin 	u8 pfc_en;	/* PFC enabled or not for user priority */
39546a3df9fSSalil };
39646a3df9fSSalil 
39746a3df9fSSalil struct hclge_comm_stats_str {
39846a3df9fSSalil 	char desc[ETH_GSTRING_LEN];
39946a3df9fSSalil 	unsigned long offset;
40046a3df9fSSalil };
40146a3df9fSSalil 
40246a3df9fSSalil /* mac stats ,opcode id: 0x0032 */
40346a3df9fSSalil struct hclge_mac_stats {
40446a3df9fSSalil 	u64 mac_tx_mac_pause_num;
40546a3df9fSSalil 	u64 mac_rx_mac_pause_num;
40646a3df9fSSalil 	u64 mac_tx_pfc_pri0_pkt_num;
40746a3df9fSSalil 	u64 mac_tx_pfc_pri1_pkt_num;
40846a3df9fSSalil 	u64 mac_tx_pfc_pri2_pkt_num;
40946a3df9fSSalil 	u64 mac_tx_pfc_pri3_pkt_num;
41046a3df9fSSalil 	u64 mac_tx_pfc_pri4_pkt_num;
41146a3df9fSSalil 	u64 mac_tx_pfc_pri5_pkt_num;
41246a3df9fSSalil 	u64 mac_tx_pfc_pri6_pkt_num;
41346a3df9fSSalil 	u64 mac_tx_pfc_pri7_pkt_num;
41446a3df9fSSalil 	u64 mac_rx_pfc_pri0_pkt_num;
41546a3df9fSSalil 	u64 mac_rx_pfc_pri1_pkt_num;
41646a3df9fSSalil 	u64 mac_rx_pfc_pri2_pkt_num;
41746a3df9fSSalil 	u64 mac_rx_pfc_pri3_pkt_num;
41846a3df9fSSalil 	u64 mac_rx_pfc_pri4_pkt_num;
41946a3df9fSSalil 	u64 mac_rx_pfc_pri5_pkt_num;
42046a3df9fSSalil 	u64 mac_rx_pfc_pri6_pkt_num;
42146a3df9fSSalil 	u64 mac_rx_pfc_pri7_pkt_num;
42246a3df9fSSalil 	u64 mac_tx_total_pkt_num;
42346a3df9fSSalil 	u64 mac_tx_total_oct_num;
42446a3df9fSSalil 	u64 mac_tx_good_pkt_num;
42546a3df9fSSalil 	u64 mac_tx_bad_pkt_num;
42646a3df9fSSalil 	u64 mac_tx_good_oct_num;
42746a3df9fSSalil 	u64 mac_tx_bad_oct_num;
42846a3df9fSSalil 	u64 mac_tx_uni_pkt_num;
42946a3df9fSSalil 	u64 mac_tx_multi_pkt_num;
43046a3df9fSSalil 	u64 mac_tx_broad_pkt_num;
43146a3df9fSSalil 	u64 mac_tx_undersize_pkt_num;
432200a88c6SJian Shen 	u64 mac_tx_oversize_pkt_num;
43346a3df9fSSalil 	u64 mac_tx_64_oct_pkt_num;
43446a3df9fSSalil 	u64 mac_tx_65_127_oct_pkt_num;
43546a3df9fSSalil 	u64 mac_tx_128_255_oct_pkt_num;
43646a3df9fSSalil 	u64 mac_tx_256_511_oct_pkt_num;
43746a3df9fSSalil 	u64 mac_tx_512_1023_oct_pkt_num;
43846a3df9fSSalil 	u64 mac_tx_1024_1518_oct_pkt_num;
43991f384f6SJian Shen 	u64 mac_tx_1519_2047_oct_pkt_num;
44091f384f6SJian Shen 	u64 mac_tx_2048_4095_oct_pkt_num;
44191f384f6SJian Shen 	u64 mac_tx_4096_8191_oct_pkt_num;
442dbecc779SXi Wang 	u64 rsv0;
443dbecc779SXi Wang 	u64 mac_tx_8192_9216_oct_pkt_num;
444dbecc779SXi Wang 	u64 mac_tx_9217_12287_oct_pkt_num;
44591f384f6SJian Shen 	u64 mac_tx_12288_16383_oct_pkt_num;
44691f384f6SJian Shen 	u64 mac_tx_1519_max_good_oct_pkt_num;
44791f384f6SJian Shen 	u64 mac_tx_1519_max_bad_oct_pkt_num;
44891f384f6SJian Shen 
44946a3df9fSSalil 	u64 mac_rx_total_pkt_num;
45046a3df9fSSalil 	u64 mac_rx_total_oct_num;
45146a3df9fSSalil 	u64 mac_rx_good_pkt_num;
45246a3df9fSSalil 	u64 mac_rx_bad_pkt_num;
45346a3df9fSSalil 	u64 mac_rx_good_oct_num;
45446a3df9fSSalil 	u64 mac_rx_bad_oct_num;
45546a3df9fSSalil 	u64 mac_rx_uni_pkt_num;
45646a3df9fSSalil 	u64 mac_rx_multi_pkt_num;
45746a3df9fSSalil 	u64 mac_rx_broad_pkt_num;
45846a3df9fSSalil 	u64 mac_rx_undersize_pkt_num;
459200a88c6SJian Shen 	u64 mac_rx_oversize_pkt_num;
46046a3df9fSSalil 	u64 mac_rx_64_oct_pkt_num;
46146a3df9fSSalil 	u64 mac_rx_65_127_oct_pkt_num;
46246a3df9fSSalil 	u64 mac_rx_128_255_oct_pkt_num;
46346a3df9fSSalil 	u64 mac_rx_256_511_oct_pkt_num;
46446a3df9fSSalil 	u64 mac_rx_512_1023_oct_pkt_num;
46546a3df9fSSalil 	u64 mac_rx_1024_1518_oct_pkt_num;
46691f384f6SJian Shen 	u64 mac_rx_1519_2047_oct_pkt_num;
46791f384f6SJian Shen 	u64 mac_rx_2048_4095_oct_pkt_num;
46891f384f6SJian Shen 	u64 mac_rx_4096_8191_oct_pkt_num;
469dbecc779SXi Wang 	u64 rsv1;
470dbecc779SXi Wang 	u64 mac_rx_8192_9216_oct_pkt_num;
471dbecc779SXi Wang 	u64 mac_rx_9217_12287_oct_pkt_num;
47291f384f6SJian Shen 	u64 mac_rx_12288_16383_oct_pkt_num;
47391f384f6SJian Shen 	u64 mac_rx_1519_max_good_oct_pkt_num;
47491f384f6SJian Shen 	u64 mac_rx_1519_max_bad_oct_pkt_num;
47546a3df9fSSalil 
476a6c51c26SJian Shen 	u64 mac_tx_fragment_pkt_num;
477a6c51c26SJian Shen 	u64 mac_tx_undermin_pkt_num;
478a6c51c26SJian Shen 	u64 mac_tx_jabber_pkt_num;
479a6c51c26SJian Shen 	u64 mac_tx_err_all_pkt_num;
480a6c51c26SJian Shen 	u64 mac_tx_from_app_good_pkt_num;
481a6c51c26SJian Shen 	u64 mac_tx_from_app_bad_pkt_num;
482a6c51c26SJian Shen 	u64 mac_rx_fragment_pkt_num;
483a6c51c26SJian Shen 	u64 mac_rx_undermin_pkt_num;
484a6c51c26SJian Shen 	u64 mac_rx_jabber_pkt_num;
485a6c51c26SJian Shen 	u64 mac_rx_fcs_err_pkt_num;
486a6c51c26SJian Shen 	u64 mac_rx_send_app_good_pkt_num;
487a6c51c26SJian Shen 	u64 mac_rx_send_app_bad_pkt_num;
488d174ea75Sliuzhongzhu 	u64 mac_tx_pfc_pause_pkt_num;
489d174ea75Sliuzhongzhu 	u64 mac_rx_pfc_pause_pkt_num;
490d174ea75Sliuzhongzhu 	u64 mac_tx_ctrl_pkt_num;
491d174ea75Sliuzhongzhu 	u64 mac_rx_ctrl_pkt_num;
49246a3df9fSSalil };
49346a3df9fSSalil 
4941c6dfe6fSYunsheng Lin #define HCLGE_STATS_TIMER_INTERVAL	300UL
49546a3df9fSSalil 
4965f6ea83fSPeng Li struct hclge_vlan_type_cfg {
4975f6ea83fSPeng Li 	u16 rx_ot_fst_vlan_type;
4985f6ea83fSPeng Li 	u16 rx_ot_sec_vlan_type;
4995f6ea83fSPeng Li 	u16 rx_in_fst_vlan_type;
5005f6ea83fSPeng Li 	u16 rx_in_sec_vlan_type;
5015f6ea83fSPeng Li 	u16 tx_ot_vlan_type;
5025f6ea83fSPeng Li 	u16 tx_in_vlan_type;
5035f6ea83fSPeng Li };
5045f6ea83fSPeng Li 
505d695964dSJian Shen enum HCLGE_FD_MODE {
506d695964dSJian Shen 	HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1,
507d695964dSJian Shen 	HCLGE_FD_MODE_DEPTH_1K_WIDTH_400B_STAGE_2,
508d695964dSJian Shen 	HCLGE_FD_MODE_DEPTH_4K_WIDTH_200B_STAGE_1,
509d695964dSJian Shen 	HCLGE_FD_MODE_DEPTH_2K_WIDTH_200B_STAGE_2,
510d695964dSJian Shen };
511d695964dSJian Shen 
512d695964dSJian Shen enum HCLGE_FD_KEY_TYPE {
513d695964dSJian Shen 	HCLGE_FD_KEY_BASE_ON_PTYPE,
514d695964dSJian Shen 	HCLGE_FD_KEY_BASE_ON_TUPLE,
515d695964dSJian Shen };
516d695964dSJian Shen 
517d695964dSJian Shen enum HCLGE_FD_STAGE {
518d695964dSJian Shen 	HCLGE_FD_STAGE_1,
519d695964dSJian Shen 	HCLGE_FD_STAGE_2,
520e91e388cSJian Shen 	MAX_STAGE_NUM,
521d695964dSJian Shen };
522d695964dSJian Shen 
523d695964dSJian Shen /* OUTER_XXX indicates tuples in tunnel header of tunnel packet
524d695964dSJian Shen  * INNER_XXX indicate tuples in tunneled header of tunnel packet or
525d695964dSJian Shen  *           tuples of non-tunnel packet
526d695964dSJian Shen  */
527d695964dSJian Shen enum HCLGE_FD_TUPLE {
528d695964dSJian Shen 	OUTER_DST_MAC,
529d695964dSJian Shen 	OUTER_SRC_MAC,
530d695964dSJian Shen 	OUTER_VLAN_TAG_FST,
531d695964dSJian Shen 	OUTER_VLAN_TAG_SEC,
532d695964dSJian Shen 	OUTER_ETH_TYPE,
533d695964dSJian Shen 	OUTER_L2_RSV,
534d695964dSJian Shen 	OUTER_IP_TOS,
535d695964dSJian Shen 	OUTER_IP_PROTO,
536d695964dSJian Shen 	OUTER_SRC_IP,
537d695964dSJian Shen 	OUTER_DST_IP,
538d695964dSJian Shen 	OUTER_L3_RSV,
539d695964dSJian Shen 	OUTER_SRC_PORT,
540d695964dSJian Shen 	OUTER_DST_PORT,
541d695964dSJian Shen 	OUTER_L4_RSV,
542d695964dSJian Shen 	OUTER_TUN_VNI,
543d695964dSJian Shen 	OUTER_TUN_FLOW_ID,
544d695964dSJian Shen 	INNER_DST_MAC,
545d695964dSJian Shen 	INNER_SRC_MAC,
546d695964dSJian Shen 	INNER_VLAN_TAG_FST,
547d695964dSJian Shen 	INNER_VLAN_TAG_SEC,
548d695964dSJian Shen 	INNER_ETH_TYPE,
549d695964dSJian Shen 	INNER_L2_RSV,
550d695964dSJian Shen 	INNER_IP_TOS,
551d695964dSJian Shen 	INNER_IP_PROTO,
552d695964dSJian Shen 	INNER_SRC_IP,
553d695964dSJian Shen 	INNER_DST_IP,
554d695964dSJian Shen 	INNER_L3_RSV,
555d695964dSJian Shen 	INNER_SRC_PORT,
556d695964dSJian Shen 	INNER_DST_PORT,
557d695964dSJian Shen 	INNER_L4_RSV,
558d695964dSJian Shen 	MAX_TUPLE,
559d695964dSJian Shen };
560d695964dSJian Shen 
56167b0e142SJian Shen #define HCLGE_FD_TUPLE_USER_DEF_TUPLES \
56267b0e142SJian Shen 	(BIT(INNER_L2_RSV) | BIT(INNER_L3_RSV) | BIT(INNER_L4_RSV))
56367b0e142SJian Shen 
564d695964dSJian Shen enum HCLGE_FD_META_DATA {
565d695964dSJian Shen 	PACKET_TYPE_ID,
566d695964dSJian Shen 	IP_FRAGEMENT,
567d695964dSJian Shen 	ROCE_TYPE,
568d695964dSJian Shen 	NEXT_KEY,
569d695964dSJian Shen 	VLAN_NUMBER,
570d695964dSJian Shen 	SRC_VPORT,
571d695964dSJian Shen 	DST_VPORT,
572d695964dSJian Shen 	TUNNEL_PACKET,
573d695964dSJian Shen 	MAX_META_DATA,
574d695964dSJian Shen };
575d695964dSJian Shen 
576fb72699dSJian Shen enum HCLGE_FD_KEY_OPT {
577fb72699dSJian Shen 	KEY_OPT_U8,
578fb72699dSJian Shen 	KEY_OPT_LE16,
579fb72699dSJian Shen 	KEY_OPT_LE32,
580fb72699dSJian Shen 	KEY_OPT_MAC,
581fb72699dSJian Shen 	KEY_OPT_IP,
582fb72699dSJian Shen 	KEY_OPT_VNI,
583fb72699dSJian Shen };
584fb72699dSJian Shen 
585d695964dSJian Shen struct key_info {
586d695964dSJian Shen 	u8 key_type;
587e91e388cSJian Shen 	u8 key_length; /* use bit as unit */
588fb72699dSJian Shen 	enum HCLGE_FD_KEY_OPT key_opt;
589fb72699dSJian Shen 	int offset;
590fb72699dSJian Shen 	int moffset;
591d695964dSJian Shen };
592d695964dSJian Shen 
593d695964dSJian Shen #define MAX_KEY_LENGTH	400
594d695964dSJian Shen #define MAX_KEY_DWORDS	DIV_ROUND_UP(MAX_KEY_LENGTH / 8, 4)
595d695964dSJian Shen #define MAX_KEY_BYTES	(MAX_KEY_DWORDS * 4)
596d695964dSJian Shen #define MAX_META_DATA_LENGTH	32
597d695964dSJian Shen 
59867b0e142SJian Shen #define HCLGE_FD_MAX_USER_DEF_OFFSET	9000
59967b0e142SJian Shen #define HCLGE_FD_USER_DEF_DATA		GENMASK(15, 0)
60067b0e142SJian Shen #define HCLGE_FD_USER_DEF_OFFSET	GENMASK(15, 0)
60167b0e142SJian Shen #define HCLGE_FD_USER_DEF_OFFSET_UNMASK	GENMASK(15, 0)
60267b0e142SJian Shen 
60344122887SJian Shen /* assigned by firmware, the real filter number for each pf may be less */
60444122887SJian Shen #define MAX_FD_FILTER_NUM	4096
6051c6dfe6fSYunsheng Lin #define HCLGE_ARFS_EXPIRE_INTERVAL	5UL
60644122887SJian Shen 
60744122887SJian Shen enum HCLGE_FD_ACTIVE_RULE_TYPE {
60844122887SJian Shen 	HCLGE_FD_RULE_NONE,
60944122887SJian Shen 	HCLGE_FD_ARFS_ACTIVE,
61044122887SJian Shen 	HCLGE_FD_EP_ACTIVE,
6110205ec04SJian Shen 	HCLGE_FD_TC_FLOWER_ACTIVE,
61244122887SJian Shen };
61344122887SJian Shen 
614d695964dSJian Shen enum HCLGE_FD_PACKET_TYPE {
615d695964dSJian Shen 	NIC_PACKET,
616d695964dSJian Shen 	ROCE_PACKET,
617d695964dSJian Shen };
618d695964dSJian Shen 
61911732868SJian Shen enum HCLGE_FD_ACTION {
6200f993fe2SJian Shen 	HCLGE_FD_ACTION_SELECT_QUEUE,
62111732868SJian Shen 	HCLGE_FD_ACTION_DROP_PACKET,
6220f993fe2SJian Shen 	HCLGE_FD_ACTION_SELECT_TC,
62311732868SJian Shen };
62411732868SJian Shen 
625fc4243b8SJian Shen enum HCLGE_FD_NODE_STATE {
626fc4243b8SJian Shen 	HCLGE_FD_TO_ADD,
627fc4243b8SJian Shen 	HCLGE_FD_TO_DEL,
628fc4243b8SJian Shen 	HCLGE_FD_ACTIVE,
629fc4243b8SJian Shen 	HCLGE_FD_DELETED,
630fc4243b8SJian Shen };
631fc4243b8SJian Shen 
63267b0e142SJian Shen enum HCLGE_FD_USER_DEF_LAYER {
63367b0e142SJian Shen 	HCLGE_FD_USER_DEF_NONE,
63467b0e142SJian Shen 	HCLGE_FD_USER_DEF_L2,
63567b0e142SJian Shen 	HCLGE_FD_USER_DEF_L3,
63667b0e142SJian Shen 	HCLGE_FD_USER_DEF_L4,
63767b0e142SJian Shen };
63867b0e142SJian Shen 
63967b0e142SJian Shen #define HCLGE_FD_USER_DEF_LAYER_NUM 3
64067b0e142SJian Shen struct hclge_fd_user_def_cfg {
64167b0e142SJian Shen 	u16 ref_cnt;
64267b0e142SJian Shen 	u16 offset;
64367b0e142SJian Shen };
64467b0e142SJian Shen 
64567b0e142SJian Shen struct hclge_fd_user_def_info {
64667b0e142SJian Shen 	enum HCLGE_FD_USER_DEF_LAYER layer;
64767b0e142SJian Shen 	u16 data;
64867b0e142SJian Shen 	u16 data_mask;
64967b0e142SJian Shen 	u16 offset;
65067b0e142SJian Shen };
65167b0e142SJian Shen 
652d695964dSJian Shen struct hclge_fd_key_cfg {
653d695964dSJian Shen 	u8 key_sel;
654d695964dSJian Shen 	u8 inner_sipv6_word_en;
655d695964dSJian Shen 	u8 inner_dipv6_word_en;
656d695964dSJian Shen 	u8 outer_sipv6_word_en;
657d695964dSJian Shen 	u8 outer_dipv6_word_en;
658d695964dSJian Shen 	u32 tuple_active;
659d695964dSJian Shen 	u32 meta_data_active;
660d695964dSJian Shen };
661d695964dSJian Shen 
662d695964dSJian Shen struct hclge_fd_cfg {
663d695964dSJian Shen 	u8 fd_mode;
664e91e388cSJian Shen 	u16 max_key_length; /* use bit as unit */
665e91e388cSJian Shen 	u32 rule_num[MAX_STAGE_NUM]; /* rule entry number */
666e91e388cSJian Shen 	u16 cnt_num[MAX_STAGE_NUM]; /* rule hit counter number */
667e91e388cSJian Shen 	struct hclge_fd_key_cfg key_cfg[MAX_STAGE_NUM];
66867b0e142SJian Shen 	struct hclge_fd_user_def_cfg user_def_cfg[HCLGE_FD_USER_DEF_LAYER_NUM];
669d695964dSJian Shen };
670d695964dSJian Shen 
671e91e388cSJian Shen #define IPV4_INDEX	3
672e91e388cSJian Shen #define IPV6_SIZE	4
67311732868SJian Shen struct hclge_fd_rule_tuples {
674e91e388cSJian Shen 	u8 src_mac[ETH_ALEN];
675e91e388cSJian Shen 	u8 dst_mac[ETH_ALEN];
676e91e388cSJian Shen 	/* Be compatible for ip address of both ipv4 and ipv6.
677e91e388cSJian Shen 	 * For ipv4 address, we store it in src/dst_ip[3].
678e91e388cSJian Shen 	 */
679e91e388cSJian Shen 	u32 src_ip[IPV6_SIZE];
680e91e388cSJian Shen 	u32 dst_ip[IPV6_SIZE];
68111732868SJian Shen 	u16 src_port;
68211732868SJian Shen 	u16 dst_port;
68311732868SJian Shen 	u16 vlan_tag1;
68411732868SJian Shen 	u16 ether_proto;
68567b0e142SJian Shen 	u16 l2_user_def;
68667b0e142SJian Shen 	u16 l3_user_def;
68767b0e142SJian Shen 	u32 l4_user_def;
68811732868SJian Shen 	u8 ip_tos;
68911732868SJian Shen 	u8 ip_proto;
69011732868SJian Shen };
69111732868SJian Shen 
69211732868SJian Shen struct hclge_fd_rule {
69311732868SJian Shen 	struct hlist_node rule_node;
69411732868SJian Shen 	struct hclge_fd_rule_tuples tuples;
69511732868SJian Shen 	struct hclge_fd_rule_tuples tuples_mask;
69611732868SJian Shen 	u32 unused_tuple;
69711732868SJian Shen 	u32 flow_type;
6980205ec04SJian Shen 	union {
6990205ec04SJian Shen 		struct {
7000205ec04SJian Shen 			unsigned long cookie;
7010f993fe2SJian Shen 			u8 tc;
7020205ec04SJian Shen 		} cls_flower;
7030205ec04SJian Shen 		struct {
704d93ed94fSJian Shen 			u16 flow_id; /* only used for arfs */
7050205ec04SJian Shen 		} arfs;
70667b0e142SJian Shen 		struct {
70767b0e142SJian Shen 			struct hclge_fd_user_def_info user_def;
70867b0e142SJian Shen 		} ep;
7090205ec04SJian Shen 	};
7100205ec04SJian Shen 	u16 queue_id;
7110205ec04SJian Shen 	u16 vf_id;
7120205ec04SJian Shen 	u16 location;
71344122887SJian Shen 	enum HCLGE_FD_ACTIVE_RULE_TYPE rule_type;
714fc4243b8SJian Shen 	enum HCLGE_FD_NODE_STATE state;
7150205ec04SJian Shen 	u8 action;
71611732868SJian Shen };
71711732868SJian Shen 
71811732868SJian Shen struct hclge_fd_ad_data {
71911732868SJian Shen 	u16 ad_id;
72011732868SJian Shen 	u8 drop_packet;
72111732868SJian Shen 	u8 forward_to_direct_queue;
72211732868SJian Shen 	u16 queue_id;
72311732868SJian Shen 	u8 use_counter;
72411732868SJian Shen 	u8 counter_id;
72511732868SJian Shen 	u8 use_next_stage;
72611732868SJian Shen 	u8 write_rule_id_to_bd;
72711732868SJian Shen 	u8 next_input_key;
72811732868SJian Shen 	u16 rule_id;
7290f993fe2SJian Shen 	u16 tc_size;
7300f993fe2SJian Shen 	u8 override_tc;
73111732868SJian Shen };
73211732868SJian Shen 
733ee4bcd3bSJian Shen enum HCLGE_MAC_NODE_STATE {
734ee4bcd3bSJian Shen 	HCLGE_MAC_TO_ADD,
735ee4bcd3bSJian Shen 	HCLGE_MAC_TO_DEL,
736ee4bcd3bSJian Shen 	HCLGE_MAC_ACTIVE
737ee4bcd3bSJian Shen };
738ee4bcd3bSJian Shen 
739ee4bcd3bSJian Shen struct hclge_mac_node {
7406dd86902Sliuzhongzhu 	struct list_head node;
741ee4bcd3bSJian Shen 	enum HCLGE_MAC_NODE_STATE state;
7426dd86902Sliuzhongzhu 	u8 mac_addr[ETH_ALEN];
7436dd86902Sliuzhongzhu };
7446dd86902Sliuzhongzhu 
7456dd86902Sliuzhongzhu enum HCLGE_MAC_ADDR_TYPE {
7466dd86902Sliuzhongzhu 	HCLGE_MAC_ADDR_UC,
7476dd86902Sliuzhongzhu 	HCLGE_MAC_ADDR_MC
7486dd86902Sliuzhongzhu };
7496dd86902Sliuzhongzhu 
750c6075b19Sliuzhongzhu struct hclge_vport_vlan_cfg {
751c6075b19Sliuzhongzhu 	struct list_head node;
752c6075b19Sliuzhongzhu 	int hd_tbl_status;
753c6075b19Sliuzhongzhu 	u16 vlan_id;
754c6075b19Sliuzhongzhu };
755c6075b19Sliuzhongzhu 
756f02eb82dSHuazhong Tan struct hclge_rst_stats {
757f02eb82dSHuazhong Tan 	u32 reset_done_cnt;	/* the number of reset has completed */
758f02eb82dSHuazhong Tan 	u32 hw_reset_done_cnt;	/* the number of HW reset has completed */
759f02eb82dSHuazhong Tan 	u32 pf_rst_cnt;		/* the number of PF reset */
760f02eb82dSHuazhong Tan 	u32 flr_rst_cnt;	/* the number of FLR */
761f02eb82dSHuazhong Tan 	u32 global_rst_cnt;	/* the number of GLOBAL */
762f02eb82dSHuazhong Tan 	u32 imp_rst_cnt;	/* the number of IMP reset */
763f02eb82dSHuazhong Tan 	u32 reset_cnt;		/* the number of reset */
7640ecf1f7bSHuazhong Tan 	u32 reset_fail_cnt;	/* the number of reset fail */
765f02eb82dSHuazhong Tan };
766f02eb82dSHuazhong Tan 
767a6345787SWeihang Li /* time and register status when mac tunnel interruption occur */
768a6345787SWeihang Li struct hclge_mac_tnl_stats {
769a6345787SWeihang Li 	u64 time;
770a6345787SWeihang Li 	u32 status;
771a6345787SWeihang Li };
772a6345787SWeihang Li 
773b37ce587SYufeng Mo #define HCLGE_RESET_INTERVAL	(10 * HZ)
7747cf9c069SHuazhong Tan #define HCLGE_WAIT_RESET_DONE	100
775b37ce587SYufeng Mo 
776ebaf1908SWeihang Li #pragma pack(1)
777ebaf1908SWeihang Li struct hclge_vf_vlan_cfg {
778ebaf1908SWeihang Li 	u8 mbx_cmd;
779ebaf1908SWeihang Li 	u8 subcode;
780060e9accSJian Shen 	union {
781060e9accSJian Shen 		struct {
782ebaf1908SWeihang Li 			u8 is_kill;
783ebaf1908SWeihang Li 			u16 vlan;
784ebaf1908SWeihang Li 			u16 proto;
785ebaf1908SWeihang Li 		};
786060e9accSJian Shen 		u8 enable;
787060e9accSJian Shen 	};
788060e9accSJian Shen };
789ebaf1908SWeihang Li 
790ebaf1908SWeihang Li #pragma pack()
791ebaf1908SWeihang Li 
79211732868SJian Shen /* For each bit of TCAM entry, it uses a pair of 'x' and
79311732868SJian Shen  * 'y' to indicate which value to match, like below:
79411732868SJian Shen  * ----------------------------------
79511732868SJian Shen  * | bit x | bit y |  search value  |
79611732868SJian Shen  * ----------------------------------
79711732868SJian Shen  * |   0   |   0   |   always hit   |
79811732868SJian Shen  * ----------------------------------
79911732868SJian Shen  * |   1   |   0   |   match '0'    |
80011732868SJian Shen  * ----------------------------------
80111732868SJian Shen  * |   0   |   1   |   match '1'    |
80211732868SJian Shen  * ----------------------------------
80311732868SJian Shen  * |   1   |   1   |   invalid      |
80411732868SJian Shen  * ----------------------------------
80511732868SJian Shen  * Then for input key(k) and mask(v), we can calculate the value by
80611732868SJian Shen  * the formulae:
80711732868SJian Shen  *	x = (~k) & v
80811732868SJian Shen  *	y = (k ^ ~v) & k
80911732868SJian Shen  */
8109393eb50SYufeng Mo #define calc_x(x, k, v) (x = ~(k) & (v))
81111732868SJian Shen #define calc_y(y, k, v) \
81211732868SJian Shen 	do { \
81311732868SJian Shen 		const typeof(k) _k_ = (k); \
81411732868SJian Shen 		const typeof(v) _v_ = (v); \
81511732868SJian Shen 		(y) = (_k_ ^ ~_v_) & (_k_); \
81611732868SJian Shen 	} while (0)
81711732868SJian Shen 
818a6345787SWeihang Li #define HCLGE_MAC_TNL_LOG_SIZE	8
819dc8131d8SYunsheng Lin #define HCLGE_VPORT_NUM 256
82046a3df9fSSalil struct hclge_dev {
82146a3df9fSSalil 	struct pci_dev *pdev;
82246a3df9fSSalil 	struct hnae3_ae_dev *ae_dev;
82346a3df9fSSalil 	struct hclge_hw hw;
824466b0c00SLipeng 	struct hclge_misc_vector misc_vector;
8251c6dfe6fSYunsheng Lin 	struct hclge_mac_stats mac_stats;
82646a3df9fSSalil 	unsigned long state;
8276b9a97eeSHuazhong Tan 	unsigned long flr_state;
8280742ed7cSHuazhong Tan 	unsigned long last_reset_time;
82946a3df9fSSalil 
8304ed340abSLipeng 	enum hnae3_reset_type reset_type;
8310742ed7cSHuazhong Tan 	enum hnae3_reset_type reset_level;
832720bd583SHuazhong Tan 	unsigned long default_reset_request;
833cb1b9f77SSalil Mehta 	unsigned long reset_request;	/* reset has been requested */
834ca1d7669SSalil Mehta 	unsigned long reset_pending;	/* client rst is pending to be served */
835f02eb82dSHuazhong Tan 	struct hclge_rst_stats rst_stats;
8368627bdedSHuazhong Tan 	struct semaphore reset_sem;	/* protect reset process */
83746a3df9fSSalil 	u32 fw_version;
83846a3df9fSSalil 	u16 num_tqps;			/* Num task queue pairs of this PF */
83946a3df9fSSalil 	u16 num_req_vfs;		/* Num VFs requested for this PF */
84046a3df9fSSalil 
841fdace1bcSJian Shen 	u16 base_tqp_pid;	/* Base task tqp physical id of this PF */
84246a3df9fSSalil 	u16 alloc_rss_size;		/* Allocated RSS task queue */
843f1c2e66dSGuojia Liao 	u16 vf_rss_size_max;		/* HW defined VF max RSS task queue */
844f1c2e66dSGuojia Liao 	u16 pf_rss_size_max;		/* HW defined PF max RSS task queue */
84546a3df9fSSalil 
846fdace1bcSJian Shen 	u16 fdir_pf_filter_count; /* Num of guaranteed filters for this PF */
84746a3df9fSSalil 	u16 num_alloc_vport;		/* Num vports this driver supports */
84846a3df9fSSalil 	u32 numa_node_mask;
84946a3df9fSSalil 	u16 rx_buf_len;
850c0425944SPeng Li 	u16 num_tx_desc;		/* desc num of per tx queue */
851c0425944SPeng Li 	u16 num_rx_desc;		/* desc num of per rx queue */
85246a3df9fSSalil 	u8 hw_tc_map;
85346a3df9fSSalil 	enum hclge_fc_mode fc_mode_last_time;
8545d497936SPeng Li 	u8 support_sfp_query;
85546a3df9fSSalil 
85646a3df9fSSalil #define HCLGE_FLAG_TC_BASE_SCH_MODE		1
85746a3df9fSSalil #define HCLGE_FLAG_VNET_BASE_SCH_MODE		2
85846a3df9fSSalil 	u8 tx_sch_mode;
859cacde272SYunsheng Lin 	u8 tc_max;
860cacde272SYunsheng Lin 	u8 pfc_max;
86146a3df9fSSalil 
86246a3df9fSSalil 	u8 default_up;
863cacde272SYunsheng Lin 	u8 dcbx_cap;
86446a3df9fSSalil 	struct hclge_tm_info tm_info;
86546a3df9fSSalil 
86646a3df9fSSalil 	u16 num_msi;
86746a3df9fSSalil 	u16 num_msi_left;
86846a3df9fSSalil 	u16 num_msi_used;
86946a3df9fSSalil 	u32 base_msi_vector;
87046a3df9fSSalil 	u16 *vector_status;
871887c3820SSalil Mehta 	int *vector_irq;
872580a05f9SYonglong Liu 	u16 num_nic_msi;	/* Num of nic vectors for this PF */
873887c3820SSalil Mehta 	u16 num_roce_msi;	/* Num of roce vectors for this PF */
874887c3820SSalil Mehta 	int roce_base_vector;
87546a3df9fSSalil 
87646a3df9fSSalil 	unsigned long service_timer_period;
87746a3df9fSSalil 	unsigned long service_timer_previous;
87865e41e7eSHuazhong Tan 	struct timer_list reset_timer;
8797be1b9f3SYunsheng Lin 	struct delayed_work service_task;
88046a3df9fSSalil 
88146a3df9fSSalil 	bool cur_promisc;
88246a3df9fSSalil 	int num_alloc_vfs;	/* Actual number of VFs allocated */
88346a3df9fSSalil 
88446a3df9fSSalil 	struct hclge_tqp *htqp;
88546a3df9fSSalil 	struct hclge_vport *vport;
88646a3df9fSSalil 
88746a3df9fSSalil 	struct dentry *hclge_dbgfs;
88846a3df9fSSalil 
88946a3df9fSSalil 	struct hnae3_client *nic_client;
89046a3df9fSSalil 	struct hnae3_client *roce_client;
89146a3df9fSSalil 
892887c3820SSalil Mehta #define HCLGE_FLAG_MAIN			BIT(0)
893887c3820SSalil Mehta #define HCLGE_FLAG_DCB_CAPABLE		BIT(1)
894887c3820SSalil Mehta #define HCLGE_FLAG_DCB_ENABLE		BIT(2)
895887c3820SSalil Mehta #define HCLGE_FLAG_MQPRIO_ENABLE	BIT(3)
89646a3df9fSSalil 	u32 flag;
89746a3df9fSSalil 
89846a3df9fSSalil 	u32 pkt_buf_size; /* Total pf buf size for tx/rx */
899368686beSYunsheng Lin 	u32 tx_buf_size; /* Tx buffer size for each TC */
900368686beSYunsheng Lin 	u32 dv_buf_size; /* Dv buffer size for each TC */
901368686beSYunsheng Lin 
90246a3df9fSSalil 	u32 mps; /* Max packet size */
903818f1675SYunsheng Lin 	/* vport_lock protect resource shared by vports */
904818f1675SYunsheng Lin 	struct mutex vport_lock;
90546a3df9fSSalil 
9065f6ea83fSPeng Li 	struct hclge_vlan_type_cfg vlan_type_cfg;
907716aaac1SJian Shen 
908dc8131d8SYunsheng Lin 	unsigned long vlan_table[VLAN_N_VID][BITS_TO_LONGS(HCLGE_VPORT_NUM)];
90981a9255eSJian Shen 	unsigned long vf_vlan_full[BITS_TO_LONGS(HCLGE_VPORT_NUM)];
910d695964dSJian Shen 
911ee4bcd3bSJian Shen 	unsigned long vport_config_block[BITS_TO_LONGS(HCLGE_VPORT_NUM)];
912ee4bcd3bSJian Shen 
913d695964dSJian Shen 	struct hclge_fd_cfg fd_cfg;
914dd74f815SJian Shen 	struct hlist_head fd_rule_list;
91544122887SJian Shen 	spinlock_t fd_rule_lock; /* protect fd_rule_list and fd_bmap */
916dd74f815SJian Shen 	u16 hclge_fd_rule_num;
9171c6dfe6fSYunsheng Lin 	unsigned long serv_processed_cnt;
9181c6dfe6fSYunsheng Lin 	unsigned long last_serv_processed;
91944122887SJian Shen 	unsigned long fd_bmap[BITS_TO_LONGS(MAX_FD_FILTER_NUM)];
92044122887SJian Shen 	enum HCLGE_FD_ACTIVE_RULE_TYPE fd_active_type;
9219abeb7d8SJian Shen 	u8 fd_en;
92239932473SJian Shen 
92339932473SJian Shen 	u16 wanted_umv_size;
92439932473SJian Shen 	/* max available unicast mac vlan space */
92539932473SJian Shen 	u16 max_umv_size;
92639932473SJian Shen 	/* private unicast mac vlan space, it's same for PF and its VFs */
92739932473SJian Shen 	u16 priv_umv_size;
92839932473SJian Shen 	/* unicast mac vlan space shared by PF and its VFs */
92939932473SJian Shen 	u16 share_umv_size;
9306dd86902Sliuzhongzhu 
931a6345787SWeihang Li 	DECLARE_KFIFO(mac_tnl_log, struct hclge_mac_tnl_stats,
932a6345787SWeihang Li 		      HCLGE_MAC_TNL_LOG_SIZE);
93308125454SYunsheng Lin 
93408125454SYunsheng Lin 	/* affinity mask and notify for misc interrupt */
93508125454SYunsheng Lin 	cpumask_t affinity_mask;
93608125454SYunsheng Lin 	struct irq_affinity_notify affinity_notify;
9375f6ea83fSPeng Li };
9385f6ea83fSPeng Li 
9395f6ea83fSPeng Li /* VPort level vlan tag configuration for TX direction */
9405f6ea83fSPeng Li struct hclge_tx_vtag_cfg {
941dcb35cceSPeng Li 	bool accept_tag1;	/* Whether accept tag1 packet from host */
942dcb35cceSPeng Li 	bool accept_untag1;	/* Whether accept untag1 packet from host */
943dcb35cceSPeng Li 	bool accept_tag2;
944dcb35cceSPeng Li 	bool accept_untag2;
9455f6ea83fSPeng Li 	bool insert_tag1_en;	/* Whether insert inner vlan tag */
9465f6ea83fSPeng Li 	bool insert_tag2_en;	/* Whether insert outer vlan tag */
9475f6ea83fSPeng Li 	u16  default_tag1;	/* The default inner vlan tag to insert */
9485f6ea83fSPeng Li 	u16  default_tag2;	/* The default outer vlan tag to insert */
949592b0179SGuojia Liao 	bool tag_shift_mode_en;
9505f6ea83fSPeng Li };
9515f6ea83fSPeng Li 
9525f6ea83fSPeng Li /* VPort level vlan tag configuration for RX direction */
9535f6ea83fSPeng Li struct hclge_rx_vtag_cfg {
954592b0179SGuojia Liao 	bool rx_vlan_offload_en; /* Whether enable rx vlan offload */
955592b0179SGuojia Liao 	bool strip_tag1_en;	 /* Whether strip inner vlan tag */
956592b0179SGuojia Liao 	bool strip_tag2_en;	 /* Whether strip outer vlan tag */
957592b0179SGuojia Liao 	bool vlan1_vlan_prionly; /* Inner vlan tag up to descriptor enable */
958592b0179SGuojia Liao 	bool vlan2_vlan_prionly; /* Outer vlan tag up to descriptor enable */
959592b0179SGuojia Liao 	bool strip_tag1_discard_en; /* Inner vlan tag discard for BD enable */
960592b0179SGuojia Liao 	bool strip_tag2_discard_en; /* Outer vlan tag discard for BD enable */
96146a3df9fSSalil };
96246a3df9fSSalil 
9636f2af429SYunsheng Lin struct hclge_rss_tuple_cfg {
9646f2af429SYunsheng Lin 	u8 ipv4_tcp_en;
9656f2af429SYunsheng Lin 	u8 ipv4_udp_en;
9666f2af429SYunsheng Lin 	u8 ipv4_sctp_en;
9676f2af429SYunsheng Lin 	u8 ipv4_fragment_en;
9686f2af429SYunsheng Lin 	u8 ipv6_tcp_en;
9696f2af429SYunsheng Lin 	u8 ipv6_udp_en;
9706f2af429SYunsheng Lin 	u8 ipv6_sctp_en;
9716f2af429SYunsheng Lin 	u8 ipv6_fragment_en;
9726f2af429SYunsheng Lin };
9736f2af429SYunsheng Lin 
974a6d818e3SYunsheng Lin enum HCLGE_VPORT_STATE {
975a6d818e3SYunsheng Lin 	HCLGE_VPORT_STATE_ALIVE,
976ee4bcd3bSJian Shen 	HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
9771e6e7610SJian Shen 	HCLGE_VPORT_STATE_PROMISC_CHANGE,
9782ba30662SJian Shen 	HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
979a6d818e3SYunsheng Lin 	HCLGE_VPORT_STATE_MAX
980a6d818e3SYunsheng Lin };
981a6d818e3SYunsheng Lin 
982741fca16SJian Shen struct hclge_vlan_info {
983741fca16SJian Shen 	u16 vlan_proto; /* so far support 802.1Q only */
984741fca16SJian Shen 	u16 qos;
985741fca16SJian Shen 	u16 vlan_tag;
986741fca16SJian Shen };
987741fca16SJian Shen 
988741fca16SJian Shen struct hclge_port_base_vlan_config {
989741fca16SJian Shen 	u16 state;
990741fca16SJian Shen 	struct hclge_vlan_info vlan_info;
991741fca16SJian Shen };
992741fca16SJian Shen 
9936430f744SYufeng Mo struct hclge_vf_info {
9946430f744SYufeng Mo 	int link_state;
9956430f744SYufeng Mo 	u8 mac[ETH_ALEN];
99622044f95SJian Shen 	u32 spoofchk;
997ee9e4424SYonglong Liu 	u32 max_tx_rate;
998e196ec75SJian Shen 	u32 trusted;
9991e6e7610SJian Shen 	u8 request_uc_en;
10001e6e7610SJian Shen 	u8 request_mc_en;
10011e6e7610SJian Shen 	u8 request_bc_en;
10026430f744SYufeng Mo };
10036430f744SYufeng Mo 
100446a3df9fSSalil struct hclge_vport {
100546a3df9fSSalil 	u16 alloc_tqps;	/* Allocated Tx/Rx queues */
100646a3df9fSSalil 
100746a3df9fSSalil 	u8  rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */
100846a3df9fSSalil 	/* User configured lookup table entries */
100987ce161eSGuangbin Huang 	u16 *rss_indirection_tbl;
101089523cfaSYunsheng Lin 	int rss_algo;		/* User configured hash algorithm */
10116f2af429SYunsheng Lin 	/* User configured rss tuple sets */
10126f2af429SYunsheng Lin 	struct hclge_rss_tuple_cfg rss_tuple_sets;
101389523cfaSYunsheng Lin 
101468ece54eSYunsheng Lin 	u16 alloc_rss_size;
101546a3df9fSSalil 
101646a3df9fSSalil 	u16 qs_offset;
10172566f106SYunsheng Lin 	u32 bw_limit;		/* VSI BW Limit (0 = disabled) */
101846a3df9fSSalil 	u8  dwrr;
101946a3df9fSSalil 
10202ba30662SJian Shen 	bool req_vlan_fltr_en;
10212ba30662SJian Shen 	bool cur_vlan_fltr_en;
1022fe4144d4SJian Shen 	unsigned long vlan_del_fail_bmap[BITS_TO_LONGS(VLAN_N_VID)];
1023741fca16SJian Shen 	struct hclge_port_base_vlan_config port_base_vlan_cfg;
10245f6ea83fSPeng Li 	struct hclge_tx_vtag_cfg  txvlan_cfg;
10255f6ea83fSPeng Li 	struct hclge_rx_vtag_cfg  rxvlan_cfg;
10265f6ea83fSPeng Li 
102739932473SJian Shen 	u16 used_umv_num;
102839932473SJian Shen 
1029ebaf1908SWeihang Li 	u16 vport_id;
103046a3df9fSSalil 	struct hclge_dev *back;  /* Back reference to associated dev */
103146a3df9fSSalil 	struct hnae3_handle nic;
103246a3df9fSSalil 	struct hnae3_handle roce;
1033a6d818e3SYunsheng Lin 
1034a6d818e3SYunsheng Lin 	unsigned long state;
1035a6d818e3SYunsheng Lin 	unsigned long last_active_jiffies;
1036818f1675SYunsheng Lin 	u32 mps; /* Max packet size */
10376430f744SYufeng Mo 	struct hclge_vf_info vf_info;
10386dd86902Sliuzhongzhu 
1039c631c696SJian Shen 	u8 overflow_promisc_flags;
1040c631c696SJian Shen 	u8 last_promisc_flags;
1041c631c696SJian Shen 
1042ee4bcd3bSJian Shen 	spinlock_t mac_list_lock; /* protect mac address need to add/detele */
10436dd86902Sliuzhongzhu 	struct list_head uc_mac_list;   /* Store VF unicast table */
10446dd86902Sliuzhongzhu 	struct list_head mc_mac_list;   /* Store VF multicast table */
1045c6075b19Sliuzhongzhu 	struct list_head vlan_list;     /* Store VF vlan table */
104646a3df9fSSalil };
104746a3df9fSSalil 
1048e196ec75SJian Shen int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
1049e196ec75SJian Shen 				 bool en_mc_pmc, bool en_bc_pmc);
105046a3df9fSSalil int hclge_add_uc_addr_common(struct hclge_vport *vport,
105146a3df9fSSalil 			     const unsigned char *addr);
105246a3df9fSSalil int hclge_rm_uc_addr_common(struct hclge_vport *vport,
105346a3df9fSSalil 			    const unsigned char *addr);
105446a3df9fSSalil int hclge_add_mc_addr_common(struct hclge_vport *vport,
105546a3df9fSSalil 			     const unsigned char *addr);
105646a3df9fSSalil int hclge_rm_mc_addr_common(struct hclge_vport *vport,
105746a3df9fSSalil 			    const unsigned char *addr);
105846a3df9fSSalil 
105946a3df9fSSalil struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle);
106084e095d6SSalil Mehta int hclge_bind_ring_with_vector(struct hclge_vport *vport,
106184e095d6SSalil Mehta 				int vector_id, bool en,
106246a3df9fSSalil 				struct hnae3_ring_chain_node *ring_chain);
106384e095d6SSalil Mehta 
106446a3df9fSSalil static inline int hclge_get_queue_id(struct hnae3_queue *queue)
106546a3df9fSSalil {
106646a3df9fSSalil 	struct hclge_tqp *tqp = container_of(queue, struct hclge_tqp, q);
106746a3df9fSSalil 
106846a3df9fSSalil 	return tqp->index;
106946a3df9fSSalil }
107046a3df9fSSalil 
10716dd22bbcSHuazhong Tan static inline bool hclge_is_reset_pending(struct hclge_dev *hdev)
10726dd22bbcSHuazhong Tan {
10736dd22bbcSHuazhong Tan 	return !!hdev->reset_pending;
10746dd22bbcSHuazhong Tan }
10756dd22bbcSHuazhong Tan 
1076dea846e8SHuazhong Tan int hclge_inform_reset_assert_to_vf(struct hclge_vport *vport);
107746a3df9fSSalil int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex);
1078dc8131d8SYunsheng Lin int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
1079dc8131d8SYunsheng Lin 			  u16 vlan_id, bool is_kill);
1080b2641e2aSYunsheng Lin int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable);
108177f255c1SYunsheng Lin 
108277f255c1SYunsheng Lin int hclge_buffer_alloc(struct hclge_dev *hdev);
108377f255c1SYunsheng Lin int hclge_rss_init_hw(struct hclge_dev *hdev);
1084268f5dfaSYunsheng Lin void hclge_rss_indir_init_cfg(struct hclge_dev *hdev);
1085dde1a86eSSalil Mehta 
1086dde1a86eSSalil Mehta void hclge_mbx_handler(struct hclge_dev *hdev);
10878fa86551SYufeng Mo int hclge_reset_tqp(struct hnae3_handle *handle);
10881770a7a3SPeng Li int hclge_cfg_flowctrl(struct hclge_dev *hdev);
10892bfbd35dSSalil Mehta int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id);
1090a6d818e3SYunsheng Lin int hclge_vport_start(struct hclge_vport *vport);
1091a6d818e3SYunsheng Lin void hclge_vport_stop(struct hclge_vport *vport);
1092818f1675SYunsheng Lin int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu);
10935e69ea7eSYufeng Mo int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd,
109404987ca1SGuangbin Huang 		       char *buf, int len);
10950c29d191Sliuzhongzhu u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id);
1096af013903SHuazhong Tan int hclge_notify_client(struct hclge_dev *hdev,
1097af013903SHuazhong Tan 			enum hnae3_reset_notify_type type);
1098ee4bcd3bSJian Shen int hclge_update_mac_list(struct hclge_vport *vport,
1099ee4bcd3bSJian Shen 			  enum HCLGE_MAC_NODE_STATE state,
1100ee4bcd3bSJian Shen 			  enum HCLGE_MAC_ADDR_TYPE mac_type,
1101ee4bcd3bSJian Shen 			  const unsigned char *addr);
1102ee4bcd3bSJian Shen int hclge_update_mac_node_for_dev_addr(struct hclge_vport *vport,
1103ee4bcd3bSJian Shen 				       const u8 *old_addr, const u8 *new_addr);
11046dd86902Sliuzhongzhu void hclge_rm_vport_all_mac_table(struct hclge_vport *vport, bool is_del_list,
11056dd86902Sliuzhongzhu 				  enum HCLGE_MAC_ADDR_TYPE mac_type);
1106c6075b19Sliuzhongzhu void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list);
1107c6075b19Sliuzhongzhu void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev);
1108ee4bcd3bSJian Shen void hclge_restore_mac_table_common(struct hclge_vport *vport);
1109039ba863SJian Shen void hclge_restore_vport_vlan_table(struct hclge_vport *vport);
111021e043cdSJian Shen int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state,
111121e043cdSJian Shen 				    struct hclge_vlan_info *vlan_info);
111292f11ea1SJian Shen int hclge_push_vf_port_base_vlan_info(struct hclge_vport *vport, u8 vfid,
1113f2dbf0edSJian Shen 				      u16 state,
1114f2dbf0edSJian Shen 				      struct hclge_vlan_info *vlan_info);
1115ed8fb4b2SJian Shen void hclge_task_schedule(struct hclge_dev *hdev, unsigned long delay_time);
1116ddb54554SGuangbin Huang int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev,
1117ddb54554SGuangbin Huang 				struct hclge_desc *desc);
1118a83d2961SWeihang Li void hclge_report_hw_error(struct hclge_dev *hdev,
1119a83d2961SWeihang Li 			   enum hnae3_hw_error_type type);
1120e196ec75SJian Shen void hclge_inform_vf_promisc_info(struct hclge_vport *vport);
11211a7ff828SJiaran Zhang int hclge_dbg_dump_rst_info(struct hclge_dev *hdev, char *buf, int len);
112218b6e31fSGuangbin Huang int hclge_push_vf_link_status(struct hclge_vport *vport);
1123fa6a262aSJian Shen int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en);
112446a3df9fSSalil #endif
1125