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.c37
1 files changed, 15 insertions, 22 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index 5ba79b935f09..3afa2a3ebee4 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -68,7 +68,8 @@ int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
68 /* 68 /*
69 * Enable RX. 69 * Enable RX.
70 */ 70 */
71 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON); 71 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_RX_ON);
72 rt2x00link_start_tuner(rt2x00dev);
72 73
73 /* 74 /*
74 * Start watchdog monitoring. 75 * Start watchdog monitoring.
@@ -102,7 +103,8 @@ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
102 /* 103 /*
103 * Disable RX. 104 * Disable RX.
104 */ 105 */
105 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF); 106 rt2x00link_stop_tuner(rt2x00dev);
107 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_RX_OFF);
106 108
107 /* 109 /*
108 * Disable radio. 110 * Disable radio.
@@ -113,23 +115,6 @@ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
113 rt2x00leds_led_radio(rt2x00dev, false); 115 rt2x00leds_led_radio(rt2x00dev, false);
114} 116}
115 117
116void rt2x00lib_toggle_rx(struct rt2x00_dev *rt2x00dev, enum dev_state state)
117{
118 /*
119 * When we are disabling the RX, we should also stop the link tuner.
120 */
121 if (state == STATE_RADIO_RX_OFF)
122 rt2x00link_stop_tuner(rt2x00dev);
123
124 rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
125
126 /*
127 * When we are enabling the RX, we should also start the link tuner.
128 */
129 if (state == STATE_RADIO_RX_ON)
130 rt2x00link_start_tuner(rt2x00dev);
131}
132
133static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac, 118static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
134 struct ieee80211_vif *vif) 119 struct ieee80211_vif *vif)
135{ 120{
@@ -483,6 +468,10 @@ void rt2x00lib_rxdone(struct queue_entry *entry)
483 unsigned int header_length; 468 unsigned int header_length;
484 int rate_idx; 469 int rate_idx;
485 470
471 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
472 !test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
473 goto submit_entry;
474
486 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) 475 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
487 goto submit_entry; 476 goto submit_entry;
488 477
@@ -567,9 +556,13 @@ void rt2x00lib_rxdone(struct queue_entry *entry)
567 entry->skb = skb; 556 entry->skb = skb;
568 557
569submit_entry: 558submit_entry:
570 rt2x00dev->ops->lib->clear_entry(entry); 559 entry->flags = 0;
571 rt2x00queue_index_inc(entry->queue, Q_INDEX);
572 rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE); 560 rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE);
561 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
562 test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) {
563 rt2x00dev->ops->lib->clear_entry(entry);
564 rt2x00queue_index_inc(entry->queue, Q_INDEX);
565 }
573} 566}
574EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); 567EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
575 568
@@ -678,7 +671,7 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
678{ 671{
679 entry->flags = 0; 672 entry->flags = 0;
680 entry->bitrate = rate->bitrate; 673 entry->bitrate = rate->bitrate;
681 entry->hw_value =index; 674 entry->hw_value = index;
682 entry->hw_value_short = index; 675 entry->hw_value_short = index;
683 676
684 if (rate->flags & DEV_RATE_SHORT_PREAMBLE) 677 if (rate->flags & DEV_RATE_SHORT_PREAMBLE)