Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
This commit is contained in:
commit
1eea72f03a
8 changed files with 34 additions and 28 deletions
|
@ -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 @@ process_start:
|
||||||
}
|
}
|
||||||
} while (true);
|
} while (true);
|
||||||
|
|
||||||
if ((adapter->int_status) || IS_CARD_RX_RCVD(adapter))
|
|
||||||
goto process_start;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&adapter->main_proc_lock, flags);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
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 @@ exit_free_reg:
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
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)
|
||||||
/* 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)
|
||||||
|
|
||||||
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,6 +644,7 @@ void wiphy_unregister(struct wiphy *wiphy)
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
__count == 0; }));
|
__count == 0; }));
|
||||||
|
|
||||||
|
if (rdev->rfkill)
|
||||||
rfkill_unregister(rdev->rfkill);
|
rfkill_unregister(rdev->rfkill);
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue