hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/net/wireless/intel/iwlwifi/fw/api/stats.h
....@@ -5,9 +5,9 @@
55 *
66 * GPL LICENSE SUMMARY
77 *
8
- * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
98 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
109 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
10
+ * Copyright(c) 2012 - 2014, 2018, 2020 Intel Corporation
1111 *
1212 * This program is free software; you can redistribute it and/or modify
1313 * it under the terms of version 2 of the GNU General Public License as
....@@ -27,8 +27,8 @@
2727 *
2828 * BSD LICENSE
2929 *
30
- * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3130 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
31
+ * Copyright(c) 2012 - 2014, 2018, 2020 Intel Corporation
3232 * All rights reserved.
3333 *
3434 * Redistribution and use in source and binary forms, with or without
....@@ -363,14 +363,7 @@
363363 u8 reserved[4 - (NUM_MAC_INDEX % 4)];
364364 } __packed; /* STATISTICS_GENERAL_API_S_VER_8 */
365365
366
-struct mvm_statistics_general_cdb_v9 {
367
- struct mvm_statistics_general_common_v19 common;
368
- __le32 beacon_counter[NUM_MAC_INDEX_CDB];
369
- u8 beacon_average_energy[NUM_MAC_INDEX_CDB];
370
- u8 reserved[4 - (NUM_MAC_INDEX_CDB % 4)];
371
-} __packed; /* STATISTICS_GENERAL_API_S_VER_9 */
372
-
373
-struct mvm_statistics_general_cdb {
366
+struct mvm_statistics_general {
374367 struct mvm_statistics_general_common common;
375368 __le32 beacon_counter[MAC_INDEX_AUX];
376369 u8 beacon_average_energy[MAC_INDEX_AUX];
....@@ -388,14 +381,14 @@
388381 __le32 air_time[MAC_INDEX_AUX];
389382 __le32 byte_count[MAC_INDEX_AUX];
390383 __le32 pkt_count[MAC_INDEX_AUX];
391
- u8 avg_energy[IWL_MVM_STATION_COUNT];
384
+ u8 avg_energy[IWL_MVM_STATION_COUNT_MAX];
392385 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */
393386
394387 struct mvm_statistics_load_v1 {
395388 __le32 air_time[NUM_MAC_INDEX];
396389 __le32 byte_count[NUM_MAC_INDEX];
397390 __le32 pkt_count[NUM_MAC_INDEX];
398
- u8 avg_energy[IWL_MVM_STATION_COUNT];
391
+ u8 avg_energy[IWL_MVM_STATION_COUNT_MAX];
399392 } __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */
400393
401394 struct mvm_statistics_rx {
....@@ -435,11 +428,11 @@
435428 struct mvm_statistics_load_v1 load_stats;
436429 } __packed; /* STATISTICS_NTFY_API_S_VER_11 */
437430
438
-struct iwl_notif_statistics_cdb {
431
+struct iwl_notif_statistics {
439432 __le32 flag;
440433 struct mvm_statistics_rx rx;
441434 struct mvm_statistics_tx tx;
442
- struct mvm_statistics_general_cdb general;
435
+ struct mvm_statistics_general general;
443436 struct mvm_statistics_load load_stats;
444437 } __packed; /* STATISTICS_NTFY_API_S_VER_13 */
445438
....@@ -471,4 +464,465 @@
471464 __le32 flags;
472465 } __packed; /* STATISTICS_CMD_API_S_VER_1 */
473466
467
+#define MAX_BCAST_FILTER_NUM 8
468
+
469
+/**
470
+ * enum iwl_fw_statistics_type
471
+ *
472
+ * @FW_STATISTICS_OPERATIONAL: operational statistics
473
+ * @FW_STATISTICS_PHY: phy statistics
474
+ * @FW_STATISTICS_MAC: mac statistics
475
+ * @FW_STATISTICS_RX: rx statistics
476
+ * @FW_STATISTICS_TX: tx statistics
477
+ * @FW_STATISTICS_DURATION: duration statistics
478
+ * @FW_STATISTICS_HE: he statistics
479
+ */
480
+enum iwl_fw_statistics_type {
481
+ FW_STATISTICS_OPERATIONAL,
482
+ FW_STATISTICS_PHY,
483
+ FW_STATISTICS_MAC,
484
+ FW_STATISTICS_RX,
485
+ FW_STATISTICS_TX,
486
+ FW_STATISTICS_DURATION,
487
+ FW_STATISTICS_HE,
488
+}; /* FW_STATISTICS_TYPE_API_E_VER_1 */
489
+
490
+/**
491
+ * struct iwl_statistics_ntfy_hdr
492
+ *
493
+ * @type: struct type
494
+ * @version: version of the struct
495
+ * @size: size in bytes
496
+ */
497
+struct iwl_statistics_ntfy_hdr {
498
+ u8 type;
499
+ u8 version;
500
+ __le16 size;
501
+}; /* STATISTICS_NTFY_HDR_API_S_VER_1 */
502
+
503
+/**
504
+ * struct iwl_statistics_operational_ntfy
505
+ *
506
+ * @hdr: general statistics header
507
+ * @flags: bitmap of possible notification structures
508
+ * @mac_id: mac on which the beacon was received
509
+ * @beacon_filter_average_energy: Average energy [-dBm] of the 2
510
+ * antennas.
511
+ * @beacon_filter_reason: beacon filter reason
512
+ * @radio_temperature: radio temperature
513
+ * @air_time: air time
514
+ * @beacon_counter: all beacons (both filtered and not filtered)
515
+ * @beacon_average_energy: all beacons (both filtered and not
516
+ * filtered)
517
+ * @beacon_rssi_a: beacon RSSI on antenna A
518
+ * @beacon_rssi_b: beacon RSSI on antenna B
519
+ * @rx_bytes: per MAC RX byte count
520
+ * @rx_time: rx time
521
+ * @tx_time: usec the radio is transmitting.
522
+ * @on_time_rf: The total time in usec the RF is awake.
523
+ * @on_time_scan: usec the radio is awake due to scan.
524
+ * @average_energy: in fact it is minus the energy..
525
+ * @reserved: reserved
526
+ */
527
+struct iwl_statistics_operational_ntfy {
528
+ struct iwl_statistics_ntfy_hdr hdr;
529
+ __le32 flags;
530
+ __le32 mac_id;
531
+ __le32 beacon_filter_average_energy;
532
+ __le32 beacon_filter_reason;
533
+ __le32 radio_temperature;
534
+ __le32 air_time[MAC_INDEX_AUX];
535
+ __le32 beacon_counter[MAC_INDEX_AUX];
536
+ __le32 beacon_average_energy[MAC_INDEX_AUX];
537
+ __le32 beacon_rssi_a;
538
+ __le32 beacon_rssi_b;
539
+ __le32 rx_bytes[MAC_INDEX_AUX];
540
+ __le64 rx_time;
541
+ __le64 tx_time;
542
+ __le64 on_time_rf;
543
+ __le64 on_time_scan;
544
+ __le32 average_energy[IWL_MVM_STATION_COUNT_MAX];
545
+ __le32 reserved;
546
+} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */
547
+
548
+/**
549
+ * struct iwl_statistics_phy_ntfy
550
+ *
551
+ * @hdr: general statistics header
552
+ * RX PHY related statistics
553
+ * @energy_and_config: ???
554
+ * @rssi_band: @31:24 rssiAllBand_B, 23:16 rssiInBand_B, 15:8
555
+ * rssiAllBand_A, 7:0 rssiInBand_A
556
+ * @agc_word: @31:16 agcWord_B, 15:0 agcWord_A
557
+ * @agc_gain: @19:10 agcGain_B, 9:0 agcGain_A
558
+ * @dfe_gain: @19:10 dfeGain_B, 9:0 dfeGain_A
559
+ * @snr_calc_main: @18:0 snrCalcMain
560
+ * @energy_calc_main: @18:0 energyCalcMain
561
+ * @snr_calc_aux: @18:0 snrCalcAux
562
+ * @dsp_dc_estim_a: @27:14 dspDcEstimQA, 13:0 dspDcEstimIA
563
+ * @dsp_dc_estim_b: @27:14 dspDcEstimQB, 13:0 dspDcEstimIB
564
+ * @ina_detec_type_and_ofdm_corr_comb: @31:31 inaDetectCckMrc,
565
+ * 30:27 inaDetectType, 26:0 ofdmCorrComb
566
+ * @cw_corr_comb: @26:0 cwCorrComb
567
+ * @rssi_comb: @25:0 rssiComb
568
+ * @auto_corr_cck: @23:12 autoCck, 11:00 crossCck
569
+ * @ofdm_fine_freq_and_pina_freq_err: @18:7 ofdmFineFreq, 6:0
570
+ * ofdmPinaFreqErr
571
+ * @snrm_evm_main: @31:0 snrmEvmMain
572
+ * @snrm_evm_aux: @31:0 snrmEvmAux
573
+ * @rx_rate: @31:0 rate
574
+ * TX PHY related statistics
575
+ * @per_chain_enums_and_dsp_atten_a: @perChainEnumsAndDspAtten
576
+ * (per version)
577
+ * @target_power_and_power_meas_a: @31:16 targetPower_A, 15:0
578
+ * powerMeasuredCalc_A
579
+ * @tx_config_as_i_and_ac_a: @31:16 txConfigAsI_A, 15:0
580
+ * txConfigAc_A
581
+ * @predist_dcq_and_dci_a: @31:16 predist_dci_A, 15:0
582
+ * predist_dcq_A
583
+ * @per_chain_enums_and_dsp_atten_b: @perChainEnumsAndDspAtten
584
+ * (per version)
585
+ * @target_power_and_power_meas_b: @31:16 targetPower_B, 15:0
586
+ * powerMeasuredCalc_B
587
+ * @tx_config_as_i_and_ac_b: @31:16 txConfigAsI_B, 15:0
588
+ * txConfigAc_B
589
+ * @predist_dcq_and_dci_b: @31:16 predist_dci_B, 15:0
590
+ * predist_dcq_B
591
+ * @tx_rate: @31:0 rate
592
+ * @tlc_backoff: @31:0 tlcBackoff
593
+ * @mpapd_calib_mode_mpapd_calib_type_a: @31:16
594
+ * mpapdCalibMode_A, 15:0 mpapdCalibType_A
595
+ * @psat_and_phy_power_limit_a: @31:16 psat_A, 15:0
596
+ * phyPowerLimit_A
597
+ * @sar_and_regulatory_power_limit_a: @31:16 sarPowerLimit_A,
598
+ * 15:0 regulatoryPowerLimit_A
599
+ * @mpapd_calib_mode_mpapd_calib_type_b: @31:16
600
+ * mpapdCalibMode_B, 15:0 mpapdCalibType_B
601
+ * @psat_and_phy_power_limit_b: @31:16 psat_B, 15:0
602
+ * phyPowerLimit_B
603
+ * @sar_and_regulatory_power_limit_b: @31:16 sarPowerLimit_B,
604
+ * 15:0 regulatoryPowerLimit_B
605
+ * @srd_and_driver_power_limits: @31:16 srdPowerLimit, 15:0
606
+ * driverPowerLimit
607
+ * @reserved: reserved
608
+ */
609
+struct iwl_statistics_phy_ntfy {
610
+ struct iwl_statistics_ntfy_hdr hdr;
611
+ __le32 energy_and_config;
612
+ __le32 rssi_band;
613
+ __le32 agc_word;
614
+ __le32 agc_gain;
615
+ __le32 dfe_gain;
616
+ __le32 snr_calc_main;
617
+ __le32 energy_calc_main;
618
+ __le32 snr_calc_aux;
619
+ __le32 dsp_dc_estim_a;
620
+ __le32 dsp_dc_estim_b;
621
+ __le32 ina_detec_type_and_ofdm_corr_comb;
622
+ __le32 cw_corr_comb;
623
+ __le32 rssi_comb;
624
+ __le32 auto_corr_cck;
625
+ __le32 ofdm_fine_freq_and_pina_freq_err;
626
+ __le32 snrm_evm_main;
627
+ __le32 snrm_evm_aux;
628
+ __le32 rx_rate;
629
+ __le32 per_chain_enums_and_dsp_atten_a;
630
+ __le32 target_power_and_power_meas_a;
631
+ __le32 tx_config_as_i_and_ac_a;
632
+ __le32 predist_dcq_and_dci_a;
633
+ __le32 per_chain_enums_and_dsp_atten_b;
634
+ __le32 target_power_and_power_meas_b;
635
+ __le32 tx_config_as_i_and_ac_b;
636
+ __le32 predist_dcq_and_dci_b;
637
+ __le32 tx_rate;
638
+ __le32 tlc_backoff;
639
+ __le32 mpapd_calib_mode_mpapd_calib_type_a;
640
+ __le32 psat_and_phy_power_limit_a;
641
+ __le32 sar_and_regulatory_power_limit_a;
642
+ __le32 mpapd_calib_mode_mpapd_calib_type_b;
643
+ __le32 psat_and_phy_power_limit_b;
644
+ __le32 sar_and_regulatory_power_limit_b;
645
+ __le32 srd_and_driver_power_limits;
646
+ __le32 reserved;
647
+} __packed; /* STATISTICS_PHY_NTFY_API_S_VER_1 */
648
+
649
+/**
650
+ * struct iwl_statistics_mac_ntfy
651
+ *
652
+ * @hdr: general statistics header
653
+ * @bcast_filter_passed_per_mac: bcast filter passed per mac
654
+ * @bcast_filter_dropped_per_mac: bcast filter dropped per mac
655
+ * @bcast_filter_passed_per_filter: bcast filter passed per filter
656
+ * @bcast_filter_dropped_per_filter: bcast filter dropped per filter
657
+ * @reserved: reserved
658
+ */
659
+struct iwl_statistics_mac_ntfy {
660
+ struct iwl_statistics_ntfy_hdr hdr;
661
+ __le32 bcast_filter_passed_per_mac[NUM_MAC_INDEX_CDB];
662
+ __le32 bcast_filter_dropped_per_mac[NUM_MAC_INDEX_CDB];
663
+ __le32 bcast_filter_passed_per_filter[MAX_BCAST_FILTER_NUM];
664
+ __le32 bcast_filter_dropped_per_filter[MAX_BCAST_FILTER_NUM];
665
+ __le32 reserved;
666
+} __packed; /* STATISTICS_MAC_NTFY_API_S_VER_1 */
667
+
668
+/**
669
+ * struct iwl_statistics_rx_ntfy
670
+ *
671
+ * @hdr: general statistics header
672
+ * @rx_agg_mpdu_cnt: aggregation frame count (number of
673
+ * delimiters)
674
+ * @rx_agg_cnt: number of RX Aggregations
675
+ * @unsupported_mcs: number of PLCP headers that have rate which
676
+ * is unsupported by DSP
677
+ * @bogus_cts: CTS received when not expecting CTS
678
+ * @bogus_ack: ACK received when not expecting ACK
679
+ * @rx_byte_count: ???
680
+ * @rx_packet_count: ???
681
+ * @missed_beacons: ???
682
+ * @unresponded_rts: un-responded RTS, due to NAV not zero
683
+ * @rxe_frame_limit_overrun: RXE got frame limit overrun
684
+ * @sent_ba_rsp_cnt: BA response TX count
685
+ * @late_rx_handle: count the number of times the RX path was
686
+ * aborted due to late entry
687
+ * @num_bt_kills: ???
688
+ * @reserved: reserved
689
+ */
690
+struct iwl_statistics_rx_ntfy {
691
+ struct iwl_statistics_ntfy_hdr hdr;
692
+ __le32 rx_agg_mpdu_cnt;
693
+ __le32 rx_agg_cnt;
694
+ __le32 unsupported_mcs;
695
+ __le32 bogus_cts;
696
+ __le32 bogus_ack;
697
+ __le32 rx_byte_count[MAC_INDEX_AUX];
698
+ __le32 rx_packet_count[MAC_INDEX_AUX];
699
+ __le32 missed_beacons;
700
+ __le32 unresponded_rts;
701
+ __le32 rxe_frame_limit_overrun;
702
+ __le32 sent_ba_rsp_cnt;
703
+ __le32 late_rx_handle;
704
+ __le32 num_bt_kills;
705
+ __le32 reserved;
706
+} __packed; /* STATISTICS_RX_NTFY_API_S_VER_1 */
707
+
708
+/**
709
+ * struct iwl_statistics_tx_ntfy
710
+ *
711
+ * @hdr: general statistics header
712
+ * @cts_timeout: timeout when waiting for CTS
713
+ * @ack_timeout: timeout when waiting for ACK
714
+ * @dump_msdu_cnt: number of MSDUs that were dumped due to any
715
+ * reason
716
+ * @burst_abort_missing_next_frame_cnt: number of times a burst
717
+ * was aborted due to missing next frame bytes in txfifo
718
+ * number of times got timeout when waiting for CTS/ACK/BA and energy was
719
+ * detected just after sending the RTS/DATA. this statistics may help getting
720
+ * interesting indicators, like the likelihood of collision (so the benefit of
721
+ * protection may be estimated Vs. its cost). Or how many of the failures are
722
+ * due to collision and how many due to SNR.
723
+ * For Link-quality the CTS collision indication is more reliable then the ACK
724
+ * collision indication as the RTS frame is short and has more chance that the
725
+ * frame/s which caused the collision continue after the RTS was sent.
726
+ * @cts_timeout_collision: ???
727
+ * ACK/BA failed and energy as detected after DATA
728
+ * Note: to get the collision ratio need to:
729
+ * ackOrBaTimeoutCollision / (ack_timeout + ba_timeout)
730
+ * @ack_or_ba_timeout_collision: ???
731
+ * @ba_timeout: timeout when waiting for immediate BA response
732
+ * @ba_reschedule_frames: failed to get BA response and
733
+ * rescheduled all the non-ACKed frames
734
+ * gives the avarage number of frames inside aggregation
735
+ * @scd_query_agg_frame_cnt: ???
736
+ * @scd_query_no_agg: scheduler query prevented aggregation
737
+ * @scd_query_agg: scheduler query allowed aggregation
738
+ * @scd_query_mismatch: scheduler query inaccurate, either too
739
+ * short or too long
740
+ * @agg_terminated_underrun: aggregation was terminated due to
741
+ * underrun
742
+ * @agg_terminated_bt_prio_kill: aggregation was terminated due
743
+ * to BT
744
+ * @tx_kill_on_long_retry: count the tx frames dropped due to
745
+ * long retry limit (DATA frame failed)
746
+ * @tx_kill_on_short_retry: count the tx frames dropped due to
747
+ * short retry limit (RTS frame failed)
748
+ * TX deffer on energy. This counter is reset on each successful transmit.
749
+ * When timer exceed TX deffer limit than will be uCode assert.
750
+ * @tx_deffer_counter: ???
751
+ * @tx_deffer_base_time: Keep the time of the last successful
752
+ * transmit
753
+ * @tx_underrun: TX killed due to underrun
754
+ * @bt_defer: TX deferred due to BT priority, so probably TX was
755
+ * not started.
756
+ * @tx_kill_on_dsp_timeout: TX killed on DSP problem detected
757
+ * @tx_kill_on_immediate_quiet: TX killed due to immediate quiet
758
+ * @kill_ba_cnt: number of times sending BA failed
759
+ * @kill_ack_cnt: number of times sending ACK failed
760
+ * @kill_cts_cnt: number of times sending CTS failed
761
+ * @burst_terminated: Count burst or fragmentation termination
762
+ * occurrence
763
+ * @late_tx_vec_wr_cnt: ???
764
+ * TX is not sent because ucode failed to notify the TRM in SIFS-delta from
765
+ * ON_AIR deassertion.
766
+ * @late_rx2_tx_cnt: ???
767
+ * @scd_query_cnt: count the times SCD query was done to check
768
+ * for TX AGG
769
+ * @tx_frames_acked_in_agg: count the number of frames
770
+ * transmitted inside AGG and were successful
771
+ * @last_tx_ch_width_indx: ???
772
+ * number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160
773
+ * @rx_detected_per_ch_width: ???
774
+ * @success_per_ch_width: ???
775
+ * @fail_per_ch_width: ???
776
+ * @reserved: reserved
777
+ */
778
+struct iwl_statistics_tx_ntfy {
779
+ struct iwl_statistics_ntfy_hdr hdr;
780
+ __le32 cts_timeout;
781
+ __le32 ack_timeout;
782
+ __le32 dump_msdu_cnt;
783
+ __le32 burst_abort_missing_next_frame_cnt;
784
+ __le32 cts_timeout_collision;
785
+ __le32 ack_or_ba_timeout_collision;
786
+ __le32 ba_timeout;
787
+ __le32 ba_reschedule_frames;
788
+ __le32 scd_query_agg_frame_cnt;
789
+ __le32 scd_query_no_agg;
790
+ __le32 scd_query_agg;
791
+ __le32 scd_query_mismatch;
792
+ __le32 agg_terminated_underrun;
793
+ __le32 agg_terminated_bt_prio_kill;
794
+ __le32 tx_kill_on_long_retry;
795
+ __le32 tx_kill_on_short_retry;
796
+ __le32 tx_deffer_counter;
797
+ __le32 tx_deffer_base_time;
798
+ __le32 tx_underrun;
799
+ __le32 bt_defer;
800
+ __le32 tx_kill_on_dsp_timeout;
801
+ __le32 tx_kill_on_immediate_quiet;
802
+ __le32 kill_ba_cnt;
803
+ __le32 kill_ack_cnt;
804
+ __le32 kill_cts_cnt;
805
+ __le32 burst_terminated;
806
+ __le32 late_tx_vec_wr_cnt;
807
+ __le32 late_rx2_tx_cnt;
808
+ __le32 scd_query_cnt;
809
+ __le32 tx_frames_acked_in_agg;
810
+ __le32 last_tx_ch_width_indx;
811
+ __le32 rx_detected_per_ch_width[4];
812
+ __le32 success_per_ch_width[4];
813
+ __le32 fail_per_ch_width[4];
814
+ __le32 reserved;
815
+} __packed; /* STATISTICS_TX_NTFY_API_S_VER_1 */
816
+
817
+/**
818
+ * struct iwl_statistics_duration_ntfy
819
+ *
820
+ * @hdr: general statistics header
821
+ * @cont_burst_chk_cnt: number of times continuation or
822
+ * fragmentation or bursting was checked
823
+ * @cont_burst_cnt: number of times continuation or fragmentation
824
+ * or bursting was successful
825
+ * @wait_for_silence_timeout_cnt: ???
826
+ * @reserved: reserved
827
+ */
828
+struct iwl_statistics_duration_ntfy {
829
+ struct iwl_statistics_ntfy_hdr hdr;
830
+ __le32 cont_burst_chk_cnt;
831
+ __le32 cont_burst_cnt;
832
+ __le32 wait_for_silence_timeout_cnt;
833
+ __le32 reserved;
834
+} __packed; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */
835
+
836
+/**
837
+ * struct iwl_statistics_he_ntfy
838
+ *
839
+ * @hdr: general statistics header
840
+ * received HE frames
841
+ * @rx_siga_valid_cnt: rx HE SIG-A valid
842
+ * @rx_siga_invalid_cnt: rx HE SIG-A invalid
843
+ * received HE frames w/ valid Sig-A
844
+ * @rx_trig_based_frame_cnt: rx HE-TB (trig-based)
845
+ * @rx_su_frame_cnt: rx HE-SU
846
+ * @rx_sigb_invalid_cnt: rx (suspected) HE-MU w/ bad SIG-B
847
+ * @rx_our_bss_color_cnt: rx valid HE SIG-A w/ our BSS color
848
+ * @rx_other_bss_color_cnt: rx valid HE SIG-A w/ other BSS color
849
+ * @rx_zero_bss_color_cnt: ???
850
+ * received HE-MU frames w/ good Sig-B
851
+ * @rx_mu_for_us_cnt: match AID
852
+ * @rx_mu_not_for_us_cnt: no matched AID
853
+ * received HE-MU frames for us (w/ our AID)
854
+ * @rx_mu_nss_ar: 0 - SISO, 1 - MIMO2
855
+ * @rx_mu_mimo_cnt: full BW RU, compressed SIG-B
856
+ * @rx_mu_ru_bw_ar: MU alloc, MHz: 0 - 2, 1 - 5, 2 - 10, 3 - 20,
857
+ * 4 - 40, 5 - 80, 6 - 160
858
+ * received trigger frames
859
+ * @rx_trig_for_us_cnt: ???
860
+ * @rx_trig_not_for_us_cnt: ???
861
+ * trigger for us
862
+ * @rx_trig_with_cs_req_cnt: ???
863
+ * @rx_trig_type_ar: ???
864
+ * @rx_trig_in_agg_cnt: ???
865
+ * basic trigger for us allocations
866
+ * @rx_basic_trig_alloc_nss_ar: ???
867
+ * @rx_basic_trig_alloc_mu_mimo_cnt: ???
868
+ * @rx_basic_trig_alloc_ru_bw_ar: ???
869
+ * @rx_basic_trig_total_byte_cnt: ???
870
+ * trig-based TX
871
+ * @tx_trig_based_cs_req_fail_cnt: ???
872
+ * @tx_trig_based_sifs_ok_cnt: ???
873
+ * @tx_trig_based_sifs_fail_cnt: ???
874
+ * @tx_trig_based_byte_cnt: ???
875
+ * @tx_trig_based_pad_byte_cnt: ???
876
+ * @tx_trig_based_frame_cnt: ???
877
+ * @tx_trig_based_acked_frame_cnt: ???
878
+ * @tx_trig_based_ack_timeout_cnt: ???
879
+ * HE-SU TX
880
+ * @tx_su_frame_cnt: ???
881
+ * EDCA <--> MU-EDCA transitions
882
+ * @tx_edca_to_mu_edca_cnt: ???
883
+ * @tx_mu_edca_to_edca_by_timeout_cnt: ???
884
+ * @tx_mu_edca_to_edca_by_ack_fail_cnt: ???
885
+ * @tx_mu_edca_to_edca_by_small_alloc_cnt: ???
886
+ * @reserved: reserved
887
+ */
888
+struct iwl_statistics_he_ntfy {
889
+ struct iwl_statistics_ntfy_hdr hdr;
890
+ __le32 rx_siga_valid_cnt;
891
+ __le32 rx_siga_invalid_cnt;
892
+ __le32 rx_trig_based_frame_cnt;
893
+ __le32 rx_su_frame_cnt;
894
+ __le32 rx_sigb_invalid_cnt;
895
+ __le32 rx_our_bss_color_cnt;
896
+ __le32 rx_other_bss_color_cnt;
897
+ __le32 rx_zero_bss_color_cnt;
898
+ __le32 rx_mu_for_us_cnt;
899
+ __le32 rx_mu_not_for_us_cnt;
900
+ __le32 rx_mu_nss_ar[2];
901
+ __le32 rx_mu_mimo_cnt;
902
+ __le32 rx_mu_ru_bw_ar[7];
903
+ __le32 rx_trig_for_us_cnt;
904
+ __le32 rx_trig_not_for_us_cnt;
905
+ __le32 rx_trig_with_cs_req_cnt;
906
+ __le32 rx_trig_type_ar[8 + 1];
907
+ __le32 rx_trig_in_agg_cnt;
908
+ __le32 rx_basic_trig_alloc_nss_ar[2];
909
+ __le32 rx_basic_trig_alloc_mu_mimo_cnt;
910
+ __le32 rx_basic_trig_alloc_ru_bw_ar[7];
911
+ __le32 rx_basic_trig_total_byte_cnt;
912
+ __le32 tx_trig_based_cs_req_fail_cnt;
913
+ __le32 tx_trig_based_sifs_ok_cnt;
914
+ __le32 tx_trig_based_sifs_fail_cnt;
915
+ __le32 tx_trig_based_byte_cnt;
916
+ __le32 tx_trig_based_pad_byte_cnt;
917
+ __le32 tx_trig_based_frame_cnt;
918
+ __le32 tx_trig_based_acked_frame_cnt;
919
+ __le32 tx_trig_based_ack_timeout_cnt;
920
+ __le32 tx_su_frame_cnt;
921
+ __le32 tx_edca_to_mu_edca_cnt;
922
+ __le32 tx_mu_edca_to_edca_by_timeout_cnt;
923
+ __le32 tx_mu_edca_to_edca_by_ack_fail_cnt;
924
+ __le32 tx_mu_edca_to_edca_by_small_alloc_cnt;
925
+ __le32 reserved;
926
+} __packed; /* STATISTICS_HE_NTFY_API_S_VER_1 */
927
+
474928 #endif /* __iwl_fw_api_stats_h__ */