diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2014-04-17 05:08:48 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-04-22 15:06:31 -0400 |
commit | bc0df75aea666d855c4111003dbbb197460b6642 (patch) | |
tree | 637c76863f25485a926e9bdedcc2f7d7a152eb64 /drivers/net | |
parent | 44ad4663d5916ed03091a1e2d1af8ebb6d92cfac (diff) |
rt2x00: restore original beaconing state
After changing local per interface beacon setting restore original
global beaconing state.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt61pci.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt73usb.c | 10 |
3 files changed, 17 insertions, 18 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 41d4a8167dc3..c17fcf272728 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -1005,10 +1005,9 @@ void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc) | |||
1005 | entry->skb->len + padding_len); | 1005 | entry->skb->len + padding_len); |
1006 | 1006 | ||
1007 | /* | 1007 | /* |
1008 | * Enable beaconing again. | 1008 | * Restore beaconing state. |
1009 | */ | 1009 | */ |
1010 | rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 1); | 1010 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, orig_reg); |
1011 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); | ||
1012 | 1011 | ||
1013 | /* | 1012 | /* |
1014 | * Clean up beacon skb. | 1013 | * Clean up beacon skb. |
@@ -1039,13 +1038,14 @@ static inline void rt2800_clear_beacon_register(struct rt2x00_dev *rt2x00dev, | |||
1039 | void rt2800_clear_beacon(struct queue_entry *entry) | 1038 | void rt2800_clear_beacon(struct queue_entry *entry) |
1040 | { | 1039 | { |
1041 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; | 1040 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; |
1042 | u32 reg; | 1041 | u32 orig_reg, reg; |
1043 | 1042 | ||
1044 | /* | 1043 | /* |
1045 | * Disable beaconing while we are reloading the beacon data, | 1044 | * Disable beaconing while we are reloading the beacon data, |
1046 | * otherwise we might be sending out invalid data. | 1045 | * otherwise we might be sending out invalid data. |
1047 | */ | 1046 | */ |
1048 | rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®); | 1047 | rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &orig_reg); |
1048 | reg = orig_reg; | ||
1049 | rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0); | 1049 | rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0); |
1050 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); | 1050 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); |
1051 | 1051 | ||
@@ -1055,10 +1055,9 @@ void rt2800_clear_beacon(struct queue_entry *entry) | |||
1055 | rt2800_clear_beacon_register(rt2x00dev, entry->entry_idx); | 1055 | rt2800_clear_beacon_register(rt2x00dev, entry->entry_idx); |
1056 | 1056 | ||
1057 | /* | 1057 | /* |
1058 | * Enabled beaconing again. | 1058 | * Restore beaconing state. |
1059 | */ | 1059 | */ |
1060 | rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 1); | 1060 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, orig_reg); |
1061 | rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); | ||
1062 | } | 1061 | } |
1063 | EXPORT_SYMBOL_GPL(rt2800_clear_beacon); | 1062 | EXPORT_SYMBOL_GPL(rt2800_clear_beacon); |
1064 | 1063 | ||
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index 24402984ee57..9048a9cbe52c 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -2031,13 +2031,14 @@ static void rt61pci_write_beacon(struct queue_entry *entry, | |||
2031 | static void rt61pci_clear_beacon(struct queue_entry *entry) | 2031 | static void rt61pci_clear_beacon(struct queue_entry *entry) |
2032 | { | 2032 | { |
2033 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; | 2033 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; |
2034 | u32 reg; | 2034 | u32 orig_reg, reg; |
2035 | 2035 | ||
2036 | /* | 2036 | /* |
2037 | * Disable beaconing while we are reloading the beacon data, | 2037 | * Disable beaconing while we are reloading the beacon data, |
2038 | * otherwise we might be sending out invalid data. | 2038 | * otherwise we might be sending out invalid data. |
2039 | */ | 2039 | */ |
2040 | rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, ®); | 2040 | rt2x00mmio_register_read(rt2x00dev, TXRX_CSR9, &orig_reg); |
2041 | reg = orig_reg; | ||
2041 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0); | 2042 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0); |
2042 | rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); | 2043 | rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); |
2043 | 2044 | ||
@@ -2048,10 +2049,9 @@ static void rt61pci_clear_beacon(struct queue_entry *entry) | |||
2048 | HW_BEACON_OFFSET(entry->entry_idx), 0); | 2049 | HW_BEACON_OFFSET(entry->entry_idx), 0); |
2049 | 2050 | ||
2050 | /* | 2051 | /* |
2051 | * Enable beaconing again. | 2052 | * Restore global beaconing state. |
2052 | */ | 2053 | */ |
2053 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 1); | 2054 | rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, orig_reg); |
2054 | rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, reg); | ||
2055 | } | 2055 | } |
2056 | 2056 | ||
2057 | /* | 2057 | /* |
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index a140170b1eb3..95724ff9c726 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
@@ -1597,13 +1597,14 @@ static void rt73usb_clear_beacon(struct queue_entry *entry) | |||
1597 | { | 1597 | { |
1598 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; | 1598 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; |
1599 | unsigned int beacon_base; | 1599 | unsigned int beacon_base; |
1600 | u32 reg; | 1600 | u32 orig_reg, reg; |
1601 | 1601 | ||
1602 | /* | 1602 | /* |
1603 | * Disable beaconing while we are reloading the beacon data, | 1603 | * Disable beaconing while we are reloading the beacon data, |
1604 | * otherwise we might be sending out invalid data. | 1604 | * otherwise we might be sending out invalid data. |
1605 | */ | 1605 | */ |
1606 | rt2x00usb_register_read(rt2x00dev, TXRX_CSR9, ®); | 1606 | rt2x00usb_register_read(rt2x00dev, TXRX_CSR9, &orig_reg); |
1607 | reg = orig_reg; | ||
1607 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0); | 1608 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0); |
1608 | rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg); | 1609 | rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg); |
1609 | 1610 | ||
@@ -1614,10 +1615,9 @@ static void rt73usb_clear_beacon(struct queue_entry *entry) | |||
1614 | rt2x00usb_register_write(rt2x00dev, beacon_base, 0); | 1615 | rt2x00usb_register_write(rt2x00dev, beacon_base, 0); |
1615 | 1616 | ||
1616 | /* | 1617 | /* |
1617 | * Enable beaconing again. | 1618 | * Restore beaconing state. |
1618 | */ | 1619 | */ |
1619 | rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 1); | 1620 | rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, orig_reg); |
1620 | rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg); | ||
1621 | } | 1621 | } |
1622 | 1622 | ||
1623 | static int rt73usb_get_tx_data_len(struct queue_entry *entry) | 1623 | static int rt73usb_get_tx_data_len(struct queue_entry *entry) |