aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl
diff options
context:
space:
mode:
authorVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>2011-10-25 10:04:22 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2011-11-11 05:58:52 -0500
commit7b85832dfbfaf09e793755041302d9e6d67cd39e (patch)
treec88673e9d3865bc0748392f512969420df1443d0 /drivers/net/wireless/ath/ath6kl
parent2792972395356254252f12205915a32dce9f50e4 (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.c45
-rw-r--r--drivers/net/wireless/ath/ath6kl/target.h3
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)
429int ath6kl_configure_target(struct ath6kl *ar) 429int 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 */