aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2x00dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00dev.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index bd3afc92f434..fa74acdd271f 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -66,9 +66,9 @@ int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
66 set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags); 66 set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
67 67
68 /* 68 /*
69 * Enable RX. 69 * Enable queues.
70 */ 70 */
71 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_RX_ON); 71 rt2x00queue_start_queues(rt2x00dev);
72 rt2x00link_start_tuner(rt2x00dev); 72 rt2x00link_start_tuner(rt2x00dev);
73 73
74 /* 74 /*
@@ -76,11 +76,6 @@ int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
76 */ 76 */
77 rt2x00link_start_watchdog(rt2x00dev); 77 rt2x00link_start_watchdog(rt2x00dev);
78 78
79 /*
80 * Start the TX queues.
81 */
82 ieee80211_wake_queues(rt2x00dev->hw);
83
84 return 0; 79 return 0;
85} 80}
86 81
@@ -90,21 +85,16 @@ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
90 return; 85 return;
91 86
92 /* 87 /*
93 * Stop the TX queues in mac80211.
94 */
95 ieee80211_stop_queues(rt2x00dev->hw);
96 rt2x00queue_stop_queues(rt2x00dev);
97
98 /*
99 * Stop watchdog monitoring. 88 * Stop watchdog monitoring.
100 */ 89 */
101 rt2x00link_stop_watchdog(rt2x00dev); 90 rt2x00link_stop_watchdog(rt2x00dev);
102 91
103 /* 92 /*
104 * Disable RX. 93 * Stop all queues
105 */ 94 */
106 rt2x00link_stop_tuner(rt2x00dev); 95 rt2x00link_stop_tuner(rt2x00dev);
107 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_RX_OFF); 96 rt2x00queue_stop_queues(rt2x00dev);
97 rt2x00queue_flush_queues(rt2x00dev, true);
108 98
109 /* 99 /*
110 * Disable radio. 100 * Disable radio.
@@ -236,8 +226,16 @@ void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev)
236} 226}
237EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt); 227EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt);
238 228
229void rt2x00lib_dmastart(struct queue_entry *entry)
230{
231 set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
232 rt2x00queue_index_inc(entry->queue, Q_INDEX);
233}
234EXPORT_SYMBOL_GPL(rt2x00lib_dmastart);
235
239void rt2x00lib_dmadone(struct queue_entry *entry) 236void rt2x00lib_dmadone(struct queue_entry *entry)
240{ 237{
238 set_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags);
241 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags); 239 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
242 rt2x00queue_index_inc(entry->queue, Q_INDEX_DMA_DONE); 240 rt2x00queue_index_inc(entry->queue, Q_INDEX_DMA_DONE);
243} 241}
@@ -249,7 +247,6 @@ void rt2x00lib_txdone(struct queue_entry *entry,
249 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 247 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
250 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb); 248 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
251 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb); 249 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
252 enum data_queue_qid qid = skb_get_queue_mapping(entry->skb);
253 unsigned int header_length, i; 250 unsigned int header_length, i;
254 u8 rate_idx, rate_flags, retry_rates; 251 u8 rate_idx, rate_flags, retry_rates;
255 u8 skbdesc_flags = skbdesc->flags; 252 u8 skbdesc_flags = skbdesc->flags;
@@ -403,7 +400,7 @@ void rt2x00lib_txdone(struct queue_entry *entry,
403 * is reenabled when the txdone handler has finished. 400 * is reenabled when the txdone handler has finished.
404 */ 401 */
405 if (!rt2x00queue_threshold(entry->queue)) 402 if (!rt2x00queue_threshold(entry->queue))
406 ieee80211_wake_queue(rt2x00dev->hw, qid); 403 rt2x00queue_unpause_queue(entry->queue);
407} 404}
408EXPORT_SYMBOL_GPL(rt2x00lib_txdone); 405EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
409 406
@@ -566,10 +563,8 @@ submit_entry:
566 entry->flags = 0; 563 entry->flags = 0;
567 rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE); 564 rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE);
568 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) && 565 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
569 test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) { 566 test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
570 rt2x00dev->ops->lib->clear_entry(entry); 567 rt2x00dev->ops->lib->clear_entry(entry);
571 rt2x00queue_index_inc(entry->queue, Q_INDEX);
572 }
573} 568}
574EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); 569EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
575 570