xref: /freebsd/sys/contrib/dev/broadcom/brcm80211/brcmfmac/debug.c (revision 902136e0fe112383ec64d2ef43a446063b5e6417)
1 // SPDX-License-Identifier: ISC
2 /*
3  * Copyright (c) 2012 Broadcom Corporation
4  */
5 #include <linux/debugfs.h>
6 #include <linux/netdevice.h>
7 #include <linux/module.h>
8 #include <linux/devcoredump.h>
9 
10 #include <brcmu_wifi.h>
11 #include <brcmu_utils.h>
12 #include "core.h"
13 #include "bus.h"
14 #include "fweh.h"
15 #include "debug.h"
16 
brcmf_debug_create_memdump(struct brcmf_bus * bus,const void * data,size_t len)17 int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
18 			       size_t len)
19 {
20 #if defined(__linux__)
21 	void *dump;
22 #elif defined(__FreeBSD__)
23 	u8 *dump;
24 #endif
25 	size_t ramsize;
26 	int err;
27 
28 	ramsize = brcmf_bus_get_ramsize(bus);
29 	if (!ramsize)
30 		return -ENOTSUPP;
31 
32 	dump = vzalloc(len + ramsize);
33 	if (!dump)
34 		return -ENOMEM;
35 
36 	if (data && len > 0)
37 		memcpy(dump, data, len);
38 	err = brcmf_bus_get_memdump(bus, dump + len, ramsize);
39 	if (err) {
40 		vfree(dump);
41 		return err;
42 	}
43 
44 	dev_coredumpv(bus->dev, dump, len + ramsize, GFP_KERNEL);
45 
46 	return 0;
47 }
48 
brcmf_debugfs_get_devdir(struct brcmf_pub * drvr)49 struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
50 {
51 	return drvr->wiphy->debugfsdir;
52 }
53 
brcmf_debugfs_add_entry(struct brcmf_pub * drvr,const char * fn,int (* read_fn)(struct seq_file * seq,void * data))54 void brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
55 			    int (*read_fn)(struct seq_file *seq, void *data))
56 {
57 	WARN(!drvr->wiphy->debugfsdir, "wiphy not (yet) registered\n");
58 #if defined(__linux__)
59 	debugfs_create_devm_seqfile(drvr->bus_if->dev, fn,
60 				    drvr->wiphy->debugfsdir, read_fn);
61 #elif defined(__FreeBSD__)
62 	pr_debug("%s: TODO\n", __func__);
63 #endif
64 }
65