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