summaryrefslogtreecommitdiffstats
path: root/wifi/1.1/default/wifi_chip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/1.1/default/wifi_chip.cpp')
-rw-r--r--wifi/1.1/default/wifi_chip.cpp22
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);
}