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_pcd.h
360aeed3e9SJustin Hibbits 
370aeed3e9SJustin Hibbits  @Description   FM PCD ...
380aeed3e9SJustin Hibbits *//***************************************************************************/
390aeed3e9SJustin Hibbits #ifndef __FM_PCD_H
400aeed3e9SJustin Hibbits #define __FM_PCD_H
410aeed3e9SJustin Hibbits 
420aeed3e9SJustin Hibbits #include "std_ext.h"
430aeed3e9SJustin Hibbits #include "error_ext.h"
440aeed3e9SJustin Hibbits #include "list_ext.h"
450aeed3e9SJustin Hibbits #include "fm_pcd_ext.h"
46852ba100SJustin Hibbits #include "fm_common.h"
47852ba100SJustin Hibbits #include "fsl_fman_prs.h"
48852ba100SJustin Hibbits #include "fsl_fman_kg.h"
490aeed3e9SJustin Hibbits 
500aeed3e9SJustin Hibbits #define __ERR_MODULE__  MODULE_FM_PCD
510aeed3e9SJustin Hibbits 
520aeed3e9SJustin Hibbits 
53852ba100SJustin Hibbits /****************************/
54852ba100SJustin Hibbits /* Defaults                 */
55852ba100SJustin Hibbits /****************************/
56852ba100SJustin Hibbits #define DEFAULT_plcrAutoRefresh                 FALSE
57852ba100SJustin Hibbits #define DEFAULT_fmPcdKgErrorExceptions          (FM_EX_KG_DOUBLE_ECC | FM_EX_KG_KEYSIZE_OVERFLOW)
58852ba100SJustin Hibbits #define DEFAULT_fmPcdPlcrErrorExceptions        (FM_PCD_EX_PLCR_DOUBLE_ECC | FM_PCD_EX_PLCR_INIT_ENTRY_ERROR)
59852ba100SJustin Hibbits #define DEFAULT_fmPcdPlcrExceptions             0
60852ba100SJustin Hibbits #define DEFAULT_fmPcdPrsErrorExceptions         (FM_PCD_EX_PRS_DOUBLE_ECC)
61852ba100SJustin Hibbits 
62852ba100SJustin Hibbits #define DEFAULT_fmPcdPrsExceptions              FM_PCD_EX_PRS_SINGLE_ECC
63852ba100SJustin Hibbits #define DEFAULT_numOfUsedProfilesPerWindow      16
64852ba100SJustin Hibbits #define DEFAULT_numOfSharedPlcrProfiles         4
650aeed3e9SJustin Hibbits 
660aeed3e9SJustin Hibbits /****************************/
670aeed3e9SJustin Hibbits /* Network defines          */
680aeed3e9SJustin Hibbits /****************************/
690aeed3e9SJustin Hibbits #define UDP_HEADER_SIZE     8
700aeed3e9SJustin Hibbits 
710aeed3e9SJustin Hibbits #define ESP_SPI_OFFSET      0
720aeed3e9SJustin Hibbits #define ESP_SPI_SIZE        4
730aeed3e9SJustin Hibbits #define ESP_SEQ_NUM_OFFSET  ESP_SPI_SIZE
740aeed3e9SJustin Hibbits #define ESP_SEQ_NUM_SIZE    4
750aeed3e9SJustin Hibbits 
760aeed3e9SJustin Hibbits /****************************/
770aeed3e9SJustin Hibbits /* General defines          */
780aeed3e9SJustin Hibbits /****************************/
790aeed3e9SJustin Hibbits #define ILLEGAL_CLS_PLAN    0xff
800aeed3e9SJustin Hibbits #define ILLEGAL_NETENV      0xff
81852ba100SJustin Hibbits 
82852ba100SJustin Hibbits #define FM_PCD_MAX_NUM_OF_ALIAS_HDRS    3
83852ba100SJustin Hibbits 
840aeed3e9SJustin Hibbits /****************************/
850aeed3e9SJustin Hibbits /* Error defines           */
860aeed3e9SJustin Hibbits /****************************/
870aeed3e9SJustin Hibbits 
880aeed3e9SJustin Hibbits #define FM_PCD_EX_PLCR_DOUBLE_ECC                   0x20000000
890aeed3e9SJustin Hibbits #define FM_PCD_EX_PLCR_INIT_ENTRY_ERROR             0x10000000
900aeed3e9SJustin Hibbits #define FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE      0x08000000
910aeed3e9SJustin Hibbits #define FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE       0x04000000
920aeed3e9SJustin Hibbits 
930aeed3e9SJustin Hibbits #define GET_FM_PCD_EXCEPTION_FLAG(bitMask, exception)               \
940aeed3e9SJustin Hibbits switch (exception){                                                 \
950aeed3e9SJustin Hibbits     case e_FM_PCD_KG_EXCEPTION_DOUBLE_ECC:                          \
96852ba100SJustin Hibbits         bitMask = FM_EX_KG_DOUBLE_ECC; break;                   \
970aeed3e9SJustin Hibbits     case e_FM_PCD_PLCR_EXCEPTION_DOUBLE_ECC:                        \
980aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PLCR_DOUBLE_ECC; break;                 \
990aeed3e9SJustin Hibbits     case e_FM_PCD_KG_EXCEPTION_KEYSIZE_OVERFLOW:                    \
100852ba100SJustin Hibbits         bitMask = FM_EX_KG_KEYSIZE_OVERFLOW; break;             \
1010aeed3e9SJustin Hibbits     case e_FM_PCD_PLCR_EXCEPTION_INIT_ENTRY_ERROR:                  \
1020aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PLCR_INIT_ENTRY_ERROR; break;           \
1030aeed3e9SJustin Hibbits     case e_FM_PCD_PLCR_EXCEPTION_PRAM_SELF_INIT_COMPLETE:           \
1040aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE; break;    \
1050aeed3e9SJustin Hibbits     case e_FM_PCD_PLCR_EXCEPTION_ATOMIC_ACTION_COMPLETE:            \
1060aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE; break;     \
1070aeed3e9SJustin Hibbits     case e_FM_PCD_PRS_EXCEPTION_DOUBLE_ECC:                         \
1080aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PRS_DOUBLE_ECC; break;                  \
1090aeed3e9SJustin Hibbits     case e_FM_PCD_PRS_EXCEPTION_SINGLE_ECC:                         \
1100aeed3e9SJustin Hibbits         bitMask = FM_PCD_EX_PRS_SINGLE_ECC; break;                  \
1110aeed3e9SJustin Hibbits     default: bitMask = 0;break;}
1120aeed3e9SJustin Hibbits 
1130aeed3e9SJustin Hibbits /***********************************************************************/
1140aeed3e9SJustin Hibbits /*          Policer defines                                            */
1150aeed3e9SJustin Hibbits /***********************************************************************/
116852ba100SJustin Hibbits #define FM_PCD_PLCR_GCR_STEN                  0x40000000
1170aeed3e9SJustin Hibbits #define FM_PCD_PLCR_DOUBLE_ECC                0x80000000
1180aeed3e9SJustin Hibbits #define FM_PCD_PLCR_INIT_ENTRY_ERROR          0x40000000
1190aeed3e9SJustin Hibbits #define FM_PCD_PLCR_PRAM_SELF_INIT_COMPLETE   0x80000000
1200aeed3e9SJustin Hibbits #define FM_PCD_PLCR_ATOMIC_ACTION_COMPLETE    0x40000000
1210aeed3e9SJustin Hibbits 
1220aeed3e9SJustin Hibbits /***********************************************************************/
1230aeed3e9SJustin Hibbits /*          Memory map                                                 */
1240aeed3e9SJustin Hibbits /***********************************************************************/
1250aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
1260aeed3e9SJustin Hibbits #pragma pack(push,1)
1270aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
1280aeed3e9SJustin Hibbits 
1290aeed3e9SJustin Hibbits 
130852ba100SJustin Hibbits typedef struct {
1310aeed3e9SJustin Hibbits /* General Configuration and Status Registers */
1320aeed3e9SJustin Hibbits     volatile uint32_t fmpl_gcr;         /* 0x000 FMPL_GCR  - FM Policer General Configuration */
1330aeed3e9SJustin Hibbits     volatile uint32_t fmpl_gsr;         /* 0x004 FMPL_GSR  - FM Policer Global Status Register */
1340aeed3e9SJustin Hibbits     volatile uint32_t fmpl_evr;         /* 0x008 FMPL_EVR  - FM Policer Event Register */
1350aeed3e9SJustin Hibbits     volatile uint32_t fmpl_ier;         /* 0x00C FMPL_IER  - FM Policer Interrupt Enable Register */
1360aeed3e9SJustin Hibbits     volatile uint32_t fmpl_ifr;         /* 0x010 FMPL_IFR  - FM Policer Interrupt Force Register */
1370aeed3e9SJustin Hibbits     volatile uint32_t fmpl_eevr;        /* 0x014 FMPL_EEVR - FM Policer Error Event Register */
1380aeed3e9SJustin Hibbits     volatile uint32_t fmpl_eier;        /* 0x018 FMPL_EIER - FM Policer Error Interrupt Enable Register */
1390aeed3e9SJustin Hibbits     volatile uint32_t fmpl_eifr;        /* 0x01C FMPL_EIFR - FM Policer Error Interrupt Force Register */
1400aeed3e9SJustin Hibbits /* Global Statistic Counters */
1410aeed3e9SJustin Hibbits     volatile uint32_t fmpl_rpcnt;       /* 0x020 FMPL_RPC  - FM Policer RED Packets Counter */
1420aeed3e9SJustin Hibbits     volatile uint32_t fmpl_ypcnt;       /* 0x024 FMPL_YPC  - FM Policer YELLOW Packets Counter */
1430aeed3e9SJustin Hibbits     volatile uint32_t fmpl_rrpcnt;      /* 0x028 FMPL_RRPC - FM Policer Recolored RED Packet Counter */
1440aeed3e9SJustin Hibbits     volatile uint32_t fmpl_rypcnt;      /* 0x02C FMPL_RYPC - FM Policer Recolored YELLOW Packet Counter */
1450aeed3e9SJustin Hibbits     volatile uint32_t fmpl_tpcnt;       /* 0x030 FMPL_TPC  - FM Policer Total Packet Counter */
1460aeed3e9SJustin Hibbits     volatile uint32_t fmpl_flmcnt;      /* 0x034 FMPL_FLMC - FM Policer Frame Length Mismatch Counter */
1470aeed3e9SJustin Hibbits     volatile uint32_t fmpl_res0[21];    /* 0x038 - 0x08B Reserved */
1480aeed3e9SJustin Hibbits /* Profile RAM Access Registers */
1490aeed3e9SJustin Hibbits     volatile uint32_t fmpl_par;         /* 0x08C FMPL_PAR    - FM Policer Profile Action Register*/
150852ba100SJustin Hibbits     t_FmPcdPlcrProfileRegs profileRegs;
1510aeed3e9SJustin Hibbits /* Error Capture Registers */
1520aeed3e9SJustin Hibbits     volatile uint32_t fmpl_serc;        /* 0x100 FMPL_SERC - FM Policer Soft Error Capture */
1530aeed3e9SJustin Hibbits     volatile uint32_t fmpl_upcr;        /* 0x104 FMPL_UPCR - FM Policer Uninitialized Profile Capture Register */
1540aeed3e9SJustin Hibbits     volatile uint32_t fmpl_res2;        /* 0x108 Reserved */
1550aeed3e9SJustin Hibbits /* Debug Registers */
1560aeed3e9SJustin Hibbits     volatile uint32_t fmpl_res3[61];    /* 0x10C-0x200 Reserved Debug*/
1570aeed3e9SJustin Hibbits /* Profile Selection Mapping Registers Per Port-ID (n=1-11, 16) */
1580aeed3e9SJustin Hibbits     volatile uint32_t fmpl_dpmr;        /* 0x200 FMPL_DPMR - FM Policer Default Mapping Register */
1590aeed3e9SJustin Hibbits     volatile uint32_t fmpl_pmr[63];     /*+default 0x204-0x2FF FMPL_PMR1 - FMPL_PMR63, - FM Policer Profile Mapping Registers.
1600aeed3e9SJustin Hibbits                                            (for port-ID 1-11, only for supported Port-ID registers) */
161852ba100SJustin Hibbits } t_FmPcdPlcrRegs;
1620aeed3e9SJustin Hibbits 
1630aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
1640aeed3e9SJustin Hibbits #pragma pack(pop)
1650aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
1660aeed3e9SJustin Hibbits 
1670aeed3e9SJustin Hibbits 
1680aeed3e9SJustin Hibbits /***********************************************************************/
1690aeed3e9SJustin Hibbits /*  Driver's internal structures                                       */
1700aeed3e9SJustin Hibbits /***********************************************************************/
1710aeed3e9SJustin Hibbits 
1720aeed3e9SJustin Hibbits typedef struct {
173852ba100SJustin Hibbits     bool        known;
174852ba100SJustin Hibbits     uint8_t     id;
175852ba100SJustin Hibbits } t_FmPcdKgSchemesExtractsEntry;
176852ba100SJustin Hibbits 
177852ba100SJustin Hibbits typedef struct {
178852ba100SJustin Hibbits     t_FmPcdKgSchemesExtractsEntry extractsArray[FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY];
179852ba100SJustin Hibbits } t_FmPcdKgSchemesExtracts;
180852ba100SJustin Hibbits 
181852ba100SJustin Hibbits typedef struct {
1820aeed3e9SJustin Hibbits     t_Handle        h_Manip;
1830aeed3e9SJustin Hibbits     bool            keepRes;
1840aeed3e9SJustin Hibbits     e_FmPcdEngine   nextEngine;
1850aeed3e9SJustin Hibbits     uint8_t         parseCode;
1860aeed3e9SJustin Hibbits } t_FmPcdInfoForManip;
1870aeed3e9SJustin Hibbits 
1880aeed3e9SJustin Hibbits /**************************************************************************//**
1890aeed3e9SJustin Hibbits  @Description   A structure of parameters to communicate
1900aeed3e9SJustin Hibbits                 between the port and PCD regarding the KG scheme.
1910aeed3e9SJustin Hibbits *//***************************************************************************/
1920aeed3e9SJustin Hibbits typedef struct {
1930aeed3e9SJustin Hibbits     uint8_t             netEnvId;    /* in */
1940aeed3e9SJustin Hibbits     uint8_t             numOfDistinctionUnits; /* in */
1950aeed3e9SJustin Hibbits     uint8_t             unitIds[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS]; /* in */
1960aeed3e9SJustin Hibbits     uint32_t            vector; /* out */
1970aeed3e9SJustin Hibbits } t_NetEnvParams;
1980aeed3e9SJustin Hibbits 
1990aeed3e9SJustin Hibbits typedef struct {
200852ba100SJustin Hibbits     bool            allocated;
201852ba100SJustin Hibbits     uint8_t         ownerId; /* guestId for KG in multi-partition only.
202852ba100SJustin Hibbits                                 portId for PLCR in any environment */
203852ba100SJustin Hibbits } t_FmPcdAllocMng;
204852ba100SJustin Hibbits 
205852ba100SJustin Hibbits typedef struct {
2060aeed3e9SJustin Hibbits     volatile bool       lock;
2070aeed3e9SJustin Hibbits     bool                used;
2080aeed3e9SJustin Hibbits     uint8_t             owners;
2090aeed3e9SJustin Hibbits     uint8_t             netEnvId;
2100aeed3e9SJustin Hibbits     uint8_t             guestId;
2110aeed3e9SJustin Hibbits     uint8_t             baseEntry;
2120aeed3e9SJustin Hibbits     uint16_t            sizeOfGrp;
2130aeed3e9SJustin Hibbits     protocolOpt_t       optArray[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
2140aeed3e9SJustin Hibbits } t_FmPcdKgClsPlanGrp;
2150aeed3e9SJustin Hibbits 
2160aeed3e9SJustin Hibbits typedef struct {
217852ba100SJustin Hibbits     t_Handle            h_FmPcd;
218852ba100SJustin Hibbits     uint8_t             schemeId;
219852ba100SJustin Hibbits     t_FmPcdLock         *p_Lock;
2200aeed3e9SJustin Hibbits     bool                valid;
2210aeed3e9SJustin Hibbits     uint8_t             netEnvId;
2220aeed3e9SJustin Hibbits     uint8_t             owners;
2230aeed3e9SJustin Hibbits     uint32_t            matchVector;
2240aeed3e9SJustin Hibbits     uint32_t            ccUnits;
2250aeed3e9SJustin Hibbits     bool                nextRelativePlcrProfile;
2260aeed3e9SJustin Hibbits     uint16_t            relativeProfileId;
2270aeed3e9SJustin Hibbits     uint16_t            numOfProfiles;
2280aeed3e9SJustin Hibbits     t_FmPcdKgKeyOrder   orderedArray;
2290aeed3e9SJustin Hibbits     e_FmPcdEngine       nextEngine;
2300aeed3e9SJustin Hibbits     e_FmPcdDoneAction   doneAction;
231852ba100SJustin Hibbits     bool                requiredActionFlag;
2320aeed3e9SJustin Hibbits     uint32_t            requiredAction;
2330aeed3e9SJustin Hibbits     bool                extractedOrs;
2340aeed3e9SJustin Hibbits     uint8_t             bitOffsetInPlcrProfile;
2350aeed3e9SJustin Hibbits     bool                directPlcr;
236852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
237852ba100SJustin Hibbits     bool                vspe;
238852ba100SJustin Hibbits #endif
2390aeed3e9SJustin Hibbits } t_FmPcdKgScheme;
2400aeed3e9SJustin Hibbits 
241852ba100SJustin Hibbits typedef union {
242852ba100SJustin Hibbits     struct fman_kg_scheme_regs schemeRegs;
243852ba100SJustin Hibbits     struct fman_kg_pe_regs portRegs;
244852ba100SJustin Hibbits     struct fman_kg_cp_regs clsPlanRegs;
245852ba100SJustin Hibbits } u_FmPcdKgIndirectAccessRegs;
2460aeed3e9SJustin Hibbits 
2470aeed3e9SJustin Hibbits typedef struct {
248852ba100SJustin Hibbits     struct fman_kg_regs *p_FmPcdKgRegs;
2490aeed3e9SJustin Hibbits     uint32_t            schemeExceptionsBitMask;
2500aeed3e9SJustin Hibbits     uint8_t             numOfSchemes;
251852ba100SJustin Hibbits     t_Handle            h_HwSpinlock;
2520aeed3e9SJustin Hibbits     uint8_t             schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
2530aeed3e9SJustin Hibbits     t_FmPcdKgScheme     schemes[FM_PCD_KG_NUM_OF_SCHEMES];
2540aeed3e9SJustin Hibbits     t_FmPcdKgClsPlanGrp clsPlanGrps[FM_MAX_NUM_OF_PORTS];
2550aeed3e9SJustin Hibbits     uint8_t             emptyClsPlanGrpId;
2560aeed3e9SJustin Hibbits     t_FmPcdAllocMng     schemesMng[FM_PCD_KG_NUM_OF_SCHEMES]; /* only for MASTER ! */
2570aeed3e9SJustin Hibbits     t_FmPcdAllocMng     clsPlanBlocksMng[FM_PCD_MAX_NUM_OF_CLS_PLANS/CLS_PLAN_NUM_PER_GRP];
258852ba100SJustin Hibbits     u_FmPcdKgIndirectAccessRegs *p_IndirectAccessRegs;
2590aeed3e9SJustin Hibbits } t_FmPcdKg;
2600aeed3e9SJustin Hibbits 
2610aeed3e9SJustin Hibbits typedef struct {
2620aeed3e9SJustin Hibbits     uint16_t            profilesBase;
2630aeed3e9SJustin Hibbits     uint16_t            numOfProfiles;
2640aeed3e9SJustin Hibbits     t_Handle            h_FmPort;
2650aeed3e9SJustin Hibbits } t_FmPcdPlcrMapParam;
2660aeed3e9SJustin Hibbits 
2670aeed3e9SJustin Hibbits typedef struct {
268852ba100SJustin Hibbits     uint16_t                            absoluteProfileId;
269852ba100SJustin Hibbits     t_Handle                            h_FmPcd;
2700aeed3e9SJustin Hibbits     bool                                valid;
271852ba100SJustin Hibbits     t_FmPcdLock                         *p_Lock;
2720aeed3e9SJustin Hibbits     t_FmPcdAllocMng                     profilesMng;
273852ba100SJustin Hibbits     bool                                requiredActionFlag;
2740aeed3e9SJustin Hibbits     uint32_t                            requiredAction;
2750aeed3e9SJustin Hibbits     e_FmPcdEngine                       nextEngineOnGreen;          /**< Green next engine type */
2760aeed3e9SJustin Hibbits     u_FmPcdPlcrNextEngineParams         paramsOnGreen;              /**< Green next engine params */
2770aeed3e9SJustin Hibbits 
2780aeed3e9SJustin Hibbits     e_FmPcdEngine                       nextEngineOnYellow;         /**< Yellow next engine type */
2790aeed3e9SJustin Hibbits     u_FmPcdPlcrNextEngineParams         paramsOnYellow;             /**< Yellow next engine params */
2800aeed3e9SJustin Hibbits 
2810aeed3e9SJustin Hibbits     e_FmPcdEngine                       nextEngineOnRed;            /**< Red next engine type */
2820aeed3e9SJustin Hibbits     u_FmPcdPlcrNextEngineParams         paramsOnRed;                /**< Red next engine params */
2830aeed3e9SJustin Hibbits } t_FmPcdPlcrProfile;
2840aeed3e9SJustin Hibbits 
2850aeed3e9SJustin Hibbits typedef struct {
2860aeed3e9SJustin Hibbits     t_FmPcdPlcrRegs                 *p_FmPcdPlcrRegs;
287852ba100SJustin Hibbits     uint16_t                        partPlcrProfilesBase;
288852ba100SJustin Hibbits     uint16_t                        partNumOfPlcrProfiles;
2890aeed3e9SJustin Hibbits     t_FmPcdPlcrProfile              profiles[FM_PCD_PLCR_NUM_ENTRIES];
2900aeed3e9SJustin Hibbits     uint16_t                        numOfSharedProfiles;
2910aeed3e9SJustin Hibbits     uint16_t                        sharedProfilesIds[FM_PCD_PLCR_NUM_ENTRIES];
2920aeed3e9SJustin Hibbits     t_FmPcdPlcrMapParam             portsMapping[FM_MAX_NUM_OF_PORTS];
293852ba100SJustin Hibbits     t_Handle                        h_HwSpinlock;
294852ba100SJustin Hibbits     t_Handle                        h_SwSpinlock;
2950aeed3e9SJustin Hibbits } t_FmPcdPlcr;
2960aeed3e9SJustin Hibbits 
2970aeed3e9SJustin Hibbits typedef struct {
2980aeed3e9SJustin Hibbits     uint32_t                        *p_SwPrsCode;
2990aeed3e9SJustin Hibbits     uint32_t                        *p_CurrSwPrs;
3000aeed3e9SJustin Hibbits     uint8_t                         currLabel;
301852ba100SJustin Hibbits     struct fman_prs_regs            *p_FmPcdPrsRegs;
3020aeed3e9SJustin Hibbits     t_FmPcdPrsLabelParams           labelsTable[FM_PCD_PRS_NUM_OF_LABELS];
3030aeed3e9SJustin Hibbits     uint32_t                        fmPcdPrsPortIdStatistics;
3040aeed3e9SJustin Hibbits } t_FmPcdPrs;
3050aeed3e9SJustin Hibbits 
3060aeed3e9SJustin Hibbits typedef struct {
3070aeed3e9SJustin Hibbits     struct {
3080aeed3e9SJustin Hibbits         e_NetHeaderType             hdr;
3090aeed3e9SJustin Hibbits         protocolOpt_t               opt; /* only one option !! */
3100aeed3e9SJustin Hibbits     } hdrs[FM_PCD_MAX_NUM_OF_INTERCHANGEABLE_HDRS];
3110aeed3e9SJustin Hibbits } t_FmPcdIntDistinctionUnit;
3120aeed3e9SJustin Hibbits 
3130aeed3e9SJustin Hibbits typedef struct {
3140aeed3e9SJustin Hibbits     e_NetHeaderType             hdr;
315852ba100SJustin Hibbits     protocolOpt_t               opt; /* only one option !! */
3160aeed3e9SJustin Hibbits     e_NetHeaderType             aliasHdr;
3170aeed3e9SJustin Hibbits } t_FmPcdNetEnvAliases;
3180aeed3e9SJustin Hibbits 
3190aeed3e9SJustin Hibbits typedef struct {
320852ba100SJustin Hibbits     uint8_t                     netEnvId;
321852ba100SJustin Hibbits     t_Handle                    h_FmPcd;
322852ba100SJustin Hibbits     t_Handle                    h_Spinlock;
3230aeed3e9SJustin Hibbits     bool                        used;
3240aeed3e9SJustin Hibbits     uint8_t                     owners;
3250aeed3e9SJustin Hibbits     uint8_t                     clsPlanGrpId;
3260aeed3e9SJustin Hibbits     t_FmPcdIntDistinctionUnit   units[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
3270aeed3e9SJustin Hibbits     uint32_t                    unitsVectors[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
3280aeed3e9SJustin Hibbits     uint32_t                    lcvs[FM_PCD_PRS_NUM_OF_HDRS];
3290aeed3e9SJustin Hibbits     uint32_t                    macsecVector;
330852ba100SJustin Hibbits     t_FmPcdNetEnvAliases        aliasHdrs[FM_PCD_MAX_NUM_OF_ALIAS_HDRS];
3310aeed3e9SJustin Hibbits } t_FmPcdNetEnv;
3320aeed3e9SJustin Hibbits 
3330aeed3e9SJustin Hibbits typedef struct {
334852ba100SJustin Hibbits     struct fman_prs_cfg          dfltCfg;
3350aeed3e9SJustin Hibbits     bool                        plcrAutoRefresh;
3360aeed3e9SJustin Hibbits     uint16_t                    prsMaxParseCycleLimit;
3370aeed3e9SJustin Hibbits } t_FmPcdDriverParam;
3380aeed3e9SJustin Hibbits 
3390aeed3e9SJustin Hibbits typedef struct {
3400aeed3e9SJustin Hibbits     t_Handle                    h_Fm;
3410aeed3e9SJustin Hibbits     t_Handle                    h_FmMuram;
342852ba100SJustin Hibbits     t_FmRevisionInfo            fmRevInfo;
343852ba100SJustin Hibbits 
3440aeed3e9SJustin Hibbits     uint64_t                    physicalMuramBase;
345852ba100SJustin Hibbits 
3460aeed3e9SJustin Hibbits     t_Handle                    h_Spinlock;
347852ba100SJustin Hibbits     t_List                      freeLocksLst;
348852ba100SJustin Hibbits     t_List                      acquiredLocksLst;
349852ba100SJustin Hibbits 
3500aeed3e9SJustin Hibbits     t_Handle                    h_IpcSession; /* relevant for guest only */
3510aeed3e9SJustin Hibbits     bool                        enabled;
3520aeed3e9SJustin Hibbits     uint8_t                     guestId;            /**< Guest Partition Id */
3530aeed3e9SJustin Hibbits     uint8_t                     numOfEnabledGuestPartitionsPcds;
3540aeed3e9SJustin Hibbits     char                        fmPcdModuleName[MODULE_NAME_SIZE];
3550aeed3e9SJustin Hibbits     char                        fmPcdIpcHandlerModuleName[MODULE_NAME_SIZE]; /* relevant for guest only - this is the master's name */
3560aeed3e9SJustin Hibbits     t_FmPcdNetEnv               netEnvs[FM_MAX_NUM_OF_PORTS];
3570aeed3e9SJustin Hibbits     t_FmPcdKg                   *p_FmPcdKg;
3580aeed3e9SJustin Hibbits     t_FmPcdPlcr                 *p_FmPcdPlcr;
3590aeed3e9SJustin Hibbits     t_FmPcdPrs                  *p_FmPcdPrs;
3600aeed3e9SJustin Hibbits 
361852ba100SJustin Hibbits     void                        *p_CcShadow;     /**< CC MURAM shadow */
362852ba100SJustin Hibbits     uint32_t                    ccShadowSize;
363852ba100SJustin Hibbits     uint32_t                    ccShadowAlign;
364852ba100SJustin Hibbits     volatile bool               shadowLock;
365852ba100SJustin Hibbits     t_Handle                    h_ShadowSpinlock;
366852ba100SJustin Hibbits 
3670aeed3e9SJustin Hibbits     t_Handle                    h_Hc;
3680aeed3e9SJustin Hibbits 
3690aeed3e9SJustin Hibbits     uint32_t                    exceptions;
3700aeed3e9SJustin Hibbits     t_FmPcdExceptionCallback    *f_Exception;
3710aeed3e9SJustin Hibbits     t_FmPcdIdExceptionCallback  *f_FmPcdIndexedException;
3720aeed3e9SJustin Hibbits     t_Handle                    h_App;
373852ba100SJustin Hibbits     uintptr_t                   ipv6FrameIdAddr;
374852ba100SJustin Hibbits     uintptr_t                   capwapFrameIdAddr;
375852ba100SJustin Hibbits     bool                        advancedOffloadSupport;
3760aeed3e9SJustin Hibbits 
3770aeed3e9SJustin Hibbits     t_FmPcdDriverParam          *p_FmPcdDriverParam;
3780aeed3e9SJustin Hibbits } t_FmPcd;
3790aeed3e9SJustin Hibbits 
380852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
381852ba100SJustin Hibbits typedef uint8_t t_FmPcdFrmReplicUpdateType;
382852ba100SJustin Hibbits #define FRM_REPLIC_UPDATE_COUNTER             0x01
383852ba100SJustin Hibbits #define FRM_REPLIC_UPDATE_INFO                0x02
384852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
3850aeed3e9SJustin Hibbits /***********************************************************************/
3860aeed3e9SJustin Hibbits /*  PCD internal routines                                              */
3870aeed3e9SJustin Hibbits /***********************************************************************/
3880aeed3e9SJustin Hibbits 
3890aeed3e9SJustin Hibbits t_Error     PcdGetVectorForOpt(t_FmPcd *p_FmPcd, uint8_t netEnvId, protocolOpt_t opt, uint32_t *p_Vector);
3900aeed3e9SJustin Hibbits t_Error     PcdGetUnitsVector(t_FmPcd *p_FmPcd, t_NetEnvParams *p_Params);
3910aeed3e9SJustin Hibbits bool        PcdNetEnvIsUnitWithoutOpts(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint32_t unitVector);
3920aeed3e9SJustin Hibbits t_Error     PcdGetClsPlanGrpParams(t_FmPcd *p_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_GrpParams);
3930aeed3e9SJustin Hibbits void        FmPcdSetClsPlanGrpId(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint8_t clsPlanGrpId);
3940aeed3e9SJustin Hibbits e_NetHeaderType FmPcdGetAliasHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
395852ba100SJustin Hibbits uint8_t     FmPcdNetEnvGetUnitIdForSingleHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
396852ba100SJustin Hibbits uint8_t     FmPcdNetEnvGetUnitId(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr, bool interchangeable, protocolOpt_t opt);
397852ba100SJustin Hibbits 
398852ba100SJustin Hibbits t_Error     FmPcdManipBuildIpReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, bool isIpv4, uint8_t groupId);
399852ba100SJustin Hibbits t_Error     FmPcdManipDeleteIpReassmSchemes(t_Handle h_Manip);
400852ba100SJustin Hibbits t_Error     FmPcdManipBuildCapwapReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, uint8_t groupId);
401852ba100SJustin Hibbits t_Error     FmPcdManipDeleteCapwapReassmSchemes(t_Handle h_Manip);
402852ba100SJustin Hibbits bool        FmPcdManipIpReassmIsIpv6Hdr(t_Handle h_Manip);
4030aeed3e9SJustin Hibbits 
4040aeed3e9SJustin Hibbits t_Handle    KgConfig( t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
4050aeed3e9SJustin Hibbits t_Error     KgInit(t_FmPcd *p_FmPcd);
4060aeed3e9SJustin Hibbits t_Error     KgFree(t_FmPcd *p_FmPcd);
4070aeed3e9SJustin Hibbits void        KgSetClsPlan(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanSet *p_Set);
4080aeed3e9SJustin Hibbits bool        KgIsSchemeAlwaysDirect(t_Handle h_FmPcd, uint8_t schemeId);
4090aeed3e9SJustin Hibbits void        KgEnable(t_FmPcd *p_FmPcd);
4100aeed3e9SJustin Hibbits void        KgDisable(t_FmPcd *p_FmPcd);
4110aeed3e9SJustin Hibbits t_Error     KgAllocClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t *p_First);
4120aeed3e9SJustin Hibbits void        KgFreeClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t base);
4130aeed3e9SJustin Hibbits 
4140aeed3e9SJustin Hibbits /* only for MULTI partittion */
4150aeed3e9SJustin Hibbits t_Error     FmPcdKgAllocSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
4160aeed3e9SJustin Hibbits t_Error     FmPcdKgFreeSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
4170aeed3e9SJustin Hibbits /* only for SINGLE partittion */
4180aeed3e9SJustin Hibbits t_Error     KgBindPortToSchemes(t_Handle h_FmPcd , uint8_t hardwarePortId, uint32_t spReg);
4190aeed3e9SJustin Hibbits 
420852ba100SJustin Hibbits t_FmPcdLock *FmPcdAcquireLock(t_Handle h_FmPcd);
421852ba100SJustin Hibbits void        FmPcdReleaseLock(t_Handle h_FmPcd, t_FmPcdLock *p_Lock);
422852ba100SJustin Hibbits 
4230aeed3e9SJustin Hibbits t_Handle    PlcrConfig(t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
4240aeed3e9SJustin Hibbits t_Error     PlcrInit(t_FmPcd *p_FmPcd);
4250aeed3e9SJustin Hibbits t_Error     PlcrFree(t_FmPcd *p_FmPcd);
4260aeed3e9SJustin Hibbits void        PlcrEnable(t_FmPcd *p_FmPcd);
4270aeed3e9SJustin Hibbits void        PlcrDisable(t_FmPcd *p_FmPcd);
428852ba100SJustin Hibbits uint16_t    PlcrAllocProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
429852ba100SJustin Hibbits void        PlcrFreeProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
430852ba100SJustin Hibbits t_Error     PlcrSetPortProfiles(t_FmPcd    *p_FmPcd,
431852ba100SJustin Hibbits                                 uint8_t    hardwarePortId,
432852ba100SJustin Hibbits                                 uint16_t   numOfProfiles,
433852ba100SJustin Hibbits                                 uint16_t   base);
434852ba100SJustin Hibbits t_Error     PlcrClearPortProfiles(t_FmPcd *p_FmPcd, uint8_t hardwarePortId);
4350aeed3e9SJustin Hibbits 
4360aeed3e9SJustin Hibbits t_Handle    PrsConfig(t_FmPcd *p_FmPcd,t_FmPcdParams *p_FmPcdParams);
4370aeed3e9SJustin Hibbits t_Error     PrsInit(t_FmPcd *p_FmPcd);
4380aeed3e9SJustin Hibbits void        PrsEnable(t_FmPcd *p_FmPcd);
4390aeed3e9SJustin Hibbits void        PrsDisable(t_FmPcd *p_FmPcd);
4400aeed3e9SJustin Hibbits void        PrsFree(t_FmPcd *p_FmPcd );
4410aeed3e9SJustin Hibbits t_Error     PrsIncludePortInStatistics(t_FmPcd *p_FmPcd, uint8_t hardwarePortId, bool include);
4420aeed3e9SJustin Hibbits 
4430aeed3e9SJustin Hibbits t_Error     FmPcdCcGetGrpParams(t_Handle treeId, uint8_t grpId, uint32_t *p_GrpBits, uint8_t *p_GrpBase);
4440aeed3e9SJustin Hibbits uint8_t     FmPcdCcGetOffset(t_Handle h_CcNode);
4450aeed3e9SJustin Hibbits uint8_t     FmPcdCcGetParseCode(t_Handle h_CcNode);
4460aeed3e9SJustin Hibbits uint16_t    FmPcdCcGetNumOfKeys(t_Handle h_CcNode);
447852ba100SJustin Hibbits t_Error     ValidateNextEngineParams(t_Handle h_FmPcd, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams, e_FmPcdCcStatsMode supportedStatsMode);
4480aeed3e9SJustin Hibbits 
4490aeed3e9SJustin Hibbits void        FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
450852ba100SJustin Hibbits t_Error     FmPcdManipCheckParamsForCcNextEngine(t_FmPcdCcNextEngineParams *p_InfoForManip, uint32_t *requiredAction);
451852ba100SJustin Hibbits void        FmPcdManipUpdateAdResultForCc(t_Handle                     h_Manip,
452852ba100SJustin Hibbits                                           t_FmPcdCcNextEngineParams    *p_CcNextEngineParams,
453852ba100SJustin Hibbits                                           t_Handle                     p_Ad,
454852ba100SJustin Hibbits                                           t_Handle                     *p_AdNewPtr);
4550aeed3e9SJustin Hibbits void        FmPcdManipUpdateAdContLookupForCc(t_Handle h_Manip, t_Handle p_Ad, t_Handle *p_AdNew, uint32_t adTableOffset);
4560aeed3e9SJustin Hibbits void        FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
4570aeed3e9SJustin Hibbits t_Error     FmPcdManipCheckParamsWithCcNodeParams(t_Handle h_Manip, t_Handle h_FmPcdCcNode);
458852ba100SJustin Hibbits #ifdef FM_CAPWAP_SUPPORT
459852ba100SJustin Hibbits t_Handle    FmPcdManipApplSpecificBuild(void);
460852ba100SJustin Hibbits bool        FmPcdManipIsCapwapApplSpecific(t_Handle h_Manip);
461852ba100SJustin Hibbits #endif /* FM_CAPWAP_SUPPORT */
462852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
463852ba100SJustin Hibbits void *      FrmReplicGroupGetSourceTableDescriptor(t_Handle h_ReplicGroup);
464852ba100SJustin Hibbits void        FrmReplicGroupUpdateOwner(t_Handle h_ReplicGroup, bool add);
465852ba100SJustin Hibbits void        FrmReplicGroupUpdateAd(t_Handle h_ReplicGroup, void *p_Ad, t_Handle *h_AdNew);
466852ba100SJustin Hibbits 
467852ba100SJustin Hibbits void        FmPcdCcGetAdTablesThatPointOnReplicGroup(t_Handle   h_Node,
468852ba100SJustin Hibbits                                                      t_Handle   h_ReplicGroup,
469852ba100SJustin Hibbits                                                      t_List     *p_AdTables,
470852ba100SJustin Hibbits                                                      uint32_t   *p_NumOfAdTables);
471852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
472852ba100SJustin Hibbits 
473852ba100SJustin Hibbits void EnqueueNodeInfoToRelevantLst(t_List *p_List, t_CcNodeInformation *p_CcInfo, t_Handle h_Spinlock);
474852ba100SJustin Hibbits void DequeueNodeInfoFromRelevantLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
475852ba100SJustin Hibbits t_CcNodeInformation* FindNodeInfoInReleventLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
476852ba100SJustin Hibbits t_List *FmPcdManipGetSpinlock(t_Handle h_Manip);
477852ba100SJustin Hibbits t_List *FmPcdManipGetNodeLstPointedOnThisManip(t_Handle h_Manip);
478852ba100SJustin Hibbits 
479852ba100SJustin Hibbits typedef struct
480852ba100SJustin Hibbits {
481852ba100SJustin Hibbits     t_Handle    h_StatsAd;
482852ba100SJustin Hibbits     t_Handle    h_StatsCounters;
483852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
484852ba100SJustin Hibbits     t_Handle    h_StatsFLRs;
485852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
486852ba100SJustin Hibbits } t_FmPcdCcStatsParams;
487852ba100SJustin Hibbits 
488852ba100SJustin Hibbits void NextStepAd(t_Handle                     h_Ad,
489852ba100SJustin Hibbits                 t_FmPcdCcStatsParams         *p_FmPcdCcStatsParams,
490852ba100SJustin Hibbits                 t_FmPcdCcNextEngineParams    *p_FmPcdCcNextEngineParams,
491852ba100SJustin Hibbits                 t_FmPcd                      *p_FmPcd);
492852ba100SJustin Hibbits void ReleaseLst(t_List *p_List);
4930aeed3e9SJustin Hibbits 
FmPcdGetMuramHandle(t_Handle h_FmPcd)4940aeed3e9SJustin Hibbits static __inline__ t_Handle FmPcdGetMuramHandle(t_Handle h_FmPcd)
4950aeed3e9SJustin Hibbits {
4960aeed3e9SJustin Hibbits     t_FmPcd     *p_FmPcd = (t_FmPcd*)h_FmPcd;
4970aeed3e9SJustin Hibbits     ASSERT_COND(p_FmPcd);
4980aeed3e9SJustin Hibbits     return p_FmPcd->h_FmMuram;
4990aeed3e9SJustin Hibbits }
5000aeed3e9SJustin Hibbits 
FmPcdGetMuramPhysBase(t_Handle h_FmPcd)5010aeed3e9SJustin Hibbits static __inline__ uint64_t FmPcdGetMuramPhysBase(t_Handle h_FmPcd)
5020aeed3e9SJustin Hibbits {
5030aeed3e9SJustin Hibbits     t_FmPcd     *p_FmPcd = (t_FmPcd*)h_FmPcd;
5040aeed3e9SJustin Hibbits     ASSERT_COND(p_FmPcd);
5050aeed3e9SJustin Hibbits     return p_FmPcd->physicalMuramBase;
5060aeed3e9SJustin Hibbits }
5070aeed3e9SJustin Hibbits 
FmPcdLockSpinlock(t_FmPcdLock * p_Lock)508852ba100SJustin Hibbits static __inline__ uint32_t FmPcdLockSpinlock(t_FmPcdLock *p_Lock)
509852ba100SJustin Hibbits {
510852ba100SJustin Hibbits     ASSERT_COND(p_Lock);
511852ba100SJustin Hibbits     return XX_LockIntrSpinlock(p_Lock->h_Spinlock);
512852ba100SJustin Hibbits }
513852ba100SJustin Hibbits 
FmPcdUnlockSpinlock(t_FmPcdLock * p_Lock,uint32_t flags)514852ba100SJustin Hibbits static __inline__ void FmPcdUnlockSpinlock(t_FmPcdLock *p_Lock, uint32_t flags)
515852ba100SJustin Hibbits {
516852ba100SJustin Hibbits     ASSERT_COND(p_Lock);
517852ba100SJustin Hibbits     XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, flags);
518852ba100SJustin Hibbits }
519852ba100SJustin Hibbits 
FmPcdLockTryLock(t_FmPcdLock * p_Lock)520852ba100SJustin Hibbits static __inline__ bool FmPcdLockTryLock(t_FmPcdLock *p_Lock)
521852ba100SJustin Hibbits {
522852ba100SJustin Hibbits     uint32_t intFlags;
523852ba100SJustin Hibbits 
524852ba100SJustin Hibbits     ASSERT_COND(p_Lock);
525852ba100SJustin Hibbits     intFlags = XX_LockIntrSpinlock(p_Lock->h_Spinlock);
526852ba100SJustin Hibbits     if (p_Lock->flag)
527852ba100SJustin Hibbits     {
528852ba100SJustin Hibbits         XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
529852ba100SJustin Hibbits         return FALSE;
530852ba100SJustin Hibbits     }
531852ba100SJustin Hibbits     p_Lock->flag = TRUE;
532852ba100SJustin Hibbits     XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
533852ba100SJustin Hibbits     return TRUE;
534852ba100SJustin Hibbits }
535852ba100SJustin Hibbits 
FmPcdLockUnlock(t_FmPcdLock * p_Lock)536852ba100SJustin Hibbits static __inline__ void FmPcdLockUnlock(t_FmPcdLock *p_Lock)
537852ba100SJustin Hibbits {
538852ba100SJustin Hibbits     ASSERT_COND(p_Lock);
539852ba100SJustin Hibbits     p_Lock->flag = FALSE;
540852ba100SJustin Hibbits }
541852ba100SJustin Hibbits 
5420aeed3e9SJustin Hibbits 
5430aeed3e9SJustin Hibbits #endif /* __FM_PCD_H */
544