mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	It backports brcmfmac commits from kernel 4.17. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
		
			
				
	
	
		
			350 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			350 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 */
 |