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)) |
