xref: /aosp_15_r20/hardware/interfaces/wifi/aidl/default/wifi_chip.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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