diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 35 |
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 | } |
237 | EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt); | 227 | EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt); |
238 | 228 | ||
229 | void 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 | } | ||
234 | EXPORT_SYMBOL_GPL(rt2x00lib_dmastart); | ||
235 | |||
239 | void rt2x00lib_dmadone(struct queue_entry *entry) | 236 | void 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 | } |
408 | EXPORT_SYMBOL_GPL(rt2x00lib_txdone); | 405 | EXPORT_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 | } |
574 | EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); | 569 | EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); |
575 | 570 | ||