xref: /linux/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h (revision a10829c4aeab1fd837129537a4d44f6a79a18202)
146a3df9fSSalil /*
246a3df9fSSalil  * Copyright (c) 2016~2017 Hisilicon Limited.
346a3df9fSSalil  *
446a3df9fSSalil  * This program is free software; you can redistribute it and/or modify
546a3df9fSSalil  * it under the terms of the GNU General Public License as published by
646a3df9fSSalil  * the Free Software Foundation; either version 2 of the License, or
746a3df9fSSalil  * (at your option) any later version.
846a3df9fSSalil  */
946a3df9fSSalil 
1046a3df9fSSalil #ifndef __HCLGE_MAIN_H
1146a3df9fSSalil #define __HCLGE_MAIN_H
1246a3df9fSSalil #include <linux/fs.h>
1346a3df9fSSalil #include <linux/types.h>
1446a3df9fSSalil #include <linux/phy.h>
15dc8131d8SYunsheng Lin #include <linux/if_vlan.h>
16dc8131d8SYunsheng Lin 
1746a3df9fSSalil #include "hclge_cmd.h"
1846a3df9fSSalil #include "hnae3.h"
1946a3df9fSSalil 
203c7624d8SXi Wang #define HCLGE_MOD_VERSION "1.0"
2146a3df9fSSalil #define HCLGE_DRIVER_NAME "hclge"
2246a3df9fSSalil 
2346a3df9fSSalil #define HCLGE_INVALID_VPORT 0xffff
2446a3df9fSSalil 
2546a3df9fSSalil #define HCLGE_ROCE_VECTOR_OFFSET	96
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
32466b0c00SLipeng #define HCLGE_MISC_VECTOR_REG_BASE	0x20400
3346a3df9fSSalil 
3446a3df9fSSalil #define HCLGE_VECTOR_REG_OFFSET		0x4
3546a3df9fSSalil #define HCLGE_VECTOR_VF_OFFSET		0x100000
3646a3df9fSSalil 
3746a3df9fSSalil #define HCLGE_RSS_IND_TBL_SIZE		512
385392902dSYunsheng Lin #define HCLGE_RSS_SET_BITMAP_MSK	GENMASK(15, 0)
3946a3df9fSSalil #define HCLGE_RSS_KEY_SIZE		40
4046a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_TOEPLITZ	0
4146a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SIMPLE	1
4246a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SYMMETRIC	2
4346a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_MASK	0xf
4446a3df9fSSalil #define HCLGE_RSS_CFG_TBL_NUM \
4546a3df9fSSalil 	(HCLGE_RSS_IND_TBL_SIZE / HCLGE_RSS_CFG_TBL_SIZE)
4646a3df9fSSalil 
47f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_OTHER	GENMASK(3, 0)
48f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_SCTP	GENMASK(4, 0)
49f7db940aSLipeng #define HCLGE_D_PORT_BIT		BIT(0)
50f7db940aSLipeng #define HCLGE_S_PORT_BIT		BIT(1)
51f7db940aSLipeng #define HCLGE_D_IP_BIT			BIT(2)
52f7db940aSLipeng #define HCLGE_S_IP_BIT			BIT(3)
53f7db940aSLipeng #define HCLGE_V_TAG_BIT			BIT(4)
54f7db940aSLipeng 
5546a3df9fSSalil #define HCLGE_RSS_TC_SIZE_0		1
5646a3df9fSSalil #define HCLGE_RSS_TC_SIZE_1		2
5746a3df9fSSalil #define HCLGE_RSS_TC_SIZE_2		4
5846a3df9fSSalil #define HCLGE_RSS_TC_SIZE_3		8
5946a3df9fSSalil #define HCLGE_RSS_TC_SIZE_4		16
6046a3df9fSSalil #define HCLGE_RSS_TC_SIZE_5		32
6146a3df9fSSalil #define HCLGE_RSS_TC_SIZE_6		64
6246a3df9fSSalil #define HCLGE_RSS_TC_SIZE_7		128
6346a3df9fSSalil 
6440cca1c5SXi Wang #define HCLGE_MTA_TBL_SIZE		4096
6540cca1c5SXi Wang 
6646a3df9fSSalil #define HCLGE_TQP_RESET_TRY_TIMES	10
6746a3df9fSSalil 
6846a3df9fSSalil #define HCLGE_PHY_PAGE_MDIX		0
6946a3df9fSSalil #define HCLGE_PHY_PAGE_COPPER		0
7046a3df9fSSalil 
7146a3df9fSSalil /* Page Selection Reg. */
7246a3df9fSSalil #define HCLGE_PHY_PAGE_REG		22
7346a3df9fSSalil 
7446a3df9fSSalil /* Copper Specific Control Register */
7546a3df9fSSalil #define HCLGE_PHY_CSC_REG		16
7646a3df9fSSalil 
7746a3df9fSSalil /* Copper Specific Status Register */
7846a3df9fSSalil #define HCLGE_PHY_CSS_REG		17
7946a3df9fSSalil 
80*a10829c4SJian Shen #define HCLGE_PHY_MDIX_CTRL_S		5
815392902dSYunsheng Lin #define HCLGE_PHY_MDIX_CTRL_M		GENMASK(6, 5)
8246a3df9fSSalil 
83*a10829c4SJian Shen #define HCLGE_PHY_MDIX_STATUS_B		6
84*a10829c4SJian Shen #define HCLGE_PHY_SPEED_DUP_RESOLVE_B	11
8546a3df9fSSalil 
865f6ea83fSPeng Li /* Factor used to calculate offset and bitmap of VF num */
875f6ea83fSPeng Li #define HCLGE_VF_NUM_PER_CMD           64
885f6ea83fSPeng Li #define HCLGE_VF_NUM_PER_BYTE          8
895f6ea83fSPeng Li 
904ed340abSLipeng /* Reset related Registers */
914ed340abSLipeng #define HCLGE_MISC_RESET_STS_REG	0x20700
929ca8d1a7SHuazhong Tan #define HCLGE_MISC_VECTOR_INT_STS	0x20800
934ed340abSLipeng #define HCLGE_GLOBAL_RESET_REG		0x20A00
944ed340abSLipeng #define HCLGE_GLOBAL_RESET_BIT		0x0
954ed340abSLipeng #define HCLGE_CORE_RESET_BIT		0x1
964ed340abSLipeng #define HCLGE_FUN_RST_ING		0x20C00
974ed340abSLipeng #define HCLGE_FUN_RST_ING_B		0
984ed340abSLipeng 
994ed340abSLipeng /* Vector0 register bits define */
1004ed340abSLipeng #define HCLGE_VECTOR0_GLOBALRESET_INT_B	5
1014ed340abSLipeng #define HCLGE_VECTOR0_CORERESET_INT_B	6
1024ed340abSLipeng #define HCLGE_VECTOR0_IMPRESET_INT_B	7
1034ed340abSLipeng 
104c1a81619SSalil Mehta /* Vector0 interrupt CMDQ event source register(RW) */
105c1a81619SSalil Mehta #define HCLGE_VECTOR0_CMDQ_SRC_REG	0x27100
106c1a81619SSalil Mehta /* CMDQ register bits for RX event(=MBX event) */
107c1a81619SSalil Mehta #define HCLGE_VECTOR0_RX_CMDQ_INT_B	1
108c1a81619SSalil Mehta 
1092866ccb2SFuyun Liang #define HCLGE_MAC_DEFAULT_FRAME \
1102866ccb2SFuyun Liang 	(ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN + ETH_DATA_LEN)
1112866ccb2SFuyun Liang #define HCLGE_MAC_MIN_FRAME		64
1122866ccb2SFuyun Liang #define HCLGE_MAC_MAX_FRAME		9728
1132866ccb2SFuyun Liang 
1140979aa0bSFuyun Liang #define HCLGE_SUPPORT_1G_BIT		BIT(0)
1150979aa0bSFuyun Liang #define HCLGE_SUPPORT_10G_BIT		BIT(1)
1160979aa0bSFuyun Liang #define HCLGE_SUPPORT_25G_BIT		BIT(2)
1170979aa0bSFuyun Liang #define HCLGE_SUPPORT_50G_BIT		BIT(3)
1180979aa0bSFuyun Liang #define HCLGE_SUPPORT_100G_BIT		BIT(4)
1190979aa0bSFuyun Liang 
12046a3df9fSSalil enum HCLGE_DEV_STATE {
12146a3df9fSSalil 	HCLGE_STATE_REINITING,
12246a3df9fSSalil 	HCLGE_STATE_DOWN,
12346a3df9fSSalil 	HCLGE_STATE_DISABLED,
12446a3df9fSSalil 	HCLGE_STATE_REMOVING,
12546a3df9fSSalil 	HCLGE_STATE_SERVICE_INITED,
12646a3df9fSSalil 	HCLGE_STATE_SERVICE_SCHED,
127cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_SERVICE_SCHED,
128cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_HANDLING,
129c1a81619SSalil Mehta 	HCLGE_STATE_MBX_SERVICE_SCHED,
13046a3df9fSSalil 	HCLGE_STATE_MBX_HANDLING,
131c5f65480SJian Shen 	HCLGE_STATE_STATISTICS_UPDATING,
1328d40854fSHuazhong Tan 	HCLGE_STATE_CMD_DISABLE,
13346a3df9fSSalil 	HCLGE_STATE_MAX
13446a3df9fSSalil };
13546a3df9fSSalil 
136ca1d7669SSalil Mehta enum hclge_evt_cause {
137ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_RST,
138ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_MBX,
139ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_OTHER,
140ca1d7669SSalil Mehta };
141ca1d7669SSalil Mehta 
14246a3df9fSSalil #define HCLGE_MPF_ENBALE 1
14346a3df9fSSalil struct hclge_caps {
14446a3df9fSSalil 	u16 num_tqp;
14546a3df9fSSalil 	u16 num_buffer_cell;
14646a3df9fSSalil 	u32 flag;
14746a3df9fSSalil 	u16 vmdq;
14846a3df9fSSalil };
14946a3df9fSSalil 
15046a3df9fSSalil enum HCLGE_MAC_SPEED {
15146a3df9fSSalil 	HCLGE_MAC_SPEED_10M	= 10,		/* 10 Mbps */
15246a3df9fSSalil 	HCLGE_MAC_SPEED_100M	= 100,		/* 100 Mbps */
15346a3df9fSSalil 	HCLGE_MAC_SPEED_1G	= 1000,		/* 1000 Mbps   = 1 Gbps */
15446a3df9fSSalil 	HCLGE_MAC_SPEED_10G	= 10000,	/* 10000 Mbps  = 10 Gbps */
15546a3df9fSSalil 	HCLGE_MAC_SPEED_25G	= 25000,	/* 25000 Mbps  = 25 Gbps */
15646a3df9fSSalil 	HCLGE_MAC_SPEED_40G	= 40000,	/* 40000 Mbps  = 40 Gbps */
15746a3df9fSSalil 	HCLGE_MAC_SPEED_50G	= 50000,	/* 50000 Mbps  = 50 Gbps */
15846a3df9fSSalil 	HCLGE_MAC_SPEED_100G	= 100000	/* 100000 Mbps = 100 Gbps */
15946a3df9fSSalil };
16046a3df9fSSalil 
16146a3df9fSSalil enum HCLGE_MAC_DUPLEX {
16246a3df9fSSalil 	HCLGE_MAC_HALF,
16346a3df9fSSalil 	HCLGE_MAC_FULL
16446a3df9fSSalil };
16546a3df9fSSalil 
16646a3df9fSSalil enum hclge_mta_dmac_sel_type {
16746a3df9fSSalil 	HCLGE_MAC_ADDR_47_36,
16846a3df9fSSalil 	HCLGE_MAC_ADDR_46_35,
16946a3df9fSSalil 	HCLGE_MAC_ADDR_45_34,
17046a3df9fSSalil 	HCLGE_MAC_ADDR_44_33,
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 	struct hclge_caps caps;
19546a3df9fSSalil };
19646a3df9fSSalil 
19746a3df9fSSalil /* TQP stats */
19846a3df9fSSalil struct hlcge_tqp_stats {
19946a3df9fSSalil 	/* query_tqp_tx_queue_statistics ,opcode id:  0x0B03 */
20046a3df9fSSalil 	u64 rcb_tx_ring_pktnum_rcd; /* 32bit */
20146a3df9fSSalil 	/* query_tqp_rx_queue_statistics ,opcode id:  0x0B13 */
20246a3df9fSSalil 	u64 rcb_rx_ring_pktnum_rcd; /* 32bit */
20346a3df9fSSalil };
20446a3df9fSSalil 
20546a3df9fSSalil struct hclge_tqp {
20646a3df9fSSalil 	struct device *dev;	/* Device for DMA mapping */
20746a3df9fSSalil 	struct hnae3_queue q;
20846a3df9fSSalil 	struct hlcge_tqp_stats tqp_stats;
20946a3df9fSSalil 	u16 index;	/* Global index in a NIC controller */
21046a3df9fSSalil 
21146a3df9fSSalil 	bool alloced;
21246a3df9fSSalil };
21346a3df9fSSalil 
21446a3df9fSSalil enum hclge_fc_mode {
21546a3df9fSSalil 	HCLGE_FC_NONE,
21646a3df9fSSalil 	HCLGE_FC_RX_PAUSE,
21746a3df9fSSalil 	HCLGE_FC_TX_PAUSE,
21846a3df9fSSalil 	HCLGE_FC_FULL,
21946a3df9fSSalil 	HCLGE_FC_PFC,
22046a3df9fSSalil 	HCLGE_FC_DEFAULT
22146a3df9fSSalil };
22246a3df9fSSalil 
22346a3df9fSSalil #define HCLGE_PG_NUM		4
22446a3df9fSSalil #define HCLGE_SCH_MODE_SP	0
22546a3df9fSSalil #define HCLGE_SCH_MODE_DWRR	1
22646a3df9fSSalil struct hclge_pg_info {
22746a3df9fSSalil 	u8 pg_id;
22846a3df9fSSalil 	u8 pg_sch_mode;		/* 0: sp; 1: dwrr */
22946a3df9fSSalil 	u8 tc_bit_map;
23046a3df9fSSalil 	u32 bw_limit;
23146a3df9fSSalil 	u8 tc_dwrr[HNAE3_MAX_TC];
23246a3df9fSSalil };
23346a3df9fSSalil 
23446a3df9fSSalil struct hclge_tc_info {
23546a3df9fSSalil 	u8 tc_id;
23646a3df9fSSalil 	u8 tc_sch_mode;		/* 0: sp; 1: dwrr */
23746a3df9fSSalil 	u8 pgid;
23846a3df9fSSalil 	u32 bw_limit;
23946a3df9fSSalil };
24046a3df9fSSalil 
24146a3df9fSSalil struct hclge_cfg {
24246a3df9fSSalil 	u8 vmdq_vport_num;
24346a3df9fSSalil 	u8 tc_num;
24446a3df9fSSalil 	u16 tqp_desc_num;
24546a3df9fSSalil 	u16 rx_buf_len;
2460e7a40cdSPeng Li 	u16 rss_size_max;
24746a3df9fSSalil 	u8 phy_addr;
24846a3df9fSSalil 	u8 media_type;
24946a3df9fSSalil 	u8 mac_addr[ETH_ALEN];
25046a3df9fSSalil 	u8 default_speed;
25146a3df9fSSalil 	u32 numa_node_map;
2520979aa0bSFuyun Liang 	u8 speed_ability;
25346a3df9fSSalil };
25446a3df9fSSalil 
25546a3df9fSSalil struct hclge_tm_info {
25646a3df9fSSalil 	u8 num_tc;
25746a3df9fSSalil 	u8 num_pg;      /* It must be 1 if vNET-Base schd */
25846a3df9fSSalil 	u8 pg_dwrr[HCLGE_PG_NUM];
259c5795c53SYunsheng Lin 	u8 prio_tc[HNAE3_MAX_USER_PRIO];
26046a3df9fSSalil 	struct hclge_pg_info pg_info[HCLGE_PG_NUM];
26146a3df9fSSalil 	struct hclge_tc_info tc_info[HNAE3_MAX_TC];
26246a3df9fSSalil 	enum hclge_fc_mode fc_mode;
26346a3df9fSSalil 	u8 hw_pfc_map; /* Allow for packet drop or not on this TC */
26446a3df9fSSalil };
26546a3df9fSSalil 
26646a3df9fSSalil struct hclge_comm_stats_str {
26746a3df9fSSalil 	char desc[ETH_GSTRING_LEN];
26846a3df9fSSalil 	unsigned long offset;
26946a3df9fSSalil };
27046a3df9fSSalil 
27146a3df9fSSalil /* all 64bit stats, opcode id: 0x0030 */
27246a3df9fSSalil struct hclge_64_bit_stats {
27346a3df9fSSalil 	/* query_igu_stat */
27446a3df9fSSalil 	u64 igu_rx_oversize_pkt;
27546a3df9fSSalil 	u64 igu_rx_undersize_pkt;
27646a3df9fSSalil 	u64 igu_rx_out_all_pkt;
27746a3df9fSSalil 	u64 igu_rx_uni_pkt;
27846a3df9fSSalil 	u64 igu_rx_multi_pkt;
27946a3df9fSSalil 	u64 igu_rx_broad_pkt;
28046a3df9fSSalil 	u64 rsv0;
28146a3df9fSSalil 
28246a3df9fSSalil 	/* query_egu_stat */
28346a3df9fSSalil 	u64 egu_tx_out_all_pkt;
28446a3df9fSSalil 	u64 egu_tx_uni_pkt;
28546a3df9fSSalil 	u64 egu_tx_multi_pkt;
28646a3df9fSSalil 	u64 egu_tx_broad_pkt;
28746a3df9fSSalil 
28846a3df9fSSalil 	/* ssu_ppp packet stats */
28946a3df9fSSalil 	u64 ssu_ppp_mac_key_num;
29046a3df9fSSalil 	u64 ssu_ppp_host_key_num;
29146a3df9fSSalil 	u64 ppp_ssu_mac_rlt_num;
29246a3df9fSSalil 	u64 ppp_ssu_host_rlt_num;
29346a3df9fSSalil 
29446a3df9fSSalil 	/* ssu_tx_in_out_dfx_stats */
29546a3df9fSSalil 	u64 ssu_tx_in_num;
29646a3df9fSSalil 	u64 ssu_tx_out_num;
29746a3df9fSSalil 	/* ssu_rx_in_out_dfx_stats */
29846a3df9fSSalil 	u64 ssu_rx_in_num;
29946a3df9fSSalil 	u64 ssu_rx_out_num;
30046a3df9fSSalil };
30146a3df9fSSalil 
30246a3df9fSSalil /* all 32bit stats, opcode id: 0x0031 */
30346a3df9fSSalil struct hclge_32_bit_stats {
30446a3df9fSSalil 	u64 igu_rx_err_pkt;
30546a3df9fSSalil 	u64 igu_rx_no_eof_pkt;
30646a3df9fSSalil 	u64 igu_rx_no_sof_pkt;
30746a3df9fSSalil 	u64 egu_tx_1588_pkt;
30846a3df9fSSalil 	u64 egu_tx_err_pkt;
30946a3df9fSSalil 	u64 ssu_full_drop_num;
31046a3df9fSSalil 	u64 ssu_part_drop_num;
31146a3df9fSSalil 	u64 ppp_key_drop_num;
31246a3df9fSSalil 	u64 ppp_rlt_drop_num;
31346a3df9fSSalil 	u64 ssu_key_drop_num;
31446a3df9fSSalil 	u64 pkt_curr_buf_cnt;
31546a3df9fSSalil 	u64 qcn_fb_rcv_cnt;
31646a3df9fSSalil 	u64 qcn_fb_drop_cnt;
31746a3df9fSSalil 	u64 qcn_fb_invaild_cnt;
31846a3df9fSSalil 	u64 rsv0;
31946a3df9fSSalil 	u64 rx_packet_tc0_in_cnt;
32046a3df9fSSalil 	u64 rx_packet_tc1_in_cnt;
32146a3df9fSSalil 	u64 rx_packet_tc2_in_cnt;
32246a3df9fSSalil 	u64 rx_packet_tc3_in_cnt;
32346a3df9fSSalil 	u64 rx_packet_tc4_in_cnt;
32446a3df9fSSalil 	u64 rx_packet_tc5_in_cnt;
32546a3df9fSSalil 	u64 rx_packet_tc6_in_cnt;
32646a3df9fSSalil 	u64 rx_packet_tc7_in_cnt;
32746a3df9fSSalil 	u64 rx_packet_tc0_out_cnt;
32846a3df9fSSalil 	u64 rx_packet_tc1_out_cnt;
32946a3df9fSSalil 	u64 rx_packet_tc2_out_cnt;
33046a3df9fSSalil 	u64 rx_packet_tc3_out_cnt;
33146a3df9fSSalil 	u64 rx_packet_tc4_out_cnt;
33246a3df9fSSalil 	u64 rx_packet_tc5_out_cnt;
33346a3df9fSSalil 	u64 rx_packet_tc6_out_cnt;
33446a3df9fSSalil 	u64 rx_packet_tc7_out_cnt;
33546a3df9fSSalil 
33646a3df9fSSalil 	/* Tx packet level statistics */
33746a3df9fSSalil 	u64 tx_packet_tc0_in_cnt;
33846a3df9fSSalil 	u64 tx_packet_tc1_in_cnt;
33946a3df9fSSalil 	u64 tx_packet_tc2_in_cnt;
34046a3df9fSSalil 	u64 tx_packet_tc3_in_cnt;
34146a3df9fSSalil 	u64 tx_packet_tc4_in_cnt;
34246a3df9fSSalil 	u64 tx_packet_tc5_in_cnt;
34346a3df9fSSalil 	u64 tx_packet_tc6_in_cnt;
34446a3df9fSSalil 	u64 tx_packet_tc7_in_cnt;
34546a3df9fSSalil 	u64 tx_packet_tc0_out_cnt;
34646a3df9fSSalil 	u64 tx_packet_tc1_out_cnt;
34746a3df9fSSalil 	u64 tx_packet_tc2_out_cnt;
34846a3df9fSSalil 	u64 tx_packet_tc3_out_cnt;
34946a3df9fSSalil 	u64 tx_packet_tc4_out_cnt;
35046a3df9fSSalil 	u64 tx_packet_tc5_out_cnt;
35146a3df9fSSalil 	u64 tx_packet_tc6_out_cnt;
35246a3df9fSSalil 	u64 tx_packet_tc7_out_cnt;
35346a3df9fSSalil 
35446a3df9fSSalil 	/* packet buffer statistics */
35546a3df9fSSalil 	u64 pkt_curr_buf_tc0_cnt;
35646a3df9fSSalil 	u64 pkt_curr_buf_tc1_cnt;
35746a3df9fSSalil 	u64 pkt_curr_buf_tc2_cnt;
35846a3df9fSSalil 	u64 pkt_curr_buf_tc3_cnt;
35946a3df9fSSalil 	u64 pkt_curr_buf_tc4_cnt;
36046a3df9fSSalil 	u64 pkt_curr_buf_tc5_cnt;
36146a3df9fSSalil 	u64 pkt_curr_buf_tc6_cnt;
36246a3df9fSSalil 	u64 pkt_curr_buf_tc7_cnt;
36346a3df9fSSalil 
36446a3df9fSSalil 	u64 mb_uncopy_num;
36546a3df9fSSalil 	u64 lo_pri_unicast_rlt_drop_num;
36646a3df9fSSalil 	u64 hi_pri_multicast_rlt_drop_num;
36746a3df9fSSalil 	u64 lo_pri_multicast_rlt_drop_num;
36846a3df9fSSalil 	u64 rx_oq_drop_pkt_cnt;
36946a3df9fSSalil 	u64 tx_oq_drop_pkt_cnt;
37046a3df9fSSalil 	u64 nic_l2_err_drop_pkt_cnt;
37146a3df9fSSalil 	u64 roc_l2_err_drop_pkt_cnt;
37246a3df9fSSalil };
37346a3df9fSSalil 
37446a3df9fSSalil /* mac stats ,opcode id: 0x0032 */
37546a3df9fSSalil struct hclge_mac_stats {
37646a3df9fSSalil 	u64 mac_tx_mac_pause_num;
37746a3df9fSSalil 	u64 mac_rx_mac_pause_num;
37846a3df9fSSalil 	u64 mac_tx_pfc_pri0_pkt_num;
37946a3df9fSSalil 	u64 mac_tx_pfc_pri1_pkt_num;
38046a3df9fSSalil 	u64 mac_tx_pfc_pri2_pkt_num;
38146a3df9fSSalil 	u64 mac_tx_pfc_pri3_pkt_num;
38246a3df9fSSalil 	u64 mac_tx_pfc_pri4_pkt_num;
38346a3df9fSSalil 	u64 mac_tx_pfc_pri5_pkt_num;
38446a3df9fSSalil 	u64 mac_tx_pfc_pri6_pkt_num;
38546a3df9fSSalil 	u64 mac_tx_pfc_pri7_pkt_num;
38646a3df9fSSalil 	u64 mac_rx_pfc_pri0_pkt_num;
38746a3df9fSSalil 	u64 mac_rx_pfc_pri1_pkt_num;
38846a3df9fSSalil 	u64 mac_rx_pfc_pri2_pkt_num;
38946a3df9fSSalil 	u64 mac_rx_pfc_pri3_pkt_num;
39046a3df9fSSalil 	u64 mac_rx_pfc_pri4_pkt_num;
39146a3df9fSSalil 	u64 mac_rx_pfc_pri5_pkt_num;
39246a3df9fSSalil 	u64 mac_rx_pfc_pri6_pkt_num;
39346a3df9fSSalil 	u64 mac_rx_pfc_pri7_pkt_num;
39446a3df9fSSalil 	u64 mac_tx_total_pkt_num;
39546a3df9fSSalil 	u64 mac_tx_total_oct_num;
39646a3df9fSSalil 	u64 mac_tx_good_pkt_num;
39746a3df9fSSalil 	u64 mac_tx_bad_pkt_num;
39846a3df9fSSalil 	u64 mac_tx_good_oct_num;
39946a3df9fSSalil 	u64 mac_tx_bad_oct_num;
40046a3df9fSSalil 	u64 mac_tx_uni_pkt_num;
40146a3df9fSSalil 	u64 mac_tx_multi_pkt_num;
40246a3df9fSSalil 	u64 mac_tx_broad_pkt_num;
40346a3df9fSSalil 	u64 mac_tx_undersize_pkt_num;
404200a88c6SJian Shen 	u64 mac_tx_oversize_pkt_num;
40546a3df9fSSalil 	u64 mac_tx_64_oct_pkt_num;
40646a3df9fSSalil 	u64 mac_tx_65_127_oct_pkt_num;
40746a3df9fSSalil 	u64 mac_tx_128_255_oct_pkt_num;
40846a3df9fSSalil 	u64 mac_tx_256_511_oct_pkt_num;
40946a3df9fSSalil 	u64 mac_tx_512_1023_oct_pkt_num;
41046a3df9fSSalil 	u64 mac_tx_1024_1518_oct_pkt_num;
41191f384f6SJian Shen 	u64 mac_tx_1519_2047_oct_pkt_num;
41291f384f6SJian Shen 	u64 mac_tx_2048_4095_oct_pkt_num;
41391f384f6SJian Shen 	u64 mac_tx_4096_8191_oct_pkt_num;
414dbecc779SXi Wang 	u64 rsv0;
415dbecc779SXi Wang 	u64 mac_tx_8192_9216_oct_pkt_num;
416dbecc779SXi Wang 	u64 mac_tx_9217_12287_oct_pkt_num;
41791f384f6SJian Shen 	u64 mac_tx_12288_16383_oct_pkt_num;
41891f384f6SJian Shen 	u64 mac_tx_1519_max_good_oct_pkt_num;
41991f384f6SJian Shen 	u64 mac_tx_1519_max_bad_oct_pkt_num;
42091f384f6SJian Shen 
42146a3df9fSSalil 	u64 mac_rx_total_pkt_num;
42246a3df9fSSalil 	u64 mac_rx_total_oct_num;
42346a3df9fSSalil 	u64 mac_rx_good_pkt_num;
42446a3df9fSSalil 	u64 mac_rx_bad_pkt_num;
42546a3df9fSSalil 	u64 mac_rx_good_oct_num;
42646a3df9fSSalil 	u64 mac_rx_bad_oct_num;
42746a3df9fSSalil 	u64 mac_rx_uni_pkt_num;
42846a3df9fSSalil 	u64 mac_rx_multi_pkt_num;
42946a3df9fSSalil 	u64 mac_rx_broad_pkt_num;
43046a3df9fSSalil 	u64 mac_rx_undersize_pkt_num;
431200a88c6SJian Shen 	u64 mac_rx_oversize_pkt_num;
43246a3df9fSSalil 	u64 mac_rx_64_oct_pkt_num;
43346a3df9fSSalil 	u64 mac_rx_65_127_oct_pkt_num;
43446a3df9fSSalil 	u64 mac_rx_128_255_oct_pkt_num;
43546a3df9fSSalil 	u64 mac_rx_256_511_oct_pkt_num;
43646a3df9fSSalil 	u64 mac_rx_512_1023_oct_pkt_num;
43746a3df9fSSalil 	u64 mac_rx_1024_1518_oct_pkt_num;
43891f384f6SJian Shen 	u64 mac_rx_1519_2047_oct_pkt_num;
43991f384f6SJian Shen 	u64 mac_rx_2048_4095_oct_pkt_num;
44091f384f6SJian Shen 	u64 mac_rx_4096_8191_oct_pkt_num;
441dbecc779SXi Wang 	u64 rsv1;
442dbecc779SXi Wang 	u64 mac_rx_8192_9216_oct_pkt_num;
443dbecc779SXi Wang 	u64 mac_rx_9217_12287_oct_pkt_num;
44491f384f6SJian Shen 	u64 mac_rx_12288_16383_oct_pkt_num;
44591f384f6SJian Shen 	u64 mac_rx_1519_max_good_oct_pkt_num;
44691f384f6SJian Shen 	u64 mac_rx_1519_max_bad_oct_pkt_num;
44746a3df9fSSalil 
448a6c51c26SJian Shen 	u64 mac_tx_fragment_pkt_num;
449a6c51c26SJian Shen 	u64 mac_tx_undermin_pkt_num;
450a6c51c26SJian Shen 	u64 mac_tx_jabber_pkt_num;
451a6c51c26SJian Shen 	u64 mac_tx_err_all_pkt_num;
452a6c51c26SJian Shen 	u64 mac_tx_from_app_good_pkt_num;
453a6c51c26SJian Shen 	u64 mac_tx_from_app_bad_pkt_num;
454a6c51c26SJian Shen 	u64 mac_rx_fragment_pkt_num;
455a6c51c26SJian Shen 	u64 mac_rx_undermin_pkt_num;
456a6c51c26SJian Shen 	u64 mac_rx_jabber_pkt_num;
457a6c51c26SJian Shen 	u64 mac_rx_fcs_err_pkt_num;
458a6c51c26SJian Shen 	u64 mac_rx_send_app_good_pkt_num;
459a6c51c26SJian Shen 	u64 mac_rx_send_app_bad_pkt_num;
46046a3df9fSSalil };
46146a3df9fSSalil 
462c5f65480SJian Shen #define HCLGE_STATS_TIMER_INTERVAL	(60 * 5)
46346a3df9fSSalil struct hclge_hw_stats {
46446a3df9fSSalil 	struct hclge_mac_stats      mac_stats;
46546a3df9fSSalil 	struct hclge_64_bit_stats   all_64_bit_stats;
46646a3df9fSSalil 	struct hclge_32_bit_stats   all_32_bit_stats;
467c5f65480SJian Shen 	u32 stats_timer;
46846a3df9fSSalil };
46946a3df9fSSalil 
4705f6ea83fSPeng Li struct hclge_vlan_type_cfg {
4715f6ea83fSPeng Li 	u16 rx_ot_fst_vlan_type;
4725f6ea83fSPeng Li 	u16 rx_ot_sec_vlan_type;
4735f6ea83fSPeng Li 	u16 rx_in_fst_vlan_type;
4745f6ea83fSPeng Li 	u16 rx_in_sec_vlan_type;
4755f6ea83fSPeng Li 	u16 tx_ot_vlan_type;
4765f6ea83fSPeng Li 	u16 tx_in_vlan_type;
4775f6ea83fSPeng Li };
4785f6ea83fSPeng Li 
479dc8131d8SYunsheng Lin #define HCLGE_VPORT_NUM 256
48046a3df9fSSalil struct hclge_dev {
48146a3df9fSSalil 	struct pci_dev *pdev;
48246a3df9fSSalil 	struct hnae3_ae_dev *ae_dev;
48346a3df9fSSalil 	struct hclge_hw hw;
484466b0c00SLipeng 	struct hclge_misc_vector misc_vector;
48546a3df9fSSalil 	struct hclge_hw_stats hw_stats;
48646a3df9fSSalil 	unsigned long state;
48746a3df9fSSalil 
4884ed340abSLipeng 	enum hnae3_reset_type reset_type;
489cb1b9f77SSalil Mehta 	unsigned long reset_request;	/* reset has been requested */
490ca1d7669SSalil Mehta 	unsigned long reset_pending;	/* client rst is pending to be served */
49146a3df9fSSalil 	u32 fw_version;
49246a3df9fSSalil 	u16 num_vmdq_vport;		/* Num vmdq vport this PF has set up */
49346a3df9fSSalil 	u16 num_tqps;			/* Num task queue pairs of this PF */
49446a3df9fSSalil 	u16 num_req_vfs;		/* Num VFs requested for this PF */
49546a3df9fSSalil 
49646a3df9fSSalil 	/* Base task tqp physical id of this PF */
49746a3df9fSSalil 	u16 base_tqp_pid;
49846a3df9fSSalil 	u16 alloc_rss_size;		/* Allocated RSS task queue */
49946a3df9fSSalil 	u16 rss_size_max;		/* HW defined max RSS task queue */
50046a3df9fSSalil 
50146a3df9fSSalil 	/* Num of guaranteed filters for this PF */
50246a3df9fSSalil 	u16 fdir_pf_filter_count;
50346a3df9fSSalil 	u16 num_alloc_vport;		/* Num vports this driver supports */
50446a3df9fSSalil 	u32 numa_node_mask;
50546a3df9fSSalil 	u16 rx_buf_len;
50646a3df9fSSalil 	u16 num_desc;
50746a3df9fSSalil 	u8 hw_tc_map;
50846a3df9fSSalil 	u8 tc_num_last_time;
50946a3df9fSSalil 	enum hclge_fc_mode fc_mode_last_time;
51046a3df9fSSalil 
51146a3df9fSSalil #define HCLGE_FLAG_TC_BASE_SCH_MODE		1
51246a3df9fSSalil #define HCLGE_FLAG_VNET_BASE_SCH_MODE		2
51346a3df9fSSalil 	u8 tx_sch_mode;
514cacde272SYunsheng Lin 	u8 tc_max;
515cacde272SYunsheng Lin 	u8 pfc_max;
51646a3df9fSSalil 
51746a3df9fSSalil 	u8 default_up;
518cacde272SYunsheng Lin 	u8 dcbx_cap;
51946a3df9fSSalil 	struct hclge_tm_info tm_info;
52046a3df9fSSalil 
52146a3df9fSSalil 	u16 num_msi;
52246a3df9fSSalil 	u16 num_msi_left;
52346a3df9fSSalil 	u16 num_msi_used;
52446a3df9fSSalil 	u32 base_msi_vector;
52546a3df9fSSalil 	u16 *vector_status;
526887c3820SSalil Mehta 	int *vector_irq;
527887c3820SSalil Mehta 	u16 num_roce_msi;	/* Num of roce vectors for this PF */
528887c3820SSalil Mehta 	int roce_base_vector;
52946a3df9fSSalil 
53046a3df9fSSalil 	u16 pending_udp_bitmap;
53146a3df9fSSalil 
53246a3df9fSSalil 	u16 rx_itr_default;
53346a3df9fSSalil 	u16 tx_itr_default;
53446a3df9fSSalil 
53546a3df9fSSalil 	u16 adminq_work_limit; /* Num of admin receive queue desc to process */
53646a3df9fSSalil 	unsigned long service_timer_period;
53746a3df9fSSalil 	unsigned long service_timer_previous;
53846a3df9fSSalil 	struct timer_list service_timer;
53946a3df9fSSalil 	struct work_struct service_task;
540cb1b9f77SSalil Mehta 	struct work_struct rst_service_task;
541c1a81619SSalil Mehta 	struct work_struct mbx_service_task;
54246a3df9fSSalil 
54346a3df9fSSalil 	bool cur_promisc;
54446a3df9fSSalil 	int num_alloc_vfs;	/* Actual number of VFs allocated */
54546a3df9fSSalil 
54646a3df9fSSalil 	struct hclge_tqp *htqp;
54746a3df9fSSalil 	struct hclge_vport *vport;
54846a3df9fSSalil 
54946a3df9fSSalil 	struct dentry *hclge_dbgfs;
55046a3df9fSSalil 
55146a3df9fSSalil 	struct hnae3_client *nic_client;
55246a3df9fSSalil 	struct hnae3_client *roce_client;
55346a3df9fSSalil 
554887c3820SSalil Mehta #define HCLGE_FLAG_MAIN			BIT(0)
555887c3820SSalil Mehta #define HCLGE_FLAG_DCB_CAPABLE		BIT(1)
556887c3820SSalil Mehta #define HCLGE_FLAG_DCB_ENABLE		BIT(2)
557887c3820SSalil Mehta #define HCLGE_FLAG_MQPRIO_ENABLE	BIT(3)
55846a3df9fSSalil 	u32 flag;
55946a3df9fSSalil 
56046a3df9fSSalil 	u32 pkt_buf_size; /* Total pf buf size for tx/rx */
56146a3df9fSSalil 	u32 mps; /* Max packet size */
56246a3df9fSSalil 
56346a3df9fSSalil 	enum hclge_mta_dmac_sel_type mta_mac_sel_type;
56446a3df9fSSalil 	bool enable_mta; /* Mutilcast filter enable */
5655f6ea83fSPeng Li 
5665f6ea83fSPeng Li 	struct hclge_vlan_type_cfg vlan_type_cfg;
567716aaac1SJian Shen 
568dc8131d8SYunsheng Lin 	unsigned long vlan_table[VLAN_N_VID][BITS_TO_LONGS(HCLGE_VPORT_NUM)];
5695f6ea83fSPeng Li };
5705f6ea83fSPeng Li 
5715f6ea83fSPeng Li /* VPort level vlan tag configuration for TX direction */
5725f6ea83fSPeng Li struct hclge_tx_vtag_cfg {
573dcb35cceSPeng Li 	bool accept_tag1;	/* Whether accept tag1 packet from host */
574dcb35cceSPeng Li 	bool accept_untag1;	/* Whether accept untag1 packet from host */
575dcb35cceSPeng Li 	bool accept_tag2;
576dcb35cceSPeng Li 	bool accept_untag2;
5775f6ea83fSPeng Li 	bool insert_tag1_en;	/* Whether insert inner vlan tag */
5785f6ea83fSPeng Li 	bool insert_tag2_en;	/* Whether insert outer vlan tag */
5795f6ea83fSPeng Li 	u16  default_tag1;	/* The default inner vlan tag to insert */
5805f6ea83fSPeng Li 	u16  default_tag2;	/* The default outer vlan tag to insert */
5815f6ea83fSPeng Li };
5825f6ea83fSPeng Li 
5835f6ea83fSPeng Li /* VPort level vlan tag configuration for RX direction */
5845f6ea83fSPeng Li struct hclge_rx_vtag_cfg {
5855f6ea83fSPeng Li 	bool strip_tag1_en;	/* Whether strip inner vlan tag */
5865f6ea83fSPeng Li 	bool strip_tag2_en;	/* Whether strip outer vlan tag */
5875f6ea83fSPeng Li 	bool vlan1_vlan_prionly;/* Inner VLAN Tag up to descriptor Enable */
5885f6ea83fSPeng Li 	bool vlan2_vlan_prionly;/* Outer VLAN Tag up to descriptor Enable */
58946a3df9fSSalil };
59046a3df9fSSalil 
5916f2af429SYunsheng Lin struct hclge_rss_tuple_cfg {
5926f2af429SYunsheng Lin 	u8 ipv4_tcp_en;
5936f2af429SYunsheng Lin 	u8 ipv4_udp_en;
5946f2af429SYunsheng Lin 	u8 ipv4_sctp_en;
5956f2af429SYunsheng Lin 	u8 ipv4_fragment_en;
5966f2af429SYunsheng Lin 	u8 ipv6_tcp_en;
5976f2af429SYunsheng Lin 	u8 ipv6_udp_en;
5986f2af429SYunsheng Lin 	u8 ipv6_sctp_en;
5996f2af429SYunsheng Lin 	u8 ipv6_fragment_en;
6006f2af429SYunsheng Lin };
6016f2af429SYunsheng Lin 
60246a3df9fSSalil struct hclge_vport {
60346a3df9fSSalil 	u16 alloc_tqps;	/* Allocated Tx/Rx queues */
60446a3df9fSSalil 
60546a3df9fSSalil 	u8  rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */
60646a3df9fSSalil 	/* User configured lookup table entries */
60746a3df9fSSalil 	u8  rss_indirection_tbl[HCLGE_RSS_IND_TBL_SIZE];
60889523cfaSYunsheng Lin 	int rss_algo;		/* User configured hash algorithm */
6096f2af429SYunsheng Lin 	/* User configured rss tuple sets */
6106f2af429SYunsheng Lin 	struct hclge_rss_tuple_cfg rss_tuple_sets;
61189523cfaSYunsheng Lin 
61268ece54eSYunsheng Lin 	u16 alloc_rss_size;
61346a3df9fSSalil 
61446a3df9fSSalil 	u16 qs_offset;
61546a3df9fSSalil 	u16 bw_limit;		/* VSI BW Limit (0 = disabled) */
61646a3df9fSSalil 	u8  dwrr;
61746a3df9fSSalil 
6185f6ea83fSPeng Li 	struct hclge_tx_vtag_cfg  txvlan_cfg;
6195f6ea83fSPeng Li 	struct hclge_rx_vtag_cfg  rxvlan_cfg;
6205f6ea83fSPeng Li 
62146a3df9fSSalil 	int vport_id;
62246a3df9fSSalil 	struct hclge_dev *back;  /* Back reference to associated dev */
62346a3df9fSSalil 	struct hnae3_handle nic;
62446a3df9fSSalil 	struct hnae3_handle roce;
62540cca1c5SXi Wang 
62640cca1c5SXi Wang 	bool accept_mta_mc; /* whether to accept mta filter multicast */
62740cca1c5SXi Wang 	unsigned long mta_shadow[BITS_TO_LONGS(HCLGE_MTA_TBL_SIZE)];
62846a3df9fSSalil };
62946a3df9fSSalil 
63046a3df9fSSalil void hclge_promisc_param_init(struct hclge_promisc_param *param, bool en_uc,
63146a3df9fSSalil 			      bool en_mc, bool en_bc, int vport_id);
63246a3df9fSSalil 
63346a3df9fSSalil int hclge_add_uc_addr_common(struct hclge_vport *vport,
63446a3df9fSSalil 			     const unsigned char *addr);
63546a3df9fSSalil int hclge_rm_uc_addr_common(struct hclge_vport *vport,
63646a3df9fSSalil 			    const unsigned char *addr);
63746a3df9fSSalil int hclge_add_mc_addr_common(struct hclge_vport *vport,
63846a3df9fSSalil 			     const unsigned char *addr);
63946a3df9fSSalil int hclge_rm_mc_addr_common(struct hclge_vport *vport,
64046a3df9fSSalil 			    const unsigned char *addr);
64146a3df9fSSalil 
64246a3df9fSSalil int hclge_cfg_func_mta_filter(struct hclge_dev *hdev,
64346a3df9fSSalil 			      u8 func_id,
64446a3df9fSSalil 			      bool enable);
64540cca1c5SXi Wang int hclge_update_mta_status_common(struct hclge_vport *vport,
64640cca1c5SXi Wang 				   unsigned long *status,
64740cca1c5SXi Wang 				   u16 idx,
64840cca1c5SXi Wang 				   u16 count,
64940cca1c5SXi Wang 				   bool update_filter);
65040cca1c5SXi Wang 
65146a3df9fSSalil struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle);
65284e095d6SSalil Mehta int hclge_bind_ring_with_vector(struct hclge_vport *vport,
65384e095d6SSalil Mehta 				int vector_id, bool en,
65446a3df9fSSalil 				struct hnae3_ring_chain_node *ring_chain);
65584e095d6SSalil Mehta 
65646a3df9fSSalil static inline int hclge_get_queue_id(struct hnae3_queue *queue)
65746a3df9fSSalil {
65846a3df9fSSalil 	struct hclge_tqp *tqp = container_of(queue, struct hclge_tqp, q);
65946a3df9fSSalil 
66046a3df9fSSalil 	return tqp->index;
66146a3df9fSSalil }
66246a3df9fSSalil 
66346a3df9fSSalil int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex);
664dc8131d8SYunsheng Lin int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
665dc8131d8SYunsheng Lin 			  u16 vlan_id, bool is_kill);
666b2641e2aSYunsheng Lin int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable);
66777f255c1SYunsheng Lin 
66877f255c1SYunsheng Lin int hclge_buffer_alloc(struct hclge_dev *hdev);
66977f255c1SYunsheng Lin int hclge_rss_init_hw(struct hclge_dev *hdev);
670268f5dfaSYunsheng Lin void hclge_rss_indir_init_cfg(struct hclge_dev *hdev);
671dde1a86eSSalil Mehta 
672dde1a86eSSalil Mehta void hclge_mbx_handler(struct hclge_dev *hdev);
67384e095d6SSalil Mehta void hclge_reset_tqp(struct hnae3_handle *handle, u16 queue_id);
6741a426f8bSPeng Li void hclge_reset_vf_queue(struct hclge_vport *vport, u16 queue_id);
6751770a7a3SPeng Li int hclge_cfg_flowctrl(struct hclge_dev *hdev);
6762bfbd35dSSalil Mehta int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id);
67746a3df9fSSalil #endif
678