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: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a8168b6cee
commit
2a93c1a365
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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 {
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# 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);
|
||||||
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)
|
||||||
}
|
}
|
||||||
#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 = {
|
||||||
.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,
|
||||||
|
|
Loading…
Reference in New Issue