diff options
| author | Kalle Valo <kvalo@codeaurora.org> | 2015-02-06 01:57:37 -0500 | 
|---|---|---|
| committer | Kalle Valo <kvalo@codeaurora.org> | 2015-02-06 01:57:37 -0500 | 
| commit | 8cd4cbf249483822c6d52109b3d6ec6fd189a32b (patch) | |
| tree | 2fb0e2e4f54bd2eca28cc22ce00c74268d32f45c /drivers/net/wireless/iwlwifi/mvm/ops.c | |
| parent | 297540f69fa9c7292c9866e71cb22a7bc4c5003b (diff) | |
| parent | b9a641d9cb768177a7c867e382a2fdb6023b06ad (diff) | |
Merge tag 'iwlwifi-next-for-kalle-2015-02-03' of https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
* Add support for beamforming
* Enable stuck queue detection for iwlmvm
* A few fixes for EBS scan
* Fixes for various failure paths
* Improvements for TDLS Offchannel
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/ops.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/ops.c | 28 | 
1 files changed, 18 insertions, 10 deletions
| diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c index 8bf8c2a29e5e..2dffc3600ed3 100644 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c | |||
| @@ -93,6 +93,7 @@ static const struct iwl_op_mode_ops iwl_mvm_ops; | |||
| 93 | 93 | ||
| 94 | struct iwl_mvm_mod_params iwlmvm_mod_params = { | 94 | struct iwl_mvm_mod_params iwlmvm_mod_params = { | 
| 95 | .power_scheme = IWL_POWER_SCHEME_BPS, | 95 | .power_scheme = IWL_POWER_SCHEME_BPS, | 
| 96 | .tfd_q_hang_detect = true | ||
| 96 | /* rest of fields are 0 by default */ | 97 | /* rest of fields are 0 by default */ | 
| 97 | }; | 98 | }; | 
| 98 | 99 | ||
| @@ -102,6 +103,10 @@ MODULE_PARM_DESC(init_dbg, | |||
| 102 | module_param_named(power_scheme, iwlmvm_mod_params.power_scheme, int, S_IRUGO); | 103 | module_param_named(power_scheme, iwlmvm_mod_params.power_scheme, int, S_IRUGO); | 
| 103 | MODULE_PARM_DESC(power_scheme, | 104 | MODULE_PARM_DESC(power_scheme, | 
| 104 | "power management scheme: 1-active, 2-balanced, 3-low power, default: 2"); | 105 | "power management scheme: 1-active, 2-balanced, 3-low power, default: 2"); | 
| 106 | module_param_named(tfd_q_hang_detect, iwlmvm_mod_params.tfd_q_hang_detect, | ||
| 107 | bool, S_IRUGO); | ||
| 108 | MODULE_PARM_DESC(tfd_q_hang_detect, | ||
| 109 | "TFD queues hang detection (default: true"); | ||
| 105 | 110 | ||
| 106 | /* | 111 | /* | 
| 107 | * module init and exit functions | 112 | * module init and exit functions | 
| @@ -473,11 +478,6 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | |||
| 473 | if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE) | 478 | if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE) | 
| 474 | trans_cfg.bc_table_dword = true; | 479 | trans_cfg.bc_table_dword = true; | 
| 475 | 480 | ||
| 476 | if (!iwlwifi_mod_params.wd_disable) | ||
| 477 | trans_cfg.queue_watchdog_timeout = cfg->base_params->wd_timeout; | ||
| 478 | else | ||
| 479 | trans_cfg.queue_watchdog_timeout = IWL_WATCHDOG_DISABLED; | ||
| 480 | |||
| 481 | trans_cfg.command_names = iwl_mvm_cmd_strings; | 481 | trans_cfg.command_names = iwl_mvm_cmd_strings; | 
| 482 | 482 | ||
| 483 | trans_cfg.cmd_queue = IWL_MVM_CMD_QUEUE; | 483 | trans_cfg.cmd_queue = IWL_MVM_CMD_QUEUE; | 
| @@ -486,6 +486,11 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | |||
| 486 | 486 | ||
| 487 | trans_cfg.sdio_adma_addr = fw->sdio_adma_addr; | 487 | trans_cfg.sdio_adma_addr = fw->sdio_adma_addr; | 
| 488 | 488 | ||
| 489 | /* Set a short watchdog for the command queue */ | ||
| 490 | trans_cfg.cmd_q_wdg_timeout = | ||
| 491 | iwlmvm_mod_params.tfd_q_hang_detect ? IWL_DEF_WD_TIMEOUT : | ||
| 492 | IWL_WATCHDOG_DISABLED; | ||
| 493 | |||
| 489 | snprintf(mvm->hw->wiphy->fw_version, | 494 | snprintf(mvm->hw->wiphy->fw_version, | 
| 490 | sizeof(mvm->hw->wiphy->fw_version), | 495 | sizeof(mvm->hw->wiphy->fw_version), | 
| 491 | "%s", fw->fw_version); | 496 | "%s", fw->fw_version); | 
| @@ -563,6 +568,9 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, | |||
| 563 | if (!mvm->scan_cmd) | 568 | if (!mvm->scan_cmd) | 
| 564 | goto out_free; | 569 | goto out_free; | 
| 565 | 570 | ||
| 571 | /* Set EBS as successful as long as not stated otherwise by the FW. */ | ||
| 572 | mvm->last_ebs_successful = true; | ||
| 573 | |||
| 566 | err = iwl_mvm_mac_setup_register(mvm); | 574 | err = iwl_mvm_mac_setup_register(mvm); | 
| 567 | if (err) | 575 | if (err) | 
| 568 | goto out_free; | 576 | goto out_free; | 
| @@ -870,7 +878,10 @@ void iwl_mvm_nic_restart(struct iwl_mvm *mvm, bool fw_error) | |||
| 870 | * If WoWLAN fw asserted, don't restart either, mac80211 | 878 | * If WoWLAN fw asserted, don't restart either, mac80211 | 
| 871 | * can't recover this since we're already half suspended. | 879 | * can't recover this since we're already half suspended. | 
| 872 | */ | 880 | */ | 
| 873 | if (test_and_set_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) { | 881 | if (!mvm->restart_fw && fw_error) { | 
| 882 | schedule_work(&mvm->fw_error_dump_wk); | ||
| 883 | } else if (test_and_set_bit(IWL_MVM_STATUS_IN_HW_RESTART, | ||
| 884 | &mvm->status)) { | ||
| 874 | struct iwl_mvm_reprobe *reprobe; | 885 | struct iwl_mvm_reprobe *reprobe; | 
| 875 | 886 | ||
| 876 | IWL_ERR(mvm, | 887 | IWL_ERR(mvm, | 
| @@ -894,16 +905,13 @@ void iwl_mvm_nic_restart(struct iwl_mvm *mvm, bool fw_error) | |||
| 894 | reprobe->dev = mvm->trans->dev; | 905 | reprobe->dev = mvm->trans->dev; | 
| 895 | INIT_WORK(&reprobe->work, iwl_mvm_reprobe_wk); | 906 | INIT_WORK(&reprobe->work, iwl_mvm_reprobe_wk); | 
| 896 | schedule_work(&reprobe->work); | 907 | schedule_work(&reprobe->work); | 
| 897 | } else if (mvm->cur_ucode == IWL_UCODE_REGULAR && | 908 | } else if (mvm->cur_ucode == IWL_UCODE_REGULAR) { | 
| 898 | (!fw_error || mvm->restart_fw)) { | ||
| 899 | /* don't let the transport/FW power down */ | 909 | /* don't let the transport/FW power down */ | 
| 900 | iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN); | 910 | iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN); | 
| 901 | 911 | ||
| 902 | if (fw_error && mvm->restart_fw > 0) | 912 | if (fw_error && mvm->restart_fw > 0) | 
| 903 | mvm->restart_fw--; | 913 | mvm->restart_fw--; | 
| 904 | ieee80211_restart_hw(mvm->hw); | 914 | ieee80211_restart_hw(mvm->hw); | 
| 905 | } else if (fw_error) { | ||
| 906 | schedule_work(&mvm->fw_error_dump_wk); | ||
| 907 | } | 915 | } | 
| 908 | } | 916 | } | 
| 909 | 917 | ||
