Skip to content

Commit

Permalink
ath9k: Add 'misc' file to debugfs, fix queue indexes.
Browse files Browse the repository at this point in the history
Add a misc file to show hardware op-mode, irq setup,
number of various types of VIFs and more.

Also, previous patches were using the wrong xmit queue
indexes.  Change to use the internal ath9k indexes instead
of the mac80211 queue indexes.

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Ben Greear authored and John W. Linville committed Jan 21, 2011
1 parent 59eb21a commit 55f6d0f
Showing 1 changed file with 125 additions and 12 deletions.
137 changes: 125 additions & 12 deletions drivers/net/wireless/ath/ath9k/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -595,10 +595,10 @@ static const struct file_operations fops_wiphy = {
do { \
len += snprintf(buf + len, size - len, \
"%s%13u%11u%10u%10u\n", str, \
(unsigned int)(sc->tx.txq[WME_AC_BE].elem), \
(unsigned int)(sc->tx.txq[WME_AC_BK].elem), \
(unsigned int)(sc->tx.txq[WME_AC_VI].elem), \
(unsigned int)(sc->tx.txq[WME_AC_VO].elem)); \
(unsigned int)(sc->tx.txq[ATH_TXQ_AC_BE].elem), \
(unsigned int)(sc->tx.txq[ATH_TXQ_AC_BK].elem), \
(unsigned int)(sc->tx.txq[ATH_TXQ_AC_VI].elem), \
(unsigned int)(sc->tx.txq[ATH_TXQ_AC_VO].elem)); \
if (len >= size) \
goto done; \
} while(0)
Expand All @@ -607,10 +607,10 @@ do { \
do { \
len += snprintf(buf + len, size - len, \
"%s%13i%11i%10i%10i\n", str, \
list_empty(&sc->tx.txq[WME_AC_BE].elem), \
list_empty(&sc->tx.txq[WME_AC_BK].elem), \
list_empty(&sc->tx.txq[WME_AC_VI].elem), \
list_empty(&sc->tx.txq[WME_AC_VO].elem)); \
list_empty(&sc->tx.txq[ATH_TXQ_AC_BE].elem), \
list_empty(&sc->tx.txq[ATH_TXQ_AC_BK].elem), \
list_empty(&sc->tx.txq[ATH_TXQ_AC_VI].elem), \
list_empty(&sc->tx.txq[ATH_TXQ_AC_VO].elem)); \
if (len >= size) \
goto done; \
} while (0)
Expand Down Expand Up @@ -657,10 +657,10 @@ static ssize_t read_file_xmit(struct file *file, char __user *user_buf,
PR("hw-tx-proc-desc: ", txprocdesc);
len += snprintf(buf + len, size - len,
"%s%11p%11p%10p%10p\n", "txq-memory-address:",
&(sc->tx.txq[WME_AC_BE]),
&(sc->tx.txq[WME_AC_BK]),
&(sc->tx.txq[WME_AC_VI]),
&(sc->tx.txq[WME_AC_VO]));
&(sc->tx.txq[ATH_TXQ_AC_BE]),
&(sc->tx.txq[ATH_TXQ_AC_BK]),
&(sc->tx.txq[ATH_TXQ_AC_VI]),
&(sc->tx.txq[ATH_TXQ_AC_VO]));
if (len >= size)
goto done;

Expand Down Expand Up @@ -777,6 +777,108 @@ static ssize_t read_file_stations(struct file *file, char __user *user_buf,
return retval;
}

