2 *------------------------------------------------------------------
3 * Copyright (c) 2023 Intel and/or its affiliates.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *------------------------------------------------------------------
18 #ifndef _IDPF_VIRTCHNL_LAN_DESC_H_
19 #define _IDPF_VIRTCHNL_LAN_DESC_H_
21 /* VIRTCHNL2_TX_DESC_IDS
22 * Transmit descriptor ID flags
24 #define foreach_idpf_txdid \
31 _ (6, FLEX_TSYN_L2TAG1) \
32 _ (7, FLEX_L2TAG1_L2TAG2) \
33 _ (8, FLEX_TSO_L2TAG2_PARSTAG_CTX) \
34 _ (9, FLEX_HOSTSPLIT_SA_TSO_CTX) \
35 _ (10, FLEX_HOSTSPLIT_SA_CTX) \
36 _ (11, FLEX_L2TAG2_CTX) \
37 _ (12, FLEX_FLOW_SCHED) \
38 _ (13, FLEX_HOSTSPLIT_TSO_CTX) \
39 _ (14, FLEX_HOSTSPLIT_CTX) \
44 #define _(a, b) VIRTCHNL2_TXDID_##b = (1 << a),
49 /* VIRTCHNL2_RX_DESC_IDS
50 * Receive descriptor IDs (range from 0 to 63)
52 #define foreach_virtchnl2_rxdid \
55 _ (2, 2_FLEX_SPLITQ) \
56 _ (2, 2_FLEX_SQ_NIC) \
58 _ (4, 4_FLEX_SQ_NIC_VEB) \
59 _ (5, 5_FLEX_SQ_NIC_ACL) \
60 _ (6, 6_FLEX_SQ_NIC_2) \
62 _ (16, 16_COMMS_GENERIC) \
63 _ (17, 17_COMMS_AUX_VLAN) \
64 _ (18, 18_COMMS_AUX_IPV4) \
65 _ (19, 19_COMMS_AUX_IPV6) \
66 _ (20, 20_COMMS_AUX_FLOW) \
67 _ (21, 21_COMMS_AUX_TCP)
71 #define _(v, n) VIRTCHNL2_RXDID_##n = v,
72 foreach_virtchnl2_rxdid
76 /* VIRTCHNL2_RX_DESC_ID_BITMASKS
77 * Receive descriptor ID bitmasks
79 #define VIRTCHNL2_RXDID_0_16B_BASE_M BIT (VIRTCHNL2_RXDID_0_16B_BASE)
80 #define VIRTCHNL2_RXDID_1_32B_BASE_M BIT (VIRTCHNL2_RXDID_1_32B_BASE)
81 #define VIRTCHNL2_RXDID_2_FLEX_SPLITQ_M BIT (VIRTCHNL2_RXDID_2_FLEX_SPLITQ)
82 #define VIRTCHNL2_RXDID_2_FLEX_SQ_NIC_M BIT (VIRTCHNL2_RXDID_2_FLEX_SQ_NIC)
83 #define VIRTCHNL2_RXDID_3_FLEX_SQ_SW_M BIT (VIRTCHNL2_RXDID_3_FLEX_SQ_SW)
84 #define VIRTCHNL2_RXDID_4_FLEX_SQ_NIC_VEB_M \
85 BIT (VIRTCHNL2_RXDID_4_FLEX_SQ_NIC_VEB)
86 #define VIRTCHNL2_RXDID_5_FLEX_SQ_NIC_ACL_M \
87 BIT (VIRTCHNL2_RXDID_5_FLEX_SQ_NIC_ACL)
88 #define VIRTCHNL2_RXDID_6_FLEX_SQ_NIC_2_M BIT (VIRTCHNL2_RXDID_6_FLEX_SQ_NIC_2)
89 #define VIRTCHNL2_RXDID_7_HW_RSVD_M BIT (VIRTCHNL2_RXDID_7_HW_RSVD)
90 /* 9 through 15 are reserved */
91 #define VIRTCHNL2_RXDID_16_COMMS_GENERIC_M \
92 BIT (VIRTCHNL2_RXDID_16_COMMS_GENERIC)
93 #define VIRTCHNL2_RXDID_17_COMMS_AUX_VLAN_M \
94 BIT (VIRTCHNL2_RXDID_17_COMMS_AUX_VLAN)
95 #define VIRTCHNL2_RXDID_18_COMMS_AUX_IPV4_M \
96 BIT (VIRTCHNL2_RXDID_18_COMMS_AUX_IPV4)
97 #define VIRTCHNL2_RXDID_19_COMMS_AUX_IPV6_M \
98 BIT (VIRTCHNL2_RXDID_19_COMMS_AUX_IPV6)
99 #define VIRTCHNL2_RXDID_20_COMMS_AUX_FLOW_M \
100 BIT (VIRTCHNL2_RXDID_20_COMMS_AUX_FLOW)
101 #define VIRTCHNL2_RXDID_21_COMMS_AUX_TCP_M \
102 BIT (VIRTCHNL2_RXDID_21_COMMS_AUX_TCP)
103 /* 22 through 63 are reserved */
106 /* For splitq virtchnl2_rx_flex_desc_adv desc members */
107 #define VIRTCHNL2_RX_FLEX_DESC_ADV_RXDID_S 0
108 #define VIRTCHNL2_RX_FLEX_DESC_ADV_RXDID_M \
109 MAKEMASK (0xFUL, VIRTCHNL2_RX_FLEX_DESC_ADV_RXDID_S)
110 #define VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_S 0
111 #define VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_M \
112 MAKEMASK (0x3FFUL, VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_S)
113 #define VIRTCHNL2_RX_FLEX_DESC_ADV_UMBCAST_S 10
114 #define VIRTCHNL2_RX_FLEX_DESC_ADV_UMBCAST_M \
115 MAKEMASK (0x3UL, VIRTCHNL2_RX_FLEX_DESC_ADV_UMBCAST_S)
116 #define VIRTCHNL2_RX_FLEX_DESC_ADV_FF0_S 12
117 #define VIRTCHNL2_RX_FLEX_DESC_ADV_FF0_M \
118 MAKEMASK (0xFUL, VIRTCHNL2_RX_FLEX_DESC_ADV_FF0_S)
119 #define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_PBUF_S 0
120 #define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_PBUF_M \
121 MAKEMASK (0x3FFFUL, VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_PBUF_S)
122 #define VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_S 14
123 #define VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_M \
124 BIT_ULL (VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_S)
125 #define VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_S 15
126 #define VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_M \
127 BIT_ULL (VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_S)
128 #define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_HDR_S 0
129 #define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_HDR_M \
130 MAKEMASK (0x3FFUL, VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_HDR_S)
131 #define VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_S 10
132 #define VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_M \
133 BIT_ULL (VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_S)
134 #define VIRTCHNL2_RX_FLEX_DESC_ADV_SPH_S 11
135 #define VIRTCHNL2_RX_FLEX_DESC_ADV_SPH_M \
136 BIT_ULL (VIRTCHNL2_RX_FLEX_DESC_ADV_SPH_S)
137 #define VIRTCHNL2_RX_FLEX_DESC_ADV_MISS_S 12
138 #define VIRTCHNL2_RX_FLEX_DESC_ADV_MISS_M \
139 BIT_ULL (VIRTCHNL2_RX_FLEX_DESC_ADV_MISS_S)
140 #define VIRTCHNL2_RX_FLEX_DESC_ADV_FF1_S 13
141 #define VIRTCHNL2_RX_FLEX_DESC_ADV_FF1_M \
142 MAKEMASK (0x7UL, VIRTCHNL2_RX_FLEX_DESC_ADV_FF1_M)
144 #define foreach_virtchnl2_rx_flex_desc_adv_status0_qw1 \
156 #define _(v, n) VIRTCHNL2_RX_FLEX_DESC_ADV_STATUS0_##n = v,
157 foreach_virtchnl2_rx_flex_desc_adv_status0_qw1
159 } virtchnl2_rx_flex_desc_adv_status0_qw1_t;
161 #define foreach_virtchnl2_rx_flex_desc_adv_status0_qw0 \
168 _ (6, XTRMD0_VALID_S) \
169 _ (7, XTRMD1_VALID_S) \
174 #define _(v, n) VIRTCHNL2_RX_FLEX_DESC_ADV_STATUS0_##n = v,
175 foreach_virtchnl2_rx_flex_desc_adv_status0_qw0
177 } virtchnl2_rx_flex_desc_adv_status0_qw0_t;
179 #define foreach_virtchnl2_rx_flex_desc_adv_status1 \
183 _ (4, XTRMD2_VALID_S) \
184 _ (5, XTRMD3_VALID_S) \
185 _ (6, XTRMD4_VALID_S) \
186 _ (7, XTRMD5_VALID_S) \
191 #define _(v, n) VIRTCHNL2_RX_FLEX_DESC_ADV_STATUS1_##n = v,
192 foreach_virtchnl2_rx_flex_desc_adv_status1
194 } virtchnl2_rx_flex_desc_adv_status1_t;
196 #define VIRTCHNL2_RX_FLEX_DESC_PTYPE_S 0
197 #define VIRTCHNL2_RX_FLEX_DESC_PTYPE_M \
198 MAKEMASK (0x3FFUL, VIRTCHNL2_RX_FLEX_DESC_PTYPE_S) /* 10 bits */
200 #define VIRTCHNL2_RX_FLEX_DESC_PKT_LEN_S 0
201 #define VIRTCHNL2_RX_FLEX_DESC_PKT_LEN_M \
202 MAKEMASK (0x3FFFUL, VIRTCHNL2_RX_FLEX_DESC_PKT_LEN_S) /* 14 bits */
204 #define foreach_virtchnl2_rx_flex_desc_status0 \
212 _ (7, XSUM_EUDPE_S) \
217 _ (12, RSS_VALID_S) \
219 _ (14, XTRMD0_VALID_S) \
220 _ (15, XTRMD1_VALID_S) \
225 #define _(v, n) VIRTCHNL2_RX_FLEX_DESC_STATUS0_##n = v,
226 foreach_virtchnl2_rx_flex_desc_status0
228 } virtchnl2_rx_flex_desc_status0_t;
230 #define foreach_virtchnl2_rx_flex_desc_status1 \
235 _ (12, XTRMD2_VALID_S) \
236 _ (13, XTRMD3_VALID_S) \
237 _ (14, XTRMD4_VALID_S) \
238 _ (15, XTRMD5_VALID_S) \
243 #define _(v, n) VIRTCHNL2_RX_FLEX_DESC_STATUS1_##n = v,
244 foreach_virtchnl2_rx_flex_desc_status1
246 } virtchnl2_rx_flex_desc_status1_t;
248 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_SPH_S 63
249 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_SPH_M \
250 BIT_ULL (VIRTCHNL2_RX_BASE_DESC_QW1_LEN_SPH_S)
251 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_HBUF_S 52
252 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_HBUF_M \
253 MAKEMASK (0x7FFULL, VIRTCHNL2_RX_BASE_DESC_QW1_LEN_HBUF_S)
254 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_PBUF_S 38
255 #define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_PBUF_M \
256 MAKEMASK (0x3FFFULL, VIRTCHNL2_RX_BASE_DESC_QW1_LEN_PBUF_S)
257 #define VIRTCHNL2_RX_BASE_DESC_QW1_PTYPE_S 30
258 #define VIRTCHNL2_RX_BASE_DESC_QW1_PTYPE_M \
259 MAKEMASK (0xFFULL, VIRTCHNL2_RX_BASE_DESC_QW1_PTYPE_S)
260 #define VIRTCHNL2_RX_BASE_DESC_QW1_ERROR_S 19
261 #define VIRTCHNL2_RX_BASE_DESC_QW1_ERROR_M \
262 MAKEMASK (0xFFUL, VIRTCHNL2_RX_BASE_DESC_QW1_ERROR_S)
263 #define VIRTCHNL2_RX_BASE_DESC_QW1_STATUS_S 0
264 #define VIRTCHNL2_RX_BASE_DESC_QW1_STATUS_M \
265 MAKEMASK (0x7FFFFUL, VIRTCHNL2_RX_BASE_DESC_QW1_STATUS_S)
267 #define foreach_virtchnl2_rx_base_desc_status \
279 _ (15, IPV6EXADD_S) \
281 _ (18, INT_UDP_0_S) \
286 #define _(v, n) VIRTCHNL2_RX_BASE_DESC_STATUS_##n = v,
287 foreach_virtchnl2_rx_base_desc_status
289 } virtchnl2_rx_base_desc_status_t;
291 #define VIRTCHNL2_RX_BASE_DESC_EXT_STATUS_L2TAG2P_S 0
293 #define foreach_virtchnl2_rx_base_desc_error \
306 #define _(v, n) VIRTCHNL2_RX_BASE_DESC_ERROR_##n = v,
307 foreach_virtchnl2_rx_base_desc_error
309 } virtchnl2_rx_base_desc_error_t;
311 #define foreach_virtchnl2_rx_base_desc_fltstat \
319 #define _(v, n) VIRTCHNL2_RX_BASE_DESC_FLTSTAT_##n = v,
320 foreach_virtchnl2_rx_base_desc_fltstat
322 } virtchnl2_rx_base_desc_fltstat_t;
324 /* Receive Descriptors */
327 ----------------------------------------------------------------
329 ----------------------------------------------------------------
330 | Rx packet buffer adresss |
331 ----------------------------------------------------------------
332 | Rx header buffer adresss |
333 ----------------------------------------------------------------
335 ----------------------------------------------------------------
349 } virtchnl2_splitq_rx_buf_desc_t;
357 } virtchnl2_singleq_rx_buf_desc_t;
359 union virtchnl2_rx_buf_desc
361 virtchnl2_singleq_rx_buf_desc_t read;
362 virtchnl2_splitq_rx_buf_desc_t split_rd;
371 u16 mirroring_status;
382 u64 status_error_ptype_len;
396 } virtchnl2_singleq_base_rx_desc_t;
403 u16 ptype_flex_flags0;
405 u16 hdr_len_sph_flex_flags1;
432 } virtchnl2_rx_flex_desc_t;
439 u16 ptype_flex_flags0;
441 u16 hdr_len_sph_flex_flags1;
466 } virtchnl2_rx_flex_desc_nic_t;
473 u16 ptype_flex_flags0;
475 u16 hdr_len_sph_flex_flags1;
493 } virtchnl2_rx_flex_desc_sw_t;
500 u16 ptype_flex_flags0;
502 u16 hdr_len_sph_flex_flags1;
528 } virtchnl2_rx_flex_desc_nic_2_t;
535 u16 ptype_err_fflags0;
536 u16 pktlen_gen_bufq_id;
557 } virtchnl2_rx_flex_desc_adv_t;
564 u16 ptype_err_fflags0;
565 u16 pktlen_gen_bufq_id;
595 } virtchnl2_rx_flex_desc_adv_nic_3_t;
599 virtchnl2_singleq_rx_buf_desc_t read;
600 virtchnl2_singleq_base_rx_desc_t base_wb;
601 virtchnl2_rx_flex_desc_t flex_wb;
602 virtchnl2_rx_flex_desc_nic_t flex_nic_wb;
603 virtchnl2_rx_flex_desc_sw_t flex_sw_wb;
604 virtchnl2_rx_flex_desc_nic_2_t flex_nic_2_wb;
605 virtchnl2_rx_flex_desc_adv_t flex_adv_wb;
606 virtchnl2_rx_flex_desc_adv_nic_3_t flex_adv_nic_3_wb;
608 } virtchnl2_rx_desc_t;
610 #endif /* _IDPF_VIRTCHNL_LAN_DESC_H_ */