1 /* Copyright (c) 2008-2011 Freescale Semiconductor, Inc. 2 * All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution. 11 * * Neither the name of Freescale Semiconductor nor the 12 * names of its contributors may be used to endorse or promote products 13 * derived from this software without specific prior written permission. 14 * 15 * 16 * ALTERNATIVELY, this software may be distributed under the terms of the 17 * GNU General Public License ("GPL") as published by the Free Software 18 * Foundation, either version 2 of that License or (at your option) any 19 * later version. 20 * 21 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 /****************************************************************************** 34 @File fm_manip.h 35 36 @Description FM PCD manip... 37 *//***************************************************************************/ 38 #ifndef __FM_MANIP_H 39 #define __FM_MANIP_H 40 41 #include "std_ext.h" 42 #include "error_ext.h" 43 #include "list_ext.h" 44 45 #include "fm_cc.h" 46 47 48 /***********************************************************************/ 49 /* Header manipulations defines */ 50 /***********************************************************************/ 51 52 #define HMAN_OC_RMV_N_OR_INSRT_INT_FRM_HDR 0x2e 53 #define HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER 0x31 54 #define HMAN_OC_CAPWAP_FRAGMENTATION 0x33 55 #define HMAN_OC_IPSEC 0x34 56 #define HMAN_OC_IP_FRAGMENTATION 0x74 57 #define HMAN_OC_IP_REASSEMBLY 0xB4 58 #define HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX 0x2f 59 #define HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST 0x30 60 #define HMAN_OC_CAPWAP_REASSEMBLY 0x11 /* dummy */ 61 #define HMAN_OC_CAPWAP_INDEXED_STATS 0x32 /* dummy */ 62 63 #define HMAN_RMV_HDR 0x80000000 64 #define HMAN_INSRT_INT_FRM_HDR 0x40000000 65 66 #define UDP_UDPHECKSUM_FIELD_OFFSET_FROM_UDP 6 67 #define UDP_UDPCHECKSUM_FIELD_SIZE 2 68 69 #define IP_DSCECN_FIELD_OFFSET_FROM_IP 1 70 #define IP_TOTALLENGTH_FIELD_OFFSET_FROM_IP 2 71 #define IP_HDRCHECKSUM_FIELD_OFFSET_FROM_IP 10 72 #define VLAN_TAG_FIELD_OFFSET_FROM_ETH 12 73 #define IP_ID_FIELD_OFFSET_FROM_IP 4 74 75 #define FM_PCD_MANIP_CAPWAP_REASM_TABLE_SIZE 80 76 #define FM_PCD_MANIP_CAPWAP_REASM_TABLE_ALIGN 8 77 #define FM_PCD_MANIP_CAPWAP_REASM_RFD_SIZE 32 78 #define FM_PCD_MANIP_CAPWAP_REASM_AUTO_LEARNING_HASH_ENTRY_SIZE 4 79 #define FM_PCD_MANIP_CAPWAP_REASM_TIME_OUT_ENTRY_SIZE 8 80 81 82 #define FM_PCD_MANIP_CAPWAP_REASM_TIME_OUT_BETWEEN_FRAMES 0x40000000 83 #define FM_PCD_MANIP_CAPWAP_REASM_HALT_ON_DUPLICATE_FRAG 0x10000000 84 #define FM_PCD_MANIP_CAPWAP_REASM_AUTOMATIC_LEARNIN_HASH_8_WAYS 0x08000000 85 #define FM_PCD_MANIP_CAPWAP_REASM_PR_COPY 0x00800000 86 87 #define FM_PCD_MANIP_CAPWAP_FRAG_COMPR_OPTION_FIELD_EN 0x80000000 88 89 #define FM_PCD_MANIP_INDEXED_STATS_ENTRY_SIZE 4 90 #define FM_PCD_MANIP_INDEXED_STATS_CNIA 0x20000000 91 #define FM_PCD_MANIP_INDEXED_STATS_DPD 0x10000000 92 93 #define FM_PCD_MANIP_IPSEC_CALC_UDP_LENGTH 0x01000000 94 #define FM_PCD_MANIP_IPSEC_CNIA 0x20000000 95 96 #define e_FM_MANIP_CAPWAP_INDX 0 97 98 #ifdef UNDER_CONSTRUCTION_FRAG_REASSEMBLY 99 #define FM_PCD_MANIP_IP_REASM_TABLE_SIZE 0x40 100 #define FM_PCD_MANIP_IP_REASM_TABLE_ALIGN 8 101 102 #define FM_PCD_MANIP_IP_REASM_COMMON_PARAM_TABLE_SIZE 64 103 #define FM_PCD_MANIP_IP_REASM_COMMON_PARAM_TABLE_ALIGN 8 104 #define FM_PCD_MANIP_IP_REASM_TIME_OUT_BETWEEN_FRAMES 0x80000000 105 #define e_FM_MANIP_IP_INDX 1 106 #define FM_PCD_MANIP_IP_REASM_LIODN_MASK 0x000003F0 107 #define FM_PCD_MANIP_IP_REASM_LIODN_SHIFT 56 108 #define FM_PCD_MANIP_IP_REASM_ELIODN_MASK 0x0000000F 109 #define FM_PCD_MANIP_IP_REASM_ELIODN_SHIFT 44 110 111 #endif /* UNDER_CONSTRUCTION_FRAG_REASSEMBLY */ 112 113 114 /***********************************************************************/ 115 /* Memory map */ 116 /***********************************************************************/ 117 #if defined(__MWERKS__) && !defined(__GNUC__) 118 #pragma pack(push,1) 119 #endif /* defined(__MWERKS__) && ... */ 120 121 typedef _Packed struct { 122 volatile uint32_t mode; 123 volatile uint32_t autoLearnHashTblPtr; 124 volatile uint32_t intStatsTblPtr; 125 volatile uint32_t reasmFrmDescPoolTblPtr; 126 volatile uint32_t reasmFrmDescIndexPoolTblPtr; 127 volatile uint32_t timeOutTblPtr; 128 volatile uint32_t bufferPoolIdAndRisc1SetIndexes; 129 volatile uint32_t risc23SetIndexes; 130 volatile uint32_t risc4SetIndexesAndExtendedStatsTblPtr; 131 volatile uint32_t extendedStatsTblPtr; 132 volatile uint32_t expirationDelay; 133 volatile uint32_t totalProcessedFragCounter; 134 volatile uint32_t totalUnsuccessfulReasmFramesCounter; 135 volatile uint32_t totalDuplicatedFragCounter; 136 volatile uint32_t totalMalformdFragCounter; 137 volatile uint32_t totalTimeOutCounter; 138 volatile uint32_t totalSetBusyCounter; 139 volatile uint32_t totalRfdPoolBusyCounter; 140 volatile uint32_t totalDiscardedFragsCounter; 141 volatile uint32_t totalMoreThan16FramesCounter; 142 volatile uint32_t internalBufferBusy; 143 volatile uint32_t externalBufferBusy; 144 volatile uint8_t res[16]; 145 } _PackedType t_CapwapReasmPram; 146 147 #ifdef UNDER_CONSTRUCTION_FRAG_REASSEMBLY 148 typedef _Packed struct t_IpReasmPram{ 149 volatile uint16_t waysNumAndSetSize; 150 volatile uint16_t autoLearnHashKeyMask; 151 volatile uint32_t ipReassCommonPrmTblPtr; 152 volatile uint32_t liodnAlAndAutoLearnHashTblPtrHi; 153 volatile uint32_t autoLearnHashTblPtrLow; 154 volatile uint32_t liodnSlAndAutoLearnSetLockTblPtrHi; 155 volatile uint32_t autoLearnSetLockTblPtrLow; 156 volatile uint16_t minFragSize; 157 volatile uint16_t reserved1; 158 volatile uint32_t totalSuccessfullyReasmFramesCounter; 159 volatile uint32_t totalValidFragmentCounter; 160 volatile uint32_t totalProcessedFragCounter; 161 volatile uint32_t totalMalformdFragCounter; 162 volatile uint32_t totalSetBusyCounter; 163 volatile uint32_t totalDiscardedFragsCounter; 164 volatile uint32_t totalMoreThan16FramesCounter; 165 volatile uint32_t reserved2[2]; 166 } _PackedType t_IpReasmPram; 167 168 typedef _Packed struct t_IpReasmCommonTbl{ 169 volatile uint32_t timeoutModeAndFqid; 170 volatile uint32_t reassFrmDescIndexPoolTblPtr; 171 volatile uint32_t liodnAndReassFrmDescPoolPtrHi; 172 volatile uint32_t reassFrmDescPoolPtrLow; 173 volatile uint32_t timeOutTblPtr; 174 volatile uint32_t expirationDelay; 175 volatile uint32_t reseervd1; 176 volatile uint32_t reseervd2; 177 volatile uint32_t totalTimeOutCounter; 178 volatile uint32_t totalRfdPoolBusyCounter; 179 volatile uint32_t totalInternalBufferBusy; 180 volatile uint32_t totalExternalBufferBusy; 181 volatile uint32_t reserved3[4]; 182 } _PackedType t_IpReasmCommonTbl; 183 184 #endif /*UNDER_CONSTRUCTION_FRAG_REASSEMBLY*/ 185 186 #define MEM_MAP_END 187 #if defined(__MWERKS__) && !defined(__GNUC__) 188 #pragma pack(pop) 189 #endif /* defined(__MWERKS__) && ... */ 190 191 192 /***********************************************************************/ 193 /* Driver's internal structures */ 194 /***********************************************************************/ 195 196 typedef struct 197 { 198 t_Handle p_AutoLearnHashTbl; 199 t_Handle p_ReassmFrmDescrPoolTbl; 200 t_Handle p_ReassmFrmDescrIndxPoolTbl; 201 t_Handle p_TimeOutTbl; 202 uint8_t maxNumFramesInProcess; 203 uint8_t numOfTasks; 204 uint8_t poolId; 205 uint8_t prOffset; 206 uint16_t dataOffset; 207 uint8_t poolIndx; 208 uint8_t hwPortId; 209 uint32_t fqidForTimeOutFrames; 210 uint32_t timeoutRoutineRequestTime; 211 uint32_t bitFor1Micro; 212 } t_FragParams; 213 214 #ifdef UNDER_CONSTRUCTION_FRAG_REASSEMBLY 215 typedef struct 216 { 217 t_Handle h_Frag; 218 t_Handle h_FragId; 219 uint8_t poolId; 220 uint16_t dataOffset; 221 uint8_t poolIndx; 222 }t_IpFragParams; 223 224 typedef struct t_IpReassmParams 225 { 226 t_Handle h_Ipv4Ad; 227 t_Handle h_Ipv6Ad; 228 e_NetHeaderType hdr; /**< Header selection */ 229 uint32_t fqidForTimeOutFrames; 230 uint16_t dataOffset; 231 t_Handle h_IpReassCommonParamsTbl; 232 t_Handle h_Ipv4ReassParamsTblPtr; 233 t_Handle h_Ipv6ReassParamsTblPtr; 234 t_Handle h_Ipv4AutoLearnHashTbl; 235 t_Handle h_Ipv6AutoLearnHashTbl; 236 t_Handle h_Ipv4AutoLearnSetLockTblPtr; 237 t_Handle h_Ipv6AutoLearnSetLockTblPtr; 238 t_Handle h_ReassmFrmDescrIndxPoolTbl; 239 t_Handle h_ReassmFrmDescrPoolTbl; 240 t_Handle h_TimeOutTbl; 241 uint32_t maxNumFramesInProcess; 242 uint32_t liodnOffset; 243 uint32_t minFragSize; 244 uint8_t dataMemId; /**< Memory partition ID for data buffers */ 245 uint32_t bpid; 246 e_FmPcdManipReassemTimeOutMode timeOutMode; 247 e_FmPcdManipReassemWaysNumber numOfFramesPerHashEntry; 248 uint32_t timeoutThresholdForReassmProcess; 249 250 }t_IpReassmParams; 251 252 typedef struct t_IpCommonReassmParams 253 { 254 uint8_t numOfTasks; 255 uint32_t bitFor1Micro; 256 t_Handle h_ReassmFrmDescrPoolTbl; 257 t_Handle h_ReassmFrmDescrIndxPoolTbl; 258 t_Handle h_TimeOutTbl; 259 }t_IpCommonReassmParams; 260 261 #endif /*UNDER_CONSTRUCTION_FRAG_REASSEMBLY*/ 262 263 typedef struct{ 264 bool muramAllocate; 265 t_Handle h_Ad; 266 uint32_t type; 267 bool rmv; 268 bool insrt; 269 uint8_t *p_Template; 270 t_Handle h_Frag; 271 bool frag; 272 bool reassm; 273 uint16_t sizeForFragmentation; 274 uint8_t owner; 275 uint32_t updateParams; 276 uint32_t shadowUpdateParams; 277 t_FragParams fragParams; 278 #ifdef UNDER_CONSTRUCTION_FRAG_REASSEMBLY 279 t_IpReassmParams ipReassmParams; 280 t_IpFragParams ipFragParams; 281 #endif /* UNDER_CONSTRUCTION_FRAG_REASSEMBLY */ 282 uint8_t icOffset; 283 uint16_t ownerTmp; 284 bool cnia; 285 t_Handle p_StatsTbl; 286 t_Handle h_FmPcd; 287 } t_FmPcdManip; 288 289 typedef struct t_FmPcdCcSavedManipParams 290 { 291 union 292 { 293 struct 294 { 295 uint16_t dataOffset; 296 uint8_t poolId; 297 }capwapParams; 298 #ifdef UNDER_CONSTRUCTION_FRAG_REASSEMBLY 299 struct 300 { 301 uint16_t dataOffset; 302 uint8_t poolId; 303 }ipParams; 304 #endif /*UNDER_CONSTRUCTION_FRAG_REASSEMBLY*/ 305 }; 306 307 } t_FmPcdCcSavedManipParams; 308 309 310 #endif /* __FM_MANIP_H */ 311