diff options
author | Nick Kossifidis <mickflemm@gmail.com> | 2010-11-23 13:52:24 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-11-30 13:52:32 -0500 |
commit | e8325ed87457e07b9ceeb1e7a31df787dd7ee106 (patch) | |
tree | f41b8ea9c3a12fa8fe3ed881fba74e06890b6d39 | |
parent | f7317ba2d669c1b54fb31ed7834361a700a79217 (diff) |
ath5k: Check RXE when setting RXDP
* Make sure we are not trying to set RXDP while RX is active,
for now ignore the return value.
Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath5k/ath5k.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath5k/dma.c | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h index 629a5eebe302..b36d3a530258 100644 --- a/drivers/net/wireless/ath/ath5k/ath5k.h +++ b/drivers/net/wireless/ath/ath5k/ath5k.h | |||
@@ -1168,7 +1168,7 @@ void ath5k_hw_set_clockrate(struct ath5k_hw *ah); | |||
1168 | void ath5k_hw_start_rx_dma(struct ath5k_hw *ah); | 1168 | void ath5k_hw_start_rx_dma(struct ath5k_hw *ah); |
1169 | int ath5k_hw_stop_rx_dma(struct ath5k_hw *ah); | 1169 | int ath5k_hw_stop_rx_dma(struct ath5k_hw *ah); |
1170 | u32 ath5k_hw_get_rxdp(struct ath5k_hw *ah); | 1170 | u32 ath5k_hw_get_rxdp(struct ath5k_hw *ah); |
1171 | void ath5k_hw_set_rxdp(struct ath5k_hw *ah, u32 phys_addr); | 1171 | int ath5k_hw_set_rxdp(struct ath5k_hw *ah, u32 phys_addr); |
1172 | int ath5k_hw_start_tx_dma(struct ath5k_hw *ah, unsigned int queue); | 1172 | int ath5k_hw_start_tx_dma(struct ath5k_hw *ah, unsigned int queue); |
1173 | int ath5k_hw_stop_tx_dma(struct ath5k_hw *ah, unsigned int queue); | 1173 | int ath5k_hw_stop_tx_dma(struct ath5k_hw *ah, unsigned int queue); |
1174 | u32 ath5k_hw_get_txdp(struct ath5k_hw *ah, unsigned int queue); | 1174 | u32 ath5k_hw_get_txdp(struct ath5k_hw *ah, unsigned int queue); |
diff --git a/drivers/net/wireless/ath/ath5k/dma.c b/drivers/net/wireless/ath/ath5k/dma.c index bfdfcff42a1e..3fe634f588c2 100644 --- a/drivers/net/wireless/ath/ath5k/dma.c +++ b/drivers/net/wireless/ath/ath5k/dma.c | |||
@@ -95,11 +95,18 @@ u32 ath5k_hw_get_rxdp(struct ath5k_hw *ah) | |||
95 | * @ah: The &struct ath5k_hw | 95 | * @ah: The &struct ath5k_hw |
96 | * @phys_addr: RX descriptor address | 96 | * @phys_addr: RX descriptor address |
97 | * | 97 | * |
98 | * XXX: Should we check if rx is enabled before setting rxdp ? | 98 | * Returns -EIO if rx is active |
99 | */ | 99 | */ |
100 | void ath5k_hw_set_rxdp(struct ath5k_hw *ah, u32 phys_addr) | 100 | int ath5k_hw_set_rxdp(struct ath5k_hw *ah, u32 phys_addr) |
101 | { | 101 | { |
102 | if (ath5k_hw_reg_read(ah, AR5K_CR) & AR5K_CR_RXE) { | ||
103 | ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_DMA, | ||
104 | "tried to set RXDP while rx was active !\n"); | ||
105 | return -EIO; | ||
106 | } | ||
107 | |||
102 | ath5k_hw_reg_write(ah, phys_addr, AR5K_RXDP); | 108 | ath5k_hw_reg_write(ah, phys_addr, AR5K_RXDP); |
109 | return 0; | ||
103 | } | 110 | } |
104 | 111 | ||
105 | 112 | ||