mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
wifi: iwlwifi: mvm: debugfs for fw system stats
Add debgufs handler for fw system statistics command. Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20231022173519.e77efee7cd85.I99f370f26f94f73e06aec2a8eaf21ebcc82f60a9@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
b6e3d1ba4f
commit
a2d450e383
1 changed files with 104 additions and 0 deletions
|
@ -1005,6 +1005,13 @@ static ssize_t iwl_dbgfs_fw_rx_stats_read(struct file *file,
|
|||
char *buf;
|
||||
int ret;
|
||||
size_t bufsz;
|
||||
u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw,
|
||||
WIDE_ID(SYSTEM_GROUP,
|
||||
SYSTEM_STATISTICS_CMD),
|
||||
IWL_FW_CMD_VER_UNKNOWN);
|
||||
|
||||
if (cmd_ver != IWL_FW_CMD_VER_UNKNOWN)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (iwl_mvm_has_new_rx_stats_api(mvm))
|
||||
bufsz = ((sizeof(struct mvm_statistics_rx) /
|
||||
|
@ -1184,6 +1191,101 @@ static ssize_t iwl_dbgfs_fw_rx_stats_read(struct file *file,
|
|||
}
|
||||
#undef PRINT_STAT_LE32
|
||||
|
||||
static ssize_t iwl_dbgfs_fw_system_stats_read(struct file *file,
|
||||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
char *buff, *pos, *endpos;
|
||||
int ret;
|
||||
size_t bufsz;
|
||||
int i;
|
||||
struct iwl_mvm_vif *mvmvif;
|
||||
struct ieee80211_vif *vif;
|
||||
struct iwl_mvm *mvm = file->private_data;
|
||||
u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw,
|
||||
WIDE_ID(SYSTEM_GROUP,
|
||||
SYSTEM_STATISTICS_CMD),
|
||||
IWL_FW_CMD_VER_UNKNOWN);
|
||||
|
||||
/* in case of a wrong cmd version, allocate buffer only for error msg */
|
||||
bufsz = (cmd_ver == 1) ? 4096 : 64;
|
||||
|
||||
buff = kzalloc(bufsz, GFP_KERNEL);
|
||||
if (!buff)
|
||||
return -ENOMEM;
|
||||
|
||||
pos = buff;
|
||||
endpos = pos + bufsz;
|
||||
|
||||
if (cmd_ver != 1) {
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"System stats not supported:%d\n", cmd_ver);
|
||||
goto send_out;
|
||||
}
|
||||
|
||||
mutex_lock(&mvm->mutex);
|
||||
if (iwl_mvm_firmware_running(mvm))
|
||||
iwl_mvm_request_statistics(mvm, false);
|
||||
|
||||
for (i = 0; i < NUM_MAC_INDEX_DRIVER; i++) {
|
||||
vif = iwl_mvm_rcu_dereference_vif_id(mvm, i, false);
|
||||
if (!vif)
|
||||
continue;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == NUM_MAC_INDEX_DRIVER || !vif) {
|
||||
pos += scnprintf(pos, endpos - pos, "vif is NULL\n");
|
||||
goto release_send_out;
|
||||
}
|
||||
|
||||
mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||
if (!mvmvif) {
|
||||
pos += scnprintf(pos, endpos - pos, "mvmvif is NULL\n");
|
||||
goto release_send_out;
|
||||
}
|
||||
|
||||
for_each_mvm_vif_valid_link(mvmvif, i) {
|
||||
struct iwl_mvm_vif_link_info *link_info = mvmvif->link[i];
|
||||
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"link_id %d", i);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
" num_beacons %d",
|
||||
link_info->beacon_stats.num_beacons);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
" accu_num_beacons %d",
|
||||
link_info->beacon_stats.accu_num_beacons);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
" avg_signal %d\n",
|
||||
link_info->beacon_stats.avg_signal);
|
||||
}
|
||||
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"radio_stats.rx_time %lld\n",
|
||||
mvm->radio_stats.rx_time);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"radio_stats.tx_time %lld\n",
|
||||
mvm->radio_stats.tx_time);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"accu_radio_stats.rx_time %lld\n",
|
||||
mvm->accu_radio_stats.rx_time);
|
||||
pos += scnprintf(pos, endpos - pos,
|
||||
"accu_radio_stats.tx_time %lld\n",
|
||||
mvm->accu_radio_stats.tx_time);
|
||||
|
||||
release_send_out:
|
||||
mutex_unlock(&mvm->mutex);
|
||||
|
||||
send_out:
|
||||
ret = simple_read_from_buffer(user_buf, count, ppos, buff, pos - buff);
|
||||
kfree(buff);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t iwl_dbgfs_frame_stats_read(struct iwl_mvm *mvm,
|
||||
char __user *user_buf, size_t count,
|
||||
loff_t *ppos,
|
||||
|
@ -2053,6 +2155,7 @@ MVM_DEBUGFS_READ_FILE_OPS(bt_cmd);
|
|||
MVM_DEBUGFS_READ_WRITE_FILE_OPS(disable_power_off, 64);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(fw_rx_stats);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(drv_rx_stats);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(fw_system_stats);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(fw_ver);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(phy_integration_ver);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(tas_get_status);
|
||||
|
@ -2260,6 +2363,7 @@ void iwl_mvm_dbgfs_register(struct iwl_mvm *mvm)
|
|||
MVM_DEBUGFS_ADD_FILE(fw_ver, mvm->debugfs_dir, 0400);
|
||||
MVM_DEBUGFS_ADD_FILE(fw_rx_stats, mvm->debugfs_dir, 0400);
|
||||
MVM_DEBUGFS_ADD_FILE(drv_rx_stats, mvm->debugfs_dir, 0400);
|
||||
MVM_DEBUGFS_ADD_FILE(fw_system_stats, mvm->debugfs_dir, 0400);
|
||||
MVM_DEBUGFS_ADD_FILE(fw_restart, mvm->debugfs_dir, 0200);
|
||||
MVM_DEBUGFS_ADD_FILE(fw_nmi, mvm->debugfs_dir, 0200);
|
||||
MVM_DEBUGFS_ADD_FILE(bt_tx_prio, mvm->debugfs_dir, 0200);
|
||||
|
|
Loading…
Add table
Reference in a new issue