Merge changes from topic "MLO Scoring"

* changes:
  wifi: Legacy HAL support to get concurrent TDLS session count
  wifi: AIDL support to get concurrent TDLS session count
  wifi: Add getWifiChipCapabilities() in shim layer
  wifi: Add AIDL support for getWifiChipCapabilities()
This commit is contained in:
Sunil Ravi
2022-12-12 22:45:30 +00:00
committed by Android (Google) Code Review
11 changed files with 139 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ interface IWifiChip {
@PropagateAllowBlocking android.hardware.wifi.IWifiStaIface getStaIface(in String ifname);
String[] getStaIfaceNames();
android.hardware.wifi.WifiRadioCombinationMatrix getSupportedRadioCombinationsMatrix();
android.hardware.wifi.WifiChipCapabilities getWifiChipCapabilities();
android.hardware.wifi.WifiUsableChannel[] getUsableChannels(in android.hardware.wifi.WifiBand band, in android.hardware.wifi.WifiIfaceMode ifaceModeMask, in android.hardware.wifi.IWifiChip.UsableChannelFilter filterMask);
void registerEventCallback(in android.hardware.wifi.IWifiChipEventCallback callback);
void removeApIface(in String ifname);

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.wifi;
@VintfStability
parcelable WifiChipCapabilities {
int maxMloLinkCount;
int maxConcurrentTdlsSessionCount;
}

View File

@@ -25,6 +25,7 @@ import android.hardware.wifi.IWifiStaIface;
import android.hardware.wifi.IfaceConcurrencyType;
import android.hardware.wifi.IfaceType;
import android.hardware.wifi.WifiBand;
import android.hardware.wifi.WifiChipCapabilities;
import android.hardware.wifi.WifiDebugHostWakeReasonStats;
import android.hardware.wifi.WifiDebugRingBufferStatus;
import android.hardware.wifi.WifiDebugRingBufferVerboseLevel;
@@ -784,6 +785,18 @@ interface IWifiChip {
*/
WifiRadioCombinationMatrix getSupportedRadioCombinationsMatrix();
/**
* Get capabilities supported by this chip.
*
* @return Chip capabilities represented by |WifiChipCapabilities|.
* @throws ServiceSpecificException with one of the following values:
* |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
* |WifiStatusCode.ERROR_NOT_SUPPORTED|,
* |WifiStatusCode.FAILURE_UNKNOWN|
*
*/
WifiChipCapabilities getWifiChipCapabilities();
/**
* Retrieve a list of usable Wifi channels for the specified band &
* operational modes.

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.wifi;
/**
* WifiChipCapabilities captures various Wifi chip capability params.
*/
@VintfStability
parcelable WifiChipCapabilities {
/**
* Maximum number of links used in Multi-Link Operation. The maximum
* number of links used for MLO can be different from the number of
* radios supported by the chip.
*
* This is a static configuration of the chip.
*/
int maxMloLinkCount;
/**
* Maximum number of concurrent TDLS sessions that can be enabled
* by framework via ISupplicantStaIface#initiateTdlsSetup().
*/
int maxConcurrentTdlsSessionCount;
}

View File

@@ -2768,6 +2768,15 @@ bool convertLegacyRadioCombinationsMatrixToAidl(
return true;
}
bool convertLegacyWifiChipCapabilitiesToAidl(
const legacy_hal::wifi_chip_capabilities& legacy_chip_capabilities,
WifiChipCapabilities& aidl_chip_capabilities) {
aidl_chip_capabilities.maxMloLinkCount = legacy_chip_capabilities.max_mlo_link_count;
aidl_chip_capabilities.maxConcurrentTdlsSessionCount =
legacy_chip_capabilities.max_concurrent_tdls_session_count;
return true;
}
} // namespace aidl_struct_util
} // namespace wifi
} // namespace hardware

View File

@@ -171,6 +171,9 @@ bool convertLegacyPeerInfoStatsToAidl(const legacy_hal::WifiPeerInfo& legacy_pee
StaPeerInfo* aidl_peer_info_stats);
bool convertLegacyWifiRateInfoToAidl(const legacy_hal::wifi_rate& legacy_rate,
WifiRateInfo* aidl_rate);
bool convertLegacyWifiChipCapabilitiesToAidl(
const legacy_hal::wifi_chip_capabilities& legacy_chip_capabilities,
WifiChipCapabilities& aidl_chip_capabilities);
} // namespace aidl_struct_util
} // namespace wifi
} // namespace hardware

View File

