diff options
Diffstat (limited to 'wifi/1.1/default/wifi_chip.cpp')
-rw-r--r-- | wifi/1.1/default/wifi_chip.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/wifi/1.1/default/wifi_chip.cpp b/wifi/1.1/default/wifi_chip.cpp index 2f4023405..5d55914e6 100644 --- a/wifi/1.1/default/wifi_chip.cpp +++ b/wifi/1.1/default/wifi_chip.cpp @@ -434,8 +434,14 @@ WifiChip::getAvailableModesInternal() { // AP mode iface combinations. const IWifiChip::ChipIfaceCombinationLimit ap_chip_iface_combination_limit = { {IfaceType::AP}, 1}; - const IWifiChip::ChipIfaceCombination ap_chip_iface_combination = { - {ap_chip_iface_combination_limit}}; + IWifiChip::ChipIfaceCombination ap_chip_iface_combination; + if (WifiFeatureFlags::wifiStaSapConcurrency) { + ap_chip_iface_combination = { + {ap_chip_iface_combination_limit, sta_chip_iface_combination_limit_1}}; + } else { + ap_chip_iface_combination = { + {ap_chip_iface_combination_limit}}; + } const IWifiChip::ChipMode ap_chip_mode = {kApChipModeId, {ap_chip_iface_combination}}; return {createWifiStatus(WifiStatusCode::SUCCESS), @@ -676,7 +682,11 @@ WifiStatus WifiChip::removeP2pIfaceInternal(const std::string& ifname) { } std::pair<WifiStatus, sp<IWifiStaIface>> WifiChip::createStaIfaceInternal() { - if (current_mode_id_ != kStaChipModeId || sta_iface_.get()) { + // Do no restrict with kStaChipModeId in case of wifiStaSapConcurrency feature. + // In case of wifiStaSapConcurrency, both kStaChipModeId and kApChipModeId are + // valid combinations to create STA interface. + if ((!(WifiFeatureFlags::wifiStaSapConcurrency) && + current_mode_id_ != kStaChipModeId) || sta_iface_.get()) { return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; } std::string ifname = legacy_hal_.lock()->getStaIfaceName(); @@ -841,7 +851,11 @@ WifiStatus WifiChip::handleChipConfiguration(ChipModeId mode_id) { // Currently the underlying implementation has a deadlock issue. // We should return ERROR_NOT_SUPPORTED if chip is already configured in // a different mode. - if (current_mode_id_ != kInvalidModeId) { + + // handleChipConfiguration assumes that initial mode is kInvalidModeId. + // This limitation is not applicable for wifiStaSapConcurrency feature. + if (!(WifiFeatureFlags::wifiStaSapConcurrency) && + current_mode_id_ != kInvalidModeId) { // TODO(b/37446050): Fix the deadlock. return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); } |