Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 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: |
Emmanuel Grumbach | d01c536 | 2015-11-17 15:39:56 +0200 | [diff] [blame] | 29 | * Intel Linux Wireless <linuxwifi@intel.com> |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 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__ |
Johannes Berg | 777c9b6 | 2015-01-14 17:58:57 +0100 | [diff] [blame] | 68 | #include "fw-api-mac.h" |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 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; |
Johannes Berg | 93d17cc | 2015-01-15 12:59:26 +0100 | [diff] [blame] | 135 | __le32 rxe_frame_lmt_overrun; |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 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 | |
Johannes Berg | 777c9b6 | 2015-01-14 17:58:57 +0100 | [diff] [blame] | 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; |
Sara Sharon | 62e004f | 2015-08-20 14:12:58 +0300 | [diff] [blame] | 240 | u8 beacon_filter_average_energy; |
| 241 | u8 beacon_filter_reason; |
| 242 | u8 beacon_filter_current_energy; |
| 243 | u8 beacon_filter_reserved; |
Johannes Berg | 777c9b6 | 2015-01-14 17:58:57 +0100 | [diff] [blame] | 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 | |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 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 |
Johannes Berg | 91a8bcd | 2015-01-14 18:12:41 +0100 | [diff] [blame] | 267 | * STATISTICS_CMD (0x9c), below. |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 268 | */ |
| 269 | |
Johannes Berg | 777c9b6 | 2015-01-14 17:58:57 +0100 | [diff] [blame] | 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 | |
Johannes Berg | 91a8bcd | 2015-01-14 18:12:41 +0100 | [diff] [blame] | 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 | |
Johannes Berg | d19ac58 | 2015-01-14 15:54:18 +0100 | [diff] [blame] | 284 | #endif /* __fw_api_stats_h__ */ |