diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2010-05-14 01:48:56 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-02 16:13:03 -0400 |
commit | ca74b83b66dbd289a395c6243695d746c76676cc (patch) | |
tree | 99a7093d9f9cecf896d3cf8583405300707be9eb | |
parent | 2edb4583c6a581e1e48af259db2a2d467d11551d (diff) |
ath9k_htc: Initialize beacon/CAB queues
This patch initializes the beacon and CAB HW queues
when the driver is loaded.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_init.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 28 |
3 files changed, 39 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index 351c4a44c984..2207299547f8 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h | |||
@@ -393,6 +393,9 @@ struct ath9k_htc_priv { | |||
393 | int led_off_duration; | 393 | int led_off_duration; |
394 | int led_on_cnt; | 394 | int led_on_cnt; |
395 | int led_off_cnt; | 395 | int led_off_cnt; |
396 | |||
397 | int beaconq; | ||
398 | int cabq; | ||
396 | int hwq_map[ATH9K_WME_AC_VO+1]; | 399 | int hwq_map[ATH9K_WME_AC_VO+1]; |
397 | 400 | ||
398 | #ifdef CONFIG_ATH9K_HTC_DEBUGFS | 401 | #ifdef CONFIG_ATH9K_HTC_DEBUGFS |
@@ -429,6 +432,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb); | |||
429 | void ath9k_tx_cleanup(struct ath9k_htc_priv *priv); | 432 | void ath9k_tx_cleanup(struct ath9k_htc_priv *priv); |
430 | bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, | 433 | bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, |
431 | enum ath9k_tx_queue_subtype qtype); | 434 | enum ath9k_tx_queue_subtype qtype); |
435 | int ath9k_htc_cabq_setup(struct ath9k_htc_priv *priv); | ||
432 | int get_hw_qnum(u16 queue, int *hwq_map); | 436 | int get_hw_qnum(u16 queue, int *hwq_map); |
433 | int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum, | 437 | int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum, |
434 | struct ath9k_tx_queue_info *qinfo); | 438 | struct ath9k_tx_queue_info *qinfo); |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c index dc015077a8d9..7ec2c2ec9d52 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c | |||
@@ -420,6 +420,20 @@ static int ath9k_init_queues(struct ath9k_htc_priv *priv) | |||
420 | for (i = 0; i < ARRAY_SIZE(priv->hwq_map); i++) | 420 | for (i = 0; i < ARRAY_SIZE(priv->hwq_map); i++) |
421 | priv->hwq_map[i] = -1; | 421 | priv->hwq_map[i] = -1; |
422 | 422 | ||
423 | priv->beaconq = ath9k_hw_beaconq_setup(priv->ah); | ||
424 | if (priv->beaconq == -1) { | ||
425 | ath_print(common, ATH_DBG_FATAL, | ||
426 | "Unable to setup BEACON xmit queue\n"); | ||
427 | goto err; | ||
428 | } | ||
429 | |||
430 | priv->cabq = ath9k_htc_cabq_setup(priv); | ||
431 | if (priv->cabq == -1) { | ||
432 | ath_print(common, ATH_DBG_FATAL, | ||
433 | "Unable to setup CAB xmit queue\n"); | ||
434 | goto err; | ||
435 | } | ||
436 | |||
423 | if (!ath9k_htc_txq_setup(priv, ATH9K_WME_AC_BE)) { | 437 | if (!ath9k_htc_txq_setup(priv, ATH9K_WME_AC_BE)) { |
424 | ath_print(common, ATH_DBG_FATAL, | 438 | ath_print(common, ATH_DBG_FATAL, |
425 | "Unable to setup xmit queue for BE traffic\n"); | 439 | "Unable to setup xmit queue for BE traffic\n"); |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index 09ff8f1a68e0..77a487b03c0e 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
@@ -20,6 +20,16 @@ | |||
20 | /* TX */ | 20 | /* TX */ |
21 | /******/ | 21 | /******/ |
22 | 22 | ||
23 | #define ATH9K_HTC_INIT_TXQ(subtype) do { \ | ||
24 | qi.tqi_subtype = subtype; \ | ||
25 | qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT; \ | ||
26 | qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT; \ | ||
27 | qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT; \ | ||
28 | qi.tqi_physCompBuf = 0; \ | ||
29 | qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE | \ | ||
30 | TXQ_FLAG_TXDESCINT_ENABLE; \ | ||
31 | } while (0) | ||
32 | |||
23 | int get_hw_qnum(u16 queue, int *hwq_map) | 33 | int get_hw_qnum(u16 queue, int *hwq_map) |
24 | { | 34 | { |
25 | switch (queue) { | 35 | switch (queue) { |
@@ -297,13 +307,7 @@ bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, | |||
297 | int qnum; | 307 | int qnum; |
298 | 308 | ||
299 | memset(&qi, 0, sizeof(qi)); | 309 | memset(&qi, 0, sizeof(qi)); |
300 | 310 | ATH9K_HTC_INIT_TXQ(subtype); | |
301 | qi.tqi_subtype = subtype; | ||
302 | qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT; | ||
303 | qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT; | ||
304 | qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT; | ||
305 | qi.tqi_physCompBuf = 0; | ||
306 | qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE | TXQ_FLAG_TXDESCINT_ENABLE; | ||
307 | 311 | ||
308 | qnum = ath9k_hw_setuptxqueue(priv->ah, ATH9K_TX_QUEUE_DATA, &qi); | 312 | qnum = ath9k_hw_setuptxqueue(priv->ah, ATH9K_TX_QUEUE_DATA, &qi); |
309 | if (qnum == -1) | 313 | if (qnum == -1) |
@@ -321,6 +325,16 @@ bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, | |||
321 | return true; | 325 | return true; |
322 | } | 326 | } |
323 | 327 | ||
328 | int ath9k_htc_cabq_setup(struct ath9k_htc_priv *priv) | ||
329 | { | ||
330 | struct ath9k_tx_queue_info qi; | ||
331 | |||
332 | memset(&qi, 0, sizeof(qi)); | ||
333 | ATH9K_HTC_INIT_TXQ(0); | ||
334 | |||
335 | return ath9k_hw_setuptxqueue(priv->ah, ATH9K_TX_QUEUE_CAB, &qi); | ||
336 | } | ||
337 | |||
324 | /******/ | 338 | /******/ |
325 | /* RX */ | 339 | /* RX */ |
326 | /******/ | 340 | /******/ |