Commit c699404d authored by Kalle Valo's avatar Kalle Valo
Browse files

Merge tag 'iwlwifi-for-kalle-2016-02-15' of...

Merge tag 'iwlwifi-for-kalle-2016-02-15' of https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes

These are a few fixes for the current cycle.
3 out of the 5 patches fix a bugzilla.

* fix a race that users reported when we try to load the firmware
  and the hardware rfkill interrupt triggers at the same time.
* Luca fixes a very visible bug in scheduled scan: our firmware
  doesn't support scheduled scan with no profile configured and
  the supplicant sometimes requests such scheduled scans.
* build system fix
* firmware name update for 8265
* typo fix in return value
parents fb724ed5 20aa99bb
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -53,7 +53,6 @@ config IWLWIFI_LEDS


config IWLDVM
config IWLDVM
	tristate "Intel Wireless WiFi DVM Firmware support"
	tristate "Intel Wireless WiFi DVM Firmware support"
	depends on m
	help
	help
	  This is the driver that supports the DVM firmware. The list
	  This is the driver that supports the DVM firmware. The list
	  of the devices that use this firmware is available here:
	  of the devices that use this firmware is available here:
+33 −9
Original line number Original line Diff line number Diff line
@@ -7,6 +7,7 @@
 *
 *
 * Copyright(c) 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2014 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2014 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2016 Intel Deutschland GmbH
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
 * it under the terms of version 2 of the GNU General Public License as
@@ -70,12 +71,15 @@


/* Highest firmware API version supported */
/* Highest firmware API version supported */
#define IWL8000_UCODE_API_MAX	20
#define IWL8000_UCODE_API_MAX	20
#define IWL8265_UCODE_API_MAX	20


/* Oldest version we won't warn about */
/* Oldest version we won't warn about */
#define IWL8000_UCODE_API_OK	13
#define IWL8000_UCODE_API_OK	13
#define IWL8265_UCODE_API_OK	20


/* Lowest firmware API version supported */
/* Lowest firmware API version supported */
#define IWL8000_UCODE_API_MIN	13
#define IWL8000_UCODE_API_MIN	13
#define IWL8265_UCODE_API_MIN	20


/* NVM versions */
/* NVM versions */
#define IWL8000_NVM_VERSION		0x0a1d
#define IWL8000_NVM_VERSION		0x0a1d
@@ -93,6 +97,10 @@
#define IWL8000_MODULE_FIRMWARE(api) \
#define IWL8000_MODULE_FIRMWARE(api) \
	IWL8000_FW_PRE "-" __stringify(api) ".ucode"
	IWL8000_FW_PRE "-" __stringify(api) ".ucode"


#define IWL8265_FW_PRE "iwlwifi-8265-"
#define IWL8265_MODULE_FIRMWARE(api) \
	IWL8265_FW_PRE __stringify(api) ".ucode"

#define NVM_HW_SECTION_NUM_FAMILY_8000		10
#define NVM_HW_SECTION_NUM_FAMILY_8000		10
#define DEFAULT_NVM_FILE_FAMILY_8000B		"nvmData-8000B"
#define DEFAULT_NVM_FILE_FAMILY_8000B		"nvmData-8000B"
#define DEFAULT_NVM_FILE_FAMILY_8000C		"nvmData-8000C"
#define DEFAULT_NVM_FILE_FAMILY_8000C		"nvmData-8000C"
@@ -144,10 +152,7 @@ static const struct iwl_tt_params iwl8000_tt_params = {
	.support_tx_backoff = true,
	.support_tx_backoff = true,
};
};


#define IWL_DEVICE_8000							\
#define IWL_DEVICE_8000_COMMON						\
	.ucode_api_max = IWL8000_UCODE_API_MAX,				\
	.ucode_api_ok = IWL8000_UCODE_API_OK,				\
	.ucode_api_min = IWL8000_UCODE_API_MIN,				\
	.device_family = IWL_DEVICE_FAMILY_8000,			\
	.device_family = IWL_DEVICE_FAMILY_8000,			\
	.max_inst_size = IWL60_RTC_INST_SIZE,				\
	.max_inst_size = IWL60_RTC_INST_SIZE,				\
	.max_data_size = IWL60_RTC_DATA_SIZE,				\
	.max_data_size = IWL60_RTC_DATA_SIZE,				\
