diff options
Diffstat (limited to 'target/linux/ramips/files/drivers')
5 files changed, 91 insertions, 1 deletions
diff --git a/target/linux/ramips/files/drivers/net/ethernet/ramips/Kconfig b/target/linux/ramips/files/drivers/net/ethernet/ramips/Kconfig index 08d7ad170..c821d5bd7 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ramips/Kconfig +++ b/target/linux/ramips/files/drivers/net/ethernet/ramips/Kconfig @@ -10,4 +10,8 @@ if NET_RAMIPS  config NET_RAMIPS_DEBUG         bool "Enable debug messages in the Ralink ethernet driver" +config NET_RAMIPS_DEBUG_FS +	bool "Enable debugfs support for the Ralink ethernet driver" +	depends on DEBUG_FS +  endif diff --git a/target/linux/ramips/files/drivers/net/ethernet/ramips/Makefile b/target/linux/ramips/files/drivers/net/ethernet/ramips/Makefile index 59db90090..22c460d4d 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ramips/Makefile +++ b/target/linux/ramips/files/drivers/net/ethernet/ramips/Makefile @@ -4,4 +4,6 @@  ramips-y	+= ramips_main.o +ramips-$(CONFIG_NET_RAMIPS_DEBUG_FS)	+= ramips_debugfs.o +  obj-$(CONFIG_NET_RAMIPS)	+= ramips.o diff --git a/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_debugfs.c b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_debugfs.c new file mode 100644 index 000000000..8e06b744a --- /dev/null +++ b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_debugfs.c @@ -0,0 +1,49 @@ +/* + *  Ralink SoC ethernet driver debugfs code + * + *  Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org> + * + *  This program is free software; you can redistribute it and/or modify it + *  under the terms of the GNU General Public License version 2 as published + *  by the Free Software Foundation. + */ + +#include <linux/debugfs.h> +#include <linux/phy.h> + +#include "ramips_eth.h" + +static struct dentry *raeth_debugfs_root; + +void raeth_debugfs_exit(struct raeth_priv *re) +{ +	debugfs_remove_recursive(re->debug.debugfs_dir); +} + +int raeth_debugfs_init(struct raeth_priv *re) +{ +	re->debug.debugfs_dir = debugfs_create_dir(re->netdev->name, +						   raeth_debugfs_root); +	if (!re->debug.debugfs_dir) +		return -ENOMEM; + +	return 0; +} + +int raeth_debugfs_root_init(void) +{ +	if (raeth_debugfs_root) +		return -EBUSY; + +	raeth_debugfs_root = debugfs_create_dir("raeth", NULL); +	if (!raeth_debugfs_root) +		return -ENOENT; + +	return 0; +} + +void raeth_debugfs_root_exit(void) +{ +	debugfs_remove(raeth_debugfs_root); +	raeth_debugfs_root = NULL; +} diff --git a/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h index 1d151df68..ea3e92340 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h +++ b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h @@ -213,6 +213,10 @@ struct ramips_tx_dma {  	unsigned int txd4;  } __packed __aligned(4); +struct raeth_debug { +	struct dentry		*debugfs_dir; +}; +  struct raeth_priv  {  	dma_addr_t		rx_desc_dma; @@ -243,6 +247,22 @@ struct raeth_priv  	int			mii_irq[PHY_MAX_ADDR];  	struct phy_device	*phy_dev;  	spinlock_t		phy_lock; + +#ifdef CONFIG_NET_RAMIPS_DEBUG_FS +	struct raeth_debug	debug; +#endif  }; +#ifdef CONFIG_NET_RAMIPS_DEBUG_FS +int raeth_debugfs_root_init(void); +void raeth_debugfs_root_exit(void); +int raeth_debugfs_init(struct raeth_priv *re); +void raeth_debugfs_exit(struct raeth_priv *re); +#else +static inline int raeth_debugfs_root_init(void) { return 0; } +static inline void raeth_debugfs_root_exit(void) {} +static inline int raeth_debugfs_init(struct raeth_priv *re) { return 0; } +static inline void raeth_debugfs_exit(struct raeth_priv *re) {} +#endif /* CONFIG_NET_RAMIPS_DEBUG_FS */ +  #endif /* RAMIPS_ETH_H */ diff --git a/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c index b9979fce5..26c98d85a 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c @@ -874,8 +874,14 @@ ramips_eth_probe(struct net_device *dev)  	if (err)  		goto err_mdio_cleanup; +	err = raeth_debugfs_init(re); +	if (err) +		goto err_phy_disconnect; +  	return 0; +err_phy_disconnect: +	ramips_phy_disconnect(re);  err_mdio_cleanup:  	ramips_mdio_cleanup(re);  	return err; @@ -886,6 +892,7 @@ ramips_eth_uninit(struct net_device *dev)  {  	struct raeth_priv *re = netdev_priv(dev); +	raeth_debugfs_exit(re);  	ramips_phy_disconnect(re);  	ramips_mdio_cleanup(re);  } @@ -992,9 +999,13 @@ ramips_eth_init(void)  {  	int ret; +	ret = raeth_debugfs_root_init(); +	if (ret) +		goto err_out; +  	ret = rt305x_esw_init();  	if (ret) -		return ret; +		goto err_debugfs_exit;  	ret = platform_driver_register(&ramips_eth_driver);  	if (ret) { @@ -1007,6 +1018,9 @@ ramips_eth_init(void)  esw_cleanup:  	rt305x_esw_exit(); +err_debugfs_exit: +	raeth_debugfs_root_exit(); +err_out:  	return ret;  } @@ -1015,6 +1029,7 @@ ramips_eth_cleanup(void)  {  	platform_driver_unregister(&ramips_eth_driver);  	rt305x_esw_exit(); +	raeth_debugfs_root_exit();  }  module_init(ramips_eth_init);  | 
