aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorVasanthakumar Thiagarajan <vasanth@atheros.com>2010-04-15 17:39:41 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-16 15:43:49 -0400
commit9b9cc61c46822ced22bc09d9aaa9f0f1859719cb (patch)
tree851d88bdcb44ef026a69cd72b7457e71104db76b /drivers/net
parentafe754d66fbde0a0c07d954d5f1ad36d10136c72 (diff)
ath9k_hw: Abort rx if hw is not coming out of full sleep in reset
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.c8
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.h1
3 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index e07dd1c11db..35f5cf40a99 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1137,6 +1137,13 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
1137 ah->txchainmask = common->tx_chainmask; 1137 ah->txchainmask = common->tx_chainmask;
1138 ah->rxchainmask = common->rx_chainmask; 1138 ah->rxchainmask = common->rx_chainmask;
1139 1139
1140 if (!ah->chip_fullsleep) {
1141 ath9k_hw_abortpcurecv(ah);
1142 if (!ath9k_hw_stopdmarecv(ah))
1143 ath_print(common, ATH_DBG_XMIT,
1144 "Failed to stop receive dma\n");
1145 }
1146
1140 if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 1147 if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
1141 return -EIO; 1148 return -EIO;
1142 1149
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index c003baf2e93..b54e857c031 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -747,6 +747,14 @@ void ath9k_hw_stoppcurecv(struct ath_hw *ah)
747} 747}
748EXPORT_SYMBOL(ath9k_hw_stoppcurecv); 748EXPORT_SYMBOL(ath9k_hw_stoppcurecv);
749 749
750void ath9k_hw_abortpcurecv(struct ath_hw *ah)
751{
752 REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_RX_ABORT | AR_DIAG_RX_DIS);
753
754 ath9k_hw_disable_mib_counters(ah);
755}
756EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
757
750bool ath9k_hw_stopdmarecv(struct ath_hw *ah) 758bool ath9k_hw_stopdmarecv(struct ath_hw *ah)
751{ 759{
752#define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */ 760#define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h
index 346d84a7b93..68eb8d0b92e 100644
--- a/drivers/net/wireless/ath/ath9k/mac.h
+++ b/drivers/net/wireless/ath/ath9k/mac.h
@@ -711,6 +711,7 @@ bool ath9k_hw_setrxabort(struct ath_hw *ah, bool set);
711void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp); 711void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp);
712void ath9k_hw_startpcureceive(struct ath_hw *ah); 712void ath9k_hw_startpcureceive(struct ath_hw *ah);
713void ath9k_hw_stoppcurecv(struct ath_hw *ah); 713void ath9k_hw_stoppcurecv(struct ath_hw *ah);
714void ath9k_hw_abortpcurecv(struct ath_hw *ah);
714bool ath9k_hw_stopdmarecv(struct ath_hw *ah); 715bool ath9k_hw_stopdmarecv(struct ath_hw *ah);
715int ath9k_hw_beaconq_setup(struct ath_hw *ah); 716int ath9k_hw_beaconq_setup(struct ath_hw *ah);
716 717