Commit 2a93c1a3 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: Allow compiling out legacy support

Introduce a configuration option: CONFIG_NET_DSA_LEGACY allowing to compile out
support for the old platform device and Device Tree binding registration.
Support for these configurations is scheduled to be removed in 4.17.
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a8168b6c
...@@ -33,7 +33,7 @@ config NET_DSA_MT7530 ...@@ -33,7 +33,7 @@ config NET_DSA_MT7530
config NET_DSA_MV88E6060 config NET_DSA_MV88E6060
tristate "Marvell 88E6060 ethernet switch chip support" tristate "Marvell 88E6060 ethernet switch chip support"
depends on NET_DSA depends on NET_DSA && NET_DSA_LEGACY
select NET_DSA_TAG_TRAILER select NET_DSA_TAG_TRAILER
---help--- ---help---
This enables support for the Marvell 88E6060 ethernet switch This enables support for the Marvell 88E6060 ethernet switch
......
...@@ -3755,6 +3755,7 @@ static enum dsa_tag_protocol mv88e6xxx_get_tag_protocol(struct dsa_switch *ds, ...@@ -3755,6 +3755,7 @@ static enum dsa_tag_protocol mv88e6xxx_get_tag_protocol(struct dsa_switch *ds,
return chip->info->tag_protocol; return chip->info->tag_protocol;
} }
#if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
static const char *mv88e6xxx_drv_probe(struct device *dsa_dev, static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
struct device *host_dev, int sw_addr, struct device *host_dev, int sw_addr,
void **priv) void **priv)
...@@ -3802,6 +3803,7 @@ static const char *mv88e6xxx_drv_probe(struct device *dsa_dev, ...@@ -3802,6 +3803,7 @@ static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
return NULL; return NULL;
} }
#endif
static int mv88e6xxx_port_mdb_prepare(struct dsa_switch *ds, int port, static int mv88e6xxx_port_mdb_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_mdb *mdb) const struct switchdev_obj_port_mdb *mdb)
...@@ -3841,7 +3843,9 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port, ...@@ -3841,7 +3843,9 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port,
} }
static const struct dsa_switch_ops mv88e6xxx_switch_ops = { static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
#if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
.probe = mv88e6xxx_drv_probe, .probe = mv88e6xxx_drv_probe,
#endif
.get_tag_protocol = mv88e6xxx_get_tag_protocol, .get_tag_protocol = mv88e6xxx_get_tag_protocol,
.setup = mv88e6xxx_setup, .setup = mv88e6xxx_setup,
.adjust_link = mv88e6xxx_adjust_link, .adjust_link = mv88e6xxx_adjust_link,
......
...@@ -321,12 +321,14 @@ static inline unsigned int dsa_upstream_port(struct dsa_switch *ds, int port) ...@@ -321,12 +321,14 @@ static inline unsigned int dsa_upstream_port(struct dsa_switch *ds, int port)
typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid, typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid,
bool is_static, void *data); bool is_static, void *data);
struct dsa_switch_ops { struct dsa_switch_ops {
#if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
/* /*
* Legacy probing. * Legacy probing.
*/ */
const char *(*probe)(struct device *dsa_dev, const char *(*probe)(struct device *dsa_dev,
struct device *host_dev, int sw_addr, struct device *host_dev, int sw_addr,
void **priv); void **priv);
#endif
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *ds, enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *ds,
int port); int port);
...@@ -474,11 +476,20 @@ struct dsa_switch_driver { ...@@ -474,11 +476,20 @@ struct dsa_switch_driver {
const struct dsa_switch_ops *ops; const struct dsa_switch_ops *ops;
}; };
#if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
/* Legacy driver registration */ /* Legacy driver registration */
void register_switch_driver(struct dsa_switch_driver *type); void register_switch_driver(struct dsa_switch_driver *type);
void unregister_switch_driver(struct dsa_switch_driver *type); void unregister_switch_driver(struct dsa_switch_driver *type);
struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev); struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev);
#else
static inline void register_switch_driver(struct dsa_switch_driver *type) { }
static inline void unregister_switch_driver(struct dsa_switch_driver *type) { }
static inline struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev)
{
return NULL;
}
#endif
struct net_device *dsa_dev_to_net_device(struct device *dev); struct net_device *dsa_dev_to_net_device(struct device *dev);
/* Keep inline for faster access in hot path */ /* Keep inline for faster access in hot path */
......
...@@ -16,6 +16,15 @@ config NET_DSA ...@@ -16,6 +16,15 @@ config NET_DSA
if NET_DSA if NET_DSA
config NET_DSA_LEGACY
bool "Support for older platform device and Device Tree registration"
default y
---help---
Say Y if you want to enable support for the older platform device and
deprecated Device Tree binding registration.
This feature is scheduled for removal in 4.17.
# tagging formats # tagging formats
config NET_DSA_TAG_BRCM config NET_DSA_TAG_BRCM
bool bool
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
# the core # the core
obj-$(CONFIG_NET_DSA) += dsa_core.o obj-$(CONFIG_NET_DSA) += dsa_core.o
dsa_core-y += dsa.o dsa2.o legacy.o master.o port.o slave.o switch.o dsa_core-y += dsa.o dsa2.o master.o port.o slave.o switch.o
dsa_core-$(CONFIG_NET_DSA_LEGACY) += legacy.o
# tagging formats # tagging formats
dsa_core-$(CONFIG_NET_DSA_TAG_BRCM) += tag_brcm.o dsa_core-$(CONFIG_NET_DSA_TAG_BRCM) += tag_brcm.o
......
...@@ -97,8 +97,17 @@ const struct dsa_device_ops *dsa_resolve_tag_protocol(int tag_protocol); ...@@ -97,8 +97,17 @@ const struct dsa_device_ops *dsa_resolve_tag_protocol(int tag_protocol);
bool dsa_schedule_work(struct work_struct *work); bool dsa_schedule_work(struct work_struct *work);
/* legacy.c */ /* legacy.c */
#if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
int dsa_legacy_register(void); int dsa_legacy_register(void);
void dsa_legacy_unregister(void); void dsa_legacy_unregister(void);
#else
static inline int dsa_legacy_register(void)
{
return -ENODEV;
}
static inline void dsa_legacy_unregister(void) { }
#endif
int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev, struct net_device *dev,
const unsigned char *addr, u16 vid, const unsigned char *addr, u16 vid,
......
...@@ -718,26 +718,6 @@ static int dsa_resume(struct device *d) ...@@ -718,26 +718,6 @@ static int dsa_resume(struct device *d)
} }
#endif #endif
/* legacy way, bypassing the bridge *****************************************/
int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr, u16 vid,
u16 flags)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
return dsa_port_fdb_add(dp, addr, vid);
}
int dsa_legacy_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr, u16 vid)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
return dsa_port_fdb_del(dp, addr, vid);
}
static SIMPLE_DEV_PM_OPS(dsa_pm_ops, dsa_suspend, dsa_resume); static SIMPLE_DEV_PM_OPS(dsa_pm_ops, dsa_suspend, dsa_resume);
static const struct of_device_id dsa_of_match_table[] = { static const struct of_device_id dsa_of_match_table[] = {
......
...@@ -941,6 +941,26 @@ static const struct ethtool_ops dsa_slave_ethtool_ops = { ...@@ -941,6 +941,26 @@ static const struct ethtool_ops dsa_slave_ethtool_ops = {
.set_rxnfc = dsa_slave_set_rxnfc, .set_rxnfc = dsa_slave_set_rxnfc,
}; };
/* legacy way, bypassing the bridge *****************************************/
int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr, u16 vid,
u16 flags)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
return dsa_port_fdb_add(dp, addr, vid);
}
int dsa_legacy_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
struct net_device *dev,
const unsigned char *addr, u16 vid)
{
struct dsa_port *dp = dsa_slave_to_port(dev);
return dsa_port_fdb_del(dp, addr, vid);
}
static const struct net_device_ops dsa_slave_netdev_ops = { static const struct net_device_ops dsa_slave_netdev_ops = {
.ndo_open = dsa_slave_open, .ndo_open = dsa_slave_open,
.ndo_stop = dsa_slave_close, .ndo_stop = dsa_slave_close,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment