1 /*
2 * Copyright (c) 2014-2019, 2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 #if !defined(__I_HOST_DIAG_CORE_EVENT_H)
21 #define __I_HOST_DIAG_CORE_EVENT_H
22
23 /**=========================================================================
24
25 \file i_host_diag_core_event.h
26
27 \brief Android specific definitions for WLAN UTIL DIAG events
28
29 ========================================================================*/
30
31 /* $Header$ */
32
33 /*--------------------------------------------------------------------------
34 Include Files
35 ------------------------------------------------------------------------*/
36 #include <qdf_types.h>
37 #ifdef FEATURE_WLAN_DIAG_SUPPORT
38 #include <host_diag_event_defs.h>
39 #endif
40
41 /*--------------------------------------------------------------------------
42 Preprocessor definitions and constants
43 ------------------------------------------------------------------------*/
44
45 #ifdef __cplusplus
46 extern "C" {
47 #endif /* __cplusplus */
48
49 #ifdef FEATURE_WLAN_DIAG_SUPPORT
50
51 void host_diag_event_report_payload(uint16_t event_Id, uint16_t length,
52 void *pPayload);
53 /*---------------------------------------------------------------------------
54 Allocate an event payload holder
55 ---------------------------------------------------------------------------*/
56 #define WLAN_HOST_DIAG_EVENT_DEF(payload_name, payload_type) \
57 payload_type(payload_name)
58
59 /*---------------------------------------------------------------------------
60 Report the event
61 ---------------------------------------------------------------------------*/
62 #define WLAN_HOST_DIAG_EVENT_REPORT(payload_ptr, ev_id) \
63 do { \
64 host_diag_event_report_payload(ev_id, \
65 sizeof(*(payload_ptr)), \
66 (void *)(payload_ptr)); \
67 } while (0)
68
69 #else /* FEATURE_WLAN_DIAG_SUPPORT */
70
71 #define WLAN_HOST_DIAG_EVENT_DEF(payload_name, payload_type)
72 #define WLAN_HOST_DIAG_EVENT_REPORT(payload_ptr, ev_id)
73
74 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
75
76 /**
77 * enum auth_timeout_type - authentication timeout type
78 * @AUTH_FAILURE_TIMEOUT: auth failure timeout
79 * @AUTH_RESPONSE_TIMEOUT: auth response timeout
80 */
81 enum auth_timeout_type {
82 AUTH_FAILURE_TIMEOUT,
83 AUTH_RESPONSE_TIMEOUT,
84 };
85
86 #ifdef CONNECTIVITY_DIAG_EVENT
87 /**
88 * enum diag_roam_reason - Represents the reason codes for roaming.
89 * @DIAG_ROAM_REASON_UNKNOWN: Any reason that do not classify under the below
90 * reasons.
91 * @DIAG_ROAM_REASON_PER: Roam triggered when packet error rates(PER) breached
92 * the configured threshold.
93 * @DIAG_ROAM_REASON_BEACON_MISS: Roam triggered due to the continuous
94 * configured beacon misses from the then connected AP.
95 * @DIAG_ROAM_REASON_POOR_RSSI: Roam triggered due to the poor RSSI reported
96 * by the connected AP.
97 * @DIAG_ROAM_REASON_BETTER_RSSI: Roam triggered for finding a BSSID with a
98 * better RSSI than the connected BSSID. Here the RSSI of the current BSSID is
99 * not poor.
100 * @DIAG_ROAM_REASON_CONGESTION: Roam triggered considering the connected
101 * channel or environment being very noisy / congested.
102 * @DIAG_ROAM_REASON_USER_TRIGGER: Roam triggered due to an explicit request
103 * from the user (user space).
104 * @DIAG_ROAM_REASON_BTM: Roam triggered due to BTM request frame received from
105 * connected AP.
106 * @DIAG_ROAM_REASON_BSS_LOAD: Roam triggered due to the channel utilization
107 * breaching out the configured threshold.
108 * @DIAG_ROAM_REASON_WTC: Roam triggered due to Wireless to Cellular BSS
109 * transition request.
110 * @DIAG_ROAM_REASON_IDLE: Roam triggered when device is suspended,
111 * there is no data activity with the AP and the current rssi falls below a
112 * certain threshold.
113 * @DIAG_ROAM_REASON_DISCONNECTION: Roam triggered due to
114 * deauthentication or disassociation frames received from the connected AP.
115 * @DIAG_ROAM_REASON_PERIODIC_TIMER: Roam triggered as part of the periodic
116 * scan that happens when there is no candidate AP found during the poor
117 * RSSI scan trigger.
118 * @DIAG_ROAM_REASON_BACKGROUND_SCAN: Roam triggered based on the scan
119 * results obtained from an external scan (not aimed at roaming).
120 * @DIAG_ROAM_REASON_BT_ACTIVITY: Roam triggered due to bluetooth
121 * connection is established when the station is connected in 2.4 Ghz band.
122 */
123 enum diag_roam_reason {
124 DIAG_ROAM_REASON_UNKNOWN,
125 DIAG_ROAM_REASON_PER,
126 DIAG_ROAM_REASON_BEACON_MISS,
127 DIAG_ROAM_REASON_POOR_RSSI,
128 DIAG_ROAM_REASON_BETTER_RSSI,
129 DIAG_ROAM_REASON_CONGESTION,
130 DIAG_ROAM_REASON_USER_TRIGGER,
131 DIAG_ROAM_REASON_BTM,
132 DIAG_ROAM_REASON_BSS_LOAD,
133 DIAG_ROAM_REASON_WTC,
134 DIAG_ROAM_REASON_IDLE,
135 DIAG_ROAM_REASON_DISCONNECTION,
136 DIAG_ROAM_REASON_PERIODIC_TIMER,
137 DIAG_ROAM_REASON_BACKGROUND_SCAN,
138 DIAG_ROAM_REASON_BT_ACTIVITY
139 };
140
141 /**
142 * enum diag_roam_sub_reason - Used by attribute
143 * @DIAG_ROAM_SUB_REASON_UNKNOWN: Roam sub-reason unknown/unspecified
144 * @DIAG_ROAM_SUB_REASON_PERIODIC_TIMER: Roam scan triggered due to periodic
145 * timer expiry
146 * @DIAG_ROAM_SUB_REASON_INACTIVITY_TIMER_LOW_RSSI: Roam scan trigger due
147 * to no candidate found during LOW RSSI trigger.
148 * @DIAG_ROAM_SUB_REASON_BTM_DI_TIMER: Roam scan triggered due to BTM Disassoc
149 * Imminent timeout
150 * @DIAG_ROAM_SUB_REASON_FULL_SCAN: Roam scan triggered due to partial scan
151 * failure
152 * @DIAG_ROAM_SUB_REASON_LOW_RSSI_PERIODIC: Roam trigger due to
153 * emergency like deauth/disassoc.
154 * @DIAG_ROAM_SUB_REASON_CU_PERIODIC: Roam trigger due to
155 * BSS transition management request.
156 * @DIAG_ROAM_SUB_REASON_PERIODIC_TIMER_AFTER_INACTIVITY_LOW_RSSI:
157 * Roam scan triggered due to Low RSSI periodic timer
158 * @DIAG_ROAM_SUB_REASON_PERIODIC_TIMER_AFTER_INACTIVITY_CU:
159 * Roam trigger due to periodic timer after no candidate found during CU
160 * inactivity timer scan.
161 * @DIAG_ROAM_SUB_REASON_INACTIVITY_TIMER_CU: Roam trigger due to no candidate
162 * found in high CU roam trigger.
163 */
164
165 enum diag_roam_sub_reason {
166 DIAG_ROAM_SUB_REASON_UNKNOWN = 0,
167 DIAG_ROAM_SUB_REASON_PERIODIC_TIMER = 1,
168 DIAG_ROAM_SUB_REASON_INACTIVITY_TIMER_LOW_RSSI = 2,
169 DIAG_ROAM_SUB_REASON_BTM_DI_TIMER = 3,
170 DIAG_ROAM_SUB_REASON_FULL_SCAN = 4,
171 DIAG_ROAM_SUB_REASON_LOW_RSSI_PERIODIC = 5,
172 DIAG_ROAM_SUB_REASON_CU_PERIODIC = 6,
173 DIAG_ROAM_SUB_REASON_PERIODIC_TIMER_AFTER_INACTIVITY_LOW_RSSI = 7,
174 DIAG_ROAM_SUB_REASON_PERIODIC_TIMER_AFTER_INACTIVITY_CU = 8,
175 DIAG_ROAM_SUB_REASON_INACTIVITY_TIMER_CU = 9,
176 };
177 #endif
178
179 /*-------------------------------------------------------------------------
180 Function declarations and documentation
181 ------------------------------------------------------------------------*/
182 #ifdef FEATURE_WLAN_DIAG_SUPPORT
183 void host_diag_log_wlock(uint32_t reason, const char *wake_lock_name,
184 uint32_t timeout, uint32_t status);
185 #else
host_diag_log_wlock(uint32_t reason,const char * wake_lock_name,uint32_t timeout,uint32_t status)186 static inline void host_diag_log_wlock(uint32_t reason,
187 const char *wake_lock_name,
188 uint32_t timeout, uint32_t status)
189 {
190
191 }
192 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
193
194 #ifdef FEATURE_WLAN_DIAG_SUPPORT
195 void host_log_low_resource_failure(uint8_t event_sub_type);
196 #else
host_log_low_resource_failure(uint8_t event_sub_type)197 static inline void host_log_low_resource_failure(uint8_t event_sub_type)
198 {
199
200 }
201 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
202
203 #ifdef FEATURE_WLAN_DIAG_SUPPORT
204 /**
205 * host_log_rsn_info() - This function is used to send
206 * requested rsn info in assoc request
207 * @ucast_cipher: Unicast ciphers used in assoc request
208 * @mcast_cipher: Group ciphers used in assoc request
209 * @auth_suite: Gives information about akm suites used in assoc request
210 * @gp_mgmt_cipher: Requested group mgmt cipher suite
211 *
212 * This function is used to send RSN info used in assoc req to user space
213 *
214 * Return: None
215 *
216 */
217 void host_log_rsn_info(uint8_t *ucast_cipher, uint8_t *mcast_cipher,
218 uint8_t *auth_suite, uint8_t *gp_mgmt_cipher);
219
220 #else
host_log_rsn_info(uint8_t * ucast_cipher,uint8_t * mcast_cipher,uint8_t * auth_suite,uint8_t * gp_mgmt_cipher)221 static inline void host_log_rsn_info(uint8_t *ucast_cipher,
222 uint8_t *mcast_cipher,
223 uint8_t *auth_suite,
224 uint8_t *gp_mgmt_cipher)
225 {
226
227 }
228
229 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
230
231 #ifdef FEATURE_WLAN_DIAG_SUPPORT
232 /**
233 * host_log_wlan_auth_info() - This function is used to send
234 * algo num, seq num and status code for auth request
235 * @auth_algo_num: Gives information about algo num used in auth request
236 * @auth_tx_seq_num: seq num of auth request
237 * @auth_status_code: status code of auth request
238 *
239 * This function is used to send send algo num, seq num and status code
240 * for auth request
241 *
242 * Return: None
243 *
244 */
245 void
246 host_log_wlan_auth_info(uint16_t auth_algo_num, uint16_t auth_tx_seq_num,
247 uint16_t auth_status_code);
248
249 #else
250 static inline void
host_log_wlan_auth_info(uint16_t auth_algo_num,uint16_t auth_tx_seq_num,uint16_t auth_status_code)251 host_log_wlan_auth_info(uint16_t auth_algo_num, uint16_t auth_tx_seq_num,
252 uint16_t auth_status_code)
253 {
254 }
255
256 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
257
258 #ifdef FEATURE_WLAN_DIAG_SUPPORT
259 void qdf_wow_wakeup_host_event(uint8_t wow_wakeup_cause);
260
261 /**
262 * host_log_acs_req_event() - ACS request event indication
263 * @intf: network interface name for WLAN
264 * @hw_mode: hw mode configured by hostapd
265 * @bw: channel bandwidth (MHz)
266 * @ht: a flag indicating whether HT phy mode is enabled
267 * @vht: a flag indicating whether VHT phy mode is enabled
268 * @chan_start: starting channel number for ACS scan
269 * @chan_end: ending channel number for ACS scan
270 *
271 * Indicates the diag event for ACS request with payload related
272 * to parameters populated by hostapd
273 *
274 * Return: None
275 */
276 void host_log_acs_req_event(uint8_t *intf, const uint8_t *hw_mode,
277 uint16_t bw, uint8_t ht, uint8_t vht,
278 uint16_t chan_start, uint16_t chan_end);
279
280 /**
281 * host_log_acs_scan_start() - ACS scan start event indication
282 * @scan_id: scan request ID
283 * @vdev_id: vdev/session ID
284 *
285 * Indicates the diag event for ACS scan start request
286 *
287 * Return: None
288 */
289 void host_log_acs_scan_start(uint32_t scan_id, uint8_t vdev_id);
290
291 /**
292 * host_log_acs_scan_done() - ACS scan done event indication
293 * @status: indicating whether ACS scan is successful
294 * @vdev_id: vdev/session ID
295 * @scan_id: scan request ID
296 *
297 * Indicates the diag event for ACS scan done
298 *
299 * Return: None
300 */
301 void host_log_acs_scan_done(const uint8_t *status, uint8_t vdev_id,
302 uint32_t scan_id);
303
304 /**
305 * host_log_acs_chan_spect_weight() - ACS channel spectral weight indication
306 * weight event indication
307 * @chan: channel number
308 * @weight: channel weight
309 * @rssi: RSSI value obtained after scanning
310 * @bss_count: number of BSS detected on this channel
311 *
312 * Indicates a diag event for ACS channel weight evaluation result
313 *
314 * Return: None
315 */
316 void host_log_acs_chan_spect_weight(uint16_t chan, uint16_t weight,
317 int32_t rssi, uint16_t bss_count);
318
319 /**
320 * host_log_acs_best_chan() - ACS best channel event indication
321 * @chan: channel number
322 * @weight: channel weight
323 *
324 * Indicates the best channel has been selected after ACS
325 *
326 * Return: None
327 */
328 void host_log_acs_best_chan(uint16_t chan, uint16_t weight);
329
330 /**
331 * host_log_device_status() - device status indication
332 * @status_code: status code from enum wlan_bringup_status
333 *
334 * Indicates device status
335 *
336 * Return: None
337 */
338 void host_log_device_status(uint16_t status_code);
339
340 #else
qdf_wow_wakeup_host_event(uint8_t wow_wakeup_cause)341 static inline void qdf_wow_wakeup_host_event(uint8_t wow_wakeup_cause)
342 {
343 return;
344 }
345
host_log_acs_req_event(uint8_t * intf,const uint8_t * hw_mode,uint16_t bw,uint8_t ht,uint8_t vht,uint16_t chan_start,uint16_t chan_end)346 static inline void host_log_acs_req_event(uint8_t *intf, const uint8_t *hw_mode,
347 uint16_t bw, uint8_t ht, uint8_t vht,
348 uint16_t chan_start,
349 uint16_t chan_end)
350 {
351 }
352
host_log_acs_scan_start(uint32_t scan_id,uint8_t vdev_id)353 static inline void host_log_acs_scan_start(uint32_t scan_id, uint8_t vdev_id)
354 {
355 }
356
host_log_acs_scan_done(const uint8_t * status,uint8_t vdev_id,uint32_t scan_id)357 static inline void host_log_acs_scan_done(const uint8_t *status,
358 uint8_t vdev_id, uint32_t scan_id)
359 {
360 }
361
host_log_acs_chan_spect_weight(uint16_t chan,uint16_t weight,int32_t rssi,uint16_t bss_count)362 static inline void host_log_acs_chan_spect_weight(uint16_t chan,
363 uint16_t weight, int32_t rssi,
364 uint16_t bss_count)
365 {
366 }
367
host_log_acs_best_chan(uint16_t chan,uint32_t weight)368 static inline void host_log_acs_best_chan(uint16_t chan, uint32_t weight)
369 {
370 }
371
host_log_device_status(uint16_t status_code)372 static inline void host_log_device_status(uint16_t status_code)
373 {
374 }
375 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
376 #ifdef __cplusplus
377 }
378 #endif /* __cplusplus */
379 #endif /* __I_HOST_DIAG_CORE_EVENT_H */
380