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