]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h
Merge tag 'efi-urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming...
[karo-tx-linux.git] / drivers / net / wireless / iwlwifi / mvm / fw-api-stats.h
1 /******************************************************************************
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
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of version 2 of the GNU General Public License as
13  * published by the Free Software Foundation.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
23  * USA
24  *
25  * The full GNU General Public License is included in this distribution
26  * in the file called COPYING.
27  *
28  * Contact Information:
29  *  Intel Linux Wireless <ilw@linux.intel.com>
30  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
31  *
32  * BSD LICENSE
33  *
34  * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
35  * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
36  * All rights reserved.
37  *
38  * Redistribution and use in source and binary forms, with or without
39  * modification, are permitted provided that the following conditions
40  * are met:
41  *
42  *  * Redistributions of source code must retain the above copyright
43  *    notice, this list of conditions and the following disclaimer.
44  *  * Redistributions in binary form must reproduce the above copyright
45  *    notice, this list of conditions and the following disclaimer in
46  *    the documentation and/or other materials provided with the
47  *    distribution.
48  *  * Neither the name Intel Corporation nor the names of its
49  *    contributors may be used to endorse or promote products derived
50  *    from this software without specific prior written permission.
51  *
52  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
53  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
54  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
55  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
56  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
57  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
58  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
59  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
60  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
61  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
62  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63  *
64  *****************************************************************************/
65
66 #ifndef __fw_api_stats_h__
67 #define __fw_api_stats_h__
68
69 struct mvm_statistics_dbg {
70         __le32 burst_check;
71         __le32 burst_count;
72         __le32 wait_for_silence_timeout_cnt;
73         __le32 reserved[3];
74 } __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
75
76 struct mvm_statistics_div {
77         __le32 tx_on_a;
78         __le32 tx_on_b;
79         __le32 exec_time;
80         __le32 probe_time;
81         __le32 rssi_ant;
82         __le32 reserved2;
83 } __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
84
85 struct mvm_statistics_rx_non_phy {
86         __le32 bogus_cts;       /* CTS received when not expecting CTS */
87         __le32 bogus_ack;       /* ACK received when not expecting ACK */
88         __le32 non_bssid_frames;        /* number of frames with BSSID that
89                                          * doesn't belong to the STA BSSID */
90         __le32 filtered_frames; /* count frames that were dumped in the
91                                  * filtering process */
92         __le32 non_channel_beacons;     /* beacons with our bss id but not on
93                                          * our serving channel */
94         __le32 channel_beacons; /* beacons with our bss id and in our
95                                  * serving channel */
96         __le32 num_missed_bcon; /* number of missed beacons */
97         __le32 adc_rx_saturation_time;  /* count in 0.8us units the time the
98                                          * ADC was in saturation */
99         __le32 ina_detection_search_time;/* total time (in 0.8us) searched
100                                           * for INA */
101         __le32 beacon_silence_rssi_a;   /* RSSI silence after beacon frame */
102         __le32 beacon_silence_rssi_b;   /* RSSI silence after beacon frame */
103         __le32 beacon_silence_rssi_c;   /* RSSI silence after beacon frame */
104         __le32 interference_data_flag;  /* flag for interference data
105                                          * availability. 1 when data is
106                                          * available. */
107         __le32 channel_load;            /* counts RX Enable time in uSec */
108         __le32 dsp_false_alarms;        /* DSP false alarm (both OFDM
109                                          * and CCK) counter */
110         __le32 beacon_rssi_a;
111         __le32 beacon_rssi_b;
112         __le32 beacon_rssi_c;
113         __le32 beacon_energy_a;
114         __le32 beacon_energy_b;
115         __le32 beacon_energy_c;
116         __le32 num_bt_kills;
117         __le32 mac_id;
118         __le32 directed_data_mpdu;
119 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
120
121 struct mvm_statistics_rx_phy {
122         __le32 ina_cnt;
123         __le32 fina_cnt;
124         __le32 plcp_err;
125         __le32 crc32_err;
126         __le32 overrun_err;
127         __le32 early_overrun_err;
128         __le32 crc32_good;
129         __le32 false_alarm_cnt;
130         __le32 fina_sync_err_cnt;
131         __le32 sfd_timeout;
132         __le32 fina_timeout;
133         __le32 unresponded_rts;
134         __le32 rxe_frame_lmt_overrun;
135         __le32 sent_ack_cnt;
136         __le32 sent_cts_cnt;
137         __le32 sent_ba_rsp_cnt;
138         __le32 dsp_self_kill;
139         __le32 mh_format_err;
140         __le32 re_acq_main_rssi_sum;
141         __le32 reserved;
142 } __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
143
144 struct mvm_statistics_rx_ht_phy {
145         __le32 plcp_err;
146         __le32 overrun_err;
147         __le32 early_overrun_err;
148         __le32 crc32_good;
149         __le32 crc32_err;
150         __le32 mh_format_err;
151         __le32 agg_crc32_good;
152         __le32 agg_mpdu_cnt;
153         __le32 agg_cnt;
154         __le32 unsupport_mcs;
155 } __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
156
157 struct mvm_statistics_tx_non_phy {
158         __le32 preamble_cnt;
159         __le32 rx_detected_cnt;
160         __le32 bt_prio_defer_cnt;
161         __le32 bt_prio_kill_cnt;
162         __le32 few_bytes_cnt;
163         __le32 cts_timeout;
164         __le32 ack_timeout;
165         __le32 expected_ack_cnt;
166         __le32 actual_ack_cnt;
167         __le32 dump_msdu_cnt;
168         __le32 burst_abort_next_frame_mismatch_cnt;
169         __le32 burst_abort_missing_next_frame_cnt;
170         __le32 cts_timeout_collision;
171         __le32 ack_or_ba_timeout_collision;
172 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
173
174 #define MAX_CHAINS 3
175
176 struct mvm_statistics_tx_non_phy_agg {
177         __le32 ba_timeout;
178         __le32 ba_reschedule_frames;
179         __le32 scd_query_agg_frame_cnt;
180         __le32 scd_query_no_agg;
181         __le32 scd_query_agg;
182         __le32 scd_query_mismatch;
183         __le32 frame_not_ready;
184         __le32 underrun;
185         __le32 bt_prio_kill;
186         __le32 rx_ba_rsp_cnt;
187         __s8 txpower[MAX_CHAINS];
188         __s8 reserved;
189         __le32 reserved2;
190 } __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
191
192 struct mvm_statistics_tx_channel_width {
193         __le32 ext_cca_narrow_ch20[1];
194         __le32 ext_cca_narrow_ch40[2];
195         __le32 ext_cca_narrow_ch80[3];
196         __le32 ext_cca_narrow_ch160[4];
197         __le32 last_tx_ch_width_indx;
198         __le32 rx_detected_per_ch_width[4];
199         __le32 success_per_ch_width[4];
200         __le32 fail_per_ch_width[4];
201 }; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
202
203 struct mvm_statistics_tx {
204         struct mvm_statistics_tx_non_phy general;
205         struct mvm_statistics_tx_non_phy_agg agg;
206         struct mvm_statistics_tx_channel_width channel_width;
207 } __packed; /* STATISTICS_TX_API_S_VER_4 */
208
209
210 struct mvm_statistics_bt_activity {
211         __le32 hi_priority_tx_req_cnt;
212         __le32 hi_priority_tx_denied_cnt;
213         __le32 lo_priority_tx_req_cnt;
214         __le32 lo_priority_tx_denied_cnt;
215         __le32 hi_priority_rx_req_cnt;
216         __le32 hi_priority_rx_denied_cnt;
217         __le32 lo_priority_rx_req_cnt;
218         __le32 lo_priority_rx_denied_cnt;
219 } __packed;  /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
220
221 struct mvm_statistics_general {
222         __le32 radio_temperature;
223         __le32 radio_voltage;
224         struct mvm_statistics_dbg dbg;
225         __le32 sleep_time;
226         __le32 slots_out;
227         __le32 slots_idle;
228         __le32 ttl_timestamp;
229         struct mvm_statistics_div slow_div;
230         __le32 rx_enable_counter;
231         /*
232          * num_of_sos_states:
233          *  count the number of times we have to re-tune
234          *  in order to get out of bad PHY status
235          */
236         __le32 num_of_sos_states;
237         __le32 beacon_filtered;
238         __le32 missed_beacons;
239         __s8 beacon_filter_average_energy;
240         __s8 beacon_filter_reason;
241         __s8 beacon_filter_current_energy;
242         __s8 beacon_filter_reserved;
243         __le32 beacon_filter_delta_time;
244         struct mvm_statistics_bt_activity bt_activity;
245 } __packed; /* STATISTICS_GENERAL_API_S_VER_5 */
246
247 struct mvm_statistics_rx {
248         struct mvm_statistics_rx_phy ofdm;
249         struct mvm_statistics_rx_phy cck;
250         struct mvm_statistics_rx_non_phy general;
251         struct mvm_statistics_rx_ht_phy ofdm_ht;
252 } __packed; /* STATISTICS_RX_API_S_VER_3 */
253
254 /*
255  * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
256  *
257  * By default, uCode issues this notification after receiving a beacon
258  * while associated.  To disable this behavior, set DISABLE_NOTIF flag in the
259  * REPLY_STATISTICS_CMD 0x9c, above.
260  *
261  * Statistics counters continue to increment beacon after beacon, but are
262  * cleared when changing channels or when driver issues REPLY_STATISTICS_CMD
263  * 0x9c with CLEAR_STATS bit set (see above).
264  *
265  * uCode also issues this notification during scans.  uCode clears statistics
266  * appropriately so that each notification contains statistics for only the
267  * one channel that has just been scanned.
268  */
269
270 struct iwl_notif_statistics {
271         __le32 flag;
272         struct mvm_statistics_rx rx;
273         struct mvm_statistics_tx tx;
274         struct mvm_statistics_general general;
275 } __packed; /* STATISTICS_NTFY_API_S_VER_8 */
276
277 #endif /* __fw_api_stats_h__ */