Lines Matching refs:ds

19 static unsigned int dsa_switch_fastest_ageing_time(struct dsa_switch *ds,  in dsa_switch_fastest_ageing_time()  argument
24 for (i = 0; i < ds->num_ports; ++i) { in dsa_switch_fastest_ageing_time()
25 struct dsa_port *dp = &ds->ports[i]; in dsa_switch_fastest_ageing_time()
34 static int dsa_switch_ageing_time(struct dsa_switch *ds, in dsa_switch_ageing_time() argument
41 if (ds->ageing_time_min && ageing_time < ds->ageing_time_min) in dsa_switch_ageing_time()
43 if (ds->ageing_time_max && ageing_time > ds->ageing_time_max) in dsa_switch_ageing_time()
49 ageing_time = dsa_switch_fastest_ageing_time(ds, ageing_time); in dsa_switch_ageing_time()
51 if (ds->ops->set_ageing_time) in dsa_switch_ageing_time()
52 return ds->ops->set_ageing_time(ds, ageing_time); in dsa_switch_ageing_time()
57 static int dsa_switch_bridge_join(struct dsa_switch *ds, in dsa_switch_bridge_join() argument
60 if (ds->index == info->sw_index && ds->ops->port_bridge_join) in dsa_switch_bridge_join()
61 return ds->ops->port_bridge_join(ds, info->port, info->br); in dsa_switch_bridge_join()
63 if (ds->index != info->sw_index && ds->ops->crosschip_bridge_join) in dsa_switch_bridge_join()
64 return ds->ops->crosschip_bridge_join(ds, info->sw_index, in dsa_switch_bridge_join()
70 static int dsa_switch_bridge_leave(struct dsa_switch *ds, in dsa_switch_bridge_leave() argument
73 if (ds->index == info->sw_index && ds->ops->port_bridge_leave) in dsa_switch_bridge_leave()
74 ds->ops->port_bridge_leave(ds, info->port, info->br); in dsa_switch_bridge_leave()
76 if (ds->index != info->sw_index && ds->ops->crosschip_bridge_leave) in dsa_switch_bridge_leave()
77 ds->ops->crosschip_bridge_leave(ds, info->sw_index, info->port, in dsa_switch_bridge_leave()
83 static int dsa_switch_fdb_add(struct dsa_switch *ds, in dsa_switch_fdb_add() argument
86 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_fdb_add()
88 if (!ds->ops->port_fdb_add) in dsa_switch_fdb_add()
91 return ds->ops->port_fdb_add(ds, port, info->addr, info->vid); in dsa_switch_fdb_add()
94 static int dsa_switch_fdb_del(struct dsa_switch *ds, in dsa_switch_fdb_del() argument
97 int port = dsa_towards_port(ds, info->sw_index, info->port); in dsa_switch_fdb_del()
99 if (!ds->ops->port_fdb_del) in dsa_switch_fdb_del()
102 return ds->ops->port_fdb_del(ds, port, info->addr, info->vid); in dsa_switch_fdb_del()
106 dsa_switch_mdb_prepare_bitmap(struct dsa_switch *ds, in dsa_switch_mdb_prepare_bitmap() argument
112 if (!ds->ops->port_mdb_prepare || !ds->ops->port_mdb_add) in dsa_switch_mdb_prepare_bitmap()
115 for_each_set_bit(port, bitmap, ds->num_ports) { in dsa_switch_mdb_prepare_bitmap()
116 err = ds->ops->port_mdb_prepare(ds, port, mdb); in dsa_switch_mdb_prepare_bitmap()
124 static void dsa_switch_mdb_add_bitmap(struct dsa_switch *ds, in dsa_switch_mdb_add_bitmap() argument
130 for_each_set_bit(port, bitmap, ds->num_ports) in dsa_switch_mdb_add_bitmap()
131 ds->ops->port_mdb_add(ds, port, mdb); in dsa_switch_mdb_add_bitmap()
134 static int dsa_switch_mdb_add(struct dsa_switch *ds, in dsa_switch_mdb_add() argument
142 bitmap_zero(ds->bitmap, ds->num_ports); in dsa_switch_mdb_add()
143 if (ds->index == info->sw_index) in dsa_switch_mdb_add()
144 set_bit(info->port, ds->bitmap); in dsa_switch_mdb_add()
145 for (port = 0; port < ds->num_ports; port++) in dsa_switch_mdb_add()
146 if (dsa_is_dsa_port(ds, port)) in dsa_switch_mdb_add()
147 set_bit(port, ds->bitmap); in dsa_switch_mdb_add()
150 return dsa_switch_mdb_prepare_bitmap(ds, mdb, ds->bitmap); in dsa_switch_mdb_add()
152 dsa_switch_mdb_add_bitmap(ds, mdb, ds->bitmap); in dsa_switch_mdb_add()
157 static int dsa_switch_mdb_del(struct dsa_switch *ds, in dsa_switch_mdb_del() argument
162 if (!ds->ops->port_mdb_del) in dsa_switch_mdb_del()
165 if (ds->index == info->sw_index) in dsa_switch_mdb_del()
166 return ds->ops->port_mdb_del(ds, info->port, mdb); in dsa_switch_mdb_del()
172 dsa_switch_vlan_prepare_bitmap(struct dsa_switch *ds, in dsa_switch_vlan_prepare_bitmap() argument
178 if (!ds->ops->port_vlan_prepare || !ds->ops->port_vlan_add) in dsa_switch_vlan_prepare_bitmap()
181 for_each_set_bit(port, bitmap, ds->num_ports) { in dsa_switch_vlan_prepare_bitmap()
182 err = ds->ops->port_vlan_prepare(ds, port, vlan); in dsa_switch_vlan_prepare_bitmap()
191 dsa_switch_vlan_add_bitmap(struct dsa_switch *ds, in dsa_switch_vlan_add_bitmap() argument
197 for_each_set_bit(port, bitmap, ds->num_ports) in dsa_switch_vlan_add_bitmap()
198 ds->ops->port_vlan_add(ds, port, vlan); in dsa_switch_vlan_add_bitmap()
201 static int dsa_switch_vlan_add(struct dsa_switch *ds, in dsa_switch_vlan_add() argument
209 bitmap_zero(ds->bitmap, ds->num_ports); in dsa_switch_vlan_add()
210 if (ds->index == info->sw_index) in dsa_switch_vlan_add()
211 set_bit(info->port, ds->bitmap); in dsa_switch_vlan_add()
212 for (port = 0; port < ds->num_ports; port++) in dsa_switch_vlan_add()
213 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in dsa_switch_vlan_add()
214 set_bit(port, ds->bitmap); in dsa_switch_vlan_add()
217 return dsa_switch_vlan_prepare_bitmap(ds, vlan, ds->bitmap); in dsa_switch_vlan_add()
219 dsa_switch_vlan_add_bitmap(ds, vlan, ds->bitmap); in dsa_switch_vlan_add()
224 static int dsa_switch_vlan_del(struct dsa_switch *ds, in dsa_switch_vlan_del() argument
229 if (!ds->ops->port_vlan_del) in dsa_switch_vlan_del()
232 if (ds->index == info->sw_index) in dsa_switch_vlan_del()
233 return ds->ops->port_vlan_del(ds, info->port, vlan); in dsa_switch_vlan_del()
241 struct dsa_switch *ds = container_of(nb, struct dsa_switch, nb); in dsa_switch_event() local
246 err = dsa_switch_ageing_time(ds, info); in dsa_switch_event()
249 err = dsa_switch_bridge_join(ds, info); in dsa_switch_event()
252 err = dsa_switch_bridge_leave(ds, info); in dsa_switch_event()
255 err = dsa_switch_fdb_add(ds, info); in dsa_switch_event()
258 err = dsa_switch_fdb_del(ds, info); in dsa_switch_event()
261 err = dsa_switch_mdb_add(ds, info); in dsa_switch_event()
264 err = dsa_switch_mdb_del(ds, info); in dsa_switch_event()
267 err = dsa_switch_vlan_add(ds, info); in dsa_switch_event()
270 err = dsa_switch_vlan_del(ds, info); in dsa_switch_event()
282 dev_dbg(ds->dev, "breaking chain for DSA event %lu (%d)\n", in dsa_switch_event()
288 int dsa_switch_register_notifier(struct dsa_switch *ds) in dsa_switch_register_notifier() argument
290 ds->nb.notifier_call = dsa_switch_event; in dsa_switch_register_notifier()
292 return raw_notifier_chain_register(&ds->dst->nh, &ds->nb); in dsa_switch_register_notifier()
295 void dsa_switch_unregister_notifier(struct dsa_switch *ds) in dsa_switch_unregister_notifier() argument
299 err = raw_notifier_chain_unregister(&ds->dst->nh, &ds->nb); in dsa_switch_unregister_notifier()
301 dev_err(ds->dev, "failed to unregister notifier (%d)\n", err); in dsa_switch_unregister_notifier()