diff options
author | Sara Sharon <sara.sharon@intel.com> | 2017-12-19 04:09:41 -0500 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2018-03-28 05:16:03 -0400 |
commit | e4d7220813e986a99eff2b98d882d5290dd58078 (patch) | |
tree | 3846cb96a8ef722e14ebb62cb5775b11952b1760 | |
parent | 6b7d5c0745905b71127d0c1ae6eeddc09bbdaad8 (diff) |
iwlwifi: mvm: flip AMSDU addresses only for 9000 family
Hardware bug was fixed in later generation.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index 580de5851fc7..4a4ccfd11e5b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | |||
@@ -831,6 +831,16 @@ out: | |||
831 | rcu_read_unlock(); | 831 | rcu_read_unlock(); |
832 | } | 832 | } |
833 | 833 | ||
834 | static void iwl_mvm_flip_address(u8 *addr) | ||
835 | { | ||
836 | int i; | ||
837 | u8 mac_addr[ETH_ALEN]; | ||
838 | |||
839 | for (i = 0; i < ETH_ALEN; i++) | ||
840 | mac_addr[i] = addr[ETH_ALEN - i - 1]; | ||
841 | ether_addr_copy(addr, mac_addr); | ||
842 | } | ||
843 | |||
834 | void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi, | 844 | void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi, |
835 | struct iwl_rx_cmd_buffer *rxb, int queue) | 845 | struct iwl_rx_cmd_buffer *rxb, int queue) |
836 | { | 846 | { |
@@ -985,21 +995,16 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi, | |||
985 | */ | 995 | */ |
986 | if ((desc->mac_flags2 & IWL_RX_MPDU_MFLG2_AMSDU) && | 996 | if ((desc->mac_flags2 & IWL_RX_MPDU_MFLG2_AMSDU) && |
987 | !WARN_ON(!ieee80211_is_data_qos(hdr->frame_control))) { | 997 | !WARN_ON(!ieee80211_is_data_qos(hdr->frame_control))) { |
988 | int i; | ||
989 | u8 *qc = ieee80211_get_qos_ctl(hdr); | 998 | u8 *qc = ieee80211_get_qos_ctl(hdr); |
990 | u8 mac_addr[ETH_ALEN]; | ||
991 | 999 | ||
992 | *qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; | 1000 | *qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; |
993 | 1001 | ||
994 | for (i = 0; i < ETH_ALEN; i++) | 1002 | if (mvm->trans->cfg->device_family == |
995 | mac_addr[i] = hdr->addr3[ETH_ALEN - i - 1]; | 1003 | IWL_DEVICE_FAMILY_9000) { |
996 | ether_addr_copy(hdr->addr3, mac_addr); | 1004 | iwl_mvm_flip_address(hdr->addr3); |
997 | 1005 | ||
998 | if (ieee80211_has_a4(hdr->frame_control)) { | 1006 | if (ieee80211_has_a4(hdr->frame_control)) |
999 | for (i = 0; i < ETH_ALEN; i++) | 1007 | iwl_mvm_flip_address(hdr->addr4); |
1000 | mac_addr[i] = | ||
1001 | hdr->addr4[ETH_ALEN - i - 1]; | ||
1002 | ether_addr_copy(hdr->addr4, mac_addr); | ||
1003 | } | 1008 | } |
1004 | } | 1009 | } |
1005 | if (baid != IWL_RX_REORDER_DATA_INVALID_BAID) { | 1010 | if (baid != IWL_RX_REORDER_DATA_INVALID_BAID) { |