Lines Matching defs:vcap

50 				 const struct vcap_props *vcap)
52 return ocelot_target_read(ocelot, vcap->target, VCAP_CORE_UPDATE_CTRL);
55 static void vcap_cmd(struct ocelot *ocelot, const struct vcap_props *vcap,
62 if ((sel & VCAP_SEL_ENTRY) && ix >= vcap->entry_count)
74 ocelot_target_write(ocelot, vcap->target, value, VCAP_CORE_UPDATE_CTRL);
78 10, 100000, false, ocelot, vcap);
82 static void vcap_row_cmd(struct ocelot *ocelot, const struct vcap_props *vcap,
85 vcap_cmd(ocelot, vcap, vcap->entry_count - row - 1, cmd, sel);
89 const struct vcap_props *vcap,
94 entry_words = DIV_ROUND_UP(vcap->entry_width, ENTRY_WIDTH);
97 ocelot_target_write_rix(ocelot, vcap->target, data->entry[i],
99 ocelot_target_write_rix(ocelot, vcap->target, ~data->mask[i],
102 ocelot_target_write(ocelot, vcap->target, data->tg, VCAP_CACHE_TG_DAT);
106 const struct vcap_props *vcap,
111 entry_words = DIV_ROUND_UP(vcap->entry_width, ENTRY_WIDTH);
114 data->entry[i] = ocelot_target_read_rix(ocelot, vcap->target,
117 data->mask[i] = ~ocelot_target_read_rix(ocelot, vcap->target,
120 data->tg = ocelot_target_read(ocelot, vcap->target, VCAP_CACHE_TG_DAT);
124 const struct vcap_props *vcap,
131 width = vcap->action_type_width;
137 action_words = DIV_ROUND_UP(vcap->action_width, ENTRY_WIDTH);
140 ocelot_target_write_rix(ocelot, vcap->target, data->action[i],
143 for (i = 0; i < vcap->counter_words; i++)
144 ocelot_target_write_rix(ocelot, vcap->target, data->counter[i],
149 const struct vcap_props *vcap,
155 action_words = DIV_ROUND_UP(vcap->action_width, ENTRY_WIDTH);
158 data->action[i] = ocelot_target_read_rix(ocelot, vcap->target,
162 for (i = 0; i < vcap->counter_words; i++)
163 data->counter[i] = ocelot_target_read_rix(ocelot, vcap->target,
168 width = vcap->action_type_width;
173 static void vcap_data_offset_get(const struct vcap_props *vcap,
178 u32 width = vcap->tg_width;
195 num_subwords_per_entry = (vcap->sw_count / num_entries_per_row);
196 base = (vcap->sw_count - col * num_subwords_per_entry -
208 data->key_offset = (base * vcap->entry_width) / vcap->sw_count;
210 vcap->counter_width);
212 width = vcap->action_table[i].width;
213 num_subwords_per_action = vcap->action_table[i].count;
216 data->action_offset += vcap->action_type_width;
254 static void vcap_key_set(const struct vcap_props *vcap, struct vcap_data *data,
257 u32 offset = vcap->keys[field].offset;
258 u32 length = vcap->keys[field].length;
263 static void vcap_key_bytes_set(const struct vcap_props *vcap,
267 u32 offset = vcap->keys[field].offset;
268 u32 count = vcap->keys[field].length;
294 static void vcap_key_l4_port_set(const struct vcap_props *vcap,
298 u32 offset = vcap->keys[field].offset;
299 u32 length = vcap->keys[field].length;
306 static void vcap_key_bit_set(const struct vcap_props *vcap,
312 u32 offset = vcap->keys[field].offset;
313 u32 length = vcap->keys[field].length;
320 static void vcap_action_set(const struct vcap_props *vcap,
323 int offset = vcap->actions[field].offset;
324 int length = vcap->actions[field].length;
333 const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS2];
336 vcap_action_set(vcap, data, VCAP_IS2_ACT_MASK_MODE, a->mask_mode);
337 vcap_action_set(vcap, data, VCAP_IS2_ACT_PORT_MASK, a->port_mask);
338 vcap_action_set(vcap, data, VCAP_IS2_ACT_MIRROR_ENA, a->mirror_ena);
339 vcap_action_set(vcap, data, VCAP_IS2_ACT_POLICE_ENA, a->police_ena);
340 vcap_action_set(vcap, data, VCAP_IS2_ACT_POLICE_IDX, a->pol_ix);
341 vcap_action_set(vcap, data, VCAP_IS2_ACT_CPU_QU_NUM, a->cpu_qu_num);
342 vcap_action_set(vcap, data, VCAP_IS2_ACT_CPU_COPY_ENA, a->cpu_copy_ena);
348 const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS2];
359 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_READ, VCAP_SEL_ALL);
360 vcap_cache2entry(ocelot, vcap, &data);
361 vcap_cache2action(ocelot, vcap, &data);
364 vcap_data_offset_get(vcap, &data, ix);
371 vcap_key_set(vcap, &data, VCAP_IS2_HK_PAG, filter->pag, 0xff);
372 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_FIRST,
375 vcap_key_set(vcap, &data, VCAP_IS2_HK_IGR_PORT_MASK, 0,
377 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_HOST_MATCH,
379 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L2_MC, filter->dmac_mc);
380 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L2_BC, filter->dmac_bc);
381 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_VLAN_TAGGED, tag->tagged);
382 vcap_key_set(vcap, &data, VCAP_IS2_HK_VID,
384 vcap_key_set(vcap, &data, VCAP_IS2_HK_PCP,
386 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_DEI, tag->dei);
393 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_DMAC,
395 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_SMAC,
397 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_MAC_ETYPE_ETYPE,
400 vcap_key_set(vcap, &data, VCAP_IS2_HK_MAC_ETYPE_L2_PAYLOAD0,
402 vcap_key_set(vcap, &data, VCAP_IS2_HK_MAC_ETYPE_L2_PAYLOAD1,
404 vcap_key_set(vcap, &data, VCAP_IS2_HK_MAC_ETYPE_L2_PAYLOAD2,
406 vcap_key_bytes_set(vcap, &data,
415 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_DMAC,
417 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_SMAC,
423 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_MAC_LLC_L2_LLC,
431 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_DMAC,
433 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L2_SMAC,
435 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_MAC_SNAP_L2_SNAP,
444 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_MAC_ARP_SMAC,
446 vcap_key_bit_set(vcap, &data,
449 vcap_key_bit_set(vcap, &data,
452 vcap_key_bit_set(vcap, &data,
455 vcap_key_bit_set(vcap, &data,
458 vcap_key_bit_set(vcap, &data,
461 vcap_key_bit_set(vcap, &data,
470 vcap_key_set(vcap, &data, VCAP_IS2_HK_MAC_ARP_OPCODE,
472 vcap_key_bytes_set(vcap, &data,
475 vcap_key_bytes_set(vcap, &data,
478 vcap_key_set(vcap, &data, VCAP_IS2_HK_MAC_ARP_DIP_EQ_SIP,
547 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_IP4,
549 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L3_FRAGMENT,
551 vcap_key_set(vcap, &data, VCAP_IS2_HK_L3_FRAG_OFS_GT0, 0, 0);
552 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L3_OPTIONS,
554 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_IP4_L3_TTL_GT0,
556 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L3_TOS,
558 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L3_IP4_DIP,
560 vcap_key_bytes_set(vcap, &data, VCAP_IS2_HK_L3_IP4_SIP,
562 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_DIP_EQ_SIP,
571 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_TCP, tcp);
572 vcap_key_l4_port_set(vcap, &data,
574 vcap_key_l4_port_set(vcap, &data,
576 vcap_key_set(vcap, &data, VCAP_IS2_HK_L4_RNG, 0, 0);
577 vcap_key_bit_set(vcap, &data,
580 vcap_key_bit_set(vcap, &data,
583 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_FIN,
585 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_SYN,
587 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_RST,
589 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_PSH,
591 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_ACK,
593 vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_L4_URG,
595 vcap_key_set(vcap, &data, VCAP_IS2_HK_L4_1588_DOM,
597 vcap_key_set(vcap, &data, VCAP_IS2_HK_L4_1588_VER,
611 vcap_key_bytes_set(vcap, &data,
614 vcap_key_bytes_set(vcap, &data,
624 count = vcap->entry_width / 2;
628 for (i = vcap->keys[VCAP_IS2_HK_L2_DMAC].offset;
635 vcap_key_set(vcap, &data, VCAP_IS2_TYPE, type, type_mask);
638 vcap->counter_width, filter->stats.pkts);
641 vcap_entry2cache(ocelot, vcap, &data);
642 vcap_action2cache(ocelot, vcap, &data);
643 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_WRITE, VCAP_SEL_ALL);
649 const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS1];
652 vcap_action_set(vcap, data, VCAP_IS1_ACT_VID_REPLACE_ENA,
654 vcap_action_set(vcap, data, VCAP_IS1_ACT_VID_ADD_VAL, a->vid);
655 vcap_action_set(vcap, data, VCAP_IS1_ACT_VLAN_POP_CNT_ENA,
657 vcap_action_set(vcap, data, VCAP_IS1_ACT_VLAN_POP_CNT,
659 vcap_action_set(vcap, data, VCAP_IS1_ACT_PCP_DEI_ENA, a->pcp_dei_ena);
660 vcap_action_set(vcap, data, VCAP_IS1_ACT_PCP_VAL, a->pcp);
661 vcap_action_set(vcap, data, VCAP_IS1_ACT_DEI_VAL, a->dei);
662 vcap_action_set(vcap, data, VCAP_IS1_ACT_QOS_ENA, a->qos_ena);
663 vcap_action_set(vcap, data, VCAP_IS1_ACT_QOS_VAL, a->qos_val);
664 vcap_action_set(vcap, data, VCAP_IS1_ACT_PAG_OVERRIDE_MASK,
666 vcap_action_set(vcap, data, VCAP_IS1_ACT_PAG_VAL, a->pag_val);
672 const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS1];
681 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_READ, VCAP_SEL_ALL);
682 vcap_cache2entry(ocelot, vcap, &data);
683 vcap_cache2action(ocelot, vcap, &data);
687 vcap_data_offset_get(vcap, &data, ix);
692 vcap_key_set(vcap, &data, VCAP_IS1_HK_LOOKUP, filter->lookup, 0x3);
693 vcap_key_set(vcap, &data, VCAP_IS1_HK_IGR_PORT_MASK, 0,
695 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_L2_MC, filter->dmac_mc);
696 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_L2_BC, filter->dmac_bc);
697 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_VLAN_TAGGED, tag->tagged);
698 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TPID, tag->tpid);
699 vcap_key_set(vcap, &data, VCAP_IS1_HK_VID,
701 vcap_key_set(vcap, &data, VCAP_IS1_HK_PCP,
709 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_L2_SMAC,
711 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_ETYPE,
724 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP_SNAP,
726 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4,
728 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_ETYPE_LEN,
730 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_L3_IP4_SIP,
738 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TCP_UDP, tcp_udp);
746 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TCP, tcp);
747 vcap_key_l4_port_set(vcap, &data, VCAP_IS1_HK_L4_SPORT,
750 vcap_key_l4_port_set(vcap, &data, VCAP_IS1_HK_ETYPE,
760 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_ETYPE,
768 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TYPE,
773 vcap->counter_width, filter->stats.pkts);
776 vcap_entry2cache(ocelot, vcap, &data);
777 vcap_action2cache(ocelot, vcap, &data);
778 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_WRITE, VCAP_SEL_ALL);
784 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0];
787 vcap_action_set(vcap, data, VCAP_ES0_ACT_PUSH_OUTER_TAG,
789 vcap_action_set(vcap, data, VCAP_ES0_ACT_PUSH_INNER_TAG,
791 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_TPID_SEL,
793 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_VID_SEL,
795 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_PCP_SEL,
797 vcap_action_set(vcap, data, VCAP_ES0_ACT_VID_A_VAL, a->vid_a_val);
798 vcap_action_set(vcap, data, VCAP_ES0_ACT_PCP_A_VAL, a->pcp_a_val);
799 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_TPID_SEL,
801 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_VID_SEL,
803 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_PCP_SEL,
805 vcap_action_set(vcap, data, VCAP_ES0_ACT_VID_B_VAL, a->vid_b_val);
806 vcap_action_set(vcap, data, VCAP_ES0_ACT_PCP_B_VAL, a->pcp_b_val);
812 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0];
820 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_READ, VCAP_SEL_ALL);
821 vcap_cache2entry(ocelot, vcap, &data);
822 vcap_cache2action(ocelot, vcap, &data);
826 vcap_data_offset_get(vcap, &data, ix);
831 vcap_key_set(vcap, &data, VCAP_ES0_IGR_PORT, filter->ingress_port.value,
833 vcap_key_set(vcap, &data, VCAP_ES0_EGR_PORT, filter->egress_port.value,
835 vcap_key_bit_set(vcap, &data, VCAP_ES0_L2_MC, filter->dmac_mc);
836 vcap_key_bit_set(vcap, &data, VCAP_ES0_L2_BC, filter->dmac_bc);
837 vcap_key_set(vcap, &data, VCAP_ES0_VID,
839 vcap_key_set(vcap, &data, VCAP_ES0_PCP,
844 vcap->counter_width, filter->stats.pkts);
847 vcap_entry2cache(ocelot, vcap, &data);
848 vcap_action2cache(ocelot, vcap, &data);
849 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_WRITE, VCAP_SEL_ALL);
855 const struct vcap_props *vcap = &ocelot->vcap[filter->block_id];
867 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_READ, VCAP_SEL_COUNTER);
868 vcap_cache2action(ocelot, vcap, &data);
869 vcap_data_offset_get(vcap, &data, ix);
871 vcap->counter_width);
1316 const struct vcap_props *vcap)
1322 vcap_entry2cache(ocelot, vcap, &data);
1323 ocelot_target_write(ocelot, vcap->target, vcap->entry_count,
1325 vcap_cmd(ocelot, vcap, 0, VCAP_CMD_INITIALIZE, VCAP_SEL_ENTRY);
1327 vcap_action2cache(ocelot, vcap, &data);
1328 ocelot_target_write(ocelot, vcap->target, vcap->action_count,
1330 vcap_cmd(ocelot, vcap, 0, VCAP_CMD_INITIALIZE,
1335 struct vcap_props *vcap)
1341 version = ocelot_target_read(ocelot, vcap->target,
1348 vcap->tg_width = ocelot_target_read(ocelot, vcap->target,
1351 vcap->sw_count = ocelot_target_read(ocelot, vcap->target,
1356 vcap->entry_count = ocelot_target_read(ocelot, vcap->target,
1384 vcap->entry_width = ocelot_target_read(ocelot, vcap->target,
1386 vcap->entry_width -= vcap->tg_width * vcap->sw_count;
1387 num_default_actions = ocelot_target_read(ocelot, vcap->target,
1389 vcap->action_count = vcap->entry_count + num_default_actions;
1390 vcap->action_width = ocelot_target_read(ocelot, vcap->target,
1397 vcap->counter_words = vcap->sw_count;
1398 counter_memory_width = ocelot_target_read(ocelot, vcap->target,
1400 vcap->counter_width = counter_memory_width / vcap->counter_words;
1420 struct vcap_props *vcap = &ocelot->vcap[i];
1424 ocelot_vcap_detect_constants(ocelot, vcap);
1425 ocelot_vcap_init_one(ocelot, vcap);