1296177Sjhibbits/* Copyright (c) 2008-2011 Freescale Semiconductor, Inc. 2296177Sjhibbits * All rights reserved. 3296177Sjhibbits * 4296177Sjhibbits * Redistribution and use in source and binary forms, with or without 5296177Sjhibbits * modification, are permitted provided that the following conditions are met: 6296177Sjhibbits * * Redistributions of source code must retain the above copyright 7296177Sjhibbits * notice, this list of conditions and the following disclaimer. 8296177Sjhibbits * * Redistributions in binary form must reproduce the above copyright 9296177Sjhibbits * notice, this list of conditions and the following disclaimer in the 10296177Sjhibbits * documentation and/or other materials provided with the distribution. 11296177Sjhibbits * * Neither the name of Freescale Semiconductor nor the 12296177Sjhibbits * names of its contributors may be used to endorse or promote products 13296177Sjhibbits * derived from this software without specific prior written permission. 14296177Sjhibbits * 15296177Sjhibbits * 16296177Sjhibbits * ALTERNATIVELY, this software may be distributed under the terms of the 17296177Sjhibbits * GNU General Public License ("GPL") as published by the Free Software 18296177Sjhibbits * Foundation, either version 2 of that License or (at your option) any 19296177Sjhibbits * later version. 20296177Sjhibbits * 21296177Sjhibbits * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 22296177Sjhibbits * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23296177Sjhibbits * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24296177Sjhibbits * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 25296177Sjhibbits * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26296177Sjhibbits * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27296177Sjhibbits * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28296177Sjhibbits * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29296177Sjhibbits * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30296177Sjhibbits * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31296177Sjhibbits */ 32296177Sjhibbits 33296177Sjhibbits/****************************************************************************** 34296177Sjhibbits @File fm_cc.h 35296177Sjhibbits 36296177Sjhibbits @Description FM PCD CC ... 37296177Sjhibbits*//***************************************************************************/ 38296177Sjhibbits#ifndef __FM_CC_H 39296177Sjhibbits#define __FM_CC_H 40296177Sjhibbits 41296177Sjhibbits#include "std_ext.h" 42296177Sjhibbits#include "error_ext.h" 43296177Sjhibbits#include "list_ext.h" 44296177Sjhibbits 45296177Sjhibbits#include "fm_pcd.h" 46296177Sjhibbits 47296177Sjhibbits 48296177Sjhibbits/***********************************************************************/ 49296177Sjhibbits/* Coarse classification defines */ 50296177Sjhibbits/***********************************************************************/ 51296177Sjhibbits 52296177Sjhibbits#define CC_PC_FF_MACDST 0x00 53296177Sjhibbits#define CC_PC_FF_MACSRC 0x01 54296177Sjhibbits#define CC_PC_FF_ETYPE 0x02 55296177Sjhibbits 56296177Sjhibbits#define CC_PC_FF_TCI1 0x03 57296177Sjhibbits#define CC_PC_FF_TCI2 0x04 58296177Sjhibbits 59296177Sjhibbits#define CC_PC_FF_MPLS1 0x06 60296177Sjhibbits#define CC_PC_FF_MPLS_LAST 0x07 61296177Sjhibbits 62296177Sjhibbits#define CC_PC_FF_IPV4DST1 0x08 63296177Sjhibbits#define CC_PC_FF_IPV4DST2 0x16 64296177Sjhibbits#define CC_PC_FF_IPV4IPTOS_TC1 0x09 65296177Sjhibbits#define CC_PC_FF_IPV4IPTOS_TC2 0x17 66296177Sjhibbits#define CC_PC_FF_IPV4PTYPE1 0x0A 67296177Sjhibbits#define CC_PC_FF_IPV4PTYPE2 0x18 68296177Sjhibbits#define CC_PC_FF_IPV4SRC1 0x0b 69296177Sjhibbits#define CC_PC_FF_IPV4SRC2 0x19 70296177Sjhibbits#define CC_PC_FF_IPV4SRC1_IPV4DST1 0x0c 71296177Sjhibbits#define CC_PC_FF_IPV4SRC2_IPV4DST2 0x1a 72296177Sjhibbits#define CC_PC_FF_IPV4TTL 0x29 73296177Sjhibbits 74296177Sjhibbits 75296177Sjhibbits#define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1 0x0d /*TODO - CLASS - what is it? TOS*/ 76296177Sjhibbits#define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2 0x1b 77296177Sjhibbits#define CC_PC_FF_IPV6PTYPE1 0x0e 78296177Sjhibbits#define CC_PC_FF_IPV6PTYPE2 0x1c 79296177Sjhibbits#define CC_PC_FF_IPV6DST1 0x0f 80296177Sjhibbits#define CC_PC_FF_IPV6DST2 0x1d 81296177Sjhibbits#define CC_PC_FF_IPV6SRC1 0x10 82296177Sjhibbits#define CC_PC_FF_IPV6SRC2 0x1e 83296177Sjhibbits#define CC_PC_FF_IPV6HOP_LIMIT 0x2a 84296177Sjhibbits#define CC_PC_FF_GREPTYPE 0x11 85296177Sjhibbits 86296177Sjhibbits#define CC_PC_FF_MINENCAP_PTYPE 0x12 87296177Sjhibbits#define CC_PC_FF_MINENCAP_IPDST 0x13 88296177Sjhibbits#define CC_PC_FF_MINENCAP_IPSRC 0x14 89296177Sjhibbits#define CC_PC_FF_MINENCAP_IPSRC_IPDST 0x15 90296177Sjhibbits 91296177Sjhibbits#define CC_PC_FF_L4PSRC 0x1f 92296177Sjhibbits#define CC_PC_FF_L4PDST 0x20 93296177Sjhibbits#define CC_PC_FF_L4PSRC_L4PDST 0x21 94296177Sjhibbits 95296177Sjhibbits#define CC_PC_FF_PPPPID 0x05 96296177Sjhibbits 97296177Sjhibbits#define CC_PC_PR_SHIM1 0x22 98296177Sjhibbits#define CC_PC_PR_SHIM2 0x23 99296177Sjhibbits 100296177Sjhibbits#define CC_PC_GENERIC_WITHOUT_MASK 0x27 101296177Sjhibbits#define CC_PC_GENERIC_WITH_MASK 0x28 102296177Sjhibbits#define CC_PC_GENERIC_IC_GMASK 0x2B 103296177Sjhibbits#define CC_PC_GENERIC_IC_HASH_INDEXED 0x2C 104296177Sjhibbits 105296177Sjhibbits#define CC_PR_OFFSET 0x25 106296177Sjhibbits#define CC_PR_WITHOUT_OFFSET 0x26 107296177Sjhibbits 108296177Sjhibbits#define CC_PC_PR_ETH_OFFSET 19 109296177Sjhibbits#define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET 16 110296177Sjhibbits#define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET 17 111296177Sjhibbits#define CC_PC_PR_USER_LLC_SNAP_OFFSET 20 112296177Sjhibbits#define CC_PC_PR_VLAN1_OFFSET 21 113296177Sjhibbits#define CC_PC_PR_VLAN2_OFFSET 22 114296177Sjhibbits#define CC_PC_PR_PPPOE_OFFSET 24 115296177Sjhibbits#define CC_PC_PR_MPLS1_OFFSET 25 116296177Sjhibbits#define CC_PC_PR_MPLS_LAST_OFFSET 26 117296177Sjhibbits#define CC_PC_PR_IP1_OFFSET 27 118296177Sjhibbits#define CC_PC_PR_IP_LAST_OFFSET 28 119296177Sjhibbits#define CC_PC_PR_MINENC_OFFSET 28 120296177Sjhibbits#define CC_PC_PR_L4_OFFSET 30 121296177Sjhibbits#define CC_PC_PR_GRE_OFFSET 29 122296177Sjhibbits#define CC_PC_PR_ETYPE_LAST_OFFSET 23 123296177Sjhibbits#define CC_PC_PR_NEXT_HEADER_OFFSET 31 124296177Sjhibbits 125296177Sjhibbits#define CC_PC_ILLEGAL 0xff 126296177Sjhibbits#define CC_SIZE_ILLEGAL 0 127296177Sjhibbits 128296177Sjhibbits#define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN 16 129296177Sjhibbits#define FM_PCD_CC_AD_TABLE_ALIGN 256 130296177Sjhibbits#define FM_PCD_CC_AD_ENTRY_SIZE 16 131296177Sjhibbits#define FM_PCD_CC_NUM_OF_KEYS 255 132296177Sjhibbits 133296177Sjhibbits#define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE 0x00000000 134296177Sjhibbits#define FM_PCD_AD_RESULT_DATA_FLOW_TYPE 0x80000000 135296177Sjhibbits#define FM_PCD_AD_RESULT_PLCR_DIS 0x20000000 136296177Sjhibbits#define FM_PCD_AD_RESULT_EXTENDED_MODE 0x80000000 137296177Sjhibbits#define FM_PCD_AD_RESULT_NADEN 0x20000000 138296177Sjhibbits#define FM_PCD_AD_RESULT_STATISTICS_EN 0x40000000 139296177Sjhibbits 140296177Sjhibbits 141296177Sjhibbits#define FM_PCD_AD_CONT_LOOKUP_TYPE 0x40000000 142296177Sjhibbits#define FM_PCD_AD_CONT_LOOKUP_LCL_MASK 0x00800000 143296177Sjhibbits 144296177Sjhibbits#define FM_PCD_AD_TYPE_MASK 0xc0000000 145296177Sjhibbits#define FM_PCD_AD_OPCODE_MASK 0x0000000f 146296177Sjhibbits 147296177Sjhibbits#define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16 148296177Sjhibbits 149296177Sjhibbits#define GLBL_MASK_FOR_HASH_INDEXED 0xfff00000 150296177Sjhibbits#define CC_GLBL_MASK_SIZE 4 151296177Sjhibbits 152296177Sjhibbitstypedef uint32_t ccPrivateInfo_t; /**< private info of CC: */ 153296177Sjhibbits 154296177Sjhibbits#define CC_PRIVATE_INFO_NONE 0 155296177Sjhibbits#define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP 0x80000000 156296177Sjhibbits#define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH 0x40000000 157296177Sjhibbits#define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH 0x20000000 158296177Sjhibbits#define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP 0x10000000 159296177Sjhibbits 160296177Sjhibbits/***********************************************************************/ 161296177Sjhibbits/* Memory map */ 162296177Sjhibbits/***********************************************************************/ 163296177Sjhibbits#if defined(__MWERKS__) && !defined(__GNUC__) 164296177Sjhibbits#pragma pack(push,1) 165296177Sjhibbits#endif /* defined(__MWERKS__) && ... */ 166296177Sjhibbits#define MEM_MAP_START 167296177Sjhibbits 168296177Sjhibbitstypedef _Packed struct { 169296177Sjhibbits volatile uint32_t fqid; 170296177Sjhibbits volatile uint32_t plcrProfile; 171296177Sjhibbits volatile uint32_t nia; 172296177Sjhibbits volatile uint32_t res; 173296177Sjhibbits} _PackedType t_AdOfTypeResult; 174296177Sjhibbits 175296177Sjhibbitstypedef _Packed struct { 176296177Sjhibbits volatile uint32_t ccAdBase; 177296177Sjhibbits volatile uint32_t matchTblPtr; 178296177Sjhibbits volatile uint32_t pcAndOffsets; 179296177Sjhibbits volatile uint32_t gmask; 180296177Sjhibbits} _PackedType t_AdOfTypeContLookup; 181296177Sjhibbits 182296177Sjhibbitstypedef _Packed union { 183296177Sjhibbits volatile t_AdOfTypeResult adResult; 184296177Sjhibbits volatile t_AdOfTypeContLookup adContLookup; 185296177Sjhibbits} _PackedType t_Ad; 186296177Sjhibbits 187296177Sjhibbits#define MEM_MAP_END 188296177Sjhibbits#if defined(__MWERKS__) && !defined(__GNUC__) 189296177Sjhibbits#pragma pack(pop) 190296177Sjhibbits#endif /* defined(__MWERKS__) && ... */ 191296177Sjhibbits 192296177Sjhibbits 193296177Sjhibbits/***********************************************************************/ 194296177Sjhibbits/* Driver's internal structures */ 195296177Sjhibbits/***********************************************************************/ 196296177Sjhibbits 197296177Sjhibbitstypedef enum e_ModifyState { 198296177Sjhibbits e_MODIFY_STATE_ADD = 0, 199296177Sjhibbits e_MODIFY_STATE_REMOVE, 200296177Sjhibbits e_MODIFY_STATE_CHANGE 201296177Sjhibbits} e_ModifyState; 202296177Sjhibbits 203296177Sjhibbitstypedef struct { 204296177Sjhibbits t_FmPcdCcNextEngineParams nextEngineParams; 205296177Sjhibbits uint32_t requiredAction; 206296177Sjhibbits uint32_t shadowAction; 207296177Sjhibbits} t_FmPcdCcNextEngineAndRequiredActionParams; 208296177Sjhibbits 209296177Sjhibbitstypedef struct { 210296177Sjhibbits t_Handle p_Ad; 211296177Sjhibbits e_FmPcdEngine fmPcdEngine; 212296177Sjhibbits bool adAllocated; 213296177Sjhibbits bool isTree; 214296177Sjhibbits 215296177Sjhibbits uint32_t myInfo; 216296177Sjhibbits t_List *h_CcNextNodesLst; 217296177Sjhibbits t_Handle h_AdditionalInfo; 218296177Sjhibbits t_Handle h_Node; 219296177Sjhibbits} t_FmPcdModifyCcAdditionalParams; 220296177Sjhibbits 221296177Sjhibbitstypedef struct { 222296177Sjhibbits t_Handle p_AdTableNew; 223296177Sjhibbits t_Handle p_KeysMatchTableNew; 224296177Sjhibbits t_Handle p_AdTableOld; 225296177Sjhibbits t_Handle p_KeysMatchTableOld; 226296177Sjhibbits uint16_t numOfKeys; 227296177Sjhibbits t_Handle h_CurrentNode; 228296177Sjhibbits uint16_t keyIndex; 229296177Sjhibbits t_Handle h_NodeForAdd; 230296177Sjhibbits t_Handle h_NodeForRmv; 231296177Sjhibbits t_Handle h_ManipForRmv; 232296177Sjhibbits bool tree; 233296177Sjhibbits 234296177Sjhibbits t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256]; 235296177Sjhibbits} t_FmPcdModifyCcKeyAdditionalParams; 236296177Sjhibbits 237296177Sjhibbitstypedef struct { 238296177Sjhibbits t_Handle h_Manip; 239296177Sjhibbits t_Handle h_CcNode; 240296177Sjhibbits} t_CcNextEngineInfo; 241296177Sjhibbits 242296177Sjhibbitstypedef struct { 243296177Sjhibbits uint16_t numOfKeys; 244296177Sjhibbits bool glblMaskUpdated; 245296177Sjhibbits t_Handle p_GlblMask; 246296177Sjhibbits bool lclMask; 247296177Sjhibbits uint8_t parseCode; 248296177Sjhibbits uint8_t offset; 249296177Sjhibbits uint8_t prsArrayOffset; 250296177Sjhibbits bool ctrlFlow; 251296177Sjhibbits uint8_t owners; 252296177Sjhibbits 253296177Sjhibbits uint8_t ccKeySizeAccExtraction; 254296177Sjhibbits uint8_t sizeOfExtraction; 255296177Sjhibbits uint8_t glblMaskSize; 256296177Sjhibbits 257296177Sjhibbits t_Handle h_KeysMatchTable; 258296177Sjhibbits t_Handle h_AdTable; 259296177Sjhibbits 260296177Sjhibbits t_List ccPrevNodesLst; 261296177Sjhibbits 262296177Sjhibbits t_List ccTreeIdLst; 263296177Sjhibbits t_List ccTreesLst; 264296177Sjhibbits 265296177Sjhibbits t_Handle h_FmPcd; 266296177Sjhibbits uint32_t shadowAction; 267296177Sjhibbits bool modifiedState; 268296177Sjhibbits uint8_t userSizeOfExtraction; 269296177Sjhibbits 270296177Sjhibbits t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256]; 271296177Sjhibbits} t_FmPcdCcNode; 272296177Sjhibbits 273296177Sjhibbitstypedef struct { 274296177Sjhibbits t_FmPcdCcNode *p_FmPcdCcNode; 275296177Sjhibbits bool occupied; 276296177Sjhibbits uint8_t owners; 277296177Sjhibbits volatile bool lock; 278296177Sjhibbits} t_FmPcdCcNodeArray; 279296177Sjhibbits 280296177Sjhibbitstypedef struct { 281296177Sjhibbits uint8_t numOfEntriesInGroup; 282296177Sjhibbits uint32_t totalBitsMask; 283296177Sjhibbits uint8_t baseGroupEntry; 284296177Sjhibbits} t_FmPcdCcGroupParam; 285296177Sjhibbits 286296177Sjhibbitstypedef struct { 287296177Sjhibbits uint8_t netEnvId; 288296177Sjhibbits uintptr_t ccTreeBaseAddr; 289296177Sjhibbits uint8_t numOfGrps; 290296177Sjhibbits t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 291296177Sjhibbits t_List fmPortsLst; 292296177Sjhibbits volatile bool lock; 293296177Sjhibbits uint8_t numOfEntries; 294296177Sjhibbits uint8_t owners; 295296177Sjhibbits t_Handle *fmPcdCcSavedManipParams[256]; 296296177Sjhibbits bool modifiedState; 297296177Sjhibbits uint32_t requiredAction; 298296177Sjhibbits t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[FM_PCD_MAX_NUM_OF_KEYS]; 299296177Sjhibbits} t_FmPcdCcTree; 300296177Sjhibbits 301296177Sjhibbitstypedef struct { 302296177Sjhibbits t_FmPcdCcTree *p_FmPcdCcTree; 303296177Sjhibbits bool occupied; 304296177Sjhibbits uint8_t owners; 305296177Sjhibbits volatile bool lock; 306296177Sjhibbits} t_FmPcdCcTreeArray; 307296177Sjhibbits 308296177Sjhibbits 309296177Sjhibbitsbool FmPcdManipIsManipNode(t_Handle h_Ad); 310296177Sjhibbits 311296177Sjhibbits 312296177Sjhibbits#endif /* __FM_CC_H */ 313