Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b85832d authored by Vasanthakumar Thiagarajan's avatar Vasanthakumar Thiagarajan Committed by Kalle Valo
Browse files

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: default avatarVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 27929723
Loading
Loading
Loading
Loading
+37 −8
Original line number Original line Diff line number Diff line
@@ -429,11 +429,42 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
int ath6kl_configure_target(struct ath6kl *ar)
int ath6kl_configure_target(struct ath6kl *ar)
{
{
	u32 param, ram_reserved_size;
	u32 param, ram_reserved_size;
	u8 fw_iftype;
	u8 fw_iftype, fw_mode = 0, fw_submode;
	int i;


	/*
	 * Note: Even though the firmware interface type is
	 * chosen as BSS_STA for all three interfaces, can
	 * be configured to IBSS/AP as long as the fw submode
	 * remains normal mode (0 - AP, STA and IBSS). But
	 * due to an target assert in firmware only one interface is
	 * configured for now.
	 */
	fw_iftype = HI_OPTION_FW_MODE_BSS_STA;
	fw_iftype = HI_OPTION_FW_MODE_BSS_STA;


	/* Tell target which HTC version it is used*/
	for (i = 0; i < MAX_NUM_VIF; i++)
		fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS);

	/*
	 * submodes : vif[0] - AP/STA/IBSS
	 *	      vif[1] - "P2P dev"/"P2P GO"/"P2P Client"
	 *	      vif[2] - "P2P dev"/"P2P GO"/"P2P Client"
	 */
	fw_submode = HI_OPTION_FW_SUBMODE_NONE |
		     (HI_OPTION_FW_SUBMODE_P2PDEV <<
		      (1 * HI_OPTION_FW_SUBMODE_BITS)) |
		      (HI_OPTION_FW_SUBMODE_P2PDEV <<
		      (2 * HI_OPTION_FW_SUBMODE_BITS));

	/*
	 * FIXME: This needs to be removed once the multivif
	 * support is enabled.
	 */
	if (ar->p2p)
		fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV;
	else
		fw_submode = HI_OPTION_FW_SUBMODE_NONE;

	param = HTC_PROTOCOL_VERSION;
	param = HTC_PROTOCOL_VERSION;
	if (ath6kl_bmi_write(ar,
	if (ath6kl_bmi_write(ar,
			     ath6kl_get_hi_item_addr(ar,
			     ath6kl_get_hi_item_addr(ar,
@@ -454,12 +485,10 @@ int ath6kl_configure_target(struct ath6kl *ar)
		return -EIO;
		return -EIO;
	}
	}


	param |= (1 << HI_OPTION_NUM_DEV_SHIFT);
	param |= (MAX_NUM_VIF << HI_OPTION_NUM_DEV_SHIFT);
	param |= (fw_iftype << HI_OPTION_FW_MODE_SHIFT);
	param |= fw_mode << HI_OPTION_FW_MODE_SHIFT;
	if (ar->p2p && fw_iftype == HI_OPTION_FW_MODE_BSS_STA) {
	param |= fw_submode << HI_OPTION_FW_SUBMODE_SHIFT;
		param |= HI_OPTION_FW_SUBMODE_P2PDEV <<

			HI_OPTION_FW_SUBMODE_SHIFT;
	}
	param |= (0 << HI_OPTION_MAC_ADDR_METHOD_SHIFT);
	param |= (0 << HI_OPTION_MAC_ADDR_METHOD_SHIFT);
	param |= (0 << HI_OPTION_FW_BRIDGE_SHIFT);
	param |= (0 << HI_OPTION_FW_BRIDGE_SHIFT);


+3 −0
Original line number Original line Diff line number Diff line
@@ -320,7 +320,10 @@ struct host_interest {
|   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)
|   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)
|------------------------------------------------------------------------------|
|------------------------------------------------------------------------------|
*/
*/
#define HI_OPTION_FW_MODE_BITS	       0x2
#define HI_OPTION_FW_MODE_SHIFT        0xC
#define HI_OPTION_FW_MODE_SHIFT        0xC

#define HI_OPTION_FW_SUBMODE_BITS      0x2
#define HI_OPTION_FW_SUBMODE_SHIFT     0x14
#define HI_OPTION_FW_SUBMODE_SHIFT     0x14


/* Convert a Target virtual address into a Target physical address */
/* Convert a Target virtual address into a Target physical address */