static int read_file_interrupt(struct seq_file *file, void *data) { struct ieee80211_hw *hw = dev_get_drvdata(file->private); struct ath_softc *sc = hw->priv; #define PR_IS(a, s) \ do { \ seq_printf(file, "%21s: %10u\n", a, \ sc->debug.stats.istats.s); \ } while (0) if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) { PR_IS("RXLP", rxlp); PR_IS("RXHP", rxhp); PR_IS("WATHDOG", bb_watchdog); } else { PR_IS("RX", rxok); } PR_IS("RXEOL", rxeol); PR_IS("RXORN", rxorn); PR_IS("TX", txok); PR_IS("TXURN", txurn); PR_IS("MIB", mib); PR_IS("RXPHY", rxphyerr); PR_IS("RXKCM", rx_keycache_miss); PR_IS("SWBA", swba); PR_IS("BMISS", bmiss); PR_IS("BNR", bnr); PR_IS("CST", cst); PR_IS("GTT", gtt); PR_IS("TIM", tim); PR_IS("CABEND", cabend); PR_IS("DTIMSYNC", dtimsync); PR_IS("DTIM", dtim); PR_IS("TSFOOR", tsfoor); PR_IS("MCI", mci); PR_IS("GENTIMER", gen_timer); PR_IS("TOTAL", total); seq_puts(file, "SYNC_CAUSE stats:\n"); PR_IS("Sync-All", sync_cause_all); PR_IS("RTC-IRQ", sync_rtc_irq); PR_IS("MAC-IRQ", sync_mac_irq); PR_IS("EEPROM-Illegal-Access", eeprom_illegal_access); PR_IS("APB-Timeout", apb_timeout); PR_IS("PCI-Mode-Conflict", pci_mode_conflict); PR_IS("HOST1-Fatal", host1_fatal); PR_IS("HOST1-Perr", host1_perr); PR_IS("TRCV-FIFO-Perr", trcv_fifo_perr); PR_IS("RADM-CPL-EP", radm_cpl_ep); PR_IS("RADM-CPL-DLLP-Abort", radm_cpl_dllp_abort); PR_IS("RADM-CPL-TLP-Abort", radm_cpl_tlp_abort); PR_IS("RADM-CPL-ECRC-Err", radm_cpl_ecrc_err); PR_IS("RADM-CPL-Timeout", radm_cpl_timeout); PR_IS("Local-Bus-Timeout", local_timeout); PR_IS("PM-Access", pm_access); PR_IS("MAC-Awake", mac_awake); PR_IS("MAC-Asleep", mac_asleep); PR_IS("MAC-Sleep-Access", mac_sleep_access); return 0; }
static ssize_t read_file_interrupt(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { struct ath_softc *sc = file->private_data; unsigned int len = 0; int rv; int mxlen = 4000; char *buf = kmalloc(mxlen, GFP_KERNEL); if (!buf) return -ENOMEM; #define PR_IS(a, s) \ do { \ len += scnprintf(buf + len, mxlen - len, \ "%21s: %10u\n", a, \ sc->debug.stats.istats.s); \ } while (0) if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) { PR_IS("RXLP", rxlp); PR_IS("RXHP", rxhp); PR_IS("WATHDOG", bb_watchdog); } else { PR_IS("RX", rxok); } PR_IS("RXEOL", rxeol); PR_IS("RXORN", rxorn); PR_IS("TX", txok); PR_IS("TXURN", txurn); PR_IS("MIB", mib); PR_IS("RXPHY", rxphyerr); PR_IS("RXKCM", rx_keycache_miss); PR_IS("SWBA", swba); PR_IS("BMISS", bmiss); PR_IS("BNR", bnr); PR_IS("CST", cst); PR_IS("GTT", gtt); PR_IS("TIM", tim); PR_IS("CABEND", cabend); PR_IS("DTIMSYNC", dtimsync); PR_IS("DTIM", dtim); PR_IS("TSFOOR", tsfoor); PR_IS("MCI", mci); PR_IS("GENTIMER", gen_timer); PR_IS("TOTAL", total); len += scnprintf(buf + len, mxlen - len, "SYNC_CAUSE stats:\n"); PR_IS("Sync-All", sync_cause_all); PR_IS("RTC-IRQ", sync_rtc_irq); PR_IS("MAC-IRQ", sync_mac_irq); PR_IS("EEPROM-Illegal-Access", eeprom_illegal_access); PR_IS("APB-Timeout", apb_timeout); PR_IS("PCI-Mode-Conflict", pci_mode_conflict); PR_IS("HOST1-Fatal", host1_fatal); PR_IS("HOST1-Perr", host1_perr); PR_IS("TRCV-FIFO-Perr", trcv_fifo_perr); PR_IS("RADM-CPL-EP", radm_cpl_ep); PR_IS("RADM-CPL-DLLP-Abort", radm_cpl_dllp_abort); PR_IS("RADM-CPL-TLP-Abort", radm_cpl_tlp_abort); PR_IS("RADM-CPL-ECRC-Err", radm_cpl_ecrc_err); PR_IS("RADM-CPL-Timeout", radm_cpl_timeout); PR_IS("Local-Bus-Timeout", local_timeout); PR_IS("PM-Access", pm_access); PR_IS("MAC-Awake", mac_awake); PR_IS("MAC-Asleep", mac_asleep); PR_IS("MAC-Sleep-Access", mac_sleep_access); if (len > mxlen) len = mxlen; rv = simple_read_from_buffer(user_buf, count, ppos, buf, len); kfree(buf); return rv; }