Lines Matching full:rt
6 static void ice_rt_tsr_set(struct ice_parser_rt *rt, u16 tsr) in ice_rt_tsr_set() argument
8 rt->gpr[ICE_GPR_TSR_IDX] = tsr; in ice_rt_tsr_set()
11 static void ice_rt_ho_set(struct ice_parser_rt *rt, u16 ho) in ice_rt_ho_set() argument
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()
17 static void ice_rt_np_set(struct ice_parser_rt *rt, u16 pc) in ice_rt_np_set() argument
19 rt->gpr[ICE_GPR_NP_IDX] = pc; in ice_rt_np_set()
22 static void ice_rt_nn_set(struct ice_parser_rt *rt, u16 node) in ice_rt_nn_set() argument
24 rt->gpr[ICE_GPR_NN_IDX] = node; in ice_rt_nn_set()
28 ice_rt_flag_set(struct ice_parser_rt *rt, unsigned int idx, bool set) in ice_rt_flag_set() argument
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()
45 static void ice_rt_gpr_set(struct ice_parser_rt *rt, int idx, u16 val) in ice_rt_gpr_set() argument
47 struct ice_hw *hw = rt->psr->hw; in ice_rt_gpr_set()
50 ice_rt_ho_set(rt, val); in ice_rt_gpr_set()
52 rt->gpr[idx] = val; in ice_rt_gpr_set()
57 static void ice_rt_err_set(struct ice_parser_rt *rt, unsigned int idx, bool set) in ice_rt_err_set() argument
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()
72 * @rt: pointer to the parser runtime
74 void ice_parser_rt_reset(struct ice_parser_rt *rt) in ice_parser_rt_reset() argument
76 struct ice_parser *psr = rt->psr; in ice_parser_rt_reset()
82 memset(rt, 0, sizeof(*rt)); 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()
92 ice_rt_flag_set(rt, i, true); in ice_parser_rt_reset()
98 * @rt: pointer to the parser runtime
102 void ice_parser_rt_pktbuf_set(struct ice_parser_rt *rt, const u8 *pkt_buf, in ice_parser_rt_pktbuf_set() argument
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()
114 static void ice_bst_key_init(struct ice_parser_rt *rt, in ice_bst_key_init() argument
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()
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()
154 static u32 ice_hv_bit_sel(struct ice_parser_rt *rt, int start, int len) in ice_hv_bit_sel() argument
162 memcpy(buf, &rt->gpr[offset], sizeof(buf)); in ice_hv_bit_sel()
173 static u32 ice_pk_build(struct ice_parser_rt *rt, in ice_pk_build() argument
177 return ice_hv_bit_sel(rt, kb->start_reg0, kb->len_reg1); 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()
184 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Unsupported OP Code %u\n", in ice_pk_build()
189 static bool ice_flag_get(struct ice_parser_rt *rt, unsigned int index) in ice_flag_get() argument
194 return !!(rt->gpr[ICE_GPR_FLG_IDX + word] & (u16)BIT(id)); in ice_flag_get()
197 static int ice_imem_pgk_init(struct ice_parser_rt *rt, in ice_imem_pgk_init() argument
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()
206 rt->pg_key.flag0 = ice_flag_get(rt, imem->pg_kb.flag0_idx); in ice_imem_pgk_init()
208 rt->pg_key.flag1 = ice_flag_get(rt, imem->pg_kb.flag1_idx); in ice_imem_pgk_init()
210 rt->pg_key.flag2 = ice_flag_get(rt, imem->pg_kb.flag2_idx); 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()
230 static void ice_imem_alu0_set(struct ice_parser_rt *rt, in ice_imem_alu0_set() argument
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()
238 static void ice_imem_alu1_set(struct ice_parser_rt *rt, in ice_imem_alu1_set() argument
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()
246 static void ice_imem_alu2_set(struct ice_parser_rt *rt, in ice_imem_alu2_set() argument
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()
254 static void ice_imem_pgp_set(struct ice_parser_rt *rt, in ice_imem_pgp_set() argument
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()
262 static int ice_bst_pgk_init(struct ice_parser_rt *rt, in ice_bst_pgk_init() argument
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()
272 rt->pg_key.flag0 = ice_flag_get(rt, bst->pg_kb.flag0_idx); in ice_bst_pgk_init()
274 rt->pg_key.flag1 = ice_flag_get(rt, bst->pg_kb.flag1_idx); in ice_bst_pgk_init()
276 rt->pg_key.flag2 = ice_flag_get(rt, bst->pg_kb.flag2_idx); 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()
296 static void ice_bst_alu0_set(struct ice_parser_rt *rt, in ice_bst_alu0_set() argument
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()
304 static void ice_bst_alu1_set(struct ice_parser_rt *rt, in ice_bst_alu1_set() argument
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()
312 static void ice_bst_alu2_set(struct ice_parser_rt *rt, in ice_bst_alu2_set() argument
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()
320 static void ice_bst_pgp_set(struct ice_parser_rt *rt, in ice_bst_pgp_set() argument
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()
328 static struct ice_pg_cam_item *ice_rt_pg_cam_match(struct ice_parser_rt *rt) in ice_rt_pg_cam_match() argument
330 struct ice_parser *psr = rt->psr; in ice_rt_pg_cam_match()
334 &rt->pg_key); in ice_rt_pg_cam_match()
337 ICE_PG_SP_CAM_TABLE_SIZE, &rt->pg_key); in ice_rt_pg_cam_match()
342 struct ice_pg_nm_cam_item *ice_rt_pg_nm_cam_match(struct ice_parser_rt *rt) in ice_rt_pg_nm_cam_match() argument
344 struct ice_parser *psr = rt->psr; in ice_rt_pg_nm_cam_match()
348 ICE_PG_NM_CAM_TABLE_SIZE, &rt->pg_key); in ice_rt_pg_nm_cam_match()
353 &rt->pg_key); in ice_rt_pg_nm_cam_match()
357 static void ice_gpr_add(struct ice_parser_rt *rt, int idx, u16 val) in ice_gpr_add() argument
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()
366 static void ice_pg_exe(struct ice_parser_rt *rt) in ice_pg_exe() argument
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()
376 static void ice_flg_add(struct ice_parser_rt *rt, int idx, bool val) in ice_flg_add() argument
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()
388 static void ice_flg_update(struct ice_parser_rt *rt, struct ice_alu *alu) in ice_flg_update() argument
398 ice_flg_add(rt, alu->dst_start + i, in ice_flg_update()
402 hv_bit_sel = ice_hv_bit_sel(rt, in ice_flg_update()
405 ice_flg_add(rt, alu->dst_start + i, !!hv_bit_sel); in ice_flg_update()
410 static void ice_po_update(struct ice_parser_rt *rt, struct ice_alu *alu) in ice_po_update() argument
413 rt->po = (u16)(rt->gpr[ICE_GPR_HO_IDX] + alu->proto_offset); in ice_po_update()
415 rt->po = (u16)(rt->gpr[ICE_GPR_HO_IDX] - alu->proto_offset); 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()
423 static u16 ice_reg_bit_sel(struct ice_parser_rt *rt, int reg_idx, in ice_reg_bit_sel() argument
431 memcpy(&val, &rt->gpr[offset], sizeof(val)); in ice_reg_bit_sel()
439 static void ice_err_add(struct ice_parser_rt *rt, int idx, bool val) in ice_err_add() argument
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()
451 static void ice_dst_reg_bit_set(struct ice_parser_rt *rt, struct ice_alu *alu, in ice_dst_reg_bit_set() argument
457 …ice_debug(rt->psr->hw, ICE_DBG_PARSER, "DedicatedFlagsEnable should not be enabled in opcode %d\n", 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()
468 ice_err_add(rt, alu->dst_start, val); 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()
478 ice_flg_add(rt, flg_idx, val); 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()
485 static void ice_alu_exe(struct ice_parser_rt *rt, struct ice_alu *alu) in ice_alu_exe() argument
490 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "shift_xlate_sel != 0 is not expected\n"); in ice_alu_exe()
494 ice_po_update(rt, alu); in ice_alu_exe()
495 ice_flg_update(rt, alu); 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()
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()
516 ice_dst_reg_bit_set(rt, alu, true); in ice_alu_exe()
517 ice_gpr_add(rt, ICE_GPR_NP_IDX, alu->branch_addr); in ice_alu_exe()
521 ice_dst_reg_bit_set(rt, alu, true); in ice_alu_exe()
522 ice_gpr_add(rt, ICE_GPR_NP_IDX, alu->branch_addr); in ice_alu_exe()
525 ice_dst_reg_bit_set(rt, alu, src == imm); 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()
539 static void ice_alu0_exe(struct ice_parser_rt *rt) in ice_alu0_exe() argument
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()
546 static void ice_alu1_exe(struct ice_parser_rt *rt) in ice_alu1_exe() argument
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()
553 static void ice_alu2_exe(struct ice_parser_rt *rt) in ice_alu2_exe() argument
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()
560 static void ice_pu_exe(struct ice_parser_rt *rt) in ice_pu_exe() argument
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()
569 ice_rt_gpr_set(rt, i, pu->gpr_val[i]); in ice_pu_exe()
574 ice_rt_flag_set(rt, i, pu->flg_val & 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()
585 static void ice_alu_pg_exe(struct ice_parser_rt *rt) in ice_alu_pg_exe() argument
587 memset(&rt->pu, 0, sizeof(rt->pu)); in ice_alu_pg_exe()
589 switch (rt->pg_prio) { in ice_alu_pg_exe()
591 ice_pg_exe(rt); in ice_alu_pg_exe()
592 ice_alu0_exe(rt); in ice_alu_pg_exe()
593 ice_alu1_exe(rt); in ice_alu_pg_exe()
594 ice_alu2_exe(rt); in ice_alu_pg_exe()
597 ice_alu0_exe(rt); in ice_alu_pg_exe()
598 ice_pg_exe(rt); in ice_alu_pg_exe()
599 ice_alu1_exe(rt); in ice_alu_pg_exe()
600 ice_alu2_exe(rt); in ice_alu_pg_exe()
603 ice_alu0_exe(rt); in ice_alu_pg_exe()
604 ice_alu1_exe(rt); in ice_alu_pg_exe()
605 ice_pg_exe(rt); in ice_alu_pg_exe()
606 ice_alu2_exe(rt); in ice_alu_pg_exe()
609 ice_alu0_exe(rt); in ice_alu_pg_exe()
610 ice_alu1_exe(rt); in ice_alu_pg_exe()
611 ice_alu2_exe(rt); in ice_alu_pg_exe()
612 ice_pg_exe(rt); in ice_alu_pg_exe()
616 ice_pu_exe(rt); 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()
627 static void ice_proto_off_update(struct ice_parser_rt *rt) in ice_proto_off_update() argument
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()
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()
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()
663 static void ice_marker_set(struct ice_parser_rt *rt, int idx) in ice_marker_set() argument
668 rt->markers[byte] |= (u8)BIT(bit); in ice_marker_set()
671 static void ice_marker_update(struct ice_parser_rt *rt) in ice_marker_update() argument
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()
686 ice_marker_set(rt, marker); 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()
699 static u16 ice_ptype_resolve(struct ice_parser_rt *rt) in ice_ptype_resolve() argument
702 struct ice_parser *psr = rt->psr; in ice_ptype_resolve()
705 rt->markers, ICE_MARKER_ID_SIZE); in ice_ptype_resolve()
709 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Could not resolve PTYPE\n"); in ice_ptype_resolve()
713 static void ice_proto_off_resolve(struct ice_parser_rt *rt, in ice_proto_off_resolve() argument
719 if (rt->protocols[i]) { in ice_proto_off_resolve()
721 rslt->po[rslt->po_num].offset = rt->offsets[i]; in ice_proto_off_resolve()
727 static void ice_result_resolve(struct ice_parser_rt *rt, in ice_result_resolve() argument
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()
741 ice_proto_off_resolve(rt, rslt); in ice_result_resolve()
742 rslt->ptype = ice_ptype_resolve(rt); in ice_result_resolve()
747 * @rt: pointer to the parser runtime
752 int ice_parser_rt_execute(struct ice_parser_rt *rt, in ice_parser_rt_execute() argument
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()
771 ice_debug(rt->psr->hw, ICE_DBG_PARSER, "Load imem at pc: %u\n", in ice_parser_rt_execute()
774 ice_bst_key_init(rt, imem); 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()
778 status = ice_imem_pgk_init(rt, imem); in ice_parser_rt_execute()
781 ice_imem_alu0_set(rt, imem); in ice_parser_rt_execute()
782 ice_imem_alu1_set(rt, imem); in ice_parser_rt_execute()
783 ice_imem_alu2_set(rt, imem); in ice_parser_rt_execute()
784 ice_imem_pgp_set(rt, imem); 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()
789 status = ice_bst_pgk_init(rt, bst); in ice_parser_rt_execute()
792 ice_bst_pgp_set(rt, bst); in ice_parser_rt_execute()
794 status = ice_imem_pgk_init(rt, imem); in ice_parser_rt_execute()
797 ice_imem_pgp_set(rt, imem); in ice_parser_rt_execute()
801 ice_bst_alu0_set(rt, bst); in ice_parser_rt_execute()
803 ice_imem_alu0_set(rt, imem); in ice_parser_rt_execute()
806 ice_bst_alu1_set(rt, bst); in ice_parser_rt_execute()
808 ice_imem_alu1_set(rt, imem); in ice_parser_rt_execute()
811 ice_bst_alu2_set(rt, bst); in ice_parser_rt_execute()
813 ice_imem_alu2_set(rt, imem); in ice_parser_rt_execute()
816 rt->action = NULL; in ice_parser_rt_execute()
817 pg_cam = ice_rt_pg_cam_match(rt); in ice_parser_rt_execute()
819 pg_nm_cam = ice_rt_pg_nm_cam_match(rt); 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()
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()
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()
837 ice_alu_pg_exe(rt); in ice_parser_rt_execute()
838 ice_marker_update(rt); in ice_parser_rt_execute()
839 ice_proto_off_update(rt); 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()
856 ice_result_resolve(rt, rslt); in ice_parser_rt_execute()