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_cc.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_cc.h
36
37
@Description FM PCD CC ...
38
*//***************************************************************************/
39
#ifndef __FM_CC_H
40
#define __FM_CC_H
41
42
#include "std_ext.h"
43
#include "error_ext.h"
44
#include "list_ext.h"
45
46
#include "fm_pcd.h"
47
48
49
/***********************************************************************/
50
/* Coarse classification defines */
51
/***********************************************************************/
52
53
#define CC_MAX_NUM_OF_KEYS (FM_PCD_MAX_NUM_OF_KEYS + 1)
54
55
#define CC_PC_FF_MACDST 0x00
56
#define CC_PC_FF_MACSRC 0x01
57
#define CC_PC_FF_ETYPE 0x02
58
59
#define CC_PC_FF_TCI1 0x03
60
#define CC_PC_FF_TCI2 0x04
61
62
#define CC_PC_FF_MPLS1 0x06
63
#define CC_PC_FF_MPLS_LAST 0x07
64
65
#define CC_PC_FF_IPV4DST1 0x08
66
#define CC_PC_FF_IPV4DST2 0x16
67
#define CC_PC_FF_IPV4IPTOS_TC1 0x09
68
#define CC_PC_FF_IPV4IPTOS_TC2 0x17
69
#define CC_PC_FF_IPV4PTYPE1 0x0A
70
#define CC_PC_FF_IPV4PTYPE2 0x18
71
#define CC_PC_FF_IPV4SRC1 0x0b
72
#define CC_PC_FF_IPV4SRC2 0x19
73
#define CC_PC_FF_IPV4SRC1_IPV4DST1 0x0c
74
#define CC_PC_FF_IPV4SRC2_IPV4DST2 0x1a
75
#define CC_PC_FF_IPV4TTL 0x29
76
77
78
#define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1 0x0d /*TODO - CLASS - what is it? TOS*/
79
#define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2 0x1b
80
#define CC_PC_FF_IPV6PTYPE1 0x0e
81
#define CC_PC_FF_IPV6PTYPE2 0x1c
82
#define CC_PC_FF_IPV6DST1 0x0f
83
#define CC_PC_FF_IPV6DST2 0x1d
84
#define CC_PC_FF_IPV6SRC1 0x10
85
#define CC_PC_FF_IPV6SRC2 0x1e
86
#define CC_PC_FF_IPV6HOP_LIMIT 0x2a
87
#define CC_PC_FF_IPPID 0x24
88
#define CC_PC_FF_IPDSCP 0x76
89
90
#define CC_PC_FF_GREPTYPE 0x11
91
92
#define CC_PC_FF_MINENCAP_PTYPE 0x12
93
#define CC_PC_FF_MINENCAP_IPDST 0x13
94
#define CC_PC_FF_MINENCAP_IPSRC 0x14
95
#define CC_PC_FF_MINENCAP_IPSRC_IPDST 0x15
96
97
#define CC_PC_FF_L4PSRC 0x1f
98
#define CC_PC_FF_L4PDST 0x20
99
#define CC_PC_FF_L4PSRC_L4PDST 0x21
100
101
#define CC_PC_FF_PPPPID 0x05
102
103
#define CC_PC_PR_SHIM1 0x22
104
#define CC_PC_PR_SHIM2 0x23
105
106
#define CC_PC_GENERIC_WITHOUT_MASK 0x27
107
#define CC_PC_GENERIC_WITH_MASK 0x28
108
#define CC_PC_GENERIC_IC_GMASK 0x2B
109
#define CC_PC_GENERIC_IC_HASH_INDEXED 0x2C
110
#define CC_PC_GENERIC_IC_AGING_MASK 0x2D
111
112
#define CC_PR_OFFSET 0x25
113
#define CC_PR_WITHOUT_OFFSET 0x26
114
115
#define CC_PC_PR_ETH_OFFSET 19
116
#define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET 16
117
#define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET 17
118
#define CC_PC_PR_USER_LLC_SNAP_OFFSET 20
119
#define CC_PC_PR_VLAN1_OFFSET 21
120
#define CC_PC_PR_VLAN2_OFFSET 22
121
#define CC_PC_PR_PPPOE_OFFSET 24
122
#define CC_PC_PR_MPLS1_OFFSET 25
123
#define CC_PC_PR_MPLS_LAST_OFFSET 26
124
#define CC_PC_PR_IP1_OFFSET 27
125
#define CC_PC_PR_IP_LAST_OFFSET 28
126
#define CC_PC_PR_MINENC_OFFSET 28
127
#define CC_PC_PR_L4_OFFSET 30
128
#define CC_PC_PR_GRE_OFFSET 29
129
#define CC_PC_PR_ETYPE_LAST_OFFSET 23
130
#define CC_PC_PR_NEXT_HEADER_OFFSET 31
131
132
#define CC_PC_ILLEGAL 0xff
133
#define CC_SIZE_ILLEGAL 0
134
135
#define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN 16
136
#define FM_PCD_CC_AD_TABLE_ALIGN 16
137
#define FM_PCD_CC_AD_ENTRY_SIZE 16
138
#define FM_PCD_CC_NUM_OF_KEYS 255
139
#define FM_PCD_CC_TREE_ADDR_ALIGN 256
140
141
#define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE 0x00000000
142
#define FM_PCD_AD_RESULT_DATA_FLOW_TYPE 0x80000000
143
#define FM_PCD_AD_RESULT_PLCR_DIS 0x20000000
144
#define FM_PCD_AD_RESULT_EXTENDED_MODE 0x80000000
145
#define FM_PCD_AD_RESULT_NADEN 0x20000000
146
#define FM_PCD_AD_RESULT_STATISTICS_EN 0x40000000
147
148
#define FM_PCD_AD_CONT_LOOKUP_TYPE 0x40000000
149
#define FM_PCD_AD_CONT_LOOKUP_LCL_MASK 0x00800000
150
151
#define FM_PCD_AD_STATS_TYPE 0x40000000
152
#define FM_PCD_AD_STATS_FLR_ADDR_MASK 0x00FFFFFF
153
#define FM_PCD_AD_STATS_COUNTERS_ADDR_MASK 0x00FFFFFF
154
#define FM_PCD_AD_STATS_NEXT_ACTION_MASK 0xFFFF0000
155
#define FM_PCD_AD_STATS_NEXT_ACTION_SHIFT 12
156
#define FM_PCD_AD_STATS_NAD_EN 0x00008000
157
#define FM_PCD_AD_STATS_OP_CODE 0x00000036
158
#define FM_PCD_AD_STATS_FLR_EN 0x00004000
159
#define FM_PCD_AD_STATS_COND_EN 0x00002000
160
161
162
163
#define FM_PCD_AD_BYPASS_TYPE 0xc0000000
164
165
#define FM_PCD_AD_TYPE_MASK 0xc0000000
166
#define FM_PCD_AD_OPCODE_MASK 0x0000000f
167
168
#define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16
169
#if (DPAA_VERSION >= 11)
170
#define FM_PCD_AD_RESULT_VSP_SHIFT 24
171
#define FM_PCD_AD_RESULT_NO_OM_VSPE 0x02000000
172
#define FM_PCD_AD_RESULT_VSP_MASK 0x3f
173
#define FM_PCD_AD_NCSPFQIDM_MASK 0x80000000
174
#endif /* (DPAA_VERSION >= 11) */
175
176
#define GLBL_MASK_FOR_HASH_INDEXED 0xfff00000
177
#define CC_GLBL_MASK_SIZE 4
178
#define CC_AGING_MASK_SIZE 4
179
180
typedef uint32_t ccPrivateInfo_t; /**< private info of CC: */
181
182
#define CC_PRIVATE_INFO_NONE 0
183
#define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP 0x80000000
184
#define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH 0x40000000
185
#define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH 0x20000000
186
#define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP 0x10000000
187
188
#define CC_BUILD_AGING_MASK(numOfKeys) ((((1LL << ((numOfKeys) + 1)) - 1)) << (31 - (numOfKeys)))
189
/***********************************************************************/
190
/* Memory map */
191
/***********************************************************************/
192
#if defined(__MWERKS__) && !defined(__GNUC__)
193
#pragma pack(push,1)
194
#endif /* defined(__MWERKS__) && ... */
195
196
typedef struct
197
{
198
volatile uint32_t fqid;
199
volatile uint32_t plcrProfile;
200
volatile uint32_t nia;
201
volatile uint32_t res;
202
} t_AdOfTypeResult;
203
204
typedef struct
205
{
206
volatile uint32_t ccAdBase;
207
volatile uint32_t matchTblPtr;
208
volatile uint32_t pcAndOffsets;
209
volatile uint32_t gmask;
210
} t_AdOfTypeContLookup;
211
212
typedef struct
213
{
214
volatile uint32_t profileTableAddr;
215
volatile uint32_t reserved;
216
volatile uint32_t nextActionIndx;
217
volatile uint32_t statsTableAddr;
218
} t_AdOfTypeStats;
219
220
typedef union
221
{
222
volatile t_AdOfTypeResult adResult;
223
volatile t_AdOfTypeContLookup adContLookup;
224
} t_Ad;
225
226
#if defined(__MWERKS__) && !defined(__GNUC__)
227
#pragma pack(pop)
228
#endif /* defined(__MWERKS__) && ... */
229
230
231
/***********************************************************************/
232
/* Driver's internal structures */
233
/***********************************************************************/
234
235
typedef struct t_FmPcdStatsObj
236
{
237
t_Handle h_StatsAd;
238
t_Handle h_StatsCounters;
239
t_List node;
240
} t_FmPcdStatsObj;
241
242
typedef struct
243
{
244
uint8_t key[FM_PCD_MAX_SIZE_OF_KEY];
245
uint8_t mask[FM_PCD_MAX_SIZE_OF_KEY];
246
247
t_FmPcdCcNextEngineParams nextEngineParams;
248
uint32_t requiredAction;
249
uint32_t shadowAction;
250
251
t_FmPcdStatsObj *p_StatsObj;
252
253
} t_FmPcdCcKeyAndNextEngineParams;
254
255
typedef struct
256
{
257
t_Handle p_Ad;
258
e_FmPcdEngine fmPcdEngine;
259
bool adAllocated;
260
bool isTree;
261
262
uint32_t myInfo;
263
t_List *h_CcNextNodesLst;
264
t_Handle h_AdditionalInfo;
265
t_Handle h_Node;
266
} t_FmPcdModifyCcAdditionalParams;
267
268
typedef struct
269
{
270
t_Handle p_AdTableNew;
271
t_Handle p_KeysMatchTableNew;
272
t_Handle p_AdTableOld;
273
t_Handle p_KeysMatchTableOld;
274
uint16_t numOfKeys;
275
t_Handle h_CurrentNode;
276
uint16_t savedKeyIndex;
277
t_Handle h_NodeForAdd;
278
t_Handle h_NodeForRmv;
279
t_Handle h_ManipForRmv;
280
t_Handle h_ManipForAdd;
281
t_FmPcdStatsObj *p_StatsObjForRmv;
282
#if (DPAA_VERSION >= 11)
283
t_Handle h_FrmReplicForAdd;
284
t_Handle h_FrmReplicForRmv;
285
#endif /* (DPAA_VERSION >= 11) */
286
bool tree;
287
288
t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS];
289
} t_FmPcdModifyCcKeyAdditionalParams;
290
291
typedef struct
292
{
293
t_Handle h_Manip;
294
t_Handle h_CcNode;
295
} t_CcNextEngineInfo;
296
297
typedef struct
298
{
299
uint16_t numOfKeys;
300
uint16_t maxNumOfKeys;
301
302
bool maskSupport;
303
uint32_t keysMatchTableMaxSize;
304
305
e_FmPcdCcStatsMode statisticsMode;
306
uint32_t numOfStatsFLRs;
307
uint32_t countersArraySize;
308
309
bool isHashBucket; /**< Valid for match table node that is a bucket of a hash table only */
310
t_Handle h_MissStatsCounters; /**< Valid for hash table node and match table that is a bucket;
311
Holds the statistics counters allocated by the hash table and
312
are shared by all hash table buckets; */
313
t_Handle h_PrivMissStatsCounters; /**< Valid for match table node that is a bucket of a hash table only;
314
Holds the statistics counters that were allocated for this node
315
and replaced by the shared counters (allocated by the hash table); */
316
bool statsEnForMiss; /**< Valid for hash table node only; TRUE is statistics are currently
317
enabled for hash 'miss', FALSE otherwise; This parameter effects the
318
returned statistics count to user, statistics AD always present for 'miss'
319
for all hash buckets; */
320
bool glblMaskUpdated;
321
t_Handle p_GlblMask;
322
bool lclMask;
323
uint8_t parseCode;
324
uint8_t offset;
325
uint8_t prsArrayOffset;
326
bool ctrlFlow;
327
uint16_t owners;
328
329
uint8_t ccKeySizeAccExtraction;
330
uint8_t sizeOfExtraction;
331
uint8_t glblMaskSize;
332
333
t_Handle h_KeysMatchTable;
334
t_Handle h_AdTable;
335
t_Handle h_StatsAds;
336
t_Handle h_TmpAd;
337
t_Handle h_Ad;
338
t_Handle h_StatsFLRs;
339
340
t_List availableStatsLst;
341
342
t_List ccPrevNodesLst;
343
344
t_List ccTreeIdLst;
345
t_List ccTreesLst;
346
347
t_Handle h_FmPcd;
348
uint32_t shadowAction;
349
uint8_t userSizeOfExtraction;
350
uint8_t userOffset;
351
uint8_t kgHashShift; /* used in hash-table */
352
353
t_Handle h_Spinlock;
354
355
t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS];
356
} t_FmPcdCcNode;
357
358
typedef struct
359
{
360
t_FmPcdCcNode *p_FmPcdCcNode;
361
bool occupied;
362
uint16_t owners;
363
volatile bool lock;
364
} t_FmPcdCcNodeArray;
365
366
typedef struct
367
{
368
uint8_t numOfEntriesInGroup;
369
uint32_t totalBitsMask;
370
uint8_t baseGroupEntry;
371
} t_FmPcdCcGroupParam;
372
373
typedef struct
374
{
375
t_Handle h_FmPcd;
376
uint8_t netEnvId;
377
uintptr_t ccTreeBaseAddr;
378
uint8_t numOfGrps;
379
t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS];
380
t_List fmPortsLst;
381
t_FmPcdLock *p_Lock;
382
uint8_t numOfEntries;
383
uint16_t owners;
384
t_Handle h_FmPcdCcSavedManipParams;
385
bool modifiedState;
386
uint32_t requiredAction;
387
t_Handle h_IpReassemblyManip;
388
t_Handle h_CapwapReassemblyManip;
389
390
t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[FM_PCD_MAX_NUM_OF_CC_GROUPS];
391
} t_FmPcdCcTree;
392
393
394
t_Error FmPcdCcNodeTreeTryLock(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_List *p_List);
395
void FmPcdCcNodeTreeReleaseLock(t_Handle h_FmPcd, t_List *p_List);
396
t_Error FmPcdUpdateCcShadow (t_FmPcd *p_FmPcd, uint32_t size, uint32_t align);
397
398
399
#endif /* __FM_CC_H */
400
401