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 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 49 struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr) 50 { 51 return drvr->wiphy->debugfsdir; 52 } 53 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