aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-05-13 06:51:53 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-05-13 06:51:53 -0400
commit90c456fc795485cfcbede23a6598feeac7e6c284 (patch)
tree497f668041fd161186d225ef1d0d68a35fffe66f
parent41f6fc10d38150f83d0706305c69e1e696cc3b33 (diff)
parent1c4abec0baf25ffb92a28cc99d4231feeaa4d3f3 (diff)
Merge remote-tracking branch 'iwlwifi-fixes/master' into HEAD
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c9
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c19
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c10
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 */
1034bool iwl_mvm_is_associated(struct iwl_mvm *mvm);
1035
1033/* Thermal management and CT-kill */ 1036/* Thermal management and CT-kill */
1034void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff); 1037void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff);
1035void iwl_mvm_tt_handler(struct iwl_mvm *mvm); 1038void 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
694static 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
702bool 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
1910out_free_ict: 1912out_free_ict: