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