|
@@ -1463,8 +1463,7 @@ static int ath10k_unchain_msdu(struct sk_buff_head *amsdu)
|
|
|
}
|
|
|
|
|
|
static void ath10k_htt_rx_h_unchain(struct ath10k *ar,
|
|
|
- struct sk_buff_head *amsdu,
|
|
|
- bool chained)
|
|
|
+ struct sk_buff_head *amsdu)
|
|
|
{
|
|
|
struct sk_buff *first;
|
|
|
struct htt_rx_desc *rxd;
|
|
@@ -1475,9 +1474,6 @@ static void ath10k_htt_rx_h_unchain(struct ath10k *ar,
|
|
|
decap = MS(__le32_to_cpu(rxd->msdu_start.common.info1),
|
|
|
RX_MSDU_START_INFO1_DECAP_FORMAT);
|
|
|
|
|
|
- if (!chained)
|
|
|
- return;
|
|
|
-
|
|
|
/* FIXME: Current unchaining logic can only handle simple case of raw
|
|
|
* msdu chaining. If decapping is other than raw the chaining may be
|
|
|
* more complex and this isn't handled by the current code. Don't even
|
|
@@ -1555,7 +1551,11 @@ static int ath10k_htt_rx_handle_amsdu(struct ath10k_htt *htt)
|
|
|
|
|
|
num_msdus = skb_queue_len(&amsdu);
|
|
|
ath10k_htt_rx_h_ppdu(ar, &amsdu, rx_status, 0xffff);
|
|
|
- ath10k_htt_rx_h_unchain(ar, &amsdu, ret > 0);
|
|
|
+
|
|
|
+ /* only for ret = 1 indicates chained msdus */
|
|
|
+ if (ret > 0)
|
|
|
+ ath10k_htt_rx_h_unchain(ar, &amsdu);
|
|
|
+
|
|
|
ath10k_htt_rx_h_filter(ar, &amsdu, rx_status);
|
|
|
ath10k_htt_rx_h_mpdu(ar, &amsdu, rx_status);
|
|
|
ath10k_htt_rx_h_deliver(ar, &amsdu, rx_status);
|