Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4d72208 authored by Sara Sharon's avatar Sara Sharon Committed by Luca Coelho
Browse files

iwlwifi: mvm: flip AMSDU addresses only for 9000 family



Hardware bug was fixed in later generation.

Signed-off-by: default avatarSara Sharon <sara.sharon@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 6b7d5c07
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -831,6 +831,16 @@ static void iwl_mvm_agg_rx_received(struct iwl_mvm *mvm,
	rcu_read_unlock();
}

static void iwl_mvm_flip_address(u8 *addr)
{
	int i;
	u8 mac_addr[ETH_ALEN];

	for (i = 0; i < ETH_ALEN; i++)
		mac_addr[i] = addr[ETH_ALEN - i - 1];
	ether_addr_copy(addr, mac_addr);
}

void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
			struct iwl_rx_cmd_buffer *rxb, int queue)
{
@@ -985,21 +995,16 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
		 */
		if ((desc->mac_flags2 & IWL_RX_MPDU_MFLG2_AMSDU) &&
		    !WARN_ON(!ieee80211_is_data_qos(hdr->frame_control))) {
			int i;
			u8 *qc = ieee80211_get_qos_ctl(hdr);
			u8 mac_addr[ETH_ALEN];

			*qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT;

			for (i = 0; i < ETH_ALEN; i++)
				mac_addr[i] = hdr->addr3[ETH_ALEN - i - 1];
			ether_addr_copy(hdr->addr3, mac_addr);
			if (mvm->trans->cfg->device_family ==
			    IWL_DEVICE_FAMILY_9000) {
				iwl_mvm_flip_address(hdr->addr3);

			if (ieee80211_has_a4(hdr->frame_control)) {
				for (i = 0; i < ETH_ALEN; i++)
					mac_addr[i] =
						hdr->addr4[ETH_ALEN - i - 1];
				ether_addr_copy(hdr->addr4, mac_addr);
				if (ieee80211_has_a4(hdr->frame_control))
					iwl_mvm_flip_address(hdr->addr4);
			}
		}
		if (baid != IWL_RX_REORDER_DATA_INVALID_BAID) {