1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2018, Intel Corporation. */
4 #ifndef _ICE_LAN_TX_RX_H_
5 #define _ICE_LAN_TX_RX_H_
7 union ice_32byte_rx_desc {
9 __le64 pkt_addr; /* Packet buffer address */
10 __le64 hdr_addr; /* Header buffer address */
11 /* bit 0 of hdr_addr is DD bit */
18 __le16 mirroring_status;
22 __le32 rss; /* RSS Hash */
23 __le32 fd_id; /* Flow Director filter ID */
27 /* status/error/PTYPE/length */
28 __le64 status_error_len;
31 __le16 ext_status; /* extended status */
43 struct ice_fltr_desc {
44 __le64 qidx_compq_space_stat;
45 __le64 dtype_cmd_vsi_fdid;
48 #define ICE_FXD_FLTR_QW0_QINDEX_S 0
49 #define ICE_FXD_FLTR_QW0_QINDEX_M (0x7FFULL << ICE_FXD_FLTR_QW0_QINDEX_S)
50 #define ICE_FXD_FLTR_QW0_COMP_Q_S 11
51 #define ICE_FXD_FLTR_QW0_COMP_Q_M BIT_ULL(ICE_FXD_FLTR_QW0_COMP_Q_S)
52 #define ICE_FXD_FLTR_QW0_COMP_Q_ZERO 0x0ULL
54 #define ICE_FXD_FLTR_QW0_COMP_REPORT_S 12
55 #define ICE_FXD_FLTR_QW0_COMP_REPORT_M \
56 (0x3ULL << ICE_FXD_FLTR_QW0_COMP_REPORT_S)
57 #define ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL 0x1ULL
58 #define ICE_FXD_FLTR_QW0_COMP_REPORT_SW 0x2ULL
60 #define ICE_FXD_FLTR_QW0_FD_SPACE_S 14
61 #define ICE_FXD_FLTR_QW0_FD_SPACE_M (0x3ULL << ICE_FXD_FLTR_QW0_FD_SPACE_S)
62 #define ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST 0x2ULL
64 #define ICE_FXD_FLTR_QW0_STAT_CNT_S 16
65 #define ICE_FXD_FLTR_QW0_STAT_CNT_M \
66 (0x1FFFULL << ICE_FXD_FLTR_QW0_STAT_CNT_S)
67 #define ICE_FXD_FLTR_QW0_STAT_ENA_S 29
68 #define ICE_FXD_FLTR_QW0_STAT_ENA_M (0x3ULL << ICE_FXD_FLTR_QW0_STAT_ENA_S)
69 #define ICE_FXD_FLTR_QW0_STAT_ENA_PKTS 0x1ULL
71 #define ICE_FXD_FLTR_QW0_EVICT_ENA_S 31
72 #define ICE_FXD_FLTR_QW0_EVICT_ENA_M BIT_ULL(ICE_FXD_FLTR_QW0_EVICT_ENA_S)
73 #define ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE 0x0ULL
74 #define ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE 0x1ULL
76 #define ICE_FXD_FLTR_QW0_TO_Q_S 32
77 #define ICE_FXD_FLTR_QW0_TO_Q_M (0x7ULL << ICE_FXD_FLTR_QW0_TO_Q_S)
78 #define ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX 0x0ULL
80 #define ICE_FXD_FLTR_QW0_TO_Q_PRI_S 35
81 #define ICE_FXD_FLTR_QW0_TO_Q_PRI_M (0x7ULL << ICE_FXD_FLTR_QW0_TO_Q_PRI_S)
82 #define ICE_FXD_FLTR_QW0_TO_Q_PRIO1 0x1ULL
84 #define ICE_FXD_FLTR_QW0_DPU_RECIPE_S 38
85 #define ICE_FXD_FLTR_QW0_DPU_RECIPE_M \
86 (0x3ULL << ICE_FXD_FLTR_QW0_DPU_RECIPE_S)
87 #define ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT 0x0ULL
89 #define ICE_FXD_FLTR_QW0_DROP_S 40
90 #define ICE_FXD_FLTR_QW0_DROP_M BIT_ULL(ICE_FXD_FLTR_QW0_DROP_S)
91 #define ICE_FXD_FLTR_QW0_DROP_NO 0x0ULL
92 #define ICE_FXD_FLTR_QW0_DROP_YES 0x1ULL
94 #define ICE_FXD_FLTR_QW0_FLEX_PRI_S 41
95 #define ICE_FXD_FLTR_QW0_FLEX_PRI_M (0x7ULL << ICE_FXD_FLTR_QW0_FLEX_PRI_S)
96 #define ICE_FXD_FLTR_QW0_FLEX_PRI_NONE 0x0ULL
98 #define ICE_FXD_FLTR_QW0_FLEX_MDID_S 44
99 #define ICE_FXD_FLTR_QW0_FLEX_MDID_M (0xFULL << ICE_FXD_FLTR_QW0_FLEX_MDID_S)
100 #define ICE_FXD_FLTR_QW0_FLEX_MDID0 0x0ULL
102 #define ICE_FXD_FLTR_QW0_FLEX_VAL_S 48
103 #define ICE_FXD_FLTR_QW0_FLEX_VAL_M \
104 (0xFFFFULL << ICE_FXD_FLTR_QW0_FLEX_VAL_S)
105 #define ICE_FXD_FLTR_QW0_FLEX_VAL0 0x0ULL
107 #define ICE_FXD_FLTR_QW1_DTYPE_S 0
108 #define ICE_FXD_FLTR_QW1_DTYPE_M (0xFULL << ICE_FXD_FLTR_QW1_DTYPE_S)
109 #define ICE_FXD_FLTR_QW1_PCMD_S 4
110 #define ICE_FXD_FLTR_QW1_PCMD_M BIT_ULL(ICE_FXD_FLTR_QW1_PCMD_S)
111 #define ICE_FXD_FLTR_QW1_PCMD_ADD 0x0ULL
112 #define ICE_FXD_FLTR_QW1_PCMD_REMOVE 0x1ULL
114 #define ICE_FXD_FLTR_QW1_PROF_PRI_S 5
115 #define ICE_FXD_FLTR_QW1_PROF_PRI_M (0x7ULL << ICE_FXD_FLTR_QW1_PROF_PRI_S)
116 #define ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO 0x0ULL
118 #define ICE_FXD_FLTR_QW1_PROF_S 8
119 #define ICE_FXD_FLTR_QW1_PROF_M (0x3FULL << ICE_FXD_FLTR_QW1_PROF_S)
120 #define ICE_FXD_FLTR_QW1_PROF_ZERO 0x0ULL
122 #define ICE_FXD_FLTR_QW1_FD_VSI_S 14
123 #define ICE_FXD_FLTR_QW1_FD_VSI_M (0x3FFULL << ICE_FXD_FLTR_QW1_FD_VSI_S)
124 #define ICE_FXD_FLTR_QW1_SWAP_S 24
125 #define ICE_FXD_FLTR_QW1_SWAP_M BIT_ULL(ICE_FXD_FLTR_QW1_SWAP_S)
126 #define ICE_FXD_FLTR_QW1_SWAP_NOT_SET 0x0ULL
127 #define ICE_FXD_FLTR_QW1_SWAP_SET 0x1ULL
129 #define ICE_FXD_FLTR_QW1_FDID_PRI_S 25
130 #define ICE_FXD_FLTR_QW1_FDID_PRI_M (0x7ULL << ICE_FXD_FLTR_QW1_FDID_PRI_S)
131 #define ICE_FXD_FLTR_QW1_FDID_PRI_ONE 0x1ULL
132 #define ICE_FXD_FLTR_QW1_FDID_PRI_THREE 0x3ULL
134 #define ICE_FXD_FLTR_QW1_FDID_MDID_S 28
135 #define ICE_FXD_FLTR_QW1_FDID_MDID_M (0xFULL << ICE_FXD_FLTR_QW1_FDID_MDID_S)
136 #define ICE_FXD_FLTR_QW1_FDID_MDID_FD 0x05ULL
138 #define ICE_FXD_FLTR_QW1_FDID_S 32
139 #define ICE_FXD_FLTR_QW1_FDID_M \
140 (0xFFFFFFFFULL << ICE_FXD_FLTR_QW1_FDID_S)
141 #define ICE_FXD_FLTR_QW1_FDID_ZERO 0x0ULL
143 /* definition for FD filter programming status descriptor WB format */
144 #define ICE_FXD_FLTR_WB_QW1_DD_S 0
145 #define ICE_FXD_FLTR_WB_QW1_DD_M (0x1ULL << ICE_FXD_FLTR_WB_QW1_DD_S)
146 #define ICE_FXD_FLTR_WB_QW1_DD_YES 0x1ULL
148 #define ICE_FXD_FLTR_WB_QW1_PROG_ID_S 1
149 #define ICE_FXD_FLTR_WB_QW1_PROG_ID_M \
150 (0x3ULL << ICE_FXD_FLTR_WB_QW1_PROG_ID_S)
151 #define ICE_FXD_FLTR_WB_QW1_PROG_ADD 0x0ULL
152 #define ICE_FXD_FLTR_WB_QW1_PROG_DEL 0x1ULL
154 #define ICE_FXD_FLTR_WB_QW1_FAIL_S 4
155 #define ICE_FXD_FLTR_WB_QW1_FAIL_M (0x1ULL << ICE_FXD_FLTR_WB_QW1_FAIL_S)
156 #define ICE_FXD_FLTR_WB_QW1_FAIL_YES 0x1ULL
158 #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_S 5
159 #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_M \
160 (0x1ULL << ICE_FXD_FLTR_WB_QW1_FAIL_PROF_S)
161 #define ICE_FXD_FLTR_WB_QW1_FAIL_PROF_YES 0x1ULL
163 /* Rx Flex Descriptor
164 * This descriptor is used instead of the legacy version descriptor when
165 * ice_rlan_ctx.adv_desc is set
167 union ice_32b_rx_flex_desc {
169 __le64 pkt_addr; /* Packet buffer address */
170 __le64 hdr_addr; /* Header buffer address */
171 /* bit 0 of hdr_addr is DD bit */
177 u8 rxdid; /* descriptor builder profile ID */
178 u8 mir_id_umb_cast; /* mirror=[5:0], umb=[7:6] */
179 __le16 ptype_flex_flags0; /* ptype=[9:0], ff0=[15:10] */
180 __le16 pkt_len; /* [15:14] are reserved */
181 __le16 hdr_len_sph_flex_flags1; /* header=[10:0] */
183 /* ff1/ext=[15:12] */
186 __le16 status_error0;
192 __le16 status_error1;
208 } wb; /* writeback */
211 /* Rx Flex Descriptor NIC Profile
212 * This descriptor corresponds to RxDID 2 which contains
213 * metadata fields for RSS, flow ID and timestamp info
215 struct ice_32b_rx_flex_desc_nic {
219 __le16 ptype_flexi_flags0;
221 __le16 hdr_len_sph_flex_flags1;
224 __le16 status_error0;
229 __le16 status_error1;
246 /* Rx Flex Descriptor NIC Profile
248 * Flex-field 0: RSS hash lower 16-bits
249 * Flex-field 1: RSS hash upper 16-bits
250 * Flex-field 2: Flow ID lower 16-bits
251 * Flex-field 3: Source VSI
252 * Flex-field 4: reserved, VLAN ID taken from L2Tag
254 struct ice_32b_rx_flex_desc_nic_2 {
258 __le16 ptype_flexi_flags0;
260 __le16 hdr_len_sph_flex_flags1;
263 __le16 status_error0;
268 __le16 status_error1;
286 /* Receive Flex Descriptor profile IDs: There are a total
287 * of 64 profiles where profile IDs 0/1 are for legacy; and
288 * profiles 2-63 are flex profiles that can be programmed
289 * with a specific metadata (profile 7 reserved for HW)
292 ICE_RXDID_LEGACY_0 = 0,
293 ICE_RXDID_LEGACY_1 = 1,
294 ICE_RXDID_FLEX_NIC = 2,
295 ICE_RXDID_FLEX_NIC_2 = 6,
300 /* Receive Flex Descriptor Rx opcode values */
301 #define ICE_RX_OPC_MDID 0x01
303 /* Receive Descriptor MDID values that access packet flags */
304 enum ice_flex_mdid_pkt_flags {
305 ICE_RX_MDID_PKT_FLAGS_15_0 = 20,
306 ICE_RX_MDID_PKT_FLAGS_31_16,
307 ICE_RX_MDID_PKT_FLAGS_47_32,
308 ICE_RX_MDID_PKT_FLAGS_63_48,
311 /* Receive Descriptor MDID values */
312 enum ice_flex_rx_mdid {
313 ICE_RX_MDID_FLOW_ID_LOWER = 5,
314 ICE_RX_MDID_FLOW_ID_HIGH,
315 ICE_RX_MDID_SRC_VSI = 19,
316 ICE_RX_MDID_HASH_LOW = 56,
317 ICE_RX_MDID_HASH_HIGH,
320 /* Rx/Tx Flag64 packet flag bits */
321 enum ice_flg64_bits {
323 ICE_FLG_EVLAN_x8100 = 14,
326 ICE_FLG_TNL_MAC = 22,
339 /* for ice_32byte_rx_flex_desc.ptype_flexi_flags0 member */
340 #define ICE_RX_FLEX_DESC_PTYPE_M (0x3FF) /* 10-bits */
342 /* for ice_32byte_rx_flex_desc.pkt_length member */
343 #define ICE_RX_FLX_DESC_PKT_LEN_M (0x3FFF) /* 14-bits */
345 enum ice_rx_flex_desc_status_error_0_bits {
346 /* Note: These are predefined bit offsets */
347 ICE_RX_FLEX_DESC_STATUS0_DD_S = 0,
348 ICE_RX_FLEX_DESC_STATUS0_EOF_S,
349 ICE_RX_FLEX_DESC_STATUS0_HBO_S,
350 ICE_RX_FLEX_DESC_STATUS0_L3L4P_S,
351 ICE_RX_FLEX_DESC_STATUS0_XSUM_IPE_S,
352 ICE_RX_FLEX_DESC_STATUS0_XSUM_L4E_S,
353 ICE_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S,
354 ICE_RX_FLEX_DESC_STATUS0_XSUM_EUDPE_S,
355 ICE_RX_FLEX_DESC_STATUS0_LPBK_S,
356 ICE_RX_FLEX_DESC_STATUS0_IPV6EXADD_S,
357 ICE_RX_FLEX_DESC_STATUS0_RXE_S,
358 ICE_RX_FLEX_DESC_STATUS0_CRCP_S,
359 ICE_RX_FLEX_DESC_STATUS0_RSS_VALID_S,
360 ICE_RX_FLEX_DESC_STATUS0_L2TAG1P_S,
361 ICE_RX_FLEX_DESC_STATUS0_XTRMD0_VALID_S,
362 ICE_RX_FLEX_DESC_STATUS0_XTRMD1_VALID_S,
363 ICE_RX_FLEX_DESC_STATUS0_LAST /* this entry must be last!!! */
366 enum ice_rx_flex_desc_status_error_1_bits {
367 /* Note: These are predefined bit offsets */
368 ICE_RX_FLEX_DESC_STATUS1_NAT_S = 4,
369 /* [10:5] reserved */
370 ICE_RX_FLEX_DESC_STATUS1_L2TAG2P_S = 11,
371 ICE_RX_FLEX_DESC_STATUS1_LAST /* this entry must be last!!! */
374 #define ICE_TX_CMPLTNQ_CTX_SIZE_DWORDS 22
375 #define ICE_TX_DRBELL_Q_CTX_SIZE_DWORDS 5
376 #define GLTCLAN_CQ_CNTX(i, CQ) (GLTCLAN_CQ_CNTX0(CQ) + ((i) * 0x0800))
378 /* RLAN Rx queue context data */
379 struct ice_rlan_ctx {
382 #define ICE_RLAN_BASE_S 7
385 #define ICE_RLAN_CTX_DBUF_S 7
387 #define ICE_RLAN_CTX_HBUF_S 6
402 u8 prefena; /* NOTE: normally must be set to 1 at init */
405 /* for hsplit_0 field of Rx RLAN context */
406 enum ice_rlan_ctx_rx_hsplit_0 {
407 ICE_RLAN_RX_HSPLIT_0_NO_SPLIT = 0,
408 ICE_RLAN_RX_HSPLIT_0_SPLIT_L2 = 1,
409 ICE_RLAN_RX_HSPLIT_0_SPLIT_IP = 2,
410 ICE_RLAN_RX_HSPLIT_0_SPLIT_TCP_UDP = 4,
411 ICE_RLAN_RX_HSPLIT_0_SPLIT_SCTP = 8,
414 /* for hsplit_1 field of Rx RLAN context */
415 enum ice_rlan_ctx_rx_hsplit_1 {
416 ICE_RLAN_RX_HSPLIT_1_NO_SPLIT = 0,
417 ICE_RLAN_RX_HSPLIT_1_SPLIT_L2 = 1,
418 ICE_RLAN_RX_HSPLIT_1_SPLIT_ALWAYS = 2,
423 __le64 buf_addr; /* Address of descriptor's data buf */
424 __le64 cmd_type_offset_bsz;
427 enum ice_tx_desc_dtype_value {
428 ICE_TX_DESC_DTYPE_DATA = 0x0,
429 ICE_TX_DESC_DTYPE_CTX = 0x1,
430 ICE_TX_DESC_DTYPE_FLTR_PROG = 0x8,
431 /* DESC_DONE - HW has completed write-back of descriptor */
432 ICE_TX_DESC_DTYPE_DESC_DONE = 0xF,
435 #define ICE_TXD_QW1_CMD_S 4
436 #define ICE_TXD_QW1_CMD_M (0xFFFUL << ICE_TXD_QW1_CMD_S)
438 enum ice_tx_desc_cmd_bits {
439 ICE_TX_DESC_CMD_EOP = 0x0001,
440 ICE_TX_DESC_CMD_RS = 0x0002,
441 ICE_TX_DESC_CMD_IL2TAG1 = 0x0008,
442 ICE_TX_DESC_CMD_DUMMY = 0x0010,
443 ICE_TX_DESC_CMD_IIPT_IPV6 = 0x0020,
444 ICE_TX_DESC_CMD_IIPT_IPV4 = 0x0040,
445 ICE_TX_DESC_CMD_IIPT_IPV4_CSUM = 0x0060,
446 ICE_TX_DESC_CMD_L4T_EOFT_TCP = 0x0100,
447 ICE_TX_DESC_CMD_L4T_EOFT_SCTP = 0x0200,
448 ICE_TX_DESC_CMD_L4T_EOFT_UDP = 0x0300,
449 ICE_TX_DESC_CMD_RE = 0x0400,
452 #define ICE_TXD_QW1_OFFSET_S 16
453 #define ICE_TXD_QW1_OFFSET_M (0x3FFFFULL << ICE_TXD_QW1_OFFSET_S)
455 enum ice_tx_desc_len_fields {
456 /* Note: These are predefined bit offsets */
457 ICE_TX_DESC_LEN_MACLEN_S = 0, /* 7 BITS */
458 ICE_TX_DESC_LEN_IPLEN_S = 7, /* 7 BITS */
459 ICE_TX_DESC_LEN_L4_LEN_S = 14 /* 4 BITS */
462 #define ICE_TXD_QW1_MACLEN_M (0x7FUL << ICE_TX_DESC_LEN_MACLEN_S)
463 #define ICE_TXD_QW1_IPLEN_M (0x7FUL << ICE_TX_DESC_LEN_IPLEN_S)
464 #define ICE_TXD_QW1_L4LEN_M (0xFUL << ICE_TX_DESC_LEN_L4_LEN_S)
466 /* Tx descriptor field limits in bytes */
467 #define ICE_TXD_MACLEN_MAX ((ICE_TXD_QW1_MACLEN_M >> \
468 ICE_TX_DESC_LEN_MACLEN_S) * ICE_BYTES_PER_WORD)
469 #define ICE_TXD_IPLEN_MAX ((ICE_TXD_QW1_IPLEN_M >> \
470 ICE_TX_DESC_LEN_IPLEN_S) * ICE_BYTES_PER_DWORD)
471 #define ICE_TXD_L4LEN_MAX ((ICE_TXD_QW1_L4LEN_M >> \
472 ICE_TX_DESC_LEN_L4_LEN_S) * ICE_BYTES_PER_DWORD)
474 #define ICE_TXD_QW1_TX_BUF_SZ_S 34
475 #define ICE_TXD_QW1_L2TAG1_S 48
477 /* Context descriptors */
478 struct ice_tx_ctx_desc {
479 __le32 tunneling_params;
485 #define ICE_TXD_CTX_QW1_CMD_S 4
486 #define ICE_TXD_CTX_QW1_CMD_M (0x7FUL << ICE_TXD_CTX_QW1_CMD_S)
488 #define ICE_TXD_CTX_QW1_TSO_LEN_S 30
489 #define ICE_TXD_CTX_QW1_TSO_LEN_M \
490 (0x3FFFFULL << ICE_TXD_CTX_QW1_TSO_LEN_S)
492 #define ICE_TXD_CTX_QW1_MSS_S 50
493 #define ICE_TXD_CTX_MIN_MSS 64
495 #define ICE_TXD_CTX_QW1_VSI_S 50
496 #define ICE_TXD_CTX_QW1_VSI_M (0x3FFULL << ICE_TXD_CTX_QW1_VSI_S)
498 enum ice_tx_ctx_desc_cmd_bits {
499 ICE_TX_CTX_DESC_TSO = 0x01,
500 ICE_TX_CTX_DESC_TSYN = 0x02,
501 ICE_TX_CTX_DESC_IL2TAG2 = 0x04,
502 ICE_TX_CTX_DESC_IL2TAG2_IL2H = 0x08,
503 ICE_TX_CTX_DESC_SWTCH_NOTAG = 0x00,
504 ICE_TX_CTX_DESC_SWTCH_UPLINK = 0x10,
505 ICE_TX_CTX_DESC_SWTCH_LOCAL = 0x20,
506 ICE_TX_CTX_DESC_SWTCH_VSI = 0x30,
507 ICE_TX_CTX_DESC_RESERVED = 0x40
510 enum ice_tx_ctx_desc_eipt_offload {
511 ICE_TX_CTX_EIPT_NONE = 0x0,
512 ICE_TX_CTX_EIPT_IPV6 = 0x1,
513 ICE_TX_CTX_EIPT_IPV4_NO_CSUM = 0x2,
514 ICE_TX_CTX_EIPT_IPV4 = 0x3
517 #define ICE_TXD_CTX_QW0_EIPLEN_S 2
519 #define ICE_TXD_CTX_QW0_L4TUNT_S 9
521 #define ICE_TXD_CTX_UDP_TUNNELING BIT_ULL(ICE_TXD_CTX_QW0_L4TUNT_S)
522 #define ICE_TXD_CTX_GRE_TUNNELING (0x2ULL << ICE_TXD_CTX_QW0_L4TUNT_S)
524 #define ICE_TXD_CTX_QW0_NATLEN_S 12
526 #define ICE_TXD_CTX_QW0_L4T_CS_S 23
527 #define ICE_TXD_CTX_QW0_L4T_CS_M BIT_ULL(ICE_TXD_CTX_QW0_L4T_CS_S)
529 #define ICE_LAN_TXQ_MAX_QGRPS 127
530 #define ICE_LAN_TXQ_MAX_QDIS 1023
532 /* Tx queue context data */
533 struct ice_tlan_ctx {
534 #define ICE_TLAN_CTX_BASE_S 7
535 u64 base; /* base is defined in 128-byte units */
541 #define ICE_TLAN_CTX_VMVF_TYPE_VF 0
542 #define ICE_TLAN_CTX_VMVF_TYPE_VMQ 1
543 #define ICE_TLAN_CTX_VMVF_TYPE_PF 2
546 u8 internal_usage_flag;
555 u8 itr_notification_mode;
564 u8 pkt_shaper_prof_idx;
567 #endif /* _ICE_LAN_TX_RX_H_ */