diff options
Diffstat (limited to 'drivers/net/wireless/hostap/hostap_ap.c')
-rw-r--r-- | drivers/net/wireless/hostap/hostap_ap.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c index c9aeefcd7612..550855a91509 100644 --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c | |||
@@ -1840,6 +1840,8 @@ static void ap_handle_dropped_data(local_info_t *local, | |||
1840 | static void pspoll_send_buffered(local_info_t *local, struct sta_info *sta, | 1840 | static void pspoll_send_buffered(local_info_t *local, struct sta_info *sta, |
1841 | struct sk_buff *skb) | 1841 | struct sk_buff *skb) |
1842 | { | 1842 | { |
1843 | struct hostap_skb_tx_data *meta; | ||
1844 | |||
1843 | if (!(sta->flags & WLAN_STA_PS)) { | 1845 | if (!(sta->flags & WLAN_STA_PS)) { |
1844 | /* Station has moved to non-PS mode, so send all buffered | 1846 | /* Station has moved to non-PS mode, so send all buffered |
1845 | * frames using normal device queue. */ | 1847 | * frames using normal device queue. */ |
@@ -1849,11 +1851,11 @@ static void pspoll_send_buffered(local_info_t *local, struct sta_info *sta, | |||
1849 | 1851 | ||
1850 | /* add a flag for hostap_handle_sta_tx() to know that this skb should | 1852 | /* add a flag for hostap_handle_sta_tx() to know that this skb should |
1851 | * be passed through even though STA is using PS */ | 1853 | * be passed through even though STA is using PS */ |
1852 | memcpy(skb->cb, AP_SKB_CB_MAGIC, AP_SKB_CB_MAGIC_LEN); | 1854 | meta = (struct hostap_skb_tx_data *) skb->cb; |
1853 | skb->cb[AP_SKB_CB_MAGIC_LEN] = AP_SKB_CB_BUFFERED_FRAME; | 1855 | meta->flags |= HOSTAP_TX_FLAGS_BUFFERED_FRAME; |
1854 | if (!skb_queue_empty(&sta->tx_buf)) { | 1856 | if (!skb_queue_empty(&sta->tx_buf)) { |
1855 | /* indicate to STA that more frames follow */ | 1857 | /* indicate to STA that more frames follow */ |
1856 | skb->cb[AP_SKB_CB_MAGIC_LEN] |= AP_SKB_CB_ADD_MOREDATA; | 1858 | meta->flags |= HOSTAP_TX_FLAGS_ADD_MOREDATA; |
1857 | } | 1859 | } |
1858 | dev_queue_xmit(skb); | 1860 | dev_queue_xmit(skb); |
1859 | } | 1861 | } |
@@ -2707,7 +2709,8 @@ ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx) | |||
2707 | atomic_inc(&sta->users); | 2709 | atomic_inc(&sta->users); |
2708 | spin_unlock(&local->ap->sta_table_lock); | 2710 | spin_unlock(&local->ap->sta_table_lock); |
2709 | 2711 | ||
2710 | if (local->iw_mode == IW_MODE_MASTER && sta == NULL && !meta->wds && | 2712 | if (local->iw_mode == IW_MODE_MASTER && sta == NULL && |
2713 | !(meta->flags & HOSTAP_TX_FLAGS_WDS) && | ||
2711 | meta->iface->type != HOSTAP_INTERFACE_MASTER && | 2714 | meta->iface->type != HOSTAP_INTERFACE_MASTER && |
2712 | meta->iface->type != HOSTAP_INTERFACE_AP) { | 2715 | meta->iface->type != HOSTAP_INTERFACE_AP) { |
2713 | #if 0 | 2716 | #if 0 |
@@ -2743,18 +2746,15 @@ ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx) | |||
2743 | if (!(sta->flags & WLAN_STA_PS)) | 2746 | if (!(sta->flags & WLAN_STA_PS)) |
2744 | goto out; | 2747 | goto out; |
2745 | 2748 | ||
2746 | if (memcmp(skb->cb, AP_SKB_CB_MAGIC, AP_SKB_CB_MAGIC_LEN) == 0) { | 2749 | if (meta->flags & HOSTAP_TX_FLAGS_ADD_MOREDATA) { |
2747 | if (skb->cb[AP_SKB_CB_MAGIC_LEN] & AP_SKB_CB_ADD_MOREDATA) { | 2750 | /* indicate to STA that more frames follow */ |
2748 | /* indicate to STA that more frames follow */ | 2751 | hdr->frame_control |= __constant_cpu_to_le16(WLAN_FC_MOREDATA); |
2749 | hdr->frame_control |= | 2752 | } |
2750 | __constant_cpu_to_le16(WLAN_FC_MOREDATA); | ||
2751 | } | ||
2752 | 2753 | ||
2753 | if (skb->cb[AP_SKB_CB_MAGIC_LEN] & AP_SKB_CB_BUFFERED_FRAME) { | 2754 | if (meta->flags & HOSTAP_TX_FLAGS_BUFFERED_FRAME) { |
2754 | /* packet was already buffered and now send due to | 2755 | /* packet was already buffered and now send due to |
2755 | * PS poll, so do not rebuffer it */ | 2756 | * PS poll, so do not rebuffer it */ |
2756 | goto out; | 2757 | goto out; |
2757 | } | ||
2758 | } | 2758 | } |
2759 | 2759 | ||
2760 | if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) { | 2760 | if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) { |