]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mwifiex: fix AMPDU not setup on TDLS link problem
authorAmitkumar Karwar <akarwar@marvell.com>
Mon, 14 Dec 2015 12:15:11 +0000 (04:15 -0800)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 30 Dec 2015 14:58:02 +0000 (16:58 +0200)
Sometimes AP sends TDLS setup response as AMSDU packet.
As driver doesn't parse it and update peer station's 11n
capability in this case, AMPDU doesn't get setup.

This patch calls mwifiex_process_tdls_action_frame() in
AMSDU Rx path to fix the problem.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Cathy Luo <cluo@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c

index b3970a8c9e48b9b0677b6ca0d36d5b57680d3715..09578c6cde598da872cdc688afe6d9ae7a19cb1e 100644 (file)
@@ -48,7 +48,17 @@ static int mwifiex_11n_dispatch_amsdu_pkt(struct mwifiex_private *priv,
                                         priv->wdev.iftype, 0, false);
 
                while (!skb_queue_empty(&list)) {
+                       struct rx_packet_hdr *rx_hdr;
+
                        rx_skb = __skb_dequeue(&list);
+                       rx_hdr = (struct rx_packet_hdr *)rx_skb->data;
+                       if (ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info) &&
+                           ntohs(rx_hdr->eth803_hdr.h_proto) == ETH_P_TDLS) {
+                               mwifiex_process_tdls_action_frame(priv,
+                                                                 (u8 *)rx_hdr,
+                                                                 skb->len);
+                       }
+
                        ret = mwifiex_recv_packet(priv, rx_skb);
                        if (ret == -1)
                                mwifiex_dbg(priv->adapter, ERROR,