mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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
					
				
					 8 changed files with 56 additions and 22 deletions
				
			
		| 
						 | 
					@ -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 a new issue