@@ -167,10 +172,28 @@ static const struct iwl_tt_params iwl8000_tt_params = {
	.thermal_params = &iwl8000_tt_params,				\
	.thermal_params = &iwl8000_tt_params,				\
	.apmg_not_supported = true
	.apmg_not_supported = true


#define IWL_DEVICE_8000							\
	IWL_DEVICE_8000_COMMON,						\
	.ucode_api_max = IWL8000_UCODE_API_MAX,				\
	.ucode_api_ok = IWL8000_UCODE_API_OK,				\
	.ucode_api_min = IWL8000_UCODE_API_MIN				\

#define IWL_DEVICE_8260							\
	IWL_DEVICE_8000_COMMON,						\
	.ucode_api_max = IWL8000_UCODE_API_MAX,				\
	.ucode_api_ok = IWL8000_UCODE_API_OK,				\
	.ucode_api_min = IWL8000_UCODE_API_MIN				\

#define IWL_DEVICE_8265							\
	IWL_DEVICE_8000_COMMON,						\
	.ucode_api_max = IWL8265_UCODE_API_MAX,				\
	.ucode_api_ok = IWL8265_UCODE_API_OK,				\
	.ucode_api_min = IWL8265_UCODE_API_MIN				\

const struct iwl_cfg iwl8260_2n_cfg = {
const struct iwl_cfg iwl8260_2n_cfg = {
	.name = "Intel(R) Dual Band Wireless N 8260",
	.name = "Intel(R) Dual Band Wireless N 8260",
	.fw_name_pre = IWL8000_FW_PRE,
	.fw_name_pre = IWL8000_FW_PRE,
	IWL_DEVICE_8000,
	IWL_DEVICE_8260,
	.ht_params = &iwl8000_ht_params,
	.ht_params = &iwl8000_ht_params,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
@@ -179,7 +202,7 @@ const struct iwl_cfg iwl8260_2n_cfg = {
const struct iwl_cfg iwl8260_2ac_cfg = {
const struct iwl_cfg iwl8260_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 8260",
	.name = "Intel(R) Dual Band Wireless AC 8260",
	.fw_name_pre = IWL8000_FW_PRE,
	.fw_name_pre = IWL8000_FW_PRE,
	IWL_DEVICE_8000,
	IWL_DEVICE_8260,
	.ht_params = &iwl8000_ht_params,
	.ht_params = &iwl8000_ht_params,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
@@ -188,8 +211,8 @@ const struct iwl_cfg iwl8260_2ac_cfg = {


const struct iwl_cfg iwl8265_2ac_cfg = {
const struct iwl_cfg iwl8265_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 8265",
	.name = "Intel(R) Dual Band Wireless AC 8265",
	.fw_name_pre = IWL8000_FW_PRE,
	.fw_name_pre = IWL8265_FW_PRE,
	IWL_DEVICE_8000,
	IWL_DEVICE_8265,
	.ht_params = &iwl8000_ht_params,
	.ht_params = &iwl8000_ht_params,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
@@ -209,7 +232,7 @@ const struct iwl_cfg iwl4165_2ac_cfg = {
const struct iwl_cfg iwl8260_2ac_sdio_cfg = {
const struct iwl_cfg iwl8260_2ac_sdio_cfg = {
	.name = "Intel(R) Dual Band Wireless-AC 8260",
	.name = "Intel(R) Dual Band Wireless-AC 8260",
	.fw_name_pre = IWL8000_FW_PRE,
	.fw_name_pre = IWL8000_FW_PRE,
	IWL_DEVICE_8000,
	IWL_DEVICE_8260,
	.ht_params = &iwl8000_ht_params,
	.ht_params = &iwl8000_ht_params,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_ver = IWL8000_NVM_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
	.nvm_calib_ver = IWL8000_TX_POWER_VERSION,
@@ -236,3 +259,4 @@ const struct iwl_cfg iwl4165_2ac_sdio_cfg = {
};
};


MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_OK));
MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_OK));
MODULE_FIRMWARE(IWL8265_MODULE_FIRMWARE(IWL8265_UCODE_API_OK));
+4 −2
Original line number Original line Diff line number Diff line
@@ -243,8 +243,10 @@ static int iwl_request_firmware(struct iwl_drv *drv, bool first)
	if (drv->trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
	if (drv->trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
		char rev_step = 'A' + CSR_HW_REV_STEP(drv->trans->hw_rev);
		char rev_step = 'A' + CSR_HW_REV_STEP(drv->trans->hw_rev);


		snprintf(drv->firmware_name, sizeof(drv->firmware_name),
		if (rev_step != 'A')
			 "%s%c-%s.ucode", name_pre, rev_step, tag);
			snprintf(drv->firmware_name,
				 sizeof(drv->firmware_name), "%s%c-%s.ucode",
				 name_pre, rev_step, tag);
	}
	}


	IWL_DEBUG_INFO(drv, "attempting to load firmware %s'%s'\n",
	IWL_DEBUG_INFO(drv, "attempting to load firmware %s'%s'\n",
+4 −0
Original line number Original line Diff line number Diff line
@@ -1298,6 +1298,10 @@ int iwl_mvm_sched_scan_start(struct iwl_mvm *mvm,
		return -EBUSY;
		return -EBUSY;
	}
	}


	/* we don't support "match all" in the firmware */
	if (!req->n_match_sets)
		return -EOPNOTSUPP;

	ret = iwl_mvm_check_running_scans(mvm, type);
	ret = iwl_mvm_check_running_scans(mvm, type);
	if (ret)
	if (ret)
		return ret;
		return ret;
+9 −0
Original line number Original line Diff line number Diff line
@@ -490,6 +490,15 @@ static inline void iwl_enable_interrupts(struct iwl_trans *trans)
	iwl_write32(trans, CSR_INT_MASK, trans_pcie->inta_mask);
	iwl_write32(trans, CSR_INT_MASK, trans_pcie->inta_mask);
}
}


static inline void iwl_enable_fw_load_int(struct iwl_trans *trans)
{
	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);

	IWL_DEBUG_ISR(trans, "Enabling FW load interrupt\n");
	trans_pcie->inta_mask = CSR_INT_BIT_FH_TX;
	iwl_write32(trans, CSR_INT_MASK, trans_pcie->inta_mask);
}

static inline void iwl_enable_rfkill_int(struct iwl_trans *trans)
static inline void iwl_enable_rfkill_int(struct iwl_trans *trans)
{
{
	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
Loading