|
@@ -53,7 +53,6 @@ static const struct ath6kl_hw hw_list[] = {
|
|
|
.fw = AR6003_HW_2_0_FIRMWARE_FILE,
|
|
|
.tcmd = AR6003_HW_2_0_TCMD_FIRMWARE_FILE,
|
|
|
.patch = AR6003_HW_2_0_PATCH_FILE,
|
|
|
- .api2 = ATH6KL_FW_API2_FILE,
|
|
|
},
|
|
|
|
|
|
.fw_board = AR6003_HW_2_0_BOARD_DATA_FILE,
|
|
@@ -75,7 +74,6 @@ static const struct ath6kl_hw hw_list[] = {
|
|
|
.fw = AR6003_HW_2_1_1_FIRMWARE_FILE,
|
|
|
.tcmd = AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE,
|
|
|
.patch = AR6003_HW_2_1_1_PATCH_FILE,
|
|
|
- .api2 = ATH6KL_FW_API2_FILE,
|
|
|
},
|
|
|
|
|
|
.fw_board = AR6003_HW_2_1_1_BOARD_DATA_FILE,
|
|
@@ -95,7 +93,6 @@ static const struct ath6kl_hw hw_list[] = {
|
|
|
.fw = {
|
|
|
.dir = AR6004_HW_1_0_FW_DIR,
|
|
|
.fw = AR6004_HW_1_0_FIRMWARE_FILE,
|
|
|
- .api2 = ATH6KL_FW_API2_FILE,
|
|
|
},
|
|
|
|
|
|
.fw_board = AR6004_HW_1_0_BOARD_DATA_FILE,
|
|
@@ -115,7 +112,6 @@ static const struct ath6kl_hw hw_list[] = {
|
|
|
.fw = {
|
|
|
.dir = AR6004_HW_1_1_FW_DIR,
|
|
|
.fw = AR6004_HW_1_1_FIRMWARE_FILE,
|
|
|
- .api2 = ATH6KL_FW_API2_FILE,
|
|
|
},
|
|
|
|
|
|
.fw_board = AR6004_HW_1_1_BOARD_DATA_FILE,
|
|
@@ -841,7 +837,7 @@ static int ath6kl_fetch_fw_api1(struct ath6kl *ar)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
|
|
|
+static int ath6kl_fetch_fw_apin(struct ath6kl *ar, const char *name)
|
|
|
{
|
|
|
size_t magic_len, len, ie_len;
|
|
|
const struct firmware *fw;
|
|
@@ -851,11 +847,7 @@ static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
|
|
|
int ret, ie_id, i, index, bit;
|
|
|
__le32 *val;
|
|
|
|
|
|
- if (ar->hw.fw.api2 == NULL)
|
|
|
- return -EOPNOTSUPP;
|
|
|
-
|
|
|
- snprintf(filename, sizeof(filename), "%s/%s",
|
|
|
- ar->hw.fw.dir, ar->hw.fw.api2);
|
|
|
+ snprintf(filename, sizeof(filename), "%s/%s", ar->hw.fw.dir, name);
|
|
|
|
|
|
ret = request_firmware(&fw, filename, ar->dev);
|
|
|
if (ret)
|
|
@@ -1025,17 +1017,26 @@ static int ath6kl_fetch_firmwares(struct ath6kl *ar)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- ret = ath6kl_fetch_fw_api2(ar);
|
|
|
+ ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API3_FILE);
|
|
|
if (ret == 0) {
|
|
|
- ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api 2\n");
|
|
|
- return 0;
|
|
|
+ ar->fw_api = 3;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API2_FILE);
|
|
|
+ if (ret == 0) {
|
|
|
+ ar->fw_api = 2;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
ret = ath6kl_fetch_fw_api1(ar);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api 1\n");
|
|
|
+ ar->fw_api = 1;
|
|
|
+
|
|
|
+out:
|
|
|
+ ath6kl_dbg(ATH6KL_DBG_BOOT, "using fw api %d\n", ar->fw_api);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1488,10 +1489,11 @@ int ath6kl_init_hw_start(struct ath6kl *ar)
|
|
|
|
|
|
|
|
|
if (test_and_clear_bit(FIRST_BOOT, &ar->flag)) {
|
|
|
- ath6kl_info("%s %s fw %s%s\n",
|
|
|
+ ath6kl_info("%s %s fw %s api %d%s\n",
|
|
|
ar->hw.name,
|
|
|
ath6kl_init_get_hif_name(ar->hif_type),
|
|
|
ar->wiphy->fw_version,
|
|
|
+ ar->fw_api,
|
|
|
test_bit(TESTMODE, &ar->flag) ? " testmode" : "");
|
|
|
}
|
|
|
|