wil6210: fix reordering for MCAST
[cascardo/linux.git] / drivers / net / wireless / ath / wil6210 / rx_reorder.c
index ce1206a..20d65f2 100644 (file)
@@ -97,14 +97,20 @@ void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb)
        int cid = wil_rxdesc_cid(d);
        int mid = wil_rxdesc_mid(d);
        u16 seq = wil_rxdesc_seq(d);
+       int mcast = wil_rxdesc_mcast(d);
        struct wil_sta_info *sta = &wil->sta[cid];
        struct wil_tid_ampdu_rx *r;
        u16 hseq;
        int index;
        unsigned long flags;
 
-       wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x\n",
-                    mid, cid, tid, seq);
+       wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x mcast %01x\n",
+                    mid, cid, tid, seq, mcast);
+
+       if (unlikely(mcast)) {
+               wil_netif_rx_any(skb, ndev);
+               return;
+       }
 
        spin_lock_irqsave(&sta->tid_rx_lock, flags);
 
@@ -437,7 +443,7 @@ void wil_back_tx_flush(struct wil6210_priv *wil)
        mutex_unlock(&wil->back_tx_mutex);
 }
 
-int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid)
+int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid, u16 wsize)
 {
        struct wil_back_tx *req = kzalloc(sizeof(*req), GFP_KERNEL);
 
@@ -445,7 +451,7 @@ int wil_addba_tx_request(struct wil6210_priv *wil, u8 ringid)
                return -ENOMEM;
 
        req->ringid = ringid;
-       req->agg_wsize = wil_agg_size(wil, 0);
+       req->agg_wsize = wil_agg_size(wil, wsize);
        req->agg_timeout = 0;
 
        mutex_lock(&wil->back_tx_mutex);