Commit 1eea72f0 authored by John W. Linville's avatar John W. Linville

Merge branch 'master' of...

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
parents 569943d0 f69727fd
...@@ -1969,15 +1969,18 @@ static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq, ...@@ -1969,15 +1969,18 @@ static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq, static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
struct ath_atx_tid *tid, struct sk_buff *skb) struct ath_atx_tid *tid, struct sk_buff *skb)
{ {
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
struct ath_frame_info *fi = get_frame_info(skb); struct ath_frame_info *fi = get_frame_info(skb);
struct list_head bf_head; struct list_head bf_head;
struct ath_buf *bf; struct ath_buf *bf = fi->bf;
bf = fi->bf;
INIT_LIST_HEAD(&bf_head); INIT_LIST_HEAD(&bf_head);
list_add_tail(&bf->list, &bf_head); list_add_tail(&bf->list, &bf_head);
bf->bf_state.bf_type = 0; bf->bf_state.bf_type = 0;
if (tid && (tx_info->flags & IEEE80211_TX_CTL_AMPDU)) {
bf->bf_state.bf_type = BUF_AMPDU;
ath_tx_addto_baw(sc, tid, bf);
}
bf->bf_next = NULL; bf->bf_next = NULL;
bf->bf_lastbf = bf; bf->bf_lastbf = bf;
......
...@@ -358,10 +358,12 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter) ...@@ -358,10 +358,12 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
} }
} while (true); } while (true);
if ((adapter->int_status) || IS_CARD_RX_RCVD(adapter)) spin_lock_irqsave(&adapter->main_proc_lock, flags);
if ((adapter->int_status) || IS_CARD_RX_RCVD(adapter)) {
spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
goto process_start; goto process_start;
}
spin_lock_irqsave(&adapter->main_proc_lock, flags);
adapter->mwifiex_processing = false; adapter->mwifiex_processing = false;
spin_unlock_irqrestore(&adapter->main_proc_lock, flags); spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
......
...@@ -105,13 +105,11 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops) ...@@ -105,13 +105,11 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)
goto exit_release_regions; goto exit_release_regions;
} }
pci_enable_msi(pci_dev);
hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw); hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
if (!hw) { if (!hw) {
rt2x00_probe_err("Failed to allocate hardware\n"); rt2x00_probe_err("Failed to allocate hardware\n");
retval = -ENOMEM; retval = -ENOMEM;
goto exit_disable_msi; goto exit_release_regions;
} }
pci_set_drvdata(pci_dev, hw); pci_set_drvdata(pci_dev, hw);
...@@ -152,9 +150,6 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops) ...@@ -152,9 +150,6 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)
exit_free_device: exit_free_device:
ieee80211_free_hw(hw); ieee80211_free_hw(hw);
exit_disable_msi:
pci_disable_msi(pci_dev);
exit_release_regions: exit_release_regions:
pci_release_regions(pci_dev); pci_release_regions(pci_dev);
...@@ -179,8 +174,6 @@ void rt2x00pci_remove(struct pci_dev *pci_dev) ...@@ -179,8 +174,6 @@ void rt2x00pci_remove(struct pci_dev *pci_dev)
rt2x00pci_free_reg(rt2x00dev); rt2x00pci_free_reg(rt2x00dev);
ieee80211_free_hw(hw); ieee80211_free_hw(hw);
pci_disable_msi(pci_dev);
/* /*
* Free the PCI device data. * Free the PCI device data.
*/ */
......
...@@ -3056,6 +3056,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx, ...@@ -3056,6 +3056,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_ADHOC:
if (!bssid) if (!bssid)
return 0; return 0;
if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
return 0;
if (ieee80211_is_beacon(hdr->frame_control)) { if (ieee80211_is_beacon(hdr->frame_control)) {
return 1; return 1;
} else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
......
...@@ -2103,7 +2103,7 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, ...@@ -2103,7 +2103,7 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
{ {
struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local;
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
int rate, skip, shift; int rate, shift;
u8 i, exrates, *pos; u8 i, exrates, *pos;
u32 basic_rates = sdata->vif.bss_conf.basic_rates; u32 basic_rates = sdata->vif.bss_conf.basic_rates;
u32 rate_flags; u32 rate_flags;
...@@ -2131,14 +2131,11 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, ...@@ -2131,14 +2131,11 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
pos = skb_put(skb, exrates + 2); pos = skb_put(skb, exrates + 2);
*pos++ = WLAN_EID_EXT_SUPP_RATES; *pos++ = WLAN_EID_EXT_SUPP_RATES;
*pos++ = exrates; *pos++ = exrates;
skip = 0;
for (i = 8; i < sband->n_bitrates; i++) { for (i = 8; i < sband->n_bitrates; i++) {
u8 basic = 0; u8 basic = 0;
if ((rate_flags & sband->bitrates[i].flags) if ((rate_flags & sband->bitrates[i].flags)
!= rate_flags) != rate_flags)
continue; continue;
if (skip++ < 8)
continue;
if (need_basic && basic_rates & BIT(i)) if (need_basic && basic_rates & BIT(i))
basic = 0x80; basic = 0x80;
rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, rate = DIV_ROUND_UP(sband->bitrates[i].bitrate,
......
...@@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy) ...@@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy)
/* check and set up bitrates */ /* check and set up bitrates */
ieee80211_set_bitrate_flags(wiphy); ieee80211_set_bitrate_flags(wiphy);
rtnl_lock();
res = device_add(&rdev->wiphy.dev); res = device_add(&rdev->wiphy.dev);
if (res)
return res;
res = rfkill_register(rdev->rfkill);
if (res) { if (res) {
device_del(&rdev->wiphy.dev); rtnl_unlock();
return res; return res;
} }
rtnl_lock();
/* set up regulatory info */ /* set up regulatory info */
wiphy_regulatory_register(wiphy); wiphy_regulatory_register(wiphy);
...@@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy) ...@@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy)
rdev->wiphy.registered = true; rdev->wiphy.registered = true;
rtnl_unlock(); rtnl_unlock();
res = rfkill_register(rdev->rfkill);
if (res) {
rfkill_destroy(rdev->rfkill);
rdev->rfkill = NULL;
wiphy_unregister(&rdev->wiphy);
return res;
}
return 0; return 0;
} }
EXPORT_SYMBOL(wiphy_register); EXPORT_SYMBOL(wiphy_register);
...@@ -640,7 +644,8 @@ void wiphy_unregister(struct wiphy *wiphy) ...@@ -640,7 +644,8 @@ void wiphy_unregister(struct wiphy *wiphy)
rtnl_unlock(); rtnl_unlock();
__count == 0; })); __count == 0; }));
rfkill_unregister(rdev->rfkill); if (rdev->rfkill)
rfkill_unregister(rdev->rfkill);
rtnl_lock(); rtnl_lock();
rdev->wiphy.registered = false; rdev->wiphy.registered = false;
......
...@@ -263,6 +263,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, ...@@ -263,6 +263,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
if (chan->flags & IEEE80211_CHAN_DISABLED) if (chan->flags & IEEE80211_CHAN_DISABLED)
continue; continue;
wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan;
wdev->wext.ibss.chandef.center_freq1 =
chan->center_freq;
break; break;
} }
...@@ -347,6 +349,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev, ...@@ -347,6 +349,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev,
if (chan) { if (chan) {
wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan;
wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
wdev->wext.ibss.chandef.center_freq1 = freq;
wdev->wext.ibss.channel_fixed = true; wdev->wext.ibss.channel_fixed = true;
} else { } else {
/* cfg80211_ibss_wext_join will pick one if needed */ /* cfg80211_ibss_wext_join will pick one if needed */
......
...@@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) ...@@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
change = true; change = true;
} }
if (flags && (*flags & NL80211_MNTR_FLAG_ACTIVE) && if (flags && (*flags & MONITOR_FLAG_ACTIVE) &&
!(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) ...@@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
&flags); &flags);
if (!err && (flags & NL80211_MNTR_FLAG_ACTIVE) && if (!err && (flags & MONITOR_FLAG_ACTIVE) &&
!(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
return -EOPNOTSUPP; return -EOPNOTSUPP;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment