1852ba100SJustin Hibbits /*
2852ba100SJustin Hibbits  * Copyright 2008-2012 Freescale Semiconductor Inc.
30aeed3e9SJustin Hibbits  *
40aeed3e9SJustin Hibbits  * Redistribution and use in source and binary forms, with or without
50aeed3e9SJustin Hibbits  * modification, are permitted provided that the following conditions are met:
60aeed3e9SJustin Hibbits  *     * Redistributions of source code must retain the above copyright
70aeed3e9SJustin Hibbits  *       notice, this list of conditions and the following disclaimer.
80aeed3e9SJustin Hibbits  *     * Redistributions in binary form must reproduce the above copyright
90aeed3e9SJustin Hibbits  *       notice, this list of conditions and the following disclaimer in the
100aeed3e9SJustin Hibbits  *       documentation and/or other materials provided with the distribution.
110aeed3e9SJustin Hibbits  *     * Neither the name of Freescale Semiconductor nor the
120aeed3e9SJustin Hibbits  *       names of its contributors may be used to endorse or promote products
130aeed3e9SJustin Hibbits  *       derived from this software without specific prior written permission.
140aeed3e9SJustin Hibbits  *
150aeed3e9SJustin Hibbits  *
160aeed3e9SJustin Hibbits  * ALTERNATIVELY, this software may be distributed under the terms of the
170aeed3e9SJustin Hibbits  * GNU General Public License ("GPL") as published by the Free Software
180aeed3e9SJustin Hibbits  * Foundation, either version 2 of that License or (at your option) any
190aeed3e9SJustin Hibbits  * later version.
200aeed3e9SJustin Hibbits  *
210aeed3e9SJustin Hibbits  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
220aeed3e9SJustin Hibbits  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
230aeed3e9SJustin Hibbits  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
240aeed3e9SJustin Hibbits  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
250aeed3e9SJustin Hibbits  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
260aeed3e9SJustin Hibbits  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
270aeed3e9SJustin Hibbits  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
280aeed3e9SJustin Hibbits  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
290aeed3e9SJustin Hibbits  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
300aeed3e9SJustin Hibbits  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
310aeed3e9SJustin Hibbits  */
320aeed3e9SJustin Hibbits 
33852ba100SJustin Hibbits 
340aeed3e9SJustin Hibbits /******************************************************************************
350aeed3e9SJustin Hibbits  @File          fm_common.h
360aeed3e9SJustin Hibbits 
370aeed3e9SJustin Hibbits  @Description   FM internal structures and definitions.
380aeed3e9SJustin Hibbits *//***************************************************************************/
390aeed3e9SJustin Hibbits #ifndef __FM_COMMON_H
400aeed3e9SJustin Hibbits #define __FM_COMMON_H
410aeed3e9SJustin Hibbits 
420aeed3e9SJustin Hibbits #include "error_ext.h"
430aeed3e9SJustin Hibbits #include "std_ext.h"
440aeed3e9SJustin Hibbits #include "fm_pcd_ext.h"
45852ba100SJustin Hibbits #include "fm_ext.h"
460aeed3e9SJustin Hibbits #include "fm_port_ext.h"
470aeed3e9SJustin Hibbits 
48852ba100SJustin Hibbits 
49852ba100SJustin Hibbits #define e_FM_PORT_TYPE_OH_HOST_COMMAND      e_FM_PORT_TYPE_DUMMY
50852ba100SJustin Hibbits 
510aeed3e9SJustin Hibbits #define CLS_PLAN_NUM_PER_GRP                        8
520aeed3e9SJustin Hibbits 
53852ba100SJustin Hibbits #define IP_OFFLOAD_PACKAGE_NUMBER                   106
54852ba100SJustin Hibbits #define CAPWAP_OFFLOAD_PACKAGE_NUMBER               108
55852ba100SJustin Hibbits #define IS_OFFLOAD_PACKAGE(num) ((num == IP_OFFLOAD_PACKAGE_NUMBER) || (num == CAPWAP_OFFLOAD_PACKAGE_NUMBER))
56852ba100SJustin Hibbits 
57852ba100SJustin Hibbits 
58852ba100SJustin Hibbits 
59852ba100SJustin Hibbits /**************************************************************************//**
60852ba100SJustin Hibbits  @Description       Modules registers offsets
61852ba100SJustin Hibbits *//***************************************************************************/
62852ba100SJustin Hibbits #define FM_MM_MURAM             0x00000000
63852ba100SJustin Hibbits #define FM_MM_BMI               0x00080000
64852ba100SJustin Hibbits #define FM_MM_QMI               0x00080400
65852ba100SJustin Hibbits #define FM_MM_PRS               0x000c7000
66852ba100SJustin Hibbits #define FM_MM_KG                0x000C1000
67852ba100SJustin Hibbits #define FM_MM_DMA               0x000C2000
68852ba100SJustin Hibbits #define FM_MM_FPM               0x000C3000
69852ba100SJustin Hibbits #define FM_MM_PLCR              0x000C0000
70852ba100SJustin Hibbits #define FM_MM_IMEM              0x000C4000
71852ba100SJustin Hibbits #define FM_MM_CGP               0x000DB000
72852ba100SJustin Hibbits #define FM_MM_TRB(i)            (0x000D0200 + 0x400 * (i))
73852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
74852ba100SJustin Hibbits #define FM_MM_SP                0x000dc000
75852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
76852ba100SJustin Hibbits 
77852ba100SJustin Hibbits 
78852ba100SJustin Hibbits /**************************************************************************//**
79852ba100SJustin Hibbits  @Description   Enum for inter-module interrupts registration
80852ba100SJustin Hibbits *//***************************************************************************/
81852ba100SJustin Hibbits typedef enum e_FmEventModules{
82852ba100SJustin Hibbits     e_FM_MOD_PRS,                   /**< Parser event */
83852ba100SJustin Hibbits     e_FM_MOD_KG,                    /**< Keygen event */
84852ba100SJustin Hibbits     e_FM_MOD_PLCR,                  /**< Policer event */
85852ba100SJustin Hibbits     e_FM_MOD_10G_MAC,               /**< 10G MAC event */
86852ba100SJustin Hibbits     e_FM_MOD_1G_MAC,                /**< 1G MAC event */
87852ba100SJustin Hibbits     e_FM_MOD_TMR,                   /**< Timer event */
88852ba100SJustin Hibbits     e_FM_MOD_FMAN_CTRL,             /**< FMAN Controller  Timer event */
89852ba100SJustin Hibbits     e_FM_MOD_MACSEC,
90852ba100SJustin Hibbits     e_FM_MOD_DUMMY_LAST
91852ba100SJustin Hibbits } e_FmEventModules;
92852ba100SJustin Hibbits 
93852ba100SJustin Hibbits /**************************************************************************//**
94852ba100SJustin Hibbits  @Description   Enum for interrupts types
95852ba100SJustin Hibbits *//***************************************************************************/
96852ba100SJustin Hibbits typedef enum e_FmIntrType {
97852ba100SJustin Hibbits     e_FM_INTR_TYPE_ERR,
98852ba100SJustin Hibbits     e_FM_INTR_TYPE_NORMAL
99852ba100SJustin Hibbits } e_FmIntrType;
100852ba100SJustin Hibbits 
101852ba100SJustin Hibbits /**************************************************************************//**
102852ba100SJustin Hibbits  @Description   Enum for inter-module interrupts registration
103852ba100SJustin Hibbits *//***************************************************************************/
104852ba100SJustin Hibbits typedef enum e_FmInterModuleEvent
105852ba100SJustin Hibbits {
106852ba100SJustin Hibbits     e_FM_EV_PRS = 0,                /**< Parser event */
107852ba100SJustin Hibbits     e_FM_EV_ERR_PRS,                /**< Parser error event */
108852ba100SJustin Hibbits     e_FM_EV_KG,                     /**< Keygen event */
109852ba100SJustin Hibbits     e_FM_EV_ERR_KG,                 /**< Keygen error event */
110852ba100SJustin Hibbits     e_FM_EV_PLCR,                   /**< Policer event */
111852ba100SJustin Hibbits     e_FM_EV_ERR_PLCR,               /**< Policer error event */
112852ba100SJustin Hibbits     e_FM_EV_ERR_10G_MAC0,           /**< 10G MAC 0 error event */
113852ba100SJustin Hibbits     e_FM_EV_ERR_10G_MAC1,           /**< 10G MAC 1 error event */
114852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC0,            /**< 1G MAC 0 error event */
115852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC1,            /**< 1G MAC 1 error event */
116852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC2,            /**< 1G MAC 2 error event */
117852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC3,            /**< 1G MAC 3 error event */
118852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC4,            /**< 1G MAC 4 error event */
119852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC5,            /**< 1G MAC 5 error event */
120852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC6,            /**< 1G MAC 6 error event */
121852ba100SJustin Hibbits     e_FM_EV_ERR_1G_MAC7,            /**< 1G MAC 7 error event */
122852ba100SJustin Hibbits     e_FM_EV_ERR_MACSEC_MAC0,
123852ba100SJustin Hibbits     e_FM_EV_TMR,                    /**< Timer event */
124852ba100SJustin Hibbits     e_FM_EV_10G_MAC0,               /**< 10G MAC 0 event (Magic packet detection)*/
125852ba100SJustin Hibbits     e_FM_EV_10G_MAC1,               /**< 10G MAC 1 event (Magic packet detection)*/
126852ba100SJustin Hibbits     e_FM_EV_1G_MAC0,                /**< 1G MAC 0 event (Magic packet detection)*/
127852ba100SJustin Hibbits     e_FM_EV_1G_MAC1,                /**< 1G MAC 1 event (Magic packet detection)*/
128852ba100SJustin Hibbits     e_FM_EV_1G_MAC2,                /**< 1G MAC 2 (Magic packet detection)*/
129852ba100SJustin Hibbits     e_FM_EV_1G_MAC3,                /**< 1G MAC 3 (Magic packet detection)*/
130852ba100SJustin Hibbits     e_FM_EV_1G_MAC4,                /**< 1G MAC 4 (Magic packet detection)*/
131852ba100SJustin Hibbits     e_FM_EV_1G_MAC5,                /**< 1G MAC 5 (Magic packet detection)*/
132852ba100SJustin Hibbits     e_FM_EV_1G_MAC6,                /**< 1G MAC 6 (Magic packet detection)*/
133852ba100SJustin Hibbits     e_FM_EV_1G_MAC7,                /**< 1G MAC 7 (Magic packet detection)*/
134852ba100SJustin Hibbits     e_FM_EV_MACSEC_MAC0,            /**< MACSEC MAC 0 event */
135852ba100SJustin Hibbits     e_FM_EV_FMAN_CTRL_0,            /**< Fman controller event 0 */
136852ba100SJustin Hibbits     e_FM_EV_FMAN_CTRL_1,            /**< Fman controller event 1 */
137852ba100SJustin Hibbits     e_FM_EV_FMAN_CTRL_2,            /**< Fman controller event 2 */
138852ba100SJustin Hibbits     e_FM_EV_FMAN_CTRL_3,            /**< Fman controller event 3 */
139852ba100SJustin Hibbits     e_FM_EV_DUMMY_LAST
140852ba100SJustin Hibbits } e_FmInterModuleEvent;
141852ba100SJustin Hibbits 
1420aeed3e9SJustin Hibbits 
1430aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
1440aeed3e9SJustin Hibbits #pragma pack(push,1)
1450aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
1460aeed3e9SJustin Hibbits 
1470aeed3e9SJustin Hibbits /**************************************************************************//**
1480aeed3e9SJustin Hibbits  @Description   PCD KG scheme registers
1490aeed3e9SJustin Hibbits *//***************************************************************************/
150852ba100SJustin Hibbits typedef _Packed struct t_FmPcdPlcrProfileRegs {
1510aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pemode;      /* 0x090 FMPL_PEMODE - FM Policer Profile Entry Mode*/
1520aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pegnia;      /* 0x094 FMPL_PEGNIA - FM Policer Profile Entry GREEN Next Invoked Action*/
1530aeed3e9SJustin Hibbits     volatile uint32_t fmpl_peynia;      /* 0x098 FMPL_PEYNIA - FM Policer Profile Entry YELLOW Next Invoked Action*/
1540aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pernia;      /* 0x09C FMPL_PERNIA - FM Policer Profile Entry RED Next Invoked Action*/
1550aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pecir;       /* 0x0A0 FMPL_PECIR  - FM Policer Profile Entry Committed Information Rate*/
1560aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pecbs;       /* 0x0A4 FMPL_PECBS  - FM Policer Profile Entry Committed Burst Size*/
1570aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pepepir_eir; /* 0x0A8 FMPL_PEPIR_EIR - FM Policer Profile Entry Peak/Excess Information Rate*/
1580aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pepbs_ebs;   /* 0x0AC FMPL_PEPBS_EBS - FM Policer Profile Entry Peak/Excess Information Rate*/
1590aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pelts;       /* 0x0B0 FMPL_PELTS  - FM Policer Profile Entry Last TimeStamp*/
1600aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pects;       /* 0x0B4 FMPL_PECTS  - FM Policer Profile Entry Committed Token Status*/
1610aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pepts_ets;   /* 0x0B8 FMPL_PEPTS_ETS - FM Policer Profile Entry Peak/Excess Token Status*/
1620aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pegpc;       /* 0x0BC FMPL_PEGPC  - FM Policer Profile Entry GREEN Packet Counter*/
1630aeed3e9SJustin Hibbits     volatile uint32_t fmpl_peypc;       /* 0x0C0 FMPL_PEYPC  - FM Policer Profile Entry YELLOW Packet Counter*/
1640aeed3e9SJustin Hibbits     volatile uint32_t fmpl_perpc;       /* 0x0C4 FMPL_PERPC  - FM Policer Profile Entry RED Packet Counter */
1650aeed3e9SJustin Hibbits     volatile uint32_t fmpl_perypc;      /* 0x0C8 FMPL_PERYPC - FM Policer Profile Entry Recolored YELLOW Packet Counter*/
1660aeed3e9SJustin Hibbits     volatile uint32_t fmpl_perrpc;      /* 0x0CC FMPL_PERRPC - FM Policer Profile Entry Recolored RED Packet Counter*/
1670aeed3e9SJustin Hibbits     volatile uint32_t fmpl_res1[12];    /* 0x0D0-0x0FF Reserved */
168852ba100SJustin Hibbits } _PackedType t_FmPcdPlcrProfileRegs;
1690aeed3e9SJustin Hibbits 
1700aeed3e9SJustin Hibbits 
1710aeed3e9SJustin Hibbits typedef _Packed struct t_FmPcdCcCapwapReassmTimeoutParams {
1720aeed3e9SJustin Hibbits     volatile uint32_t                       portIdAndCapwapReassmTbl;
1730aeed3e9SJustin Hibbits     volatile uint32_t                       fqidForTimeOutFrames;
1740aeed3e9SJustin Hibbits     volatile uint32_t                       timeoutRequestTime;
1750aeed3e9SJustin Hibbits }_PackedType t_FmPcdCcCapwapReassmTimeoutParams;
1760aeed3e9SJustin Hibbits 
177852ba100SJustin Hibbits /**************************************************************************//**
178852ba100SJustin Hibbits  @Description   PCD CTRL Parameters Page
179852ba100SJustin Hibbits *//***************************************************************************/
180852ba100SJustin Hibbits typedef _Packed struct t_FmPcdCtrlParamsPage {
181852ba100SJustin Hibbits     volatile uint8_t  reserved0[16];
182852ba100SJustin Hibbits     volatile uint32_t iprIpv4Nia;
183852ba100SJustin Hibbits     volatile uint32_t iprIpv6Nia;
184852ba100SJustin Hibbits     volatile uint8_t  reserved1[24];
185852ba100SJustin Hibbits     volatile uint32_t ipfOptionsCounter;
186852ba100SJustin Hibbits     volatile uint8_t  reserved2[12];
187852ba100SJustin Hibbits     volatile uint32_t misc;
188852ba100SJustin Hibbits     volatile uint32_t errorsDiscardMask;
189852ba100SJustin Hibbits     volatile uint32_t discardMask;
190852ba100SJustin Hibbits     volatile uint8_t  reserved3[4];
191852ba100SJustin Hibbits     volatile uint32_t postBmiFetchNia;
192852ba100SJustin Hibbits     volatile uint8_t  reserved4[172];
193852ba100SJustin Hibbits } _PackedType t_FmPcdCtrlParamsPage;
1940aeed3e9SJustin Hibbits 
1950aeed3e9SJustin Hibbits 
196852ba100SJustin Hibbits 
1970aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
1980aeed3e9SJustin Hibbits #pragma pack(pop)
1990aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
2000aeed3e9SJustin Hibbits 
2010aeed3e9SJustin Hibbits 
202852ba100SJustin Hibbits /*for UNDER_CONSTRUCTION_FM_RMU_USE_SEC its defined in fm_ext.h*/
203852ba100SJustin Hibbits typedef uint32_t t_FmFmanCtrl;
204852ba100SJustin Hibbits 
205852ba100SJustin Hibbits #define FPM_PORT_FM_CTL1                0x00000001
206852ba100SJustin Hibbits #define FPM_PORT_FM_CTL2                0x00000002
207852ba100SJustin Hibbits 
208852ba100SJustin Hibbits 
209852ba100SJustin Hibbits 
210852ba100SJustin Hibbits typedef struct t_FmPcdCcFragScratchPoolCmdParams {
211852ba100SJustin Hibbits     uint32_t    numOfBuffers;
212852ba100SJustin Hibbits     uint8_t     bufferPoolId;
213852ba100SJustin Hibbits } t_FmPcdCcFragScratchPoolCmdParams;
214852ba100SJustin Hibbits 
215852ba100SJustin Hibbits typedef struct t_FmPcdCcReassmTimeoutParams {
216852ba100SJustin Hibbits     bool        activate;
217852ba100SJustin Hibbits     uint8_t     tsbs;
218852ba100SJustin Hibbits     uint32_t    iprcpt;
219852ba100SJustin Hibbits } t_FmPcdCcReassmTimeoutParams;
220852ba100SJustin Hibbits 
2210aeed3e9SJustin Hibbits typedef struct {
2220aeed3e9SJustin Hibbits     uint8_t             baseEntry;
2230aeed3e9SJustin Hibbits     uint16_t            numOfClsPlanEntries;
2240aeed3e9SJustin Hibbits     uint32_t            vectors[FM_PCD_MAX_NUM_OF_CLS_PLANS];
2250aeed3e9SJustin Hibbits } t_FmPcdKgInterModuleClsPlanSet;
2260aeed3e9SJustin Hibbits 
2270aeed3e9SJustin Hibbits /**************************************************************************//**
2280aeed3e9SJustin Hibbits  @Description   Structure for binding a port to keygen schemes.
2290aeed3e9SJustin Hibbits *//***************************************************************************/
2300aeed3e9SJustin Hibbits typedef struct t_FmPcdKgInterModuleBindPortToSchemes {
2310aeed3e9SJustin Hibbits     uint8_t     hardwarePortId;
2320aeed3e9SJustin Hibbits     uint8_t     netEnvId;
2330aeed3e9SJustin Hibbits     bool        useClsPlan;                 /**< TRUE if this port uses the clsPlan mechanism */
2340aeed3e9SJustin Hibbits     uint8_t     numOfSchemes;
2350aeed3e9SJustin Hibbits     uint8_t     schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
2360aeed3e9SJustin Hibbits } t_FmPcdKgInterModuleBindPortToSchemes;
2370aeed3e9SJustin Hibbits 
2380aeed3e9SJustin Hibbits typedef struct {
2390aeed3e9SJustin Hibbits     uint32_t nextCcNodeInfo;
2400aeed3e9SJustin Hibbits     t_List   node;
2410aeed3e9SJustin Hibbits } t_CcNodeInfo;
2420aeed3e9SJustin Hibbits 
2430aeed3e9SJustin Hibbits typedef struct
2440aeed3e9SJustin Hibbits {
2450aeed3e9SJustin Hibbits     t_Handle    h_CcNode;
2460aeed3e9SJustin Hibbits     uint16_t    index;
2470aeed3e9SJustin Hibbits     t_List      node;
2480aeed3e9SJustin Hibbits }t_CcNodeInformation;
249852ba100SJustin Hibbits #define CC_NODE_F_OBJECT(ptr)  NCSW_LIST_OBJECT(ptr, t_CcNodeInformation, node)
250852ba100SJustin Hibbits 
251852ba100SJustin Hibbits typedef enum e_ModifyState
252852ba100SJustin Hibbits {
253852ba100SJustin Hibbits     e_MODIFY_STATE_ADD = 0,
254852ba100SJustin Hibbits     e_MODIFY_STATE_REMOVE,
255852ba100SJustin Hibbits     e_MODIFY_STATE_CHANGE
256852ba100SJustin Hibbits } e_ModifyState;
2570aeed3e9SJustin Hibbits 
2580aeed3e9SJustin Hibbits typedef struct
2590aeed3e9SJustin Hibbits {
2600aeed3e9SJustin Hibbits     t_Handle h_Manip;
2610aeed3e9SJustin Hibbits     t_List   node;
2620aeed3e9SJustin Hibbits }t_ManipInfo;
263852ba100SJustin Hibbits #define CC_NEXT_NODE_F_OBJECT(ptr)  NCSW_LIST_OBJECT(ptr, t_CcNodeInfo, node)
2640aeed3e9SJustin Hibbits 
2650aeed3e9SJustin Hibbits typedef struct {
2660aeed3e9SJustin Hibbits     uint32_t            type;
2670aeed3e9SJustin Hibbits     uint8_t             prOffset;
2680aeed3e9SJustin Hibbits     uint16_t            dataOffset;
269852ba100SJustin Hibbits     uint8_t             internalBufferOffset;
2700aeed3e9SJustin Hibbits     uint8_t             numOfTasks;
271852ba100SJustin Hibbits     uint8_t             numOfExtraTasks;
2720aeed3e9SJustin Hibbits     uint8_t             hardwarePortId;
273852ba100SJustin Hibbits     t_FmRevisionInfo    revInfo;
274852ba100SJustin Hibbits     uint32_t            nia;
275852ba100SJustin Hibbits     uint32_t            discardMask;
2760aeed3e9SJustin Hibbits } t_GetCcParams;
2770aeed3e9SJustin Hibbits 
2780aeed3e9SJustin Hibbits typedef struct {
2790aeed3e9SJustin Hibbits     uint32_t        type;
2800aeed3e9SJustin Hibbits     int             psoSize;
2810aeed3e9SJustin Hibbits     uint32_t        nia;
282852ba100SJustin Hibbits     t_FmFmanCtrl    orFmanCtrl;
283852ba100SJustin Hibbits     bool            overwrite;
284852ba100SJustin Hibbits     uint8_t         ofpDpde;
2850aeed3e9SJustin Hibbits } t_SetCcParams;
2860aeed3e9SJustin Hibbits 
2870aeed3e9SJustin Hibbits typedef struct {
2880aeed3e9SJustin Hibbits     t_GetCcParams getCcParams;
2890aeed3e9SJustin Hibbits     t_SetCcParams setCcParams;
2900aeed3e9SJustin Hibbits } t_FmPortGetSetCcParams;
2910aeed3e9SJustin Hibbits 
292852ba100SJustin Hibbits typedef struct {
293852ba100SJustin Hibbits     uint32_t    type;
294852ba100SJustin Hibbits     bool        sleep;
295852ba100SJustin Hibbits } t_FmSetParams;
296852ba100SJustin Hibbits 
297852ba100SJustin Hibbits typedef struct {
298852ba100SJustin Hibbits     uint32_t    type;
299852ba100SJustin Hibbits     uint32_t    fmqm_gs;
300852ba100SJustin Hibbits     uint32_t    fm_npi;
301852ba100SJustin Hibbits     uint32_t    fm_cld;
302852ba100SJustin Hibbits     uint32_t    fmfp_extc;
303852ba100SJustin Hibbits } t_FmGetParams;
304852ba100SJustin Hibbits 
305852ba100SJustin Hibbits typedef struct {
306852ba100SJustin Hibbits     t_FmSetParams setParams;
307852ba100SJustin Hibbits     t_FmGetParams getParams;
308852ba100SJustin Hibbits } t_FmGetSetParams;
309852ba100SJustin Hibbits 
310852ba100SJustin Hibbits t_Error FmGetSetParams(t_Handle h_Fm, t_FmGetSetParams *p_Params);
3110aeed3e9SJustin Hibbits 
TRY_LOCK(t_Handle h_Spinlock,volatile bool * p_Flag)3120aeed3e9SJustin Hibbits static __inline__ bool TRY_LOCK(t_Handle h_Spinlock, volatile bool *p_Flag)
3130aeed3e9SJustin Hibbits {
3140aeed3e9SJustin Hibbits     uint32_t intFlags;
3150aeed3e9SJustin Hibbits     if (h_Spinlock)
3160aeed3e9SJustin Hibbits         intFlags = XX_LockIntrSpinlock(h_Spinlock);
3170aeed3e9SJustin Hibbits     else
3180aeed3e9SJustin Hibbits         intFlags = XX_DisableAllIntr();
319852ba100SJustin Hibbits 
3200aeed3e9SJustin Hibbits     if (*p_Flag)
3210aeed3e9SJustin Hibbits     {
3220aeed3e9SJustin Hibbits         if (h_Spinlock)
3230aeed3e9SJustin Hibbits             XX_UnlockIntrSpinlock(h_Spinlock, intFlags);
3240aeed3e9SJustin Hibbits         else
3250aeed3e9SJustin Hibbits             XX_RestoreAllIntr(intFlags);
3260aeed3e9SJustin Hibbits         return FALSE;
3270aeed3e9SJustin Hibbits     }
3280aeed3e9SJustin Hibbits     *p_Flag = TRUE;
329852ba100SJustin Hibbits 
3300aeed3e9SJustin Hibbits     if (h_Spinlock)
3310aeed3e9SJustin Hibbits         XX_UnlockIntrSpinlock(h_Spinlock, intFlags);
3320aeed3e9SJustin Hibbits     else
3330aeed3e9SJustin Hibbits         XX_RestoreAllIntr(intFlags);
334852ba100SJustin Hibbits 
3350aeed3e9SJustin Hibbits     return TRUE;
3360aeed3e9SJustin Hibbits }
3370aeed3e9SJustin Hibbits 
3380aeed3e9SJustin Hibbits #define RELEASE_LOCK(_flag) _flag = FALSE;
3390aeed3e9SJustin Hibbits 
3400aeed3e9SJustin Hibbits /**************************************************************************//**
3410aeed3e9SJustin Hibbits  @Collection   Defines used for manipulation CC and BMI
3420aeed3e9SJustin Hibbits  @{
3430aeed3e9SJustin Hibbits *//***************************************************************************/
3440aeed3e9SJustin Hibbits #define INTERNAL_CONTEXT_OFFSET                 0x80000000
3450aeed3e9SJustin Hibbits #define OFFSET_OF_PR                            0x40000000
346852ba100SJustin Hibbits #define MANIP_EXTRA_SPACE                       0x20000000
3470aeed3e9SJustin Hibbits #define NUM_OF_TASKS                            0x10000000
3480aeed3e9SJustin Hibbits #define OFFSET_OF_DATA                          0x08000000
3490aeed3e9SJustin Hibbits #define HW_PORT_ID                              0x04000000
350852ba100SJustin Hibbits #define FM_REV                                  0x02000000
351852ba100SJustin Hibbits #define GET_NIA_FPNE                            0x01000000
352852ba100SJustin Hibbits #define GET_NIA_PNDN                            0x00800000
353852ba100SJustin Hibbits #define NUM_OF_EXTRA_TASKS                      0x00400000
354852ba100SJustin Hibbits #define DISCARD_MASK                            0x00200000
3550aeed3e9SJustin Hibbits 
3560aeed3e9SJustin Hibbits #define UPDATE_NIA_PNEN                         0x80000000
3570aeed3e9SJustin Hibbits #define UPDATE_PSO                              0x40000000
3580aeed3e9SJustin Hibbits #define UPDATE_NIA_PNDN                         0x20000000
3590aeed3e9SJustin Hibbits #define UPDATE_FMFP_PRC_WITH_ONE_RISC_ONLY      0x10000000
360852ba100SJustin Hibbits #define UPDATE_OFP_DPTE                         0x08000000
361852ba100SJustin Hibbits #define UPDATE_NIA_FENE                         0x04000000
362852ba100SJustin Hibbits #define UPDATE_NIA_CMNE                         0x02000000
363852ba100SJustin Hibbits #define UPDATE_NIA_FPNE                         0x01000000
3640aeed3e9SJustin Hibbits /* @} */
3650aeed3e9SJustin Hibbits 
3660aeed3e9SJustin Hibbits /**************************************************************************//**
3670aeed3e9SJustin Hibbits  @Collection   Defines used for manipulation CC and CC
3680aeed3e9SJustin Hibbits  @{
3690aeed3e9SJustin Hibbits *//***************************************************************************/
3700aeed3e9SJustin Hibbits #define UPDATE_NIA_ENQ_WITHOUT_DMA              0x80000000
3710aeed3e9SJustin Hibbits #define UPDATE_CC_WITH_TREE                     0x40000000
3720aeed3e9SJustin Hibbits #define UPDATE_CC_WITH_DELETE_TREE              0x20000000
373852ba100SJustin Hibbits #define UPDATE_KG_NIA_CC_WA                     0x10000000
374852ba100SJustin Hibbits #define UPDATE_KG_OPT_MODE                      0x08000000
375852ba100SJustin Hibbits #define UPDATE_KG_NIA                           0x04000000
376852ba100SJustin Hibbits #define UPDATE_CC_SHADOW_CLEAR                    0x02000000
3770aeed3e9SJustin Hibbits /* @} */
3780aeed3e9SJustin Hibbits 
379852ba100SJustin Hibbits #define UPDATE_FPM_BRKC_SLP                     0x80000000
380852ba100SJustin Hibbits #define UPDATE_FPM_EXTC		                0x40000000
381852ba100SJustin Hibbits #define UPDATE_FPM_EXTC_CLEAR	                0x20000000
382852ba100SJustin Hibbits #define GET_FMQM_GS		                0x10000000
383852ba100SJustin Hibbits #define GET_FM_NPI		                0x08000000
384852ba100SJustin Hibbits #define GET_FMFP_EXTC		                0x04000000
385852ba100SJustin Hibbits #define CLEAR_IRAM_READY	                0x02000000
386852ba100SJustin Hibbits #define UPDATE_FM_CLD		                0x01000000
387852ba100SJustin Hibbits #define GET_FM_CLD		                0x00800000
3880aeed3e9SJustin Hibbits #define FM_MAX_NUM_OF_PORTS     (FM_MAX_NUM_OF_OH_PORTS +     \
3890aeed3e9SJustin Hibbits                                  FM_MAX_NUM_OF_1G_RX_PORTS +  \
3900aeed3e9SJustin Hibbits                                  FM_MAX_NUM_OF_10G_RX_PORTS + \
3910aeed3e9SJustin Hibbits                                  FM_MAX_NUM_OF_1G_TX_PORTS +  \
3920aeed3e9SJustin Hibbits                                  FM_MAX_NUM_OF_10G_TX_PORTS)
3930aeed3e9SJustin Hibbits 
3940aeed3e9SJustin Hibbits #define MODULE_NAME_SIZE        30
3950aeed3e9SJustin Hibbits #define DUMMY_PORT_ID           0
3960aeed3e9SJustin Hibbits 
3970aeed3e9SJustin Hibbits #define FM_LIODN_OFFSET_MASK    0x3FF
3980aeed3e9SJustin Hibbits 
3990aeed3e9SJustin Hibbits /**************************************************************************//**
4000aeed3e9SJustin Hibbits   @Description       NIA Description
4010aeed3e9SJustin Hibbits *//***************************************************************************/
402852ba100SJustin Hibbits #define NIA_ENG_MASK                0x007C0000
403852ba100SJustin Hibbits #define NIA_AC_MASK                 0x0003ffff
404852ba100SJustin Hibbits 
4050aeed3e9SJustin Hibbits #define NIA_ORDER_RESTOR            0x00800000
4060aeed3e9SJustin Hibbits #define NIA_ENG_FM_CTL              0x00000000
4070aeed3e9SJustin Hibbits #define NIA_ENG_PRS                 0x00440000
4080aeed3e9SJustin Hibbits #define NIA_ENG_KG                  0x00480000
4090aeed3e9SJustin Hibbits #define NIA_ENG_PLCR                0x004C0000
4100aeed3e9SJustin Hibbits #define NIA_ENG_BMI                 0x00500000
4110aeed3e9SJustin Hibbits #define NIA_ENG_QMI_ENQ             0x00540000
4120aeed3e9SJustin Hibbits #define NIA_ENG_QMI_DEQ             0x00580000
4130aeed3e9SJustin Hibbits 
4140aeed3e9SJustin Hibbits #define NIA_FM_CTL_AC_CC                        0x00000006
4150aeed3e9SJustin Hibbits #define NIA_FM_CTL_AC_HC                        0x0000000C
4160aeed3e9SJustin Hibbits #define NIA_FM_CTL_AC_IND_MODE_TX               0x00000008
4170aeed3e9SJustin Hibbits #define NIA_FM_CTL_AC_IND_MODE_RX               0x0000000A
418852ba100SJustin Hibbits #define NIA_FM_CTL_AC_POP_TO_N_STEP             0x0000000e
419852ba100SJustin Hibbits #define NIA_FM_CTL_AC_PRE_BMI_FETCH_HEADER      0x00000010
420852ba100SJustin Hibbits #define NIA_FM_CTL_AC_PRE_BMI_FETCH_FULL_FRAME  0x00000018
421852ba100SJustin Hibbits #define NIA_FM_CTL_AC_POST_BMI_FETCH            0x00000012
422852ba100SJustin Hibbits #define NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME         0x0000001A
423852ba100SJustin Hibbits #define NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME     0x0000001E
424852ba100SJustin Hibbits #define NIA_FM_CTL_AC_POST_BMI_ENQ_ORR          0x00000014
425852ba100SJustin Hibbits #define NIA_FM_CTL_AC_POST_BMI_ENQ              0x00000022
426852ba100SJustin Hibbits #define NIA_FM_CTL_AC_PRE_CC                    0x00000020
427852ba100SJustin Hibbits #define NIA_FM_CTL_AC_POST_TX                   0x00000024
428852ba100SJustin Hibbits /* V3 only */
429852ba100SJustin Hibbits #define NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME        0x00000028
430852ba100SJustin Hibbits #define NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_DISCARD_FRAME    0x0000002A
431852ba100SJustin Hibbits #define NIA_FM_CTL_AC_NO_IPACC_POP_TO_N_STEP            0x0000002C
4320aeed3e9SJustin Hibbits 
4330aeed3e9SJustin Hibbits #define NIA_BMI_AC_ENQ_FRAME        0x00000002
4340aeed3e9SJustin Hibbits #define NIA_BMI_AC_TX_RELEASE       0x000002C0
4350aeed3e9SJustin Hibbits #define NIA_BMI_AC_RELEASE          0x000000C0
4360aeed3e9SJustin Hibbits #define NIA_BMI_AC_DISCARD          0x000000C1
4370aeed3e9SJustin Hibbits #define NIA_BMI_AC_TX               0x00000274
4380aeed3e9SJustin Hibbits #define NIA_BMI_AC_FETCH            0x00000208
4390aeed3e9SJustin Hibbits #define NIA_BMI_AC_MASK             0x000003FF
4400aeed3e9SJustin Hibbits 
4410aeed3e9SJustin Hibbits #define NIA_KG_DIRECT               0x00000100
4420aeed3e9SJustin Hibbits #define NIA_KG_CC_EN                0x00000200
4430aeed3e9SJustin Hibbits #define NIA_PLCR_ABSOLUTE           0x00008000
4440aeed3e9SJustin Hibbits 
4450aeed3e9SJustin Hibbits #define NIA_BMI_AC_ENQ_FRAME_WITHOUT_DMA    0x00000202
4460aeed3e9SJustin Hibbits 
447852ba100SJustin Hibbits #if defined(FM_OP_NO_VSP_NO_RELEASE_ERRATA_FMAN_A006675) || defined(FM_ERROR_VSP_NO_MATCH_SW006)
448852ba100SJustin Hibbits #define GET_NIA_BMI_AC_ENQ_FRAME(h_FmPcd)   \
449852ba100SJustin Hibbits     (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \
450852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME) : \
451852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME))
452852ba100SJustin Hibbits #define GET_NIA_BMI_AC_DISCARD_FRAME(h_FmPcd)   \
453852ba100SJustin Hibbits     (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \
454852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME) : \
455852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_DISCARD_FRAME))
456852ba100SJustin Hibbits #define GET_NO_PCD_NIA_BMI_AC_ENQ_FRAME()   \
457852ba100SJustin Hibbits         (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME)
458852ba100SJustin Hibbits #else
459852ba100SJustin Hibbits #define GET_NIA_BMI_AC_ENQ_FRAME(h_FmPcd)   \
460852ba100SJustin Hibbits     (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \
461852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_ENQ_FRAME) : \
462852ba100SJustin Hibbits                 (NIA_ENG_BMI | NIA_BMI_AC_ENQ_FRAME))
463852ba100SJustin Hibbits #define GET_NIA_BMI_AC_DISCARD_FRAME(h_FmPcd)   \
464852ba100SJustin Hibbits     (uint32_t)((FmPcdIsAdvancedOffloadSupported(h_FmPcd)) ? \
465852ba100SJustin Hibbits                 (NIA_ENG_FM_CTL | NIA_FM_CTL_AC_PRE_BMI_DISCARD_FRAME) : \
466852ba100SJustin Hibbits                 (NIA_ENG_BMI | NIA_BMI_AC_DISCARD))
467852ba100SJustin Hibbits #define GET_NO_PCD_NIA_BMI_AC_ENQ_FRAME()   \
468852ba100SJustin Hibbits             (NIA_ENG_BMI | NIA_BMI_AC_ENQ_FRAME)
469852ba100SJustin Hibbits #endif /* defined(FM_OP_NO_VSP_NO_RELEASE_ERRATA_FMAN_A006675) || ... */
470852ba100SJustin Hibbits 
471852ba100SJustin Hibbits /**************************************************************************//**
472852ba100SJustin Hibbits   @Description        CTRL Parameters Page defines
473852ba100SJustin Hibbits *//***************************************************************************/
474852ba100SJustin Hibbits #define FM_CTL_PARAMS_PAGE_OP_FIX_EN            0x80000000
475852ba100SJustin Hibbits #define FM_CTL_PARAMS_PAGE_OFFLOAD_SUPPORT_EN   0x40000000
476852ba100SJustin Hibbits #define FM_CTL_PARAMS_PAGE_ALWAYS_ON            0x00000100
477852ba100SJustin Hibbits 
478852ba100SJustin Hibbits #define FM_CTL_PARAMS_PAGE_ERROR_VSP_MASK       0x0000003f
479852ba100SJustin Hibbits 
4800aeed3e9SJustin Hibbits /**************************************************************************//**
4810aeed3e9SJustin Hibbits  @Description       Port Id defines
4820aeed3e9SJustin Hibbits *//***************************************************************************/
483852ba100SJustin Hibbits #if (DPAA_VERSION == 10)
4840aeed3e9SJustin Hibbits #define BASE_OH_PORTID              1
485852ba100SJustin Hibbits #else
486852ba100SJustin Hibbits #define BASE_OH_PORTID              2
487852ba100SJustin Hibbits #endif /* (DPAA_VERSION == 10) */
4880aeed3e9SJustin Hibbits #define BASE_1G_RX_PORTID           8
4890aeed3e9SJustin Hibbits #define BASE_10G_RX_PORTID          0x10
4900aeed3e9SJustin Hibbits #define BASE_1G_TX_PORTID           0x28
4910aeed3e9SJustin Hibbits #define BASE_10G_TX_PORTID          0x30
4920aeed3e9SJustin Hibbits 
4930aeed3e9SJustin Hibbits #define FM_PCD_PORT_OH_BASE_INDX        0
4940aeed3e9SJustin Hibbits #define FM_PCD_PORT_1G_RX_BASE_INDX     (FM_PCD_PORT_OH_BASE_INDX+FM_MAX_NUM_OF_OH_PORTS)
4950aeed3e9SJustin Hibbits #define FM_PCD_PORT_10G_RX_BASE_INDX    (FM_PCD_PORT_1G_RX_BASE_INDX+FM_MAX_NUM_OF_1G_RX_PORTS)
4960aeed3e9SJustin Hibbits #define FM_PCD_PORT_1G_TX_BASE_INDX     (FM_PCD_PORT_10G_RX_BASE_INDX+FM_MAX_NUM_OF_10G_RX_PORTS)
4970aeed3e9SJustin Hibbits #define FM_PCD_PORT_10G_TX_BASE_INDX    (FM_PCD_PORT_1G_TX_BASE_INDX+FM_MAX_NUM_OF_1G_TX_PORTS)
4980aeed3e9SJustin Hibbits 
4990aeed3e9SJustin Hibbits #if (FM_MAX_NUM_OF_OH_PORTS > 0)
5000aeed3e9SJustin Hibbits #define CHECK_PORT_ID_OH_PORTS(_relativePortId)                     \
5010aeed3e9SJustin Hibbits     if ((_relativePortId) >= FM_MAX_NUM_OF_OH_PORTS)                \
5020aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id"))
5030aeed3e9SJustin Hibbits #else
5040aeed3e9SJustin Hibbits #define CHECK_PORT_ID_OH_PORTS(_relativePortId)                     \
5050aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal OH_PORT port id"))
5060aeed3e9SJustin Hibbits #endif
5070aeed3e9SJustin Hibbits #if (FM_MAX_NUM_OF_1G_RX_PORTS > 0)
5080aeed3e9SJustin Hibbits #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId)                  \
5090aeed3e9SJustin Hibbits     if ((_relativePortId) >= FM_MAX_NUM_OF_1G_RX_PORTS)             \
5100aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id"))
5110aeed3e9SJustin Hibbits #else
5120aeed3e9SJustin Hibbits #define CHECK_PORT_ID_1G_RX_PORTS(_relativePortId)                  \
5130aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_RX_PORT port id"))
5140aeed3e9SJustin Hibbits #endif
5150aeed3e9SJustin Hibbits #if (FM_MAX_NUM_OF_10G_RX_PORTS > 0)
5160aeed3e9SJustin Hibbits #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId)                 \
5170aeed3e9SJustin Hibbits     if ((_relativePortId) >= FM_MAX_NUM_OF_10G_RX_PORTS)            \
5180aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id"))
5190aeed3e9SJustin Hibbits #else
5200aeed3e9SJustin Hibbits #define CHECK_PORT_ID_10G_RX_PORTS(_relativePortId)                 \
5210aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_RX_PORT port id"))
5220aeed3e9SJustin Hibbits #endif
5230aeed3e9SJustin Hibbits #if (FM_MAX_NUM_OF_1G_TX_PORTS > 0)
5240aeed3e9SJustin Hibbits #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId)                  \
5250aeed3e9SJustin Hibbits     if ((_relativePortId) >= FM_MAX_NUM_OF_1G_TX_PORTS)             \
5260aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id"))
5270aeed3e9SJustin Hibbits #else
5280aeed3e9SJustin Hibbits #define CHECK_PORT_ID_1G_TX_PORTS(_relativePortId)                  \
5290aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 1G_TX_PORT port id"))
5300aeed3e9SJustin Hibbits #endif
5310aeed3e9SJustin Hibbits #if (FM_MAX_NUM_OF_10G_TX_PORTS > 0)
5320aeed3e9SJustin Hibbits #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId)                 \
5330aeed3e9SJustin Hibbits     if ((_relativePortId) >= FM_MAX_NUM_OF_10G_TX_PORTS)            \
5340aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id"))
5350aeed3e9SJustin Hibbits #else
5360aeed3e9SJustin Hibbits #define CHECK_PORT_ID_10G_TX_PORTS(_relativePortId)                 \
5370aeed3e9SJustin Hibbits         REPORT_ERROR(MAJOR, E_INVALID_VALUE, ("Illegal 10G_TX_PORT port id"))
5380aeed3e9SJustin Hibbits #endif
5390aeed3e9SJustin Hibbits 
540852ba100SJustin Hibbits uint8_t SwPortIdToHwPortId(e_FmPortType type, uint8_t relativePortId, uint8_t majorRev, uint8_t minorRev);
5410aeed3e9SJustin Hibbits 
5420aeed3e9SJustin Hibbits #define HW_PORT_ID_TO_SW_PORT_ID(_relativePortId, hardwarePortId)                   \
5430aeed3e9SJustin Hibbits {   if (((hardwarePortId) >= BASE_OH_PORTID) &&                                     \
5440aeed3e9SJustin Hibbits         ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS))                 \
5450aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)((hardwarePortId)-BASE_OH_PORTID);               \
5460aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_10G_TX_PORTID) &&                            \
5470aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS))    \
5480aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID);           \
5490aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_1G_TX_PORTID) &&                             \
5500aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS))      \
5510aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID);            \
5520aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_10G_RX_PORTID) &&                            \
5530aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS))    \
5540aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID);           \
5550aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_1G_RX_PORTID) &&                             \
5560aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS))      \
5570aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID);            \
5580aeed3e9SJustin Hibbits     else {                                                                          \
5590aeed3e9SJustin Hibbits         _relativePortId = (uint8_t)DUMMY_PORT_ID;                                   \
5600aeed3e9SJustin Hibbits         ASSERT_COND(TRUE);                                                          \
5610aeed3e9SJustin Hibbits     }                                                                               \
5620aeed3e9SJustin Hibbits }
5630aeed3e9SJustin Hibbits 
5640aeed3e9SJustin Hibbits #define HW_PORT_ID_TO_SW_PORT_INDX(swPortIndex, hardwarePortId)                                             \
5650aeed3e9SJustin Hibbits do {                                                                                                        \
5660aeed3e9SJustin Hibbits     if (((hardwarePortId) >= BASE_OH_PORTID) && ((hardwarePortId) < BASE_OH_PORTID+FM_MAX_NUM_OF_OH_PORTS)) \
5670aeed3e9SJustin Hibbits         swPortIndex = (uint8_t)((hardwarePortId)-BASE_OH_PORTID+FM_PCD_PORT_OH_BASE_INDX);                  \
5680aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_1G_RX_PORTID) &&                                                     \
5690aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_1G_RX_PORTID+FM_MAX_NUM_OF_1G_RX_PORTS))                              \
5700aeed3e9SJustin Hibbits         swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_RX_PORTID+FM_PCD_PORT_1G_RX_BASE_INDX);            \
5710aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_10G_RX_PORTID) &&                                                    \
5720aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_10G_RX_PORTID+FM_MAX_NUM_OF_10G_RX_PORTS))                            \
5730aeed3e9SJustin Hibbits         swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_RX_PORTID+FM_PCD_PORT_10G_RX_BASE_INDX);          \
5740aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_1G_TX_PORTID) &&                                                     \
5750aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_1G_TX_PORTID+FM_MAX_NUM_OF_1G_TX_PORTS))                              \
5760aeed3e9SJustin Hibbits         swPortIndex = (uint8_t)((hardwarePortId)-BASE_1G_TX_PORTID+FM_PCD_PORT_1G_TX_BASE_INDX);            \
5770aeed3e9SJustin Hibbits     else if (((hardwarePortId) >= BASE_10G_TX_PORTID) &&                                                    \
5780aeed3e9SJustin Hibbits              ((hardwarePortId) < BASE_10G_TX_PORTID+FM_MAX_NUM_OF_10G_TX_PORTS))                            \
5790aeed3e9SJustin Hibbits         swPortIndex = (uint8_t)((hardwarePortId)-BASE_10G_TX_PORTID+FM_PCD_PORT_10G_TX_BASE_INDX);          \
5800aeed3e9SJustin Hibbits     else ASSERT_COND(FALSE);                                                                                \
5810aeed3e9SJustin Hibbits } while (0)
5820aeed3e9SJustin Hibbits 
5830aeed3e9SJustin Hibbits #define SW_PORT_INDX_TO_HW_PORT_ID(hardwarePortId, swPortIndex)                                                 \
5840aeed3e9SJustin Hibbits do {                                                                                                            \
5850aeed3e9SJustin Hibbits     if (((swPortIndex) >= FM_PCD_PORT_OH_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_1G_RX_BASE_INDX))           \
5860aeed3e9SJustin Hibbits         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_OH_BASE_INDX+BASE_OH_PORTID);                      \
5870aeed3e9SJustin Hibbits     else if (((swPortIndex) >= FM_PCD_PORT_1G_RX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_RX_BASE_INDX))  \
5880aeed3e9SJustin Hibbits         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_RX_BASE_INDX+BASE_1G_RX_PORTID);                \
5890aeed3e9SJustin Hibbits     else if (((swPortIndex) >= FM_PCD_PORT_10G_RX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS))          \
5900aeed3e9SJustin Hibbits         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_RX_BASE_INDX+BASE_10G_RX_PORTID);              \
5910aeed3e9SJustin Hibbits     else if (((swPortIndex) >= FM_PCD_PORT_1G_TX_BASE_INDX) && ((swPortIndex) < FM_PCD_PORT_10G_TX_BASE_INDX))  \
5920aeed3e9SJustin Hibbits         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_1G_TX_BASE_INDX+BASE_1G_TX_PORTID);                \
5930aeed3e9SJustin Hibbits     else if (((swPortIndex) >= FM_PCD_PORT_10G_TX_BASE_INDX) && ((swPortIndex) < FM_MAX_NUM_OF_PORTS))          \
5940aeed3e9SJustin Hibbits         hardwarePortId = (uint8_t)((swPortIndex)-FM_PCD_PORT_10G_TX_BASE_INDX+BASE_10G_TX_PORTID);              \
5950aeed3e9SJustin Hibbits     else ASSERT_COND(FALSE);                                                                                    \
5960aeed3e9SJustin Hibbits } while (0)
5970aeed3e9SJustin Hibbits 
598852ba100SJustin Hibbits #define BMI_MAX_FIFO_SIZE                   (FM_MURAM_SIZE)
5990aeed3e9SJustin Hibbits #define BMI_FIFO_UNITS                      0x100
6000aeed3e9SJustin Hibbits 
6010aeed3e9SJustin Hibbits typedef struct {
6020aeed3e9SJustin Hibbits     void        (*f_Isr) (t_Handle h_Arg);
6030aeed3e9SJustin Hibbits     t_Handle    h_SrcHandle;
6040aeed3e9SJustin Hibbits     uint8_t     guestId;
6050aeed3e9SJustin Hibbits } t_FmIntrSrc;
6060aeed3e9SJustin Hibbits 
6070aeed3e9SJustin Hibbits #define ILLEGAL_HDR_NUM                     0xFF
6080aeed3e9SJustin Hibbits #define NO_HDR_NUM                          FM_PCD_PRS_NUM_OF_HDRS
6090aeed3e9SJustin Hibbits 
6100aeed3e9SJustin Hibbits #define IS_PRIVATE_HEADER(hdr)              (((hdr) == HEADER_TYPE_USER_DEFINED_SHIM1) ||   \
6110aeed3e9SJustin Hibbits                                              ((hdr) == HEADER_TYPE_USER_DEFINED_SHIM2))
6120aeed3e9SJustin Hibbits #define IS_SPECIAL_HEADER(hdr)              ((hdr) == HEADER_TYPE_MACSEC)
6130aeed3e9SJustin Hibbits 
GetPrsHdrNum(e_NetHeaderType hdr)614852ba100SJustin Hibbits static __inline__ uint8_t GetPrsHdrNum(e_NetHeaderType hdr)
615852ba100SJustin Hibbits {
616852ba100SJustin Hibbits 	 switch (hdr)
617852ba100SJustin Hibbits 	 {   case (HEADER_TYPE_ETH):              return 0;
618852ba100SJustin Hibbits 	     case (HEADER_TYPE_LLC_SNAP):         return 1;
619852ba100SJustin Hibbits 	     case (HEADER_TYPE_VLAN):             return 2;
620852ba100SJustin Hibbits 	     case (HEADER_TYPE_PPPoE):            return 3;
621852ba100SJustin Hibbits 	     case (HEADER_TYPE_PPP):              return 3;
622852ba100SJustin Hibbits 	     case (HEADER_TYPE_MPLS):             return 4;
623852ba100SJustin Hibbits 	     case (HEADER_TYPE_IPv4):             return 5;
624852ba100SJustin Hibbits 	     case (HEADER_TYPE_IPv6):             return 6;
625852ba100SJustin Hibbits 	     case (HEADER_TYPE_GRE):              return 7;
626852ba100SJustin Hibbits 	     case (HEADER_TYPE_MINENCAP):         return 8;
627852ba100SJustin Hibbits 	     case (HEADER_TYPE_USER_DEFINED_L3):  return 9;
628852ba100SJustin Hibbits 	     case (HEADER_TYPE_TCP):              return 10;
629852ba100SJustin Hibbits 	     case (HEADER_TYPE_UDP):              return 11;
630852ba100SJustin Hibbits 	     case (HEADER_TYPE_IPSEC_AH):
631852ba100SJustin Hibbits 	     case (HEADER_TYPE_IPSEC_ESP):        return 12;
632852ba100SJustin Hibbits 	     case (HEADER_TYPE_SCTP):             return 13;
633852ba100SJustin Hibbits 	     case (HEADER_TYPE_DCCP):             return 14;
634852ba100SJustin Hibbits 	     case (HEADER_TYPE_USER_DEFINED_L4):  return 15;
635852ba100SJustin Hibbits 	     case (HEADER_TYPE_USER_DEFINED_SHIM1):
636852ba100SJustin Hibbits 	     case (HEADER_TYPE_USER_DEFINED_SHIM2):
637852ba100SJustin Hibbits 	     case (HEADER_TYPE_MACSEC):           return NO_HDR_NUM;
638852ba100SJustin Hibbits 	     default:
639852ba100SJustin Hibbits 	         return ILLEGAL_HDR_NUM;
6400aeed3e9SJustin Hibbits 	 }
6410aeed3e9SJustin Hibbits }
6420aeed3e9SJustin Hibbits 
6430aeed3e9SJustin Hibbits #define FM_PCD_MAX_NUM_OF_OPTIONS(clsPlanEntries)   ((clsPlanEntries==256)? 8:((clsPlanEntries==128)? 7: ((clsPlanEntries==64)? 6: ((clsPlanEntries==32)? 5:0))))
6440aeed3e9SJustin Hibbits 
6450aeed3e9SJustin Hibbits 
6460aeed3e9SJustin Hibbits /**************************************************************************//**
6470aeed3e9SJustin Hibbits  @Description   A structure for initializing a keygen classification plan group
6480aeed3e9SJustin Hibbits *//***************************************************************************/
6490aeed3e9SJustin Hibbits typedef struct t_FmPcdKgInterModuleClsPlanGrpParams {
6500aeed3e9SJustin Hibbits     uint8_t         netEnvId;   /* IN */
6510aeed3e9SJustin Hibbits     bool            grpExists;  /* OUT (unused in FmPcdKgBuildClsPlanGrp)*/
6520aeed3e9SJustin Hibbits     uint8_t         clsPlanGrpId;  /* OUT */
6530aeed3e9SJustin Hibbits     bool            emptyClsPlanGrp; /* OUT */
6540aeed3e9SJustin Hibbits     uint8_t         numOfOptions;   /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
6550aeed3e9SJustin Hibbits     protocolOpt_t   options[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
6560aeed3e9SJustin Hibbits                                     /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
6570aeed3e9SJustin Hibbits     uint32_t        optVectors[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
6580aeed3e9SJustin Hibbits                                /* OUT in FmPcdGetSetClsPlanGrpParams IN in FmPcdKgBuildClsPlanGrp*/
6590aeed3e9SJustin Hibbits } t_FmPcdKgInterModuleClsPlanGrpParams;
6600aeed3e9SJustin Hibbits 
661852ba100SJustin Hibbits typedef struct t_FmPcdLock {
662852ba100SJustin Hibbits     t_Handle        h_Spinlock;
663852ba100SJustin Hibbits     volatile bool   flag;
664852ba100SJustin Hibbits     t_List          node;
665852ba100SJustin Hibbits } t_FmPcdLock;
666852ba100SJustin Hibbits #define FM_PCD_LOCK_OBJ(ptr)  NCSW_LIST_OBJECT(ptr, t_FmPcdLock, node)
6670aeed3e9SJustin Hibbits 
6680aeed3e9SJustin Hibbits 
6690aeed3e9SJustin Hibbits typedef t_Error (t_FmPortGetSetCcParamsCallback) (t_Handle                  h_FmPort,
6700aeed3e9SJustin Hibbits                                                   t_FmPortGetSetCcParams    *p_FmPortGetSetCcParams);
6710aeed3e9SJustin Hibbits 
6720aeed3e9SJustin Hibbits 
673852ba100SJustin Hibbits /***********************************************************************/
674852ba100SJustin Hibbits /*          Common API for FM-PCD module                               */
675852ba100SJustin Hibbits /***********************************************************************/
6760aeed3e9SJustin Hibbits t_Handle    FmPcdGetHcHandle(t_Handle h_FmPcd);
6770aeed3e9SJustin Hibbits uint32_t    FmPcdGetSwPrsOffset(t_Handle h_FmPcd, e_NetHeaderType hdr, uint8_t  indexPerHdr);
6780aeed3e9SJustin Hibbits uint32_t    FmPcdGetLcv(t_Handle h_FmPcd, uint32_t netEnvId, uint8_t hdrNum);
6790aeed3e9SJustin Hibbits uint32_t    FmPcdGetMacsecLcv(t_Handle h_FmPcd, uint32_t netEnvId);
6800aeed3e9SJustin Hibbits void        FmPcdIncNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId);
6810aeed3e9SJustin Hibbits void        FmPcdDecNetEnvOwners(t_Handle h_FmPcd, uint8_t netEnvId);
682852ba100SJustin Hibbits uint8_t     FmPcdGetNetEnvId(t_Handle h_NetEnv);
6830aeed3e9SJustin Hibbits void        FmPcdPortRegister(t_Handle h_FmPcd, t_Handle h_FmPort, uint8_t hardwarePortId);
6840aeed3e9SJustin Hibbits uint32_t    FmPcdLock(t_Handle h_FmPcd);
6850aeed3e9SJustin Hibbits void        FmPcdUnlock(t_Handle h_FmPcd, uint32_t  intFlags);
6860aeed3e9SJustin Hibbits bool        FmPcdNetEnvIsHdrExist(t_Handle h_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
687852ba100SJustin Hibbits t_Error     FmPcdFragHcScratchPoolInit(t_Handle h_FmPcd, uint8_t scratchBpid);
688852ba100SJustin Hibbits t_Error     FmPcdRegisterReassmPort(t_Handle h_FmPcd, t_Handle h_IpReasmCommonPramTbl);
689852ba100SJustin Hibbits t_Error     FmPcdUnregisterReassmPort(t_Handle h_FmPcd, t_Handle h_IpReasmCommonPramTbl);
690852ba100SJustin Hibbits bool        FmPcdIsAdvancedOffloadSupported(t_Handle h_FmPcd);
691852ba100SJustin Hibbits bool        FmPcdLockTryLockAll(t_Handle h_FmPcd);
692852ba100SJustin Hibbits void        FmPcdLockUnlockAll(t_Handle h_FmPcd);
693852ba100SJustin Hibbits t_Error     FmPcdHcSync(t_Handle h_FmPcd);
694852ba100SJustin Hibbits t_Handle    FmGetPcd(t_Handle h_Fm);
695852ba100SJustin Hibbits /***********************************************************************/
696852ba100SJustin Hibbits /*          Common API for FM-PCD KG module                            */
697852ba100SJustin Hibbits /***********************************************************************/
6980aeed3e9SJustin Hibbits uint8_t     FmPcdKgGetClsPlanGrpBase(t_Handle h_FmPcd, uint8_t clsPlanGrp);
6990aeed3e9SJustin Hibbits uint16_t    FmPcdKgGetClsPlanGrpSize(t_Handle h_FmPcd, uint8_t clsPlanGrp);
7000aeed3e9SJustin Hibbits t_Error     FmPcdKgBuildClsPlanGrp(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_Grp, t_FmPcdKgInterModuleClsPlanSet *p_ClsPlanSet);
701852ba100SJustin Hibbits 
702852ba100SJustin Hibbits uint8_t     FmPcdKgGetSchemeId(t_Handle h_Scheme);
703852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
704852ba100SJustin Hibbits bool        FmPcdKgGetVspe(t_Handle h_Scheme);
705852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
7060aeed3e9SJustin Hibbits uint8_t     FmPcdKgGetRelativeSchemeId(t_Handle h_FmPcd, uint8_t schemeId);
7070aeed3e9SJustin Hibbits void        FmPcdKgDestroyClsPlanGrp(t_Handle h_FmPcd, uint8_t grpId);
708852ba100SJustin Hibbits t_Error     FmPcdKgCheckInvalidateSchemeSw(t_Handle h_Scheme);
7090aeed3e9SJustin Hibbits t_Error     FmPcdKgBuildBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_BindPortToSchemes, uint32_t *p_SpReg, bool add);
7100aeed3e9SJustin Hibbits bool        FmPcdKgHwSchemeIsValid(uint32_t schemeModeReg);
7110aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildWriteSchemeActionReg(uint8_t schemeId, bool updateCounter);
7120aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildReadSchemeActionReg(uint8_t schemeId);
7130aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildWriteClsPlanBlockActionReg(uint8_t grpId);
7140aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildWritePortSchemeBindActionReg(uint8_t hardwarePortId);
7150aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildReadPortSchemeBindActionReg(uint8_t hardwarePortId);
7160aeed3e9SJustin Hibbits uint32_t    FmPcdKgBuildWritePortClsPlanBindActionReg(uint8_t hardwarePortId);
717852ba100SJustin Hibbits bool        FmPcdKgIsSchemeValidSw(t_Handle h_Scheme);
7180aeed3e9SJustin Hibbits 
7190aeed3e9SJustin Hibbits t_Error     FmPcdKgBindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes  *p_SchemeBind);
7200aeed3e9SJustin Hibbits t_Error     FmPcdKgUnbindPortToSchemes(t_Handle h_FmPcd , t_FmPcdKgInterModuleBindPortToSchemes *p_SchemeBind);
7210aeed3e9SJustin Hibbits uint32_t    FmPcdKgGetRequiredAction(t_Handle h_FmPcd, uint8_t schemeId);
722852ba100SJustin Hibbits uint32_t    FmPcdKgGetRequiredActionFlag(t_Handle h_FmPcd, uint8_t schemeId);
7230aeed3e9SJustin Hibbits e_FmPcdDoneAction FmPcdKgGetDoneAction(t_Handle h_FmPcd, uint8_t schemeId);
7240aeed3e9SJustin Hibbits e_FmPcdEngine FmPcdKgGetNextEngine(t_Handle h_FmPcd, uint8_t schemeId);
725852ba100SJustin Hibbits void        FmPcdKgUpdateRequiredAction(t_Handle h_Scheme, uint32_t requiredAction);
7260aeed3e9SJustin Hibbits bool        FmPcdKgIsDirectPlcr(t_Handle h_FmPcd, uint8_t schemeId);
7270aeed3e9SJustin Hibbits bool        FmPcdKgIsDistrOnPlcrProfile(t_Handle h_FmPcd, uint8_t schemeId);
7280aeed3e9SJustin Hibbits uint16_t    FmPcdKgGetRelativeProfileId(t_Handle h_FmPcd, uint8_t schemeId);
729852ba100SJustin Hibbits t_Handle    FmPcdKgGetSchemeHandle(t_Handle h_FmPcd, uint8_t relativeSchemeId);
730852ba100SJustin Hibbits bool        FmPcdKgIsSchemeHasOwners(t_Handle h_Scheme);
731852ba100SJustin Hibbits t_Error     FmPcdKgCcGetSetParams(t_Handle h_FmPcd, t_Handle  h_Scheme, uint32_t requiredAction, uint32_t value);
732852ba100SJustin Hibbits t_Error     FmPcdKgSetOrBindToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t netEnvId, protocolOpt_t *p_OptArray, uint8_t *p_ClsPlanGrpId, bool *p_IsEmptyClsPlanGrp);
733852ba100SJustin Hibbits t_Error     FmPcdKgDeleteOrUnbindPortToClsPlanGrp(t_Handle h_FmPcd, uint8_t hardwarePortId, uint8_t clsPlanGrpId);
7340aeed3e9SJustin Hibbits 
735852ba100SJustin Hibbits /***********************************************************************/
736852ba100SJustin Hibbits /*          Common API for FM-PCD parser module                        */
737852ba100SJustin Hibbits /***********************************************************************/
7380aeed3e9SJustin Hibbits t_Error     FmPcdPrsIncludePortInStatistics(t_Handle p_FmPcd, uint8_t hardwarePortId,  bool include);
7390aeed3e9SJustin Hibbits 
740852ba100SJustin Hibbits /***********************************************************************/
741852ba100SJustin Hibbits /*          Common API for FM-PCD policer module                       */
742852ba100SJustin Hibbits /***********************************************************************/
7430aeed3e9SJustin Hibbits t_Error     FmPcdPlcrAllocProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId, uint16_t numOfProfiles);
7440aeed3e9SJustin Hibbits t_Error     FmPcdPlcrFreeProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId);
7450aeed3e9SJustin Hibbits bool        FmPcdPlcrIsProfileValid(t_Handle h_FmPcd, uint16_t absoluteProfileId);
7460aeed3e9SJustin Hibbits uint16_t    FmPcdPlcrGetPortProfilesBase(t_Handle h_FmPcd, uint8_t hardwarePortId);
7470aeed3e9SJustin Hibbits uint16_t    FmPcdPlcrGetPortNumOfProfiles(t_Handle h_FmPcd, uint8_t hardwarePortId);
7480aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrBuildWritePlcrActionRegs(uint16_t absoluteProfileId);
7490aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrBuildCounterProfileReg(e_FmPcdPlcrProfileCounters counter);
7500aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrBuildWritePlcrActionReg(uint16_t absoluteProfileId);
7510aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrBuildReadPlcrActionReg(uint16_t absoluteProfileId);
752852ba100SJustin Hibbits uint16_t    FmPcdPlcrProfileGetAbsoluteId(t_Handle h_Profile);
753852ba100SJustin Hibbits t_Error     FmPcdPlcrGetAbsoluteIdByProfileParams(t_Handle                      h_FmPcd,
7540aeed3e9SJustin Hibbits                                           e_FmPcdProfileTypeSelection   profileType,
7550aeed3e9SJustin Hibbits                                           t_Handle                      h_FmPort,
7560aeed3e9SJustin Hibbits                                           uint16_t                      relativeProfile,
7570aeed3e9SJustin Hibbits                                           uint16_t                      *p_AbsoluteId);
7580aeed3e9SJustin Hibbits void        FmPcdPlcrInvalidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
7590aeed3e9SJustin Hibbits void        FmPcdPlcrValidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
7600aeed3e9SJustin Hibbits bool        FmPcdPlcrHwProfileIsValid(uint32_t profileModeReg);
7610aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrGetRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId);
762852ba100SJustin Hibbits uint32_t    FmPcdPlcrGetRequiredActionFlag(t_Handle h_FmPcd, uint16_t absoluteProfileId);
7630aeed3e9SJustin Hibbits uint32_t    FmPcdPlcrBuildNiaProfileReg(bool green, bool yellow, bool red);
7640aeed3e9SJustin Hibbits void        FmPcdPlcrUpdateRequiredAction(t_Handle h_FmPcd, uint16_t absoluteProfileId, uint32_t requiredAction);
765852ba100SJustin Hibbits t_Error     FmPcdPlcrCcGetSetParams(t_Handle h_FmPcd, uint16_t profileIndx,uint32_t requiredAction);
7660aeed3e9SJustin Hibbits 
767852ba100SJustin Hibbits /***********************************************************************/
768852ba100SJustin Hibbits /*          Common API for FM-PCD CC module                            */
769852ba100SJustin Hibbits /***********************************************************************/
7700aeed3e9SJustin Hibbits uint8_t     FmPcdCcGetParseCode(t_Handle h_CcNode);
7710aeed3e9SJustin Hibbits uint8_t     FmPcdCcGetOffset(t_Handle h_CcNode);
772852ba100SJustin Hibbits t_Error     FmPcdCcRemoveKey(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint16_t keyIndex);
773852ba100SJustin Hibbits t_Error     FmPcdCcAddKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint16_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPCdCcKeyParams);
774852ba100SJustin Hibbits 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);
775852ba100SJustin Hibbits t_Error     FmPcdCcModifyKeyAndNextEngine(t_Handle h_FmPcd, t_Handle h_FmPcdCcNode, uint16_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_FmPcdCcKeyParams);
776852ba100SJustin Hibbits t_Error     FmPcdCcModifyMissNextEngineParamNode(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams);
777852ba100SJustin Hibbits t_Error     FmPcdCcModifyNextEngineParamTree(t_Handle h_FmPcd, t_Handle h_FmPcdCcTree, uint8_t grpId, uint8_t index, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams);
778852ba100SJustin Hibbits uint32_t    FmPcdCcGetNodeAddrOffsetFromNodeInfo(t_Handle h_FmPcd, t_Handle h_Pointer);
779852ba100SJustin Hibbits t_Handle    FmPcdCcTreeGetSavedManipParams(t_Handle h_FmTree);
780852ba100SJustin Hibbits void        FmPcdCcTreeSetSavedManipParams(t_Handle h_FmTree, t_Handle h_SavedManipParams);
781852ba100SJustin Hibbits t_Error     FmPcdCcTreeAddIPR(t_Handle h_FmPcd, t_Handle h_FmTree, t_Handle h_NetEnv, t_Handle h_ReassemblyManip, bool schemes);
782852ba100SJustin Hibbits t_Error     FmPcdCcTreeAddCPR(t_Handle h_FmPcd, t_Handle h_FmTree, t_Handle h_NetEnv, t_Handle h_ReassemblyManip, bool schemes);
783852ba100SJustin Hibbits t_Error     FmPcdCcBindTree(t_Handle h_FmPcd, t_Handle h_PcdParams, t_Handle h_CcTree,  uint32_t  *p_Offset,t_Handle h_FmPort);
7840aeed3e9SJustin Hibbits t_Error     FmPcdCcUnbindTree(t_Handle h_FmPcd, t_Handle h_CcTree);
7850aeed3e9SJustin Hibbits 
786852ba100SJustin Hibbits /***********************************************************************/
787852ba100SJustin Hibbits /*          Common API for FM-PCD Manip module                            */
788852ba100SJustin Hibbits /***********************************************************************/
789852ba100SJustin Hibbits 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);
7900aeed3e9SJustin Hibbits 
791852ba100SJustin Hibbits /***********************************************************************/
792852ba100SJustin Hibbits /*          Common API for FM-Port module                            */
793852ba100SJustin Hibbits /***********************************************************************/
794852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
795852ba100SJustin Hibbits typedef enum e_FmPortGprFuncType
796852ba100SJustin Hibbits {
797852ba100SJustin Hibbits     e_FM_PORT_GPR_EMPTY = 0,
798852ba100SJustin Hibbits     e_FM_PORT_GPR_MURAM_PAGE
799852ba100SJustin Hibbits } e_FmPortGprFuncType;
800852ba100SJustin Hibbits 
801852ba100SJustin Hibbits t_Error     FmPortSetGprFunc(t_Handle h_FmPort, e_FmPortGprFuncType gprFunc, void **p_Value);
802852ba100SJustin Hibbits #endif /* DPAA_VERSION >= 11) */
803852ba100SJustin Hibbits t_Error     FmGetSetParams(t_Handle h_Fm, t_FmGetSetParams *p_FmGetSetParams);
804852ba100SJustin Hibbits t_Error     FmPortGetSetCcParams(t_Handle h_FmPort, t_FmPortGetSetCcParams *p_FmPortGetSetCcParams);
8050aeed3e9SJustin Hibbits uint8_t     FmPortGetNetEnvId(t_Handle h_FmPort);
8060aeed3e9SJustin Hibbits uint8_t     FmPortGetHardwarePortId(t_Handle h_FmPort);
8070aeed3e9SJustin Hibbits uint32_t    FmPortGetPcdEngines(t_Handle h_FmPort);
8080aeed3e9SJustin Hibbits void        FmPortPcdKgSwUnbindClsPlanGrp (t_Handle h_FmPort);
8090aeed3e9SJustin Hibbits 
8100aeed3e9SJustin Hibbits 
811852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
812852ba100SJustin Hibbits t_Error     FmPcdFrmReplicUpdate(t_Handle h_FmPcd, t_Handle h_FmPort, t_Handle h_FrmReplic);
813852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
814852ba100SJustin Hibbits 
8150aeed3e9SJustin Hibbits /**************************************************************************//**
8160aeed3e9SJustin Hibbits  @Function      FmRegisterIntr
8170aeed3e9SJustin Hibbits 
8180aeed3e9SJustin Hibbits  @Description   Used to register an inter-module event handler to be processed by FM
8190aeed3e9SJustin Hibbits 
8200aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
8210aeed3e9SJustin Hibbits  @Param[in]     mod             The module that causes the event
8220aeed3e9SJustin Hibbits  @Param[in]     modId           Module id - if more than 1 instansiation of this
8230aeed3e9SJustin Hibbits                                 mode exists,0 otherwise.
8240aeed3e9SJustin Hibbits  @Param[in]     intrType        Interrupt type (error/normal) selection.
8250aeed3e9SJustin Hibbits  @Param[in]     f_Isr           The interrupt service routine.
8260aeed3e9SJustin Hibbits  @Param[in]     h_Arg           Argument to be passed to f_Isr.
8270aeed3e9SJustin Hibbits 
8280aeed3e9SJustin Hibbits  @Return        None.
8290aeed3e9SJustin Hibbits *//***************************************************************************/
8300aeed3e9SJustin Hibbits void FmRegisterIntr(t_Handle               h_Fm,
8310aeed3e9SJustin Hibbits                     e_FmEventModules       mod,
8320aeed3e9SJustin Hibbits                     uint8_t                modId,
8330aeed3e9SJustin Hibbits                     e_FmIntrType           intrType,
8340aeed3e9SJustin Hibbits                     void                   (*f_Isr) (t_Handle h_Arg),
8350aeed3e9SJustin Hibbits                     t_Handle               h_Arg);
8360aeed3e9SJustin Hibbits 
8370aeed3e9SJustin Hibbits /**************************************************************************//**
8380aeed3e9SJustin Hibbits  @Function      FmUnregisterIntr
8390aeed3e9SJustin Hibbits 
8400aeed3e9SJustin Hibbits  @Description   Used to un-register an inter-module event handler that was processed by FM
8410aeed3e9SJustin Hibbits 
8420aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
8430aeed3e9SJustin Hibbits  @Param[in]     mod             The module that causes the event
8440aeed3e9SJustin Hibbits  @Param[in]     modId           Module id - if more than 1 instansiation of this
8450aeed3e9SJustin Hibbits                                 mode exists,0 otherwise.
8460aeed3e9SJustin Hibbits  @Param[in]     intrType        Interrupt type (error/normal) selection.
8470aeed3e9SJustin Hibbits 
8480aeed3e9SJustin Hibbits  @Return        None.
8490aeed3e9SJustin Hibbits *//***************************************************************************/
8500aeed3e9SJustin Hibbits void FmUnregisterIntr(t_Handle          h_Fm,
8510aeed3e9SJustin Hibbits                       e_FmEventModules  mod,
8520aeed3e9SJustin Hibbits                       uint8_t           modId,
8530aeed3e9SJustin Hibbits                       e_FmIntrType      intrType);
8540aeed3e9SJustin Hibbits 
8550aeed3e9SJustin Hibbits /**************************************************************************//**
8560aeed3e9SJustin Hibbits  @Function      FmRegisterFmCtlIntr
8570aeed3e9SJustin Hibbits 
8580aeed3e9SJustin Hibbits  @Description   Used to register to one of the fmCtl events in the FM module
8590aeed3e9SJustin Hibbits 
8600aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
8610aeed3e9SJustin Hibbits  @Param[in]     eventRegId      FmCtl event id (0-7).
8620aeed3e9SJustin Hibbits  @Param[in]     f_Isr           The interrupt service routine.
8630aeed3e9SJustin Hibbits 
8640aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
8650aeed3e9SJustin Hibbits 
8660aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
8670aeed3e9SJustin Hibbits *//***************************************************************************/
8680aeed3e9SJustin Hibbits void  FmRegisterFmCtlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event));
8690aeed3e9SJustin Hibbits 
8700aeed3e9SJustin Hibbits 
8710aeed3e9SJustin Hibbits /**************************************************************************//**
8720aeed3e9SJustin Hibbits  @Description   enum for defining MAC types
8730aeed3e9SJustin Hibbits *//***************************************************************************/
8740aeed3e9SJustin Hibbits typedef enum e_FmMacType {
8750aeed3e9SJustin Hibbits     e_FM_MAC_10G = 0,               /**< 10G MAC */
8760aeed3e9SJustin Hibbits     e_FM_MAC_1G                     /**< 1G MAC */
8770aeed3e9SJustin Hibbits } e_FmMacType;
8780aeed3e9SJustin Hibbits 
8790aeed3e9SJustin Hibbits /**************************************************************************//**
8800aeed3e9SJustin Hibbits  @Description   Structure for port-FM communication during FM_PORT_Init.
8810aeed3e9SJustin Hibbits                 Fields commented 'IN' are passed by the port module to be used
8820aeed3e9SJustin Hibbits                 by the FM module.
8830aeed3e9SJustin Hibbits                 Fields commented 'OUT' will be filled by FM before returning to port.
8840aeed3e9SJustin Hibbits                 Some fields are optional (depending on configuration) and
8850aeed3e9SJustin Hibbits                 will be analized by the port and FM modules accordingly.
8860aeed3e9SJustin Hibbits *//***************************************************************************/
8870aeed3e9SJustin Hibbits typedef struct t_FmInterModulePortInitParams {
8880aeed3e9SJustin Hibbits     uint8_t             hardwarePortId;     /**< IN. port Id */
8890aeed3e9SJustin Hibbits     e_FmPortType        portType;           /**< IN. Port type */
8900aeed3e9SJustin Hibbits     bool                independentMode;    /**< IN. TRUE if FM Port operates in independent mode */
8910aeed3e9SJustin Hibbits     uint16_t            liodnOffset;        /**< IN. Port's requested resource */
8920aeed3e9SJustin Hibbits     uint8_t             numOfTasks;         /**< IN. Port's requested resource */
8930aeed3e9SJustin Hibbits     uint8_t             numOfExtraTasks;    /**< IN. Port's requested resource */
8940aeed3e9SJustin Hibbits     uint8_t             numOfOpenDmas;      /**< IN. Port's requested resource */
8950aeed3e9SJustin Hibbits     uint8_t             numOfExtraOpenDmas; /**< IN. Port's requested resource */
8960aeed3e9SJustin Hibbits     uint32_t            sizeOfFifo;         /**< IN. Port's requested resource */
8970aeed3e9SJustin Hibbits     uint32_t            extraSizeOfFifo;    /**< IN. Port's requested resource */
8980aeed3e9SJustin Hibbits     uint8_t             deqPipelineDepth;   /**< IN. Port's requested resource */
899852ba100SJustin Hibbits     uint16_t            maxFrameLength;     /**< IN. Port's max frame length. */
9000aeed3e9SJustin Hibbits     uint16_t            liodnBase;          /**< IN. Irrelevant for P4080 rev 1.
9010aeed3e9SJustin Hibbits                                                  LIODN base for this port, to be
9020aeed3e9SJustin Hibbits                                                  used together with LIODN offset. */
9030aeed3e9SJustin Hibbits     t_FmPhysAddr        fmMuramPhysBaseAddr;/**< OUT. FM-MURAM physical address*/
9040aeed3e9SJustin Hibbits } t_FmInterModulePortInitParams;
9050aeed3e9SJustin Hibbits 
9060aeed3e9SJustin Hibbits /**************************************************************************//**
9070aeed3e9SJustin Hibbits  @Description   Structure for port-FM communication during FM_PORT_Free.
9080aeed3e9SJustin Hibbits *//***************************************************************************/
9090aeed3e9SJustin Hibbits typedef struct t_FmInterModulePortFreeParams {
9100aeed3e9SJustin Hibbits     uint8_t             hardwarePortId;     /**< IN. port Id */
9110aeed3e9SJustin Hibbits     e_FmPortType        portType;           /**< IN. Port type */
9120aeed3e9SJustin Hibbits     uint8_t             deqPipelineDepth;   /**< IN. Port's requested resource */
9130aeed3e9SJustin Hibbits } t_FmInterModulePortFreeParams;
9140aeed3e9SJustin Hibbits 
9150aeed3e9SJustin Hibbits /**************************************************************************//**
9160aeed3e9SJustin Hibbits  @Function      FmGetPcdPrsBaseAddr
9170aeed3e9SJustin Hibbits 
9180aeed3e9SJustin Hibbits  @Description   Get the base address of the Parser from the FM module
9190aeed3e9SJustin Hibbits 
9200aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
9210aeed3e9SJustin Hibbits 
9220aeed3e9SJustin Hibbits  @Return        Base address.
9230aeed3e9SJustin Hibbits *//***************************************************************************/
9240aeed3e9SJustin Hibbits uintptr_t FmGetPcdPrsBaseAddr(t_Handle h_Fm);
9250aeed3e9SJustin Hibbits 
9260aeed3e9SJustin Hibbits /**************************************************************************//**
9270aeed3e9SJustin Hibbits  @Function      FmGetPcdKgBaseAddr
9280aeed3e9SJustin Hibbits 
9290aeed3e9SJustin Hibbits  @Description   Get the base address of the Keygen from the FM module
9300aeed3e9SJustin Hibbits 
9310aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
9320aeed3e9SJustin Hibbits 
9330aeed3e9SJustin Hibbits  @Return        Base address.
9340aeed3e9SJustin Hibbits *//***************************************************************************/
9350aeed3e9SJustin Hibbits uintptr_t FmGetPcdKgBaseAddr(t_Handle h_Fm);
9360aeed3e9SJustin Hibbits 
9370aeed3e9SJustin Hibbits /**************************************************************************//**
9380aeed3e9SJustin Hibbits  @Function      FmGetPcdPlcrBaseAddr
9390aeed3e9SJustin Hibbits 
9400aeed3e9SJustin Hibbits  @Description   Get the base address of the Policer from the FM module
9410aeed3e9SJustin Hibbits 
9420aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
9430aeed3e9SJustin Hibbits 
9440aeed3e9SJustin Hibbits  @Return        Base address.
9450aeed3e9SJustin Hibbits *//***************************************************************************/
9460aeed3e9SJustin Hibbits uintptr_t FmGetPcdPlcrBaseAddr(t_Handle h_Fm);
9470aeed3e9SJustin Hibbits 
9480aeed3e9SJustin Hibbits /**************************************************************************//**
9490aeed3e9SJustin Hibbits  @Function      FmGetMuramHandle
9500aeed3e9SJustin Hibbits 
9510aeed3e9SJustin Hibbits  @Description   Get the handle of the MURAM from the FM module
9520aeed3e9SJustin Hibbits 
9530aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
9540aeed3e9SJustin Hibbits 
9550aeed3e9SJustin Hibbits  @Return        MURAM module handle.
9560aeed3e9SJustin Hibbits *//***************************************************************************/
9570aeed3e9SJustin Hibbits t_Handle FmGetMuramHandle(t_Handle h_Fm);
9580aeed3e9SJustin Hibbits 
9590aeed3e9SJustin Hibbits /**************************************************************************//**
9600aeed3e9SJustin Hibbits  @Function      FmGetPhysicalMuramBase
9610aeed3e9SJustin Hibbits 
9620aeed3e9SJustin Hibbits  @Description   Get the physical base address of the MURAM from the FM module
9630aeed3e9SJustin Hibbits 
9640aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
9650aeed3e9SJustin Hibbits  @Param[in]     fmPhysAddr      Physical MURAM base
9660aeed3e9SJustin Hibbits 
9670aeed3e9SJustin Hibbits  @Return        Physical base address.
9680aeed3e9SJustin Hibbits *//***************************************************************************/
9690aeed3e9SJustin Hibbits void FmGetPhysicalMuramBase(t_Handle h_Fm, t_FmPhysAddr *fmPhysAddr);
9700aeed3e9SJustin Hibbits 
9710aeed3e9SJustin Hibbits /**************************************************************************//**
9720aeed3e9SJustin Hibbits  @Function      FmGetTimeStampScale
9730aeed3e9SJustin Hibbits 
9740aeed3e9SJustin Hibbits  @Description   Used internally by other modules in order to get the timeStamp
9750aeed3e9SJustin Hibbits                 period as requested by the application.
9760aeed3e9SJustin Hibbits 
977852ba100SJustin Hibbits                 This function returns bit number that is incremented every 1 usec.
978852ba100SJustin Hibbits                 To calculate timestamp period in nsec, use
979852ba100SJustin Hibbits                 1000 / (1 << FmGetTimeStampScale()).
980852ba100SJustin Hibbits 
9810aeed3e9SJustin Hibbits  @Param[in]     h_Fm                    A handle to an FM Module.
9820aeed3e9SJustin Hibbits 
983852ba100SJustin Hibbits  @Return        Bit that counts 1 usec.
9840aeed3e9SJustin Hibbits 
9850aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
9860aeed3e9SJustin Hibbits *//***************************************************************************/
9870aeed3e9SJustin Hibbits uint32_t FmGetTimeStampScale(t_Handle h_Fm);
9880aeed3e9SJustin Hibbits 
9890aeed3e9SJustin Hibbits /**************************************************************************//**
9900aeed3e9SJustin Hibbits  @Function      FmResumeStalledPort
9910aeed3e9SJustin Hibbits 
9920aeed3e9SJustin Hibbits  @Description   Used internally by FM port to release a stalled port.
9930aeed3e9SJustin Hibbits 
9940aeed3e9SJustin Hibbits  @Param[in]     h_Fm                            A handle to an FM Module.
9950aeed3e9SJustin Hibbits  @Param[in]     hardwarePortId                    HW port id.
9960aeed3e9SJustin Hibbits 
9970aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
9980aeed3e9SJustin Hibbits 
9990aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10000aeed3e9SJustin Hibbits *//***************************************************************************/
10010aeed3e9SJustin Hibbits t_Error FmResumeStalledPort(t_Handle h_Fm, uint8_t hardwarePortId);
10020aeed3e9SJustin Hibbits 
10030aeed3e9SJustin Hibbits /**************************************************************************//**
10040aeed3e9SJustin Hibbits  @Function      FmIsPortStalled
10050aeed3e9SJustin Hibbits 
10060aeed3e9SJustin Hibbits  @Description   Used internally by FM port to read the port's status.
10070aeed3e9SJustin Hibbits 
10080aeed3e9SJustin Hibbits  @Param[in]     h_Fm                            A handle to an FM Module.
10090aeed3e9SJustin Hibbits  @Param[in]     hardwarePortId                  HW port id.
10100aeed3e9SJustin Hibbits  @Param[in]     p_IsStalled                     A pointer to the boolean port stalled state
10110aeed3e9SJustin Hibbits 
10120aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
10130aeed3e9SJustin Hibbits 
10140aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10150aeed3e9SJustin Hibbits *//***************************************************************************/
10160aeed3e9SJustin Hibbits t_Error FmIsPortStalled(t_Handle h_Fm, uint8_t hardwarePortId, bool *p_IsStalled);
10170aeed3e9SJustin Hibbits 
10180aeed3e9SJustin Hibbits /**************************************************************************//**
10190aeed3e9SJustin Hibbits  @Function      FmResetMac
10200aeed3e9SJustin Hibbits 
10210aeed3e9SJustin Hibbits  @Description   Used by MAC driver to reset the MAC registers
10220aeed3e9SJustin Hibbits 
10230aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
10240aeed3e9SJustin Hibbits  @Param[in]     type            MAC type.
10250aeed3e9SJustin Hibbits  @Param[in]     macId           MAC id - according to type.
10260aeed3e9SJustin Hibbits 
10270aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
10280aeed3e9SJustin Hibbits 
10290aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10300aeed3e9SJustin Hibbits *//***************************************************************************/
10310aeed3e9SJustin Hibbits t_Error FmResetMac(t_Handle h_Fm, e_FmMacType type, uint8_t macId);
10320aeed3e9SJustin Hibbits 
10330aeed3e9SJustin Hibbits /**************************************************************************//**
10340aeed3e9SJustin Hibbits  @Function      FmGetClockFreq
10350aeed3e9SJustin Hibbits 
10360aeed3e9SJustin Hibbits  @Description   Used by MAC driver to get the FM clock frequency
10370aeed3e9SJustin Hibbits 
10380aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
10390aeed3e9SJustin Hibbits 
10400aeed3e9SJustin Hibbits  @Return        clock-freq on success; 0 otherwise.
10410aeed3e9SJustin Hibbits 
10420aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10430aeed3e9SJustin Hibbits *//***************************************************************************/
10440aeed3e9SJustin Hibbits uint16_t FmGetClockFreq(t_Handle h_Fm);
10450aeed3e9SJustin Hibbits 
10460aeed3e9SJustin Hibbits /**************************************************************************//**
1047852ba100SJustin Hibbits  @Function      FmGetMacClockFreq
1048852ba100SJustin Hibbits 
1049852ba100SJustin Hibbits  @Description   Used by MAC driver to get the MAC clock frequency
1050852ba100SJustin Hibbits 
1051852ba100SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
1052852ba100SJustin Hibbits 
1053852ba100SJustin Hibbits  @Return        clock-freq on success; 0 otherwise.
1054852ba100SJustin Hibbits 
1055852ba100SJustin Hibbits  @Cautions      Allowed only following FM_Init().
1056852ba100SJustin Hibbits *//***************************************************************************/
1057852ba100SJustin Hibbits uint16_t FmGetMacClockFreq(t_Handle h_Fm);
1058852ba100SJustin Hibbits 
1059852ba100SJustin Hibbits /**************************************************************************//**
10600aeed3e9SJustin Hibbits  @Function      FmGetId
10610aeed3e9SJustin Hibbits 
10620aeed3e9SJustin Hibbits  @Description   Used by PCD driver to read rhe FM id
10630aeed3e9SJustin Hibbits 
10640aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
10650aeed3e9SJustin Hibbits 
10660aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
10670aeed3e9SJustin Hibbits 
10680aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10690aeed3e9SJustin Hibbits *//***************************************************************************/
10700aeed3e9SJustin Hibbits uint8_t FmGetId(t_Handle h_Fm);
10710aeed3e9SJustin Hibbits 
10720aeed3e9SJustin Hibbits /**************************************************************************//**
1073852ba100SJustin Hibbits  @Function      FmReset
1074852ba100SJustin Hibbits 
1075852ba100SJustin Hibbits  @Description   Used to reset the FM
1076852ba100SJustin Hibbits 
1077852ba100SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
1078852ba100SJustin Hibbits 
1079852ba100SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
1080852ba100SJustin Hibbits *//***************************************************************************/
1081852ba100SJustin Hibbits t_Error FmReset(t_Handle h_Fm);
1082852ba100SJustin Hibbits 
1083852ba100SJustin Hibbits /**************************************************************************//**
10840aeed3e9SJustin Hibbits  @Function      FmGetSetPortParams
10850aeed3e9SJustin Hibbits 
10860aeed3e9SJustin Hibbits  @Description   Used by FM-PORT driver to pass and receive parameters between
10870aeed3e9SJustin Hibbits                 PORT and FM modules.
10880aeed3e9SJustin Hibbits 
10890aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
10900aeed3e9SJustin Hibbits  @Param[in,out] p_PortParams    A structure of FM Port parameters.
10910aeed3e9SJustin Hibbits 
10920aeed3e9SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
10930aeed3e9SJustin Hibbits 
10940aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
10950aeed3e9SJustin Hibbits *//***************************************************************************/
10960aeed3e9SJustin Hibbits t_Error FmGetSetPortParams(t_Handle h_Fm,t_FmInterModulePortInitParams *p_PortParams);
10970aeed3e9SJustin Hibbits 
10980aeed3e9SJustin Hibbits /**************************************************************************//**
10990aeed3e9SJustin Hibbits  @Function      FmFreePortParams
11000aeed3e9SJustin Hibbits 
11010aeed3e9SJustin Hibbits  @Description   Used by FM-PORT driver to free port's resources within the FM.
11020aeed3e9SJustin Hibbits 
11030aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
11040aeed3e9SJustin Hibbits  @Param[in,out] p_PortParams    A structure of FM Port parameters.
11050aeed3e9SJustin Hibbits 
11060aeed3e9SJustin Hibbits  @Return        None.
11070aeed3e9SJustin Hibbits 
11080aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
11090aeed3e9SJustin Hibbits *//***************************************************************************/
11100aeed3e9SJustin Hibbits void FmFreePortParams(t_Handle h_Fm,t_FmInterModulePortFreeParams *p_PortParams);
11110aeed3e9SJustin Hibbits 
11120aeed3e9SJustin Hibbits /**************************************************************************//**
1113852ba100SJustin Hibbits  @Function      FmSetNumOfRiscsPerPort
11140aeed3e9SJustin Hibbits 
11150aeed3e9SJustin Hibbits  @Description   Used by FM-PORT driver to pass parameter between
11160aeed3e9SJustin Hibbits                 PORT and FM modules for working with number of RISC..
11170aeed3e9SJustin Hibbits 
11180aeed3e9SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
1119852ba100SJustin Hibbits  @Param[in]     hardwarePortId    hardware port Id.
1120852ba100SJustin Hibbits  @Param[in]     numOfFmanCtrls    number of Fman Controllers.
1121852ba100SJustin Hibbits  @Param[in]     orFmanCtrl        Fman Controller for order restoration.
11220aeed3e9SJustin Hibbits 
11230aeed3e9SJustin Hibbits  @Return        None.
11240aeed3e9SJustin Hibbits 
11250aeed3e9SJustin Hibbits  @Cautions      Allowed only following FM_Init().
11260aeed3e9SJustin Hibbits *//***************************************************************************/
1127852ba100SJustin Hibbits t_Error FmSetNumOfRiscsPerPort(t_Handle h_Fm, uint8_t hardwarePortId, uint8_t numOfFmanCtrls, t_FmFmanCtrl orFmanCtrl);
11280aeed3e9SJustin Hibbits 
1129852ba100SJustin Hibbits #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
1130852ba100SJustin Hibbits /**************************************************************************//*
1131852ba100SJustin Hibbits  @Function      FmDumpPortRegs
1132852ba100SJustin Hibbits 
1133852ba100SJustin Hibbits  @Description   Dumps FM port registers which are part of FM common registers
1134852ba100SJustin Hibbits 
1135852ba100SJustin Hibbits  @Param[in]     h_Fm            A handle to an FM Module.
1136852ba100SJustin Hibbits  @Param[in]     hardwarePortId    HW port id.
1137852ba100SJustin Hibbits 
1138852ba100SJustin Hibbits  @Return        E_OK on success; Error code otherwise.
1139852ba100SJustin Hibbits 
1140852ba100SJustin Hibbits  @Cautions      Allowed only FM_Init().
1141852ba100SJustin Hibbits *//***************************************************************************/
1142852ba100SJustin Hibbits t_Error FmDumpPortRegs(t_Handle h_Fm,uint8_t hardwarePortId);
1143852ba100SJustin Hibbits #endif /* (defined(DEBUG_ERRORS) && ... */
11440aeed3e9SJustin Hibbits 
11450aeed3e9SJustin Hibbits void        FmRegisterPcd(t_Handle h_Fm, t_Handle h_FmPcd);
11460aeed3e9SJustin Hibbits void        FmUnregisterPcd(t_Handle h_Fm);
11470aeed3e9SJustin Hibbits t_Handle    FmGetPcdHandle(t_Handle h_Fm);
11480aeed3e9SJustin Hibbits t_Error     FmEnableRamsEcc(t_Handle h_Fm);
11490aeed3e9SJustin Hibbits t_Error     FmDisableRamsEcc(t_Handle h_Fm);
11500aeed3e9SJustin Hibbits void        FmGetRevision(t_Handle h_Fm, t_FmRevisionInfo *p_FmRevisionInfo);
11510aeed3e9SJustin Hibbits t_Error     FmAllocFmanCtrlEventReg(t_Handle h_Fm, uint8_t *p_EventId);
11520aeed3e9SJustin Hibbits void        FmFreeFmanCtrlEventReg(t_Handle h_Fm, uint8_t eventId);
11530aeed3e9SJustin Hibbits void        FmSetFmanCtrlIntr(t_Handle h_Fm, uint8_t   eventRegId, uint32_t enableEvents);
11540aeed3e9SJustin Hibbits uint32_t    FmGetFmanCtrlIntr(t_Handle h_Fm, uint8_t   eventRegId);
11550aeed3e9SJustin Hibbits void        FmRegisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId, void (*f_Isr) (t_Handle h_Fm, uint32_t event), t_Handle    h_Arg);
11560aeed3e9SJustin Hibbits void        FmUnregisterFmanCtrlIntr(t_Handle h_Fm, uint8_t eventRegId);
11570aeed3e9SJustin Hibbits t_Error     FmSetMacMaxFrame(t_Handle h_Fm, e_FmMacType type, uint8_t macId, uint16_t mtu);
11580aeed3e9SJustin Hibbits bool        FmIsMaster(t_Handle h_Fm);
11590aeed3e9SJustin Hibbits uint8_t     FmGetGuestId(t_Handle h_Fm);
1160852ba100SJustin Hibbits uint16_t    FmGetTnumAgingPeriod(t_Handle h_Fm);
1161852ba100SJustin Hibbits t_Error     FmSetPortPreFetchConfiguration(t_Handle h_Fm, uint8_t portNum, bool preFetchConfigured);
1162852ba100SJustin Hibbits t_Error     FmGetPortPreFetchConfiguration(t_Handle h_Fm, uint8_t portNum, bool *p_PortConfigured, bool *p_PreFetchConfigured);
1163852ba100SJustin Hibbits 
1164852ba100SJustin Hibbits 
11650aeed3e9SJustin Hibbits #ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004
11660aeed3e9SJustin Hibbits t_Error     Fm10GTxEccWorkaround(t_Handle h_Fm, uint8_t macId);
11670aeed3e9SJustin Hibbits #endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */
11680aeed3e9SJustin Hibbits 
11690aeed3e9SJustin Hibbits void        FmMuramClear(t_Handle h_FmMuram);
11700aeed3e9SJustin Hibbits t_Error     FmSetNumOfOpenDmas(t_Handle h_Fm,
11710aeed3e9SJustin Hibbits                                uint8_t  hardwarePortId,
1172852ba100SJustin Hibbits                                uint8_t  *p_NumOfOpenDmas,
1173852ba100SJustin Hibbits                                uint8_t  *p_NumOfExtraOpenDmas,
11740aeed3e9SJustin Hibbits                                bool     initialConfig);
11750aeed3e9SJustin Hibbits t_Error     FmSetNumOfTasks(t_Handle    h_Fm,
11760aeed3e9SJustin Hibbits                             uint8_t     hardwarePortId,
1177852ba100SJustin Hibbits                             uint8_t     *p_NumOfTasks,
1178852ba100SJustin Hibbits                             uint8_t     *p_NumOfExtraTasks,
11790aeed3e9SJustin Hibbits                             bool        initialConfig);
11800aeed3e9SJustin Hibbits t_Error     FmSetSizeOfFifo(t_Handle    h_Fm,
11810aeed3e9SJustin Hibbits                             uint8_t     hardwarePortId,
11820aeed3e9SJustin Hibbits                             uint32_t    *p_SizeOfFifo,
1183852ba100SJustin Hibbits                             uint32_t    *p_ExtraSizeOfFifo,
11840aeed3e9SJustin Hibbits                             bool        initialConfig);
11850aeed3e9SJustin Hibbits 
1186852ba100SJustin Hibbits t_Error     FmSetCongestionGroupPFCpriority(t_Handle    h_Fm,
1187852ba100SJustin Hibbits                                             uint32_t    congestionGroupId,
1188852ba100SJustin Hibbits                                             uint8_t     priorityBitMap);
1189852ba100SJustin Hibbits 
1190852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
1191852ba100SJustin Hibbits t_Error     FmVSPAllocForPort(t_Handle         h_Fm,
1192852ba100SJustin Hibbits                               e_FmPortType     portType,
1193852ba100SJustin Hibbits                               uint8_t          portId,
1194852ba100SJustin Hibbits                               uint8_t          numOfStorageProfiles);
1195852ba100SJustin Hibbits 
1196852ba100SJustin Hibbits t_Error     FmVSPFreeForPort(t_Handle        h_Fm,
1197852ba100SJustin Hibbits                              e_FmPortType    portType,
1198852ba100SJustin Hibbits                              uint8_t         portId);
1199852ba100SJustin Hibbits 
1200852ba100SJustin Hibbits t_Error     FmVSPGetAbsoluteProfileId(t_Handle      h_Fm,
1201852ba100SJustin Hibbits                                       e_FmPortType  portType,
1202852ba100SJustin Hibbits                                       uint8_t       portId,
1203852ba100SJustin Hibbits                                       uint16_t      relativeProfile,
1204852ba100SJustin Hibbits                                       uint16_t      *p_AbsoluteId);
1205852ba100SJustin Hibbits t_Error FmVSPCheckRelativeProfile(t_Handle        h_Fm,
1206852ba100SJustin Hibbits                                   e_FmPortType    portType,
1207852ba100SJustin Hibbits                                   uint8_t         portId,
1208852ba100SJustin Hibbits                                   uint16_t        relativeProfile);
1209852ba100SJustin Hibbits 
1210852ba100SJustin Hibbits uintptr_t   FmGetVSPBaseAddr(t_Handle h_Fm);
1211852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
1212852ba100SJustin Hibbits 
12130aeed3e9SJustin Hibbits 
12140aeed3e9SJustin Hibbits #endif /* __FM_COMMON_H */
1215