Lines Matching refs:ds

17 static unsigned int dsa_switch_fastest_ageing_time(struct dsa_switch *ds,  in dsa_switch_fastest_ageing_time()  argument
22 dsa_switch_for_each_port(dp, ds) in dsa_switch_fastest_ageing_time()
29 static int dsa_switch_ageing_time(struct dsa_switch *ds, in dsa_switch_ageing_time() argument
34 if (ds->ageing_time_min && ageing_time < ds->ageing_time_min) in dsa_switch_ageing_time()
37 if (ds->ageing_time_max && ageing_time > ds->ageing_time_max) in dsa_switch_ageing_time()
41 ageing_time = dsa_switch_fastest_ageing_time(ds, ageing_time); in dsa_switch_ageing_time()
43 if (ds->ops->set_ageing_time) in dsa_switch_ageing_time()
44 return ds->ops->set_ageing_time(ds, ageing_time); in dsa_switch_ageing_time()
52 if (dp->ds->index == info->sw_index && dp->index == info->port) in dsa_port_mtu_match()
67 static int dsa_switch_mtu(struct dsa_switch *ds, in dsa_switch_mtu() argument
73 if (!ds->ops->port_change_mtu) in dsa_switch_mtu()
76 dsa_switch_for_each_port(dp, ds) { in dsa_switch_mtu()
78 ret = ds->ops->port_change_mtu(ds, dp->index, in dsa_switch_mtu()
88 static int dsa_switch_bridge_join(struct dsa_switch *ds, in dsa_switch_bridge_join() argument
91 struct dsa_switch_tree *dst = ds->dst; in dsa_switch_bridge_join()
94 if (dst->index == info->tree_index && ds->index == info->sw_index) { in dsa_switch_bridge_join()
95 if (!ds->ops->port_bridge_join) in dsa_switch_bridge_join()
98 err = ds->ops->port_bridge_join(ds, info->port, info->br); in dsa_switch_bridge_join()
103 if ((dst->index != info->tree_index || ds->index != info->sw_index) && in dsa_switch_bridge_join()
104 ds->ops->crosschip_bridge_join) { in dsa_switch_bridge_join()
105 err = ds->ops->crosschip_bridge_join(ds, info->tree_index, in dsa_switch_bridge_join()
112 return dsa_tag_8021q_bridge_join(ds, info); in dsa_switch_bridge_join()
115 static int dsa_switch_bridge_leave(struct dsa_switch *ds, in dsa_switch_bridge_leave() argument
118 struct dsa_switch_tree *dst = ds->dst; in dsa_switch_bridge_leave()
125 if (dst->index == info->tree_index && ds->index == info->sw_index && in dsa_switch_bridge_leave()
126 ds->ops->port_bridge_leave) in dsa_switch_bridge_leave()
127 ds->ops->port_bridge_leave(ds, info->port, info->br); in dsa_switch_bridge_leave()
129 if ((dst->index != info->tree_index || ds->index != info->sw_index) && in dsa_switch_bridge_leave()
130 ds->ops->crosschip_bridge_leave) in dsa_switch_bridge_leave()
131 ds->ops->crosschip_bridge_leave(ds, info->tree_index, in dsa_switch_bridge_leave()
135 if (ds->needs_standalone_vlan_filtering && !br_vlan_enabled(info->br)) { in dsa_switch_bridge_leave()
138 } else if (!ds->needs_standalone_vlan_filtering && in dsa_switch_bridge_leave()
152 if (change_vlan_filtering && ds->vlan_filtering_is_global) { in dsa_switch_bridge_leave()
153 dsa_switch_for_each_port(dp, ds) { in dsa_switch_bridge_leave()
166 err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port), in dsa_switch_bridge_leave()
169 dev_err(ds->dev, "port %d: %s\n", info->port, in dsa_switch_bridge_leave()
175 return dsa_tag_8021q_bridge_leave(ds, info); in dsa_switch_bridge_leave()
188 targeted_ds = dsa_switch_find(dp->ds->dst->index, info_sw_index); in dsa_port_host_address_match()
192 if (dsa_switch_is_upstream_of(dp->ds, targeted_ds)) in dsa_port_host_address_match()
193 return dp->index == dsa_towards_port(dp->ds, cpu_dp->ds->index, in dsa_port_host_address_match()
215 struct dsa_switch *ds = dp->ds; in dsa_port_do_mdb_add() local
222 return ds->ops->port_mdb_add(ds, port, mdb); in dsa_port_do_mdb_add()
238 err = ds->ops->port_mdb_add(ds, port, mdb); in dsa_port_do_mdb_add()
258 struct dsa_switch *ds = dp->ds; in dsa_port_do_mdb_del() local
265 return ds->ops->port_mdb_del(ds, port, mdb); in dsa_port_do_mdb_del()
278 err = ds->ops->port_mdb_del(ds, port, mdb); in dsa_port_do_mdb_del()
296 struct dsa_switch *ds = dp->ds; in dsa_port_do_fdb_add() local
303 return ds->ops->port_fdb_add(ds, port, addr, vid); in dsa_port_do_fdb_add()
319 err = ds->ops->port_fdb_add(ds, port, addr, vid); in dsa_port_do_fdb_add()
339 struct dsa_switch *ds = dp->ds; in dsa_port_do_fdb_del() local
346 return ds->ops->port_fdb_del(ds, port, addr, vid); in dsa_port_do_fdb_del()
359 err = ds->ops->port_fdb_del(ds, port, addr, vid); in dsa_port_do_fdb_del()
374 static int dsa_switch_host_fdb_add(struct dsa_switch *ds, in dsa_switch_host_fdb_add() argument
380 if (!ds->ops->port_fdb_add) in dsa_switch_host_fdb_add()
383 dsa_switch_for_each_port(dp, ds) { in dsa_switch_host_fdb_add()
395 static int dsa_switch_host_fdb_del(struct dsa_switch *ds, in dsa_switch_host_fdb_del() argument
401 if (!ds->ops->port_fdb_del) in dsa_switch_host_fdb_del()
404 dsa_switch_for_each_port(dp, ds) { in dsa_switch_host_fdb_del()
416 static int dsa_switch_fdb_add(struct dsa_switch *ds, in dsa_switch_fdb_add() argument
419 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_fdb_add()
420 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_switch_fdb_add()
422 if (!ds->ops->port_fdb_add) in dsa_switch_fdb_add()
428 static int dsa_switch_fdb_del(struct dsa_switch *ds, in dsa_switch_fdb_del() argument
431 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_fdb_del()
432 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_switch_fdb_del()
434 if (!ds->ops->port_fdb_del) in dsa_switch_fdb_del()
440 static int dsa_switch_hsr_join(struct dsa_switch *ds, in dsa_switch_hsr_join() argument
443 if (ds->index == info->sw_index && ds->ops->port_hsr_join) in dsa_switch_hsr_join()
444 return ds->ops->port_hsr_join(ds, info->port, info->hsr); in dsa_switch_hsr_join()
449 static int dsa_switch_hsr_leave(struct dsa_switch *ds, in dsa_switch_hsr_leave() argument
452 if (ds->index == info->sw_index && ds->ops->port_hsr_leave) in dsa_switch_hsr_leave()
453 return ds->ops->port_hsr_leave(ds, info->port, info->hsr); in dsa_switch_hsr_leave()
458 static int dsa_switch_lag_change(struct dsa_switch *ds, in dsa_switch_lag_change() argument
461 if (ds->index == info->sw_index && ds->ops->port_lag_change) in dsa_switch_lag_change()
462 return ds->ops->port_lag_change(ds, info->port); in dsa_switch_lag_change()
464 if (ds->index != info->sw_index && ds->ops->crosschip_lag_change) in dsa_switch_lag_change()
465 return ds->ops->crosschip_lag_change(ds, info->sw_index, in dsa_switch_lag_change()
471 static int dsa_switch_lag_join(struct dsa_switch *ds, in dsa_switch_lag_join() argument
474 if (ds->index == info->sw_index && ds->ops->port_lag_join) in dsa_switch_lag_join()
475 return ds->ops->port_lag_join(ds, info->port, info->lag, in dsa_switch_lag_join()
478 if (ds->index != info->sw_index && ds->ops->crosschip_lag_join) in dsa_switch_lag_join()
479 return ds->ops->crosschip_lag_join(ds, info->sw_index, in dsa_switch_lag_join()
486 static int dsa_switch_lag_leave(struct dsa_switch *ds, in dsa_switch_lag_leave() argument
489 if (ds->index == info->sw_index && ds->ops->port_lag_leave) in dsa_switch_lag_leave()
490 return ds->ops->port_lag_leave(ds, info->port, info->lag); in dsa_switch_lag_leave()
492 if (ds->index != info->sw_index && ds->ops->crosschip_lag_leave) in dsa_switch_lag_leave()
493 return ds->ops->crosschip_lag_leave(ds, info->sw_index, in dsa_switch_lag_leave()
499 static int dsa_switch_mdb_add(struct dsa_switch *ds, in dsa_switch_mdb_add() argument
502 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_mdb_add()
503 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_switch_mdb_add()
505 if (!ds->ops->port_mdb_add) in dsa_switch_mdb_add()
511 static int dsa_switch_mdb_del(struct dsa_switch *ds, in dsa_switch_mdb_del() argument
514 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_mdb_del()
515 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_switch_mdb_del()
517 if (!ds->ops->port_mdb_del) in dsa_switch_mdb_del()
523 static int dsa_switch_host_mdb_add(struct dsa_switch *ds, in dsa_switch_host_mdb_add() argument
529 if (!ds->ops->port_mdb_add) in dsa_switch_host_mdb_add()
532 dsa_switch_for_each_port(dp, ds) { in dsa_switch_host_mdb_add()
544 static int dsa_switch_host_mdb_del(struct dsa_switch *ds, in dsa_switch_host_mdb_del() argument
550 if (!ds->ops->port_mdb_del) in dsa_switch_host_mdb_del()
553 dsa_switch_for_each_port(dp, ds) { in dsa_switch_host_mdb_del()
568 if (dp->ds->index == info->sw_index && dp->index == info->port) in dsa_port_vlan_match()
577 static int dsa_switch_vlan_add(struct dsa_switch *ds, in dsa_switch_vlan_add() argument
583 if (!ds->ops->port_vlan_add) in dsa_switch_vlan_add()
586 dsa_switch_for_each_port(dp, ds) { in dsa_switch_vlan_add()
588 err = ds->ops->port_vlan_add(ds, dp->index, info->vlan, in dsa_switch_vlan_add()
598 static int dsa_switch_vlan_del(struct dsa_switch *ds, in dsa_switch_vlan_del() argument
601 if (!ds->ops->port_vlan_del) in dsa_switch_vlan_del()
604 if (ds->index == info->sw_index) in dsa_switch_vlan_del()
605 return ds->ops->port_vlan_del(ds, info->port, info->vlan); in dsa_switch_vlan_del()
613 static int dsa_switch_change_tag_proto(struct dsa_switch *ds, in dsa_switch_change_tag_proto() argument
620 if (!ds->ops->change_tag_protocol) in dsa_switch_change_tag_proto()
625 dsa_switch_for_each_cpu_port(cpu_dp, ds) { in dsa_switch_change_tag_proto()
626 err = ds->ops->change_tag_protocol(ds, cpu_dp->index, in dsa_switch_change_tag_proto()
638 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_change_tag_proto()
650 static int dsa_switch_mrp_add(struct dsa_switch *ds, in dsa_switch_mrp_add() argument
653 if (!ds->ops->port_mrp_add) in dsa_switch_mrp_add()
656 if (ds->index == info->sw_index) in dsa_switch_mrp_add()
657 return ds->ops->port_mrp_add(ds, info->port, info->mrp); in dsa_switch_mrp_add()
662 static int dsa_switch_mrp_del(struct dsa_switch *ds, in dsa_switch_mrp_del() argument
665 if (!ds->ops->port_mrp_del) in dsa_switch_mrp_del()
668 if (ds->index == info->sw_index) in dsa_switch_mrp_del()
669 return ds->ops->port_mrp_del(ds, info->port, info->mrp); in dsa_switch_mrp_del()
675 dsa_switch_mrp_add_ring_role(struct dsa_switch *ds, in dsa_switch_mrp_add_ring_role() argument
678 if (!ds->ops->port_mrp_add) in dsa_switch_mrp_add_ring_role()
681 if (ds->index == info->sw_index) in dsa_switch_mrp_add_ring_role()
682 return ds->ops->port_mrp_add_ring_role(ds, info->port, in dsa_switch_mrp_add_ring_role()
689 dsa_switch_mrp_del_ring_role(struct dsa_switch *ds, in dsa_switch_mrp_del_ring_role() argument
692 if (!ds->ops->port_mrp_del) in dsa_switch_mrp_del_ring_role()
695 if (ds->index == info->sw_index) in dsa_switch_mrp_del_ring_role()
696 return ds->ops->port_mrp_del_ring_role(ds, info->port, in dsa_switch_mrp_del_ring_role()
705 struct dsa_switch *ds = container_of(nb, struct dsa_switch, nb); in dsa_switch_event() local
710 err = dsa_switch_ageing_time(ds, info); in dsa_switch_event()
713 err = dsa_switch_bridge_join(ds, info); in dsa_switch_event()
716 err = dsa_switch_bridge_leave(ds, info); in dsa_switch_event()
719 err = dsa_switch_fdb_add(ds, info); in dsa_switch_event()
722 err = dsa_switch_fdb_del(ds, info); in dsa_switch_event()
725 err = dsa_switch_host_fdb_add(ds, info); in dsa_switch_event()
728 err = dsa_switch_host_fdb_del(ds, info); in dsa_switch_event()
731 err = dsa_switch_hsr_join(ds, info); in dsa_switch_event()
734 err = dsa_switch_hsr_leave(ds, info); in dsa_switch_event()
737 err = dsa_switch_lag_change(ds, info); in dsa_switch_event()
740 err = dsa_switch_lag_join(ds, info); in dsa_switch_event()
743 err = dsa_switch_lag_leave(ds, info); in dsa_switch_event()
746 err = dsa_switch_mdb_add(ds, info); in dsa_switch_event()
749 err = dsa_switch_mdb_del(ds, info); in dsa_switch_event()
752 err = dsa_switch_host_mdb_add(ds, info); in dsa_switch_event()
755 err = dsa_switch_host_mdb_del(ds, info); in dsa_switch_event()
758 err = dsa_switch_vlan_add(ds, info); in dsa_switch_event()
761 err = dsa_switch_vlan_del(ds, info); in dsa_switch_event()
764 err = dsa_switch_mtu(ds, info); in dsa_switch_event()
767 err = dsa_switch_change_tag_proto(ds, info); in dsa_switch_event()
770 err = dsa_switch_mrp_add(ds, info); in dsa_switch_event()
773 err = dsa_switch_mrp_del(ds, info); in dsa_switch_event()
776 err = dsa_switch_mrp_add_ring_role(ds, info); in dsa_switch_event()
779 err = dsa_switch_mrp_del_ring_role(ds, info); in dsa_switch_event()
782 err = dsa_switch_tag_8021q_vlan_add(ds, info); in dsa_switch_event()
785 err = dsa_switch_tag_8021q_vlan_del(ds, info); in dsa_switch_event()
793 dev_dbg(ds->dev, "breaking chain for DSA event %lu (%d)\n", in dsa_switch_event()
799 int dsa_switch_register_notifier(struct dsa_switch *ds) in dsa_switch_register_notifier() argument
801 ds->nb.notifier_call = dsa_switch_event; in dsa_switch_register_notifier()
803 return raw_notifier_chain_register(&ds->dst->nh, &ds->nb); in dsa_switch_register_notifier()
806 void dsa_switch_unregister_notifier(struct dsa_switch *ds) in dsa_switch_unregister_notifier() argument
810 err = raw_notifier_chain_unregister(&ds->dst->nh, &ds->nb); in dsa_switch_unregister_notifier()
812 dev_err(ds->dev, "failed to unregister notifier (%d)\n", err); in dsa_switch_unregister_notifier()