ath9k: make rate control debugfs stats per station
Move them to the same debugfs file that the other rc modules use. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
88eac2dad8
commit
772d551563
@@ -378,95 +378,6 @@ static const struct file_operations fops_interrupt = {
|
||||
.owner = THIS_MODULE
|
||||
};
|
||||
|
||||
void ath_debug_stat_rc(struct ath_softc *sc, int final_rate)
|
||||
{
|
||||
struct ath_rc_stats *stats;
|
||||
|
||||
stats = &sc->debug.stats.rcstats[final_rate];
|
||||
stats->success++;
|
||||
}
|
||||
|
||||
void ath_debug_stat_retries(struct ath_softc *sc, int rix,
|
||||
int xretries, int retries, u8 per)
|
||||
{
|
||||
struct ath_rc_stats *stats = &sc->debug.stats.rcstats[rix];
|
||||
|
||||
stats->xretries += xretries;
|
||||
stats->retries += retries;
|
||||
stats->per = per;
|
||||
}
|
||||
|
||||
static ssize_t read_file_rcstat(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ath_softc *sc = file->private_data;
|
||||
char *buf;
|
||||
unsigned int len = 0, max;
|
||||
int i = 0;
|
||||
ssize_t retval;
|
||||
|
||||
if (sc->cur_rate_table == NULL)
|
||||
return 0;
|
||||
|
||||
max = 80 + sc->cur_rate_table->rate_cnt * 1024 + 1;
|
||||
buf = kmalloc(max, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
len += sprintf(buf, "%6s %6s %6s "
|
||||
"%10s %10s %10s %10s\n",
|
||||
"HT", "MCS", "Rate",
|
||||
"Success", "Retries", "XRetries", "PER");
|
||||
|
||||
for (i = 0; i < sc->cur_rate_table->rate_cnt; i++) {
|
||||
u32 ratekbps = sc->cur_rate_table->info[i].ratekbps;
|
||||
struct ath_rc_stats *stats = &sc->debug.stats.rcstats[i];
|
||||
char mcs[5];
|
||||
char htmode[5];
|
||||
int used_mcs = 0, used_htmode = 0;
|
||||
|
||||
if (WLAN_RC_PHY_HT(sc->cur_rate_table->info[i].phy)) {
|
||||
used_mcs = snprintf(mcs, 5, "%d",
|
||||
sc->cur_rate_table->info[i].ratecode);
|
||||
|
||||
if (WLAN_RC_PHY_40(sc->cur_rate_table->info[i].phy))
|
||||
used_htmode = snprintf(htmode, 5, "HT40");
|
||||
else if (WLAN_RC_PHY_20(sc->cur_rate_table->info[i].phy))
|
||||
used_htmode = snprintf(htmode, 5, "HT20");
|
||||
else
|
||||
used_htmode = snprintf(htmode, 5, "????");
|
||||
}
|
||||
|
||||
mcs[used_mcs] = '\0';
|
||||
htmode[used_htmode] = '\0';
|
||||
|
||||
len += snprintf(buf + len, max - len,
|
||||
"%6s %6s %3u.%d: "
|
||||
"%10u %10u %10u %10u\n",
|
||||
htmode,
|
||||
mcs,
|
||||
ratekbps / 1000,
|
||||
(ratekbps % 1000) / 100,
|
||||
stats->success,
|
||||
stats->retries,
|
||||
stats->xretries,
|
||||
stats->per);
|
||||
}
|
||||
|
||||
if (len > max)
|
||||
len = max;
|
||||
|
||||
retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
kfree(buf);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const struct file_operations fops_rcstat = {
|
||||
.read = read_file_rcstat,
|
||||
.open = ath9k_debugfs_open,
|
||||
.owner = THIS_MODULE
|
||||
};
|
||||
|
||||
static const char * ath_wiphy_state_str(enum ath_wiphy_state state)
|
||||
{
|
||||
switch (state) {
|
||||
@@ -977,10 +888,6 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
sc, &fops_interrupt))
|
||||
goto err;
|
||||
|
||||
if (!debugfs_create_file("rcstat", S_IRUSR, sc->debug.debugfs_phy,
|
||||
sc, &fops_rcstat))
|
||||
goto err;
|
||||
|
||||
if (!debugfs_create_file("wiphy", S_IRUSR | S_IWUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_wiphy))
|
||||
goto err;
|
||||
|
Reference in New Issue
Block a user