1*4d7e907cSAndroid Build Coastguard Worker /* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Worker #ifndef WIFI_CHIP_H_ 18*4d7e907cSAndroid Build Coastguard Worker #define WIFI_CHIP_H_ 19*4d7e907cSAndroid Build Coastguard Worker 20*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/wifi/BnWifiChip.h> 21*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/wifi/IWifiRttController.h> 22*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/wifi/common/OuiKeyedData.h> 23*4d7e907cSAndroid Build Coastguard Worker #include <android-base/macros.h> 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker #include <list> 26*4d7e907cSAndroid Build Coastguard Worker #include <map> 27*4d7e907cSAndroid Build Coastguard Worker #include <mutex> 28*4d7e907cSAndroid Build Coastguard Worker 29*4d7e907cSAndroid Build Coastguard Worker #include "aidl_callback_util.h" 30*4d7e907cSAndroid Build Coastguard Worker #include "ringbuffer.h" 31*4d7e907cSAndroid Build Coastguard Worker #include "wifi_ap_iface.h" 32*4d7e907cSAndroid Build Coastguard Worker #include "wifi_feature_flags.h" 33*4d7e907cSAndroid Build Coastguard Worker #include "wifi_legacy_hal.h" 34*4d7e907cSAndroid Build Coastguard Worker #include "wifi_mode_controller.h" 35*4d7e907cSAndroid Build Coastguard Worker #include "wifi_nan_iface.h" 36*4d7e907cSAndroid Build Coastguard Worker #include "wifi_p2p_iface.h" 37*4d7e907cSAndroid Build Coastguard Worker #include "wifi_rtt_controller.h" 38*4d7e907cSAndroid Build Coastguard Worker #include "wifi_sta_iface.h" 39*4d7e907cSAndroid Build Coastguard Worker 40*4d7e907cSAndroid Build Coastguard Worker namespace aidl { 41*4d7e907cSAndroid Build Coastguard Worker namespace android { 42*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 43*4d7e907cSAndroid Build Coastguard Worker namespace wifi { 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker /** 46*4d7e907cSAndroid Build Coastguard Worker * AIDL interface object used to control a Wifi HAL chip instance. 47*4d7e907cSAndroid Build Coastguard Worker * Since there is only a single chip instance used today, there is no 48*4d7e907cSAndroid Build Coastguard Worker * identifying handle information stored here. 49*4d7e907cSAndroid Build Coastguard Worker */ 50*4d7e907cSAndroid Build Coastguard Worker class WifiChip : public BnWifiChip { 51*4d7e907cSAndroid Build Coastguard Worker public: 52*4d7e907cSAndroid Build Coastguard Worker WifiChip(int32_t chip_id, bool is_primary, 53*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, 54*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<mode_controller::WifiModeController> mode_controller, 55*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<iface_util::WifiIfaceUtil> iface_util, 56*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<feature_flags::WifiFeatureFlags> feature_flags, 57*4d7e907cSAndroid Build Coastguard Worker const std::function<void(const std::string&)>& subsystemCallbackHandler, 58*4d7e907cSAndroid Build Coastguard Worker bool using_dynamic_iface_combination); 59*4d7e907cSAndroid Build Coastguard Worker 60*4d7e907cSAndroid Build Coastguard Worker // Factory method - use instead of default constructor. 61*4d7e907cSAndroid Build Coastguard Worker static std::shared_ptr<WifiChip> create( 62*4d7e907cSAndroid Build Coastguard Worker int32_t chip_id, bool is_primary, 63*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, 64*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<mode_controller::WifiModeController> mode_controller, 65*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<iface_util::WifiIfaceUtil> iface_util, 66*4d7e907cSAndroid Build Coastguard Worker const std::weak_ptr<feature_flags::WifiFeatureFlags> feature_flags, 67*4d7e907cSAndroid Build Coastguard Worker const std::function<void(const std::string&)>& subsystemCallbackHandler, 68*4d7e907cSAndroid Build Coastguard Worker bool using_dynamic_iface_combination); 69*4d7e907cSAndroid Build Coastguard Worker 70*4d7e907cSAndroid Build Coastguard Worker // AIDL does not provide a built-in mechanism to let the server invalidate 71*4d7e907cSAndroid Build Coastguard Worker // an AIDL interface object after creation. If any client process holds onto 72*4d7e907cSAndroid Build Coastguard Worker // a reference to the object in their context, any method calls on that 73*4d7e907cSAndroid Build Coastguard Worker // reference will continue to be directed to the server. 74*4d7e907cSAndroid Build Coastguard Worker // 75*4d7e907cSAndroid Build Coastguard Worker // However Wifi HAL needs to control the lifetime of these objects. So, add 76*4d7e907cSAndroid Build Coastguard Worker // a public |invalidate| method to |WifiChip| and its child objects. This 77*4d7e907cSAndroid Build Coastguard Worker // will be used to mark an object invalid when either: 78*4d7e907cSAndroid Build Coastguard Worker // a) Wifi HAL is stopped, or 79*4d7e907cSAndroid Build Coastguard Worker // b) Wifi Chip is reconfigured. 80*4d7e907cSAndroid Build Coastguard Worker // 81*4d7e907cSAndroid Build Coastguard Worker // All AIDL method implementations should check if the object is still 82*4d7e907cSAndroid Build Coastguard Worker // marked valid before processing them. 83*4d7e907cSAndroid Build Coastguard Worker void invalidate(); 84*4d7e907cSAndroid Build Coastguard Worker bool isValid(); 85*4d7e907cSAndroid Build Coastguard Worker std::set<std::shared_ptr<IWifiChipEventCallback>> getEventCallbacks(); 86*4d7e907cSAndroid Build Coastguard Worker 87*4d7e907cSAndroid Build Coastguard Worker // AIDL methods exposed. 88*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getId(int32_t* _aidl_return) override; 89*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus registerEventCallback( 90*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<IWifiChipEventCallback>& in_callback) override; 91*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getFeatureSet(int32_t* _aidl_return) override; 92*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getAvailableModes(std::vector<IWifiChip::ChipMode>* _aidl_return) override; 93*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus configureChip(int32_t in_modeId) override; 94*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getMode(int32_t* _aidl_return) override; 95*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus requestChipDebugInfo(IWifiChip::ChipDebugInfo* _aidl_return) override; 96*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus requestDriverDebugDump(std::vector<uint8_t>* _aidl_return) override; 97*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus requestFirmwareDebugDump(std::vector<uint8_t>* _aidl_return) override; 98*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createApIface(std::shared_ptr<IWifiApIface>* _aidl_return) override; 99*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createBridgedApIface(std::shared_ptr<IWifiApIface>* _aidl_return) override; 100*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createApOrBridgedApIface( 101*4d7e907cSAndroid Build Coastguard Worker IfaceConcurrencyType in_ifaceType, 102*4d7e907cSAndroid Build Coastguard Worker const std::vector<common::OuiKeyedData>& in_vendorData, 103*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiApIface>* _aidl_return) override; 104*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getApIfaceNames(std::vector<std::string>* _aidl_return) override; 105*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getApIface(const std::string& in_ifname, 106*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiApIface>* _aidl_return) override; 107*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeApIface(const std::string& in_ifname) override; 108*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeIfaceInstanceFromBridgedApIface( 109*4d7e907cSAndroid Build Coastguard Worker const std::string& in_brIfaceName, const std::string& in_ifaceInstanceName) override; 110*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createNanIface(std::shared_ptr<IWifiNanIface>* _aidl_return) override; 111*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getNanIfaceNames(std::vector<std::string>* _aidl_return) override; 112*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getNanIface(const std::string& in_ifname, 113*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiNanIface>* _aidl_return) override; 114*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeNanIface(const std::string& in_ifname) override; 115*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createP2pIface(std::shared_ptr<IWifiP2pIface>* _aidl_return) override; 116*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getP2pIfaceNames(std::vector<std::string>* _aidl_return) override; 117*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getP2pIface(const std::string& in_ifname, 118*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiP2pIface>* _aidl_return) override; 119*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeP2pIface(const std::string& in_ifname) override; 120*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createStaIface(std::shared_ptr<IWifiStaIface>* _aidl_return) override; 121*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getStaIfaceNames(std::vector<std::string>* _aidl_return) override; 122*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getStaIface(const std::string& in_ifname, 123*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiStaIface>* _aidl_return) override; 124*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeStaIface(const std::string& in_ifname) override; 125*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createRttController( 126*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<IWifiStaIface>& in_boundIface, 127*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<IWifiRttController>* _aidl_return) override; 128*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getDebugRingBuffersStatus( 129*4d7e907cSAndroid Build Coastguard Worker std::vector<WifiDebugRingBufferStatus>* _aidl_return) override; 130*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus startLoggingToDebugRingBuffer( 131*4d7e907cSAndroid Build Coastguard Worker const std::string& in_ringName, WifiDebugRingBufferVerboseLevel in_verboseLevel, 132*4d7e907cSAndroid Build Coastguard Worker int32_t in_maxIntervalInSec, int32_t in_minDataSizeInBytes) override; 133*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus forceDumpToDebugRingBuffer(const std::string& in_ringName) override; 134*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus flushRingBufferToFile() override; 135*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus stopLoggingToDebugRingBuffer() override; 136*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getDebugHostWakeReasonStats( 137*4d7e907cSAndroid Build Coastguard Worker WifiDebugHostWakeReasonStats* _aidl_return) override; 138*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus enableDebugErrorAlerts(bool in_enable) override; 139*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus selectTxPowerScenario(IWifiChip::TxPowerScenario in_scenario) override; 140*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus resetTxPowerScenario() override; 141*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setLatencyMode(IWifiChip::LatencyMode in_mode) override; 142*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMultiStaPrimaryConnection(const std::string& in_ifName) override; 143*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMultiStaUseCase(IWifiChip::MultiStaUseCase in_useCase) override; 144*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setCoexUnsafeChannels( 145*4d7e907cSAndroid Build Coastguard Worker const std::vector<IWifiChip::CoexUnsafeChannel>& in_unsafeChannels, 146*4d7e907cSAndroid Build Coastguard Worker int32_t in_restrictions) override; 147*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setCountryCode(const std::array<uint8_t, 2>& in_code) override; 148*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getUsableChannels(WifiBand in_band, int32_t in_ifaceModeMask, 149*4d7e907cSAndroid Build Coastguard Worker int32_t in_filterMask, 150*4d7e907cSAndroid Build Coastguard Worker std::vector<WifiUsableChannel>* _aidl_return) override; 151*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setAfcChannelAllowance( 152*4d7e907cSAndroid Build Coastguard Worker const AfcChannelAllowance& afcChannelAllowance) override; 153*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus triggerSubsystemRestart() override; 154*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getSupportedRadioCombinations( 155*4d7e907cSAndroid Build Coastguard Worker std::vector<WifiRadioCombination>* _aidl_return) override; 156*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus getWifiChipCapabilities(WifiChipCapabilities* _aidl_return) override; 157*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus enableStaChannelForPeerNetwork( 158*4d7e907cSAndroid Build Coastguard Worker int32_t in_channelCategoryEnableFlag) override; 159*4d7e907cSAndroid Build Coastguard Worker binder_status_t dump(int fd, const char** args, uint32_t numArgs) override; 160*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMloMode(const ChipMloMode in_mode) override; 161*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setVoipMode(const VoipMode in_mode) override; 162*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createApOrBridgedApIfaceWithParams( 163*4d7e907cSAndroid Build Coastguard Worker const ApIfaceParams& in_params, std::shared_ptr<IWifiApIface>* _aidl_return) override; 164*4d7e907cSAndroid Build Coastguard Worker 165*4d7e907cSAndroid Build Coastguard Worker private: 166*4d7e907cSAndroid Build Coastguard Worker void invalidateAndRemoveAllIfaces(); 167*4d7e907cSAndroid Build Coastguard Worker // When a STA iface is removed any dependent NAN-ifaces/RTT-controllers are 168*4d7e907cSAndroid Build Coastguard Worker // invalidated & removed. 169*4d7e907cSAndroid Build Coastguard Worker void invalidateAndRemoveDependencies(const std::string& removed_iface_name); 170*4d7e907cSAndroid Build Coastguard Worker 171*4d7e907cSAndroid Build Coastguard Worker // Corresponding worker functions for the AIDL methods. 172*4d7e907cSAndroid Build Coastguard Worker std::pair<int32_t, ndk::ScopedAStatus> getIdInternal(); 173*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus registerEventCallbackInternal( 174*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<IWifiChipEventCallback>& event_callback); 175*4d7e907cSAndroid Build Coastguard Worker std::pair<int32_t, ndk::ScopedAStatus> getFeatureSetInternal(); 176*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<IWifiChip::ChipMode>, ndk::ScopedAStatus> getAvailableModesInternal(); 177*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus configureChipInternal(std::unique_lock<std::recursive_mutex>* lock, 178*4d7e907cSAndroid Build Coastguard Worker int32_t mode_id); 179*4d7e907cSAndroid Build Coastguard Worker std::pair<int32_t, ndk::ScopedAStatus> getModeInternal(); 180*4d7e907cSAndroid Build Coastguard Worker std::pair<IWifiChip::ChipDebugInfo, ndk::ScopedAStatus> requestChipDebugInfoInternal(); 181*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> requestDriverDebugDumpInternal(); 182*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> requestFirmwareDebugDumpInternal(); 183*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<WifiApIface> newWifiApIface(std::string& ifname, bool usesMlo); 184*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus createVirtualApInterface(const std::string& apVirtIf); 185*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiApIface>, ndk::ScopedAStatus> createApIfaceInternal(); 186*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiApIface>, ndk::ScopedAStatus> createBridgedApIfaceInternal( 187*4d7e907cSAndroid Build Coastguard Worker bool usesMlo); 188*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiApIface>, ndk::ScopedAStatus> createApOrBridgedApIfaceInternal( 189*4d7e907cSAndroid Build Coastguard Worker IfaceConcurrencyType ifaceType, const std::vector<common::OuiKeyedData>& vendorData); 190*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiApIface>, ndk::ScopedAStatus> 191*4d7e907cSAndroid Build Coastguard Worker createApOrBridgedApIfaceWithParamsInternal(const ApIfaceParams& params); 192*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<std::string>, ndk::ScopedAStatus> getApIfaceNamesInternal(); 193*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiApIface>, ndk::ScopedAStatus> getApIfaceInternal( 194*4d7e907cSAndroid Build Coastguard Worker const std::string& ifname); 195*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeApIfaceInternal(const std::string& ifname); 196*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeIfaceInstanceFromBridgedApIfaceInternal( 197*4d7e907cSAndroid Build Coastguard Worker const std::string& brIfaceName, const std::string& ifInstanceName); 198*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiNanIface>, ndk::ScopedAStatus> createNanIfaceInternal(); 199*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<std::string>, ndk::ScopedAStatus> getNanIfaceNamesInternal(); 200*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiNanIface>, ndk::ScopedAStatus> getNanIfaceInternal( 201*4d7e907cSAndroid Build Coastguard Worker const std::string& ifname); 202*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeNanIfaceInternal(const std::string& ifname); 203*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiP2pIface>, ndk::ScopedAStatus> createP2pIfaceInternal(); 204*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<std::string>, ndk::ScopedAStatus> getP2pIfaceNamesInternal(); 205*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiP2pIface>, ndk::ScopedAStatus> getP2pIfaceInternal( 206*4d7e907cSAndroid Build Coastguard Worker const std::string& ifname); 207*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeP2pIfaceInternal(const std::string& ifname); 208*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiStaIface>, ndk::ScopedAStatus> createStaIfaceInternal(); 209*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<std::string>, ndk::ScopedAStatus> getStaIfaceNamesInternal(); 210*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiStaIface>, ndk::ScopedAStatus> getStaIfaceInternal( 211*4d7e907cSAndroid Build Coastguard Worker const std::string& ifname); 212*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus removeStaIfaceInternal(const std::string& ifname); 213*4d7e907cSAndroid Build Coastguard Worker std::pair<std::shared_ptr<IWifiRttController>, ndk::ScopedAStatus> createRttControllerInternal( 214*4d7e907cSAndroid Build Coastguard Worker const std::shared_ptr<IWifiStaIface>& bound_iface); 215*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<WifiDebugRingBufferStatus>, ndk::ScopedAStatus> 216*4d7e907cSAndroid Build Coastguard Worker getDebugRingBuffersStatusInternal(); 217*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus startLoggingToDebugRingBufferInternal( 218*4d7e907cSAndroid Build Coastguard Worker const std::string& ring_name, WifiDebugRingBufferVerboseLevel verbose_level, 219*4d7e907cSAndroid Build Coastguard Worker uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); 220*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus forceDumpToDebugRingBufferInternal(const std::string& ring_name); 221*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus flushRingBufferToFileInternal(); 222*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus stopLoggingToDebugRingBufferInternal(); 223*4d7e907cSAndroid Build Coastguard Worker std::pair<WifiDebugHostWakeReasonStats, ndk::ScopedAStatus> 224*4d7e907cSAndroid Build Coastguard Worker getDebugHostWakeReasonStatsInternal(); 225*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus enableDebugErrorAlertsInternal(bool enable); 226*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus selectTxPowerScenarioInternal(IWifiChip::TxPowerScenario scenario); 227*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus resetTxPowerScenarioInternal(); 228*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setLatencyModeInternal(IWifiChip::LatencyMode mode); 229*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMultiStaPrimaryConnectionInternal(const std::string& ifname); 230*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMultiStaUseCaseInternal(IWifiChip::MultiStaUseCase use_case); 231*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setCoexUnsafeChannelsInternal( 232*4d7e907cSAndroid Build Coastguard Worker std::vector<IWifiChip::CoexUnsafeChannel> unsafe_channels, int32_t restrictions); 233*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setCountryCodeInternal(const std::array<uint8_t, 2>& in_code); 234*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<WifiUsableChannel>, ndk::ScopedAStatus> getUsableChannelsInternal( 235*4d7e907cSAndroid Build Coastguard Worker WifiBand band, int32_t ifaceModeMask, int32_t filterMask); 236*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus enableStaChannelForPeerNetworkInternal(int32_t channelCategoryEnableFlag); 237*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setAfcChannelAllowanceInternal( 238*4d7e907cSAndroid Build Coastguard Worker const AfcChannelAllowance& afcChannelAllowance); 239*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus handleChipConfiguration(std::unique_lock<std::recursive_mutex>* lock, 240*4d7e907cSAndroid Build Coastguard Worker int32_t mode_id); 241*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus registerDebugRingBufferCallback(); 242*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus registerRadioModeChangeCallback(); 243*4d7e907cSAndroid Build Coastguard Worker 244*4d7e907cSAndroid Build Coastguard Worker std::vector<ChipConcurrencyCombination> getCurrentModeConcurrencyCombinations(); 245*4d7e907cSAndroid Build Coastguard Worker std::map<IfaceConcurrencyType, size_t> getCurrentConcurrencyCombination(); 246*4d7e907cSAndroid Build Coastguard Worker std::vector<std::map<IfaceConcurrencyType, size_t>> expandConcurrencyCombinations( 247*4d7e907cSAndroid Build Coastguard Worker const ChipConcurrencyCombination& combination); 248*4d7e907cSAndroid Build Coastguard Worker bool canExpandedConcurrencyComboSupportConcurrencyTypeWithCurrentTypes( 249*4d7e907cSAndroid Build Coastguard Worker const std::map<IfaceConcurrencyType, size_t>& expanded_combo, 250*4d7e907cSAndroid Build Coastguard Worker IfaceConcurrencyType requested_type); 251*4d7e907cSAndroid Build Coastguard Worker bool canCurrentModeSupportConcurrencyTypeWithCurrentTypes(IfaceConcurrencyType requested_type); 252*4d7e907cSAndroid Build Coastguard Worker bool canExpandedConcurrencyComboSupportConcurrencyCombo( 253*4d7e907cSAndroid Build Coastguard Worker const std::map<IfaceConcurrencyType, size_t>& expanded_combo, 254*4d7e907cSAndroid Build Coastguard Worker const std::map<IfaceConcurrencyType, size_t>& req_combo); 255*4d7e907cSAndroid Build Coastguard Worker bool canCurrentModeSupportConcurrencyCombo( 256*4d7e907cSAndroid Build Coastguard Worker const std::map<IfaceConcurrencyType, size_t>& req_combo); 257*4d7e907cSAndroid Build Coastguard Worker bool canCurrentModeSupportConcurrencyType(IfaceConcurrencyType requested_type); 258*4d7e907cSAndroid Build Coastguard Worker 259*4d7e907cSAndroid Build Coastguard Worker bool isValidModeId(int32_t mode_id); 260*4d7e907cSAndroid Build Coastguard Worker bool isStaApConcurrencyAllowedInCurrentMode(); 261*4d7e907cSAndroid Build Coastguard Worker bool isDualStaConcurrencyAllowedInCurrentMode(); 262*4d7e907cSAndroid Build Coastguard Worker uint32_t startIdxOfApIface(); 263*4d7e907cSAndroid Build Coastguard Worker std::string getFirstActiveWlanIfaceName(); 264*4d7e907cSAndroid Build Coastguard Worker std::string allocateApOrStaIfaceName(IfaceType type, uint32_t start_idx); 265*4d7e907cSAndroid Build Coastguard Worker std::string allocateApIfaceName(); 266*4d7e907cSAndroid Build Coastguard Worker std::vector<std::string> allocateBridgedApInstanceNames(bool usesMlo); 267*4d7e907cSAndroid Build Coastguard Worker std::string allocateStaIfaceName(); 268*4d7e907cSAndroid Build Coastguard Worker bool writeRingbufferFilesInternal(); 269*4d7e907cSAndroid Build Coastguard Worker std::string getWlanIfaceNameWithType(IfaceType type, unsigned idx); 270*4d7e907cSAndroid Build Coastguard Worker void invalidateAndClearBridgedApAll(); 271*4d7e907cSAndroid Build Coastguard Worker void deleteApIface(const std::string& if_name); 272*4d7e907cSAndroid Build Coastguard Worker bool findUsingNameFromBridgedApInstances(const std::string& name); 273*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus triggerSubsystemRestartInternal(); 274*4d7e907cSAndroid Build Coastguard Worker std::pair<std::vector<WifiRadioCombination>, ndk::ScopedAStatus> 275*4d7e907cSAndroid Build Coastguard Worker getSupportedRadioCombinationsInternal(); 276*4d7e907cSAndroid Build Coastguard Worker std::pair<WifiChipCapabilities, ndk::ScopedAStatus> getWifiChipCapabilitiesInternal(); 277*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setMloModeInternal(const ChipMloMode in_mode); 278*4d7e907cSAndroid Build Coastguard Worker ndk::ScopedAStatus setVoipModeInternal(const VoipMode in_mode); 279*4d7e907cSAndroid Build Coastguard Worker void retrieveDynamicIfaceCombination(); 280*4d7e907cSAndroid Build Coastguard Worker void setWeakPtr(std::weak_ptr<WifiChip> ptr); 281*4d7e907cSAndroid Build Coastguard Worker 282*4d7e907cSAndroid Build Coastguard Worker int32_t chip_id_; 283*4d7e907cSAndroid Build Coastguard Worker std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; 284*4d7e907cSAndroid Build Coastguard Worker std::weak_ptr<mode_controller::WifiModeController> mode_controller_; 285*4d7e907cSAndroid Build Coastguard Worker std::shared_ptr<iface_util::WifiIfaceUtil> iface_util_; 286*4d7e907cSAndroid Build Coastguard Worker std::vector<std::shared_ptr<WifiApIface>> ap_ifaces_; 287*4d7e907cSAndroid Build Coastguard Worker std::vector<std::shared_ptr<WifiNanIface>> nan_ifaces_; 288*4d7e907cSAndroid Build Coastguard Worker std::vector<std::shared_ptr<WifiP2pIface>> p2p_ifaces_; 289*4d7e907cSAndroid Build Coastguard Worker std::vector<std::shared_ptr<WifiStaIface>> sta_ifaces_; 290*4d7e907cSAndroid Build Coastguard Worker std::vector<std::shared_ptr<WifiRttController>> rtt_controllers_; 291*4d7e907cSAndroid Build Coastguard Worker std::map<std::string, Ringbuffer> ringbuffer_map_; 292*4d7e907cSAndroid Build Coastguard Worker bool is_valid_; 293*4d7e907cSAndroid Build Coastguard Worker // Members pertaining to chip configuration. 294*4d7e907cSAndroid Build Coastguard Worker int32_t current_mode_id_; 295*4d7e907cSAndroid Build Coastguard Worker std::mutex lock_t; 296*4d7e907cSAndroid Build Coastguard Worker std::vector<IWifiChip::ChipMode> modes_; 297*4d7e907cSAndroid Build Coastguard Worker // The legacy ring buffer callback API has only a global callback 298*4d7e907cSAndroid Build Coastguard Worker // registration mechanism. Use this to check if we have already 299*4d7e907cSAndroid Build Coastguard Worker // registered a callback. 300*4d7e907cSAndroid Build Coastguard Worker bool debug_ring_buffer_cb_registered_; 301*4d7e907cSAndroid Build Coastguard Worker bool using_dynamic_iface_combination_; 302*4d7e907cSAndroid Build Coastguard Worker aidl_callback_util::AidlCallbackHandler<IWifiChipEventCallback> event_cb_handler_; 303*4d7e907cSAndroid Build Coastguard Worker std::weak_ptr<WifiChip> weak_ptr_this_; 304*4d7e907cSAndroid Build Coastguard Worker 305*4d7e907cSAndroid Build Coastguard Worker const std::function<void(const std::string&)> subsystemCallbackHandler_; 306*4d7e907cSAndroid Build Coastguard Worker std::map<std::string, std::vector<std::string>> br_ifaces_ap_instances_; 307*4d7e907cSAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(WifiChip); 308*4d7e907cSAndroid Build Coastguard Worker }; 309*4d7e907cSAndroid Build Coastguard Worker 310*4d7e907cSAndroid Build Coastguard Worker } // namespace wifi 311*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 312*4d7e907cSAndroid Build Coastguard Worker } // namespace android 313*4d7e907cSAndroid Build Coastguard Worker } // namespace aidl 314*4d7e907cSAndroid Build Coastguard Worker 315*4d7e907cSAndroid Build Coastguard Worker #endif // WIFI_CHIP_H_ 316