diff options
author | Arend van Spriel <arend@broadcom.com> | 2012-06-09 16:51:43 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-06-13 14:35:49 -0400 |
commit | d319a7cfd9d80a2e2359e978ba88991531312ee6 (patch) | |
tree | 77164556f82eaf773f9785207190ce50aa5a5bef /drivers/net | |
parent | 5e16e8ee3a14b59366d25f075926da3ca5d03d11 (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/Makefile | 2 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c | 63 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 23 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 7 |
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 |
35 | brcmfmac-$(CONFIG_BRCMFMAC_USB) += \ | 35 | brcmfmac-$(CONFIG_BRCMFMAC_USB) += \ |
36 | usb.o | 36 | usb.o |
37 | brcmfmac-$(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 | ||
618 | struct brcmf_if_event { | 621 | struct 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 | |||
27 | static struct dentry *root_folder; | ||
28 | |||
29 | void 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 | |||
36 | void brcmf_debugfs_exit(void) | ||
37 | { | ||
38 | if (!root_folder) | ||
39 | return; | ||
40 | |||
41 | debugfs_remove_recursive(root_folder); | ||
42 | root_folder = NULL; | ||
43 | } | ||
44 | |||
45 | int 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 | |||
54 | void 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 | |||
60 | struct 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 | ||
77 | extern int brcmf_msg_level; | 77 | extern int brcmf_msg_level; |
78 | 78 | ||
79 | struct brcmf_pub; | ||
80 | #ifdef DEBUG | ||
81 | void brcmf_debugfs_init(void); | ||
82 | void brcmf_debugfs_exit(void); | ||
83 | int brcmf_debugfs_attach(struct brcmf_pub *drvr); | ||
84 | void brcmf_debugfs_detach(struct brcmf_pub *drvr); | ||
85 | struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr); | ||
86 | #else | ||
87 | static inline void brcmf_debugfs_init(void) | ||
88 | { | ||
89 | } | ||
90 | static inline void brcmf_debugfs_exit(void) | ||
91 | { | ||
92 | } | ||
93 | static inline int brcmf_debugfs_attach(struct brcmf_pub *drvr) | ||
94 | { | ||
95 | return 0; | ||
96 | } | ||
97 | static 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 | ||
1193 | static void brcmf_driver_init(struct work_struct *work) | 1197 | static 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 | ||
1224 | module_init(brcmfmac_module_init); | 1231 | module_init(brcmfmac_module_init); |