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

Commit 17934b6a authored by Xinming Hu's avatar Xinming Hu Committed by Kalle Valo
Browse files

mwifiex: add debugfs file to read chip information



This patch add 'verext' debugfs item, which can be used to
get detailed chip specific information from our firmware.

Examples:
echo "1" > /sys/kernel/debug/mwifiex/mlan0/verext
cat /sys/kernel/debug/mwifiex/mlan0/verext

Signed-off-by: default avatarShengzhen Li <szli@marvell.com>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent dc386ce7
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -237,4 +237,14 @@ device_dump

	cat fw_dump

verext
	This command is used to get extended firmware version string using
	different configuration parameters.

	Usage:
		echo "[version_str_sel]" > verext
		cat verext

		[version_str_sel]: firmware support several extend version
				   string cases, include 0/1/10/20/21/99
===============================================================================
+49 −2
Original line number Diff line number Diff line
@@ -95,8 +95,7 @@ mwifiex_info_read(struct file *file, char __user *ubuf,

	mwifiex_drv_get_driver_version(priv->adapter, fmt, sizeof(fmt) - 1);

	if (!priv->version_str[0])
		mwifiex_get_ver_ext(priv);
	mwifiex_get_ver_ext(priv, 0);

	p += sprintf(p, "driver_name = " "\"mwifiex\"\n");
	p += sprintf(p, "driver_version = %s", fmt);
@@ -583,6 +582,52 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
	return ret;
}

/* debugfs verext file write handler.
 * This function is called when the 'verext' file is opened for write
 */
static ssize_t
mwifiex_verext_write(struct file *file, const char __user *ubuf,
		     size_t count, loff_t *ppos)
{
	int ret;
	u32 versionstrsel;
	struct mwifiex_private *priv = (void *)file->private_data;
	char buf[16];

	memset(buf, 0, sizeof(buf));

	if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
		return -EFAULT;

	ret = kstrtou32(buf, 10, &versionstrsel);
	if (ret)
		return ret;

	priv->versionstrsel = versionstrsel;

	return count;
}

/* Proc verext file read handler.
 * This function is called when the 'verext' file is opened for reading
 * This function can be used read driver exteneed verion string.
 */
static ssize_t
mwifiex_verext_read(struct file *file, char __user *ubuf,
		    size_t count, loff_t *ppos)
{
	struct mwifiex_private *priv =
		(struct mwifiex_private *)file->private_data;
	char buf[256];
	int ret;

	mwifiex_get_ver_ext(priv, priv->versionstrsel);
	ret = snprintf(buf, sizeof(buf), "version string: %s\n",
		       priv->version_str);

	return simple_read_from_buffer(ubuf, count, ppos, buf, ret);
}

/* Proc memrw file write handler.
 * This function is called when the 'memrw' file is opened for writing
 * This function can be used to write to a memory location.
@@ -940,6 +985,7 @@ MWIFIEX_DFS_FILE_OPS(histogram);
MWIFIEX_DFS_FILE_OPS(debug_mask);
MWIFIEX_DFS_FILE_OPS(timeshare_coex);
MWIFIEX_DFS_FILE_WRITE_OPS(reset);
MWIFIEX_DFS_FILE_OPS(verext);

/*
 * This function creates the debug FS directory structure and the files.
@@ -968,6 +1014,7 @@ mwifiex_dev_debugfs_init(struct mwifiex_private *priv)
	MWIFIEX_DFS_ADD_FILE(debug_mask);
	MWIFIEX_DFS_ADD_FILE(timeshare_coex);
	MWIFIEX_DFS_ADD_FILE(reset);
	MWIFIEX_DFS_ADD_FILE(verext);
}

/*
+2 −1
Original line number Diff line number Diff line
@@ -616,6 +616,7 @@ struct mwifiex_private {
	spinlock_t curr_bcn_buf_lock;
	struct wireless_dev wdev;
	struct mwifiex_chan_freq_power cfp;
	u32 versionstrsel;
	char version_str[128];
#ifdef CONFIG_DEBUG_FS
	struct dentry *dfs_dev_dir;
@@ -1418,7 +1419,7 @@ int mwifiex_set_encode(struct mwifiex_private *priv, struct key_params *kp,

int mwifiex_set_gen_ie(struct mwifiex_private *priv, const u8 *ie, int ie_len);

int mwifiex_get_ver_ext(struct mwifiex_private *priv);
int mwifiex_get_ver_ext(struct mwifiex_private *priv, u32 version_str_sel);

int mwifiex_remain_on_chan_cfg(struct mwifiex_private *priv, u16 action,
			       struct ieee80211_channel *chan,
+2 −1
Original line number Diff line number Diff line
@@ -1114,11 +1114,12 @@ int mwifiex_set_encode(struct mwifiex_private *priv, struct key_params *kp,
 * with requisite parameters and calls the IOCTL handler.
 */
int
mwifiex_get_ver_ext(struct mwifiex_private *priv)
mwifiex_get_ver_ext(struct mwifiex_private *priv, u32 version_str_sel)
{
	struct mwifiex_ver_ext ver_ext;

	memset(&ver_ext, 0, sizeof(struct host_cmd_ds_version_ext));
	ver_ext.version_str_sel = version_str_sel;
	if (mwifiex_send_cmd(priv, HostCmd_CMD_VERSION_EXT,
			     HostCmd_ACT_GEN_GET, 0, &ver_ext, true))
		return -1;