]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | /* SPDX-License-Identifier: BSD-3-Clause |
2 | * | |
3 | * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. | |
f67539c2 | 4 | * Copyright 2016,2019 NXP |
11fdf7f2 TL |
5 | * |
6 | */ | |
7 | ||
8 | /** | |
9 | * @file | |
10 | * | |
11 | * DPNI packet parse results - implementation internal | |
12 | */ | |
13 | ||
14 | #ifndef _DPAA2_HW_DPNI_ANNOT_H_ | |
15 | #define _DPAA2_HW_DPNI_ANNOT_H_ | |
16 | ||
17 | #ifdef __cplusplus | |
18 | extern "C" { | |
19 | #endif | |
20 | ||
21 | /* Annotation valid bits in FD FRC */ | |
22 | #define DPAA2_FD_FRC_FASV 0x8000 | |
23 | #define DPAA2_FD_FRC_FAEADV 0x4000 | |
24 | #define DPAA2_FD_FRC_FAPRV 0x2000 | |
25 | #define DPAA2_FD_FRC_FAIADV 0x1000 | |
26 | #define DPAA2_FD_FRC_FASWOV 0x0800 | |
27 | #define DPAA2_FD_FRC_FAICFDV 0x0400 | |
28 | ||
29 | /* Annotation bits in FD CTRL */ | |
30 | #define DPAA2_FD_CTRL_ASAL 0x00020000 /* ASAL = 128 */ | |
31 | #define DPAA2_FD_CTRL_PTA 0x00800000 | |
32 | #define DPAA2_FD_CTRL_PTV1 0x00400000 | |
33 | ||
34 | /* Frame annotation status */ | |
35 | struct dpaa2_fas { | |
36 | uint8_t reserved; | |
37 | uint8_t ppid; | |
38 | __le16 ifpid; | |
39 | __le32 status; | |
f67539c2 | 40 | } __rte_packed; |
11fdf7f2 TL |
41 | |
42 | /** | |
43 | * HW Packet Annotation Register structures | |
44 | */ | |
45 | struct dpaa2_annot_hdr { | |
46 | /**< word1: Frame Annotation Status (8 bytes)*/ | |
47 | uint64_t word1; | |
48 | ||
49 | /**< word2: Time Stamp (8 bytes)*/ | |
50 | uint64_t word2; | |
51 | ||
52 | /**< word3: Next Hdr + FAF Extension + FAF (2 + 2 + 4 bytes)*/ | |
53 | uint64_t word3; | |
54 | ||
55 | /**< word4: Frame Annotation Flags-FAF (8 bytes) */ | |
56 | uint64_t word4; | |
57 | ||
58 | /**< word5: | |
59 | * ShimOffset_1 + ShimOffset_2 + IPPIDOffset + EthOffset + | |
60 | * LLC+SNAPOffset + VLANTCIOffset_1 + VLANTCIOffset_n + | |
61 | * LastETypeOffset (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 bytes) | |
62 | */ | |
63 | uint64_t word5; | |
64 | ||
65 | /**< word6: | |
66 | * PPPoEOffset + MPLSOffset_1 + MPLSOffset_n + ARPorIPOffset_1 | |
67 | * + IPOffset_norMInEncapO + GREOffset + L4Offset + | |
68 | * GTPorESPorIPSecOffset(1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 bytes) | |
69 | */ | |
70 | uint64_t word6; | |
71 | ||
72 | /**< word7: | |
73 | * RoutingHdrOfset1 + RoutingHdrOfset2 + NxtHdrOffset | |
74 | * + IPv6FragOffset + GrossRunningSum | |
75 | * + RunningSum(1 + 1 + 1 + 1 + 2 + 2 bytes) | |
76 | */ | |
77 | uint64_t word7; | |
78 | ||
79 | /**< word8: | |
80 | * ParseErrorcode + Soft Parsing Context (1 + 7 bytes) | |
81 | */ | |
82 | uint64_t word8; | |
83 | }; | |
84 | ||
85 | /** | |
86 | * Internal Macros to get/set Packet annotation header | |
87 | */ | |
88 | ||
89 | /** General Macro to define a particular bit position*/ | |
90 | #define BIT_POS(x) ((uint64_t)1 << ((x))) | |
91 | /** Set a bit in the variable */ | |
92 | #define BIT_SET_AT_POS(var, pos) ((var) |= (pos)) | |
93 | /** Reset the bit in the variable */ | |
94 | #define BIT_RESET_AT_POS(var, pos) ((var) &= ~(pos)) | |
95 | /** Check the bit is set in the variable */ | |
96 | #define BIT_ISSET_AT_POS(var, pos) (((var) & (pos)) ? 1 : 0) | |
97 | /** | |
98 | * Macrso to define bit position in word3 | |
99 | */ | |
100 | #define NEXT_HDR(var) ((uint64_t)(var) & 0xFFFF000000000000) | |
101 | #define FAF_EXTN_IPV6_ROUTE_HDR_PRESENT(var) BIT_POS(16) | |
102 | #define FAF_EXTN_RESERVED(var) ((uint64_t)(var) & 0x00007FFF00000000) | |
103 | #define FAF_USER_DEFINED_RESERVED(var) ((uint64_t)(var) & 0x00000000FF000000) | |
104 | #define SHIM_SHELL_SOFT_PARSING_ERRROR BIT_POS(23) | |
105 | #define PARSING_ERROR BIT_POS(22) | |
106 | #define L2_ETH_MAC_PRESENT BIT_POS(21) | |
107 | #define L2_ETH_MAC_UNICAST BIT_POS(20) | |
108 | #define L2_ETH_MAC_MULTICAST BIT_POS(19) | |
109 | #define L2_ETH_MAC_BROADCAST BIT_POS(18) | |
110 | #define L2_ETH_FRAME_IS_BPDU BIT_POS(17) | |
111 | #define L2_ETH_FCOE_PRESENT BIT_POS(16) | |
112 | #define L2_ETH_FIP_PRESENT BIT_POS(15) | |
113 | #define L2_ETH_PARSING_ERROR BIT_POS(14) | |
114 | #define L2_LLC_SNAP_PRESENT BIT_POS(13) | |
115 | #define L2_UNKNOWN_LLC_OUI BIT_POS(12) | |
116 | #define L2_LLC_SNAP_ERROR BIT_POS(11) | |
117 | #define L2_VLAN_1_PRESENT BIT_POS(10) | |
118 | #define L2_VLAN_N_PRESENT BIT_POS(9) | |
119 | #define L2_VLAN_CFI_BIT_PRESENT BIT_POS(8) | |
120 | #define L2_VLAN_PARSING_ERROR BIT_POS(7) | |
121 | #define L2_PPPOE_PPP_PRESENT BIT_POS(6) | |
122 | #define L2_PPPOE_PPP_PARSING_ERROR BIT_POS(5) | |
123 | #define L2_MPLS_1_PRESENT BIT_POS(4) | |
124 | #define L2_MPLS_N_PRESENT BIT_POS(3) | |
125 | #define L2_MPLS_PARSING_ERROR BIT_POS(2) | |
126 | #define L2_ARP_PRESENT BIT_POS(1) | |
127 | #define L2_ARP_PARSING_ERROR BIT_POS(0) | |
128 | /** | |
129 | * Macrso to define bit position in word4 | |
130 | */ | |
131 | #define L2_UNKNOWN_PROTOCOL BIT_POS(63) | |
132 | #define L2_SOFT_PARSING_ERROR BIT_POS(62) | |
133 | #define L3_IPV4_1_PRESENT BIT_POS(61) | |
134 | #define L3_IPV4_1_UNICAST BIT_POS(60) | |
135 | #define L3_IPV4_1_MULTICAST BIT_POS(59) | |
136 | #define L3_IPV4_1_BROADCAST BIT_POS(58) | |
137 | #define L3_IPV4_N_PRESENT BIT_POS(57) | |
138 | #define L3_IPV4_N_UNICAST BIT_POS(56) | |
139 | #define L3_IPV4_N_MULTICAST BIT_POS(55) | |
140 | #define L3_IPV4_N_BROADCAST BIT_POS(54) | |
141 | #define L3_IPV6_1_PRESENT BIT_POS(53) | |
142 | #define L3_IPV6_1_UNICAST BIT_POS(52) | |
143 | #define L3_IPV6_1_MULTICAST BIT_POS(51) | |
144 | #define L3_IPV6_N_PRESENT BIT_POS(50) | |
145 | #define L3_IPV6_N_UNICAST BIT_POS(49) | |
146 | #define L3_IPV6_N_MULTICAST BIT_POS(48) | |
147 | #define L3_IP_1_OPT_PRESENT BIT_POS(47) | |
148 | #define L3_IP_1_UNKNOWN_PROTOCOL BIT_POS(46) | |
149 | #define L3_IP_1_MORE_FRAGMENT BIT_POS(45) | |
150 | #define L3_IP_1_FIRST_FRAGMENT BIT_POS(44) | |
151 | #define L3_IP_1_PARSING_ERROR BIT_POS(43) | |
152 | #define L3_IP_N_OPT_PRESENT BIT_POS(42) | |
153 | #define L3_IP_N_UNKNOWN_PROTOCOL BIT_POS(41) | |
154 | #define L3_IP_N_MORE_FRAGMENT BIT_POS(40) | |
155 | #define L3_IP_N_FIRST_FRAGMENT BIT_POS(39) | |
156 | #define L3_PROTO_ICMP_PRESENT BIT_POS(38) | |
157 | #define L3_PROTO_IGMP_PRESENT BIT_POS(37) | |
158 | #define L3_PROTO_ICMPV6_PRESENT BIT_POS(36) | |
159 | #define L3_PROTO_UDP_LIGHT_PRESENT BIT_POS(35) | |
160 | #define L3_IP_N_PARSING_ERROR BIT_POS(34) | |
161 | #define L3_MIN_ENCAP_PRESENT BIT_POS(33) | |
162 | #define L3_MIN_ENCAP_SBIT_PRESENT BIT_POS(32) | |
163 | #define L3_MIN_ENCAP_PARSING_ERROR BIT_POS(31) | |
164 | #define L3_PROTO_GRE_PRESENT BIT_POS(30) | |
165 | #define L3_PROTO_GRE_RBIT_PRESENT BIT_POS(29) | |
166 | #define L3_PROTO_GRE_PARSING_ERROR BIT_POS(28) | |
167 | #define L3_IP_UNKNOWN_PROTOCOL BIT_POS(27) | |
168 | #define L3_SOFT_PARSING_ERROR BIT_POS(26) | |
169 | #define L3_PROTO_UDP_PRESENT BIT_POS(25) | |
170 | #define L3_PROTO_UDP_PARSING_ERROR BIT_POS(24) | |
171 | #define L3_PROTO_TCP_PRESENT BIT_POS(23) | |
172 | #define L3_PROTO_TCP_OPT_PRESENT BIT_POS(22) | |
173 | #define L3_PROTO_TCP_CTRL_BIT_6_TO_11_PRESENT BIT_POS(21) | |
174 | #define L3_PROTO_TCP_CTRL_BIT_3_TO_5_PRESENT BIT_POS(20) | |
175 | #define L3_PROTO_TCP_PARSING_ERROR BIT_POS(19) | |
176 | #define L3_PROTO_IPSEC_PRESENT BIT_POS(18) | |
177 | #define L3_PROTO_IPSEC_ESP_PRESENT BIT_POS(17) | |
178 | #define L3_PROTO_IPSEC_AH_PRESENT BIT_POS(16) | |
179 | #define L3_PROTO_IPSEC_PARSING_ERROR BIT_POS(15) | |
180 | #define L3_PROTO_SCTP_PRESENT BIT_POS(14) | |
181 | #define L3_PROTO_SCTP_PARSING_ERROR BIT_POS(13) | |
182 | #define L3_PROTO_DCCP_PRESENT BIT_POS(12) | |
183 | #define L3_PROTO_DCCP_PARSING_ERROR BIT_POS(11) | |
184 | #define L4_UNKNOWN_PROTOCOL BIT_POS(10) | |
185 | #define L4_SOFT_PARSING_ERROR BIT_POS(9) | |
186 | #define L3_PROTO_GTP_PRESENT BIT_POS(8) | |
187 | #define L3_PROTO_GTP_PARSING_ERROR BIT_POS(7) | |
188 | #define L3_PROTO_ESP_PRESENT BIT_POS(6) | |
189 | #define L3_PROTO_ESP_PARSING_ERROR BIT_POS(5) | |
190 | #define L3_PROTO_ISCSI_PRESENT BIT_POS(4) | |
191 | #define L3_PROTO_CAPWAN__CTRL_PRESENT BIT_POS(3) | |
192 | #define L3_PROTO_CAPWAN__DATA_PRESENT BIT_POS(2) | |
193 | #define L5_SOFT_PARSING_ERROR BIT_POS(1) | |
194 | #define L3_IPV6_ROUTE_HDR_PRESENT BIT_POS(0) | |
195 | ||
196 | #define DPAA2_L3_IPv4 (L3_IPV4_1_PRESENT | L3_IPV4_1_UNICAST | \ | |
197 | L3_IP_1_UNKNOWN_PROTOCOL | L3_IP_UNKNOWN_PROTOCOL) | |
198 | ||
199 | #define DPAA2_L3_IPv6 (L3_IPV6_1_PRESENT | L3_IPV6_1_UNICAST | \ | |
200 | L3_IP_1_UNKNOWN_PROTOCOL | L3_IP_UNKNOWN_PROTOCOL) | |
201 | ||
202 | #define DPAA2_L3_IPv4_TCP (L3_IPV4_1_PRESENT | L3_IPV4_1_UNICAST | \ | |
203 | L3_PROTO_TCP_PRESENT | L3_PROTO_TCP_CTRL_BIT_6_TO_11_PRESENT | \ | |
204 | L4_UNKNOWN_PROTOCOL) | |
205 | ||
206 | #define DPAA2_L3_IPv4_UDP (L3_IPV4_1_PRESENT | L3_IPV4_1_UNICAST | \ | |
207 | L3_PROTO_UDP_PRESENT | L4_UNKNOWN_PROTOCOL) | |
208 | ||
209 | #define DPAA2_L3_IPv6_TCP (L3_IPV6_1_PRESENT | L3_IPV6_1_UNICAST | \ | |
210 | L3_PROTO_TCP_PRESENT | L3_PROTO_TCP_CTRL_BIT_6_TO_11_PRESENT | \ | |
211 | L4_UNKNOWN_PROTOCOL) | |
212 | ||
213 | #define DPAA2_L3_IPv6_UDP (L3_IPV6_1_PRESENT | L3_IPV6_1_UNICAST | \ | |
214 | L3_PROTO_UDP_PRESENT | L4_UNKNOWN_PROTOCOL) | |
215 | ||
9f95a23c TL |
216 | /** |
217 | * Macros to get values in word5 | |
218 | */ | |
219 | #define SHIM_OFFSET_1(var) ((uint64_t)(var) & 0xFF00000000000000) | |
220 | #define SHIM_OFFSET_2(var) ((uint64_t)(var) & 0x00FF000000000000) | |
221 | #define IP_PID_OFFSET(var) ((uint64_t)(var) & 0x0000FF0000000000) | |
222 | #define ETH_OFFSET(var) ((uint64_t)(var) & 0x000000FF00000000) | |
223 | #define LLC_SNAP_OFFSET(var) ((uint64_t)(var) & 0x00000000FF000000) | |
224 | #define VLAN_TCI_OFFSET_1(var) ((uint64_t)(var) & 0x0000000000FF0000) | |
225 | #define VLAN_TCI_OFFSET_N(var) ((uint64_t)(var) & 0x000000000000FF00) | |
226 | #define LAST_ETYPE_OFFSET(var) ((uint64_t)(var) & 0x00000000000000FF) | |
227 | ||
228 | /** | |
229 | * Macros to get values in word6 | |
230 | */ | |
231 | #define PPPOE_OFFSET(var) ((uint64_t)(var) & 0xFF00000000000000) | |
232 | #define MPLS_OFFSET_1(var) ((uint64_t)(var) & 0x00FF000000000000) | |
233 | #define MPLS_OFFSET_N(var) ((uint64_t)(var) & 0x0000FF0000000000) | |
234 | #define ARP_OR_IP_OFFSET_1(var) ((uint64_t)(var) & 0x000000FF00000000) | |
235 | #define IP_N_OR_MIN_ENCAP_OFFSET(var) ((uint64_t)(var) & 0x00000000FF000000) | |
236 | #define GRE_OFFSET(var) ((uint64_t)(var) & 0x0000000000FF0000) | |
237 | #define L4_OFFSET(var) ((uint64_t)(var) & 0x000000000000FF00) | |
238 | #define GTP_OR_ESP_OR_IPSEC_OFFSET(var) ((uint64_t)(var) & 0x00000000000000FF) | |
239 | ||
240 | /** | |
241 | * Macros to get values in word7 | |
242 | */ | |
243 | #define IPV6_ROUTING_HDR_OFFSET_1(var) ((uint64_t)(var) & 0xFF00000000000000) | |
244 | #define IPV6_ROUTING_HDR_OFFSET_2(var) ((uint64_t)(var) & 0x00FF000000000000) | |
245 | #define NEXT_HDR_OFFSET(var) ((uint64_t)(var) & 0x0000FF0000000000) | |
246 | #define IPV6_FRAG_OFFSET(var) ((uint64_t)(var) & 0x000000FF00000000) | |
247 | #define GROSS_RUNNING_SUM(var) ((uint64_t)(var) & 0x00000000FFFF0000) | |
248 | #define RUNNING_SUM(var) ((uint64_t)(var) & 0x000000000000FFFF) | |
249 | ||
250 | /** | |
251 | * Macros to get values in word8 | |
252 | */ | |
253 | #define PARSE_ERROR_CODE(var) ((uint64_t)(var) & 0xFF00000000000000) | |
254 | #define SOFT_PARSING_CONTEXT(var) ((uint64_t)(var) & 0x00FFFFFFFFFFFFFF) | |
255 | ||
f67539c2 TL |
256 | /*FAEAD offset in anmotation area*/ |
257 | #define DPAA2_FD_HW_ANNOT_FAEAD_OFFSET 0x58 | |
258 | ||
259 | struct dpaa2_faead { | |
260 | uint32_t fqid; | |
261 | uint32_t ctrl; | |
262 | }; | |
263 | ||
264 | /*FAEAD bits */ | |
265 | /*A2 OMB contains valid data*/ | |
266 | #define DPAA2_ANNOT_FAEAD_A2V 0x20000000 | |
267 | /*egress confirmation FQID in FAEAD contains valid data*/ | |
268 | #define DPAA2_ANNOT_FAEAD_A4V 0x08000000 | |
269 | /*UPD is valid*/ | |
270 | #define DPAA2_ANNOT_FAEAD_UPDV 0x00001000 | |
271 | /*EBDD is valid*/ | |
272 | #define DPAA2_ANNOT_FAEAD_EBDDV 0x00002000 | |
273 | /*EBDD (External Buffer Deallocation Disable) */ | |
274 | #define DPAA2_ANNOT_FAEAD_EBDD 0x00000020 | |
275 | /*UPD (Update prepended data)*/ | |
276 | #define DPAA2_ANNOT_FAEAD_UPD 0x00000010 | |
277 | ||
11fdf7f2 TL |
278 | /* Debug frame, otherwise supposed to be discarded */ |
279 | #define DPAA2_ETH_FAS_DISC 0x80000000 | |
280 | /* MACSEC frame */ | |
281 | #define DPAA2_ETH_FAS_MS 0x40000000 | |
f67539c2 | 282 | #define DPAA2_ETH_FAS_PTP BIT_POS(59) |
11fdf7f2 TL |
283 | /* Ethernet multicast frame */ |
284 | #define DPAA2_ETH_FAS_MC 0x04000000 | |
285 | /* Ethernet broadcast frame */ | |
286 | #define DPAA2_ETH_FAS_BC 0x02000000 | |
287 | #define DPAA2_ETH_FAS_KSE 0x00040000 | |
288 | #define DPAA2_ETH_FAS_EOFHE 0x00020000 | |
289 | #define DPAA2_ETH_FAS_MNLE 0x00010000 | |
290 | #define DPAA2_ETH_FAS_TIDE 0x00008000 | |
291 | #define DPAA2_ETH_FAS_PIEE 0x00004000 | |
292 | /* Frame length error */ | |
293 | #define DPAA2_ETH_FAS_FLE 0x00002000 | |
294 | /* Frame physical error; our favourite pastime */ | |
295 | #define DPAA2_ETH_FAS_FPE 0x00001000 | |
296 | #define DPAA2_ETH_FAS_PTE 0x00000080 | |
297 | #define DPAA2_ETH_FAS_ISP 0x00000040 | |
298 | #define DPAA2_ETH_FAS_PHE 0x00000020 | |
299 | #define DPAA2_ETH_FAS_BLE 0x00000010 | |
300 | /* L3 csum validation performed */ | |
301 | #define DPAA2_ETH_FAS_L3CV 0x00000008 | |
302 | /* L3 csum error */ | |
303 | #define DPAA2_ETH_FAS_L3CE 0x00000004 | |
304 | /* L4 csum validation performed */ | |
305 | #define DPAA2_ETH_FAS_L4CV 0x00000002 | |
306 | /* L4 csum error */ | |
307 | #define DPAA2_ETH_FAS_L4CE 0x00000001 | |
308 | ||
309 | #ifdef __cplusplus | |
310 | } | |
311 | #endif | |
312 | ||
313 | #endif |