diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 37 |
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 | ||
116 | void 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 | |||
133 | static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac, | 118 | static 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 | ||
569 | submit_entry: | 558 | submit_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 | } |
574 | EXPORT_SYMBOL_GPL(rt2x00lib_rxdone); | 567 | EXPORT_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) |