1cdedef59SAnirudh Venkataramanan /* SPDX-License-Identifier: GPL-2.0 */ 2cdedef59SAnirudh Venkataramanan /* Copyright (c) 2018, Intel Corporation. */ 3cdedef59SAnirudh Venkataramanan 4cdedef59SAnirudh Venkataramanan #ifndef _ICE_LAN_TX_RX_H_ 5cdedef59SAnirudh Venkataramanan #define _ICE_LAN_TX_RX_H_ 6cdedef59SAnirudh Venkataramanan 7cdedef59SAnirudh Venkataramanan union ice_32byte_rx_desc { 8cdedef59SAnirudh Venkataramanan struct { 9cdedef59SAnirudh Venkataramanan __le64 pkt_addr; /* Packet buffer address */ 10cdedef59SAnirudh Venkataramanan __le64 hdr_addr; /* Header buffer address */ 11cdedef59SAnirudh Venkataramanan /* bit 0 of hdr_addr is DD bit */ 12cdedef59SAnirudh Venkataramanan __le64 rsvd1; 13cdedef59SAnirudh Venkataramanan __le64 rsvd2; 14cdedef59SAnirudh Venkataramanan } read; 15cdedef59SAnirudh Venkataramanan struct { 16cdedef59SAnirudh Venkataramanan struct { 17cdedef59SAnirudh Venkataramanan struct { 18cdedef59SAnirudh Venkataramanan __le16 mirroring_status; 19cdedef59SAnirudh Venkataramanan __le16 l2tag1; 20cdedef59SAnirudh Venkataramanan } lo_dword; 21cdedef59SAnirudh Venkataramanan union { 22cdedef59SAnirudh Venkataramanan __le32 rss; /* RSS Hash */ 23f9867df6SAnirudh Venkataramanan __le32 fd_id; /* Flow Director filter ID */ 24cdedef59SAnirudh Venkataramanan } hi_dword; 25cdedef59SAnirudh Venkataramanan } qword0; 26cdedef59SAnirudh Venkataramanan struct { 27cdedef59SAnirudh Venkataramanan /* status/error/PTYPE/length */ 28cdedef59SAnirudh Venkataramanan __le64 status_error_len; 29cdedef59SAnirudh Venkataramanan } qword1; 30cdedef59SAnirudh Venkataramanan struct { 31cdedef59SAnirudh Venkataramanan __le16 ext_status; /* extended status */ 32cdedef59SAnirudh Venkataramanan __le16 rsvd; 33cdedef59SAnirudh Venkataramanan __le16 l2tag2_1; 34cdedef59SAnirudh Venkataramanan __le16 l2tag2_2; 35cdedef59SAnirudh Venkataramanan } qword2; 36cdedef59SAnirudh Venkataramanan struct { 37cdedef59SAnirudh Venkataramanan __le32 reserved; 38cdedef59SAnirudh Venkataramanan __le32 fd_id; 39cdedef59SAnirudh Venkataramanan } qword3; 40cdedef59SAnirudh Venkataramanan } wb; /* writeback */ 41cdedef59SAnirudh Venkataramanan }; 42cdedef59SAnirudh Venkataramanan 43cac2a27cSHenry Tieman struct ice_fltr_desc { 44cac2a27cSHenry Tieman __le64 qidx_compq_space_stat; 45cac2a27cSHenry Tieman __le64 dtype_cmd_vsi_fdid; 46cac2a27cSHenry Tieman }; 47cac2a27cSHenry Tieman 48cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_QINDEX_S 0 49cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_QINDEX_M (0x7FFULL << ICE_FXD_FLTR_QW0_QINDEX_S) 50cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_Q_S 11 51cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_Q_M BIT_ULL(ICE_FXD_FLTR_QW0_COMP_Q_S) 52cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_Q_ZERO 0x0ULL 53cac2a27cSHenry Tieman 54cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_REPORT_S 12 55cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_REPORT_M \ 56cac2a27cSHenry Tieman (0x3ULL << ICE_FXD_FLTR_QW0_COMP_REPORT_S) 57cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL 0x1ULL 581f7ea1cdSQi Zhang #define ICE_FXD_FLTR_QW0_COMP_REPORT_SW 0x2ULL 59cac2a27cSHenry Tieman 60cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FD_SPACE_S 14 61cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FD_SPACE_M (0x3ULL << ICE_FXD_FLTR_QW0_FD_SPACE_S) 62cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST 0x2ULL 63cac2a27cSHenry Tieman 64cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_STAT_CNT_S 16 65cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_STAT_CNT_M \ 66cac2a27cSHenry Tieman (0x1FFFULL << ICE_FXD_FLTR_QW0_STAT_CNT_S) 67cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_STAT_ENA_S 29 68cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_STAT_ENA_M (0x3ULL << ICE_FXD_FLTR_QW0_STAT_ENA_S) 69cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_STAT_ENA_PKTS 0x1ULL 70cac2a27cSHenry Tieman 71cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_EVICT_ENA_S 31 72cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_EVICT_ENA_M BIT_ULL(ICE_FXD_FLTR_QW0_EVICT_ENA_S) 73cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE 0x0ULL 74cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE 0x1ULL 75cac2a27cSHenry Tieman 76cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_S 32 77cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_M (0x7ULL << ICE_FXD_FLTR_QW0_TO_Q_S) 78cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX 0x0ULL 79cac2a27cSHenry Tieman 80cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_PRI_S 35 81cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_PRI_M (0x7ULL << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) 82cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_TO_Q_PRIO1 0x1ULL 83cac2a27cSHenry Tieman 84cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DPU_RECIPE_S 38 85cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DPU_RECIPE_M \ 86cac2a27cSHenry Tieman (0x3ULL << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) 87cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT 0x0ULL 88cac2a27cSHenry Tieman 89cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DROP_S 40 90cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DROP_M BIT_ULL(ICE_FXD_FLTR_QW0_DROP_S) 91cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DROP_NO 0x0ULL 92cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_DROP_YES 0x1ULL 93cac2a27cSHenry Tieman 94cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_PRI_S 41 95cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_PRI_M (0x7ULL << ICE_FXD_FLTR_QW0_FLEX_PRI_S) 96cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_PRI_NONE 0x0ULL 97cac2a27cSHenry Tieman 98cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_MDID_S 44 99cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_MDID_M (0xFULL << ICE_FXD_FLTR_QW0_FLEX_MDID_S) 100cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_MDID0 0x0ULL 101cac2a27cSHenry Tieman 102cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_VAL_S 48 103cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_VAL_M \ 104cac2a27cSHenry Tieman (0xFFFFULL << ICE_FXD_FLTR_QW0_FLEX_VAL_S) 105cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW0_FLEX_VAL0 0x0ULL 106cac2a27cSHenry Tieman 107cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_DTYPE_S 0 108cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_DTYPE_M (0xFULL << ICE_FXD_FLTR_QW1_DTYPE_S) 109cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PCMD_S 4 110cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PCMD_M BIT_ULL(ICE_FXD_FLTR_QW1_PCMD_S) 111cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PCMD_ADD 0x0ULL 112cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PCMD_REMOVE 0x1ULL 113cac2a27cSHenry Tieman 114cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_PRI_S 5 115cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_PRI_M (0x7ULL << ICE_FXD_FLTR_QW1_PROF_PRI_S) 116cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO 0x0ULL 117cac2a27cSHenry Tieman 118cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_S 8 119cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_M (0x3FULL << ICE_FXD_FLTR_QW1_PROF_S) 120cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_PROF_ZERO 0x0ULL 121cac2a27cSHenry Tieman 122cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FD_VSI_S 14 123cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FD_VSI_M (0x3FFULL << ICE_FXD_FLTR_QW1_FD_VSI_S) 124cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_SWAP_S 24 125cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_SWAP_M BIT_ULL(ICE_FXD_FLTR_QW1_SWAP_S) 126cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_SWAP_NOT_SET 0x0ULL 127cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_SWAP_SET 0x1ULL 128cac2a27cSHenry Tieman 129cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_PRI_S 25 130cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_PRI_M (0x7ULL << ICE_FXD_FLTR_QW1_FDID_PRI_S) 131cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_PRI_ONE 0x1ULL 1321f7ea1cdSQi Zhang #define ICE_FXD_FLTR_QW1_FDID_PRI_THREE 0x3ULL 133cac2a27cSHenry Tieman 134cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_MDID_S 28 135cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_MDID_M (0xFULL << ICE_FXD_FLTR_QW1_FDID_MDID_S) 136cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_MDID_FD 0x05ULL 137cac2a27cSHenry Tieman 138cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_S 32 139cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_M \ 140cac2a27cSHenry Tieman (0xFFFFFFFFULL << ICE_FXD_FLTR_QW1_FDID_S) 141cac2a27cSHenry Tieman #define ICE_FXD_FLTR_QW1_FDID_ZERO 0x0ULL 142cac2a27cSHenry Tieman 143d6218317SQi Zhang /* definition for FD filter programming status descriptor WB format */ 144d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_DD_S 0 145d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_DD_M (0x1ULL << ICE_FXD_FLTR_WB_QW1_DD_S) 146d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_DD_YES 0x1ULL 147d6218317SQi Zhang 148d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_PROG_ID_S 1 149d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_PROG_ID_M \ 150d6218317SQi Zhang (0x3ULL << ICE_FXD_FLTR_WB_QW1_PROG_ID_S) 151d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_PROG_ADD 0x0ULL 152d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_PROG_DEL 0x1ULL 153d6218317SQi Zhang 154d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_S 4 155d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_M (0x1ULL << ICE_FXD_FLTR_WB_QW1_FAIL_S) 156d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_YES 0x1ULL 157d6218317SQi Zhang 158d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_S 5 159d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_M \ 160d6218317SQi Zhang (0x1ULL << ICE_FXD_FLTR_WB_QW1_FAIL_PROF_S) 161d6218317SQi Zhang #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_YES 0x1ULL 162d6218317SQi Zhang 163d76a60baSAnirudh Venkataramanan struct ice_rx_ptype_decoded { 164d76a60baSAnirudh Venkataramanan u32 known:1; 165d76a60baSAnirudh Venkataramanan u32 outer_ip:1; 166d76a60baSAnirudh Venkataramanan u32 outer_ip_ver:2; 167d76a60baSAnirudh Venkataramanan u32 outer_frag:1; 168d76a60baSAnirudh Venkataramanan u32 tunnel_type:3; 169d76a60baSAnirudh Venkataramanan u32 tunnel_end_prot:2; 170d76a60baSAnirudh Venkataramanan u32 tunnel_end_frag:1; 171d76a60baSAnirudh Venkataramanan u32 inner_prot:4; 172d76a60baSAnirudh Venkataramanan u32 payload_layer:3; 173d76a60baSAnirudh Venkataramanan }; 174d76a60baSAnirudh Venkataramanan 175d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_outer_ip { 176d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_L2 = 0, 177d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_IP = 1, 178d76a60baSAnirudh Venkataramanan }; 179d76a60baSAnirudh Venkataramanan 180d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_outer_ip_ver { 181d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_NONE = 0, 182d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_IPV4 = 1, 183d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_IPV6 = 2, 184d76a60baSAnirudh Venkataramanan }; 185d76a60baSAnirudh Venkataramanan 186d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_outer_fragmented { 187d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_NOT_FRAG = 0, 188d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_FRAG = 1, 189d76a60baSAnirudh Venkataramanan }; 190d76a60baSAnirudh Venkataramanan 191d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_tunnel_type { 192d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_NONE = 0, 193d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_IP_IP = 1, 194d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_IP_GRENAT = 2, 195d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_IP_GRENAT_MAC = 3, 196d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_IP_GRENAT_MAC_VLAN = 4, 197d76a60baSAnirudh Venkataramanan }; 198d76a60baSAnirudh Venkataramanan 199d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_tunnel_end_prot { 200d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_END_NONE = 0, 201d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_END_IPV4 = 1, 202d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_END_IPV6 = 2, 203d76a60baSAnirudh Venkataramanan }; 204d76a60baSAnirudh Venkataramanan 205d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_inner_prot { 206d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_NONE = 0, 207d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_UDP = 1, 208d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_TCP = 2, 209d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_SCTP = 3, 210d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_ICMP = 4, 211d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_TIMESYNC = 5, 212d76a60baSAnirudh Venkataramanan }; 213d76a60baSAnirudh Venkataramanan 214d76a60baSAnirudh Venkataramanan enum ice_rx_ptype_payload_layer { 215d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_PAYLOAD_LAYER_NONE = 0, 216d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_PAYLOAD_LAYER_PAY2 = 1, 217d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_PAYLOAD_LAYER_PAY3 = 2, 218d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_PAYLOAD_LAYER_PAY4 = 3, 219d76a60baSAnirudh Venkataramanan }; 220d76a60baSAnirudh Venkataramanan 221f9867df6SAnirudh Venkataramanan /* Rx Flex Descriptor 222cdedef59SAnirudh Venkataramanan * This descriptor is used instead of the legacy version descriptor when 223cdedef59SAnirudh Venkataramanan * ice_rlan_ctx.adv_desc is set 224cdedef59SAnirudh Venkataramanan */ 225cdedef59SAnirudh Venkataramanan union ice_32b_rx_flex_desc { 226cdedef59SAnirudh Venkataramanan struct { 227cdedef59SAnirudh Venkataramanan __le64 pkt_addr; /* Packet buffer address */ 228cdedef59SAnirudh Venkataramanan __le64 hdr_addr; /* Header buffer address */ 229cdedef59SAnirudh Venkataramanan /* bit 0 of hdr_addr is DD bit */ 230cdedef59SAnirudh Venkataramanan __le64 rsvd1; 231cdedef59SAnirudh Venkataramanan __le64 rsvd2; 232cdedef59SAnirudh Venkataramanan } read; 233cdedef59SAnirudh Venkataramanan struct { 234cdedef59SAnirudh Venkataramanan /* Qword 0 */ 235f9867df6SAnirudh Venkataramanan u8 rxdid; /* descriptor builder profile ID */ 236cdedef59SAnirudh Venkataramanan u8 mir_id_umb_cast; /* mirror=[5:0], umb=[7:6] */ 237cdedef59SAnirudh Venkataramanan __le16 ptype_flex_flags0; /* ptype=[9:0], ff0=[15:10] */ 238cdedef59SAnirudh Venkataramanan __le16 pkt_len; /* [15:14] are reserved */ 239cdedef59SAnirudh Venkataramanan __le16 hdr_len_sph_flex_flags1; /* header=[10:0] */ 240cdedef59SAnirudh Venkataramanan /* sph=[11:11] */ 241cdedef59SAnirudh Venkataramanan /* ff1/ext=[15:12] */ 242cdedef59SAnirudh Venkataramanan 243cdedef59SAnirudh Venkataramanan /* Qword 1 */ 244cdedef59SAnirudh Venkataramanan __le16 status_error0; 245cdedef59SAnirudh Venkataramanan __le16 l2tag1; 246cdedef59SAnirudh Venkataramanan __le16 flex_meta0; 247cdedef59SAnirudh Venkataramanan __le16 flex_meta1; 248cdedef59SAnirudh Venkataramanan 249cdedef59SAnirudh Venkataramanan /* Qword 2 */ 250cdedef59SAnirudh Venkataramanan __le16 status_error1; 251cdedef59SAnirudh Venkataramanan u8 flex_flags2; 252cdedef59SAnirudh Venkataramanan u8 time_stamp_low; 253cdedef59SAnirudh Venkataramanan __le16 l2tag2_1st; 254cdedef59SAnirudh Venkataramanan __le16 l2tag2_2nd; 255cdedef59SAnirudh Venkataramanan 256cdedef59SAnirudh Venkataramanan /* Qword 3 */ 257cdedef59SAnirudh Venkataramanan __le16 flex_meta2; 258cdedef59SAnirudh Venkataramanan __le16 flex_meta3; 259cdedef59SAnirudh Venkataramanan union { 260cdedef59SAnirudh Venkataramanan struct { 261cdedef59SAnirudh Venkataramanan __le16 flex_meta4; 262cdedef59SAnirudh Venkataramanan __le16 flex_meta5; 263cdedef59SAnirudh Venkataramanan } flex; 264cdedef59SAnirudh Venkataramanan __le32 ts_high; 265cdedef59SAnirudh Venkataramanan } flex_ts; 266cdedef59SAnirudh Venkataramanan } wb; /* writeback */ 267cdedef59SAnirudh Venkataramanan }; 268cdedef59SAnirudh Venkataramanan 269d76a60baSAnirudh Venkataramanan /* Rx Flex Descriptor NIC Profile 270d76a60baSAnirudh Venkataramanan * This descriptor corresponds to RxDID 2 which contains 271f9867df6SAnirudh Venkataramanan * metadata fields for RSS, flow ID and timestamp info 272d76a60baSAnirudh Venkataramanan */ 273d76a60baSAnirudh Venkataramanan struct ice_32b_rx_flex_desc_nic { 274d76a60baSAnirudh Venkataramanan /* Qword 0 */ 275d76a60baSAnirudh Venkataramanan u8 rxdid; 276d76a60baSAnirudh Venkataramanan u8 mir_id_umb_cast; 277d76a60baSAnirudh Venkataramanan __le16 ptype_flexi_flags0; 278d76a60baSAnirudh Venkataramanan __le16 pkt_len; 279d76a60baSAnirudh Venkataramanan __le16 hdr_len_sph_flex_flags1; 280d76a60baSAnirudh Venkataramanan 281d76a60baSAnirudh Venkataramanan /* Qword 1 */ 282d76a60baSAnirudh Venkataramanan __le16 status_error0; 283d76a60baSAnirudh Venkataramanan __le16 l2tag1; 284d76a60baSAnirudh Venkataramanan __le32 rss_hash; 285d76a60baSAnirudh Venkataramanan 286d76a60baSAnirudh Venkataramanan /* Qword 2 */ 287d76a60baSAnirudh Venkataramanan __le16 status_error1; 288d76a60baSAnirudh Venkataramanan u8 flexi_flags2; 289d76a60baSAnirudh Venkataramanan u8 ts_low; 290d76a60baSAnirudh Venkataramanan __le16 l2tag2_1st; 291d76a60baSAnirudh Venkataramanan __le16 l2tag2_2nd; 292d76a60baSAnirudh Venkataramanan 293d76a60baSAnirudh Venkataramanan /* Qword 3 */ 294d76a60baSAnirudh Venkataramanan __le32 flow_id; 295d76a60baSAnirudh Venkataramanan union { 296d76a60baSAnirudh Venkataramanan struct { 297d76a60baSAnirudh Venkataramanan __le16 vlan_id; 298d76a60baSAnirudh Venkataramanan __le16 flow_id_ipv6; 299d76a60baSAnirudh Venkataramanan } flex; 300d76a60baSAnirudh Venkataramanan __le32 ts_high; 301d76a60baSAnirudh Venkataramanan } flex_ts; 302d76a60baSAnirudh Venkataramanan }; 303d76a60baSAnirudh Venkataramanan 304*f5396b8aSGrzegorz Nitka /* Rx Flex Descriptor NIC Profile 305*f5396b8aSGrzegorz Nitka * RxDID Profile ID 6 306*f5396b8aSGrzegorz Nitka * Flex-field 0: RSS hash lower 16-bits 307*f5396b8aSGrzegorz Nitka * Flex-field 1: RSS hash upper 16-bits 308*f5396b8aSGrzegorz Nitka * Flex-field 2: Flow ID lower 16-bits 309*f5396b8aSGrzegorz Nitka * Flex-field 3: Source VSI 310*f5396b8aSGrzegorz Nitka * Flex-field 4: reserved, VLAN ID taken from L2Tag 311*f5396b8aSGrzegorz Nitka */ 312*f5396b8aSGrzegorz Nitka struct ice_32b_rx_flex_desc_nic_2 { 313*f5396b8aSGrzegorz Nitka /* Qword 0 */ 314*f5396b8aSGrzegorz Nitka u8 rxdid; 315*f5396b8aSGrzegorz Nitka u8 mir_id_umb_cast; 316*f5396b8aSGrzegorz Nitka __le16 ptype_flexi_flags0; 317*f5396b8aSGrzegorz Nitka __le16 pkt_len; 318*f5396b8aSGrzegorz Nitka __le16 hdr_len_sph_flex_flags1; 319*f5396b8aSGrzegorz Nitka 320*f5396b8aSGrzegorz Nitka /* Qword 1 */ 321*f5396b8aSGrzegorz Nitka __le16 status_error0; 322*f5396b8aSGrzegorz Nitka __le16 l2tag1; 323*f5396b8aSGrzegorz Nitka __le32 rss_hash; 324*f5396b8aSGrzegorz Nitka 325*f5396b8aSGrzegorz Nitka /* Qword 2 */ 326*f5396b8aSGrzegorz Nitka __le16 status_error1; 327*f5396b8aSGrzegorz Nitka u8 flexi_flags2; 328*f5396b8aSGrzegorz Nitka u8 ts_low; 329*f5396b8aSGrzegorz Nitka __le16 l2tag2_1st; 330*f5396b8aSGrzegorz Nitka __le16 l2tag2_2nd; 331*f5396b8aSGrzegorz Nitka 332*f5396b8aSGrzegorz Nitka /* Qword 3 */ 333*f5396b8aSGrzegorz Nitka __le16 flow_id; 334*f5396b8aSGrzegorz Nitka __le16 src_vsi; 335*f5396b8aSGrzegorz Nitka union { 336*f5396b8aSGrzegorz Nitka struct { 337*f5396b8aSGrzegorz Nitka __le16 rsvd; 338*f5396b8aSGrzegorz Nitka __le16 flow_id_ipv6; 339*f5396b8aSGrzegorz Nitka } flex; 340*f5396b8aSGrzegorz Nitka __le32 ts_high; 341*f5396b8aSGrzegorz Nitka } flex_ts; 342*f5396b8aSGrzegorz Nitka }; 343*f5396b8aSGrzegorz Nitka 344cdedef59SAnirudh Venkataramanan /* Receive Flex Descriptor profile IDs: There are a total 345cdedef59SAnirudh Venkataramanan * of 64 profiles where profile IDs 0/1 are for legacy; and 346cdedef59SAnirudh Venkataramanan * profiles 2-63 are flex profiles that can be programmed 347cdedef59SAnirudh Venkataramanan * with a specific metadata (profile 7 reserved for HW) 348cdedef59SAnirudh Venkataramanan */ 349cdedef59SAnirudh Venkataramanan enum ice_rxdid { 35022ef683bSAnirudh Venkataramanan ICE_RXDID_LEGACY_0 = 0, 35122ef683bSAnirudh Venkataramanan ICE_RXDID_LEGACY_1 = 1, 35222ef683bSAnirudh Venkataramanan ICE_RXDID_FLEX_NIC = 2, 35322ef683bSAnirudh Venkataramanan ICE_RXDID_FLEX_NIC_2 = 6, 35422ef683bSAnirudh Venkataramanan ICE_RXDID_HW = 7, 35522ef683bSAnirudh Venkataramanan ICE_RXDID_LAST = 63, 356cdedef59SAnirudh Venkataramanan }; 357cdedef59SAnirudh Venkataramanan 358cdedef59SAnirudh Venkataramanan /* Receive Flex Descriptor Rx opcode values */ 359cdedef59SAnirudh Venkataramanan #define ICE_RX_OPC_MDID 0x01 360cdedef59SAnirudh Venkataramanan 36131ad4e4eSTony Nguyen /* Receive Descriptor MDID values that access packet flags */ 36231ad4e4eSTony Nguyen enum ice_flex_mdid_pkt_flags { 36331ad4e4eSTony Nguyen ICE_RX_MDID_PKT_FLAGS_15_0 = 20, 36431ad4e4eSTony Nguyen ICE_RX_MDID_PKT_FLAGS_31_16, 36531ad4e4eSTony Nguyen ICE_RX_MDID_PKT_FLAGS_47_32, 36631ad4e4eSTony Nguyen ICE_RX_MDID_PKT_FLAGS_63_48, 36731ad4e4eSTony Nguyen }; 36831ad4e4eSTony Nguyen 369cdedef59SAnirudh Venkataramanan /* Receive Descriptor MDID values */ 37022ef683bSAnirudh Venkataramanan enum ice_flex_rx_mdid { 37122ef683bSAnirudh Venkataramanan ICE_RX_MDID_FLOW_ID_LOWER = 5, 37222ef683bSAnirudh Venkataramanan ICE_RX_MDID_FLOW_ID_HIGH, 37322ef683bSAnirudh Venkataramanan ICE_RX_MDID_SRC_VSI = 19, 37422ef683bSAnirudh Venkataramanan ICE_RX_MDID_HASH_LOW = 56, 37522ef683bSAnirudh Venkataramanan ICE_RX_MDID_HASH_HIGH, 37622ef683bSAnirudh Venkataramanan }; 377cdedef59SAnirudh Venkataramanan 378f9867df6SAnirudh Venkataramanan /* Rx/Tx Flag64 packet flag bits */ 37986e81794SChinh T Cao enum ice_flg64_bits { 38086e81794SChinh T Cao ICE_FLG_PKT_DSI = 0, 381893869d5SBrett Creeley ICE_FLG_EVLAN_x8100 = 14, 38286e81794SChinh T Cao ICE_FLG_EVLAN_x9100, 38386e81794SChinh T Cao ICE_FLG_VLAN_x8100, 38486e81794SChinh T Cao ICE_FLG_TNL_MAC = 22, 38586e81794SChinh T Cao ICE_FLG_TNL_VLAN, 38686e81794SChinh T Cao ICE_FLG_PKT_FRG, 38786e81794SChinh T Cao ICE_FLG_FIN = 32, 38886e81794SChinh T Cao ICE_FLG_SYN, 38986e81794SChinh T Cao ICE_FLG_RST, 39086e81794SChinh T Cao ICE_FLG_TNL0 = 38, 39186e81794SChinh T Cao ICE_FLG_TNL1, 39286e81794SChinh T Cao ICE_FLG_TNL2, 39386e81794SChinh T Cao ICE_FLG_UDP_GRE, 39486e81794SChinh T Cao ICE_FLG_RSVD = 63 395cdedef59SAnirudh Venkataramanan }; 396cdedef59SAnirudh Venkataramanan 3972b245cb2SAnirudh Venkataramanan /* for ice_32byte_rx_flex_desc.ptype_flexi_flags0 member */ 3982b245cb2SAnirudh Venkataramanan #define ICE_RX_FLEX_DESC_PTYPE_M (0x3FF) /* 10-bits */ 3992b245cb2SAnirudh Venkataramanan 4002b245cb2SAnirudh Venkataramanan /* for ice_32byte_rx_flex_desc.pkt_length member */ 4012b245cb2SAnirudh Venkataramanan #define ICE_RX_FLX_DESC_PKT_LEN_M (0x3FFF) /* 14-bits */ 4022b245cb2SAnirudh Venkataramanan 4032b245cb2SAnirudh Venkataramanan enum ice_rx_flex_desc_status_error_0_bits { 4042b245cb2SAnirudh Venkataramanan /* Note: These are predefined bit offsets */ 4052b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_DD_S = 0, 4062b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_EOF_S, 4072b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_HBO_S, 4082b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_L3L4P_S, 4092b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XSUM_IPE_S, 4102b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XSUM_L4E_S, 4112b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S, 4122b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XSUM_EUDPE_S, 4132b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_LPBK_S, 4142b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_IPV6EXADD_S, 4152b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_RXE_S, 4162b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_CRCP_S, 4172b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_RSS_VALID_S, 4182b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_L2TAG1P_S, 4192b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XTRMD0_VALID_S, 4202b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_XTRMD1_VALID_S, 4212b245cb2SAnirudh Venkataramanan ICE_RX_FLEX_DESC_STATUS0_LAST /* this entry must be last!!! */ 4222b245cb2SAnirudh Venkataramanan }; 4232b245cb2SAnirudh Venkataramanan 424a4e82a81STony Nguyen enum ice_rx_flex_desc_status_error_1_bits { 425a4e82a81STony Nguyen /* Note: These are predefined bit offsets */ 426a4e82a81STony Nguyen ICE_RX_FLEX_DESC_STATUS1_NAT_S = 4, 427a4e82a81STony Nguyen ICE_RX_FLEX_DESC_STATUS1_LAST /* this entry must be last!!! */ 428a4e82a81STony Nguyen }; 429a4e82a81STony Nguyen 430cdedef59SAnirudh Venkataramanan #define ICE_RXQ_CTX_SIZE_DWORDS 8 431cdedef59SAnirudh Venkataramanan #define ICE_RXQ_CTX_SZ (ICE_RXQ_CTX_SIZE_DWORDS * sizeof(u32)) 432df17b7e0SAnirudh Venkataramanan #define ICE_TX_CMPLTNQ_CTX_SIZE_DWORDS 22 433df17b7e0SAnirudh Venkataramanan #define ICE_TX_DRBELL_Q_CTX_SIZE_DWORDS 5 434df17b7e0SAnirudh Venkataramanan #define GLTCLAN_CQ_CNTX(i, CQ) (GLTCLAN_CQ_CNTX0(CQ) + ((i) * 0x0800)) 435cdedef59SAnirudh Venkataramanan 436cdedef59SAnirudh Venkataramanan /* RLAN Rx queue context data 437cdedef59SAnirudh Venkataramanan * 438cdedef59SAnirudh Venkataramanan * The sizes of the variables may be larger than needed due to crossing byte 439cdedef59SAnirudh Venkataramanan * boundaries. If we do not have the width of the variable set to the correct 440cdedef59SAnirudh Venkataramanan * size then we could end up shifting bits off the top of the variable when the 441cdedef59SAnirudh Venkataramanan * variable is at the top of a byte and crosses over into the next byte. 442cdedef59SAnirudh Venkataramanan */ 443cdedef59SAnirudh Venkataramanan struct ice_rlan_ctx { 444cdedef59SAnirudh Venkataramanan u16 head; 445cdedef59SAnirudh Venkataramanan u16 cpuid; /* bigger than needed, see above for reason */ 4465ab52244SAnirudh Venkataramanan #define ICE_RLAN_BASE_S 7 447cdedef59SAnirudh Venkataramanan u64 base; 448cdedef59SAnirudh Venkataramanan u16 qlen; 449cdedef59SAnirudh Venkataramanan #define ICE_RLAN_CTX_DBUF_S 7 450cdedef59SAnirudh Venkataramanan u16 dbuf; /* bigger than needed, see above for reason */ 451cdedef59SAnirudh Venkataramanan #define ICE_RLAN_CTX_HBUF_S 6 452cdedef59SAnirudh Venkataramanan u16 hbuf; /* bigger than needed, see above for reason */ 453cdedef59SAnirudh Venkataramanan u8 dtype; 454cdedef59SAnirudh Venkataramanan u8 dsize; 455cdedef59SAnirudh Venkataramanan u8 crcstrip; 456cdedef59SAnirudh Venkataramanan u8 l2tsel; 457cdedef59SAnirudh Venkataramanan u8 hsplit_0; 458cdedef59SAnirudh Venkataramanan u8 hsplit_1; 459cdedef59SAnirudh Venkataramanan u8 showiv; 460cdedef59SAnirudh Venkataramanan u32 rxmax; /* bigger than needed, see above for reason */ 461cdedef59SAnirudh Venkataramanan u8 tphrdesc_ena; 462cdedef59SAnirudh Venkataramanan u8 tphwdesc_ena; 463cdedef59SAnirudh Venkataramanan u8 tphdata_ena; 464cdedef59SAnirudh Venkataramanan u8 tphhead_ena; 465cdedef59SAnirudh Venkataramanan u16 lrxqthresh; /* bigger than needed, see above for reason */ 466c31a5c25SBrett Creeley u8 prefena; /* NOTE: normally must be set to 1 at init */ 467cdedef59SAnirudh Venkataramanan }; 468cdedef59SAnirudh Venkataramanan 469cdedef59SAnirudh Venkataramanan struct ice_ctx_ele { 470cdedef59SAnirudh Venkataramanan u16 offset; 471cdedef59SAnirudh Venkataramanan u16 size_of; 472cdedef59SAnirudh Venkataramanan u16 width; 473cdedef59SAnirudh Venkataramanan u16 lsb; 474cdedef59SAnirudh Venkataramanan }; 475cdedef59SAnirudh Venkataramanan 476cdedef59SAnirudh Venkataramanan #define ICE_CTX_STORE(_struct, _ele, _width, _lsb) { \ 477cdedef59SAnirudh Venkataramanan .offset = offsetof(struct _struct, _ele), \ 478c593642cSPankaj Bharadiya .size_of = sizeof_field(struct _struct, _ele), \ 479cdedef59SAnirudh Venkataramanan .width = _width, \ 480cdedef59SAnirudh Venkataramanan .lsb = _lsb, \ 481cdedef59SAnirudh Venkataramanan } 482cdedef59SAnirudh Venkataramanan 483cdedef59SAnirudh Venkataramanan /* for hsplit_0 field of Rx RLAN context */ 484cdedef59SAnirudh Venkataramanan enum ice_rlan_ctx_rx_hsplit_0 { 485cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_0_NO_SPLIT = 0, 486cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_0_SPLIT_L2 = 1, 487cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_0_SPLIT_IP = 2, 488cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_0_SPLIT_TCP_UDP = 4, 489cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_0_SPLIT_SCTP = 8, 490cdedef59SAnirudh Venkataramanan }; 491cdedef59SAnirudh Venkataramanan 492cdedef59SAnirudh Venkataramanan /* for hsplit_1 field of Rx RLAN context */ 493cdedef59SAnirudh Venkataramanan enum ice_rlan_ctx_rx_hsplit_1 { 494cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_1_NO_SPLIT = 0, 495cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_1_SPLIT_L2 = 1, 496cdedef59SAnirudh Venkataramanan ICE_RLAN_RX_HSPLIT_1_SPLIT_ALWAYS = 2, 497cdedef59SAnirudh Venkataramanan }; 498cdedef59SAnirudh Venkataramanan 499f9867df6SAnirudh Venkataramanan /* Tx Descriptor */ 500cdedef59SAnirudh Venkataramanan struct ice_tx_desc { 501cdedef59SAnirudh Venkataramanan __le64 buf_addr; /* Address of descriptor's data buf */ 502cdedef59SAnirudh Venkataramanan __le64 cmd_type_offset_bsz; 503cdedef59SAnirudh Venkataramanan }; 504cdedef59SAnirudh Venkataramanan 5052b245cb2SAnirudh Venkataramanan enum ice_tx_desc_dtype_value { 5062b245cb2SAnirudh Venkataramanan ICE_TX_DESC_DTYPE_DATA = 0x0, 5072b245cb2SAnirudh Venkataramanan ICE_TX_DESC_DTYPE_CTX = 0x1, 508cac2a27cSHenry Tieman ICE_TX_DESC_DTYPE_FLTR_PROG = 0x8, 5092b245cb2SAnirudh Venkataramanan /* DESC_DONE - HW has completed write-back of descriptor */ 5102b245cb2SAnirudh Venkataramanan ICE_TX_DESC_DTYPE_DESC_DONE = 0xF, 5112b245cb2SAnirudh Venkataramanan }; 5122b245cb2SAnirudh Venkataramanan 5132b245cb2SAnirudh Venkataramanan #define ICE_TXD_QW1_CMD_S 4 5142b245cb2SAnirudh Venkataramanan #define ICE_TXD_QW1_CMD_M (0xFFFUL << ICE_TXD_QW1_CMD_S) 5152b245cb2SAnirudh Venkataramanan 5162b245cb2SAnirudh Venkataramanan enum ice_tx_desc_cmd_bits { 5172b245cb2SAnirudh Venkataramanan ICE_TX_DESC_CMD_EOP = 0x0001, 5182b245cb2SAnirudh Venkataramanan ICE_TX_DESC_CMD_RS = 0x0002, 519d76a60baSAnirudh Venkataramanan ICE_TX_DESC_CMD_IL2TAG1 = 0x0008, 520cac2a27cSHenry Tieman ICE_TX_DESC_CMD_DUMMY = 0x0010, 52164f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_IIPT_IPV6 = 0x0020, 52264f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_IIPT_IPV4 = 0x0040, 52364f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_IIPT_IPV4_CSUM = 0x0060, 52464f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_L4T_EOFT_TCP = 0x0100, 52564f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_L4T_EOFT_SCTP = 0x0200, 52664f4b943SAnirudh Venkataramanan ICE_TX_DESC_CMD_L4T_EOFT_UDP = 0x0300, 527cac2a27cSHenry Tieman ICE_TX_DESC_CMD_RE = 0x0400, 5282b245cb2SAnirudh Venkataramanan }; 5292b245cb2SAnirudh Venkataramanan 5302b245cb2SAnirudh Venkataramanan #define ICE_TXD_QW1_OFFSET_S 16 531d76a60baSAnirudh Venkataramanan #define ICE_TXD_QW1_OFFSET_M (0x3FFFFULL << ICE_TXD_QW1_OFFSET_S) 532d76a60baSAnirudh Venkataramanan 533d76a60baSAnirudh Venkataramanan enum ice_tx_desc_len_fields { 534d76a60baSAnirudh Venkataramanan /* Note: These are predefined bit offsets */ 535d76a60baSAnirudh Venkataramanan ICE_TX_DESC_LEN_MACLEN_S = 0, /* 7 BITS */ 536d76a60baSAnirudh Venkataramanan ICE_TX_DESC_LEN_IPLEN_S = 7, /* 7 BITS */ 537d76a60baSAnirudh Venkataramanan ICE_TX_DESC_LEN_L4_LEN_S = 14 /* 4 BITS */ 538d76a60baSAnirudh Venkataramanan }; 539d76a60baSAnirudh Venkataramanan 540e94d4478SAnirudh Venkataramanan #define ICE_TXD_QW1_MACLEN_M (0x7FUL << ICE_TX_DESC_LEN_MACLEN_S) 541e94d4478SAnirudh Venkataramanan #define ICE_TXD_QW1_IPLEN_M (0x7FUL << ICE_TX_DESC_LEN_IPLEN_S) 542e94d4478SAnirudh Venkataramanan #define ICE_TXD_QW1_L4LEN_M (0xFUL << ICE_TX_DESC_LEN_L4_LEN_S) 543e94d4478SAnirudh Venkataramanan 544e94d4478SAnirudh Venkataramanan /* Tx descriptor field limits in bytes */ 545e94d4478SAnirudh Venkataramanan #define ICE_TXD_MACLEN_MAX ((ICE_TXD_QW1_MACLEN_M >> \ 546e94d4478SAnirudh Venkataramanan ICE_TX_DESC_LEN_MACLEN_S) * ICE_BYTES_PER_WORD) 547e94d4478SAnirudh Venkataramanan #define ICE_TXD_IPLEN_MAX ((ICE_TXD_QW1_IPLEN_M >> \ 548e94d4478SAnirudh Venkataramanan ICE_TX_DESC_LEN_IPLEN_S) * ICE_BYTES_PER_DWORD) 549e94d4478SAnirudh Venkataramanan #define ICE_TXD_L4LEN_MAX ((ICE_TXD_QW1_L4LEN_M >> \ 550e94d4478SAnirudh Venkataramanan ICE_TX_DESC_LEN_L4_LEN_S) * ICE_BYTES_PER_DWORD) 551e94d4478SAnirudh Venkataramanan 5522b245cb2SAnirudh Venkataramanan #define ICE_TXD_QW1_TX_BUF_SZ_S 34 5532b245cb2SAnirudh Venkataramanan #define ICE_TXD_QW1_L2TAG1_S 48 5542b245cb2SAnirudh Venkataramanan 555d76a60baSAnirudh Venkataramanan /* Context descriptors */ 556d76a60baSAnirudh Venkataramanan struct ice_tx_ctx_desc { 557d76a60baSAnirudh Venkataramanan __le32 tunneling_params; 558d76a60baSAnirudh Venkataramanan __le16 l2tag2; 559d76a60baSAnirudh Venkataramanan __le16 rsvd; 560d76a60baSAnirudh Venkataramanan __le64 qw1; 561d76a60baSAnirudh Venkataramanan }; 562d76a60baSAnirudh Venkataramanan 563d76a60baSAnirudh Venkataramanan #define ICE_TXD_CTX_QW1_CMD_S 4 564d76a60baSAnirudh Venkataramanan #define ICE_TXD_CTX_QW1_CMD_M (0x7FUL << ICE_TXD_CTX_QW1_CMD_S) 565d76a60baSAnirudh Venkataramanan 566d76a60baSAnirudh Venkataramanan #define ICE_TXD_CTX_QW1_TSO_LEN_S 30 567d76a60baSAnirudh Venkataramanan #define ICE_TXD_CTX_QW1_TSO_LEN_M \ 568d76a60baSAnirudh Venkataramanan (0x3FFFFULL << ICE_TXD_CTX_QW1_TSO_LEN_S) 569d76a60baSAnirudh Venkataramanan 570d76a60baSAnirudh Venkataramanan #define ICE_TXD_CTX_QW1_MSS_S 50 571d76a60baSAnirudh Venkataramanan 572*f5396b8aSGrzegorz Nitka #define ICE_TXD_CTX_QW1_VSI_S 50 573*f5396b8aSGrzegorz Nitka #define ICE_TXD_CTX_QW1_VSI_M (0x3FFULL << ICE_TXD_CTX_QW1_VSI_S) 574*f5396b8aSGrzegorz Nitka 575d76a60baSAnirudh Venkataramanan enum ice_tx_ctx_desc_cmd_bits { 576d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_TSO = 0x01, 577d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_TSYN = 0x02, 578d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_IL2TAG2 = 0x04, 579d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_IL2TAG2_IL2H = 0x08, 580d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_SWTCH_NOTAG = 0x00, 581d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_SWTCH_UPLINK = 0x10, 582d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_SWTCH_LOCAL = 0x20, 583d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_SWTCH_VSI = 0x30, 584d76a60baSAnirudh Venkataramanan ICE_TX_CTX_DESC_RESERVED = 0x40 585d76a60baSAnirudh Venkataramanan }; 586d76a60baSAnirudh Venkataramanan 587a4e82a81STony Nguyen enum ice_tx_ctx_desc_eipt_offload { 588a4e82a81STony Nguyen ICE_TX_CTX_EIPT_NONE = 0x0, 589a4e82a81STony Nguyen ICE_TX_CTX_EIPT_IPV6 = 0x1, 590a4e82a81STony Nguyen ICE_TX_CTX_EIPT_IPV4_NO_CSUM = 0x2, 591a4e82a81STony Nguyen ICE_TX_CTX_EIPT_IPV4 = 0x3 592a4e82a81STony Nguyen }; 593a4e82a81STony Nguyen 594a4e82a81STony Nguyen #define ICE_TXD_CTX_QW0_EIPLEN_S 2 595a4e82a81STony Nguyen 596a4e82a81STony Nguyen #define ICE_TXD_CTX_QW0_L4TUNT_S 9 597a4e82a81STony Nguyen 598a4e82a81STony Nguyen #define ICE_TXD_CTX_UDP_TUNNELING BIT_ULL(ICE_TXD_CTX_QW0_L4TUNT_S) 599a4e82a81STony Nguyen #define ICE_TXD_CTX_GRE_TUNNELING (0x2ULL << ICE_TXD_CTX_QW0_L4TUNT_S) 600a4e82a81STony Nguyen 601a4e82a81STony Nguyen #define ICE_TXD_CTX_QW0_NATLEN_S 12 602a4e82a81STony Nguyen 603a4e82a81STony Nguyen #define ICE_TXD_CTX_QW0_L4T_CS_S 23 604a4e82a81STony Nguyen #define ICE_TXD_CTX_QW0_L4T_CS_M BIT_ULL(ICE_TXD_CTX_QW0_L4T_CS_S) 605a4e82a81STony Nguyen 606cdedef59SAnirudh Venkataramanan #define ICE_LAN_TXQ_MAX_QGRPS 127 607cdedef59SAnirudh Venkataramanan #define ICE_LAN_TXQ_MAX_QDIS 1023 608cdedef59SAnirudh Venkataramanan 609cdedef59SAnirudh Venkataramanan /* Tx queue context data 610cdedef59SAnirudh Venkataramanan * 611cdedef59SAnirudh Venkataramanan * The sizes of the variables may be larger than needed due to crossing byte 612cdedef59SAnirudh Venkataramanan * boundaries. If we do not have the width of the variable set to the correct 613cdedef59SAnirudh Venkataramanan * size then we could end up shifting bits off the top of the variable when the 614cdedef59SAnirudh Venkataramanan * variable is at the top of a byte and crosses over into the next byte. 615cdedef59SAnirudh Venkataramanan */ 616cdedef59SAnirudh Venkataramanan struct ice_tlan_ctx { 617cdedef59SAnirudh Venkataramanan #define ICE_TLAN_CTX_BASE_S 7 618cdedef59SAnirudh Venkataramanan u64 base; /* base is defined in 128-byte units */ 619cdedef59SAnirudh Venkataramanan u8 port_num; 620cdedef59SAnirudh Venkataramanan u16 cgd_num; /* bigger than needed, see above for reason */ 621cdedef59SAnirudh Venkataramanan u8 pf_num; 622cdedef59SAnirudh Venkataramanan u16 vmvf_num; 623cdedef59SAnirudh Venkataramanan u8 vmvf_type; 6248ede0178SAnirudh Venkataramanan #define ICE_TLAN_CTX_VMVF_TYPE_VF 0 625cdedef59SAnirudh Venkataramanan #define ICE_TLAN_CTX_VMVF_TYPE_VMQ 1 626cdedef59SAnirudh Venkataramanan #define ICE_TLAN_CTX_VMVF_TYPE_PF 2 627cdedef59SAnirudh Venkataramanan u16 src_vsi; 628cdedef59SAnirudh Venkataramanan u8 tsyn_ena; 629201beeb7SAshish Shah u8 internal_usage_flag; 630cdedef59SAnirudh Venkataramanan u8 alt_vlan; 631cdedef59SAnirudh Venkataramanan u16 cpuid; /* bigger than needed, see above for reason */ 632cdedef59SAnirudh Venkataramanan u8 wb_mode; 633cdedef59SAnirudh Venkataramanan u8 tphrd_desc; 634cdedef59SAnirudh Venkataramanan u8 tphrd; 635cdedef59SAnirudh Venkataramanan u8 tphwr_desc; 636cdedef59SAnirudh Venkataramanan u16 cmpq_id; 637cdedef59SAnirudh Venkataramanan u16 qnum_in_func; 638cdedef59SAnirudh Venkataramanan u8 itr_notification_mode; 639cdedef59SAnirudh Venkataramanan u8 adjust_prof_id; 640cdedef59SAnirudh Venkataramanan u32 qlen; /* bigger than needed, see above for reason */ 641cdedef59SAnirudh Venkataramanan u8 quanta_prof_idx; 642cdedef59SAnirudh Venkataramanan u8 tso_ena; 643cdedef59SAnirudh Venkataramanan u16 tso_qnum; 644cdedef59SAnirudh Venkataramanan u8 legacy_int; 645cdedef59SAnirudh Venkataramanan u8 drop_ena; 646cdedef59SAnirudh Venkataramanan u8 cache_prof_idx; 647cdedef59SAnirudh Venkataramanan u8 pkt_shaper_prof_idx; 6487e34786aSBruce Allan u8 int_q_state; /* width not needed - internal - DO NOT WRITE!!! */ 649cdedef59SAnirudh Venkataramanan }; 650d76a60baSAnirudh Venkataramanan 651dda90cb9SJesse Brandeburg /* The ice_ptype_lkup table is used to convert from the 10-bit ptype in the 652dda90cb9SJesse Brandeburg * hardware to a bit-field that can be used by SW to more easily determine the 653dda90cb9SJesse Brandeburg * packet type. 654dda90cb9SJesse Brandeburg * 655dda90cb9SJesse Brandeburg * Macros are used to shorten the table lines and make this table human 656dda90cb9SJesse Brandeburg * readable. 657dda90cb9SJesse Brandeburg * 658dda90cb9SJesse Brandeburg * We store the PTYPE in the top byte of the bit field - this is just so that 659dda90cb9SJesse Brandeburg * we can check that the table doesn't have a row missing, as the index into 660dda90cb9SJesse Brandeburg * the table should be the PTYPE. 661dda90cb9SJesse Brandeburg * 662dda90cb9SJesse Brandeburg * Typical work flow: 663dda90cb9SJesse Brandeburg * 664dda90cb9SJesse Brandeburg * IF NOT ice_ptype_lkup[ptype].known 665dda90cb9SJesse Brandeburg * THEN 666dda90cb9SJesse Brandeburg * Packet is unknown 667dda90cb9SJesse Brandeburg * ELSE IF ice_ptype_lkup[ptype].outer_ip == ICE_RX_PTYPE_OUTER_IP 668dda90cb9SJesse Brandeburg * Use the rest of the fields to look at the tunnels, inner protocols, etc 669dda90cb9SJesse Brandeburg * ELSE 670dda90cb9SJesse Brandeburg * Use the enum ice_rx_l2_ptype to decode the packet type 671dda90cb9SJesse Brandeburg * ENDIF 672dda90cb9SJesse Brandeburg */ 673dda90cb9SJesse Brandeburg 674dda90cb9SJesse Brandeburg /* macro to make the table lines short, use explicit indexing with [PTYPE] */ 675d76a60baSAnirudh Venkataramanan #define ICE_PTT(PTYPE, OUTER_IP, OUTER_IP_VER, OUTER_FRAG, T, TE, TEF, I, PL)\ 676dda90cb9SJesse Brandeburg [PTYPE] = { \ 677d76a60baSAnirudh Venkataramanan 1, \ 678d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_##OUTER_IP, \ 679d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_OUTER_##OUTER_IP_VER, \ 680d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_##OUTER_FRAG, \ 681d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_##T, \ 682d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_TUNNEL_END_##TE, \ 683d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_##TEF, \ 684d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_INNER_PROT_##I, \ 685d76a60baSAnirudh Venkataramanan ICE_RX_PTYPE_PAYLOAD_LAYER_##PL } 686d76a60baSAnirudh Venkataramanan 687dda90cb9SJesse Brandeburg #define ICE_PTT_UNUSED_ENTRY(PTYPE) [PTYPE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 } 688d76a60baSAnirudh Venkataramanan 689d76a60baSAnirudh Venkataramanan /* shorter macros makes the table fit but are terse */ 690d76a60baSAnirudh Venkataramanan #define ICE_RX_PTYPE_NOF ICE_RX_PTYPE_NOT_FRAG 691eddbee9bSTony Nguyen #define ICE_RX_PTYPE_FRG ICE_RX_PTYPE_FRAG 692d76a60baSAnirudh Venkataramanan 693dda90cb9SJesse Brandeburg /* Lookup table mapping in the 10-bit HW PTYPE to the bit field for decoding */ 694dda90cb9SJesse Brandeburg static const struct ice_rx_ptype_decoded ice_ptype_lkup[BIT(10)] = { 695d76a60baSAnirudh Venkataramanan /* L2 Packet types */ 696d76a60baSAnirudh Venkataramanan ICE_PTT_UNUSED_ENTRY(0), 697d76a60baSAnirudh Venkataramanan ICE_PTT(1, L2, NONE, NOF, NONE, NONE, NOF, NONE, PAY2), 6980c526d44SJacob Keller ICE_PTT_UNUSED_ENTRY(2), 699eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(3), 700eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(4), 701eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(5), 702eddbee9bSTony Nguyen ICE_PTT(6, L2, NONE, NOF, NONE, NONE, NOF, NONE, NONE), 703eddbee9bSTony Nguyen ICE_PTT(7, L2, NONE, NOF, NONE, NONE, NOF, NONE, NONE), 704eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(8), 705eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(9), 706eddbee9bSTony Nguyen ICE_PTT(10, L2, NONE, NOF, NONE, NONE, NOF, NONE, NONE), 707eddbee9bSTony Nguyen ICE_PTT(11, L2, NONE, NOF, NONE, NONE, NOF, NONE, NONE), 708eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(12), 709eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(13), 710eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(14), 711eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(15), 712eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(16), 713eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(17), 714eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(18), 715eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(19), 716eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(20), 717eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(21), 718eddbee9bSTony Nguyen 719eddbee9bSTony Nguyen /* Non Tunneled IPv4 */ 720eddbee9bSTony Nguyen ICE_PTT(22, IP, IPV4, FRG, NONE, NONE, NOF, NONE, PAY3), 721eddbee9bSTony Nguyen ICE_PTT(23, IP, IPV4, NOF, NONE, NONE, NOF, NONE, PAY3), 722eddbee9bSTony Nguyen ICE_PTT(24, IP, IPV4, NOF, NONE, NONE, NOF, UDP, PAY4), 723eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(25), 724eddbee9bSTony Nguyen ICE_PTT(26, IP, IPV4, NOF, NONE, NONE, NOF, TCP, PAY4), 725eddbee9bSTony Nguyen ICE_PTT(27, IP, IPV4, NOF, NONE, NONE, NOF, SCTP, PAY4), 726eddbee9bSTony Nguyen ICE_PTT(28, IP, IPV4, NOF, NONE, NONE, NOF, ICMP, PAY4), 727eddbee9bSTony Nguyen 728eddbee9bSTony Nguyen /* IPv4 --> IPv4 */ 729eddbee9bSTony Nguyen ICE_PTT(29, IP, IPV4, NOF, IP_IP, IPV4, FRG, NONE, PAY3), 730eddbee9bSTony Nguyen ICE_PTT(30, IP, IPV4, NOF, IP_IP, IPV4, NOF, NONE, PAY3), 731eddbee9bSTony Nguyen ICE_PTT(31, IP, IPV4, NOF, IP_IP, IPV4, NOF, UDP, PAY4), 732eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(32), 733eddbee9bSTony Nguyen ICE_PTT(33, IP, IPV4, NOF, IP_IP, IPV4, NOF, TCP, PAY4), 734eddbee9bSTony Nguyen ICE_PTT(34, IP, IPV4, NOF, IP_IP, IPV4, NOF, SCTP, PAY4), 735eddbee9bSTony Nguyen ICE_PTT(35, IP, IPV4, NOF, IP_IP, IPV4, NOF, ICMP, PAY4), 736eddbee9bSTony Nguyen 737eddbee9bSTony Nguyen /* IPv4 --> IPv6 */ 738eddbee9bSTony Nguyen ICE_PTT(36, IP, IPV4, NOF, IP_IP, IPV6, FRG, NONE, PAY3), 739eddbee9bSTony Nguyen ICE_PTT(37, IP, IPV4, NOF, IP_IP, IPV6, NOF, NONE, PAY3), 740eddbee9bSTony Nguyen ICE_PTT(38, IP, IPV4, NOF, IP_IP, IPV6, NOF, UDP, PAY4), 741eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(39), 742eddbee9bSTony Nguyen ICE_PTT(40, IP, IPV4, NOF, IP_IP, IPV6, NOF, TCP, PAY4), 743eddbee9bSTony Nguyen ICE_PTT(41, IP, IPV4, NOF, IP_IP, IPV6, NOF, SCTP, PAY4), 744eddbee9bSTony Nguyen ICE_PTT(42, IP, IPV4, NOF, IP_IP, IPV6, NOF, ICMP, PAY4), 745eddbee9bSTony Nguyen 746eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT */ 747eddbee9bSTony Nguyen ICE_PTT(43, IP, IPV4, NOF, IP_GRENAT, NONE, NOF, NONE, PAY3), 748eddbee9bSTony Nguyen 749eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT --> IPv4 */ 750eddbee9bSTony Nguyen ICE_PTT(44, IP, IPV4, NOF, IP_GRENAT, IPV4, FRG, NONE, PAY3), 751eddbee9bSTony Nguyen ICE_PTT(45, IP, IPV4, NOF, IP_GRENAT, IPV4, NOF, NONE, PAY3), 752eddbee9bSTony Nguyen ICE_PTT(46, IP, IPV4, NOF, IP_GRENAT, IPV4, NOF, UDP, PAY4), 753eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(47), 754eddbee9bSTony Nguyen ICE_PTT(48, IP, IPV4, NOF, IP_GRENAT, IPV4, NOF, TCP, PAY4), 755eddbee9bSTony Nguyen ICE_PTT(49, IP, IPV4, NOF, IP_GRENAT, IPV4, NOF, SCTP, PAY4), 756eddbee9bSTony Nguyen ICE_PTT(50, IP, IPV4, NOF, IP_GRENAT, IPV4, NOF, ICMP, PAY4), 757eddbee9bSTony Nguyen 758eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT --> IPv6 */ 759eddbee9bSTony Nguyen ICE_PTT(51, IP, IPV4, NOF, IP_GRENAT, IPV6, FRG, NONE, PAY3), 760eddbee9bSTony Nguyen ICE_PTT(52, IP, IPV4, NOF, IP_GRENAT, IPV6, NOF, NONE, PAY3), 761eddbee9bSTony Nguyen ICE_PTT(53, IP, IPV4, NOF, IP_GRENAT, IPV6, NOF, UDP, PAY4), 762eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(54), 763eddbee9bSTony Nguyen ICE_PTT(55, IP, IPV4, NOF, IP_GRENAT, IPV6, NOF, TCP, PAY4), 764eddbee9bSTony Nguyen ICE_PTT(56, IP, IPV4, NOF, IP_GRENAT, IPV6, NOF, SCTP, PAY4), 765eddbee9bSTony Nguyen ICE_PTT(57, IP, IPV4, NOF, IP_GRENAT, IPV6, NOF, ICMP, PAY4), 766eddbee9bSTony Nguyen 767eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT --> MAC */ 768eddbee9bSTony Nguyen ICE_PTT(58, IP, IPV4, NOF, IP_GRENAT_MAC, NONE, NOF, NONE, PAY3), 769eddbee9bSTony Nguyen 770eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT --> MAC --> IPv4 */ 771eddbee9bSTony Nguyen ICE_PTT(59, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, FRG, NONE, PAY3), 772eddbee9bSTony Nguyen ICE_PTT(60, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, NOF, NONE, PAY3), 773eddbee9bSTony Nguyen ICE_PTT(61, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, NOF, UDP, PAY4), 774eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(62), 775eddbee9bSTony Nguyen ICE_PTT(63, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, NOF, TCP, PAY4), 776eddbee9bSTony Nguyen ICE_PTT(64, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, NOF, SCTP, PAY4), 777eddbee9bSTony Nguyen ICE_PTT(65, IP, IPV4, NOF, IP_GRENAT_MAC, IPV4, NOF, ICMP, PAY4), 778eddbee9bSTony Nguyen 779eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT -> MAC --> IPv6 */ 780eddbee9bSTony Nguyen ICE_PTT(66, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, FRG, NONE, PAY3), 781eddbee9bSTony Nguyen ICE_PTT(67, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, NOF, NONE, PAY3), 782eddbee9bSTony Nguyen ICE_PTT(68, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, NOF, UDP, PAY4), 783eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(69), 784eddbee9bSTony Nguyen ICE_PTT(70, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, NOF, TCP, PAY4), 785eddbee9bSTony Nguyen ICE_PTT(71, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, NOF, SCTP, PAY4), 786eddbee9bSTony Nguyen ICE_PTT(72, IP, IPV4, NOF, IP_GRENAT_MAC, IPV6, NOF, ICMP, PAY4), 787eddbee9bSTony Nguyen 788eddbee9bSTony Nguyen /* IPv4 --> GRE/NAT --> MAC/VLAN */ 789eddbee9bSTony Nguyen ICE_PTT(73, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, NONE, NOF, NONE, PAY3), 790eddbee9bSTony Nguyen 791eddbee9bSTony Nguyen /* IPv4 ---> GRE/NAT -> MAC/VLAN --> IPv4 */ 792eddbee9bSTony Nguyen ICE_PTT(74, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, FRG, NONE, PAY3), 793eddbee9bSTony Nguyen ICE_PTT(75, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, NONE, PAY3), 794eddbee9bSTony Nguyen ICE_PTT(76, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, UDP, PAY4), 795eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(77), 796eddbee9bSTony Nguyen ICE_PTT(78, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, TCP, PAY4), 797eddbee9bSTony Nguyen ICE_PTT(79, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, SCTP, PAY4), 798eddbee9bSTony Nguyen ICE_PTT(80, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, ICMP, PAY4), 799eddbee9bSTony Nguyen 800eddbee9bSTony Nguyen /* IPv4 -> GRE/NAT -> MAC/VLAN --> IPv6 */ 801eddbee9bSTony Nguyen ICE_PTT(81, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, FRG, NONE, PAY3), 802eddbee9bSTony Nguyen ICE_PTT(82, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, NONE, PAY3), 803eddbee9bSTony Nguyen ICE_PTT(83, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, UDP, PAY4), 804eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(84), 805eddbee9bSTony Nguyen ICE_PTT(85, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, TCP, PAY4), 806eddbee9bSTony Nguyen ICE_PTT(86, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, SCTP, PAY4), 807eddbee9bSTony Nguyen ICE_PTT(87, IP, IPV4, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, ICMP, PAY4), 808eddbee9bSTony Nguyen 809eddbee9bSTony Nguyen /* Non Tunneled IPv6 */ 810eddbee9bSTony Nguyen ICE_PTT(88, IP, IPV6, FRG, NONE, NONE, NOF, NONE, PAY3), 811eddbee9bSTony Nguyen ICE_PTT(89, IP, IPV6, NOF, NONE, NONE, NOF, NONE, PAY3), 812638a0c8cSJacob Keller ICE_PTT(90, IP, IPV6, NOF, NONE, NONE, NOF, UDP, PAY4), 813eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(91), 814eddbee9bSTony Nguyen ICE_PTT(92, IP, IPV6, NOF, NONE, NONE, NOF, TCP, PAY4), 815eddbee9bSTony Nguyen ICE_PTT(93, IP, IPV6, NOF, NONE, NONE, NOF, SCTP, PAY4), 816eddbee9bSTony Nguyen ICE_PTT(94, IP, IPV6, NOF, NONE, NONE, NOF, ICMP, PAY4), 817eddbee9bSTony Nguyen 818eddbee9bSTony Nguyen /* IPv6 --> IPv4 */ 819eddbee9bSTony Nguyen ICE_PTT(95, IP, IPV6, NOF, IP_IP, IPV4, FRG, NONE, PAY3), 820eddbee9bSTony Nguyen ICE_PTT(96, IP, IPV6, NOF, IP_IP, IPV4, NOF, NONE, PAY3), 821eddbee9bSTony Nguyen ICE_PTT(97, IP, IPV6, NOF, IP_IP, IPV4, NOF, UDP, PAY4), 822eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(98), 823eddbee9bSTony Nguyen ICE_PTT(99, IP, IPV6, NOF, IP_IP, IPV4, NOF, TCP, PAY4), 824eddbee9bSTony Nguyen ICE_PTT(100, IP, IPV6, NOF, IP_IP, IPV4, NOF, SCTP, PAY4), 825eddbee9bSTony Nguyen ICE_PTT(101, IP, IPV6, NOF, IP_IP, IPV4, NOF, ICMP, PAY4), 826eddbee9bSTony Nguyen 827eddbee9bSTony Nguyen /* IPv6 --> IPv6 */ 828eddbee9bSTony Nguyen ICE_PTT(102, IP, IPV6, NOF, IP_IP, IPV6, FRG, NONE, PAY3), 829eddbee9bSTony Nguyen ICE_PTT(103, IP, IPV6, NOF, IP_IP, IPV6, NOF, NONE, PAY3), 830eddbee9bSTony Nguyen ICE_PTT(104, IP, IPV6, NOF, IP_IP, IPV6, NOF, UDP, PAY4), 831eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(105), 832eddbee9bSTony Nguyen ICE_PTT(106, IP, IPV6, NOF, IP_IP, IPV6, NOF, TCP, PAY4), 833eddbee9bSTony Nguyen ICE_PTT(107, IP, IPV6, NOF, IP_IP, IPV6, NOF, SCTP, PAY4), 834eddbee9bSTony Nguyen ICE_PTT(108, IP, IPV6, NOF, IP_IP, IPV6, NOF, ICMP, PAY4), 835eddbee9bSTony Nguyen 836eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT */ 837eddbee9bSTony Nguyen ICE_PTT(109, IP, IPV6, NOF, IP_GRENAT, NONE, NOF, NONE, PAY3), 838eddbee9bSTony Nguyen 839eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> IPv4 */ 840eddbee9bSTony Nguyen ICE_PTT(110, IP, IPV6, NOF, IP_GRENAT, IPV4, FRG, NONE, PAY3), 841eddbee9bSTony Nguyen ICE_PTT(111, IP, IPV6, NOF, IP_GRENAT, IPV4, NOF, NONE, PAY3), 842eddbee9bSTony Nguyen ICE_PTT(112, IP, IPV6, NOF, IP_GRENAT, IPV4, NOF, UDP, PAY4), 843eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(113), 844eddbee9bSTony Nguyen ICE_PTT(114, IP, IPV6, NOF, IP_GRENAT, IPV4, NOF, TCP, PAY4), 845eddbee9bSTony Nguyen ICE_PTT(115, IP, IPV6, NOF, IP_GRENAT, IPV4, NOF, SCTP, PAY4), 846eddbee9bSTony Nguyen ICE_PTT(116, IP, IPV6, NOF, IP_GRENAT, IPV4, NOF, ICMP, PAY4), 847eddbee9bSTony Nguyen 848eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> IPv6 */ 849eddbee9bSTony Nguyen ICE_PTT(117, IP, IPV6, NOF, IP_GRENAT, IPV6, FRG, NONE, PAY3), 850eddbee9bSTony Nguyen ICE_PTT(118, IP, IPV6, NOF, IP_GRENAT, IPV6, NOF, NONE, PAY3), 851eddbee9bSTony Nguyen ICE_PTT(119, IP, IPV6, NOF, IP_GRENAT, IPV6, NOF, UDP, PAY4), 852eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(120), 853eddbee9bSTony Nguyen ICE_PTT(121, IP, IPV6, NOF, IP_GRENAT, IPV6, NOF, TCP, PAY4), 854eddbee9bSTony Nguyen ICE_PTT(122, IP, IPV6, NOF, IP_GRENAT, IPV6, NOF, SCTP, PAY4), 855eddbee9bSTony Nguyen ICE_PTT(123, IP, IPV6, NOF, IP_GRENAT, IPV6, NOF, ICMP, PAY4), 856eddbee9bSTony Nguyen 857eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC */ 858eddbee9bSTony Nguyen ICE_PTT(124, IP, IPV6, NOF, IP_GRENAT_MAC, NONE, NOF, NONE, PAY3), 859eddbee9bSTony Nguyen 860eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC -> IPv4 */ 861eddbee9bSTony Nguyen ICE_PTT(125, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, FRG, NONE, PAY3), 862eddbee9bSTony Nguyen ICE_PTT(126, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, NOF, NONE, PAY3), 863eddbee9bSTony Nguyen ICE_PTT(127, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, NOF, UDP, PAY4), 864eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(128), 865eddbee9bSTony Nguyen ICE_PTT(129, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, NOF, TCP, PAY4), 866eddbee9bSTony Nguyen ICE_PTT(130, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, NOF, SCTP, PAY4), 867eddbee9bSTony Nguyen ICE_PTT(131, IP, IPV6, NOF, IP_GRENAT_MAC, IPV4, NOF, ICMP, PAY4), 868eddbee9bSTony Nguyen 869eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC -> IPv6 */ 870eddbee9bSTony Nguyen ICE_PTT(132, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, FRG, NONE, PAY3), 871eddbee9bSTony Nguyen ICE_PTT(133, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, NOF, NONE, PAY3), 872eddbee9bSTony Nguyen ICE_PTT(134, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, NOF, UDP, PAY4), 873eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(135), 874eddbee9bSTony Nguyen ICE_PTT(136, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, NOF, TCP, PAY4), 875eddbee9bSTony Nguyen ICE_PTT(137, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, NOF, SCTP, PAY4), 876eddbee9bSTony Nguyen ICE_PTT(138, IP, IPV6, NOF, IP_GRENAT_MAC, IPV6, NOF, ICMP, PAY4), 877eddbee9bSTony Nguyen 878eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC/VLAN */ 879eddbee9bSTony Nguyen ICE_PTT(139, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, NONE, NOF, NONE, PAY3), 880eddbee9bSTony Nguyen 881eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC/VLAN --> IPv4 */ 882eddbee9bSTony Nguyen ICE_PTT(140, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, FRG, NONE, PAY3), 883eddbee9bSTony Nguyen ICE_PTT(141, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, NONE, PAY3), 884eddbee9bSTony Nguyen ICE_PTT(142, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, UDP, PAY4), 885eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(143), 886eddbee9bSTony Nguyen ICE_PTT(144, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, TCP, PAY4), 887eddbee9bSTony Nguyen ICE_PTT(145, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, SCTP, PAY4), 888eddbee9bSTony Nguyen ICE_PTT(146, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV4, NOF, ICMP, PAY4), 889eddbee9bSTony Nguyen 890eddbee9bSTony Nguyen /* IPv6 --> GRE/NAT -> MAC/VLAN --> IPv6 */ 891eddbee9bSTony Nguyen ICE_PTT(147, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, FRG, NONE, PAY3), 892eddbee9bSTony Nguyen ICE_PTT(148, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, NONE, PAY3), 893eddbee9bSTony Nguyen ICE_PTT(149, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, UDP, PAY4), 894eddbee9bSTony Nguyen ICE_PTT_UNUSED_ENTRY(150), 895eddbee9bSTony Nguyen ICE_PTT(151, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, TCP, PAY4), 896eddbee9bSTony Nguyen ICE_PTT(152, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, SCTP, PAY4), 897eddbee9bSTony Nguyen ICE_PTT(153, IP, IPV6, NOF, IP_GRENAT_MAC_VLAN, IPV6, NOF, ICMP, PAY4), 898eddbee9bSTony Nguyen 899eddbee9bSTony Nguyen /* unused entries */ 900dda90cb9SJesse Brandeburg [154 ... 1023] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 } 901d76a60baSAnirudh Venkataramanan }; 902d76a60baSAnirudh Venkataramanan 903d76a60baSAnirudh Venkataramanan static inline struct ice_rx_ptype_decoded ice_decode_rx_desc_ptype(u16 ptype) 904d76a60baSAnirudh Venkataramanan { 905d76a60baSAnirudh Venkataramanan return ice_ptype_lkup[ptype]; 906d76a60baSAnirudh Venkataramanan } 9077c710869SAnirudh Venkataramanan 9087c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_UNKNOWN 0 9097c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_10MBPS 10 9107c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_100MBPS 100 9117c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_1000MBPS 1000 9127c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_2500MBPS 2500 9137c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_5000MBPS 5000 9147c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_10000MBPS 10000 9157c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_20000MBPS 20000 9167c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_25000MBPS 25000 9177c710869SAnirudh Venkataramanan #define ICE_LINK_SPEED_40000MBPS 40000 918aef74145SAnirudh Venkataramanan #define ICE_LINK_SPEED_50000MBPS 50000 919aef74145SAnirudh Venkataramanan #define ICE_LINK_SPEED_100000MBPS 100000 9207c710869SAnirudh Venkataramanan 921cdedef59SAnirudh Venkataramanan #endif /* _ICE_LAN_TX_RX_H_ */ 922