diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/htc_drv_debug.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_debug.c | 97 |
1 files changed, 82 insertions, 15 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_debug.c b/drivers/net/wireless/ath/ath9k/htc_drv_debug.c index d08ef24e9696..c1b45e2f8481 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_debug.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_debug.c | |||
@@ -496,21 +496,7 @@ static ssize_t read_file_base_eeprom(struct file *file, char __user *user_buf, | |||
496 | ssize_t retval = 0; | 496 | ssize_t retval = 0; |
497 | char *buf; | 497 | char *buf; |
498 | 498 | ||
499 | /* | 499 | pBase = ath9k_htc_get_eeprom_base(priv); |
500 | * This can be done since all the 3 EEPROM families have the | ||
501 | * same base header upto a certain point, and we are interested in | ||
502 | * the data only upto that point. | ||
503 | */ | ||
504 | |||
505 | if (AR_SREV_9271(priv->ah)) | ||
506 | pBase = (struct base_eep_header *) | ||
507 | &priv->ah->eeprom.map4k.baseEepHeader; | ||
508 | else if (priv->ah->hw_version.usbdev == AR9280_USB) | ||
509 | pBase = (struct base_eep_header *) | ||
510 | &priv->ah->eeprom.def.baseEepHeader; | ||
511 | else if (priv->ah->hw_version.usbdev == AR9287_USB) | ||
512 | pBase = (struct base_eep_header *) | ||
513 | &priv->ah->eeprom.map9287.baseEepHeader; | ||
514 | 500 | ||
515 | if (pBase == NULL) { | 501 | if (pBase == NULL) { |
516 | ath_err(common, "Unknown EEPROM type\n"); | 502 | ath_err(common, "Unknown EEPROM type\n"); |
@@ -916,6 +902,87 @@ static const struct file_operations fops_modal_eeprom = { | |||
916 | .llseek = default_llseek, | 902 | .llseek = default_llseek, |
917 | }; | 903 | }; |
918 | 904 | ||
905 | |||
906 | /* Ethtool support for get-stats */ | ||
907 | #define AMKSTR(nm) #nm "_BE", #nm "_BK", #nm "_VI", #nm "_VO" | ||
908 | static const char ath9k_htc_gstrings_stats[][ETH_GSTRING_LEN] = { | ||
909 | "tx_pkts_nic", | ||
910 | "tx_bytes_nic", | ||
911 | "rx_pkts_nic", | ||
912 | "rx_bytes_nic", | ||
913 | |||
914 | AMKSTR(d_tx_pkts), | ||
915 | |||
916 | "d_rx_crc_err", | ||
917 | "d_rx_decrypt_crc_err", | ||
918 | "d_rx_phy_err", | ||
919 | "d_rx_mic_err", | ||
920 | "d_rx_pre_delim_crc_err", | ||
921 | "d_rx_post_delim_crc_err", | ||
922 | "d_rx_decrypt_busy_err", | ||
923 | |||
924 | "d_rx_phyerr_radar", | ||
925 | "d_rx_phyerr_ofdm_timing", | ||
926 | "d_rx_phyerr_cck_timing", | ||
927 | |||
928 | }; | ||
929 | #define ATH9K_HTC_SSTATS_LEN ARRAY_SIZE(ath9k_htc_gstrings_stats) | ||
930 | |||
931 | void ath9k_htc_get_et_strings(struct ieee80211_hw *hw, | ||
932 | struct ieee80211_vif *vif, | ||
933 | u32 sset, u8 *data) | ||
934 | { | ||
935 | if (sset == ETH_SS_STATS) | ||
936 | memcpy(data, *ath9k_htc_gstrings_stats, | ||
937 | sizeof(ath9k_htc_gstrings_stats)); | ||
938 | } | ||
939 | |||
940 | int ath9k_htc_get_et_sset_count(struct ieee80211_hw *hw, | ||
941 | struct ieee80211_vif *vif, int sset) | ||
942 | { | ||
943 | if (sset == ETH_SS_STATS) | ||
944 | return ATH9K_HTC_SSTATS_LEN; | ||
945 | return 0; | ||
946 | } | ||
947 | |||
948 | #define STXBASE priv->debug.tx_stats | ||
949 | #define SRXBASE priv->debug.rx_stats | ||
950 | #define ASTXQ(a) \ | ||
951 | data[i++] = STXBASE.a[IEEE80211_AC_BE]; \ | ||
952 | data[i++] = STXBASE.a[IEEE80211_AC_BK]; \ | ||
953 | data[i++] = STXBASE.a[IEEE80211_AC_VI]; \ | ||
954 | data[i++] = STXBASE.a[IEEE80211_AC_VO] | ||
955 | |||
956 | void ath9k_htc_get_et_stats(struct ieee80211_hw *hw, | ||
957 | struct ieee80211_vif *vif, | ||
958 | struct ethtool_stats *stats, u64 *data) | ||
959 | { | ||
960 | struct ath9k_htc_priv *priv = hw->priv; | ||
961 | int i = 0; | ||
962 | |||
963 | data[i++] = STXBASE.skb_success; | ||
964 | data[i++] = STXBASE.skb_success_bytes; | ||
965 | data[i++] = SRXBASE.skb_completed; | ||
966 | data[i++] = SRXBASE.skb_completed_bytes; | ||
967 | |||
968 | ASTXQ(queue_stats); | ||
969 | |||
970 | data[i++] = SRXBASE.err_crc; | ||
971 | data[i++] = SRXBASE.err_decrypt_crc; | ||
972 | data[i++] = SRXBASE.err_phy; | ||
973 | data[i++] = SRXBASE.err_mic; | ||
974 | data[i++] = SRXBASE.err_pre_delim; | ||
975 | data[i++] = SRXBASE.err_post_delim; | ||
976 | data[i++] = SRXBASE.err_decrypt_busy; | ||
977 | |||
978 | data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_RADAR]; | ||
979 | data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_OFDM_TIMING]; | ||
980 | data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_CCK_TIMING]; | ||
981 | |||
982 | WARN_ON(i != ATH9K_HTC_SSTATS_LEN); | ||
983 | } | ||
984 | |||
985 | |||
919 | int ath9k_htc_init_debug(struct ath_hw *ah) | 986 | int ath9k_htc_init_debug(struct ath_hw *ah) |
920 | { | 987 | { |
921 | struct ath_common *common = ath9k_hw_common(ah); | 988 | struct ath_common *common = ath9k_hw_common(ah); |