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_common.h 36 37 @Description FM internal structures and definitions. 38 *//***************************************************************************/ 39 #ifndef __FM_COMMON_H 40 #define __FM_COMMON_H 41 42 #include "error_ext.h" 43 #include "std_ext.h" 44 #include "fm_pcd_ext.h" 45 #include "fm_ext.h" 46 #include "fm_port_ext.h" 47 48 49 #define e_FM_PORT_TYPE_OH_HOST_COMMAND e_FM_PORT_TYPE_DUMMY 50 51 #define CLS_PLAN_NUM_PER_GRP 8 52 53 #define IP_OFFLOAD_PACKAGE_NUMBER 106 54 #define CAPWAP_OFFLOAD_PACKAGE_NUMBER 108 55 #define IS_OFFLOAD_PACKAGE(num) ((num == IP_OFFLOAD_PACKAGE_NUMBER) || (num == CAPWAP_OFFLOAD_PACKAGE_NUMBER)) 56 57 58 59 /**************************************************************************//** 60 @Description Modules registers offsets 61 *//***************************************************************************/ 62 #define FM_MM_MURAM 0x00000000 63 #define FM_MM_BMI 0x00080000 64 #define FM_MM_QMI 0x00080400 65 #define FM_MM_PRS 0x000c7000 66 #define FM_MM_KG 0x000C1000 67 #define FM_MM_DMA 0x000C2000 68 #define FM_MM_FPM 0x000C3000 69 #define FM_MM_PLCR 0x000C0000 70 #define FM_MM_IMEM 0x000C4000 71 #define FM_MM_CGP 0x000DB000 72 #define FM_MM_TRB(i) (0x000D0200 + 0x400 * (i)) 73 #if (DPAA_VERSION >= 11) 74 #define FM_MM_SP 0x000dc000 75 #endif /* (DPAA_VERSION >= 11) */ 76 77 78 /**************************************************************************//** 79 @Description Enum for inter-module interrupts registration 80 *//***************************************************************************/ 81 typedef enum e_FmEventModules{ 82 e_FM_MOD_PRS, /**< Parser event */ 83 e_FM_MOD_KG, /**< Keygen event */ 84 e_FM_MOD_PLCR, /**< Policer event */ 85 e_FM_MOD_10G_MAC, /**< 10G MAC event */ 86 e_FM_MOD_1G_MAC, /**< 1G MAC event */ 87 e_FM_MOD_TMR, /**< Timer event */ 88 e_FM_MOD_FMAN_CTRL, /**< FMAN Controller Timer event */ 89 e_FM_MOD_MACSEC, 90 e_FM_MOD_DUMMY_LAST 91 } e_FmEventModules; 92 93 /**************************************************************************//** 94 @Description Enum for interrupts types 95 *//***************************************************************************/ 96 typedef enum e_FmIntrType { 97 e_FM_INTR_TYPE_ERR, 98 e_FM_INTR_TYPE_NORMAL 99 } e_FmIntrType; 100 101 /**************************************************************************//** 102 @Description Enum for inter-module interrupts registration 103 *//***************************************************************************/ 104 typedef enum e_FmInterModuleEvent 105 { 106 e_FM_EV_PRS = 0, /**< Parser event */ 107 e_FM_EV_ERR_PRS, /**< Parser error event */ 108 e_FM_EV_KG, /**< Keygen event */ 109 e_FM_EV_ERR_KG, /**< Keygen error event */ 110 e_FM_EV_PLCR, /**< Policer event */ 111 e_FM_EV_ERR_PLCR, /**< Policer error event */ 112 e_FM_EV_ERR_10G_MAC0, /**< 10G MAC 0 error event */ 113 e_FM_EV_ERR_10G_MAC1, /**< 10G MAC 1 error event */ 114 e_FM_EV_ERR_1G_MAC0, /**< 1G MAC 0 error event */ 115 e_FM_EV_ERR_1G_MAC1, /**< 1G MAC 1 error event */ 116 e_FM_EV_ERR_1G_MAC2, /**< 1G MAC 2 error event */ 117 e_FM_EV_ERR_1G_MAC3, /**< 1G MAC 3 error event */ 118 e_FM_EV_ERR_1G_MAC4, /**< 1G MAC 4 error event */ 119 e_FM_EV_ERR_1G_MAC5, /**< 1G MAC 5 error event */ 120 e_FM_EV_ERR_1G_MAC6, /**< 1G MAC 6 error event */ 121 e_FM_EV_ERR_1G_MAC7, /**< 1G MAC 7 error event */ 122 e_FM_EV_ERR_MACSEC_MAC0, 123 e_FM_EV_TMR, /**< Timer event */ 124 e_FM_EV_10G_MAC0, /**< 10G MAC 0 event (Magic packet detection)*/ 125 e_FM_EV_10G_MAC1, /**< 10G MAC 1 event (Magic packet detection)*/ 126 e_FM_EV_1G_MAC0, /**< 1G MAC 0 event (Magic packet detection)*/ 127 e_FM_EV_1G_MAC1, /**< 1G MAC 1 event (Magic packet detection)*/ 128 e_FM_EV_1G_MAC2, /**< 1G MAC 2 (Magic packet detection)*/ 129 e_FM_EV_1G_MAC3, /**< 1G MAC 3 (Magic packet detection)*/ 130 e_FM_EV_1G_MAC4, /**< 1G MAC 4 (Magic packet detection)*/ 131 e_FM_EV_1G_MAC5, /**< 1G MAC 5 (Magic packet detection)*/ 132 e_FM_EV_1G_MAC6, /**< 1G MAC 6 (Magic packet detection)*/ 133 e_FM_EV_1G_MAC7, /**< 1G MAC 7 (Magic packet detection)*/ 134 e_FM_EV_MACSEC_MAC0, /**< MACSEC MAC 0 event */ 135 e_FM_EV_FMAN_CTRL_0, /**< Fman controller event 0 */ 136 e_FM_EV_FMAN_CTRL_1, /**< Fman controller event 1 */ 137 e_FM_EV_FMAN_CTRL_2, /**< Fman controller event 2 */ 138 e_FM_EV_FMAN_CTRL_3, /**< Fman controller event 3 */ 139 e_FM_EV_DUMMY_LAST 140 } e_FmInterModuleEvent; 141 142 143 #if defined(__MWERKS__) && !defined(__GNUC__) 144 #pragma pack(push,1) 145 #endif /* defined(__MWERKS__) && ... */ 146 147 /**************************************************************************//** 148 @Description PCD KG scheme registers 149 *//***************************************************************************/ 150 typedef _Packed struct t_FmPcdPlcrProfileRegs { 151 volatile uint32_t fmpl_pemode; /* 0x090 FMPL_PEMODE - FM Policer Profile Entry Mode*/ 152 volatile uint32_t fmpl_pegnia; /* 0x094 FMPL_PEGNIA - FM Policer Profile Entry GREEN Next Invoked Action*/ 153 volatile uint32_t fmpl_peynia; /* 0x098 FMPL_PEYNIA - FM Policer Profile Entry YELLOW Next Invoked Action*/ 154 volatile uint32_t fmpl_pernia; /* 0x09C FMPL_PERNIA - FM Policer Profile Entry RED Next Invoked Action*/ 155 volatile uint32_t fmpl_pecir; /* 0x0A0 FMPL_PECIR - FM Policer Profile Entry Committed Information Rate*/ 156 volatile uint32_t fmpl_pecbs; /* 0x0A4 FMPL_PECBS - FM Policer Profile Entry Committed Burst Size*/ 157 volatile uint32_t fmpl_pepepir_eir; /* 0x0A8 FMPL_PEPIR_EIR - FM Policer Profile Entry Peak/Excess Information Rate*/ 158 volatile uint32_t fmpl_pepbs_ebs; /* 0x0AC FMPL_PEPBS_EBS - FM Policer Profile Entry Peak/Excess Information Rate*/ 159 volatile uint32_t fmpl_pelts; /* 0x0B0 FMPL_PELTS - FM Policer Profile Entry Last TimeStamp*/ 160 volatile uint32_t fmpl_pects; /* 0x0B4 FMPL_PECTS - FM Policer Profile Entry Committed Token Status*/ 161 volatile uint32_t fmpl_pepts_ets; /* 0x0B8 FMPL_PEPTS_ETS - FM Policer Profile Entry Peak/Excess Token Status*/ 162 volatile uint32_t fmpl_pegpc; /* 0x0BC FMPL_PEGPC - FM Policer Profile Entry GREEN Packet Counter*/ 163 volatile uint32_t fmpl_peypc; /* 0x0C0 FMPL_PEYPC - FM Policer Profile Entry YELLOW Packet Counter*/ 164 volatile uint32_t fmpl_perpc; /* 0x0C4 FMPL_PERPC - FM Policer Profile Entry RED Packet Counter */ 165 volatile uint32_t fmpl_perypc; /* 0x0C8 FMPL_PERYPC - FM Policer Profile Entry Recolored YELLOW Packet Counter*/ 166 volatile uint32_t fmpl_perrpc; /* 0x0CC FMPL_PERRPC - FM Policer Profile Entry Recolored RED Packet Counter*/ 167 volatile uint32_t fmpl_res1[12]; /* 0x0D0-0x0FF Reserved */ 168 } _PackedType t_FmPcdPlcrProfileRegs; 169 170 171 typedef _Packed struct t_FmPcdCcCapwapReassmTimeoutParams { 172 volatile uint32_t portIdAndCapwapReassmTbl; 173 volatile uint32_t fqidForTimeOutFrames; 174 volatile uint32_t timeoutRequestTime; 175 }_PackedType t_FmPcdCcCapwapReassmTimeoutParams; 176 177 /**************************************************************************//** 178 @Description PCD CTRL Parameters Page 179 *//***************************************************************************/ 180 typedef _Packed struct t_FmPcdCtrlParamsPage { 181 volatile uint8_t reserved0[16]; 182 volatile uint32_t iprIpv4Nia; 183 volatile uint32_t iprIpv6Nia; 184 volatile uint8_t reserved1[24]; 185 volatile uint32_t ipfOptionsCounter; 186 volatile uint8_t reserved2[12]; 187 volatile uint32_t misc; 188 volatile uint32_t errorsDiscardMask; 189 volatile uint32_t discardMask; 190 volatile uint8_t reserved3[4]; 191 volatile uint32_t postBmiFetchNia; 192 volatile uint8_t reserved4[172]; 193 } _PackedType t_FmPcdCtrlParamsPage; 194 195 196 197 #if defined(__MWERKS__) && !defined(__GNUC__) 198 #pragma pack(pop) 199 #endif /* defined(__MWERKS__) && ... */ 200 201 202 /*for UNDER_CONSTRUCTION_FM_RMU_USE_SEC its defined in fm_ext.h*/ 203 typedef uint32_t t_FmFmanCtrl; 204 205 #define FPM_PORT_FM_CTL1 0x00000001 206 #define FPM_PORT_FM_CTL2 0x00000002 207 208 209 210 typedef struct t_FmPcdCcFragScratchPoolCmdParams { 211 uint32_t numOfBuffers; 212 uint8_t bufferPoolId; 213 } t_FmPcdCcFragScratchPoolCmdParams; 214 215 typedef struct t_FmPcdCcReassmTimeoutParams { 216 bool activate; 217 uint8_t tsbs; 218 uint32_t iprcpt; 219 } t_FmPcdCcReassmTimeoutParams; 220 221 typedef struct { 222 uint8_t baseEntry; 223 uint16_t numOfClsPlanEntries; 224 uint32_t vectors[FM_PCD_MAX_NUM_OF_CLS_PLANS]; 225 } t_FmPcdKgInterModuleClsPlanSet; 226 227 /**************************************************************************//** 228 @Description Structure for binding a port to keygen schemes. 229 *//***************************************************************************/ 230 typedef struct t_FmPcdKgInterModuleBindPortToSchemes { 231 uint8_t hardwarePortId; 232 uint8_t netEnvId; 233 bool useClsPlan; /**< TRUE if this port uses the clsPlan mechanism */ 234 uint8_t numOfSchemes; 235 uint8_t schemesIds[FM_PCD_KG_NUM_OF_SCHEMES]; 236 } t_FmPcdKgInterModuleBindPortToSchemes; 237 238 typedef struct { 239 uint32_t nextCcNodeInfo; 240 t_List node; 241 } t_CcNodeInfo; 242 243 typedef struct 244 { 245 t_Handle h_CcNode; 246 uint16_t index; 247 t_List node; 248 }t_CcNodeInformation; 249 #define CC_NODE_F_OBJECT(ptr) NCSW_LIST_OBJECT(ptr, t_CcNodeInformation, node) 250 251 typedef enum e_ModifyState 252 { 253 e_MODIFY_STATE_ADD = 0, 254 e_MODIFY_STATE_REMOVE, 255 e_MODIFY_STATE_CHANGE 256 } e_ModifyState; 257 258 typedef struct 259 { 260 t_Handle h_Manip; 261 t_List node; 262 }t_ManipInfo; 263 #define CC_NEXT_NODE_F_OBJECT(ptr) NCSW_LIST_OBJECT(ptr, t_CcNodeInfo, node) 264 265 typedef struct { 266 uint32_t type; 267 uint8_t prOffset; 268 uint16_t dataOffset; 269 uint8_t internalBufferOffset; 270 uint8_t numOfTasks; 271 uint8_t numOfExtraTasks; 272 uint8_t hardwarePortId; 273 t_FmRevisionInfo revInfo; 274 uint32_t nia; 275 uint32_t discardMask; 276 } t_GetCcParams; 277 278 typedef struct { 279 uint32_t type; 280 int psoSize; 281 uint32_t nia; 282 t_FmFmanCtrl orFmanCtrl; 283 bool overwrite; 284 uint8_t ofpDpde; 285 } t_SetCcParams; 286 287 typedef struct { 288 t_GetCcParams getCcParams; 289 t_SetCcParams setCcParams; 290 } t_FmPortGetSetCcParams; 291 292 typedef struct { 293 uint32_t type; 294 bool sleep; 295 } t_FmSetParams; 296 297 typedef struct { 298 uint32_t type; 299 uint32_t fmqm_gs; 300 uint32_t fm_npi; 301 uint32_t fm_cld; 302 uint32_t fmfp_extc; 303 } t_FmGetParams; 304 305 typedef struct { 306 t_FmSetParams setParams; 307 t_FmGetParams getParams; 308 } t_FmGetSetParams; 309 310 t_Error FmGetSetParams(t_Handle h_Fm, t_FmGetSetParams *p_Params); 311 312 static __inline__ bool TRY_LOCK(t_Handle h_Spinlock, volatile bool *p_Flag) 313 { 314 uint32_t intFlags; 315 if (h_Spinlock) 316 intFlags = XX_LockIntrSpinlock(h_Spinlock); 317 else 318 intFlags = XX_DisableAllIntr(); 319 320 if (*p_Flag) 321 { 322 if (h_Spinlock) 323 XX_UnlockIntrSpinlock(h_Spinlock, intFlags); 324 else 325 XX_RestoreAllIntr(intFlags); 326 return FALSE; 327 } 328 *p_Flag = TRUE; 329 330 if (h_Spinlock) 331 XX_UnlockIntrSpinlock(h_Spinlock, intFlags); 332 else 333 XX_RestoreAllIntr(intFlags); 334 335 return TRUE; 336 } 337 338 #define RELEASE_LOCK(_flag) _flag = FALSE; 339 340 /**************************************************************************//** 341 @Collection Defines used for manipulation CC and BMI 342 @{ 343 *//***************************************************************************/ 344 #define INTERNAL_CONTEXT_OFFSET 0x80000000 345 #define OFFSET_OF_PR 0x40000000 346 #define MANIP_EXTRA_SPACE 0x20000000 347 #define NUM_OF_TASKS 0x10000000 348 #define OFFSET_OF_DATA 0x08000000 349 #define HW_PORT_ID 0x04000000 350 #define FM_REV 0x02000000 351 #define GET_NIA_FPNE 0x01000000 352 #define GET_NIA_PNDN 0x00800000 353 #define NUM_OF_EXTRA_TASKS 0x00400000 354 #define DISCARD_MASK 0x00200000 355 356 #define UPDATE_NIA_PNEN 0x80000000 357 #define UPDATE_PSO 0x40000000 358 #define UPDATE_NIA_PNDN 0x20000000 359 #define UPDATE_FMFP_PRC_WITH_ONE_RISC_ONLY 0x10000000 360 #define UPDATE_OFP_DPTE 0x08000000 361 #define UPDATE_NIA_FENE 0x04000000 362 #define UPDATE_NIA_CMNE 0x02000000 363 #define UPDATE_NIA_FPNE 0x01000000 364 /* @} */ 365 366 /**************************************************************************//** 367 @Collection Defines used for manipulation CC and CC 368 @{ 369 *//***************************************************************************/ 370 #define UPDATE_NIA_ENQ_WITHOUT_DMA 0x80000000 371 #define UPDATE_CC_WITH_TREE 0x40000000 372 #define UPDATE_CC_WITH_DELETE_TREE 0x20000000 373 #define UPDATE_KG_NIA_CC_WA 0x10000000 374 #define UPDATE_KG_OPT_MODE 0x08000000 375 #define UPDATE_KG_NIA 0x04000000 376 #define UPDATE_CC_SHADOW_CLEAR 0x02000000 377 /* @} */ 378 379 #define UPDATE_FPM_BRKC_SLP 0x80000000 380 #define UPDATE_FPM_EXTC 0x40000000 381 #define UPDATE_FPM_EXTC_CLEAR 0x20000000 382 #define GET_FMQM_GS 0x10000000 383 #define GET_FM_NPI 0x08000000 384 #define GET_FMFP_EXTC 0x04000000 385 #define CLEAR_IRAM_READY 0x02000000 386 #define UPDATE_FM_CLD 0x01000000 387 #define GET_FM_CLD 0x00800000 388 #define FM_MAX_NUM_OF_PORTS (FM_MAX_NUM_OF_OH_PORTS + \ 389 FM_MAX_NUM_OF_1G_RX_PORTS + \ 390 FM_MAX_NUM_OF_10G_RX_PORTS + \ 391 FM_MAX_NUM_OF_1G_TX_PORTS + \ 392 FM_MAX_NUM_OF_10G_TX_PORTS) 393 394 #define MODULE_NAME_SIZE 30 395 #define DUMMY_PORT_ID 0 396 397 #define FM_LIODN_OFFSET_MASK 0x3FF 398 399 /**************************************************************************//** 400 @Description NIA Description 401 *//***************************************************************************/ 402 #define NIA_ENG_MASK 0x007C0000 403 #define NIA_AC_MASK 0x0003ffff 404 405 #define NIA_ORDER_RESTOR 0x00800000 406 #define NIA_ENG_FM_CTL 0x00000000 407 #define NIA_ENG_PRS 0x00440000 408 #define NIA_ENG_KG 0x00480000 409 #define NIA_ENG_PLCR 0x004C0000 410 #define NIA_ENG_BMI 0x00500000 411 #define NIA_ENG_QMI_ENQ 0x00540000 412 #define NIA_ENG_QMI_DEQ 0x00580000 413 414 #define NIA_FM_CTL_AC_CC 0x00000006 415 #define NIA_FM_CTL_AC_HC 0x0000000C 416 #define NIA_FM_CTL_AC_IND_MODE_TX 0x00000008 417 #define NIA_FM_CTL_AC_IND_MODE_RX 0x0000000A 418 #define NIA_FM_CTL_AC_POP_TO_N_STEP 0x0000000e 419 #define NIA_FM_CTL_AC_PRE_BMI_FETCH_HEADER 0x00000010 420 #define NIA_FM_CTL_AC_PRE_BMI_FETCH_FULL_FRAME 0x00000018 421 #define NIA_FM_CTL_AC_POST_BMI_FETCH 0x00000012 422 #define NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME 0x0000001A 423 #define NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME 0x0000001E 424 #define NIA_FM_CTL_AC_POST_BMI_ENQ_ORR 0x00000014 425 #define NIA_FM_CTL_AC_POST_BMI_ENQ 0x00000022 426 #define NIA_FM_CTL_AC_PRE_CC 0x00000020 427 #define NIA_FM_CTL_AC_POST_TX 0x00000024 428 /* V3 only */ 429 #define NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME 0x00000028 430 #define NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_DISCARD_FRAME 0x0000002A 431 #define NIA_FM_CTL_AC_NO_IPACC_POP_TO_N_STEP 0x0000002C 432 433 #define NIA_BMI_AC_ENQ_FRAME 0x00000002 434 #define NIA_BMI_AC_TX_RELEASE 0x000002C0 435 #define NIA_BMI_AC_RELEASE 0x000000C0 436 #define NIA_BMI_AC_DISCARD 0x000000C1 437 #define NIA_BMI_AC_TX 0x00000274 438 #define NIA_BMI_AC_FETCH 0x00000208 439 #define NIA_BMI_AC_MASK 0x000003FF 440 441 #define NIA_KG_DIRECT 0x00000100 442 #define NIA_KG_CC_EN 0x00000200 443 #define NIA_PLCR_ABSOLUTE 0x00008000 444 445 #define NIA_BMI_AC_ENQ_FRAME_WITHOUT_DMA 0x00000202 446 447 #if defined(FM_OP_NO_VSP_NO_RELEASE_ERRATA_FMAN_A006675) || defined(FM_ERROR_VSP_NO_MATCH_SW006) 448 #define GET_NIA_BMI_AC_ENQ_FRAME(h_FmPcd) \ 449 (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \ 450 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME) : \ 451 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME)) 452 #define GET_NIA_BMI_AC_DISCARD_FRAME(h_FmPcd) \ 453 (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \ 454 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME) : \ 455 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_DISCARD_FRAME)) 456 #define GET_NO_PCD_NIA_BMI_AC_ENQ_FRAME() \ 457 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME) 458 #else 459 #define GET_NIA_BMI_AC_ENQ_FRAME(h_FmPcd) \ 460 (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \ 461 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME) : \ 462 (NIA_ENG_BMI | NIA_BMI_AC_ENQ_FRAME)) 463 #define GET_NIA_BMI_AC_DISCARD_FRAME(h_FmPcd) \ 464 (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \ 465 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME) : \ 466 (NIA_ENG_BMI | NIA_BMI_AC_DISCARD)) 467 #define GET_NO_PCD_NIA_BMI_AC_ENQ_FRAME() \ 468 (NIA_ENG_BMI | NIA_BMI_AC_ENQ_FRAME) 469 #endif /* defined(FM_OP_NO_VSP_NO_RELEASE_ERRATA_FMAN_A006675) || ... */ 470 471 /**************************************************************************//** 472 @Description CTRL Parameters Page defines 473 *//***************************************************************************/ 474 #define FM_CTL_PARAMS_PAGE_OP_FIX_EN 0x80000000 475 #define FM_CTL_PARAMS_PAGE_OFFLOAD_SUPPORT_EN 0x40000000 476 #define FM_CTL_PARAMS_PAGE_ALWAYS_ON 0x00000100 477 478 #define FM_CTL_PARAMS_PAGE_ERROR_VSP_MASK 0x0000003f 479 480 /**************************************************************************//** 481 @Description Port Id defines 482 *//***************************************************************************/ 483 #if (DPAA_VERSION == 10) 484 #define BASE_OH_PORTID 1 485 #else 486 #define BASE_OH_PORTID 2 487 #endif /* (DPAA_VERSION == 10) */ 488 #define BASE_1G_RX_PORTID 8 489 #define BASE_10G_RX_PORTID 0x10 490 #define BASE_1G_TX_PORTID 0x28 491 #define BASE_10G_TX_PORTID 0x30 492 493 #define FM_PCD_PORT_OH_BASE_INDX 0 494 #define FM_PCD_PORT_1G_RX_BASE_INDX (FM_PCD_PORT_OH_BASE_INDX+FM_MAX_NUM_OF_OH_PORTS) 495 #define FM_PCD_PORT_10G_RX_BASE_INDX (FM_PCD_PORT_1G_RX_BASE_INDX+FM_MAX_NUM_OF_1G_RX_PORTS) 496 #define FM_PCD_PORT_1G_TX_BASE_INDX (FM_PCD_PORT_10G_RX_BASE_INDX+FM_MAX_NUM_OF_10G_RX_PORTS) 497 #define FM_PCD_PORT_10G_TX_BASE_INDX (FM_PCD_PORT_1G_TX_BASE_INDX+FM_MAX_NUM_OF_1G_TX_PORTS) 498 499 #if (FM_MAX_NUM_OF_OH_PORTS > 0) 500 #define CHECK_PORT_ID_OH_PORTS(_relativePortId) \ 501 if ((_relativePortId) >= FM_MAX_NUM_OF_OH_PORTS) \ 502 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id")) 503 #else 504 #define CHECK_PORT_ID_OH_PORTS(_relativePortId) \ 505 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id")) 506 #endif 507 #if (FM_MAX_NUM_OF_1G_RX_PORTS > 0) 508 #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId) \ 509 if ((_relativePortId) >= FM_MAX_NUM_OF_1G_RX_PORTS) \ 510 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id")) 511 #else 512 #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId) \ 513 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id")) 514 #endif 515 #if (FM_MAX_NUM_OF_10G_RX_PORTS > 0) 516 #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId) \ 517 if ((_relativePortId) >= FM_MAX_NUM_OF_10G_RX_PORTS) \ 518 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id")) 519 #else 520 #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId) \ 521 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id")) 522 #endif 523 #if (FM_MAX_NUM_OF_1G_TX_PORTS > 0) 524 #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId) \ 525 if ((_relativePortId) >= FM_MAX_NUM_OF_1G_TX_PORTS) \ 526 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id")) 527 #else 528 #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId) \ 529 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id")) 530 #endif 531 #if (FM_MAX_NUM_OF_10G_TX_PORTS > 0) 532 #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId) \ 533 if ((_relativePortId) >= FM_MAX_NUM_OF_10G_TX_PORTS) \ 534 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id")) 535 #else 536 #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId) \ 537 REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id")) 538 #endif 539 540 uint8_t SwPortIdToHwPortId(e_FmPortType type, uint8_t relativePortId, uint8_t majorRev, uint8_t minorRev); 541 542 #define HW_PORT_ID_TO_SW_PORT_ID(_relativePortId, hardwarePortId) \ 543 { if (((hardwarePortId) >= BASE_OH_PORTID) && \ 544 ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS)) \ 545 _relativePortId = (uint8_t)((hardwarePortId)-BASE_OH_PORTID); \ 546 else if (((hardwarePortId) >= BASE_10G_TX_PORTID) && \ 547 ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS)) \ 548 _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID); \ 549 else if (((hardwarePortId) >= BASE_1G_TX_PORTID) && \ 550 ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS)) \ 551 _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID); \ 552 else if (((hardwarePortId) >= BASE_10G_RX_PORTID) && \ 553 ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS)) \ 554 _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID); \ 555 else if (((hardwarePortId) >= BASE_1G_RX_PORTID) && \ 556 ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS)) \ 557 _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID); \ 558 else { \ 559 _relativePortId = (uint8_t)DUMMY_PORT_ID; \ 560 ASSERT_COND(TRUE); \ 561 } \ 562 } 563 564 #define HW_PORT_ID_TO_SW_PORT_INDX(swPortIndex, hardwarePortId) \ 565 do { \ 566 if (((hardwarePortId) >= BASE_OH_PORTID) && ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS)) \ 567 swPortIndex = (uint8_t)((hardwarePortId)-BASE_OH_PORTID+FM_PCD_PORT_OH_BASE_INDX); \ 568 else if (((hardwarePortId) >= BASE_1G_RX_PORTID) && \ 569 ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS)) \ 570 swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID+FM_PCD_PORT_1G_RX_BASE_INDX); \ 571 else if (((hardwarePortId) >= BASE_10G_RX_PORTID) && \ 572 ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS)) \ 573 swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID+FM_PCD_PORT_10G_RX_BASE_INDX); \ 574 else if (((hardwarePortId) >= BASE_1G_TX_PORTID) && \ 575 ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS)) \ 576 swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID+FM_PCD_PORT_1G_TX_BASE_INDX); \ 577 else if (((hardwarePortId) >= BASE_10G_TX_PORTID) && \ 578 ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS)) \ 579 swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID+FM_PCD_PORT_10G_TX_BASE_INDX); \ 580 else ASSERT_COND(FALSE); \ 581 } while (0) 582 583 #define SW_PORT_INDX_TO_HW_PORT_ID(hardwarePortId, swPortIndex) \ 584 do { \ 585 if (((swPortIndex) >= FM_PCD_PORT_OH_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_1G_RX_BASE_INDX)) \ 586 hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_OH_BASE_INDX+BASE_OH_PORTID); \ 587 else if (((swPortIndex) >= FM_PCD_PORT_1G_RX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_RX_BASE_INDX)) \ 588 hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_RX_BASE_INDX+BASE_1G_RX_PORTID); \ 589 else if (((swPortIndex) >= FM_PCD_PORT_10G_RX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS)) \ 590 hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_RX_BASE_INDX+BASE_10G_RX_PORTID); \ 591 else if (((swPortIndex) >= FM_PCD_PORT_1G_TX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_TX_BASE_INDX)) \ 592 hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_TX_BASE_INDX+BASE_1G_TX_PORTID); \ 593 else if (((swPortIndex) >= FM_PCD_PORT_10G_TX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS)) \ 594 hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_TX_BASE_INDX+BASE_10G_TX_PORTID); \ 595 else ASSERT_COND(FALSE); \ 596 } while (0) 597 598 #define BMI_MAX_FIFO_SIZE (FM_MURAM_SIZE) 599 #define BMI_FIFO_UNITS 0x100 600 601 typedef struct { 602 void (*f_Isr) (t_Handle h_Arg); 603 t_Handle h_SrcHandle; 604 uint8_t guestId; 605 } t_FmIntrSrc; 606 607 #define ILLEGAL_HDR_NUM 0xFF 608 #define NO_HDR_NUM FM_PCD_PRS_NUM_OF_HDRS 609 610 #define IS_PRIVATE_HEADER(hdr) (((hdr) == HEADER_TYPE_USER_DEFINED_SHIM1) || \ 611 ((hdr) == HEADER_TYPE_USER_DEFINED_SHIM2)) 612 #define IS_SPECIAL_HEADER(hdr) ((hdr) == HEADER_TYPE_MACSEC) 613 614 static __inline__ uint8_t GetPrsHdrNum(e_NetHeaderType hdr) 615 { 616 switch (hdr) 617 { case (HEADER_TYPE_ETH): return 0; 618 case (HEADER_TYPE_LLC_SNAP): return 1; 619 case (HEADER_TYPE_VLAN): return 2; 620 case (HEADER_TYPE_PPPoE): return 3; 621 case (HEADER_TYPE_PPP): return 3; 622 case (HEADER_TYPE_MPLS): return 4; 623 case (HEADER_TYPE_IPv4): return 5; 624 case (HEADER_TYPE_IPv6): return 6; 625 case (HEADER_TYPE_GRE): return 7; 626 case (HEADER_TYPE_MINENCAP): return 8; 627 case (HEADER_TYPE_USER_DEFINED_L3): return 9; 628 case (HEADER_TYPE_TCP): return 10; 629 case (HEADER_TYPE_UDP): return 11; 630 case (HEADER_TYPE_IPSEC_AH): 631 case (HEADER_TYPE_IPSEC_ESP): return 12; 632 case (HEADER_TYPE_SCTP): return 13; 633 case (HEADER_TYPE_DCCP): return 14; 634 case (HEADER_TYPE_USER_DEFINED_L4): return 15; 635 case (HEADER_TYPE_USER_DEFINED_SHIM1): 636 case (HEADER_TYPE_USER_DEFINED_SHIM2): 637 case (HEADER_TYPE_MACSEC): return NO_HDR_NUM; 638 default: 639 return ILLEGAL_HDR_NUM; 640 } 641 } 642 643 #define FM_PCD_MAX_NUM_OF_OPTIONS(clsPlanEntries) ((clsPlanEntries==256)? 8:((clsPlanEntries==128)? 7: ((clsPlanEntries==64)? 6: ((clsPlanEntries==32)? 5:0)))) 644 645 646 /**************************************************************************//** 647 @Description A structure for initializing a keygen classification plan group 648 *//***************************************************************************/ 649 typedef struct t_FmPcdKgInterModuleClsPlanGrpParams { 650 uint8_t netEnvId; /* IN */ 651 bool grpExists; /* OUT (unused in FmPcdKgBuildClsPlanGrp)*/ 652 uint8_t clsPlanGrpId; /* OUT */ 653 bool emptyClsPlanGrp; /* OUT */ 654 uint8_t numOfOptions; /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/ 655 protocolOpt_t options[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)]; 656 /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/ 657 uint32_t optVectors[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)]; 658 /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/ 659 } t_FmPcdKgInterModuleClsPlanGrpParams; 660 661 typedef struct t_FmPcdLock { 662 t_Handle h_Spinlock; 663 volatile bool flag; 664 t_List node; 665 } t_FmPcdLock; 666 #define FM_PCD_LOCK_OBJ(ptr) NCSW_LIST_OBJECT(ptr, t_FmPcdLock, node) 667 668 669 typedef t_Error (t_FmPortGetSetCcParamsCallback) (t_Handle h_FmPort, 670 t_FmPortGetSetCcParams *p_FmPortGetSetCcParams); 671 672 673 /***********************************************************************/ 674 /* Common API for FM-PCD module */ 675 /***********************************************************************/ 676 t_Handle FmPcdGetHcHandle(t_Handle h_FmPcd); 677 uint32_t FmPcdGetSwPrsOffset(t_Handle h_FmPcd, e_NetHeaderType hdr, uint8_t indexPerHdr); 678 uint32_t FmPcdGetLcv(t_Handle h_FmPcd, uint32_t netEnvId, uint8_t hdrNum); 679 uint32_t FmPcdGetMacsecLcv(t_Handle h_FmPcd, uint32_t netEnvId); 680 void FmPcdIncNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId); 681 void FmPcdDecNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId); 682 uint8_t FmPcdGetNetEnvId(t_Handle h_NetEnv); 683 void FmPcdPortRegister(t_Handle h_FmPcd, t_Handle h_FmPort, uint8_t hardwarePortId); 684 uint32_t FmPcdLock(t_Handle h_FmPcd); 685 void FmPcdUnlock(t_Handle h_FmPcd, uint32_t intFlags); 686 bool FmPcdNetEnvIsHdrExist(t_Handle h_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr); 687 t_Error FmPcdFragHcScratchPoolInit(t_Handle h_FmPcd, uint8_t scratchBpid); 688 t_Error FmPcdRegisterReassmPort(t_Handle h_FmPcd, t_Handle h_IpReasmCommonPramTbl); 689 t_Error FmPcdUnregisterReassmPort(t_Handle h_FmPcd, t_Handle h_IpReasmCommonPramTbl); 690 bool FmPcdIsAdvancedOffloadSupported(t_Handle h_FmPcd); 691 bool FmPcdLockTryLockAll(t_Handle h_FmPcd); 692 void FmPcdLockUnlockAll(t_Handle h_FmPcd); 693 t_Error FmPcdHcSync(t_Handle h_FmPcd); 694 t_Handle FmGetPcd(t_Handle h_Fm); 695 /***********************************************************************/ 696 /* Common API for FM-PCD KG module */ 697 /***********************************************************************/ 698 uint8_t FmPcdKgGetClsPlanGrpBase(t_Handle h_FmPcd, uint8_t clsPlanGrp); 699 uint16_t FmPcdKgGetClsPlanGrpSize(t_Handle h_FmPcd, uint8_t clsPlanGrp); 700 t_Error FmPcdKgBuildClsPlanGrp(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_Grp, t_FmPcdKgInterModuleClsPlanSet *p_ClsPlanSet); 701 702 uint8_t FmPcdKgGetSchemeId(t_Handle h_Scheme); 703 #if (DPAA_VERSION >= 11) 704 bool FmPcdKgGetVspe(t_Handle h_Scheme); 705 #endif /* (DPAA_VERSION >= 11) */ 706 uint8_t FmPcdKgGetRelativeSchemeId(t_Handle h_FmPcd, uint8_t schemeId); 707 void FmPcdKgDestroyClsPlanGrp(t_Handle h_FmPcd, uint8_t grpId); 708 t_Error FmPcdKgCheckInvalidateSchemeSw(t_Handle h_Scheme); 709 t_Error FmPcdKgBuildBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_BindPortToSchemes, uint32_t *p_SpReg, bool add); 710 bool FmPcdKgHwSchemeIsValid(uint32_t schemeModeReg); 711 uint32_t FmPcdKgBuildWriteSchemeActionReg(uint8_t schemeId, bool updateCounter); 712 uint32_t FmPcdKgBuildReadSchemeActionReg(uint8_t schemeId); 713 uint32_t FmPcdKgBuildWriteClsPlanBlockActionReg(uint8_t grpId); 714 uint32_t FmPcdKgBuildWritePortSchemeBindActionReg(uint8_t hardwarePortId); 715 uint32_t FmPcdKgBuildReadPortSchemeBindActionReg(uint8_t hardwarePortId); 716 uint32_t FmPcdKgBuildWritePortClsPlanBindActionReg(uint8_t hardwarePortId); 717 bool FmPcdKgIsSchemeValidSw(t_Handle h_Scheme); 718 719 t_Error FmPcdKgBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_SchemeBind); 720 t_Error FmPcdKgUnbindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_SchemeBind); 721 uint32_t FmPcdKgGetRequiredAction(t_Handle h_FmPcd, uint8_t schemeId); 722 uint32_t FmPcdKgGetRequiredActionFlag(t_Handle h_FmPcd, uint8_t schemeId); 723 e_FmPcdDoneAction FmPcdKgGetDoneAction(t_Handle h_FmPcd, uint8_t schemeId); 724 e_FmPcdEngine FmPcdKgGetNextEngine(t_Handle h_FmPcd, uint8_t schemeId); 725 void FmPcdKgUpdateRequiredAction(t_Handle h_Scheme, uint32_t requiredAction); 726 bool FmPcdKgIsDirectPlcr(t_Handle h_FmPcd, uint8_t schemeId); 727 bool FmPcdKgIsDistrOnPlcrProfile(t_Handle h_FmPcd, uint8_t schemeId); 728 uint16_t FmPcdKgGetRelativeProfileId(t_Handle h_FmPcd, uint8_t schemeId); 729 t_Handle FmPcdKgGetSchemeHandle(t_Handle h_FmPcd, uint8_t relativeSchemeId); 730 bool FmPcdKgIsSchemeHasOwners(t_Handle h_Scheme); 731 t_Error FmPcdKgCcGetSetParams(t_Handle h_FmPcd, t_Handle h_Scheme, uint32_t requiredAction, uint32_t value); 732 t_Error FmPcdKgSetOrBindToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t netEnvId, protocolOpt_t *p_OptArray, uint8_t *p_ClsPlanGrpId, bool *p_IsEmptyClsPlanGrp); 733 t_Error FmPcdKgDeleteOrUnbindPortToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t clsPlanGrpId); 734 735 /***********************************************************************/ 736 /* Common API for FM-PCD parser module */ 737 /***********************************************************************/ 738 t_Error FmPcdPrsIncludePortInStatistics(t_Handle p_FmPcd, uint8_t hardwarePortId, bool include); 739 740 /***********************************************************************/ 741 /* Common API for FM-PCD policer module */ 742 /***********************************************************************/ 743 t_Error FmPcdPlcrAllocProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId, uint16_t numOfProfiles); 744 t_Error FmPcdPlcrFreeProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId); 745 bool FmPcdPlcrIsProfileValid(t_Handle h_FmPcd, uint16_t absoluteProfileId); 746 uint16_t FmPcdPlcrGetPortProfilesBase(t_Handle h_FmPcd, uint8_t hardwarePortId); 747 uint16_t FmPcdPlcrGetPortNumOfProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId); 748 uint32_t FmPcdPlcrBuildWritePlcrActionRegs(uint16_t absoluteProfileId); 749 uint32_t FmPcdPlcrBuildCounterProfileReg(e_FmPcdPlcrProfileCounters counter); 750 uint32_t FmPcdPlcrBuildWritePlcrActionReg(uint16_t absoluteProfileId); 751 uint32_t FmPcdPlcrBuildReadPlcrActionReg(uint16_t absoluteProfileId); 752 uint16_t FmPcdPlcrProfileGetAbsoluteId(t_Handle h_Profile); 753 t_Error FmPcdPlcrGetAbsoluteIdByProfileParams(t_Handle h_FmPcd, 754 e_FmPcdProfileTypeSelection profileType, 755 t_Handle h_FmPort, 756 uint16_t relativeProfile, 757 uint16_t *p_AbsoluteId); 758 void FmPcdPlcrInvalidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId); 759 void FmPcdPlcrValidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId); 760 bool FmPcdPlcrHwProfileIsValid(uint32_t profileModeReg); 761 uint32_t FmPcdPlcrGetRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId); 762 uint32_t FmPcdPlcrGetRequiredActionFlag(t_Handle h_FmPcd, uint16_t absoluteProfileId); 763 uint32_t FmPcdPlcrBuildNiaProfileReg(bool green, bool yellow, bool red); 764 void FmPcdPlcrUpdateRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId, uint32_t requiredAction); 765 t_Error FmPcdPlcrCcGetSetParams(t_Handle h_FmPcd, uint16_t profileIndx,uint32_t requiredAction); 766 767 /***********************************************************************/ 768 /* Common API for FM-PCD CC module */ 769 /***********************************************************************/ 770 uint8_t FmPcdCcGetParseCode(t_Handle h_CcNode); 771 uint8_t FmPcdCcGetOffset(t_Handle h_CcNode); 772 t_Error FmPcdCcRemoveKey(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint16_t keyIndex); 773 t_Error FmPcdCcAddKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint16_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPCdCcKeyParams); 774 t_Error FmPcdCcModifyKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint16_t keyIndex, uint8_t keySize, uint8_t *p_Key, uint8_t *p_Mask); 775 t_Error FmPcdCcModifyKeyAndNextEngine(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint16_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPcdCcKeyParams); 776 t_Error FmPcdCcModifyMissNextEngineParamNode(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams); 777 t_Error FmPcdCcModifyNextEngineParamTree(t_Handle h_FmPcd, t_Handle h_FmPcdCcTree, uint8_t grpId, uint8_t index, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams); 778 uint32_t FmPcdCcGetNodeAddrOffsetFromNodeInfo(t_Handle h_FmPcd, t_Handle h_Pointer); 779 t_Handle FmPcdCcTreeGetSavedManipParams(t_Handle h_FmTree); 780 void FmPcdCcTreeSetSavedManipParams(t_Handle h_FmTree, t_Handle h_SavedManipParams); 781 t_Error FmPcdCcTreeAddIPR(t_Handle h_FmPcd, t_Handle h_FmTree, t_Handle h_NetEnv, t_Handle h_ReassemblyManip, bool schemes); 782 t_Error FmPcdCcTreeAddCPR(t_Handle h_FmPcd, t_Handle h_FmTree, t_Handle h_NetEnv, t_Handle h_ReassemblyManip, bool schemes); 783 t_Error FmPcdCcBindTree(t_Handle h_FmPcd, t_Handle h_PcdParams, t_Handle h_CcTree, uint32_t *p_Offset,t_Handle h_FmPort); 784 t_Error FmPcdCcUnbindTree(t_Handle h_FmPcd, t_Handle h_CcTree); 785 786 /***********************************************************************/ 787 /* Common API for FM-PCD Manip module */ 788 /***********************************************************************/ 789 t_Error FmPcdManipUpdate(t_Handle h_FmPcd, t_Handle h_PcdParams, t_Handle h_FmPort, t_Handle h_Manip, t_Handle h_Ad, bool validate, int level, t_Handle h_FmTree, bool modify); 790 791 /***********************************************************************/ 792 /* Common API for FM-Port module */ 793 /***********************************************************************/ 794 #if (DPAA_VERSION >= 11) 795 typedef enum e_FmPortGprFuncType 796 { 797 e_FM_PORT_GPR_EMPTY = 0, 798 e_FM_PORT_GPR_MURAM_PAGE 799 } e_FmPortGprFuncType; 800 801 t_Error FmPortSetGprFunc(t_Handle h_FmPort, e_FmPortGprFuncType gprFunc, void **p_Value); 802 #endif /* DPAA_VERSION >= 11) */ 803 t_Error FmGetSetParams(t_Handle h_Fm, t_FmGetSetParams *p_FmGetSetParams); 804 t_Error FmPortGetSetCcParams(t_Handle h_FmPort, t_FmPortGetSetCcParams *p_FmPortGetSetCcParams); 805 uint8_t FmPortGetNetEnvId(t_Handle h_FmPort); 806 uint8_t FmPortGetHardwarePortId(t_Handle h_FmPort); 807 uint32_t FmPortGetPcdEngines(t_Handle h_FmPort); 808 void FmPortPcdKgSwUnbindClsPlanGrp (t_Handle h_FmPort); 809 810 811 #if (DPAA_VERSION >= 11) 812 t_Error FmPcdFrmReplicUpdate(t_Handle h_FmPcd, t_Handle h_FmPort, t_Handle h_FrmReplic); 813 #endif /* (DPAA_VERSION >= 11) */ 814 815 /**************************************************************************//** 816 @Function FmRegisterIntr 817 818 @Description Used to register an inter-module event handler to be processed by FM 819 820 @Param[in] h_Fm A handle to an FM Module. 821 @Param[in] mod The module that causes the event 822 @Param[in] modId Module id - if more than 1 instansiation of this 823 mode exists,0 otherwise. 824 @Param[in] intrType Interrupt type (error/normal) selection. 825 @Param[in] f_Isr The interrupt service routine. 826 @Param[in] h_Arg Argument to be passed to f_Isr. 827 828 @Return None. 829 *//***************************************************************************/ 830 void FmRegisterIntr(t_Handle h_Fm, 831 e_FmEventModules mod, 832 uint8_t modId, 833 e_FmIntrType intrType, 834 void (*f_Isr) (t_Handle h_Arg), 835 t_Handle h_Arg); 836 837 /**************************************************************************//** 838 @Function FmUnregisterIntr 839 840 @Description Used to un-register an inter-module event handler that was processed by FM 841 842 @Param[in] h_Fm A handle to an FM Module. 843 @Param[in] mod The module that causes the event 844 @Param[in] modId Module id - if more than 1 instansiation of this 845 mode exists,0 otherwise. 846 @Param[in] intrType Interrupt type (error/normal) selection. 847 848 @Return None. 849 *//***************************************************************************/ 850 void FmUnregisterIntr(t_Handle h_Fm, 851 e_FmEventModules mod, 852 uint8_t modId, 853 e_FmIntrType intrType); 854 855 /**************************************************************************//** 856 @Function FmRegisterFmCtlIntr 857 858 @Description Used to register to one of the fmCtl events in the FM module 859 860 @Param[in] h_Fm A handle to an FM Module. 861 @Param[in] eventRegId FmCtl event id (0-7). 862 @Param[in] f_Isr The interrupt service routine. 863 864 @Return E_OK on success; Error code otherwise. 865 866 @Cautions Allowed only following FM_Init(). 867 *//***************************************************************************/ 868 void FmRegisterFmCtlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event)); 869 870 871 /**************************************************************************//** 872 @Description enum for defining MAC types 873 *//***************************************************************************/ 874 typedef enum e_FmMacType { 875 e_FM_MAC_10G = 0, /**< 10G MAC */ 876 e_FM_MAC_1G /**< 1G MAC */ 877 } e_FmMacType; 878 879 /**************************************************************************//** 880 @Description Structure for port-FM communication during FM_PORT_Init. 881 Fields commented 'IN' are passed by the port module to be used 882 by the FM module. 883 Fields commented 'OUT' will be filled by FM before returning to port. 884 Some fields are optional (depending on configuration) and 885 will be analized by the port and FM modules accordingly. 886 *//***************************************************************************/ 887 typedef struct t_FmInterModulePortInitParams { 888 uint8_t hardwarePortId; /**< IN. port Id */ 889 e_FmPortType portType; /**< IN. Port type */ 890 bool independentMode; /**< IN. TRUE if FM Port operates in independent mode */ 891 uint16_t liodnOffset; /**< IN. Port's requested resource */ 892 uint8_t numOfTasks; /**< IN. Port's requested resource */ 893 uint8_t numOfExtraTasks; /**< IN. Port's requested resource */ 894 uint8_t numOfOpenDmas; /**< IN. Port's requested resource */ 895 uint8_t numOfExtraOpenDmas; /**< IN. Port's requested resource */ 896 uint32_t sizeOfFifo; /**< IN. Port's requested resource */ 897 uint32_t extraSizeOfFifo; /**< IN. Port's requested resource */ 898 uint8_t deqPipelineDepth; /**< IN. Port's requested resource */ 899 uint16_t maxFrameLength; /**< IN. Port's max frame length. */ 900 uint16_t liodnBase; /**< IN. Irrelevant for P4080 rev 1. 901 LIODN base for this port, to be 902 used together with LIODN offset. */ 903 t_FmPhysAddr fmMuramPhysBaseAddr;/**< OUT. FM-MURAM physical address*/ 904 } t_FmInterModulePortInitParams; 905 906 /**************************************************************************//** 907 @Description Structure for port-FM communication during FM_PORT_Free. 908 *//***************************************************************************/ 909 typedef struct t_FmInterModulePortFreeParams { 910 uint8_t hardwarePortId; /**< IN. port Id */ 911 e_FmPortType portType; /**< IN. Port type */ 912 uint8_t deqPipelineDepth; /**< IN. Port's requested resource */ 913 } t_FmInterModulePortFreeParams; 914 915 /**************************************************************************//** 916 @Function FmGetPcdPrsBaseAddr 917 918 @Description Get the base address of the Parser from the FM module 919 920 @Param[in] h_Fm A handle to an FM Module. 921 922 @Return Base address. 923 *//***************************************************************************/ 924 uintptr_t FmGetPcdPrsBaseAddr(t_Handle h_Fm); 925 926 /**************************************************************************//** 927 @Function FmGetPcdKgBaseAddr 928 929 @Description Get the base address of the Keygen from the FM module 930 931 @Param[in] h_Fm A handle to an FM Module. 932 933 @Return Base address. 934 *//***************************************************************************/ 935 uintptr_t FmGetPcdKgBaseAddr(t_Handle h_Fm); 936 937 /**************************************************************************//** 938 @Function FmGetPcdPlcrBaseAddr 939 940 @Description Get the base address of the Policer from the FM module 941 942 @Param[in] h_Fm A handle to an FM Module. 943 944 @Return Base address. 945 *//***************************************************************************/ 946 uintptr_t FmGetPcdPlcrBaseAddr(t_Handle h_Fm); 947 948 /**************************************************************************//** 949 @Function FmGetMuramHandle 950 951 @Description Get the handle of the MURAM from the FM module 952 953 @Param[in] h_Fm A handle to an FM Module. 954 955 @Return MURAM module handle. 956 *//***************************************************************************/ 957 t_Handle FmGetMuramHandle(t_Handle h_Fm); 958 959 /**************************************************************************//** 960 @Function FmGetPhysicalMuramBase 961 962 @Description Get the physical base address of the MURAM from the FM module 963 964 @Param[in] h_Fm A handle to an FM Module. 965 @Param[in] fmPhysAddr Physical MURAM base 966 967 @Return Physical base address. 968 *//***************************************************************************/ 969 void FmGetPhysicalMuramBase(t_Handle h_Fm, t_FmPhysAddr *fmPhysAddr); 970 971 /**************************************************************************//** 972 @Function FmGetTimeStampScale 973 974 @Description Used internally by other modules in order to get the timeStamp 975 period as requested by the application. 976 977 This function returns bit number that is incremented every 1 usec. 978 To calculate timestamp period in nsec, use 979 1000 / (1 << FmGetTimeStampScale()). 980 981 @Param[in] h_Fm A handle to an FM Module. 982 983 @Return Bit that counts 1 usec. 984 985 @Cautions Allowed only following FM_Init(). 986 *//***************************************************************************/ 987 uint32_t FmGetTimeStampScale(t_Handle h_Fm); 988 989 /**************************************************************************//** 990 @Function FmResumeStalledPort 991 992 @Description Used internally by FM port to release a stalled port. 993 994 @Param[in] h_Fm A handle to an FM Module. 995 @Param[in] hardwarePortId HW port id. 996 997 @Return E_OK on success; Error code otherwise. 998 999 @Cautions Allowed only following FM_Init(). 1000 *//***************************************************************************/ 1001 t_Error FmResumeStalledPort(t_Handle h_Fm, uint8_t hardwarePortId); 1002 1003 /**************************************************************************//** 1004 @Function FmIsPortStalled 1005 1006 @Description Used internally by FM port to read the port's status. 1007 1008 @Param[in] h_Fm A handle to an FM Module. 1009 @Param[in] hardwarePortId HW port id. 1010 @Param[in] p_IsStalled A pointer to the boolean port stalled state 1011 1012 @Return E_OK on success; Error code otherwise. 1013 1014 @Cautions Allowed only following FM_Init(). 1015 *//***************************************************************************/ 1016 t_Error FmIsPortStalled(t_Handle h_Fm, uint8_t hardwarePortId, bool *p_IsStalled); 1017 1018 /**************************************************************************//** 1019 @Function FmResetMac 1020 1021 @Description Used by MAC driver to reset the MAC registers 1022 1023 @Param[in] h_Fm A handle to an FM Module. 1024 @Param[in] type MAC type. 1025 @Param[in] macId MAC id - according to type. 1026 1027 @Return E_OK on success; Error code otherwise. 1028 1029 @Cautions Allowed only following FM_Init(). 1030 *//***************************************************************************/ 1031 t_Error FmResetMac(t_Handle h_Fm, e_FmMacType type, uint8_t macId); 1032 1033 /**************************************************************************//** 1034 @Function FmGetClockFreq 1035 1036 @Description Used by MAC driver to get the FM clock frequency 1037 1038 @Param[in] h_Fm A handle to an FM Module. 1039 1040 @Return clock-freq on success; 0 otherwise. 1041 1042 @Cautions Allowed only following FM_Init(). 1043 *//***************************************************************************/ 1044 uint16_t FmGetClockFreq(t_Handle h_Fm); 1045 1046 /**************************************************************************//** 1047 @Function FmGetMacClockFreq 1048 1049 @Description Used by MAC driver to get the MAC clock frequency 1050 1051 @Param[in] h_Fm A handle to an FM Module. 1052 1053 @Return clock-freq on success; 0 otherwise. 1054 1055 @Cautions Allowed only following FM_Init(). 1056 *//***************************************************************************/ 1057 uint16_t FmGetMacClockFreq(t_Handle h_Fm); 1058 1059 /**************************************************************************//** 1060 @Function FmGetId 1061 1062 @Description Used by PCD driver to read rhe FM id 1063 1064 @Param[in] h_Fm A handle to an FM Module. 1065 1066 @Return E_OK on success; Error code otherwise. 1067 1068 @Cautions Allowed only following FM_Init(). 1069 *//***************************************************************************/ 1070 uint8_t FmGetId(t_Handle h_Fm); 1071 1072 /**************************************************************************//** 1073 @Function FmReset 1074 1075 @Description Used to reset the FM 1076 1077 @Param[in] h_Fm A handle to an FM Module. 1078 1079 @Return E_OK on success; Error code otherwise. 1080 *//***************************************************************************/ 1081 t_Error FmReset(t_Handle h_Fm); 1082 1083 /**************************************************************************//** 1084 @Function FmGetSetPortParams 1085 1086 @Description Used by FM-PORT driver to pass and receive parameters between 1087 PORT and FM modules. 1088 1089 @Param[in] h_Fm A handle to an FM Module. 1090 @Param[in,out] p_PortParams A structure of FM Port parameters. 1091 1092 @Return E_OK on success; Error code otherwise. 1093 1094 @Cautions Allowed only following FM_Init(). 1095 *//***************************************************************************/ 1096 t_Error FmGetSetPortParams(t_Handle h_Fm,t_FmInterModulePortInitParams *p_PortParams); 1097 1098 /**************************************************************************//** 1099 @Function FmFreePortParams 1100 1101 @Description Used by FM-PORT driver to free port's resources within the FM. 1102 1103 @Param[in] h_Fm A handle to an FM Module. 1104 @Param[in,out] p_PortParams A structure of FM Port parameters. 1105 1106 @Return None. 1107 1108 @Cautions Allowed only following FM_Init(). 1109 *//***************************************************************************/ 1110 void FmFreePortParams(t_Handle h_Fm,t_FmInterModulePortFreeParams *p_PortParams); 1111 1112 /**************************************************************************//** 1113 @Function FmSetNumOfRiscsPerPort 1114 1115 @Description Used by FM-PORT driver to pass parameter between 1116 PORT and FM modules for working with number of RISC.. 1117 1118 @Param[in] h_Fm A handle to an FM Module. 1119 @Param[in] hardwarePortId hardware port Id. 1120 @Param[in] numOfFmanCtrls number of Fman Controllers. 1121 @Param[in] orFmanCtrl Fman Controller for order restoration. 1122 1123 @Return None. 1124 1125 @Cautions Allowed only following FM_Init(). 1126 *//***************************************************************************/ 1127 t_Error FmSetNumOfRiscsPerPort(t_Handle h_Fm, uint8_t hardwarePortId, uint8_t numOfFmanCtrls, t_FmFmanCtrl orFmanCtrl); 1128 1129 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 1130 /**************************************************************************//* 1131 @Function FmDumpPortRegs 1132 1133 @Description Dumps FM port registers which are part of FM common registers 1134 1135 @Param[in] h_Fm A handle to an FM Module. 1136 @Param[in] hardwarePortId HW port id. 1137 1138 @Return E_OK on success; Error code otherwise. 1139 1140 @Cautions Allowed only FM_Init(). 1141 *//***************************************************************************/ 1142 t_Error FmDumpPortRegs(t_Handle h_Fm,uint8_t hardwarePortId); 1143 #endif /* (defined(DEBUG_ERRORS) && ... */ 1144 1145 void FmRegisterPcd(t_Handle h_Fm, t_Handle h_FmPcd); 1146 void FmUnregisterPcd(t_Handle h_Fm); 1147 t_Handle FmGetPcdHandle(t_Handle h_Fm); 1148 t_Error FmEnableRamsEcc(t_Handle h_Fm); 1149 t_Error FmDisableRamsEcc(t_Handle h_Fm); 1150 void FmGetRevision(t_Handle h_Fm, t_FmRevisionInfo *p_FmRevisionInfo); 1151 t_Error FmAllocFmanCtrlEventReg(t_Handle h_Fm, uint8_t *p_EventId); 1152 void FmFreeFmanCtrlEventReg(t_Handle h_Fm, uint8_t eventId); 1153 void FmSetFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId, uint32_t enableEvents); 1154 uint32_t FmGetFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId); 1155 void FmRegisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event), t_Handle h_Arg); 1156 void FmUnregisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId); 1157 t_Error FmSetMacMaxFrame(t_Handle h_Fm, e_FmMacType type, uint8_t macId, uint16_t mtu); 1158 bool FmIsMaster(t_Handle h_Fm); 1159 uint8_t FmGetGuestId(t_Handle h_Fm); 1160 uint16_t FmGetTnumAgingPeriod(t_Handle h_Fm); 1161 t_Error FmSetPortPreFetchConfiguration(t_Handle h_Fm, uint8_t portNum, bool preFetchConfigured); 1162 t_Error FmGetPortPreFetchConfiguration(t_Handle h_Fm, uint8_t portNum, bool *p_PortConfigured, bool *p_PreFetchConfigured); 1163 1164 1165 #ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 1166 t_Error Fm10GTxEccWorkaround(t_Handle h_Fm, uint8_t macId); 1167 #endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */ 1168 1169 void FmMuramClear(t_Handle h_FmMuram); 1170 t_Error FmSetNumOfOpenDmas(t_Handle h_Fm, 1171 uint8_t hardwarePortId, 1172 uint8_t *p_NumOfOpenDmas, 1173 uint8_t *p_NumOfExtraOpenDmas, 1174 bool initialConfig); 1175 t_Error FmSetNumOfTasks(t_Handle h_Fm, 1176 uint8_t hardwarePortId, 1177 uint8_t *p_NumOfTasks, 1178 uint8_t *p_NumOfExtraTasks, 1179 bool initialConfig); 1180 t_Error FmSetSizeOfFifo(t_Handle h_Fm, 1181 uint8_t hardwarePortId, 1182 uint32_t *p_SizeOfFifo, 1183 uint32_t *p_ExtraSizeOfFifo, 1184 bool initialConfig); 1185 1186 t_Error FmSetCongestionGroupPFCpriority(t_Handle h_Fm, 1187 uint32_t congestionGroupId, 1188 uint8_t priorityBitMap); 1189 1190 #if (DPAA_VERSION >= 11) 1191 t_Error FmVSPAllocForPort(t_Handle h_Fm, 1192 e_FmPortType portType, 1193 uint8_t portId, 1194 uint8_t numOfStorageProfiles); 1195 1196 t_Error FmVSPFreeForPort(t_Handle h_Fm, 1197 e_FmPortType portType, 1198 uint8_t portId); 1199 1200 t_Error FmVSPGetAbsoluteProfileId(t_Handle h_Fm, 1201 e_FmPortType portType, 1202 uint8_t portId, 1203 uint16_t relativeProfile, 1204 uint16_t *p_AbsoluteId); 1205 t_Error FmVSPCheckRelativeProfile(t_Handle h_Fm, 1206 e_FmPortType portType, 1207 uint8_t portId, 1208 uint16_t relativeProfile); 1209 1210 uintptr_t FmGetVSPBaseAddr(t_Handle h_Fm); 1211 #endif /* (DPAA_VERSION >= 11) */ 1212 1213 1214 #endif /* __FM_COMMON_H */ 1215