Lines Matching refs:data
90 struct vcap_data *data)
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);
107 struct vcap_data *data)
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);
125 struct vcap_data *data)
134 data->action[0] = ((data->action[0] & ~mask) | data->type);
140 ocelot_target_write_rix(ocelot, vcap->target, data->action[i],
144 ocelot_target_write_rix(ocelot, vcap->target, data->counter[i],
150 struct vcap_data *data)
158 data->action[i] = ocelot_target_read_rix(ocelot, vcap->target,
163 data->counter[i] = ocelot_target_read_rix(ocelot, vcap->target,
169 data->type = (width ? (data->action[0] & GENMASK(width, 0)) : 0);
174 struct vcap_data *data, int ix)
180 switch (data->tg_sw) {
198 data->tg_value = 0;
199 data->tg_mask = 0;
202 data->tg_value |= (data->tg_sw << offset);
203 data->tg_mask |= GENMASK(offset + width - 1, offset);
208 data->key_offset = (base * vcap->entry_width) / vcap->sw_count;
209 data->counter_offset = (num_subwords_per_entry * col *
211 i = data->type;
214 data->action_offset = ((num_subwords_per_action * col * width) /
216 data->action_offset += vcap->action_type_width;
219 static void vcap_data_set(u32 *data, u32 offset, u32 len, u32 value)
224 v = data[offset / ENTRY_WIDTH];
230 data[offset / ENTRY_WIDTH] = v;
234 static u32 vcap_data_get(u32 *data, u32 offset, u32 len)
239 v = data[offset / ENTRY_WIDTH];
247 static void vcap_key_field_set(struct vcap_data *data, u32 offset, u32 width,
250 vcap_data_set(data->entry, offset + data->key_offset, width, value);
251 vcap_data_set(data->mask, offset + data->key_offset, width, mask);
254 static void vcap_key_set(const struct vcap_props *vcap, struct vcap_data *data,
260 vcap_key_field_set(data, offset, length, value, mask);
264 struct vcap_data *data, int field,
274 * The 32 LSB of the data are written to the 32 MSB of the TCAM.
286 vcap_key_field_set(data, offset, n, value, mask);
295 struct vcap_data *data, int field,
303 vcap_key_field_set(data, offset, length, port->value, port->mask);
307 struct vcap_data *data, int field,
317 vcap_key_field_set(data, offset, length, value, msk);
321 struct vcap_data *data, int field, u32 value)
326 vcap_data_set(data->action, offset + data->action_offset, length,
330 static void is2_action_set(struct ocelot *ocelot, struct vcap_data *data,
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);
352 struct vcap_data data;
356 memset(&data, 0, sizeof(data));
360 vcap_cache2entry(ocelot, vcap, &data);
361 vcap_cache2action(ocelot, vcap, &data);
363 data.tg_sw = VCAP_TG_HALF;
364 vcap_data_offset_get(vcap, &data, ix);
365 data.tg = (data.tg & ~data.tg_mask);
367 data.tg |= data.tg_value;
369 data.type = IS2_ACTION_TYPE_NORMAL;
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,
408 etype->data.value, etype->data.mask);
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,
501 ip_data = &ipv4->data;
522 ip_data = &ipv6->data;
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,
626 * clear entry data
630 vcap_key_field_set(&data, i, min(32u, count - i), 0, 0);
635 vcap_key_set(vcap, &data, VCAP_IS2_TYPE, type, type_mask);
636 is2_action_set(ocelot, &data, filter);
637 vcap_data_set(data.counter, data.counter_offset,
641 vcap_entry2cache(ocelot, vcap, &data);
642 vcap_action2cache(ocelot, vcap, &data);
646 static void is1_action_set(struct ocelot *ocelot, struct vcap_data *data,
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);
674 struct vcap_data data;
678 memset(&data, 0, sizeof(data));
682 vcap_cache2entry(ocelot, vcap, &data);
683 vcap_cache2action(ocelot, vcap, &data);
685 data.tg_sw = VCAP_TG_HALF;
686 data.type = IS1_ACTION_TYPE_NORMAL;
687 vcap_data_offset_get(vcap, &data, ix);
688 data.tg = (data.tg & ~data.tg_mask);
690 data.tg |= data.tg_value;
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_set(vcap, &data, VCAP_IS1_HK_VID,
700 vcap_key_set(vcap, &data, VCAP_IS1_HK_PCP,
708 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_L2_SMAC,
710 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_ETYPE,
723 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP_SNAP,
725 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4,
727 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_ETYPE_LEN,
729 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_L3_IP4_SIP,
737 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TCP_UDP, tcp_udp);
745 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TCP, tcp);
746 vcap_key_l4_port_set(vcap, &data, VCAP_IS1_HK_L4_SPORT,
749 vcap_key_l4_port_set(vcap, &data, VCAP_IS1_HK_ETYPE,
759 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_ETYPE,
767 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TYPE,
770 is1_action_set(ocelot, &data, filter);
771 vcap_data_set(data.counter, data.counter_offset,
775 vcap_entry2cache(ocelot, vcap, &data);
776 vcap_action2cache(ocelot, vcap, &data);
780 static void es0_action_set(struct ocelot *ocelot, struct vcap_data *data,
786 vcap_action_set(vcap, data, VCAP_ES0_ACT_PUSH_OUTER_TAG,
788 vcap_action_set(vcap, data, VCAP_ES0_ACT_PUSH_INNER_TAG,
790 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_TPID_SEL,
792 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_VID_SEL,
794 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_A_PCP_SEL,
796 vcap_action_set(vcap, data, VCAP_ES0_ACT_VID_A_VAL, a->vid_a_val);
797 vcap_action_set(vcap, data, VCAP_ES0_ACT_PCP_A_VAL, a->pcp_a_val);
798 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_TPID_SEL,
800 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_VID_SEL,
802 vcap_action_set(vcap, data, VCAP_ES0_ACT_TAG_B_PCP_SEL,
804 vcap_action_set(vcap, data, VCAP_ES0_ACT_VID_B_VAL, a->vid_b_val);
805 vcap_action_set(vcap, data, VCAP_ES0_ACT_PCP_B_VAL, a->pcp_b_val);
813 struct vcap_data data;
816 memset(&data, 0, sizeof(data));
820 vcap_cache2entry(ocelot, vcap, &data);
821 vcap_cache2action(ocelot, vcap, &data);
823 data.tg_sw = VCAP_TG_FULL;
824 data.type = ES0_ACTION_TYPE_NORMAL;
825 vcap_data_offset_get(vcap, &data, ix);
826 data.tg = (data.tg & ~data.tg_mask);
828 data.tg |= data.tg_value;
830 vcap_key_set(vcap, &data, VCAP_ES0_IGR_PORT, filter->ingress_port.value,
832 vcap_key_set(vcap, &data, VCAP_ES0_EGR_PORT, filter->egress_port.value,
834 vcap_key_bit_set(vcap, &data, VCAP_ES0_L2_MC, filter->dmac_mc);
835 vcap_key_bit_set(vcap, &data, VCAP_ES0_L2_BC, filter->dmac_bc);
836 vcap_key_set(vcap, &data, VCAP_ES0_VID,
838 vcap_key_set(vcap, &data, VCAP_ES0_PCP,
841 es0_action_set(ocelot, &data, filter);
842 vcap_data_set(data.counter, data.counter_offset,
846 vcap_entry2cache(ocelot, vcap, &data);
847 vcap_action2cache(ocelot, vcap, &data);
855 struct vcap_data data;
860 data.tg_sw = VCAP_TG_FULL;
862 data.tg_sw = VCAP_TG_HALF;
864 count = (1 << (data.tg_sw - 1));
867 vcap_cache2action(ocelot, vcap, &data);
868 vcap_data_offset_get(vcap, &data, ix);
869 cnt = vcap_data_get(data.counter, data.counter_offset,
1317 struct vcap_data data;
1319 memset(&data, 0, sizeof(data));
1321 vcap_entry2cache(ocelot, vcap, &data);
1326 vcap_action2cache(ocelot, vcap, &data);
1381 * Type-Groups when packing and unpacking key entry data in a TCAM row.