* [PATCH 01/10] ath6kl: remove hw version related parameter defines
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
@ 2011-11-14 17:30 ` Kalle Valo
2011-11-14 17:30 ` [PATCH 02/10] ath6kl: move hw version related to parameters to struct Kalle Valo
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:30 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Having separate defines, in a different file, makes it difficult to read
the actual values. As we are just setting named fields in a struct
the defines don't make any sense anymore.
There are no functional changes, only moving of constants.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/init.c | 26 +++++++++++++-------------
drivers/net/wireless/ath/ath6kl/target.h | 14 --------------
2 files changed, 13 insertions(+), 27 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index e96ce07..3286b1b 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -1337,32 +1337,32 @@ static int ath6kl_init_hw_params(struct ath6kl *ar)
{
switch (ar->version.target_ver) {
case AR6003_REV2_VERSION:
- ar->hw.dataset_patch_addr = AR6003_REV2_DATASET_PATCH_ADDRESS;
- ar->hw.app_load_addr = AR6003_REV2_APP_LOAD_ADDRESS;
- ar->hw.board_ext_data_addr = AR6003_REV2_BOARD_EXT_DATA_ADDRESS;
- ar->hw.reserved_ram_size = AR6003_REV2_RAM_RESERVE_SIZE;
+ ar->hw.dataset_patch_addr = 0x57e884;
+ ar->hw.app_load_addr = 0x543180;
+ ar->hw.board_ext_data_addr = 0x57e500;
+ ar->hw.reserved_ram_size = 6912;
/* hw2.0 needs override address hardcoded */
ar->hw.app_start_override_addr = 0x944C00;
break;
case AR6003_REV3_VERSION:
- ar->hw.dataset_patch_addr = AR6003_REV3_DATASET_PATCH_ADDRESS;
+ ar->hw.dataset_patch_addr = 0x57ff74;
ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = AR6003_REV3_BOARD_EXT_DATA_ADDRESS;
- ar->hw.reserved_ram_size = AR6003_REV3_RAM_RESERVE_SIZE;
+ ar->hw.board_ext_data_addr = 0x542330;
+ ar->hw.reserved_ram_size = 512;
break;
case AR6004_REV1_VERSION:
- ar->hw.dataset_patch_addr = AR6003_REV2_DATASET_PATCH_ADDRESS;
+ ar->hw.dataset_patch_addr = 0x57e884;
ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = AR6004_REV1_BOARD_EXT_DATA_ADDRESS;
- ar->hw.reserved_ram_size = AR6004_REV1_RAM_RESERVE_SIZE;
+ ar->hw.board_ext_data_addr = 0x437000;
+ ar->hw.reserved_ram_size = 19456;
break;
case AR6004_REV2_VERSION:
- ar->hw.dataset_patch_addr = AR6003_REV2_DATASET_PATCH_ADDRESS;
+ ar->hw.dataset_patch_addr = 0x57e884;
ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = AR6004_REV1_BOARD_EXT_DATA_ADDRESS;
- ar->hw.reserved_ram_size = AR6004_REV2_RAM_RESERVE_SIZE;
+ ar->hw.board_ext_data_addr = 0x437000;
+ ar->hw.reserved_ram_size = 11264;
break;
default:
ath6kl_err("Unsupported hardware version: 0x%x\n",
diff --git a/drivers/net/wireless/ath/ath6kl/target.h b/drivers/net/wireless/ath/ath6kl/target.h
index 35478d4..ece0f13 100644
--- a/drivers/net/wireless/ath/ath6kl/target.h
+++ b/drivers/net/wireless/ath/ath6kl/target.h
@@ -334,22 +334,8 @@ struct host_interest {
(((target_type) == TARGET_TYPE_AR6003) ? AR6003_VTOP(vaddr) : \
(((target_type) == TARGET_TYPE_AR6004) ? AR6004_VTOP(vaddr) : 0))
-#define AR6003_REV2_APP_LOAD_ADDRESS 0x543180
-#define AR6003_REV2_BOARD_EXT_DATA_ADDRESS 0x57E500
-#define AR6003_REV2_DATASET_PATCH_ADDRESS 0x57e884
-#define AR6003_REV2_RAM_RESERVE_SIZE 6912
-
-#define AR6003_REV3_APP_LOAD_ADDRESS 0x545000
-#define AR6003_REV3_BOARD_EXT_DATA_ADDRESS 0x542330
-#define AR6003_REV3_DATASET_PATCH_ADDRESS 0x57FF74
-#define AR6003_REV3_RAM_RESERVE_SIZE 512
-
#define AR6004_REV1_BOARD_DATA_ADDRESS 0x433900
-#define AR6004_REV1_BOARD_EXT_DATA_ADDRESS 0x437000
-#define AR6004_REV1_RAM_RESERVE_SIZE 19456
-
#define AR6004_REV2_BOARD_DATA_ADDRESS 0x43d400
-#define AR6004_REV2_RAM_RESERVE_SIZE 11264
#define ATH6KL_FWLOG_PAYLOAD_SIZE 1500
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 02/10] ath6kl: move hw version related to parameters to struct
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
2011-11-14 17:30 ` [PATCH 01/10] ath6kl: remove hw version related parameter defines Kalle Valo
@ 2011-11-14 17:30 ` Kalle Valo
2011-11-14 17:30 ` [PATCH 03/10] ath6kl: add board address to struct ath6kl_hw Kalle Valo
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:30 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
It's easier to handle the values when they are defined in a struct.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 3 +
drivers/net/wireless/ath/ath6kl/init.c | 73 ++++++++++++++++++++------------
2 files changed, 47 insertions(+), 29 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 03e378d..f5a8334 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -541,7 +541,8 @@ struct ath6kl {
size_t rx_report_len;
} tm;
- struct {
+ struct ath6kl_hw {
+ u32 id;
u32 dataset_patch_addr;
u32 app_load_addr;
u32 app_start_override_addr;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 3286b1b..77444d1 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -33,6 +33,40 @@ module_param(debug_mask, uint, 0644);
module_param(testmode, uint, 0644);
module_param(suspend_cutpower, bool, 0444);
+static const struct ath6kl_hw hw_list[] = {
+ {
+ .id = AR6003_REV2_VERSION,
+ .dataset_patch_addr = 0x57e884,
+ .app_load_addr = 0x543180,
+ .board_ext_data_addr = 0x57e500,
+ .reserved_ram_size = 6912,
+
+ /* hw2.0 needs override address hardcoded */
+ .app_start_override_addr = 0x944C00,
+ },
+ {
+ .id = AR6003_REV3_VERSION,
+ .dataset_patch_addr = 0x57ff74,
+ .app_load_addr = 0x1234,
+ .board_ext_data_addr = 0x542330,
+ .reserved_ram_size = 512,
+ },
+ {
+ .id = AR6004_REV1_VERSION,
+ .dataset_patch_addr = 0x57e884,
+ .app_load_addr = 0x1234,
+ .board_ext_data_addr = 0x437000,
+ .reserved_ram_size = 19456,
+ },
+ {
+ .id = AR6004_REV2_VERSION,
+ .dataset_patch_addr = 0x57e884,
+ .app_load_addr = 0x1234,
+ .board_ext_data_addr = 0x437000,
+ .reserved_ram_size = 11264,
+ },
+};
+
/*
* Include definitions here that can be used to tune the WLAN module
* behavior. Different customers can tune the behavior as per their needs,
@@ -1335,41 +1369,24 @@ static int ath6kl_init_upload(struct ath6kl *ar)
static int ath6kl_init_hw_params(struct ath6kl *ar)
{
- switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- ar->hw.dataset_patch_addr = 0x57e884;
- ar->hw.app_load_addr = 0x543180;
- ar->hw.board_ext_data_addr = 0x57e500;
- ar->hw.reserved_ram_size = 6912;
+ const struct ath6kl_hw *hw;
+ int i;
- /* hw2.0 needs override address hardcoded */
- ar->hw.app_start_override_addr = 0x944C00;
+ for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
+ hw = &hw_list[i];
- break;
- case AR6003_REV3_VERSION:
- ar->hw.dataset_patch_addr = 0x57ff74;
- ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = 0x542330;
- ar->hw.reserved_ram_size = 512;
- break;
- case AR6004_REV1_VERSION:
- ar->hw.dataset_patch_addr = 0x57e884;
- ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = 0x437000;
- ar->hw.reserved_ram_size = 19456;
- break;
- case AR6004_REV2_VERSION:
- ar->hw.dataset_patch_addr = 0x57e884;
- ar->hw.app_load_addr = 0x1234;
- ar->hw.board_ext_data_addr = 0x437000;
- ar->hw.reserved_ram_size = 11264;
- break;
- default:
+ if (hw->id == ar->version.target_ver)
+ break;
+ }
+
+ if (i == ARRAY_SIZE(hw_list)) {
ath6kl_err("Unsupported hardware version: 0x%x\n",
ar->version.target_ver);
return -EINVAL;
}
+ ar->hw = *hw;
+
ath6kl_dbg(ATH6KL_DBG_BOOT,
"target_ver 0x%x target_type 0x%x dataset_patch 0x%x app_load_addr 0x%x\n",
ar->version.target_ver, ar->target_type,
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 03/10] ath6kl: add board address to struct ath6kl_hw
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
2011-11-14 17:30 ` [PATCH 01/10] ath6kl: remove hw version related parameter defines Kalle Valo
2011-11-14 17:30 ` [PATCH 02/10] ath6kl: move hw version related to parameters to struct Kalle Valo
@ 2011-11-14 17:30 ` Kalle Valo
2011-11-14 17:30 ` [PATCH 04/10] ath6kl: add firmware IE for board data address Kalle Valo
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:30 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
This is to make it configurable by firmware IEs. Also determine if we need
to write or read the board address to the chip by checking if board address
is set or not.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 1 +
drivers/net/wireless/ath/ath6kl/init.c | 10 ++++------
drivers/net/wireless/ath/ath6kl/target.h | 3 ---
3 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index f5a8334..83167be 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -548,6 +548,7 @@ struct ath6kl {
u32 app_start_override_addr;
u32 board_ext_data_addr;
u32 reserved_ram_size;
+ u32 board_addr;
} hw;
u16 conf_flags;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 77444d1..bed468d 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -57,6 +57,7 @@ static const struct ath6kl_hw hw_list[] = {
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x437000,
.reserved_ram_size = 19456,
+ .board_addr = 0x433900,
},
{
.id = AR6004_REV2_VERSION,
@@ -64,6 +65,7 @@ static const struct ath6kl_hw hw_list[] = {
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x437000,
.reserved_ram_size = 11264,
+ .board_addr = 0x43d400,
},
};
@@ -1031,12 +1033,8 @@ static int ath6kl_upload_board_file(struct ath6kl *ar)
* For AR6004, host determine Target RAM address for
* writing board data.
*/
- if (ar->target_type == TARGET_TYPE_AR6004) {
- if (ar->version.target_ver == AR6004_REV1_VERSION)
- board_address = AR6004_REV1_BOARD_DATA_ADDRESS;
- else
- board_address = AR6004_REV2_BOARD_DATA_ADDRESS;
-
+ if (ar->hw.board_addr != 0) {
+ board_address = ar->hw.board_addr;
ath6kl_bmi_write(ar,
ath6kl_get_hi_item_addr(ar,
HI_ITEM(hi_board_data)),
diff --git a/drivers/net/wireless/ath/ath6kl/target.h b/drivers/net/wireless/ath/ath6kl/target.h
index ece0f13..108a723 100644
--- a/drivers/net/wireless/ath/ath6kl/target.h
+++ b/drivers/net/wireless/ath/ath6kl/target.h
@@ -334,9 +334,6 @@ struct host_interest {
(((target_type) == TARGET_TYPE_AR6003) ? AR6003_VTOP(vaddr) : \
(((target_type) == TARGET_TYPE_AR6004) ? AR6004_VTOP(vaddr) : 0))
-#define AR6004_REV1_BOARD_DATA_ADDRESS 0x433900
-#define AR6004_REV2_BOARD_DATA_ADDRESS 0x43d400
-
#define ATH6KL_FWLOG_PAYLOAD_SIZE 1500
struct ath6kl_dbglog_buf {
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 04/10] ath6kl: add firmware IE for board data address
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (2 preceding siblings ...)
2011-11-14 17:30 ` [PATCH 03/10] ath6kl: add board address to struct ath6kl_hw Kalle Valo
@ 2011-11-14 17:30 ` Kalle Valo
2011-11-14 17:30 ` [PATCH 05/10] ath6kl: add name field to struct ath6kl_hw Kalle Valo
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:30 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Board data address can change between firmwares so we need to read that
from the firmware image.
Also fix debug log for the patch address to print the address in hex.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 1 +
drivers/net/wireless/ath/ath6kl/init.c | 13 ++++++++++++-
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 83167be..6227f11 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -70,6 +70,7 @@ enum ath6kl_fw_ie_type {
ATH6KL_FW_IE_RESERVED_RAM_SIZE = 5,
ATH6KL_FW_IE_CAPABILITIES = 6,
ATH6KL_FW_IE_PATCH_ADDR = 7,
+ ATH6KL_FW_IE_BOARD_ADDR = 8,
};
enum ath6kl_fw_capability {
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index bed468d..0b0ae5e 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -976,9 +976,20 @@ static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
ar->hw.dataset_patch_addr = le32_to_cpup(val);
ath6kl_dbg(ATH6KL_DBG_BOOT,
- "found patch address ie 0x%d\n",
+ "found patch address ie 0x%x\n",
ar->hw.dataset_patch_addr);
break;
+ case ATH6KL_FW_IE_BOARD_ADDR:
+ if (ie_len != sizeof(*val))
+ break;
+
+ val = (__le32 *) data;
+ ar->hw.board_addr = le32_to_cpup(val);
+
+ ath6kl_dbg(ATH6KL_DBG_BOOT,
+ "found board address ie 0x%x\n",
+ ar->hw.board_addr);
+ break;
default:
ath6kl_dbg(ATH6KL_DBG_BOOT, "Unknown fw ie: %u\n",
le32_to_cpup(&hdr->id));
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 05/10] ath6kl: add name field to struct ath6kl_hw
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (3 preceding siblings ...)
2011-11-14 17:30 ` [PATCH 04/10] ath6kl: add firmware IE for board data address Kalle Valo
@ 2011-11-14 17:30 ` Kalle Valo
2011-11-14 17:31 ` [PATCH 06/10] ath6kl: use hardware version names consistently Kalle Valo
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:30 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
To make it easier to print name for each hardware type. Also move the hw
info print to ath6kl_init_hw_start() which is more logical place for it.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 1 +
drivers/net/wireless/ath/ath6kl/init.c | 25 +++++++++++++++++++++++++
drivers/net/wireless/ath/ath6kl/main.c | 21 ---------------------
3 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 6227f11..b034001 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -544,6 +544,7 @@ struct ath6kl {
struct ath6kl_hw {
u32 id;
+ const char *name;
u32 dataset_patch_addr;
u32 app_load_addr;
u32 app_start_override_addr;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 0b0ae5e..acfe79a 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -36,6 +36,7 @@ module_param(suspend_cutpower, bool, 0444);
static const struct ath6kl_hw hw_list[] = {
{
.id = AR6003_REV2_VERSION,
+ .name = "ar6003 hw 2.0",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x543180,
.board_ext_data_addr = 0x57e500,
@@ -46,6 +47,7 @@ static const struct ath6kl_hw hw_list[] = {
},
{
.id = AR6003_REV3_VERSION,
+ .name = "ar6003 hw 2.1.1",
.dataset_patch_addr = 0x57ff74,
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x542330,
@@ -53,6 +55,7 @@ static const struct ath6kl_hw hw_list[] = {
},
{
.id = AR6004_REV1_VERSION,
+ .name = "ar6004 hw 1.0",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x437000,
@@ -61,6 +64,7 @@ static const struct ath6kl_hw hw_list[] = {
},
{
.id = AR6004_REV2_VERSION,
+ .name = "ar6004 hw 1.1",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x437000,
@@ -1408,6 +1412,18 @@ static int ath6kl_init_hw_params(struct ath6kl *ar)
return 0;
}
+static const char *ath6kl_init_get_hif_name(enum ath6kl_hif_type type)
+{
+ switch (type) {
+ case ATH6KL_HIF_TYPE_SDIO:
+ return "sdio";
+ case ATH6KL_HIF_TYPE_USB:
+ return "usb";
+ }
+
+ return NULL;
+}
+
int ath6kl_init_hw_start(struct ath6kl *ar)
{
long timeleft;
@@ -1468,6 +1484,15 @@ int ath6kl_init_hw_start(struct ath6kl *ar)
ath6kl_dbg(ATH6KL_DBG_BOOT, "firmware booted\n");
+
+ if (test_and_clear_bit(FIRST_BOOT, &ar->flag)) {
+ ath6kl_info("%s %s fw %s%s\n",
+ ar->hw.name,
+ ath6kl_init_get_hif_name(ar->hif_type),
+ ar->wiphy->fw_version,
+ test_bit(TESTMODE, &ar->flag) ? " testmode" : "");
+ }
+
if (ar->version.abi_ver != ATH6KL_ABI_VERSION) {
ath6kl_err("abi version mismatch: host(0x%x), target(0x%x)\n",
ATH6KL_ABI_VERSION, ar->version.abi_ver);
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index ea84894..d9b4ba4 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -525,20 +525,6 @@ void ath6kl_disconnect(struct ath6kl_vif *vif)
/* WMI Event handlers */
-static const char *get_hw_id_string(u32 id)
-{
- switch (id) {
- case AR6003_REV1_VERSION:
- return "1.0";
- case AR6003_REV2_VERSION:
- return "2.0";
- case AR6003_REV3_VERSION:
- return "2.1.1";
- default:
- return "unknown";
- }
-}
-
void ath6kl_ready_event(void *devt, u8 *datap, u32 sw_ver, u32 abi_ver)
{
struct ath6kl *ar = devt;
@@ -561,13 +547,6 @@ void ath6kl_ready_event(void *devt, u8 *datap, u32 sw_ver, u32 abi_ver)
/* indicate to the waiting thread that the ready event was received */
set_bit(WMI_READY, &ar->flag);
wake_up(&ar->event_wq);
-
- if (test_and_clear_bit(FIRST_BOOT, &ar->flag)) {
- ath6kl_info("hw %s fw %s%s\n",
- get_hw_id_string(ar->wiphy->hw_version),
- ar->wiphy->fw_version,
- test_bit(TESTMODE, &ar->flag) ? " testmode" : "");
- }
}
void ath6kl_scan_complete_evt(struct ath6kl_vif *vif, int status)
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 06/10] ath6kl: use hardware version names consistently
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (4 preceding siblings ...)
2011-11-14 17:30 ` [PATCH 05/10] ath6kl: add name field to struct ath6kl_hw Kalle Valo
@ 2011-11-14 17:31 ` Kalle Valo
2011-11-14 17:31 ` [PATCH 07/10] ath6kl: add ar6004 firmwares to sdio module Kalle Valo
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Part of ath6kl uses "REV3" style of naming hardware versions and elsewhere
"hw 2.1.1" is used instead for the same version. This is confusing, use
the latter term everywhere.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 60 +++++++++++-----------
drivers/net/wireless/ath/ath6kl/init.c | 88 ++++++++++++++++----------------
drivers/net/wireless/ath/ath6kl/sdio.c | 20 ++++---
drivers/net/wireless/ath/ath6kl/usb.c | 12 ++--
4 files changed, 91 insertions(+), 89 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index b034001..b14ad11 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -89,44 +89,46 @@ struct ath6kl_fw_ie {
};
/* AR6003 1.0 definitions */
-#define AR6003_REV1_VERSION 0x300002ba
+#define AR6003_HW_1_0_VERSION 0x300002ba
/* AR6003 2.0 definitions */
-#define AR6003_REV2_VERSION 0x30000384
-#define AR6003_REV2_PATCH_DOWNLOAD_ADDRESS 0x57e910
-#define AR6003_REV2_OTP_FILE "ath6k/AR6003/hw2.0/otp.bin.z77"
-#define AR6003_REV2_FIRMWARE_FILE "ath6k/AR6003/hw2.0/athwlan.bin.z77"
-#define AR6003_REV2_TCMD_FIRMWARE_FILE "ath6k/AR6003/hw2.0/athtcmd_ram.bin"
-#define AR6003_REV2_PATCH_FILE "ath6k/AR6003/hw2.0/data.patch.bin"
-#define AR6003_REV2_FIRMWARE_2_FILE "ath6k/AR6003/hw2.0/fw-2.bin"
-#define AR6003_REV2_BOARD_DATA_FILE "ath6k/AR6003/hw2.0/bdata.bin"
-#define AR6003_REV2_DEFAULT_BOARD_DATA_FILE "ath6k/AR6003/hw2.0/bdata.SD31.bin"
+#define AR6003_HW_2_0_VERSION 0x30000384
+#define AR6003_HW_2_0_PATCH_DOWNLOAD_ADDRESS 0x57e910
+#define AR6003_HW_2_0_OTP_FILE "ath6k/AR6003/hw2.0/otp.bin.z77"
+#define AR6003_HW_2_0_FIRMWARE_FILE "ath6k/AR6003/hw2.0/athwlan.bin.z77"
+#define AR6003_HW_2_0_TCMD_FIRMWARE_FILE "ath6k/AR6003/hw2.0/athtcmd_ram.bin"
+#define AR6003_HW_2_0_PATCH_FILE "ath6k/AR6003/hw2.0/data.patch.bin"
+#define AR6003_HW_2_0_FIRMWARE_2_FILE "ath6k/AR6003/hw2.0/fw-2.bin"
+#define AR6003_HW_2_0_BOARD_DATA_FILE "ath6k/AR6003/hw2.0/bdata.bin"
+#define AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE \
+ "ath6k/AR6003/hw2.0/bdata.SD31.bin"
/* AR6003 3.0 definitions */
-#define AR6003_REV3_VERSION 0x30000582
-#define AR6003_REV3_OTP_FILE "ath6k/AR6003/hw2.1.1/otp.bin"
-#define AR6003_REV3_FIRMWARE_FILE "ath6k/AR6003/hw2.1.1/athwlan.bin"
-#define AR6003_REV3_TCMD_FIRMWARE_FILE "ath6k/AR6003/hw2.1.1/athtcmd_ram.bin"
-#define AR6003_REV3_PATCH_FILE "ath6k/AR6003/hw2.1.1/data.patch.bin"
-#define AR6003_REV3_FIRMWARE_2_FILE "ath6k/AR6003/hw2.1.1/fw-2.bin"
-#define AR6003_REV3_BOARD_DATA_FILE "ath6k/AR6003/hw2.1.1/bdata.bin"
-#define AR6003_REV3_DEFAULT_BOARD_DATA_FILE \
- "ath6k/AR6003/hw2.1.1/bdata.SD31.bin"
+#define AR6003_HW_2_1_1_VERSION 0x30000582
+#define AR6003_HW_2_1_1_OTP_FILE "ath6k/AR6003/hw2.1.1/otp.bin"
+#define AR6003_HW_2_1_1_FIRMWARE_FILE "ath6k/AR6003/hw2.1.1/athwlan.bin"
+#define AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE \
+ "ath6k/AR6003/hw2.1.1/athtcmd_ram.bin"
+#define AR6003_HW_2_1_1_PATCH_FILE "ath6k/AR6003/hw2.1.1/data.patch.bin"
+#define AR6003_HW_2_1_1_FIRMWARE_2_FILE "ath6k/AR6003/hw2.1.1/fw-2.bin"
+#define AR6003_HW_2_1_1_BOARD_DATA_FILE "ath6k/AR6003/hw2.1.1/bdata.bin"
+#define AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE \
+ "ath6k/AR6003/hw2.1.1/bdata.SD31.bin"
/* AR6004 1.0 definitions */
-#define AR6004_REV1_VERSION 0x30000623
-#define AR6004_REV1_FIRMWARE_2_FILE "ath6k/AR6004/hw1.0/fw-2.bin"
-#define AR6004_REV1_FIRMWARE_FILE "ath6k/AR6004/hw1.0/fw.ram.bin"
-#define AR6004_REV1_BOARD_DATA_FILE "ath6k/AR6004/hw1.0/bdata.bin"
-#define AR6004_REV1_DEFAULT_BOARD_DATA_FILE \
+#define AR6004_HW_1_0_VERSION 0x30000623
+#define AR6004_HW_1_0_FIRMWARE_2_FILE "ath6k/AR6004/hw1.0/fw-2.bin"
+#define AR6004_HW_1_0_FIRMWARE_FILE "ath6k/AR6004/hw1.0/fw.ram.bin"
+#define AR6004_HW_1_0_BOARD_DATA_FILE "ath6k/AR6004/hw1.0/bdata.bin"
+#define AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6004/hw1.0/bdata.DB132.bin"
/* AR6004 1.1 definitions */
-#define AR6004_REV2_VERSION 0x30000001
-#define AR6004_REV2_FIRMWARE_2_FILE "ath6k/AR6004/hw1.1/fw-2.bin"
-#define AR6004_REV2_FIRMWARE_FILE "ath6k/AR6004/hw1.1/fw.ram.bin"
-#define AR6004_REV2_BOARD_DATA_FILE "ath6k/AR6004/hw1.1/bdata.bin"
-#define AR6004_REV2_DEFAULT_BOARD_DATA_FILE \
+#define AR6004_HW_1_1_VERSION 0x30000001
+#define AR6004_HW_1_1_FIRMWARE_2_FILE "ath6k/AR6004/hw1.1/fw-2.bin"
+#define AR6004_HW_1_1_FIRMWARE_FILE "ath6k/AR6004/hw1.1/fw.ram.bin"
+#define AR6004_HW_1_1_BOARD_DATA_FILE "ath6k/AR6004/hw1.1/bdata.bin"
+#define AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6004/hw1.1/bdata.DB132.bin"
/* Per STA data, used in AP mode */
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index acfe79a..208e77e 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -35,7 +35,7 @@ module_param(suspend_cutpower, bool, 0444);
static const struct ath6kl_hw hw_list[] = {
{
- .id = AR6003_REV2_VERSION,
+ .id = AR6003_HW_2_0_VERSION,
.name = "ar6003 hw 2.0",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x543180,
@@ -46,7 +46,7 @@ static const struct ath6kl_hw hw_list[] = {
.app_start_override_addr = 0x944C00,
},
{
- .id = AR6003_REV3_VERSION,
+ .id = AR6003_HW_2_1_1_VERSION,
.name = "ar6003 hw 2.1.1",
.dataset_patch_addr = 0x57ff74,
.app_load_addr = 0x1234,
@@ -54,7 +54,7 @@ static const struct ath6kl_hw hw_list[] = {
.reserved_ram_size = 512,
},
{
- .id = AR6004_REV1_VERSION,
+ .id = AR6004_HW_1_0_VERSION,
.name = "ar6004 hw 1.0",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x1234,
@@ -63,7 +63,7 @@ static const struct ath6kl_hw hw_list[] = {
.board_addr = 0x433900,
},
{
- .id = AR6004_REV2_VERSION,
+ .id = AR6004_HW_1_1_VERSION,
.name = "ar6004 hw 1.1",
.dataset_patch_addr = 0x57e884,
.app_load_addr = 0x1234,
@@ -590,11 +590,11 @@ static int ath6kl_get_fw(struct ath6kl *ar, const char *filename,
static const char *get_target_ver_dir(const struct ath6kl *ar)
{
switch (ar->version.target_ver) {
- case AR6003_REV1_VERSION:
+ case AR6003_HW_1_0_VERSION:
return "ath6k/AR6003/hw1.0";
- case AR6003_REV2_VERSION:
+ case AR6003_HW_2_0_VERSION:
return "ath6k/AR6003/hw2.0";
- case AR6003_REV3_VERSION:
+ case AR6003_HW_2_1_1_VERSION:
return "ath6k/AR6003/hw2.1.1";
}
ath6kl_warn("%s: unsupported target version 0x%x.\n", __func__,
@@ -653,14 +653,14 @@ static int ath6kl_fetch_board_file(struct ath6kl *ar)
return 0;
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_BOARD_DATA_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_BOARD_DATA_FILE;
break;
- case AR6004_REV1_VERSION:
- filename = AR6004_REV1_BOARD_DATA_FILE;
+ case AR6004_HW_1_0_VERSION:
+ filename = AR6004_HW_1_0_BOARD_DATA_FILE;
break;
default:
- filename = AR6003_REV3_BOARD_DATA_FILE;
+ filename = AR6003_HW_2_1_1_BOARD_DATA_FILE;
break;
}
@@ -681,14 +681,14 @@ static int ath6kl_fetch_board_file(struct ath6kl *ar)
filename, ret);
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_DEFAULT_BOARD_DATA_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE;
break;
- case AR6004_REV1_VERSION:
- filename = AR6004_REV1_DEFAULT_BOARD_DATA_FILE;
+ case AR6004_HW_1_0_VERSION:
+ filename = AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE;
break;
default:
- filename = AR6003_REV3_DEFAULT_BOARD_DATA_FILE;
+ filename = AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE;
break;
}
@@ -715,15 +715,15 @@ static int ath6kl_fetch_otp_file(struct ath6kl *ar)
return 0;
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_OTP_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_OTP_FILE;
break;
- case AR6004_REV1_VERSION:
+ case AR6004_HW_1_0_VERSION:
ath6kl_dbg(ATH6KL_DBG_TRC, "AR6004 doesn't need OTP file\n");
return 0;
break;
default:
- filename = AR6003_REV3_OTP_FILE;
+ filename = AR6003_HW_2_1_1_OTP_FILE;
break;
}
@@ -748,13 +748,13 @@ static int ath6kl_fetch_fw_file(struct ath6kl *ar)
if (testmode) {
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_TCMD_FIRMWARE_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_TCMD_FIRMWARE_FILE;
break;
- case AR6003_REV3_VERSION:
- filename = AR6003_REV3_TCMD_FIRMWARE_FILE;
+ case AR6003_HW_2_1_1_VERSION:
+ filename = AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE;
break;
- case AR6004_REV1_VERSION:
+ case AR6004_HW_1_0_VERSION:
ath6kl_warn("testmode not supported with ar6004\n");
return -EOPNOTSUPP;
default:
@@ -769,14 +769,14 @@ static int ath6kl_fetch_fw_file(struct ath6kl *ar)
}
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_FIRMWARE_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_FIRMWARE_FILE;
break;
- case AR6004_REV1_VERSION:
- filename = AR6004_REV1_FIRMWARE_FILE;
+ case AR6004_HW_1_0_VERSION:
+ filename = AR6004_HW_1_0_FIRMWARE_FILE;
break;
default:
- filename = AR6003_REV3_FIRMWARE_FILE;
+ filename = AR6003_HW_2_1_1_FIRMWARE_FILE;
break;
}
@@ -797,15 +797,15 @@ static int ath6kl_fetch_patch_file(struct ath6kl *ar)
int ret;
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_PATCH_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_PATCH_FILE;
break;
- case AR6004_REV1_VERSION:
+ case AR6004_HW_1_0_VERSION:
/* FIXME: implement for AR6004 */
return 0;
break;
default:
- filename = AR6003_REV3_PATCH_FILE;
+ filename = AR6003_HW_2_1_1_PATCH_FILE;
break;
}
@@ -852,17 +852,17 @@ static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
__le32 *val;
switch (ar->version.target_ver) {
- case AR6003_REV2_VERSION:
- filename = AR6003_REV2_FIRMWARE_2_FILE;
+ case AR6003_HW_2_0_VERSION:
+ filename = AR6003_HW_2_0_FIRMWARE_2_FILE;
break;
- case AR6003_REV3_VERSION:
- filename = AR6003_REV3_FIRMWARE_2_FILE;
+ case AR6003_HW_2_1_1_VERSION:
+ filename = AR6003_HW_2_1_1_FIRMWARE_2_FILE;
break;
- case AR6004_REV1_VERSION:
- filename = AR6004_REV1_FIRMWARE_2_FILE;
+ case AR6004_HW_1_0_VERSION:
+ filename = AR6004_HW_1_0_FIRMWARE_2_FILE;
break;
- case AR6004_REV2_VERSION:
- filename = AR6004_REV2_FIRMWARE_2_FILE;
+ case AR6004_HW_1_1_VERSION:
+ filename = AR6004_HW_1_1_FIRMWARE_2_FILE;
break;
default:
return -EOPNOTSUPP;
@@ -1313,7 +1313,7 @@ static int ath6kl_init_upload(struct ath6kl *ar)
return status;
/* WAR to avoid SDIO CRC err */
- if (ar->version.target_ver == AR6003_REV2_VERSION) {
+ if (ar->version.target_ver == AR6003_HW_2_0_VERSION) {
ath6kl_err("temporary war to avoid sdio crc error\n");
param = 0x20;
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 1d097d0..1dab96a 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -1329,13 +1329,13 @@ MODULE_AUTHOR("Atheros Communications, Inc.");
MODULE_DESCRIPTION("Driver support for Atheros AR600x SDIO devices");
MODULE_LICENSE("Dual BSD/GPL");
-MODULE_FIRMWARE(AR6003_REV2_OTP_FILE);
-MODULE_FIRMWARE(AR6003_REV2_FIRMWARE_FILE);
-MODULE_FIRMWARE(AR6003_REV2_PATCH_FILE);
-MODULE_FIRMWARE(AR6003_REV2_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6003_REV2_DEFAULT_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6003_REV3_OTP_FILE);
-MODULE_FIRMWARE(AR6003_REV3_FIRMWARE_FILE);
-MODULE_FIRMWARE(AR6003_REV3_PATCH_FILE);
-MODULE_FIRMWARE(AR6003_REV3_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6003_REV3_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_0_OTP_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_0_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_0_PATCH_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_0_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_1_1_OTP_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_1_1_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_1_1_PATCH_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_1_1_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE);
diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
index b85ca3f..e3cf397 100644
--- a/drivers/net/wireless/ath/ath6kl/usb.c
+++ b/drivers/net/wireless/ath/ath6kl/usb.c
@@ -423,9 +423,9 @@ module_exit(ath6kl_usb_exit);
MODULE_AUTHOR("Atheros Communications, Inc.");
MODULE_DESCRIPTION("Driver support for Atheros AR600x USB devices");
MODULE_LICENSE("Dual BSD/GPL");
-MODULE_FIRMWARE(AR6004_REV1_FIRMWARE_FILE);
-MODULE_FIRMWARE(AR6004_REV1_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6004_REV1_DEFAULT_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6004_REV2_FIRMWARE_FILE);
-MODULE_FIRMWARE(AR6004_REV2_BOARD_DATA_FILE);
-MODULE_FIRMWARE(AR6004_REV2_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE);
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 07/10] ath6kl: add ar6004 firmwares to sdio module
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (5 preceding siblings ...)
2011-11-14 17:31 ` [PATCH 06/10] ath6kl: use hardware version names consistently Kalle Valo
@ 2011-11-14 17:31 ` Kalle Valo
2011-11-14 17:31 ` [PATCH 08/10] ath6kl: add firmware filename info to struct ath6kl_hw Kalle Valo
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
When adding ar6004 SDIO support I forgot to add corresponding
MODULE_FIRMWARE() definitions to sdio.c.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/sdio.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 1dab96a..c2010bf 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -1339,3 +1339,9 @@ MODULE_FIRMWARE(AR6003_HW_2_1_1_FIRMWARE_FILE);
MODULE_FIRMWARE(AR6003_HW_2_1_1_PATCH_FILE);
MODULE_FIRMWARE(AR6003_HW_2_1_1_BOARD_DATA_FILE);
MODULE_FIRMWARE(AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_FIRMWARE_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_BOARD_DATA_FILE);
+MODULE_FIRMWARE(AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE);
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 08/10] ath6kl: add firmware filename info to struct ath6kl_hw
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (6 preceding siblings ...)
2011-11-14 17:31 ` [PATCH 07/10] ath6kl: add ar6004 firmwares to sdio module Kalle Valo
@ 2011-11-14 17:31 ` Kalle Valo
2011-11-14 17:31 ` [PATCH 09/10] ath6kl: make maximum number of vifs runtime configurable Kalle Valo
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 8 ++
drivers/net/wireless/ath/ath6kl/init.c | 149 +++++++++++++-------------------
2 files changed, 67 insertions(+), 90 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index b14ad11..1697c00 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -553,6 +553,14 @@ struct ath6kl {
u32 board_ext_data_addr;
u32 reserved_ram_size;
u32 board_addr;
+
+ const char *fw_otp;
+ const char *fw;
+ const char *fw_tcmd;
+ const char *fw_patch;
+ const char *fw_api2;
+ const char *fw_board;
+ const char *fw_default_board;
} hw;
u16 conf_flags;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 208e77e..9d6e50d 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -44,6 +44,14 @@ static const struct ath6kl_hw hw_list[] = {
/* hw2.0 needs override address hardcoded */
.app_start_override_addr = 0x944C00,
+
+ .fw_otp = AR6003_HW_2_0_OTP_FILE,
+ .fw = AR6003_HW_2_0_FIRMWARE_FILE,
+ .fw_tcmd = AR6003_HW_2_0_TCMD_FIRMWARE_FILE,
+ .fw_patch = AR6003_HW_2_0_PATCH_FILE,
+ .fw_api2 = AR6003_HW_2_0_FIRMWARE_2_FILE,
+ .fw_board = AR6003_HW_2_0_BOARD_DATA_FILE,
+ .fw_default_board = AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE,
},
{
.id = AR6003_HW_2_1_1_VERSION,
@@ -52,6 +60,14 @@ static const struct ath6kl_hw hw_list[] = {
.app_load_addr = 0x1234,
.board_ext_data_addr = 0x542330,
.reserved_ram_size = 512,
+
+ .fw_otp = AR6003_HW_2_1_1_OTP_FILE,
+ .fw = AR6003_HW_2_1_1_FIRMWARE_FILE,
+ .fw_tcmd = AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE,
+ .fw_patch = AR6003_HW_2_1_1_PATCH_FILE,
+ .fw_api2 = AR6003_HW_2_1_1_FIRMWARE_2_FILE,
+ .fw_board = AR6003_HW_2_1_1_BOARD_DATA_FILE,
+ .fw_default_board = AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE,
},
{
.id = AR6004_HW_1_0_VERSION,
@@ -61,6 +77,11 @@ static const struct ath6kl_hw hw_list[] = {
.board_ext_data_addr = 0x437000,
.reserved_ram_size = 19456,
.board_addr = 0x433900,
+
+ .fw = AR6004_HW_1_0_FIRMWARE_FILE,
+ .fw_api2 = AR6004_HW_1_0_FIRMWARE_2_FILE,
+ .fw_board = AR6004_HW_1_0_BOARD_DATA_FILE,
+ .fw_default_board = AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE,
},
{
.id = AR6004_HW_1_1_VERSION,
@@ -70,6 +91,11 @@ static const struct ath6kl_hw hw_list[] = {
.board_ext_data_addr = 0x437000,
.reserved_ram_size = 11264,
.board_addr = 0x43d400,
+
+ .fw = AR6004_HW_1_1_FIRMWARE_FILE,
+ .fw_api2 = AR6004_HW_1_1_FIRMWARE_2_FILE,
+ .fw_board = AR6004_HW_1_1_BOARD_DATA_FILE,
+ .fw_default_board = AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE,
},
};
@@ -652,17 +678,10 @@ static int ath6kl_fetch_board_file(struct ath6kl *ar)
if (ar->fw_board != NULL)
return 0;
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_BOARD_DATA_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- filename = AR6004_HW_1_0_BOARD_DATA_FILE;
- break;
- default:
- filename = AR6003_HW_2_1_1_BOARD_DATA_FILE;
- break;
- }
+ if (WARN_ON(ar->hw.fw_board == NULL))
+ return -EINVAL;
+
+ filename = ar->hw.fw_board;
ret = ath6kl_get_fw(ar, filename, &ar->fw_board,
&ar->fw_board_len);
@@ -680,17 +699,7 @@ static int ath6kl_fetch_board_file(struct ath6kl *ar)
ath6kl_warn("Failed to get board file %s (%d), trying to find default board file.\n",
filename, ret);
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- filename = AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE;
- break;
- default:
- filename = AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE;
- break;
- }
+ filename = ar->hw.fw_default_board;
ret = ath6kl_get_fw(ar, filename, &ar->fw_board,
&ar->fw_board_len);
@@ -714,19 +723,14 @@ static int ath6kl_fetch_otp_file(struct ath6kl *ar)
if (ar->fw_otp != NULL)
return 0;
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_OTP_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- ath6kl_dbg(ATH6KL_DBG_TRC, "AR6004 doesn't need OTP file\n");
+ if (ar->hw.fw_otp == NULL) {
+ ath6kl_dbg(ATH6KL_DBG_BOOT,
+ "no OTP file configured for this hw\n");
return 0;
- break;
- default:
- filename = AR6003_HW_2_1_1_OTP_FILE;
- break;
}
+ filename = ar->hw.fw_otp;
+
ret = ath6kl_get_fw(ar, filename, &ar->fw_otp,
&ar->fw_otp_len);
if (ret) {
@@ -747,38 +751,22 @@ static int ath6kl_fetch_fw_file(struct ath6kl *ar)
return 0;
if (testmode) {
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_TCMD_FIRMWARE_FILE;
- break;
- case AR6003_HW_2_1_1_VERSION:
- filename = AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- ath6kl_warn("testmode not supported with ar6004\n");
+ if (ar->hw.fw_tcmd == NULL) {
+ ath6kl_warn("testmode not supported\n");
return -EOPNOTSUPP;
- default:
- ath6kl_warn("unknown target version: 0x%x\n",
- ar->version.target_ver);
- return -EINVAL;
}
+ filename = ar->hw.fw_tcmd;
+
set_bit(TESTMODE, &ar->flag);
goto get_fw;
}
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_FIRMWARE_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- filename = AR6004_HW_1_0_FIRMWARE_FILE;
- break;
- default:
- filename = AR6003_HW_2_1_1_FIRMWARE_FILE;
- break;
- }
+ if (WARN_ON(ar->hw.fw == NULL))
+ return -EINVAL;
+
+ filename = ar->hw.fw;
get_fw:
ret = ath6kl_get_fw(ar, filename, &ar->fw, &ar->fw_len);
@@ -796,27 +784,20 @@ static int ath6kl_fetch_patch_file(struct ath6kl *ar)
const char *filename;
int ret;
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_PATCH_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- /* FIXME: implement for AR6004 */
+ if (ar->fw_patch != NULL)
return 0;
- break;
- default:
- filename = AR6003_HW_2_1_1_PATCH_FILE;
- break;
- }
- if (ar->fw_patch == NULL) {
- ret = ath6kl_get_fw(ar, filename, &ar->fw_patch,
- &ar->fw_patch_len);
- if (ret) {
- ath6kl_err("Failed to get patch file %s: %d\n",
- filename, ret);
- return ret;
- }
+ if (ar->hw.fw_patch == NULL)
+ return 0;
+
+ filename = ar->hw.fw_patch;
+
+ ret = ath6kl_get_fw(ar, filename, &ar->fw_patch,
+ &ar->fw_patch_len);
+ if (ret) {
+ ath6kl_err("Failed to get patch file %s: %d\n",
+ filename, ret);
+ return ret;
}
return 0;
@@ -851,22 +832,10 @@ static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
int ret, ie_id, i, index, bit;
__le32 *val;
- switch (ar->version.target_ver) {
- case AR6003_HW_2_0_VERSION:
- filename = AR6003_HW_2_0_FIRMWARE_2_FILE;
- break;
- case AR6003_HW_2_1_1_VERSION:
- filename = AR6003_HW_2_1_1_FIRMWARE_2_FILE;
- break;
- case AR6004_HW_1_0_VERSION:
- filename = AR6004_HW_1_0_FIRMWARE_2_FILE;
- break;
- case AR6004_HW_1_1_VERSION:
- filename = AR6004_HW_1_1_FIRMWARE_2_FILE;
- break;
- default:
+ if (ar->hw.fw_api2 == NULL)
return -EOPNOTSUPP;
- }
+
+ filename = ar->hw.fw_api2;
ret = request_firmware(&fw, filename, ar->dev);
if (ret)
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 09/10] ath6kl: make maximum number of vifs runtime configurable
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (7 preceding siblings ...)
2011-11-14 17:31 ` [PATCH 08/10] ath6kl: add firmware filename info to struct ath6kl_hw Kalle Valo
@ 2011-11-14 17:31 ` Kalle Valo
2011-11-14 17:31 ` [PATCH 10/10] ath6kl: add firmware IE for maximum number of vifs Kalle Valo
2011-11-16 8:37 ` [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Needed when detecting how many vifs firmware supports.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 8 +++++---
drivers/net/wireless/ath/ath6kl/core.h | 7 ++++++-
drivers/net/wireless/ath/ath6kl/init.c | 10 +++++-----
drivers/net/wireless/ath/ath6kl/txrx.c | 2 +-
drivers/net/wireless/ath/ath6kl/wmi.c | 6 +++---
5 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 08708bd..27b3d40 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -359,7 +359,7 @@ static bool ath6kl_is_valid_iftype(struct ath6kl *ar, enum nl80211_iftype type,
if (type == NL80211_IFTYPE_STATION ||
type == NL80211_IFTYPE_AP || type == NL80211_IFTYPE_ADHOC) {
- for (i = 0; i < MAX_NUM_VIF; i++) {
+ for (i = 0; i < ar->vif_max; i++) {
if ((ar->avail_idx_map >> i) & BIT(0)) {
*if_idx = i;
return true;
@@ -369,7 +369,7 @@ static bool ath6kl_is_valid_iftype(struct ath6kl *ar, enum nl80211_iftype type,
if (type == NL80211_IFTYPE_P2P_CLIENT ||
type == NL80211_IFTYPE_P2P_GO) {
- for (i = ar->max_norm_iface; i < MAX_NUM_VIF; i++) {
+ for (i = ar->max_norm_iface; i < ar->vif_max; i++) {
if ((ar->avail_idx_map >> i) & BIT(0)) {
*if_idx = i;
return true;
@@ -1308,7 +1308,7 @@ static struct net_device *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
struct net_device *ndev;
u8 if_idx, nw_type;
- if (ar->num_vif == MAX_NUM_VIF) {
+ if (ar->num_vif == ar->vif_max) {
ath6kl_err("Reached maximum number of supported vif\n");
return ERR_PTR(-EINVAL);
}
@@ -2461,6 +2461,8 @@ struct ath6kl *ath6kl_core_alloc(struct device *dev)
ar->wiphy = wiphy;
ar->dev = dev;
+ ar->vif_max = 1;
+
if (multi_norm_if_support)
ar->max_norm_iface = 2;
else
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 1697c00..6fdaaf7 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -399,7 +399,11 @@ enum ath6kl_hif_type {
ATH6KL_HIF_TYPE_USB,
};
-#define MAX_NUM_VIF 1
+/*
+ * Driver's maximum limit, note that some firmwares support only one vif
+ * and the runtime (current) limit must be checked from ar->vif_max.
+ */
+#define ATH6KL_VIF_MAX 1
/* vif flags info */
enum ath6kl_vif_state {
@@ -498,6 +502,7 @@ struct ath6kl {
/* Lock to avoid race in vif_list entries among add/del/traverse */
spinlock_t list_lock;
u8 num_vif;
+ int vif_max;
u8 max_norm_iface;
u8 avail_idx_map;
spinlock_t lock;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 9d6e50d..0f72461 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -463,7 +463,7 @@ int ath6kl_configure_target(struct ath6kl *ar)
*/
fw_iftype = HI_OPTION_FW_MODE_BSS_STA;
- for (i = 0; i < MAX_NUM_VIF; i++)
+ for (i = 0; i < ar->vif_max; i++)
fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS);
/*
@@ -477,7 +477,7 @@ int ath6kl_configure_target(struct ath6kl *ar)
fw_submode |= HI_OPTION_FW_SUBMODE_NONE <<
(i * HI_OPTION_FW_SUBMODE_BITS);
- for (i = ar->max_norm_iface; i < MAX_NUM_VIF; i++)
+ for (i = ar->max_norm_iface; i < ar->vif_max; i++)
fw_submode |= HI_OPTION_FW_SUBMODE_P2PDEV <<
(i * HI_OPTION_FW_SUBMODE_BITS);
@@ -508,7 +508,7 @@ int ath6kl_configure_target(struct ath6kl *ar)
return -EIO;
}
- param |= (MAX_NUM_VIF << HI_OPTION_NUM_DEV_SHIFT);
+ param |= (ar->vif_max << HI_OPTION_NUM_DEV_SHIFT);
param |= fw_mode << HI_OPTION_FW_MODE_SHIFT;
param |= fw_submode << HI_OPTION_FW_SUBMODE_SHIFT;
@@ -1482,7 +1482,7 @@ int ath6kl_init_hw_start(struct ath6kl *ar)
if ((ath6kl_set_host_app_area(ar)) != 0)
ath6kl_err("unable to set the host app area\n");
- for (i = 0; i < MAX_NUM_VIF; i++) {
+ for (i = 0; i < ar->vif_max; i++) {
ret = ath6kl_target_config_wlan_params(ar, i);
if (ret)
goto err_htc_stop;
@@ -1592,7 +1592,7 @@ int ath6kl_core_init(struct ath6kl *ar)
goto err_node_cleanup;
}
- for (i = 0; i < MAX_NUM_VIF; i++)
+ for (i = 0; i < ar->vif_max; i++)
ar->avail_idx_map |= BIT(i);
rtnl_lock();
diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
index 0b45d45..506a303 100644
--- a/drivers/net/wireless/ath/ath6kl/txrx.c
+++ b/drivers/net/wireless/ath/ath6kl/txrx.c
@@ -541,7 +541,7 @@ void ath6kl_tx_complete(void *context, struct list_head *packet_queue)
int status;
enum htc_endpoint_id eid;
bool wake_event = false;
- bool flushing[MAX_NUM_VIF] = {false};
+ bool flushing[ATH6KL_VIF_MAX] = {false};
u8 if_idx;
struct ath6kl_vif *vif;
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index f1d53d0..aa1a252 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -85,7 +85,7 @@ struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx)
{
struct ath6kl_vif *vif, *found = NULL;
- if (WARN_ON(if_idx > (MAX_NUM_VIF - 1)))
+ if (WARN_ON(if_idx > (ar->vif_max - 1)))
return NULL;
/* FIXME: Locking */
@@ -187,7 +187,7 @@ int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
struct wmi_data_hdr *data_hdr;
int ret;
- if (WARN_ON(skb == NULL || (if_idx > MAX_NUM_VIF - 1)))
+ if (WARN_ON(skb == NULL || (if_idx > wmi->parent_dev->vif_max - 1)))
return -EINVAL;
if (tx_meta_info) {
@@ -1620,7 +1620,7 @@ int ath6kl_wmi_cmd_send(struct wmi *wmi, u8 if_idx, struct sk_buff *skb,
int ret;
u16 info1;
- if (WARN_ON(skb == NULL || (if_idx > (MAX_NUM_VIF - 1))))
+ if (WARN_ON(skb == NULL || (if_idx > (wmi->parent_dev->vif_max - 1))))
return -EINVAL;
ath6kl_dbg(ATH6KL_DBG_WMI, "wmi tx id %d len %d flag %d\n",
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 10/10] ath6kl: add firmware IE for maximum number of vifs
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (8 preceding siblings ...)
2011-11-14 17:31 ` [PATCH 09/10] ath6kl: make maximum number of vifs runtime configurable Kalle Valo
@ 2011-11-14 17:31 ` Kalle Valo
2011-11-16 8:37 ` [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-14 17:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
Not all firmwares support multiple vifs and we need to read the limit from
the firmware image.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/core.h | 3 ++-
drivers/net/wireless/ath/ath6kl/init.c | 11 +++++++++++
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 6fdaaf7..b185564 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -71,6 +71,7 @@ enum ath6kl_fw_ie_type {
ATH6KL_FW_IE_CAPABILITIES = 6,
ATH6KL_FW_IE_PATCH_ADDR = 7,
ATH6KL_FW_IE_BOARD_ADDR = 8,
+ ATH6KL_FW_IE_VIF_MAX = 9,
};
enum ath6kl_fw_capability {
@@ -502,7 +503,7 @@ struct ath6kl {
/* Lock to avoid race in vif_list entries among add/del/traverse */
spinlock_t list_lock;
u8 num_vif;
- int vif_max;
+ unsigned int vif_max;
u8 max_norm_iface;
u8 avail_idx_map;
spinlock_t lock;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 0f72461..6c4f6a9 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -963,6 +963,17 @@ static int ath6kl_fetch_fw_api2(struct ath6kl *ar)
"found board address ie 0x%x\n",
ar->hw.board_addr);
break;
+ case ATH6KL_FW_IE_VIF_MAX:
+ if (ie_len != sizeof(*val))
+ break;
+
+ val = (__le32 *) data;
+ ar->vif_max = min_t(unsigned int, le32_to_cpup(val),
+ ATH6KL_VIF_MAX);
+
+ ath6kl_dbg(ATH6KL_DBG_BOOT,
+ "found vif max ie %d\n", ar->vif_max);
+ break;
default:
ath6kl_dbg(ATH6KL_DBG_BOOT, "Unknown fw ie: %u\n",
le32_to_cpup(&hdr->id));
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 00/10] ath6kl: configurable board address and multivif
2011-11-14 17:29 [PATCH 00/10] ath6kl: configurable board address and multivif Kalle Valo
` (9 preceding siblings ...)
2011-11-14 17:31 ` [PATCH 10/10] ath6kl: add firmware IE for maximum number of vifs Kalle Valo
@ 2011-11-16 8:37 ` Kalle Valo
10 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2011-11-16 8:37 UTC (permalink / raw)
To: Kalle Valo; +Cc: linux-wireless
On 11/14/2011 07:29 PM, Kalle Valo wrote:
> Read board address and max number of vif interfaces from firmware.
> Also some cleanup in init.c.
All 10 applied.
Kalle
^ permalink raw reply [flat|nested] 12+ messages in thread