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

Commit a8aba178 authored by maheshkkv's avatar maheshkkv
Browse files

Add a new AIDL API to set Multi-Link Operation mode

Bug: 268235139
Test: m android.hardware.wifi-update-api
Change-Id: Iff3baf64cb6c999eca4e1bfa4af5a41cfb5e4876
parent 7c27e367
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ interface IWifiChip {
  void stopLoggingToDebugRingBuffer();
  void triggerSubsystemRestart();
  void enableStaChannelForPeerNetwork(in android.hardware.wifi.IWifiChip.ChannelCategoryMask channelCategoryEnableFlag);
  void setMloMode(in android.hardware.wifi.IWifiChip.ChipMloMode mode);
  const int NO_POWER_CAP_CONSTANT = 0x7FFFFFFF;
  @Backing(type="int") @VintfStability
  enum ChipCapabilityMask {
@@ -163,4 +164,11 @@ interface IWifiChip {
    INDOOR_CHANNEL = (1 << 0) /* 1 */,
    DFS_CHANNEL = (1 << 1) /* 2 */,
  }
  @Backing(type="int") @VintfStability
  enum ChipMloMode {
    DEFAULT = 0,
    LOW_LATENCY = 1,
    HIGH_THROUGHPUT = 2,
    LOW_POWER = 3,
  }
}
+36 −0
Original line number Diff line number Diff line
@@ -1115,4 +1115,40 @@ interface IWifiChip {
     *         |WifiStatusCode.FAILURE_UNKNOWN|
     */
    void enableStaChannelForPeerNetwork(in ChannelCategoryMask channelCategoryEnableFlag);

    /**
     * Multi-Link Operation modes.
     */
    @VintfStability
    @Backing(type="int")
    enum ChipMloMode {
        /**
         * Default mode for Multi-Link Operation.
         */
        DEFAULT = 0,
        /**
         * Low latency mode for Multi-link operation.
         */
        LOW_LATENCY = 1,
        /**
         * High throughput mode for Multi-link operation.
         */
        HIGH_THROUGHPUT = 2,
        /**
         * Low power mode for Multi-link operation.
         */
        LOW_POWER = 3,
    }

    /**
     * Set mode for Multi-Link Operation. Various modes are defined by the enum |ChipMloMode|.
     *
     * @param mode MLO mode as defined by the enum |ChipMloMode|
     * @throws ServiceSpecificException with one of the following values:
     *         |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|,
     *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
     *         |WifiStatusCode.ERROR_UNKNOWN|
     *
     */
    void setMloMode(in ChipMloMode mode);
}
+28 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

#include "aidl_return_util.h"
#include "aidl_struct_util.h"
#include "wifi_legacy_hal.h"
#include "wifi_status_util.h"

#define P2P_MGMT_DEVICE_PREFIX "p2p-dev-"
@@ -699,6 +700,11 @@ ndk::ScopedAStatus WifiChip::enableStaChannelForPeerNetwork(
                           in_channelCategoryEnableFlag);
}

ndk::ScopedAStatus WifiChip::setMloMode(const ChipMloMode in_mode) {
    return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
                           &WifiChip::setMloModeInternal, in_mode);
}

void WifiChip::invalidateAndRemoveAllIfaces() {
    invalidateAndClearBridgedApAll();
    invalidateAndClearAll(ap_ifaces_);
@@ -1956,6 +1962,28 @@ bool WifiChip::findUsingNameFromBridgedApInstances(const std::string& name) {
    return false;
}

ndk::ScopedAStatus WifiChip::setMloModeInternal(const WifiChip::ChipMloMode in_mode) {
    legacy_hal::wifi_mlo_mode mode;
    switch (in_mode) {
        case WifiChip::ChipMloMode::DEFAULT:
            mode = legacy_hal::wifi_mlo_mode::WIFI_MLO_MODE_DEFAULT;
            break;
        case WifiChip::ChipMloMode::LOW_LATENCY:
            mode = legacy_hal::wifi_mlo_mode::WIFI_MLO_MODE_LOW_LATENCY;
            break;
        case WifiChip::ChipMloMode::HIGH_THROUGHPUT:
            mode = legacy_hal::wifi_mlo_mode::WIFI_MLO_MODE_HIGH_THROUGHPUT;
            break;
        case WifiChip::ChipMloMode::LOW_POWER:
            mode = legacy_hal::wifi_mlo_mode::WIFI_MLO_MODE_LOW_POWER;
            break;
        default:
            PLOG(ERROR) << "Error: invalid mode: " << toString(in_mode);
            return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
    }
    return createWifiStatusFromLegacyError(legacy_hal_.lock()->setMloMode(mode));
}

}  // namespace wifi
}  // namespace hardware
}  // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ class WifiChip : public BnWifiChip {
    ndk::ScopedAStatus enableStaChannelForPeerNetwork(
            ChannelCategoryMask in_channelCategoryEnableFlag) override;
    binder_status_t dump(int fd, const char** args, uint32_t numArgs) override;
    ndk::ScopedAStatus setMloMode(const ChipMloMode in_mode) override;

  private:
    void invalidateAndRemoveAllIfaces();
@@ -260,6 +261,7 @@ class WifiChip : public BnWifiChip {
    std::pair<WifiRadioCombinationMatrix, ndk::ScopedAStatus>
    getSupportedRadioCombinationsMatrixInternal();
    std::pair<WifiChipCapabilities, ndk::ScopedAStatus> getWifiChipCapabilitiesInternal();
    ndk::ScopedAStatus setMloModeInternal(const ChipMloMode in_mode);
    void setWeakPtr(std::weak_ptr<WifiChip> ptr);

    int32_t chip_id_;
+4 −0
Original line number Diff line number Diff line
@@ -1869,6 +1869,10 @@ wifi_error WifiLegacyHal::enableStaChannelForPeerNetwork(uint32_t channelCategor
                                                                       channelCategoryEnableFlag);
}

wifi_error WifiLegacyHal::setMloMode(wifi_mlo_mode mode) {
    return global_func_table_.wifi_set_mlo_mode(global_handle_, mode);
}

void WifiLegacyHal::invalidate() {
    global_handle_ = nullptr;
    iface_name_to_handle_.clear();
Loading