diff options
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/eeprom.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_leds.c | 68 | ||||
| -rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_leds.h | 2 | ||||
| -rw-r--r-- | net/mac80211/cfg.c | 3 | ||||
| -rw-r--r-- | net/mac80211/mesh.c | 2 | ||||
| -rw-r--r-- | net/mac80211/mesh.h | 5 | ||||
| -rw-r--r-- | net/mac80211/mesh_hwmp.c | 2 | ||||
| -rw-r--r-- | net/mac80211/rx.c | 1 | ||||
| -rw-r--r-- | net/wireless/reg.c | 75 | ||||
| -rw-r--r-- | net/wireless/wext-compat.c | 1 |
12 files changed, 88 insertions, 80 deletions
diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c index 644962adda97..791885262602 100644 --- a/drivers/net/wireless/ath/ath5k/eeprom.c +++ b/drivers/net/wireless/ath/ath5k/eeprom.c | |||
| @@ -97,6 +97,7 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah) | |||
| 97 | struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; | 97 | struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; |
| 98 | int ret; | 98 | int ret; |
| 99 | u16 val; | 99 | u16 val; |
| 100 | u32 cksum, offset; | ||
| 100 | 101 | ||
| 101 | /* | 102 | /* |
| 102 | * Read values from EEPROM and store them in the capability structure | 103 | * Read values from EEPROM and store them in the capability structure |
| @@ -111,7 +112,6 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah) | |||
| 111 | if (ah->ah_ee_version < AR5K_EEPROM_VERSION_3_0) | 112 | if (ah->ah_ee_version < AR5K_EEPROM_VERSION_3_0) |
| 112 | return 0; | 113 | return 0; |
| 113 | 114 | ||
| 114 | #ifdef notyet | ||
| 115 | /* | 115 | /* |
| 116 | * Validate the checksum of the EEPROM date. There are some | 116 | * Validate the checksum of the EEPROM date. There are some |
| 117 | * devices with invalid EEPROMs. | 117 | * devices with invalid EEPROMs. |
| @@ -124,7 +124,6 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah) | |||
| 124 | ATH5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n", cksum); | 124 | ATH5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n", cksum); |
| 125 | return -EIO; | 125 | return -EIO; |
| 126 | } | 126 | } |
| 127 | #endif | ||
| 128 | 127 | ||
| 129 | AR5K_EEPROM_READ_HDR(AR5K_EEPROM_ANT_GAIN(ah->ah_ee_version), | 128 | AR5K_EEPROM_READ_HDR(AR5K_EEPROM_ANT_GAIN(ah->ah_ee_version), |
| 130 | ee_ant_gain); | 129 | ee_ant_gain); |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 077480c4916a..19b4eae47b59 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -1784,7 +1784,10 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev) | |||
| 1784 | dma_reason[0], dma_reason[1], | 1784 | dma_reason[0], dma_reason[1], |
| 1785 | dma_reason[2], dma_reason[3], | 1785 | dma_reason[2], dma_reason[3], |
| 1786 | dma_reason[4], dma_reason[5]); | 1786 | dma_reason[4], dma_reason[5]); |
| 1787 | b43_controller_restart(dev, "DMA error"); | 1787 | b43err(dev->wl, "This device does not support DMA " |
| 1788 | "on your system. Please use PIO instead.\n"); | ||
| 1789 | b43err(dev->wl, "CONFIG_B43_FORCE_PIO must be set in " | ||
| 1790 | "your kernel configuration.\n"); | ||
| 1788 | return; | 1791 | return; |
| 1789 | } | 1792 | } |
| 1790 | if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { | 1793 | if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { |
diff --git a/drivers/net/wireless/rtl818x/rtl8187.h b/drivers/net/wireless/rtl818x/rtl8187.h index b1a24de0b7b0..6af0f3f71f3a 100644 --- a/drivers/net/wireless/rtl818x/rtl8187.h +++ b/drivers/net/wireless/rtl818x/rtl8187.h | |||
| @@ -108,6 +108,7 @@ struct rtl8187_priv { | |||
| 108 | struct delayed_work work; | 108 | struct delayed_work work; |
| 109 | struct ieee80211_hw *dev; | 109 | struct ieee80211_hw *dev; |
| 110 | #ifdef CONFIG_RTL8187_LEDS | 110 | #ifdef CONFIG_RTL8187_LEDS |
| 111 | struct rtl8187_led led_radio; | ||
| 111 | struct rtl8187_led led_tx; | 112 | struct rtl8187_led led_tx; |
| 112 | struct rtl8187_led led_rx; | 113 | struct rtl8187_led led_rx; |
| 113 | struct delayed_work led_on; | 114 | struct delayed_work led_on; |
diff --git a/drivers/net/wireless/rtl818x/rtl8187_leds.c b/drivers/net/wireless/rtl818x/rtl8187_leds.c index cf8a4a40fdf6..ded44c045eb2 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_leds.c +++ b/drivers/net/wireless/rtl818x/rtl8187_leds.c | |||
| @@ -105,19 +105,36 @@ static void rtl8187_led_brightness_set(struct led_classdev *led_dev, | |||
| 105 | struct rtl8187_led *led = container_of(led_dev, struct rtl8187_led, | 105 | struct rtl8187_led *led = container_of(led_dev, struct rtl8187_led, |
| 106 | led_dev); | 106 | led_dev); |
| 107 | struct ieee80211_hw *hw = led->dev; | 107 | struct ieee80211_hw *hw = led->dev; |
| 108 | struct rtl8187_priv *priv = hw->priv; | 108 | struct rtl8187_priv *priv; |
| 109 | static bool radio_on; | ||
| 109 | 110 | ||
| 110 | if (brightness == LED_OFF) { | 111 | if (!hw) |
| 111 | ieee80211_queue_delayed_work(hw, &priv->led_off, 0); | 112 | return; |
| 112 | /* The LED is off for 1/20 sec so that it just blinks. */ | 113 | priv = hw->priv; |
| 113 | ieee80211_queue_delayed_work(hw, &priv->led_on, HZ / 20); | 114 | if (led->is_radio) { |
| 114 | } else | 115 | if (brightness == LED_FULL) { |
| 115 | ieee80211_queue_delayed_work(hw, &priv->led_on, 0); | 116 | ieee80211_queue_delayed_work(hw, &priv->led_on, 0); |
| 117 | radio_on = true; | ||
| 118 | } else if (radio_on) { | ||
| 119 | radio_on = false; | ||
| 120 | cancel_delayed_work_sync(&priv->led_on); | ||
| 121 | ieee80211_queue_delayed_work(hw, &priv->led_off, 0); | ||
| 122 | } | ||
| 123 | } else if (radio_on) { | ||
| 124 | if (brightness == LED_OFF) { | ||
| 125 | ieee80211_queue_delayed_work(hw, &priv->led_off, 0); | ||
| 126 | /* The LED is off for 1/20 sec - it just blinks. */ | ||
| 127 | ieee80211_queue_delayed_work(hw, &priv->led_on, | ||
| 128 | HZ / 20); | ||
| 129 | } else | ||
| 130 | ieee80211_queue_delayed_work(hw, &priv->led_on, 0); | ||
| 131 | } | ||
| 116 | } | 132 | } |
| 117 | 133 | ||
| 118 | static int rtl8187_register_led(struct ieee80211_hw *dev, | 134 | static int rtl8187_register_led(struct ieee80211_hw *dev, |
| 119 | struct rtl8187_led *led, const char *name, | 135 | struct rtl8187_led *led, const char *name, |
| 120 | const char *default_trigger, u8 ledpin) | 136 | const char *default_trigger, u8 ledpin, |
| 137 | bool is_radio) | ||
| 121 | { | 138 | { |
| 122 | int err; | 139 | int err; |
| 123 | struct rtl8187_priv *priv = dev->priv; | 140 | struct rtl8187_priv *priv = dev->priv; |
| @@ -128,6 +145,7 @@ static int rtl8187_register_led(struct ieee80211_hw *dev, | |||
| 128 | return -EINVAL; | 145 | return -EINVAL; |
| 129 | led->dev = dev; | 146 | led->dev = dev; |
| 130 | led->ledpin = ledpin; | 147 | led->ledpin = ledpin; |
| 148 | led->is_radio = is_radio; | ||
| 131 | strncpy(led->name, name, sizeof(led->name)); | 149 | strncpy(led->name, name, sizeof(led->name)); |
| 132 | 150 | ||
| 133 | led->led_dev.name = led->name; | 151 | led->led_dev.name = led->name; |
| @@ -145,7 +163,11 @@ static int rtl8187_register_led(struct ieee80211_hw *dev, | |||
| 145 | 163 | ||
| 146 | static void rtl8187_unregister_led(struct rtl8187_led *led) | 164 | static void rtl8187_unregister_led(struct rtl8187_led *led) |
| 147 | { | 165 | { |
| 166 | struct ieee80211_hw *hw = led->dev; | ||
| 167 | struct rtl8187_priv *priv = hw->priv; | ||
| 168 | |||
| 148 | led_classdev_unregister(&led->led_dev); | 169 | led_classdev_unregister(&led->led_dev); |
| 170 | flush_delayed_work(&priv->led_off); | ||
| 149 | led->dev = NULL; | 171 | led->dev = NULL; |
| 150 | } | 172 | } |
| 151 | 173 | ||
| @@ -183,33 +205,37 @@ void rtl8187_leds_init(struct ieee80211_hw *dev, u16 custid) | |||
| 183 | INIT_DELAYED_WORK(&priv->led_off, led_turn_off); | 205 | INIT_DELAYED_WORK(&priv->led_off, led_turn_off); |
| 184 | 206 | ||
| 185 | snprintf(name, sizeof(name), | 207 | snprintf(name, sizeof(name), |
| 208 | "rtl8187-%s::radio", wiphy_name(dev->wiphy)); | ||
| 209 | err = rtl8187_register_led(dev, &priv->led_radio, name, | ||
| 210 | ieee80211_get_radio_led_name(dev), ledpin, true); | ||
| 211 | if (err) | ||
| 212 | return; | ||
| 213 | |||
| 214 | snprintf(name, sizeof(name), | ||
| 186 | "rtl8187-%s::tx", wiphy_name(dev->wiphy)); | 215 | "rtl8187-%s::tx", wiphy_name(dev->wiphy)); |
| 187 | err = rtl8187_register_led(dev, &priv->led_tx, name, | 216 | err = rtl8187_register_led(dev, &priv->led_tx, name, |
| 188 | ieee80211_get_tx_led_name(dev), ledpin); | 217 | ieee80211_get_tx_led_name(dev), ledpin, false); |
| 189 | if (err) | 218 | if (err) |
| 190 | goto error; | 219 | goto err_tx; |
| 220 | |||
| 191 | snprintf(name, sizeof(name), | 221 | snprintf(name, sizeof(name), |
| 192 | "rtl8187-%s::rx", wiphy_name(dev->wiphy)); | 222 | "rtl8187-%s::rx", wiphy_name(dev->wiphy)); |
| 193 | err = rtl8187_register_led(dev, &priv->led_rx, name, | 223 | err = rtl8187_register_led(dev, &priv->led_rx, name, |
| 194 | ieee80211_get_rx_led_name(dev), ledpin); | 224 | ieee80211_get_rx_led_name(dev), ledpin, false); |
| 195 | if (!err) { | 225 | if (!err) |
| 196 | ieee80211_queue_delayed_work(dev, &priv->led_on, 0); | ||
| 197 | return; | 226 | return; |
| 198 | } | 227 | |
| 199 | /* registration of RX LED failed - unregister TX */ | 228 | /* registration of RX LED failed - unregister */ |
| 200 | rtl8187_unregister_led(&priv->led_tx); | 229 | rtl8187_unregister_led(&priv->led_tx); |
| 201 | error: | 230 | err_tx: |
| 202 | /* If registration of either failed, cancel delayed work */ | 231 | rtl8187_unregister_led(&priv->led_radio); |
| 203 | cancel_delayed_work_sync(&priv->led_off); | ||
| 204 | cancel_delayed_work_sync(&priv->led_on); | ||
| 205 | } | 232 | } |
| 206 | 233 | ||
| 207 | void rtl8187_leds_exit(struct ieee80211_hw *dev) | 234 | void rtl8187_leds_exit(struct ieee80211_hw *dev) |
| 208 | { | 235 | { |
| 209 | struct rtl8187_priv *priv = dev->priv; | 236 | struct rtl8187_priv *priv = dev->priv; |
| 210 | 237 | ||
| 211 | /* turn the LED off before exiting */ | 238 | rtl8187_unregister_led(&priv->led_radio); |
| 212 | ieee80211_queue_delayed_work(dev, &priv->led_off, 0); | ||
| 213 | rtl8187_unregister_led(&priv->led_rx); | 239 | rtl8187_unregister_led(&priv->led_rx); |
| 214 | rtl8187_unregister_led(&priv->led_tx); | 240 | rtl8187_unregister_led(&priv->led_tx); |
| 215 | cancel_delayed_work_sync(&priv->led_off); | 241 | cancel_delayed_work_sync(&priv->led_off); |
diff --git a/drivers/net/wireless/rtl818x/rtl8187_leds.h b/drivers/net/wireless/rtl818x/rtl8187_leds.h index a0332027aead..efe8041bdda4 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_leds.h +++ b/drivers/net/wireless/rtl818x/rtl8187_leds.h | |||
| @@ -47,6 +47,8 @@ struct rtl8187_led { | |||
| 47 | u8 ledpin; | 47 | u8 ledpin; |
| 48 | /* The unique name string for this LED device. */ | 48 | /* The unique name string for this LED device. */ |
| 49 | char name[RTL8187_LED_MAX_NAME_LEN + 1]; | 49 | char name[RTL8187_LED_MAX_NAME_LEN + 1]; |
| 50 | /* If the LED is radio or tx/rx */ | ||
| 51 | bool is_radio; | ||
| 50 | }; | 52 | }; |
| 51 | 53 | ||
| 52 | void rtl8187_leds_init(struct ieee80211_hw *dev, u16 code); | 54 | void rtl8187_leds_init(struct ieee80211_hw *dev, u16 code); |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 93ee1fd5c08d..6dc3579c0ac5 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
| @@ -354,7 +354,8 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) | |||
| 354 | sinfo->rx_packets = sta->rx_packets; | 354 | sinfo->rx_packets = sta->rx_packets; |
| 355 | sinfo->tx_packets = sta->tx_packets; | 355 | sinfo->tx_packets = sta->tx_packets; |
| 356 | 356 | ||
| 357 | if (sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { | 357 | if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) || |
| 358 | (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) { | ||
| 358 | sinfo->filled |= STATION_INFO_SIGNAL; | 359 | sinfo->filled |= STATION_INFO_SIGNAL; |
| 359 | sinfo->signal = (s8)sta->last_signal; | 360 | sinfo->signal = (s8)sta->last_signal; |
| 360 | } | 361 | } |
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index c0fe46493f71..6a4331429598 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
| @@ -427,7 +427,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, | |||
| 427 | char *addr5, char *addr6) | 427 | char *addr5, char *addr6) |
| 428 | { | 428 | { |
| 429 | int aelen = 0; | 429 | int aelen = 0; |
| 430 | memset(meshhdr, 0, sizeof(meshhdr)); | 430 | memset(meshhdr, 0, sizeof(*meshhdr)); |
| 431 | meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL; | 431 | meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL; |
| 432 | put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum); | 432 | put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum); |
| 433 | sdata->u.mesh.mesh_seqnum++; | 433 | sdata->u.mesh.mesh_seqnum++; |
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h index 31e102541869..85562c59d7d6 100644 --- a/net/mac80211/mesh.h +++ b/net/mac80211/mesh.h | |||
| @@ -188,8 +188,9 @@ struct mesh_rmc { | |||
| 188 | */ | 188 | */ |
| 189 | #define MESH_PREQ_MIN_INT 10 | 189 | #define MESH_PREQ_MIN_INT 10 |
| 190 | #define MESH_DIAM_TRAVERSAL_TIME 50 | 190 | #define MESH_DIAM_TRAVERSAL_TIME 50 |
| 191 | /* Paths will be refreshed if they are closer than PATH_REFRESH_TIME to their | 191 | /* A path will be refreshed if it is used PATH_REFRESH_TIME milliseconds before |
| 192 | * expiration | 192 | * timing out. This way it will remain ACTIVE and no data frames will be |
| 193 | * unnecesarily held in the pending queue. | ||
| 193 | */ | 194 | */ |
| 194 | #define MESH_PATH_REFRESH_TIME 1000 | 195 | #define MESH_PATH_REFRESH_TIME 1000 |
| 195 | #define MESH_MIN_DISCOVERY_TIMEOUT (2 * MESH_DIAM_TRAVERSAL_TIME) | 196 | #define MESH_MIN_DISCOVERY_TIMEOUT (2 * MESH_DIAM_TRAVERSAL_TIME) |
diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c index 833b2f3670c5..d28acb6b1f81 100644 --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c | |||
| @@ -937,7 +937,7 @@ int mesh_nexthop_lookup(struct sk_buff *skb, | |||
| 937 | 937 | ||
| 938 | if (mpath->flags & MESH_PATH_ACTIVE) { | 938 | if (mpath->flags & MESH_PATH_ACTIVE) { |
| 939 | if (time_after(jiffies, | 939 | if (time_after(jiffies, |
| 940 | mpath->exp_time + | 940 | mpath->exp_time - |
| 941 | msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && | 941 | msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && |
| 942 | !memcmp(sdata->dev->dev_addr, hdr->addr4, ETH_ALEN) && | 942 | !memcmp(sdata->dev->dev_addr, hdr->addr4, ETH_ALEN) && |
| 943 | !(mpath->flags & MESH_PATH_RESOLVING) && | 943 | !(mpath->flags & MESH_PATH_RESOLVING) && |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index f237df408378..9f2807aeaf52 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
| @@ -1712,7 +1712,6 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) | |||
| 1712 | mpp_path_add(proxied_addr, mpp_addr, sdata); | 1712 | mpp_path_add(proxied_addr, mpp_addr, sdata); |
| 1713 | } else { | 1713 | } else { |
| 1714 | spin_lock_bh(&mppath->state_lock); | 1714 | spin_lock_bh(&mppath->state_lock); |
| 1715 | mppath->exp_time = jiffies; | ||
| 1716 | if (compare_ether_addr(mppath->mpp, mpp_addr) != 0) | 1715 | if (compare_ether_addr(mppath->mpp, mpp_addr) != 0) |
| 1717 | memcpy(mppath->mpp, mpp_addr, ETH_ALEN); | 1716 | memcpy(mppath->mpp, mpp_addr, ETH_ALEN); |
| 1718 | spin_unlock_bh(&mppath->state_lock); | 1717 | spin_unlock_bh(&mppath->state_lock); |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index c01470e7de15..baa898add287 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
| @@ -141,62 +141,35 @@ static const struct ieee80211_regdomain us_regdom = { | |||
| 141 | .reg_rules = { | 141 | .reg_rules = { |
| 142 | /* IEEE 802.11b/g, channels 1..11 */ | 142 | /* IEEE 802.11b/g, channels 1..11 */ |
| 143 | REG_RULE(2412-10, 2462+10, 40, 6, 27, 0), | 143 | REG_RULE(2412-10, 2462+10, 40, 6, 27, 0), |
| 144 | /* IEEE 802.11a, channel 36 */ | 144 | /* IEEE 802.11a, channel 36..48 */ |
| 145 | REG_RULE(5180-10, 5180+10, 40, 6, 23, 0), | 145 | REG_RULE(5180-10, 5240+10, 40, 6, 17, 0), |
| 146 | /* IEEE 802.11a, channel 40 */ | ||
| 147 | REG_RULE(5200-10, 5200+10, 40, 6, 23, 0), | ||
| 148 | /* IEEE 802.11a, channel 44 */ | ||
| 149 | REG_RULE(5220-10, 5220+10, 40, 6, 23, 0), | ||
| 150 | /* IEEE 802.11a, channels 48..64 */ | 146 | /* IEEE 802.11a, channels 48..64 */ |
| 151 | REG_RULE(5240-10, 5320+10, 40, 6, 23, 0), | 147 | REG_RULE(5260-10, 5320+10, 40, 6, 20, NL80211_RRF_DFS), |
| 148 | /* IEEE 802.11a, channels 100..124 */ | ||
| 149 | REG_RULE(5500-10, 5590+10, 40, 6, 20, NL80211_RRF_DFS), | ||
| 150 | /* IEEE 802.11a, channels 132..144 */ | ||
| 151 | REG_RULE(5660-10, 5700+10, 40, 6, 20, NL80211_RRF_DFS), | ||
| 152 | /* IEEE 802.11a, channels 149..165, outdoor */ | 152 | /* IEEE 802.11a, channels 149..165, outdoor */ |
| 153 | REG_RULE(5745-10, 5825+10, 40, 6, 30, 0), | 153 | REG_RULE(5745-10, 5825+10, 40, 6, 30, 0), |
| 154 | } | 154 | } |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | static const struct ieee80211_regdomain jp_regdom = { | 157 | static const struct ieee80211_regdomain jp_regdom = { |
| 158 | .n_reg_rules = 3, | 158 | .n_reg_rules = 6, |
| 159 | .alpha2 = "JP", | 159 | .alpha2 = "JP", |
| 160 | .reg_rules = { | 160 | .reg_rules = { |
| 161 | /* IEEE 802.11b/g, channels 1..14 */ | 161 | /* IEEE 802.11b/g, channels 1..11 */ |
| 162 | REG_RULE(2412-10, 2484+10, 40, 6, 20, 0), | 162 | REG_RULE(2412-10, 2462+10, 40, 6, 20, 0), |
| 163 | /* IEEE 802.11a, channels 34..48 */ | 163 | /* IEEE 802.11b/g, channels 12..13 */ |
| 164 | REG_RULE(5170-10, 5240+10, 40, 6, 20, | 164 | REG_RULE(2467-10, 2472+10, 20, 6, 20, 0), |
| 165 | NL80211_RRF_PASSIVE_SCAN), | 165 | /* IEEE 802.11b/g, channel 14 */ |
| 166 | REG_RULE(2484-10, 2484+10, 20, 6, 20, NL80211_RRF_NO_OFDM), | ||
| 167 | /* IEEE 802.11a, channels 36..48 */ | ||
| 168 | REG_RULE(5180-10, 5240+10, 40, 6, 20, 0), | ||
| 166 | /* IEEE 802.11a, channels 52..64 */ | 169 | /* IEEE 802.11a, channels 52..64 */ |
| 167 | REG_RULE(5260-10, 5320+10, 40, 6, 20, | 170 | REG_RULE(5260-10, 5320+10, 40, 6, 20, NL80211_RRF_DFS), |
| 168 | NL80211_RRF_NO_IBSS | | 171 | /* IEEE 802.11a, channels 100..144 */ |
| 169 | NL80211_RRF_DFS), | 172 | REG_RULE(5500-10, 5700+10, 40, 6, 23, NL80211_RRF_DFS), |
| 170 | } | ||
| 171 | }; | ||
| 172 | |||
| 173 | static const struct ieee80211_regdomain eu_regdom = { | ||
| 174 | .n_reg_rules = 6, | ||
| 175 | /* | ||
| 176 | * This alpha2 is bogus, we leave it here just for stupid | ||
| 177 | * backward compatibility | ||
| 178 | */ | ||
| 179 | .alpha2 = "EU", | ||
| 180 | .reg_rules = { | ||
| 181 | /* IEEE 802.11b/g, channels 1..13 */ | ||
| 182 | REG_RULE(2412-10, 2472+10, 40, 6, 20, 0), | ||
| 183 | /* IEEE 802.11a, channel 36 */ | ||
| 184 | REG_RULE(5180-10, 5180+10, 40, 6, 23, | ||
| 185 | NL80211_RRF_PASSIVE_SCAN), | ||
| 186 | /* IEEE 802.11a, channel 40 */ | ||
| 187 | REG_RULE(5200-10, 5200+10, 40, 6, 23, | ||
| 188 | NL80211_RRF_PASSIVE_SCAN), | ||
| 189 | /* IEEE 802.11a, channel 44 */ | ||
| 190 | REG_RULE(5220-10, 5220+10, 40, 6, 23, | ||
| 191 | NL80211_RRF_PASSIVE_SCAN), | ||
| 192 | /* IEEE 802.11a, channels 48..64 */ | ||
| 193 | REG_RULE(5240-10, 5320+10, 40, 6, 20, | ||
| 194 | NL80211_RRF_NO_IBSS | | ||
| 195 | NL80211_RRF_DFS), | ||
| 196 | /* IEEE 802.11a, channels 100..140 */ | ||
| 197 | REG_RULE(5500-10, 5700+10, 40, 6, 30, | ||
| 198 | NL80211_RRF_NO_IBSS | | ||
| 199 | NL80211_RRF_DFS), | ||
| 200 | } | 173 | } |
| 201 | }; | 174 | }; |
| 202 | 175 | ||
| @@ -206,15 +179,17 @@ static const struct ieee80211_regdomain *static_regdom(char *alpha2) | |||
| 206 | return &us_regdom; | 179 | return &us_regdom; |
| 207 | if (alpha2[0] == 'J' && alpha2[1] == 'P') | 180 | if (alpha2[0] == 'J' && alpha2[1] == 'P') |
| 208 | return &jp_regdom; | 181 | return &jp_regdom; |
| 182 | /* Use world roaming rules for "EU", since it was a pseudo | ||
| 183 | domain anyway... */ | ||
| 209 | if (alpha2[0] == 'E' && alpha2[1] == 'U') | 184 | if (alpha2[0] == 'E' && alpha2[1] == 'U') |
| 210 | return &eu_regdom; | 185 | return &world_regdom; |
| 211 | /* Default, as per the old rules */ | 186 | /* Default, world roaming rules */ |
| 212 | return &us_regdom; | 187 | return &world_regdom; |
| 213 | } | 188 | } |
| 214 | 189 | ||
| 215 | static bool is_old_static_regdom(const struct ieee80211_regdomain *rd) | 190 | static bool is_old_static_regdom(const struct ieee80211_regdomain *rd) |
| 216 | { | 191 | { |
| 217 | if (rd == &us_regdom || rd == &jp_regdom || rd == &eu_regdom) | 192 | if (rd == &us_regdom || rd == &jp_regdom || rd == &world_regdom) |
| 218 | return true; | 193 | return true; |
| 219 | return false; | 194 | return false; |
| 220 | } | 195 | } |
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 584eb4826e02..54face3d4424 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
| @@ -479,6 +479,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev, | |||
| 479 | } | 479 | } |
| 480 | err = rdev->ops->del_key(&rdev->wiphy, dev, idx, addr); | 480 | err = rdev->ops->del_key(&rdev->wiphy, dev, idx, addr); |
| 481 | } | 481 | } |
| 482 | wdev->wext.connect.privacy = false; | ||
| 482 | /* | 483 | /* |
| 483 | * Applications using wireless extensions expect to be | 484 | * Applications using wireless extensions expect to be |
| 484 | * able to delete keys that don't exist, so allow that. | 485 | * able to delete keys that don't exist, so allow that. |
