xref: /linux/drivers/net/ethernet/broadcom/bnge/bnge_hw_def.h (revision 37a93dd5c49b5fda807fd204edf2547c3493319c)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2025 Broadcom */
3 
4 #ifndef _BNGE_HW_DEF_H_
5 #define _BNGE_HW_DEF_H_
6 
7 #define TX_BD_FLAGS_TCP_UDP_CHKSUM	BIT(0)
8 #define TX_BD_FLAGS_IP_CKSUM		BIT(1)
9 #define TX_BD_FLAGS_NO_CRC		BIT(2)
10 #define TX_BD_FLAGS_STAMP		BIT(3)
11 #define TX_BD_FLAGS_T_IP_CHKSUM		BIT(4)
12 #define TX_BD_FLAGS_LSO			BIT(5)
13 #define TX_BD_FLAGS_IPID_FMT		BIT(6)
14 #define TX_BD_FLAGS_T_IPID		BIT(7)
15 #define TX_BD_HSIZE			GENMASK(23, 16)
16 #define TX_BD_HSIZE_SHIFT		16
17 
18 #define TX_BD_CFA_ACTION		GENMASK(31, 16)
19 #define TX_BD_CFA_ACTION_SHIFT		16
20 
21 #define TX_BD_CFA_META_MASK		0xfffffff
22 #define TX_BD_CFA_META_VID_MASK		0xfff
23 #define TX_BD_CFA_META_PRI_MASK		GENMASK(15, 12)
24 #define TX_BD_CFA_META_PRI_SHIFT	12
25 #define TX_BD_CFA_META_TPID_MASK	GENMASK(17, 16)
26 #define TX_BD_CFA_META_TPID_SHIFT	16
27 #define TX_BD_CFA_META_KEY		GENMASK(31, 28)
28 #define TX_BD_CFA_META_KEY_SHIFT	28
29 #define TX_BD_CFA_META_KEY_VLAN		BIT(28)
30 
31 struct tx_bd_ext {
32 	__le32 tx_bd_hsize_lflags;
33 	__le32 tx_bd_mss;
34 	__le32 tx_bd_cfa_action;
35 	__le32 tx_bd_cfa_meta;
36 };
37 
38 #define TX_CMP_SQ_CONS_IDX(txcmp)					\
39 	(le32_to_cpu((txcmp)->sq_cons_idx) & TX_CMP_SQ_CONS_IDX_MASK)
40 
41 #define RX_CMP_CMP_TYPE				GENMASK(5, 0)
42 #define RX_CMP_FLAGS_ERROR			BIT(6)
43 #define RX_CMP_FLAGS_PLACEMENT			GENMASK(9, 7)
44 #define RX_CMP_FLAGS_RSS_VALID			BIT(10)
45 #define RX_CMP_FLAGS_PKT_METADATA_PRESENT	BIT(11)
46 #define RX_CMP_FLAGS_ITYPES_SHIFT		12
47 #define RX_CMP_FLAGS_ITYPES_MASK		0xf000
48 #define RX_CMP_FLAGS_ITYPE_UNKNOWN		(0 << 12)
49 #define RX_CMP_FLAGS_ITYPE_IP			(1 << 12)
50 #define RX_CMP_FLAGS_ITYPE_TCP			(2 << 12)
51 #define RX_CMP_FLAGS_ITYPE_UDP			(3 << 12)
52 #define RX_CMP_FLAGS_ITYPE_FCOE			(4 << 12)
53 #define RX_CMP_FLAGS_ITYPE_ROCE			(5 << 12)
54 #define RX_CMP_FLAGS_ITYPE_PTP_WO_TS		(8 << 12)
55 #define RX_CMP_FLAGS_ITYPE_PTP_W_TS		(9 << 12)
56 #define RX_CMP_LEN				GENMASK(31, 16)
57 #define RX_CMP_LEN_SHIFT			16
58 
59 #define RX_CMP_V1				BIT(0)
60 #define RX_CMP_AGG_BUFS				GENMASK(5, 1)
61 #define RX_CMP_AGG_BUFS_SHIFT			1
62 #define RX_CMP_RSS_HASH_TYPE			GENMASK(15, 9)
63 #define RX_CMP_RSS_HASH_TYPE_SHIFT		9
64 #define RX_CMP_V3_RSS_EXT_OP_LEGACY		GENMASK(15, 12)
65 #define RX_CMP_V3_RSS_EXT_OP_LEGACY_SHIFT	12
66 #define RX_CMP_V3_RSS_EXT_OP_NEW		GENMASK(11, 8)
67 #define RX_CMP_V3_RSS_EXT_OP_NEW_SHIFT		8
68 #define RX_CMP_PAYLOAD_OFFSET			GENMASK(23, 16)
69 #define RX_CMP_PAYLOAD_OFFSET_SHIFT		16
70 #define RX_CMP_SUB_NS_TS			GENMASK(19, 16)
71 #define RX_CMP_SUB_NS_TS_SHIFT			16
72 #define RX_CMP_METADATA1			GENMASK(31, 28)
73 #define RX_CMP_METADATA1_SHIFT			28
74 #define RX_CMP_METADATA1_TPID_SEL		GENMASK(30, 28)
75 #define RX_CMP_METADATA1_TPID_8021Q		BIT(28)
76 #define RX_CMP_METADATA1_TPID_8021AD		(0x0 << 28)
77 #define RX_CMP_METADATA1_VALID			BIT(31)
78 
79 struct rx_cmp {
80 	__le32 rx_cmp_len_flags_type;
81 	u32 rx_cmp_opaque;
82 	__le32 rx_cmp_misc_v1;
83 	__le32 rx_cmp_rss_hash;
84 };
85 
86 #define RX_CMP_FLAGS2_IP_CS_CALC			BIT(0)
87 #define RX_CMP_FLAGS2_L4_CS_CALC			BIT(1)
88 #define RX_CMP_FLAGS2_T_IP_CS_CALC			BIT(2)
89 #define RX_CMP_FLAGS2_T_L4_CS_CALC			BIT(3)
90 #define RX_CMP_FLAGS2_META_FORMAT_VLAN			BIT(4)
91 
92 #define RX_CMP_FLAGS2_METADATA_TCI_MASK			GENMASK(15, 0)
93 #define RX_CMP_FLAGS2_METADATA_VID_MASK			GENMASK(11, 0)
94 #define RX_CMP_FLAGS2_METADATA_TPID_MASK		GENMASK(31, 16)
95 #define RX_CMP_FLAGS2_METADATA_TPID_SFT			16
96 
97 #define RX_CMP_V					BIT(0)
98 #define RX_CMPL_ERRORS_MASK				GENMASK(15, 1)
99 #define RX_CMPL_ERRORS_SFT				1
100 #define RX_CMPL_ERRORS_BUFFER_ERROR_MASK		GENMASK(3, 1)
101 #define RX_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER		(0x0 << 1)
102 #define RX_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT		(0x1 << 1)
103 #define RX_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP		(0x2 << 1)
104 #define RX_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT		(0x3 << 1)
105 #define RX_CMPL_ERRORS_IP_CS_ERROR			BIT(4)
106 #define RX_CMPL_ERRORS_L4_CS_ERROR			BIT(5)
107 #define RX_CMPL_ERRORS_T_IP_CS_ERROR			BIT(6)
108 #define RX_CMPL_ERRORS_T_L4_CS_ERROR			BIT(7)
109 #define RX_CMPL_ERRORS_CRC_ERROR			BIT(8)
110 #define RX_CMPL_ERRORS_T_PKT_ERROR_MASK			GENMASK(11, 9)
111 #define RX_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR		(0x0 << 9)
112 #define RX_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION	(0x1 << 9)
113 #define RX_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN	(0x2 << 9)
114 #define RX_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR	(0x3 << 9)
115 #define RX_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR	(0x4 << 9)
116 #define RX_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR	(0x5 << 9)
117 #define RX_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL		(0x6 << 9)
118 #define RX_CMPL_ERRORS_PKT_ERROR_MASK			GENMASK(15, 12)
119 #define RX_CMPL_ERRORS_PKT_ERROR_NO_ERROR		(0x0 << 12)
120 #define RX_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION		(0x1 << 12)
121 #define RX_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN		(0x2 << 12)
122 #define RX_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL		(0x3 << 12)
123 #define RX_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR		(0x4 << 12)
124 #define RX_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR	(0x5 << 12)
125 #define RX_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN		(0x6 << 12)
126 #define RX_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL (0x7 << 12)
127 #define RX_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN		(0x8 << 12)
128 
129 #define RX_CMPL_CFA_CODE_MASK				GENMASK(31, 16)
130 #define RX_CMPL_CFA_CODE_SFT				16
131 #define RX_CMPL_METADATA0_TCI_MASK			GENMASK(31, 16)
132 #define RX_CMPL_METADATA0_VID_MASK			GENMASK(27, 16)
133 #define RX_CMPL_METADATA0_SFT				16
134 
135 struct rx_cmp_ext {
136 	__le32 rx_cmp_flags2;
137 	__le32 rx_cmp_meta_data;
138 	__le32 rx_cmp_cfa_code_errors_v2;
139 	__le32 rx_cmp_timestamp;
140 };
141 
142 #define RX_AGG_CMP_TYPE			GENMASK(5, 0)
143 #define RX_AGG_CMP_LEN			GENMASK(31, 16)
144 #define RX_AGG_CMP_LEN_SHIFT		16
145 #define RX_AGG_CMP_V			BIT(0)
146 #define RX_AGG_CMP_AGG_ID		GENMASK(25, 16)
147 #define RX_AGG_CMP_AGG_ID_SHIFT		16
148 
149 struct rx_agg_cmp {
150 	__le32 rx_agg_cmp_len_flags_type;
151 	u32 rx_agg_cmp_opaque;
152 	__le32 rx_agg_cmp_v;
153 	__le32 rx_agg_cmp_unused;
154 };
155 
156 #define RX_CMP_L2_ERRORS						\
157 	cpu_to_le32(RX_CMPL_ERRORS_BUFFER_ERROR_MASK | RX_CMPL_ERRORS_CRC_ERROR)
158 
159 #define RX_CMP_L4_CS_BITS						\
160 	(cpu_to_le32(RX_CMP_FLAGS2_L4_CS_CALC | RX_CMP_FLAGS2_T_L4_CS_CALC))
161 
162 #define RX_CMP_L4_CS_ERR_BITS						\
163 	(cpu_to_le32(RX_CMPL_ERRORS_L4_CS_ERROR | RX_CMPL_ERRORS_T_L4_CS_ERROR))
164 
165 #define RX_CMP_L4_CS_OK(rxcmp1)						\
166 	    (((rxcmp1)->rx_cmp_flags2 &	RX_CMP_L4_CS_BITS) &&		\
167 	     !((rxcmp1)->rx_cmp_cfa_code_errors_v2 & RX_CMP_L4_CS_ERR_BITS))
168 
169 #define RX_CMP_METADATA0_TCI(rxcmp1)					\
170 	((le32_to_cpu((rxcmp1)->rx_cmp_cfa_code_errors_v2) &		\
171 	  RX_CMPL_METADATA0_TCI_MASK) >> RX_CMPL_METADATA0_SFT)
172 
173 #define RX_CMP_ENCAP(rxcmp1)						\
174 	    ((le32_to_cpu((rxcmp1)->rx_cmp_flags2) &			\
175 	     RX_CMP_FLAGS2_T_L4_CS_CALC) >> 3)
176 
177 #define RX_CMP_V3_HASH_TYPE_LEGACY(rxcmp)				\
178 	((le32_to_cpu((rxcmp)->rx_cmp_misc_v1) &			\
179 	  RX_CMP_V3_RSS_EXT_OP_LEGACY) >> RX_CMP_V3_RSS_EXT_OP_LEGACY_SHIFT)
180 
181 #define RX_CMP_V3_HASH_TYPE_NEW(rxcmp)				\
182 	((le32_to_cpu((rxcmp)->rx_cmp_misc_v1) & RX_CMP_V3_RSS_EXT_OP_NEW) >>\
183 	 RX_CMP_V3_RSS_EXT_OP_NEW_SHIFT)
184 
185 #define RX_CMP_V3_HASH_TYPE(bd, rxcmp)				\
186 	(((bd)->rss_cap & BNGE_RSS_CAP_RSS_TCAM) ?		\
187 	  RX_CMP_V3_HASH_TYPE_NEW(rxcmp) :			\
188 	  RX_CMP_V3_HASH_TYPE_LEGACY(rxcmp))
189 
190 #define EXT_OP_INNER_4		0x0
191 #define EXT_OP_OUTER_4		0x2
192 #define EXT_OP_INNFL_3		0x8
193 #define EXT_OP_OUTFL_3		0xa
194 
195 #define RX_CMP_VLAN_VALID(rxcmp)				\
196 	((rxcmp)->rx_cmp_misc_v1 & cpu_to_le32(RX_CMP_METADATA1_VALID))
197 
198 #define RX_CMP_VLAN_TPID_SEL(rxcmp)				\
199 	(le32_to_cpu((rxcmp)->rx_cmp_misc_v1) & RX_CMP_METADATA1_TPID_SEL)
200 
201 #define RSS_PROFILE_ID_MASK	GENMASK(4, 0)
202 
203 #define RX_CMP_HASH_TYPE(rxcmp)					\
204 	(((le32_to_cpu((rxcmp)->rx_cmp_misc_v1) & RX_CMP_RSS_HASH_TYPE) >>\
205 	  RX_CMP_RSS_HASH_TYPE_SHIFT) & RSS_PROFILE_ID_MASK)
206 
207 #define RX_CMP_HASH_VALID(rxcmp)				\
208 	((rxcmp)->rx_cmp_len_flags_type & cpu_to_le32(RX_CMP_FLAGS_RSS_VALID))
209 
210 #define TPA_AGG_AGG_ID(rx_agg)				\
211 	((le32_to_cpu((rx_agg)->rx_agg_cmp_v) &		\
212 	 RX_AGG_CMP_AGG_ID) >> RX_AGG_CMP_AGG_ID_SHIFT)
213 
214 #define RX_TPA_START_CMP_TYPE				GENMASK(5, 0)
215 #define RX_TPA_START_CMP_FLAGS				GENMASK(15, 6)
216 #define RX_TPA_START_CMP_FLAGS_SHIFT			6
217 #define RX_TPA_START_CMP_FLAGS_ERROR			BIT(6)
218 #define RX_TPA_START_CMP_FLAGS_PLACEMENT		GENMASK(9, 7)
219 #define RX_TPA_START_CMP_FLAGS_PLACEMENT_SHIFT		7
220 #define RX_TPA_START_CMP_FLAGS_PLACEMENT_JUMBO		BIT(7)
221 #define RX_TPA_START_CMP_FLAGS_PLACEMENT_HDS		(0x2 << 7)
222 #define RX_TPA_START_CMP_FLAGS_PLACEMENT_GRO_JUMBO	(0x5 << 7)
223 #define RX_TPA_START_CMP_FLAGS_PLACEMENT_GRO_HDS	(0x6 << 7)
224 #define RX_TPA_START_CMP_FLAGS_RSS_VALID		BIT(10)
225 #define RX_TPA_START_CMP_FLAGS_TIMESTAMP		BIT(11)
226 #define RX_TPA_START_CMP_FLAGS_ITYPES			GENMASK(15, 12)
227 #define RX_TPA_START_CMP_FLAGS_ITYPES_SHIFT		12
228 #define RX_TPA_START_CMP_FLAGS_ITYPE_TCP		(0x2 << 12)
229 #define RX_TPA_START_CMP_LEN				GENMASK(31, 16)
230 #define RX_TPA_START_CMP_LEN_SHIFT			16
231 #define RX_TPA_START_CMP_V1				BIT(0)
232 #define RX_TPA_START_CMP_RSS_HASH_TYPE			GENMASK(15, 9)
233 #define RX_TPA_START_CMP_RSS_HASH_TYPE_SHIFT		9
234 #define RX_TPA_START_CMP_V3_RSS_HASH_TYPE		GENMASK(15, 7)
235 #define RX_TPA_START_CMP_V3_RSS_HASH_TYPE_SHIFT		7
236 #define RX_TPA_START_CMP_AGG_ID				GENMASK(25, 16)
237 #define RX_TPA_START_CMP_AGG_ID_SHIFT			16
238 #define RX_TPA_START_CMP_METADATA1			GENMASK(31, 28)
239 #define RX_TPA_START_CMP_METADATA1_SHIFT		28
240 #define RX_TPA_START_METADATA1_TPID_SEL			GENMASK(30, 28)
241 #define RX_TPA_START_METADATA1_TPID_8021Q		BIT(28)
242 #define RX_TPA_START_METADATA1_TPID_8021AD		(0x0 << 28)
243 #define RX_TPA_START_METADATA1_VALID			BIT(31)
244 
245 struct rx_tpa_start_cmp {
246 	__le32 rx_tpa_start_cmp_len_flags_type;
247 	u32 rx_tpa_start_cmp_opaque;
248 	__le32 rx_tpa_start_cmp_misc_v1;
249 	__le32 rx_tpa_start_cmp_rss_hash;
250 };
251 
252 #define TPA_START_HASH_VALID(rx_tpa_start)				\
253 	((rx_tpa_start)->rx_tpa_start_cmp_len_flags_type &		\
254 	 cpu_to_le32(RX_TPA_START_CMP_FLAGS_RSS_VALID))
255 
256 #define TPA_START_HASH_TYPE(rx_tpa_start)				\
257 	(((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) &	\
258 	   RX_TPA_START_CMP_RSS_HASH_TYPE) >>				\
259 	  RX_TPA_START_CMP_RSS_HASH_TYPE_SHIFT) & RSS_PROFILE_ID_MASK)
260 
261 #define TPA_START_V3_HASH_TYPE(rx_tpa_start)				\
262 	(((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) &	\
263 	   RX_TPA_START_CMP_V3_RSS_HASH_TYPE) >>			\
264 	  RX_TPA_START_CMP_V3_RSS_HASH_TYPE_SHIFT) & RSS_PROFILE_ID_MASK)
265 
266 #define TPA_START_AGG_ID(rx_tpa_start)				\
267 	((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) &	\
268 	 RX_TPA_START_CMP_AGG_ID) >> RX_TPA_START_CMP_AGG_ID_SHIFT)
269 
270 #define TPA_START_ERROR(rx_tpa_start)					\
271 	((rx_tpa_start)->rx_tpa_start_cmp_len_flags_type &		\
272 	 cpu_to_le32(RX_TPA_START_CMP_FLAGS_ERROR))
273 
274 #define TPA_START_VLAN_VALID(rx_tpa_start)				\
275 	((rx_tpa_start)->rx_tpa_start_cmp_misc_v1 &			\
276 	 cpu_to_le32(RX_TPA_START_METADATA1_VALID))
277 
278 #define TPA_START_VLAN_TPID_SEL(rx_tpa_start)				\
279 	(le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) &	\
280 	 RX_TPA_START_METADATA1_TPID_SEL)
281 
282 #define RX_TPA_START_CMP_FLAGS2_IP_CS_CALC		BIT(0)
283 #define RX_TPA_START_CMP_FLAGS2_L4_CS_CALC		BIT(1)
284 #define RX_TPA_START_CMP_FLAGS2_T_IP_CS_CALC		BIT(2)
285 #define RX_TPA_START_CMP_FLAGS2_T_L4_CS_CALC		BIT(3)
286 #define RX_TPA_START_CMP_FLAGS2_IP_TYPE			BIT(8)
287 #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL_VALID		BIT(9)
288 #define RX_TPA_START_CMP_FLAGS2_EXT_META_FORMAT		GENMASK(11, 10)
289 #define RX_TPA_START_CMP_FLAGS2_EXT_META_FORMAT_SHIFT	10
290 #define RX_TPA_START_CMP_V3_FLAGS2_T_IP_TYPE		BIT(10)
291 #define RX_TPA_START_CMP_V3_FLAGS2_AGG_GRO		BIT(11)
292 #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL		GENMASK(31, 16)
293 #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL_SHIFT		16
294 #define RX_TPA_START_CMP_V2				BIT(0)
295 #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_MASK	GENMASK(3, 1)
296 #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_SHIFT	1
297 #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_NO_BUFFER	(0x0 << 1)
298 #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_BAD_FORMAT	(0x3 << 1)
299 #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_FLUSH	(0x5 << 1)
300 #define RX_TPA_START_CMP_CFA_CODE			GENMASK(31, 16)
301 #define RX_TPA_START_CMPL_CFA_CODE_SHIFT		16
302 #define RX_TPA_START_CMP_METADATA0_TCI_MASK		GENMASK(31, 16)
303 #define RX_TPA_START_CMP_METADATA0_VID_MASK		GENMASK(27, 16)
304 #define RX_TPA_START_CMP_METADATA0_SFT			16
305 
306 struct rx_tpa_start_cmp_ext {
307 	__le32 rx_tpa_start_cmp_flags2;
308 	__le32 rx_tpa_start_cmp_metadata;
309 	__le32 rx_tpa_start_cmp_cfa_code_v2;
310 	__le32 rx_tpa_start_cmp_hdr_info;
311 };
312 
313 #define TPA_START_CFA_CODE(rx_tpa_start)				\
314 	((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) &	\
315 	 RX_TPA_START_CMP_CFA_CODE) >> RX_TPA_START_CMPL_CFA_CODE_SHIFT)
316 
317 #define TPA_START_IS_IPV6(rx_tpa_start)				\
318 	(!!((rx_tpa_start)->rx_tpa_start_cmp_flags2 &		\
319 	    cpu_to_le32(RX_TPA_START_CMP_FLAGS2_IP_TYPE)))
320 
321 #define TPA_START_ERROR_CODE(rx_tpa_start)				\
322 	((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) &	\
323 	  RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_MASK) >>			\
324 	 RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_SHIFT)
325 
326 #define TPA_START_METADATA0_TCI(rx_tpa_start)				\
327 	((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) &	\
328 	  RX_TPA_START_CMP_METADATA0_TCI_MASK) >>			\
329 	 RX_TPA_START_CMP_METADATA0_SFT)
330 
331 #define RX_TPA_END_CMP_TYPE				GENMASK(5, 0)
332 #define RX_TPA_END_CMP_FLAGS				GENMASK(15, 6)
333 #define RX_TPA_END_CMP_FLAGS_SHIFT			6
334 #define RX_TPA_END_CMP_FLAGS_PLACEMENT			GENMASK(9, 7)
335 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_SHIFT		7
336 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_JUMBO		BIT(7)
337 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_HDS		(0x2 << 7)
338 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_GRO_JUMBO	(0x5 << 7)
339 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_GRO_HDS		(0x6 << 7)
340 #define RX_TPA_END_CMP_FLAGS_RSS_VALID			BIT(10)
341 #define RX_TPA_END_CMP_FLAGS_ITYPES			GENMASK(15, 12)
342 #define RX_TPA_END_CMP_FLAGS_ITYPES_SHIFT		12
343 #define RX_TPA_END_CMP_FLAGS_ITYPE_TCP			(0x2 << 12)
344 #define RX_TPA_END_CMP_LEN				GENMASK(31, 16)
345 #define RX_TPA_END_CMP_LEN_SHIFT			16
346 #define RX_TPA_END_CMP_V1				BIT(0)
347 #define RX_TPA_END_CMP_TPA_SEGS				GENMASK(15, 8)
348 #define RX_TPA_END_CMP_TPA_SEGS_SHIFT			8
349 #define RX_TPA_END_CMP_AGG_ID				GENMASK(25, 16)
350 #define RX_TPA_END_CMP_AGG_ID_SHIFT			16
351 #define RX_TPA_END_GRO_TS				BIT(31)
352 
353 struct rx_tpa_end_cmp {
354 	__le32 rx_tpa_end_cmp_len_flags_type;
355 	u32 rx_tpa_end_cmp_opaque;
356 	__le32 rx_tpa_end_cmp_misc_v1;
357 	__le32 rx_tpa_end_cmp_tsdelta;
358 };
359 
360 #define TPA_END_AGG_ID(rx_tpa_end)					\
361 	((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) &		\
362 	 RX_TPA_END_CMP_AGG_ID) >> RX_TPA_END_CMP_AGG_ID_SHIFT)
363 
364 #define TPA_END_TPA_SEGS(rx_tpa_end)					\
365 	((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) &		\
366 	 RX_TPA_END_CMP_TPA_SEGS) >> RX_TPA_END_CMP_TPA_SEGS_SHIFT)
367 
368 #define RX_TPA_END_CMP_FLAGS_PLACEMENT_ANY_GRO				\
369 	cpu_to_le32(RX_TPA_END_CMP_FLAGS_PLACEMENT_GRO_JUMBO &		\
370 		    RX_TPA_END_CMP_FLAGS_PLACEMENT_GRO_HDS)
371 
372 #define TPA_END_GRO(rx_tpa_end)						\
373 	((rx_tpa_end)->rx_tpa_end_cmp_len_flags_type &			\
374 	 RX_TPA_END_CMP_FLAGS_PLACEMENT_ANY_GRO)
375 
376 #define TPA_END_GRO_TS(rx_tpa_end)					\
377 	(!!((rx_tpa_end)->rx_tpa_end_cmp_tsdelta &			\
378 	    cpu_to_le32(RX_TPA_END_GRO_TS)))
379 
380 #define RX_TPA_END_CMP_TPA_DUP_ACKS			GENMASK(3, 0)
381 #define RX_TPA_END_CMP_PAYLOAD_OFFSET			GENMASK(23, 16)
382 #define RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT		16
383 #define RX_TPA_END_CMP_AGG_BUFS				GENMASK(31, 24)
384 #define RX_TPA_END_CMP_AGG_BUFS_SHIFT			24
385 #define RX_TPA_END_CMP_TPA_SEG_LEN			GENMASK(15, 0)
386 #define RX_TPA_END_CMP_V2				BIT(0)
387 #define RX_TPA_END_CMP_ERRORS				GENMASK(2, 1)
388 #define RX_TPA_END_CMPL_ERRORS_SHIFT			1
389 #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_NO_BUFFER	(0x0 << 1)
390 #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_NOT_ON_CHIP	(0x2 << 1)
391 #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_BAD_FORMAT	(0x3 << 1)
392 #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_RSV_ERROR	(0x4 << 1)
393 #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_FLUSH	(0x5 << 1)
394 
395 struct rx_tpa_end_cmp_ext {
396 	__le32 rx_tpa_end_cmp_dup_acks;
397 	__le32 rx_tpa_end_cmp_seg_len;
398 	__le32 rx_tpa_end_cmp_errors_v2;
399 	u32 rx_tpa_end_cmp_start_opaque;
400 };
401 
402 #define TPA_END_ERRORS(rx_tpa_end_ext)					\
403 	((rx_tpa_end_ext)->rx_tpa_end_cmp_errors_v2 &			\
404 	 cpu_to_le32(RX_TPA_END_CMP_ERRORS))
405 
406 #define TPA_END_PAYLOAD_OFF(rx_tpa_end_ext)				\
407 	((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) &	\
408 	 RX_TPA_END_CMP_PAYLOAD_OFFSET) >>				\
409 	RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT)
410 
411 #define TPA_END_AGG_BUFS(rx_tpa_end_ext)				\
412 	((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) &	\
413 	 RX_TPA_END_CMP_AGG_BUFS) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT)
414 
415 #define EVENT_DATA1_RESET_NOTIFY_FATAL(data1)				\
416 	(((data1) &							\
417 	  ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK) ==\
418 	 ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL)
419 
420 #define EVENT_DATA1_RESET_NOTIFY_FW_ACTIVATION(data1)			\
421 	(((data1) &							\
422 	  ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK) ==\
423 	ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_ACTIVATION)
424 
425 #define EVENT_DATA2_RESET_NOTIFY_FW_STATUS_CODE(data2)			\
426 	((data2) &							\
427 	ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA2_FW_STATUS_CODE_MASK)
428 
429 #define EVENT_DATA1_RECOVERY_MASTER_FUNC(data1)				\
430 	(!!((data1) &							\
431 	   ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC))
432 
433 #define EVENT_DATA1_RECOVERY_ENABLED(data1)				\
434 	(!!((data1) &							\
435 	   ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_RECOVERY_ENABLED))
436 
437 #define BNGE_EVENT_ERROR_REPORT_TYPE(data1)				\
438 	(((data1) &							\
439 	  ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_MASK) >>\
440 	 ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_SFT)
441 
442 #define BNGE_EVENT_INVALID_SIGNAL_DATA(data2)				\
443 	(((data2) &							\
444 	  ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_MASK) >>\
445 	 ASYNC_EVENT_CMPL_ERROR_REPORT_INVALID_SIGNAL_EVENT_DATA2_PIN_ID_SFT)
446 #endif /* _BNGE_HW_DEF_H_ */
447