forked from Minki/linux
rt2x00: Add link tuner safe RX toggle states
This adds 2 new states which both are used to toggle the RX. These new states are required for usage inside the link tuner thread, because the normal RX toggling will stop the link tuner thread. While it is possible that the link tuner thread itself is the caller of the RX toggle (when using software antenna diversity). Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
b290d43361
commit
61667d8d5b
@ -960,8 +960,12 @@ static int rt2400pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
rt2400pci_disable_radio(rt2x00dev);
|
||||
break;
|
||||
case STATE_RADIO_RX_ON:
|
||||
case STATE_RADIO_RX_ON_LINK:
|
||||
rt2400pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
break;
|
||||
case STATE_RADIO_RX_OFF:
|
||||
rt2400pci_toggle_rx(rt2x00dev, state);
|
||||
case STATE_RADIO_RX_OFF_LINK:
|
||||
rt2400pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
break;
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
|
@ -1112,8 +1112,12 @@ static int rt2500pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
rt2500pci_disable_radio(rt2x00dev);
|
||||
break;
|
||||
case STATE_RADIO_RX_ON:
|
||||
case STATE_RADIO_RX_ON_LINK:
|
||||
rt2500pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
break;
|
||||
case STATE_RADIO_RX_OFF:
|
||||
rt2500pci_toggle_rx(rt2x00dev, state);
|
||||
case STATE_RADIO_RX_OFF_LINK:
|
||||
rt2500pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
break;
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
|
@ -1001,8 +1001,12 @@ static int rt2500usb_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
rt2500usb_disable_radio(rt2x00dev);
|
||||
break;
|
||||
case STATE_RADIO_RX_ON:
|
||||
case STATE_RADIO_RX_ON_LINK:
|
||||
rt2500usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
break;
|
||||
case STATE_RADIO_RX_OFF:
|
||||
rt2500usb_toggle_rx(rt2x00dev, state);
|
||||
case STATE_RADIO_RX_OFF_LINK:
|
||||
rt2500usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
break;
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
|
@ -102,7 +102,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
|
||||
* else the changes will be ignored by the device.
|
||||
*/
|
||||
if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
|
||||
rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF_LINK);
|
||||
|
||||
/*
|
||||
* Write new antenna setup to device and reset the link tuner.
|
||||
@ -116,7 +116,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
|
||||
rt2x00dev->link.ant.active.tx = libconf.ant.tx;
|
||||
|
||||
if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
|
||||
rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK);
|
||||
}
|
||||
|
||||
void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
|
||||
|
@ -85,6 +85,8 @@ enum dev_state {
|
||||
STATE_RADIO_OFF,
|
||||
STATE_RADIO_RX_ON,
|
||||
STATE_RADIO_RX_OFF,
|
||||
STATE_RADIO_RX_ON_LINK,
|
||||
STATE_RADIO_RX_OFF_LINK,
|
||||
STATE_RADIO_IRQ_ON,
|
||||
STATE_RADIO_IRQ_OFF,
|
||||
};
|
||||
|
@ -1482,8 +1482,12 @@ static int rt61pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
rt61pci_disable_radio(rt2x00dev);
|
||||
break;
|
||||
case STATE_RADIO_RX_ON:
|
||||
case STATE_RADIO_RX_ON_LINK:
|
||||
rt61pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
break;
|
||||
case STATE_RADIO_RX_OFF:
|
||||
rt61pci_toggle_rx(rt2x00dev, state);
|
||||
case STATE_RADIO_RX_OFF_LINK:
|
||||
rt61pci_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
break;
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
|
@ -1208,8 +1208,12 @@ static int rt73usb_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
rt73usb_disable_radio(rt2x00dev);
|
||||
break;
|
||||
case STATE_RADIO_RX_ON:
|
||||
case STATE_RADIO_RX_ON_LINK:
|
||||
rt73usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
|
||||
break;
|
||||
case STATE_RADIO_RX_OFF:
|
||||
rt73usb_toggle_rx(rt2x00dev, state);
|
||||
case STATE_RADIO_RX_OFF_LINK:
|
||||
rt73usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
|
||||
break;
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
|
Loading…
Reference in New Issue
Block a user