Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
0002 /* QLogic qed NIC Driver
0003  * Copyright (c) 2015-2017  QLogic Corporation
0004  * Copyright (c) 2019-2020 Marvell International Ltd.
0005  */
0006 
0007 #ifndef __ETH_COMMON__
0008 #define __ETH_COMMON__
0009 
0010 /********************/
0011 /* ETH FW CONSTANTS */
0012 /********************/
0013 
0014 #define ETH_HSI_VER_MAJOR       3
0015 #define ETH_HSI_VER_MINOR       11
0016 
0017 #define ETH_HSI_VER_NO_PKT_LEN_TUNN         5
0018 /* Maximum number of pinned L2 connections (CIDs) */
0019 #define ETH_PINNED_CONN_MAX_NUM             32
0020 
0021 #define ETH_CACHE_LINE_SIZE     64
0022 #define ETH_RX_CQE_GAP          32
0023 #define ETH_MAX_RAMROD_PER_CON      8
0024 #define ETH_TX_BD_PAGE_SIZE_BYTES   4096
0025 #define ETH_RX_BD_PAGE_SIZE_BYTES   4096
0026 #define ETH_RX_CQE_PAGE_SIZE_BYTES  4096
0027 #define ETH_RX_NUM_NEXT_PAGE_BDS    2
0028 
0029 #define ETH_MAX_TUNN_LSO_INNER_IPV4_OFFSET  253
0030 #define ETH_MAX_TUNN_LSO_INNER_IPV6_OFFSET  251
0031 
0032 #define ETH_TX_MIN_BDS_PER_NON_LSO_PKT          1
0033 #define ETH_TX_MAX_BDS_PER_NON_LSO_PACKET       18
0034 #define ETH_TX_MAX_BDS_PER_LSO_PACKET           255
0035 #define ETH_TX_MAX_LSO_HDR_NBD              4
0036 #define ETH_TX_MIN_BDS_PER_LSO_PKT          3
0037 #define ETH_TX_MIN_BDS_PER_TUNN_IPV6_WITH_EXT_PKT   3
0038 #define ETH_TX_MIN_BDS_PER_IPV6_WITH_EXT_PKT        2
0039 #define ETH_TX_MIN_BDS_PER_PKT_W_LOOPBACK_MODE      2
0040 #define ETH_TX_MIN_BDS_PER_PKT_W_VPORT_FORWARDING   4
0041 #define ETH_TX_MAX_NON_LSO_PKT_LEN      (9700 - (4 + 4 + 12 + 8))
0042 #define ETH_TX_MAX_LSO_HDR_BYTES            510
0043 #define ETH_TX_LSO_WINDOW_BDS_NUM           (18 - 1)
0044 #define ETH_TX_LSO_WINDOW_MIN_LEN           9700
0045 #define ETH_TX_MAX_LSO_PAYLOAD_LEN          0xFE000
0046 #define ETH_TX_NUM_SAME_AS_LAST_ENTRIES         320
0047 #define ETH_TX_INACTIVE_SAME_AS_LAST            0xFFFF
0048 
0049 #define ETH_NUM_STATISTIC_COUNTERS          MAX_NUM_VPORTS
0050 #define ETH_NUM_STATISTIC_COUNTERS_DOUBLE_VF_ZONE \
0051     (ETH_NUM_STATISTIC_COUNTERS - MAX_NUM_VFS / 2)
0052 #define ETH_NUM_STATISTIC_COUNTERS_QUAD_VF_ZONE \
0053     (ETH_NUM_STATISTIC_COUNTERS - 3 * MAX_NUM_VFS / 4)
0054 
0055 #define ETH_RX_MAX_BUFF_PER_PKT     5
0056 #define ETH_RX_BD_THRESHOLD             16
0057 
0058 /* Num of MAC/VLAN filters */
0059 #define ETH_NUM_MAC_FILTERS     512
0060 #define ETH_NUM_VLAN_FILTERS        512
0061 
0062 /* Approx. multicast constants */
0063 #define ETH_MULTICAST_BIN_FROM_MAC_SEED 0
0064 #define ETH_MULTICAST_MAC_BINS      256
0065 #define ETH_MULTICAST_MAC_BINS_IN_REGS  (ETH_MULTICAST_MAC_BINS / 32)
0066 
0067 /* Ethernet vport update constants */
0068 #define ETH_FILTER_RULES_COUNT      10
0069 #define ETH_RSS_IND_TABLE_ENTRIES_NUM   128
0070 #define ETH_RSS_IND_TABLE_MASK_SIZE_REGS    (ETH_RSS_IND_TABLE_ENTRIES_NUM / 32)
0071 #define ETH_RSS_KEY_SIZE_REGS       10
0072 #define ETH_RSS_ENGINE_NUM_K2       207
0073 #define ETH_RSS_ENGINE_NUM_BB       127
0074 
0075 /* TPA constants */
0076 #define ETH_TPA_MAX_AGGS_NUM                64
0077 #define ETH_TPA_CQE_START_BW_LEN_LIST_SIZE  2
0078 #define ETH_TPA_CQE_CONT_LEN_LIST_SIZE      6
0079 #define ETH_TPA_CQE_END_LEN_LIST_SIZE       4
0080 
0081 /* Control frame check constants */
0082 #define ETH_CTL_FRAME_ETH_TYPE_NUM        4
0083 
0084 /* GFS constants */
0085 #define ETH_GFT_TRASHCAN_VPORT         0x1FF    /* GFT drop flow vport number */
0086 
0087 /* Destination port mode */
0088 enum dst_port_mode {
0089     DST_PORT_PHY,
0090     DST_PORT_LOOPBACK,
0091     DST_PORT_PHY_LOOPBACK,
0092     DST_PORT_DROP,
0093     MAX_DST_PORT_MODE
0094 };
0095 
0096 /* Ethernet address type */
0097 enum eth_addr_type {
0098     BROADCAST_ADDRESS,
0099     MULTICAST_ADDRESS,
0100     UNICAST_ADDRESS,
0101     UNKNOWN_ADDRESS,
0102     MAX_ETH_ADDR_TYPE
0103 };
0104 
0105 struct eth_tx_1st_bd_flags {
0106     u8 bitfields;
0107 #define ETH_TX_1ST_BD_FLAGS_START_BD_MASK       0x1
0108 #define ETH_TX_1ST_BD_FLAGS_START_BD_SHIFT      0
0109 #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_MASK    0x1
0110 #define ETH_TX_1ST_BD_FLAGS_FORCE_VLAN_MODE_SHIFT   1
0111 #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_MASK        0x1
0112 #define ETH_TX_1ST_BD_FLAGS_IP_CSUM_SHIFT       2
0113 #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_MASK        0x1
0114 #define ETH_TX_1ST_BD_FLAGS_L4_CSUM_SHIFT       3
0115 #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_MASK     0x1
0116 #define ETH_TX_1ST_BD_FLAGS_VLAN_INSERTION_SHIFT    4
0117 #define ETH_TX_1ST_BD_FLAGS_LSO_MASK            0x1
0118 #define ETH_TX_1ST_BD_FLAGS_LSO_SHIFT           5
0119 #define ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_MASK       0x1
0120 #define ETH_TX_1ST_BD_FLAGS_TUNN_IP_CSUM_SHIFT      6
0121 #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_MASK       0x1
0122 #define ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_SHIFT      7
0123 };
0124 
0125 /* The parsing information data fo rthe first tx bd of a given packet */
0126 struct eth_tx_data_1st_bd {
0127     __le16 vlan;
0128     u8 nbds;
0129     struct eth_tx_1st_bd_flags bd_flags;
0130     __le16 bitfields;
0131 #define ETH_TX_DATA_1ST_BD_TUNN_FLAG_MASK   0x1
0132 #define ETH_TX_DATA_1ST_BD_TUNN_FLAG_SHIFT  0
0133 #define ETH_TX_DATA_1ST_BD_RESERVED0_MASK   0x1
0134 #define ETH_TX_DATA_1ST_BD_RESERVED0_SHIFT  1
0135 #define ETH_TX_DATA_1ST_BD_PKT_LEN_MASK     0x3FFF
0136 #define ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT    2
0137 };
0138 
0139 /* The parsing information data for the second tx bd of a given packet */
0140 struct eth_tx_data_2nd_bd {
0141     __le16 tunn_ip_size;
0142     __le16  bitfields1;
0143 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_L2_HDR_SIZE_W_MASK    0xF
0144 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_L2_HDR_SIZE_W_SHIFT   0
0145 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_ETH_TYPE_MASK     0x3
0146 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_ETH_TYPE_SHIFT        4
0147 #define ETH_TX_DATA_2ND_BD_DST_PORT_MODE_MASK           0x3
0148 #define ETH_TX_DATA_2ND_BD_DST_PORT_MODE_SHIFT          6
0149 #define ETH_TX_DATA_2ND_BD_START_BD_MASK            0x1
0150 #define ETH_TX_DATA_2ND_BD_START_BD_SHIFT           8
0151 #define ETH_TX_DATA_2ND_BD_TUNN_TYPE_MASK           0x3
0152 #define ETH_TX_DATA_2ND_BD_TUNN_TYPE_SHIFT          9
0153 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_MASK         0x1
0154 #define ETH_TX_DATA_2ND_BD_TUNN_INNER_IPV6_SHIFT        11
0155 #define ETH_TX_DATA_2ND_BD_IPV6_EXT_MASK            0x1
0156 #define ETH_TX_DATA_2ND_BD_IPV6_EXT_SHIFT           12
0157 #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_MASK           0x1
0158 #define ETH_TX_DATA_2ND_BD_TUNN_IPV6_EXT_SHIFT          13
0159 #define ETH_TX_DATA_2ND_BD_L4_UDP_MASK              0x1
0160 #define ETH_TX_DATA_2ND_BD_L4_UDP_SHIFT             14
0161 #define ETH_TX_DATA_2ND_BD_L4_PSEUDO_CSUM_MODE_MASK     0x1
0162 #define ETH_TX_DATA_2ND_BD_L4_PSEUDO_CSUM_MODE_SHIFT        15
0163     __le16 bitfields2;
0164 #define ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_MASK       0x1FFF
0165 #define ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_SHIFT      0
0166 #define ETH_TX_DATA_2ND_BD_RESERVED0_MASK           0x7
0167 #define ETH_TX_DATA_2ND_BD_RESERVED0_SHIFT          13
0168 };
0169 
0170 /* Firmware data for L2-EDPM packet */
0171 struct eth_edpm_fw_data {
0172     struct eth_tx_data_1st_bd data_1st_bd;
0173     struct eth_tx_data_2nd_bd data_2nd_bd;
0174     __le32 reserved;
0175 };
0176 
0177 /* Tunneling parsing flags */
0178 struct eth_tunnel_parsing_flags {
0179     u8 flags;
0180 #define ETH_TUNNEL_PARSING_FLAGS_TYPE_MASK      0x3
0181 #define ETH_TUNNEL_PARSING_FLAGS_TYPE_SHIFT     0
0182 #define ETH_TUNNEL_PARSING_FLAGS_TENNANT_ID_EXIST_MASK  0x1
0183 #define ETH_TUNNEL_PARSING_FLAGS_TENNANT_ID_EXIST_SHIFT 2
0184 #define ETH_TUNNEL_PARSING_FLAGS_NEXT_PROTOCOL_MASK 0x3
0185 #define ETH_TUNNEL_PARSING_FLAGS_NEXT_PROTOCOL_SHIFT    3
0186 #define ETH_TUNNEL_PARSING_FLAGS_FIRSTHDRIPMATCH_MASK   0x1
0187 #define ETH_TUNNEL_PARSING_FLAGS_FIRSTHDRIPMATCH_SHIFT  5
0188 #define ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_MASK 0x1
0189 #define ETH_TUNNEL_PARSING_FLAGS_IPV4_FRAGMENT_SHIFT    6
0190 #define ETH_TUNNEL_PARSING_FLAGS_IPV4_OPTIONS_MASK  0x1
0191 #define ETH_TUNNEL_PARSING_FLAGS_IPV4_OPTIONS_SHIFT 7
0192 };
0193 
0194 /* PMD flow control bits */
0195 struct eth_pmd_flow_flags {
0196     u8 flags;
0197 #define ETH_PMD_FLOW_FLAGS_VALID_MASK       0x1
0198 #define ETH_PMD_FLOW_FLAGS_VALID_SHIFT      0
0199 #define ETH_PMD_FLOW_FLAGS_TOGGLE_MASK      0x1
0200 #define ETH_PMD_FLOW_FLAGS_TOGGLE_SHIFT     1
0201 #define ETH_PMD_FLOW_FLAGS_RESERVED_MASK    0x3F
0202 #define ETH_PMD_FLOW_FLAGS_RESERVED_SHIFT   2
0203 };
0204 
0205 /* Regular ETH Rx FP CQE */
0206 struct eth_fast_path_rx_reg_cqe {
0207     u8 type;
0208     u8 bitfields;
0209 #define ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE_MASK 0x7
0210 #define ETH_FAST_PATH_RX_REG_CQE_RSS_HASH_TYPE_SHIFT    0
0211 #define ETH_FAST_PATH_RX_REG_CQE_TC_MASK        0xF
0212 #define ETH_FAST_PATH_RX_REG_CQE_TC_SHIFT       3
0213 #define ETH_FAST_PATH_RX_REG_CQE_RESERVED0_MASK     0x1
0214 #define ETH_FAST_PATH_RX_REG_CQE_RESERVED0_SHIFT    7
0215     __le16 pkt_len;
0216     struct parsing_and_err_flags pars_flags;
0217     __le16 vlan_tag;
0218     __le32 rss_hash;
0219     __le16 len_on_first_bd;
0220     u8 placement_offset;
0221     struct eth_tunnel_parsing_flags tunnel_pars_flags;
0222     u8 bd_num;
0223     u8 reserved;
0224     __le16 reserved2;
0225     __le32 flow_id_or_resource_id;
0226     u8 reserved1[7];
0227     struct eth_pmd_flow_flags pmd_flags;
0228 };
0229 
0230 /* TPA-continue ETH Rx FP CQE */
0231 struct eth_fast_path_rx_tpa_cont_cqe {
0232     u8 type;
0233     u8 tpa_agg_index;
0234     __le16 len_list[ETH_TPA_CQE_CONT_LEN_LIST_SIZE];
0235     u8 reserved;
0236     u8 reserved1;
0237     __le16 reserved2[ETH_TPA_CQE_CONT_LEN_LIST_SIZE];
0238     u8 reserved3[3];
0239     struct eth_pmd_flow_flags pmd_flags;
0240 };
0241 
0242 /* TPA-end ETH Rx FP CQE */
0243 struct eth_fast_path_rx_tpa_end_cqe {
0244     u8 type;
0245     u8 tpa_agg_index;
0246     __le16 total_packet_len;
0247     u8 num_of_bds;
0248     u8 end_reason;
0249     __le16 num_of_coalesced_segs;
0250     __le32 ts_delta;
0251     __le16 len_list[ETH_TPA_CQE_END_LEN_LIST_SIZE];
0252     __le16 reserved3[ETH_TPA_CQE_END_LEN_LIST_SIZE];
0253     __le16 reserved1;
0254     u8 reserved2;
0255     struct eth_pmd_flow_flags pmd_flags;
0256 };
0257 
0258 /* TPA-start ETH Rx FP CQE */
0259 struct eth_fast_path_rx_tpa_start_cqe {
0260     u8 type;
0261     u8 bitfields;
0262 #define ETH_FAST_PATH_RX_TPA_START_CQE_RSS_HASH_TYPE_MASK   0x7
0263 #define ETH_FAST_PATH_RX_TPA_START_CQE_RSS_HASH_TYPE_SHIFT  0
0264 #define ETH_FAST_PATH_RX_TPA_START_CQE_TC_MASK          0xF
0265 #define ETH_FAST_PATH_RX_TPA_START_CQE_TC_SHIFT         3
0266 #define ETH_FAST_PATH_RX_TPA_START_CQE_RESERVED0_MASK       0x1
0267 #define ETH_FAST_PATH_RX_TPA_START_CQE_RESERVED0_SHIFT      7
0268     __le16 seg_len;
0269     struct parsing_and_err_flags pars_flags;
0270     __le16 vlan_tag;
0271     __le32 rss_hash;
0272     __le16 len_on_first_bd;
0273     u8 placement_offset;
0274     struct eth_tunnel_parsing_flags tunnel_pars_flags;
0275     u8 tpa_agg_index;
0276     u8 header_len;
0277     __le16 bw_ext_bd_len_list[ETH_TPA_CQE_START_BW_LEN_LIST_SIZE];
0278     __le16 reserved2;
0279     __le32 flow_id_or_resource_id;
0280     u8 reserved[3];
0281     struct eth_pmd_flow_flags pmd_flags;
0282 };
0283 
0284 /* The L4 pseudo checksum mode for Ethernet */
0285 enum eth_l4_pseudo_checksum_mode {
0286     ETH_L4_PSEUDO_CSUM_CORRECT_LENGTH,
0287     ETH_L4_PSEUDO_CSUM_ZERO_LENGTH,
0288     MAX_ETH_L4_PSEUDO_CHECKSUM_MODE
0289 };
0290 
0291 struct eth_rx_bd {
0292     struct regpair addr;
0293 };
0294 
0295 /* Regular ETH Rx SP CQE */
0296 struct eth_slow_path_rx_cqe {
0297     u8 type;
0298     u8 ramrod_cmd_id;
0299     u8 error_flag;
0300     u8 reserved[25];
0301     __le16 echo;
0302     u8 reserved1;
0303     struct eth_pmd_flow_flags pmd_flags;
0304 };
0305 
0306 /* Union for all ETH Rx CQE types */
0307 union eth_rx_cqe {
0308     struct eth_fast_path_rx_reg_cqe fast_path_regular;
0309     struct eth_fast_path_rx_tpa_start_cqe fast_path_tpa_start;
0310     struct eth_fast_path_rx_tpa_cont_cqe fast_path_tpa_cont;
0311     struct eth_fast_path_rx_tpa_end_cqe fast_path_tpa_end;
0312     struct eth_slow_path_rx_cqe slow_path;
0313 };
0314 
0315 /* ETH Rx CQE type */
0316 enum eth_rx_cqe_type {
0317     ETH_RX_CQE_TYPE_UNUSED,
0318     ETH_RX_CQE_TYPE_REGULAR,
0319     ETH_RX_CQE_TYPE_SLOW_PATH,
0320     ETH_RX_CQE_TYPE_TPA_START,
0321     ETH_RX_CQE_TYPE_TPA_CONT,
0322     ETH_RX_CQE_TYPE_TPA_END,
0323     MAX_ETH_RX_CQE_TYPE
0324 };
0325 
0326 struct eth_rx_pmd_cqe {
0327     union eth_rx_cqe cqe;
0328     u8 reserved[ETH_RX_CQE_GAP];
0329 };
0330 
0331 enum eth_rx_tunn_type {
0332     ETH_RX_NO_TUNN,
0333     ETH_RX_TUNN_GENEVE,
0334     ETH_RX_TUNN_GRE,
0335     ETH_RX_TUNN_VXLAN,
0336     MAX_ETH_RX_TUNN_TYPE
0337 };
0338 
0339 /* Aggregation end reason. */
0340 enum eth_tpa_end_reason {
0341     ETH_AGG_END_UNUSED,
0342     ETH_AGG_END_SP_UPDATE,
0343     ETH_AGG_END_MAX_LEN,
0344     ETH_AGG_END_LAST_SEG,
0345     ETH_AGG_END_TIMEOUT,
0346     ETH_AGG_END_NOT_CONSISTENT,
0347     ETH_AGG_END_OUT_OF_ORDER,
0348     ETH_AGG_END_NON_TPA_SEG,
0349     MAX_ETH_TPA_END_REASON
0350 };
0351 
0352 /* The first tx bd of a given packet */
0353 struct eth_tx_1st_bd {
0354     struct regpair addr;
0355     __le16 nbytes;
0356     struct eth_tx_data_1st_bd data;
0357 };
0358 
0359 /* The second tx bd of a given packet */
0360 struct eth_tx_2nd_bd {
0361     struct regpair addr;
0362     __le16 nbytes;
0363     struct eth_tx_data_2nd_bd data;
0364 };
0365 
0366 /* The parsing information data for the third tx bd of a given packet */
0367 struct eth_tx_data_3rd_bd {
0368     __le16 lso_mss;
0369     __le16 bitfields;
0370 #define ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_MASK  0xF
0371 #define ETH_TX_DATA_3RD_BD_TCP_HDR_LEN_DW_SHIFT 0
0372 #define ETH_TX_DATA_3RD_BD_HDR_NBD_MASK     0xF
0373 #define ETH_TX_DATA_3RD_BD_HDR_NBD_SHIFT    4
0374 #define ETH_TX_DATA_3RD_BD_START_BD_MASK    0x1
0375 #define ETH_TX_DATA_3RD_BD_START_BD_SHIFT   8
0376 #define ETH_TX_DATA_3RD_BD_RESERVED0_MASK   0x7F
0377 #define ETH_TX_DATA_3RD_BD_RESERVED0_SHIFT  9
0378     u8 tunn_l4_hdr_start_offset_w;
0379     u8 tunn_hdr_size_w;
0380 };
0381 
0382 /* The third tx bd of a given packet */
0383 struct eth_tx_3rd_bd {
0384     struct regpair addr;
0385     __le16 nbytes;
0386     struct eth_tx_data_3rd_bd data;
0387 };
0388 
0389 /* The parsing information data for the forth tx bd of a given packet. */
0390 struct eth_tx_data_4th_bd {
0391     u8 dst_vport_id;
0392     u8 reserved4;
0393     __le16 bitfields;
0394 #define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_MASK  0x1
0395 #define ETH_TX_DATA_4TH_BD_DST_VPORT_ID_VALID_SHIFT 0
0396 #define ETH_TX_DATA_4TH_BD_RESERVED1_MASK           0x7F
0397 #define ETH_TX_DATA_4TH_BD_RESERVED1_SHIFT          1
0398 #define ETH_TX_DATA_4TH_BD_START_BD_MASK            0x1
0399 #define ETH_TX_DATA_4TH_BD_START_BD_SHIFT           8
0400 #define ETH_TX_DATA_4TH_BD_RESERVED2_MASK           0x7F
0401 #define ETH_TX_DATA_4TH_BD_RESERVED2_SHIFT          9
0402     __le16 reserved3;
0403 };
0404 
0405 /* The forth tx bd of a given packet */
0406 struct eth_tx_4th_bd {
0407     struct regpair addr; /* Single continuous buffer */
0408     __le16 nbytes; /* Number of bytes in this BD */
0409     struct eth_tx_data_4th_bd data; /* Parsing information data */
0410 };
0411 
0412 /* Complementary information for the regular tx bd of a given packet */
0413 struct eth_tx_data_bd {
0414     __le16 reserved0;
0415     __le16 bitfields;
0416 #define ETH_TX_DATA_BD_RESERVED1_MASK   0xFF
0417 #define ETH_TX_DATA_BD_RESERVED1_SHIFT  0
0418 #define ETH_TX_DATA_BD_START_BD_MASK    0x1
0419 #define ETH_TX_DATA_BD_START_BD_SHIFT   8
0420 #define ETH_TX_DATA_BD_RESERVED2_MASK   0x7F
0421 #define ETH_TX_DATA_BD_RESERVED2_SHIFT  9
0422     __le16 reserved3;
0423 };
0424 
0425 /* The common non-special TX BD ring element */
0426 struct eth_tx_bd {
0427     struct regpair addr;
0428     __le16 nbytes;
0429     struct eth_tx_data_bd data;
0430 };
0431 
0432 union eth_tx_bd_types {
0433     struct eth_tx_1st_bd first_bd;
0434     struct eth_tx_2nd_bd second_bd;
0435     struct eth_tx_3rd_bd third_bd;
0436     struct eth_tx_4th_bd fourth_bd;
0437     struct eth_tx_bd reg_bd;
0438 };
0439 
0440 /* Mstorm Queue Zone */
0441 enum eth_tx_tunn_type {
0442     ETH_TX_TUNN_GENEVE,
0443     ETH_TX_TUNN_TTAG,
0444     ETH_TX_TUNN_GRE,
0445     ETH_TX_TUNN_VXLAN,
0446     MAX_ETH_TX_TUNN_TYPE
0447 };
0448 
0449 /* Mstorm Queue Zone */
0450 struct mstorm_eth_queue_zone {
0451     struct eth_rx_prod_data rx_producers;
0452     __le32 reserved[3];
0453 };
0454 
0455 /* Ystorm Queue Zone */
0456 struct xstorm_eth_queue_zone {
0457     struct coalescing_timeset int_coalescing_timeset;
0458     u8 reserved[7];
0459 };
0460 
0461 /* ETH doorbell data */
0462 struct eth_db_data {
0463     u8 params;
0464 #define ETH_DB_DATA_DEST_MASK       0x3
0465 #define ETH_DB_DATA_DEST_SHIFT      0
0466 #define ETH_DB_DATA_AGG_CMD_MASK    0x3
0467 #define ETH_DB_DATA_AGG_CMD_SHIFT   2
0468 #define ETH_DB_DATA_BYPASS_EN_MASK  0x1
0469 #define ETH_DB_DATA_BYPASS_EN_SHIFT 4
0470 #define ETH_DB_DATA_RESERVED_MASK   0x1
0471 #define ETH_DB_DATA_RESERVED_SHIFT  5
0472 #define ETH_DB_DATA_AGG_VAL_SEL_MASK    0x3
0473 #define ETH_DB_DATA_AGG_VAL_SEL_SHIFT   6
0474     u8 agg_flags;
0475     __le16 bd_prod;
0476 };
0477 
0478 /* RSS hash type */
0479 enum rss_hash_type {
0480     RSS_HASH_TYPE_DEFAULT = 0,
0481     RSS_HASH_TYPE_IPV4 = 1,
0482     RSS_HASH_TYPE_TCP_IPV4 = 2,
0483     RSS_HASH_TYPE_IPV6 = 3,
0484     RSS_HASH_TYPE_TCP_IPV6 = 4,
0485     RSS_HASH_TYPE_UDP_IPV4 = 5,
0486     RSS_HASH_TYPE_UDP_IPV6 = 6,
0487     MAX_RSS_HASH_TYPE
0488 };
0489 
0490 #endif /* __ETH_COMMON__ */