aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/dsa.h
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2015-02-24 16:15:33 -0500
committerDavid S. Miller <davem@davemloft.net>2015-02-25 17:03:38 -0500
commitb73adef67765b72f2a0d01ef15aff9d784dc85da (patch)
tree829c9c90cffe94d00a1a7ee568c9464fdcf0efae /include/net/dsa.h
parentd87d6f44d7c1254fd9560a5191659cb00882db56 (diff)
net: dsa: integrate with SWITCHDEV for HW bridging
In order to support bridging offloads in DSA switch drivers, select NET_SWITCHDEV to get access to the port_stp_update and parent_get_id NDOs that we are required to implement. To facilitate the integratation at the DSA driver level, we implement 3 types of operations: - port_join_bridge - port_leave_bridge - port_stp_update DSA will resolve which switch ports that are currently bridge port members as some Switch hardware/drivers need to know about that to limit the register programming to just the relevant registers (especially for slow MDIO buses). We also take care of setting the correct STP state when slave network devices are brought up/down while being bridge members. Finally, when a port is leaving the bridge, we make sure we set in BR_STATE_FORWARDING state, otherwise the bridge layer would leave it disabled as a result of having left the bridge. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/dsa.h')
-rw-r--r--include/net/dsa.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/net/dsa.h b/include/net/dsa.h
index ed3c34bbb67a..92be34791963 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -275,6 +275,16 @@ struct dsa_switch_driver {
275 int (*get_regs_len)(struct dsa_switch *ds, int port); 275 int (*get_regs_len)(struct dsa_switch *ds, int port);
276 void (*get_regs)(struct dsa_switch *ds, int port, 276 void (*get_regs)(struct dsa_switch *ds, int port,
277 struct ethtool_regs *regs, void *p); 277 struct ethtool_regs *regs, void *p);
278
279 /*
280 * Bridge integration
281 */
282 int (*port_join_bridge)(struct dsa_switch *ds, int port,
283 u32 br_port_mask);
284 int (*port_leave_bridge)(struct dsa_switch *ds, int port,
285 u32 br_port_mask);
286 int (*port_stp_update)(struct dsa_switch *ds, int port,
287 u8 state);
278}; 288};
279 289
280void register_switch_driver(struct dsa_switch_driver *type); 290void register_switch_driver(struct dsa_switch_driver *type);