3c8bb92655
It backports brcmfmac commits from kernel 4.17. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
349 lines
11 KiB
Diff
349 lines
11 KiB
Diff
From 34789d0cf682c643862792750a06c31ccf016cbc Mon Sep 17 00:00:00 2001
|
|
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
|
Date: Thu, 22 Mar 2018 21:28:24 +0100
|
|
Subject: [PATCH] brcmfmac: use wiphy debugfs dir entry
|
|
|
|
The driver used to create a brcmfmac dir entry at the top level
|
|
debugfs mount point. This moves the debugfs entries into the
|
|
wiphy debugfs dir entry.
|
|
|
|
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
|
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
|
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 6 ++++
|
|
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 5 ---
|
|
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 11 +++---
|
|
.../wireless/broadcom/brcm80211/brcmfmac/debug.c | 42 ++--------------------
|
|
.../wireless/broadcom/brcm80211/brcmfmac/debug.h | 17 ---------
|
|
.../wireless/broadcom/brcm80211/brcmfmac/feature.c | 3 ++
|
|
.../wireless/broadcom/brcm80211/brcmfmac/feature.h | 7 ++++
|
|
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 11 +++---
|
|
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 1 +
|
|
.../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 8 +++--
|
|
.../wireless/broadcom/brcm80211/brcmfmac/proto.c | 3 +-
|
|
.../wireless/broadcom/brcm80211/brcmfmac/proto.h | 7 ++++
|
|
12 files changed, 47 insertions(+), 74 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
|
@@ -445,6 +445,11 @@ brcmf_proto_bcdc_init_done(struct brcmf_
|
|
return 0;
|
|
}
|
|
|
|
+static void brcmf_proto_bcdc_debugfs_create(struct brcmf_pub *drvr)
|
|
+{
|
|
+ brcmf_fws_debugfs_create(drvr);
|
|
+}
|
|
+
|
|
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
|
{
|
|
struct brcmf_bcdc *bcdc;
|
|
@@ -472,6 +477,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
|
|
drvr->proto->del_if = brcmf_proto_bcdc_del_if;
|
|
drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
|
|
drvr->proto->init_done = brcmf_proto_bcdc_init_done;
|
|
+ drvr->proto->debugfs_create = brcmf_proto_bcdc_debugfs_create;
|
|
drvr->proto->pd = bcdc;
|
|
|
|
drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
|
@@ -529,9 +529,6 @@ static int __init brcmfmac_module_init(v
|
|
{
|
|
int err;
|
|
|
|
- /* Initialize debug system first */
|
|
- brcmf_debugfs_init();
|
|
-
|
|
/* Get the platform data (if available) for our devices */
|
|
err = platform_driver_probe(&brcmf_pd, brcmf_common_pd_probe);
|
|
if (err == -ENODEV)
|
|
@@ -543,7 +540,6 @@ static int __init brcmfmac_module_init(v
|
|
/* Continue the initialization by registering the different busses */
|
|
err = brcmf_core_init();
|
|
if (err) {
|
|
- brcmf_debugfs_exit();
|
|
if (brcmfmac_pdata)
|
|
platform_driver_unregister(&brcmf_pd);
|
|
}
|
|
@@ -556,7 +552,6 @@ static void __exit brcmfmac_module_exit(
|
|
brcmf_core_exit();
|
|
if (brcmfmac_pdata)
|
|
platform_driver_unregister(&brcmf_pd);
|
|
- brcmf_debugfs_exit();
|
|
}
|
|
|
|
module_init(brcmfmac_module_init);
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
@@ -1050,8 +1050,6 @@ static int brcmf_bus_started(struct brcm
|
|
if (ret < 0)
|
|
goto fail;
|
|
|
|
- brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
|
-
|
|
brcmf_feat_attach(drvr);
|
|
|
|
ret = brcmf_proto_init_done(drvr);
|
|
@@ -1094,6 +1092,11 @@ static int brcmf_bus_started(struct brcm
|
|
#endif
|
|
#endif /* CONFIG_INET */
|
|
|
|
+ /* populate debugfs */
|
|
+ brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
|
|
+ brcmf_feat_debugfs_create(drvr);
|
|
+ brcmf_proto_debugfs_create(drvr);
|
|
+
|
|
return 0;
|
|
|
|
fail:
|
|
@@ -1146,9 +1149,6 @@ int brcmf_attach(struct device *dev, str
|
|
drvr->bus_if->drvr = drvr;
|
|
drvr->settings = settings;
|
|
|
|
- /* attach debug facilities */
|
|
- brcmf_debug_attach(drvr);
|
|
-
|
|
/* Attach and link in the protocol */
|
|
ret = brcmf_proto_attach(drvr);
|
|
if (ret != 0) {
|
|
@@ -1238,7 +1238,6 @@ void brcmf_detach(struct device *dev)
|
|
|
|
brcmf_proto_detach(drvr);
|
|
|
|
- brcmf_debug_detach(drvr);
|
|
bus_if->drvr = NULL;
|
|
wiphy_free(drvr->wiphy);
|
|
}
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
|
@@ -25,8 +25,6 @@
|
|
#include "fweh.h"
|
|
#include "debug.h"
|
|
|
|
-static struct dentry *root_folder;
|
|
-
|
|
int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
|
|
size_t len)
|
|
{
|
|
@@ -54,44 +52,9 @@ int brcmf_debug_create_memdump(struct br
|
|
return 0;
|
|
}
|
|
|
|
-void brcmf_debugfs_init(void)
|
|
-{
|
|
- root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
|
|
- if (IS_ERR(root_folder))
|
|
- root_folder = NULL;
|
|
-}
|
|
-
|
|
-void brcmf_debugfs_exit(void)
|
|
-{
|
|
- if (!root_folder)
|
|
- return;
|
|
-
|
|
- debugfs_remove_recursive(root_folder);
|
|
- root_folder = NULL;
|
|
-}
|
|
-
|
|
-int brcmf_debug_attach(struct brcmf_pub *drvr)
|
|
-{
|
|
- struct device *dev = drvr->bus_if->dev;
|
|
-
|
|
- if (!root_folder)
|
|
- return -ENODEV;
|
|
-
|
|
- drvr->dbgfs_dir = debugfs_create_dir(dev_name(dev), root_folder);
|
|
- return PTR_ERR_OR_ZERO(drvr->dbgfs_dir);
|
|
-}
|
|
-
|
|
-void brcmf_debug_detach(struct brcmf_pub *drvr)
|
|
-{
|
|
- brcmf_fweh_unregister(drvr, BRCMF_E_PSM_WATCHDOG);
|
|
-
|
|
- if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
|
|
- debugfs_remove_recursive(drvr->dbgfs_dir);
|
|
-}
|
|
-
|
|
struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
|
|
{
|
|
- return drvr->dbgfs_dir;
|
|
+ return drvr->wiphy->debugfsdir;
|
|
}
|
|
|
|
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
|
@@ -99,7 +62,8 @@ int brcmf_debugfs_add_entry(struct brcmf
|
|
{
|
|
struct dentry *e;
|
|
|
|
+ WARN(!drvr->wiphy->debugfsdir, "wiphy not (yet) registered\n");
|
|
e = debugfs_create_devm_seqfile(drvr->bus_if->dev, fn,
|
|
- drvr->dbgfs_dir, read_fn);
|
|
+ drvr->wiphy->debugfsdir, read_fn);
|
|
return PTR_ERR_OR_ZERO(e);
|
|
}
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
|
|
@@ -113,29 +113,12 @@ extern int brcmf_msg_level;
|
|
struct brcmf_bus;
|
|
struct brcmf_pub;
|
|
#ifdef DEBUG
|
|
-void brcmf_debugfs_init(void);
|
|
-void brcmf_debugfs_exit(void);
|
|
-int brcmf_debug_attach(struct brcmf_pub *drvr);
|
|
-void brcmf_debug_detach(struct brcmf_pub *drvr);
|
|
struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
|
|
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
|
int (*read_fn)(struct seq_file *seq, void *data));
|
|
int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
|
|
size_t len);
|
|
#else
|
|
-static inline void brcmf_debugfs_init(void)
|
|
-{
|
|
-}
|
|
-static inline void brcmf_debugfs_exit(void)
|
|
-{
|
|
-}
|
|
-static inline int brcmf_debug_attach(struct brcmf_pub *drvr)
|
|
-{
|
|
- return 0;
|
|
-}
|
|
-static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
|
|
-{
|
|
-}
|
|
static inline
|
|
int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
|
|
int (*read_fn)(struct seq_file *seq, void *data))
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
|
@@ -228,7 +228,10 @@ void brcmf_feat_attach(struct brcmf_pub
|
|
/* no quirks */
|
|
break;
|
|
}
|
|
+}
|
|
|
|
+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr)
|
|
+{
|
|
brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
|
|
}
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
|
|
@@ -90,6 +90,13 @@ enum brcmf_feat_quirk {
|
|
void brcmf_feat_attach(struct brcmf_pub *drvr);
|
|
|
|
/**
|
|
+ * brcmf_feat_debugfs_create() - create debugfs entries.
|
|
+ *
|
|
+ * @drvr: driver instance.
|
|
+ */
|
|
+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr);
|
|
+
|
|
+/**
|
|
* brcmf_feat_is_enabled() - query feature.
|
|
*
|
|
* @ifp: interface instance.
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
@@ -2399,10 +2399,6 @@ struct brcmf_fws_info *brcmf_fws_attach(
|
|
brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
|
|
BRCMF_FWS_PSQ_LEN);
|
|
|
|
- /* create debugfs file for statistics */
|
|
- brcmf_debugfs_add_entry(drvr, "fws_stats",
|
|
- brcmf_debugfs_fws_stats_read);
|
|
-
|
|
brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
|
|
fws->fw_signals ? "enabled" : "disabled", tlv);
|
|
return fws;
|
|
@@ -2429,6 +2425,13 @@ void brcmf_fws_detach(struct brcmf_fws_i
|
|
kfree(fws);
|
|
}
|
|
|
|
+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr)
|
|
+{
|
|
+ /* create debugfs file for statistics */
|
|
+ brcmf_debugfs_add_entry(drvr, "fws_stats",
|
|
+ brcmf_debugfs_fws_stats_read);
|
|
+}
|
|
+
|
|
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws)
|
|
{
|
|
return !fws->avoid_queueing;
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
|
@@ -20,6 +20,7 @@
|
|
|
|
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
|
void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
|
+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr);
|
|
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
|
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
|
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
@@ -1418,6 +1418,11 @@ static int brcmf_msgbuf_stats_read(struc
|
|
}
|
|
#endif
|
|
|
|
+static void brcmf_msgbuf_debugfs_create(struct brcmf_pub *drvr)
|
|
+{
|
|
+ brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
|
|
+}
|
|
+
|
|
int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
|
|
{
|
|
struct brcmf_bus_msgbuf *if_msgbuf;
|
|
@@ -1472,6 +1477,7 @@ int brcmf_proto_msgbuf_attach(struct brc
|
|
drvr->proto->delete_peer = brcmf_msgbuf_delete_peer;
|
|
drvr->proto->add_tdls_peer = brcmf_msgbuf_add_tdls_peer;
|
|
drvr->proto->rxreorder = brcmf_msgbuf_rxreorder;
|
|
+ drvr->proto->debugfs_create = brcmf_msgbuf_debugfs_create;
|
|
drvr->proto->pd = msgbuf;
|
|
|
|
init_waitqueue_head(&msgbuf->ioctl_resp_wait);
|
|
@@ -1525,8 +1531,6 @@ int brcmf_proto_msgbuf_attach(struct brc
|
|
spin_lock_init(&msgbuf->flowring_work_lock);
|
|
INIT_LIST_HEAD(&msgbuf->work_queue);
|
|
|
|
- brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
|
|
-
|
|
return 0;
|
|
|
|
fail:
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
|
|
@@ -54,7 +54,8 @@ int brcmf_proto_attach(struct brcmf_pub
|
|
if (!proto->tx_queue_data || (proto->hdrpull == NULL) ||
|
|
(proto->query_dcmd == NULL) || (proto->set_dcmd == NULL) ||
|
|
(proto->configure_addr_mode == NULL) ||
|
|
- (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL)) {
|
|
+ (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL) ||
|
|
+ (proto->debugfs_create == NULL)) {
|
|
brcmf_err("Not all proto handlers have been installed\n");
|
|
goto fail;
|
|
}
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
|
|
@@ -48,6 +48,7 @@ struct brcmf_proto {
|
|
void (*del_if)(struct brcmf_if *ifp);
|
|
void (*reset_if)(struct brcmf_if *ifp);
|
|
int (*init_done)(struct brcmf_pub *drvr);
|
|
+ void (*debugfs_create)(struct brcmf_pub *drvr);
|
|
void *pd;
|
|
};
|
|
|
|
@@ -156,4 +157,10 @@ brcmf_proto_init_done(struct brcmf_pub *
|
|
return drvr->proto->init_done(drvr);
|
|
}
|
|
|
|
+static inline void
|
|
+brcmf_proto_debugfs_create(struct brcmf_pub *drvr)
|
|
+{
|
|
+ drvr->proto->debugfs_create(drvr);
|
|
+}
|
|
+
|
|
#endif /* BRCMFMAC_PROTO_H */
|