diff options
Diffstat (limited to 'drivers/net')
| -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) { |