@@ -680,6 +680,11 @@ ndk::ScopedAStatus WifiChip::getSupportedRadioCombinationsMatrix(
&WifiChip::getSupportedRadioCombinationsMatrixInternal, _aidl_return);
}
ndk::ScopedAStatus WifiChip::getWifiChipCapabilities(WifiChipCapabilities* _aidl_return) {
return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
&WifiChip::getWifiChipCapabilitiesInternal, _aidl_return);
}
void WifiChip::invalidateAndRemoveAllIfaces() {
invalidateAndClearBridgedApAll();
invalidateAndClearAll(ap_ifaces_);
@@ -1403,6 +1408,26 @@ WifiChip::getSupportedRadioCombinationsMatrixInternal() {
return {aidl_matrix, ndk::ScopedAStatus::ok()};
}
std::pair<WifiChipCapabilities, ndk::ScopedAStatus> WifiChip::getWifiChipCapabilitiesInternal() {
legacy_hal::wifi_error legacy_status;
legacy_hal::wifi_chip_capabilities legacy_chip_capabilities;
std::tie(legacy_status, legacy_chip_capabilities) =
legacy_hal_.lock()->getWifiChipCapabilities();
if (legacy_status != legacy_hal::WIFI_SUCCESS) {
LOG(ERROR) << "Failed to get chip capabilities from legacy HAL: "
<< legacyErrorToString(legacy_status);
return {WifiChipCapabilities(), createWifiStatusFromLegacyError(legacy_status)};
}
WifiChipCapabilities aidl_chip_capabilities;
if (!aidl_struct_util::convertLegacyWifiChipCapabilitiesToAidl(legacy_chip_capabilities,
aidl_chip_capabilities)) {
LOG(ERROR) << "Failed convertLegacyWifiChipCapabilitiesToAidl() ";
return {WifiChipCapabilities(), createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS)};
}
return {aidl_chip_capabilities, ndk::ScopedAStatus::ok()};
}
ndk::ScopedAStatus WifiChip::triggerSubsystemRestartInternal() {
auto legacy_status = legacy_hal_.lock()->triggerSubsystemRestart();
return createWifiStatusFromLegacyError(legacy_status);

View File

@@ -144,6 +144,7 @@ class WifiChip : public BnWifiChip {
ndk::ScopedAStatus triggerSubsystemRestart() override;
ndk::ScopedAStatus getSupportedRadioCombinationsMatrix(
WifiRadioCombinationMatrix* _aidl_return) override;
ndk::ScopedAStatus getWifiChipCapabilities(WifiChipCapabilities* _aidl_return) override;
binder_status_t dump(int fd, const char** args, uint32_t numArgs) override;
private:
@@ -250,6 +251,7 @@ class WifiChip : public BnWifiChip {
ndk::ScopedAStatus triggerSubsystemRestartInternal();
std::pair<WifiRadioCombinationMatrix, ndk::ScopedAStatus>
getSupportedRadioCombinationsMatrixInternal();
std::pair<WifiChipCapabilities, ndk::ScopedAStatus> getWifiChipCapabilitiesInternal();
void setWeakPtr(std::weak_ptr<WifiChip> ptr);
int32_t chip_id_;

View File

@@ -1609,6 +1609,13 @@ wifi_error WifiLegacyHal::getWifiCachedScanResults(
return status;
}
std::pair<wifi_error, wifi_chip_capabilities> WifiLegacyHal::getWifiChipCapabilities() {
wifi_chip_capabilities chip_capabilities;
wifi_error status =
global_func_table_.wifi_get_chip_capabilities(global_handle_, &chip_capabilities);
return {status, chip_capabilities};
}
void WifiLegacyHal::invalidate() {
global_handle_ = nullptr;
iface_name_to_handle_.clear();

View File

@@ -232,6 +232,7 @@ using ::WIFI_CHAN_WIDTH_INVALID;
using ::wifi_channel_info;
using ::wifi_channel_stat;
using ::wifi_channel_width;
using ::wifi_chip_capabilities;
using ::wifi_coex_restriction;
using ::wifi_coex_unsafe_channel;
using ::WIFI_DUAL_STA_NON_TRANSIENT_UNBIASED;
@@ -693,6 +694,7 @@ class WifiLegacyHal {
wifi_error enableWifiTxPowerLimits(const std::string& iface_name, bool enable);
wifi_error getWifiCachedScanResults(const std::string& iface_name,
const CachedScanResultsCallbackHandlers& handler);
std::pair<wifi_error, wifi_chip_capabilities> getWifiChipCapabilities();
private:
// Retrieve interface handles for all the available interfaces.

View File

@@ -167,6 +167,7 @@ bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) {
populateStubFor(&hal_fn->wifi_chre_register_handler);
populateStubFor(&hal_fn->wifi_enable_tx_power_limits);
populateStubFor(&hal_fn->wifi_get_cached_scan_results);
populateStubFor(&hal_fn->wifi_get_chip_capabilities);
return true;
}