mac80211: allow passing transmitter station on RX
[cascardo/linux.git] / drivers / net / wireless / intel / iwlwifi / mvm / rxmq.c
index cd6ca37..38e7fa9 100644 (file)
@@ -210,7 +210,7 @@ static void iwl_mvm_pass_packet_to_mac80211(struct iwl_mvm *mvm,
        if (iwl_mvm_check_pn(mvm, skb, queue, sta))
                kfree_skb(skb);
        else
-               ieee80211_rx_napi(mvm->hw, skb, napi);
+               ieee80211_rx_napi(mvm->hw, NULL, skb, napi);
 }
 
 static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm,
@@ -519,6 +519,18 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
                        rcu_read_unlock();
                        return;
                }
+
+               /*
+                * Our hardware de-aggregates AMSDUs but copies the mac header
+                * as it to the de-aggregated MPDUs. We need to turn off the
+                * AMSDU bit in the QoS control ourselves.
+                */
+               if ((desc->mac_flags2 & IWL_RX_MPDU_MFLG2_AMSDU) &&
+                   !WARN_ON(!ieee80211_is_data_qos(hdr->frame_control))) {
+                       u8 *qc = ieee80211_get_qos_ctl(hdr);
+
+                       *qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT;
+               }
        }
 
        /*