diff options
author | Kalle Valo <kvalo@codeaurora.org> | 2015-10-07 04:12:01 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-10-07 04:12:01 -0400 |
commit | de28a05ee28e36fa1fc68fcfc7c6cc1c6f7c270c (patch) | |
tree | 76a141f72957a8571d7e48a2159c4b14c303a199 | |
parent | 54328e64047a54b8fc2362c2e1f0fa16c90f739f (diff) | |
parent | dbf73d4a8bb8f4e1d1f3edd3be825692279e2ef3 (diff) |
Merge tag 'iwlwifi-for-kalle-2015-10-05' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes
* some fixes for PN key programming when entering D3;
* fix for CSA when the AP is stopped during a channel switch;
* fix firmware name for 3160 devices;
* add some new PCI IDs for 7265 devices;
* fix CT-kill entry;
* fix kernel panic when a sysassert occurs in the init ucode flow;
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/lib.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-7000.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/d3.c | 27 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/ops.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/drv.c | 5 |
8 files changed, 27 insertions, 20 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/lib.c b/drivers/net/wireless/iwlwifi/dvm/lib.c index ab45819c1fbb..e18629a16fb0 100644 --- a/drivers/net/wireless/iwlwifi/dvm/lib.c +++ b/drivers/net/wireless/iwlwifi/dvm/lib.c | |||
@@ -1020,7 +1020,7 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw, | |||
1020 | u8 *pn = seq.ccmp.pn; | 1020 | u8 *pn = seq.ccmp.pn; |
1021 | 1021 | ||
1022 | ieee80211_get_key_rx_seq(key, i, &seq); | 1022 | ieee80211_get_key_rx_seq(key, i, &seq); |
1023 | aes_sc->pn = cpu_to_le64( | 1023 | aes_sc[i].pn = cpu_to_le64( |
1024 | (u64)pn[5] | | 1024 | (u64)pn[5] | |
1025 | ((u64)pn[4] << 8) | | 1025 | ((u64)pn[4] << 8) | |
1026 | ((u64)pn[3] << 16) | | 1026 | ((u64)pn[3] << 16) | |
diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c index 6951aba620eb..3fb327d5a911 100644 --- a/drivers/net/wireless/iwlwifi/iwl-7000.c +++ b/drivers/net/wireless/iwlwifi/iwl-7000.c | |||
@@ -348,6 +348,6 @@ const struct iwl_cfg iwl7265d_n_cfg = { | |||
348 | }; | 348 | }; |
349 | 349 | ||
350 | MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | 350 | MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
351 | MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); | 351 | MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
352 | MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | 352 | MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
353 | MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); | 353 | MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c index 04264e417c1c..576187611e61 100644 --- a/drivers/net/wireless/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/iwlwifi/mvm/d3.c | |||
@@ -274,18 +274,13 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, | |||
274 | break; | 274 | break; |
275 | case WLAN_CIPHER_SUITE_CCMP: | 275 | case WLAN_CIPHER_SUITE_CCMP: |
276 | if (sta) { | 276 | if (sta) { |
277 | u8 *pn = seq.ccmp.pn; | 277 | u64 pn64; |
278 | 278 | ||
279 | aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc; | 279 | aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc; |
280 | aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc; | 280 | aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc; |
281 | 281 | ||
282 | ieee80211_get_key_tx_seq(key, &seq); | 282 | pn64 = atomic64_read(&key->tx_pn); |
283 | aes_tx_sc->pn = cpu_to_le64((u64)pn[5] | | 283 | aes_tx_sc->pn = cpu_to_le64(pn64); |
284 | ((u64)pn[4] << 8) | | ||
285 | ((u64)pn[3] << 16) | | ||
286 | ((u64)pn[2] << 24) | | ||
287 | ((u64)pn[1] << 32) | | ||
288 | ((u64)pn[0] << 40)); | ||
289 | } else { | 284 | } else { |
290 | aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc; | 285 | aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc; |
291 | } | 286 | } |
@@ -298,12 +293,12 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, | |||
298 | u8 *pn = seq.ccmp.pn; | 293 | u8 *pn = seq.ccmp.pn; |
299 | 294 | ||
300 | ieee80211_get_key_rx_seq(key, i, &seq); | 295 | ieee80211_get_key_rx_seq(key, i, &seq); |
301 | aes_sc->pn = cpu_to_le64((u64)pn[5] | | 296 | aes_sc[i].pn = cpu_to_le64((u64)pn[5] | |
302 | ((u64)pn[4] << 8) | | 297 | ((u64)pn[4] << 8) | |
303 | ((u64)pn[3] << 16) | | 298 | ((u64)pn[3] << 16) | |
304 | ((u64)pn[2] << 24) | | 299 | ((u64)pn[2] << 24) | |
305 | ((u64)pn[1] << 32) | | 300 | ((u64)pn[1] << 32) | |
306 | ((u64)pn[0] << 40)); | 301 | ((u64)pn[0] << 40)); |
307 | } | 302 | } |
308 | data->use_rsc_tsc = true; | 303 | data->use_rsc_tsc = true; |
309 | break; | 304 | break; |
@@ -1453,15 +1448,15 @@ static void iwl_mvm_d3_update_gtks(struct ieee80211_hw *hw, | |||
1453 | 1448 | ||
1454 | switch (key->cipher) { | 1449 | switch (key->cipher) { |
1455 | case WLAN_CIPHER_SUITE_CCMP: | 1450 | case WLAN_CIPHER_SUITE_CCMP: |
1456 | iwl_mvm_aes_sc_to_seq(&sc->aes.tsc, &seq); | ||
1457 | iwl_mvm_set_aes_rx_seq(sc->aes.unicast_rsc, key); | 1451 | iwl_mvm_set_aes_rx_seq(sc->aes.unicast_rsc, key); |
1452 | atomic64_set(&key->tx_pn, le64_to_cpu(sc->aes.tsc.pn)); | ||
1458 | break; | 1453 | break; |
1459 | case WLAN_CIPHER_SUITE_TKIP: | 1454 | case WLAN_CIPHER_SUITE_TKIP: |
1460 | iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq); | 1455 | iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq); |
1461 | iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key); | 1456 | iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key); |
1457 | ieee80211_set_key_tx_seq(key, &seq); | ||
1462 | break; | 1458 | break; |
1463 | } | 1459 | } |
1464 | ieee80211_set_key_tx_seq(key, &seq); | ||
1465 | 1460 | ||
1466 | /* that's it for this key */ | 1461 | /* that's it for this key */ |
1467 | return; | 1462 | return; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c index 4a0ce83315bd..5c7f7cc9ffcc 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c | |||
@@ -703,7 +703,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
703 | * abort after reading the nvm in case RF Kill is on, we will complete | 703 | * abort after reading the nvm in case RF Kill is on, we will complete |
704 | * the init seq later when RF kill will switch to off | 704 | * the init seq later when RF kill will switch to off |
705 | */ | 705 | */ |
706 | if (iwl_mvm_is_radio_killed(mvm)) { | 706 | if (iwl_mvm_is_radio_hw_killed(mvm)) { |
707 | IWL_DEBUG_RF_KILL(mvm, | 707 | IWL_DEBUG_RF_KILL(mvm, |
708 | "jump over all phy activities due to RF kill\n"); | 708 | "jump over all phy activities due to RF kill\n"); |
709 | iwl_remove_notification(&mvm->notif_wait, &calib_wait); | 709 | iwl_remove_notification(&mvm->notif_wait, &calib_wait); |
@@ -736,7 +736,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
736 | ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait, | 736 | ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait, |
737 | MVM_UCODE_CALIB_TIMEOUT); | 737 | MVM_UCODE_CALIB_TIMEOUT); |
738 | 738 | ||
739 | if (ret && iwl_mvm_is_radio_killed(mvm)) { | 739 | if (ret && iwl_mvm_is_radio_hw_killed(mvm)) { |
740 | IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n"); | 740 | IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n"); |
741 | ret = 1; | 741 | ret = 1; |
742 | } | 742 | } |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index aa8c2b7f23c7..7c2944a72470 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -2388,6 +2388,7 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw, | |||
2388 | iwl_mvm_remove_time_event(mvm, mvmvif, | 2388 | iwl_mvm_remove_time_event(mvm, mvmvif, |
2389 | &mvmvif->time_event_data); | 2389 | &mvmvif->time_event_data); |
2390 | RCU_INIT_POINTER(mvm->csa_vif, NULL); | 2390 | RCU_INIT_POINTER(mvm->csa_vif, NULL); |
2391 | mvmvif->csa_countdown = false; | ||
2391 | } | 2392 | } |
2392 | 2393 | ||
2393 | if (rcu_access_pointer(mvm->csa_tx_blocked_vif) == vif) { | 2394 | if (rcu_access_pointer(mvm->csa_tx_blocked_vif) == vif) { |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index b95a07ec9e36..c754051a4cea 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
@@ -860,6 +860,11 @@ static inline bool iwl_mvm_is_radio_killed(struct iwl_mvm *mvm) | |||
860 | test_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); | 860 | test_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status); |
861 | } | 861 | } |
862 | 862 | ||
863 | static inline bool iwl_mvm_is_radio_hw_killed(struct iwl_mvm *mvm) | ||
864 | { | ||
865 | return test_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status); | ||
866 | } | ||
867 | |||
863 | /* Must be called with rcu_read_lock() held and it can only be | 868 | /* Must be called with rcu_read_lock() held and it can only be |
864 | * released when mvmsta is not needed anymore. | 869 | * released when mvmsta is not needed anymore. |
865 | */ | 870 | */ |
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c index a37de3f410a0..f0cb092f980e 100644 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c | |||
@@ -590,6 +590,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | |||
590 | ieee80211_unregister_hw(mvm->hw); | 590 | ieee80211_unregister_hw(mvm->hw); |
591 | iwl_mvm_leds_exit(mvm); | 591 | iwl_mvm_leds_exit(mvm); |
592 | out_free: | 592 | out_free: |
593 | flush_delayed_work(&mvm->fw_dump_wk); | ||
593 | iwl_phy_db_free(mvm->phy_db); | 594 | iwl_phy_db_free(mvm->phy_db); |
594 | kfree(mvm->scan_cmd); | 595 | kfree(mvm->scan_cmd); |
595 | if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name) | 596 | if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name) |
diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c index b0825c402c73..644b58bc5226 100644 --- a/drivers/net/wireless/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c | |||
@@ -414,6 +414,11 @@ static const struct pci_device_id iwl_hw_card_ids[] = { | |||
414 | {IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)}, | 414 | {IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)}, |
415 | {IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)}, | 415 | {IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)}, |
416 | {IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)}, | 416 | {IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)}, |
417 | {IWL_PCI_DEVICE(0x095A, 0x5F10, iwl7265_2ac_cfg)}, | ||
418 | {IWL_PCI_DEVICE(0x095B, 0x5212, iwl7265_2ac_cfg)}, | ||
419 | {IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)}, | ||
420 | {IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)}, | ||
421 | {IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)}, | ||
417 | 422 | ||
418 | /* 8000 Series */ | 423 | /* 8000 Series */ |
419 | {IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)}, | 424 | {IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)}, |