diff options
-rw-r--r-- | drivers/net/wireless/ipw2200.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/Kconfig | 1 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/assoc.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt61pci.c | 4 | ||||
-rw-r--r-- | drivers/ssb/driver_mipscore.c | 13 | ||||
-rw-r--r-- | drivers/ssb/driver_pcicore.c | 2 | ||||
-rw-r--r-- | drivers/ssb/main.c | 6 | ||||
-rw-r--r-- | net/mac80211/ieee80211_sta.c | 43 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 2 |
9 files changed, 53 insertions, 21 deletions
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 0d78e40919cf..98d6ff69d375 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -11577,6 +11577,7 @@ static int ipw_prom_alloc(struct ipw_priv *priv) | |||
11577 | priv->prom_priv->priv = priv; | 11577 | priv->prom_priv->priv = priv; |
11578 | 11578 | ||
11579 | strcpy(priv->prom_net_dev->name, "rtap%d"); | 11579 | strcpy(priv->prom_net_dev->name, "rtap%d"); |
11580 | memcpy(priv->prom_net_dev->dev_addr, priv->mac_addr, ETH_ALEN); | ||
11580 | 11581 | ||
11581 | priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP; | 11582 | priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP; |
11582 | priv->prom_net_dev->open = ipw_prom_open; | 11583 | priv->prom_net_dev->open = ipw_prom_open; |
diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig index b79a35a40ab6..b54ff712e703 100644 --- a/drivers/net/wireless/iwlwifi/Kconfig +++ b/drivers/net/wireless/iwlwifi/Kconfig | |||
@@ -35,7 +35,6 @@ config IWL4965_HT | |||
35 | bool "Enable 802.11n HT features in iwl4965 driver" | 35 | bool "Enable 802.11n HT features in iwl4965 driver" |
36 | depends on EXPERIMENTAL | 36 | depends on EXPERIMENTAL |
37 | depends on IWL4965 && IWL4965_QOS | 37 | depends on IWL4965 && IWL4965_QOS |
38 | depends on n | ||
39 | ---help--- | 38 | ---help--- |
40 | This option enables IEEE 802.11n High Throughput features | 39 | This option enables IEEE 802.11n High Throughput features |
41 | for the iwl4965 driver. | 40 | for the iwl4965 driver. |
diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c index 87e145ffe8f1..6a24ed6067e0 100644 --- a/drivers/net/wireless/libertas/assoc.c +++ b/drivers/net/wireless/libertas/assoc.c | |||
@@ -541,7 +541,7 @@ void lbs_association_worker(struct work_struct *work) | |||
541 | } | 541 | } |
542 | 542 | ||
543 | if (find_any_ssid) { | 543 | if (find_any_ssid) { |
544 | u8 new_mode; | 544 | u8 new_mode = assoc_req->mode; |
545 | 545 | ||
546 | ret = lbs_find_best_network_ssid(priv, assoc_req->ssid, | 546 | ret = lbs_find_best_network_ssid(priv, assoc_req->ssid, |
547 | &assoc_req->ssid_len, assoc_req->mode, &new_mode); | 547 | &assoc_req->ssid_len, assoc_req->mode, &new_mode); |
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index 93ea212fedd5..ad2e7d53b3da 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -2399,10 +2399,8 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
2399 | * beacon frame. | 2399 | * beacon frame. |
2400 | */ | 2400 | */ |
2401 | if (skb_headroom(skb) < TXD_DESC_SIZE) { | 2401 | if (skb_headroom(skb) < TXD_DESC_SIZE) { |
2402 | if (pskb_expand_head(skb, TXD_DESC_SIZE, 0, GFP_ATOMIC)) { | 2402 | if (pskb_expand_head(skb, TXD_DESC_SIZE, 0, GFP_ATOMIC)) |
2403 | dev_kfree_skb(skb); | ||
2404 | return -ENOMEM; | 2403 | return -ENOMEM; |
2405 | } | ||
2406 | } | 2404 | } |
2407 | 2405 | ||
2408 | /* | 2406 | /* |
diff --git a/drivers/ssb/driver_mipscore.c b/drivers/ssb/driver_mipscore.c index 3d3dd32bf3ab..a9e7eb45b2e7 100644 --- a/drivers/ssb/driver_mipscore.c +++ b/drivers/ssb/driver_mipscore.c | |||
@@ -109,12 +109,13 @@ static void set_irq(struct ssb_device *dev, unsigned int irq) | |||
109 | clear_irq(bus, oldirq); | 109 | clear_irq(bus, oldirq); |
110 | 110 | ||
111 | /* assign the new one */ | 111 | /* assign the new one */ |
112 | if (irq == 0) | 112 | if (irq == 0) { |
113 | ssb_write32(mdev, SSB_INTVEC, ((1 << irqflag) & ssb_read32(mdev, SSB_INTVEC))); | 113 | ssb_write32(mdev, SSB_INTVEC, ((1 << irqflag) | ssb_read32(mdev, SSB_INTVEC))); |
114 | 114 | } else { | |
115 | irqflag <<= ipsflag_irq_shift[irq]; | 115 | irqflag <<= ipsflag_irq_shift[irq]; |
116 | irqflag |= (ssb_read32(mdev, SSB_IPSFLAG) & ~ipsflag_irq_mask[irq]); | 116 | irqflag |= (ssb_read32(mdev, SSB_IPSFLAG) & ~ipsflag_irq_mask[irq]); |
117 | ssb_write32(mdev, SSB_IPSFLAG, irqflag); | 117 | ssb_write32(mdev, SSB_IPSFLAG, irqflag); |
118 | } | ||
118 | } | 119 | } |
119 | 120 | ||
120 | static void ssb_mips_serial_init(struct ssb_mipscore *mcore) | 121 | static void ssb_mips_serial_init(struct ssb_mipscore *mcore) |
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index 74b9a8aea52b..5d777f211699 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c | |||
@@ -551,7 +551,7 @@ int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc, | |||
551 | } else { | 551 | } else { |
552 | tmp = ssb_read32(dev, SSB_TPSFLAG); | 552 | tmp = ssb_read32(dev, SSB_TPSFLAG); |
553 | tmp &= SSB_TPSFLAG_BPFLAG; | 553 | tmp &= SSB_TPSFLAG_BPFLAG; |
554 | intvec |= tmp; | 554 | intvec |= (1 << tmp); |
555 | } | 555 | } |
556 | ssb_write32(pdev, SSB_INTVEC, intvec); | 556 | ssb_write32(pdev, SSB_INTVEC, intvec); |
557 | } | 557 | } |
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index bedb2b4ee9d2..72017bf2e577 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c | |||
@@ -1044,6 +1044,12 @@ int ssb_bus_may_powerdown(struct ssb_bus *bus) | |||
1044 | goto out; | 1044 | goto out; |
1045 | 1045 | ||
1046 | cc = &bus->chipco; | 1046 | cc = &bus->chipco; |
1047 | |||
1048 | if (!cc->dev) | ||
1049 | goto out; | ||
1050 | if (cc->dev->id.revision < 5) | ||
1051 | goto out; | ||
1052 | |||
1047 | ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW); | 1053 | ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW); |
1048 | err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0); | 1054 | err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0); |
1049 | if (err) | 1055 | if (err) |
diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c index e0c72d04584b..c1706855460a 100644 --- a/net/mac80211/ieee80211_sta.c +++ b/net/mac80211/ieee80211_sta.c | |||
@@ -312,14 +312,12 @@ static void ieee80211_sta_wmm_params(struct net_device *dev, | |||
312 | } | 312 | } |
313 | } | 313 | } |
314 | 314 | ||
315 | 315 | static u32 ieee80211_handle_protect_preamb(struct ieee80211_sub_if_data *sdata, | |
316 | static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata, | 316 | bool use_protection, |
317 | u8 erp_value) | 317 | bool use_short_preamble) |
318 | { | 318 | { |
319 | struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf; | 319 | struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf; |
320 | struct ieee80211_if_sta *ifsta = &sdata->u.sta; | 320 | struct ieee80211_if_sta *ifsta = &sdata->u.sta; |
321 | bool use_protection = (erp_value & WLAN_ERP_USE_PROTECTION) != 0; | ||
322 | bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0; | ||
323 | DECLARE_MAC_BUF(mac); | 321 | DECLARE_MAC_BUF(mac); |
324 | u32 changed = 0; | 322 | u32 changed = 0; |
325 | 323 | ||
@@ -350,6 +348,32 @@ static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata, | |||
350 | return changed; | 348 | return changed; |
351 | } | 349 | } |
352 | 350 | ||
351 | static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata, | ||
352 | u8 erp_value) | ||
353 | { | ||
354 | bool use_protection = (erp_value & WLAN_ERP_USE_PROTECTION) != 0; | ||
355 | bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0; | ||
356 | |||
357 | return ieee80211_handle_protect_preamb(sdata, | ||
358 | use_protection, use_short_preamble); | ||
359 | } | ||
360 | |||
361 | static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, | ||
362 | struct ieee80211_sta_bss *bss) | ||
363 | { | ||
364 | u32 changed = 0; | ||
365 | |||
366 | if (bss->has_erp_value) | ||
367 | changed |= ieee80211_handle_erp_ie(sdata, bss->erp_value); | ||
368 | else { | ||
369 | u16 capab = bss->capability; | ||
370 | changed |= ieee80211_handle_protect_preamb(sdata, false, | ||
371 | (capab & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0); | ||
372 | } | ||
373 | |||
374 | return changed; | ||
375 | } | ||
376 | |||
353 | int ieee80211_ht_cap_ie_to_ht_info(struct ieee80211_ht_cap *ht_cap_ie, | 377 | int ieee80211_ht_cap_ie_to_ht_info(struct ieee80211_ht_cap *ht_cap_ie, |
354 | struct ieee80211_ht_info *ht_info) | 378 | struct ieee80211_ht_info *ht_info) |
355 | { | 379 | { |
@@ -468,9 +492,7 @@ static void ieee80211_set_associated(struct net_device *dev, | |||
468 | local->hw.conf.channel, | 492 | local->hw.conf.channel, |
469 | ifsta->ssid, ifsta->ssid_len); | 493 | ifsta->ssid, ifsta->ssid_len); |
470 | if (bss) { | 494 | if (bss) { |
471 | if (bss->has_erp_value) | 495 | changed |= ieee80211_handle_bss_capability(sdata, bss); |
472 | changed |= ieee80211_handle_erp_ie( | ||
473 | sdata, bss->erp_value); | ||
474 | ieee80211_rx_bss_put(dev, bss); | 496 | ieee80211_rx_bss_put(dev, bss); |
475 | } | 497 | } |
476 | 498 | ||
@@ -2116,6 +2138,11 @@ static void ieee80211_rx_mgmt_beacon(struct net_device *dev, | |||
2116 | 2138 | ||
2117 | if (elems.erp_info && elems.erp_info_len >= 1) | 2139 | if (elems.erp_info && elems.erp_info_len >= 1) |
2118 | changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]); | 2140 | changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]); |
2141 | else { | ||
2142 | u16 capab = le16_to_cpu(mgmt->u.beacon.capab_info); | ||
2143 | changed |= ieee80211_handle_protect_preamb(sdata, false, | ||
2144 | (capab & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0); | ||
2145 | } | ||
2119 | 2146 | ||
2120 | if (elems.ht_cap_elem && elems.ht_info_elem && | 2147 | if (elems.ht_cap_elem && elems.ht_info_elem && |
2121 | elems.wmm_param && local->ops->conf_ht && | 2148 | elems.wmm_param && local->ops->conf_ht && |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index e3a214f63f91..f68a5c8f2147 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -945,7 +945,7 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info) | |||
945 | nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); | 945 | nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); |
946 | params.listen_interval = | 946 | params.listen_interval = |
947 | nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]); | 947 | nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]); |
948 | params.listen_interval = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]); | 948 | params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]); |
949 | 949 | ||
950 | if (parse_station_flags(info->attrs[NL80211_ATTR_STA_FLAGS], | 950 | if (parse_station_flags(info->attrs[NL80211_ATTR_STA_FLAGS], |
951 | ¶ms.station_flags)) | 951 | ¶ms.station_flags)) |