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 #include "fw-api-mac.h" 69 70 struct mvm_statistics_dbg { 71 __le32 burst_check; 72 __le32 burst_count; 73 __le32 wait_for_silence_timeout_cnt; 74 __le32 reserved[3]; 75 } __packed; /* STATISTICS_DEBUG_API_S_VER_2 */ 76 77 struct mvm_statistics_div { 78 __le32 tx_on_a; 79 __le32 tx_on_b; 80 __le32 exec_time; 81 __le32 probe_time; 82 __le32 rssi_ant; 83 __le32 reserved2; 84 } __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */ 85 86 struct mvm_statistics_rx_non_phy { 87 __le32 bogus_cts; /* CTS received when not expecting CTS */ 88 __le32 bogus_ack; /* ACK received when not expecting ACK */ 89 __le32 non_bssid_frames; /* number of frames with BSSID that 90 * doesn't belong to the STA BSSID */ 91 __le32 filtered_frames; /* count frames that were dumped in the 92 * filtering process */ 93 __le32 non_channel_beacons; /* beacons with our bss id but not on 94 * our serving channel */ 95 __le32 channel_beacons; /* beacons with our bss id and in our 96 * serving channel */ 97 __le32 num_missed_bcon; /* number of missed beacons */ 98 __le32 adc_rx_saturation_time; /* count in 0.8us units the time the 99 * ADC was in saturation */ 100 __le32 ina_detection_search_time;/* total time (in 0.8us) searched 101 * for INA */ 102 __le32 beacon_silence_rssi_a; /* RSSI silence after beacon frame */ 103 __le32 beacon_silence_rssi_b; /* RSSI silence after beacon frame */ 104 __le32 beacon_silence_rssi_c; /* RSSI silence after beacon frame */ 105 __le32 interference_data_flag; /* flag for interference data 106 * availability. 1 when data is 107 * available. */ 108 __le32 channel_load; /* counts RX Enable time in uSec */ 109 __le32 dsp_false_alarms; /* DSP false alarm (both OFDM 110 * and CCK) counter */ 111 __le32 beacon_rssi_a; 112 __le32 beacon_rssi_b; 113 __le32 beacon_rssi_c; 114 __le32 beacon_energy_a; 115 __le32 beacon_energy_b; 116 __le32 beacon_energy_c; 117 __le32 num_bt_kills; 118 __le32 mac_id; 119 __le32 directed_data_mpdu; 120 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */ 121 122 struct mvm_statistics_rx_phy { 123 __le32 ina_cnt; 124 __le32 fina_cnt; 125 __le32 plcp_err; 126 __le32 crc32_err; 127 __le32 overrun_err; 128 __le32 early_overrun_err; 129 __le32 crc32_good; 130 __le32 false_alarm_cnt; 131 __le32 fina_sync_err_cnt; 132 __le32 sfd_timeout; 133 __le32 fina_timeout; 134 __le32 unresponded_rts; 135 __le32 rxe_frame_lmt_overrun; 136 __le32 sent_ack_cnt; 137 __le32 sent_cts_cnt; 138 __le32 sent_ba_rsp_cnt; 139 __le32 dsp_self_kill; 140 __le32 mh_format_err; 141 __le32 re_acq_main_rssi_sum; 142 __le32 reserved; 143 } __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */ 144 145 struct mvm_statistics_rx_ht_phy { 146 __le32 plcp_err; 147 __le32 overrun_err; 148 __le32 early_overrun_err; 149 __le32 crc32_good; 150 __le32 crc32_err; 151 __le32 mh_format_err; 152 __le32 agg_crc32_good; 153 __le32 agg_mpdu_cnt; 154 __le32 agg_cnt; 155 __le32 unsupport_mcs; 156 } __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */ 157 158 struct mvm_statistics_tx_non_phy { 159 __le32 preamble_cnt; 160 __le32 rx_detected_cnt; 161 __le32 bt_prio_defer_cnt; 162 __le32 bt_prio_kill_cnt; 163 __le32 few_bytes_cnt; 164 __le32 cts_timeout; 165 __le32 ack_timeout; 166 __le32 expected_ack_cnt; 167 __le32 actual_ack_cnt; 168 __le32 dump_msdu_cnt; 169 __le32 burst_abort_next_frame_mismatch_cnt; 170 __le32 burst_abort_missing_next_frame_cnt; 171 __le32 cts_timeout_collision; 172 __le32 ack_or_ba_timeout_collision; 173 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */ 174 175 #define MAX_CHAINS 3 176 177 struct mvm_statistics_tx_non_phy_agg { 178 __le32 ba_timeout; 179 __le32 ba_reschedule_frames; 180 __le32 scd_query_agg_frame_cnt; 181 __le32 scd_query_no_agg; 182 __le32 scd_query_agg; 183 __le32 scd_query_mismatch; 184 __le32 frame_not_ready; 185 __le32 underrun; 186 __le32 bt_prio_kill; 187 __le32 rx_ba_rsp_cnt; 188 __s8 txpower[MAX_CHAINS]; 189 __s8 reserved; 190 __le32 reserved2; 191 } __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */ 192 193 struct mvm_statistics_tx_channel_width { 194 __le32 ext_cca_narrow_ch20[1]; 195 __le32 ext_cca_narrow_ch40[2]; 196 __le32 ext_cca_narrow_ch80[3]; 197 __le32 ext_cca_narrow_ch160[4]; 198 __le32 last_tx_ch_width_indx; 199 __le32 rx_detected_per_ch_width[4]; 200 __le32 success_per_ch_width[4]; 201 __le32 fail_per_ch_width[4]; 202 }; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */ 203 204 struct mvm_statistics_tx { 205 struct mvm_statistics_tx_non_phy general; 206 struct mvm_statistics_tx_non_phy_agg agg; 207 struct mvm_statistics_tx_channel_width channel_width; 208 } __packed; /* STATISTICS_TX_API_S_VER_4 */ 209 210 211 struct mvm_statistics_bt_activity { 212 __le32 hi_priority_tx_req_cnt; 213 __le32 hi_priority_tx_denied_cnt; 214 __le32 lo_priority_tx_req_cnt; 215 __le32 lo_priority_tx_denied_cnt; 216 __le32 hi_priority_rx_req_cnt; 217 __le32 hi_priority_rx_denied_cnt; 218 __le32 lo_priority_rx_req_cnt; 219 __le32 lo_priority_rx_denied_cnt; 220 } __packed; /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */ 221 222 struct mvm_statistics_general_v8 { 223 __le32 radio_temperature; 224 __le32 radio_voltage; 225 struct mvm_statistics_dbg dbg; 226 __le32 sleep_time; 227 __le32 slots_out; 228 __le32 slots_idle; 229 __le32 ttl_timestamp; 230 struct mvm_statistics_div slow_div; 231 __le32 rx_enable_counter; 232 /* 233 * num_of_sos_states: 234 * count the number of times we have to re-tune 235 * in order to get out of bad PHY status 236 */ 237 __le32 num_of_sos_states; 238 __le32 beacon_filtered; 239 __le32 missed_beacons; 240 u8 beacon_filter_average_energy; 241 u8 beacon_filter_reason; 242 u8 beacon_filter_current_energy; 243 u8 beacon_filter_reserved; 244 __le32 beacon_filter_delta_time; 245 struct mvm_statistics_bt_activity bt_activity; 246 __le64 rx_time; 247 __le64 on_time_rf; 248 __le64 on_time_scan; 249 __le64 tx_time; 250 __le32 beacon_counter[NUM_MAC_INDEX]; 251 u8 beacon_average_energy[NUM_MAC_INDEX]; 252 u8 reserved[4 - (NUM_MAC_INDEX % 4)]; 253 } __packed; /* STATISTICS_GENERAL_API_S_VER_8 */ 254 255 struct mvm_statistics_rx { 256 struct mvm_statistics_rx_phy ofdm; 257 struct mvm_statistics_rx_phy cck; 258 struct mvm_statistics_rx_non_phy general; 259 struct mvm_statistics_rx_ht_phy ofdm_ht; 260 } __packed; /* STATISTICS_RX_API_S_VER_3 */ 261 262 /* 263 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command) 264 * 265 * By default, uCode issues this notification after receiving a beacon 266 * while associated. To disable this behavior, set DISABLE_NOTIF flag in the 267 * STATISTICS_CMD (0x9c), below. 268 */ 269 270 struct iwl_notif_statistics_v10 { 271 __le32 flag; 272 struct mvm_statistics_rx rx; 273 struct mvm_statistics_tx tx; 274 struct mvm_statistics_general_v8 general; 275 } __packed; /* STATISTICS_NTFY_API_S_VER_10 */ 276 277 #define IWL_STATISTICS_FLG_CLEAR 0x1 278 #define IWL_STATISTICS_FLG_DISABLE_NOTIF 0x2 279 280 struct iwl_statistics_cmd { 281 __le32 flags; 282 } __packed; /* STATISTICS_CMD_API_S_VER_1 */ 283 284 #endif /* __fw_api_stats_h__ */ 285