diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-05-13 06:51:53 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-05-13 06:51:53 -0400 |
commit | 90c456fc795485cfcbede23a6598feeac7e6c284 (patch) | |
tree | 497f668041fd161186d225ef1d0d68a35fffe66f | |
parent | 41f6fc10d38150f83d0706305c69e1e696cc3b33 (diff) | |
parent | 1c4abec0baf25ffb92a28cc99d4231feeaa4d3f3 (diff) |
Merge remote-tracking branch 'iwlwifi-fixes/master' into HEAD
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/utils.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 10 |
4 files changed, 35 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 72f73a3abc71..cc6ddc45b416 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -1020,7 +1020,7 @@ static void iwl_mvm_mc_iface_iterator(void *_data, u8 *mac, | |||
1020 | memcpy(cmd->bssid, vif->bss_conf.bssid, ETH_ALEN); | 1020 | memcpy(cmd->bssid, vif->bss_conf.bssid, ETH_ALEN); |
1021 | len = roundup(sizeof(*cmd) + cmd->count * ETH_ALEN, 4); | 1021 | len = roundup(sizeof(*cmd) + cmd->count * ETH_ALEN, 4); |
1022 | 1022 | ||
1023 | ret = iwl_mvm_send_cmd_pdu(mvm, MCAST_FILTER_CMD, CMD_SYNC, len, cmd); | 1023 | ret = iwl_mvm_send_cmd_pdu(mvm, MCAST_FILTER_CMD, CMD_ASYNC, len, cmd); |
1024 | if (ret) | 1024 | if (ret) |
1025 | IWL_ERR(mvm, "mcast filter cmd error. ret=%d\n", ret); | 1025 | IWL_ERR(mvm, "mcast filter cmd error. ret=%d\n", ret); |
1026 | } | 1026 | } |
@@ -1036,7 +1036,7 @@ static void iwl_mvm_recalc_multicast(struct iwl_mvm *mvm) | |||
1036 | if (WARN_ON_ONCE(!mvm->mcast_filter_cmd)) | 1036 | if (WARN_ON_ONCE(!mvm->mcast_filter_cmd)) |
1037 | return; | 1037 | return; |
1038 | 1038 | ||
1039 | ieee80211_iterate_active_interfaces( | 1039 | ieee80211_iterate_active_interfaces_atomic( |
1040 | mvm->hw, IEEE80211_IFACE_ITER_NORMAL, | 1040 | mvm->hw, IEEE80211_IFACE_ITER_NORMAL, |
1041 | iwl_mvm_mc_iface_iterator, &iter_data); | 1041 | iwl_mvm_mc_iface_iterator, &iter_data); |
1042 | } | 1042 | } |
@@ -1832,6 +1832,11 @@ static int iwl_mvm_mac_sched_scan_start(struct ieee80211_hw *hw, | |||
1832 | 1832 | ||
1833 | mutex_lock(&mvm->mutex); | 1833 | mutex_lock(&mvm->mutex); |
1834 | 1834 | ||
1835 | if (iwl_mvm_is_associated(mvm)) { | ||
1836 | ret = -EBUSY; | ||
1837 | goto out; | ||
1838 | } | ||
1839 | |||
1835 | switch (mvm->scan_status) { | 1840 | switch (mvm->scan_status) { |
1836 | case IWL_MVM_SCAN_OS: | 1841 | case IWL_MVM_SCAN_OS: |
1837 | IWL_DEBUG_SCAN(mvm, "Stopping previous scan for sched_scan\n"); | 1842 | 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 78f3328066dd..a7d27fb37044 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
@@ -1030,6 +1030,9 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif) | |||
1030 | return mvmvif->low_latency; | 1030 | return mvmvif->low_latency; |
1031 | } | 1031 | } |
1032 | 1032 | ||
1033 | /* Assoc status */ | ||
1034 | bool iwl_mvm_is_associated(struct iwl_mvm *mvm); | ||
1035 | |||
1033 | /* Thermal management and CT-kill */ | 1036 | /* Thermal management and CT-kill */ |
1034 | void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); | 1037 | void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); |
1035 | void iwl_mvm_tt_handler(struct iwl_mvm *mvm); | 1038 | void iwl_mvm_tt_handler(struct iwl_mvm *mvm); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c index 4c3577e773a5..9cd0309216df 100644 --- a/drivers/net/wireless/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/iwlwifi/mvm/utils.c | |||
@@ -690,3 +690,22 @@ bool iwl_mvm_low_latency(struct iwl_mvm *mvm) | |||
690 | 690 | ||
691 | return result; | 691 | return result; |
692 | } | 692 | } |
693 | |||
694 | static void iwl_mvm_assoc_iter(void *_data, u8 *mac, struct ieee80211_vif *vif) | ||
695 | { | ||
696 | bool *assoc = _data; | ||
697 | |||
698 | if (vif->bss_conf.assoc) | ||
699 | *assoc = true; | ||
700 | } | ||
701 | |||
702 | bool iwl_mvm_is_associated(struct iwl_mvm *mvm) | ||
703 | { | ||
704 | bool assoc = false; | ||
705 | |||
706 | ieee80211_iterate_active_interfaces_atomic( | ||
707 | mvm->hw, IEEE80211_IFACE_ITER_NORMAL, | ||
708 | iwl_mvm_assoc_iter, &assoc); | ||
709 | |||
710 | return assoc; | ||
711 | } | ||
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index f8ebd477bbfc..788085bc65d7 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
@@ -1854,6 +1854,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
1854 | * PCI Tx retries from interfering with C3 CPU state */ | 1854 | * PCI Tx retries from interfering with C3 CPU state */ |
1855 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); | 1855 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); |
1856 | 1856 | ||
1857 | trans->dev = &pdev->dev; | ||
1858 | trans_pcie->pci_dev = pdev; | ||
1859 | iwl_disable_interrupts(trans); | ||
1860 | |||
1857 | err = pci_enable_msi(pdev); | 1861 | err = pci_enable_msi(pdev); |
1858 | if (err) { | 1862 | if (err) { |
1859 | dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err); | 1863 | dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err); |
@@ -1865,8 +1869,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
1865 | } | 1869 | } |
1866 | } | 1870 | } |
1867 | 1871 | ||
1868 | trans->dev = &pdev->dev; | ||
1869 | trans_pcie->pci_dev = pdev; | ||
1870 | trans->hw_rev = iwl_read32(trans, CSR_HW_REV); | 1872 | trans->hw_rev = iwl_read32(trans, CSR_HW_REV); |
1871 | trans->hw_id = (pdev->device << 16) + pdev->subsystem_device; | 1873 | trans->hw_id = (pdev->device << 16) + pdev->subsystem_device; |
1872 | snprintf(trans->hw_id_str, sizeof(trans->hw_id_str), | 1874 | snprintf(trans->hw_id_str, sizeof(trans->hw_id_str), |
@@ -1892,8 +1894,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
1892 | goto out_pci_disable_msi; | 1894 | goto out_pci_disable_msi; |
1893 | } | 1895 | } |
1894 | 1896 | ||
1895 | trans_pcie->inta_mask = CSR_INI_SET_MASK; | ||
1896 | |||
1897 | if (iwl_pcie_alloc_ict(trans)) | 1897 | if (iwl_pcie_alloc_ict(trans)) |
1898 | goto out_free_cmd_pool; | 1898 | goto out_free_cmd_pool; |
1899 | 1899 | ||
@@ -1905,6 +1905,8 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, | |||
1905 | goto out_free_ict; | 1905 | goto out_free_ict; |
1906 | } | 1906 | } |
1907 | 1907 | ||
1908 | trans_pcie->inta_mask = CSR_INI_SET_MASK; | ||
1909 | |||
1908 | return trans; | 1910 | return trans; |
1909 | 1911 | ||
1910 | out_free_ict: | 1912 | out_free_ict: |