diff options
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/coex.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/rs.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/scan.c | 53 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/utils.c | 19 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 10 |
8 files changed, 53 insertions, 53 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c index fa858d548d13..0489314425cb 100644 --- a/drivers/net/wireless/iwlwifi/mvm/coex.c +++ b/drivers/net/wireless/iwlwifi/mvm/coex.c | |||
| @@ -611,14 +611,14 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm) | |||
| 611 | bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO); | 611 | bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO); |
| 612 | 612 | ||
| 613 | if (IWL_MVM_BT_COEX_CORUNNING) { | 613 | if (IWL_MVM_BT_COEX_CORUNNING) { |
| 614 | bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_CORUN_LUT_20 | | 614 | bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_CORUN_LUT_20 | |
| 615 | BT_VALID_CORUN_LUT_40); | 615 | BT_VALID_CORUN_LUT_40); |
| 616 | bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING); | 616 | bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING); |
| 617 | } | 617 | } |
| 618 | 618 | ||
| 619 | if (IWL_MVM_BT_COEX_MPLUT) { | 619 | if (IWL_MVM_BT_COEX_MPLUT) { |
| 620 | bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT); | 620 | bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT); |
| 621 | bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_MULTI_PRIO_LUT); | 621 | bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT); |
| 622 | } | 622 | } |
| 623 | 623 | ||
| 624 | if (mvm->cfg->bt_shared_single_ant) | 624 | if (mvm->cfg->bt_shared_single_ant) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h index 9426905de6b2..d73a89ecd78a 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | |||
| @@ -183,9 +183,9 @@ enum iwl_scan_type { | |||
| 183 | * this number of packets were received (typically 1) | 183 | * this number of packets were received (typically 1) |
| 184 | * @passive2active: is auto switching from passive to active during scan allowed | 184 | * @passive2active: is auto switching from passive to active during scan allowed |
| 185 | * @rxchain_sel_flags: RXON_RX_CHAIN_* | 185 | * @rxchain_sel_flags: RXON_RX_CHAIN_* |
| 186 | * @max_out_time: in usecs, max out of serving channel time | 186 | * @max_out_time: in TUs, max out of serving channel time |
| 187 | * @suspend_time: how long to pause scan when returning to service channel: | 187 | * @suspend_time: how long to pause scan when returning to service channel: |
| 188 | * bits 0-19: beacon interal in usecs (suspend before executing) | 188 | * bits 0-19: beacon interal in TUs (suspend before executing) |
| 189 | * bits 20-23: reserved | 189 | * bits 20-23: reserved |
| 190 | * bits 24-31: number of beacons (suspend between channels) | 190 | * bits 24-31: number of beacons (suspend between channels) |
| 191 | * @rxon_flags: RXON_FLG_* | 191 | * @rxon_flags: RXON_FLG_* |
| @@ -383,8 +383,8 @@ enum scan_framework_client { | |||
| 383 | * @quiet_plcp_th: quiet channel num of packets threshold | 383 | * @quiet_plcp_th: quiet channel num of packets threshold |
| 384 | * @good_CRC_th: passive to active promotion threshold | 384 | * @good_CRC_th: passive to active promotion threshold |
| 385 | * @rx_chain: RXON rx chain. | 385 | * @rx_chain: RXON rx chain. |
| 386 | * @max_out_time: max uSec to be out of assoceated channel | 386 | * @max_out_time: max TUs to be out of assoceated channel |
| 387 | * @suspend_time: pause scan this long when returning to service channel | 387 | * @suspend_time: pause scan this TUs when returning to service channel |
| 388 | * @flags: RXON flags | 388 | * @flags: RXON flags |
| 389 | * @filter_flags: RXONfilter | 389 | * @filter_flags: RXONfilter |
| 390 | * @tx_cmd: tx command for active scan; for 2GHz and for 5GHz. | 390 | * @tx_cmd: tx command for active scan; for 2GHz and for 5GHz. |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index f0cebf12c7b8..593f723a74c4 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
| @@ -1807,6 +1807,11 @@ static int iwl_mvm_mac_sched_scan_start(struct ieee80211_hw *hw, | |||
| 1807 | 1807 | ||
| 1808 | mutex_lock(&mvm->mutex); | 1808 | mutex_lock(&mvm->mutex); |
| 1809 | 1809 | ||
| 1810 | if (iwl_mvm_is_associated(mvm)) { | ||
| 1811 | ret = -EBUSY; | ||
| 1812 | goto out; | ||
| 1813 | } | ||
| 1814 | |||
| 1810 | switch (mvm->scan_status) { | 1815 | switch (mvm->scan_status) { |
| 1811 | case IWL_MVM_SCAN_OS: | 1816 | case IWL_MVM_SCAN_OS: |
| 1812 | IWL_DEBUG_SCAN(mvm, "Stopping previous scan for sched_scan\n"); | 1817 | IWL_DEBUG_SCAN(mvm, "Stopping previous scan for sched_scan\n"); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index d564233a65da..84c75a1b267e 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
| @@ -1003,6 +1003,9 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif) | |||
| 1003 | return mvmvif->low_latency; | 1003 | return mvmvif->low_latency; |
| 1004 | } | 1004 | } |
| 1005 | 1005 | ||
| 1006 | /* Assoc status */ | ||
| 1007 | bool iwl_mvm_is_associated(struct iwl_mvm *mvm); | ||
| 1008 | |||
| 1006 | /* Thermal management and CT-kill */ | 1009 | /* Thermal management and CT-kill */ |
| 1007 | void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); | 1010 | void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); |
| 1008 | void iwl_mvm_tt_handler(struct iwl_mvm *mvm); | 1011 | void iwl_mvm_tt_handler(struct iwl_mvm *mvm); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c index 9f52c5b3f0ec..e1c838899363 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rs.c +++ b/drivers/net/wireless/iwlwifi/mvm/rs.c | |||
| @@ -1010,7 +1010,7 @@ static void rs_tx_status(void *mvm_r, struct ieee80211_supported_band *sband, | |||
| 1010 | return; | 1010 | return; |
| 1011 | } | 1011 | } |
| 1012 | 1012 | ||
| 1013 | #ifdef CPTCFG_MAC80211_DEBUGFS | 1013 | #ifdef CONFIG_MAC80211_DEBUGFS |
| 1014 | /* Disable last tx check if we are debugging with fixed rate */ | 1014 | /* Disable last tx check if we are debugging with fixed rate */ |
| 1015 | if (lq_sta->dbg_fixed_rate) { | 1015 | if (lq_sta->dbg_fixed_rate) { |
| 1016 | IWL_DEBUG_RATE(mvm, "Fixed rate. avoid rate scaling\n"); | 1016 | IWL_DEBUG_RATE(mvm, "Fixed rate. avoid rate scaling\n"); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c index c91dc8498852..cba88a379fc8 100644 --- a/drivers/net/wireless/iwlwifi/mvm/scan.c +++ b/drivers/net/wireless/iwlwifi/mvm/scan.c | |||
| @@ -277,51 +277,22 @@ static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm, | |||
| 277 | IEEE80211_IFACE_ITER_NORMAL, | 277 | IEEE80211_IFACE_ITER_NORMAL, |
| 278 | iwl_mvm_scan_condition_iterator, | 278 | iwl_mvm_scan_condition_iterator, |
| 279 | &global_bound); | 279 | &global_bound); |
| 280 | /* | ||
| 281 | * Under low latency traffic passive scan is fragmented meaning | ||
| 282 | * that dwell on a particular channel will be fragmented. Each fragment | ||
| 283 | * dwell time is 20ms and fragments period is 105ms. Skipping to next | ||
| 284 | * channel will be delayed by the same period - 105ms. So suspend_time | ||
| 285 | * parameter describing both fragments and channels skipping periods is | ||
| 286 | * set to 105ms. This value is chosen so that overall passive scan | ||
| 287 | * duration will not be too long. Max_out_time in this case is set to | ||
| 288 | * 70ms, so for active scanning operating channel will be left for 70ms | ||
| 289 | * while for passive still for 20ms (fragment dwell). | ||
| 290 | */ | ||
| 291 | if (global_bound) { | ||
| 292 | if (!iwl_mvm_low_latency(mvm)) { | ||
| 293 | params->suspend_time = ieee80211_tu_to_usec(100); | ||
| 294 | params->max_out_time = ieee80211_tu_to_usec(600); | ||
| 295 | } else { | ||
| 296 | params->suspend_time = ieee80211_tu_to_usec(105); | ||
| 297 | /* P2P doesn't support fragmented passive scan, so | ||
| 298 | * configure max_out_time to be at least longest dwell | ||
| 299 | * time for passive scan. | ||
| 300 | */ | ||
| 301 | if (vif->type == NL80211_IFTYPE_STATION && !vif->p2p) { | ||
| 302 | params->max_out_time = ieee80211_tu_to_usec(70); | ||
| 303 | params->passive_fragmented = true; | ||
| 304 | } else { | ||
| 305 | u32 passive_dwell; | ||
| 306 | 280 | ||
| 307 | /* | 281 | if (!global_bound) |
| 308 | * Use band G so that passive channel dwell time | 282 | goto not_bound; |
| 309 | * will be assigned with maximum value. | 283 | |
| 310 | */ | 284 | params->suspend_time = 100; |
| 311 | band = IEEE80211_BAND_2GHZ; | 285 | params->max_out_time = 600; |
| 312 | passive_dwell = iwl_mvm_get_passive_dwell(band); | 286 | |
| 313 | params->max_out_time = | 287 | if (iwl_mvm_low_latency(mvm)) { |
| 314 | ieee80211_tu_to_usec(passive_dwell); | 288 | params->suspend_time = 250; |
| 315 | } | 289 | params->max_out_time = 250; |
| 316 | } | ||
| 317 | } | 290 | } |
| 318 | 291 | ||
| 292 | not_bound: | ||
| 293 | |||
| 319 | for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { | 294 | for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { |
| 320 | if (params->passive_fragmented) | 295 | params->dwell[band].passive = iwl_mvm_get_passive_dwell(band); |
| 321 | params->dwell[band].passive = 20; | ||
| 322 | else | ||
| 323 | params->dwell[band].passive = | ||
| 324 | iwl_mvm_get_passive_dwell(band); | ||
| 325 | params->dwell[band].active = iwl_mvm_get_active_dwell(band, | 296 | params->dwell[band].active = iwl_mvm_get_active_dwell(band, |
| 326 | n_ssids); | 297 | n_ssids); |
| 327 | } | 298 | } |
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c index d619851745a1..6fdbef9696d8 100644 --- a/drivers/net/wireless/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/iwlwifi/mvm/utils.c | |||
| @@ -644,3 +644,22 @@ bool iwl_mvm_low_latency(struct iwl_mvm *mvm) | |||
| 644 | 644 | ||
| 645 | return result; | 645 | return result; |
| 646 | } | 646 | } |
| 647 | |||
| 648 | static void iwl_mvm_assoc_iter(void *_data, u8 *mac, struct ieee80211_vif *vif) | ||
| 649 | { | ||
| 650 | bool *assoc = _data; | ||
| 651 | |||
| 652 | if (vif->bss_conf.assoc) | ||
| 653 | *assoc = true; | ||
| 654 | } | ||
| 655 | |||
| 656 | bool iwl_mvm_is_associated(struct iwl_mvm *mvm) | ||
| 657 | { | ||
| 658 | bool assoc = false; | ||
| 659 | |||
| 660 | ieee80211_iterate_active_interfaces_atomic( | ||
| 661 | mvm->hw, IEEE80211_IFACE_ITER_NORMAL, | ||
| 662 | iwl_mvm_assoc_iter, &assoc); | ||
| 663 | |||
| 664 | return assoc; | ||
| 665 | } | ||
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index dcfd6d866d09..2365553f1ef7 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
| @@ -1749,6 +1749,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
| 1749 | * PCI Tx retries from interfering with C3 CPU state */ | 1749 | * PCI Tx retries from interfering with C3 CPU state */ |
| 1750 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); | 1750 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); |
| 1751 | 1751 | ||
| 1752 | trans->dev = &pdev->dev; | ||
| 1753 | trans_pcie->pci_dev = pdev; | ||
| 1754 | iwl_disable_interrupts(trans); | ||
| 1755 | |||
| 1752 | err = pci_enable_msi(pdev); | 1756 | err = pci_enable_msi(pdev); |
| 1753 | if (err) { | 1757 | if (err) { |
| 1754 | dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err); | 1758 | dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err); |
| @@ -1760,8 +1764,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
| 1760 | } | 1764 | } |
| 1761 | } | 1765 | } |
| 1762 | 1766 | ||
| 1763 | trans->dev = &pdev->dev; | ||
| 1764 | trans_pcie->pci_dev = pdev; | ||
| 1765 | trans->hw_rev = iwl_read32(trans, CSR_HW_REV); | 1767 | trans->hw_rev = iwl_read32(trans, CSR_HW_REV); |
| 1766 | trans->hw_id = (pdev->device << 16) + pdev->subsystem_device; | 1768 | trans->hw_id = (pdev->device << 16) + pdev->subsystem_device; |
| 1767 | snprintf(trans->hw_id_str, sizeof(trans->hw_id_str), | 1769 | snprintf(trans->hw_id_str, sizeof(trans->hw_id_str), |
| @@ -1787,8 +1789,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
| 1787 | goto out_pci_disable_msi; | 1789 | goto out_pci_disable_msi; |
| 1788 | } | 1790 | } |
| 1789 | 1791 | ||
| 1790 | trans_pcie->inta_mask = CSR_INI_SET_MASK; | ||
| 1791 | |||
| 1792 | if (iwl_pcie_alloc_ict(trans)) | 1792 | if (iwl_pcie_alloc_ict(trans)) |
| 1793 | goto out_free_cmd_pool; | 1793 | goto out_free_cmd_pool; |
| 1794 | 1794 | ||
| @@ -1800,6 +1800,8 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
| 1800 | goto out_free_ict; | 1800 | goto out_free_ict; |
| 1801 | } | 1801 | } |
| 1802 | 1802 | ||
| 1803 | trans_pcie->inta_mask = CSR_INI_SET_MASK; | ||
| 1804 | |||
| 1803 | return trans; | 1805 | return trans; |
| 1804 | 1806 | ||
| 1805 | out_free_ict: | 1807 | out_free_ict: |
