Merge remote-tracking branch 'iwlwifi-fixes/master' into iwlwifi-next
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 20 Jan 2015 07:23:27 +0000 (09:23 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 22 Jan 2015 15:55:12 +0000 (17:55 +0200)
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Conflicts:
drivers/net/wireless/iwlwifi/iwl-fw-file.h
drivers/net/wireless/iwlwifi/mvm/scan.c

1  2 
drivers/net/wireless/iwlwifi/iwl-7000.c
drivers/net/wireless/iwlwifi/iwl-8000.c
drivers/net/wireless/iwlwifi/iwl-drv.c
drivers/net/wireless/iwlwifi/iwl-fw-file.h
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/tx.c
drivers/net/wireless/iwlwifi/mvm/utils.c
drivers/net/wireless/iwlwifi/pcie/drv.c
drivers/net/wireless/iwlwifi/pcie/trans.c

@@@ -244,19 -246,19 +244,21 @@@ enum iwl_ucode_tlv_flag 
   * @IWL_UCODE_TLV_API_BASIC_DWELL: use only basic dwell time in scan command,
   *    regardless of the band or the number of the probes. FW will calculate
   *    the actual dwell time.
 + * @IWL_UCODE_TLV_API_SCD_CFG: This firmware can configure the scheduler
 + *    through the dedicated host command.
+  * @IWL_UCODE_TLV_API_SINGLE_SCAN_EBS: EBS is supported for single scans too.
 + * @IWL_UCODE_TLV_API_ASYNC_DTM: Async temperature notifications are supported.
   */
  enum iwl_ucode_tlv_api {
 -      IWL_UCODE_TLV_API_WOWLAN_CONFIG_TID     = BIT(0),
 -      IWL_UCODE_TLV_CAPA_EXTENDED_BEACON      = BIT(1),
        IWL_UCODE_TLV_API_BT_COEX_SPLIT         = BIT(3),
 -      IWL_UCODE_TLV_API_CSA_FLOW              = BIT(4),
        IWL_UCODE_TLV_API_DISABLE_STA_TX        = BIT(5),
        IWL_UCODE_TLV_API_LMAC_SCAN             = BIT(6),
        IWL_UCODE_TLV_API_SF_NO_DUMMY_NOTIF     = BIT(7),
        IWL_UCODE_TLV_API_FRAGMENTED_SCAN       = BIT(8),
        IWL_UCODE_TLV_API_BASIC_DWELL           = BIT(13),
 +      IWL_UCODE_TLV_API_SCD_CFG               = BIT(15),
+       IWL_UCODE_TLV_API_SINGLE_SCAN_EBS       = BIT(16),
 +      IWL_UCODE_TLV_API_ASYNC_DTM             = BIT(17),
  };
  
  /**
Simple merge
@@@ -661,10 -662,10 +661,10 @@@ bool iwl_mvm_rx_diversity_allowed(struc
  
        lockdep_assert_held(&mvm->mutex);
  
 -      if (num_of_ant(mvm->fw->valid_rx_ant) == 1)
 +      if (num_of_ant(iwl_mvm_get_valid_rx_ant(mvm)) == 1)
                return false;
  
-       if (!mvm->cfg->rx_with_siso_diversity)
+       if (mvm->cfg->rx_with_siso_diversity)
                return false;
  
        ieee80211_iterate_active_interfaces_atomic(
@@@ -1032,10 -1010,18 +1032,18 @@@ static void iwl_trans_pcie_stop_device(
                      CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
  
        /* Stop the device, and put it in low power state */
 -      iwl_pcie_apm_stop(trans);
 +      iwl_pcie_apm_stop(trans, false);
  
-       /* Upon stop, the APM issues an interrupt if HW RF kill is set.
-        * Clean again the interrupt here
+       /* stop and reset the on-board processor */
+       iwl_write32(trans, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
+       udelay(20);
+       /*
+        * Upon stop, the APM issues an interrupt if HW RF kill is set.
+        * This is a bug in certain verions of the hardware.
+        * Certain devices also keep sending HW RF kill interrupt all
+        * the time, unless the interrupt is ACKed even if the interrupt
+        * should be masked. Re-ACK all the interrupts here.
         */
        spin_lock(&trans_pcie->irq_lock);
        iwl_disable_interrupts(trans);