Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/ncsw/inc/flib/fsl_fman_kg.h
48375 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
#ifndef __FSL_FMAN_KG_H
34
#define __FSL_FMAN_KG_H
35
36
#include "common/general.h"
37
38
#define FM_KG_NUM_OF_GENERIC_REGS 8 /**< Num of generic KeyGen regs */
39
#define FMAN_MAX_NUM_OF_HW_PORTS 64
40
/**< Total num of masks allowed on KG extractions */
41
#define FM_KG_EXTRACT_MASKS_NUM 4
42
#define FM_KG_NUM_CLS_PLAN_ENTR 8 /**< Num of class. plan regs */
43
#define FM_KG_CLS_PLAN_GRPS_NUM 32 /**< Max num of class. groups */
44
45
struct fman_kg_regs {
46
uint32_t fmkg_gcr;
47
uint32_t res004;
48
uint32_t res008;
49
uint32_t fmkg_eer;
50
uint32_t fmkg_eeer;
51
uint32_t res014;
52
uint32_t res018;
53
uint32_t fmkg_seer;
54
uint32_t fmkg_seeer;
55
uint32_t fmkg_gsr;
56
uint32_t fmkg_tpc;
57
uint32_t fmkg_serc;
58
uint32_t res030[4];
59
uint32_t fmkg_fdor;
60
uint32_t fmkg_gdv0r;
61
uint32_t fmkg_gdv1r;
62
uint32_t res04c[6];
63
uint32_t fmkg_feer;
64
uint32_t res068[38];
65
uint32_t fmkg_indirect[63];
66
uint32_t fmkg_ar;
67
};
68
69
struct fman_kg_scheme_regs {
70
uint32_t kgse_mode; /**< MODE */
71
uint32_t kgse_ekfc; /**< Extract Known Fields Command */
72
uint32_t kgse_ekdv; /**< Extract Known Default Value */
73
uint32_t kgse_bmch; /**< Bit Mask Command High */
74
uint32_t kgse_bmcl; /**< Bit Mask Command Low */
75
uint32_t kgse_fqb; /**< Frame Queue Base */
76
uint32_t kgse_hc; /**< Hash Command */
77
uint32_t kgse_ppc; /**< Policer Profile Command */
78
uint32_t kgse_gec[FM_KG_NUM_OF_GENERIC_REGS];
79
/**< Generic Extract Command */
80
uint32_t kgse_spc; /**< KeyGen Scheme Entry Statistic Packet Counter */
81
uint32_t kgse_dv0; /**< KeyGen Scheme Entry Default Value 0 */
82
uint32_t kgse_dv1; /**< KeyGen Scheme Entry Default Value 1 */
83
uint32_t kgse_ccbs; /**< KeyGen Scheme Entry Coarse Classification Bit*/
84
uint32_t kgse_mv; /**< KeyGen Scheme Entry Match vector */
85
uint32_t kgse_om; /**< KeyGen Scheme Entry Operation Mode bits */
86
uint32_t kgse_vsp; /**< KeyGen Scheme Entry Virtual Storage Profile */
87
};
88
89
struct fman_kg_pe_regs{
90
uint32_t fmkg_pe_sp;
91
uint32_t fmkg_pe_cpp;
92
};
93
94
struct fman_kg_cp_regs {
95
uint32_t kgcpe[FM_KG_NUM_CLS_PLAN_ENTR];
96
};
97
98
99
#define FM_KG_KGAR_GO 0x80000000
100
#define FM_KG_KGAR_READ 0x40000000
101
#define FM_KG_KGAR_WRITE 0x00000000
102
#define FM_KG_KGAR_SEL_SCHEME_ENTRY 0x00000000
103
#define FM_KG_KGAR_SCM_WSEL_UPDATE_CNT 0x00008000
104
105
#define KG_SCH_PP_SHIFT_HIGH 0x80000000
106
#define KG_SCH_PP_NO_GEN 0x10000000
107
#define KG_SCH_PP_SHIFT_LOW 0x0000F000
108
#define KG_SCH_MODE_NIA_PLCR 0x40000000
109
#define KG_SCH_GEN_EXTRACT_TYPE 0x00008000
110
#define KG_SCH_BITMASK_MASK 0x000000FF
111
#define KG_SCH_GEN_VALID 0x80000000
112
#define KG_SCH_GEN_MASK 0x00FF0000
113
#define FM_PCD_KG_KGAR_ERR 0x20000000
114
#define FM_PCD_KG_KGAR_SEL_CLS_PLAN_ENTRY 0x01000000
115
#define FM_PCD_KG_KGAR_SEL_PORT_ENTRY 0x02000000
116
#define FM_PCD_KG_KGAR_SEL_PORT_WSEL_SP 0x00008000
117
#define FM_PCD_KG_KGAR_SEL_PORT_WSEL_CPP 0x00004000
118
#define FM_PCD_KG_KGAR_WSEL_MASK 0x0000FF00
119
#define KG_SCH_HASH_CONFIG_NO_FQID 0x80000000
120
#define KG_SCH_HASH_CONFIG_SYM 0x40000000
121
122
#define FM_EX_KG_DOUBLE_ECC 0x80000000
123
#define FM_EX_KG_KEYSIZE_OVERFLOW 0x40000000
124
125
/* ECC capture register */
126
#define KG_FMKG_SERC_CAP 0x80000000
127
#define KG_FMKG_SERC_CET 0x40000000
128
#define KG_FMKG_SERC_CNT_MSK 0x00FF0000
129
#define KG_FMKG_SERC_CNT_SHIFT 16
130
#define KG_FMKG_SERC_ADDR_MSK 0x000003FF
131
132
/* Masks */
133
#define FM_KG_KGGCR_EN 0x80000000
134
#define KG_SCH_GEN_VALID 0x80000000
135
#define KG_SCH_GEN_EXTRACT_TYPE 0x00008000
136
#define KG_ERR_TYPE_DOUBLE 0x40000000
137
#define KG_ERR_ADDR_MASK 0x00000FFF
138
#define KG_SCH_MODE_EN 0x80000000
139
140
/* shifts */
141
#define FM_KG_KGAR_NUM_SHIFT 16
142
#define FM_KG_PE_CPP_MASK_SHIFT 16
143
#define FM_KG_KGAR_WSEL_SHIFT 8
144
145
#define FM_KG_SCH_GEN_HT_INVALID 0
146
147
#define FM_KG_MASK_SEL_GEN_BASE 0x20
148
149
#define KG_GET_MASK_SEL_SHIFT(shift, i) \
150
switch (i) \
151
{ \
152
case 0: (shift) = 26; break; \
153
case 1: (shift) = 20; break; \
154
case 2: (shift) = 10; break; \
155
case 3: (shift) = 4; break; \
156
default: (shift) = 0; \
157
}
158
159
#define KG_GET_MASK_OFFSET_SHIFT(shift, i) \
160
switch (i) \
161
{ \
162
case 0: (shift) = 16; break; \
163
case 1: (shift) = 0; break; \
164
case 2: (shift) = 28; break; \
165
case 3: (shift) = 24; break; \
166
default: (shift) = 0; \
167
}
168
169
#define KG_GET_MASK_SHIFT(shift, i) \
170
switch (i) \
171
{ \
172
case 0: shift = 24; break; \
173
case 1: shift = 16; break; \
174
case 2: shift = 8; break; \
175
case 3: shift = 0; break; \
176
default: shift = 0; \
177
}
178
179
/* Port entry CPP register */
180
#define FMAN_KG_PE_CPP_MASK_SHIFT 16
181
182
/* Scheme registers */
183
#define FMAN_KG_SCH_MODE_EN 0x80000000
184
#define FMAN_KG_SCH_MODE_NIA_PLCR 0x40000000
185
#define FMAN_KG_SCH_MODE_CCOBASE_SHIFT 24
186
187
#define FMAN_KG_SCH_DEF_MAC_ADDR_SHIFT 30
188
#define FMAN_KG_SCH_DEF_VLAN_TCI_SHIFT 28
189
#define FMAN_KG_SCH_DEF_ETYPE_SHIFT 26
190
#define FMAN_KG_SCH_DEF_PPP_SID_SHIFT 24
191
#define FMAN_KG_SCH_DEF_PPP_PID_SHIFT 22
192
#define FMAN_KG_SCH_DEF_MPLS_SHIFT 20
193
#define FMAN_KG_SCH_DEF_IP_ADDR_SHIFT 18
194
#define FMAN_KG_SCH_DEF_PTYPE_SHIFT 16
195
#define FMAN_KG_SCH_DEF_IP_TOS_TC_SHIFT 14
196
#define FMAN_KG_SCH_DEF_IPv6_FL_SHIFT 12
197
#define FMAN_KG_SCH_DEF_IPSEC_SPI_SHIFT 10
198
#define FMAN_KG_SCH_DEF_L4_PORT_SHIFT 8
199
#define FMAN_KG_SCH_DEF_TCP_FLG_SHIFT 6
200
201
#define FMAN_KG_SCH_GEN_VALID 0x80000000
202
#define FMAN_KG_SCH_GEN_SIZE_MAX 16
203
#define FMAN_KG_SCH_GEN_OR 0x00008000
204
205
#define FMAN_KG_SCH_GEN_DEF_SHIFT 29
206
#define FMAN_KG_SCH_GEN_SIZE_SHIFT 24
207
#define FMAN_KG_SCH_GEN_MASK_SHIFT 16
208
#define FMAN_KG_SCH_GEN_HT_SHIFT 8
209
210
#define FMAN_KG_SCH_HASH_HSHIFT_SHIFT 24
211
#define FMAN_KG_SCH_HASH_HSHIFT_MAX 0x28
212
#define FMAN_KG_SCH_HASH_SYM 0x40000000
213
#define FMAN_KG_SCH_HASH_NO_FQID_GEN 0x80000000
214
215
#define FMAN_KG_SCH_PP_SH_SHIFT 27
216
#define FMAN_KG_SCH_PP_SL_SHIFT 12
217
#define FMAN_KG_SCH_PP_SH_MASK 0x80000000
218
#define FMAN_KG_SCH_PP_SL_MASK 0x0000F000
219
#define FMAN_KG_SCH_PP_SHIFT_MAX 0x17
220
#define FMAN_KG_SCH_PP_MASK_SHIFT 16
221
#define FMAN_KG_SCH_PP_NO_GEN 0x10000000
222
223
enum fman_kg_gen_extract_src {
224
E_FMAN_KG_GEN_EXTRACT_ETH,
225
E_FMAN_KG_GEN_EXTRACT_ETYPE,
226
E_FMAN_KG_GEN_EXTRACT_SNAP,
227
E_FMAN_KG_GEN_EXTRACT_VLAN_TCI_1,
228
E_FMAN_KG_GEN_EXTRACT_VLAN_TCI_N,
229
E_FMAN_KG_GEN_EXTRACT_PPPoE,
230
E_FMAN_KG_GEN_EXTRACT_MPLS_1,
231
E_FMAN_KG_GEN_EXTRACT_MPLS_2,
232
E_FMAN_KG_GEN_EXTRACT_MPLS_3,
233
E_FMAN_KG_GEN_EXTRACT_MPLS_N,
234
E_FMAN_KG_GEN_EXTRACT_IPv4_1,
235
E_FMAN_KG_GEN_EXTRACT_IPv6_1,
236
E_FMAN_KG_GEN_EXTRACT_IPv4_2,
237
E_FMAN_KG_GEN_EXTRACT_IPv6_2,
238
E_FMAN_KG_GEN_EXTRACT_MINENCAP,
239
E_FMAN_KG_GEN_EXTRACT_IP_PID,
240
E_FMAN_KG_GEN_EXTRACT_GRE,
241
E_FMAN_KG_GEN_EXTRACT_TCP,
242
E_FMAN_KG_GEN_EXTRACT_UDP,
243
E_FMAN_KG_GEN_EXTRACT_SCTP,
244
E_FMAN_KG_GEN_EXTRACT_DCCP,
245
E_FMAN_KG_GEN_EXTRACT_IPSEC_AH,
246
E_FMAN_KG_GEN_EXTRACT_IPSEC_ESP,
247
E_FMAN_KG_GEN_EXTRACT_SHIM_1,
248
E_FMAN_KG_GEN_EXTRACT_SHIM_2,
249
E_FMAN_KG_GEN_EXTRACT_FROM_DFLT,
250
E_FMAN_KG_GEN_EXTRACT_FROM_FRAME_START,
251
E_FMAN_KG_GEN_EXTRACT_FROM_PARSE_RESULT,
252
E_FMAN_KG_GEN_EXTRACT_FROM_END_OF_PARSE,
253
E_FMAN_KG_GEN_EXTRACT_FROM_FQID
254
};
255
256
struct fman_kg_ex_ecc_attr
257
{
258
bool valid;
259
bool double_ecc;
260
uint16_t addr;
261
uint8_t single_ecc_count;
262
};
263
264
enum fman_kg_def_select
265
{
266
E_FMAN_KG_DEF_GLOBAL_0,
267
E_FMAN_KG_DEF_GLOBAL_1,
268
E_FMAN_KG_DEF_SCHEME_0,
269
E_FMAN_KG_DEF_SCHEME_1
270
};
271
272
struct fman_kg_extract_def
273
{
274
enum fman_kg_def_select mac_addr;
275
enum fman_kg_def_select vlan_tci;
276
enum fman_kg_def_select etype;
277
enum fman_kg_def_select ppp_sid;
278
enum fman_kg_def_select ppp_pid;
279
enum fman_kg_def_select mpls;
280
enum fman_kg_def_select ip_addr;
281
enum fman_kg_def_select ptype;
282
enum fman_kg_def_select ip_tos_tc;
283
enum fman_kg_def_select ipv6_fl;
284
enum fman_kg_def_select ipsec_spi;
285
enum fman_kg_def_select l4_port;
286
enum fman_kg_def_select tcp_flg;
287
};
288
289
enum fman_kg_gen_extract_type
290
{
291
E_FMAN_KG_HASH_EXTRACT,
292
E_FMAN_KG_OR_EXTRACT
293
};
294
295
struct fman_kg_gen_extract_params
296
{
297
/* Hash or Or-ed extract */
298
enum fman_kg_gen_extract_type type;
299
enum fman_kg_gen_extract_src src;
300
bool no_validation;
301
/* Extraction offset from the header location specified above */
302
uint8_t offset;
303
/* Size of extraction for FMAN_KG_HASH_EXTRACT,
304
* hash result shift for FMAN_KG_OR_EXTRACT */
305
uint8_t extract;
306
uint8_t mask;
307
/* Default value to use when header specified
308
* by fman_kg_gen_extract_src doesn't present */
309
enum fman_kg_def_select def_val;
310
};
311
312
struct fman_kg_extract_mask
313
{
314
/**< Indication if mask is on known field extraction or
315
* on general extraction; TRUE for known field */
316
bool is_known;
317
/**< One of FMAN_KG_EXTRACT_xxx defines for known fields mask and
318
* generic register index for generic extracts mask */
319
uint32_t field_or_gen_idx;
320
/**< Byte offset from start of the extracted data specified
321
* by field_or_gen_idx */
322
uint8_t offset;
323
/**< Byte mask (selected bits will be used) */
324
uint8_t mask;
325
};
326
327
struct fman_kg_extract_params
328
{
329
/* Or-ed mask of FMAN_KG_EXTRACT_xxx defines */
330
uint32_t known_fields;
331
struct fman_kg_extract_def known_fields_def;
332
/* Number of entries in gen_extract */
333
uint8_t gen_extract_num;
334
struct fman_kg_gen_extract_params gen_extract[FM_KG_NUM_OF_GENERIC_REGS];
335
/* Number of entries in masks */
336
uint8_t masks_num;
337
struct fman_kg_extract_mask masks[FM_KG_EXTRACT_MASKS_NUM];
338
uint32_t def_scheme_0;
339
uint32_t def_scheme_1;
340
};
341
342
struct fman_kg_hash_params
343
{
344
bool use_hash;
345
uint8_t shift_r;
346
uint32_t mask; /**< 24-bit mask */
347
bool sym; /**< Symmetric hash for src and dest pairs */
348
};
349
350
struct fman_kg_pp_params
351
{
352
uint8_t base;
353
uint8_t shift;
354
uint8_t mask;
355
bool bypass_pp_gen;
356
};
357
358
struct fman_kg_cc_params
359
{
360
uint8_t base_offset;
361
uint32_t qlcv_bits_sel;
362
};
363
364
enum fman_pcd_engine
365
{
366
E_FMAN_PCD_INVALID = 0, /**< Invalid PCD engine indicated*/
367
E_FMAN_PCD_DONE, /**< No PCD Engine indicated */
368
E_FMAN_PCD_KG, /**< Keygen indicated */
369
E_FMAN_PCD_CC, /**< Coarse classification indicated */
370
E_FMAN_PCD_PLCR, /**< Policer indicated */
371
E_FMAN_PCD_PRS /**< Parser indicated */
372
};
373
374
struct fman_kg_cls_plan_params
375
{
376
uint8_t entries_mask;
377
uint32_t mask_vector[FM_KG_NUM_CLS_PLAN_ENTR];
378
};
379
380
struct fman_kg_scheme_params
381
{
382
uint32_t match_vector;
383
struct fman_kg_extract_params extract_params;
384
struct fman_kg_hash_params hash_params;
385
uint32_t base_fqid;
386
/* What we do w/features supported per FM version ?? */
387
bool bypass_fqid_gen;
388
struct fman_kg_pp_params policer_params;
389
struct fman_kg_cc_params cc_params;
390
bool update_counter;
391
/**< counter_value: Set scheme counter to the specified value;
392
* relevant only when update_counter = TRUE. */
393
uint32_t counter_value;
394
enum fman_pcd_engine next_engine;
395
/**< Next engine action code */
396
uint32_t next_engine_action;
397
};
398
399
400
401
int fman_kg_write_ar_wait(struct fman_kg_regs *regs, uint32_t fmkg_ar);
402
void fman_kg_write_sp(struct fman_kg_regs *regs, uint32_t sp, bool add);
403
void fman_kg_write_cpp(struct fman_kg_regs *regs, uint32_t cpp);
404
void fman_kg_get_event(struct fman_kg_regs *regs,
405
uint32_t *event,
406
uint32_t *scheme_idx);
407
void fman_kg_init(struct fman_kg_regs *regs,
408
uint32_t exceptions,
409
uint32_t dflt_nia);
410
void fman_kg_enable_scheme_interrupts(struct fman_kg_regs *regs);
411
void fman_kg_enable(struct fman_kg_regs *regs);
412
void fman_kg_disable(struct fman_kg_regs *regs);
413
int fman_kg_write_bind_cls_plans(struct fman_kg_regs *regs,
414
uint8_t hwport_id,
415
uint32_t bind_cls_plans);
416
int fman_kg_build_bind_cls_plans(uint8_t grp_base,
417
uint8_t grp_mask,
418
uint32_t *bind_cls_plans);
419
int fman_kg_write_bind_schemes(struct fman_kg_regs *regs,
420
uint8_t hwport_id,
421
uint32_t schemes);
422
int fman_kg_write_cls_plan(struct fman_kg_regs *regs,
423
uint8_t grp_id,
424
uint8_t entries_mask,
425
uint8_t hwport_id,
426
struct fman_kg_cp_regs *cls_plan_regs);
427
int fman_kg_build_cls_plan(struct fman_kg_cls_plan_params *params,
428
struct fman_kg_cp_regs *cls_plan_regs);
429
uint32_t fman_kg_get_schemes_total_counter(struct fman_kg_regs *regs);
430
int fman_kg_set_scheme_counter(struct fman_kg_regs *regs,
431
uint8_t scheme_id,
432
uint8_t hwport_id,
433
uint32_t counter);
434
int fman_kg_get_scheme_counter(struct fman_kg_regs *regs,
435
uint8_t scheme_id,
436
uint8_t hwport_id,
437
uint32_t *counter);
438
int fman_kg_delete_scheme(struct fman_kg_regs *regs,
439
uint8_t scheme_id,
440
uint8_t hwport_id);
441
int fman_kg_write_scheme(struct fman_kg_regs *regs,
442
uint8_t scheme_id,
443
uint8_t hwport_id,
444
struct fman_kg_scheme_regs *scheme_regs,
445
bool update_counter);
446
int fman_kg_build_scheme(struct fman_kg_scheme_params *params,
447
struct fman_kg_scheme_regs *scheme_regs);
448
void fman_kg_get_capture(struct fman_kg_regs *regs,
449
struct fman_kg_ex_ecc_attr *ecc_attr,
450
bool clear);
451
void fman_kg_get_exception(struct fman_kg_regs *regs,
452
uint32_t *events,
453
uint32_t *scheme_ids,
454
bool clear);
455
void fman_kg_set_exception(struct fman_kg_regs *regs,
456
uint32_t exception,
457
bool enable);
458
void fman_kg_set_dflt_val(struct fman_kg_regs *regs,
459
uint8_t def_id,
460
uint32_t val);
461
void fman_kg_set_data_after_prs(struct fman_kg_regs *regs, uint8_t offset);
462
463
464
465
/**************************************************************************//**
466
@Description NIA Description
467
*//***************************************************************************/
468
#define KG_NIA_ORDER_RESTOR 0x00800000
469
#define KG_NIA_ENG_FM_CTL 0x00000000
470
#define KG_NIA_ENG_PRS 0x00440000
471
#define KG_NIA_ENG_KG 0x00480000
472
#define KG_NIA_ENG_PLCR 0x004C0000
473
#define KG_NIA_ENG_BMI 0x00500000
474
#define KG_NIA_ENG_QMI_ENQ 0x00540000
475
#define KG_NIA_ENG_QMI_DEQ 0x00580000
476
#define KG_NIA_ENG_MASK 0x007C0000
477
478
#define KG_NIA_AC_MASK 0x0003FFFF
479
480
#define KG_NIA_INVALID 0xFFFFFFFF
481
482
static __inline__ uint32_t fm_kg_build_nia(enum fman_pcd_engine next_engine,
483
uint32_t next_engine_action)
484
{
485
uint32_t nia;
486
487
if (next_engine_action & ~KG_NIA_AC_MASK)
488
return KG_NIA_INVALID;
489
490
switch (next_engine) {
491
case E_FMAN_PCD_DONE:
492
nia = KG_NIA_ENG_BMI | next_engine_action;
493
break;
494
495
case E_FMAN_PCD_KG:
496
nia = KG_NIA_ENG_KG | next_engine_action;
497
break;
498
499
case E_FMAN_PCD_CC:
500
nia = KG_NIA_ENG_FM_CTL | next_engine_action;
501
break;
502
503
case E_FMAN_PCD_PLCR:
504
nia = KG_NIA_ENG_PLCR | next_engine_action;
505
break;
506
507
default:
508
nia = KG_NIA_INVALID;
509
}
510
511
return nia;
512
}
513
514
#endif /* __FSL_FMAN_KG_H */
515
516