Lines Matching defs:ocelot
145 ocelot_find_vcap_filter_that_points_at(struct ocelot *ocelot, int chain)
156 block = &ocelot->block[VCAP_IS1];
164 list_for_each_entry(filter, &ocelot->dummy_rules, list)
172 ocelot_flower_parse_ingress_vlan_modify(struct ocelot *ocelot, int port,
177 struct ocelot_port *ocelot_port = ocelot->ports[port];
231 static int ocelot_flower_parse_action(struct ocelot *ocelot, int port,
340 pol_ix = a->hw_index + ocelot->vcap_pol.base;
341 pol_max = ocelot->vcap_pol.max;
343 if (ocelot->vcap_pol.max2 && pol_ix > pol_max) {
344 pol_ix += ocelot->vcap_pol.base2 - pol_max - 1;
345 pol_max = ocelot->vcap_pol.max2;
369 egress_port = ocelot->ops->netdev_to_port(a->dev);
372 "Destination not an ocelot port");
390 egress_port = ocelot->ops->netdev_to_port(a->dev);
393 "Destination not an ocelot port");
422 err = ocelot_flower_parse_ingress_vlan_modify(ocelot, port,
520 static int ocelot_flower_parse_indev(struct ocelot *ocelot, int port,
525 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0];
542 dev = ocelot->ops->port_to_netdev(ocelot, port);
553 ingress_port = ocelot->ops->netdev_to_port(indev);
556 "Can only offload an ocelot ingress port");
572 ocelot_flower_parse_key(struct ocelot *ocelot, int port, bool ingress,
607 ret = ocelot_flower_parse_indev(ocelot, port, f, filter);
782 static int ocelot_flower_parse(struct ocelot *ocelot, int port, bool ingress,
792 ret = ocelot_flower_parse_action(ocelot, port, ingress, f, filter);
800 return ocelot_flower_parse_key(ocelot, port, ingress, f, filter);
804 *ocelot_vcap_filter_create(struct ocelot *ocelot, int port, bool ingress,
816 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0];
826 static int ocelot_vcap_dummy_filter_add(struct ocelot *ocelot,
829 list_add(&filter->list, &ocelot->dummy_rules);
834 static int ocelot_vcap_dummy_filter_del(struct ocelot *ocelot,
868 int ocelot_cls_flower_replace(struct ocelot *ocelot, int port,
876 if (chain && !ocelot_find_vcap_filter_that_points_at(ocelot, chain)) {
887 filter = ocelot_vcap_block_find_filter_by_id(&ocelot->block[block_id],
898 return ocelot_vcap_filter_replace(ocelot, filter);
902 filter = ocelot_vcap_filter_create(ocelot, port, ingress, f);
906 ret = ocelot_flower_parse(ocelot, port, ingress, f, filter);
922 return ocelot_vcap_dummy_filter_add(ocelot, filter);
926 if (ocelot->ops->psfp_filter_add)
927 return ocelot->ops->psfp_filter_add(ocelot, port, f);
933 return ocelot_vcap_filter_add(ocelot, filter, f->common.extack);
937 int ocelot_cls_flower_destroy(struct ocelot *ocelot, int port,
949 if (ocelot->ops->psfp_filter_del)
950 return ocelot->ops->psfp_filter_del(ocelot, f);
955 block = &ocelot->block[block_id];
962 return ocelot_vcap_dummy_filter_del(ocelot, filter);
967 return ocelot_vcap_filter_replace(ocelot, filter);
970 return ocelot_vcap_filter_del(ocelot, filter);
974 int ocelot_cls_flower_stats(struct ocelot *ocelot, int port,
987 if (ocelot->ops->psfp_stats_get) {
988 ret = ocelot->ops->psfp_stats_get(ocelot, f, &stats);
998 block = &ocelot->block[block_id];
1004 ret = ocelot_vcap_filter_stats_update(ocelot, filter);