mac80211: brcmfmac: backport 4.19 patches preparing monitor mode support
[openwrt/staging/wigyori.git] / package / kernel / mac80211 / patches / 327-v4.17-0005-brcmfmac-use-wiphy-debugfs-dir-entry.patch
1 From 34789d0cf682c643862792750a06c31ccf016cbc Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Thu, 22 Mar 2018 21:28:24 +0100
4 Subject: [PATCH] brcmfmac: use wiphy debugfs dir entry
5
6 The driver used to create a brcmfmac dir entry at the top level
7 debugfs mount point. This moves the debugfs entries into the
8 wiphy debugfs dir entry.
9
10 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
11 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
12 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
13 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 ---
16 .../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 6 ++++
17 .../wireless/broadcom/brcm80211/brcmfmac/common.c | 5 ---
18 .../wireless/broadcom/brcm80211/brcmfmac/core.c | 11 +++---
19 .../wireless/broadcom/brcm80211/brcmfmac/debug.c | 42 ++--------------------
20 .../wireless/broadcom/brcm80211/brcmfmac/debug.h | 17 ---------
21 .../wireless/broadcom/brcm80211/brcmfmac/feature.c | 3 ++
22 .../wireless/broadcom/brcm80211/brcmfmac/feature.h | 7 ++++
23 .../broadcom/brcm80211/brcmfmac/fwsignal.c | 11 +++---
24 .../broadcom/brcm80211/brcmfmac/fwsignal.h | 1 +
25 .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 8 +++--
26 .../wireless/broadcom/brcm80211/brcmfmac/proto.c | 3 +-
27 .../wireless/broadcom/brcm80211/brcmfmac/proto.h | 7 ++++
28 12 files changed, 47 insertions(+), 74 deletions(-)
29
30 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
31 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
32 @@ -445,6 +445,11 @@ brcmf_proto_bcdc_init_done(struct brcmf_
33 return 0;
34 }
35
36 +static void brcmf_proto_bcdc_debugfs_create(struct brcmf_pub *drvr)
37 +{
38 + brcmf_fws_debugfs_create(drvr);
39 +}
40 +
41 int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
42 {
43 struct brcmf_bcdc *bcdc;
44 @@ -472,6 +477,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
45 drvr->proto->del_if = brcmf_proto_bcdc_del_if;
46 drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
47 drvr->proto->init_done = brcmf_proto_bcdc_init_done;
48 + drvr->proto->debugfs_create = brcmf_proto_bcdc_debugfs_create;
49 drvr->proto->pd = bcdc;
50
51 drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
52 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
53 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
54 @@ -529,9 +529,6 @@ static int __init brcmfmac_module_init(v
55 {
56 int err;
57
58 - /* Initialize debug system first */
59 - brcmf_debugfs_init();
60 -
61 /* Get the platform data (if available) for our devices */
62 err = platform_driver_probe(&brcmf_pd, brcmf_common_pd_probe);
63 if (err == -ENODEV)
64 @@ -543,7 +540,6 @@ static int __init brcmfmac_module_init(v
65 /* Continue the initialization by registering the different busses */
66 err = brcmf_core_init();
67 if (err) {
68 - brcmf_debugfs_exit();
69 if (brcmfmac_pdata)
70 platform_driver_unregister(&brcmf_pd);
71 }
72 @@ -556,7 +552,6 @@ static void __exit brcmfmac_module_exit(
73 brcmf_core_exit();
74 if (brcmfmac_pdata)
75 platform_driver_unregister(&brcmf_pd);
76 - brcmf_debugfs_exit();
77 }
78
79 module_init(brcmfmac_module_init);
80 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
81 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
82 @@ -1050,8 +1050,6 @@ static int brcmf_bus_started(struct brcm
83 if (ret < 0)
84 goto fail;
85
86 - brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
87 -
88 brcmf_feat_attach(drvr);
89
90 ret = brcmf_proto_init_done(drvr);
91 @@ -1094,6 +1092,11 @@ static int brcmf_bus_started(struct brcm
92 #endif
93 #endif /* CONFIG_INET */
94
95 + /* populate debugfs */
96 + brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
97 + brcmf_feat_debugfs_create(drvr);
98 + brcmf_proto_debugfs_create(drvr);
99 +
100 return 0;
101
102 fail:
103 @@ -1146,9 +1149,6 @@ int brcmf_attach(struct device *dev, str
104 drvr->bus_if->drvr = drvr;
105 drvr->settings = settings;
106
107 - /* attach debug facilities */
108 - brcmf_debug_attach(drvr);
109 -
110 /* Attach and link in the protocol */
111 ret = brcmf_proto_attach(drvr);
112 if (ret != 0) {
113 @@ -1238,7 +1238,6 @@ void brcmf_detach(struct device *dev)
114
115 brcmf_proto_detach(drvr);
116
117 - brcmf_debug_detach(drvr);
118 bus_if->drvr = NULL;
119 wiphy_free(drvr->wiphy);
120 }
121 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
122 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
123 @@ -25,8 +25,6 @@
124 #include "fweh.h"
125 #include "debug.h"
126
127 -static struct dentry *root_folder;
128 -
129 int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
130 size_t len)
131 {
132 @@ -54,44 +52,9 @@ int brcmf_debug_create_memdump(struct br
133 return 0;
134 }
135
136 -void brcmf_debugfs_init(void)
137 -{
138 - root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
139 - if (IS_ERR(root_folder))
140 - root_folder = NULL;
141 -}
142 -
143 -void brcmf_debugfs_exit(void)
144 -{
145 - if (!root_folder)
146 - return;
147 -
148 - debugfs_remove_recursive(root_folder);
149 - root_folder = NULL;
150 -}
151 -
152 -int brcmf_debug_attach(struct brcmf_pub *drvr)
153 -{
154 - struct device *dev = drvr->bus_if->dev;
155 -
156 - if (!root_folder)
157 - return -ENODEV;
158 -
159 - drvr->dbgfs_dir = debugfs_create_dir(dev_name(dev), root_folder);
160 - return PTR_ERR_OR_ZERO(drvr->dbgfs_dir);
161 -}
162 -
163 -void brcmf_debug_detach(struct brcmf_pub *drvr)
164 -{
165 - brcmf_fweh_unregister(drvr, BRCMF_E_PSM_WATCHDOG);
166 -
167 - if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
168 - debugfs_remove_recursive(drvr->dbgfs_dir);
169 -}
170 -
171 struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
172 {
173 - return drvr->dbgfs_dir;
174 + return drvr->wiphy->debugfsdir;
175 }
176
177 int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
178 @@ -99,7 +62,8 @@ int brcmf_debugfs_add_entry(struct brcmf
179 {
180 struct dentry *e;
181
182 + WARN(!drvr->wiphy->debugfsdir, "wiphy not (yet) registered\n");
183 e = debugfs_create_devm_seqfile(drvr->bus_if->dev, fn,
184 - drvr->dbgfs_dir, read_fn);
185 + drvr->wiphy->debugfsdir, read_fn);
186 return PTR_ERR_OR_ZERO(e);
187 }
188 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
189 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
190 @@ -113,29 +113,12 @@ extern int brcmf_msg_level;
191 struct brcmf_bus;
192 struct brcmf_pub;
193 #ifdef DEBUG
194 -void brcmf_debugfs_init(void);
195 -void brcmf_debugfs_exit(void);
196 -int brcmf_debug_attach(struct brcmf_pub *drvr);
197 -void brcmf_debug_detach(struct brcmf_pub *drvr);
198 struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
199 int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
200 int (*read_fn)(struct seq_file *seq, void *data));
201 int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
202 size_t len);
203 #else
204 -static inline void brcmf_debugfs_init(void)
205 -{
206 -}
207 -static inline void brcmf_debugfs_exit(void)
208 -{
209 -}
210 -static inline int brcmf_debug_attach(struct brcmf_pub *drvr)
211 -{
212 - return 0;
213 -}
214 -static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
215 -{
216 -}
217 static inline
218 int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
219 int (*read_fn)(struct seq_file *seq, void *data))
220 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
221 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
222 @@ -228,7 +228,10 @@ void brcmf_feat_attach(struct brcmf_pub
223 /* no quirks */
224 break;
225 }
226 +}
227
228 +void brcmf_feat_debugfs_create(struct brcmf_pub *drvr)
229 +{
230 brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
231 }
232
233 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
234 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
235 @@ -90,6 +90,13 @@ enum brcmf_feat_quirk {
236 void brcmf_feat_attach(struct brcmf_pub *drvr);
237
238 /**
239 + * brcmf_feat_debugfs_create() - create debugfs entries.
240 + *
241 + * @drvr: driver instance.
242 + */
243 +void brcmf_feat_debugfs_create(struct brcmf_pub *drvr);
244 +
245 +/**
246 * brcmf_feat_is_enabled() - query feature.
247 *
248 * @ifp: interface instance.
249 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
250 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
251 @@ -2399,10 +2399,6 @@ struct brcmf_fws_info *brcmf_fws_attach(
252 brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
253 BRCMF_FWS_PSQ_LEN);
254
255 - /* create debugfs file for statistics */
256 - brcmf_debugfs_add_entry(drvr, "fws_stats",
257 - brcmf_debugfs_fws_stats_read);
258 -
259 brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
260 fws->fw_signals ? "enabled" : "disabled", tlv);
261 return fws;
262 @@ -2429,6 +2425,13 @@ void brcmf_fws_detach(struct brcmf_fws_i
263 kfree(fws);
264 }
265
266 +void brcmf_fws_debugfs_create(struct brcmf_pub *drvr)
267 +{
268 + /* create debugfs file for statistics */
269 + brcmf_debugfs_add_entry(drvr, "fws_stats",
270 + brcmf_debugfs_fws_stats_read);
271 +}
272 +
273 bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws)
274 {
275 return !fws->avoid_queueing;
276 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
277 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
278 @@ -20,6 +20,7 @@
279
280 struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
281 void brcmf_fws_detach(struct brcmf_fws_info *fws);
282 +void brcmf_fws_debugfs_create(struct brcmf_pub *drvr);
283 bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
284 bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
285 void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
286 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
287 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
288 @@ -1418,6 +1418,11 @@ static int brcmf_msgbuf_stats_read(struc
289 }
290 #endif
291
292 +static void brcmf_msgbuf_debugfs_create(struct brcmf_pub *drvr)
293 +{
294 + brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
295 +}
296 +
297 int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
298 {
299 struct brcmf_bus_msgbuf *if_msgbuf;
300 @@ -1472,6 +1477,7 @@ int brcmf_proto_msgbuf_attach(struct brc
301 drvr->proto->delete_peer = brcmf_msgbuf_delete_peer;
302 drvr->proto->add_tdls_peer = brcmf_msgbuf_add_tdls_peer;
303 drvr->proto->rxreorder = brcmf_msgbuf_rxreorder;
304 + drvr->proto->debugfs_create = brcmf_msgbuf_debugfs_create;
305 drvr->proto->pd = msgbuf;
306
307 init_waitqueue_head(&msgbuf->ioctl_resp_wait);
308 @@ -1525,8 +1531,6 @@ int brcmf_proto_msgbuf_attach(struct brc
309 spin_lock_init(&msgbuf->flowring_work_lock);
310 INIT_LIST_HEAD(&msgbuf->work_queue);
311
312 - brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
313 -
314 return 0;
315
316 fail:
317 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
318 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
319 @@ -54,7 +54,8 @@ int brcmf_proto_attach(struct brcmf_pub
320 if (!proto->tx_queue_data || (proto->hdrpull == NULL) ||
321 (proto->query_dcmd == NULL) || (proto->set_dcmd == NULL) ||
322 (proto->configure_addr_mode == NULL) ||
323 - (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL)) {
324 + (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL) ||
325 + (proto->debugfs_create == NULL)) {
326 brcmf_err("Not all proto handlers have been installed\n");
327 goto fail;
328 }
329 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
330 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
331 @@ -48,6 +48,7 @@ struct brcmf_proto {
332 void (*del_if)(struct brcmf_if *ifp);
333 void (*reset_if)(struct brcmf_if *ifp);
334 int (*init_done)(struct brcmf_pub *drvr);
335 + void (*debugfs_create)(struct brcmf_pub *drvr);
336 void *pd;
337 };
338
339 @@ -156,4 +157,10 @@ brcmf_proto_init_done(struct brcmf_pub *
340 return drvr->proto->init_done(drvr);
341 }
342
343 +static inline void
344 +brcmf_proto_debugfs_create(struct brcmf_pub *drvr)
345 +{
346 + drvr->proto->debugfs_create(drvr);
347 +}
348 +
349 #endif /* BRCMFMAC_PROTO_H */