|
@@ -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) {
|