1/* 2 * Copyright 2008-2012 Freescale Semiconductor Inc. 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/****************************************************************************** 35 @File fm_cc.h 36 37 @Description FM PCD CC ... 38*//***************************************************************************/ 39#ifndef __FM_CC_H 40#define __FM_CC_H 41 42#include "std_ext.h" 43#include "error_ext.h" 44#include "list_ext.h" 45 46#include "fm_pcd.h" 47 48 49/***********************************************************************/ 50/* Coarse classification defines */ 51/***********************************************************************/ 52 53#define CC_MAX_NUM_OF_KEYS (FM_PCD_MAX_NUM_OF_KEYS + 1) 54 55#define CC_PC_FF_MACDST 0x00 56#define CC_PC_FF_MACSRC 0x01 57#define CC_PC_FF_ETYPE 0x02 58 59#define CC_PC_FF_TCI1 0x03 60#define CC_PC_FF_TCI2 0x04 61 62#define CC_PC_FF_MPLS1 0x06 63#define CC_PC_FF_MPLS_LAST 0x07 64 65#define CC_PC_FF_IPV4DST1 0x08 66#define CC_PC_FF_IPV4DST2 0x16 67#define CC_PC_FF_IPV4IPTOS_TC1 0x09 68#define CC_PC_FF_IPV4IPTOS_TC2 0x17 69#define CC_PC_FF_IPV4PTYPE1 0x0A 70#define CC_PC_FF_IPV4PTYPE2 0x18 71#define CC_PC_FF_IPV4SRC1 0x0b 72#define CC_PC_FF_IPV4SRC2 0x19 73#define CC_PC_FF_IPV4SRC1_IPV4DST1 0x0c 74#define CC_PC_FF_IPV4SRC2_IPV4DST2 0x1a 75#define CC_PC_FF_IPV4TTL 0x29 76 77 78#define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1 0x0d /*TODO - CLASS - what is it? TOS*/ 79#define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2 0x1b 80#define CC_PC_FF_IPV6PTYPE1 0x0e 81#define CC_PC_FF_IPV6PTYPE2 0x1c 82#define CC_PC_FF_IPV6DST1 0x0f 83#define CC_PC_FF_IPV6DST2 0x1d 84#define CC_PC_FF_IPV6SRC1 0x10 85#define CC_PC_FF_IPV6SRC2 0x1e 86#define CC_PC_FF_IPV6HOP_LIMIT 0x2a 87#define CC_PC_FF_IPPID 0x24 88#define CC_PC_FF_IPDSCP 0x76 89 90#define CC_PC_FF_GREPTYPE 0x11 91 92#define CC_PC_FF_MINENCAP_PTYPE 0x12 93#define CC_PC_FF_MINENCAP_IPDST 0x13 94#define CC_PC_FF_MINENCAP_IPSRC 0x14 95#define CC_PC_FF_MINENCAP_IPSRC_IPDST 0x15 96 97#define CC_PC_FF_L4PSRC 0x1f 98#define CC_PC_FF_L4PDST 0x20 99#define CC_PC_FF_L4PSRC_L4PDST 0x21 100 101#define CC_PC_FF_PPPPID 0x05 102 103#define CC_PC_PR_SHIM1 0x22 104#define CC_PC_PR_SHIM2 0x23 105 106#define CC_PC_GENERIC_WITHOUT_MASK 0x27 107#define CC_PC_GENERIC_WITH_MASK 0x28 108#define CC_PC_GENERIC_IC_GMASK 0x2B 109#define CC_PC_GENERIC_IC_HASH_INDEXED 0x2C 110#define CC_PC_GENERIC_IC_AGING_MASK 0x2D 111 112#define CC_PR_OFFSET 0x25 113#define CC_PR_WITHOUT_OFFSET 0x26 114 115#define CC_PC_PR_ETH_OFFSET 19 116#define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET 16 117#define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET 17 118#define CC_PC_PR_USER_LLC_SNAP_OFFSET 20 119#define CC_PC_PR_VLAN1_OFFSET 21 120#define CC_PC_PR_VLAN2_OFFSET 22 121#define CC_PC_PR_PPPOE_OFFSET 24 122#define CC_PC_PR_MPLS1_OFFSET 25 123#define CC_PC_PR_MPLS_LAST_OFFSET 26 124#define CC_PC_PR_IP1_OFFSET 27 125#define CC_PC_PR_IP_LAST_OFFSET 28 126#define CC_PC_PR_MINENC_OFFSET 28 127#define CC_PC_PR_L4_OFFSET 30 128#define CC_PC_PR_GRE_OFFSET 29 129#define CC_PC_PR_ETYPE_LAST_OFFSET 23 130#define CC_PC_PR_NEXT_HEADER_OFFSET 31 131 132#define CC_PC_ILLEGAL 0xff 133#define CC_SIZE_ILLEGAL 0 134 135#define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN 16 136#define FM_PCD_CC_AD_TABLE_ALIGN 16 137#define FM_PCD_CC_AD_ENTRY_SIZE 16 138#define FM_PCD_CC_NUM_OF_KEYS 255 139#define FM_PCD_CC_TREE_ADDR_ALIGN 256 140 141#define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE 0x00000000 142#define FM_PCD_AD_RESULT_DATA_FLOW_TYPE 0x80000000 143#define FM_PCD_AD_RESULT_PLCR_DIS 0x20000000 144#define FM_PCD_AD_RESULT_EXTENDED_MODE 0x80000000 145#define FM_PCD_AD_RESULT_NADEN 0x20000000 146#define FM_PCD_AD_RESULT_STATISTICS_EN 0x40000000 147 148#define FM_PCD_AD_CONT_LOOKUP_TYPE 0x40000000 149#define FM_PCD_AD_CONT_LOOKUP_LCL_MASK 0x00800000 150 151#define FM_PCD_AD_STATS_TYPE 0x40000000 152#define FM_PCD_AD_STATS_FLR_ADDR_MASK 0x00FFFFFF 153#define FM_PCD_AD_STATS_COUNTERS_ADDR_MASK 0x00FFFFFF 154#define FM_PCD_AD_STATS_NEXT_ACTION_MASK 0xFFFF0000 155#define FM_PCD_AD_STATS_NEXT_ACTION_SHIFT 12 156#define FM_PCD_AD_STATS_NAD_EN 0x00008000 157#define FM_PCD_AD_STATS_OP_CODE 0x00000036 158#define FM_PCD_AD_STATS_FLR_EN 0x00004000 159#define FM_PCD_AD_STATS_COND_EN 0x00002000 160 161 162 163#define FM_PCD_AD_BYPASS_TYPE 0xc0000000 164 165#define FM_PCD_AD_TYPE_MASK 0xc0000000 166#define FM_PCD_AD_OPCODE_MASK 0x0000000f 167 168#define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16 169#if (DPAA_VERSION >= 11) 170#define FM_PCD_AD_RESULT_VSP_SHIFT 24 171#define FM_PCD_AD_RESULT_NO_OM_VSPE 0x02000000 172#define FM_PCD_AD_RESULT_VSP_MASK 0x3f 173#define FM_PCD_AD_NCSPFQIDM_MASK 0x80000000 174#endif /* (DPAA_VERSION >= 11) */ 175 176#define GLBL_MASK_FOR_HASH_INDEXED 0xfff00000 177#define CC_GLBL_MASK_SIZE 4 178#define CC_AGING_MASK_SIZE 4 179 180typedef uint32_t ccPrivateInfo_t; /**< private info of CC: */ 181 182#define CC_PRIVATE_INFO_NONE 0 183#define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP 0x80000000 184#define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH 0x40000000 185#define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH 0x20000000 186#define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP 0x10000000 187 188#define CC_BUILD_AGING_MASK(numOfKeys) ((((1LL << ((numOfKeys) + 1)) - 1)) << (31 - (numOfKeys))) 189/***********************************************************************/ 190/* Memory map */ 191/***********************************************************************/ 192#if defined(__MWERKS__) && !defined(__GNUC__) 193#pragma pack(push,1) 194#endif /* defined(__MWERKS__) && ... */ 195 196typedef struct 197{ 198 volatile uint32_t fqid; 199 volatile uint32_t plcrProfile; 200 volatile uint32_t nia; 201 volatile uint32_t res; 202} t_AdOfTypeResult; 203 204typedef struct 205{ 206 volatile uint32_t ccAdBase; 207 volatile uint32_t matchTblPtr; 208 volatile uint32_t pcAndOffsets; 209 volatile uint32_t gmask; 210} t_AdOfTypeContLookup; 211 212typedef struct 213{ 214 volatile uint32_t profileTableAddr; 215 volatile uint32_t reserved; 216 volatile uint32_t nextActionIndx; 217 volatile uint32_t statsTableAddr; 218} t_AdOfTypeStats; 219 220typedef union 221{ 222 volatile t_AdOfTypeResult adResult; 223 volatile t_AdOfTypeContLookup adContLookup; 224} t_Ad; 225 226#if defined(__MWERKS__) && !defined(__GNUC__) 227#pragma pack(pop) 228#endif /* defined(__MWERKS__) && ... */ 229 230 231/***********************************************************************/ 232/* Driver's internal structures */ 233/***********************************************************************/ 234 235typedef struct t_FmPcdStatsObj 236{ 237 t_Handle h_StatsAd; 238 t_Handle h_StatsCounters; 239 t_List node; 240} t_FmPcdStatsObj; 241 242typedef struct 243{ 244 uint8_t key[FM_PCD_MAX_SIZE_OF_KEY]; 245 uint8_t mask[FM_PCD_MAX_SIZE_OF_KEY]; 246 247 t_FmPcdCcNextEngineParams nextEngineParams; 248 uint32_t requiredAction; 249 uint32_t shadowAction; 250 251 t_FmPcdStatsObj *p_StatsObj; 252 253} t_FmPcdCcKeyAndNextEngineParams; 254 255typedef struct 256{ 257 t_Handle p_Ad; 258 e_FmPcdEngine fmPcdEngine; 259 bool adAllocated; 260 bool isTree; 261 262 uint32_t myInfo; 263 t_List *h_CcNextNodesLst; 264 t_Handle h_AdditionalInfo; 265 t_Handle h_Node; 266} t_FmPcdModifyCcAdditionalParams; 267 268typedef struct 269{ 270 t_Handle p_AdTableNew; 271 t_Handle p_KeysMatchTableNew; 272 t_Handle p_AdTableOld; 273 t_Handle p_KeysMatchTableOld; 274 uint16_t numOfKeys; 275 t_Handle h_CurrentNode; 276 uint16_t savedKeyIndex; 277 t_Handle h_NodeForAdd; 278 t_Handle h_NodeForRmv; 279 t_Handle h_ManipForRmv; 280 t_Handle h_ManipForAdd; 281 t_FmPcdStatsObj *p_StatsObjForRmv; 282#if (DPAA_VERSION >= 11) 283 t_Handle h_FrmReplicForAdd; 284 t_Handle h_FrmReplicForRmv; 285#endif /* (DPAA_VERSION >= 11) */ 286 bool tree; 287 288 t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS]; 289} t_FmPcdModifyCcKeyAdditionalParams; 290 291typedef struct 292{ 293 t_Handle h_Manip; 294 t_Handle h_CcNode; 295} t_CcNextEngineInfo; 296 297typedef struct 298{ 299 uint16_t numOfKeys; 300 uint16_t maxNumOfKeys; 301 302 bool maskSupport; 303 uint32_t keysMatchTableMaxSize; 304 305 e_FmPcdCcStatsMode statisticsMode; 306 uint32_t numOfStatsFLRs; 307 uint32_t countersArraySize; 308 309 bool isHashBucket; /**< Valid for match table node that is a bucket of a hash table only */ 310 t_Handle h_MissStatsCounters; /**< Valid for hash table node and match table that is a bucket; 311 Holds the statistics counters allocated by the hash table and 312 are shared by all hash table buckets; */ 313 t_Handle h_PrivMissStatsCounters; /**< Valid for match table node that is a bucket of a hash table only; 314 Holds the statistics counters that were allocated for this node 315 and replaced by the shared counters (allocated by the hash table); */ 316 bool statsEnForMiss; /**< Valid for hash table node only; TRUE is statistics are currently 317 enabled for hash 'miss', FALSE otherwise; This parameter effects the 318 returned statistics count to user, statistics AD always present for 'miss' 319 for all hash buckets; */ 320 bool glblMaskUpdated; 321 t_Handle p_GlblMask; 322 bool lclMask; 323 uint8_t parseCode; 324 uint8_t offset; 325 uint8_t prsArrayOffset; 326 bool ctrlFlow; 327 uint16_t owners; 328 329 uint8_t ccKeySizeAccExtraction; 330 uint8_t sizeOfExtraction; 331 uint8_t glblMaskSize; 332 333 t_Handle h_KeysMatchTable; 334 t_Handle h_AdTable; 335 t_Handle h_StatsAds; 336 t_Handle h_TmpAd; 337 t_Handle h_Ad; 338 t_Handle h_StatsFLRs; 339 340 t_List availableStatsLst; 341 342 t_List ccPrevNodesLst; 343 344 t_List ccTreeIdLst; 345 t_List ccTreesLst; 346 347 t_Handle h_FmPcd; 348 uint32_t shadowAction; 349 uint8_t userSizeOfExtraction; 350 uint8_t userOffset; 351 uint8_t kgHashShift; /* used in hash-table */ 352 353 t_Handle h_Spinlock; 354 355 t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS]; 356} t_FmPcdCcNode; 357 358typedef struct 359{ 360 t_FmPcdCcNode *p_FmPcdCcNode; 361 bool occupied; 362 uint16_t owners; 363 volatile bool lock; 364} t_FmPcdCcNodeArray; 365 366typedef struct 367{ 368 uint8_t numOfEntriesInGroup; 369 uint32_t totalBitsMask; 370 uint8_t baseGroupEntry; 371} t_FmPcdCcGroupParam; 372 373typedef struct 374{ 375 t_Handle h_FmPcd; 376 uint8_t netEnvId; 377 uintptr_t ccTreeBaseAddr; 378 uint8_t numOfGrps; 379 t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 380 t_List fmPortsLst; 381 t_FmPcdLock *p_Lock; 382 uint8_t numOfEntries; 383 uint16_t owners; 384 t_Handle h_FmPcdCcSavedManipParams; 385 bool modifiedState; 386 uint32_t requiredAction; 387 t_Handle h_IpReassemblyManip; 388 t_Handle h_CapwapReassemblyManip; 389 390 t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 391} t_FmPcdCcTree; 392 393 394t_Error FmPcdCcNodeTreeTryLock(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_List *p_List); 395void FmPcdCcNodeTreeReleaseLock(t_Handle h_FmPcd, t_List *p_List); 396t_Error FmPcdUpdateCcShadow (t_FmPcd *p_FmPcd, uint32_t size, uint32_t align); 397 398 399#endif /* __FM_CC_H */ 400