aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/hif_usb.c8
-rw-r--r--drivers/net/wireless/ath/ath9k/htc.h14
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_debug.c81
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_main.c6
4 files changed, 108 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index f5dda84176c3..9e582e14da74 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -234,10 +234,15 @@ static inline void ath9k_skb_queue_complete(struct hif_device_usb *hif_dev,
234 struct sk_buff *skb; 234 struct sk_buff *skb;
235 235
236 while ((skb = __skb_dequeue(queue)) != NULL) { 236 while ((skb = __skb_dequeue(queue)) != NULL) {
237#ifdef CONFIG_ATH9K_HTC_DEBUGFS
238 int ln = skb->len;
239#endif
237 ath9k_htc_txcompletion_cb(hif_dev->htc_handle, 240 ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
238 skb, txok); 241 skb, txok);
239 if (txok) 242 if (txok) {
240 TX_STAT_INC(skb_success); 243 TX_STAT_INC(skb_success);
244 TX_STAT_ADD(skb_success_bytes, ln);
245 }
241 else 246 else
242 TX_STAT_INC(skb_failed); 247 TX_STAT_INC(skb_failed);
243 } 248 }
@@ -620,6 +625,7 @@ static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev,
620 625
621err: 626err:
622 for (i = 0; i < pool_index; i++) { 627 for (i = 0; i < pool_index; i++) {
628 RX_STAT_ADD(skb_completed_bytes, skb_pool[i]->len);
623 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i], 629 ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i],
624 skb_pool[i]->len, USB_WLAN_RX_PIPE); 630 skb_pool[i]->len, USB_WLAN_RX_PIPE);
625 RX_STAT_INC(skb_completed); 631 RX_STAT_INC(skb_completed);
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 6bd556d203ae..055d7c25e090 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -324,7 +324,9 @@ static inline struct ath9k_htc_tx_ctl *HTC_SKB_CB(struct sk_buff *skb)
324#ifdef CONFIG_ATH9K_HTC_DEBUGFS 324#ifdef CONFIG_ATH9K_HTC_DEBUGFS
325 325
326#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++) 326#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++)
327#define TX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c += a)
327#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c++) 328#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c++)
329#define RX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c += a)
328#define CAB_STAT_INC priv->debug.tx_stats.cab_queued++ 330#define CAB_STAT_INC priv->debug.tx_stats.cab_queued++
329 331
330#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++) 332#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++)
@@ -337,6 +339,7 @@ struct ath_tx_stats {
337 u32 buf_completed; 339 u32 buf_completed;
338 u32 skb_queued; 340 u32 skb_queued;
339 u32 skb_success; 341 u32 skb_success;
342 u32 skb_success_bytes;
340 u32 skb_failed; 343 u32 skb_failed;
341 u32 cab_queued; 344 u32 cab_queued;
342 u32 queue_stats[IEEE80211_NUM_ACS]; 345 u32 queue_stats[IEEE80211_NUM_ACS];
@@ -345,6 +348,7 @@ struct ath_tx_stats {
345struct ath_rx_stats { 348struct ath_rx_stats {
346 u32 skb_allocated; 349 u32 skb_allocated;
347 u32 skb_completed; 350 u32 skb_completed;
351 u32 skb_completed_bytes;
348 u32 skb_dropped; 352 u32 skb_dropped;
349 u32 err_crc; 353 u32 err_crc;
350 u32 err_decrypt_crc; 354 u32 err_decrypt_crc;
@@ -362,10 +366,20 @@ struct ath9k_debug {
362 struct ath_rx_stats rx_stats; 366 struct ath_rx_stats rx_stats;
363}; 367};
364 368
369void ath9k_htc_get_et_strings(struct ieee80211_hw *hw,
370 struct ieee80211_vif *vif,
371 u32 sset, u8 *data);
372int ath9k_htc_get_et_sset_count(struct ieee80211_hw *hw,
373 struct ieee80211_vif *vif, int sset);
374void ath9k_htc_get_et_stats(struct ieee80211_hw *hw,
375 struct ieee80211_vif *vif,
376 struct ethtool_stats *stats, u64 *data);
365#else 377#else
366 378
367#define TX_STAT_INC(c) do { } while (0) 379#define TX_STAT_INC(c) do { } while (0)
380#define TX_STAT_ADD(c, a) do { } while (0)
368#define RX_STAT_INC(c) do { } while (0) 381#define RX_STAT_INC(c) do { } while (0)
382#define RX_STAT_ADD(c, a) do { } while (0)
369#define CAB_STAT_INC do { } while (0) 383#define CAB_STAT_INC do { } while (0)
370 384
371#define TX_QSTAT_INC(c) do { } while (0) 385#define TX_QSTAT_INC(c) do { } while (0)
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_debug.c b/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
index 632d13da43e2..7416d58a122c 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_debug.c
@@ -902,6 +902,87 @@ static const struct file_operations fops_modal_eeprom = {
902 .llseek = default_llseek, 902 .llseek = default_llseek,
903}; 903};
904 904
905
906/* Ethtool support for get-stats */
907#define AMKSTR(nm) #nm "_BE", #nm "_BK", #nm "_VI", #nm "_VO"
908static 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
931void 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
940int 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
956void 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
905int ath9k_htc_init_debug(struct ath_hw *ah) 986int ath9k_htc_init_debug(struct ath_hw *ah)
906{ 987{
907 struct ath_common *common = ath9k_hw_common(ah); 988 struct ath_common *common = ath9k_hw_common(ah);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index ef68857f9363..be6baf7f6510 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1837,4 +1837,10 @@ struct ieee80211_ops ath9k_htc_ops = {
1837 .set_bitrate_mask = ath9k_htc_set_bitrate_mask, 1837 .set_bitrate_mask = ath9k_htc_set_bitrate_mask,
1838 .get_stats = ath9k_htc_get_stats, 1838 .get_stats = ath9k_htc_get_stats,
1839 .get_antenna = ath9k_htc_get_antenna, 1839 .get_antenna = ath9k_htc_get_antenna,
1840
1841#ifdef CONFIG_ATH9K_HTC_DEBUGFS
1842 .get_et_sset_count = ath9k_htc_get_et_sset_count,
1843 .get_et_stats = ath9k_htc_get_et_stats,
1844 .get_et_strings = ath9k_htc_get_et_strings,
1845#endif
1840}; 1846};