diff options
author | Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> | 2011-10-25 10:04:22 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2011-11-11 05:58:52 -0500 |
commit | 7b85832dfbfaf09e793755041302d9e6d67cd39e (patch) | |
tree | c88673e9d3865bc0748392f512969420df1443d0 /drivers/net/wireless/ath/ath6kl | |
parent | 2792972395356254252f12205915a32dce9f50e4 (diff) |
ath6kl: Configure inteface information at init time
Virtual interface information need to be configured during
init time to the target. With MAX_NUM_VIF is restricted to
1, currently only a single vif is being configured.
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl')
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/init.c | 45 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/target.h | 3 |
2 files changed, 40 insertions, 8 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c index 83ad008a3b60..60dbf721eb87 100644 --- a/drivers/net/wireless/ath/ath6kl/init.c +++ b/drivers/net/wireless/ath/ath6kl/init.c | |||
@@ -429,11 +429,42 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar) | |||
429 | int ath6kl_configure_target(struct ath6kl *ar) | 429 | int ath6kl_configure_target(struct ath6kl *ar) |
430 | { | 430 | { |
431 | u32 param, ram_reserved_size; | 431 | u32 param, ram_reserved_size; |
432 | u8 fw_iftype; | 432 | u8 fw_iftype, fw_mode = 0, fw_submode; |
433 | int i; | ||
433 | 434 | ||
435 | /* | ||
436 | * Note: Even though the firmware interface type is | ||
437 | * chosen as BSS_STA for all three interfaces, can | ||
438 | * be configured to IBSS/AP as long as the fw submode | ||
439 | * remains normal mode (0 - AP, STA and IBSS). But | ||
440 | * due to an target assert in firmware only one interface is | ||
441 | * configured for now. | ||
442 | */ | ||
434 | fw_iftype = HI_OPTION_FW_MODE_BSS_STA; | 443 | fw_iftype = HI_OPTION_FW_MODE_BSS_STA; |
435 | 444 | ||
436 | /* Tell target which HTC version it is used*/ | 445 | for (i = 0; i < MAX_NUM_VIF; i++) |
446 | fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS); | ||
447 | |||
448 | /* | ||
449 | * submodes : vif[0] - AP/STA/IBSS | ||
450 | * vif[1] - "P2P dev"/"P2P GO"/"P2P Client" | ||
451 | * vif[2] - "P2P dev"/"P2P GO"/"P2P Client" | ||
452 | */ | ||
453 | fw_submode = HI_OPTION_FW_SUBMODE_NONE | | ||
454 | (HI_OPTION_FW_SUBMODE_P2PDEV << | ||
455 | (1 * HI_OPTION_FW_SUBMODE_BITS)) | | ||
456 | (HI_OPTION_FW_SUBMODE_P2PDEV << | ||
457 | (2 * HI_OPTION_FW_SUBMODE_BITS)); | ||
458 | |||
459 | /* | ||
460 | * FIXME: This needs to be removed once the multivif | ||
461 | * support is enabled. | ||
462 | */ | ||
463 | if (ar->p2p) | ||
464 | fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV; | ||
465 | else | ||
466 | fw_submode = HI_OPTION_FW_SUBMODE_NONE; | ||
467 | |||
437 | param = HTC_PROTOCOL_VERSION; | 468 | param = HTC_PROTOCOL_VERSION; |
438 | if (ath6kl_bmi_write(ar, | 469 | if (ath6kl_bmi_write(ar, |
439 | ath6kl_get_hi_item_addr(ar, | 470 | ath6kl_get_hi_item_addr(ar, |
@@ -454,12 +485,10 @@ int ath6kl_configure_target(struct ath6kl *ar) | |||
454 | return -EIO; | 485 | return -EIO; |
455 | } | 486 | } |
456 | 487 | ||
457 | param |= (1 << HI_OPTION_NUM_DEV_SHIFT); | 488 | param |= (MAX_NUM_VIF << HI_OPTION_NUM_DEV_SHIFT); |
458 | param |= (fw_iftype << HI_OPTION_FW_MODE_SHIFT); | 489 | param |= fw_mode << HI_OPTION_FW_MODE_SHIFT; |
459 | if (ar->p2p && fw_iftype == HI_OPTION_FW_MODE_BSS_STA) { | 490 | param |= fw_submode << HI_OPTION_FW_SUBMODE_SHIFT; |
460 | param |= HI_OPTION_FW_SUBMODE_P2PDEV << | 491 | |
461 | HI_OPTION_FW_SUBMODE_SHIFT; | ||
462 | } | ||
463 | param |= (0 << HI_OPTION_MAC_ADDR_METHOD_SHIFT); | 492 | param |= (0 << HI_OPTION_MAC_ADDR_METHOD_SHIFT); |
464 | param |= (0 << HI_OPTION_FW_BRIDGE_SHIFT); | 493 | param |= (0 << HI_OPTION_FW_BRIDGE_SHIFT); |
465 | 494 | ||
diff --git a/drivers/net/wireless/ath/ath6kl/target.h b/drivers/net/wireless/ath/ath6kl/target.h index c9a76051f042..687e2b350e8f 100644 --- a/drivers/net/wireless/ath/ath6kl/target.h +++ b/drivers/net/wireless/ath/ath6kl/target.h | |||
@@ -320,7 +320,10 @@ struct host_interest { | |||
320 | | (2) | (2) | (2) | (2) | (2) | (2) | (2) | (2) | 320 | | (2) | (2) | (2) | (2) | (2) | (2) | (2) | (2) |
321 | |------------------------------------------------------------------------------| | 321 | |------------------------------------------------------------------------------| |
322 | */ | 322 | */ |
323 | #define HI_OPTION_FW_MODE_BITS 0x2 | ||
323 | #define HI_OPTION_FW_MODE_SHIFT 0xC | 324 | #define HI_OPTION_FW_MODE_SHIFT 0xC |
325 | |||
326 | #define HI_OPTION_FW_SUBMODE_BITS 0x2 | ||
324 | #define HI_OPTION_FW_SUBMODE_SHIFT 0x14 | 327 | #define HI_OPTION_FW_SUBMODE_SHIFT 0x14 |
325 | 328 | ||
326 | /* Convert a Target virtual address into a Target physical address */ | 329 | /* Convert a Target virtual address into a Target physical address */ |