ath6kl: Fix target assert in p2p bringup with multi vif
Using interface 0 for p2p causes target assert. This is because interface 0 is always initialized to non-p2p operations. Fix this issue by initializing all the interfaces for p2p when fw is capable of dynamic interface switching. When fw is not capable of dynamic switching, make sure p2p is not brought up on interface which is not initialized for this purpose. Reported-by: Naveen Singh navesing@qca.qualcomm.com Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
b514fab5a1
commit
1e8d13b0ac
2 changed files with 47 additions and 9 deletions
|
@ -488,22 +488,31 @@ int ath6kl_configure_target(struct ath6kl *ar)
|
|||
fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS);
|
||||
|
||||
/*
|
||||
* By default, submodes :
|
||||
* Submodes when fw does not support dynamic interface
|
||||
* switching:
|
||||
* vif[0] - AP/STA/IBSS
|
||||
* vif[1] - "P2P dev"/"P2P GO"/"P2P Client"
|
||||
* vif[2] - "P2P dev"/"P2P GO"/"P2P Client"
|
||||
* Otherwise, All the interface are initialized to p2p dev.
|
||||
*/
|
||||
|
||||
for (i = 0; i < ar->max_norm_iface; i++)
|
||||
fw_submode |= HI_OPTION_FW_SUBMODE_NONE <<
|
||||
(i * HI_OPTION_FW_SUBMODE_BITS);
|
||||
if (test_bit(ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX,
|
||||
ar->fw_capabilities)) {
|
||||
for (i = 0; i < ar->vif_max; i++)
|
||||
fw_submode |= HI_OPTION_FW_SUBMODE_P2PDEV <<
|
||||
(i * HI_OPTION_FW_SUBMODE_BITS);
|
||||
} else {
|
||||
for (i = 0; i < ar->max_norm_iface; i++)
|
||||
fw_submode |= HI_OPTION_FW_SUBMODE_NONE <<
|
||||
(i * HI_OPTION_FW_SUBMODE_BITS);
|
||||
|
||||
for (i = ar->max_norm_iface; i < ar->vif_max; i++)
|
||||
fw_submode |= HI_OPTION_FW_SUBMODE_P2PDEV <<
|
||||
(i * HI_OPTION_FW_SUBMODE_BITS);
|
||||
for (i = ar->max_norm_iface; i < ar->vif_max; i++)
|
||||
fw_submode |= HI_OPTION_FW_SUBMODE_P2PDEV <<
|
||||
(i * HI_OPTION_FW_SUBMODE_BITS);
|
||||
|
||||
if (ar->p2p && ar->vif_max == 1)
|
||||
fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV;
|
||||
if (ar->p2p && ar->vif_max == 1)
|
||||
fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV;
|
||||
}
|
||||
|
||||
if (ath6kl_bmi_write_hi32(ar, hi_app_host_interest,
|
||||
HTC_PROTOCOL_VERSION) != 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue