11f4d4ed6SAlexander Lobakin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 225c089d7SYuval Mintz /* QLogic qed NIC Driver 3e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 4663eacd8SAlexander Lobakin * Copyright (c) 2019-2020 Marvell International Ltd. 525c089d7SYuval Mintz */ 625c089d7SYuval Mintz 725c089d7SYuval Mintz #ifndef __ETH_COMMON__ 825c089d7SYuval Mintz #define __ETH_COMMON__ 925c089d7SYuval Mintz 1025c089d7SYuval Mintz /********************/ 1125c089d7SYuval Mintz /* ETH FW CONSTANTS */ 1225c089d7SYuval Mintz /********************/ 13a2e7699eSTomer Tayar 14351a4dedSYuval Mintz #define ETH_HSI_VER_MAJOR 3 150500a70dSMichal Kalderon #define ETH_HSI_VER_MINOR 11 1625c089d7SYuval Mintz 1705fafbfbSYuval Mintz #define ETH_HSI_VER_NO_PKT_LEN_TUNN 5 180500a70dSMichal Kalderon /* Maximum number of pinned L2 connections (CIDs) */ 190500a70dSMichal Kalderon #define ETH_PINNED_CONN_MAX_NUM 32 2005fafbfbSYuval Mintz 2105fafbfbSYuval Mintz #define ETH_CACHE_LINE_SIZE 64 2205fafbfbSYuval Mintz #define ETH_RX_CQE_GAP 32 2325c089d7SYuval Mintz #define ETH_MAX_RAMROD_PER_CON 8 2425c089d7SYuval Mintz #define ETH_TX_BD_PAGE_SIZE_BYTES 4096 2525c089d7SYuval Mintz #define ETH_RX_BD_PAGE_SIZE_BYTES 4096 2625c089d7SYuval Mintz #define ETH_RX_CQE_PAGE_SIZE_BYTES 4096 2725c089d7SYuval Mintz #define ETH_RX_NUM_NEXT_PAGE_BDS 2 2825c089d7SYuval Mintz 29be086e7cSMintz, Yuval #define ETH_MAX_TUNN_LSO_INNER_IPV4_OFFSET 253 30be086e7cSMintz, Yuval #define ETH_MAX_TUNN_LSO_INNER_IPV6_OFFSET 251 31be086e7cSMintz, Yuval 3225c089d7SYuval Mintz #define ETH_TX_MIN_BDS_PER_NON_LSO_PKT 1 3325c089d7SYuval Mintz #define ETH_TX_MAX_BDS_PER_NON_LSO_PACKET 18 3405fafbfbSYuval Mintz #define ETH_TX_MAX_BDS_PER_LSO_PACKET 255 3525c089d7SYuval Mintz #define ETH_TX_MAX_LSO_HDR_NBD 4 3625c089d7SYuval Mintz #define ETH_TX_MIN_BDS_PER_LSO_PKT 3 3725c089d7SYuval Mintz #define ETH_TX_MIN_BDS_PER_TUNN_IPV6_WITH_EXT_PKT 3 3825c089d7SYuval Mintz #define ETH_TX_MIN_BDS_PER_IPV6_WITH_EXT_PKT 2 3925c089d7SYuval Mintz #define ETH_TX_MIN_BDS_PER_PKT_W_LOOPBACK_MODE 2 400500a70dSMichal Kalderon #define ETH_TX_MIN_BDS_PER_PKT_W_VPORT_FORWARDING 4 4105fafbfbSYuval Mintz #define ETH_TX_MAX_NON_LSO_PKT_LEN (9700 - (4 + 4 + 12 + 8)) 4225c089d7SYuval Mintz #define ETH_TX_MAX_LSO_HDR_BYTES 510 4305fafbfbSYuval Mintz #define ETH_TX_LSO_WINDOW_BDS_NUM (18 - 1) 4405fafbfbSYuval Mintz #define ETH_TX_LSO_WINDOW_MIN_LEN 9700 4505fafbfbSYuval Mintz #define ETH_TX_MAX_LSO_PAYLOAD_LEN 0xFE000 4605fafbfbSYuval Mintz #define ETH_TX_NUM_SAME_AS_LAST_ENTRIES 320 4705fafbfbSYuval Mintz #define ETH_TX_INACTIVE_SAME_AS_LAST 0xFFFF 4825c089d7SYuval Mintz 4925c089d7SYuval Mintz #define ETH_NUM_STATISTIC_COUNTERS MAX_NUM_VPORTS 5005fafbfbSYuval Mintz #define ETH_NUM_STATISTIC_COUNTERS_DOUBLE_VF_ZONE \ 5105fafbfbSYuval Mintz (ETH_NUM_STATISTIC_COUNTERS - MAX_NUM_VFS / 2) 5205fafbfbSYuval Mintz #define ETH_NUM_STATISTIC_COUNTERS_QUAD_VF_ZONE \ 5305fafbfbSYuval Mintz (ETH_NUM_STATISTIC_COUNTERS - 3 * MAX_NUM_VFS / 4) 5425c089d7SYuval Mintz 55fc48b7a6SYuval Mintz #define ETH_RX_MAX_BUFF_PER_PKT 5 560500a70dSMichal Kalderon #define ETH_RX_BD_THRESHOLD 16 5725c089d7SYuval Mintz 58a2e7699eSTomer Tayar /* Num of MAC/VLAN filters */ 5925c089d7SYuval Mintz #define ETH_NUM_MAC_FILTERS 512 6025c089d7SYuval Mintz #define ETH_NUM_VLAN_FILTERS 512 6125c089d7SYuval Mintz 62a2e7699eSTomer Tayar /* Approx. multicast constants */ 6325c089d7SYuval Mintz #define ETH_MULTICAST_BIN_FROM_MAC_SEED 0 6425c089d7SYuval Mintz #define ETH_MULTICAST_MAC_BINS 256 6525c089d7SYuval Mintz #define ETH_MULTICAST_MAC_BINS_IN_REGS (ETH_MULTICAST_MAC_BINS / 32) 6625c089d7SYuval Mintz 67a2e7699eSTomer Tayar /* Ethernet vport update constants */ 6825c089d7SYuval Mintz #define ETH_FILTER_RULES_COUNT 10 6925c089d7SYuval Mintz #define ETH_RSS_IND_TABLE_ENTRIES_NUM 128 70*fe40a830SPrabhakar Kushwaha #define ETH_RSS_IND_TABLE_MASK_SIZE_REGS (ETH_RSS_IND_TABLE_ENTRIES_NUM / 32) 7125c089d7SYuval Mintz #define ETH_RSS_KEY_SIZE_REGS 10 7225c089d7SYuval Mintz #define ETH_RSS_ENGINE_NUM_K2 207 7325c089d7SYuval Mintz #define ETH_RSS_ENGINE_NUM_BB 127 7425c089d7SYuval Mintz 7525c089d7SYuval Mintz /* TPA constants */ 7625c089d7SYuval Mintz #define ETH_TPA_MAX_AGGS_NUM 64 770500a70dSMichal Kalderon #define ETH_TPA_CQE_START_BW_LEN_LIST_SIZE 2 78fc48b7a6SYuval Mintz #define ETH_TPA_CQE_CONT_LEN_LIST_SIZE 6 79fc48b7a6SYuval Mintz #define ETH_TPA_CQE_END_LEN_LIST_SIZE 4 8025c089d7SYuval Mintz 8105fafbfbSYuval Mintz /* Control frame check constants */ 8205fafbfbSYuval Mintz #define ETH_CTL_FRAME_ETH_TYPE_NUM 4 8325c089d7SYuval Mintz 84da090917STomer Tayar /* GFS constants */ 8550bc60cbSMichal Kalderon #define ETH_GFT_TRASHCAN_VPORT 0x1FF /* GFT drop flow vport number */ 86da090917STomer Tayar 87da090917STomer Tayar /* Destination port mode */ 880500a70dSMichal Kalderon enum dst_port_mode { 890500a70dSMichal Kalderon DST_PORT_PHY, 900500a70dSMichal Kalderon DST_PORT_LOOPBACK, 910500a70dSMichal Kalderon DST_PORT_PHY_LOOPBACK, 920500a70dSMichal Kalderon DST_PORT_DROP, 930500a70dSMichal Kalderon MAX_DST_PORT_MODE 94da090917STomer Tayar }; 95da090917STomer Tayar 96da090917STomer Tayar /* Ethernet address type */ 97da090917STomer Tayar enum eth_addr_type { 98da090917STomer Tayar BROADCAST_ADDRESS, 99da090917STomer Tayar MULTICAST_ADDRESS, 100da090917STomer Tayar UNICAST_ADDRESS, 101da090917STomer Tayar UNKNOWN_ADDRESS, 102da090917STomer Tayar MAX_ETH_ADDR_TYPE 103da090917STomer Tayar }; 104da090917STomer Tayar 10525c089d7SYuval Mintz struct eth_tx_1st_bd_flags { 10625c089d7SYuval Mintz u8 bitfields; 10725c089d7SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_START_BD_MASK 0x1 108fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_START_BD_SHIFT 0 109fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_MASK 0x1 110fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_SHIFT 1 111fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_MASK 0x1 112fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_SHIFT 2 113fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_MASK 0x1 114fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_SHIFT 3 115fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_MASK 0x1 116fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_SHIFT 4 117fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_LSO_MASK 0x1 118fc48b7a6SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_LSO_SHIFT 5 11925c089d7SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_MASK 0x1 12025c089d7SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_SHIFT 6 12125c089d7SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_MASK 0x1 12225c089d7SYuval Mintz #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_SHIFT 7 12325c089d7SYuval Mintz }; 12425c089d7SYuval Mintz 125a2e7699eSTomer Tayar /* The parsing information data fo rthe first tx bd of a given packet */ 12625c089d7SYuval Mintz struct eth_tx_data_1st_bd { 12725c089d7SYuval Mintz __le16 vlan; 12825c089d7SYuval Mintz u8 nbds; 12925c089d7SYuval Mintz struct eth_tx_1st_bd_flags bd_flags; 130fc48b7a6SYuval Mintz __le16 bitfields; 131351a4dedSYuval Mintz #define ETH_TX_DATA_1ST_BD_TUNN_FLAG_MASK 0x1 132351a4dedSYuval Mintz #define ETH_TX_DATA_1ST_BD_TUNN_FLAG_SHIFT 0 133fc48b7a6SYuval Mintz #define ETH_TX_DATA_1ST_BD_RESERVED0_MASK 0x1 134fc48b7a6SYuval Mintz #define ETH_TX_DATA_1ST_BD_RESERVED0_SHIFT 1 135351a4dedSYuval Mintz #define ETH_TX_DATA_1ST_BD_PKT_LEN_MASK 0x3FFF 136351a4dedSYuval Mintz #define ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT 2 13725c089d7SYuval Mintz }; 13825c089d7SYuval Mintz 139a2e7699eSTomer Tayar /* The parsing information data for the second tx bd of a given packet */ 14025c089d7SYuval Mintz struct eth_tx_data_2nd_bd { 14125c089d7SYuval Mintz __le16 tunn_ip_size; 142fc48b7a6SYuval Mintz __le16 bitfields1; 14325c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_L2_HDR_SIZE_W_MASK 0xF 14425c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_L2_HDR_SIZE_W_SHIFT 0 14525c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_ETH_TYPE_MASK 0x3 14625c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_ETH_TYPE_SHIFT 4 1470500a70dSMichal Kalderon #define ETH_TX_DATA_2ND_BD_DST_PORT_MODE_MASK 0x3 1480500a70dSMichal Kalderon #define ETH_TX_DATA_2ND_BD_DST_PORT_MODE_SHIFT 6 149fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_START_BD_MASK 0x1 150fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_START_BD_SHIFT 8 15125c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_TYPE_MASK 0x3 152fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_TYPE_SHIFT 9 15325c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_MASK 0x1 154fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_SHIFT 11 15525c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_IPV6_EXT_MASK 0x1 156fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_IPV6_EXT_SHIFT 12 15725c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_MASK 0x1 158fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_SHIFT 13 15925c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_UDP_MASK 0x1 160fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_UDP_SHIFT 14 16125c089d7SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_PSEUDO_CSUM_MODE_MASK 0x1 162fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_PSEUDO_CSUM_MODE_SHIFT 15 163fc48b7a6SYuval Mintz __le16 bitfields2; 164fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_MASK 0x1FFF 165fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_SHIFT 0 166fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_RESERVED0_MASK 0x7 167fc48b7a6SYuval Mintz #define ETH_TX_DATA_2ND_BD_RESERVED0_SHIFT 13 16825c089d7SYuval Mintz }; 16925c089d7SYuval Mintz 170a2e7699eSTomer Tayar /* Firmware data for L2-EDPM packet */ 17105fafbfbSYuval Mintz struct eth_edpm_fw_data { 17205fafbfbSYuval Mintz struct eth_tx_data_1st_bd data_1st_bd; 17305fafbfbSYuval Mintz struct eth_tx_data_2nd_bd data_2nd_bd; 17405fafbfbSYuval Mintz __le32 reserved; 17505fafbfbSYuval Mintz }; 17605fafbfbSYuval Mintz 177a2e7699eSTomer Tayar /* Tunneling parsing flags */ 178351a4dedSYuval Mintz struct eth_tunnel_parsing_flags { 179351a4dedSYuval Mintz u8 flags; 180351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_TYPE_MASK 0x3 181351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_TYPE_SHIFT 0 182351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_TENNANT_ID_EXIST_MASK 0x1 183351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_TENNANT_ID_EXIST_SHIFT 2 184351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_NEXT_PROTOCOL_MASK 0x3 185351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_NEXT_PROTOCOL_SHIFT 3 186351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_FIRSTHDRIPMATCH_MASK 0x1 187351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_FIRSTHDRIPMATCH_SHIFT 5 188351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_MASK 0x1 189351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_SHIFT 6 190351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_IPV4_OPTIONS_MASK 0x1 191351a4dedSYuval Mintz #define ETH_TUNNEL_PARSING_FLAGS_IPV4_OPTIONS_SHIFT 7 192351a4dedSYuval Mintz }; 193351a4dedSYuval Mintz 19405fafbfbSYuval Mintz /* PMD flow control bits */ 19505fafbfbSYuval Mintz struct eth_pmd_flow_flags { 19605fafbfbSYuval Mintz u8 flags; 19705fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_VALID_MASK 0x1 19805fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_VALID_SHIFT 0 19905fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_TOGGLE_MASK 0x1 20005fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_TOGGLE_SHIFT 1 20105fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_RESERVED_MASK 0x3F 20205fafbfbSYuval Mintz #define ETH_PMD_FLOW_FLAGS_RESERVED_SHIFT 2 20305fafbfbSYuval Mintz }; 20405fafbfbSYuval Mintz 205a2e7699eSTomer Tayar /* Regular ETH Rx FP CQE */ 20625c089d7SYuval Mintz struct eth_fast_path_rx_reg_cqe { 20725c089d7SYuval Mintz u8 type; 20825c089d7SYuval Mintz u8 bitfields; 20925c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE_MASK 0x7 21025c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE_SHIFT 0 21125c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_TC_MASK 0xF 21225c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_TC_SHIFT 3 21325c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_RESERVED0_MASK 0x1 21425c089d7SYuval Mintz #define ETH_FAST_PATH_RX_REG_CQE_RESERVED0_SHIFT 7 21525c089d7SYuval Mintz __le16 pkt_len; 21625c089d7SYuval Mintz struct parsing_and_err_flags pars_flags; 21725c089d7SYuval Mintz __le16 vlan_tag; 21825c089d7SYuval Mintz __le32 rss_hash; 219fc48b7a6SYuval Mintz __le16 len_on_first_bd; 22025c089d7SYuval Mintz u8 placement_offset; 221351a4dedSYuval Mintz struct eth_tunnel_parsing_flags tunnel_pars_flags; 222fc48b7a6SYuval Mintz u8 bd_num; 223da090917STomer Tayar u8 reserved; 2240500a70dSMichal Kalderon __le16 reserved2; 2250500a70dSMichal Kalderon __le32 flow_id_or_resource_id; 2260500a70dSMichal Kalderon u8 reserved1[7]; 22705fafbfbSYuval Mintz struct eth_pmd_flow_flags pmd_flags; 228fc48b7a6SYuval Mintz }; 229fc48b7a6SYuval Mintz 230a2e7699eSTomer Tayar /* TPA-continue ETH Rx FP CQE */ 231fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_cont_cqe { 232fc48b7a6SYuval Mintz u8 type; 233fc48b7a6SYuval Mintz u8 tpa_agg_index; 234fc48b7a6SYuval Mintz __le16 len_list[ETH_TPA_CQE_CONT_LEN_LIST_SIZE]; 23505fafbfbSYuval Mintz u8 reserved; 236fc48b7a6SYuval Mintz u8 reserved1; 237fc48b7a6SYuval Mintz __le16 reserved2[ETH_TPA_CQE_CONT_LEN_LIST_SIZE]; 23805fafbfbSYuval Mintz u8 reserved3[3]; 23905fafbfbSYuval Mintz struct eth_pmd_flow_flags pmd_flags; 240fc48b7a6SYuval Mintz }; 241fc48b7a6SYuval Mintz 242a2e7699eSTomer Tayar /* TPA-end ETH Rx FP CQE */ 243fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_end_cqe { 244fc48b7a6SYuval Mintz u8 type; 245fc48b7a6SYuval Mintz u8 tpa_agg_index; 246fc48b7a6SYuval Mintz __le16 total_packet_len; 247fc48b7a6SYuval Mintz u8 num_of_bds; 248fc48b7a6SYuval Mintz u8 end_reason; 249fc48b7a6SYuval Mintz __le16 num_of_coalesced_segs; 250fc48b7a6SYuval Mintz __le32 ts_delta; 251fc48b7a6SYuval Mintz __le16 len_list[ETH_TPA_CQE_END_LEN_LIST_SIZE]; 252fc48b7a6SYuval Mintz __le16 reserved3[ETH_TPA_CQE_END_LEN_LIST_SIZE]; 25305fafbfbSYuval Mintz __le16 reserved1; 25405fafbfbSYuval Mintz u8 reserved2; 25505fafbfbSYuval Mintz struct eth_pmd_flow_flags pmd_flags; 256fc48b7a6SYuval Mintz }; 257fc48b7a6SYuval Mintz 258a2e7699eSTomer Tayar /* TPA-start ETH Rx FP CQE */ 259fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_start_cqe { 260fc48b7a6SYuval Mintz u8 type; 261fc48b7a6SYuval Mintz u8 bitfields; 262fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_RSS_HASH_TYPE_MASK 0x7 263fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_RSS_HASH_TYPE_SHIFT 0 264fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_TC_MASK 0xF 265fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_TC_SHIFT 3 266fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_RESERVED0_MASK 0x1 267fc48b7a6SYuval Mintz #define ETH_FAST_PATH_RX_TPA_START_CQE_RESERVED0_SHIFT 7 268fc48b7a6SYuval Mintz __le16 seg_len; 269fc48b7a6SYuval Mintz struct parsing_and_err_flags pars_flags; 270fc48b7a6SYuval Mintz __le16 vlan_tag; 271fc48b7a6SYuval Mintz __le32 rss_hash; 272fc48b7a6SYuval Mintz __le16 len_on_first_bd; 273fc48b7a6SYuval Mintz u8 placement_offset; 274351a4dedSYuval Mintz struct eth_tunnel_parsing_flags tunnel_pars_flags; 275fc48b7a6SYuval Mintz u8 tpa_agg_index; 276fc48b7a6SYuval Mintz u8 header_len; 2770500a70dSMichal Kalderon __le16 bw_ext_bd_len_list[ETH_TPA_CQE_START_BW_LEN_LIST_SIZE]; 2780500a70dSMichal Kalderon __le16 reserved2; 2790500a70dSMichal Kalderon __le32 flow_id_or_resource_id; 2800500a70dSMichal Kalderon u8 reserved[3]; 28105fafbfbSYuval Mintz struct eth_pmd_flow_flags pmd_flags; 28225c089d7SYuval Mintz }; 28325c089d7SYuval Mintz 28425c089d7SYuval Mintz /* The L4 pseudo checksum mode for Ethernet */ 28525c089d7SYuval Mintz enum eth_l4_pseudo_checksum_mode { 28625c089d7SYuval Mintz ETH_L4_PSEUDO_CSUM_CORRECT_LENGTH, 28725c089d7SYuval Mintz ETH_L4_PSEUDO_CSUM_ZERO_LENGTH, 28825c089d7SYuval Mintz MAX_ETH_L4_PSEUDO_CHECKSUM_MODE 28925c089d7SYuval Mintz }; 29025c089d7SYuval Mintz 29125c089d7SYuval Mintz struct eth_rx_bd { 29225c089d7SYuval Mintz struct regpair addr; 29325c089d7SYuval Mintz }; 29425c089d7SYuval Mintz 295a2e7699eSTomer Tayar /* Regular ETH Rx SP CQE */ 29625c089d7SYuval Mintz struct eth_slow_path_rx_cqe { 29725c089d7SYuval Mintz u8 type; 29825c089d7SYuval Mintz u8 ramrod_cmd_id; 29925c089d7SYuval Mintz u8 error_flag; 300fc48b7a6SYuval Mintz u8 reserved[25]; 30125c089d7SYuval Mintz __le16 echo; 302fc48b7a6SYuval Mintz u8 reserved1; 30305fafbfbSYuval Mintz struct eth_pmd_flow_flags pmd_flags; 30425c089d7SYuval Mintz }; 30525c089d7SYuval Mintz 306a2e7699eSTomer Tayar /* Union for all ETH Rx CQE types */ 30725c089d7SYuval Mintz union eth_rx_cqe { 30825c089d7SYuval Mintz struct eth_fast_path_rx_reg_cqe fast_path_regular; 309fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_start_cqe fast_path_tpa_start; 310fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_cont_cqe fast_path_tpa_cont; 311fc48b7a6SYuval Mintz struct eth_fast_path_rx_tpa_end_cqe fast_path_tpa_end; 31225c089d7SYuval Mintz struct eth_slow_path_rx_cqe slow_path; 31325c089d7SYuval Mintz }; 31425c089d7SYuval Mintz 31525c089d7SYuval Mintz /* ETH Rx CQE type */ 31625c089d7SYuval Mintz enum eth_rx_cqe_type { 31725c089d7SYuval Mintz ETH_RX_CQE_TYPE_UNUSED, 31825c089d7SYuval Mintz ETH_RX_CQE_TYPE_REGULAR, 31925c089d7SYuval Mintz ETH_RX_CQE_TYPE_SLOW_PATH, 320fc48b7a6SYuval Mintz ETH_RX_CQE_TYPE_TPA_START, 321fc48b7a6SYuval Mintz ETH_RX_CQE_TYPE_TPA_CONT, 322fc48b7a6SYuval Mintz ETH_RX_CQE_TYPE_TPA_END, 32325c089d7SYuval Mintz MAX_ETH_RX_CQE_TYPE 32425c089d7SYuval Mintz }; 32525c089d7SYuval Mintz 32605fafbfbSYuval Mintz struct eth_rx_pmd_cqe { 32705fafbfbSYuval Mintz union eth_rx_cqe cqe; 32805fafbfbSYuval Mintz u8 reserved[ETH_RX_CQE_GAP]; 32905fafbfbSYuval Mintz }; 33005fafbfbSYuval Mintz 331351a4dedSYuval Mintz enum eth_rx_tunn_type { 332351a4dedSYuval Mintz ETH_RX_NO_TUNN, 333351a4dedSYuval Mintz ETH_RX_TUNN_GENEVE, 334351a4dedSYuval Mintz ETH_RX_TUNN_GRE, 335351a4dedSYuval Mintz ETH_RX_TUNN_VXLAN, 336351a4dedSYuval Mintz MAX_ETH_RX_TUNN_TYPE 337351a4dedSYuval Mintz }; 338351a4dedSYuval Mintz 339351a4dedSYuval Mintz /* Aggregation end reason. */ 340351a4dedSYuval Mintz enum eth_tpa_end_reason { 341351a4dedSYuval Mintz ETH_AGG_END_UNUSED, 342351a4dedSYuval Mintz ETH_AGG_END_SP_UPDATE, 343351a4dedSYuval Mintz ETH_AGG_END_MAX_LEN, 344351a4dedSYuval Mintz ETH_AGG_END_LAST_SEG, 345351a4dedSYuval Mintz ETH_AGG_END_TIMEOUT, 346351a4dedSYuval Mintz ETH_AGG_END_NOT_CONSISTENT, 347351a4dedSYuval Mintz ETH_AGG_END_OUT_OF_ORDER, 348351a4dedSYuval Mintz ETH_AGG_END_NON_TPA_SEG, 349351a4dedSYuval Mintz MAX_ETH_TPA_END_REASON 35025c089d7SYuval Mintz }; 35125c089d7SYuval Mintz 35225c089d7SYuval Mintz /* The first tx bd of a given packet */ 35325c089d7SYuval Mintz struct eth_tx_1st_bd { 35425c089d7SYuval Mintz struct regpair addr; 35525c089d7SYuval Mintz __le16 nbytes; 35625c089d7SYuval Mintz struct eth_tx_data_1st_bd data; 35725c089d7SYuval Mintz }; 35825c089d7SYuval Mintz 35925c089d7SYuval Mintz /* The second tx bd of a given packet */ 36025c089d7SYuval Mintz struct eth_tx_2nd_bd { 36125c089d7SYuval Mintz struct regpair addr; 36225c089d7SYuval Mintz __le16 nbytes; 36325c089d7SYuval Mintz struct eth_tx_data_2nd_bd data; 36425c089d7SYuval Mintz }; 36525c089d7SYuval Mintz 366a2e7699eSTomer Tayar /* The parsing information data for the third tx bd of a given packet */ 36725c089d7SYuval Mintz struct eth_tx_data_3rd_bd { 36825c089d7SYuval Mintz __le16 lso_mss; 369fc48b7a6SYuval Mintz __le16 bitfields; 37025c089d7SYuval Mintz #define ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_MASK 0xF 37125c089d7SYuval Mintz #define ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_SHIFT 0 37225c089d7SYuval Mintz #define ETH_TX_DATA_3RD_BD_HDR_NBD_MASK 0xF 37325c089d7SYuval Mintz #define ETH_TX_DATA_3RD_BD_HDR_NBD_SHIFT 4 374fc48b7a6SYuval Mintz #define ETH_TX_DATA_3RD_BD_START_BD_MASK 0x1 375fc48b7a6SYuval Mintz #define ETH_TX_DATA_3RD_BD_START_BD_SHIFT 8 376fc48b7a6SYuval Mintz #define ETH_TX_DATA_3RD_BD_RESERVED0_MASK 0x7F 377fc48b7a6SYuval Mintz #define ETH_TX_DATA_3RD_BD_RESERVED0_SHIFT 9 378fc48b7a6SYuval Mintz u8 tunn_l4_hdr_start_offset_w; 379fc48b7a6SYuval Mintz u8 tunn_hdr_size_w; 38025c089d7SYuval Mintz }; 38125c089d7SYuval Mintz 38225c089d7SYuval Mintz /* The third tx bd of a given packet */ 38325c089d7SYuval Mintz struct eth_tx_3rd_bd { 38425c089d7SYuval Mintz struct regpair addr; 38525c089d7SYuval Mintz __le16 nbytes; 38625c089d7SYuval Mintz struct eth_tx_data_3rd_bd data; 38725c089d7SYuval Mintz }; 38825c089d7SYuval Mintz 3890500a70dSMichal Kalderon /* The parsing information data for the forth tx bd of a given packet. */ 3900500a70dSMichal Kalderon struct eth_tx_data_4th_bd { 3910500a70dSMichal Kalderon u8 dst_vport_id; 3920500a70dSMichal Kalderon u8 reserved4; 3930500a70dSMichal Kalderon __le16 bitfields; 3940500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_MASK 0x1 3950500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_SHIFT 0 3960500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_RESERVED1_MASK 0x7F 3970500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_RESERVED1_SHIFT 1 3980500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_START_BD_MASK 0x1 3990500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_START_BD_SHIFT 8 4000500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_RESERVED2_MASK 0x7F 4010500a70dSMichal Kalderon #define ETH_TX_DATA_4TH_BD_RESERVED2_SHIFT 9 4020500a70dSMichal Kalderon __le16 reserved3; 4030500a70dSMichal Kalderon }; 4040500a70dSMichal Kalderon 4050500a70dSMichal Kalderon /* The forth tx bd of a given packet */ 4060500a70dSMichal Kalderon struct eth_tx_4th_bd { 4070500a70dSMichal Kalderon struct regpair addr; /* Single continuous buffer */ 4080500a70dSMichal Kalderon __le16 nbytes; /* Number of bytes in this BD */ 4090500a70dSMichal Kalderon struct eth_tx_data_4th_bd data; /* Parsing information data */ 4100500a70dSMichal Kalderon }; 4110500a70dSMichal Kalderon 412a2e7699eSTomer Tayar /* Complementary information for the regular tx bd of a given packet */ 413fc48b7a6SYuval Mintz struct eth_tx_data_bd { 414fc48b7a6SYuval Mintz __le16 reserved0; 415fc48b7a6SYuval Mintz __le16 bitfields; 416fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_RESERVED1_MASK 0xFF 417fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_RESERVED1_SHIFT 0 418fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_START_BD_MASK 0x1 419fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_START_BD_SHIFT 8 420fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_RESERVED2_MASK 0x7F 421fc48b7a6SYuval Mintz #define ETH_TX_DATA_BD_RESERVED2_SHIFT 9 422fc48b7a6SYuval Mintz __le16 reserved3; 423fc48b7a6SYuval Mintz }; 424fc48b7a6SYuval Mintz 42525c089d7SYuval Mintz /* The common non-special TX BD ring element */ 42625c089d7SYuval Mintz struct eth_tx_bd { 42725c089d7SYuval Mintz struct regpair addr; 42825c089d7SYuval Mintz __le16 nbytes; 429fc48b7a6SYuval Mintz struct eth_tx_data_bd data; 43025c089d7SYuval Mintz }; 43125c089d7SYuval Mintz 43225c089d7SYuval Mintz union eth_tx_bd_types { 43325c089d7SYuval Mintz struct eth_tx_1st_bd first_bd; 43425c089d7SYuval Mintz struct eth_tx_2nd_bd second_bd; 43525c089d7SYuval Mintz struct eth_tx_3rd_bd third_bd; 4360500a70dSMichal Kalderon struct eth_tx_4th_bd fourth_bd; 43725c089d7SYuval Mintz struct eth_tx_bd reg_bd; 43825c089d7SYuval Mintz }; 43925c089d7SYuval Mintz 44025c089d7SYuval Mintz /* Mstorm Queue Zone */ 441351a4dedSYuval Mintz enum eth_tx_tunn_type { 442351a4dedSYuval Mintz ETH_TX_TUNN_GENEVE, 443351a4dedSYuval Mintz ETH_TX_TUNN_TTAG, 444351a4dedSYuval Mintz ETH_TX_TUNN_GRE, 445351a4dedSYuval Mintz ETH_TX_TUNN_VXLAN, 446351a4dedSYuval Mintz MAX_ETH_TX_TUNN_TYPE 44725c089d7SYuval Mintz }; 44825c089d7SYuval Mintz 4490500a70dSMichal Kalderon /* Mstorm Queue Zone */ 4500500a70dSMichal Kalderon struct mstorm_eth_queue_zone { 4510500a70dSMichal Kalderon struct eth_rx_prod_data rx_producers; 4520500a70dSMichal Kalderon __le32 reserved[3]; 4530500a70dSMichal Kalderon }; 4540500a70dSMichal Kalderon 45525c089d7SYuval Mintz /* Ystorm Queue Zone */ 456351a4dedSYuval Mintz struct xstorm_eth_queue_zone { 45725c089d7SYuval Mintz struct coalescing_timeset int_coalescing_timeset; 458351a4dedSYuval Mintz u8 reserved[7]; 45925c089d7SYuval Mintz }; 46025c089d7SYuval Mintz 46125c089d7SYuval Mintz /* ETH doorbell data */ 46225c089d7SYuval Mintz struct eth_db_data { 46325c089d7SYuval Mintz u8 params; 46425c089d7SYuval Mintz #define ETH_DB_DATA_DEST_MASK 0x3 46525c089d7SYuval Mintz #define ETH_DB_DATA_DEST_SHIFT 0 46625c089d7SYuval Mintz #define ETH_DB_DATA_AGG_CMD_MASK 0x3 46725c089d7SYuval Mintz #define ETH_DB_DATA_AGG_CMD_SHIFT 2 46825c089d7SYuval Mintz #define ETH_DB_DATA_BYPASS_EN_MASK 0x1 46925c089d7SYuval Mintz #define ETH_DB_DATA_BYPASS_EN_SHIFT 4 47025c089d7SYuval Mintz #define ETH_DB_DATA_RESERVED_MASK 0x1 47125c089d7SYuval Mintz #define ETH_DB_DATA_RESERVED_SHIFT 5 47225c089d7SYuval Mintz #define ETH_DB_DATA_AGG_VAL_SEL_MASK 0x3 47325c089d7SYuval Mintz #define ETH_DB_DATA_AGG_VAL_SEL_SHIFT 6 47425c089d7SYuval Mintz u8 agg_flags; 47525c089d7SYuval Mintz __le16 bd_prod; 47625c089d7SYuval Mintz }; 47725c089d7SYuval Mintz 478a2e7699eSTomer Tayar /* RSS hash type */ 479a2e7699eSTomer Tayar enum rss_hash_type { 480a2e7699eSTomer Tayar RSS_HASH_TYPE_DEFAULT = 0, 481a2e7699eSTomer Tayar RSS_HASH_TYPE_IPV4 = 1, 482a2e7699eSTomer Tayar RSS_HASH_TYPE_TCP_IPV4 = 2, 483a2e7699eSTomer Tayar RSS_HASH_TYPE_IPV6 = 3, 484a2e7699eSTomer Tayar RSS_HASH_TYPE_TCP_IPV6 = 4, 485a2e7699eSTomer Tayar RSS_HASH_TYPE_UDP_IPV4 = 5, 486a2e7699eSTomer Tayar RSS_HASH_TYPE_UDP_IPV6 = 6, 487a2e7699eSTomer Tayar MAX_RSS_HASH_TYPE 488a2e7699eSTomer Tayar }; 489a2e7699eSTomer Tayar 49025c089d7SYuval Mintz #endif /* __ETH_COMMON__ */ 491