1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
3 * Copyright (C) 2012-2014, 2018, 2020 Intel Corporation
4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
5 * Copyright (C) 2016-2017 Intel Deutschland GmbH
7 #ifndef __iwl_fw_api_stats_h__
8 #define __iwl_fw_api_stats_h__
11 struct mvm_statistics_dbg
{
14 __le32 wait_for_silence_timeout_cnt
;
16 } __packed
; /* STATISTICS_DEBUG_API_S_VER_2 */
18 struct mvm_statistics_div
{
25 } __packed
; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
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
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
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)
52 struct mvm_statistics_rx_non_phy
{
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
;
68 __le32 beacon_energy_a
;
69 __le32 beacon_energy_b
;
70 __le32 beacon_energy_c
;
73 } __packed
; /* STATISTICS_RX_NON_PHY_API_S_VER_4 */
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
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
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
97 __le32 channel_load
; /* counts RX Enable time in uSec */
98 __le32 dsp_false_alarms
; /* DSP false alarm (both OFDM
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
;
108 __le32 directed_data_mpdu
;
109 } __packed
; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
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
;
117 } __packed
; /* STATISTICS_RX_PHY_API_S_VER_3 */
119 struct mvm_statistics_rx_phy_v2
{
125 __le32 early_overrun_err
;
127 __le32 false_alarm_cnt
;
128 __le32 fina_sync_err_cnt
;
131 __le32 unresponded_rts
;
132 __le32 rxe_frame_lmt_overrun
;
135 __le32 sent_ba_rsp_cnt
;
136 __le32 dsp_self_kill
;
137 __le32 mh_format_err
;
138 __le32 re_acq_main_rssi_sum
;
140 } __packed
; /* STATISTICS_RX_PHY_API_S_VER_2 */
142 struct mvm_statistics_rx_ht_phy_v1
{
145 __le32 early_overrun_err
;
148 __le32 mh_format_err
;
149 __le32 agg_crc32_good
;
152 __le32 unsupport_mcs
;
153 } __packed
; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
155 struct mvm_statistics_rx_ht_phy
{
156 __le32 mh_format_err
;
159 __le32 unsupport_mcs
;
160 } __packed
; /* STATISTICS_HT_RX_PHY_API_S_VER_2 */
162 struct mvm_statistics_tx_non_phy_v3
{
164 __le32 rx_detected_cnt
;
165 __le32 bt_prio_defer_cnt
;
166 __le32 bt_prio_kill_cnt
;
167 __le32 few_bytes_cnt
;
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 */
179 struct mvm_statistics_tx_non_phy
{
180 __le32 bt_prio_defer_cnt
;
181 __le32 bt_prio_kill_cnt
;
182 __le32 few_bytes_cnt
;
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 */
194 struct mvm_statistics_tx_non_phy_agg
{
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
;
204 __le32 rx_ba_rsp_cnt
;
205 __s8 txpower
[MAX_CHAINS
];
208 } __packed
; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
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 */
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 */
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 */
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 */
245 struct mvm_statistics_general_common_v19
{
246 __le32 radio_temperature
;
247 __le32 radio_voltage
;
248 struct mvm_statistics_dbg dbg
;
252 __le32 ttl_timestamp
;
253 struct mvm_statistics_div slow_div
;
254 __le32 rx_enable_counter
;
257 * count the number of times we have to re-tune
258 * in order to get out of bad PHY status
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
;
275 struct mvm_statistics_general_common
{
276 __le32 radio_temperature
;
277 struct mvm_statistics_dbg dbg
;
281 __le32 ttl_timestamp
;
282 struct mvm_statistics_div slow_div
;
283 __le32 rx_enable_counter
;
286 * count the number of times we have to re-tune
287 * in order to get out of bad PHY status
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
;
302 } __packed
; /* STATISTICS_GENERAL_API_S_VER_10 */
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 */
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 */
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
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 */
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 */
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 */
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 */
354 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
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.
361 struct iwl_notif_statistics_v10
{
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 */
368 struct iwl_notif_statistics_v11
{
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 */
376 struct iwl_notif_statistics
{
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 */
385 * enum iwl_statistics_notif_flags - flags used in statistics notification
386 * @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report
388 enum iwl_statistics_notif_flags
{
389 IWL_STATISTICS_REPLY_FLG_CLEAR
= 0x1,
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
399 enum iwl_statistics_cmd_flags
{
400 IWL_STATISTICS_FLG_CLEAR
= 0x1,
401 IWL_STATISTICS_FLG_DISABLE_NOTIF
= 0x2,
405 * struct iwl_statistics_cmd - statistics config command
406 * @flags: flags from &enum iwl_statistics_cmd_flags
408 struct iwl_statistics_cmd
{
410 } __packed
; /* STATISTICS_CMD_API_S_VER_1 */
412 #define MAX_BCAST_FILTER_NUM 8
415 * enum iwl_fw_statistics_type
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
425 enum iwl_fw_statistics_type
{
426 FW_STATISTICS_OPERATIONAL
,
431 FW_STATISTICS_DURATION
,
433 }; /* FW_STATISTICS_TYPE_API_E_VER_1 */
436 * struct iwl_statistics_ntfy_hdr
439 * @version: version of the struct
440 * @size: size in bytes
442 struct iwl_statistics_ntfy_hdr
{
446 }; /* STATISTICS_NTFY_HDR_API_S_VER_1 */
449 * struct iwl_statistics_operational_ntfy
451 * @hdr: general statistics header
452 * @flags: bitmap of possible notification structures
453 * @mac_id: mac on which the beacon was received
454 * @beacon_filter_average_energy: Average energy [-dBm] of the 2
456 * @beacon_filter_reason: beacon filter reason
457 * @radio_temperature: radio temperature
458 * @air_time: air time
459 * @beacon_counter: all beacons (both filtered and not filtered)
460 * @beacon_average_energy: all beacons (both filtered and not
462 * @beacon_rssi_a: beacon RSSI on antenna A
463 * @beacon_rssi_b: beacon RSSI on antenna B
464 * @rx_bytes: per MAC RX byte count
466 * @tx_time: usec the radio is transmitting.
467 * @on_time_rf: The total time in usec the RF is awake.
468 * @on_time_scan: usec the radio is awake due to scan.
469 * @average_energy: in fact it is minus the energy..
470 * @reserved: reserved
472 struct iwl_statistics_operational_ntfy
{
473 struct iwl_statistics_ntfy_hdr hdr
;
476 __le32 beacon_filter_average_energy
;
477 __le32 beacon_filter_reason
;
478 __le32 radio_temperature
;
479 __le32 air_time
[MAC_INDEX_AUX
];
480 __le32 beacon_counter
[MAC_INDEX_AUX
];
481 __le32 beacon_average_energy
[MAC_INDEX_AUX
];
482 __le32 beacon_rssi_a
;
483 __le32 beacon_rssi_b
;
484 __le32 rx_bytes
[MAC_INDEX_AUX
];
489 __le32 average_energy
[IWL_MVM_STATION_COUNT_MAX
];
491 } __packed
; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */
494 * struct iwl_statistics_phy_ntfy
496 * @hdr: general statistics header
497 * RX PHY related statistics
498 * @energy_and_config: ???
499 * @rssi_band: @31:24 rssiAllBand_B, 23:16 rssiInBand_B, 15:8
500 * rssiAllBand_A, 7:0 rssiInBand_A
501 * @agc_word: @31:16 agcWord_B, 15:0 agcWord_A
502 * @agc_gain: @19:10 agcGain_B, 9:0 agcGain_A
503 * @dfe_gain: @19:10 dfeGain_B, 9:0 dfeGain_A
504 * @snr_calc_main: @18:0 snrCalcMain
505 * @energy_calc_main: @18:0 energyCalcMain
506 * @snr_calc_aux: @18:0 snrCalcAux
507 * @dsp_dc_estim_a: @27:14 dspDcEstimQA, 13:0 dspDcEstimIA
508 * @dsp_dc_estim_b: @27:14 dspDcEstimQB, 13:0 dspDcEstimIB
509 * @ina_detec_type_and_ofdm_corr_comb: @31:31 inaDetectCckMrc,
510 * 30:27 inaDetectType, 26:0 ofdmCorrComb
511 * @cw_corr_comb: @26:0 cwCorrComb
512 * @rssi_comb: @25:0 rssiComb
513 * @auto_corr_cck: @23:12 autoCck, 11:00 crossCck
514 * @ofdm_fine_freq_and_pina_freq_err: @18:7 ofdmFineFreq, 6:0
516 * @snrm_evm_main: @31:0 snrmEvmMain
517 * @snrm_evm_aux: @31:0 snrmEvmAux
518 * @rx_rate: @31:0 rate
519 * TX PHY related statistics
520 * @per_chain_enums_and_dsp_atten_a: @perChainEnumsAndDspAtten
522 * @target_power_and_power_meas_a: @31:16 targetPower_A, 15:0
523 * powerMeasuredCalc_A
524 * @tx_config_as_i_and_ac_a: @31:16 txConfigAsI_A, 15:0
526 * @predist_dcq_and_dci_a: @31:16 predist_dci_A, 15:0
528 * @per_chain_enums_and_dsp_atten_b: @perChainEnumsAndDspAtten
530 * @target_power_and_power_meas_b: @31:16 targetPower_B, 15:0
531 * powerMeasuredCalc_B
532 * @tx_config_as_i_and_ac_b: @31:16 txConfigAsI_B, 15:0
534 * @predist_dcq_and_dci_b: @31:16 predist_dci_B, 15:0
536 * @tx_rate: @31:0 rate
537 * @tlc_backoff: @31:0 tlcBackoff
538 * @mpapd_calib_mode_mpapd_calib_type_a: @31:16
539 * mpapdCalibMode_A, 15:0 mpapdCalibType_A
540 * @psat_and_phy_power_limit_a: @31:16 psat_A, 15:0
542 * @sar_and_regulatory_power_limit_a: @31:16 sarPowerLimit_A,
543 * 15:0 regulatoryPowerLimit_A
544 * @mpapd_calib_mode_mpapd_calib_type_b: @31:16
545 * mpapdCalibMode_B, 15:0 mpapdCalibType_B
546 * @psat_and_phy_power_limit_b: @31:16 psat_B, 15:0
548 * @sar_and_regulatory_power_limit_b: @31:16 sarPowerLimit_B,
549 * 15:0 regulatoryPowerLimit_B
550 * @srd_and_driver_power_limits: @31:16 srdPowerLimit, 15:0
552 * @reserved: reserved
554 struct iwl_statistics_phy_ntfy
{
555 struct iwl_statistics_ntfy_hdr hdr
;
556 __le32 energy_and_config
;
561 __le32 snr_calc_main
;
562 __le32 energy_calc_main
;
564 __le32 dsp_dc_estim_a
;
565 __le32 dsp_dc_estim_b
;
566 __le32 ina_detec_type_and_ofdm_corr_comb
;
569 __le32 auto_corr_cck
;
570 __le32 ofdm_fine_freq_and_pina_freq_err
;
571 __le32 snrm_evm_main
;
574 __le32 per_chain_enums_and_dsp_atten_a
;
575 __le32 target_power_and_power_meas_a
;
576 __le32 tx_config_as_i_and_ac_a
;
577 __le32 predist_dcq_and_dci_a
;
578 __le32 per_chain_enums_and_dsp_atten_b
;
579 __le32 target_power_and_power_meas_b
;
580 __le32 tx_config_as_i_and_ac_b
;
581 __le32 predist_dcq_and_dci_b
;
584 __le32 mpapd_calib_mode_mpapd_calib_type_a
;
585 __le32 psat_and_phy_power_limit_a
;
586 __le32 sar_and_regulatory_power_limit_a
;
587 __le32 mpapd_calib_mode_mpapd_calib_type_b
;
588 __le32 psat_and_phy_power_limit_b
;
589 __le32 sar_and_regulatory_power_limit_b
;
590 __le32 srd_and_driver_power_limits
;
592 } __packed
; /* STATISTICS_PHY_NTFY_API_S_VER_1 */
595 * struct iwl_statistics_mac_ntfy
597 * @hdr: general statistics header
598 * @bcast_filter_passed_per_mac: bcast filter passed per mac
599 * @bcast_filter_dropped_per_mac: bcast filter dropped per mac
600 * @bcast_filter_passed_per_filter: bcast filter passed per filter
601 * @bcast_filter_dropped_per_filter: bcast filter dropped per filter
602 * @reserved: reserved
604 struct iwl_statistics_mac_ntfy
{
605 struct iwl_statistics_ntfy_hdr hdr
;
606 __le32 bcast_filter_passed_per_mac
[NUM_MAC_INDEX_CDB
];
607 __le32 bcast_filter_dropped_per_mac
[NUM_MAC_INDEX_CDB
];
608 __le32 bcast_filter_passed_per_filter
[MAX_BCAST_FILTER_NUM
];
609 __le32 bcast_filter_dropped_per_filter
[MAX_BCAST_FILTER_NUM
];
611 } __packed
; /* STATISTICS_MAC_NTFY_API_S_VER_1 */
614 * struct iwl_statistics_rx_ntfy
616 * @hdr: general statistics header
617 * @rx_agg_mpdu_cnt: aggregation frame count (number of
619 * @rx_agg_cnt: number of RX Aggregations
620 * @unsupported_mcs: number of PLCP headers that have rate which
621 * is unsupported by DSP
622 * @bogus_cts: CTS received when not expecting CTS
623 * @bogus_ack: ACK received when not expecting ACK
624 * @rx_byte_count: ???
625 * @rx_packet_count: ???
626 * @missed_beacons: ???
627 * @unresponded_rts: un-responded RTS, due to NAV not zero
628 * @rxe_frame_limit_overrun: RXE got frame limit overrun
629 * @sent_ba_rsp_cnt: BA response TX count
630 * @late_rx_handle: count the number of times the RX path was
631 * aborted due to late entry
633 * @reserved: reserved
635 struct iwl_statistics_rx_ntfy
{
636 struct iwl_statistics_ntfy_hdr hdr
;
637 __le32 rx_agg_mpdu_cnt
;
639 __le32 unsupported_mcs
;
642 __le32 rx_byte_count
[MAC_INDEX_AUX
];
643 __le32 rx_packet_count
[MAC_INDEX_AUX
];
644 __le32 missed_beacons
;
645 __le32 unresponded_rts
;
646 __le32 rxe_frame_limit_overrun
;
647 __le32 sent_ba_rsp_cnt
;
648 __le32 late_rx_handle
;
651 } __packed
; /* STATISTICS_RX_NTFY_API_S_VER_1 */
654 * struct iwl_statistics_tx_ntfy
656 * @hdr: general statistics header
657 * @cts_timeout: timeout when waiting for CTS
658 * @ack_timeout: timeout when waiting for ACK
659 * @dump_msdu_cnt: number of MSDUs that were dumped due to any
661 * @burst_abort_missing_next_frame_cnt: number of times a burst
662 * was aborted due to missing next frame bytes in txfifo
663 * number of times got timeout when waiting for CTS/ACK/BA and energy was
664 * detected just after sending the RTS/DATA. this statistics may help getting
665 * interesting indicators, like the likelihood of collision (so the benefit of
666 * protection may be estimated Vs. its cost). Or how many of the failures are
667 * due to collision and how many due to SNR.
668 * For Link-quality the CTS collision indication is more reliable then the ACK
669 * collision indication as the RTS frame is short and has more chance that the
670 * frame/s which caused the collision continue after the RTS was sent.
671 * @cts_timeout_collision: ???
672 * ACK/BA failed and energy as detected after DATA
673 * Note: to get the collision ratio need to:
674 * ackOrBaTimeoutCollision / (ack_timeout + ba_timeout)
675 * @ack_or_ba_timeout_collision: ???
676 * @ba_timeout: timeout when waiting for immediate BA response
677 * @ba_reschedule_frames: failed to get BA response and
678 * rescheduled all the non-ACKed frames
679 * gives the avarage number of frames inside aggregation
680 * @scd_query_agg_frame_cnt: ???
681 * @scd_query_no_agg: scheduler query prevented aggregation
682 * @scd_query_agg: scheduler query allowed aggregation
683 * @scd_query_mismatch: scheduler query inaccurate, either too
685 * @agg_terminated_underrun: aggregation was terminated due to
687 * @agg_terminated_bt_prio_kill: aggregation was terminated due
689 * @tx_kill_on_long_retry: count the tx frames dropped due to
690 * long retry limit (DATA frame failed)
691 * @tx_kill_on_short_retry: count the tx frames dropped due to
692 * short retry limit (RTS frame failed)
693 * TX deffer on energy. This counter is reset on each successful transmit.
694 * When timer exceed TX deffer limit than will be uCode assert.
695 * @tx_deffer_counter: ???
696 * @tx_deffer_base_time: Keep the time of the last successful
698 * @tx_underrun: TX killed due to underrun
699 * @bt_defer: TX deferred due to BT priority, so probably TX was
701 * @tx_kill_on_dsp_timeout: TX killed on DSP problem detected
702 * @tx_kill_on_immediate_quiet: TX killed due to immediate quiet
703 * @kill_ba_cnt: number of times sending BA failed
704 * @kill_ack_cnt: number of times sending ACK failed
705 * @kill_cts_cnt: number of times sending CTS failed
706 * @burst_terminated: Count burst or fragmentation termination
708 * @late_tx_vec_wr_cnt: ???
709 * TX is not sent because ucode failed to notify the TRM in SIFS-delta from
710 * ON_AIR deassertion.
711 * @late_rx2_tx_cnt: ???
712 * @scd_query_cnt: count the times SCD query was done to check
714 * @tx_frames_acked_in_agg: count the number of frames
715 * transmitted inside AGG and were successful
716 * @last_tx_ch_width_indx: ???
717 * number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160
718 * @rx_detected_per_ch_width: ???
719 * @success_per_ch_width: ???
720 * @fail_per_ch_width: ???
721 * @reserved: reserved
723 struct iwl_statistics_tx_ntfy
{
724 struct iwl_statistics_ntfy_hdr hdr
;
727 __le32 dump_msdu_cnt
;
728 __le32 burst_abort_missing_next_frame_cnt
;
729 __le32 cts_timeout_collision
;
730 __le32 ack_or_ba_timeout_collision
;
732 __le32 ba_reschedule_frames
;
733 __le32 scd_query_agg_frame_cnt
;
734 __le32 scd_query_no_agg
;
735 __le32 scd_query_agg
;
736 __le32 scd_query_mismatch
;
737 __le32 agg_terminated_underrun
;
738 __le32 agg_terminated_bt_prio_kill
;
739 __le32 tx_kill_on_long_retry
;
740 __le32 tx_kill_on_short_retry
;
741 __le32 tx_deffer_counter
;
742 __le32 tx_deffer_base_time
;
745 __le32 tx_kill_on_dsp_timeout
;
746 __le32 tx_kill_on_immediate_quiet
;
750 __le32 burst_terminated
;
751 __le32 late_tx_vec_wr_cnt
;
752 __le32 late_rx2_tx_cnt
;
753 __le32 scd_query_cnt
;
754 __le32 tx_frames_acked_in_agg
;
755 __le32 last_tx_ch_width_indx
;
756 __le32 rx_detected_per_ch_width
[4];
757 __le32 success_per_ch_width
[4];
758 __le32 fail_per_ch_width
[4];
760 } __packed
; /* STATISTICS_TX_NTFY_API_S_VER_1 */
763 * struct iwl_statistics_duration_ntfy
765 * @hdr: general statistics header
766 * @cont_burst_chk_cnt: number of times continuation or
767 * fragmentation or bursting was checked
768 * @cont_burst_cnt: number of times continuation or fragmentation
769 * or bursting was successful
770 * @wait_for_silence_timeout_cnt: ???
771 * @reserved: reserved
773 struct iwl_statistics_duration_ntfy
{
774 struct iwl_statistics_ntfy_hdr hdr
;
775 __le32 cont_burst_chk_cnt
;
776 __le32 cont_burst_cnt
;
777 __le32 wait_for_silence_timeout_cnt
;
779 } __packed
; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */
782 * struct iwl_statistics_he_ntfy
784 * @hdr: general statistics header
786 * @rx_siga_valid_cnt: rx HE SIG-A valid
787 * @rx_siga_invalid_cnt: rx HE SIG-A invalid
788 * received HE frames w/ valid Sig-A
789 * @rx_trig_based_frame_cnt: rx HE-TB (trig-based)
790 * @rx_su_frame_cnt: rx HE-SU
791 * @rx_sigb_invalid_cnt: rx (suspected) HE-MU w/ bad SIG-B
792 * @rx_our_bss_color_cnt: rx valid HE SIG-A w/ our BSS color
793 * @rx_other_bss_color_cnt: rx valid HE SIG-A w/ other BSS color
794 * @rx_zero_bss_color_cnt: ???
795 * received HE-MU frames w/ good Sig-B
796 * @rx_mu_for_us_cnt: match AID
797 * @rx_mu_not_for_us_cnt: no matched AID
798 * received HE-MU frames for us (w/ our AID)
799 * @rx_mu_nss_ar: 0 - SISO, 1 - MIMO2
800 * @rx_mu_mimo_cnt: full BW RU, compressed SIG-B
801 * @rx_mu_ru_bw_ar: MU alloc, MHz: 0 - 2, 1 - 5, 2 - 10, 3 - 20,
802 * 4 - 40, 5 - 80, 6 - 160
803 * received trigger frames
804 * @rx_trig_for_us_cnt: ???
805 * @rx_trig_not_for_us_cnt: ???
807 * @rx_trig_with_cs_req_cnt: ???
808 * @rx_trig_type_ar: ???
809 * @rx_trig_in_agg_cnt: ???
810 * basic trigger for us allocations
811 * @rx_basic_trig_alloc_nss_ar: ???
812 * @rx_basic_trig_alloc_mu_mimo_cnt: ???
813 * @rx_basic_trig_alloc_ru_bw_ar: ???
814 * @rx_basic_trig_total_byte_cnt: ???
816 * @tx_trig_based_cs_req_fail_cnt: ???
817 * @tx_trig_based_sifs_ok_cnt: ???
818 * @tx_trig_based_sifs_fail_cnt: ???
819 * @tx_trig_based_byte_cnt: ???
820 * @tx_trig_based_pad_byte_cnt: ???
821 * @tx_trig_based_frame_cnt: ???
822 * @tx_trig_based_acked_frame_cnt: ???
823 * @tx_trig_based_ack_timeout_cnt: ???
825 * @tx_su_frame_cnt: ???
826 * EDCA <--> MU-EDCA transitions
827 * @tx_edca_to_mu_edca_cnt: ???
828 * @tx_mu_edca_to_edca_by_timeout_cnt: ???
829 * @tx_mu_edca_to_edca_by_ack_fail_cnt: ???
830 * @tx_mu_edca_to_edca_by_small_alloc_cnt: ???
831 * @reserved: reserved
833 struct iwl_statistics_he_ntfy
{
834 struct iwl_statistics_ntfy_hdr hdr
;
835 __le32 rx_siga_valid_cnt
;
836 __le32 rx_siga_invalid_cnt
;
837 __le32 rx_trig_based_frame_cnt
;
838 __le32 rx_su_frame_cnt
;
839 __le32 rx_sigb_invalid_cnt
;
840 __le32 rx_our_bss_color_cnt
;
841 __le32 rx_other_bss_color_cnt
;
842 __le32 rx_zero_bss_color_cnt
;
843 __le32 rx_mu_for_us_cnt
;
844 __le32 rx_mu_not_for_us_cnt
;
845 __le32 rx_mu_nss_ar
[2];
846 __le32 rx_mu_mimo_cnt
;
847 __le32 rx_mu_ru_bw_ar
[7];
848 __le32 rx_trig_for_us_cnt
;
849 __le32 rx_trig_not_for_us_cnt
;
850 __le32 rx_trig_with_cs_req_cnt
;
851 __le32 rx_trig_type_ar
[8 + 1];
852 __le32 rx_trig_in_agg_cnt
;
853 __le32 rx_basic_trig_alloc_nss_ar
[2];
854 __le32 rx_basic_trig_alloc_mu_mimo_cnt
;
855 __le32 rx_basic_trig_alloc_ru_bw_ar
[7];
856 __le32 rx_basic_trig_total_byte_cnt
;
857 __le32 tx_trig_based_cs_req_fail_cnt
;
858 __le32 tx_trig_based_sifs_ok_cnt
;
859 __le32 tx_trig_based_sifs_fail_cnt
;
860 __le32 tx_trig_based_byte_cnt
;
861 __le32 tx_trig_based_pad_byte_cnt
;
862 __le32 tx_trig_based_frame_cnt
;
863 __le32 tx_trig_based_acked_frame_cnt
;
864 __le32 tx_trig_based_ack_timeout_cnt
;
865 __le32 tx_su_frame_cnt
;
866 __le32 tx_edca_to_mu_edca_cnt
;
867 __le32 tx_mu_edca_to_edca_by_timeout_cnt
;
868 __le32 tx_mu_edca_to_edca_by_ack_fail_cnt
;
869 __le32 tx_mu_edca_to_edca_by_small_alloc_cnt
;
871 } __packed
; /* STATISTICS_HE_NTFY_API_S_VER_1 */
873 #endif /* __iwl_fw_api_stats_h__ */