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_cc.h 35 36 @Description FM PCD CC ... 37*//***************************************************************************/ 38#ifndef __FM_CC_H 39#define __FM_CC_H 40 41#include "std_ext.h" 42#include "error_ext.h" 43#include "list_ext.h" 44 45#include "fm_pcd.h" 46 47 48/***********************************************************************/ 49/* Coarse classification defines */ 50/***********************************************************************/ 51 52#define CC_PC_FF_MACDST 0x00 53#define CC_PC_FF_MACSRC 0x01 54#define CC_PC_FF_ETYPE 0x02 55 56#define CC_PC_FF_TCI1 0x03 57#define CC_PC_FF_TCI2 0x04 58 59#define CC_PC_FF_MPLS1 0x06 60#define CC_PC_FF_MPLS_LAST 0x07 61 62#define CC_PC_FF_IPV4DST1 0x08 63#define CC_PC_FF_IPV4DST2 0x16 64#define CC_PC_FF_IPV4IPTOS_TC1 0x09 65#define CC_PC_FF_IPV4IPTOS_TC2 0x17 66#define CC_PC_FF_IPV4PTYPE1 0x0A 67#define CC_PC_FF_IPV4PTYPE2 0x18 68#define CC_PC_FF_IPV4SRC1 0x0b 69#define CC_PC_FF_IPV4SRC2 0x19 70#define CC_PC_FF_IPV4SRC1_IPV4DST1 0x0c 71#define CC_PC_FF_IPV4SRC2_IPV4DST2 0x1a 72#define CC_PC_FF_IPV4TTL 0x29 73 74 75#define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1 0x0d /*TODO - CLASS - what is it? TOS*/ 76#define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2 0x1b 77#define CC_PC_FF_IPV6PTYPE1 0x0e 78#define CC_PC_FF_IPV6PTYPE2 0x1c 79#define CC_PC_FF_IPV6DST1 0x0f 80#define CC_PC_FF_IPV6DST2 0x1d 81#define CC_PC_FF_IPV6SRC1 0x10 82#define CC_PC_FF_IPV6SRC2 0x1e 83#define CC_PC_FF_IPV6HOP_LIMIT 0x2a 84#define CC_PC_FF_GREPTYPE 0x11 85 86#define CC_PC_FF_MINENCAP_PTYPE 0x12 87#define CC_PC_FF_MINENCAP_IPDST 0x13 88#define CC_PC_FF_MINENCAP_IPSRC 0x14 89#define CC_PC_FF_MINENCAP_IPSRC_IPDST 0x15 90 91#define CC_PC_FF_L4PSRC 0x1f 92#define CC_PC_FF_L4PDST 0x20 93#define CC_PC_FF_L4PSRC_L4PDST 0x21 94 95#define CC_PC_FF_PPPPID 0x05 96 97#define CC_PC_PR_SHIM1 0x22 98#define CC_PC_PR_SHIM2 0x23 99 100#define CC_PC_GENERIC_WITHOUT_MASK 0x27 101#define CC_PC_GENERIC_WITH_MASK 0x28 102#define CC_PC_GENERIC_IC_GMASK 0x2B 103#define CC_PC_GENERIC_IC_HASH_INDEXED 0x2C 104 105#define CC_PR_OFFSET 0x25 106#define CC_PR_WITHOUT_OFFSET 0x26 107 108#define CC_PC_PR_ETH_OFFSET 19 109#define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET 16 110#define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET 17 111#define CC_PC_PR_USER_LLC_SNAP_OFFSET 20 112#define CC_PC_PR_VLAN1_OFFSET 21 113#define CC_PC_PR_VLAN2_OFFSET 22 114#define CC_PC_PR_PPPOE_OFFSET 24 115#define CC_PC_PR_MPLS1_OFFSET 25 116#define CC_PC_PR_MPLS_LAST_OFFSET 26 117#define CC_PC_PR_IP1_OFFSET 27 118#define CC_PC_PR_IP_LAST_OFFSET 28 119#define CC_PC_PR_MINENC_OFFSET 28 120#define CC_PC_PR_L4_OFFSET 30 121#define CC_PC_PR_GRE_OFFSET 29 122#define CC_PC_PR_ETYPE_LAST_OFFSET 23 123#define CC_PC_PR_NEXT_HEADER_OFFSET 31 124 125#define CC_PC_ILLEGAL 0xff 126#define CC_SIZE_ILLEGAL 0 127 128#define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN 16 129#define FM_PCD_CC_AD_TABLE_ALIGN 256 130#define FM_PCD_CC_AD_ENTRY_SIZE 16 131#define FM_PCD_CC_NUM_OF_KEYS 255 132 133#define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE 0x00000000 134#define FM_PCD_AD_RESULT_DATA_FLOW_TYPE 0x80000000 135#define FM_PCD_AD_RESULT_PLCR_DIS 0x20000000 136#define FM_PCD_AD_RESULT_EXTENDED_MODE 0x80000000 137#define FM_PCD_AD_RESULT_NADEN 0x20000000 138#define FM_PCD_AD_RESULT_STATISTICS_EN 0x40000000 139 140 141#define FM_PCD_AD_CONT_LOOKUP_TYPE 0x40000000 142#define FM_PCD_AD_CONT_LOOKUP_LCL_MASK 0x00800000 143 144#define FM_PCD_AD_TYPE_MASK 0xc0000000 145#define FM_PCD_AD_OPCODE_MASK 0x0000000f 146 147#define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16 148 149#define GLBL_MASK_FOR_HASH_INDEXED 0xfff00000 150#define CC_GLBL_MASK_SIZE 4 151 152typedef uint32_t ccPrivateInfo_t; /**< private info of CC: */ 153 154#define CC_PRIVATE_INFO_NONE 0 155#define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP 0x80000000 156#define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH 0x40000000 157#define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH 0x20000000 158#define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP 0x10000000 159 160/***********************************************************************/ 161/* Memory map */ 162/***********************************************************************/ 163#if defined(__MWERKS__) && !defined(__GNUC__) 164#pragma pack(push,1) 165#endif /* defined(__MWERKS__) && ... */ 166#define MEM_MAP_START 167 168typedef _Packed struct { 169 volatile uint32_t fqid; 170 volatile uint32_t plcrProfile; 171 volatile uint32_t nia; 172 volatile uint32_t res; 173} _PackedType t_AdOfTypeResult; 174 175typedef _Packed struct { 176 volatile uint32_t ccAdBase; 177 volatile uint32_t matchTblPtr; 178 volatile uint32_t pcAndOffsets; 179 volatile uint32_t gmask; 180} _PackedType t_AdOfTypeContLookup; 181 182typedef _Packed union { 183 volatile t_AdOfTypeResult adResult; 184 volatile t_AdOfTypeContLookup adContLookup; 185} _PackedType t_Ad; 186 187#define MEM_MAP_END 188#if defined(__MWERKS__) && !defined(__GNUC__) 189#pragma pack(pop) 190#endif /* defined(__MWERKS__) && ... */ 191 192 193/***********************************************************************/ 194/* Driver's internal structures */ 195/***********************************************************************/ 196 197typedef enum e_ModifyState { 198 e_MODIFY_STATE_ADD = 0, 199 e_MODIFY_STATE_REMOVE, 200 e_MODIFY_STATE_CHANGE 201} e_ModifyState; 202 203typedef struct { 204 t_FmPcdCcNextEngineParams nextEngineParams; 205 uint32_t requiredAction; 206 uint32_t shadowAction; 207} t_FmPcdCcNextEngineAndRequiredActionParams; 208 209typedef struct { 210 t_Handle p_Ad; 211 e_FmPcdEngine fmPcdEngine; 212 bool adAllocated; 213 bool isTree; 214 215 uint32_t myInfo; 216 t_List *h_CcNextNodesLst; 217 t_Handle h_AdditionalInfo; 218 t_Handle h_Node; 219} t_FmPcdModifyCcAdditionalParams; 220 221typedef struct { 222 t_Handle p_AdTableNew; 223 t_Handle p_KeysMatchTableNew; 224 t_Handle p_AdTableOld; 225 t_Handle p_KeysMatchTableOld; 226 uint16_t numOfKeys; 227 t_Handle h_CurrentNode; 228 uint16_t keyIndex; 229 t_Handle h_NodeForAdd; 230 t_Handle h_NodeForRmv; 231 t_Handle h_ManipForRmv; 232 bool tree; 233 234 t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256]; 235} t_FmPcdModifyCcKeyAdditionalParams; 236 237typedef struct { 238 t_Handle h_Manip; 239 t_Handle h_CcNode; 240} t_CcNextEngineInfo; 241 242typedef struct { 243 uint16_t numOfKeys; 244 bool glblMaskUpdated; 245 t_Handle p_GlblMask; 246 bool lclMask; 247 uint8_t parseCode; 248 uint8_t offset; 249 uint8_t prsArrayOffset; 250 bool ctrlFlow; 251 uint8_t owners; 252 253 uint8_t ccKeySizeAccExtraction; 254 uint8_t sizeOfExtraction; 255 uint8_t glblMaskSize; 256 257 t_Handle h_KeysMatchTable; 258 t_Handle h_AdTable; 259 260 t_List ccPrevNodesLst; 261 262 t_List ccTreeIdLst; 263 t_List ccTreesLst; 264 265 t_Handle h_FmPcd; 266 uint32_t shadowAction; 267 bool modifiedState; 268 uint8_t userSizeOfExtraction; 269 270 t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256]; 271} t_FmPcdCcNode; 272 273typedef struct { 274 t_FmPcdCcNode *p_FmPcdCcNode; 275 bool occupied; 276 uint8_t owners; 277 volatile bool lock; 278} t_FmPcdCcNodeArray; 279 280typedef struct { 281 uint8_t numOfEntriesInGroup; 282 uint32_t totalBitsMask; 283 uint8_t baseGroupEntry; 284} t_FmPcdCcGroupParam; 285 286typedef struct { 287 uint8_t netEnvId; 288 uintptr_t ccTreeBaseAddr; 289 uint8_t numOfGrps; 290 t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 291 t_List fmPortsLst; 292 volatile bool lock; 293 uint8_t numOfEntries; 294 uint8_t owners; 295 t_Handle *fmPcdCcSavedManipParams[256]; 296 bool modifiedState; 297 uint32_t requiredAction; 298 t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[FM_PCD_MAX_NUM_OF_KEYS]; 299} t_FmPcdCcTree; 300 301typedef struct { 302 t_FmPcdCcTree *p_FmPcdCcTree; 303 bool occupied; 304 uint8_t owners; 305 volatile bool lock; 306} t_FmPcdCcTreeArray; 307 308 309bool FmPcdManipIsManipNode(t_Handle h_Ad); 310 311 312#endif /* __FM_CC_H */ 313