Lines Matching +full:mi +full:- +full:v
1 // SPDX-License-Identifier: GPL-2.0
8 rt->gpr[ICE_GPR_TSR_IDX] = tsr; in ice_rt_tsr_set()
13 rt->gpr[ICE_GPR_HO_IDX] = ho; in ice_rt_ho_set()
14 memcpy(&rt->gpr[ICE_GPR_HV_IDX], &rt->pkt_buf[ho], ICE_GPR_HV_SIZE); in ice_rt_ho_set()
19 rt->gpr[ICE_GPR_NP_IDX] = pc; in ice_rt_np_set()
24 rt->gpr[ICE_GPR_NN_IDX] = node; in ice_rt_nn_set()
30 struct ice_hw *hw = rt->psr->hw; in ice_rt_flag_set()
37 rt->gpr[ICE_GPR_FLG_IDX + word] |= (u16)BIT(id); in ice_rt_flag_set()
40 rt->gpr[ICE_GPR_FLG_IDX + word] &= ~(u16)BIT(id); in ice_rt_flag_set()
47 struct ice_hw *hw = rt->psr->hw; in ice_rt_gpr_set()
52 rt->gpr[idx] = val; in ice_rt_gpr_set()
59 struct ice_hw *hw = rt->psr->hw; in ice_rt_err_set()
62 rt->gpr[ICE_GPR_ERR_IDX] |= (u16)BIT(idx); in ice_rt_err_set()
65 rt->gpr[ICE_GPR_ERR_IDX] &= ~(u16)BIT(idx); in ice_rt_err_set()
71 * ice_parser_rt_reset - reset the parser runtime
76 struct ice_parser *psr = rt->psr; in ice_parser_rt_reset()
77 struct ice_metainit_item *mi; in ice_parser_rt_reset() local
80 mi = &psr->mi_table[0]; in ice_parser_rt_reset()
83 rt->psr = psr; in ice_parser_rt_reset()
85 ice_rt_tsr_set(rt, mi->tsr); in ice_parser_rt_reset()
86 ice_rt_ho_set(rt, mi->ho); in ice_parser_rt_reset()
87 ice_rt_np_set(rt, mi->pc); in ice_parser_rt_reset()
88 ice_rt_nn_set(rt, mi->pg_rn); in ice_parser_rt_reset()
91 if (mi->flags & BIT(i)) in ice_parser_rt_reset()
97 * ice_parser_rt_pktbuf_set - set a packet into parser runtime
106 u16 ho = rt->gpr[ICE_GPR_HO_IDX]; in ice_parser_rt_pktbuf_set()
108 memcpy(rt->pkt_buf, pkt_buf, len); in ice_parser_rt_pktbuf_set()
109 rt->pkt_len = pkt_len; in ice_parser_rt_pktbuf_set()
111 memcpy(&rt->gpr[ICE_GPR_HV_IDX], &rt->pkt_buf[ho], ICE_GPR_HV_SIZE); in ice_parser_rt_pktbuf_set()
117 u8 tsr = (u8)rt->gpr[ICE_GPR_TSR_IDX]; in ice_bst_key_init()
118 u16 ho = rt->gpr[ICE_GPR_HO_IDX]; in ice_bst_key_init()
119 u8 *key = rt->bst_key; in ice_bst_key_init()
122 idd = ICE_BST_TCAM_KEY_SIZE - 1; in ice_bst_key_init()
123 if (imem->b_kb.tsr_ctrl) in ice_bst_key_init()
126 key[idd] = imem->b_kb.prio; in ice_bst_key_init()
128 idd = ICE_BST_TCAM_KEY_SIZE - 2; in ice_bst_key_init()
129 for (i = idd; i >= 0; i--) { in ice_bst_key_init()
132 j = ho + idd - i; in ice_bst_key_init()
134 key[i] = rt->pkt_buf[j]; in ice_bst_key_init()
139 ice_debug_array_w_prefix(rt->psr->hw, ICE_DBG_PARSER, in ice_bst_key_init()
144 static u16 ice_bit_rev_u16(u16 v, int len) in ice_bit_rev_u16() argument
146 return bitrev16(v) >> (BITS_PER_TYPE(v) - len); in ice_bit_rev_u16()
149 static u32 ice_bit_rev_u32(u32 v, int len) in ice_bit_rev_u32() argument
151 return bitrev32(v) >> (BITS_PER_TYPE(v) - len); in ice_bit_rev_u32()
162 memcpy(buf, &rt->gpr[offset], sizeof(buf)); in ice_hv_bit_sel()
176 if (kb->opc == ICE_NPKB_OPC_EXTRACT) in ice_pk_build()
177 return ice_hv_bit_sel(rt, kb->start_reg0, kb->len_reg1); in ice_pk_build()
178 else if (kb->opc == ICE_NPKB_OPC_BUILD) in ice_pk_build()
179 return rt->gpr[kb->start_reg0] | in ice_pk_build()
180 ((u32)rt->gpr[kb->len_reg1] << BITS_PER_TYPE(u16)); in ice_pk_build()
181 else if (kb->opc == ICE_NPKB_OPC_BYPASS) in ice_pk_build()
184 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Unsupported OP Code %u\n", in ice_pk_build()
185 kb->opc); in ice_pk_build()
194 return !!(rt->gpr[ICE_GPR_FLG_IDX + word] & (u16)BIT(id)); in ice_flag_get()
200 memset(&rt->pg_key, 0, sizeof(rt->pg_key)); in ice_imem_pgk_init()
201 rt->pg_key.next_proto = ice_pk_build(rt, &imem->np_kb); in ice_imem_pgk_init()
202 if (rt->pg_key.next_proto == U32_MAX) in ice_imem_pgk_init()
203 return -EINVAL; in ice_imem_pgk_init()
205 if (imem->pg_kb.flag0_ena) in ice_imem_pgk_init()
206 rt->pg_key.flag0 = ice_flag_get(rt, imem->pg_kb.flag0_idx); in ice_imem_pgk_init()
207 if (imem->pg_kb.flag1_ena) in ice_imem_pgk_init()
208 rt->pg_key.flag1 = ice_flag_get(rt, imem->pg_kb.flag1_idx); in ice_imem_pgk_init()
209 if (imem->pg_kb.flag2_ena) in ice_imem_pgk_init()
210 rt->pg_key.flag2 = ice_flag_get(rt, imem->pg_kb.flag2_idx); in ice_imem_pgk_init()
211 if (imem->pg_kb.flag3_ena) in ice_imem_pgk_init()
212 rt->pg_key.flag3 = ice_flag_get(rt, imem->pg_kb.flag3_idx); in ice_imem_pgk_init()
214 rt->pg_key.alu_reg = rt->gpr[imem->pg_kb.alu_reg_idx]; in ice_imem_pgk_init()
215 rt->pg_key.node_id = rt->gpr[ICE_GPR_NN_IDX]; in ice_imem_pgk_init()
217 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Generate Parse Graph Key: node_id(%d), flag0-3(%d,%d,%d,%d… in ice_imem_pgk_init()
218 rt->pg_key.node_id, in ice_imem_pgk_init()
219 rt->pg_key.flag0, in ice_imem_pgk_init()
220 rt->pg_key.flag1, in ice_imem_pgk_init()
221 rt->pg_key.flag2, in ice_imem_pgk_init()
222 rt->pg_key.flag3, in ice_imem_pgk_init()
223 rt->pg_key.boost_idx, in ice_imem_pgk_init()
224 rt->pg_key.alu_reg, in ice_imem_pgk_init()
225 rt->pg_key.next_proto); in ice_imem_pgk_init()
233 rt->alu0 = &imem->alu0; in ice_imem_alu0_set()
234 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU0 from imem pc %d\n", in ice_imem_alu0_set()
235 imem->idx); in ice_imem_alu0_set()
241 rt->alu1 = &imem->alu1; in ice_imem_alu1_set()
242 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU1 from imem pc %d\n", in ice_imem_alu1_set()
243 imem->idx); in ice_imem_alu1_set()
249 rt->alu2 = &imem->alu2; in ice_imem_alu2_set()
250 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU2 from imem pc %d\n", in ice_imem_alu2_set()
251 imem->idx); in ice_imem_alu2_set()
257 rt->pg_prio = imem->pg_prio; in ice_imem_pgp_set()
258 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load PG priority %d from imem pc %d\n", in ice_imem_pgp_set()
259 rt->pg_prio, imem->idx); in ice_imem_pgp_set()
265 memset(&rt->pg_key, 0, sizeof(rt->pg_key)); in ice_bst_pgk_init()
266 rt->pg_key.boost_idx = bst->hit_idx_grp; in ice_bst_pgk_init()
267 rt->pg_key.next_proto = ice_pk_build(rt, &bst->np_kb); in ice_bst_pgk_init()
268 if (rt->pg_key.next_proto == U32_MAX) in ice_bst_pgk_init()
269 return -EINVAL; in ice_bst_pgk_init()
271 if (bst->pg_kb.flag0_ena) in ice_bst_pgk_init()
272 rt->pg_key.flag0 = ice_flag_get(rt, bst->pg_kb.flag0_idx); in ice_bst_pgk_init()
273 if (bst->pg_kb.flag1_ena) in ice_bst_pgk_init()
274 rt->pg_key.flag1 = ice_flag_get(rt, bst->pg_kb.flag1_idx); in ice_bst_pgk_init()
275 if (bst->pg_kb.flag2_ena) in ice_bst_pgk_init()
276 rt->pg_key.flag2 = ice_flag_get(rt, bst->pg_kb.flag2_idx); in ice_bst_pgk_init()
277 if (bst->pg_kb.flag3_ena) in ice_bst_pgk_init()
278 rt->pg_key.flag3 = ice_flag_get(rt, bst->pg_kb.flag3_idx); in ice_bst_pgk_init()
280 rt->pg_key.alu_reg = rt->gpr[bst->pg_kb.alu_reg_idx]; in ice_bst_pgk_init()
281 rt->pg_key.node_id = rt->gpr[ICE_GPR_NN_IDX]; in ice_bst_pgk_init()
283 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Generate Parse Graph Key: node_id(%d), flag0-3(%d,%d,%d,%d… in ice_bst_pgk_init()
284 rt->pg_key.node_id, in ice_bst_pgk_init()
285 rt->pg_key.flag0, in ice_bst_pgk_init()
286 rt->pg_key.flag1, in ice_bst_pgk_init()
287 rt->pg_key.flag2, in ice_bst_pgk_init()
288 rt->pg_key.flag3, in ice_bst_pgk_init()
289 rt->pg_key.boost_idx, in ice_bst_pgk_init()
290 rt->pg_key.alu_reg, in ice_bst_pgk_init()
291 rt->pg_key.next_proto); in ice_bst_pgk_init()
299 rt->alu0 = &bst->alu0; in ice_bst_alu0_set()
300 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU0 from boost address %d\n", in ice_bst_alu0_set()
301 bst->addr); in ice_bst_alu0_set()
307 rt->alu1 = &bst->alu1; in ice_bst_alu1_set()
308 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU1 from boost address %d\n", in ice_bst_alu1_set()
309 bst->addr); in ice_bst_alu1_set()
315 rt->alu2 = &bst->alu2; in ice_bst_alu2_set()
316 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load ALU2 from boost address %d\n", in ice_bst_alu2_set()
317 bst->addr); in ice_bst_alu2_set()
323 rt->pg_prio = bst->pg_prio; in ice_bst_pgp_set()
324 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load PG priority %d from boost address %d\n", in ice_bst_pgp_set()
325 rt->pg_prio, bst->addr); in ice_bst_pgp_set()
330 struct ice_parser *psr = rt->psr; in ice_rt_pg_cam_match()
333 item = ice_pg_cam_match(psr->pg_cam_table, ICE_PG_CAM_TABLE_SIZE, in ice_rt_pg_cam_match()
334 &rt->pg_key); in ice_rt_pg_cam_match()
336 item = ice_pg_cam_match(psr->pg_sp_cam_table, in ice_rt_pg_cam_match()
337 ICE_PG_SP_CAM_TABLE_SIZE, &rt->pg_key); in ice_rt_pg_cam_match()
344 struct ice_parser *psr = rt->psr; in ice_rt_pg_nm_cam_match()
347 item = ice_pg_nm_cam_match(psr->pg_nm_cam_table, in ice_rt_pg_nm_cam_match()
348 ICE_PG_NM_CAM_TABLE_SIZE, &rt->pg_key); in ice_rt_pg_nm_cam_match()
351 item = ice_pg_nm_cam_match(psr->pg_nm_sp_cam_table, in ice_rt_pg_nm_cam_match()
353 &rt->pg_key); in ice_rt_pg_nm_cam_match()
359 rt->pu.gpr_val_upd[idx] = true; in ice_gpr_add()
360 rt->pu.gpr_val[idx] = val; in ice_gpr_add()
362 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Pending update for register %d value %d\n", in ice_gpr_add()
368 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ParseGraph action ...\n"); in ice_pg_exe()
370 ice_gpr_add(rt, ICE_GPR_NP_IDX, rt->action->next_pc); in ice_pg_exe()
371 ice_gpr_add(rt, ICE_GPR_NN_IDX, rt->action->next_node); in ice_pg_exe()
373 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ParseGraph action done.\n"); in ice_pg_exe()
378 rt->pu.flg_msk |= BIT_ULL(idx); in ice_flg_add()
380 rt->pu.flg_val |= BIT_ULL(idx); in ice_flg_add()
382 rt->pu.flg_val &= ~BIT_ULL(idx); in ice_flg_add()
384 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Pending update for flag %d value %d\n", in ice_flg_add()
393 if (!alu->dedicate_flags_ena) in ice_flg_update()
396 if (alu->flags_extr_imm) { in ice_flg_update()
397 for (i = 0; i < alu->dst_len; i++) in ice_flg_update()
398 ice_flg_add(rt, alu->dst_start + i, in ice_flg_update()
399 !!(alu->flags_start_imm & BIT(i))); in ice_flg_update()
401 for (i = 0; i < alu->dst_len; i++) { in ice_flg_update()
403 alu->flags_start_imm + i, in ice_flg_update()
405 ice_flg_add(rt, alu->dst_start + i, !!hv_bit_sel); in ice_flg_update()
412 if (alu->proto_offset_opc == ICE_PO_OFF_HDR_ADD) in ice_po_update()
413 rt->po = (u16)(rt->gpr[ICE_GPR_HO_IDX] + alu->proto_offset); in ice_po_update()
414 else if (alu->proto_offset_opc == ICE_PO_OFF_HDR_SUB) in ice_po_update()
415 rt->po = (u16)(rt->gpr[ICE_GPR_HO_IDX] - alu->proto_offset); in ice_po_update()
416 else if (alu->proto_offset_opc == ICE_PO_OFF_REMAIN) in ice_po_update()
417 rt->po = rt->gpr[ICE_GPR_HO_IDX]; in ice_po_update()
419 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Update Protocol Offset = %d\n", in ice_po_update()
420 rt->po); in ice_po_update()
431 memcpy(&val, &rt->gpr[offset], sizeof(val)); in ice_reg_bit_sel()
441 rt->pu.err_msk |= (u16)BIT(idx); in ice_err_add()
443 rt->pu.flg_val |= (u64)BIT_ULL(idx); in ice_err_add()
445 rt->pu.flg_val &= ~(u64)BIT_ULL(idx); in ice_err_add()
447 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Pending update for error %d value %d\n", in ice_err_add()
456 if (alu->dedicate_flags_ena) { in ice_dst_reg_bit_set()
457 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "DedicatedFlagsEnable should not be enabled in opcode %d\n", in ice_dst_reg_bit_set()
458 alu->opc); in ice_dst_reg_bit_set()
462 if (alu->dst_reg_id == ICE_GPR_ERR_IDX) { in ice_dst_reg_bit_set()
463 if (alu->dst_start >= ICE_PARSER_ERR_NUM) { in ice_dst_reg_bit_set()
464 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Invalid error %d\n", in ice_dst_reg_bit_set()
465 alu->dst_start); in ice_dst_reg_bit_set()
468 ice_err_add(rt, alu->dst_start, val); in ice_dst_reg_bit_set()
469 } else if (alu->dst_reg_id >= ICE_GPR_FLG_IDX) { in ice_dst_reg_bit_set()
470 flg_idx = (u16)(((alu->dst_reg_id - ICE_GPR_FLG_IDX) << 4) + in ice_dst_reg_bit_set()
471 alu->dst_start); in ice_dst_reg_bit_set()
474 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Invalid flag %d\n", in ice_dst_reg_bit_set()
480 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Unexpected Dest Register Bit set, RegisterID %d Start %d\n… in ice_dst_reg_bit_set()
481 alu->dst_reg_id, alu->dst_start); in ice_dst_reg_bit_set()
489 if (alu->shift_xlate_sel) { in ice_alu_exe()
490 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "shift_xlate_sel != 0 is not expected\n"); in ice_alu_exe()
497 dst = rt->gpr[alu->dst_reg_id]; in ice_alu_exe()
498 src = ice_reg_bit_sel(rt, alu->src_reg_id, in ice_alu_exe()
499 alu->src_start, alu->src_len); in ice_alu_exe()
500 shift = alu->shift_xlate_key; in ice_alu_exe()
501 imm = alu->imm; in ice_alu_exe()
503 switch (alu->opc) { in ice_alu_exe()
508 ice_gpr_add(rt, alu->dst_reg_id, dst); in ice_alu_exe()
512 ice_gpr_add(rt, alu->dst_reg_id, dst); in ice_alu_exe()
517 ice_gpr_add(rt, ICE_GPR_NP_IDX, alu->branch_addr); in ice_alu_exe()
522 ice_gpr_add(rt, ICE_GPR_NP_IDX, alu->branch_addr); in ice_alu_exe()
526 ice_gpr_add(rt, ICE_GPR_NP_IDX, alu->branch_addr); in ice_alu_exe()
530 ice_gpr_add(rt, alu->dst_reg_id, dst); in ice_alu_exe()
533 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Unsupported ALU instruction %d\n", in ice_alu_exe()
534 alu->opc); in ice_alu_exe()
541 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU0 ...\n"); in ice_alu0_exe()
542 ice_alu_exe(rt, rt->alu0); in ice_alu0_exe()
543 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU0 done.\n"); in ice_alu0_exe()
548 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU1 ...\n"); in ice_alu1_exe()
549 ice_alu_exe(rt, rt->alu1); in ice_alu1_exe()
550 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU1 done.\n"); in ice_alu1_exe()
555 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU2 ...\n"); in ice_alu2_exe()
556 ice_alu_exe(rt, rt->alu2); in ice_alu2_exe()
557 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Executing ALU2 done.\n"); in ice_alu2_exe()
562 struct ice_gpr_pu *pu = &rt->pu; in ice_pu_exe()
565 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Updating Registers ...\n"); in ice_pu_exe()
568 if (pu->gpr_val_upd[i]) in ice_pu_exe()
569 ice_rt_gpr_set(rt, i, pu->gpr_val[i]); in ice_pu_exe()
573 if (pu->flg_msk & BIT(i)) in ice_pu_exe()
574 ice_rt_flag_set(rt, i, pu->flg_val & BIT(i)); in ice_pu_exe()
578 if (pu->err_msk & BIT(i)) in ice_pu_exe()
579 ice_rt_err_set(rt, i, pu->err_val & BIT(i)); in ice_pu_exe()
582 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Updating Registers done.\n"); in ice_pu_exe()
587 memset(&rt->pu, 0, sizeof(rt->pu)); in ice_alu_pg_exe()
589 switch (rt->pg_prio) { in ice_alu_pg_exe()
618 if (rt->action->ho_inc == 0) in ice_alu_pg_exe()
621 if (rt->action->ho_polarity) in ice_alu_pg_exe()
622 ice_rt_ho_set(rt, rt->gpr[ICE_GPR_HO_IDX] + rt->action->ho_inc); in ice_alu_pg_exe()
624 ice_rt_ho_set(rt, rt->gpr[ICE_GPR_HO_IDX] - rt->action->ho_inc); in ice_alu_pg_exe()
629 struct ice_parser *psr = rt->psr; in ice_proto_off_update()
631 if (rt->action->is_pg) { in ice_proto_off_update()
633 &psr->proto_grp_table[rt->action->proto_id]; in ice_proto_off_update()
638 struct ice_proto_off *entry = &proto_grp->po[i]; in ice_proto_off_update()
640 if (entry->proto_id == U8_MAX) in ice_proto_off_update()
643 if (!entry->polarity) in ice_proto_off_update()
644 po = rt->po + entry->offset; in ice_proto_off_update()
646 po = rt->po - entry->offset; in ice_proto_off_update()
648 rt->protocols[entry->proto_id] = true; in ice_proto_off_update()
649 rt->offsets[entry->proto_id] = po; in ice_proto_off_update()
651 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Set Protocol %d at offset %d\n", in ice_proto_off_update()
652 entry->proto_id, po); in ice_proto_off_update()
655 rt->protocols[rt->action->proto_id] = true; in ice_proto_off_update()
656 rt->offsets[rt->action->proto_id] = rt->po; in ice_proto_off_update()
658 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Set Protocol %d at offset %d\n", in ice_proto_off_update()
659 rt->action->proto_id, rt->po); in ice_proto_off_update()
668 rt->markers[byte] |= (u8)BIT(bit); in ice_marker_set()
673 struct ice_parser *psr = rt->psr; in ice_marker_update()
675 if (rt->action->is_mg) { in ice_marker_update()
677 &psr->mk_grp_table[rt->action->marker_id]; in ice_marker_update()
681 u8 marker = mk_grp->markers[i]; in ice_marker_update()
687 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Set Marker %d\n", in ice_marker_update()
691 if (rt->action->marker_id != ICE_MARKER_MAX_SIZE) in ice_marker_update()
692 ice_marker_set(rt, rt->action->marker_id); in ice_marker_update()
694 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Set Marker %d\n", in ice_marker_update()
695 rt->action->marker_id); in ice_marker_update()
702 struct ice_parser *psr = rt->psr; in ice_ptype_resolve()
704 item = ice_ptype_mk_tcam_match(psr->ptype_mk_tcam_table, in ice_ptype_resolve()
705 rt->markers, ICE_MARKER_ID_SIZE); in ice_ptype_resolve()
707 return item->ptype; in ice_ptype_resolve()
709 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Could not resolve PTYPE\n"); in ice_ptype_resolve()
718 for (i = 0; i < ICE_PO_PAIR_SIZE - 1; i++) { in ice_proto_off_resolve()
719 if (rt->protocols[i]) { in ice_proto_off_resolve()
720 rslt->po[rslt->po_num].proto_id = (u8)i; in ice_proto_off_resolve()
721 rslt->po[rslt->po_num].offset = rt->offsets[i]; in ice_proto_off_resolve()
722 rslt->po_num++; in ice_proto_off_resolve()
730 struct ice_parser *psr = rt->psr; in ice_result_resolve()
734 memcpy(&rslt->flags_psr, &rt->gpr[ICE_GPR_FLG_IDX], in ice_result_resolve()
736 rslt->flags_pkt = ice_flg_redirect(psr->flg_rd_table, rslt->flags_psr); in ice_result_resolve()
737 rslt->flags_sw = ice_xlt_kb_flag_get(psr->xlt_kb_sw, rslt->flags_pkt); in ice_result_resolve()
738 rslt->flags_fd = ice_xlt_kb_flag_get(psr->xlt_kb_fd, rslt->flags_pkt); in ice_result_resolve()
739 rslt->flags_rss = ice_xlt_kb_flag_get(psr->xlt_kb_rss, rslt->flags_pkt); in ice_result_resolve()
742 rslt->ptype = ice_ptype_resolve(rt); in ice_result_resolve()
746 * ice_parser_rt_execute - parser execution routine
756 struct ice_parser *psr = rt->psr; in ice_parser_rt_execute()
762 node = rt->gpr[ICE_GPR_NN_IDX]; in ice_parser_rt_execute()
763 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Start with Node: %u\n", node); in ice_parser_rt_execute()
769 pc = rt->gpr[ICE_GPR_NP_IDX]; in ice_parser_rt_execute()
770 imem = &psr->imem_table[pc]; in ice_parser_rt_execute()
771 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load imem at pc: %u\n", in ice_parser_rt_execute()
775 bst = ice_bst_tcam_match(psr->bst_tcam_table, rt->bst_key); in ice_parser_rt_execute()
777 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "No Boost TCAM Match\n"); in ice_parser_rt_execute()
786 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Boost TCAM Match address: %u\n", in ice_parser_rt_execute()
787 bst->addr); in ice_parser_rt_execute()
788 if (imem->b_m.pg) { in ice_parser_rt_execute()
800 if (imem->b_m.alu0) in ice_parser_rt_execute()
805 if (imem->b_m.alu1) in ice_parser_rt_execute()
810 if (imem->b_m.alu2) in ice_parser_rt_execute()
816 rt->action = NULL; in ice_parser_rt_execute()
821 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Match ParseGraph Nomatch CAM Address %u\n", in ice_parser_rt_execute()
822 pg_nm_cam->idx); in ice_parser_rt_execute()
823 rt->action = &pg_nm_cam->action; in ice_parser_rt_execute()
826 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Match ParseGraph CAM Address %u\n", in ice_parser_rt_execute()
827 pg_cam->idx); in ice_parser_rt_execute()
828 rt->action = &pg_cam->action; in ice_parser_rt_execute()
831 if (!rt->action) { in ice_parser_rt_execute()
832 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Failed to match ParseGraph CAM, stop parsing.\n"); in ice_parser_rt_execute()
833 status = -EINVAL; in ice_parser_rt_execute()
841 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Go to node %u\n", in ice_parser_rt_execute()
842 rt->action->next_node); in ice_parser_rt_execute()
844 if (rt->action->is_last_round) { in ice_parser_rt_execute()
845 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Last Round in ParseGraph Action, stop parsing.\n"); in ice_parser_rt_execute()
849 if (rt->gpr[ICE_GPR_HO_IDX] >= rt->pkt_len) { in ice_parser_rt_execute()
850 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Header Offset (%u) is larger than packet len (%u), stop pa… in ice_parser_rt_execute()
851 rt->gpr[ICE_GPR_HO_IDX], rt->pkt_len); in ice_parser_rt_execute()