blob: 6371c342b96dc4795da26cde564fab562e365c8f [file] [log] [blame]
Johannes Bergd19ac582015-01-14 15:54:18 +01001/******************************************************************************
2 *
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
Sara Sharon988b5962016-04-10 15:06:55 +030010 * Copyright(c) 2016 Intel Deutschland GmbH
Johannes Bergd19ac582015-01-14 15:54:18 +010011 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of version 2 of the GNU General Public License as
14 * published by the Free Software Foundation.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
24 * USA
25 *
26 * The full GNU General Public License is included in this distribution
27 * in the file called COPYING.
28 *
29 * Contact Information:
Emmanuel Grumbachd01c5362015-11-17 15:39:56 +020030 * Intel Linux Wireless <linuxwifi@intel.com>
Johannes Bergd19ac582015-01-14 15:54:18 +010031 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
32 *
33 * BSD LICENSE
34 *
35 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
36 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
37 * All rights reserved.
38 *
39 * Redistribution and use in source and binary forms, with or without
40 * modification, are permitted provided that the following conditions
41 * are met:
42 *
43 * * Redistributions of source code must retain the above copyright
44 * notice, this list of conditions and the following disclaimer.
45 * * Redistributions in binary form must reproduce the above copyright
46 * notice, this list of conditions and the following disclaimer in
47 * the documentation and/or other materials provided with the
48 * distribution.
49 * * Neither the name Intel Corporation nor the names of its
50 * contributors may be used to endorse or promote products derived
51 * from this software without specific prior written permission.
52 *
53 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
54 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
55 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
56 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
57 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
58 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
59 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
60 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
61 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
62 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
63 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64 *
65 *****************************************************************************/
66
67#ifndef __fw_api_stats_h__
68#define __fw_api_stats_h__
Johannes Berg777c9b62015-01-14 17:58:57 +010069#include "fw-api-mac.h"
Johannes Bergd19ac582015-01-14 15:54:18 +010070
71struct mvm_statistics_dbg {
72 __le32 burst_check;
73 __le32 burst_count;
74 __le32 wait_for_silence_timeout_cnt;
75 __le32 reserved[3];
76} __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
77
78struct mvm_statistics_div {
79 __le32 tx_on_a;
80 __le32 tx_on_b;
81 __le32 exec_time;
82 __le32 probe_time;
83 __le32 rssi_ant;
84 __le32 reserved2;
85} __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
86
87struct mvm_statistics_rx_non_phy {
88 __le32 bogus_cts; /* CTS received when not expecting CTS */
89 __le32 bogus_ack; /* ACK received when not expecting ACK */
90 __le32 non_bssid_frames; /* number of frames with BSSID that
91 * doesn't belong to the STA BSSID */
92 __le32 filtered_frames; /* count frames that were dumped in the
93 * filtering process */
94 __le32 non_channel_beacons; /* beacons with our bss id but not on
95 * our serving channel */
96 __le32 channel_beacons; /* beacons with our bss id and in our
97 * serving channel */
98 __le32 num_missed_bcon; /* number of missed beacons */
99 __le32 adc_rx_saturation_time; /* count in 0.8us units the time the
100 * ADC was in saturation */
101 __le32 ina_detection_search_time;/* total time (in 0.8us) searched
102 * for INA */
103 __le32 beacon_silence_rssi_a; /* RSSI silence after beacon frame */
104 __le32 beacon_silence_rssi_b; /* RSSI silence after beacon frame */
105 __le32 beacon_silence_rssi_c; /* RSSI silence after beacon frame */
106 __le32 interference_data_flag; /* flag for interference data
107 * availability. 1 when data is
108 * available. */
109 __le32 channel_load; /* counts RX Enable time in uSec */
110 __le32 dsp_false_alarms; /* DSP false alarm (both OFDM
111 * and CCK) counter */
112 __le32 beacon_rssi_a;
113 __le32 beacon_rssi_b;
114 __le32 beacon_rssi_c;
115 __le32 beacon_energy_a;
116 __le32 beacon_energy_b;
117 __le32 beacon_energy_c;
118 __le32 num_bt_kills;
119 __le32 mac_id;
120 __le32 directed_data_mpdu;
121} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
122
123struct mvm_statistics_rx_phy {
124 __le32 ina_cnt;
125 __le32 fina_cnt;
126 __le32 plcp_err;
127 __le32 crc32_err;
128 __le32 overrun_err;
129 __le32 early_overrun_err;
130 __le32 crc32_good;
131 __le32 false_alarm_cnt;
132 __le32 fina_sync_err_cnt;
133 __le32 sfd_timeout;
134 __le32 fina_timeout;
135 __le32 unresponded_rts;
Johannes Berg93d17cc2015-01-15 12:59:26 +0100136 __le32 rxe_frame_lmt_overrun;
Johannes Bergd19ac582015-01-14 15:54:18 +0100137 __le32 sent_ack_cnt;
138 __le32 sent_cts_cnt;
139 __le32 sent_ba_rsp_cnt;
140 __le32 dsp_self_kill;
141 __le32 mh_format_err;
142 __le32 re_acq_main_rssi_sum;
143 __le32 reserved;
144} __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
145
146struct mvm_statistics_rx_ht_phy {
147 __le32 plcp_err;
148 __le32 overrun_err;
149 __le32 early_overrun_err;
150 __le32 crc32_good;
151 __le32 crc32_err;
152 __le32 mh_format_err;
153 __le32 agg_crc32_good;
154 __le32 agg_mpdu_cnt;
155 __le32 agg_cnt;
156 __le32 unsupport_mcs;
157} __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
158
159struct mvm_statistics_tx_non_phy {
160 __le32 preamble_cnt;
161 __le32 rx_detected_cnt;
162 __le32 bt_prio_defer_cnt;
163 __le32 bt_prio_kill_cnt;
164 __le32 few_bytes_cnt;
165 __le32 cts_timeout;
166 __le32 ack_timeout;
167 __le32 expected_ack_cnt;
168 __le32 actual_ack_cnt;
169 __le32 dump_msdu_cnt;
170 __le32 burst_abort_next_frame_mismatch_cnt;
171 __le32 burst_abort_missing_next_frame_cnt;
172 __le32 cts_timeout_collision;
173 __le32 ack_or_ba_timeout_collision;
174} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
175
176#define MAX_CHAINS 3
177
178struct mvm_statistics_tx_non_phy_agg {
179 __le32 ba_timeout;
180 __le32 ba_reschedule_frames;
181 __le32 scd_query_agg_frame_cnt;
182 __le32 scd_query_no_agg;
183 __le32 scd_query_agg;
184 __le32 scd_query_mismatch;
185 __le32 frame_not_ready;
186 __le32 underrun;
187 __le32 bt_prio_kill;
188 __le32 rx_ba_rsp_cnt;
189 __s8 txpower[MAX_CHAINS];
190 __s8 reserved;
191 __le32 reserved2;
192} __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
193
194struct mvm_statistics_tx_channel_width {
195 __le32 ext_cca_narrow_ch20[1];
196 __le32 ext_cca_narrow_ch40[2];
197 __le32 ext_cca_narrow_ch80[3];
198 __le32 ext_cca_narrow_ch160[4];
199 __le32 last_tx_ch_width_indx;
200 __le32 rx_detected_per_ch_width[4];
201 __le32 success_per_ch_width[4];
202 __le32 fail_per_ch_width[4];
203}; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
204
205struct mvm_statistics_tx {
206 struct mvm_statistics_tx_non_phy general;
207 struct mvm_statistics_tx_non_phy_agg agg;
208 struct mvm_statistics_tx_channel_width channel_width;
209} __packed; /* STATISTICS_TX_API_S_VER_4 */
210
211
212struct mvm_statistics_bt_activity {
213 __le32 hi_priority_tx_req_cnt;
214 __le32 hi_priority_tx_denied_cnt;
215 __le32 lo_priority_tx_req_cnt;
216 __le32 lo_priority_tx_denied_cnt;
217 __le32 hi_priority_rx_req_cnt;
218 __le32 hi_priority_rx_denied_cnt;
219 __le32 lo_priority_rx_req_cnt;
220 __le32 lo_priority_rx_denied_cnt;
221} __packed; /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
222
Sara Sharon0e7ac012016-09-08 17:32:19 +0300223struct mvm_statistics_general_common {
Johannes Berg777c9b62015-01-14 17:58:57 +0100224 __le32 radio_temperature;
225 __le32 radio_voltage;
226 struct mvm_statistics_dbg dbg;
227 __le32 sleep_time;
228 __le32 slots_out;
229 __le32 slots_idle;
230 __le32 ttl_timestamp;
231 struct mvm_statistics_div slow_div;
232 __le32 rx_enable_counter;
233 /*
234 * num_of_sos_states:
235 * count the number of times we have to re-tune
236 * in order to get out of bad PHY status
237 */
238 __le32 num_of_sos_states;
239 __le32 beacon_filtered;
240 __le32 missed_beacons;
Sara Sharon62e004f2015-08-20 14:12:58 +0300241 u8 beacon_filter_average_energy;
242 u8 beacon_filter_reason;
243 u8 beacon_filter_current_energy;
244 u8 beacon_filter_reserved;
Johannes Berg777c9b62015-01-14 17:58:57 +0100245 __le32 beacon_filter_delta_time;
246 struct mvm_statistics_bt_activity bt_activity;
247 __le64 rx_time;
248 __le64 on_time_rf;
249 __le64 on_time_scan;
250 __le64 tx_time;
Sara Sharon0e7ac012016-09-08 17:32:19 +0300251} __packed;
252
253struct mvm_statistics_general_v8 {
254 struct mvm_statistics_general_common common;
Johannes Berg777c9b62015-01-14 17:58:57 +0100255 __le32 beacon_counter[NUM_MAC_INDEX];
256 u8 beacon_average_energy[NUM_MAC_INDEX];
257 u8 reserved[4 - (NUM_MAC_INDEX % 4)];
258} __packed; /* STATISTICS_GENERAL_API_S_VER_8 */
259
Sara Sharon0e7ac012016-09-08 17:32:19 +0300260struct mvm_statistics_general_cdb {
261 struct mvm_statistics_general_common common;
262 __le32 beacon_counter[NUM_MAC_INDEX_CDB];
263 u8 beacon_average_energy[NUM_MAC_INDEX_CDB];
264 u8 reserved[4 - (NUM_MAC_INDEX_CDB % 4)];
265} __packed; /* STATISTICS_GENERAL_API_S_VER_9 */
266
Sara Sharon988b5962016-04-10 15:06:55 +0300267/**
268 * struct mvm_statistics_load - RX statistics for multi-queue devices
269 * @air_time: accumulated air time, per mac
270 * @byte_count: accumulated byte count, per mac
271 * @pkt_count: accumulated packet count, per mac
272 * @avg_energy: average RSSI, per station
273 */
274struct mvm_statistics_load {
275 __le32 air_time[NUM_MAC_INDEX];
276 __le32 byte_count[NUM_MAC_INDEX];
277 __le32 pkt_count[NUM_MAC_INDEX];
278 u8 avg_energy[IWL_MVM_STATION_COUNT];
279} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */
280
Sara Sharon0e7ac012016-09-08 17:32:19 +0300281struct mvm_statistics_load_cdb {
282 __le32 air_time[NUM_MAC_INDEX_CDB];
283 __le32 byte_count[NUM_MAC_INDEX_CDB];
284 __le32 pkt_count[NUM_MAC_INDEX_CDB];
285 u8 avg_energy[IWL_MVM_STATION_COUNT];
286} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_2 */
287
Johannes Bergd19ac582015-01-14 15:54:18 +0100288struct mvm_statistics_rx {
289 struct mvm_statistics_rx_phy ofdm;
290 struct mvm_statistics_rx_phy cck;
291 struct mvm_statistics_rx_non_phy general;
292 struct mvm_statistics_rx_ht_phy ofdm_ht;
293} __packed; /* STATISTICS_RX_API_S_VER_3 */
294
295/*
296 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
297 *
298 * By default, uCode issues this notification after receiving a beacon
299 * while associated. To disable this behavior, set DISABLE_NOTIF flag in the
Johannes Berg91a8bcd2015-01-14 18:12:41 +0100300 * STATISTICS_CMD (0x9c), below.
Johannes Bergd19ac582015-01-14 15:54:18 +0100301 */
Sara Sharon0e7ac012016-09-08 17:32:19 +0300302
Johannes Berg777c9b62015-01-14 17:58:57 +0100303struct iwl_notif_statistics_v10 {
304 __le32 flag;
305 struct mvm_statistics_rx rx;
306 struct mvm_statistics_tx tx;
307 struct mvm_statistics_general_v8 general;
308} __packed; /* STATISTICS_NTFY_API_S_VER_10 */
309
Sara Sharon988b5962016-04-10 15:06:55 +0300310struct iwl_notif_statistics_v11 {
311 __le32 flag;
312 struct mvm_statistics_rx rx;
313 struct mvm_statistics_tx tx;
314 struct mvm_statistics_general_v8 general;
315 struct mvm_statistics_load load_stats;
316} __packed; /* STATISTICS_NTFY_API_S_VER_11 */
317
Sara Sharon0e7ac012016-09-08 17:32:19 +0300318struct iwl_notif_statistics_cdb {
319 __le32 flag;
320 struct mvm_statistics_rx rx;
321 struct mvm_statistics_tx tx;
322 struct mvm_statistics_general_cdb general;
323 struct mvm_statistics_load_cdb load_stats;
324} __packed; /* STATISTICS_NTFY_API_S_VER_12 */
325
Johannes Berg91a8bcd2015-01-14 18:12:41 +0100326#define IWL_STATISTICS_FLG_CLEAR 0x1
327#define IWL_STATISTICS_FLG_DISABLE_NOTIF 0x2
328
329struct iwl_statistics_cmd {
330 __le32 flags;
331} __packed; /* STATISTICS_CMD_API_S_VER_1 */
332
Johannes Bergd19ac582015-01-14 15:54:18 +0100333#endif /* __fw_api_stats_h__ */