xref: /wlan-dirver/qca-wifi-host-cmn/umac/cp_stats/dispatcher/inc/wlan_cp_stats_public_structs.h (revision 8cfe6b10058a04cafb17eed051f2ddf11bee8931)
1 /*
2  * Copyright (c) 2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 /**
19  * DOC: contains cp_stats structure definitions
20  */
21 
22 #ifndef _WLAN_CP_STATS_PUBLIC_STRUCTS_H_
23 #define _WLAN_CP_STATS_PUBLIC_STRUCTS_H_
24 
25 #define CTRL_PATH_STATS_MAX_MAC_ADDR 1
26 #define CTRL_PATH_STATS_MAX_PDEV_ID 1
27 #define CTRL_PATH_STATS_MAX_VDEV_ID 1
28 
29 
30 #define INFRA_CP_STATS_MAX_REQ_TWT_DIALOG_ID 1
31 
32 /*
33  * Maximum of 1 TWT session can be supported per vdev.
34  * This can be extended later to support more sessions.
35  * if there is a request to retrieve stats for all existing
36  * TWT sessions then response path can have multiple session
37  * stats.
38  */
39 #define INFRA_CP_STATS_MAX_RESP_TWT_DIALOG_ID 1
40 
41 #ifdef WLAN_SUPPORT_TWT
42 /**
43  * struct twt_infra_cp_stats_event - TWT statistics event structure
44  * @vdev_id: virtual interface id
45  * @peer_macaddr: peer mac address corresponding to a TWT session
46  * @dialog_id: Represents dialog_id of the TWT session
47  * @status:
48  * @num_sp_cycles: Number of TWT service period elapsed so far
49  * @avg_sp_dur_us: Average of actual wake duration observed so far
50  * @min_sp_dur_us: Minimum value of wake duration observed across
51  * @max_sp_dur_us: Maximum value of wake duration observed
52  * @tx_mpdu_per_sp: Average number of MPDU's transmitted successfully
53  * @rx_mpdu_per_sp: Average number of MPDU's received successfully
54  * @tx_bytes_per_sp: Average number of bytes transmitted successfully
55  * @rx_bytes_per_sp: Average number of bytes received successfully
56  */
57 struct twt_infra_cp_stats_event {
58 	uint8_t vdev_id;
59 	struct qdf_mac_addr peer_macaddr;
60 	uint32_t dialog_id;
61 	uint32_t status;
62 	uint32_t num_sp_cycles;
63 	uint32_t avg_sp_dur_us;
64 	uint32_t min_sp_dur_us;
65 	uint32_t max_sp_dur_us;
66 	uint32_t tx_mpdu_per_sp;
67 	uint32_t rx_mpdu_per_sp;
68 	uint32_t tx_bytes_per_sp;
69 	uint32_t rx_bytes_per_sp;
70 };
71 #endif /* WLAN_SUPPORT_TWT */
72 
73 #ifdef CONFIG_WLAN_BMISS
74 /**
75  * struct bmiss_stats_rssi_samples - bmiss rssi samples structure
76  * @rssi: dBm units
77  * @sample_time: timestamp from host/target shared qtimer
78  */
79 struct bmiss_stats_rssi_samples {
80 	int32_t rssi;
81 	uint32_t sample_time;
82 };
83 
84 /**
85  * struct consecutive_bmiss_stats - consecutive bmiss sats structure
86  * @num_of_bmiss_sequences:number of consecutive bmiss > 2
87  * @num_bitmask_wraparound:number of times bitmask wrapped around
88  * @num_bcn_hist_lost:number of beacons history we have lost
89  */
90 struct consecutive_bmiss_stats {
91 	uint32_t num_of_bmiss_sequences;
92 	uint32_t num_bitmask_wraparound;
93 	uint32_t num_bcn_hist_lost;
94 };
95 
96 #define BMISS_STATS_RSSI_SAMPLES_MAX 10
97 /**
98  * struct bmiss_infra_cp_stats_event -  bmiss statistics event structure
99  * @vdev_id: virtual interface id
100  * @peer_macaddr: peer mac address
101  * @num_pre_bmiss: number of pre_bmiss
102  * @rssi_samples: Rssi samples at pre bmiss
103  * @rssi_sample_curr_index: current index of Rssi sampelse at pre bmiss
104  * @num_first_bmiss: number of first bmiss
105  * @num_final_bmiss: number of final bmiss
106  * @num_null_sent_in_first_bmiss: number of null frames sent in first bmiss
107  * @num_null_failed_in_first_bmiss: number of failed null frames in first bmiss
108  * @num_null_sent_in_final_bmiss: number of null frames sent in final bmiss
109  * @num_null_failed_in_final_bmiss: number of failed null frames in final bmiss
110  * @cons_bmiss_stats: consecutive bmiss status
111  */
112 struct bmiss_infra_cp_stats_event  {
113 	uint8_t vdev_id;
114 	struct qdf_mac_addr peer_macaddr;
115 	uint32_t num_pre_bmiss;
116 	struct bmiss_stats_rssi_samples rssi_samples[BMISS_STATS_RSSI_SAMPLES_MAX];
117 	uint32_t rssi_sample_curr_index;
118 	uint32_t num_first_bmiss;
119 	uint32_t num_final_bmiss;
120 	uint32_t num_null_sent_in_first_bmiss;
121 	uint32_t num_null_failed_in_first_bmiss;
122 	uint32_t num_null_sent_in_final_bmiss;
123 	uint32_t num_null_failed_in_final_bmiss;
124 	struct consecutive_bmiss_stats cons_bmiss_stats;
125 };
126 #endif /* CONFIG_WLAN_BMISS */
127 
128 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
129 /**
130  * struct ctrl_path_pmlo_telemetry_stats_struct - pmlo telemetry
131  * stats struct
132  * @pdev_id: pdev_id for identifying the PHY
133  * @dl_inbss_airtime_ac_be: ac_be airtime in dl inbss
134  * @dl_inbss_airtime_ac_bk: ac_bk airtime in dl inbss
135  * @dl_inbss_airtime_ac_vi: ac_vi airtime in dl inbss
136  * @dl_inbss_airtime_ac_vo: ac_vo airtime in dl inbss
137  * @ul_inbss_airtime_ac_be: ac_be airtime in ul inbss
138  * @ul_inbss_airtime_ac_bk: ac_bk airtime in ul inbss
139  * @ul_inbss_airtime_ac_vi: ac_vi airtime in ul inbss
140  * @ul_inbss_airtime_ac_vo: ac_vo airtime in ul inbss
141  * @estimated_air_time_ac_be: ac_be estimated air time
142  * @estimated_air_time_ac_bk: ac_bk estimated air time
143  * @estimated_air_time_ac_vi: ac_vi estimated air time
144  * @estimated_air_time_ac_vo: ac_vo estimated air time
145  * @avg_chan_lat_per_ac: array for Average channel latency per AC,
146  * units in micro seconds.
147  * @link_obss_airtime: Percentage of OBSS used air time per link,
148  * units in percentage.
149  * @link_idle_airtime: Idle/free airtime per link, units in percentage.
150  * @ul_inbss_airtime_non_ac: ul inBSS airtime occupied by non-AC traffic,
151  * units in percentage.
152  * @dl_inbss_airtime_non_ac: dl inBSS airtime occupied by non-AC traffic,
153  * units in percentage.
154  */
155 struct ctrl_path_pmlo_telemetry_stats_struct {
156 	uint32_t pdev_id;
157 	uint32_t dl_inbss_airtime_ac_be : 8,
158 		 dl_inbss_airtime_ac_bk : 8,
159 		 dl_inbss_airtime_ac_vi : 8,
160 		 dl_inbss_airtime_ac_vo : 8;
161 	uint32_t ul_inbss_airtime_ac_be : 8,
162 		 ul_inbss_airtime_ac_bk : 8,
163 		 ul_inbss_airtime_ac_vi : 8,
164 		 ul_inbss_airtime_ac_vo : 8;
165 	uint32_t estimated_air_time_ac_be : 8,
166 		 estimated_air_time_ac_bk : 8,
167 		 estimated_air_time_ac_vi : 8,
168 		 estimated_air_time_ac_vo : 8;
169 	uint32_t avg_chan_lat_per_ac[WIFI_AC_MAX];
170 	uint32_t link_obss_airtime : 8,
171 		 link_idle_airtime : 8,
172 		 ul_inbss_airtime_non_ac : 8,
173 		 dl_inbss_airtime_non_ac : 8;
174 };
175 #endif
176 
177 /**
178  * struct infra_cp_stats_event - Event structure to store stats
179  * @action: action for which this response was received
180  *          (get/reset/start/stop)
181  * @request_id: request cookie sent to Firmware in the command
182  * @status: status of the infra_cp_stats command processing
183  * @num_twt_infra_cp_stats: number of twt_infra_cp_stats buffers
184  *                          available
185  * @twt_infra_cp_stats: pointer to TWT session statistics structures
186  * @bmiss_infra_cp_stats: pointer to beacon miss statistics
187  * @ctrl_path_pmlo_telemetry_stats_struct: pointer to pmlo telemetry
188  *                                         stats struct
189  *
190  * This structure is used to store the statistics information
191  * extracted from firmware event(wmi_pdev_cp_fwstats_eventid)
192  */
193 struct infra_cp_stats_event {
194 	uint32_t action;
195 	uint32_t request_id;
196 	uint32_t status;
197 #ifdef WLAN_SUPPORT_TWT
198 	uint32_t num_twt_infra_cp_stats;
199 	struct twt_infra_cp_stats_event *twt_infra_cp_stats;
200 #endif
201 #ifdef CONFIG_WLAN_BMISS
202 	struct bmiss_infra_cp_stats_event *bmiss_infra_cp_stats;
203 #endif
204 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
205 	struct ctrl_path_pmlo_telemetry_stats_struct *telemetry_stats;
206 #endif
207 	/* Extend with other required infra_cp_stats structs */
208 };
209 
210 enum infra_cp_stats_action {
211 	ACTION_REQ_CTRL_PATH_STAT_GET = 0,
212 	ACTION_REQ_CTRL_PATH_STAT_RESET,
213 	ACTION_REQ_CTRL_PATH_STAT_START,
214 	ACTION_REQ_CTRL_PATH_STAT_STOP,
215 	ACTION_REQ_CTRL_PATH_STAT_PERIODIC_PUBLISH,
216 };
217 
218 enum infra_cp_stats_id {
219 	TYPE_REQ_CTRL_PATH_PDEV_TX_STAT = 0,
220 	TYPE_REQ_CTRL_PATH_VDEV_EXTD_STAT,
221 	TYPE_REQ_CTRL_PATH_MEM_STAT,
222 	TYPE_REQ_CTRL_PATH_TWT_STAT,
223 	TYPE_REQ_CTRL_PATH_BMISS_STAT,
224 	TYPE_REQ_CTRL_PATH_PMLO_STAT,
225 };
226 
227 /**
228  * struct infra_cp_stats_cmd_info - details of infra cp stats request
229  * @stats_id: ID of the statistics type requested
230  * @action: action to be performed (get/reset/start/stop)
231  * @request_cookie: osif request cookie
232  * @request_id: request id cookie to FW
233  * @num_pdev_ids: number of pdev ids in the request
234  * @pdev_id: array of pdev_ids
235  * @num_vdev_ids: number of vdev ids in the request
236  * @vdev_id: array of vdev_ids
237  * @num_mac_addr_list: number of mac addresses in the request
238  * @peer_mac_addr: array of mac addresses
239  * @dialog_id: This is a TWT specific field. only one dialog_id
240  *             can be specified for TWT stats. 0 to 254 are
241  *             valid dialog_id's representing a single TWT session.
242  *             255 represents all twt sessions
243  * @infra_cp_stats_resp_cb: callback function to handle the response
244  */
245 struct infra_cp_stats_cmd_info {
246 	enum infra_cp_stats_id stats_id;
247 	enum infra_cp_stats_action action;
248 	void *request_cookie;
249 	uint32_t request_id;
250 	uint32_t num_pdev_ids;
251 	uint32_t pdev_id[CTRL_PATH_STATS_MAX_PDEV_ID];
252 	uint32_t num_vdev_ids;
253 	uint32_t vdev_id[CTRL_PATH_STATS_MAX_VDEV_ID];
254 	uint32_t num_mac_addr_list;
255 	uint8_t peer_mac_addr[CTRL_PATH_STATS_MAX_MAC_ADDR][QDF_MAC_ADDR_SIZE];
256 #ifdef WLAN_SUPPORT_TWT
257 	uint32_t dialog_id;
258 #endif
259 	void (*infra_cp_stats_resp_cb)(struct infra_cp_stats_event *ev,
260 				       void *cookie);
261 	uint32_t stat_periodicity;
262 };
263 #endif
264