aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2012-06-09 16:51:43 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-06-13 14:35:49 -0400
commitd319a7cfd9d80a2e2359e978ba88991531312ee6 (patch)
tree77164556f82eaf773f9785207190ce50aa5a5bef /drivers/net
parent5e16e8ee3a14b59366d25f075926da3ca5d03d11 (diff)
brcmfmac: add debugfs helper functions
This patch adds debugfs support to brcmfmac. It provide helper functions to setup the debugfs folder structure for the driver, which has following hierarchy: <debugfs_mount>/brcmfmac/<dev_name>/ ie.: /sys/kernel/debug/brcmfmac/mmc0:0001:2/ The new source file provides functions to create and remove the two folders and a function to retrieve the device-specific folder so files can be created in it. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/Makefile2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd.h3
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c63
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h23
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c7
5 files changed, 98 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/brcm80211/brcmfmac/Makefile
index abb48032753b..9d5170b6df50 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/Makefile
+++ b/drivers/net/wireless/brcm80211/brcmfmac/Makefile
@@ -34,3 +34,5 @@ brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \
34 sdio_chip.o 34 sdio_chip.o
35brcmfmac-$(CONFIG_BRCMFMAC_USB) += \ 35brcmfmac-$(CONFIG_BRCMFMAC_USB) += \
36 usb.o 36 usb.o
37brcmfmac-$(CONFIG_BRCMDBG) += \
38 dhd_dbg.o \ No newline at end of file
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
index 9f637014486e..a11fe54f5950 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
@@ -613,6 +613,9 @@ struct brcmf_pub {
613 struct work_struct multicast_work; 613 struct work_struct multicast_work;
614 u8 macvalue[ETH_ALEN]; 614 u8 macvalue[ETH_ALEN];
615 atomic_t pend_8021x_cnt; 615 atomic_t pend_8021x_cnt;
616#ifdef DEBUG
617 struct dentry *dbgfs_dir;
618#endif
616}; 619};
617 620
618struct brcmf_if_event { 621struct brcmf_if_event {
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c
new file mode 100644
index 000000000000..0a7a3d50df6e
--- /dev/null
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c
@@ -0,0 +1,63 @@
1/*
2 * Copyright (c) 2012 Broadcom Corporation
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16#include <linux/debugfs.h>
17#include <linux/if_ether.h>
18#include <linux/if.h>
19#include <linux/ieee80211.h>
20
21#include <defs.h>
22#include <brcmu_wifi.h>
23#include <brcmu_utils.h>
24#include "dhd.h"
25#include "dhd_bus.h"
26
27static struct dentry *root_folder;
28
29void brcmf_debugfs_init(void)
30{
31 root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
32 if (IS_ERR(root_folder))
33 root_folder = NULL;
34}
35
36void brcmf_debugfs_exit(void)
37{
38 if (!root_folder)
39 return;
40
41 debugfs_remove_recursive(root_folder);
42 root_folder = NULL;
43}
44
45int brcmf_debugfs_attach(struct brcmf_pub *drvr)
46{
47 if (!root_folder)
48 return -ENODEV;
49
50 drvr->dbgfs_dir = debugfs_create_dir(dev_name(drvr->dev), root_folder);
51 return PTR_RET(drvr->dbgfs_dir);
52}
53
54void brcmf_debugfs_detach(struct brcmf_pub *drvr)
55{
56 if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
57 debugfs_remove_recursive(drvr->dbgfs_dir);
58}
59
60struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
61{
62 return drvr->dbgfs_dir;
63}
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h
index a2c4576cf9ff..0efb226030a4 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h
@@ -76,4 +76,27 @@ do { \
76 76
77extern int brcmf_msg_level; 77extern int brcmf_msg_level;
78 78
79struct brcmf_pub;
80#ifdef DEBUG
81void brcmf_debugfs_init(void);
82void brcmf_debugfs_exit(void);
83int brcmf_debugfs_attach(struct brcmf_pub *drvr);
84void brcmf_debugfs_detach(struct brcmf_pub *drvr);
85struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
86#else
87static inline void brcmf_debugfs_init(void)
88{
89}
90static inline void brcmf_debugfs_exit(void)
91{
92}
93static inline int brcmf_debugfs_attach(struct brcmf_pub *drvr)
94{
95 return 0;
96}
97static inline void brcmf_debugfs_detach(struct brcmf_pub *drvr)
98{
99}
100#endif
101
79#endif /* _BRCMF_DBG_H_ */ 102#endif /* _BRCMF_DBG_H_ */
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
index 8933f9b31a9a..01cf6c03390b 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
@@ -1007,6 +1007,9 @@ int brcmf_attach(uint bus_hdrlen, struct device *dev)
1007 drvr->bus_if->drvr = drvr; 1007 drvr->bus_if->drvr = drvr;
1008 drvr->dev = dev; 1008 drvr->dev = dev;
1009 1009
1010 /* create device debugfs folder */
1011 brcmf_debugfs_attach(drvr);
1012
1010 /* Attach and link in the protocol */ 1013 /* Attach and link in the protocol */
1011 ret = brcmf_proto_attach(drvr); 1014 ret = brcmf_proto_attach(drvr);
1012 if (ret != 0) { 1015 if (ret != 0) {
@@ -1123,6 +1126,7 @@ void brcmf_detach(struct device *dev)
1123 brcmf_proto_detach(drvr); 1126 brcmf_proto_detach(drvr);
1124 } 1127 }
1125 1128
1129 brcmf_debugfs_detach(drvr);
1126 bus_if->drvr = NULL; 1130 bus_if->drvr = NULL;
1127 kfree(drvr); 1131 kfree(drvr);
1128} 1132}
@@ -1192,6 +1196,8 @@ exit:
1192 1196
1193static void brcmf_driver_init(struct work_struct *work) 1197static void brcmf_driver_init(struct work_struct *work)
1194{ 1198{
1199 brcmf_debugfs_init();
1200
1195#ifdef CONFIG_BRCMFMAC_SDIO 1201#ifdef CONFIG_BRCMFMAC_SDIO
1196 brcmf_sdio_init(); 1202 brcmf_sdio_init();
1197#endif 1203#endif
@@ -1219,6 +1225,7 @@ static void __exit brcmfmac_module_exit(void)
1219#ifdef CONFIG_BRCMFMAC_USB 1225#ifdef CONFIG_BRCMFMAC_USB
1220 brcmf_usb_exit(); 1226 brcmf_usb_exit();
1221#endif 1227#endif
1228 brcmf_debugfs_exit();
1222} 1229}
1223 1230
1224module_init(brcmfmac_module_init); 1231module_init(brcmfmac_module_init);