Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_pcd.h
48524 views
1
/*
2
* Copyright 2008-2012 Freescale Semiconductor Inc.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
* * Redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer.
8
* * Redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution.
11
* * Neither the name of Freescale Semiconductor nor the
12
* names of its contributors may be used to endorse or promote products
13
* derived from this software without specific prior written permission.
14
*
15
*
16
* ALTERNATIVELY, this software may be distributed under the terms of the
17
* GNU General Public License ("GPL") as published by the Free Software
18
* Foundation, either version 2 of that License or (at your option) any
19
* later version.
20
*
21
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
34
/******************************************************************************
35
@File fm_pcd.h
36
37
@Description FM PCD ...
38
*//***************************************************************************/
39
#ifndef __FM_PCD_H
40
#define __FM_PCD_H
41
42
#include "std_ext.h"
43
#include "error_ext.h"
44
#include "list_ext.h"
45
#include "fm_pcd_ext.h"
46
#include "fm_common.h"
47
#include "fsl_fman_prs.h"
48
#include "fsl_fman_kg.h"
49
50
#define __ERR_MODULE__ MODULE_FM_PCD
51
52
53
/****************************/
54
/* Defaults */
55
/****************************/
56
#define DEFAULT_plcrAutoRefresh FALSE
57
#define DEFAULT_fmPcdKgErrorExceptions (FM_EX_KG_DOUBLE_ECC | FM_EX_KG_KEYSIZE_OVERFLOW)
58
#define DEFAULT_fmPcdPlcrErrorExceptions (FM_PCD_EX_PLCR_DOUBLE_ECC | FM_PCD_EX_PLCR_INIT_ENTRY_ERROR)
59
#define DEFAULT_fmPcdPlcrExceptions 0
60
#define DEFAULT_fmPcdPrsErrorExceptions (FM_PCD_EX_PRS_DOUBLE_ECC)
61
62
#define DEFAULT_fmPcdPrsExceptions FM_PCD_EX_PRS_SINGLE_ECC
63
#define DEFAULT_numOfUsedProfilesPerWindow 16
64
#define DEFAULT_numOfSharedPlcrProfiles 4
65
66
/****************************/
67
/* Network defines */
68
/****************************/
69
#define UDP_HEADER_SIZE 8
70
71
#define ESP_SPI_OFFSET 0
72
#define ESP_SPI_SIZE 4
73
#define ESP_SEQ_NUM_OFFSET ESP_SPI_SIZE
74
#define ESP_SEQ_NUM_SIZE 4
75
76
/****************************/
77
/* General defines */
78
/****************************/
79
#define ILLEGAL_CLS_PLAN 0xff
80
#define ILLEGAL_NETENV 0xff
81
82
#define FM_PCD_MAX_NUM_OF_ALIAS_HDRS 3
83
84
/****************************/
85
/* Error defines */
86
/****************************/
87
88
#define FM_PCD_EX_PLCR_DOUBLE_ECC 0x20000000
89
#define FM_PCD_EX_PLCR_INIT_ENTRY_ERROR 0x10000000
90
#define FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE 0x08000000
91
#define FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE 0x04000000
92
93
#define GET_FM_PCD_EXCEPTION_FLAG(bitMask, exception) \
94
switch (exception){ \
95
case e_FM_PCD_KG_EXCEPTION_DOUBLE_ECC: \
96
bitMask = FM_EX_KG_DOUBLE_ECC; break; \
97
case e_FM_PCD_PLCR_EXCEPTION_DOUBLE_ECC: \
98
bitMask = FM_PCD_EX_PLCR_DOUBLE_ECC; break; \
99
case e_FM_PCD_KG_EXCEPTION_KEYSIZE_OVERFLOW: \
100
bitMask = FM_EX_KG_KEYSIZE_OVERFLOW; break; \
101
case e_FM_PCD_PLCR_EXCEPTION_INIT_ENTRY_ERROR: \
102
bitMask = FM_PCD_EX_PLCR_INIT_ENTRY_ERROR; break; \
103
case e_FM_PCD_PLCR_EXCEPTION_PRAM_SELF_INIT_COMPLETE: \
104
bitMask = FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE; break; \
105
case e_FM_PCD_PLCR_EXCEPTION_ATOMIC_ACTION_COMPLETE: \
106
bitMask = FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE; break; \
107
case e_FM_PCD_PRS_EXCEPTION_DOUBLE_ECC: \
108
bitMask = FM_PCD_EX_PRS_DOUBLE_ECC; break; \
109
case e_FM_PCD_PRS_EXCEPTION_SINGLE_ECC: \
110
bitMask = FM_PCD_EX_PRS_SINGLE_ECC; break; \
111
default: bitMask = 0;break;}
112
113
/***********************************************************************/
114
/* Policer defines */
115
/***********************************************************************/
116
#define FM_PCD_PLCR_GCR_STEN 0x40000000
117
#define FM_PCD_PLCR_DOUBLE_ECC 0x80000000
118
#define FM_PCD_PLCR_INIT_ENTRY_ERROR 0x40000000
119
#define FM_PCD_PLCR_PRAM_SELF_INIT_COMPLETE 0x80000000
120
#define FM_PCD_PLCR_ATOMIC_ACTION_COMPLETE 0x40000000
121
122
/***********************************************************************/
123
/* Memory map */
124
/***********************************************************************/
125
#if defined(__MWERKS__) && !defined(__GNUC__)
126
#pragma pack(push,1)
127
#endif /* defined(__MWERKS__) && ... */
128
129
130
typedef struct {
131
/* General Configuration and Status Registers */
132
volatile uint32_t fmpl_gcr; /* 0x000 FMPL_GCR - FM Policer General Configuration */
133
volatile uint32_t fmpl_gsr; /* 0x004 FMPL_GSR - FM Policer Global Status Register */
134
volatile uint32_t fmpl_evr; /* 0x008 FMPL_EVR - FM Policer Event Register */
135
volatile uint32_t fmpl_ier; /* 0x00C FMPL_IER - FM Policer Interrupt Enable Register */
136
volatile uint32_t fmpl_ifr; /* 0x010 FMPL_IFR - FM Policer Interrupt Force Register */
137
volatile uint32_t fmpl_eevr; /* 0x014 FMPL_EEVR - FM Policer Error Event Register */
138
volatile uint32_t fmpl_eier; /* 0x018 FMPL_EIER - FM Policer Error Interrupt Enable Register */
139
volatile uint32_t fmpl_eifr; /* 0x01C FMPL_EIFR - FM Policer Error Interrupt Force Register */
140
/* Global Statistic Counters */
141
volatile uint32_t fmpl_rpcnt; /* 0x020 FMPL_RPC - FM Policer RED Packets Counter */
142
volatile uint32_t fmpl_ypcnt; /* 0x024 FMPL_YPC - FM Policer YELLOW Packets Counter */
143
volatile uint32_t fmpl_rrpcnt; /* 0x028 FMPL_RRPC - FM Policer Recolored RED Packet Counter */
144
volatile uint32_t fmpl_rypcnt; /* 0x02C FMPL_RYPC - FM Policer Recolored YELLOW Packet Counter */
145
volatile uint32_t fmpl_tpcnt; /* 0x030 FMPL_TPC - FM Policer Total Packet Counter */
146
volatile uint32_t fmpl_flmcnt; /* 0x034 FMPL_FLMC - FM Policer Frame Length Mismatch Counter */
147
volatile uint32_t fmpl_res0[21]; /* 0x038 - 0x08B Reserved */
148
/* Profile RAM Access Registers */
149
volatile uint32_t fmpl_par; /* 0x08C FMPL_PAR - FM Policer Profile Action Register*/
150
t_FmPcdPlcrProfileRegs profileRegs;
151
/* Error Capture Registers */
152
volatile uint32_t fmpl_serc; /* 0x100 FMPL_SERC - FM Policer Soft Error Capture */
153
volatile uint32_t fmpl_upcr; /* 0x104 FMPL_UPCR - FM Policer Uninitialized Profile Capture Register */
154
volatile uint32_t fmpl_res2; /* 0x108 Reserved */
155
/* Debug Registers */
156
volatile uint32_t fmpl_res3[61]; /* 0x10C-0x200 Reserved Debug*/
157
/* Profile Selection Mapping Registers Per Port-ID (n=1-11, 16) */
158
volatile uint32_t fmpl_dpmr; /* 0x200 FMPL_DPMR - FM Policer Default Mapping Register */
159
volatile uint32_t fmpl_pmr[63]; /*+default 0x204-0x2FF FMPL_PMR1 - FMPL_PMR63, - FM Policer Profile Mapping Registers.
160
(for port-ID 1-11, only for supported Port-ID registers) */
161
} t_FmPcdPlcrRegs;
162
163
#if defined(__MWERKS__) && !defined(__GNUC__)
164
#pragma pack(pop)
165
#endif /* defined(__MWERKS__) && ... */
166
167
168
/***********************************************************************/
169
/* Driver's internal structures */
170
/***********************************************************************/
171
172
typedef struct {
173
bool known;
174
uint8_t id;
175
} t_FmPcdKgSchemesExtractsEntry;
176
177
typedef struct {
178
t_FmPcdKgSchemesExtractsEntry extractsArray[FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY];
179
} t_FmPcdKgSchemesExtracts;
180
181
typedef struct {
182
t_Handle h_Manip;
183
bool keepRes;
184
e_FmPcdEngine nextEngine;
185
uint8_t parseCode;
186
} t_FmPcdInfoForManip;
187
188
/**************************************************************************//**
189
@Description A structure of parameters to communicate
190
between the port and PCD regarding the KG scheme.
191
*//***************************************************************************/
192
typedef struct {
193
uint8_t netEnvId; /* in */
194
uint8_t numOfDistinctionUnits; /* in */
195
uint8_t unitIds[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS]; /* in */
196
uint32_t vector; /* out */
197
} t_NetEnvParams;
198
199
typedef struct {
200
bool allocated;
201
uint8_t ownerId; /* guestId for KG in multi-partition only.
202
portId for PLCR in any environment */
203
} t_FmPcdAllocMng;
204
205
typedef struct {
206
volatile bool lock;
207
bool used;
208
uint8_t owners;
209
uint8_t netEnvId;
210
uint8_t guestId;
211
uint8_t baseEntry;
212
uint16_t sizeOfGrp;
213
protocolOpt_t optArray[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
214
} t_FmPcdKgClsPlanGrp;
215
216
typedef struct {
217
t_Handle h_FmPcd;
218
uint8_t schemeId;
219
t_FmPcdLock *p_Lock;
220
bool valid;
221
uint8_t netEnvId;
222
uint8_t owners;
223
uint32_t matchVector;
224
uint32_t ccUnits;
225
bool nextRelativePlcrProfile;
226
uint16_t relativeProfileId;
227
uint16_t numOfProfiles;
228
t_FmPcdKgKeyOrder orderedArray;
229
e_FmPcdEngine nextEngine;
230
e_FmPcdDoneAction doneAction;
231
bool requiredActionFlag;
232
uint32_t requiredAction;
233
bool extractedOrs;
234
uint8_t bitOffsetInPlcrProfile;
235
bool directPlcr;
236
#if (DPAA_VERSION >= 11)
237
bool vspe;
238
#endif
239
} t_FmPcdKgScheme;
240
241
typedef union {
242
struct fman_kg_scheme_regs schemeRegs;
243
struct fman_kg_pe_regs portRegs;
244
struct fman_kg_cp_regs clsPlanRegs;
245
} u_FmPcdKgIndirectAccessRegs;
246
247
typedef struct {
248
struct fman_kg_regs *p_FmPcdKgRegs;
249
uint32_t schemeExceptionsBitMask;
250
uint8_t numOfSchemes;
251
t_Handle h_HwSpinlock;
252
uint8_t schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
253
t_FmPcdKgScheme schemes[FM_PCD_KG_NUM_OF_SCHEMES];
254
t_FmPcdKgClsPlanGrp clsPlanGrps[FM_MAX_NUM_OF_PORTS];
255
uint8_t emptyClsPlanGrpId;
256
t_FmPcdAllocMng schemesMng[FM_PCD_KG_NUM_OF_SCHEMES]; /* only for MASTER ! */
257
t_FmPcdAllocMng clsPlanBlocksMng[FM_PCD_MAX_NUM_OF_CLS_PLANS/CLS_PLAN_NUM_PER_GRP];
258
u_FmPcdKgIndirectAccessRegs *p_IndirectAccessRegs;
259
} t_FmPcdKg;
260
261
typedef struct {
262
uint16_t profilesBase;
263
uint16_t numOfProfiles;
264
t_Handle h_FmPort;
265
} t_FmPcdPlcrMapParam;
266
267
typedef struct {
268
uint16_t absoluteProfileId;
269
t_Handle h_FmPcd;
270
bool valid;
271
t_FmPcdLock *p_Lock;
272
t_FmPcdAllocMng profilesMng;
273
bool requiredActionFlag;
274
uint32_t requiredAction;
275
e_FmPcdEngine nextEngineOnGreen; /**< Green next engine type */
276
u_FmPcdPlcrNextEngineParams paramsOnGreen; /**< Green next engine params */
277
278
e_FmPcdEngine nextEngineOnYellow; /**< Yellow next engine type */
279
u_FmPcdPlcrNextEngineParams paramsOnYellow; /**< Yellow next engine params */
280
281
e_FmPcdEngine nextEngineOnRed; /**< Red next engine type */
282
u_FmPcdPlcrNextEngineParams paramsOnRed; /**< Red next engine params */
283
} t_FmPcdPlcrProfile;
284
285
typedef struct {
286
t_FmPcdPlcrRegs *p_FmPcdPlcrRegs;
287
uint16_t partPlcrProfilesBase;
288
uint16_t partNumOfPlcrProfiles;
289
t_FmPcdPlcrProfile profiles[FM_PCD_PLCR_NUM_ENTRIES];
290
uint16_t numOfSharedProfiles;
291
uint16_t sharedProfilesIds[FM_PCD_PLCR_NUM_ENTRIES];
292
t_FmPcdPlcrMapParam portsMapping[FM_MAX_NUM_OF_PORTS];
293
t_Handle h_HwSpinlock;
294
t_Handle h_SwSpinlock;
295
} t_FmPcdPlcr;
296
297
typedef struct {
298
uint32_t *p_SwPrsCode;
299
uint32_t *p_CurrSwPrs;
300
uint8_t currLabel;
301
struct fman_prs_regs *p_FmPcdPrsRegs;
302
t_FmPcdPrsLabelParams labelsTable[FM_PCD_PRS_NUM_OF_LABELS];
303
uint32_t fmPcdPrsPortIdStatistics;
304
} t_FmPcdPrs;
305
306
typedef struct {
307
struct {
308
e_NetHeaderType hdr;
309
protocolOpt_t opt; /* only one option !! */
310
} hdrs[FM_PCD_MAX_NUM_OF_INTERCHANGEABLE_HDRS];
311
} t_FmPcdIntDistinctionUnit;
312
313
typedef struct {
314
e_NetHeaderType hdr;
315
protocolOpt_t opt; /* only one option !! */
316
e_NetHeaderType aliasHdr;
317
} t_FmPcdNetEnvAliases;
318
319
typedef struct {
320
uint8_t netEnvId;
321
t_Handle h_FmPcd;
322
t_Handle h_Spinlock;
323
bool used;
324
uint8_t owners;
325
uint8_t clsPlanGrpId;
326
t_FmPcdIntDistinctionUnit units[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
327
uint32_t unitsVectors[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
328
uint32_t lcvs[FM_PCD_PRS_NUM_OF_HDRS];
329
uint32_t macsecVector;
330
t_FmPcdNetEnvAliases aliasHdrs[FM_PCD_MAX_NUM_OF_ALIAS_HDRS];
331
} t_FmPcdNetEnv;
332
333
typedef struct {
334
struct fman_prs_cfg dfltCfg;
335
bool plcrAutoRefresh;
336
uint16_t prsMaxParseCycleLimit;
337
} t_FmPcdDriverParam;
338
339
typedef struct {
340
t_Handle h_Fm;
341
t_Handle h_FmMuram;
342
t_FmRevisionInfo fmRevInfo;
343
344
uint64_t physicalMuramBase;
345
346
t_Handle h_Spinlock;
347
t_List freeLocksLst;
348
t_List acquiredLocksLst;
349
350
t_Handle h_IpcSession; /* relevant for guest only */
351
bool enabled;
352
uint8_t guestId; /**< Guest Partition Id */
353
uint8_t numOfEnabledGuestPartitionsPcds;
354
char fmPcdModuleName[MODULE_NAME_SIZE];
355
char fmPcdIpcHandlerModuleName[MODULE_NAME_SIZE]; /* relevant for guest only - this is the master's name */
356
t_FmPcdNetEnv netEnvs[FM_MAX_NUM_OF_PORTS];
357
t_FmPcdKg *p_FmPcdKg;
358
t_FmPcdPlcr *p_FmPcdPlcr;
359
t_FmPcdPrs *p_FmPcdPrs;
360
361
void *p_CcShadow; /**< CC MURAM shadow */
362
uint32_t ccShadowSize;
363
uint32_t ccShadowAlign;
364
volatile bool shadowLock;
365
t_Handle h_ShadowSpinlock;
366
367
t_Handle h_Hc;
368
369
uint32_t exceptions;
370
t_FmPcdExceptionCallback *f_Exception;
371
t_FmPcdIdExceptionCallback *f_FmPcdIndexedException;
372
t_Handle h_App;
373
uintptr_t ipv6FrameIdAddr;
374
uintptr_t capwapFrameIdAddr;
375
bool advancedOffloadSupport;
376
377
t_FmPcdDriverParam *p_FmPcdDriverParam;
378
} t_FmPcd;
379
380
#if (DPAA_VERSION >= 11)
381
typedef uint8_t t_FmPcdFrmReplicUpdateType;
382
#define FRM_REPLIC_UPDATE_COUNTER 0x01
383
#define FRM_REPLIC_UPDATE_INFO 0x02
384
#endif /* (DPAA_VERSION >= 11) */
385
/***********************************************************************/
386
/* PCD internal routines */
387
/***********************************************************************/
388
389
t_Error PcdGetVectorForOpt(t_FmPcd *p_FmPcd, uint8_t netEnvId, protocolOpt_t opt, uint32_t *p_Vector);
390
t_Error PcdGetUnitsVector(t_FmPcd *p_FmPcd, t_NetEnvParams *p_Params);
391
bool PcdNetEnvIsUnitWithoutOpts(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint32_t unitVector);
392
t_Error PcdGetClsPlanGrpParams(t_FmPcd *p_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_GrpParams);
393
void FmPcdSetClsPlanGrpId(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint8_t clsPlanGrpId);
394
e_NetHeaderType FmPcdGetAliasHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
395
uint8_t FmPcdNetEnvGetUnitIdForSingleHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
396
uint8_t FmPcdNetEnvGetUnitId(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr, bool interchangeable, protocolOpt_t opt);
397
398
t_Error FmPcdManipBuildIpReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, bool isIpv4, uint8_t groupId);
399
t_Error FmPcdManipDeleteIpReassmSchemes(t_Handle h_Manip);
400
t_Error FmPcdManipBuildCapwapReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, uint8_t groupId);
401
t_Error FmPcdManipDeleteCapwapReassmSchemes(t_Handle h_Manip);
402
bool FmPcdManipIpReassmIsIpv6Hdr(t_Handle h_Manip);
403
404
t_Handle KgConfig( t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
405
t_Error KgInit(t_FmPcd *p_FmPcd);
406
t_Error KgFree(t_FmPcd *p_FmPcd);
407
void KgSetClsPlan(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanSet *p_Set);
408
bool KgIsSchemeAlwaysDirect(t_Handle h_FmPcd, uint8_t schemeId);
409
void KgEnable(t_FmPcd *p_FmPcd);
410
void KgDisable(t_FmPcd *p_FmPcd);
411
t_Error KgAllocClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t *p_First);
412
void KgFreeClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t base);
413
414
/* only for MULTI partittion */
415
t_Error FmPcdKgAllocSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
416
t_Error FmPcdKgFreeSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
417
/* only for SINGLE partittion */
418
t_Error KgBindPortToSchemes(t_Handle h_FmPcd , uint8_t hardwarePortId, uint32_t spReg);
419
420
t_FmPcdLock *FmPcdAcquireLock(t_Handle h_FmPcd);
421
void FmPcdReleaseLock(t_Handle h_FmPcd, t_FmPcdLock *p_Lock);
422
423
t_Handle PlcrConfig(t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
424
t_Error PlcrInit(t_FmPcd *p_FmPcd);
425
t_Error PlcrFree(t_FmPcd *p_FmPcd);
426
void PlcrEnable(t_FmPcd *p_FmPcd);
427
void PlcrDisable(t_FmPcd *p_FmPcd);
428
uint16_t PlcrAllocProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
429
void PlcrFreeProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
430
t_Error PlcrSetPortProfiles(t_FmPcd *p_FmPcd,
431
uint8_t hardwarePortId,
432
uint16_t numOfProfiles,
433
uint16_t base);
434
t_Error PlcrClearPortProfiles(t_FmPcd *p_FmPcd, uint8_t hardwarePortId);
435
436
t_Handle PrsConfig(t_FmPcd *p_FmPcd,t_FmPcdParams *p_FmPcdParams);
437
t_Error PrsInit(t_FmPcd *p_FmPcd);
438
void PrsEnable(t_FmPcd *p_FmPcd);
439
void PrsDisable(t_FmPcd *p_FmPcd);
440
void PrsFree(t_FmPcd *p_FmPcd );
441
t_Error PrsIncludePortInStatistics(t_FmPcd *p_FmPcd, uint8_t hardwarePortId, bool include);
442
443
t_Error FmPcdCcGetGrpParams(t_Handle treeId, uint8_t grpId, uint32_t *p_GrpBits, uint8_t *p_GrpBase);
444
uint8_t FmPcdCcGetOffset(t_Handle h_CcNode);
445
uint8_t FmPcdCcGetParseCode(t_Handle h_CcNode);
446
uint16_t FmPcdCcGetNumOfKeys(t_Handle h_CcNode);
447
t_Error ValidateNextEngineParams(t_Handle h_FmPcd, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams, e_FmPcdCcStatsMode supportedStatsMode);
448
449
void FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
450
t_Error FmPcdManipCheckParamsForCcNextEngine(t_FmPcdCcNextEngineParams *p_InfoForManip, uint32_t *requiredAction);
451
void FmPcdManipUpdateAdResultForCc(t_Handle h_Manip,
452
t_FmPcdCcNextEngineParams *p_CcNextEngineParams,
453
t_Handle p_Ad,
454
t_Handle *p_AdNewPtr);
455
void FmPcdManipUpdateAdContLookupForCc(t_Handle h_Manip, t_Handle p_Ad, t_Handle *p_AdNew, uint32_t adTableOffset);
456
void FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
457
t_Error FmPcdManipCheckParamsWithCcNodeParams(t_Handle h_Manip, t_Handle h_FmPcdCcNode);
458
#ifdef FM_CAPWAP_SUPPORT
459
t_Handle FmPcdManipApplSpecificBuild(void);
460
bool FmPcdManipIsCapwapApplSpecific(t_Handle h_Manip);
461
#endif /* FM_CAPWAP_SUPPORT */
462
#if (DPAA_VERSION >= 11)
463
void * FrmReplicGroupGetSourceTableDescriptor(t_Handle h_ReplicGroup);
464
void FrmReplicGroupUpdateOwner(t_Handle h_ReplicGroup, bool add);
465
void FrmReplicGroupUpdateAd(t_Handle h_ReplicGroup, void *p_Ad, t_Handle *h_AdNew);
466
467
void FmPcdCcGetAdTablesThatPointOnReplicGroup(t_Handle h_Node,
468
t_Handle h_ReplicGroup,
469
t_List *p_AdTables,
470
uint32_t *p_NumOfAdTables);
471
#endif /* (DPAA_VERSION >= 11) */
472
473
void EnqueueNodeInfoToRelevantLst(t_List *p_List, t_CcNodeInformation *p_CcInfo, t_Handle h_Spinlock);
474
void DequeueNodeInfoFromRelevantLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
475
t_CcNodeInformation* FindNodeInfoInReleventLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
476
t_List *FmPcdManipGetSpinlock(t_Handle h_Manip);
477
t_List *FmPcdManipGetNodeLstPointedOnThisManip(t_Handle h_Manip);
478
479
typedef struct
480
{
481
t_Handle h_StatsAd;
482
t_Handle h_StatsCounters;
483
#if (DPAA_VERSION >= 11)
484
t_Handle h_StatsFLRs;
485
#endif /* (DPAA_VERSION >= 11) */
486
} t_FmPcdCcStatsParams;
487
488
void NextStepAd(t_Handle h_Ad,
489
t_FmPcdCcStatsParams *p_FmPcdCcStatsParams,
490
t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams,
491
t_FmPcd *p_FmPcd);
492
void ReleaseLst(t_List *p_List);
493
494
static __inline__ t_Handle FmPcdGetMuramHandle(t_Handle h_FmPcd)
495
{
496
t_FmPcd *p_FmPcd = (t_FmPcd*)h_FmPcd;
497
ASSERT_COND(p_FmPcd);
498
return p_FmPcd->h_FmMuram;
499
}
500
501
static __inline__ uint64_t FmPcdGetMuramPhysBase(t_Handle h_FmPcd)
502
{
503
t_FmPcd *p_FmPcd = (t_FmPcd*)h_FmPcd;
504
ASSERT_COND(p_FmPcd);
505
return p_FmPcd->physicalMuramBase;
506
}
507
508
static __inline__ uint32_t FmPcdLockSpinlock(t_FmPcdLock *p_Lock)
509
{
510
ASSERT_COND(p_Lock);
511
return XX_LockIntrSpinlock(p_Lock->h_Spinlock);
512
}
513
514
static __inline__ void FmPcdUnlockSpinlock(t_FmPcdLock *p_Lock, uint32_t flags)
515
{
516
ASSERT_COND(p_Lock);
517
XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, flags);
518
}
519
520
static __inline__ bool FmPcdLockTryLock(t_FmPcdLock *p_Lock)
521
{
522
uint32_t intFlags;
523
524
ASSERT_COND(p_Lock);
525
intFlags = XX_LockIntrSpinlock(p_Lock->h_Spinlock);
526
if (p_Lock->flag)
527
{
528
XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
529
return FALSE;
530
}
531
p_Lock->flag = TRUE;
532
XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
533
return TRUE;
534
}
535
536
static __inline__ void FmPcdLockUnlock(t_FmPcdLock *p_Lock)
537
{
538
ASSERT_COND(p_Lock);
539
p_Lock->flag = FALSE;
540
}
541
542
543
#endif /* __FM_PCD_H */
544
545