diff options
author | Purushottam Kushwaha <quic_pkushwah@quicinc.com> | 2022-06-28 11:06:42 +0530 |
---|---|---|
committer | Purushottam Kushwaha <quic_pkushwah@quicinc.com> | 2022-07-26 18:17:00 +0530 |
commit | a49d7330bf0bc1902703887b3ab7f97aa008825c (patch) | |
tree | 95a2feb1fee10168e0b64c882460f6a81760b218 /wifi/1.6/default/wifi_chip.cpp | |
parent | aa5def6aa9b8f14fd6e1b4b6619dba35d8295e08 (diff) |
Wifi: Add support to query and use driver advertised interface combination
Interface combinations in legacy-hal is predefined with
'WIFI_HAL_INTERFACE_COMBINATIONS' build flag. Netlink interface
already provides supported interface combination via
'NL80211_CMD_GET_WIPHY' using attribute
'NL80211_ATTR_INTERFACE_COMBINATIONS' , thus build time dependency
to configure interface combination for each target can be removed
by querying the combination at runtime.
Change-Id: I28f95b048de4b7b1ca49f16c3ef4afe7941bb25e
CRs-Fixed: 3230634
Diffstat (limited to 'wifi/1.6/default/wifi_chip.cpp')
-rw-r--r-- | wifi/1.6/default/wifi_chip.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/wifi/1.6/default/wifi_chip.cpp b/wifi/1.6/default/wifi_chip.cpp index c7c00b17fd..9c0a15be05 100644 --- a/wifi/1.6/default/wifi_chip.cpp +++ b/wifi/1.6/default/wifi_chip.cpp @@ -378,6 +378,36 @@ WifiChip::WifiChip(ChipId chip_id, bool is_primary, debug_ring_buffer_cb_registered_(false), subsystemCallbackHandler_(handler) { setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); + using_dynamic_iface_combination_ = false; +} + +void WifiChip::retrieveDynamicIfaceCombination() { + + if (using_dynamic_iface_combination_) return; + + legacy_hal::wifi_iface_concurrency_matrix* legacy_matrix; + legacy_hal::wifi_error legacy_status; + + std::tie(legacy_status, legacy_matrix) = + legacy_hal_.lock()->getSupportedIfaceConcurrencyMatrix(); + if (legacy_status != legacy_hal::WIFI_SUCCESS) { + LOG(ERROR) << "Failed to get SupportedIfaceCombinations matrix from legacy HAL: " + << legacyErrorToString(legacy_status); + return; + } + + V1_6::IWifiChip::ChipMode hidl_chip_mode; + if (!hidl_struct_util::convertLegacyIfaceCombinationsMatrixToChipMode(legacy_matrix, + &hidl_chip_mode)) { + LOG(ERROR) << "Failed convertLegacyIfaceCombinationsMatrixToChipMode() "; + return; + } + + LOG(INFO) << "Reloading iface concurrency combination from driver"; + hidl_chip_mode.id = feature_flags::chip_mode_ids::kV3; + modes_.clear(); + modes_.push_back(hidl_chip_mode); + using_dynamic_iface_combination_ = true; } void WifiChip::invalidate() { @@ -1595,6 +1625,8 @@ WifiStatus WifiChip::handleChipConfiguration( property_set("vendor.wlan.driver.version", version_info.second.driverDescription.c_str()); } + // Get the driver supported interface combination. + retrieveDynamicIfaceCombination(); return createWifiStatus(WifiStatusCode::SUCCESS); } |