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)
 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)
        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;
 
        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)
 {
        .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)
 {
                        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;