OSDN Git Service

Merge cherrypicks of [3134552, 3130583, 3131953, 3131954, 3131955, 3131956, 3131957...
[android-x86/hardware-interfaces.git] / wifi / 1.0 / IWifiChip.hal
1 /*
2  * Copyright 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package android.hardware.wifi@1.0;
18
19 import IWifiChipEventCallback;
20 import IWifiIface;
21 import IWifiApIface;
22 import IWifiNanIface;
23 import IWifiP2pIface;
24 import IWifiStaIface;
25 import IWifiRttController;
26
27 /**
28  * Interface that represents a chip that must be configured as a single unit.
29  * The HAL/driver/firmware will be responsible for determining which phy is used
30  * to perform operations like NAN, RTT, etc.
31  */
32 interface IWifiChip {
33   /**
34    * Set of interface types with the maximum number of interfaces that can have
35    * one of the specified type for a given ChipIfaceCombination. See
36    * ChipIfaceCombination for examples.
37    */
38   struct ChipIfaceCombinationLimit {
39     vec<IfaceType> types; // Each IfaceType must occur at most once.
40     uint32_t maxIfaces;
41   };
42
43   /**
44    * Set of interfaces that can operate concurrently when in a given mode. See
45    * ChipMode below.
46    *
47    * For example:
48    *   [{STA} <= 2]
49    *       At most two STA interfaces are supported
50    *       [], [STA], [STA+STA]
51    *
52    *   [{STA} <= 1, {NAN} <= 1, {AP} <= 1]
53    *       Any combination of STA, NAN, AP
54    *       [], [STA], [NAN], [AP], [STA+NAN], [STA+AP], [NAN+AP], [STA+NAN+AP]
55    *
56    *   [{STA} <= 1, {NAN,P2P} <= 1]
57    *       Optionally a STA and either NAN or P2P
58    *       [], [STA], [STA+NAN], [STA+P2P], [NAN], [P2P]
59    *       Not included [NAN+P2P], [STA+NAN+P2P]
60    *
61    *   [{STA} <= 1, {STA,NAN} <= 1]
62    *       Optionally a STA and either a second STA or a NAN
63    *       [], [STA], [STA+NAN], [STA+STA], [NAN]
64    *       Not included [STA+STA+NAN]
65    */
66   struct ChipIfaceCombination {
67     vec<ChipIfaceCombinationLimit> limits;
68   };
69
70   /**
71    * A mode that the chip can be put in. A mode defines a set of constraints on
72    * the interfaces that can exist while in that mode. Modes define a unit of
73    * configuration where all interfaces must be torn down to switch to a
74    * different mode. Some HALs may only have a single mode, but an example where
75    * multiple modes would be required is if a chip has different firmwares with
76    * different capabilities.
77    *
78    * When in a mode, it must be possible to perform any combination of creating
79    * and removing interfaces as long as at least one of the
80    * ChipIfaceCombinations is satisfied. This means that if a chip has two
81    * available combinations, [{STA} <= 1] and [{AP} <= 1] then it is expected
82    * that exactly one STA interface or one AP interface can be created, but it
83    * is not expected that both a STA and AP interface could be created. If it
84    * was then there would be a single available combination
85    * [{STA} <=1, {AP} <= 1].
86    *
87    * When switching between two available combinations it is expected that
88    * interfaces only supported by the initial combination must be removed until
89    * the target combination is also satisfied. At that point new interfaces
90    * satisfying only the target combination can be added (meaning the initial
91    * combination limits will no longer satisfied). The addition of these new
92    * interfaces must not impact the existence of interfaces that satisfy both
93    * combinations.
94    *
95    * For example, a chip with available combinations:
96    *     [{STA} <= 2, {NAN} <=1] and [{STA} <=1, {NAN} <= 1, {AP} <= 1}]
97    * If the chip currently has 3 interfaces STA, STA and NAN and wants to add an
98    * AP interface in place of one of the STAs then first one of the STA
99    * interfaces must be removed and then the AP interface can be created after
100    * the STA had been torn down. During this process the remaining STA and NAN
101    * interfaces must not be removed/recreated.
102    *
103    * If a chip does not support this kind of reconfiguration in this mode then
104    * the combinations must be separated into two separate modes. Before
105    * switching modes all interfaces must be torn down, the mode switch must be
106    * enacted and when it completes the new interfaces must be brought up.
107    */
108   struct ChipMode {
109     /**
110      * Id that can be used to put the chip in this mode.
111      */
112     ChipModeId id;
113
114     /**
115      * A list of the possible interface combinations that the chip can have
116      * while in this mode.
117      */
118     vec<ChipIfaceCombination> availableCombinations;
119   };
120
121   /**
122    * Information about the version of the driver and firmware running this chip.
123    *
124    * The information in these ASCII strings are vendor specific and does not
125    * need to follow any particular format. It may be dumped as part of the bug
126    * report.
127    */
128   struct ChipDebugInfo {
129     string driverDescription;
130     string firmwareDescription;
131   };
132
133   /**
134    * Capabilities exposed by this chip.
135    */
136   enum ChipCapabilityMask : uint32_t {
137     /**
138      * Memory dump of Firmware.
139      */
140     DEBUG_MEMORY_FIRMWARE_DUMP = 1 << 0,
141     /**
142      * Memory dump of Driver.
143      */
144     DEBUG_MEMORY_DRIVER_DUMP = 1 << 1,
145     /**
146      * Connectivity events reported via debug ring buffer.
147      */
148     DEBUG_RING_BUFFER_CONNECT_EVENT = 1 << 2,
149     /**
150      * Power events reported via debug ring buffer.
151      */
152     DEBUG_RING_BUFFER_POWER_EVENT = 1 << 3,
153     /**
154      * Wakelock events reported via debug ring buffer.
155      */
156     DEBUG_RING_BUFFER_WAKELOCK_EVENT = 1 << 4,
157     /**
158      * Vendor data reported via debug ring buffer.
159      * This mostly contains firmware event logs.
160      */
161     DEBUG_RING_BUFFER_VENDOR_DATA = 1 << 5,
162     /**
163      * Host wake reasons stats collection.
164      */
165     DEBUG_HOST_WAKE_REASON_STATS = 1 << 6,
166     /**
167      * Error alerts.
168      */
169     DEBUG_ERROR_ALERTS = 1 << 7
170   };
171
172   /**
173    * Get the id assigned to this chip.
174    *
175    * @return status WifiStatus of the operation.
176    *         Possible status codes:
177    *         |WifiStatusCode.SUCCESS|,
178    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
179    * @return id Assigned chip Id.
180    */
181   getId() generates (WifiStatus status, ChipId id);
182
183   /**
184    * Requests notifications of significant events on this chip. Multiple calls
185    * to this must register multiple callbacks each of which must receive all
186    * events.
187    *
188    * @param callback An instance of the |IWifiChipEventCallback| HIDL interface
189    *        object.
190    * @return status WifiStatus of the operation.
191    *         Possible status codes:
192    *         |WifiStatusCode.SUCCESS|,
193    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
194    */
195   registerEventCallback(IWifiChipEventCallback callback) generates (WifiStatus status);
196
197   /**
198    * Get the capabilities supported by this chip.
199    *
200    * @return status WifiStatus of the operation.
201    *         Possible status codes:
202    *         |WifiStatusCode.SUCCESS|,
203    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
204    *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
205    *         |WifiStatusCode.ERROR_UNKNOWN|
206    * @return capabilities Bitset of |ChipCapabilityMask| values.
207    */
208   getCapabilities()
209       generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities);
210
211   /**
212    * Get the set of operation modes that the chip supports.
213    *
214    * @return status WifiStatus of the operation.
215    *         Possible status codes:
216    *         |WifiStatusCode.SUCCESS|,
217    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
218    * @return modes List of modes supported by the device.
219    */
220   getAvailableModes() generates (WifiStatus status, vec<ChipMode> modes);
221
222   /**
223    * Configure the Chip.
224    * This may NOT be called to reconfigure a chip due to an internal
225    * limitation. Calling this when chip is already configured in a different
226    * mode must trigger an ERROR_NOT_SUPPORTED failure.
227    * If you want to do reconfiguration, please call IWifi.stop() and IWifi.start()
228    * to restart Wifi HAL before calling this.
229    * Any existing |IWifiIface| objects must be marked invalid after this call.
230    * If this fails then the chips is now in an undefined state and
231    * configureChip must be called again.
232    * Must trigger |IWifiChipEventCallback.onChipReconfigured| on success.
233    * Must trigger |IWifiEventCallback.onFailure| on failure.
234    *
235    * @param modeId The mode that the chip must switch to, corresponding to the
236    *        id property of the target ChipMode.
237    * @return status WifiStatus of the operation.
238    *         Possible status codes:
239    *         |WifiStatusCode.SUCCESS|,
240    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
241    *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
242    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
243    *         |WifiStatusCode.ERROR_UNKNOWN|
244    */
245   configureChip(ChipModeId modeId) generates (WifiStatus status);
246
247   /**
248    * Get the current mode that the chip is in.
249    *
250    * @return modeId The mode that the chip is currently configured to,
251    *         corresponding to the id property of the target ChipMode.
252    * @return status WifiStatus of the operation.
253    *         Possible status codes:
254    *         |WifiStatusCode.SUCCESS|,
255    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
256    */
257   getMode() generates (WifiStatus status, ChipModeId modeId);
258
259   /**
260    * Request information about the chip.
261    *
262    * @return status WifiStatus of the operation.
263    *         Possible status codes:
264    *         |WifiStatusCode.SUCCESS|,
265    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
266    *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
267    *         |WifiStatusCode.ERROR_UNKNOWN|
268    * @return chipDebugInfo Instance of |ChipDebugInfo|.
269    */
270   requestChipDebugInfo() generates (WifiStatus status, ChipDebugInfo chipDebugInfo);
271
272   /**
273    * Request vendor debug info from the driver.
274    *
275    * @return status WifiStatus of the operation.
276    *         Possible status codes:
277    *         |WifiStatusCode.SUCCESS|,
278    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
279    *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
280    *         |WifiStatusCode.ERROR_UNKNOWN|
281    * @param blob Vector of bytes retrieved from the driver.
282    */
283   requestDriverDebugDump() generates (WifiStatus status, vec<uint8_t> blob);
284
285   /**
286    * Request vendor debug info from the firmware.
287    *
288    * @return status WifiStatus of the operation.
289    *         Possible status codes:
290    *         |WifiStatusCode.SUCCESS|,
291    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
292    *         |WifiStatusCode.ERROR_NOT_AVAILABLE|,
293    *         |WifiStatusCode.ERROR_UNKNOWN|
294    * @param blob Vector of bytes retrieved from the driver.
295    */
296   requestFirmwareDebugDump() generates (WifiStatus status, vec<uint8_t> blob);
297
298   /**
299    * Create an AP iface on the chip.
300    *
301    * Depending on the mode the chip is configured in, the interface creation
302    * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
303    * allowed (specified in |ChipIfaceCombination|) number of ifaces of the AP
304    * type.
305    *
306    * @return status WifiStatus of the operation.
307    *         Possible status codes:
308    *         |WifiStatusCode.SUCCESS|,
309    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
310    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|
311    * @return iface HIDL interface object representing the iface if
312    *         successful, null otherwise.
313    */
314   createApIface() generates (WifiStatus status, IWifiApIface iface);
315
316   /**
317    * List all the AP iface names configured on the chip.
318    * The corresponding |IWifiApIface| object for any iface are
319    * retrieved using |getApIface| method.
320    *
321    * @return status WifiStatus of the operation.
322    *         Possible status codes:
323    *         |WifiStatusCode.SUCCESS|,
324    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
325    * @return ifnames List of all AP iface names on the chip.
326    */
327   getApIfaceNames() generates (WifiStatus status, vec<string> ifnames);
328
329   /**
330    * Gets a HIDL interface object for the AP Iface corresponding
331    * to the provided ifname.
332    *
333    * @param ifname Name of the iface.
334    * @return status WifiStatus of the operation.
335    *         Possible status codes:
336    *         |WifiStatusCode.SUCCESS|,
337    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
338    *         |WifiStatusCode.ERROR_INVALID_ARGS|
339    * @return iface HIDL interface object representing the iface if
340    *         it exists, null otherwise.
341    */
342   getApIface(string ifname) generates (WifiStatus status, IWifiApIface iface);
343
344   /**
345    * Removes the AP Iface with the provided ifname.
346    * Any further calls on the corresponding |IWifiApIface| HIDL interface
347    * object must fail.
348    *
349    * @param ifname Name of the iface.
350    * @return status WifiStatus of the operation.
351    *         Possible status codes:
352    *         |WifiStatusCode.SUCCESS|,
353    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
354    *         |WifiStatusCode.ERROR_INVALID_ARGS|
355    */
356   removeApIface(string ifname) generates (WifiStatus status);
357
358   /**
359    * Create a NAN iface on the chip.
360    *
361    * Depending on the mode the chip is configured in, the interface creation
362    * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
363    * allowed (specified in |ChipIfaceCombination|) number of ifaces of the NAN
364    * type.
365    *
366    * @return status WifiStatus of the operation.
367    *         Possible status codes:
368    *         |WifiStatusCode.SUCCESS|,
369    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
370    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|
371    * @return iface HIDL interface object representing the iface if
372    *         successful, null otherwise.
373    */
374   createNanIface() generates (WifiStatus status, IWifiNanIface iface);
375
376   /**
377    * List all the NAN iface names configured on the chip.
378    * The corresponding |IWifiNanIface| object for any iface are
379    * retrieved using |getNanIface| method.
380    *
381    * @return status WifiStatus of the operation.
382    *         Possible status codes:
383    *         |WifiStatusCode.SUCCESS|,
384    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
385    * @return ifnames List of all NAN iface names on the chip.
386    */
387   getNanIfaceNames() generates (WifiStatus status, vec<string> ifnames);
388
389   /**
390    * Gets a HIDL interface object for the NAN Iface corresponding
391    * to the provided ifname.
392    *
393    * @param ifname Name of the iface.
394    * @return status WifiStatus of the operation.
395    *         Possible status codes:
396    *         |WifiStatusCode.SUCCESS|,
397    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
398    *         |WifiStatusCode.ERROR_INVALID_ARGS|
399    * @return iface HIDL interface object representing the iface if
400    *         it exists, null otherwise.
401    */
402   getNanIface(string ifname) generates (WifiStatus status, IWifiNanIface iface);
403
404   /**
405    * Removes the NAN Iface with the provided ifname.
406    * Any further calls on the corresponding |IWifiNanIface| HIDL interface
407    * object must fail.
408    *
409    * @param ifname Name of the iface.
410    * @return status WifiStatus of the operation.
411    *         Possible status codes:
412    *         |WifiStatusCode.SUCCESS|,
413    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
414    *         |WifiStatusCode.ERROR_INVALID_ARGS|
415    */
416   removeNanIface(string ifname) generates (WifiStatus status);
417
418   /**
419    * Create a P2P iface on the chip.
420    *
421    * Depending on the mode the chip is configured in, the interface creation
422    * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
423    * allowed (specified in |ChipIfaceCombination|) number of ifaces of the P2P
424    * type.
425    *
426    * @return status WifiStatus of the operation.
427    *         Possible status codes:
428    *         |WifiStatusCode.SUCCESS|,
429    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
430    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|
431    * @return iface HIDL interface object representing the iface if
432    *         successful, null otherwise.
433    */
434   createP2pIface() generates (WifiStatus status, IWifiP2pIface iface);
435
436   /**
437    * List all the P2P iface names configured on the chip.
438    * The corresponding |IWifiP2pIface| object for any iface are
439    * retrieved using |getP2pIface| method.
440    *
441    * @return status WifiStatus of the operation.
442    *         Possible status codes:
443    *         |WifiStatusCode.SUCCESS|,
444    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
445    * @return ifnames List of all P2P iface names on the chip.
446    */
447   getP2pIfaceNames() generates (WifiStatus status, vec<string> ifnames);
448
449   /**
450    * Gets a HIDL interface object for the P2P Iface corresponding
451    * to the provided ifname.
452    *
453    * @param ifname Name of the iface.
454    * @return status WifiStatus of the operation.
455    *         Possible status codes:
456    *         |WifiStatusCode.SUCCESS|,
457    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
458    *         |WifiStatusCode.ERROR_INVALID_ARGS|
459    * @return iface HIDL interface object representing the iface if
460    *         it exists, null otherwise.
461    */
462   getP2pIface(string ifname) generates (WifiStatus status, IWifiP2pIface iface);
463
464   /**
465    * Removes the P2P Iface with the provided ifname.
466    * Any further calls on the corresponding |IWifiP2pIface| HIDL interface
467    * object must fail.
468    *
469    * @param ifname Name of the iface.
470    * @return status WifiStatus of the operation.
471    *         Possible status codes:
472    *         |WifiStatusCode.SUCCESS|,
473    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
474    *         |WifiStatusCode.ERROR_INVALID_ARGS|
475    */
476   removeP2pIface(string ifname) generates (WifiStatus status);
477
478   /**
479    * Create an STA iface on the chip.
480    *
481    * Depending on the mode the chip is configured in, the interface creation
482    * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
483    * allowed (specified in |ChipIfaceCombination|) number of ifaces of the STA
484    * type.
485    *
486    * @return status WifiStatus of the operation.
487    *         Possible status codes:
488    *         |WifiStatusCode.SUCCESS|,
489    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
490    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|
491    * @return iface HIDL interface object representing the iface if
492    *         successful, null otherwise.
493    */
494   createStaIface() generates (WifiStatus status, IWifiStaIface iface);
495
496   /**
497    * List all the STA iface names configured on the chip.
498    * The corresponding |IWifiStaIface| object for any iface are
499    * retrieved using |getStaIface| method.
500    *
501    * @return status WifiStatus of the operation.
502    *         Possible status codes:
503    *         |WifiStatusCode.SUCCESS|,
504    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
505    * @return ifnames List of all STA iface names on the chip.
506    */
507   getStaIfaceNames() generates (WifiStatus status, vec<string> ifnames);
508
509   /**
510    * Gets a HIDL interface object for the STA Iface corresponding
511    * to the provided ifname.
512    *
513    * @param ifname Name of the iface.
514    * @return status WifiStatus of the operation.
515    *         Possible status codes:
516    *         |WifiStatusCode.SUCCESS|,
517    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
518    *         |WifiStatusCode.ERROR_INVALID_ARGS|
519    * @return iface HIDL interface object representing the iface if
520    *         it exists, null otherwise.
521    */
522   getStaIface(string ifname) generates (WifiStatus status, IWifiStaIface iface);
523
524   /**
525    * Removes the STA Iface with the provided ifname.
526    * Any further calls on the corresponding |IWifiStaIface| HIDL interface
527    * object must fail.
528    *
529    * @param ifname Name of the iface.
530    * @return status WifiStatus of the operation.
531    *         Possible status codes:
532    *         |WifiStatusCode.SUCCESS|,
533    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
534    *         |WifiStatusCode.ERROR_INVALID_ARGS|
535    */
536   removeStaIface(string ifname) generates (WifiStatus status);
537
538   /**
539    * Create a RTTController instance.
540    *
541    * RTT controller can be either:
542    * a) Bound to a specific iface by passing in the corresponding |IWifiIface|
543    * object in |iface| param, OR
544    * b) Let the implementation decide the iface to use for RTT operations by
545    * passing null in |iface| param.
546    *
547    * @param boundIface HIDL interface object representing the iface if
548    *        the responder must be bound to a specific iface, null otherwise.
549    * @return status WifiStatus of the operation.
550    *         Possible status codes:
551    *         |WifiStatusCode.SUCCESS|,
552    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
553    */
554   createRttController(IWifiIface boundIface)
555       generates (WifiStatus status, IWifiRttController rtt);
556
557   /**
558    * WiFi debug ring buffer life cycle is as follow:
559    * - At initialization time, framework must call |getDebugRingBuffersStatus|.
560    *   to obtain the names and list of supported ring buffers.
561    *   The driver may expose several different rings each holding a different
562    *   type of data (connection events, power events, etc).
563    * - When WiFi operations start framework must call
564    *   |startLoggingToDebugRingBuffer| to trigger log collection for a specific
565    *   ring. The vebose level for each ring buffer can be specified in this API.
566    * - During wifi operations, driver must periodically report per ring data to
567    *   framework by invoking the
568    *   |IWifiChipEventCallback.onDebugRingBufferDataAvailable| callback.
569    * - When capturing a bug report, framework must indicate to driver that all
570    *   the data has to be uploaded urgently by calling
571    *   |forceDumpToDebugRingBuffer|.
572    *
573    * The data uploaded by driver must be stored by framework in separate files,
574    * with one stream of file per ring. Framework must store the files in pcapng
575    * format, allowing for easy merging and parsing with network analyzer tools.
576    * TODO: Since we're not longer dumping out the raw data, storing in separate
577    * pcapng files for parsing later must not work anymore.
578    */
579   /**
580    * API to get the status of all ring buffers supported by driver.
581    *
582    * @return status WifiStatus of the operation.
583    *         Possible status codes:
584    *         |WifiStatusCode.SUCCESS|,
585    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
586    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
587    *         |WifiStatusCode.NOT_AVAILABLE|,
588    *         |WifiStatusCode.UNKNOWN|
589    * @return ringBuffers Vector of |WifiDebugRingBufferStatus| corresponding to the
590    *         status of each ring bufffer on the device.
591    */
592   getDebugRingBuffersStatus() generates (WifiStatus status,
593                                          vec<WifiDebugRingBufferStatus> ringBuffers);
594
595   /**
596    * API to trigger the debug data collection.
597    *
598    * @param ringName represent the name of the ring for which data collection
599    *        shall start. This can be retrieved via the corresponding
600    *        |WifiDebugRingBufferStatus|.
601    * @parm maxIntervalInSec Maximum interval in seconds for driver to invoke
602    *       |onDebugRingBufferData|, ignore if zero.
603    * @parm minDataSizeInBytes: Minimum data size in buffer for driver to invoke
604    *       |onDebugRingBufferData|, ignore if zero.
605    * @return status WifiStatus of the operation.
606    *         Possible status codes:
607    *         |WifiStatusCode.SUCCESS|,
608    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
609    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
610    *         |WifiStatusCode.NOT_AVAILABLE|,
611    *         |WifiStatusCode.UNKNOWN|
612    */
613   startLoggingToDebugRingBuffer(string ringName,
614                                 WifiDebugRingBufferVerboseLevel verboseLevel,
615                                 uint32_t maxIntervalInSec,
616                                 uint32_t minDataSizeInBytes)
617       generates (WifiStatus status);
618
619   /**
620    * API to force dump data into the corresponding ring buffer.
621    * This is to be invoked during bugreport collection.
622    *
623    * @param ringName represent the name of the ring for which data collection
624    *        shall be forced. This can be retrieved via the corresponding
625    *        |WifiDebugRingBufferStatus|.
626    * @return status WifiStatus of the operation.
627    *         Possible status codes:
628    *         |WifiStatusCode.SUCCESS|,
629    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
630    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
631    *         |WifiStatusCode.ERROR_NOT_STARTED|,
632    *         |WifiStatusCode.NOT_AVAILABLE|,
633    *         |WifiStatusCode.UNKNOWN|
634    */
635   forceDumpToDebugRingBuffer(string ringName) generates (WifiStatus status);
636
637   /**
638    * API to stop the debug data collection for all ring buffers.
639    *
640    * @return status WifiStatus of the operation.
641    *         Possible status codes:
642    *         |WifiStatusCode.SUCCESS|,
643    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
644    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
645    *         |WifiStatusCode.NOT_AVAILABLE|,
646    *         |WifiStatusCode.UNKNOWN|
647    */
648   stopLoggingToDebugRingBuffer() generates (WifiStatus status);
649
650   /**
651    * API to retrieve the wifi wake up reason stats for debugging.
652    * The driver is expected to start maintaining these stats once the chip
653    * is configured using |configureChip|. These stats must be reset whenever
654    * the chip is reconfigured or the HAL is stopped.
655    *
656    * @return status WifiStatus of the operation.
657    *         Possible status codes:
658    *         |WifiStatusCode.SUCCESS|,
659    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
660    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
661    *         |WifiStatusCode.NOT_AVAILABLE|,
662    *         |WifiStatusCode.UNKNOWN|
663    * @return stats Instance of |WifiDebugHostWakeReasonStats|.
664    */
665   getDebugHostWakeReasonStats()
666       generates (WifiStatus status, WifiDebugHostWakeReasonStats stats);
667
668   /**
669    * API to enable/disable alert notifications from the chip.
670    * These alerts must be used to notify framework of any fatal error events
671    * that the chip encounters via |IWifiChipEventCallback.onDebugErrorAlert| method.
672    * Must fail if |ChipCapabilityMask.DEBUG_ERROR_ALERTS| is not set.
673    *
674    * @param enable true to enable, false to disable.
675    * @return status WifiStatus of the operation.
676    *         Possible status codes:
677    *         |WifiStatusCode.SUCCESS|,
678    *         |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
679    *         |WifiStatusCode.ERROR_NOT_SUPPORTED|,
680    *         |WifiStatusCode.NOT_AVAILABLE|,
681    *         |WifiStatusCode.UNKNOWN|
682    */
683   enableDebugErrorAlerts(bool enable) generates (WifiStatus status);
684 };