xref: /dpdk/drivers/net/hinic/base/hinic_pmd_niccfg.h (revision 3596d7b607831205048efcf818e451526f6c9598)
12d5fd101SZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause
22d5fd101SZiyang Xuan  * Copyright(c) 2017 Huawei Technologies Co., Ltd
32d5fd101SZiyang Xuan  */
42d5fd101SZiyang Xuan 
52d5fd101SZiyang Xuan #ifndef _HINIC_PMD_NICCFG_H_
62d5fd101SZiyang Xuan #define _HINIC_PMD_NICCFG_H_
72d5fd101SZiyang Xuan 
82d5fd101SZiyang Xuan #define OS_VF_ID_TO_HW(os_vf_id) ((os_vf_id) + 1)
92d5fd101SZiyang Xuan #define HW_VF_ID_TO_OS(hw_vf_id) ((hw_vf_id) - 1)
102d5fd101SZiyang Xuan 
112d5fd101SZiyang Xuan #define HINIC_VLAN_PRIORITY_SHIFT	13
122d5fd101SZiyang Xuan 
132d5fd101SZiyang Xuan #define HINIC_RSS_INDIR_SIZE		256
142d5fd101SZiyang Xuan #define HINIC_DCB_TC_MAX		0x8
152d5fd101SZiyang Xuan #define HINIC_DCB_UP_MAX		0x8
162d5fd101SZiyang Xuan #define HINIC_DCB_PG_MAX		0x8
172d5fd101SZiyang Xuan #define HINIC_RSS_KEY_SIZE		40
182d5fd101SZiyang Xuan 
192d5fd101SZiyang Xuan #define HINIC_MAX_NUM_RQ		64
202d5fd101SZiyang Xuan 
212d5fd101SZiyang Xuan #define ANTI_ATTACK_DEFAULT_CIR		500000
222d5fd101SZiyang Xuan #define ANTI_ATTACK_DEFAULT_XIR		600000
232d5fd101SZiyang Xuan #define ANTI_ATTACK_DEFAULT_CBS		10000000
242d5fd101SZiyang Xuan #define ANTI_ATTACK_DEFAULT_XBS		12000000
252d5fd101SZiyang Xuan 
262d5fd101SZiyang Xuan #define NIC_RSS_INDIR_SIZE		256
272d5fd101SZiyang Xuan #define NIC_RSS_KEY_SIZE		40
282d5fd101SZiyang Xuan #define NIC_RSS_CMD_TEMP_ALLOC		0x01
292d5fd101SZiyang Xuan #define NIC_RSS_CMD_TEMP_FREE		0x02
302d5fd101SZiyang Xuan #define NIC_DCB_UP_MAX			0x8
312d5fd101SZiyang Xuan 
322d5fd101SZiyang Xuan enum hinic_rss_hash_type {
332d5fd101SZiyang Xuan 	HINIC_RSS_HASH_ENGINE_TYPE_XOR = 0,
342d5fd101SZiyang Xuan 	HINIC_RSS_HASH_ENGINE_TYPE_TOEP,
352d5fd101SZiyang Xuan 
362d5fd101SZiyang Xuan 	HINIC_RSS_HASH_ENGINE_TYPE_MAX,
372d5fd101SZiyang Xuan };
382d5fd101SZiyang Xuan 
392d5fd101SZiyang Xuan struct nic_port_info {
402d5fd101SZiyang Xuan 	u8	port_type;
412d5fd101SZiyang Xuan 	u8	autoneg_cap;
422d5fd101SZiyang Xuan 	u8	autoneg_state;
432d5fd101SZiyang Xuan 	u8	duplex;
442d5fd101SZiyang Xuan 	u8	speed;
452d5fd101SZiyang Xuan };
462d5fd101SZiyang Xuan 
472d5fd101SZiyang Xuan enum nic_speed_level {
482d5fd101SZiyang Xuan 	LINK_SPEED_10MB = 0,
492d5fd101SZiyang Xuan 	LINK_SPEED_100MB,
502d5fd101SZiyang Xuan 	LINK_SPEED_1GB,
512d5fd101SZiyang Xuan 	LINK_SPEED_10GB,
522d5fd101SZiyang Xuan 	LINK_SPEED_25GB,
532d5fd101SZiyang Xuan 	LINK_SPEED_40GB,
542d5fd101SZiyang Xuan 	LINK_SPEED_100GB,
552d5fd101SZiyang Xuan 	LINK_SPEED_MAX
562d5fd101SZiyang Xuan };
572d5fd101SZiyang Xuan 
582d5fd101SZiyang Xuan enum hinic_link_status {
592d5fd101SZiyang Xuan 	HINIC_LINK_DOWN = 0,
602d5fd101SZiyang Xuan 	HINIC_LINK_UP
612d5fd101SZiyang Xuan };
622d5fd101SZiyang Xuan 
632d5fd101SZiyang Xuan struct hinic_up_ets_cfg {
642d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
652d5fd101SZiyang Xuan 
662d5fd101SZiyang Xuan 	u8 port_id;
672d5fd101SZiyang Xuan 	u8 rsvd1[3];
682d5fd101SZiyang Xuan 	u8 up_tc[HINIC_DCB_UP_MAX];
692d5fd101SZiyang Xuan 	u8 pg_bw[HINIC_DCB_PG_MAX];
702d5fd101SZiyang Xuan 	u8 pgid[HINIC_DCB_UP_MAX];
712d5fd101SZiyang Xuan 	u8 up_bw[HINIC_DCB_UP_MAX];
722d5fd101SZiyang Xuan 	u8 prio[HINIC_DCB_PG_MAX];
732d5fd101SZiyang Xuan };
742d5fd101SZiyang Xuan 
752d5fd101SZiyang Xuan struct nic_pause_config {
762d5fd101SZiyang Xuan 	u32 auto_neg;
772d5fd101SZiyang Xuan 	u32 rx_pause;
782d5fd101SZiyang Xuan 	u32 tx_pause;
792d5fd101SZiyang Xuan };
802d5fd101SZiyang Xuan 
812d5fd101SZiyang Xuan struct nic_rss_type {
822d5fd101SZiyang Xuan 	u8 tcp_ipv6_ext;
832d5fd101SZiyang Xuan 	u8 ipv6_ext;
842d5fd101SZiyang Xuan 	u8 tcp_ipv6;
852d5fd101SZiyang Xuan 	u8 ipv6;
862d5fd101SZiyang Xuan 	u8 tcp_ipv4;
872d5fd101SZiyang Xuan 	u8 ipv4;
882d5fd101SZiyang Xuan 	u8 udp_ipv6;
892d5fd101SZiyang Xuan 	u8 udp_ipv4;
902d5fd101SZiyang Xuan };
912d5fd101SZiyang Xuan 
922d5fd101SZiyang Xuan enum hinic_rx_mod {
932d5fd101SZiyang Xuan 	HINIC_RX_MODE_UC = 1 << 0,
942d5fd101SZiyang Xuan 	HINIC_RX_MODE_MC = 1 << 1,
952d5fd101SZiyang Xuan 	HINIC_RX_MODE_BC = 1 << 2,
962d5fd101SZiyang Xuan 	HINIC_RX_MODE_MC_ALL = 1 << 3,
972d5fd101SZiyang Xuan 	HINIC_RX_MODE_PROMISC = 1 << 4,
982d5fd101SZiyang Xuan };
992d5fd101SZiyang Xuan 
1002d5fd101SZiyang Xuan enum hinic_link_mode {
1012d5fd101SZiyang Xuan 	HINIC_10GE_BASE_KR = 0,
1022d5fd101SZiyang Xuan 	HINIC_40GE_BASE_KR4 = 1,
1032d5fd101SZiyang Xuan 	HINIC_40GE_BASE_CR4 = 2,
1042d5fd101SZiyang Xuan 	HINIC_100GE_BASE_KR4 = 3,
1052d5fd101SZiyang Xuan 	HINIC_100GE_BASE_CR4 = 4,
1062d5fd101SZiyang Xuan 	HINIC_25GE_BASE_KR_S = 5,
1072d5fd101SZiyang Xuan 	HINIC_25GE_BASE_CR_S = 6,
1082d5fd101SZiyang Xuan 	HINIC_25GE_BASE_KR = 7,
1092d5fd101SZiyang Xuan 	HINIC_25GE_BASE_CR = 8,
1102d5fd101SZiyang Xuan 	HINIC_GE_BASE_KX = 9,
1112d5fd101SZiyang Xuan 	HINIC_LINK_MODE_NUMBERS,
1122d5fd101SZiyang Xuan 
1132d5fd101SZiyang Xuan 	HINIC_SUPPORTED_UNKNOWN = 0xFFFF,
1142d5fd101SZiyang Xuan };
1152d5fd101SZiyang Xuan 
1162d5fd101SZiyang Xuan #define HINIC_DEFAULT_RX_MODE	(HINIC_RX_MODE_UC | HINIC_RX_MODE_MC |	\
1172d5fd101SZiyang Xuan 				HINIC_RX_MODE_BC)
1182d5fd101SZiyang Xuan 
1192d5fd101SZiyang Xuan #define HINIC_PORT_DISABLE		0x0
1202d5fd101SZiyang Xuan #define HINIC_PORT_ENABLE		0x3
1212d5fd101SZiyang Xuan 
1222d5fd101SZiyang Xuan struct hinic_vport_stats {
1232d5fd101SZiyang Xuan 	u64 tx_unicast_pkts_vport;
1242d5fd101SZiyang Xuan 	u64 tx_unicast_bytes_vport;
1252d5fd101SZiyang Xuan 	u64 tx_multicast_pkts_vport;
1262d5fd101SZiyang Xuan 	u64 tx_multicast_bytes_vport;
1272d5fd101SZiyang Xuan 	u64 tx_broadcast_pkts_vport;
1282d5fd101SZiyang Xuan 	u64 tx_broadcast_bytes_vport;
1292d5fd101SZiyang Xuan 
1302d5fd101SZiyang Xuan 	u64 rx_unicast_pkts_vport;
1312d5fd101SZiyang Xuan 	u64 rx_unicast_bytes_vport;
1322d5fd101SZiyang Xuan 	u64 rx_multicast_pkts_vport;
1332d5fd101SZiyang Xuan 	u64 rx_multicast_bytes_vport;
1342d5fd101SZiyang Xuan 	u64 rx_broadcast_pkts_vport;
1352d5fd101SZiyang Xuan 	u64 rx_broadcast_bytes_vport;
1362d5fd101SZiyang Xuan 
1372d5fd101SZiyang Xuan 	u64 tx_discard_vport;
1382d5fd101SZiyang Xuan 	u64 rx_discard_vport;
1392d5fd101SZiyang Xuan 	u64 tx_err_vport;
1402d5fd101SZiyang Xuan 	u64 rx_err_vport; /* rx checksum err pkts in ucode */
1412d5fd101SZiyang Xuan };
1422d5fd101SZiyang Xuan 
1432d5fd101SZiyang Xuan struct hinic_phy_port_stats {
1442d5fd101SZiyang Xuan 	u64 mac_rx_total_pkt_num;
1452d5fd101SZiyang Xuan 	u64 mac_rx_total_oct_num;
1462d5fd101SZiyang Xuan 	u64 mac_rx_bad_pkt_num;
1472d5fd101SZiyang Xuan 	u64 mac_rx_bad_oct_num;
1482d5fd101SZiyang Xuan 	u64 mac_rx_good_pkt_num;
1492d5fd101SZiyang Xuan 	u64 mac_rx_good_oct_num;
1502d5fd101SZiyang Xuan 	u64 mac_rx_uni_pkt_num;
1512d5fd101SZiyang Xuan 	u64 mac_rx_multi_pkt_num;
1522d5fd101SZiyang Xuan 	u64 mac_rx_broad_pkt_num;
1532d5fd101SZiyang Xuan 
1542d5fd101SZiyang Xuan 	u64 mac_tx_total_pkt_num;
1552d5fd101SZiyang Xuan 	u64 mac_tx_total_oct_num;
1562d5fd101SZiyang Xuan 	u64 mac_tx_bad_pkt_num;
1572d5fd101SZiyang Xuan 	u64 mac_tx_bad_oct_num;
1582d5fd101SZiyang Xuan 	u64 mac_tx_good_pkt_num;
1592d5fd101SZiyang Xuan 	u64 mac_tx_good_oct_num;
1602d5fd101SZiyang Xuan 	u64 mac_tx_uni_pkt_num;
1612d5fd101SZiyang Xuan 	u64 mac_tx_multi_pkt_num;
1622d5fd101SZiyang Xuan 	u64 mac_tx_broad_pkt_num;
1632d5fd101SZiyang Xuan 
1642d5fd101SZiyang Xuan 	u64 mac_rx_fragment_pkt_num;
1652d5fd101SZiyang Xuan 	u64 mac_rx_undersize_pkt_num;
1662d5fd101SZiyang Xuan 	u64 mac_rx_undermin_pkt_num;
1672d5fd101SZiyang Xuan 	u64 mac_rx_64_oct_pkt_num;
1682d5fd101SZiyang Xuan 	u64 mac_rx_65_127_oct_pkt_num;
1692d5fd101SZiyang Xuan 	u64 mac_rx_128_255_oct_pkt_num;
1702d5fd101SZiyang Xuan 	u64 mac_rx_256_511_oct_pkt_num;
1712d5fd101SZiyang Xuan 	u64 mac_rx_512_1023_oct_pkt_num;
1722d5fd101SZiyang Xuan 	u64 mac_rx_1024_1518_oct_pkt_num;
1732d5fd101SZiyang Xuan 	u64 mac_rx_1519_2047_oct_pkt_num;
1742d5fd101SZiyang Xuan 	u64 mac_rx_2048_4095_oct_pkt_num;
1752d5fd101SZiyang Xuan 	u64 mac_rx_4096_8191_oct_pkt_num;
1762d5fd101SZiyang Xuan 	u64 mac_rx_8192_9216_oct_pkt_num;
1772d5fd101SZiyang Xuan 	u64 mac_rx_9217_12287_oct_pkt_num;
1782d5fd101SZiyang Xuan 	u64 mac_rx_12288_16383_oct_pkt_num;
1792d5fd101SZiyang Xuan 	u64 mac_rx_1519_max_bad_pkt_num;
1802d5fd101SZiyang Xuan 	u64 mac_rx_1519_max_good_pkt_num;
1812d5fd101SZiyang Xuan 	u64 mac_rx_oversize_pkt_num;
1822d5fd101SZiyang Xuan 	u64 mac_rx_jabber_pkt_num;
1832d5fd101SZiyang Xuan 
1842d5fd101SZiyang Xuan 	u64 mac_rx_mac_pause_num;
1852d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pkt_num;
1862d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri0_pkt_num;
1872d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri1_pkt_num;
1882d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri2_pkt_num;
1892d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri3_pkt_num;
1902d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri4_pkt_num;
1912d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri5_pkt_num;
1922d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri6_pkt_num;
1932d5fd101SZiyang Xuan 	u64 mac_rx_pfc_pri7_pkt_num;
1942d5fd101SZiyang Xuan 	u64 mac_rx_mac_control_pkt_num;
1952d5fd101SZiyang Xuan 	u64 mac_rx_y1731_pkt_num;
1962d5fd101SZiyang Xuan 	u64 mac_rx_sym_err_pkt_num;
1972d5fd101SZiyang Xuan 	u64 mac_rx_fcs_err_pkt_num;
1982d5fd101SZiyang Xuan 	u64 mac_rx_send_app_good_pkt_num;
1992d5fd101SZiyang Xuan 	u64 mac_rx_send_app_bad_pkt_num;
2002d5fd101SZiyang Xuan 
2012d5fd101SZiyang Xuan 	u64 mac_tx_fragment_pkt_num;
2022d5fd101SZiyang Xuan 	u64 mac_tx_undersize_pkt_num;
2032d5fd101SZiyang Xuan 	u64 mac_tx_undermin_pkt_num;
2042d5fd101SZiyang Xuan 	u64 mac_tx_64_oct_pkt_num;
2052d5fd101SZiyang Xuan 	u64 mac_tx_65_127_oct_pkt_num;
2062d5fd101SZiyang Xuan 	u64 mac_tx_128_255_oct_pkt_num;
2072d5fd101SZiyang Xuan 	u64 mac_tx_256_511_oct_pkt_num;
2082d5fd101SZiyang Xuan 	u64 mac_tx_512_1023_oct_pkt_num;
2092d5fd101SZiyang Xuan 	u64 mac_tx_1024_1518_oct_pkt_num;
2102d5fd101SZiyang Xuan 	u64 mac_tx_1519_2047_oct_pkt_num;
2112d5fd101SZiyang Xuan 	u64 mac_tx_2048_4095_oct_pkt_num;
2122d5fd101SZiyang Xuan 	u64 mac_tx_4096_8191_oct_pkt_num;
2132d5fd101SZiyang Xuan 	u64 mac_tx_8192_9216_oct_pkt_num;
2142d5fd101SZiyang Xuan 	u64 mac_tx_9217_12287_oct_pkt_num;
2152d5fd101SZiyang Xuan 	u64 mac_tx_12288_16383_oct_pkt_num;
2162d5fd101SZiyang Xuan 	u64 mac_tx_1519_max_bad_pkt_num;
2172d5fd101SZiyang Xuan 	u64 mac_tx_1519_max_good_pkt_num;
2182d5fd101SZiyang Xuan 	u64 mac_tx_oversize_pkt_num;
2192d5fd101SZiyang Xuan 	u64 mac_trans_jabber_pkt_num;
2202d5fd101SZiyang Xuan 
2212d5fd101SZiyang Xuan 	u64 mac_tx_mac_pause_num;
2222d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pkt_num;
2232d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri0_pkt_num;
2242d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri1_pkt_num;
2252d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri2_pkt_num;
2262d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri3_pkt_num;
2272d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri4_pkt_num;
2282d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri5_pkt_num;
2292d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri6_pkt_num;
2302d5fd101SZiyang Xuan 	u64 mac_tx_pfc_pri7_pkt_num;
2312d5fd101SZiyang Xuan 	u64 mac_tx_mac_control_pkt_num;
2322d5fd101SZiyang Xuan 	u64 mac_tx_y1731_pkt_num;
2332d5fd101SZiyang Xuan 	u64 mac_tx_1588_pkt_num;
2342d5fd101SZiyang Xuan 	u64 mac_tx_err_all_pkt_num;
2352d5fd101SZiyang Xuan 	u64 mac_tx_from_app_good_pkt_num;
2362d5fd101SZiyang Xuan 	u64 mac_tx_from_app_bad_pkt_num;
2372d5fd101SZiyang Xuan 
2382d5fd101SZiyang Xuan 	u64 rx_higig2_ext_pkts_port;
2392d5fd101SZiyang Xuan 	u64 rx_higig2_message_pkts_port;
2402d5fd101SZiyang Xuan 	u64 rx_higig2_error_pkts_port;
2412d5fd101SZiyang Xuan 	u64 rx_higig2_cpu_ctrl_pkts_port;
2422d5fd101SZiyang Xuan 	u64 rx_higig2_unicast_pkts_port;
2432d5fd101SZiyang Xuan 	u64 rx_higig2_broadcast_pkts_port;
2442d5fd101SZiyang Xuan 	u64 rx_higig2_l2_multicast_pkts;
2452d5fd101SZiyang Xuan 	u64 rx_higig2_l3_multicast_pkts;
2462d5fd101SZiyang Xuan 
2472d5fd101SZiyang Xuan 	u64 tx_higig2_message_pkts_port;
2482d5fd101SZiyang Xuan 	u64 tx_higig2_ext_pkts_port;
2492d5fd101SZiyang Xuan 	u64 tx_higig2_cpu_ctrl_pkts_port;
2502d5fd101SZiyang Xuan 	u64 tx_higig2_unicast_pkts_port;
2512d5fd101SZiyang Xuan 	u64 tx_higig2_broadcast_pkts_port;
2522d5fd101SZiyang Xuan 	u64 tx_higig2_l2_multicast_pkts;
2532d5fd101SZiyang Xuan 	u64 tx_higig2_l3_multicast_pkts;
2542d5fd101SZiyang Xuan };
2552d5fd101SZiyang Xuan 
2562d5fd101SZiyang Xuan enum hinic_link_follow_status {
2572d5fd101SZiyang Xuan 	HINIC_LINK_FOLLOW_DEFAULT,
2582d5fd101SZiyang Xuan 	HINIC_LINK_FOLLOW_PORT,
2592d5fd101SZiyang Xuan 	HINIC_LINK_FOLLOW_SEPARATE,
2602d5fd101SZiyang Xuan 	HINIC_LINK_FOLLOW_STATUS_MAX,
2612d5fd101SZiyang Xuan };
2622d5fd101SZiyang Xuan 
2632d5fd101SZiyang Xuan #define HINIC_PORT_STATS_VERSION	0
2642d5fd101SZiyang Xuan struct hinic_port_stats_info {
2652d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
2662d5fd101SZiyang Xuan 
2672d5fd101SZiyang Xuan 	u16 func_id;
2682d5fd101SZiyang Xuan 	u16 rsvd1;
2692d5fd101SZiyang Xuan 	u32 stats_version;
2702d5fd101SZiyang Xuan 	u32 stats_size;
2712d5fd101SZiyang Xuan };
2722d5fd101SZiyang Xuan 
2732d5fd101SZiyang Xuan struct hinic_port_stats {
2742d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
2752d5fd101SZiyang Xuan 
2762d5fd101SZiyang Xuan 	struct hinic_phy_port_stats stats;
2772d5fd101SZiyang Xuan };
2782d5fd101SZiyang Xuan 
2792d5fd101SZiyang Xuan struct hinic_cmd_vport_stats {
2802d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
2812d5fd101SZiyang Xuan 
2822d5fd101SZiyang Xuan 	struct hinic_vport_stats stats;
2832d5fd101SZiyang Xuan };
2842d5fd101SZiyang Xuan 
2852d5fd101SZiyang Xuan struct hinic_clear_port_stats {
2862d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
2872d5fd101SZiyang Xuan 
2882d5fd101SZiyang Xuan 	u16 func_id;
2892d5fd101SZiyang Xuan 	u16 rsvd;
2902d5fd101SZiyang Xuan 	u32  stats_version;
2912d5fd101SZiyang Xuan 	u32  stats_size;
2922d5fd101SZiyang Xuan };
2932d5fd101SZiyang Xuan 
2942d5fd101SZiyang Xuan struct hinic_clear_vport_stats {
2952d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
2962d5fd101SZiyang Xuan 
2972d5fd101SZiyang Xuan 	u16 func_id;
2982d5fd101SZiyang Xuan 	u16 rsvd;
2992d5fd101SZiyang Xuan 	u32  stats_version;
3002d5fd101SZiyang Xuan 	u32  stats_size;
3012d5fd101SZiyang Xuan };
3022d5fd101SZiyang Xuan 
3032d5fd101SZiyang Xuan struct hinic_fast_recycled_mode {
3042d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3052d5fd101SZiyang Xuan 
3062d5fd101SZiyang Xuan 	u16 func_id;
3072d5fd101SZiyang Xuan 	/*
3082d5fd101SZiyang Xuan 	 * 1: enable fast recycle, available in dpdk mode,
3092d5fd101SZiyang Xuan 	 * 0: normal mode, available in kernel nic mode
3102d5fd101SZiyang Xuan 	 */
3112d5fd101SZiyang Xuan 	u8 fast_recycled_mode;
3122d5fd101SZiyang Xuan 	u8 rsvd1;
3132d5fd101SZiyang Xuan };
3142d5fd101SZiyang Xuan 
3152d5fd101SZiyang Xuan struct hinic_function_table {
3162d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3172d5fd101SZiyang Xuan 
3182d5fd101SZiyang Xuan 	u16	func_id;
3192d5fd101SZiyang Xuan 	u16	rx_wqe_buf_size;
3202d5fd101SZiyang Xuan 	u32	mtu;
3212d5fd101SZiyang Xuan };
3222d5fd101SZiyang Xuan 
3232d5fd101SZiyang Xuan struct hinic_cmd_qpn {
3242d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3252d5fd101SZiyang Xuan 
3262d5fd101SZiyang Xuan 	u16	func_id;
3272d5fd101SZiyang Xuan 	u16	base_qpn;
3282d5fd101SZiyang Xuan };
3292d5fd101SZiyang Xuan 
3302d5fd101SZiyang Xuan struct hinic_port_mac_set {
3312d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3322d5fd101SZiyang Xuan 
3332d5fd101SZiyang Xuan 	u16	func_id;
3342d5fd101SZiyang Xuan 	u16	vlan_id;
3352d5fd101SZiyang Xuan 	u16	rsvd1;
3362d5fd101SZiyang Xuan 	u8	mac[ETH_ALEN];
3372d5fd101SZiyang Xuan };
3382d5fd101SZiyang Xuan 
3392d5fd101SZiyang Xuan struct hinic_port_mac_update {
3402d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3412d5fd101SZiyang Xuan 
3422d5fd101SZiyang Xuan 	u16	func_id;
3432d5fd101SZiyang Xuan 	u16	vlan_id;
3442d5fd101SZiyang Xuan 	u16	rsvd1;
3452d5fd101SZiyang Xuan 	u8	old_mac[ETH_ALEN];
3462d5fd101SZiyang Xuan 	u16	rsvd2;
3472d5fd101SZiyang Xuan 	u8	new_mac[ETH_ALEN];
3482d5fd101SZiyang Xuan };
3492d5fd101SZiyang Xuan 
3502d5fd101SZiyang Xuan struct hinic_vport_state {
3512d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3522d5fd101SZiyang Xuan 
3532d5fd101SZiyang Xuan 	u16	func_id;
3542d5fd101SZiyang Xuan 	u16	rsvd1;
3552d5fd101SZiyang Xuan 	u8	state;
3562d5fd101SZiyang Xuan 	u8	rsvd2[3];
3572d5fd101SZiyang Xuan };
3582d5fd101SZiyang Xuan 
3592d5fd101SZiyang Xuan struct hinic_port_state {
3602d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3612d5fd101SZiyang Xuan 
3622d5fd101SZiyang Xuan 	u8	state;
3632d5fd101SZiyang Xuan 	u8	rsvd1[3];
3642d5fd101SZiyang Xuan };
3652d5fd101SZiyang Xuan 
3662d5fd101SZiyang Xuan struct hinic_mtu {
3672d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3682d5fd101SZiyang Xuan 
3692d5fd101SZiyang Xuan 	u16	func_id;
3702d5fd101SZiyang Xuan 	u16	rsvd1;
3712d5fd101SZiyang Xuan 	u32	mtu;
3722d5fd101SZiyang Xuan };
3732d5fd101SZiyang Xuan 
374fdba3bf1SXiaoyun Wang struct hinic_vlan_config {
375fdba3bf1SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
376fdba3bf1SXiaoyun Wang 
377fdba3bf1SXiaoyun Wang 	u16	func_id;
378fdba3bf1SXiaoyun Wang 	u16	vlan_id;
379fdba3bf1SXiaoyun Wang };
380fdba3bf1SXiaoyun Wang 
381fdba3bf1SXiaoyun Wang struct hinic_vlan_filter {
382fdba3bf1SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
383fdba3bf1SXiaoyun Wang 
384fdba3bf1SXiaoyun Wang 	u16	func_id;
385fdba3bf1SXiaoyun Wang 	u8	rsvd1[2];
386fdba3bf1SXiaoyun Wang 	u32	vlan_filter_ctrl;
387fdba3bf1SXiaoyun Wang };
388fdba3bf1SXiaoyun Wang 
389fdba3bf1SXiaoyun Wang struct hinic_vlan_offload {
390fdba3bf1SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
391fdba3bf1SXiaoyun Wang 
392fdba3bf1SXiaoyun Wang 	u16	func_id;
393fdba3bf1SXiaoyun Wang 	u8	vlan_rx_offload;
394fdba3bf1SXiaoyun Wang 	u8	rsvd1[5];
395fdba3bf1SXiaoyun Wang };
396fdba3bf1SXiaoyun Wang 
3972d5fd101SZiyang Xuan struct hinic_get_link {
3982d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
3992d5fd101SZiyang Xuan 
4002d5fd101SZiyang Xuan 	u16	func_id;
4012d5fd101SZiyang Xuan 	u8	link_status;
4022d5fd101SZiyang Xuan 	u8	rsvd1;
4032d5fd101SZiyang Xuan };
4042d5fd101SZiyang Xuan 
4052d5fd101SZiyang Xuan #define HINIC_DEFAUT_PAUSE_CONFIG 1
4062d5fd101SZiyang Xuan struct hinic_pause_config {
4072d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4082d5fd101SZiyang Xuan 
4092d5fd101SZiyang Xuan 	u16	func_id;
4102d5fd101SZiyang Xuan 	u16	rsvd1;
4112d5fd101SZiyang Xuan 	u32	auto_neg;
4122d5fd101SZiyang Xuan 	u32	rx_pause;
4132d5fd101SZiyang Xuan 	u32	tx_pause;
4142d5fd101SZiyang Xuan };
4152d5fd101SZiyang Xuan 
4162d5fd101SZiyang Xuan struct hinic_port_info {
4172d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4182d5fd101SZiyang Xuan 
4192d5fd101SZiyang Xuan 	u16	func_id;
4202d5fd101SZiyang Xuan 	u16	rsvd1;
4212d5fd101SZiyang Xuan 	u8	port_type;
4222d5fd101SZiyang Xuan 	u8	autoneg_cap;
4232d5fd101SZiyang Xuan 	u8	autoneg_state;
4242d5fd101SZiyang Xuan 	u8	duplex;
4252d5fd101SZiyang Xuan 	u8	speed;
4262d5fd101SZiyang Xuan 	u8	resv2[3];
4272d5fd101SZiyang Xuan };
4282d5fd101SZiyang Xuan 
4292d5fd101SZiyang Xuan struct hinic_tso_config {
4302d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4312d5fd101SZiyang Xuan 
4322d5fd101SZiyang Xuan 	u16	func_id;
4332d5fd101SZiyang Xuan 	u16	rsvd1;
4342d5fd101SZiyang Xuan 	u8	tso_en;
4352d5fd101SZiyang Xuan 	u8	resv2[3];
4362d5fd101SZiyang Xuan };
4372d5fd101SZiyang Xuan 
4382d5fd101SZiyang Xuan struct hinic_lro_config {
4392d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4402d5fd101SZiyang Xuan 
4412d5fd101SZiyang Xuan 	u16	func_id;
4422d5fd101SZiyang Xuan 	u16	rsvd1;
4432d5fd101SZiyang Xuan 	u8	lro_ipv4_en;
4442d5fd101SZiyang Xuan 	u8	lro_ipv6_en;
4452d5fd101SZiyang Xuan 	u8	lro_max_wqe_num;
4462d5fd101SZiyang Xuan 	u8	resv2[13];
4472d5fd101SZiyang Xuan };
4482d5fd101SZiyang Xuan 
4492d5fd101SZiyang Xuan struct hinic_checksum_offload {
4502d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4512d5fd101SZiyang Xuan 
4522d5fd101SZiyang Xuan 	u16	func_id;
4532d5fd101SZiyang Xuan 	u16	rsvd1;
4542d5fd101SZiyang Xuan 	u32	rx_csum_offload;
4552d5fd101SZiyang Xuan };
4562d5fd101SZiyang Xuan 
4572d5fd101SZiyang Xuan struct hinic_rx_mode_config {
4582d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4592d5fd101SZiyang Xuan 
4602d5fd101SZiyang Xuan 	u16	func_id;
4612d5fd101SZiyang Xuan 	u16	rsvd1;
4622d5fd101SZiyang Xuan 	u32	rx_mode;
4632d5fd101SZiyang Xuan };
4642d5fd101SZiyang Xuan 
465dbf524abSXiaoyun Wang #define HINIC_MGMT_VERSION_MAX_LEN	32
466dbf524abSXiaoyun Wang #define HINIC_COMPILE_TIME_LEN		20
467dbf524abSXiaoyun Wang #define HINIC_FW_VERSION_NAME		16
468dbf524abSXiaoyun Wang 
469dbf524abSXiaoyun Wang struct hinic_version_info {
470dbf524abSXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
471dbf524abSXiaoyun Wang 
472dbf524abSXiaoyun Wang 	u8 ver[HINIC_FW_VERSION_NAME];
473dbf524abSXiaoyun Wang 	u8 time[HINIC_COMPILE_TIME_LEN];
474dbf524abSXiaoyun Wang };
475dbf524abSXiaoyun Wang 
4762d5fd101SZiyang Xuan /* rss */
4772d5fd101SZiyang Xuan struct nic_rss_indirect_tbl {
4782d5fd101SZiyang Xuan 	u32 group_index;
4792d5fd101SZiyang Xuan 	u32 offset;
4802d5fd101SZiyang Xuan 	u32 size;
4812d5fd101SZiyang Xuan 	u32 rsvd;
4822d5fd101SZiyang Xuan 	u8 entry[NIC_RSS_INDIR_SIZE];
4832d5fd101SZiyang Xuan };
4842d5fd101SZiyang Xuan 
4852d5fd101SZiyang Xuan struct nic_rss_context_tbl {
4862d5fd101SZiyang Xuan 	u32 group_index;
4872d5fd101SZiyang Xuan 	u32 offset;
4882d5fd101SZiyang Xuan 	u32 size;
4892d5fd101SZiyang Xuan 	u32 rsvd;
4902d5fd101SZiyang Xuan 	u32 ctx;
4912d5fd101SZiyang Xuan };
4922d5fd101SZiyang Xuan 
4932d5fd101SZiyang Xuan struct hinic_rss_config {
4942d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
4952d5fd101SZiyang Xuan 
4962d5fd101SZiyang Xuan 	u16	func_id;
4972d5fd101SZiyang Xuan 	u8	rss_en;
4982d5fd101SZiyang Xuan 	u8	template_id;
4992d5fd101SZiyang Xuan 	u8	rq_priority_number;
5002d5fd101SZiyang Xuan 	u8	rsvd1[3];
5012d5fd101SZiyang Xuan 	u8	prio_tc[NIC_DCB_UP_MAX];
5022d5fd101SZiyang Xuan };
5032d5fd101SZiyang Xuan 
5042d5fd101SZiyang Xuan struct hinic_rss_template_mgmt {
5052d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5062d5fd101SZiyang Xuan 
5072d5fd101SZiyang Xuan 	u16	func_id;
5082d5fd101SZiyang Xuan 	u8	cmd;
5092d5fd101SZiyang Xuan 	u8	template_id;
5102d5fd101SZiyang Xuan 	u8	rsvd1[4];
5112d5fd101SZiyang Xuan };
5122d5fd101SZiyang Xuan 
5132d5fd101SZiyang Xuan struct hinic_rss_indir_table {
5142d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5152d5fd101SZiyang Xuan 
5162d5fd101SZiyang Xuan 	u16	func_id;
5172d5fd101SZiyang Xuan 	u8	template_id;
5182d5fd101SZiyang Xuan 	u8	rsvd1;
5192d5fd101SZiyang Xuan 	u8	indir[NIC_RSS_INDIR_SIZE];
5202d5fd101SZiyang Xuan };
5212d5fd101SZiyang Xuan 
5222d5fd101SZiyang Xuan struct hinic_rss_template_key {
5232d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5242d5fd101SZiyang Xuan 
5252d5fd101SZiyang Xuan 	u16	func_id;
5262d5fd101SZiyang Xuan 	u8	template_id;
5272d5fd101SZiyang Xuan 	u8	rsvd1;
5282d5fd101SZiyang Xuan 	u8	key[NIC_RSS_KEY_SIZE];
5292d5fd101SZiyang Xuan };
5302d5fd101SZiyang Xuan 
5312d5fd101SZiyang Xuan struct hinic_rss_engine_type {
5322d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5332d5fd101SZiyang Xuan 
5342d5fd101SZiyang Xuan 	u16	func_id;
5352d5fd101SZiyang Xuan 	u8	template_id;
5362d5fd101SZiyang Xuan 	u8	hash_engine;
5372d5fd101SZiyang Xuan 	u8	rsvd1[4];
5382d5fd101SZiyang Xuan };
5392d5fd101SZiyang Xuan 
5402d5fd101SZiyang Xuan struct hinic_rss_context_table {
5412d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5422d5fd101SZiyang Xuan 
5432d5fd101SZiyang Xuan 	u16	func_id;
5442d5fd101SZiyang Xuan 	u8	template_id;
5452d5fd101SZiyang Xuan 	u8	rsvd1;
5462d5fd101SZiyang Xuan 	u32	context;
5472d5fd101SZiyang Xuan };
5482d5fd101SZiyang Xuan 
5492d5fd101SZiyang Xuan struct hinic_reset_link_cfg {
5502d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5512d5fd101SZiyang Xuan 
5522d5fd101SZiyang Xuan 	u16	func_id;
5532d5fd101SZiyang Xuan 	u16	rsvd1;
5542d5fd101SZiyang Xuan };
5552d5fd101SZiyang Xuan 
5562d5fd101SZiyang Xuan struct hinic_set_vhd_mode {
5572d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5582d5fd101SZiyang Xuan 
5592d5fd101SZiyang Xuan 	u16 func_id;
5602d5fd101SZiyang Xuan 	u16 vhd_type;
5612d5fd101SZiyang Xuan 	u16 rx_wqe_buffer_size;
5622d5fd101SZiyang Xuan 	u16 rsvd;
5632d5fd101SZiyang Xuan };
5642d5fd101SZiyang Xuan 
5652d5fd101SZiyang Xuan struct hinic_set_link_follow {
5662d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5672d5fd101SZiyang Xuan 
5682d5fd101SZiyang Xuan 	u16	func_id;
5692d5fd101SZiyang Xuan 	u16	rsvd0;
5702d5fd101SZiyang Xuan 	u8	follow_status;
5712d5fd101SZiyang Xuan 	u8	rsvd1[3];
5722d5fd101SZiyang Xuan };
5732d5fd101SZiyang Xuan 
5742d5fd101SZiyang Xuan struct hinic_link_mode_cmd {
5752d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5762d5fd101SZiyang Xuan 
5772d5fd101SZiyang Xuan 	u16	func_id;
5782d5fd101SZiyang Xuan 	u16	rsvd1;
5792d5fd101SZiyang Xuan 	u16	supported;	/* 0xFFFF represent Invalid value */
5802d5fd101SZiyang Xuan 	u16	advertised;
5812d5fd101SZiyang Xuan };
5822d5fd101SZiyang Xuan 
58354ac3386SXiaoyun Wang struct hinic_set_xsfp_status {
58454ac3386SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
58554ac3386SXiaoyun Wang 
58654ac3386SXiaoyun Wang 	u32 port_id;
58754ac3386SXiaoyun Wang 	u32 xsfp_tx_dis;	/* 0: tx enable; 1: tx disable */
58854ac3386SXiaoyun Wang };
58954ac3386SXiaoyun Wang 
5902d5fd101SZiyang Xuan struct hinic_clear_qp_resource {
5912d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
5922d5fd101SZiyang Xuan 
5932d5fd101SZiyang Xuan 	u16	func_id;
5942d5fd101SZiyang Xuan 	u16	rsvd1;
5952d5fd101SZiyang Xuan };
5962d5fd101SZiyang Xuan 
5976691acefSXiaoyun Wang struct hinic_dcb_state {
5986691acefSXiaoyun Wang 	u8 dcb_on;
5996691acefSXiaoyun Wang 	u8 default_cos;
6006691acefSXiaoyun Wang 	u8 up_cos[8];
6016691acefSXiaoyun Wang };
6026691acefSXiaoyun Wang 
6036691acefSXiaoyun Wang struct hinic_vf_default_cos {
6046691acefSXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
6056691acefSXiaoyun Wang 
6066691acefSXiaoyun Wang 	struct hinic_dcb_state state;
6076691acefSXiaoyun Wang };
6086691acefSXiaoyun Wang 
6092d5fd101SZiyang Xuan /* set physical port Anti-Attack rate */
6102d5fd101SZiyang Xuan struct hinic_port_anti_attack_rate {
6112d5fd101SZiyang Xuan 	struct hinic_mgmt_msg_head mgmt_msg_head;
6122d5fd101SZiyang Xuan 
6132d5fd101SZiyang Xuan 	u16	func_id;
6142d5fd101SZiyang Xuan 	u16	enable; /* 1: enable rate-limiting, 0: disable rate-limiting */
6152d5fd101SZiyang Xuan 	u32	cir;	/* Committed Information Rate */
6162d5fd101SZiyang Xuan 	u32	xir;	/* eXtended Information Rate */
6172d5fd101SZiyang Xuan 	u32	cbs;	/* Committed Burst Size */
6182d5fd101SZiyang Xuan 	u32	xbs;	/* eXtended Burst Size */
6192d5fd101SZiyang Xuan };
6202d5fd101SZiyang Xuan 
621a5d668e6SXiaoyun Wang struct pa_u8_s {
622a5d668e6SXiaoyun Wang 	u8   val8;
623a5d668e6SXiaoyun Wang 	u8   mask8;
624a5d668e6SXiaoyun Wang };
625a5d668e6SXiaoyun Wang 
626a5d668e6SXiaoyun Wang struct pa_u16_s {
627a5d668e6SXiaoyun Wang 	u16  val16;
628a5d668e6SXiaoyun Wang 	u16  mask16;
629a5d668e6SXiaoyun Wang };
630a5d668e6SXiaoyun Wang 
631a5d668e6SXiaoyun Wang struct pa_u32_s {
632a5d668e6SXiaoyun Wang 	u32  val32;
633a5d668e6SXiaoyun Wang 	u32  mask32;
634a5d668e6SXiaoyun Wang };
635a5d668e6SXiaoyun Wang 
636a5d668e6SXiaoyun Wang struct pa_u48_s {
637a5d668e6SXiaoyun Wang 	u8   val8[6];
638a5d668e6SXiaoyun Wang 	u8   mask8[6];
639a5d668e6SXiaoyun Wang };
640a5d668e6SXiaoyun Wang 
641a5d668e6SXiaoyun Wang struct pa_u64_s {
642a5d668e6SXiaoyun Wang 	u8   val8[8];
643a5d668e6SXiaoyun Wang 	u8   mask8[8];
644a5d668e6SXiaoyun Wang };
645a5d668e6SXiaoyun Wang 
646a5d668e6SXiaoyun Wang struct tag_pa_eth_ip_header {
647a5d668e6SXiaoyun Wang 	struct pa_u8_s		ip_ver; /* 3bit */
648a5d668e6SXiaoyun Wang 	struct pa_u8_s		ipv4_option_flag; /* 1bit */
649a5d668e6SXiaoyun Wang 	/* 8bit ipv4 option or ipv6 next header */
650a5d668e6SXiaoyun Wang 	struct pa_u8_s		protocol;
651a5d668e6SXiaoyun Wang 	struct pa_u8_s		dscp;	/* 6bit DSCP */
652a5d668e6SXiaoyun Wang };
653a5d668e6SXiaoyun Wang 
654a5d668e6SXiaoyun Wang struct tag_pa_common_l2_header {
655a5d668e6SXiaoyun Wang 	struct pa_u48_s		dmac; /* dmac 48bit */
656a5d668e6SXiaoyun Wang 	struct pa_u16_s		eth_type; /* ethernet type/length 16bit */
657a5d668e6SXiaoyun Wang 	struct pa_u8_s		tag_flag; /* tag flag: 4bit */
658a5d668e6SXiaoyun Wang 	struct pa_u8_s		np2np_hdr_qindex; /* NP2NP Header Qindex 4bit */
659a5d668e6SXiaoyun Wang 	struct pa_u8_s		e_tag_pcp; /* 3bit */
660a5d668e6SXiaoyun Wang 	struct pa_u8_s		vlan_layer; /* 2bit */
661a5d668e6SXiaoyun Wang 	struct pa_u8_s		s_tag; /* 3bit */
662a5d668e6SXiaoyun Wang 	struct pa_u8_s		c_tag; /* 3bit */
663a5d668e6SXiaoyun Wang 	struct pa_u16_s		vlan_id; /* 12bit */
664a5d668e6SXiaoyun Wang };
665a5d668e6SXiaoyun Wang 
666a5d668e6SXiaoyun Wang struct tag_pa_tcp {
667a5d668e6SXiaoyun Wang 	struct pa_u16_s		sport; /* 16bit */
668a5d668e6SXiaoyun Wang 	struct pa_u16_s		dport; /* 16bit */
669a5d668e6SXiaoyun Wang 	struct pa_u16_s		tcp_flag; /* 6bit */
670a5d668e6SXiaoyun Wang };
671a5d668e6SXiaoyun Wang 
672a5d668e6SXiaoyun Wang struct tag_pa_udp {
673a5d668e6SXiaoyun Wang 	struct pa_u16_s		sport; /* 16bit */
674a5d668e6SXiaoyun Wang 	struct pa_u16_s		dport; /* 16bit */
675a5d668e6SXiaoyun Wang 	/* 8bit :
676a5d668e6SXiaoyun Wang 	 * 1.udp dport=67/68 && ipv4 protocol=0x11
677a5d668e6SXiaoyun Wang 	 * 2.udp dport=546/547 && ipv6 next header=0x11
678a5d668e6SXiaoyun Wang 	 * 3. do not care
679a5d668e6SXiaoyun Wang 	 */
680a5d668e6SXiaoyun Wang 	struct pa_u8_s		dhcp_op_or_msg_type;
681a5d668e6SXiaoyun Wang };
682a5d668e6SXiaoyun Wang 
683a5d668e6SXiaoyun Wang /* ICMP:
684a5d668e6SXiaoyun Wang  * ipv4 protocol = 0x1
685a5d668e6SXiaoyun Wang  * ipv6 next header = 0x3A
686a5d668e6SXiaoyun Wang  */
687a5d668e6SXiaoyun Wang struct tag_pa_icmp {
688a5d668e6SXiaoyun Wang 	struct pa_u8_s		type; /* 8bit */
689a5d668e6SXiaoyun Wang 	struct pa_u8_s		code; /* 8bit */
690a5d668e6SXiaoyun Wang };
691a5d668e6SXiaoyun Wang 
692a5d668e6SXiaoyun Wang /* IGMP:
693a5d668e6SXiaoyun Wang  * ipv4 protocol = 0x2
694a5d668e6SXiaoyun Wang  */
695a5d668e6SXiaoyun Wang struct tag_pa_ipv4_igmp {
696a5d668e6SXiaoyun Wang 	struct pa_u32_s		dip; /* 32bit */
697a5d668e6SXiaoyun Wang 	struct pa_u8_s		type; /* 8bit */
698a5d668e6SXiaoyun Wang };
699a5d668e6SXiaoyun Wang 
700a5d668e6SXiaoyun Wang struct tag_pa_rule {
701a5d668e6SXiaoyun Wang 	struct pa_u8_s ncsi_flag; /* 1bit valid */
702a5d668e6SXiaoyun Wang 	struct tag_pa_common_l2_header l2_header;
703a5d668e6SXiaoyun Wang 
704a5d668e6SXiaoyun Wang 	u8 eth_type;
705a5d668e6SXiaoyun Wang 
706a5d668e6SXiaoyun Wang 	struct pa_u64_s	eth_other; /* eth_type=other 64bit */
707a5d668e6SXiaoyun Wang 	struct pa_u8_s	eth_roce_opcode; /* eth_type=roce 8bit opcode */
708a5d668e6SXiaoyun Wang 
709a5d668e6SXiaoyun Wang 	struct tag_pa_eth_ip_header ip_header; /* eth_type=ip */
710a5d668e6SXiaoyun Wang 
711a5d668e6SXiaoyun Wang 	u8 ip_protocol_type;
712a5d668e6SXiaoyun Wang 
713a5d668e6SXiaoyun Wang 	struct tag_pa_tcp eth_ip_tcp; /* eth_type=ip && ip_protocol = tcp */
714a5d668e6SXiaoyun Wang 	struct tag_pa_udp eth_ip_udp; /* eth_type=ip && ip_protocol = udp */
715a5d668e6SXiaoyun Wang 	struct tag_pa_icmp eth_ip_icmp; /* eth_type=ip && ip_protocol = icmp */
716a5d668e6SXiaoyun Wang 
717a5d668e6SXiaoyun Wang 	/* eth_type=ip && ip_protocol = ipv4_igmp */
718a5d668e6SXiaoyun Wang 	struct tag_pa_ipv4_igmp eth_ipv4_igmp;
719a5d668e6SXiaoyun Wang 
720a5d668e6SXiaoyun Wang 	/* eth_type=ip && ip_protocol = sctp;
721a5d668e6SXiaoyun Wang 	 * 16bit ipv4 protocol=0x84 or ipv6 nhr=0x84
722a5d668e6SXiaoyun Wang 	 */
723a5d668e6SXiaoyun Wang 	struct pa_u16_s eth_ip_sctp;
724a5d668e6SXiaoyun Wang };
725a5d668e6SXiaoyun Wang 
726a5d668e6SXiaoyun Wang struct tag_pa_action {
727a5d668e6SXiaoyun Wang 	u16	pkt_type;
728a5d668e6SXiaoyun Wang 	u8	err_type;
729a5d668e6SXiaoyun Wang 	u8	pri;
730a5d668e6SXiaoyun Wang 	u8	fwd_action;
731a5d668e6SXiaoyun Wang 	u8	push_len;
732a5d668e6SXiaoyun Wang };
733a5d668e6SXiaoyun Wang 
734a5d668e6SXiaoyun Wang struct hinic_fdir_tcam_info {
735a5d668e6SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
736a5d668e6SXiaoyun Wang 
737a5d668e6SXiaoyun Wang 	u16	tcam_index;
738a5d668e6SXiaoyun Wang 	u8	flag; /* clear or set tcam table flag */
739a5d668e6SXiaoyun Wang 	u8	rsvd1;
740a5d668e6SXiaoyun Wang 	struct tag_pa_rule filter_rule;
741a5d668e6SXiaoyun Wang 	struct tag_pa_action filter_action;
742a5d668e6SXiaoyun Wang };
743a5d668e6SXiaoyun Wang 
7441fe89aa3SXiaoyun Wang #define TCAM_SET	0x1
7451fe89aa3SXiaoyun Wang #define TCAM_CLEAR	0x2
7461fe89aa3SXiaoyun Wang 
7471fe89aa3SXiaoyun Wang struct hinic_port_qfilter_info {
7481fe89aa3SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
7491fe89aa3SXiaoyun Wang 
7501fe89aa3SXiaoyun Wang 	u16 func_id;
7511fe89aa3SXiaoyun Wang 	u8 normal_type_enable;
7521fe89aa3SXiaoyun Wang 	u8 filter_type_enable;
7531fe89aa3SXiaoyun Wang 	u8 filter_enable;
7541fe89aa3SXiaoyun Wang 	u8 filter_type;
7551fe89aa3SXiaoyun Wang 	u8 qid;
7561fe89aa3SXiaoyun Wang 	u8 fdir_flag;
7571fe89aa3SXiaoyun Wang 	u32 key;
7581fe89aa3SXiaoyun Wang };
7591fe89aa3SXiaoyun Wang 
760*0023e525SXiaoyun Wang struct hinic_port_tcam_info {
761*0023e525SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
762*0023e525SXiaoyun Wang 
763*0023e525SXiaoyun Wang 	u16 func_id;
764*0023e525SXiaoyun Wang 	u8 tcam_enable;
765*0023e525SXiaoyun Wang 	u8 rsvd1;
766*0023e525SXiaoyun Wang 	u32 rsvd2;
767*0023e525SXiaoyun Wang };
768*0023e525SXiaoyun Wang 
7691fe89aa3SXiaoyun Wang #define HINIC_MAX_TCAM_RULES_NUM   (10240)
7701fe89aa3SXiaoyun Wang #define HINIC_TCAM_BLOCK_ENABLE      1
7711fe89aa3SXiaoyun Wang #define HINIC_TCAM_BLOCK_DISABLE     0
7721fe89aa3SXiaoyun Wang 
7731fe89aa3SXiaoyun Wang struct tag_tcam_result {
7741fe89aa3SXiaoyun Wang 	u32 qid;
7751fe89aa3SXiaoyun Wang 	u32 rsvd;
7761fe89aa3SXiaoyun Wang };
7771fe89aa3SXiaoyun Wang 
7781fe89aa3SXiaoyun Wang #define TCAM_FLOW_KEY_SIZE   24
7791fe89aa3SXiaoyun Wang 
7801fe89aa3SXiaoyun Wang struct tag_tcam_key_x_y {
7811fe89aa3SXiaoyun Wang 	u8 x[TCAM_FLOW_KEY_SIZE];
7821fe89aa3SXiaoyun Wang 	u8 y[TCAM_FLOW_KEY_SIZE];
7831fe89aa3SXiaoyun Wang };
7841fe89aa3SXiaoyun Wang 
7851fe89aa3SXiaoyun Wang struct tag_tcam_cfg_rule {
7861fe89aa3SXiaoyun Wang 	u32 index;
7871fe89aa3SXiaoyun Wang 	struct tag_tcam_result data;
7881fe89aa3SXiaoyun Wang 	struct tag_tcam_key_x_y key;
7891fe89aa3SXiaoyun Wang };
7901fe89aa3SXiaoyun Wang 
7911fe89aa3SXiaoyun Wang struct tag_fdir_add_rule_cmd {
7921fe89aa3SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
7931fe89aa3SXiaoyun Wang 	struct tag_tcam_cfg_rule rule;
7941fe89aa3SXiaoyun Wang };
7951fe89aa3SXiaoyun Wang 
7961fe89aa3SXiaoyun Wang struct tag_fdir_del_rule_cmd {
7971fe89aa3SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
7981fe89aa3SXiaoyun Wang 
7991fe89aa3SXiaoyun Wang 	u32 index_start;
8001fe89aa3SXiaoyun Wang 	u32 index_num;
8011fe89aa3SXiaoyun Wang };
8021fe89aa3SXiaoyun Wang 
8031fe89aa3SXiaoyun Wang struct hinic_cmd_flush_tcam_rules {
8041fe89aa3SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
8051fe89aa3SXiaoyun Wang 
8061fe89aa3SXiaoyun Wang 	u16 func_id;
8071fe89aa3SXiaoyun Wang 	u16 rsvd;
8081fe89aa3SXiaoyun Wang };
8091fe89aa3SXiaoyun Wang 
8101fe89aa3SXiaoyun Wang struct hinic_cmd_ctrl_tcam_block {
8111fe89aa3SXiaoyun Wang 	struct hinic_mgmt_msg_head mgmt_msg_head;
8121fe89aa3SXiaoyun Wang 
8131fe89aa3SXiaoyun Wang 	u16 func_id;
8141fe89aa3SXiaoyun Wang 	u8  alloc_en; /* 0: free tcam block, 1: alloc tcam block */
8151fe89aa3SXiaoyun Wang 	/*
8161fe89aa3SXiaoyun Wang 	 * 0: alloc 1k size tcam block,
8171fe89aa3SXiaoyun Wang 	 * 1: alloc 128 size tcam block, others rsvd
8181fe89aa3SXiaoyun Wang 	 */
8191fe89aa3SXiaoyun Wang 	u8  tcam_type;
8201fe89aa3SXiaoyun Wang 	u16 tcam_block_index;
8211fe89aa3SXiaoyun Wang 	u16 rsvd;
8221fe89aa3SXiaoyun Wang };
8231fe89aa3SXiaoyun Wang 
8242d5fd101SZiyang Xuan int hinic_set_mac(void *hwdev, u8 *mac_addr, u16 vlan_id, u16 func_id);
8252d5fd101SZiyang Xuan 
8262d5fd101SZiyang Xuan int hinic_del_mac(void *hwdev, u8 *mac_addr, u16 vlan_id, u16 func_id);
8272d5fd101SZiyang Xuan 
8282d5fd101SZiyang Xuan int hinic_update_mac(void *hwdev, u8 *old_mac, u8 *new_mac, u16 vlan_id,
8292d5fd101SZiyang Xuan 		     u16 func_id);
8302d5fd101SZiyang Xuan 
8312d5fd101SZiyang Xuan int hinic_get_default_mac(void *hwdev, u8 *mac_addr);
8322d5fd101SZiyang Xuan 
8332d5fd101SZiyang Xuan int hinic_set_port_mtu(void *hwdev, u32 new_mtu);
8342d5fd101SZiyang Xuan 
835fdba3bf1SXiaoyun Wang int hinic_add_remove_vlan(void *hwdev, u16 vlan_id, u16 func_id, bool add);
836fdba3bf1SXiaoyun Wang 
837fdba3bf1SXiaoyun Wang int hinic_config_vlan_filter(void *hwdev, u32 vlan_filter_ctrl);
838fdba3bf1SXiaoyun Wang 
839fdba3bf1SXiaoyun Wang int hinic_set_rx_vlan_offload(void *hwdev, u8 en);
840fdba3bf1SXiaoyun Wang 
8412d5fd101SZiyang Xuan int hinic_set_vport_enable(void *hwdev, bool enable);
8422d5fd101SZiyang Xuan 
8432d5fd101SZiyang Xuan int hinic_set_port_enable(void *hwdev, bool enable);
8442d5fd101SZiyang Xuan 
8452d5fd101SZiyang Xuan int hinic_get_link_status(void *hwdev, u8 *link_state);
8462d5fd101SZiyang Xuan 
8472d5fd101SZiyang Xuan int hinic_get_port_info(void *hwdev, struct nic_port_info *port_info);
8482d5fd101SZiyang Xuan 
8492d5fd101SZiyang Xuan int hinic_set_rx_vhd_mode(void *hwdev, u16 vhd_mode, u16 rx_buf_sz);
8502d5fd101SZiyang Xuan 
8512d5fd101SZiyang Xuan int hinic_set_pause_config(void *hwdev, struct nic_pause_config nic_pause);
8522d5fd101SZiyang Xuan 
853ef6f2f5cSXiaoyun Wang int hinic_get_pause_info(void *hwdev, struct nic_pause_config *nic_pause);
854ef6f2f5cSXiaoyun Wang 
8552d5fd101SZiyang Xuan int hinic_reset_port_link_cfg(void *hwdev);
8562d5fd101SZiyang Xuan 
8572d5fd101SZiyang Xuan int hinic_dcb_set_ets(void *hwdev, u8 *up_tc, u8 *pg_bw, u8 *pgid, u8 *up_bw,
8582d5fd101SZiyang Xuan 		      u8 *prio);
8592d5fd101SZiyang Xuan 
8602d5fd101SZiyang Xuan int hinic_set_anti_attack(void *hwdev, bool enable);
8612d5fd101SZiyang Xuan 
8622d5fd101SZiyang Xuan /* offload feature */
8632d5fd101SZiyang Xuan int hinic_set_rx_lro(void *hwdev, u8 ipv4_en, u8 ipv6_en, u8 max_wqe_num);
8642d5fd101SZiyang Xuan 
8652d5fd101SZiyang Xuan int hinic_get_vport_stats(void *hwdev, struct hinic_vport_stats *stats);
8662d5fd101SZiyang Xuan 
8672d5fd101SZiyang Xuan int hinic_get_phy_port_stats(void *hwdev, struct hinic_phy_port_stats *stats);
8682d5fd101SZiyang Xuan 
8692d5fd101SZiyang Xuan /* rss */
8702d5fd101SZiyang Xuan int hinic_set_rss_type(void *hwdev, u32 tmpl_idx,
8712d5fd101SZiyang Xuan 		       struct nic_rss_type rss_type);
8722d5fd101SZiyang Xuan 
8732d5fd101SZiyang Xuan int hinic_get_rss_type(void *hwdev, u32 tmpl_idx,
8742d5fd101SZiyang Xuan 		       struct nic_rss_type *rss_type);
8752d5fd101SZiyang Xuan 
8762d5fd101SZiyang Xuan int hinic_rss_set_template_tbl(void *hwdev, u32 tmpl_idx, u8 *temp);
8772d5fd101SZiyang Xuan 
8782d5fd101SZiyang Xuan int hinic_rss_get_template_tbl(void *hwdev, u32 tmpl_idx, u8 *temp);
8792d5fd101SZiyang Xuan 
8802d5fd101SZiyang Xuan int hinic_rss_set_hash_engine(void *hwdev, u8 tmpl_idx, u8 type);
8812d5fd101SZiyang Xuan 
8822d5fd101SZiyang Xuan int hinic_rss_get_indir_tbl(void *hwdev, u32 tmpl_idx, u32 *indir_table);
8832d5fd101SZiyang Xuan 
8842d5fd101SZiyang Xuan int hinic_rss_set_indir_tbl(void *hwdev, u32 tmpl_idx, u32 *indir_table);
8852d5fd101SZiyang Xuan 
8862d5fd101SZiyang Xuan int hinic_rss_cfg(void *hwdev, u8 rss_en, u8 tmpl_idx, u8 tc_num, u8 *prio_tc);
8872d5fd101SZiyang Xuan 
8882d5fd101SZiyang Xuan int hinic_rss_template_alloc(void *hwdev, u8 *tmpl_idx);
8892d5fd101SZiyang Xuan 
8902d5fd101SZiyang Xuan int hinic_rss_template_free(void *hwdev, u8 tmpl_idx);
8912d5fd101SZiyang Xuan 
8922d5fd101SZiyang Xuan int hinic_set_rx_mode(void *hwdev, u32 enable);
8932d5fd101SZiyang Xuan 
894dbf524abSXiaoyun Wang int hinic_get_mgmt_version(void *hwdev, char *fw);
895dbf524abSXiaoyun Wang 
8962d5fd101SZiyang Xuan int hinic_set_rx_csum_offload(void *hwdev, u32 en);
8972d5fd101SZiyang Xuan 
8982d5fd101SZiyang Xuan int hinic_set_link_status_follow(void *hwdev,
8992d5fd101SZiyang Xuan 				 enum hinic_link_follow_status status);
9002d5fd101SZiyang Xuan 
9012d5fd101SZiyang Xuan int hinic_get_link_mode(void *hwdev, u32 *supported, u32 *advertised);
9022d5fd101SZiyang Xuan 
9032d5fd101SZiyang Xuan int hinic_flush_qp_res(void *hwdev);
9042d5fd101SZiyang Xuan 
9052d5fd101SZiyang Xuan int hinic_init_function_table(void *hwdev, u16 rx_buf_sz);
9062d5fd101SZiyang Xuan 
9072d5fd101SZiyang Xuan int hinic_set_fast_recycle_mode(void *hwdev, u8 mode);
9082d5fd101SZiyang Xuan 
9092d5fd101SZiyang Xuan int hinic_get_base_qpn(void *hwdev, u16 *global_qpn);
9102d5fd101SZiyang Xuan 
9119970a9adSIgor Romanov int hinic_clear_vport_stats(struct hinic_hwdev *hwdev);
9122d5fd101SZiyang Xuan 
9139970a9adSIgor Romanov int hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev);
9142d5fd101SZiyang Xuan 
915b8582d05SXiaoyun Wang int hinic_vf_func_init(struct hinic_hwdev *hwdev);
916b8582d05SXiaoyun Wang 
917b8582d05SXiaoyun Wang void hinic_vf_func_free(struct hinic_hwdev *hwdev);
918b8582d05SXiaoyun Wang 
9196691acefSXiaoyun Wang int hinic_vf_get_default_cos(struct hinic_hwdev *hwdev, u8 *cos_id);
9206691acefSXiaoyun Wang 
921a5d668e6SXiaoyun Wang int hinic_set_fdir_filter(void *hwdev, u8 filter_type, u8 qid,
922a5d668e6SXiaoyun Wang 		u8 type_enable, bool enable);
923a5d668e6SXiaoyun Wang 
924a5d668e6SXiaoyun Wang int hinic_set_normal_filter(void *hwdev, u8 qid, u8 normal_type_enable,
925a5d668e6SXiaoyun Wang 		u32 key, bool enable, u8 flag);
926a5d668e6SXiaoyun Wang 
927a5d668e6SXiaoyun Wang int hinic_set_fdir_tcam(void *hwdev, u16 type_mask,
928a5d668e6SXiaoyun Wang 	struct tag_pa_rule *filter_rule, struct tag_pa_action *filter_action);
929a5d668e6SXiaoyun Wang 
930a5d668e6SXiaoyun Wang int hinic_clear_fdir_tcam(void *hwdev, u16 type_mask);
931a5d668e6SXiaoyun Wang 
9321fe89aa3SXiaoyun Wang int hinic_add_tcam_rule(void *hwdev, struct tag_tcam_cfg_rule *tcam_rule);
9331fe89aa3SXiaoyun Wang 
9341fe89aa3SXiaoyun Wang int hinic_del_tcam_rule(void *hwdev, u32 index);
9351fe89aa3SXiaoyun Wang 
9361fe89aa3SXiaoyun Wang int hinic_alloc_tcam_block(void *hwdev, u8 block_type, u16 *index);
9371fe89aa3SXiaoyun Wang 
9381fe89aa3SXiaoyun Wang int hinic_free_tcam_block(void *hwdev, u8 block_type, u16 *index);
9391fe89aa3SXiaoyun Wang 
9401fe89aa3SXiaoyun Wang int hinic_flush_tcam_rule(void *hwdev);
9411fe89aa3SXiaoyun Wang 
942*0023e525SXiaoyun Wang int hinic_set_fdir_tcam_rule_filter(void *hwdev, bool enable);
943*0023e525SXiaoyun Wang 
9442d5fd101SZiyang Xuan #endif /* _HINIC_PMD_NICCFG_H_ */
945