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