aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/debug.c
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2012-02-16 01:21:02 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-02-27 14:05:42 -0500
commit6bcf6f647b456dc037238137c0db2917e5d8c525 (patch)
tree20ea598b5b78c49a507126ce1864e23093be213f /drivers/net/wireless/ath/ath9k/debug.c
parent25d78d305ff7187837d3535cdda997ad91352fde (diff)
ath9k: Merge wiphy and misc debugfs files
This patch merges the 'wiphy' and 'misc' debugfs files and consolidates the information. Information about the current channel and other HT parameters can be obtained from both mac80211 and iw. Remove such redundant data. The reset statistics have been removed, they will be re-added in a subsequent patch (in a new debugfs file). Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/debug.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/debug.c224
1 files changed, 64 insertions, 160 deletions
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c
index dc45cf91aba2..b2c60690255a 100644
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
@@ -451,109 +451,6 @@ static const struct file_operations fops_interrupt = {
451 .llseek = default_llseek, 451 .llseek = default_llseek,
452}; 452};
453 453
454static const char *channel_type_str(enum nl80211_channel_type t)
455{
456 switch (t) {
457 case NL80211_CHAN_NO_HT:
458 return "no ht";
459 case NL80211_CHAN_HT20:
460 return "ht20";
461 case NL80211_CHAN_HT40MINUS:
462 return "ht40-";
463 case NL80211_CHAN_HT40PLUS:
464 return "ht40+";
465 default:
466 return "???";
467 }
468}
469
470static ssize_t read_file_wiphy(struct file *file, char __user *user_buf,
471 size_t count, loff_t *ppos)
472{
473 struct ath_softc *sc = file->private_data;
474 struct ieee80211_channel *chan = sc->hw->conf.channel;
475 struct ieee80211_conf *conf = &(sc->hw->conf);
476 char buf[512];
477 unsigned int len = 0;
478 u8 addr[ETH_ALEN];
479 u32 tmp;
480
481 len += snprintf(buf + len, sizeof(buf) - len,
482 "%s (chan=%d center-freq: %d MHz channel-type: %d (%s))\n",
483 wiphy_name(sc->hw->wiphy),
484 ieee80211_frequency_to_channel(chan->center_freq),
485 chan->center_freq,
486 conf->channel_type,
487 channel_type_str(conf->channel_type));
488
489 ath9k_ps_wakeup(sc);
490 put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_STA_ID0), addr);
491 put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_STA_ID1) & 0xffff, addr + 4);
492 len += snprintf(buf + len, sizeof(buf) - len,
493 "addr: %pM\n", addr);
494 put_unaligned_le32(REG_READ_D(sc->sc_ah, AR_BSSMSKL), addr);
495 put_unaligned_le16(REG_READ_D(sc->sc_ah, AR_BSSMSKU) & 0xffff, addr + 4);
496 len += snprintf(buf + len, sizeof(buf) - len,
497 "addrmask: %pM\n", addr);
498 tmp = ath9k_hw_getrxfilter(sc->sc_ah);
499 ath9k_ps_restore(sc);
500 len += snprintf(buf + len, sizeof(buf) - len,
501 "rfilt: 0x%x", tmp);
502 if (tmp & ATH9K_RX_FILTER_UCAST)
503 len += snprintf(buf + len, sizeof(buf) - len, " UCAST");
504 if (tmp & ATH9K_RX_FILTER_MCAST)
505 len += snprintf(buf + len, sizeof(buf) - len, " MCAST");
506 if (tmp & ATH9K_RX_FILTER_BCAST)
507 len += snprintf(buf + len, sizeof(buf) - len, " BCAST");
508 if (tmp & ATH9K_RX_FILTER_CONTROL)
509 len += snprintf(buf + len, sizeof(buf) - len, " CONTROL");
510 if (tmp & ATH9K_RX_FILTER_BEACON)
511 len += snprintf(buf + len, sizeof(buf) - len, " BEACON");
512 if (tmp & ATH9K_RX_FILTER_PROM)
513 len += snprintf(buf + len, sizeof(buf) - len, " PROM");
514 if (tmp & ATH9K_RX_FILTER_PROBEREQ)
515 len += snprintf(buf + len, sizeof(buf) - len, " PROBEREQ");
516 if (tmp & ATH9K_RX_FILTER_PHYERR)
517 len += snprintf(buf + len, sizeof(buf) - len, " PHYERR");
518 if (tmp & ATH9K_RX_FILTER_MYBEACON)
519 len += snprintf(buf + len, sizeof(buf) - len, " MYBEACON");
520 if (tmp & ATH9K_RX_FILTER_COMP_BAR)
521 len += snprintf(buf + len, sizeof(buf) - len, " COMP_BAR");
522 if (tmp & ATH9K_RX_FILTER_PSPOLL)
523 len += snprintf(buf + len, sizeof(buf) - len, " PSPOLL");
524 if (tmp & ATH9K_RX_FILTER_PHYRADAR)
525 len += snprintf(buf + len, sizeof(buf) - len, " PHYRADAR");
526 if (tmp & ATH9K_RX_FILTER_MCAST_BCAST_ALL)
527 len += snprintf(buf + len, sizeof(buf) - len, " MCAST_BCAST_ALL");
528
529 len += snprintf(buf + len, sizeof(buf) - len,
530 "\n\nReset causes:\n"
531 " baseband hang: %d\n"
532 " baseband watchdog: %d\n"
533 " fatal hardware error interrupt: %d\n"
534 " tx hardware error: %d\n"
535 " tx path hang: %d\n"
536 " pll rx hang: %d\n",
537 sc->debug.stats.reset[RESET_TYPE_BB_HANG],
538 sc->debug.stats.reset[RESET_TYPE_BB_WATCHDOG],
539 sc->debug.stats.reset[RESET_TYPE_FATAL_INT],
540 sc->debug.stats.reset[RESET_TYPE_TX_ERROR],
541 sc->debug.stats.reset[RESET_TYPE_TX_HANG],
542 sc->debug.stats.reset[RESET_TYPE_PLL_HANG]);
543
544 if (len > sizeof(buf))
545 len = sizeof(buf);
546
547 return simple_read_from_buffer(user_buf, count, ppos, buf, len);
548}
549
550static const struct file_operations fops_wiphy = {
551 .read = read_file_wiphy,
552 .open = ath9k_debugfs_open,
553 .owner = THIS_MODULE,
554 .llseek = default_llseek,
555};
556
557#define PR_QNUM(_n) sc->tx.txq_map[_n]->axq_qnum 454#define PR_QNUM(_n) sc->tx.txq_map[_n]->axq_qnum
558#define PR(str, elem) \ 455#define PR(str, elem) \
559 do { \ 456 do { \
@@ -763,84 +660,93 @@ static ssize_t read_file_misc(struct file *file, char __user *user_buf,
763{ 660{
764 struct ath_softc *sc = file->private_data; 661 struct ath_softc *sc = file->private_data;
765 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 662 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
766 struct ath_hw *ah = sc->sc_ah;
767 struct ieee80211_hw *hw = sc->hw; 663 struct ieee80211_hw *hw = sc->hw;
768 char *buf; 664 struct ath9k_vif_iter_data iter_data;
769 unsigned int len = 0, size = 8000; 665 char buf[512];
666 unsigned int len = 0;
770 ssize_t retval = 0; 667 ssize_t retval = 0;
771 unsigned int reg; 668 unsigned int reg;
772 struct ath9k_vif_iter_data iter_data; 669 u32 rxfilter;
773 670
774 ath9k_calculate_iter_data(hw, NULL, &iter_data); 671 len += snprintf(buf + len, sizeof(buf) - len,
775 672 "BSSID: %pM\n", common->curbssid);
776 buf = kzalloc(size, GFP_KERNEL); 673 len += snprintf(buf + len, sizeof(buf) - len,
777 if (buf == NULL) 674 "BSSID-MASK: %pM\n", common->bssidmask);
778 return -ENOMEM; 675 len += snprintf(buf + len, sizeof(buf) - len,
676 "OPMODE: %s\n", ath_opmode_to_string(sc->sc_ah->opmode));
779 677
780 ath9k_ps_wakeup(sc); 678 ath9k_ps_wakeup(sc);
781 len += snprintf(buf + len, size - len, 679 rxfilter = ath9k_hw_getrxfilter(sc->sc_ah);
782 "curbssid: %pM\n"
783 "OP-Mode: %s(%i)\n"
784 "Beacon-Timer-Register: 0x%x\n",
785 common->curbssid,
786 ath_opmode_to_string(sc->sc_ah->opmode),
787 (int)(sc->sc_ah->opmode),
788 REG_READ(ah, AR_BEACON_PERIOD));
789
790 reg = REG_READ(ah, AR_TIMER_MODE);
791 ath9k_ps_restore(sc); 680 ath9k_ps_restore(sc);
792 len += snprintf(buf + len, size - len, "Timer-Mode-Register: 0x%x (", 681
793 reg); 682 len += snprintf(buf + len, sizeof(buf) - len,
794 if (reg & AR_TBTT_TIMER_EN) 683 "RXFILTER: 0x%x", rxfilter);
795 len += snprintf(buf + len, size - len, "TBTT "); 684
796 if (reg & AR_DBA_TIMER_EN) 685 if (rxfilter & ATH9K_RX_FILTER_UCAST)
797 len += snprintf(buf + len, size - len, "DBA "); 686 len += snprintf(buf + len, sizeof(buf) - len, " UCAST");
798 if (reg & AR_SWBA_TIMER_EN) 687 if (rxfilter & ATH9K_RX_FILTER_MCAST)
799 len += snprintf(buf + len, size - len, "SWBA "); 688 len += snprintf(buf + len, sizeof(buf) - len, " MCAST");
800 if (reg & AR_HCF_TIMER_EN) 689 if (rxfilter & ATH9K_RX_FILTER_BCAST)
801 len += snprintf(buf + len, size - len, "HCF "); 690 len += snprintf(buf + len, sizeof(buf) - len, " BCAST");
802 if (reg & AR_TIM_TIMER_EN) 691 if (rxfilter & ATH9K_RX_FILTER_CONTROL)
803 len += snprintf(buf + len, size - len, "TIM "); 692 len += snprintf(buf + len, sizeof(buf) - len, " CONTROL");
804 if (reg & AR_DTIM_TIMER_EN) 693 if (rxfilter & ATH9K_RX_FILTER_BEACON)
805 len += snprintf(buf + len, size - len, "DTIM "); 694 len += snprintf(buf + len, sizeof(buf) - len, " BEACON");
806 len += snprintf(buf + len, size - len, ")\n"); 695 if (rxfilter & ATH9K_RX_FILTER_PROM)
696 len += snprintf(buf + len, sizeof(buf) - len, " PROM");
697 if (rxfilter & ATH9K_RX_FILTER_PROBEREQ)
698 len += snprintf(buf + len, sizeof(buf) - len, " PROBEREQ");
699 if (rxfilter & ATH9K_RX_FILTER_PHYERR)
700 len += snprintf(buf + len, sizeof(buf) - len, " PHYERR");
701 if (rxfilter & ATH9K_RX_FILTER_MYBEACON)
702 len += snprintf(buf + len, sizeof(buf) - len, " MYBEACON");
703 if (rxfilter & ATH9K_RX_FILTER_COMP_BAR)
704 len += snprintf(buf + len, sizeof(buf) - len, " COMP_BAR");
705 if (rxfilter & ATH9K_RX_FILTER_PSPOLL)
706 len += snprintf(buf + len, sizeof(buf) - len, " PSPOLL");
707 if (rxfilter & ATH9K_RX_FILTER_PHYRADAR)
708 len += snprintf(buf + len, sizeof(buf) - len, " PHYRADAR");
709 if (rxfilter & ATH9K_RX_FILTER_MCAST_BCAST_ALL)
710 len += snprintf(buf + len, sizeof(buf) - len, " MCAST_BCAST_ALL");
711 if (rxfilter & ATH9K_RX_FILTER_CONTROL_WRAPPER)
712 len += snprintf(buf + len, sizeof(buf) - len, " CONTROL_WRAPPER");
713
714 len += snprintf(buf + len, sizeof(buf) - len, "\n");
807 715
808 reg = sc->sc_ah->imask; 716 reg = sc->sc_ah->imask;
809 len += snprintf(buf + len, size - len, "imask: 0x%x (", reg); 717
718 len += snprintf(buf + len, sizeof(buf) - len, "INTERRUPT-MASK: 0x%x", reg);
719
810 if (reg & ATH9K_INT_SWBA) 720 if (reg & ATH9K_INT_SWBA)
811 len += snprintf(buf + len, size - len, "SWBA "); 721 len += snprintf(buf + len, sizeof(buf) - len, " SWBA");
812 if (reg & ATH9K_INT_BMISS) 722 if (reg & ATH9K_INT_BMISS)
813 len += snprintf(buf + len, size - len, "BMISS "); 723 len += snprintf(buf + len, sizeof(buf) - len, " BMISS");
814 if (reg & ATH9K_INT_CST) 724 if (reg & ATH9K_INT_CST)
815 len += snprintf(buf + len, size - len, "CST "); 725 len += snprintf(buf + len, sizeof(buf) - len, " CST");
816 if (reg & ATH9K_INT_RX) 726 if (reg & ATH9K_INT_RX)
817 len += snprintf(buf + len, size - len, "RX "); 727 len += snprintf(buf + len, sizeof(buf) - len, " RX");
818 if (reg & ATH9K_INT_RXHP) 728 if (reg & ATH9K_INT_RXHP)
819 len += snprintf(buf + len, size - len, "RXHP "); 729 len += snprintf(buf + len, sizeof(buf) - len, " RXHP");
820 if (reg & ATH9K_INT_RXLP) 730 if (reg & ATH9K_INT_RXLP)
821 len += snprintf(buf + len, size - len, "RXLP "); 731 len += snprintf(buf + len, sizeof(buf) - len, " RXLP");
822 if (reg & ATH9K_INT_BB_WATCHDOG) 732 if (reg & ATH9K_INT_BB_WATCHDOG)
823 len += snprintf(buf + len, size - len, "BB_WATCHDOG "); 733 len += snprintf(buf + len, sizeof(buf) - len, " BB_WATCHDOG");
824 /* there are other IRQs if one wanted to add them. */
825 len += snprintf(buf + len, size - len, ")\n");
826 734
827 len += snprintf(buf + len, size - len, 735 len += snprintf(buf + len, sizeof(buf) - len, "\n");
828 "VIF Counts: AP: %i STA: %i MESH: %i WDS: %i" 736
829 " ADHOC: %i OTHER: %i nvifs: %hi beacon-vifs: %hi\n", 737 ath9k_calculate_iter_data(hw, NULL, &iter_data);
738
739 len += snprintf(buf + len, sizeof(buf) - len,
740 "VIF-COUNTS: AP: %i STA: %i MESH: %i WDS: %i"
741 " ADHOC: %i OTHER: %i TOTAL: %hi BEACON-VIF: %hi\n",
830 iter_data.naps, iter_data.nstations, iter_data.nmeshes, 742 iter_data.naps, iter_data.nstations, iter_data.nmeshes,
831 iter_data.nwds, iter_data.nadhocs, iter_data.nothers, 743 iter_data.nwds, iter_data.nadhocs, iter_data.nothers,
832 sc->nvifs, sc->nbcnvifs); 744 sc->nvifs, sc->nbcnvifs);
833 745
834 len += snprintf(buf + len, size - len, 746 if (len > sizeof(buf))
835 "Calculated-BSSID-Mask: %pM\n", 747 len = sizeof(buf);
836 iter_data.mask);
837
838 if (len > size)
839 len = size;
840 748
841 retval = simple_read_from_buffer(user_buf, count, ppos, buf, len); 749 retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
842 kfree(buf);
843
844 return retval; 750 return retval;
845} 751}
846 752
@@ -1637,8 +1543,6 @@ int ath9k_init_debug(struct ath_hw *ah)
1637 &fops_dma); 1543 &fops_dma);
1638 debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, 1544 debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
1639 &fops_interrupt); 1545 &fops_interrupt);
1640 debugfs_create_file("wiphy", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
1641 sc, &fops_wiphy);
1642 debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, 1546 debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
1643 &fops_xmit); 1547 &fops_xmit);
1644 debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, 1548 debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc,