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 * Copyright(c) 2016 Intel Deutschland GmbH 11 * 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: 30 * Intel Linux Wireless <linuxwifi@intel.com> 31 * 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__ 69#include "fw-api-mac.h" 70 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; 136 __le32 rxe_frame_lmt_overrun; 137 __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 223struct mvm_statistics_general_v8 { 224 __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; 241 u8 beacon_filter_average_energy; 242 u8 beacon_filter_reason; 243 u8 beacon_filter_current_energy; 244 u8 beacon_filter_reserved; 245 __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; 251 __le32 beacon_counter[NUM_MAC_INDEX]; 252 u8 beacon_average_energy[NUM_MAC_INDEX]; 253 u8 reserved[4 - (NUM_MAC_INDEX % 4)]; 254} __packed; /* STATISTICS_GENERAL_API_S_VER_8 */ 255 256/** 257 * struct mvm_statistics_load - RX statistics for multi-queue devices 258 * @air_time: accumulated air time, per mac 259 * @byte_count: accumulated byte count, per mac 260 * @pkt_count: accumulated packet count, per mac 261 * @avg_energy: average RSSI, per station 262 */ 263struct mvm_statistics_load { 264 __le32 air_time[NUM_MAC_INDEX]; 265 __le32 byte_count[NUM_MAC_INDEX]; 266 __le32 pkt_count[NUM_MAC_INDEX]; 267 u8 avg_energy[IWL_MVM_STATION_COUNT]; 268} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */ 269 270struct mvm_statistics_rx { 271 struct mvm_statistics_rx_phy ofdm; 272 struct mvm_statistics_rx_phy cck; 273 struct mvm_statistics_rx_non_phy general; 274 struct mvm_statistics_rx_ht_phy ofdm_ht; 275} __packed; /* STATISTICS_RX_API_S_VER_3 */ 276 277/* 278 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command) 279 * 280 * By default, uCode issues this notification after receiving a beacon 281 * while associated. To disable this behavior, set DISABLE_NOTIF flag in the 282 * STATISTICS_CMD (0x9c), below. 283 */ 284struct iwl_notif_statistics_v10 { 285 __le32 flag; 286 struct mvm_statistics_rx rx; 287 struct mvm_statistics_tx tx; 288 struct mvm_statistics_general_v8 general; 289} __packed; /* STATISTICS_NTFY_API_S_VER_10 */ 290 291struct iwl_notif_statistics_v11 { 292 __le32 flag; 293 struct mvm_statistics_rx rx; 294 struct mvm_statistics_tx tx; 295 struct mvm_statistics_general_v8 general; 296 struct mvm_statistics_load load_stats; 297} __packed; /* STATISTICS_NTFY_API_S_VER_11 */ 298 299#define IWL_STATISTICS_FLG_CLEAR 0x1 300#define IWL_STATISTICS_FLG_DISABLE_NOTIF 0x2 301 302struct iwl_statistics_cmd { 303 __le32 flags; 304} __packed; /* STATISTICS_CMD_API_S_VER_1 */ 305 306#endif /* __fw_api_stats_h__ */ 307