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