mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 05:44:11 +00:00
wifi: wcn36xx: Add debugfs entry to read firmware feature strings
Add in the ability to easily find the firmware feature bits reported in the get feature exchange without having to compile-in debug prints. root@linaro-alip:~# cat /sys/kernel/debug/ieee80211/phy0/wcn36xx/firmware_feat_caps MCC P2P DOT11AC SLM_SESSIONIZATION DOT11AC_OPMODE SAP32STA TDLS P2P_GO_NOA_DECOUPLE_INIT_SCAN WLANACTIVE_OFFLOAD BEACON_OFFLOAD SCAN_OFFLOAD BCN_MISS_OFFLOAD STA_POWERSAVE STA_ADVANCED_PWRSAVE BCN_FILTER RTT RATECTRL WOW WLAN_ROAM_SCAN_OFFLOAD SPECULATIVE_PS_POLL IBSS_HEARTBEAT_OFFLOAD WLAN_SCAN_OFFLOAD WLAN_PERIODIC_TX_PTRN ADVANCE_TDLS BATCH_SCAN FW_IN_TX_PATH EXTENDED_NSOFFLOAD_SLOT CH_SWITCH_V1 HT40_OBSS_SCAN UPDATE_CHANNEL_LIST WLAN_MCADDR_FLT WLAN_CH144 TDLS_SCAN_COEXISTENCE LINK_LAYER_STATS_MEAS MU_MIMO EXTENDED_SCAN DYNAMIC_WMM_PS MAC_SPOOFED_SCAN FW_STATS WPS_PRBRSP_TMPL BCN_IE_FLT_DELTA Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/20220727161655.2286867-5-bryan.odonoghue@linaro.org
This commit is contained in:
parent
75072b2970
commit
5cc8cc4406
2 changed files with 40 additions and 0 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include "wcn36xx.h"
|
#include "wcn36xx.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "pmc.h"
|
#include "pmc.h"
|
||||||
|
#include "firmware.h"
|
||||||
|
|
||||||
#ifdef CONFIG_WCN36XX_DEBUGFS
|
#ifdef CONFIG_WCN36XX_DEBUGFS
|
||||||
|
|
||||||
|
@ -136,6 +137,42 @@ static const struct file_operations fops_wcn36xx_dump = {
|
||||||
.write = write_file_dump,
|
.write = write_file_dump,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static ssize_t read_file_firmware_feature_caps(struct file *file,
|
||||||
|
char __user *user_buf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct wcn36xx *wcn = file->private_data;
|
||||||
|
size_t len = 0, buf_len = 2048;
|
||||||
|
char *buf;
|
||||||
|
int i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
buf = kzalloc(buf_len, GFP_KERNEL);
|
||||||
|
if (!buf)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
mutex_lock(&wcn->hal_mutex);
|
||||||
|
for (i = 0; i < MAX_FEATURE_SUPPORTED; i++) {
|
||||||
|
if (wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, i)) {
|
||||||
|
len += scnprintf(buf + len, buf_len - len, "%s\n",
|
||||||
|
wcn36xx_firmware_get_cap_name(i));
|
||||||
|
}
|
||||||
|
if (len >= buf_len)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mutex_unlock(&wcn->hal_mutex);
|
||||||
|
|
||||||
|
ret = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||||
|
kfree(buf);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations fops_wcn36xx_firmware_feat_caps = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = read_file_firmware_feature_caps,
|
||||||
|
};
|
||||||
|
|
||||||
#define ADD_FILE(name, mode, fop, priv_data) \
|
#define ADD_FILE(name, mode, fop, priv_data) \
|
||||||
do { \
|
do { \
|
||||||
struct dentry *d; \
|
struct dentry *d; \
|
||||||
|
@ -163,6 +200,8 @@ void wcn36xx_debugfs_init(struct wcn36xx *wcn)
|
||||||
|
|
||||||
ADD_FILE(bmps_switcher, 0600, &fops_wcn36xx_bmps, wcn);
|
ADD_FILE(bmps_switcher, 0600, &fops_wcn36xx_bmps, wcn);
|
||||||
ADD_FILE(dump, 0200, &fops_wcn36xx_dump, wcn);
|
ADD_FILE(dump, 0200, &fops_wcn36xx_dump, wcn);
|
||||||
|
ADD_FILE(firmware_feat_caps, 0200,
|
||||||
|
&fops_wcn36xx_firmware_feat_caps, wcn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wcn36xx_debugfs_exit(struct wcn36xx *wcn)
|
void wcn36xx_debugfs_exit(struct wcn36xx *wcn)
|
||||||
|
|
|
@ -31,6 +31,7 @@ struct wcn36xx_dfs_entry {
|
||||||
struct dentry *rootdir;
|
struct dentry *rootdir;
|
||||||
struct wcn36xx_dfs_file file_bmps_switcher;
|
struct wcn36xx_dfs_file file_bmps_switcher;
|
||||||
struct wcn36xx_dfs_file file_dump;
|
struct wcn36xx_dfs_file file_dump;
|
||||||
|
struct wcn36xx_dfs_file file_firmware_feat_caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
void wcn36xx_debugfs_init(struct wcn36xx *wcn);
|
void wcn36xx_debugfs_init(struct wcn36xx *wcn);
|
||||||
|
|
Loading…
Reference in a new issue