xref: /freebsd/sys/contrib/ncsw/Peripherals/FM/inc/fm_common.h (revision 8ef24a0d4b28fe230e20637f56869cc4148cd2ca)
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_common.h
35 
36  @Description   FM internal structures and definitions.
37 *//***************************************************************************/
38 #ifndef __FM_COMMON_H
39 #define __FM_COMMON_H
40 
41 #include "error_ext.h"
42 #include "std_ext.h"
43 #include "fm_pcd_ext.h"
44 #include "fm_port_ext.h"
45 
46 #define CLS_PLAN_NUM_PER_GRP                        8
47 
48 
49 #if defined(__MWERKS__) && !defined(__GNUC__)
50 #pragma pack(push,1)
51 #endif /* defined(__MWERKS__) && ... */
52 #define MEM_MAP_START
53 
54 /**************************************************************************//**
55  @Description   PCD KG scheme registers
56 *//***************************************************************************/
57 typedef _Packed struct t_FmPcdPlcrInterModuleProfileRegs {
58     volatile uint32_t fmpl_pemode;      /* 0x090 FMPL_PEMODE - FM Policer Profile Entry Mode*/
59     volatile uint32_t fmpl_pegnia;      /* 0x094 FMPL_PEGNIA - FM Policer Profile Entry GREEN Next Invoked Action*/
60     volatile uint32_t fmpl_peynia;      /* 0x098 FMPL_PEYNIA - FM Policer Profile Entry YELLOW Next Invoked Action*/
61     volatile uint32_t fmpl_pernia;      /* 0x09C FMPL_PERNIA - FM Policer Profile Entry RED Next Invoked Action*/
62     volatile uint32_t fmpl_pecir;       /* 0x0A0 FMPL_PECIR  - FM Policer Profile Entry Committed Information Rate*/
63     volatile uint32_t fmpl_pecbs;       /* 0x0A4 FMPL_PECBS  - FM Policer Profile Entry Committed Burst Size*/
64     volatile uint32_t fmpl_pepepir_eir; /* 0x0A8 FMPL_PEPIR_EIR - FM Policer Profile Entry Peak/Excess Information Rate*/
65     volatile uint32_t fmpl_pepbs_ebs;   /* 0x0AC FMPL_PEPBS_EBS - FM Policer Profile Entry Peak/Excess Information Rate*/
66     volatile uint32_t fmpl_pelts;       /* 0x0B0 FMPL_PELTS  - FM Policer Profile Entry Last TimeStamp*/
67     volatile uint32_t fmpl_pects;       /* 0x0B4 FMPL_PECTS  - FM Policer Profile Entry Committed Token Status*/
68     volatile uint32_t fmpl_pepts_ets;   /* 0x0B8 FMPL_PEPTS_ETS - FM Policer Profile Entry Peak/Excess Token Status*/
69     volatile uint32_t fmpl_pegpc;       /* 0x0BC FMPL_PEGPC  - FM Policer Profile Entry GREEN Packet Counter*/
70     volatile uint32_t fmpl_peypc;       /* 0x0C0 FMPL_PEYPC  - FM Policer Profile Entry YELLOW Packet Counter*/
71     volatile uint32_t fmpl_perpc;       /* 0x0C4 FMPL_PERPC  - FM Policer Profile Entry RED Packet Counter */
72     volatile uint32_t fmpl_perypc;      /* 0x0C8 FMPL_PERYPC - FM Policer Profile Entry Recolored YELLOW Packet Counter*/
73     volatile uint32_t fmpl_perrpc;      /* 0x0CC FMPL_PERRPC - FM Policer Profile Entry Recolored RED Packet Counter*/
74     volatile uint32_t fmpl_res1[12];    /* 0x0D0-0x0FF Reserved */
75 } _PackedType t_FmPcdPlcrInterModuleProfileRegs;
76 
77 /**************************************************************************//**
78  @Description   PCD KG scheme registers
79 *//***************************************************************************/
80 typedef _Packed struct t_FmPcdKgInterModuleSchemeRegs {
81     volatile uint32_t kgse_mode;    /**< MODE */
82     volatile uint32_t kgse_ekfc;    /**< Extract Known Fields Command */
83     volatile uint32_t kgse_ekdv;    /**< Extract Known Default Value */
84     volatile uint32_t kgse_bmch;    /**< Bit Mask Command High */
85     volatile uint32_t kgse_bmcl;    /**< Bit Mask Command Low */
86     volatile uint32_t kgse_fqb;     /**< Frame Queue Base */
87     volatile uint32_t kgse_hc;      /**< Hash Command */
88     volatile uint32_t kgse_ppc;     /**< Policer Profile Command */
89     volatile uint32_t kgse_gec[FM_PCD_KG_NUM_OF_GENERIC_REGS];
90                                    /**< Generic Extract Command */
91     volatile uint32_t kgse_spc;     /**< KeyGen Scheme Entry Statistic Packet Counter */
92     volatile uint32_t kgse_dv0;     /**< KeyGen Scheme Entry Default Value 0 */
93     volatile uint32_t kgse_dv1;     /**< KeyGen Scheme Entry Default Value 1 */
94     volatile uint32_t kgse_ccbs;    /**< KeyGen Scheme Entry Coarse Classification Bit*/
95     volatile uint32_t kgse_mv;      /**< KeyGen Scheme Entry Match vector */
96 } _PackedType t_FmPcdKgInterModuleSchemeRegs;
97 
98 typedef _Packed struct t_FmPcdCcCapwapReassmTimeoutParams {
99     volatile uint32_t                       portIdAndCapwapReassmTbl;
100     volatile uint32_t                       fqidForTimeOutFrames;
101     volatile uint32_t                       timeoutRequestTime;
102 }_PackedType t_FmPcdCcCapwapReassmTimeoutParams;
103 
104 
105 
106 #define MEM_MAP_END
107 #if defined(__MWERKS__) && !defined(__GNUC__)
108 #pragma pack(pop)
109 #endif /* defined(__MWERKS__) && ... */
110 
111 
112 typedef struct {
113     uint8_t             baseEntry;
114     uint16_t            numOfClsPlanEntries;
115     uint32_t            vectors[FM_PCD_MAX_NUM_OF_CLS_PLANS];
116 } t_FmPcdKgInterModuleClsPlanSet;
117 
118 /**************************************************************************//**
119  @Description   Structure for binding a port to keygen schemes.
120 *//***************************************************************************/
121 typedef struct t_FmPcdKgInterModuleBindPortToSchemes {
122     uint8_t     hardwarePortId;
123     uint8_t     netEnvId;
124     bool        useClsPlan;                 /**< TRUE if this port uses the clsPlan mechanism */
125     uint8_t     numOfSchemes;
126     uint8_t     schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
127 } t_FmPcdKgInterModuleBindPortToSchemes;
128 
129 typedef struct {
130     uint32_t nextCcNodeInfo;
131     t_List   node;
132 } t_CcNodeInfo;
133 
134 typedef struct
135 {
136     t_Handle    h_CcNode;
137     uint16_t    index;
138     t_List      node;
139 }t_CcNodeInformation;
140 #define CC_NODE_F_OBJECT(ptr)  LIST_OBJECT(ptr, t_CcNodeInformation, node)
141 
142 typedef struct
143 {
144     t_Handle h_Manip;
145     t_List   node;
146 }t_ManipInfo;
147 #define CC_NEXT_NODE_F_OBJECT(ptr)  LIST_OBJECT(ptr, t_CcNodeInfo, node)
148 
149 typedef struct {
150     uint32_t    type;
151     uint8_t     prOffset;
152 
153     uint16_t    dataOffset;
154     uint8_t     poolIndex;
155 
156     uint8_t     poolIdForManip;
157     uint8_t     numOfTasks;
158 
159     uint8_t     hardwarePortId;
160 
161 } t_GetCcParams;
162 
163 typedef struct {
164     uint32_t type;
165     int      psoSize;
166     uint32_t nia;
167 
168 } t_SetCcParams;
169 
170 typedef struct {
171     t_GetCcParams getCcParams;
172     t_SetCcParams setCcParams;
173 } t_FmPortGetSetCcParams;
174 
175 
176 static __inline__ bool TRY_LOCK(t_Handle h_Spinlock, volatile bool *p_Flag)
177 {
178     uint32_t intFlags;
179     if (h_Spinlock)
180         intFlags = XX_LockIntrSpinlock(h_Spinlock);
181     else
182         intFlags = XX_DisableAllIntr();
183     if (*p_Flag)
184     {
185         if (h_Spinlock)
186             XX_UnlockIntrSpinlock(h_Spinlock, intFlags);
187         else
188             XX_RestoreAllIntr(intFlags);
189         return FALSE;
190     }
191     *p_Flag = TRUE;
192     if (h_Spinlock)
193         XX_UnlockIntrSpinlock(h_Spinlock, intFlags);
194     else
195         XX_RestoreAllIntr(intFlags);
196     return TRUE;
197 }
198 
199 #define RELEASE_LOCK(_flag) _flag = FALSE;
200 
201 /**************************************************************************//**
202  @Collection   Defines used for manipulation CC and BMI
203  @{
204 *//***************************************************************************/
205 #define INTERNAL_CONTEXT_OFFSET                 0x80000000
206 #define OFFSET_OF_PR                            0x40000000
207 #define BUFFER_POOL_ID_FOR_MANIP                0x20000000
208 #define NUM_OF_TASKS                            0x10000000
209 #define OFFSET_OF_DATA                          0x08000000
210 #define HW_PORT_ID                              0x04000000
211 
212 
213 #define UPDATE_NIA_PNEN                         0x80000000
214 #define UPDATE_PSO                              0x40000000
215 #define UPDATE_NIA_PNDN                         0x20000000
216 #define UPDATE_FMFP_PRC_WITH_ONE_RISC_ONLY      0x10000000
217 /* @} */
218 
219 /**************************************************************************//**
220  @Collection   Defines used for manipulation CC and CC
221  @{
222 *//***************************************************************************/
223 #define UPDATE_NIA_ENQ_WITHOUT_DMA              0x80000000
224 #define UPDATE_CC_WITH_TREE                     0x40000000
225 #define UPDATE_CC_WITH_DELETE_TREE              0x20000000
226 /* @} */
227 
228 /**************************************************************************//**
229  @Collection   Defines used for enabling/disabling FM interrupts
230  @{
231 *//***************************************************************************/
232 typedef uint32_t t_FmBlockErrIntrEnable;
233 
234 #define ERR_INTR_EN_DMA         0x00010000
235 #define ERR_INTR_EN_FPM         0x80000000
236 #define ERR_INTR_EN_BMI         0x00800000
237 #define ERR_INTR_EN_QMI         0x00400000
238 #define ERR_INTR_EN_PRS         0x00200000
239 #define ERR_INTR_EN_KG          0x00100000
240 #define ERR_INTR_EN_PLCR        0x00080000
241 #define ERR_INTR_EN_MURAM       0x00040000
242 #define ERR_INTR_EN_IRAM        0x00020000
243 #define ERR_INTR_EN_10G_MAC0    0x00008000
244 #define ERR_INTR_EN_1G_MAC0     0x00004000
245 #define ERR_INTR_EN_1G_MAC1     0x00002000
246 #define ERR_INTR_EN_1G_MAC2     0x00001000
247 #define ERR_INTR_EN_1G_MAC3     0x00000800
248 #define ERR_INTR_EN_1G_MAC4     0x00000400
249 #define ERR_INTR_EN_MACSEC_MAC0 0x00000200
250 
251 
252 typedef uint32_t t_FmBlockIntrEnable;
253 
254 #define INTR_EN_BMI             0x80000000
255 #define INTR_EN_QMI             0x40000000
256 #define INTR_EN_PRS             0x20000000
257 #define INTR_EN_KG              0x10000000
258 #define INTR_EN_PLCR            0x08000000
259 #define INTR_EN_1G_MAC0_TMR     0x00080000
260 #define INTR_EN_1G_MAC1_TMR     0x00040000
261 #define INTR_EN_1G_MAC2_TMR     0x00020000
262 #define INTR_EN_1G_MAC3_TMR     0x00010000
263 #define INTR_EN_1G_MAC4_TMR     0x00000040
264 #define INTR_EN_REV0            0x00008000
265 #define INTR_EN_REV1            0x00004000
266 #define INTR_EN_REV2            0x00002000
267 #define INTR_EN_REV3            0x00001000
268 #define INTR_EN_BRK             0x00000080
269 #define INTR_EN_TMR             0x01000000
270 #define INTR_EN_MACSEC_MAC0     0x00000001
271 /* @} */
272 
273 #define FM_MAX_NUM_OF_PORTS     (FM_MAX_NUM_OF_OH_PORTS +     \
274                                  FM_MAX_NUM_OF_1G_RX_PORTS +  \
275                                  FM_MAX_NUM_OF_10G_RX_PORTS + \
276                                  FM_MAX_NUM_OF_1G_TX_PORTS +  \
277                                  FM_MAX_NUM_OF_10G_TX_PORTS)
278 
279 #define MODULE_NAME_SIZE        30
280 #define DUMMY_PORT_ID           0
281 
282 #define FM_LIODN_OFFSET_MASK    0x3FF
283 
284 /**************************************************************************//**
285   @Description       NIA Description
286 *//***************************************************************************/
287 #define NIA_ORDER_RESTOR            0x00800000
288 #define NIA_ENG_FM_CTL              0x00000000
289 #define NIA_ENG_PRS                 0x00440000
290 #define NIA_ENG_KG                  0x00480000
291 #define NIA_ENG_PLCR                0x004C0000
292 #define NIA_ENG_BMI                 0x00500000
293 #define NIA_ENG_QMI_ENQ             0x00540000
294 #define NIA_ENG_QMI_DEQ             0x00580000
295 #define NIA_ENG_MASK                0x007C0000
296 
297 #define NIA_FM_CTL_AC_CC                        0x00000006
298 #define NIA_FM_CTL_AC_HC                        0x0000000C
299 #define NIA_FM_CTL_AC_IND_MODE_TX               0x00000008
300 #define NIA_FM_CTL_AC_IND_MODE_RX               0x0000000A
301 #define NIA_FM_CTL_AC_FRAG                      0x0000000e
302 #define NIA_FM_CTL_AC_PRE_FETCH                 0x00000010
303 #define NIA_FM_CTL_AC_POST_FETCH_PCD            0x00000012
304 #define NIA_FM_CTL_AC_POST_FETCH_PCD_UDP_LEN    0x00000018
305 #define NIA_FM_CTL_AC_POST_FETCH_NO_PCD         0x00000012
306 #define NIA_FM_CTL_AC_FRAG_CHECK                0x00000014
307 #define NIA_FM_CTL_AC_MASK                      0x0000001f
308 
309 #define NIA_BMI_AC_ENQ_FRAME        0x00000002
310 #define NIA_BMI_AC_TX_RELEASE       0x000002C0
311 #define NIA_BMI_AC_RELEASE          0x000000C0
312 #define NIA_BMI_AC_DISCARD          0x000000C1
313 #define NIA_BMI_AC_TX               0x00000274
314 #define NIA_BMI_AC_FETCH            0x00000208
315 #define NIA_BMI_AC_MASK             0x000003FF
316 
317 #define NIA_KG_DIRECT               0x00000100
318 #define NIA_KG_CC_EN                0x00000200
319 #define NIA_PLCR_ABSOLUTE           0x00008000
320 
321 #define NIA_BMI_AC_ENQ_FRAME_WITHOUT_DMA    0x00000202
322 
323 /**************************************************************************//**
324  @Description       Port Id defines
325 *//***************************************************************************/
326 #define BASE_OH_PORTID              1
327 #define BASE_1G_RX_PORTID           8
328 #define BASE_10G_RX_PORTID          0x10
329 #define BASE_1G_TX_PORTID           0x28
330 #define BASE_10G_TX_PORTID          0x30
331 
332 #define FM_PCD_PORT_OH_BASE_INDX        0
333 #define FM_PCD_PORT_1G_RX_BASE_INDX     (FM_PCD_PORT_OH_BASE_INDX+FM_MAX_NUM_OF_OH_PORTS)
334 #define FM_PCD_PORT_10G_RX_BASE_INDX    (FM_PCD_PORT_1G_RX_BASE_INDX+FM_MAX_NUM_OF_1G_RX_PORTS)
335 #define FM_PCD_PORT_1G_TX_BASE_INDX     (FM_PCD_PORT_10G_RX_BASE_INDX+FM_MAX_NUM_OF_10G_RX_PORTS)
336 #define FM_PCD_PORT_10G_TX_BASE_INDX    (FM_PCD_PORT_1G_TX_BASE_INDX+FM_MAX_NUM_OF_1G_TX_PORTS)
337 
338 #if (FM_MAX_NUM_OF_OH_PORTS > 0)
339 #define CHECK_PORT_ID_OH_PORTS(_relativePortId)                     \
340     if ((_relativePortId) >= FM_MAX_NUM_OF_OH_PORTS)                \
341         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id"))
342 #else
343 #define CHECK_PORT_ID_OH_PORTS(_relativePortId)                     \
344         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id"))
345 #endif
346 #if (FM_MAX_NUM_OF_1G_RX_PORTS > 0)
347 #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId)                     \
348     if ((_relativePortId) >= FM_MAX_NUM_OF_1G_RX_PORTS)                \
349         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id"))
350 #else
351 #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId)                     \
352         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id"))
353 #endif
354 #if (FM_MAX_NUM_OF_10G_RX_PORTS > 0)
355 #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId)                     \
356     if ((_relativePortId) >= FM_MAX_NUM_OF_10G_RX_PORTS)                \
357         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id"))
358 #else
359 #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId)                     \
360         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id"))
361 #endif
362 #if (FM_MAX_NUM_OF_1G_TX_PORTS > 0)
363 #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId)                     \
364     if ((_relativePortId) >= FM_MAX_NUM_OF_1G_TX_PORTS)                \
365         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id"))
366 #else
367 #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId)                     \
368         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id"))
369 #endif
370 #if (FM_MAX_NUM_OF_10G_TX_PORTS > 0)
371 #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId)                     \
372     if ((_relativePortId) >= FM_MAX_NUM_OF_10G_TX_PORTS)                \
373         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id"))
374 #else
375 #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId)                     \
376         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id"))
377 #endif
378 
379 
380 #define SW_PORT_ID_TO_HW_PORT_ID(_port, _type, _relativePortId)         \
381 switch(_type) {                                                         \
382     case(e_FM_PORT_TYPE_OH_OFFLINE_PARSING):                            \
383     case(e_FM_PORT_TYPE_OH_HOST_COMMAND):                               \
384         CHECK_PORT_ID_OH_PORTS(_relativePortId);                        \
385         _port = (uint8_t)(BASE_OH_PORTID + (_relativePortId));          \
386         break;                                                          \
387     case(e_FM_PORT_TYPE_RX):                                            \
388         CHECK_PORT_ID_1G_RX_PORTS(_relativePortId);                     \
389         _port = (uint8_t)(BASE_1G_RX_PORTID + (_relativePortId));       \
390         break;                                                          \
391     case(e_FM_PORT_TYPE_RX_10G):                                        \
392         CHECK_PORT_ID_10G_RX_PORTS(_relativePortId);                    \
393         _port = (uint8_t)(BASE_10G_RX_PORTID + (_relativePortId));      \
394         break;                                                          \
395     case(e_FM_PORT_TYPE_TX):                                            \
396         CHECK_PORT_ID_1G_TX_PORTS(_relativePortId);                     \
397         _port = (uint8_t)(BASE_1G_TX_PORTID + (_relativePortId));       \
398         break;                                                          \
399     case(e_FM_PORT_TYPE_TX_10G):                                        \
400         CHECK_PORT_ID_10G_TX_PORTS(_relativePortId);                    \
401         _port = (uint8_t)(BASE_10G_TX_PORTID + (_relativePortId));      \
402         break;                                                          \
403     default:                                                            \
404         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal port type"));    \
405         _port = 0;                                                      \
406         break;                                                          \
407 }
408 
409 #define HW_PORT_ID_TO_SW_PORT_ID(_relativePortId, hardwarePortId)                   \
410 {   if (((hardwarePortId) >= BASE_OH_PORTID) &&                                     \
411         ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS))                 \
412         _relativePortId = (uint8_t)((hardwarePortId)-BASE_OH_PORTID);               \
413     else if (((hardwarePortId) >= BASE_10G_TX_PORTID) &&                            \
414              ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS))    \
415         _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID);           \
416     else if (((hardwarePortId) >= BASE_1G_TX_PORTID) &&                             \
417              ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS))      \
418         _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID);            \
419     else if (((hardwarePortId) >= BASE_10G_RX_PORTID) &&                            \
420              ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS))    \
421         _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID);           \
422     else if (((hardwarePortId) >= BASE_1G_RX_PORTID) &&                             \
423              ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS))      \
424         _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID);            \
425     else {                                                                          \
426         _relativePortId = (uint8_t)DUMMY_PORT_ID;                                   \
427         ASSERT_COND(TRUE);                                                          \
428     }                                                                               \
429 }
430 
431 #define HW_PORT_ID_TO_SW_PORT_INDX(swPortIndex, hardwarePortId)                                             \
432 do {                                                                                                        \
433     if (((hardwarePortId) >= BASE_OH_PORTID) && ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS)) \
434         swPortIndex = (uint8_t)((hardwarePortId)-BASE_OH_PORTID+FM_PCD_PORT_OH_BASE_INDX);                  \
435     else if (((hardwarePortId) >= BASE_1G_RX_PORTID) &&                                                     \
436              ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS))                              \
437         swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID+FM_PCD_PORT_1G_RX_BASE_INDX);            \
438     else if (((hardwarePortId) >= BASE_10G_RX_PORTID) &&                                                    \
439              ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS))                            \
440         swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID+FM_PCD_PORT_10G_RX_BASE_INDX);          \
441     else if (((hardwarePortId) >= BASE_1G_TX_PORTID) &&                                                     \
442              ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS))                              \
443         swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID+FM_PCD_PORT_1G_TX_BASE_INDX);            \
444     else if (((hardwarePortId) >= BASE_10G_TX_PORTID) &&                                                    \
445              ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS))                            \
446         swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID+FM_PCD_PORT_10G_TX_BASE_INDX);          \
447     else ASSERT_COND(FALSE);                                                                                \
448 } while (0)
449 
450 #define SW_PORT_INDX_TO_HW_PORT_ID(hardwarePortId, swPortIndex)                                                 \
451 do {                                                                                                            \
452     if (((swPortIndex) >= FM_PCD_PORT_OH_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_1G_RX_BASE_INDX))           \
453         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_OH_BASE_INDX+BASE_OH_PORTID);                      \
454     else if (((swPortIndex) >= FM_PCD_PORT_1G_RX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_RX_BASE_INDX))  \
455         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_RX_BASE_INDX+BASE_1G_RX_PORTID);                \
456     else if (((swPortIndex) >= FM_PCD_PORT_10G_RX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS))          \
457         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_RX_BASE_INDX+BASE_10G_RX_PORTID);              \
458     else if (((swPortIndex) >= FM_PCD_PORT_1G_TX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_TX_BASE_INDX))  \
459         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_TX_BASE_INDX+BASE_1G_TX_PORTID);                \
460     else if (((swPortIndex) >= FM_PCD_PORT_10G_TX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS))          \
461         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_TX_BASE_INDX+BASE_10G_TX_PORTID);              \
462     else ASSERT_COND(FALSE);                                                                                    \
463 } while (0)
464 
465 #define BMI_FIFO_UNITS                      0x100
466 
467 typedef struct {
468     void        (*f_Isr) (t_Handle h_Arg);
469     t_Handle    h_SrcHandle;
470     uint8_t     guestId;
471 } t_FmIntrSrc;
472 
473 #define ILLEGAL_HDR_NUM                     0xFF
474 #define NO_HDR_NUM                          FM_PCD_PRS_NUM_OF_HDRS
475 
476 #define IS_PRIVATE_HEADER(hdr)              (((hdr) == HEADER_TYPE_USER_DEFINED_SHIM1) ||   \
477                                              ((hdr) == HEADER_TYPE_USER_DEFINED_SHIM2))
478 #define IS_SPECIAL_HEADER(hdr)              ((hdr) == HEADER_TYPE_MACSEC)
479 
480 #define GET_PRS_HDR_NUM(num, hdr)                           \
481 switch(hdr)                                                 \
482 {   case(HEADER_TYPE_ETH):              num = 0;  break;    \
483     case(HEADER_TYPE_LLC_SNAP):         num = 1;  break;    \
484     case(HEADER_TYPE_VLAN):             num = 2;  break;    \
485     case(HEADER_TYPE_PPPoE):            num = 3;  break;    \
486     case(HEADER_TYPE_MPLS):             num = 4;  break;    \
487     case(HEADER_TYPE_IPv4):             num = 5;  break;    \
488     case(HEADER_TYPE_IPv6):             num = 6;  break;    \
489     case(HEADER_TYPE_GRE):              num = 7;  break;    \
490     case(HEADER_TYPE_MINENCAP):         num = 8;  break;    \
491     case(HEADER_TYPE_USER_DEFINED_L3):  num = 9;  break;    \
492     case(HEADER_TYPE_TCP):              num = 10; break;    \
493     case(HEADER_TYPE_UDP):              num = 11; break;    \
494     case(HEADER_TYPE_IPSEC_AH):                             \
495     case(HEADER_TYPE_IPSEC_ESP):        num = 12; break;    \
496     case(HEADER_TYPE_SCTP):             num = 13; break;    \
497     case(HEADER_TYPE_DCCP):             num = 14; break;    \
498     case(HEADER_TYPE_USER_DEFINED_L4):  num = 15; break;    \
499     case(HEADER_TYPE_USER_DEFINED_SHIM1):                   \
500     case(HEADER_TYPE_USER_DEFINED_SHIM2):                   \
501     case(HEADER_TYPE_MACSEC):                               \
502         num = NO_HDR_NUM; break;                            \
503     default:                                                \
504         REPORT_ERROR(MAJOR, E_NOT_SUPPORTED, ("Unsupported header for parser"));\
505         num = ILLEGAL_HDR_NUM; break;                       \
506 }
507 
508 /***********************************************************************/
509 /*          Policer defines                                            */
510 /***********************************************************************/
511 #define FM_PCD_PLCR_PAR_GO                    0x80000000
512 #define FM_PCD_PLCR_PAR_PWSEL_MASK            0x0000FFFF
513 #define FM_PCD_PLCR_PAR_R                     0x40000000
514 
515 /* shifts */
516 #define FM_PCD_PLCR_PAR_PNUM_SHIFT            16
517 
518 
519 /***********************************************************************/
520 /*          Keygen defines                                             */
521 /***********************************************************************/
522 /* maskes */
523 #define KG_SCH_PP_SHIFT_HIGH                    0x80000000
524 #define KG_SCH_PP_NO_GEN                        0x10000000
525 #define KG_SCH_PP_SHIFT_LOW                     0x0000F000
526 #define KG_SCH_MODE_NIA_PLCR                    0x40000000
527 #define KG_SCH_GEN_EXTRACT_TYPE                 0x00008000
528 #define KG_SCH_BITMASK_MASK                     0x000000FF
529 #define KG_SCH_GEN_VALID                        0x80000000
530 #define KG_SCH_GEN_MASK                         0x00FF0000
531 #define FM_PCD_KG_KGAR_ERR                      0x20000000
532 #define FM_PCD_KG_KGAR_SEL_CLS_PLAN_ENTRY       0x01000000
533 #define FM_PCD_KG_KGAR_SEL_PORT_ENTRY           0x02000000
534 #define FM_PCD_KG_KGAR_SEL_PORT_WSEL_SP         0x00008000
535 #define FM_PCD_KG_KGAR_SEL_PORT_WSEL_CPP        0x00004000
536 #define FM_PCD_KG_KGAR_WSEL_MASK                0x0000FF00
537 #define KG_SCH_HASH_CONFIG_NO_FQID              0x80000000
538 #define KG_SCH_HASH_CONFIG_SYM                  0x40000000
539 
540 #define FM_PCD_KG_KGAR_GO                       0x80000000
541 #define FM_PCD_KG_KGAR_READ                     0x40000000
542 #define FM_PCD_KG_KGAR_WRITE                    0x00000000
543 #define FM_PCD_KG_KGAR_SEL_SCHEME_ENTRY         0x00000000
544 #define FM_PCD_KG_KGAR_SCHEME_WSEL_UPDATE_CNT   0x00008000
545 
546 
547 typedef uint32_t t_KnownFieldsMasks;
548 
549 #define KG_SCH_KN_PORT_ID                   0x80000000
550 #define KG_SCH_KN_MACDST                    0x40000000
551 #define KG_SCH_KN_MACSRC                    0x20000000
552 #define KG_SCH_KN_TCI1                      0x10000000
553 #define KG_SCH_KN_TCI2                      0x08000000
554 #define KG_SCH_KN_ETYPE                     0x04000000
555 #define KG_SCH_KN_PPPSID                    0x02000000
556 #define KG_SCH_KN_PPPID                     0x01000000
557 #define KG_SCH_KN_MPLS1                     0x00800000
558 #define KG_SCH_KN_MPLS2                     0x00400000
559 #define KG_SCH_KN_MPLS_LAST                 0x00200000
560 #define KG_SCH_KN_IPSRC1                    0x00100000
561 #define KG_SCH_KN_IPDST1                    0x00080000
562 #define KG_SCH_KN_PTYPE1                    0x00040000
563 #define KG_SCH_KN_IPTOS_TC1                 0x00020000
564 #define KG_SCH_KN_IPV6FL1                   0x00010000
565 #define KG_SCH_KN_IPSRC2                    0x00008000
566 #define KG_SCH_KN_IPDST2                    0x00004000
567 #define KG_SCH_KN_PTYPE2                    0x00002000
568 #define KG_SCH_KN_IPTOS_TC2                 0x00001000
569 #define KG_SCH_KN_IPV6FL2                   0x00000800
570 #define KG_SCH_KN_GREPTYPE                  0x00000400
571 #define KG_SCH_KN_IPSEC_SPI                 0x00000200
572 #define KG_SCH_KN_IPSEC_NH                  0x00000100
573 #define KG_SCH_KN_L4PSRC                    0x00000004
574 #define KG_SCH_KN_L4PDST                    0x00000002
575 #define KG_SCH_KN_TFLG                      0x00000001
576 
577 typedef uint8_t t_GenericCodes;
578 
579 #define KG_SCH_GEN_SHIM1                       0x70
580 #define KG_SCH_GEN_DEFAULT                     0x10
581 #define KG_SCH_GEN_PARSE_RESULT_N_FQID         0x20
582 #define KG_SCH_GEN_START_OF_FRM                0x40
583 #define KG_SCH_GEN_SHIM2                       0x71
584 #define KG_SCH_GEN_IP_PID_NO_V                 0x72
585 #define KG_SCH_GEN_ETH                         0x03
586 #define KG_SCH_GEN_ETH_NO_V                    0x73
587 #define KG_SCH_GEN_SNAP                        0x04
588 #define KG_SCH_GEN_SNAP_NO_V                   0x74
589 #define KG_SCH_GEN_VLAN1                       0x05
590 #define KG_SCH_GEN_VLAN1_NO_V                  0x75
591 #define KG_SCH_GEN_VLAN2                       0x06
592 #define KG_SCH_GEN_VLAN2_NO_V                  0x76
593 #define KG_SCH_GEN_ETH_TYPE                    0x07
594 #define KG_SCH_GEN_ETH_TYPE_NO_V               0x77
595 #define KG_SCH_GEN_PPP                         0x08
596 #define KG_SCH_GEN_PPP_NO_V                    0x78
597 #define KG_SCH_GEN_MPLS1                       0x09
598 #define KG_SCH_GEN_MPLS2                       0x19
599 #define KG_SCH_GEN_MPLS3                       0x29
600 #define KG_SCH_GEN_MPLS1_NO_V                  0x79
601 #define KG_SCH_GEN_MPLS_LAST                   0x0a
602 #define KG_SCH_GEN_MPLS_LAST_NO_V              0x7a
603 #define KG_SCH_GEN_IPV4                        0x0b
604 #define KG_SCH_GEN_IPV6                        0x1b
605 #define KG_SCH_GEN_L3_NO_V                     0x7b
606 #define KG_SCH_GEN_IPV4_TUNNELED               0x0c
607 #define KG_SCH_GEN_IPV6_TUNNELED               0x1c
608 #define KG_SCH_GEN_MIN_ENCAP                   0x2c
609 #define KG_SCH_GEN_IP2_NO_V                    0x7c
610 #define KG_SCH_GEN_GRE                         0x0d
611 #define KG_SCH_GEN_GRE_NO_V                    0x7d
612 #define KG_SCH_GEN_TCP                         0x0e
613 #define KG_SCH_GEN_UDP                         0x1e
614 #define KG_SCH_GEN_IPSEC_AH                    0x2e
615 #define KG_SCH_GEN_SCTP                        0x3e
616 #define KG_SCH_GEN_DCCP                        0x4e
617 #define KG_SCH_GEN_IPSEC_ESP                   0x6e
618 #define KG_SCH_GEN_L4_NO_V                     0x7e
619 #define KG_SCH_GEN_NEXTHDR                     0x7f
620 
621 /* shifts */
622 #define KG_SCH_PP_SHIFT_HIGH_SHIFT          27
623 #define KG_SCH_PP_SHIFT_LOW_SHIFT           12
624 #define KG_SCH_PP_MASK_SHIFT                16
625 #define KG_SCH_MODE_CCOBASE_SHIFT           24
626 #define KG_SCH_DEF_MAC_ADDR_SHIFT           30
627 #define KG_SCH_DEF_TCI_SHIFT                28
628 #define KG_SCH_DEF_ENET_TYPE_SHIFT          26
629 #define KG_SCH_DEF_PPP_SESSION_ID_SHIFT     24
630 #define KG_SCH_DEF_PPP_PROTOCOL_ID_SHIFT    22
631 #define KG_SCH_DEF_MPLS_LABEL_SHIFT         20
632 #define KG_SCH_DEF_IP_ADDR_SHIFT            18
633 #define KG_SCH_DEF_PROTOCOL_TYPE_SHIFT      16
634 #define KG_SCH_DEF_IP_TOS_TC_SHIFT          14
635 #define KG_SCH_DEF_IPV6_FLOW_LABEL_SHIFT    12
636 #define KG_SCH_DEF_IPSEC_SPI_SHIFT          10
637 #define KG_SCH_DEF_L4_PORT_SHIFT            8
638 #define KG_SCH_DEF_TCP_FLAG_SHIFT           6
639 #define KG_SCH_HASH_CONFIG_SHIFT_SHIFT      24
640 #define KG_SCH_GEN_MASK_SHIFT               16
641 #define KG_SCH_GEN_HT_SHIFT                 8
642 #define KG_SCH_GEN_SIZE_SHIFT               24
643 #define KG_SCH_GEN_DEF_SHIFT                29
644 #define FM_PCD_KG_KGAR_NUM_SHIFT            16
645 
646 
647 /* others */
648 #define NUM_OF_SW_DEFAULTS                  3
649 #define MAX_PP_SHIFT                        15
650 #define MAX_KG_SCH_SIZE                     16
651 #define MASK_FOR_GENERIC_BASE_ID            0x20
652 #define MAX_HASH_SHIFT                      40
653 #define MAX_KG_SCH_FQID_BIT_OFFSET          31
654 #define MAX_KG_SCH_PP_BIT_OFFSET            15
655 #define MAX_DIST_FQID_SHIFT                 23
656 
657 #define GET_MASK_SEL_SHIFT(shift,i)             \
658 switch(i) {                                     \
659     case(0):shift = 26;break;                   \
660     case(1):shift = 20;break;                   \
661     case(2):shift = 10;break;                   \
662     case(3):shift = 4;break;                    \
663     default:                                    \
664     RETURN_ERROR(MAJOR, E_INVALID_VALUE, NO_MSG);\
665 }
666 
667 #define GET_MASK_OFFSET_SHIFT(shift,i)          \
668 switch(i) {                                     \
669     case(0):shift = 16;break;                   \
670     case(1):shift = 0;break;                    \
671     case(2):shift = 28;break;                   \
672     case(3):shift = 24;break;                   \
673     default:                                    \
674     RETURN_ERROR(MAJOR, E_INVALID_VALUE, NO_MSG);\
675 }
676 
677 #define GET_MASK_SHIFT(shift,i)                 \
678 switch(i) {                                     \
679     case(0):shift = 24;break;                   \
680     case(1):shift = 16;break;                   \
681     case(2):shift = 8;break;                    \
682     case(3):shift = 0;break;                    \
683     default:                                    \
684     RETURN_ERROR(MAJOR, E_INVALID_VALUE, NO_MSG);\
685 }
686 
687 #define FM_PCD_MAX_NUM_OF_OPTIONS(clsPlanEntries)   ((clsPlanEntries==256)? 8:((clsPlanEntries==128)? 7: ((clsPlanEntries==64)? 6: ((clsPlanEntries==32)? 5:0))))
688 
689 typedef struct {
690     uint16_t num;
691     uint8_t  hardwarePortId;
692     uint16_t plcrProfilesBase;
693 } t_FmPortPcdInterModulePlcrParams;
694 
695 /**************************************************************************//**
696  @Description   A structure for initializing a keygen classification plan group
697 *//***************************************************************************/
698 typedef struct t_FmPcdKgInterModuleClsPlanGrpParams {
699     uint8_t         netEnvId;   /* IN */
700     bool            grpExists;  /* OUT (unused in FmPcdKgBuildClsPlanGrp)*/
701     uint8_t         clsPlanGrpId;  /* OUT */
702     bool            emptyClsPlanGrp; /* OUT */
703     uint8_t         numOfOptions;   /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
704     protocolOpt_t   options[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
705                                     /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
706     uint32_t        optVectors[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
707                                /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
708 } t_FmPcdKgInterModuleClsPlanGrpParams;
709 
710 typedef struct t_FmInterModulePortRxPoolsParams
711 {
712     uint8_t     numOfPools;
713     uint16_t    secondLargestBufSize;
714     uint16_t    largestBufSize;
715 } t_FmInterModulePortRxPoolsParams;
716 
717 
718 typedef t_Error (t_FmPortGetSetCcParamsCallback) (t_Handle                  h_FmPort,
719                                                   t_FmPortGetSetCcParams    *p_FmPortGetSetCcParams);
720 
721 
722 t_Handle    FmPcdGetHcHandle(t_Handle h_FmPcd);
723 uint32_t    FmPcdGetSwPrsOffset(t_Handle h_FmPcd, e_NetHeaderType hdr, uint8_t  indexPerHdr);
724 uint32_t    FmPcdGetLcv(t_Handle h_FmPcd, uint32_t netEnvId, uint8_t hdrNum);
725 uint32_t    FmPcdGetMacsecLcv(t_Handle h_FmPcd, uint32_t netEnvId);
726 void        FmPcdIncNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId);
727 void        FmPcdDecNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId);
728 void        FmPcdPortRegister(t_Handle h_FmPcd, t_Handle h_FmPort, uint8_t hardwarePortId);
729 uint32_t    FmPcdLock(t_Handle h_FmPcd);
730 void        FmPcdUnlock(t_Handle h_FmPcd, uint32_t  intFlags);
731 bool        FmPcdNetEnvIsHdrExist(t_Handle h_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
732 bool        FmPcdIsIpFrag(t_Handle h_FmPcd, uint8_t netEnvId);
733 
734 t_Error     FmPcdCcReleaseModifiedDataStructure(t_Handle h_FmPcd, t_List *h_FmPcdOldPointersLst, t_List *h_FmPcdNewPointersLst, uint16_t numOfGoodChanges, t_Handle *h_Params);
735 uint32_t    FmPcdCcGetNodeAddrOffset(t_Handle h_FmPcd, t_Handle h_Pointer);
736 t_Error     FmPcdCcRemoveKey(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint8_t keyIndex, t_List *h_OldLst, t_List *h_NewLst, t_Handle *h_AdditionalParams);
737 t_Error     FmPcdCcAddKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPCdCcKeyParams,  t_List *h_OldLst, t_List *h_NewLst, t_Handle *h_Params);
738 t_Error     FmPcdCcModifyKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, uint8_t keySize, uint8_t *p_Key, uint8_t *p_Mask, t_List *h_OldLst,  t_List *h_NewLst, t_Handle *h_AdditionalParams);
739 t_Error     FmPcdCcModifyKeyAndNextEngine(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint8_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPcdCcKeyParams, t_List *h_OldLst, t_List *h_NewLst, t_Handle *h_AdditionalParams);
740 t_Error     FmPcdCcModifyMissNextEngineParamNode(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams,t_List *h_OldPointer, t_List *h_NewPointer,t_Handle *h_AdditionalParams);
741 t_Error     FmPcdCcModifyNextEngineParamTree(t_Handle h_FmPcd, t_Handle h_FmPcdCcTree, uint8_t grpId, uint8_t index, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams, t_List *h_OldLst, t_List *h_NewLst, t_Handle *h_AdditionalParams);
742 t_Error     FmPcdCcModiyNextEngineParamNode(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, uint8_t keyIndex,t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams,t_List *h_OldPointer, t_List *h_NewPointer,t_Handle *h_AdditionalParams);
743 uint32_t    FmPcdCcGetNodeAddrOffsetFromNodeInfo(t_Handle h_FmPcd, t_Handle h_Pointer);
744 t_Error     FmPcdCcTreeTryLock(t_Handle h_FmPcdCcTree);
745 t_Error     FmPcdCcNodeTreeTryLock(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_List *p_List);
746 void        FmPcdCcTreeReleaseLock(t_Handle h_FmPcdCcTree);
747 void        FmPcdCcNodeTreeReleaseLock(t_List *p_List);
748 t_Handle    FmPcdCcTreeGetSavedManipParams(t_Handle h_FmTree, uint8_t   manipIndx);
749 void        FmPcdCcTreeSetSavedManipParams(t_Handle h_FmTree, t_Handle h_SavedManipParams, uint8_t   manipIndx);
750 
751 bool        FmPcdKgIsSchemeValidSw(t_Handle h_FmPcd, uint8_t schemeId);
752 uint8_t     FmPcdKgGetClsPlanGrpBase(t_Handle h_FmPcd, uint8_t clsPlanGrp);
753 uint16_t    FmPcdKgGetClsPlanGrpSize(t_Handle h_FmPcd, uint8_t clsPlanGrp);
754 
755 t_Error     FmPcdKgBuildScheme(t_Handle h_FmPcd,  t_FmPcdKgSchemeParams *p_Scheme, t_FmPcdKgInterModuleSchemeRegs *p_SchemeRegs);
756 t_Error     FmPcdKgBuildClsPlanGrp(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_Grp, t_FmPcdKgInterModuleClsPlanSet *p_ClsPlanSet);
757 uint8_t     FmPcdKgGetNumOfPartitionSchemes(t_Handle h_FmPcd);
758 uint8_t     FmPcdKgGetPhysicalSchemeId(t_Handle h_FmPcd, uint8_t schemeId);
759 uint8_t     FmPcdKgGetRelativeSchemeId(t_Handle h_FmPcd, uint8_t schemeId);
760 void        FmPcdKgDestroyClsPlanGrp(t_Handle h_FmPcd, uint8_t grpId);
761 void        FmPcdKgValidateSchemeSw(t_Handle h_FmPcd, uint8_t schemeId);
762 void        FmPcdKgInvalidateSchemeSw(t_Handle h_FmPcd, uint8_t schemeId);
763 t_Error     FmPcdKgCheckInvalidateSchemeSw(t_Handle h_FmPcd, uint8_t schemeId);
764 t_Error     FmPcdKgBuildBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_BindPortToSchemes, uint32_t *p_SpReg, bool add);
765 void        FmPcdKgIncSchemeOwners(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_BindPort);
766 void        FmPcdKgDecSchemeOwners(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_BindPort);
767 bool        FmPcdKgIsDriverClsPlan(t_Handle h_FmPcd);
768 bool        FmPcdKgHwSchemeIsValid(uint32_t schemeModeReg);
769 uint32_t    FmPcdKgBuildCppReg(t_Handle h_FmPcd, uint8_t clsPlanGrpId);
770 uint32_t    FmPcdKgBuildWriteSchemeActionReg(uint8_t schemeId, bool updateCounter);
771 uint32_t    FmPcdKgBuildReadSchemeActionReg(uint8_t schemeId);
772 uint32_t    FmPcdKgBuildWriteClsPlanBlockActionReg(uint8_t grpId);
773 uint32_t    FmPcdKgBuildReadClsPlanBlockActionReg(uint8_t grpId);
774 uint32_t    FmPcdKgBuildWritePortSchemeBindActionReg(uint8_t hardwarePortId);
775 uint32_t    FmPcdKgBuildReadPortSchemeBindActionReg(uint8_t hardwarePortId);
776 uint32_t    FmPcdKgBuildWritePortClsPlanBindActionReg(uint8_t hardwarePortId);
777 uint8_t     FmPcdKgGetSchemeSwId(t_Handle h_FmPcd, uint8_t schemeHwId);
778 t_Error     FmPcdKgSchemeTryLock(t_Handle h_FmPcd, uint8_t schemeId, bool intr);
779 void        FmPcdKgReleaseSchemeLock(t_Handle h_FmPcd, uint8_t schemeId);
780 void        FmPcdKgUpatePointedOwner(t_Handle h_FmPcd, uint8_t schemeId, bool add);
781 
782 t_Error     FmPcdKgBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes  *p_SchemeBind);
783 t_Error     FmPcdKgUnbindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_SchemeBind);
784 uint32_t    FmPcdKgGetRequiredAction(t_Handle h_FmPcd, uint8_t schemeId);
785 uint32_t    FmPcdKgGetPointedOwners(t_Handle h_FmPcd, uint8_t schemeId);
786 e_FmPcdDoneAction FmPcdKgGetDoneAction(t_Handle h_FmPcd, uint8_t schemeId);
787 e_FmPcdEngine FmPcdKgGetNextEngine(t_Handle h_FmPcd, uint8_t schemeId);
788 void        FmPcdKgUpdateRequiredAction(t_Handle h_FmPcd, uint8_t schemeId, uint32_t requiredAction);
789 bool        FmPcdKgIsDirectPlcr(t_Handle h_FmPcd, uint8_t schemeId);
790 bool        FmPcdKgIsDistrOnPlcrProfile(t_Handle h_FmPcd, uint8_t schemeId);
791 uint16_t    FmPcdKgGetRelativeProfileId(t_Handle h_FmPcd, uint8_t schemeId);
792 
793 /* FM-PCD parser API routines */
794 t_Error     FmPcdPrsIncludePortInStatistics(t_Handle p_FmPcd, uint8_t hardwarePortId,  bool include);
795 
796 /* FM-PCD policer API routines */
797 t_Error     FmPcdPlcrAllocProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId, uint16_t numOfProfiles);
798 t_Error     FmPcdPlcrFreeProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId);
799 bool        FmPcdPlcrIsProfileValid(t_Handle h_FmPcd, uint16_t absoluteProfileId);
800 uint16_t    FmPcdPlcrGetPortProfilesBase(t_Handle h_FmPcd, uint8_t hardwarePortId);
801 uint16_t    FmPcdPlcrGetPortNumOfProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId);
802 uint32_t    FmPcdPlcrBuildWritePlcrActionRegs(uint16_t absoluteProfileId);
803 uint32_t    FmPcdPlcrBuildCounterProfileReg(e_FmPcdPlcrProfileCounters counter);
804 uint32_t    FmPcdPlcrBuildWritePlcrActionReg(uint16_t absoluteProfileId);
805 uint32_t    FmPcdPlcrBuildReadPlcrActionReg(uint16_t absoluteProfileId);
806 t_Error     FmPcdPlcrBuildProfile(t_Handle h_FmPcd, t_FmPcdPlcrProfileParams *p_Profile, t_FmPcdPlcrInterModuleProfileRegs *p_PlcrRegs);
807 t_Error     FmPcdPlcrGetAbsoluteProfileId(t_Handle                      h_FmPcd,
808                                           e_FmPcdProfileTypeSelection   profileType,
809                                           t_Handle                      h_FmPort,
810                                           uint16_t                      relativeProfile,
811                                           uint16_t                      *p_AbsoluteId);
812 void        FmPcdPlcrInvalidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
813 void        FmPcdPlcrValidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
814 bool        FmPcdPlcrHwProfileIsValid(uint32_t profileModeReg);
815 t_Error     FmPcdPlcrProfileTryLock(t_Handle h_FmPcd, uint16_t profileId, bool intr);
816 void        FmPcdPlcrReleaseProfileLock(t_Handle h_FmPcd, uint16_t profileId);
817 uint32_t    FmPcdPlcrGetRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId);
818 uint32_t    FmPcdPlcrGetPointedOwners(t_Handle h_FmPcd, uint16_t absoluteProfileId);
819 void        FmPcdPlcrUpatePointedOwner(t_Handle h_FmPcd, uint16_t absoluteProfileId, bool add);
820 uint32_t    FmPcdPlcrBuildNiaProfileReg(bool green, bool yellow, bool red);
821 void        FmPcdPlcrUpdateRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId, uint32_t requiredAction);
822 
823 /* FM-PCD Coarse-Classification API routines */
824 uint8_t     FmPcdCcGetParseCode(t_Handle h_CcNode);
825 uint8_t     FmPcdCcGetOffset(t_Handle h_CcNode);
826 
827 t_Error     FmPcdManipUpdate(t_Handle h_FmPcd, t_Handle h_FmPort, t_Handle h_Manip, t_Handle h_Ad, bool validate, int level, t_Handle h_FmTree, bool modify);
828 t_Error     FmPortGetSetCcParams(t_Handle h_FmPort, t_FmPortGetSetCcParams *p_FmPortGetSetCcParams);
829 uint32_t    FmPcdManipGetRequiredAction (t_Handle h_Manip);
830 t_Error     FmPcdCcBindTree(t_Handle h_FmPcd, t_Handle h_CcTree,  uint32_t  *p_Offset,t_Handle h_FmPort);
831 t_Error     FmPcdCcUnbindTree(t_Handle h_FmPcd, t_Handle h_CcTree);
832 
833 t_Error     FmPcdPlcrCcGetSetParams(t_Handle h_FmPcd, uint16_t profileIndx,uint32_t requiredAction);
834 t_Error     FmPcdKgCcGetSetParams(t_Handle h_FmPcd, t_Handle  h_Scheme, uint32_t requiredAction);
835 
836 uint8_t     FmPortGetNetEnvId(t_Handle h_FmPort);
837 uint8_t     FmPortGetHardwarePortId(t_Handle h_FmPort);
838 uint32_t    FmPortGetPcdEngines(t_Handle h_FmPort);
839 void        FmPortPcdKgSwUnbindClsPlanGrp (t_Handle h_FmPort);
840 t_Error     FmPortAttachPCD(t_Handle h_FmPort);
841 t_Error     FmPcdKgSetOrBindToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t netEnvId, protocolOpt_t *p_OptArray, uint8_t *p_ClsPlanGrpId, bool *p_IsEmptyClsPlanGrp);
842 t_Error     FmPcdKgDeleteOrUnbindPortToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t clsPlanGrpId);
843 
844 
845 /**************************************************************************//**
846  @Function      FmRegisterIntr
847 
848  @Description   Used to register an inter-module event handler to be processed by FM
849 
850  @Param[in]     h_Fm            A handle to an FM Module.
851  @Param[in]     mod             The module that causes the event
852  @Param[in]     modId           Module id - if more than 1 instansiation of this
853                                 mode exists,0 otherwise.
854  @Param[in]     intrType        Interrupt type (error/normal) selection.
855  @Param[in]     f_Isr           The interrupt service routine.
856  @Param[in]     h_Arg           Argument to be passed to f_Isr.
857 
858  @Return        None.
859 *//***************************************************************************/
860 void FmRegisterIntr(t_Handle                h_Fm,
861                     e_FmEventModules       mod,
862                     uint8_t                modId,
863                     e_FmIntrType           intrType,
864                     void                   (*f_Isr) (t_Handle h_Arg),
865                     t_Handle               h_Arg);
866 
867 /**************************************************************************//**
868  @Function      FmUnregisterIntr
869 
870  @Description   Used to un-register an inter-module event handler that was processed by FM
871 
872  @Param[in]     h_Fm            A handle to an FM Module.
873  @Param[in]     mod             The module that causes the event
874  @Param[in]     modId           Module id - if more than 1 instansiation of this
875                                 mode exists,0 otherwise.
876  @Param[in]     intrType        Interrupt type (error/normal) selection.
877 
878  @Return        None.
879 *//***************************************************************************/
880 void FmUnregisterIntr(t_Handle          h_Fm,
881                       e_FmEventModules  mod,
882                       uint8_t           modId,
883                       e_FmIntrType      intrType);
884 
885 /**************************************************************************//**
886  @Function      FmRegisterFmCtlIntr
887 
888  @Description   Used to register to one of the fmCtl events in the FM module
889 
890  @Param[in]     h_Fm            A handle to an FM Module.
891  @Param[in]     eventRegId      FmCtl event id (0-7).
892  @Param[in]     f_Isr           The interrupt service routine.
893 
894  @Return        E_OK on success; Error code otherwise.
895 
896  @Cautions      Allowed only following FM_Init().
897 *//***************************************************************************/
898 void  FmRegisterFmCtlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event));
899 
900 
901 /**************************************************************************//**
902  @Description   enum for defining MAC types
903 *//***************************************************************************/
904 typedef enum e_FmMacType {
905     e_FM_MAC_10G = 0,               /**< 10G MAC */
906     e_FM_MAC_1G                     /**< 1G MAC */
907 } e_FmMacType;
908 
909 /**************************************************************************//**
910  @Description   Structure for port-FM communication during FM_PORT_Init.
911                 Fields commented 'IN' are passed by the port module to be used
912                 by the FM module.
913                 Fields commented 'OUT' will be filled by FM before returning to port.
914                 Some fields are optional (depending on configuration) and
915                 will be analized by the port and FM modules accordingly.
916 *//***************************************************************************/
917 typedef struct t_FmInterModulePortInitParams {
918     uint8_t             hardwarePortId;     /**< IN. port Id */
919     e_FmPortType        portType;           /**< IN. Port type */
920     bool                independentMode;    /**< IN. TRUE if FM Port operates in independent mode */
921     uint16_t            liodnOffset;        /**< IN. Port's requested resource */
922     uint8_t             numOfTasks;         /**< IN. Port's requested resource */
923     uint8_t             numOfExtraTasks;    /**< IN. Port's requested resource */
924     uint8_t             numOfOpenDmas;      /**< IN. Port's requested resource */
925     uint8_t             numOfExtraOpenDmas; /**< IN. Port's requested resource */
926     uint32_t            sizeOfFifo;         /**< IN. Port's requested resource */
927     uint32_t            extraSizeOfFifo;    /**< IN. Port's requested resource */
928     uint8_t             deqPipelineDepth;   /**< IN. Port's requested resource */
929     uint16_t            liodnBase;          /**< IN. Irrelevant for P4080 rev 1.
930                                                  LIODN base for this port, to be
931                                                  used together with LIODN offset. */
932     t_FmPhysAddr        fmMuramPhysBaseAddr;/**< OUT. FM-MURAM physical address*/
933 } t_FmInterModulePortInitParams;
934 
935 /**************************************************************************//**
936  @Description   Structure for port-FM communication during FM_PORT_Free.
937 *//***************************************************************************/
938 typedef struct t_FmInterModulePortFreeParams {
939     uint8_t             hardwarePortId;     /**< IN. port Id */
940     e_FmPortType        portType;           /**< IN. Port type */
941 #ifdef FM_QMI_DEQ_OPTIONS_SUPPORT
942     uint8_t             deqPipelineDepth;   /**< IN. Port's requested resource */
943 #endif /* FM_QMI_DEQ_OPTIONS_SUPPORT */
944 } t_FmInterModulePortFreeParams;
945 
946 /**************************************************************************//**
947  @Function      FmGetPcdPrsBaseAddr
948 
949  @Description   Get the base address of the Parser from the FM module
950 
951  @Param[in]     h_Fm            A handle to an FM Module.
952 
953  @Return        Base address.
954 *//***************************************************************************/
955 uintptr_t FmGetPcdPrsBaseAddr(t_Handle h_Fm);
956 
957 /**************************************************************************//**
958  @Function      FmGetPcdKgBaseAddr
959 
960  @Description   Get the base address of the Keygen from the FM module
961 
962  @Param[in]     h_Fm            A handle to an FM Module.
963 
964  @Return        Base address.
965 *//***************************************************************************/
966 uintptr_t FmGetPcdKgBaseAddr(t_Handle h_Fm);
967 
968 /**************************************************************************//**
969  @Function      FmGetPcdPlcrBaseAddr
970 
971  @Description   Get the base address of the Policer from the FM module
972 
973  @Param[in]     h_Fm            A handle to an FM Module.
974 
975  @Return        Base address.
976 *//***************************************************************************/
977 uintptr_t FmGetPcdPlcrBaseAddr(t_Handle h_Fm);
978 
979 /**************************************************************************//**
980  @Function      FmGetMuramHandle
981 
982  @Description   Get the handle of the MURAM from the FM module
983 
984  @Param[in]     h_Fm            A handle to an FM Module.
985 
986  @Return        MURAM module handle.
987 *//***************************************************************************/
988 t_Handle FmGetMuramHandle(t_Handle h_Fm);
989 
990 /**************************************************************************//**
991  @Function      FmGetPhysicalMuramBase
992 
993  @Description   Get the physical base address of the MURAM from the FM module
994 
995  @Param[in]     h_Fm            A handle to an FM Module.
996  @Param[in]     fmPhysAddr      Physical MURAM base
997 
998  @Return        Physical base address.
999 *//***************************************************************************/
1000 void FmGetPhysicalMuramBase(t_Handle h_Fm, t_FmPhysAddr *fmPhysAddr);
1001 
1002 /**************************************************************************//**
1003  @Function      FmGetTimeStampScale
1004 
1005  @Description   Used internally by other modules in order to get the timeStamp
1006                 period as requested by the application.
1007 
1008  @Param[in]     h_Fm                    A handle to an FM Module.
1009 
1010  @Return        TimeStamp period in nanoseconds.
1011 
1012  @Cautions      Allowed only following FM_Init().
1013 *//***************************************************************************/
1014 uint32_t    FmGetTimeStampScale(t_Handle h_Fm);
1015 
1016 /**************************************************************************//**
1017  @Function      FmResumeStalledPort
1018 
1019  @Description   Used internally by FM port to release a stalled port.
1020 
1021  @Param[in]     h_Fm                            A handle to an FM Module.
1022  @Param[in]     hardwarePortId                    HW port id.
1023 
1024  @Return        E_OK on success; Error code otherwise.
1025 
1026  @Cautions      Allowed only following FM_Init().
1027 *//***************************************************************************/
1028 t_Error FmResumeStalledPort(t_Handle h_Fm, uint8_t hardwarePortId);
1029 
1030 /**************************************************************************//**
1031  @Function      FmIsPortStalled
1032 
1033  @Description   Used internally by FM port to read the port's status.
1034 
1035  @Param[in]     h_Fm                            A handle to an FM Module.
1036  @Param[in]     hardwarePortId                  HW port id.
1037  @Param[in]     p_IsStalled                     A pointer to the boolean port stalled state
1038 
1039  @Return        E_OK on success; Error code otherwise.
1040 
1041  @Cautions      Allowed only following FM_Init().
1042 *//***************************************************************************/
1043 t_Error FmIsPortStalled(t_Handle h_Fm, uint8_t hardwarePortId, bool *p_IsStalled);
1044 
1045 /**************************************************************************//**
1046  @Function      FmResetMac
1047 
1048  @Description   Used by MAC driver to reset the MAC registers
1049 
1050  @Param[in]     h_Fm            A handle to an FM Module.
1051  @Param[in]     type            MAC type.
1052  @Param[in]     macId           MAC id - according to type.
1053 
1054  @Return        E_OK on success; Error code otherwise.
1055 
1056  @Cautions      Allowed only following FM_Init().
1057 *//***************************************************************************/
1058 t_Error FmResetMac(t_Handle h_Fm, e_FmMacType type, uint8_t macId);
1059 
1060 /**************************************************************************//**
1061  @Function      FmGetClockFreq
1062 
1063  @Description   Used by MAC driver to get the FM clock frequency
1064 
1065  @Param[in]     h_Fm            A handle to an FM Module.
1066 
1067  @Return        clock-freq on success; 0 otherwise.
1068 
1069  @Cautions      Allowed only following FM_Init().
1070 *//***************************************************************************/
1071 uint16_t FmGetClockFreq(t_Handle h_Fm);
1072 
1073 /**************************************************************************//**
1074  @Function      FmGetId
1075 
1076  @Description   Used by PCD driver to read rhe FM id
1077 
1078  @Param[in]     h_Fm            A handle to an FM Module.
1079 
1080  @Return        E_OK on success; Error code otherwise.
1081 
1082  @Cautions      Allowed only following FM_Init().
1083 *//***************************************************************************/
1084 uint8_t FmGetId(t_Handle h_Fm);
1085 
1086 /**************************************************************************//**
1087  @Function      FmGetSetPortParams
1088 
1089  @Description   Used by FM-PORT driver to pass and receive parameters between
1090                 PORT and FM modules.
1091 
1092  @Param[in]     h_Fm            A handle to an FM Module.
1093  @Param[in,out] p_PortParams    A structure of FM Port parameters.
1094 
1095  @Return        E_OK on success; Error code otherwise.
1096 
1097  @Cautions      Allowed only following FM_Init().
1098 *//***************************************************************************/
1099 t_Error FmGetSetPortParams(t_Handle h_Fm,t_FmInterModulePortInitParams *p_PortParams);
1100 
1101 /**************************************************************************//**
1102  @Function      FmFreePortParams
1103 
1104  @Description   Used by FM-PORT driver to free port's resources within the FM.
1105 
1106  @Param[in]     h_Fm            A handle to an FM Module.
1107  @Param[in,out] p_PortParams    A structure of FM Port parameters.
1108 
1109  @Return        None.
1110 
1111  @Cautions      Allowed only following FM_Init().
1112 *//***************************************************************************/
1113 void FmFreePortParams(t_Handle h_Fm,t_FmInterModulePortFreeParams *p_PortParams);
1114 
1115 /**************************************************************************//**
1116  @Function      FmSetPortToWorkWithOneRiscOnly
1117 
1118  @Description   Used by FM-PORT driver to pass parameter between
1119                 PORT and FM modules for working with number of RISC..
1120 
1121  @Param[in]     h_Fm            A handle to an FM Module.
1122  @Param[in,out] p_PortParams    A structure of FM Port parameters.
1123 
1124  @Return        None.
1125 
1126  @Cautions      Allowed only following FM_Init().
1127 *//***************************************************************************/
1128 t_Error FmSetNumOfRiscsPerPort(t_Handle h_Fm, uint8_t hardwarePortId, uint8_t numOfFmanCtrls);
1129 
1130 
1131 void        FmRegisterPcd(t_Handle h_Fm, t_Handle h_FmPcd);
1132 void        FmUnregisterPcd(t_Handle h_Fm);
1133 t_Handle    FmGetPcdHandle(t_Handle h_Fm);
1134 bool        FmRamsEccIsExternalCtl(t_Handle h_Fm);
1135 t_Error     FmEnableRamsEcc(t_Handle h_Fm);
1136 t_Error     FmDisableRamsEcc(t_Handle h_Fm);
1137 void        FmGetRevision(t_Handle h_Fm, t_FmRevisionInfo *p_FmRevisionInfo);
1138 t_Error     FmAllocFmanCtrlEventReg(t_Handle h_Fm, uint8_t *p_EventId);
1139 void        FmFreeFmanCtrlEventReg(t_Handle h_Fm, uint8_t eventId);
1140 void        FmSetFmanCtrlIntr(t_Handle h_Fm, uint8_t   eventRegId, uint32_t enableEvents);
1141 uint32_t    FmGetFmanCtrlIntr(t_Handle h_Fm, uint8_t   eventRegId);
1142 void        FmRegisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event), t_Handle    h_Arg);
1143 void        FmUnregisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId);
1144 t_Error     FmSetMacMaxFrame(t_Handle h_Fm, e_FmMacType type, uint8_t macId, uint16_t mtu);
1145 bool        FmIsMaster(t_Handle h_Fm);
1146 uint8_t     FmGetGuestId(t_Handle h_Fm);
1147 #ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004
1148 t_Error     Fm10GTxEccWorkaround(t_Handle h_Fm, uint8_t macId);
1149 #endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */
1150 
1151 void        FmMuramClear(t_Handle h_FmMuram);
1152 t_Error     FmSetNumOfOpenDmas(t_Handle h_Fm,
1153                                 uint8_t hardwarePortId,
1154                                 uint8_t numOfOpenDmas,
1155                                 uint8_t numOfExtraOpenDmas,
1156                                 bool    initialConfig);
1157 t_Error     FmSetNumOfTasks(t_Handle    h_Fm,
1158                                 uint8_t     hardwarePortId,
1159                                 uint8_t     numOfTasks,
1160                                 uint8_t     numOfExtraTasks,
1161                                 bool        initialConfig);
1162 t_Error     FmSetSizeOfFifo(t_Handle            h_Fm,
1163                             uint8_t             hardwarePortId,
1164                             e_FmPortType        portType,
1165                             bool                independentMode,
1166                             uint32_t            *p_SizeOfFifo,
1167                             uint32_t            extraSizeOfFifo,
1168                             uint8_t             deqPipelineDepth,
1169                             t_FmInterModulePortRxPoolsParams    *p_RxPoolsParams,
1170                             bool                initialConfig);
1171 
1172 
1173 #endif /* __FM_COMMON_H */
1174