mirror of https://gitee.com/openkylin/linux.git
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: Shengzhen Li <szli@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
dc386ce76d
commit
17934b6a32
|
@ -237,4 +237,14 @@ device_dump
|
||||||
|
|
||||||
cat fw_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
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
|
@ -95,8 +95,7 @@ mwifiex_info_read(struct file *file, char __user *ubuf,
|
||||||
|
|
||||||
mwifiex_drv_get_driver_version(priv->adapter, fmt, sizeof(fmt) - 1);
|
mwifiex_drv_get_driver_version(priv->adapter, fmt, sizeof(fmt) - 1);
|
||||||
|
|
||||||
if (!priv->version_str[0])
|
mwifiex_get_ver_ext(priv, 0);
|
||||||
mwifiex_get_ver_ext(priv);
|
|
||||||
|
|
||||||
p += sprintf(p, "driver_name = " "\"mwifiex\"\n");
|
p += sprintf(p, "driver_name = " "\"mwifiex\"\n");
|
||||||
p += sprintf(p, "driver_version = %s", fmt);
|
p += sprintf(p, "driver_version = %s", fmt);
|
||||||
|
@ -583,6 +582,52 @@ mwifiex_debug_mask_write(struct file *file, const char __user *ubuf,
|
||||||
return ret;
|
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.
|
/* Proc memrw file write handler.
|
||||||
* This function is called when the 'memrw' file is opened for writing
|
* This function is called when the 'memrw' file is opened for writing
|
||||||
* This function can be used to write to a memory location.
|
* 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(debug_mask);
|
||||||
MWIFIEX_DFS_FILE_OPS(timeshare_coex);
|
MWIFIEX_DFS_FILE_OPS(timeshare_coex);
|
||||||
MWIFIEX_DFS_FILE_WRITE_OPS(reset);
|
MWIFIEX_DFS_FILE_WRITE_OPS(reset);
|
||||||
|
MWIFIEX_DFS_FILE_OPS(verext);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function creates the debug FS directory structure and the files.
|
* 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(debug_mask);
|
||||||
MWIFIEX_DFS_ADD_FILE(timeshare_coex);
|
MWIFIEX_DFS_ADD_FILE(timeshare_coex);
|
||||||
MWIFIEX_DFS_ADD_FILE(reset);
|
MWIFIEX_DFS_ADD_FILE(reset);
|
||||||
|
MWIFIEX_DFS_ADD_FILE(verext);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -616,6 +616,7 @@ struct mwifiex_private {
|
||||||
spinlock_t curr_bcn_buf_lock;
|
spinlock_t curr_bcn_buf_lock;
|
||||||
struct wireless_dev wdev;
|
struct wireless_dev wdev;
|
||||||
struct mwifiex_chan_freq_power cfp;
|
struct mwifiex_chan_freq_power cfp;
|
||||||
|
u32 versionstrsel;
|
||||||
char version_str[128];
|
char version_str[128];
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
struct dentry *dfs_dev_dir;
|
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_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,
|
int mwifiex_remain_on_chan_cfg(struct mwifiex_private *priv, u16 action,
|
||||||
struct ieee80211_channel *chan,
|
struct ieee80211_channel *chan,
|
||||||
|
|
|
@ -1114,11 +1114,12 @@ int mwifiex_set_encode(struct mwifiex_private *priv, struct key_params *kp,
|
||||||
* with requisite parameters and calls the IOCTL handler.
|
* with requisite parameters and calls the IOCTL handler.
|
||||||
*/
|
*/
|
||||||
int
|
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;
|
struct mwifiex_ver_ext ver_ext;
|
||||||
|
|
||||||
memset(&ver_ext, 0, sizeof(struct host_cmd_ds_version_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,
|
if (mwifiex_send_cmd(priv, HostCmd_CMD_VERSION_EXT,
|
||||||
HostCmd_ACT_GEN_GET, 0, &ver_ext, true))
|
HostCmd_ACT_GEN_GET, 0, &ver_ext, true))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue