aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wil6210/rx_reorder.c
diff options
context:
space:
mode:
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>2014-12-23 02:47:21 -0500
committerKalle Valo <kvalo@codeaurora.org>2015-01-15 07:31:41 -0500
commite4373d8e4a340c530dfdbe3afef14cea96b13792 (patch)
treecdd559deca4f5c9a6fd152a64a5f4966092a7869 /drivers/net/wireless/ath/wil6210/rx_reorder.c
parentab95462825edf7decdd0f77be5c2c1ebb07a1943 (diff)
wil6210: fix reordering for MCAST
In the reordering block, Ethernet DA was checked for MCAST, this is wrong. Check instead MCAST indication from 802.11 MAC header. Hardware saves this into Rx descriptor. Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/wil6210/rx_reorder.c')
-rw-r--r--drivers/net/wireless/ath/wil6210/rx_reorder.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/wil6210/rx_reorder.c b/drivers/net/wireless/ath/wil6210/rx_reorder.c
index 0865c3430e51..20d65f224f7c 100644
--- a/drivers/net/wireless/ath/wil6210/rx_reorder.c
+++ b/drivers/net/wireless/ath/wil6210/rx_reorder.c
@@ -97,14 +97,20 @@ void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb)
97 int cid = wil_rxdesc_cid(d); 97 int cid = wil_rxdesc_cid(d);
98 int mid = wil_rxdesc_mid(d); 98 int mid = wil_rxdesc_mid(d);
99 u16 seq = wil_rxdesc_seq(d); 99 u16 seq = wil_rxdesc_seq(d);
100 int mcast = wil_rxdesc_mcast(d);
100 struct wil_sta_info *sta = &wil->sta[cid]; 101 struct wil_sta_info *sta = &wil->sta[cid];
101 struct wil_tid_ampdu_rx *r; 102 struct wil_tid_ampdu_rx *r;
102 u16 hseq; 103 u16 hseq;
103 int index; 104 int index;
104 unsigned long flags; 105 unsigned long flags;
105 106
106 wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x\n", 107 wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x mcast %01x\n",
107 mid, cid, tid, seq); 108 mid, cid, tid, seq, mcast);
109
110 if (unlikely(mcast)) {
111 wil_netif_rx_any(skb, ndev);
112 return;
113 }
108 114
109 spin_lock_irqsave(&sta->tid_rx_lock, flags); 115 spin_lock_irqsave(&sta->tid_rx_lock, flags);
110 116