aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/htc.h4
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_init.c14
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_txrx.c28
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);
429void ath9k_tx_cleanup(struct ath9k_htc_priv *priv); 432void ath9k_tx_cleanup(struct ath9k_htc_priv *priv);
430bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, 433bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv,
431 enum ath9k_tx_queue_subtype qtype); 434 enum ath9k_tx_queue_subtype qtype);
435int ath9k_htc_cabq_setup(struct ath9k_htc_priv *priv);
432int get_hw_qnum(u16 queue, int *hwq_map); 436int get_hw_qnum(u16 queue, int *hwq_map);
433int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum, 437int 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
23int get_hw_qnum(u16 queue, int *hwq_map) 33int 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
328int 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/******/