Lines Matching +full:dp +full:- +full:bridge
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * net/dsa/dsa_priv.h - Hardware switch handling
4 * Copyright (c) 2008-2009 Marvell Semiconductor
57 const struct dsa_port *dp; member
58 struct dsa_bridge bridge; member
65 const struct dsa_port *dp; member
81 const struct dsa_port *dp; member
88 const struct dsa_port *dp; member
96 const struct dsa_port *dp; member
103 const struct dsa_port *dp; member
114 const struct dsa_port *dp; member
160 struct dsa_port *dp; member
182 return ops->needed_headroom + ops->needed_tailroom; in dsa_tag_protocol_overhead()
197 struct dsa_port *cpu_dp = dev->dsa_ptr; in dsa_master_find_slave()
198 struct dsa_switch_tree *dst = cpu_dp->dst; in dsa_master_find_slave()
199 struct dsa_port *dp; in dsa_master_find_slave() local
201 list_for_each_entry(dp, &dst->ports, list) in dsa_master_find_slave()
202 if (dp->ds->index == device && dp->index == port && in dsa_master_find_slave()
203 dp->type == DSA_PORT_TYPE_USER) in dsa_master_find_slave()
204 return dp->slave; in dsa_master_find_slave()
213 bool dsa_port_supports_hwtstamp(struct dsa_port *dp, struct ifreq *ifr);
216 int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age);
217 int dsa_port_set_mst_state(struct dsa_port *dp,
220 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
221 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
222 void dsa_port_disable_rt(struct dsa_port *dp);
223 void dsa_port_disable(struct dsa_port *dp);
224 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
226 void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br);
227 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
228 int dsa_port_lag_change(struct dsa_port *dp,
230 int dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
233 void dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
234 void dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
235 int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
237 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp);
238 int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock);
239 int dsa_port_mst_enable(struct dsa_port *dp, bool on,
241 int dsa_port_vlan_msti(struct dsa_port *dp,
243 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu);
244 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
246 int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
248 int dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
250 int dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
252 int dsa_port_bridge_host_fdb_add(struct dsa_port *dp, const unsigned char *addr,
254 int dsa_port_bridge_host_fdb_del(struct dsa_port *dp, const unsigned char *addr,
256 int dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
258 int dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
260 int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data);
261 int dsa_port_mdb_add(const struct dsa_port *dp,
263 int dsa_port_mdb_del(const struct dsa_port *dp,
265 int dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
267 int dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
269 int dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
271 int dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
273 int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
276 int dsa_port_bridge_flags(struct dsa_port *dp,
279 int dsa_port_vlan_add(struct dsa_port *dp,
282 int dsa_port_vlan_del(struct dsa_port *dp,
284 int dsa_port_host_vlan_add(struct dsa_port *dp,
287 int dsa_port_host_vlan_del(struct dsa_port *dp,
289 int dsa_port_mrp_add(const struct dsa_port *dp,
291 int dsa_port_mrp_del(const struct dsa_port *dp,
293 int dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
295 int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
297 int dsa_port_phylink_create(struct dsa_port *dp);
298 void dsa_port_phylink_destroy(struct dsa_port *dp);
299 int dsa_shared_port_link_register_of(struct dsa_port *dp);
300 void dsa_shared_port_link_unregister_of(struct dsa_port *dp);
301 int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr);
302 void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr);
303 int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast);
304 void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast);
305 void dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc);
306 int dsa_port_change_master(struct dsa_port *dp, struct net_device *master,
315 int dsa_slave_create(struct dsa_port *dp);
334 return p->dp; in dsa_slave_to_port()
340 struct dsa_port *dp = dsa_slave_to_port(dev); in dsa_slave_to_master() local
342 return dsa_port_to_master(dp); in dsa_slave_to_master()
345 /* If under a bridge with vlan_filtering=0, make sure to send pvid-tagged
346 * frames as untagged, since the bridge will not untag them.
350 struct dsa_port *dp = dsa_slave_to_port(skb->dev); in dsa_untag_bridge_pvid() local
351 struct net_device *br = dsa_port_bridge_dev_get(dp); in dsa_untag_bridge_pvid()
352 struct net_device *dev = skb->dev; in dsa_untag_bridge_pvid()
365 if (!skb_vlan_tag_present(skb) && skb->protocol == htons(proto)) { in dsa_untag_bridge_pvid()
376 /* We already run under an RCU read-side critical section since in dsa_untag_bridge_pvid()
388 * the bridge's data path - br_allowed_ingress() - or not. in dsa_untag_bridge_pvid()
390 * default_pvid of the bridge, which will steal VLAN-tagged traffic in dsa_untag_bridge_pvid()
391 * from the bridge's data path. This is a configuration that DSA in dsa_untag_bridge_pvid()
405 * to support termination through the bridge.
410 struct dsa_port *cpu_dp = master->dsa_ptr; in dsa_find_designated_bridge_port_by_vid()
411 struct dsa_switch_tree *dst = cpu_dp->dst; in dsa_find_designated_bridge_port_by_vid()
414 struct dsa_port *dp; in dsa_find_designated_bridge_port_by_vid() local
417 list_for_each_entry(dp, &dst->ports, list) { in dsa_find_designated_bridge_port_by_vid()
418 if (dp->type != DSA_PORT_TYPE_USER) in dsa_find_designated_bridge_port_by_vid()
421 if (!dp->bridge) in dsa_find_designated_bridge_port_by_vid()
424 if (dp->stp_state != BR_STATE_LEARNING && in dsa_find_designated_bridge_port_by_vid()
425 dp->stp_state != BR_STATE_FORWARDING) in dsa_find_designated_bridge_port_by_vid()
428 /* Since the bridge might learn this packet, keep the CPU port in dsa_find_designated_bridge_port_by_vid()
432 if (dp->cpu_dp != cpu_dp) in dsa_find_designated_bridge_port_by_vid()
435 slave = dp->slave; in dsa_find_designated_bridge_port_by_vid()
447 /* If the ingress port offloads the bridge, we mark the frame as autonomously
448 * forwarded by hardware, so the software bridge doesn't forward in twice, back
450 * software bridging, we are not offloading it, therefore the dp->bridge
456 struct dsa_port *dp = dsa_slave_to_port(skb->dev); in dsa_default_offload_fwd_mark() local
458 skb->offload_fwd_mark = !!(dp->bridge); in dsa_default_offload_fwd_mark()
463 * skb->data
467 * +-----------------------+-----------------------+---------------+-------+
469 * +-----------------------+-----------------------+---------------+-------+
471 * <----- len -----> <----- len ----->
475 * >>>>>>> +-----------------------+-----------------------+-------+
477 * +-----------------------+-----------------------+-------+
480 * skb->data
484 memmove(skb->data - ETH_HLEN, skb->data - ETH_HLEN - len, 2 * ETH_ALEN); in dsa_strip_etype_header()
493 * ^ <<<<<<< +-----------------------+-----------------------+-------+
495 * | +-----------------------+-----------------------+-------+
496 * <----- len ----->
499 * skb->data
504 * +-----------------------+-----------------------+---------------+-------+
506 * +-----------------------+-----------------------+---------------+-------+
508 * | <----- len ----->
509 * skb->data
513 memmove(skb->data, skb->data + len, 2 * ETH_ALEN); in dsa_alloc_etype_header()
517 * skb_mac_header(skb), which leaves skb->data pointing at the first byte after
521 * is located 2 bytes behind skb->data. Note that EtherType in this context
527 return skb->data - 2; in dsa_etype_header_pos_rx()
530 /* On TX, skb->data points to skb_mac_header(skb), which means that EtherType
536 return skb->data + 2 * ETH_ALEN; in dsa_etype_header_pos_tx()
545 return ds->ops->port_fdb_add && ds->ops->port_fdb_del && in dsa_switch_supports_uc_filtering()
546 ds->fdb_isolation && !ds->vlan_filtering_is_global && in dsa_switch_supports_uc_filtering()
547 !ds->needs_standalone_vlan_filtering; in dsa_switch_supports_uc_filtering()
552 return ds->ops->port_mdb_add && ds->ops->port_mdb_del && in dsa_switch_supports_mc_filtering()
553 ds->fdb_isolation && !ds->vlan_filtering_is_global && in dsa_switch_supports_mc_filtering()
554 !ds->needs_standalone_vlan_filtering; in dsa_switch_supports_mc_filtering()