1 /*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. 5 * Copyright 2016 NXP. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Freescale Semiconductor, Inc nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** 35 * @file 36 * 37 * DPNI packet parse results - implementation internal 38 */ 39 40 #ifndef _DPAA2_HW_DPNI_ANNOT_H_ 41 #define _DPAA2_HW_DPNI_ANNOT_H_ 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 /* Annotation valid bits in FD FRC */ 48 #define DPAA2_FD_FRC_FASV 0x8000 49 #define DPAA2_FD_FRC_FAEADV 0x4000 50 #define DPAA2_FD_FRC_FAPRV 0x2000 51 #define DPAA2_FD_FRC_FAIADV 0x1000 52 #define DPAA2_FD_FRC_FASWOV 0x0800 53 #define DPAA2_FD_FRC_FAICFDV 0x0400 54 55 /* Annotation bits in FD CTRL */ 56 #define DPAA2_FD_CTRL_ASAL 0x00020000 /* ASAL = 128 */ 57 #define DPAA2_FD_CTRL_PTA 0x00800000 58 #define DPAA2_FD_CTRL_PTV1 0x00400000 59 60 /* Frame annotation status */ 61 struct dpaa2_fas { 62 uint8_t reserved; 63 uint8_t ppid; 64 __le16 ifpid; 65 __le32 status; 66 } __packed; 67 68 /** 69 * HW Packet Annotation Register structures 70 */ 71 struct dpaa2_annot_hdr { 72 /**< word1: Frame Annotation Status (8 bytes)*/ 73 uint64_t word1; 74 75 /**< word2: Time Stamp (8 bytes)*/ 76 uint64_t word2; 77 78 /**< word3: Next Hdr + FAF Extension + FAF (2 + 2 + 4 bytes)*/ 79 uint64_t word3; 80 81 /**< word4: Frame Annotation Flags-FAF (8 bytes) */ 82 uint64_t word4; 83 84 /**< word5: 85 * ShimOffset_1 + ShimOffset_2 + IPPIDOffset + EthOffset + 86 * LLC+SNAPOffset + VLANTCIOffset_1 + VLANTCIOffset_n + 87 * LastETypeOffset (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 bytes) 88 */ 89 uint64_t word5; 90 91 /**< word6: 92 * PPPoEOffset + MPLSOffset_1 + MPLSOffset_n + ARPorIPOffset_1 93 * + IPOffset_norMInEncapO + GREOffset + L4Offset + 94 * GTPorESPorIPSecOffset(1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 bytes) 95 */ 96 uint64_t word6; 97 98 /**< word7: 99 * RoutingHdrOfset1 + RoutingHdrOfset2 + NxtHdrOffset 100 * + IPv6FragOffset + GrossRunningSum 101 * + RunningSum(1 + 1 + 1 + 1 + 2 + 2 bytes) 102 */ 103 uint64_t word7; 104 105 /**< word8: 106 * ParseErrorcode + Soft Parsing Context (1 + 7 bytes) 107 */ 108 uint64_t word8; 109 }; 110 111 /** 112 * Internal Macros to get/set Packet annotation header 113 */ 114 115 /** General Macro to define a particular bit position*/ 116 #define BIT_POS(x) ((uint64_t)1 << ((x))) 117 /** Set a bit in the variable */ 118 #define BIT_SET_AT_POS(var, pos) ((var) |= (pos)) 119 /** Reset the bit in the variable */ 120 #define BIT_RESET_AT_POS(var, pos) ((var) &= ~(pos)) 121 /** Check the bit is set in the variable */ 122 #define BIT_ISSET_AT_POS(var, pos) (((var) & (pos)) ? 1 : 0) 123 /** 124 * Macrso to define bit position in word3 125 */ 126 #define NEXT_HDR(var) ((uint64_t)(var) & 0xFFFF000000000000) 127 #define FAF_EXTN_IPV6_ROUTE_HDR_PRESENT(var) BIT_POS(16) 128 #define FAF_EXTN_RESERVED(var) ((uint64_t)(var) & 0x00007FFF00000000) 129 #define FAF_USER_DEFINED_RESERVED(var) ((uint64_t)(var) & 0x00000000FF000000) 130 #define SHIM_SHELL_SOFT_PARSING_ERRROR BIT_POS(23) 131 #define PARSING_ERROR BIT_POS(22) 132 #define L2_ETH_MAC_PRESENT BIT_POS(21) 133 #define L2_ETH_MAC_UNICAST BIT_POS(20) 134 #define L2_ETH_MAC_MULTICAST BIT_POS(19) 135 #define L2_ETH_MAC_BROADCAST BIT_POS(18) 136 #define L2_ETH_FRAME_IS_BPDU BIT_POS(17) 137 #define L2_ETH_FCOE_PRESENT BIT_POS(16) 138 #define L2_ETH_FIP_PRESENT BIT_POS(15) 139 #define L2_ETH_PARSING_ERROR BIT_POS(14) 140 #define L2_LLC_SNAP_PRESENT BIT_POS(13) 141 #define L2_UNKNOWN_LLC_OUI BIT_POS(12) 142 #define L2_LLC_SNAP_ERROR BIT_POS(11) 143 #define L2_VLAN_1_PRESENT BIT_POS(10) 144 #define L2_VLAN_N_PRESENT BIT_POS(9) 145 #define L2_VLAN_CFI_BIT_PRESENT BIT_POS(8) 146 #define L2_VLAN_PARSING_ERROR BIT_POS(7) 147 #define L2_PPPOE_PPP_PRESENT BIT_POS(6) 148 #define L2_PPPOE_PPP_PARSING_ERROR BIT_POS(5) 149 #define L2_MPLS_1_PRESENT BIT_POS(4) 150 #define L2_MPLS_N_PRESENT BIT_POS(3) 151 #define L2_MPLS_PARSING_ERROR BIT_POS(2) 152 #define L2_ARP_PRESENT BIT_POS(1) 153 #define L2_ARP_PARSING_ERROR BIT_POS(0) 154 /** 155 * Macrso to define bit position in word4 156 */ 157 #define L2_UNKNOWN_PROTOCOL BIT_POS(63) 158 #define L2_SOFT_PARSING_ERROR BIT_POS(62) 159 #define L3_IPV4_1_PRESENT BIT_POS(61) 160 #define L3_IPV4_1_UNICAST BIT_POS(60) 161 #define L3_IPV4_1_MULTICAST BIT_POS(59) 162 #define L3_IPV4_1_BROADCAST BIT_POS(58) 163 #define L3_IPV4_N_PRESENT BIT_POS(57) 164 #define L3_IPV4_N_UNICAST BIT_POS(56) 165 #define L3_IPV4_N_MULTICAST BIT_POS(55) 166 #define L3_IPV4_N_BROADCAST BIT_POS(54) 167 #define L3_IPV6_1_PRESENT BIT_POS(53) 168 #define L3_IPV6_1_UNICAST BIT_POS(52) 169 #define L3_IPV6_1_MULTICAST BIT_POS(51) 170 #define L3_IPV6_N_PRESENT BIT_POS(50) 171 #define L3_IPV6_N_UNICAST BIT_POS(49) 172 #define L3_IPV6_N_MULTICAST BIT_POS(48) 173 #define L3_IP_1_OPT_PRESENT BIT_POS(47) 174 #define L3_IP_1_UNKNOWN_PROTOCOL BIT_POS(46) 175 #define L3_IP_1_MORE_FRAGMENT BIT_POS(45) 176 #define L3_IP_1_FIRST_FRAGMENT BIT_POS(44) 177 #define L3_IP_1_PARSING_ERROR BIT_POS(43) 178 #define L3_IP_N_OPT_PRESENT BIT_POS(42) 179 #define L3_IP_N_UNKNOWN_PROTOCOL BIT_POS(41) 180 #define L3_IP_N_MORE_FRAGMENT BIT_POS(40) 181 #define L3_IP_N_FIRST_FRAGMENT BIT_POS(39) 182 #define L3_PROTO_ICMP_PRESENT BIT_POS(38) 183 #define L3_PROTO_IGMP_PRESENT BIT_POS(37) 184 #define L3_PROTO_ICMPV6_PRESENT BIT_POS(36) 185 #define L3_PROTO_UDP_LIGHT_PRESENT BIT_POS(35) 186 #define L3_IP_N_PARSING_ERROR BIT_POS(34) 187 #define L3_MIN_ENCAP_PRESENT BIT_POS(33) 188 #define L3_MIN_ENCAP_SBIT_PRESENT BIT_POS(32) 189 #define L3_MIN_ENCAP_PARSING_ERROR BIT_POS(31) 190 #define L3_PROTO_GRE_PRESENT BIT_POS(30) 191 #define L3_PROTO_GRE_RBIT_PRESENT BIT_POS(29) 192 #define L3_PROTO_GRE_PARSING_ERROR BIT_POS(28) 193 #define L3_IP_UNKNOWN_PROTOCOL BIT_POS(27) 194 #define L3_SOFT_PARSING_ERROR BIT_POS(26) 195 #define L3_PROTO_UDP_PRESENT BIT_POS(25) 196 #define L3_PROTO_UDP_PARSING_ERROR BIT_POS(24) 197 #define L3_PROTO_TCP_PRESENT BIT_POS(23) 198 #define L3_PROTO_TCP_OPT_PRESENT BIT_POS(22) 199 #define L3_PROTO_TCP_CTRL_BIT_6_TO_11_PRESENT BIT_POS(21) 200 #define L3_PROTO_TCP_CTRL_BIT_3_TO_5_PRESENT BIT_POS(20) 201 #define L3_PROTO_TCP_PARSING_ERROR BIT_POS(19) 202 #define L3_PROTO_IPSEC_PRESENT BIT_POS(18) 203 #define L3_PROTO_IPSEC_ESP_PRESENT BIT_POS(17) 204 #define L3_PROTO_IPSEC_AH_PRESENT BIT_POS(16) 205 #define L3_PROTO_IPSEC_PARSING_ERROR BIT_POS(15) 206 #define L3_PROTO_SCTP_PRESENT BIT_POS(14) 207 #define L3_PROTO_SCTP_PARSING_ERROR BIT_POS(13) 208 #define L3_PROTO_DCCP_PRESENT BIT_POS(12) 209 #define L3_PROTO_DCCP_PARSING_ERROR BIT_POS(11) 210 #define L4_UNKNOWN_PROTOCOL BIT_POS(10) 211 #define L4_SOFT_PARSING_ERROR BIT_POS(9) 212 #define L3_PROTO_GTP_PRESENT BIT_POS(8) 213 #define L3_PROTO_GTP_PARSING_ERROR BIT_POS(7) 214 #define L3_PROTO_ESP_PRESENT BIT_POS(6) 215 #define L3_PROTO_ESP_PARSING_ERROR BIT_POS(5) 216 #define L3_PROTO_ISCSI_PRESENT BIT_POS(4) 217 #define L3_PROTO_CAPWAN__CTRL_PRESENT BIT_POS(3) 218 #define L3_PROTO_CAPWAN__DATA_PRESENT BIT_POS(2) 219 #define L5_SOFT_PARSING_ERROR BIT_POS(1) 220 #define L3_IPV6_ROUTE_HDR_PRESENT BIT_POS(0) 221 222 /* Debug frame, otherwise supposed to be discarded */ 223 #define DPAA2_ETH_FAS_DISC 0x80000000 224 /* MACSEC frame */ 225 #define DPAA2_ETH_FAS_MS 0x40000000 226 #define DPAA2_ETH_FAS_PTP 0x08000000 227 /* Ethernet multicast frame */ 228 #define DPAA2_ETH_FAS_MC 0x04000000 229 /* Ethernet broadcast frame */ 230 #define DPAA2_ETH_FAS_BC 0x02000000 231 #define DPAA2_ETH_FAS_KSE 0x00040000 232 #define DPAA2_ETH_FAS_EOFHE 0x00020000 233 #define DPAA2_ETH_FAS_MNLE 0x00010000 234 #define DPAA2_ETH_FAS_TIDE 0x00008000 235 #define DPAA2_ETH_FAS_PIEE 0x00004000 236 /* Frame length error */ 237 #define DPAA2_ETH_FAS_FLE 0x00002000 238 /* Frame physical error; our favourite pastime */ 239 #define DPAA2_ETH_FAS_FPE 0x00001000 240 #define DPAA2_ETH_FAS_PTE 0x00000080 241 #define DPAA2_ETH_FAS_ISP 0x00000040 242 #define DPAA2_ETH_FAS_PHE 0x00000020 243 #define DPAA2_ETH_FAS_BLE 0x00000010 244 /* L3 csum validation performed */ 245 #define DPAA2_ETH_FAS_L3CV 0x00000008 246 /* L3 csum error */ 247 #define DPAA2_ETH_FAS_L3CE 0x00000004 248 /* L4 csum validation performed */ 249 #define DPAA2_ETH_FAS_L4CV 0x00000002 250 /* L4 csum error */ 251 #define DPAA2_ETH_FAS_L4CE 0x00000001 252 253 #ifdef __cplusplus 254 } 255 #endif 256 257 #endif 258