Lines Matching full:ocelot

2 /* Microsemi Ocelot Switch driver
39 * offload support in Ocelot in ocelot_chain_to_block()
65 * offload support in Ocelot in ocelot_chain_to_lookup()
81 * offload support in Ocelot in ocelot_chain_to_pag()
145 ocelot_find_vcap_filter_that_points_at(struct ocelot *ocelot, int chain) in ocelot_find_vcap_filter_that_points_at() argument
156 block = &ocelot->block[VCAP_IS1]; in ocelot_find_vcap_filter_that_points_at()
164 list_for_each_entry(filter, &ocelot->dummy_rules, list) in ocelot_find_vcap_filter_that_points_at()
172 ocelot_flower_parse_ingress_vlan_modify(struct ocelot *ocelot, int port, in ocelot_flower_parse_ingress_vlan_modify() argument
177 struct ocelot_port *ocelot_port = ocelot->ports[port]; in ocelot_flower_parse_ingress_vlan_modify()
232 ocelot_flower_parse_egress_port(struct ocelot *ocelot, struct flow_cls_offload *f, in ocelot_flower_parse_egress_port() argument
237 int egress_port = ocelot->ops->netdev_to_port(a->dev); in ocelot_flower_parse_egress_port()
248 "CPU" : "ingress of ocelot port"); in ocelot_flower_parse_egress_port()
251 egress_port = ocelot->num_phys_ports; in ocelot_flower_parse_egress_port()
257 static int ocelot_flower_parse_action(struct ocelot *ocelot, int port, in ocelot_flower_parse_action() argument
366 pol_ix = a->hw_index + ocelot->vcap_pol.base; in ocelot_flower_parse_action()
367 pol_max = ocelot->vcap_pol.max; in ocelot_flower_parse_action()
369 if (ocelot->vcap_pol.max2 && pol_ix > pol_max) { in ocelot_flower_parse_action()
370 pol_ix += ocelot->vcap_pol.base2 - pol_max - 1; in ocelot_flower_parse_action()
371 pol_max = ocelot->vcap_pol.max2; in ocelot_flower_parse_action()
397 egress_port = ocelot_flower_parse_egress_port(ocelot, f, in ocelot_flower_parse_action()
420 egress_port = ocelot_flower_parse_egress_port(ocelot, f, in ocelot_flower_parse_action()
452 err = ocelot_flower_parse_ingress_vlan_modify(ocelot, port, in ocelot_flower_parse_action()
550 static int ocelot_flower_parse_indev(struct ocelot *ocelot, int port, in ocelot_flower_parse_indev() argument
555 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; in ocelot_flower_parse_indev()
572 dev = ocelot->ops->port_to_netdev(ocelot, port); in ocelot_flower_parse_indev()
583 ingress_port = ocelot->ops->netdev_to_port(indev); in ocelot_flower_parse_indev()
586 "Can only offload an ocelot ingress port"); in ocelot_flower_parse_indev()
602 ocelot_flower_parse_key(struct ocelot *ocelot, int port, bool ingress, in ocelot_flower_parse_key() argument
637 ret = ocelot_flower_parse_indev(ocelot, port, f, filter); in ocelot_flower_parse_key()
809 static int ocelot_flower_parse(struct ocelot *ocelot, int port, bool ingress, in ocelot_flower_parse() argument
819 ret = ocelot_flower_parse_action(ocelot, port, ingress, f, filter); in ocelot_flower_parse()
827 return ocelot_flower_parse_key(ocelot, port, ingress, f, filter); in ocelot_flower_parse()
831 *ocelot_vcap_filter_create(struct ocelot *ocelot, int port, bool ingress, in ocelot_vcap_filter_create() argument
843 const struct vcap_props *vcap = &ocelot->vcap[VCAP_ES0]; in ocelot_vcap_filter_create()
853 static int ocelot_vcap_dummy_filter_add(struct ocelot *ocelot, in ocelot_vcap_dummy_filter_add() argument
856 list_add(&filter->list, &ocelot->dummy_rules); in ocelot_vcap_dummy_filter_add()
861 static int ocelot_vcap_dummy_filter_del(struct ocelot *ocelot, in ocelot_vcap_dummy_filter_del() argument
895 int ocelot_cls_flower_replace(struct ocelot *ocelot, int port, in ocelot_cls_flower_replace() argument
903 if (chain && !ocelot_find_vcap_filter_that_points_at(ocelot, chain)) { in ocelot_cls_flower_replace()
914 filter = ocelot_vcap_block_find_filter_by_id(&ocelot->block[block_id], in ocelot_cls_flower_replace()
925 return ocelot_vcap_filter_replace(ocelot, filter); in ocelot_cls_flower_replace()
929 filter = ocelot_vcap_filter_create(ocelot, port, ingress, f); in ocelot_cls_flower_replace()
933 ret = ocelot_flower_parse(ocelot, port, ingress, f, filter); in ocelot_cls_flower_replace()
949 return ocelot_vcap_dummy_filter_add(ocelot, filter); in ocelot_cls_flower_replace()
953 if (ocelot->ops->psfp_filter_add) in ocelot_cls_flower_replace()
954 return ocelot->ops->psfp_filter_add(ocelot, port, f); in ocelot_cls_flower_replace()
960 return ocelot_vcap_filter_add(ocelot, filter, f->common.extack); in ocelot_cls_flower_replace()
964 int ocelot_cls_flower_destroy(struct ocelot *ocelot, int port, in ocelot_cls_flower_destroy() argument
976 if (ocelot->ops->psfp_filter_del) in ocelot_cls_flower_destroy()
977 return ocelot->ops->psfp_filter_del(ocelot, f); in ocelot_cls_flower_destroy()
982 block = &ocelot->block[block_id]; in ocelot_cls_flower_destroy()
989 return ocelot_vcap_dummy_filter_del(ocelot, filter); in ocelot_cls_flower_destroy()
994 return ocelot_vcap_filter_replace(ocelot, filter); in ocelot_cls_flower_destroy()
997 return ocelot_vcap_filter_del(ocelot, filter); in ocelot_cls_flower_destroy()
1001 int ocelot_cls_flower_stats(struct ocelot *ocelot, int port, in ocelot_cls_flower_stats() argument
1014 if (ocelot->ops->psfp_stats_get) { in ocelot_cls_flower_stats()
1015 ret = ocelot->ops->psfp_stats_get(ocelot, f, &stats); in ocelot_cls_flower_stats()
1025 block = &ocelot->block[block_id]; in ocelot_cls_flower_stats()
1031 ret = ocelot_vcap_filter_stats_update(ocelot, filter); in ocelot_cls_flower_stats()