Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d319a7cf authored by Arend van Spriel's avatar Arend van Spriel Committed by John W. Linville
Browse files

brcmfmac: add debugfs helper functions



This patch adds debugfs support to brcmfmac. It provide helper functions
to setup the debugfs folder structure for the driver, which has following
hierarchy:

<debugfs_mount>/brcmfmac/<dev_name>/

ie.: /sys/kernel/debug/brcmfmac/mmc0:0001:2/

The new source file provides functions to create and remove the two
folders and a function to retrieve the device-specific folder so files
can be created in it.

Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarFranky (Zhenhui) Lin <frankyl@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 5e16e8ee
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -34,3 +34,5 @@ brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \
		sdio_chip.o
		sdio_chip.o
brcmfmac-$(CONFIG_BRCMFMAC_USB) += \
brcmfmac-$(CONFIG_BRCMFMAC_USB) += \
		usb.o
		usb.o
brcmfmac-$(CONFIG_BRCMDBG) += \
		dhd_dbg.o
 No newline at end of file
+3 −0
Original line number Original line Diff line number Diff line
@@ -613,6 +613,9 @@ struct brcmf_pub {
	struct work_struct multicast_work;
	struct work_struct multicast_work;
	u8 macvalue[ETH_ALEN];
	u8 macvalue[ETH_ALEN];
	atomic_t pend_8021x_cnt;
	atomic_t pend_8021x_cnt;
#ifdef DEBUG
	struct dentry *dbgfs_dir;
#endif
};
};


struct brcmf_if_event {
struct brcmf_if_event {
+63 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (c) 2012 Broadcom Corporation
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
#include <linux/debugfs.h>
#include <linux/if_ether.h>
#include <linux/if.h>
#include <linux/ieee80211.h>

#include <defs.h>
#include <brcmu_wifi.h>
#include <brcmu_utils.h>
#include "dhd.h"
#include "dhd_bus.h"

static struct dentry *root_folder;

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_debugfs_attach(struct brcmf_pub *drvr)
{
	if (!root_folder)
		return -ENODEV;

	drvr->dbgfs_dir = debugfs_create_dir(dev_name(drvr->dev), root_folder);
	return PTR_RET(drvr->dbgfs_dir);
}

void brcmf_debugfs_detach(struct brcmf_pub *drvr)
{
	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;
}
+23 −0
Original line number Original line Diff line number Diff line
@@ -76,4 +76,27 @@ do { \


extern int brcmf_msg_level;
extern int brcmf_msg_level;


struct brcmf_pub;
#ifdef DEBUG
void brcmf_debugfs_init(void);
void brcmf_debugfs_exit(void);
int brcmf_debugfs_attach(struct brcmf_pub *drvr);
void brcmf_debugfs_detach(struct brcmf_pub *drvr);
struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
#else
static inline void brcmf_debugfs_init(void)
{
}
static inline void brcmf_debugfs_exit(void)
{
}
static inline int brcmf_debugfs_attach(struct brcmf_pub *drvr)
{
	return 0;
}
static inline void brcmf_debugfs_detach(struct brcmf_pub *drvr)
{
}
#endif

#endif				/* _BRCMF_DBG_H_ */
#endif				/* _BRCMF_DBG_H_ */
+7 −0
Original line number Original line Diff line number Diff line
@@ -1007,6 +1007,9 @@ int brcmf_attach(uint bus_hdrlen, struct device *dev)
	drvr->bus_if->drvr = drvr;
	drvr->bus_if->drvr = drvr;
	drvr->dev = dev;
	drvr->dev = dev;


	/* create device debugfs folder */
	brcmf_debugfs_attach(drvr);

	/* Attach and link in the protocol */
	/* Attach and link in the protocol */
	ret = brcmf_proto_attach(drvr);
	ret = brcmf_proto_attach(drvr);
	if (ret != 0) {
	if (ret != 0) {
@@ -1123,6 +1126,7 @@ void brcmf_detach(struct device *dev)
		brcmf_proto_detach(drvr);
		brcmf_proto_detach(drvr);
	}
	}


	brcmf_debugfs_detach(drvr);
	bus_if->drvr = NULL;
	bus_if->drvr = NULL;
	kfree(drvr);
	kfree(drvr);
}
}
@@ -1192,6 +1196,8 @@ int brcmf_write_to_file(struct brcmf_pub *drvr, const u8 *buf, int size)


static void brcmf_driver_init(struct work_struct *work)
static void brcmf_driver_init(struct work_struct *work)
{
{
	brcmf_debugfs_init();

#ifdef CONFIG_BRCMFMAC_SDIO
#ifdef CONFIG_BRCMFMAC_SDIO
	brcmf_sdio_init();
	brcmf_sdio_init();
#endif
#endif
@@ -1219,6 +1225,7 @@ static void __exit brcmfmac_module_exit(void)
#ifdef CONFIG_BRCMFMAC_USB
#ifdef CONFIG_BRCMFMAC_USB
	brcmf_usb_exit();
	brcmf_usb_exit();
#endif
#endif
	brcmf_debugfs_exit();
}
}


module_init(brcmfmac_module_init);
module_init(brcmfmac_module_init);