Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
Коммит
b41f5bfff7
|
@ -11577,6 +11577,7 @@ static int ipw_prom_alloc(struct ipw_priv *priv)
|
||||||
priv->prom_priv->priv = priv;
|
priv->prom_priv->priv = priv;
|
||||||
|
|
||||||
strcpy(priv->prom_net_dev->name, "rtap%d");
|
strcpy(priv->prom_net_dev->name, "rtap%d");
|
||||||
|
memcpy(priv->prom_net_dev->dev_addr, priv->mac_addr, ETH_ALEN);
|
||||||
|
|
||||||
priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
|
priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
|
||||||
priv->prom_net_dev->open = ipw_prom_open;
|
priv->prom_net_dev->open = ipw_prom_open;
|
||||||
|
|
|
@ -35,7 +35,6 @@ config IWL4965_HT
|
||||||
bool "Enable 802.11n HT features in iwl4965 driver"
|
bool "Enable 802.11n HT features in iwl4965 driver"
|
||||||
depends on EXPERIMENTAL
|
depends on EXPERIMENTAL
|
||||||
depends on IWL4965 && IWL4965_QOS
|
depends on IWL4965 && IWL4965_QOS
|
||||||
depends on n
|
|
||||||
---help---
|
---help---
|
||||||
This option enables IEEE 802.11n High Throughput features
|
This option enables IEEE 802.11n High Throughput features
|
||||||
for the iwl4965 driver.
|
for the iwl4965 driver.
|
||||||
|
|
|
@ -541,7 +541,7 @@ void lbs_association_worker(struct work_struct *work)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (find_any_ssid) {
|
if (find_any_ssid) {
|
||||||
u8 new_mode;
|
u8 new_mode = assoc_req->mode;
|
||||||
|
|
||||||
ret = lbs_find_best_network_ssid(priv, assoc_req->ssid,
|
ret = lbs_find_best_network_ssid(priv, assoc_req->ssid,
|
||||||
&assoc_req->ssid_len, assoc_req->mode, &new_mode);
|
&assoc_req->ssid_len, assoc_req->mode, &new_mode);
|
||||||
|
|
|
@ -2399,10 +2399,8 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||||
* beacon frame.
|
* beacon frame.
|
||||||
*/
|
*/
|
||||||
if (skb_headroom(skb) < TXD_DESC_SIZE) {
|
if (skb_headroom(skb) < TXD_DESC_SIZE) {
|
||||||
if (pskb_expand_head(skb, TXD_DESC_SIZE, 0, GFP_ATOMIC)) {
|
if (pskb_expand_head(skb, TXD_DESC_SIZE, 0, GFP_ATOMIC))
|
||||||
dev_kfree_skb(skb);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -109,12 +109,13 @@ static void set_irq(struct ssb_device *dev, unsigned int irq)
|
||||||
clear_irq(bus, oldirq);
|
clear_irq(bus, oldirq);
|
||||||
|
|
||||||
/* assign the new one */
|
/* assign the new one */
|
||||||
if (irq == 0)
|
if (irq == 0) {
|
||||||
ssb_write32(mdev, SSB_INTVEC, ((1 << irqflag) & ssb_read32(mdev, SSB_INTVEC)));
|
ssb_write32(mdev, SSB_INTVEC, ((1 << irqflag) | ssb_read32(mdev, SSB_INTVEC)));
|
||||||
|
} else {
|
||||||
irqflag <<= ipsflag_irq_shift[irq];
|
irqflag <<= ipsflag_irq_shift[irq];
|
||||||
irqflag |= (ssb_read32(mdev, SSB_IPSFLAG) & ~ipsflag_irq_mask[irq]);
|
irqflag |= (ssb_read32(mdev, SSB_IPSFLAG) & ~ipsflag_irq_mask[irq]);
|
||||||
ssb_write32(mdev, SSB_IPSFLAG, irqflag);
|
ssb_write32(mdev, SSB_IPSFLAG, irqflag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ssb_mips_serial_init(struct ssb_mipscore *mcore)
|
static void ssb_mips_serial_init(struct ssb_mipscore *mcore)
|
||||||
|
|
|
@ -551,7 +551,7 @@ int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc,
|
||||||
} else {
|
} else {
|
||||||
tmp = ssb_read32(dev, SSB_TPSFLAG);
|
tmp = ssb_read32(dev, SSB_TPSFLAG);
|
||||||
tmp &= SSB_TPSFLAG_BPFLAG;
|
tmp &= SSB_TPSFLAG_BPFLAG;
|
||||||
intvec |= tmp;
|
intvec |= (1 << tmp);
|
||||||
}
|
}
|
||||||
ssb_write32(pdev, SSB_INTVEC, intvec);
|
ssb_write32(pdev, SSB_INTVEC, intvec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1044,6 +1044,12 @@ int ssb_bus_may_powerdown(struct ssb_bus *bus)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
cc = &bus->chipco;
|
cc = &bus->chipco;
|
||||||
|
|
||||||
|
if (!cc->dev)
|
||||||
|
goto out;
|
||||||
|
if (cc->dev->id.revision < 5)
|
||||||
|
goto out;
|
||||||
|
|
||||||
ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW);
|
ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW);
|
||||||
err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
|
err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -312,14 +312,12 @@ static void ieee80211_sta_wmm_params(struct net_device *dev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 ieee80211_handle_protect_preamb(struct ieee80211_sub_if_data *sdata,
|
||||||
static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata,
|
bool use_protection,
|
||||||
u8 erp_value)
|
bool use_short_preamble)
|
||||||
{
|
{
|
||||||
struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
|
struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
|
||||||
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
||||||
bool use_protection = (erp_value & WLAN_ERP_USE_PROTECTION) != 0;
|
|
||||||
bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0;
|
|
||||||
DECLARE_MAC_BUF(mac);
|
DECLARE_MAC_BUF(mac);
|
||||||
u32 changed = 0;
|
u32 changed = 0;
|
||||||
|
|
||||||
|
@ -350,6 +348,32 @@ static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
|
u8 erp_value)
|
||||||
|
{
|
||||||
|
bool use_protection = (erp_value & WLAN_ERP_USE_PROTECTION) != 0;
|
||||||
|
bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0;
|
||||||
|
|
||||||
|
return ieee80211_handle_protect_preamb(sdata,
|
||||||
|
use_protection, use_short_preamble);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
|
||||||
|
struct ieee80211_sta_bss *bss)
|
||||||
|
{
|
||||||
|
u32 changed = 0;
|
||||||
|
|
||||||
|
if (bss->has_erp_value)
|
||||||
|
changed |= ieee80211_handle_erp_ie(sdata, bss->erp_value);
|
||||||
|
else {
|
||||||
|
u16 capab = bss->capability;
|
||||||
|
changed |= ieee80211_handle_protect_preamb(sdata, false,
|
||||||
|
(capab & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
int ieee80211_ht_cap_ie_to_ht_info(struct ieee80211_ht_cap *ht_cap_ie,
|
int ieee80211_ht_cap_ie_to_ht_info(struct ieee80211_ht_cap *ht_cap_ie,
|
||||||
struct ieee80211_ht_info *ht_info)
|
struct ieee80211_ht_info *ht_info)
|
||||||
{
|
{
|
||||||
|
@ -468,9 +492,7 @@ static void ieee80211_set_associated(struct net_device *dev,
|
||||||
local->hw.conf.channel,
|
local->hw.conf.channel,
|
||||||
ifsta->ssid, ifsta->ssid_len);
|
ifsta->ssid, ifsta->ssid_len);
|
||||||
if (bss) {
|
if (bss) {
|
||||||
if (bss->has_erp_value)
|
changed |= ieee80211_handle_bss_capability(sdata, bss);
|
||||||
changed |= ieee80211_handle_erp_ie(
|
|
||||||
sdata, bss->erp_value);
|
|
||||||
ieee80211_rx_bss_put(dev, bss);
|
ieee80211_rx_bss_put(dev, bss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2116,6 +2138,11 @@ static void ieee80211_rx_mgmt_beacon(struct net_device *dev,
|
||||||
|
|
||||||
if (elems.erp_info && elems.erp_info_len >= 1)
|
if (elems.erp_info && elems.erp_info_len >= 1)
|
||||||
changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]);
|
changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]);
|
||||||
|
else {
|
||||||
|
u16 capab = le16_to_cpu(mgmt->u.beacon.capab_info);
|
||||||
|
changed |= ieee80211_handle_protect_preamb(sdata, false,
|
||||||
|
(capab & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (elems.ht_cap_elem && elems.ht_info_elem &&
|
if (elems.ht_cap_elem && elems.ht_info_elem &&
|
||||||
elems.wmm_param && local->ops->conf_ht &&
|
elems.wmm_param && local->ops->conf_ht &&
|
||||||
|
|
|
@ -945,7 +945,7 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
||||||
nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
|
nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
|
||||||
params.listen_interval =
|
params.listen_interval =
|
||||||
nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
|
nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
|
||||||
params.listen_interval = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
||||||
|
|
||||||
if (parse_station_flags(info->attrs[NL80211_ATTR_STA_FLAGS],
|
if (parse_station_flags(info->attrs[NL80211_ATTR_STA_FLAGS],
|
||||||
¶ms.station_flags))
|
¶ms.station_flags))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче