The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/iwlwifi/fw/api/stats.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
    2 /*
    3  * Copyright (C) 2012-2014, 2018, 2020 - 2021 Intel Corporation
    4  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
    5  * Copyright (C) 2016-2017 Intel Deutschland GmbH
    6  */
    7 #ifndef __iwl_fw_api_stats_h__
    8 #define __iwl_fw_api_stats_h__
    9 #include "mac.h"
   10 
   11 struct mvm_statistics_dbg {
   12         __le32 burst_check;
   13         __le32 burst_count;
   14         __le32 wait_for_silence_timeout_cnt;
   15         u8 reserved[12];
   16 } __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
   17 
   18 struct mvm_statistics_div {
   19         __le32 tx_on_a;
   20         __le32 tx_on_b;
   21         __le32 exec_time;
   22         __le32 probe_time;
   23         __le32 rssi_ant;
   24         __le32 reserved2;
   25 } __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
   26 
   27 /**
   28  * struct mvm_statistics_rx_non_phy
   29  * @bogus_cts: CTS received when not expecting CTS
   30  * @bogus_ack: ACK received when not expecting ACK
   31  * @non_channel_beacons: beacons with our bss id but not on our serving channel
   32  * @channel_beacons: beacons with our bss id and in our serving channel
   33  * @num_missed_bcon: number of missed beacons
   34  * @adc_rx_saturation_time: count in 0.8us units the time the ADC was in
   35  *      saturation
   36  * @ina_detection_search_time: total time (in 0.8us) searched for INA
   37  * @beacon_silence_rssi_a: RSSI silence after beacon frame
   38  * @beacon_silence_rssi_b: RSSI silence after beacon frame
   39  * @beacon_silence_rssi_c: RSSI silence after beacon frame
   40  * @interference_data_flag: flag for interference data availability. 1 when data
   41  *      is available.
   42  * @channel_load: counts RX Enable time in uSec
   43  * @beacon_rssi_a: beacon RSSI on antenna A
   44  * @beacon_rssi_b: beacon RSSI on antenna B
   45  * @beacon_rssi_c: beacon RSSI on antenna C
   46  * @beacon_energy_a: beacon energy on antenna A
   47  * @beacon_energy_b: beacon energy on antenna B
   48  * @beacon_energy_c: beacon energy on antenna C
   49  * @num_bt_kills: number of BT "kills" (frame TX aborts)
   50  * @mac_id: mac ID
   51  */
   52 struct mvm_statistics_rx_non_phy {
   53         __le32 bogus_cts;
   54         __le32 bogus_ack;
   55         __le32 non_channel_beacons;
   56         __le32 channel_beacons;
   57         __le32 num_missed_bcon;
   58         __le32 adc_rx_saturation_time;
   59         __le32 ina_detection_search_time;
   60         __le32 beacon_silence_rssi_a;
   61         __le32 beacon_silence_rssi_b;
   62         __le32 beacon_silence_rssi_c;
   63         __le32 interference_data_flag;
   64         __le32 channel_load;
   65         __le32 beacon_rssi_a;
   66         __le32 beacon_rssi_b;
   67         __le32 beacon_rssi_c;
   68         __le32 beacon_energy_a;
   69         __le32 beacon_energy_b;
   70         __le32 beacon_energy_c;
   71         __le32 num_bt_kills;
   72         __le32 mac_id;
   73 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_4 */
   74 
   75 struct mvm_statistics_rx_non_phy_v3 {
   76         __le32 bogus_cts;       /* CTS received when not expecting CTS */
   77         __le32 bogus_ack;       /* ACK received when not expecting ACK */
   78         __le32 non_bssid_frames;        /* number of frames with BSSID that
   79                                          * doesn't belong to the STA BSSID */
   80         __le32 filtered_frames; /* count frames that were dumped in the
   81                                  * filtering process */
   82         __le32 non_channel_beacons;     /* beacons with our bss id but not on
   83                                          * our serving channel */
   84         __le32 channel_beacons; /* beacons with our bss id and in our
   85                                  * serving channel */
   86         __le32 num_missed_bcon; /* number of missed beacons */
   87         __le32 adc_rx_saturation_time;  /* count in 0.8us units the time the
   88                                          * ADC was in saturation */
   89         __le32 ina_detection_search_time;/* total time (in 0.8us) searched
   90                                           * for INA */
   91         __le32 beacon_silence_rssi_a;   /* RSSI silence after beacon frame */
   92         __le32 beacon_silence_rssi_b;   /* RSSI silence after beacon frame */
   93         __le32 beacon_silence_rssi_c;   /* RSSI silence after beacon frame */
   94         __le32 interference_data_flag;  /* flag for interference data
   95                                          * availability. 1 when data is
   96                                          * available. */
   97         __le32 channel_load;            /* counts RX Enable time in uSec */
   98         __le32 dsp_false_alarms;        /* DSP false alarm (both OFDM
   99                                          * and CCK) counter */
  100         __le32 beacon_rssi_a;
  101         __le32 beacon_rssi_b;
  102         __le32 beacon_rssi_c;
  103         __le32 beacon_energy_a;
  104         __le32 beacon_energy_b;
  105         __le32 beacon_energy_c;
  106         __le32 num_bt_kills;
  107         __le32 mac_id;
  108         __le32 directed_data_mpdu;
  109 } __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
  110 
  111 struct mvm_statistics_rx_phy {
  112         __le32 unresponded_rts;
  113         __le32 rxe_frame_lmt_overrun;
  114         __le32 sent_ba_rsp_cnt;
  115         __le32 dsp_self_kill;
  116         __le32 reserved;
  117 } __packed; /* STATISTICS_RX_PHY_API_S_VER_3 */
  118 
  119 struct mvm_statistics_rx_phy_v2 {
  120         __le32 ina_cnt;
  121         __le32 fina_cnt;
  122         __le32 plcp_err;
  123         __le32 crc32_err;
  124         __le32 overrun_err;
  125         __le32 early_overrun_err;
  126         __le32 crc32_good;
  127         __le32 false_alarm_cnt;
  128         __le32 fina_sync_err_cnt;
  129         __le32 sfd_timeout;
  130         __le32 fina_timeout;
  131         __le32 unresponded_rts;
  132         __le32 rxe_frame_lmt_overrun;
  133         __le32 sent_ack_cnt;
  134         __le32 sent_cts_cnt;
  135         __le32 sent_ba_rsp_cnt;
  136         __le32 dsp_self_kill;
  137         __le32 mh_format_err;
  138         __le32 re_acq_main_rssi_sum;
  139         __le32 reserved;
  140 } __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
  141 
  142 struct mvm_statistics_rx_ht_phy_v1 {
  143         __le32 plcp_err;
  144         __le32 overrun_err;
  145         __le32 early_overrun_err;
  146         __le32 crc32_good;
  147         __le32 crc32_err;
  148         __le32 mh_format_err;
  149         __le32 agg_crc32_good;
  150         __le32 agg_mpdu_cnt;
  151         __le32 agg_cnt;
  152         __le32 unsupport_mcs;
  153 } __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
  154 
  155 struct mvm_statistics_rx_ht_phy {
  156         __le32 mh_format_err;
  157         __le32 agg_mpdu_cnt;
  158         __le32 agg_cnt;
  159         __le32 unsupport_mcs;
  160 } __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_2 */
  161 
  162 struct mvm_statistics_tx_non_phy_v3 {
  163         __le32 preamble_cnt;
  164         __le32 rx_detected_cnt;
  165         __le32 bt_prio_defer_cnt;
  166         __le32 bt_prio_kill_cnt;
  167         __le32 few_bytes_cnt;
  168         __le32 cts_timeout;
  169         __le32 ack_timeout;
  170         __le32 expected_ack_cnt;
  171         __le32 actual_ack_cnt;
  172         __le32 dump_msdu_cnt;
  173         __le32 burst_abort_next_frame_mismatch_cnt;
  174         __le32 burst_abort_missing_next_frame_cnt;
  175         __le32 cts_timeout_collision;
  176         __le32 ack_or_ba_timeout_collision;
  177 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
  178 
  179 struct mvm_statistics_tx_non_phy {
  180         __le32 bt_prio_defer_cnt;
  181         __le32 bt_prio_kill_cnt;
  182         __le32 few_bytes_cnt;
  183         __le32 cts_timeout;
  184         __le32 ack_timeout;
  185         __le32 dump_msdu_cnt;
  186         __le32 burst_abort_next_frame_mismatch_cnt;
  187         __le32 burst_abort_missing_next_frame_cnt;
  188         __le32 cts_timeout_collision;
  189         __le32 ack_or_ba_timeout_collision;
  190 } __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_4 */
  191 
  192 #define MAX_CHAINS 3
  193 
  194 struct mvm_statistics_tx_non_phy_agg {
  195         __le32 ba_timeout;
  196         __le32 ba_reschedule_frames;
  197         __le32 scd_query_agg_frame_cnt;
  198         __le32 scd_query_no_agg;
  199         __le32 scd_query_agg;
  200         __le32 scd_query_mismatch;
  201         __le32 frame_not_ready;
  202         __le32 underrun;
  203         __le32 bt_prio_kill;
  204         __le32 rx_ba_rsp_cnt;
  205         __s8 txpower[MAX_CHAINS];
  206         __s8 reserved;
  207         __le32 reserved2;
  208 } __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
  209 
  210 struct mvm_statistics_tx_channel_width {
  211         __le32 ext_cca_narrow_ch20[1];
  212         __le32 ext_cca_narrow_ch40[2];
  213         __le32 ext_cca_narrow_ch80[3];
  214         __le32 ext_cca_narrow_ch160[4];
  215         __le32 last_tx_ch_width_indx;
  216         __le32 rx_detected_per_ch_width[4];
  217         __le32 success_per_ch_width[4];
  218         __le32 fail_per_ch_width[4];
  219 }; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
  220 
  221 struct mvm_statistics_tx_v4 {
  222         struct mvm_statistics_tx_non_phy_v3 general;
  223         struct mvm_statistics_tx_non_phy_agg agg;
  224         struct mvm_statistics_tx_channel_width channel_width;
  225 } __packed; /* STATISTICS_TX_API_S_VER_4 */
  226 
  227 struct mvm_statistics_tx {
  228         struct mvm_statistics_tx_non_phy general;
  229         struct mvm_statistics_tx_non_phy_agg agg;
  230         struct mvm_statistics_tx_channel_width channel_width;
  231 } __packed; /* STATISTICS_TX_API_S_VER_5 */
  232 
  233 
  234 struct mvm_statistics_bt_activity {
  235         __le32 hi_priority_tx_req_cnt;
  236         __le32 hi_priority_tx_denied_cnt;
  237         __le32 lo_priority_tx_req_cnt;
  238         __le32 lo_priority_tx_denied_cnt;
  239         __le32 hi_priority_rx_req_cnt;
  240         __le32 hi_priority_rx_denied_cnt;
  241         __le32 lo_priority_rx_req_cnt;
  242         __le32 lo_priority_rx_denied_cnt;
  243 } __packed;  /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
  244 
  245 struct mvm_statistics_general_common_v19 {
  246         __le32 radio_temperature;
  247         __le32 radio_voltage;
  248         struct mvm_statistics_dbg dbg;
  249         __le32 sleep_time;
  250         __le32 slots_out;
  251         __le32 slots_idle;
  252         __le32 ttl_timestamp;
  253         struct mvm_statistics_div slow_div;
  254         __le32 rx_enable_counter;
  255         /*
  256          * num_of_sos_states:
  257          *  count the number of times we have to re-tune
  258          *  in order to get out of bad PHY status
  259          */
  260         __le32 num_of_sos_states;
  261         __le32 beacon_filtered;
  262         __le32 missed_beacons;
  263         u8 beacon_filter_average_energy;
  264         u8 beacon_filter_reason;
  265         u8 beacon_filter_current_energy;
  266         u8 beacon_filter_reserved;
  267         __le32 beacon_filter_delta_time;
  268         struct mvm_statistics_bt_activity bt_activity;
  269         __le64 rx_time;
  270         __le64 on_time_rf;
  271         __le64 on_time_scan;
  272         __le64 tx_time;
  273 } __packed;
  274 
  275 struct mvm_statistics_general_common {
  276         __le32 radio_temperature;
  277         struct mvm_statistics_dbg dbg;
  278         __le32 sleep_time;
  279         __le32 slots_out;
  280         __le32 slots_idle;
  281         __le32 ttl_timestamp;
  282         struct mvm_statistics_div slow_div;
  283         __le32 rx_enable_counter;
  284         /*
  285          * num_of_sos_states:
  286          *  count the number of times we have to re-tune
  287          *  in order to get out of bad PHY status
  288          */
  289         __le32 num_of_sos_states;
  290         __le32 beacon_filtered;
  291         __le32 missed_beacons;
  292         u8 beacon_filter_average_energy;
  293         u8 beacon_filter_reason;
  294         u8 beacon_filter_current_energy;
  295         u8 beacon_filter_reserved;
  296         __le32 beacon_filter_delta_time;
  297         struct mvm_statistics_bt_activity bt_activity;
  298         __le64 rx_time;
  299         __le64 on_time_rf;
  300         __le64 on_time_scan;
  301         __le64 tx_time;
  302 } __packed; /* STATISTICS_GENERAL_API_S_VER_10 */
  303 
  304 struct mvm_statistics_general_v8 {
  305         struct mvm_statistics_general_common_v19 common;
  306         __le32 beacon_counter[NUM_MAC_INDEX];
  307         u8 beacon_average_energy[NUM_MAC_INDEX];
  308         u8 reserved[4 - (NUM_MAC_INDEX % 4)];
  309 } __packed; /* STATISTICS_GENERAL_API_S_VER_8 */
  310 
  311 struct mvm_statistics_general {
  312         struct mvm_statistics_general_common common;
  313         __le32 beacon_counter[MAC_INDEX_AUX];
  314         u8 beacon_average_energy[MAC_INDEX_AUX];
  315         u8 reserved[8 - MAC_INDEX_AUX];
  316 } __packed; /* STATISTICS_GENERAL_API_S_VER_10 */
  317 
  318 /**
  319  * struct mvm_statistics_load - RX statistics for multi-queue devices
  320  * @air_time: accumulated air time, per mac
  321  * @byte_count: accumulated byte count, per mac
  322  * @pkt_count: accumulated packet count, per mac
  323  * @avg_energy: average RSSI, per station
  324  */
  325 struct mvm_statistics_load {
  326         __le32 air_time[MAC_INDEX_AUX];
  327         __le32 byte_count[MAC_INDEX_AUX];
  328         __le32 pkt_count[MAC_INDEX_AUX];
  329         u8 avg_energy[IWL_MVM_STATION_COUNT_MAX];
  330 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */
  331 
  332 struct mvm_statistics_load_v1 {
  333         __le32 air_time[NUM_MAC_INDEX];
  334         __le32 byte_count[NUM_MAC_INDEX];
  335         __le32 pkt_count[NUM_MAC_INDEX];
  336         u8 avg_energy[IWL_MVM_STATION_COUNT_MAX];
  337 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */
  338 
  339 struct mvm_statistics_rx {
  340         struct mvm_statistics_rx_phy ofdm;
  341         struct mvm_statistics_rx_phy cck;
  342         struct mvm_statistics_rx_non_phy general;
  343         struct mvm_statistics_rx_ht_phy ofdm_ht;
  344 } __packed; /* STATISTICS_RX_API_S_VER_4 */
  345 
  346 struct mvm_statistics_rx_v3 {
  347         struct mvm_statistics_rx_phy_v2 ofdm;
  348         struct mvm_statistics_rx_phy_v2 cck;
  349         struct mvm_statistics_rx_non_phy_v3 general;
  350         struct mvm_statistics_rx_ht_phy_v1 ofdm_ht;
  351 } __packed; /* STATISTICS_RX_API_S_VER_3 */
  352 
  353 /*
  354  * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
  355  *
  356  * By default, uCode issues this notification after receiving a beacon
  357  * while associated.  To disable this behavior, set DISABLE_NOTIF flag in the
  358  * STATISTICS_CMD (0x9c), below.
  359  */
  360 
  361 struct iwl_notif_statistics_v10 {
  362         __le32 flag;
  363         struct mvm_statistics_rx_v3 rx;
  364         struct mvm_statistics_tx_v4 tx;
  365         struct mvm_statistics_general_v8 general;
  366 } __packed; /* STATISTICS_NTFY_API_S_VER_10 */
  367 
  368 struct iwl_notif_statistics_v11 {
  369         __le32 flag;
  370         struct mvm_statistics_rx_v3 rx;
  371         struct mvm_statistics_tx_v4 tx;
  372         struct mvm_statistics_general_v8 general;
  373         struct mvm_statistics_load_v1 load_stats;
  374 } __packed; /* STATISTICS_NTFY_API_S_VER_11 */
  375 
  376 struct iwl_notif_statistics {
  377         __le32 flag;
  378         struct mvm_statistics_rx rx;
  379         struct mvm_statistics_tx tx;
  380         struct mvm_statistics_general general;
  381         struct mvm_statistics_load load_stats;
  382 } __packed; /* STATISTICS_NTFY_API_S_VER_13 */
  383 
  384 /**
  385  * enum iwl_statistics_notif_flags - flags used in statistics notification
  386  * @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report
  387  */
  388 enum iwl_statistics_notif_flags {
  389         IWL_STATISTICS_REPLY_FLG_CLEAR          = 0x1,
  390 };
  391 
  392 /**
  393  * enum iwl_statistics_cmd_flags - flags used in statistics command
  394  * @IWL_STATISTICS_FLG_CLEAR: request to clear statistics after the report
  395  *      that's sent after this command
  396  * @IWL_STATISTICS_FLG_DISABLE_NOTIF: disable unilateral statistics
  397  *      notifications
  398  */
  399 enum iwl_statistics_cmd_flags {
  400         IWL_STATISTICS_FLG_CLEAR                = 0x1,
  401         IWL_STATISTICS_FLG_DISABLE_NOTIF        = 0x2,
  402 };
  403 
  404 /**
  405  * struct iwl_statistics_cmd - statistics config command
  406  * @flags: flags from &enum iwl_statistics_cmd_flags
  407  */
  408 struct iwl_statistics_cmd {
  409         __le32 flags;
  410 } __packed; /* STATISTICS_CMD_API_S_VER_1 */
  411 
  412 #define MAX_BCAST_FILTER_NUM            8
  413 
  414 /**
  415  * enum iwl_fw_statistics_type
  416  *
  417  * @FW_STATISTICS_OPERATIONAL: operational statistics
  418  * @FW_STATISTICS_PHY: phy statistics
  419  * @FW_STATISTICS_MAC: mac statistics
  420  * @FW_STATISTICS_RX: rx statistics
  421  * @FW_STATISTICS_TX: tx statistics
  422  * @FW_STATISTICS_DURATION: duration statistics
  423  * @FW_STATISTICS_HE: he statistics
  424  */
  425 enum iwl_fw_statistics_type {
  426         FW_STATISTICS_OPERATIONAL,
  427         FW_STATISTICS_PHY,
  428         FW_STATISTICS_MAC,
  429         FW_STATISTICS_RX,
  430         FW_STATISTICS_TX,
  431         FW_STATISTICS_DURATION,
  432         FW_STATISTICS_HE,
  433 }; /* FW_STATISTICS_TYPE_API_E_VER_1 */
  434 
  435 #define IWL_STATISTICS_TYPE_MSK 0x7f
  436 /**
  437  * struct iwl_statistics_ntfy_hdr
  438  *
  439  * @type: struct type
  440  * @version: version of the struct
  441  * @size: size in bytes
  442  */
  443 struct iwl_statistics_ntfy_hdr {
  444         u8 type;
  445         u8 version;
  446         __le16 size;
  447 }; /* STATISTICS_NTFY_HDR_API_S_VER_1 */
  448 
  449 /**
  450  * struct iwl_statistics_ntfy_per_mac
  451  *
  452  * @beacon_filter_average_energy: Average energy [-dBm] of the 2
  453  *       antennas.
  454  * @air_time: air time
  455  * @beacon_counter: all beacons (both filtered and not filtered)
  456  * @beacon_average_energy: all beacons (both filtered and not
  457  *       filtered)
  458  * @beacon_rssi_a: beacon RSSI on antenna A
  459  * @beacon_rssi_b: beacon RSSI on antenna B
  460  * @rx_bytes: RX byte count
  461  */
  462 struct iwl_statistics_ntfy_per_mac {
  463         __le32 beacon_filter_average_energy;
  464         __le32 air_time;
  465         __le32 beacon_counter;
  466         __le32 beacon_average_energy;
  467         __le32 beacon_rssi_a;
  468         __le32 beacon_rssi_b;
  469         __le32 rx_bytes;
  470 } __packed; /* STATISTICS_NTFY_PER_MAC_API_S_VER_1 */
  471 
  472 #define IWL_STATS_MAX_BW_INDEX 5
  473 /** struct iwl_statistics_ntfy_per_phy
  474  * @channel_load: channel load
  475  * @channel_load_by_us: device contribution to MCLM
  476  * @channel_load_not_by_us: other devices' contribution to MCLM
  477  * @clt: CLT HW timer (TIM_CH_LOAD2)
  478  * @act: active accumulator SW
  479  * @elp: elapsed time accumulator SW
  480  * @rx_detected_per_ch_width: number of deferred TX per channel width,
  481  *      0 - 20, 1/2/3 - 40/80/160
  482  * @success_per_ch_width: number of frames that got ACK/BACK/CTS
  483  *      per channel BW. note, BACK counted as 1
  484  * @fail_per_ch_width: number of frames that didn't get ACK/BACK/CTS
  485  *      per channel BW. note BACK counted as 1
  486  * @last_tx_ch_width_indx: last txed frame channel width index
  487  */
  488 struct iwl_statistics_ntfy_per_phy {
  489         __le32 channel_load;
  490         __le32 channel_load_by_us;
  491         __le32 channel_load_not_by_us;
  492         __le32 clt;
  493         __le32 act;
  494         __le32 elp;
  495         __le32 rx_detected_per_ch_width[IWL_STATS_MAX_BW_INDEX];
  496         __le32 success_per_ch_width[IWL_STATS_MAX_BW_INDEX];
  497         __le32 fail_per_ch_width[IWL_STATS_MAX_BW_INDEX];
  498         __le32 last_tx_ch_width_indx;
  499 } __packed; /* STATISTICS_NTFY_PER_PHY_API_S_VER_1 */
  500 
  501 /**
  502  * struct iwl_statistics_ntfy_per_sta
  503  *
  504  * @average_energy: in fact it is minus the energy..
  505  */
  506 struct iwl_statistics_ntfy_per_sta {
  507         __le32 average_energy;
  508 } __packed; /* STATISTICS_NTFY_PER_STA_API_S_VER_1 */
  509 
  510 #define IWL_STATS_MAX_PHY_OPERTINAL 3
  511 /**
  512  * struct iwl_statistics_operational_ntfy
  513  *
  514  * @hdr: general statistics header
  515  * @flags: bitmap of possible notification structures
  516  * @per_mac_stats: per mac statistics, &struct iwl_statistics_ntfy_per_mac
  517  * @per_phy_stats: per phy statistics, &struct iwl_statistics_ntfy_per_phy
  518  * @per_sta_stats: per sta statistics, &struct iwl_statistics_ntfy_per_sta
  519  * @rx_time: rx time
  520  * @tx_time: usec the radio is transmitting.
  521  * @on_time_rf: The total time in usec the RF is awake.
  522  * @on_time_scan: usec the radio is awake due to scan.
  523  */
  524 struct iwl_statistics_operational_ntfy {
  525         struct iwl_statistics_ntfy_hdr hdr;
  526         __le32 flags;
  527         struct iwl_statistics_ntfy_per_mac per_mac_stats[MAC_INDEX_AUX];
  528         struct iwl_statistics_ntfy_per_phy per_phy_stats[IWL_STATS_MAX_PHY_OPERTINAL];
  529         struct iwl_statistics_ntfy_per_sta per_sta_stats[IWL_MVM_STATION_COUNT_MAX];
  530         __le64 rx_time;
  531         __le64 tx_time;
  532         __le64 on_time_rf;
  533         __le64 on_time_scan;
  534 } __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_15 */
  535 
  536 /**
  537  * struct iwl_statistics_operational_ntfy_ver_14
  538  *
  539  * @hdr: general statistics header
  540  * @flags: bitmap of possible notification structures
  541  * @mac_id: mac on which the beacon was received
  542  * @beacon_filter_average_energy: Average energy [-dBm] of the 2
  543  *       antennas.
  544  * @beacon_filter_reason: beacon filter reason
  545  * @radio_temperature: radio temperature
  546  * @air_time: air time
  547  * @beacon_counter: all beacons (both filtered and not filtered)
  548  * @beacon_average_energy: all beacons (both filtered and not
  549  *       filtered)
  550  * @beacon_rssi_a: beacon RSSI on antenna A
  551  * @beacon_rssi_b: beacon RSSI on antenna B
  552  * @rx_bytes: per MAC RX byte count
  553  * @rx_time: rx time
  554  * @tx_time: usec the radio is transmitting.
  555  * @on_time_rf: The total time in usec the RF is awake.
  556  * @on_time_scan: usec the radio is awake due to scan.
  557  * @average_energy: in fact it is minus the energy..
  558  * @reserved: reserved
  559  */
  560 struct iwl_statistics_operational_ntfy_ver_14 {
  561         struct iwl_statistics_ntfy_hdr hdr;
  562         __le32 flags;
  563         __le32 mac_id;
  564         __le32 beacon_filter_average_energy;
  565         __le32 beacon_filter_reason;
  566         __le32 radio_temperature;
  567         __le32 air_time[MAC_INDEX_AUX];
  568         __le32 beacon_counter[MAC_INDEX_AUX];
  569         __le32 beacon_average_energy[MAC_INDEX_AUX];
  570         __le32 beacon_rssi_a;
  571         __le32 beacon_rssi_b;
  572         __le32 rx_bytes[MAC_INDEX_AUX];
  573         __le64 rx_time;
  574         __le64 tx_time;
  575         __le64 on_time_rf;
  576         __le64 on_time_scan;
  577         __le32 average_energy[IWL_MVM_STATION_COUNT_MAX];
  578         __le32 reserved;
  579 } __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */
  580 
  581 /**
  582  * struct iwl_statistics_phy_ntfy
  583  *
  584  * @hdr: general statistics header
  585  * RX PHY related statistics
  586  * @energy_and_config: ???
  587  * @rssi_band: @31:24 rssiAllBand_B, 23:16 rssiInBand_B, 15:8
  588  *       rssiAllBand_A, 7:0 rssiInBand_A
  589  * @agc_word: @31:16 agcWord_B, 15:0 agcWord_A
  590  * @agc_gain: @19:10 agcGain_B, 9:0 agcGain_A
  591  * @dfe_gain: @19:10 dfeGain_B, 9:0 dfeGain_A
  592  * @snr_calc_main: @18:0 snrCalcMain
  593  * @energy_calc_main: @18:0 energyCalcMain
  594  * @snr_calc_aux: @18:0 snrCalcAux
  595  * @dsp_dc_estim_a: @27:14 dspDcEstimQA, 13:0 dspDcEstimIA
  596  * @dsp_dc_estim_b: @27:14 dspDcEstimQB, 13:0 dspDcEstimIB
  597  * @ina_detec_type_and_ofdm_corr_comb: @31:31 inaDetectCckMrc,
  598  *       30:27 inaDetectType, 26:0 ofdmCorrComb
  599  * @cw_corr_comb: @26:0 cwCorrComb
  600  * @rssi_comb: @25:0 rssiComb
  601  * @auto_corr_cck: @23:12 autoCck, 11:00 crossCck
  602  * @ofdm_fine_freq_and_pina_freq_err: @18:7 ofdmFineFreq, 6:0
  603  *       ofdmPinaFreqErr
  604  * @snrm_evm_main: @31:0 snrmEvmMain
  605  * @snrm_evm_aux: @31:0 snrmEvmAux
  606  * @rx_rate: @31:0 rate
  607  * TX PHY related statistics
  608  * @per_chain_enums_and_dsp_atten_a: @perChainEnumsAndDspAtten
  609  *       (per version)
  610  * @target_power_and_power_meas_a: @31:16 targetPower_A, 15:0
  611  *       powerMeasuredCalc_A
  612  * @tx_config_as_i_and_ac_a: @31:16 txConfigAsI_A, 15:0
  613  *       txConfigAc_A
  614  * @predist_dcq_and_dci_a: @31:16 predist_dci_A, 15:0
  615  *       predist_dcq_A
  616  * @per_chain_enums_and_dsp_atten_b: @perChainEnumsAndDspAtten
  617  *       (per version)
  618  * @target_power_and_power_meas_b: @31:16 targetPower_B, 15:0
  619  *       powerMeasuredCalc_B
  620  * @tx_config_as_i_and_ac_b: @31:16 txConfigAsI_B, 15:0
  621  *       txConfigAc_B
  622  * @predist_dcq_and_dci_b: @31:16 predist_dci_B, 15:0
  623  *       predist_dcq_B
  624  * @tx_rate: @31:0 rate
  625  * @tlc_backoff: @31:0 tlcBackoff
  626  * @mpapd_calib_mode_mpapd_calib_type_a: @31:16
  627  *       mpapdCalibMode_A, 15:0 mpapdCalibType_A
  628  * @psat_and_phy_power_limit_a: @31:16 psat_A, 15:0
  629  *       phyPowerLimit_A
  630  * @sar_and_regulatory_power_limit_a: @31:16 sarPowerLimit_A,
  631  *       15:0 regulatoryPowerLimit_A
  632  * @mpapd_calib_mode_mpapd_calib_type_b: @31:16
  633  *       mpapdCalibMode_B, 15:0 mpapdCalibType_B
  634  * @psat_and_phy_power_limit_b: @31:16 psat_B, 15:0
  635  *       phyPowerLimit_B
  636  * @sar_and_regulatory_power_limit_b: @31:16 sarPowerLimit_B,
  637  *       15:0 regulatoryPowerLimit_B
  638  * @srd_and_driver_power_limits: @31:16 srdPowerLimit, 15:0
  639  *       driverPowerLimit
  640  * @reserved: reserved
  641  */
  642 struct iwl_statistics_phy_ntfy {
  643         struct iwl_statistics_ntfy_hdr hdr;
  644         __le32 energy_and_config;
  645         __le32 rssi_band;
  646         __le32 agc_word;
  647         __le32 agc_gain;
  648         __le32 dfe_gain;
  649         __le32 snr_calc_main;
  650         __le32 energy_calc_main;
  651         __le32 snr_calc_aux;
  652         __le32 dsp_dc_estim_a;
  653         __le32 dsp_dc_estim_b;
  654         __le32 ina_detec_type_and_ofdm_corr_comb;
  655         __le32 cw_corr_comb;
  656         __le32 rssi_comb;
  657         __le32 auto_corr_cck;
  658         __le32 ofdm_fine_freq_and_pina_freq_err;
  659         __le32 snrm_evm_main;
  660         __le32 snrm_evm_aux;
  661         __le32 rx_rate;
  662         __le32 per_chain_enums_and_dsp_atten_a;
  663         __le32 target_power_and_power_meas_a;
  664         __le32 tx_config_as_i_and_ac_a;
  665         __le32 predist_dcq_and_dci_a;
  666         __le32 per_chain_enums_and_dsp_atten_b;
  667         __le32 target_power_and_power_meas_b;
  668         __le32 tx_config_as_i_and_ac_b;
  669         __le32 predist_dcq_and_dci_b;
  670         __le32 tx_rate;
  671         __le32 tlc_backoff;
  672         __le32 mpapd_calib_mode_mpapd_calib_type_a;
  673         __le32 psat_and_phy_power_limit_a;
  674         __le32 sar_and_regulatory_power_limit_a;
  675         __le32 mpapd_calib_mode_mpapd_calib_type_b;
  676         __le32 psat_and_phy_power_limit_b;
  677         __le32 sar_and_regulatory_power_limit_b;
  678         __le32 srd_and_driver_power_limits;
  679         __le32 reserved;
  680 } __packed; /* STATISTICS_PHY_NTFY_API_S_VER_1 */
  681 
  682 /**
  683  * struct iwl_statistics_mac_ntfy
  684  *
  685  * @hdr: general statistics header
  686  * @bcast_filter_passed_per_mac: bcast filter passed per mac
  687  * @bcast_filter_dropped_per_mac: bcast filter dropped per mac
  688  * @bcast_filter_passed_per_filter: bcast filter passed per filter
  689  * @bcast_filter_dropped_per_filter: bcast filter dropped per filter
  690  * @reserved: reserved
  691  */
  692 struct iwl_statistics_mac_ntfy {
  693         struct iwl_statistics_ntfy_hdr hdr;
  694         __le32 bcast_filter_passed_per_mac[NUM_MAC_INDEX_CDB];
  695         __le32 bcast_filter_dropped_per_mac[NUM_MAC_INDEX_CDB];
  696         __le32 bcast_filter_passed_per_filter[MAX_BCAST_FILTER_NUM];
  697         __le32 bcast_filter_dropped_per_filter[MAX_BCAST_FILTER_NUM];
  698         __le32 reserved;
  699 } __packed; /* STATISTICS_MAC_NTFY_API_S_VER_1 */
  700 
  701 /**
  702  * struct iwl_statistics_rx_ntfy
  703  *
  704  * @hdr: general statistics header
  705  * @rx_agg_mpdu_cnt: aggregation frame count (number of
  706  *       delimiters)
  707  * @rx_agg_cnt: number of RX Aggregations
  708  * @unsupported_mcs: number of PLCP headers that have rate which
  709  *       is unsupported by DSP
  710  * @bogus_cts: CTS received when not expecting CTS
  711  * @bogus_ack: ACK received when not expecting ACK
  712  * @rx_byte_count: ???
  713  * @rx_packet_count: ???
  714  * @missed_beacons: ???
  715  * @unresponded_rts: un-responded RTS, due to NAV not zero
  716  * @rxe_frame_limit_overrun: RXE got frame limit overrun
  717  * @sent_ba_rsp_cnt: BA response TX count
  718  * @late_rx_handle: count the number of times the RX path was
  719  *       aborted due to late entry
  720  * @num_bt_kills: ???
  721  * @reserved: reserved
  722  */
  723 struct iwl_statistics_rx_ntfy {
  724         struct iwl_statistics_ntfy_hdr hdr;
  725         __le32 rx_agg_mpdu_cnt;
  726         __le32 rx_agg_cnt;
  727         __le32 unsupported_mcs;
  728         __le32 bogus_cts;
  729         __le32 bogus_ack;
  730         __le32 rx_byte_count[MAC_INDEX_AUX];
  731         __le32 rx_packet_count[MAC_INDEX_AUX];
  732         __le32 missed_beacons;
  733         __le32 unresponded_rts;
  734         __le32 rxe_frame_limit_overrun;
  735         __le32 sent_ba_rsp_cnt;
  736         __le32 late_rx_handle;
  737         __le32 num_bt_kills;
  738         __le32 reserved;
  739 } __packed; /* STATISTICS_RX_NTFY_API_S_VER_1 */
  740 
  741 /**
  742  * struct iwl_statistics_tx_ntfy
  743  *
  744  * @hdr: general statistics header
  745  * @cts_timeout: timeout when waiting for CTS
  746  * @ack_timeout: timeout when waiting for ACK
  747  * @dump_msdu_cnt: number of MSDUs that were dumped due to any
  748  *       reason
  749  * @burst_abort_missing_next_frame_cnt: number of times a burst
  750  *       was aborted due to missing next frame bytes in txfifo
  751  * number of times got timeout when waiting for CTS/ACK/BA and energy was
  752  * detected just after sending the RTS/DATA. this statistics may help getting
  753  * interesting indicators, like the likelihood of collision (so the benefit of
  754  * protection may be estimated Vs. its cost). Or how many of the failures are
  755  * due to collision and how many due to SNR.
  756  * For Link-quality the CTS collision indication is more reliable then the ACK
  757  * collision indication as the RTS frame is short and has more chance that the
  758  * frame/s which caused the collision continue after the RTS was sent.
  759  * @cts_timeout_collision: ???
  760  * ACK/BA failed and energy as detected after DATA
  761  * Note: to get the collision ratio need to:
  762  * ackOrBaTimeoutCollision / (ack_timeout + ba_timeout)
  763  * @ack_or_ba_timeout_collision: ???
  764  * @ba_timeout: timeout when waiting for immediate BA response
  765  * @ba_reschedule_frames: failed to get BA response and
  766  *       rescheduled all the non-ACKed frames
  767  * gives the avarage number of frames inside aggregation
  768  * @scd_query_agg_frame_cnt: ???
  769  * @scd_query_no_agg: scheduler query prevented aggregation
  770  * @scd_query_agg: scheduler query allowed aggregation
  771  * @scd_query_mismatch: scheduler query inaccurate, either too
  772  *       short or too long
  773  * @agg_terminated_underrun: aggregation was terminated due to
  774  *       underrun
  775  * @agg_terminated_bt_prio_kill: aggregation was terminated due
  776  *       to BT
  777  * @tx_kill_on_long_retry: count the tx frames dropped due to
  778  *       long retry limit (DATA frame failed)
  779  * @tx_kill_on_short_retry: count the tx frames dropped due to
  780  *       short retry limit (RTS frame failed)
  781  * TX deffer on energy. This counter is reset on each successful transmit.
  782  * When timer exceed TX deffer limit than will be uCode assert.
  783  * @tx_deffer_counter: ???
  784  * @tx_deffer_base_time: Keep the time of the last successful
  785  *       transmit
  786  * @tx_underrun: TX killed due to underrun
  787  * @bt_defer: TX deferred due to BT priority, so probably TX was
  788  *       not started.
  789  * @tx_kill_on_dsp_timeout: TX killed on DSP problem detected
  790  * @tx_kill_on_immediate_quiet: TX killed due to immediate quiet
  791  * @kill_ba_cnt: number of times sending BA failed
  792  * @kill_ack_cnt: number of times sending ACK failed
  793  * @kill_cts_cnt: number of times sending CTS failed
  794  * @burst_terminated: Count burst or fragmentation termination
  795  *       occurrence
  796  * @late_tx_vec_wr_cnt: ???
  797  * TX is not sent because ucode failed to notify the TRM in SIFS-delta from
  798  * ON_AIR deassertion.
  799  * @late_rx2_tx_cnt: ???
  800  * @scd_query_cnt: count the times SCD query was done to check
  801  *       for TX AGG
  802  * @tx_frames_acked_in_agg: count the number of frames
  803  *       transmitted inside AGG and were successful
  804  * @last_tx_ch_width_indx: ???
  805  * number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160
  806  * @rx_detected_per_ch_width: ???
  807  * @success_per_ch_width: ???
  808  * @fail_per_ch_width: ???
  809  * @reserved: reserved
  810  */
  811 struct iwl_statistics_tx_ntfy {
  812         struct iwl_statistics_ntfy_hdr hdr;
  813         __le32 cts_timeout;
  814         __le32 ack_timeout;
  815         __le32 dump_msdu_cnt;
  816         __le32 burst_abort_missing_next_frame_cnt;
  817         __le32 cts_timeout_collision;
  818         __le32 ack_or_ba_timeout_collision;
  819         __le32 ba_timeout;
  820         __le32 ba_reschedule_frames;
  821         __le32 scd_query_agg_frame_cnt;
  822         __le32 scd_query_no_agg;
  823         __le32 scd_query_agg;
  824         __le32 scd_query_mismatch;
  825         __le32 agg_terminated_underrun;
  826         __le32 agg_terminated_bt_prio_kill;
  827         __le32 tx_kill_on_long_retry;
  828         __le32 tx_kill_on_short_retry;
  829         __le32 tx_deffer_counter;
  830         __le32 tx_deffer_base_time;
  831         __le32 tx_underrun;
  832         __le32 bt_defer;
  833         __le32 tx_kill_on_dsp_timeout;
  834         __le32 tx_kill_on_immediate_quiet;
  835         __le32 kill_ba_cnt;
  836         __le32 kill_ack_cnt;
  837         __le32 kill_cts_cnt;
  838         __le32 burst_terminated;
  839         __le32 late_tx_vec_wr_cnt;
  840         __le32 late_rx2_tx_cnt;
  841         __le32 scd_query_cnt;
  842         __le32 tx_frames_acked_in_agg;
  843         __le32 last_tx_ch_width_indx;
  844         __le32 rx_detected_per_ch_width[4];
  845         __le32 success_per_ch_width[4];
  846         __le32 fail_per_ch_width[4];
  847         __le32 reserved;
  848 } __packed; /* STATISTICS_TX_NTFY_API_S_VER_1 */
  849 
  850 /**
  851  * struct iwl_statistics_duration_ntfy
  852  *
  853  * @hdr: general statistics header
  854  * @cont_burst_chk_cnt: number of times continuation or
  855  *       fragmentation or bursting was checked
  856  * @cont_burst_cnt: number of times continuation or fragmentation
  857  *       or bursting was successful
  858  * @wait_for_silence_timeout_cnt: ???
  859  * @reserved: reserved
  860  */
  861 struct iwl_statistics_duration_ntfy {
  862         struct iwl_statistics_ntfy_hdr hdr;
  863         __le32 cont_burst_chk_cnt;
  864         __le32 cont_burst_cnt;
  865         __le32 wait_for_silence_timeout_cnt;
  866         __le32 reserved;
  867 } __packed; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */
  868 
  869 /**
  870  * struct iwl_statistics_he_ntfy
  871  *
  872  * @hdr: general statistics header
  873  * received HE frames
  874  * @rx_siga_valid_cnt: rx HE SIG-A valid
  875  * @rx_siga_invalid_cnt: rx HE SIG-A invalid
  876  * received HE frames w/ valid Sig-A
  877  * @rx_trig_based_frame_cnt: rx HE-TB (trig-based)
  878  * @rx_su_frame_cnt: rx HE-SU
  879  * @rx_sigb_invalid_cnt: rx (suspected) HE-MU w/ bad SIG-B
  880  * @rx_our_bss_color_cnt: rx valid HE SIG-A w/ our BSS color
  881  * @rx_other_bss_color_cnt: rx valid HE SIG-A w/ other BSS color
  882  * @rx_zero_bss_color_cnt: ???
  883  * received HE-MU frames w/ good Sig-B
  884  * @rx_mu_for_us_cnt: match AID
  885  * @rx_mu_not_for_us_cnt: no matched AID
  886  * received HE-MU frames for us (w/ our AID)
  887  * @rx_mu_nss_ar: 0 - SISO, 1 - MIMO2
  888  * @rx_mu_mimo_cnt: full BW RU, compressed SIG-B
  889  * @rx_mu_ru_bw_ar: MU alloc, MHz: 0 - 2, 1 - 5, 2 - 10, 3 - 20,
  890  *       4 - 40, 5 - 80, 6 - 160
  891  * received trigger frames
  892  * @rx_trig_for_us_cnt: ???
  893  * @rx_trig_not_for_us_cnt: ???
  894  * trigger for us
  895  * @rx_trig_with_cs_req_cnt: ???
  896  * @rx_trig_type_ar: ???
  897  * @rx_trig_in_agg_cnt: ???
  898  * basic trigger for us allocations
  899  * @rx_basic_trig_alloc_nss_ar: ???
  900  * @rx_basic_trig_alloc_mu_mimo_cnt: ???
  901  * @rx_basic_trig_alloc_ru_bw_ar: ???
  902  * @rx_basic_trig_total_byte_cnt: ???
  903  * trig-based TX
  904  * @tx_trig_based_cs_req_fail_cnt: ???
  905  * @tx_trig_based_sifs_ok_cnt: ???
  906  * @tx_trig_based_sifs_fail_cnt: ???
  907  * @tx_trig_based_byte_cnt: ???
  908  * @tx_trig_based_pad_byte_cnt: ???
  909  * @tx_trig_based_frame_cnt: ???
  910  * @tx_trig_based_acked_frame_cnt: ???
  911  * @tx_trig_based_ack_timeout_cnt: ???
  912  * HE-SU TX
  913  * @tx_su_frame_cnt: ???
  914  * EDCA <--> MU-EDCA transitions
  915  * @tx_edca_to_mu_edca_cnt: ???
  916  * @tx_mu_edca_to_edca_by_timeout_cnt: ???
  917  * @tx_mu_edca_to_edca_by_ack_fail_cnt: ???
  918  * @tx_mu_edca_to_edca_by_small_alloc_cnt: ???
  919  * @reserved: reserved
  920  */
  921 struct iwl_statistics_he_ntfy {
  922         struct iwl_statistics_ntfy_hdr hdr;
  923         __le32 rx_siga_valid_cnt;
  924         __le32 rx_siga_invalid_cnt;
  925         __le32 rx_trig_based_frame_cnt;
  926         __le32 rx_su_frame_cnt;
  927         __le32 rx_sigb_invalid_cnt;
  928         __le32 rx_our_bss_color_cnt;
  929         __le32 rx_other_bss_color_cnt;
  930         __le32 rx_zero_bss_color_cnt;
  931         __le32 rx_mu_for_us_cnt;
  932         __le32 rx_mu_not_for_us_cnt;
  933         __le32 rx_mu_nss_ar[2];
  934         __le32 rx_mu_mimo_cnt;
  935         __le32 rx_mu_ru_bw_ar[7];
  936         __le32 rx_trig_for_us_cnt;
  937         __le32 rx_trig_not_for_us_cnt;
  938         __le32 rx_trig_with_cs_req_cnt;
  939         __le32 rx_trig_type_ar[8 + 1];
  940         __le32 rx_trig_in_agg_cnt;
  941         __le32 rx_basic_trig_alloc_nss_ar[2];
  942         __le32 rx_basic_trig_alloc_mu_mimo_cnt;
  943         __le32 rx_basic_trig_alloc_ru_bw_ar[7];
  944         __le32 rx_basic_trig_total_byte_cnt;
  945         __le32 tx_trig_based_cs_req_fail_cnt;
  946         __le32 tx_trig_based_sifs_ok_cnt;
  947         __le32 tx_trig_based_sifs_fail_cnt;
  948         __le32 tx_trig_based_byte_cnt;
  949         __le32 tx_trig_based_pad_byte_cnt;
  950         __le32 tx_trig_based_frame_cnt;
  951         __le32 tx_trig_based_acked_frame_cnt;
  952         __le32 tx_trig_based_ack_timeout_cnt;
  953         __le32 tx_su_frame_cnt;
  954         __le32 tx_edca_to_mu_edca_cnt;
  955         __le32 tx_mu_edca_to_edca_by_timeout_cnt;
  956         __le32 tx_mu_edca_to_edca_by_ack_fail_cnt;
  957         __le32 tx_mu_edca_to_edca_by_small_alloc_cnt;
  958         __le32 reserved;
  959 } __packed; /* STATISTICS_HE_NTFY_API_S_VER_1 */
  960 
  961 #endif /* __iwl_fw_api_stats_h__ */

Cache object: 9b6bb53a3a0ec795a162fe00b555f497


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.