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