diff options
Diffstat (limited to 'drivers/net/wireless/intel')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 16 |
4 files changed, 23 insertions, 7 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index e5f267b21316..18a8474b5760 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | |||
@@ -3851,8 +3851,8 @@ static int iwl_mvm_mac_get_survey(struct ieee80211_hw *hw, int idx, | |||
3851 | if (idx != 0) | 3851 | if (idx != 0) |
3852 | return -ENOENT; | 3852 | return -ENOENT; |
3853 | 3853 | ||
3854 | if (fw_has_capa(&mvm->fw->ucode_capa, | 3854 | if (!fw_has_capa(&mvm->fw->ucode_capa, |
3855 | IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) | 3855 | IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) |
3856 | return -ENOENT; | 3856 | return -ENOENT; |
3857 | 3857 | ||
3858 | mutex_lock(&mvm->mutex); | 3858 | mutex_lock(&mvm->mutex); |
@@ -3898,8 +3898,8 @@ static void iwl_mvm_mac_sta_statistics(struct ieee80211_hw *hw, | |||
3898 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); | 3898 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); |
3899 | struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); | 3899 | struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); |
3900 | 3900 | ||
3901 | if (fw_has_capa(&mvm->fw->ucode_capa, | 3901 | if (!fw_has_capa(&mvm->fw->ucode_capa, |
3902 | IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) | 3902 | IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) |
3903 | return; | 3903 | return; |
3904 | 3904 | ||
3905 | /* if beacon filtering isn't on mac80211 does it anyway */ | 3905 | /* if beacon filtering isn't on mac80211 does it anyway */ |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index ac2c5718e454..2c61516d06ff 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | |||
@@ -581,7 +581,7 @@ static bool iwl_mvm_reorder(struct iwl_mvm *mvm, | |||
581 | struct iwl_rx_mpdu_desc *desc) | 581 | struct iwl_rx_mpdu_desc *desc) |
582 | { | 582 | { |
583 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | 583 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
584 | struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta); | 584 | struct iwl_mvm_sta *mvm_sta; |
585 | struct iwl_mvm_baid_data *baid_data; | 585 | struct iwl_mvm_baid_data *baid_data; |
586 | struct iwl_mvm_reorder_buffer *buffer; | 586 | struct iwl_mvm_reorder_buffer *buffer; |
587 | struct sk_buff *tail; | 587 | struct sk_buff *tail; |
@@ -604,6 +604,8 @@ static bool iwl_mvm_reorder(struct iwl_mvm *mvm, | |||
604 | if (WARN_ON(IS_ERR_OR_NULL(sta))) | 604 | if (WARN_ON(IS_ERR_OR_NULL(sta))) |
605 | return false; | 605 | return false; |
606 | 606 | ||
607 | mvm_sta = iwl_mvm_sta_from_mac80211(sta); | ||
608 | |||
607 | /* not a data packet */ | 609 | /* not a data packet */ |
608 | if (!ieee80211_is_data_qos(hdr->frame_control) || | 610 | if (!ieee80211_is_data_qos(hdr->frame_control) || |
609 | is_multicast_ether_addr(hdr->addr1)) | 611 | is_multicast_ether_addr(hdr->addr1)) |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c index 6f609dd5c222..e78fc567ff7d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c | |||
@@ -1222,7 +1222,7 @@ static int iwl_mvm_check_running_scans(struct iwl_mvm *mvm, int type) | |||
1222 | return -EIO; | 1222 | return -EIO; |
1223 | } | 1223 | } |
1224 | 1224 | ||
1225 | #define SCAN_TIMEOUT (16 * HZ) | 1225 | #define SCAN_TIMEOUT (20 * HZ) |
1226 | 1226 | ||
1227 | void iwl_mvm_scan_timeout(unsigned long data) | 1227 | void iwl_mvm_scan_timeout(unsigned long data) |
1228 | { | 1228 | { |
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c index fea4d3437e2f..b23ab4a4504f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c | |||
@@ -1852,12 +1852,18 @@ static struct iwl_mvm_sta *iwl_mvm_get_key_sta(struct iwl_mvm *mvm, | |||
1852 | mvmvif->ap_sta_id != IWL_MVM_STATION_COUNT) { | 1852 | mvmvif->ap_sta_id != IWL_MVM_STATION_COUNT) { |
1853 | u8 sta_id = mvmvif->ap_sta_id; | 1853 | u8 sta_id = mvmvif->ap_sta_id; |
1854 | 1854 | ||
1855 | sta = rcu_dereference_check(mvm->fw_id_to_mac_id[sta_id], | ||
1856 | lockdep_is_held(&mvm->mutex)); | ||
1857 | |||
1855 | /* | 1858 | /* |
1856 | * It is possible that the 'sta' parameter is NULL, | 1859 | * It is possible that the 'sta' parameter is NULL, |
1857 | * for example when a GTK is removed - the sta_id will then | 1860 | * for example when a GTK is removed - the sta_id will then |
1858 | * be the AP ID, and no station was passed by mac80211. | 1861 | * be the AP ID, and no station was passed by mac80211. |
1859 | */ | 1862 | */ |
1860 | return iwl_mvm_sta_from_staid_protected(mvm, sta_id); | 1863 | if (IS_ERR_OR_NULL(sta)) |
1864 | return NULL; | ||
1865 | |||
1866 | return iwl_mvm_sta_from_mac80211(sta); | ||
1861 | } | 1867 | } |
1862 | 1868 | ||
1863 | return NULL; | 1869 | return NULL; |
@@ -1955,6 +1961,14 @@ static int iwl_mvm_send_sta_igtk(struct iwl_mvm *mvm, | |||
1955 | struct ieee80211_key_seq seq; | 1961 | struct ieee80211_key_seq seq; |
1956 | const u8 *pn; | 1962 | const u8 *pn; |
1957 | 1963 | ||
1964 | switch (keyconf->cipher) { | ||
1965 | case WLAN_CIPHER_SUITE_AES_CMAC: | ||
1966 | igtk_cmd.ctrl_flags |= cpu_to_le32(STA_KEY_FLG_CCM); | ||
1967 | break; | ||
1968 | default: | ||
1969 | return -EINVAL; | ||
1970 | } | ||
1971 | |||
1958 | memcpy(igtk_cmd.IGTK, keyconf->key, keyconf->keylen); | 1972 | memcpy(igtk_cmd.IGTK, keyconf->key, keyconf->keylen); |
1959 | ieee80211_get_key_rx_seq(keyconf, 0, &seq); | 1973 | ieee80211_get_key_rx_seq(keyconf, 0, &seq); |
1960 | pn = seq.aes_cmac.pn; | 1974 | pn = seq.aes_cmac.pn; |