root/drivers/net/wireless/intel/iwlwifi/fw/api/stats.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 - 2017 Intel Deutschland GmbH
  11  * Copyright (C) 2018 Intel Corporation
  12  *
  13  * This program is free software; you can redistribute it and/or modify
  14  * it under the terms of version 2 of the GNU General Public License as
  15  * published by the Free Software Foundation.
  16  *
  17  * This program is distributed in the hope that it will be useful, but
  18  * WITHOUT ANY WARRANTY; without even the implied warranty of
  19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20  * General Public License for more details.
  21  *
  22  * The full GNU General Public License is included in this distribution
  23  * in the file called COPYING.
  24  *
  25  * Contact Information:
  26  *  Intel Linux Wireless <linuxwifi@intel.com>
  27  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  28  *
  29  * BSD LICENSE
  30  *
  31  * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
  32  * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
  33  * Copyright (C) 2018 Intel Corporation
  34  * All rights reserved.
  35  *
  36  * Redistribution and use in source and binary forms, with or without
  37  * modification, are permitted provided that the following conditions
  38  * are met:
  39  *
  40  *  * Redistributions of source code must retain the above copyright
  41  *    notice, this list of conditions and the following disclaimer.
  42  *  * Redistributions in binary form must reproduce the above copyright
  43  *    notice, this list of conditions and the following disclaimer in
  44  *    the documentation and/or other materials provided with the
  45  *    distribution.
  46  *  * Neither the name Intel Corporation nor the names of its
  47  *    contributors may be used to endorse or promote products derived
  48  *    from this software without specific prior written permission.
  49  *
  50  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  51  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  52  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  53  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  54  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  55  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  56  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  57  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  58  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  59  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  60  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  61  *
  62  *****************************************************************************/
  63 
  64 #ifndef __iwl_fw_api_stats_h__
  65 #define __iwl_fw_api_stats_h__
  66 #include "mac.h"
  67 
  68 struct mvm_statistics_dbg {
  69         __le32 burst_check;
  70         __le32 burst_count;
  71         __le32 wait_for_silence_timeout_cnt;
  72         u8 reserved[12];
  73 } __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
  74 
  75 struct mvm_statistics_div {
  76         __le32 tx_on_a;
  77         __le32 tx_on_b;
  78         __le32 exec_time;
  79         __le32 probe_time;
  80         __le32 rssi_ant;
  81         __le32 reserved2;
  82 } __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
  83 
  84 /**
  85  * struct mvm_statistics_rx_non_phy
  86  * @bogus_cts: CTS received when not expecting CTS
  87  * @bogus_ack: ACK received when not expecting ACK
  88  * @non_channel_beacons: beacons with our bss id but not on our serving channel
  89  * @channel_beacons: beacons with our bss id and in our serving channel
  90  * @num_missed_bcon: number of missed beacons
  91  * @adc_rx_saturation_time: count in 0.8us units the time the ADC was in
  92  *      saturation
  93  * @ina_detection_search_time: total time (in 0.8us) searched for INA
  94  * @beacon_silence_rssi_a: RSSI silence after beacon frame
  95  * @beacon_silence_rssi_b: RSSI silence after beacon frame
  96  * @beacon_silence_rssi_c: RSSI silence after beacon frame
  97  * @interference_data_flag: flag for interference data availability. 1 when data
  98  *      is available.
  99  * @channel_load: counts RX Enable time in uSec
 100  * @beacon_rssi_a: beacon RSSI on anntena A
 101  * @beacon_rssi_b: beacon RSSI on antenna B
 102  * @beacon_rssi_c: beacon RSSI on antenna C
 103  * @beacon_energy_a: beacon energy on antenna A
 104  * @beacon_energy_b: beacon energy on antenna B
 105  * @beacon_energy_c: beacon energy on antenna C
 106  * @num_bt_kills: number of BT "kills" (frame TX aborts)
 107  * @mac_id: mac ID
 108  */
 109 struct mvm_statistics_rx_non_phy {
 110         __le32 bogus_cts;
 111         __le32 bogus_ack;
 112         __le32 non_channel_beacons;
 113         __le32 channel_beacons;
 114         __le32 num_missed_bcon;
 115         __le32 adc_rx_saturation_time;
 116         __le32 ina_detection_search_time;
 117         __le32 beacon_silence_rssi_a;
 118         __le32 beacon_silence_rssi_b;
 119         __le32 beacon_silence_rssi_c;
 120         __le32 interference_data_flag;
 121         __le32 channel_load;
 122         __le32 beacon_rssi_a;
 123         __le32 beacon_rssi_b;
 124         __le32 beacon_rssi_c;
 125         __le32 beacon_energy_a;
 126         __le32 beacon_energy_b;
 127         __le32 beacon_energy_c;
 128         __le32 num_bt_kills;
 129         __le32 mac_id;
 130 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_4 */
 131 
 132 struct mvm_statistics_rx_non_phy_v3 {
 133         __le32 bogus_cts;       /* CTS received when not expecting CTS */
 134         __le32 bogus_ack;       /* ACK received when not expecting ACK */
 135         __le32 non_bssid_frames;        /* number of frames with BSSID that
 136                                          * doesn't belong to the STA BSSID */
 137         __le32 filtered_frames; /* count frames that were dumped in the
 138                                  * filtering process */
 139         __le32 non_channel_beacons;     /* beacons with our bss id but not on
 140                                          * our serving channel */
 141         __le32 channel_beacons; /* beacons with our bss id and in our
 142                                  * serving channel */
 143         __le32 num_missed_bcon; /* number of missed beacons */
 144         __le32 adc_rx_saturation_time;  /* count in 0.8us units the time the
 145                                          * ADC was in saturation */
 146         __le32 ina_detection_search_time;/* total time (in 0.8us) searched
 147                                           * for INA */
 148         __le32 beacon_silence_rssi_a;   /* RSSI silence after beacon frame */
 149         __le32 beacon_silence_rssi_b;   /* RSSI silence after beacon frame */
 150         __le32 beacon_silence_rssi_c;   /* RSSI silence after beacon frame */
 151         __le32 interference_data_flag;  /* flag for interference data
 152                                          * availability. 1 when data is
 153                                          * available. */
 154         __le32 channel_load;            /* counts RX Enable time in uSec */
 155         __le32 dsp_false_alarms;        /* DSP false alarm (both OFDM
 156                                          * and CCK) counter */
 157         __le32 beacon_rssi_a;
 158         __le32 beacon_rssi_b;
 159         __le32 beacon_rssi_c;
 160         __le32 beacon_energy_a;
 161         __le32 beacon_energy_b;
 162         __le32 beacon_energy_c;
 163         __le32 num_bt_kills;
 164         __le32 mac_id;
 165         __le32 directed_data_mpdu;
 166 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
 167 
 168 struct mvm_statistics_rx_phy {
 169         __le32 unresponded_rts;
 170         __le32 rxe_frame_lmt_overrun;
 171         __le32 sent_ba_rsp_cnt;
 172         __le32 dsp_self_kill;
 173         __le32 reserved;
 174 } __packed; /* STATISTICS_RX_PHY_API_S_VER_3 */
 175 
 176 struct mvm_statistics_rx_phy_v2 {
 177         __le32 ina_cnt;
 178         __le32 fina_cnt;
 179         __le32 plcp_err;
 180         __le32 crc32_err;
 181         __le32 overrun_err;
 182         __le32 early_overrun_err;
 183         __le32 crc32_good;
 184         __le32 false_alarm_cnt;
 185         __le32 fina_sync_err_cnt;
 186         __le32 sfd_timeout;
 187         __le32 fina_timeout;
 188         __le32 unresponded_rts;
 189         __le32 rxe_frame_lmt_overrun;
 190         __le32 sent_ack_cnt;
 191         __le32 sent_cts_cnt;
 192         __le32 sent_ba_rsp_cnt;
 193         __le32 dsp_self_kill;
 194         __le32 mh_format_err;
 195         __le32 re_acq_main_rssi_sum;
 196         __le32 reserved;
 197 } __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
 198 
 199 struct mvm_statistics_rx_ht_phy_v1 {
 200         __le32 plcp_err;
 201         __le32 overrun_err;
 202         __le32 early_overrun_err;
 203         __le32 crc32_good;
 204         __le32 crc32_err;
 205         __le32 mh_format_err;
 206         __le32 agg_crc32_good;
 207         __le32 agg_mpdu_cnt;
 208         __le32 agg_cnt;
 209         __le32 unsupport_mcs;
 210 } __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
 211 
 212 struct mvm_statistics_rx_ht_phy {
 213         __le32 mh_format_err;
 214         __le32 agg_mpdu_cnt;
 215         __le32 agg_cnt;
 216         __le32 unsupport_mcs;
 217 } __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_2 */
 218 
 219 struct mvm_statistics_tx_non_phy_v3 {
 220         __le32 preamble_cnt;
 221         __le32 rx_detected_cnt;
 222         __le32 bt_prio_defer_cnt;
 223         __le32 bt_prio_kill_cnt;
 224         __le32 few_bytes_cnt;
 225         __le32 cts_timeout;
 226         __le32 ack_timeout;
 227         __le32 expected_ack_cnt;
 228         __le32 actual_ack_cnt;
 229         __le32 dump_msdu_cnt;
 230         __le32 burst_abort_next_frame_mismatch_cnt;
 231         __le32 burst_abort_missing_next_frame_cnt;
 232         __le32 cts_timeout_collision;
 233         __le32 ack_or_ba_timeout_collision;
 234 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
 235 
 236 struct mvm_statistics_tx_non_phy {
 237         __le32 bt_prio_defer_cnt;
 238         __le32 bt_prio_kill_cnt;
 239         __le32 few_bytes_cnt;
 240         __le32 cts_timeout;
 241         __le32 ack_timeout;
 242         __le32 dump_msdu_cnt;
 243         __le32 burst_abort_next_frame_mismatch_cnt;
 244         __le32 burst_abort_missing_next_frame_cnt;
 245         __le32 cts_timeout_collision;
 246         __le32 ack_or_ba_timeout_collision;
 247 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_4 */
 248 
 249 #define MAX_CHAINS 3
 250 
 251 struct mvm_statistics_tx_non_phy_agg {
 252         __le32 ba_timeout;
 253         __le32 ba_reschedule_frames;
 254         __le32 scd_query_agg_frame_cnt;
 255         __le32 scd_query_no_agg;
 256         __le32 scd_query_agg;
 257         __le32 scd_query_mismatch;
 258         __le32 frame_not_ready;
 259         __le32 underrun;
 260         __le32 bt_prio_kill;
 261         __le32 rx_ba_rsp_cnt;
 262         __s8 txpower[MAX_CHAINS];
 263         __s8 reserved;
 264         __le32 reserved2;
 265 } __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
 266 
 267 struct mvm_statistics_tx_channel_width {
 268         __le32 ext_cca_narrow_ch20[1];
 269         __le32 ext_cca_narrow_ch40[2];
 270         __le32 ext_cca_narrow_ch80[3];
 271         __le32 ext_cca_narrow_ch160[4];
 272         __le32 last_tx_ch_width_indx;
 273         __le32 rx_detected_per_ch_width[4];
 274         __le32 success_per_ch_width[4];
 275         __le32 fail_per_ch_width[4];
 276 }; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
 277 
 278 struct mvm_statistics_tx_v4 {
 279         struct mvm_statistics_tx_non_phy_v3 general;
 280         struct mvm_statistics_tx_non_phy_agg agg;
 281         struct mvm_statistics_tx_channel_width channel_width;
 282 } __packed; /* STATISTICS_TX_API_S_VER_4 */
 283 
 284 struct mvm_statistics_tx {
 285         struct mvm_statistics_tx_non_phy general;
 286         struct mvm_statistics_tx_non_phy_agg agg;
 287         struct mvm_statistics_tx_channel_width channel_width;
 288 } __packed; /* STATISTICS_TX_API_S_VER_5 */
 289 
 290 
 291 struct mvm_statistics_bt_activity {
 292         __le32 hi_priority_tx_req_cnt;
 293         __le32 hi_priority_tx_denied_cnt;
 294         __le32 lo_priority_tx_req_cnt;
 295         __le32 lo_priority_tx_denied_cnt;
 296         __le32 hi_priority_rx_req_cnt;
 297         __le32 hi_priority_rx_denied_cnt;
 298         __le32 lo_priority_rx_req_cnt;
 299         __le32 lo_priority_rx_denied_cnt;
 300 } __packed;  /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
 301 
 302 struct mvm_statistics_general_common_v19 {
 303         __le32 radio_temperature;
 304         __le32 radio_voltage;
 305         struct mvm_statistics_dbg dbg;
 306         __le32 sleep_time;
 307         __le32 slots_out;
 308         __le32 slots_idle;
 309         __le32 ttl_timestamp;
 310         struct mvm_statistics_div slow_div;
 311         __le32 rx_enable_counter;
 312         /*
 313          * num_of_sos_states:
 314          *  count the number of times we have to re-tune
 315          *  in order to get out of bad PHY status
 316          */
 317         __le32 num_of_sos_states;
 318         __le32 beacon_filtered;
 319         __le32 missed_beacons;
 320         u8 beacon_filter_average_energy;
 321         u8 beacon_filter_reason;
 322         u8 beacon_filter_current_energy;
 323         u8 beacon_filter_reserved;
 324         __le32 beacon_filter_delta_time;
 325         struct mvm_statistics_bt_activity bt_activity;
 326         __le64 rx_time;
 327         __le64 on_time_rf;
 328         __le64 on_time_scan;
 329         __le64 tx_time;
 330 } __packed;
 331 
 332 struct mvm_statistics_general_common {
 333         __le32 radio_temperature;
 334         struct mvm_statistics_dbg dbg;
 335         __le32 sleep_time;
 336         __le32 slots_out;
 337         __le32 slots_idle;
 338         __le32 ttl_timestamp;
 339         struct mvm_statistics_div slow_div;
 340         __le32 rx_enable_counter;
 341         /*
 342          * num_of_sos_states:
 343          *  count the number of times we have to re-tune
 344          *  in order to get out of bad PHY status
 345          */
 346         __le32 num_of_sos_states;
 347         __le32 beacon_filtered;
 348         __le32 missed_beacons;
 349         u8 beacon_filter_average_energy;
 350         u8 beacon_filter_reason;
 351         u8 beacon_filter_current_energy;
 352         u8 beacon_filter_reserved;
 353         __le32 beacon_filter_delta_time;
 354         struct mvm_statistics_bt_activity bt_activity;
 355         __le64 rx_time;
 356         __le64 on_time_rf;
 357         __le64 on_time_scan;
 358         __le64 tx_time;
 359 } __packed; /* STATISTICS_GENERAL_API_S_VER_10 */
 360 
 361 struct mvm_statistics_general_v8 {
 362         struct mvm_statistics_general_common_v19 common;
 363         __le32 beacon_counter[NUM_MAC_INDEX];
 364         u8 beacon_average_energy[NUM_MAC_INDEX];
 365         u8 reserved[4 - (NUM_MAC_INDEX % 4)];
 366 } __packed; /* STATISTICS_GENERAL_API_S_VER_8 */
 367 
 368 struct mvm_statistics_general {
 369         struct mvm_statistics_general_common common;
 370         __le32 beacon_counter[MAC_INDEX_AUX];
 371         u8 beacon_average_energy[MAC_INDEX_AUX];
 372         u8 reserved[8 - MAC_INDEX_AUX];
 373 } __packed; /* STATISTICS_GENERAL_API_S_VER_10 */
 374 
 375 /**
 376  * struct mvm_statistics_load - RX statistics for multi-queue devices
 377  * @air_time: accumulated air time, per mac
 378  * @byte_count: accumulated byte count, per mac
 379  * @pkt_count: accumulated packet count, per mac
 380  * @avg_energy: average RSSI, per station
 381  */
 382 struct mvm_statistics_load {
 383         __le32 air_time[MAC_INDEX_AUX];
 384         __le32 byte_count[MAC_INDEX_AUX];
 385         __le32 pkt_count[MAC_INDEX_AUX];
 386         u8 avg_energy[IWL_MVM_STATION_COUNT];
 387 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */
 388 
 389 struct mvm_statistics_load_v1 {
 390         __le32 air_time[NUM_MAC_INDEX];
 391         __le32 byte_count[NUM_MAC_INDEX];
 392         __le32 pkt_count[NUM_MAC_INDEX];
 393         u8 avg_energy[IWL_MVM_STATION_COUNT];
 394 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */
 395 
 396 struct mvm_statistics_rx {
 397         struct mvm_statistics_rx_phy ofdm;
 398         struct mvm_statistics_rx_phy cck;
 399         struct mvm_statistics_rx_non_phy general;
 400         struct mvm_statistics_rx_ht_phy ofdm_ht;
 401 } __packed; /* STATISTICS_RX_API_S_VER_4 */
 402 
 403 struct mvm_statistics_rx_v3 {
 404         struct mvm_statistics_rx_phy_v2 ofdm;
 405         struct mvm_statistics_rx_phy_v2 cck;
 406         struct mvm_statistics_rx_non_phy_v3 general;
 407         struct mvm_statistics_rx_ht_phy_v1 ofdm_ht;
 408 } __packed; /* STATISTICS_RX_API_S_VER_3 */
 409 
 410 /*
 411  * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
 412  *
 413  * By default, uCode issues this notification after receiving a beacon
 414  * while associated.  To disable this behavior, set DISABLE_NOTIF flag in the
 415  * STATISTICS_CMD (0x9c), below.
 416  */
 417 
 418 struct iwl_notif_statistics_v10 {
 419         __le32 flag;
 420         struct mvm_statistics_rx_v3 rx;
 421         struct mvm_statistics_tx_v4 tx;
 422         struct mvm_statistics_general_v8 general;
 423 } __packed; /* STATISTICS_NTFY_API_S_VER_10 */
 424 
 425 struct iwl_notif_statistics_v11 {
 426         __le32 flag;
 427         struct mvm_statistics_rx_v3 rx;
 428         struct mvm_statistics_tx_v4 tx;
 429         struct mvm_statistics_general_v8 general;
 430         struct mvm_statistics_load_v1 load_stats;
 431 } __packed; /* STATISTICS_NTFY_API_S_VER_11 */
 432 
 433 struct iwl_notif_statistics {
 434         __le32 flag;
 435         struct mvm_statistics_rx rx;
 436         struct mvm_statistics_tx tx;
 437         struct mvm_statistics_general general;
 438         struct mvm_statistics_load load_stats;
 439 } __packed; /* STATISTICS_NTFY_API_S_VER_13 */
 440 
 441 /**
 442  * enum iwl_statistics_notif_flags - flags used in statistics notification
 443  * @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report
 444  */
 445 enum iwl_statistics_notif_flags {
 446         IWL_STATISTICS_REPLY_FLG_CLEAR          = 0x1,
 447 };
 448 
 449 /**
 450  * enum iwl_statistics_cmd_flags - flags used in statistics command
 451  * @IWL_STATISTICS_FLG_CLEAR: request to clear statistics after the report
 452  *      that's sent after this command
 453  * @IWL_STATISTICS_FLG_DISABLE_NOTIF: disable unilateral statistics
 454  *      notifications
 455  */
 456 enum iwl_statistics_cmd_flags {
 457         IWL_STATISTICS_FLG_CLEAR                = 0x1,
 458         IWL_STATISTICS_FLG_DISABLE_NOTIF        = 0x2,
 459 };
 460 
 461 /**
 462  * struct iwl_statistics_cmd - statistics config command
 463  * @flags: flags from &enum iwl_statistics_cmd_flags
 464  */
 465 struct iwl_statistics_cmd {
 466         __le32 flags;
 467 } __packed; /* STATISTICS_CMD_API_S_VER_1 */
 468 
 469 #endif /* __iwl_fw_api_stats_h__ */

/* [<][>][^][v][top][bottom][index][help] */