Commit a2d450e3 authored by Anjaneyulu's avatar Anjaneyulu Committed by Johannes Berg

wifi: iwlwifi: mvm: debugfs for fw system stats

Add debgufs handler for fw system statistics command.
Signed-off-by: default avatarAnjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20231022173519.e77efee7cd85.I99f370f26f94f73e06aec2a8eaf21ebcc82f60a9@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b6e3d1ba
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment