|
@@ -69,6 +69,7 @@
|
|
|
#include <linux/vmalloc.h>
|
|
|
|
|
|
#include "iwl-drv.h"
|
|
|
+#include "iwl-csr.h"
|
|
|
#include "iwl-debug.h"
|
|
|
#include "iwl-trans.h"
|
|
|
#include "iwl-op-mode.h"
|
|
@@ -244,6 +245,23 @@ static int iwl_request_firmware(struct iwl_drv *drv, bool first)
|
|
|
snprintf(drv->firmware_name, sizeof(drv->firmware_name), "%s%s.ucode",
|
|
|
name_pre, tag);
|
|
|
|
|
|
+ /*
|
|
|
+ * Starting 8000B - FW name format has changed. This overwrites the
|
|
|
+ * previous name and uses the new format.
|
|
|
+ */
|
|
|
+ if (drv->trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
|
|
|
+ char rev_step[2] = {
|
|
|
+ 'A' + CSR_HW_REV_STEP(drv->trans->hw_rev), 0
|
|
|
+ };
|
|
|
+
|
|
|
+ /* A-step doesn't have an indication */
|
|
|
+ if (CSR_HW_REV_STEP(drv->trans->hw_rev) == SILICON_A_STEP)
|
|
|
+ rev_step[0] = 0;
|
|
|
+
|
|
|
+ snprintf(drv->firmware_name, sizeof(drv->firmware_name),
|
|
|
+ "%s%s-%s.ucode", name_pre, rev_step, tag);
|
|
|
+ }
|
|
|
+
|
|
|
IWL_DEBUG_INFO(drv, "attempting to load firmware %s'%s'\n",
|
|
|
(drv->fw_index == UCODE_EXPERIMENTAL_INDEX)
|
|
|
? "EXPERIMENTAL " : "",
|