Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
This commit is contained in:
@@ -418,10 +418,11 @@ ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
|
||||
struct ieee80211_local *local = rx->local;
|
||||
struct sk_buff *skb = rx->skb;
|
||||
|
||||
if (unlikely(local->hw_scanning))
|
||||
if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning)))
|
||||
return ieee80211_scan_rx(rx->sdata, skb);
|
||||
|
||||
if (unlikely(local->sw_scanning)) {
|
||||
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning) &&
|
||||
(rx->flags & IEEE80211_RX_IN_SCAN))) {
|
||||
/* drop all the other packets during a software scan anyway */
|
||||
if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED)
|
||||
dev_kfree_skb(skb);
|
||||
@@ -782,7 +783,7 @@ static void ap_sta_ps_start(struct sta_info *sta)
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
|
||||
atomic_inc(&sdata->bss->num_sta_ps);
|
||||
set_and_clear_sta_flags(sta, WLAN_STA_PS, WLAN_STA_PSPOLL);
|
||||
set_sta_flags(sta, WLAN_STA_PS);
|
||||
drv_sta_notify(local, &sdata->vif, STA_NOTIFY_SLEEP, &sta->sta);
|
||||
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
|
||||
printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n",
|
||||
@@ -798,7 +799,7 @@ static int ap_sta_ps_end(struct sta_info *sta)
|
||||
|
||||
atomic_dec(&sdata->bss->num_sta_ps);
|
||||
|
||||
clear_sta_flags(sta, WLAN_STA_PS | WLAN_STA_PSPOLL);
|
||||
clear_sta_flags(sta, WLAN_STA_PS);
|
||||
drv_sta_notify(local, &sdata->vif, STA_NOTIFY_AWAKE, &sta->sta);
|
||||
|
||||
if (!skb_queue_empty(&sta->ps_tx_buf))
|
||||
@@ -1116,14 +1117,15 @@ ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
|
||||
skb_queue_empty(&rx->sta->ps_tx_buf);
|
||||
|
||||
if (skb) {
|
||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
struct ieee80211_hdr *hdr =
|
||||
(struct ieee80211_hdr *) skb->data;
|
||||
|
||||
/*
|
||||
* Tell TX path to send one frame even though the STA may
|
||||
* Tell TX path to send this frame even though the STA may
|
||||
* still remain is PS mode after this frame exchange.
|
||||
*/
|
||||
set_sta_flags(rx->sta, WLAN_STA_PSPOLL);
|
||||
info->flags |= IEEE80211_TX_CTL_PSPOLL_RESPONSE;
|
||||
|
||||
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
|
||||
printk(KERN_DEBUG "STA %pM aid %d: PS Poll (entries after %d)\n",
|
||||
@@ -1138,7 +1140,7 @@ ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
|
||||
else
|
||||
hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
|
||||
|
||||
dev_queue_xmit(skb);
|
||||
ieee80211_add_pending_skb(rx->local, skb);
|
||||
|
||||
if (no_pending_pkts)
|
||||
sta_info_clear_tim_bit(rx->sta);
|
||||
@@ -1539,7 +1541,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
|
||||
info = IEEE80211_SKB_CB(fwd_skb);
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
||||
fwd_skb->iif = rx->dev->ifindex;
|
||||
info->control.vif = &rx->sdata->vif;
|
||||
ieee80211_select_queue(local, fwd_skb);
|
||||
if (is_multicast_ether_addr(fwd_hdr->addr3))
|
||||
memcpy(fwd_hdr->addr1, fwd_hdr->addr3,
|
||||
@@ -2136,7 +2138,8 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
||||
return;
|
||||
}
|
||||
|
||||
if (unlikely(local->sw_scanning || local->hw_scanning))
|
||||
if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
|
||||
test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
|
||||
rx.flags |= IEEE80211_RX_IN_SCAN;
|
||||
|
||||
ieee80211_parse_qos(&rx);
|
||||
|
Reference in New Issue
Block a user