diff options
| author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2012-11-28 04:38:52 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2012-11-30 13:38:15 -0500 |
| commit | c175db87411f0e79924a48563d5f595b9a352907 (patch) | |
| tree | 9b8c8740077337fb366e0e5a5a43321585eb3e06 /drivers/net/wireless/ath | |
| parent | 6c50f9459e62eb133563fd23606f68bfc9d120e8 (diff) | |
ath9k: Move ethtool functions to debug.c
The ethtool statistics are available only when
CONFIG_ATH9K_DEBUGFS is enabled, move these functions
to debug.c
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')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.c | 119 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.h | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 127 |
3 files changed, 127 insertions, 127 deletions
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index 939308c2571..cb5e45798ac 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c | |||
| @@ -1509,6 +1509,125 @@ static const struct file_operations fops_btcoex = { | |||
| 1509 | }; | 1509 | }; |
| 1510 | #endif | 1510 | #endif |
| 1511 | 1511 | ||
| 1512 | /* Ethtool support for get-stats */ | ||
| 1513 | |||
| 1514 | #define AMKSTR(nm) #nm "_BE", #nm "_BK", #nm "_VI", #nm "_VO" | ||
| 1515 | static const char ath9k_gstrings_stats[][ETH_GSTRING_LEN] = { | ||
| 1516 | "tx_pkts_nic", | ||
| 1517 | "tx_bytes_nic", | ||
| 1518 | "rx_pkts_nic", | ||
| 1519 | "rx_bytes_nic", | ||
| 1520 | AMKSTR(d_tx_pkts), | ||
| 1521 | AMKSTR(d_tx_bytes), | ||
| 1522 | AMKSTR(d_tx_mpdus_queued), | ||
| 1523 | AMKSTR(d_tx_mpdus_completed), | ||
| 1524 | AMKSTR(d_tx_mpdu_xretries), | ||
| 1525 | AMKSTR(d_tx_aggregates), | ||
| 1526 | AMKSTR(d_tx_ampdus_queued_hw), | ||
| 1527 | AMKSTR(d_tx_ampdus_queued_sw), | ||
| 1528 | AMKSTR(d_tx_ampdus_completed), | ||
| 1529 | AMKSTR(d_tx_ampdu_retries), | ||
| 1530 | AMKSTR(d_tx_ampdu_xretries), | ||
| 1531 | AMKSTR(d_tx_fifo_underrun), | ||
| 1532 | AMKSTR(d_tx_op_exceeded), | ||
| 1533 | AMKSTR(d_tx_timer_expiry), | ||
| 1534 | AMKSTR(d_tx_desc_cfg_err), | ||
| 1535 | AMKSTR(d_tx_data_underrun), | ||
| 1536 | AMKSTR(d_tx_delim_underrun), | ||
| 1537 | "d_rx_decrypt_crc_err", | ||
| 1538 | "d_rx_phy_err", | ||
| 1539 | "d_rx_mic_err", | ||
| 1540 | "d_rx_pre_delim_crc_err", | ||
| 1541 | "d_rx_post_delim_crc_err", | ||
| 1542 | "d_rx_decrypt_busy_err", | ||
| 1543 | |||
| 1544 | "d_rx_phyerr_radar", | ||
| 1545 | "d_rx_phyerr_ofdm_timing", | ||
| 1546 | "d_rx_phyerr_cck_timing", | ||
| 1547 | |||
| 1548 | }; | ||
| 1549 | #define ATH9K_SSTATS_LEN ARRAY_SIZE(ath9k_gstrings_stats) | ||
| 1550 | |||
| 1551 | void ath9k_get_et_strings(struct ieee80211_hw *hw, | ||
| 1552 | struct ieee80211_vif *vif, | ||
| 1553 | u32 sset, u8 *data) | ||
| 1554 | { | ||
| 1555 | if (sset == ETH_SS_STATS) | ||
| 1556 | memcpy(data, *ath9k_gstrings_stats, | ||
| 1557 | sizeof(ath9k_gstrings_stats)); | ||
| 1558 | } | ||
| 1559 | |||
| 1560 | int ath9k_get_et_sset_count(struct ieee80211_hw *hw, | ||
| 1561 | struct ieee80211_vif *vif, int sset) | ||
| 1562 | { | ||
| 1563 | if (sset == ETH_SS_STATS) | ||
| 1564 | return ATH9K_SSTATS_LEN; | ||
| 1565 | return 0; | ||
| 1566 | } | ||
| 1567 | |||
| 1568 | #define AWDATA(elem) \ | ||
| 1569 | do { \ | ||
| 1570 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].elem; \ | ||
| 1571 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].elem; \ | ||
| 1572 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].elem; \ | ||
| 1573 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].elem; \ | ||
| 1574 | } while (0) | ||
| 1575 | |||
| 1576 | #define AWDATA_RX(elem) \ | ||
| 1577 | do { \ | ||
| 1578 | data[i++] = sc->debug.stats.rxstats.elem; \ | ||
| 1579 | } while (0) | ||
| 1580 | |||
| 1581 | void ath9k_get_et_stats(struct ieee80211_hw *hw, | ||
| 1582 | struct ieee80211_vif *vif, | ||
| 1583 | struct ethtool_stats *stats, u64 *data) | ||
| 1584 | { | ||
| 1585 | struct ath_softc *sc = hw->priv; | ||
| 1586 | int i = 0; | ||
| 1587 | |||
| 1588 | data[i++] = (sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].tx_pkts_all + | ||
| 1589 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].tx_pkts_all + | ||
| 1590 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].tx_pkts_all + | ||
| 1591 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].tx_pkts_all); | ||
| 1592 | data[i++] = (sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].tx_bytes_all + | ||
| 1593 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].tx_bytes_all + | ||
| 1594 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].tx_bytes_all + | ||
| 1595 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].tx_bytes_all); | ||
| 1596 | AWDATA_RX(rx_pkts_all); | ||
| 1597 | AWDATA_RX(rx_bytes_all); | ||
| 1598 | |||
| 1599 | AWDATA(tx_pkts_all); | ||
| 1600 | AWDATA(tx_bytes_all); | ||
| 1601 | AWDATA(queued); | ||
| 1602 | AWDATA(completed); | ||
| 1603 | AWDATA(xretries); | ||
| 1604 | AWDATA(a_aggr); | ||
| 1605 | AWDATA(a_queued_hw); | ||
| 1606 | AWDATA(a_queued_sw); | ||
| 1607 | AWDATA(a_completed); | ||
| 1608 | AWDATA(a_retries); | ||
| 1609 | AWDATA(a_xretries); | ||
| 1610 | AWDATA(fifo_underrun); | ||
| 1611 | AWDATA(xtxop); | ||
| 1612 | AWDATA(timer_exp); | ||
| 1613 | AWDATA(desc_cfg_err); | ||
| 1614 | AWDATA(data_underrun); | ||
| 1615 | AWDATA(delim_underrun); | ||
| 1616 | |||
| 1617 | AWDATA_RX(decrypt_crc_err); | ||
| 1618 | AWDATA_RX(phy_err); | ||
| 1619 | AWDATA_RX(mic_err); | ||
| 1620 | AWDATA_RX(pre_delim_crc_err); | ||
| 1621 | AWDATA_RX(post_delim_crc_err); | ||
| 1622 | AWDATA_RX(decrypt_busy_err); | ||
| 1623 | |||
| 1624 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_RADAR]); | ||
| 1625 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_OFDM_TIMING]); | ||
| 1626 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_CCK_TIMING]); | ||
| 1627 | |||
| 1628 | WARN_ON(i != ATH9K_SSTATS_LEN); | ||
| 1629 | } | ||
| 1630 | |||
| 1512 | int ath9k_init_debug(struct ath_hw *ah) | 1631 | int ath9k_init_debug(struct ath_hw *ah) |
| 1513 | { | 1632 | { |
| 1514 | struct ath_common *common = ath9k_hw_common(ah); | 1633 | struct ath_common *common = ath9k_hw_common(ah); |
diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h index f9bee18de5a..bfc21b37cb1 100644 --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h | |||
| @@ -307,6 +307,14 @@ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf, | |||
| 307 | struct ath_tx_status *ts, struct ath_txq *txq, | 307 | struct ath_tx_status *ts, struct ath_txq *txq, |
| 308 | unsigned int flags); | 308 | unsigned int flags); |
| 309 | void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs); | 309 | void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs); |
| 310 | int ath9k_get_et_sset_count(struct ieee80211_hw *hw, | ||
| 311 | struct ieee80211_vif *vif, int sset); | ||
| 312 | void ath9k_get_et_stats(struct ieee80211_hw *hw, | ||
| 313 | struct ieee80211_vif *vif, | ||
| 314 | struct ethtool_stats *stats, u64 *data); | ||
| 315 | void ath9k_get_et_strings(struct ieee80211_hw *hw, | ||
| 316 | struct ieee80211_vif *vif, | ||
| 317 | u32 sset, u8 *data); | ||
| 310 | 318 | ||
| 311 | #else | 319 | #else |
| 312 | 320 | ||
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 0653dbc99e3..ffae384276a 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
| @@ -1882,133 +1882,6 @@ static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) | |||
| 1882 | return 0; | 1882 | return 0; |
| 1883 | } | 1883 | } |
| 1884 | 1884 | ||
| 1885 | #ifdef CONFIG_ATH9K_DEBUGFS | ||
| 1886 | |||
| 1887 | /* Ethtool support for get-stats */ | ||
| 1888 | |||
| 1889 | #define AMKSTR(nm) #nm "_BE", #nm "_BK", #nm "_VI", #nm "_VO" | ||
| 1890 | static const char ath9k_gstrings_stats[][ETH_GSTRING_LEN] = { | ||
| 1891 | "tx_pkts_nic", | ||
| 1892 | "tx_bytes_nic", | ||
| 1893 | "rx_pkts_nic", | ||
| 1894 | "rx_bytes_nic", | ||
| 1895 | AMKSTR(d_tx_pkts), | ||
| 1896 | AMKSTR(d_tx_bytes), | ||
| 1897 | AMKSTR(d_tx_mpdus_queued), | ||
| 1898 | AMKSTR(d_tx_mpdus_completed), | ||
| 1899 | AMKSTR(d_tx_mpdu_xretries), | ||
| 1900 | AMKSTR(d_tx_aggregates), | ||
| 1901 | AMKSTR(d_tx_ampdus_queued_hw), | ||
| 1902 | AMKSTR(d_tx_ampdus_queued_sw), | ||
| 1903 | AMKSTR(d_tx_ampdus_completed), | ||
| 1904 | AMKSTR(d_tx_ampdu_retries), | ||
| 1905 | AMKSTR(d_tx_ampdu_xretries), | ||
| 1906 | AMKSTR(d_tx_fifo_underrun), | ||
| 1907 | AMKSTR(d_tx_op_exceeded), | ||
| 1908 | AMKSTR(d_tx_timer_expiry), | ||
| 1909 | AMKSTR(d_tx_desc_cfg_err), | ||
| 1910 | AMKSTR(d_tx_data_underrun), | ||
| 1911 | AMKSTR(d_tx_delim_underrun), | ||
| 1912 | |||
| 1913 | "d_rx_decrypt_crc_err", | ||
| 1914 | "d_rx_phy_err", | ||
| 1915 | "d_rx_mic_err", | ||
| 1916 | "d_rx_pre_delim_crc_err", | ||
| 1917 | "d_rx_post_delim_crc_err", | ||
| 1918 | "d_rx_decrypt_busy_err", | ||
| 1919 | |||
| 1920 | "d_rx_phyerr_radar", | ||
| 1921 | "d_rx_phyerr_ofdm_timing", | ||
| 1922 | "d_rx_phyerr_cck_timing", | ||
| 1923 | |||
| 1924 | }; | ||
| 1925 | #define ATH9K_SSTATS_LEN ARRAY_SIZE(ath9k_gstrings_stats) | ||
| 1926 | |||
| 1927 | static void ath9k_get_et_strings(struct ieee80211_hw *hw, | ||
| 1928 | struct ieee80211_vif *vif, | ||
| 1929 | u32 sset, u8 *data) | ||
| 1930 | { | ||
| 1931 | if (sset == ETH_SS_STATS) | ||
| 1932 | memcpy(data, *ath9k_gstrings_stats, | ||
| 1933 | sizeof(ath9k_gstrings_stats)); | ||
| 1934 | } | ||
| 1935 | |||
| 1936 | static int ath9k_get_et_sset_count(struct ieee80211_hw *hw, | ||
| 1937 | struct ieee80211_vif *vif, int sset) | ||
| 1938 | { | ||
| 1939 | if (sset == ETH_SS_STATS) | ||
| 1940 | return ATH9K_SSTATS_LEN; | ||
| 1941 | return 0; | ||
| 1942 | } | ||
| 1943 | |||
| 1944 | #define AWDATA(elem) \ | ||
| 1945 | do { \ | ||
| 1946 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].elem; \ | ||
| 1947 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].elem; \ | ||
| 1948 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].elem; \ | ||
| 1949 | data[i++] = sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].elem; \ | ||
| 1950 | } while (0) | ||
| 1951 | |||
| 1952 | #define AWDATA_RX(elem) \ | ||
| 1953 | do { \ | ||
| 1954 | data[i++] = sc->debug.stats.rxstats.elem; \ | ||
| 1955 | } while (0) | ||
| 1956 | |||
| 1957 | static void ath9k_get_et_stats(struct ieee80211_hw *hw, | ||
| 1958 | struct ieee80211_vif *vif, | ||
| 1959 | struct ethtool_stats *stats, u64 *data) | ||
| 1960 | { | ||
| 1961 | struct ath_softc *sc = hw->priv; | ||
| 1962 | int i = 0; | ||
| 1963 | |||
| 1964 | data[i++] = (sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].tx_pkts_all + | ||
| 1965 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].tx_pkts_all + | ||
| 1966 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].tx_pkts_all + | ||
| 1967 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].tx_pkts_all); | ||
| 1968 | data[i++] = (sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BE)].tx_bytes_all + | ||
| 1969 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_BK)].tx_bytes_all + | ||
| 1970 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VI)].tx_bytes_all + | ||
| 1971 | sc->debug.stats.txstats[PR_QNUM(IEEE80211_AC_VO)].tx_bytes_all); | ||
| 1972 | AWDATA_RX(rx_pkts_all); | ||
| 1973 | AWDATA_RX(rx_bytes_all); | ||
| 1974 | |||
| 1975 | AWDATA(tx_pkts_all); | ||
| 1976 | AWDATA(tx_bytes_all); | ||
| 1977 | AWDATA(queued); | ||
| 1978 | AWDATA(completed); | ||
| 1979 | AWDATA(xretries); | ||
| 1980 | AWDATA(a_aggr); | ||
| 1981 | AWDATA(a_queued_hw); | ||
| 1982 | AWDATA(a_queued_sw); | ||
| 1983 | AWDATA(a_completed); | ||
| 1984 | AWDATA(a_retries); | ||
| 1985 | AWDATA(a_xretries); | ||
| 1986 | AWDATA(fifo_underrun); | ||
| 1987 | AWDATA(xtxop); | ||
| 1988 | AWDATA(timer_exp); | ||
| 1989 | AWDATA(desc_cfg_err); | ||
| 1990 | AWDATA(data_underrun); | ||
| 1991 | AWDATA(delim_underrun); | ||
| 1992 | |||
| 1993 | AWDATA_RX(decrypt_crc_err); | ||
| 1994 | AWDATA_RX(phy_err); | ||
| 1995 | AWDATA_RX(mic_err); | ||
| 1996 | AWDATA_RX(pre_delim_crc_err); | ||
| 1997 | AWDATA_RX(post_delim_crc_err); | ||
| 1998 | AWDATA_RX(decrypt_busy_err); | ||
| 1999 | |||
| 2000 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_RADAR]); | ||
| 2001 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_OFDM_TIMING]); | ||
| 2002 | AWDATA_RX(phy_err_stats[ATH9K_PHYERR_CCK_TIMING]); | ||
| 2003 | |||
| 2004 | WARN_ON(i != ATH9K_SSTATS_LEN); | ||
| 2005 | } | ||
| 2006 | |||
| 2007 | /* End of ethtool get-stats functions */ | ||
| 2008 | |||
| 2009 | #endif | ||
| 2010 | |||
| 2011 | |||
| 2012 | #ifdef CONFIG_PM_SLEEP | 1885 | #ifdef CONFIG_PM_SLEEP |
| 2013 | 1886 | ||
| 2014 | static void ath9k_wow_map_triggers(struct ath_softc *sc, | 1887 | static void ath9k_wow_map_triggers(struct ath_softc *sc, |
