xref: /linux/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h (revision a6c51c2608f404419652121d8236b526d0bd2cd9)
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>
1546a3df9fSSalil #include "hclge_cmd.h"
1646a3df9fSSalil #include "hnae3.h"
1746a3df9fSSalil 
1846a3df9fSSalil #define HCLGE_MOD_VERSION "v1.0"
1946a3df9fSSalil #define HCLGE_DRIVER_NAME "hclge"
2046a3df9fSSalil 
2146a3df9fSSalil #define HCLGE_INVALID_VPORT 0xffff
2246a3df9fSSalil 
2346a3df9fSSalil #define HCLGE_ROCE_VECTOR_OFFSET	96
2446a3df9fSSalil 
2546a3df9fSSalil #define HCLGE_PF_CFG_BLOCK_SIZE		32
2646a3df9fSSalil #define HCLGE_PF_CFG_DESC_NUM \
2746a3df9fSSalil 	(HCLGE_PF_CFG_BLOCK_SIZE / HCLGE_CFG_RD_LEN_BYTES)
2846a3df9fSSalil 
2946a3df9fSSalil #define HCLGE_VECTOR_REG_BASE		0x20000
30466b0c00SLipeng #define HCLGE_MISC_VECTOR_REG_BASE	0x20400
3146a3df9fSSalil 
3246a3df9fSSalil #define HCLGE_VECTOR_REG_OFFSET		0x4
3346a3df9fSSalil #define HCLGE_VECTOR_VF_OFFSET		0x100000
3446a3df9fSSalil 
3546a3df9fSSalil #define HCLGE_RSS_IND_TBL_SIZE		512
365392902dSYunsheng Lin #define HCLGE_RSS_SET_BITMAP_MSK	GENMASK(15, 0)
3746a3df9fSSalil #define HCLGE_RSS_KEY_SIZE		40
3846a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_TOEPLITZ	0
3946a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SIMPLE	1
4046a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_SYMMETRIC	2
4146a3df9fSSalil #define HCLGE_RSS_HASH_ALGO_MASK	0xf
4246a3df9fSSalil #define HCLGE_RSS_CFG_TBL_NUM \
4346a3df9fSSalil 	(HCLGE_RSS_IND_TBL_SIZE / HCLGE_RSS_CFG_TBL_SIZE)
4446a3df9fSSalil 
45f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_OTHER	GENMASK(3, 0)
46f7db940aSLipeng #define HCLGE_RSS_INPUT_TUPLE_SCTP	GENMASK(4, 0)
47f7db940aSLipeng #define HCLGE_D_PORT_BIT		BIT(0)
48f7db940aSLipeng #define HCLGE_S_PORT_BIT		BIT(1)
49f7db940aSLipeng #define HCLGE_D_IP_BIT			BIT(2)
50f7db940aSLipeng #define HCLGE_S_IP_BIT			BIT(3)
51f7db940aSLipeng #define HCLGE_V_TAG_BIT			BIT(4)
52f7db940aSLipeng 
5346a3df9fSSalil #define HCLGE_RSS_TC_SIZE_0		1
5446a3df9fSSalil #define HCLGE_RSS_TC_SIZE_1		2
5546a3df9fSSalil #define HCLGE_RSS_TC_SIZE_2		4
5646a3df9fSSalil #define HCLGE_RSS_TC_SIZE_3		8
5746a3df9fSSalil #define HCLGE_RSS_TC_SIZE_4		16
5846a3df9fSSalil #define HCLGE_RSS_TC_SIZE_5		32
5946a3df9fSSalil #define HCLGE_RSS_TC_SIZE_6		64
6046a3df9fSSalil #define HCLGE_RSS_TC_SIZE_7		128
6146a3df9fSSalil 
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 
7646a3df9fSSalil #define HCLGE_PHY_MDIX_CTRL_S		(5)
775392902dSYunsheng Lin #define HCLGE_PHY_MDIX_CTRL_M		GENMASK(6, 5)
7846a3df9fSSalil 
7946a3df9fSSalil #define HCLGE_PHY_MDIX_STATUS_B	(6)
8046a3df9fSSalil #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 
864ed340abSLipeng /* Reset related Registers */
874ed340abSLipeng #define HCLGE_MISC_RESET_STS_REG	0x20700
884ed340abSLipeng #define HCLGE_GLOBAL_RESET_REG		0x20A00
894ed340abSLipeng #define HCLGE_GLOBAL_RESET_BIT		0x0
904ed340abSLipeng #define HCLGE_CORE_RESET_BIT		0x1
914ed340abSLipeng #define HCLGE_FUN_RST_ING		0x20C00
924ed340abSLipeng #define HCLGE_FUN_RST_ING_B		0
934ed340abSLipeng 
944ed340abSLipeng /* Vector0 register bits define */
954ed340abSLipeng #define HCLGE_VECTOR0_GLOBALRESET_INT_B	5
964ed340abSLipeng #define HCLGE_VECTOR0_CORERESET_INT_B	6
974ed340abSLipeng #define HCLGE_VECTOR0_IMPRESET_INT_B	7
984ed340abSLipeng 
99c1a81619SSalil Mehta /* Vector0 interrupt CMDQ event source register(RW) */
100c1a81619SSalil Mehta #define HCLGE_VECTOR0_CMDQ_SRC_REG	0x27100
101c1a81619SSalil Mehta /* CMDQ register bits for RX event(=MBX event) */
102c1a81619SSalil Mehta #define HCLGE_VECTOR0_RX_CMDQ_INT_B	1
103c1a81619SSalil Mehta 
10446a3df9fSSalil enum HCLGE_DEV_STATE {
10546a3df9fSSalil 	HCLGE_STATE_REINITING,
10646a3df9fSSalil 	HCLGE_STATE_DOWN,
10746a3df9fSSalil 	HCLGE_STATE_DISABLED,
10846a3df9fSSalil 	HCLGE_STATE_REMOVING,
10946a3df9fSSalil 	HCLGE_STATE_SERVICE_INITED,
11046a3df9fSSalil 	HCLGE_STATE_SERVICE_SCHED,
111cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_SERVICE_SCHED,
112cb1b9f77SSalil Mehta 	HCLGE_STATE_RST_HANDLING,
113c1a81619SSalil Mehta 	HCLGE_STATE_MBX_SERVICE_SCHED,
11446a3df9fSSalil 	HCLGE_STATE_MBX_HANDLING,
11546a3df9fSSalil 	HCLGE_STATE_MAX
11646a3df9fSSalil };
11746a3df9fSSalil 
118ca1d7669SSalil Mehta enum hclge_evt_cause {
119ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_RST,
120ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_MBX,
121ca1d7669SSalil Mehta 	HCLGE_VECTOR0_EVENT_OTHER,
122ca1d7669SSalil Mehta };
123ca1d7669SSalil Mehta 
12446a3df9fSSalil #define HCLGE_MPF_ENBALE 1
12546a3df9fSSalil struct hclge_caps {
12646a3df9fSSalil 	u16 num_tqp;
12746a3df9fSSalil 	u16 num_buffer_cell;
12846a3df9fSSalil 	u32 flag;
12946a3df9fSSalil 	u16 vmdq;
13046a3df9fSSalil };
13146a3df9fSSalil 
13246a3df9fSSalil enum HCLGE_MAC_SPEED {
13346a3df9fSSalil 	HCLGE_MAC_SPEED_10M	= 10,		/* 10 Mbps */
13446a3df9fSSalil 	HCLGE_MAC_SPEED_100M	= 100,		/* 100 Mbps */
13546a3df9fSSalil 	HCLGE_MAC_SPEED_1G	= 1000,		/* 1000 Mbps   = 1 Gbps */
13646a3df9fSSalil 	HCLGE_MAC_SPEED_10G	= 10000,	/* 10000 Mbps  = 10 Gbps */
13746a3df9fSSalil 	HCLGE_MAC_SPEED_25G	= 25000,	/* 25000 Mbps  = 25 Gbps */
13846a3df9fSSalil 	HCLGE_MAC_SPEED_40G	= 40000,	/* 40000 Mbps  = 40 Gbps */
13946a3df9fSSalil 	HCLGE_MAC_SPEED_50G	= 50000,	/* 50000 Mbps  = 50 Gbps */
14046a3df9fSSalil 	HCLGE_MAC_SPEED_100G	= 100000	/* 100000 Mbps = 100 Gbps */
14146a3df9fSSalil };
14246a3df9fSSalil 
14346a3df9fSSalil enum HCLGE_MAC_DUPLEX {
14446a3df9fSSalil 	HCLGE_MAC_HALF,
14546a3df9fSSalil 	HCLGE_MAC_FULL
14646a3df9fSSalil };
14746a3df9fSSalil 
14846a3df9fSSalil enum hclge_mta_dmac_sel_type {
14946a3df9fSSalil 	HCLGE_MAC_ADDR_47_36,
15046a3df9fSSalil 	HCLGE_MAC_ADDR_46_35,
15146a3df9fSSalil 	HCLGE_MAC_ADDR_45_34,
15246a3df9fSSalil 	HCLGE_MAC_ADDR_44_33,
15346a3df9fSSalil };
15446a3df9fSSalil 
15546a3df9fSSalil struct hclge_mac {
15646a3df9fSSalil 	u8 phy_addr;
15746a3df9fSSalil 	u8 flag;
15846a3df9fSSalil 	u8 media_type;
15946a3df9fSSalil 	u8 mac_addr[ETH_ALEN];
16046a3df9fSSalil 	u8 autoneg;
16146a3df9fSSalil 	u8 duplex;
16246a3df9fSSalil 	u32 speed;
16346a3df9fSSalil 	int link;	/* store the link status of mac & phy (if phy exit)*/
16446a3df9fSSalil 	struct phy_device *phydev;
16546a3df9fSSalil 	struct mii_bus *mdio_bus;
16646a3df9fSSalil 	phy_interface_t phy_if;
16746a3df9fSSalil };
16846a3df9fSSalil 
16946a3df9fSSalil struct hclge_hw {
17046a3df9fSSalil 	void __iomem *io_base;
17146a3df9fSSalil 	struct hclge_mac mac;
17246a3df9fSSalil 	int num_vec;
17346a3df9fSSalil 	struct hclge_cmq cmq;
17446a3df9fSSalil 	struct hclge_caps caps;
17546a3df9fSSalil 	void *back;
17646a3df9fSSalil };
17746a3df9fSSalil 
17846a3df9fSSalil /* TQP stats */
17946a3df9fSSalil struct hlcge_tqp_stats {
18046a3df9fSSalil 	/* query_tqp_tx_queue_statistics ,opcode id:  0x0B03 */
18146a3df9fSSalil 	u64 rcb_tx_ring_pktnum_rcd; /* 32bit */
18246a3df9fSSalil 	/* query_tqp_rx_queue_statistics ,opcode id:  0x0B13 */
18346a3df9fSSalil 	u64 rcb_rx_ring_pktnum_rcd; /* 32bit */
18446a3df9fSSalil };
18546a3df9fSSalil 
18646a3df9fSSalil struct hclge_tqp {
18746a3df9fSSalil 	struct device *dev;	/* Device for DMA mapping */
18846a3df9fSSalil 	struct hnae3_queue q;
18946a3df9fSSalil 	struct hlcge_tqp_stats tqp_stats;
19046a3df9fSSalil 	u16 index;	/* Global index in a NIC controller */
19146a3df9fSSalil 
19246a3df9fSSalil 	bool alloced;
19346a3df9fSSalil };
19446a3df9fSSalil 
19546a3df9fSSalil enum hclge_fc_mode {
19646a3df9fSSalil 	HCLGE_FC_NONE,
19746a3df9fSSalil 	HCLGE_FC_RX_PAUSE,
19846a3df9fSSalil 	HCLGE_FC_TX_PAUSE,
19946a3df9fSSalil 	HCLGE_FC_FULL,
20046a3df9fSSalil 	HCLGE_FC_PFC,
20146a3df9fSSalil 	HCLGE_FC_DEFAULT
20246a3df9fSSalil };
20346a3df9fSSalil 
20446a3df9fSSalil #define HCLGE_PG_NUM		4
20546a3df9fSSalil #define HCLGE_SCH_MODE_SP	0
20646a3df9fSSalil #define HCLGE_SCH_MODE_DWRR	1
20746a3df9fSSalil struct hclge_pg_info {
20846a3df9fSSalil 	u8 pg_id;
20946a3df9fSSalil 	u8 pg_sch_mode;		/* 0: sp; 1: dwrr */
21046a3df9fSSalil 	u8 tc_bit_map;
21146a3df9fSSalil 	u32 bw_limit;
21246a3df9fSSalil 	u8 tc_dwrr[HNAE3_MAX_TC];
21346a3df9fSSalil };
21446a3df9fSSalil 
21546a3df9fSSalil struct hclge_tc_info {
21646a3df9fSSalil 	u8 tc_id;
21746a3df9fSSalil 	u8 tc_sch_mode;		/* 0: sp; 1: dwrr */
21846a3df9fSSalil 	u8 pgid;
21946a3df9fSSalil 	u32 bw_limit;
22046a3df9fSSalil };
22146a3df9fSSalil 
22246a3df9fSSalil struct hclge_cfg {
22346a3df9fSSalil 	u8 vmdq_vport_num;
22446a3df9fSSalil 	u8 tc_num;
22546a3df9fSSalil 	u16 tqp_desc_num;
22646a3df9fSSalil 	u16 rx_buf_len;
2270e7a40cdSPeng Li 	u16 rss_size_max;
22846a3df9fSSalil 	u8 phy_addr;
22946a3df9fSSalil 	u8 media_type;
23046a3df9fSSalil 	u8 mac_addr[ETH_ALEN];
23146a3df9fSSalil 	u8 default_speed;
23246a3df9fSSalil 	u32 numa_node_map;
23346a3df9fSSalil };
23446a3df9fSSalil 
23546a3df9fSSalil struct hclge_tm_info {
23646a3df9fSSalil 	u8 num_tc;
23746a3df9fSSalil 	u8 num_pg;      /* It must be 1 if vNET-Base schd */
23846a3df9fSSalil 	u8 pg_dwrr[HCLGE_PG_NUM];
239c5795c53SYunsheng Lin 	u8 prio_tc[HNAE3_MAX_USER_PRIO];
24046a3df9fSSalil 	struct hclge_pg_info pg_info[HCLGE_PG_NUM];
24146a3df9fSSalil 	struct hclge_tc_info tc_info[HNAE3_MAX_TC];
24246a3df9fSSalil 	enum hclge_fc_mode fc_mode;
24346a3df9fSSalil 	u8 hw_pfc_map; /* Allow for packet drop or not on this TC */
24446a3df9fSSalil };
24546a3df9fSSalil 
24646a3df9fSSalil struct hclge_comm_stats_str {
24746a3df9fSSalil 	char desc[ETH_GSTRING_LEN];
24846a3df9fSSalil 	unsigned long offset;
24946a3df9fSSalil };
25046a3df9fSSalil 
25146a3df9fSSalil /* all 64bit stats, opcode id: 0x0030 */
25246a3df9fSSalil struct hclge_64_bit_stats {
25346a3df9fSSalil 	/* query_igu_stat */
25446a3df9fSSalil 	u64 igu_rx_oversize_pkt;
25546a3df9fSSalil 	u64 igu_rx_undersize_pkt;
25646a3df9fSSalil 	u64 igu_rx_out_all_pkt;
25746a3df9fSSalil 	u64 igu_rx_uni_pkt;
25846a3df9fSSalil 	u64 igu_rx_multi_pkt;
25946a3df9fSSalil 	u64 igu_rx_broad_pkt;
26046a3df9fSSalil 	u64 rsv0;
26146a3df9fSSalil 
26246a3df9fSSalil 	/* query_egu_stat */
26346a3df9fSSalil 	u64 egu_tx_out_all_pkt;
26446a3df9fSSalil 	u64 egu_tx_uni_pkt;
26546a3df9fSSalil 	u64 egu_tx_multi_pkt;
26646a3df9fSSalil 	u64 egu_tx_broad_pkt;
26746a3df9fSSalil 
26846a3df9fSSalil 	/* ssu_ppp packet stats */
26946a3df9fSSalil 	u64 ssu_ppp_mac_key_num;
27046a3df9fSSalil 	u64 ssu_ppp_host_key_num;
27146a3df9fSSalil 	u64 ppp_ssu_mac_rlt_num;
27246a3df9fSSalil 	u64 ppp_ssu_host_rlt_num;
27346a3df9fSSalil 
27446a3df9fSSalil 	/* ssu_tx_in_out_dfx_stats */
27546a3df9fSSalil 	u64 ssu_tx_in_num;
27646a3df9fSSalil 	u64 ssu_tx_out_num;
27746a3df9fSSalil 	/* ssu_rx_in_out_dfx_stats */
27846a3df9fSSalil 	u64 ssu_rx_in_num;
27946a3df9fSSalil 	u64 ssu_rx_out_num;
28046a3df9fSSalil };
28146a3df9fSSalil 
28246a3df9fSSalil /* all 32bit stats, opcode id: 0x0031 */
28346a3df9fSSalil struct hclge_32_bit_stats {
28446a3df9fSSalil 	u64 igu_rx_err_pkt;
28546a3df9fSSalil 	u64 igu_rx_no_eof_pkt;
28646a3df9fSSalil 	u64 igu_rx_no_sof_pkt;
28746a3df9fSSalil 	u64 egu_tx_1588_pkt;
28846a3df9fSSalil 	u64 egu_tx_err_pkt;
28946a3df9fSSalil 	u64 ssu_full_drop_num;
29046a3df9fSSalil 	u64 ssu_part_drop_num;
29146a3df9fSSalil 	u64 ppp_key_drop_num;
29246a3df9fSSalil 	u64 ppp_rlt_drop_num;
29346a3df9fSSalil 	u64 ssu_key_drop_num;
29446a3df9fSSalil 	u64 pkt_curr_buf_cnt;
29546a3df9fSSalil 	u64 qcn_fb_rcv_cnt;
29646a3df9fSSalil 	u64 qcn_fb_drop_cnt;
29746a3df9fSSalil 	u64 qcn_fb_invaild_cnt;
29846a3df9fSSalil 	u64 rsv0;
29946a3df9fSSalil 	u64 rx_packet_tc0_in_cnt;
30046a3df9fSSalil 	u64 rx_packet_tc1_in_cnt;
30146a3df9fSSalil 	u64 rx_packet_tc2_in_cnt;
30246a3df9fSSalil 	u64 rx_packet_tc3_in_cnt;
30346a3df9fSSalil 	u64 rx_packet_tc4_in_cnt;
30446a3df9fSSalil 	u64 rx_packet_tc5_in_cnt;
30546a3df9fSSalil 	u64 rx_packet_tc6_in_cnt;
30646a3df9fSSalil 	u64 rx_packet_tc7_in_cnt;
30746a3df9fSSalil 	u64 rx_packet_tc0_out_cnt;
30846a3df9fSSalil 	u64 rx_packet_tc1_out_cnt;
30946a3df9fSSalil 	u64 rx_packet_tc2_out_cnt;
31046a3df9fSSalil 	u64 rx_packet_tc3_out_cnt;
31146a3df9fSSalil 	u64 rx_packet_tc4_out_cnt;
31246a3df9fSSalil 	u64 rx_packet_tc5_out_cnt;
31346a3df9fSSalil 	u64 rx_packet_tc6_out_cnt;
31446a3df9fSSalil 	u64 rx_packet_tc7_out_cnt;
31546a3df9fSSalil 
31646a3df9fSSalil 	/* Tx packet level statistics */
31746a3df9fSSalil 	u64 tx_packet_tc0_in_cnt;
31846a3df9fSSalil 	u64 tx_packet_tc1_in_cnt;
31946a3df9fSSalil 	u64 tx_packet_tc2_in_cnt;
32046a3df9fSSalil 	u64 tx_packet_tc3_in_cnt;
32146a3df9fSSalil 	u64 tx_packet_tc4_in_cnt;
32246a3df9fSSalil 	u64 tx_packet_tc5_in_cnt;
32346a3df9fSSalil 	u64 tx_packet_tc6_in_cnt;
32446a3df9fSSalil 	u64 tx_packet_tc7_in_cnt;
32546a3df9fSSalil 	u64 tx_packet_tc0_out_cnt;
32646a3df9fSSalil 	u64 tx_packet_tc1_out_cnt;
32746a3df9fSSalil 	u64 tx_packet_tc2_out_cnt;
32846a3df9fSSalil 	u64 tx_packet_tc3_out_cnt;
32946a3df9fSSalil 	u64 tx_packet_tc4_out_cnt;
33046a3df9fSSalil 	u64 tx_packet_tc5_out_cnt;
33146a3df9fSSalil 	u64 tx_packet_tc6_out_cnt;
33246a3df9fSSalil 	u64 tx_packet_tc7_out_cnt;
33346a3df9fSSalil 
33446a3df9fSSalil 	/* packet buffer statistics */
33546a3df9fSSalil 	u64 pkt_curr_buf_tc0_cnt;
33646a3df9fSSalil 	u64 pkt_curr_buf_tc1_cnt;
33746a3df9fSSalil 	u64 pkt_curr_buf_tc2_cnt;
33846a3df9fSSalil 	u64 pkt_curr_buf_tc3_cnt;
33946a3df9fSSalil 	u64 pkt_curr_buf_tc4_cnt;
34046a3df9fSSalil 	u64 pkt_curr_buf_tc5_cnt;
34146a3df9fSSalil 	u64 pkt_curr_buf_tc6_cnt;
34246a3df9fSSalil 	u64 pkt_curr_buf_tc7_cnt;
34346a3df9fSSalil 
34446a3df9fSSalil 	u64 mb_uncopy_num;
34546a3df9fSSalil 	u64 lo_pri_unicast_rlt_drop_num;
34646a3df9fSSalil 	u64 hi_pri_multicast_rlt_drop_num;
34746a3df9fSSalil 	u64 lo_pri_multicast_rlt_drop_num;
34846a3df9fSSalil 	u64 rx_oq_drop_pkt_cnt;
34946a3df9fSSalil 	u64 tx_oq_drop_pkt_cnt;
35046a3df9fSSalil 	u64 nic_l2_err_drop_pkt_cnt;
35146a3df9fSSalil 	u64 roc_l2_err_drop_pkt_cnt;
35246a3df9fSSalil };
35346a3df9fSSalil 
35446a3df9fSSalil /* mac stats ,opcode id: 0x0032 */
35546a3df9fSSalil struct hclge_mac_stats {
35646a3df9fSSalil 	u64 mac_tx_mac_pause_num;
35746a3df9fSSalil 	u64 mac_rx_mac_pause_num;
35846a3df9fSSalil 	u64 mac_tx_pfc_pri0_pkt_num;
35946a3df9fSSalil 	u64 mac_tx_pfc_pri1_pkt_num;
36046a3df9fSSalil 	u64 mac_tx_pfc_pri2_pkt_num;
36146a3df9fSSalil 	u64 mac_tx_pfc_pri3_pkt_num;
36246a3df9fSSalil 	u64 mac_tx_pfc_pri4_pkt_num;
36346a3df9fSSalil 	u64 mac_tx_pfc_pri5_pkt_num;
36446a3df9fSSalil 	u64 mac_tx_pfc_pri6_pkt_num;
36546a3df9fSSalil 	u64 mac_tx_pfc_pri7_pkt_num;
36646a3df9fSSalil 	u64 mac_rx_pfc_pri0_pkt_num;
36746a3df9fSSalil 	u64 mac_rx_pfc_pri1_pkt_num;
36846a3df9fSSalil 	u64 mac_rx_pfc_pri2_pkt_num;
36946a3df9fSSalil 	u64 mac_rx_pfc_pri3_pkt_num;
37046a3df9fSSalil 	u64 mac_rx_pfc_pri4_pkt_num;
37146a3df9fSSalil 	u64 mac_rx_pfc_pri5_pkt_num;
37246a3df9fSSalil 	u64 mac_rx_pfc_pri6_pkt_num;
37346a3df9fSSalil 	u64 mac_rx_pfc_pri7_pkt_num;
37446a3df9fSSalil 	u64 mac_tx_total_pkt_num;
37546a3df9fSSalil 	u64 mac_tx_total_oct_num;
37646a3df9fSSalil 	u64 mac_tx_good_pkt_num;
37746a3df9fSSalil 	u64 mac_tx_bad_pkt_num;
37846a3df9fSSalil 	u64 mac_tx_good_oct_num;
37946a3df9fSSalil 	u64 mac_tx_bad_oct_num;
38046a3df9fSSalil 	u64 mac_tx_uni_pkt_num;
38146a3df9fSSalil 	u64 mac_tx_multi_pkt_num;
38246a3df9fSSalil 	u64 mac_tx_broad_pkt_num;
38346a3df9fSSalil 	u64 mac_tx_undersize_pkt_num;
38446a3df9fSSalil 	u64 mac_tx_overrsize_pkt_num;
38546a3df9fSSalil 	u64 mac_tx_64_oct_pkt_num;
38646a3df9fSSalil 	u64 mac_tx_65_127_oct_pkt_num;
38746a3df9fSSalil 	u64 mac_tx_128_255_oct_pkt_num;
38846a3df9fSSalil 	u64 mac_tx_256_511_oct_pkt_num;
38946a3df9fSSalil 	u64 mac_tx_512_1023_oct_pkt_num;
39046a3df9fSSalil 	u64 mac_tx_1024_1518_oct_pkt_num;
39146a3df9fSSalil 	u64 mac_tx_1519_max_oct_pkt_num;
39246a3df9fSSalil 	u64 mac_rx_total_pkt_num;
39346a3df9fSSalil 	u64 mac_rx_total_oct_num;
39446a3df9fSSalil 	u64 mac_rx_good_pkt_num;
39546a3df9fSSalil 	u64 mac_rx_bad_pkt_num;
39646a3df9fSSalil 	u64 mac_rx_good_oct_num;
39746a3df9fSSalil 	u64 mac_rx_bad_oct_num;
39846a3df9fSSalil 	u64 mac_rx_uni_pkt_num;
39946a3df9fSSalil 	u64 mac_rx_multi_pkt_num;
40046a3df9fSSalil 	u64 mac_rx_broad_pkt_num;
40146a3df9fSSalil 	u64 mac_rx_undersize_pkt_num;
40246a3df9fSSalil 	u64 mac_rx_overrsize_pkt_num;
40346a3df9fSSalil 	u64 mac_rx_64_oct_pkt_num;
40446a3df9fSSalil 	u64 mac_rx_65_127_oct_pkt_num;
40546a3df9fSSalil 	u64 mac_rx_128_255_oct_pkt_num;
40646a3df9fSSalil 	u64 mac_rx_256_511_oct_pkt_num;
40746a3df9fSSalil 	u64 mac_rx_512_1023_oct_pkt_num;
40846a3df9fSSalil 	u64 mac_rx_1024_1518_oct_pkt_num;
40946a3df9fSSalil 	u64 mac_rx_1519_max_oct_pkt_num;
41046a3df9fSSalil 
411*a6c51c26SJian Shen 	u64 mac_tx_fragment_pkt_num;
412*a6c51c26SJian Shen 	u64 mac_tx_undermin_pkt_num;
413*a6c51c26SJian Shen 	u64 mac_tx_jabber_pkt_num;
414*a6c51c26SJian Shen 	u64 mac_tx_err_all_pkt_num;
415*a6c51c26SJian Shen 	u64 mac_tx_from_app_good_pkt_num;
416*a6c51c26SJian Shen 	u64 mac_tx_from_app_bad_pkt_num;
417*a6c51c26SJian Shen 	u64 mac_rx_fragment_pkt_num;
418*a6c51c26SJian Shen 	u64 mac_rx_undermin_pkt_num;
419*a6c51c26SJian Shen 	u64 mac_rx_jabber_pkt_num;
420*a6c51c26SJian Shen 	u64 mac_rx_fcs_err_pkt_num;
421*a6c51c26SJian Shen 	u64 mac_rx_send_app_good_pkt_num;
422*a6c51c26SJian Shen 	u64 mac_rx_send_app_bad_pkt_num;
42346a3df9fSSalil };
42446a3df9fSSalil 
42546a3df9fSSalil struct hclge_hw_stats {
42646a3df9fSSalil 	struct hclge_mac_stats      mac_stats;
42746a3df9fSSalil 	struct hclge_64_bit_stats   all_64_bit_stats;
42846a3df9fSSalil 	struct hclge_32_bit_stats   all_32_bit_stats;
42946a3df9fSSalil };
43046a3df9fSSalil 
4315f6ea83fSPeng Li struct hclge_vlan_type_cfg {
4325f6ea83fSPeng Li 	u16 rx_ot_fst_vlan_type;
4335f6ea83fSPeng Li 	u16 rx_ot_sec_vlan_type;
4345f6ea83fSPeng Li 	u16 rx_in_fst_vlan_type;
4355f6ea83fSPeng Li 	u16 rx_in_sec_vlan_type;
4365f6ea83fSPeng Li 	u16 tx_ot_vlan_type;
4375f6ea83fSPeng Li 	u16 tx_in_vlan_type;
4385f6ea83fSPeng Li };
4395f6ea83fSPeng Li 
44046a3df9fSSalil struct hclge_dev {
44146a3df9fSSalil 	struct pci_dev *pdev;
44246a3df9fSSalil 	struct hnae3_ae_dev *ae_dev;
44346a3df9fSSalil 	struct hclge_hw hw;
444466b0c00SLipeng 	struct hclge_misc_vector misc_vector;
44546a3df9fSSalil 	struct hclge_hw_stats hw_stats;
44646a3df9fSSalil 	unsigned long state;
44746a3df9fSSalil 
4484ed340abSLipeng 	enum hnae3_reset_type reset_type;
449cb1b9f77SSalil Mehta 	unsigned long reset_request;	/* reset has been requested */
450ca1d7669SSalil Mehta 	unsigned long reset_pending;	/* client rst is pending to be served */
45146a3df9fSSalil 	u32 fw_version;
45246a3df9fSSalil 	u16 num_vmdq_vport;		/* Num vmdq vport this PF has set up */
45346a3df9fSSalil 	u16 num_tqps;			/* Num task queue pairs of this PF */
45446a3df9fSSalil 	u16 num_req_vfs;		/* Num VFs requested for this PF */
45546a3df9fSSalil 
45646a3df9fSSalil 	/* Base task tqp physical id of this PF */
45746a3df9fSSalil 	u16 base_tqp_pid;
45846a3df9fSSalil 	u16 alloc_rss_size;		/* Allocated RSS task queue */
45946a3df9fSSalil 	u16 rss_size_max;		/* HW defined max RSS task queue */
46046a3df9fSSalil 
46146a3df9fSSalil 	/* Num of guaranteed filters for this PF */
46246a3df9fSSalil 	u16 fdir_pf_filter_count;
46346a3df9fSSalil 	u16 num_alloc_vport;		/* Num vports this driver supports */
46446a3df9fSSalil 	u32 numa_node_mask;
46546a3df9fSSalil 	u16 rx_buf_len;
46646a3df9fSSalil 	u16 num_desc;
46746a3df9fSSalil 	u8 hw_tc_map;
46846a3df9fSSalil 	u8 tc_num_last_time;
46946a3df9fSSalil 	enum hclge_fc_mode fc_mode_last_time;
47046a3df9fSSalil 
47146a3df9fSSalil #define HCLGE_FLAG_TC_BASE_SCH_MODE		1
47246a3df9fSSalil #define HCLGE_FLAG_VNET_BASE_SCH_MODE		2
47346a3df9fSSalil 	u8 tx_sch_mode;
474cacde272SYunsheng Lin 	u8 tc_max;
475cacde272SYunsheng Lin 	u8 pfc_max;
47646a3df9fSSalil 
47746a3df9fSSalil 	u8 default_up;
478cacde272SYunsheng Lin 	u8 dcbx_cap;
47946a3df9fSSalil 	struct hclge_tm_info tm_info;
48046a3df9fSSalil 
48146a3df9fSSalil 	u16 num_msi;
48246a3df9fSSalil 	u16 num_msi_left;
48346a3df9fSSalil 	u16 num_msi_used;
48446a3df9fSSalil 	u32 base_msi_vector;
48546a3df9fSSalil 	u16 *vector_status;
486887c3820SSalil Mehta 	int *vector_irq;
487887c3820SSalil Mehta 	u16 num_roce_msi;	/* Num of roce vectors for this PF */
488887c3820SSalil Mehta 	int roce_base_vector;
48946a3df9fSSalil 
49046a3df9fSSalil 	u16 pending_udp_bitmap;
49146a3df9fSSalil 
49246a3df9fSSalil 	u16 rx_itr_default;
49346a3df9fSSalil 	u16 tx_itr_default;
49446a3df9fSSalil 
49546a3df9fSSalil 	u16 adminq_work_limit; /* Num of admin receive queue desc to process */
49646a3df9fSSalil 	unsigned long service_timer_period;
49746a3df9fSSalil 	unsigned long service_timer_previous;
49846a3df9fSSalil 	struct timer_list service_timer;
49946a3df9fSSalil 	struct work_struct service_task;
500cb1b9f77SSalil Mehta 	struct work_struct rst_service_task;
501c1a81619SSalil Mehta 	struct work_struct mbx_service_task;
50246a3df9fSSalil 
50346a3df9fSSalil 	bool cur_promisc;
50446a3df9fSSalil 	int num_alloc_vfs;	/* Actual number of VFs allocated */
50546a3df9fSSalil 
50646a3df9fSSalil 	struct hclge_tqp *htqp;
50746a3df9fSSalil 	struct hclge_vport *vport;
50846a3df9fSSalil 
50946a3df9fSSalil 	struct dentry *hclge_dbgfs;
51046a3df9fSSalil 
51146a3df9fSSalil 	struct hnae3_client *nic_client;
51246a3df9fSSalil 	struct hnae3_client *roce_client;
51346a3df9fSSalil 
514887c3820SSalil Mehta #define HCLGE_FLAG_MAIN			BIT(0)
515887c3820SSalil Mehta #define HCLGE_FLAG_DCB_CAPABLE		BIT(1)
516887c3820SSalil Mehta #define HCLGE_FLAG_DCB_ENABLE		BIT(2)
517887c3820SSalil Mehta #define HCLGE_FLAG_MQPRIO_ENABLE	BIT(3)
51846a3df9fSSalil 	u32 flag;
51946a3df9fSSalil 
52046a3df9fSSalil 	u32 pkt_buf_size; /* Total pf buf size for tx/rx */
52146a3df9fSSalil 	u32 mps; /* Max packet size */
52246a3df9fSSalil 
52346a3df9fSSalil 	enum hclge_mta_dmac_sel_type mta_mac_sel_type;
52446a3df9fSSalil 	bool enable_mta; /* Mutilcast filter enable */
52546a3df9fSSalil 	bool accept_mta_mc; /* Whether accept mta filter multicast */
5265f6ea83fSPeng Li 
5275f6ea83fSPeng Li 	struct hclge_vlan_type_cfg vlan_type_cfg;
5285f6ea83fSPeng Li };
5295f6ea83fSPeng Li 
5305f6ea83fSPeng Li /* VPort level vlan tag configuration for TX direction */
5315f6ea83fSPeng Li struct hclge_tx_vtag_cfg {
5325f6ea83fSPeng Li 	bool accept_tag;	/* Whether accept tagged packet from host */
5335f6ea83fSPeng Li 	bool accept_untag;	/* Whether accept untagged packet from host */
5345f6ea83fSPeng Li 	bool insert_tag1_en;	/* Whether insert inner vlan tag */
5355f6ea83fSPeng Li 	bool insert_tag2_en;	/* Whether insert outer vlan tag */
5365f6ea83fSPeng Li 	u16  default_tag1;	/* The default inner vlan tag to insert */
5375f6ea83fSPeng Li 	u16  default_tag2;	/* The default outer vlan tag to insert */
5385f6ea83fSPeng Li };
5395f6ea83fSPeng Li 
5405f6ea83fSPeng Li /* VPort level vlan tag configuration for RX direction */
5415f6ea83fSPeng Li struct hclge_rx_vtag_cfg {
5425f6ea83fSPeng Li 	bool strip_tag1_en;	/* Whether strip inner vlan tag */
5435f6ea83fSPeng Li 	bool strip_tag2_en;	/* Whether strip outer vlan tag */
5445f6ea83fSPeng Li 	bool vlan1_vlan_prionly;/* Inner VLAN Tag up to descriptor Enable */
5455f6ea83fSPeng Li 	bool vlan2_vlan_prionly;/* Outer VLAN Tag up to descriptor Enable */
54646a3df9fSSalil };
54746a3df9fSSalil 
54846a3df9fSSalil struct hclge_vport {
54946a3df9fSSalil 	u16 alloc_tqps;	/* Allocated Tx/Rx queues */
55046a3df9fSSalil 
55146a3df9fSSalil 	u8  rss_hash_key[HCLGE_RSS_KEY_SIZE]; /* User configured hash keys */
55246a3df9fSSalil 	/* User configured lookup table entries */
55346a3df9fSSalil 	u8  rss_indirection_tbl[HCLGE_RSS_IND_TBL_SIZE];
55468ece54eSYunsheng Lin 	u16 alloc_rss_size;
55546a3df9fSSalil 
55646a3df9fSSalil 	u16 qs_offset;
55746a3df9fSSalil 	u16 bw_limit;		/* VSI BW Limit (0 = disabled) */
55846a3df9fSSalil 	u8  dwrr;
55946a3df9fSSalil 
5605f6ea83fSPeng Li 	struct hclge_tx_vtag_cfg  txvlan_cfg;
5615f6ea83fSPeng Li 	struct hclge_rx_vtag_cfg  rxvlan_cfg;
5625f6ea83fSPeng Li 
56346a3df9fSSalil 	int vport_id;
56446a3df9fSSalil 	struct hclge_dev *back;  /* Back reference to associated dev */
56546a3df9fSSalil 	struct hnae3_handle nic;
56646a3df9fSSalil 	struct hnae3_handle roce;
56746a3df9fSSalil };
56846a3df9fSSalil 
56946a3df9fSSalil void hclge_promisc_param_init(struct hclge_promisc_param *param, bool en_uc,
57046a3df9fSSalil 			      bool en_mc, bool en_bc, int vport_id);
57146a3df9fSSalil 
57246a3df9fSSalil int hclge_add_uc_addr_common(struct hclge_vport *vport,
57346a3df9fSSalil 			     const unsigned char *addr);
57446a3df9fSSalil int hclge_rm_uc_addr_common(struct hclge_vport *vport,
57546a3df9fSSalil 			    const unsigned char *addr);
57646a3df9fSSalil int hclge_add_mc_addr_common(struct hclge_vport *vport,
57746a3df9fSSalil 			     const unsigned char *addr);
57846a3df9fSSalil int hclge_rm_mc_addr_common(struct hclge_vport *vport,
57946a3df9fSSalil 			    const unsigned char *addr);
58046a3df9fSSalil 
58146a3df9fSSalil int hclge_cfg_func_mta_filter(struct hclge_dev *hdev,
58246a3df9fSSalil 			      u8 func_id,
58346a3df9fSSalil 			      bool enable);
58446a3df9fSSalil struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle);
58584e095d6SSalil Mehta int hclge_bind_ring_with_vector(struct hclge_vport *vport,
58684e095d6SSalil Mehta 				int vector_id, bool en,
58746a3df9fSSalil 				struct hnae3_ring_chain_node *ring_chain);
58884e095d6SSalil Mehta 
58946a3df9fSSalil static inline int hclge_get_queue_id(struct hnae3_queue *queue)
59046a3df9fSSalil {
59146a3df9fSSalil 	struct hclge_tqp *tqp = container_of(queue, struct hclge_tqp, q);
59246a3df9fSSalil 
59346a3df9fSSalil 	return tqp->index;
59446a3df9fSSalil }
59546a3df9fSSalil 
59646a3df9fSSalil int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex);
59746a3df9fSSalil int hclge_set_vf_vlan_common(struct hclge_dev *vport, int vfid,
59846a3df9fSSalil 			     bool is_kill, u16 vlan, u8 qos, __be16 proto);
59977f255c1SYunsheng Lin 
60077f255c1SYunsheng Lin int hclge_buffer_alloc(struct hclge_dev *hdev);
60177f255c1SYunsheng Lin int hclge_rss_init_hw(struct hclge_dev *hdev);
602dde1a86eSSalil Mehta 
603dde1a86eSSalil Mehta void hclge_mbx_handler(struct hclge_dev *hdev);
60484e095d6SSalil Mehta void hclge_reset_tqp(struct hnae3_handle *handle, u16 queue_id);
6051770a7a3SPeng Li int hclge_cfg_flowctrl(struct hclge_dev *hdev);
60646a3df9fSSalil #endif
607