Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d01baf2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes from topic "b178126071_selfRecoveryEnhancement" into sc-dev am: 470fc06a

Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/13774514

Change-Id: I91ad7b744760d3431d3efda537d8265c8db9c9c5
parents 685f0805 470fc06a
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -303,4 +303,25 @@ interface IWifiChip extends @1.4::IWifiChip {
    getUsableChannels(WifiBand band, bitfield<WifiIfaceMode> ifaceModeMask,
            bitfield<UsableChannelFilter> filterMask)
        generates (WifiStatus status, vec<WifiUsableChannel> channels);

    /**
     * Trigger subsystem restart
     *
     * If the framework detects a problem (e.g. connection failure),
     * it must call this function to attempt recovery.
     *
     * When the wifi HAL receiveds triggerSubsystemRestart(), it must restart
     * the wlan subsystem, especially the wlan firmware.
     *
     * Regarding the callback function for subsystem restart, refer to documentation of
     * |IWifiEventCallback.onSubsystemRestart| for details.
     *
     * @return status WifiStatus of the operation.
     *         Possible status codes:
     *         |WifiStatusCode.SUCCESS|,
     *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
     *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
     *         |WifiStatusCode.ERROR_UNKNOWN|
     */
    triggerSubsystemRestart() generates (WifiStatus status);
};
+8 −1
Original line number Diff line number Diff line
@@ -17,5 +17,12 @@
package android.hardware.wifi@1.5;

import @1.0::IWifiEventCallback;
import @1.0::WifiStatus;

interface IWifiEventCallback extends @1.0::IWifiEventCallback {};
interface IWifiEventCallback extends @1.0::IWifiEventCallback {
  /**
    * Must be called when the Wi-Fi subsystem restart completes.
    * Once this event is received, framework must fully reset the Wi-Fi stack state.
    */
  oneway onSubsystemRestart(WifiStatus status);
};
+1 −1
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ WifiStatus Wifi::startInternal() {
                WifiStatus wifi_status =
                    createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, error);
                for (const auto& callback : event_cb_handler_.getCallbacks()) {
                    if (!callback->onFailure(wifi_status).isOk()) {
                    if (!callback->onSubsystemRestart(wifi_status).isOk()) {
                        LOG(ERROR) << "Failed to invoke onFailure callback";
                    }
                }
+12 −0
Original line number Diff line number Diff line
@@ -747,6 +747,13 @@ Return<void> WifiChip::getUsableChannels(
                           ifaceModeMask, filterMask);
}

Return<void> WifiChip::triggerSubsystemRestart(
    triggerSubsystemRestart_cb hidl_status_cb) {
    return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
                           &WifiChip::triggerSubsystemRestartInternal,
                           hidl_status_cb);
}

void WifiChip::invalidateAndRemoveAllIfaces() {
    invalidateAndClearBridgedApAll();
    invalidateAndClearAll(ap_ifaces_);
@@ -1522,6 +1529,11 @@ WifiChip::getUsableChannelsInternal(WifiBand band, uint32_t ifaceModeMask,
    return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_usable_channels};
}

WifiStatus WifiChip::triggerSubsystemRestartInternal() {
    auto legacy_status = legacy_hal_.lock()->triggerSubsystemRestart();
    return createWifiStatusFromLegacyError(legacy_status);
}

WifiStatus WifiChip::handleChipConfiguration(
    /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock,
    ChipModeId mode_id) {
+3 −0
Original line number Diff line number Diff line
@@ -184,6 +184,8 @@ class WifiChip : public V1_5::IWifiChip {
        WifiBand band, hidl_bitfield<WifiIfaceMode> ifaceModeMask,
        hidl_bitfield<UsableChannelFilter> filterMask,
        getUsableChannels_cb _hidl_cb) override;
    Return<void> triggerSubsystemRestart(
        triggerSubsystemRestart_cb hidl_status_cb) override;

   private:
    void invalidateAndRemoveAllIfaces();
@@ -303,6 +305,7 @@ class WifiChip : public V1_5::IWifiChip {
    void invalidateAndClearBridgedApAll();
    void invalidateAndClearBridgedAp(const std::string& br_name);
    bool findUsingNameFromBridgedApInstances(const std::string& name);
    WifiStatus triggerSubsystemRestartInternal();

    ChipId chip_id_;
    std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
Loading