static ssize_t read_file_misc(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct ath_softc *sc = file->private_data;
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
struct ath_hw *ah = sc->sc_ah;
struct ieee80211_hw *hw = sc->hw;
char *buf;
unsigned int len = 0, size = 8000;
ssize_t retval = 0;
const char *tmp;
unsigned int reg;
struct ath9k_vif_iter_data iter_data;

ath9k_calculate_iter_data(hw, NULL, &iter_data);

buf = kzalloc(size, GFP_KERNEL);
if (buf == NULL)
return -ENOMEM;

switch (sc->sc_ah->opmode) {
case NL80211_IFTYPE_ADHOC:
tmp = "ADHOC";
break;
case NL80211_IFTYPE_MESH_POINT:
tmp = "MESH";
break;
case NL80211_IFTYPE_AP:
tmp = "AP";
break;
case NL80211_IFTYPE_STATION:
tmp = "STATION";
break;
default:
tmp = "???";
break;
}

len += snprintf(buf + len, size - len,
"curbssid: %pM\n"
"OP-Mode: %s(%i)\n"
"Beacon-Timer-Register: 0x%x\n",
common->curbssid,
tmp, (int)(sc->sc_ah->opmode),
REG_READ(ah, AR_BEACON_PERIOD));

reg = REG_READ(ah, AR_TIMER_MODE);
len += snprintf(buf + len, size - len, "Timer-Mode-Register: 0x%x (",
reg);
if (reg & AR_TBTT_TIMER_EN)
len += snprintf(buf + len, size - len, "TBTT ");
if (reg & AR_DBA_TIMER_EN)
len += snprintf(buf + len, size - len, "DBA ");
if (reg & AR_SWBA_TIMER_EN)
len += snprintf(buf + len, size - len, "SWBA ");
if (reg & AR_HCF_TIMER_EN)
len += snprintf(buf + len, size - len, "HCF ");
if (reg & AR_TIM_TIMER_EN)
len += snprintf(buf + len, size - len, "TIM ");
if (reg & AR_DTIM_TIMER_EN)
len += snprintf(buf + len, size - len, "DTIM ");
len += snprintf(buf + len, size - len, ")\n");

reg = sc->sc_ah->imask;
len += snprintf(buf + len, size - len, "imask: 0x%x (", reg);
if (reg & ATH9K_INT_SWBA)
len += snprintf(buf + len, size - len, "SWBA ");
if (reg & ATH9K_INT_BMISS)
len += snprintf(buf + len, size - len, "BMISS ");
if (reg & ATH9K_INT_CST)
len += snprintf(buf + len, size - len, "CST ");
if (reg & ATH9K_INT_RX)
len += snprintf(buf + len, size - len, "RX ");
if (reg & ATH9K_INT_RXHP)
len += snprintf(buf + len, size - len, "RXHP ");
if (reg & ATH9K_INT_RXLP)
len += snprintf(buf + len, size - len, "RXLP ");
if (reg & ATH9K_INT_BB_WATCHDOG)
len += snprintf(buf + len, size - len, "BB_WATCHDOG ");
/* there are other IRQs if one wanted to add them. */
len += snprintf(buf + len, size - len, ")\n");

len += snprintf(buf + len, size - len,
"VIF Counts: AP: %i STA: %i MESH: %i WDS: %i"
" ADHOC: %i OTHER: %i nvifs: %hi beacon-vifs: %hi\n",
iter_data.naps, iter_data.nstations, iter_data.nmeshes,
iter_data.nwds, iter_data.nadhocs, iter_data.nothers,
sc->nvifs, sc->nbcnvifs);

len += snprintf(buf + len, size - len,
"Calculated-BSSID-Mask: %pM\n",
iter_data.mask);

if (len > size)
len = size;

retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
kfree(buf);

return retval;
}

void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf,
struct ath_tx_status *ts)
{
Expand Down Expand Up @@ -822,6 +924,13 @@ static const struct file_operations fops_stations = {
.llseek = default_llseek,
};

static const struct file_operations fops_misc = {
.read = read_file_misc,
.open = ath9k_debugfs_open,
.owner = THIS_MODULE,
.llseek = default_llseek,
};

static ssize_t read_file_recv(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
Expand Down Expand Up @@ -1063,6 +1172,10 @@ int ath9k_init_debug(struct ath_hw *ah)
sc, &fops_stations))
goto err;

if (!debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy,
sc, &fops_misc))
goto err;

if (!debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy,
sc, &fops_recv))
goto err;
Expand Down

0 comments on commit 55f6d0f

Please sign in to comment.