brintos

brintos / linux-shallow public Read only

0
0
Text · 35.0 KiB · 0a9f14f Raw
1087 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */2/*3 * Copyright (C) 2012-2014, 2018, 2020 - 2021, 2023 - 2024 Intel Corporation4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH5 * Copyright (C) 2016-2017 Intel Deutschland GmbH6 */7#ifndef __iwl_fw_api_stats_h__8#define __iwl_fw_api_stats_h__9#include "mac.h"10#include "mac-cfg.h"11 12struct mvm_statistics_dbg {13	__le32 burst_check;14	__le32 burst_count;15	__le32 wait_for_silence_timeout_cnt;16	u8 reserved[12];17} __packed; /* STATISTICS_DEBUG_API_S_VER_2 */18 19struct mvm_statistics_div {20	__le32 tx_on_a;21	__le32 tx_on_b;22	__le32 exec_time;23	__le32 probe_time;24	__le32 rssi_ant;25	__le32 reserved2;26} __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */27 28/**29 * struct mvm_statistics_rx_non_phy30 * @bogus_cts: CTS received when not expecting CTS31 * @bogus_ack: ACK received when not expecting ACK32 * @non_channel_beacons: beacons with our bss id but not on our serving channel33 * @channel_beacons: beacons with our bss id and in our serving channel34 * @num_missed_bcon: number of missed beacons35 * @adc_rx_saturation_time: count in 0.8us units the time the ADC was in36 *	saturation37 * @ina_detection_search_time: total time (in 0.8us) searched for INA38 * @beacon_silence_rssi_a: RSSI silence after beacon frame39 * @beacon_silence_rssi_b: RSSI silence after beacon frame40 * @beacon_silence_rssi_c: RSSI silence after beacon frame41 * @interference_data_flag: flag for interference data availability. 1 when data42 *	is available.43 * @channel_load: counts RX Enable time in uSec44 * @beacon_rssi_a: beacon RSSI on antenna A45 * @beacon_rssi_b: beacon RSSI on antenna B46 * @beacon_rssi_c: beacon RSSI on antenna C47 * @beacon_energy_a: beacon energy on antenna A48 * @beacon_energy_b: beacon energy on antenna B49 * @beacon_energy_c: beacon energy on antenna C50 * @num_bt_kills: number of BT "kills" (frame TX aborts)51 * @mac_id: mac ID52 */53struct mvm_statistics_rx_non_phy {54	__le32 bogus_cts;55	__le32 bogus_ack;56	__le32 non_channel_beacons;57	__le32 channel_beacons;58	__le32 num_missed_bcon;59	__le32 adc_rx_saturation_time;60	__le32 ina_detection_search_time;61	__le32 beacon_silence_rssi_a;62	__le32 beacon_silence_rssi_b;63	__le32 beacon_silence_rssi_c;64	__le32 interference_data_flag;65	__le32 channel_load;66	__le32 beacon_rssi_a;67	__le32 beacon_rssi_b;68	__le32 beacon_rssi_c;69	__le32 beacon_energy_a;70	__le32 beacon_energy_b;71	__le32 beacon_energy_c;72	__le32 num_bt_kills;73	__le32 mac_id;74} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_4 */75 76struct mvm_statistics_rx_non_phy_v3 {77	__le32 bogus_cts;	/* CTS received when not expecting CTS */78	__le32 bogus_ack;	/* ACK received when not expecting ACK */79	__le32 non_bssid_frames;	/* number of frames with BSSID that80					 * doesn't belong to the STA BSSID */81	__le32 filtered_frames;	/* count frames that were dumped in the82				 * filtering process */83	__le32 non_channel_beacons;	/* beacons with our bss id but not on84					 * our serving channel */85	__le32 channel_beacons;	/* beacons with our bss id and in our86				 * serving channel */87	__le32 num_missed_bcon;	/* number of missed beacons */88	__le32 adc_rx_saturation_time;	/* count in 0.8us units the time the89					 * ADC was in saturation */90	__le32 ina_detection_search_time;/* total time (in 0.8us) searched91					  * for INA */92	__le32 beacon_silence_rssi_a;	/* RSSI silence after beacon frame */93	__le32 beacon_silence_rssi_b;	/* RSSI silence after beacon frame */94	__le32 beacon_silence_rssi_c;	/* RSSI silence after beacon frame */95	__le32 interference_data_flag;	/* flag for interference data96					 * availability. 1 when data is97					 * available. */98	__le32 channel_load;		/* counts RX Enable time in uSec */99	__le32 dsp_false_alarms;	/* DSP false alarm (both OFDM100					 * and CCK) counter */101	__le32 beacon_rssi_a;102	__le32 beacon_rssi_b;103	__le32 beacon_rssi_c;104	__le32 beacon_energy_a;105	__le32 beacon_energy_b;106	__le32 beacon_energy_c;107	__le32 num_bt_kills;108	__le32 mac_id;109	__le32 directed_data_mpdu;110} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */111 112struct mvm_statistics_rx_phy {113	__le32 unresponded_rts;114	__le32 rxe_frame_lmt_overrun;115	__le32 sent_ba_rsp_cnt;116	__le32 dsp_self_kill;117	__le32 reserved;118} __packed; /* STATISTICS_RX_PHY_API_S_VER_3 */119 120struct mvm_statistics_rx_phy_v2 {121	__le32 ina_cnt;122	__le32 fina_cnt;123	__le32 plcp_err;124	__le32 crc32_err;125	__le32 overrun_err;126	__le32 early_overrun_err;127	__le32 crc32_good;128	__le32 false_alarm_cnt;129	__le32 fina_sync_err_cnt;130	__le32 sfd_timeout;131	__le32 fina_timeout;132	__le32 unresponded_rts;133	__le32 rxe_frame_lmt_overrun;134	__le32 sent_ack_cnt;135	__le32 sent_cts_cnt;136	__le32 sent_ba_rsp_cnt;137	__le32 dsp_self_kill;138	__le32 mh_format_err;139	__le32 re_acq_main_rssi_sum;140	__le32 reserved;141} __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */142 143struct mvm_statistics_rx_ht_phy_v1 {144	__le32 plcp_err;145	__le32 overrun_err;146	__le32 early_overrun_err;147	__le32 crc32_good;148	__le32 crc32_err;149	__le32 mh_format_err;150	__le32 agg_crc32_good;151	__le32 agg_mpdu_cnt;152	__le32 agg_cnt;153	__le32 unsupport_mcs;154} __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_1 */155 156struct mvm_statistics_rx_ht_phy {157	__le32 mh_format_err;158	__le32 agg_mpdu_cnt;159	__le32 agg_cnt;160	__le32 unsupport_mcs;161} __packed;  /* STATISTICS_HT_RX_PHY_API_S_VER_2 */162 163struct mvm_statistics_tx_non_phy_v3 {164	__le32 preamble_cnt;165	__le32 rx_detected_cnt;166	__le32 bt_prio_defer_cnt;167	__le32 bt_prio_kill_cnt;168	__le32 few_bytes_cnt;169	__le32 cts_timeout;170	__le32 ack_timeout;171	__le32 expected_ack_cnt;172	__le32 actual_ack_cnt;173	__le32 dump_msdu_cnt;174	__le32 burst_abort_next_frame_mismatch_cnt;175	__le32 burst_abort_missing_next_frame_cnt;176	__le32 cts_timeout_collision;177	__le32 ack_or_ba_timeout_collision;178} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */179 180struct mvm_statistics_tx_non_phy {181	__le32 bt_prio_defer_cnt;182	__le32 bt_prio_kill_cnt;183	__le32 few_bytes_cnt;184	__le32 cts_timeout;185	__le32 ack_timeout;186	__le32 dump_msdu_cnt;187	__le32 burst_abort_next_frame_mismatch_cnt;188	__le32 burst_abort_missing_next_frame_cnt;189	__le32 cts_timeout_collision;190	__le32 ack_or_ba_timeout_collision;191} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_4 */192 193#define MAX_CHAINS 3194 195struct mvm_statistics_tx_non_phy_agg {196	__le32 ba_timeout;197	__le32 ba_reschedule_frames;198	__le32 scd_query_agg_frame_cnt;199	__le32 scd_query_no_agg;200	__le32 scd_query_agg;201	__le32 scd_query_mismatch;202	__le32 frame_not_ready;203	__le32 underrun;204	__le32 bt_prio_kill;205	__le32 rx_ba_rsp_cnt;206	__s8 txpower[MAX_CHAINS];207	__s8 reserved;208	__le32 reserved2;209} __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */210 211struct mvm_statistics_tx_channel_width {212	__le32 ext_cca_narrow_ch20[1];213	__le32 ext_cca_narrow_ch40[2];214	__le32 ext_cca_narrow_ch80[3];215	__le32 ext_cca_narrow_ch160[4];216	__le32 last_tx_ch_width_indx;217	__le32 rx_detected_per_ch_width[4];218	__le32 success_per_ch_width[4];219	__le32 fail_per_ch_width[4];220}; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */221 222struct mvm_statistics_tx_v4 {223	struct mvm_statistics_tx_non_phy_v3 general;224	struct mvm_statistics_tx_non_phy_agg agg;225	struct mvm_statistics_tx_channel_width channel_width;226} __packed; /* STATISTICS_TX_API_S_VER_4 */227 228struct mvm_statistics_tx {229	struct mvm_statistics_tx_non_phy general;230	struct mvm_statistics_tx_non_phy_agg agg;231	struct mvm_statistics_tx_channel_width channel_width;232} __packed; /* STATISTICS_TX_API_S_VER_5 */233 234 235struct mvm_statistics_bt_activity {236	__le32 hi_priority_tx_req_cnt;237	__le32 hi_priority_tx_denied_cnt;238	__le32 lo_priority_tx_req_cnt;239	__le32 lo_priority_tx_denied_cnt;240	__le32 hi_priority_rx_req_cnt;241	__le32 hi_priority_rx_denied_cnt;242	__le32 lo_priority_rx_req_cnt;243	__le32 lo_priority_rx_denied_cnt;244} __packed;  /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */245 246struct mvm_statistics_general_common_v19 {247	__le32 radio_temperature;248	__le32 radio_voltage;249	struct mvm_statistics_dbg dbg;250	__le32 sleep_time;251	__le32 slots_out;252	__le32 slots_idle;253	__le32 ttl_timestamp;254	struct mvm_statistics_div slow_div;255	__le32 rx_enable_counter;256	/*257	 * num_of_sos_states:258	 *  count the number of times we have to re-tune259	 *  in order to get out of bad PHY status260	 */261	__le32 num_of_sos_states;262	__le32 beacon_filtered;263	__le32 missed_beacons;264	u8 beacon_filter_average_energy;265	u8 beacon_filter_reason;266	u8 beacon_filter_current_energy;267	u8 beacon_filter_reserved;268	__le32 beacon_filter_delta_time;269	struct mvm_statistics_bt_activity bt_activity;270	__le64 rx_time;271	__le64 on_time_rf;272	__le64 on_time_scan;273	__le64 tx_time;274} __packed;275 276struct mvm_statistics_general_common {277	__le32 radio_temperature;278	struct mvm_statistics_dbg dbg;279	__le32 sleep_time;280	__le32 slots_out;281	__le32 slots_idle;282	__le32 ttl_timestamp;283	struct mvm_statistics_div slow_div;284	__le32 rx_enable_counter;285	/*286	 * num_of_sos_states:287	 *  count the number of times we have to re-tune288	 *  in order to get out of bad PHY status289	 */290	__le32 num_of_sos_states;291	__le32 beacon_filtered;292	__le32 missed_beacons;293	u8 beacon_filter_average_energy;294	u8 beacon_filter_reason;295	u8 beacon_filter_current_energy;296	u8 beacon_filter_reserved;297	__le32 beacon_filter_delta_time;298	struct mvm_statistics_bt_activity bt_activity;299	__le64 rx_time;300	__le64 on_time_rf;301	__le64 on_time_scan;302	__le64 tx_time;303} __packed; /* STATISTICS_GENERAL_API_S_VER_10 */304 305struct mvm_statistics_general_v8 {306	struct mvm_statistics_general_common_v19 common;307	__le32 beacon_counter[NUM_MAC_INDEX];308	u8 beacon_average_energy[NUM_MAC_INDEX];309	u8 reserved[4 - (NUM_MAC_INDEX % 4)];310} __packed; /* STATISTICS_GENERAL_API_S_VER_8 */311 312struct mvm_statistics_general {313	struct mvm_statistics_general_common common;314	__le32 beacon_counter[MAC_INDEX_AUX];315	u8 beacon_average_energy[MAC_INDEX_AUX];316	u8 reserved[8 - MAC_INDEX_AUX];317} __packed; /* STATISTICS_GENERAL_API_S_VER_10 */318 319/**320 * struct mvm_statistics_load - RX statistics for multi-queue devices321 * @air_time: accumulated air time, per mac322 * @byte_count: accumulated byte count, per mac323 * @pkt_count: accumulated packet count, per mac324 * @avg_energy: average RSSI, per station325 */326struct mvm_statistics_load {327	__le32 air_time[MAC_INDEX_AUX];328	__le32 byte_count[MAC_INDEX_AUX];329	__le32 pkt_count[MAC_INDEX_AUX];330	u8 avg_energy[IWL_STATION_COUNT_MAX];331} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */332 333struct mvm_statistics_load_v1 {334	__le32 air_time[NUM_MAC_INDEX];335	__le32 byte_count[NUM_MAC_INDEX];336	__le32 pkt_count[NUM_MAC_INDEX];337	u8 avg_energy[IWL_STATION_COUNT_MAX];338} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */339 340struct mvm_statistics_rx {341	struct mvm_statistics_rx_phy ofdm;342	struct mvm_statistics_rx_phy cck;343	struct mvm_statistics_rx_non_phy general;344	struct mvm_statistics_rx_ht_phy ofdm_ht;345} __packed; /* STATISTICS_RX_API_S_VER_4 */346 347struct mvm_statistics_rx_v3 {348	struct mvm_statistics_rx_phy_v2 ofdm;349	struct mvm_statistics_rx_phy_v2 cck;350	struct mvm_statistics_rx_non_phy_v3 general;351	struct mvm_statistics_rx_ht_phy_v1 ofdm_ht;352} __packed; /* STATISTICS_RX_API_S_VER_3 */353 354/*355 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)356 *357 * By default, uCode issues this notification after receiving a beacon358 * while associated.  To disable this behavior, set DISABLE_NOTIF flag in the359 * STATISTICS_CMD (0x9c), below.360 */361 362struct iwl_notif_statistics_v10 {363	__le32 flag;364	struct mvm_statistics_rx_v3 rx;365	struct mvm_statistics_tx_v4 tx;366	struct mvm_statistics_general_v8 general;367} __packed; /* STATISTICS_NTFY_API_S_VER_10 */368 369struct iwl_notif_statistics_v11 {370	__le32 flag;371	struct mvm_statistics_rx_v3 rx;372	struct mvm_statistics_tx_v4 tx;373	struct mvm_statistics_general_v8 general;374	struct mvm_statistics_load_v1 load_stats;375} __packed; /* STATISTICS_NTFY_API_S_VER_11 */376 377struct iwl_notif_statistics {378	__le32 flag;379	struct mvm_statistics_rx rx;380	struct mvm_statistics_tx tx;381	struct mvm_statistics_general general;382	struct mvm_statistics_load load_stats;383} __packed; /* STATISTICS_NTFY_API_S_VER_13 */384 385/**386 * enum iwl_statistics_notif_flags - flags used in statistics notification387 * @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report388 */389enum iwl_statistics_notif_flags {390	IWL_STATISTICS_REPLY_FLG_CLEAR		= 0x1,391};392 393/**394 * enum iwl_statistics_cmd_flags - flags used in statistics command395 * @IWL_STATISTICS_FLG_CLEAR: request to clear statistics after the report396 *	that's sent after this command397 * @IWL_STATISTICS_FLG_DISABLE_NOTIF: disable unilateral statistics398 *	notifications399 */400enum iwl_statistics_cmd_flags {401	IWL_STATISTICS_FLG_CLEAR		= 0x1,402	IWL_STATISTICS_FLG_DISABLE_NOTIF	= 0x2,403};404 405/**406 * struct iwl_statistics_cmd - statistics config command407 * @flags: flags from &enum iwl_statistics_cmd_flags408 */409struct iwl_statistics_cmd {410	__le32 flags;411} __packed; /* STATISTICS_CMD_API_S_VER_1 */412 413#define MAX_BCAST_FILTER_NUM		8414 415/**416 * enum iwl_statistics_notify_type_id - type_id used in system statistics417 *	command418 * @IWL_STATS_NTFY_TYPE_ID_OPER: request legacy statistics419 * @IWL_STATS_NTFY_TYPE_ID_OPER_PART1: request operational part1 statistics420 * @IWL_STATS_NTFY_TYPE_ID_OPER_PART2: request operational part2 statistics421 * @IWL_STATS_NTFY_TYPE_ID_OPER_PART3: request operational part3 statistics422 * @IWL_STATS_NTFY_TYPE_ID_OPER_PART4: request operational part4 statistics423 */424enum iwl_statistics_notify_type_id {425	IWL_STATS_NTFY_TYPE_ID_OPER		= BIT(0),426	IWL_STATS_NTFY_TYPE_ID_OPER_PART1	= BIT(1),427	IWL_STATS_NTFY_TYPE_ID_OPER_PART2	= BIT(2),428	IWL_STATS_NTFY_TYPE_ID_OPER_PART3	= BIT(3),429	IWL_STATS_NTFY_TYPE_ID_OPER_PART4	= BIT(4),430};431 432/**433 * enum iwl_statistics_cfg_flags - cfg_mask used in system statistics command434 * @IWL_STATS_CFG_FLG_DISABLE_NTFY_MSK: 0 for enable, 1 for disable435 * @IWL_STATS_CFG_FLG_ON_DEMAND_NTFY_MSK: 0 for periodic, 1 for on-demand436 * @IWL_STATS_CFG_FLG_RESET_MSK: 0 for reset statistics after437 *	sending the notification, 1 for do not reset statistics after sending438 *	the notification439 */440enum iwl_statistics_cfg_flags {441	IWL_STATS_CFG_FLG_DISABLE_NTFY_MSK	= BIT(0),442	IWL_STATS_CFG_FLG_ON_DEMAND_NTFY_MSK	= BIT(1),443	IWL_STATS_CFG_FLG_RESET_MSK		= BIT(2),444};445 446/**447 * struct iwl_system_statistics_cmd - system statistics command448 * @cfg_mask: configuration mask, &enum iwl_statistics_cfg_flags449 * @config_time_sec: time in sec for periodic notification450 * @type_id_mask: type_id masks, &enum iwl_statistics_notify_type_id451 */452struct iwl_system_statistics_cmd {453	__le32 cfg_mask;454	__le32 config_time_sec;455	__le32 type_id_mask;456} __packed; /* STATISTICS_FW_CMD_API_S_VER_1 */457 458/**459 * enum iwl_fw_statistics_type460 *461 * @FW_STATISTICS_OPERATIONAL: operational statistics462 * @FW_STATISTICS_PHY: phy statistics463 * @FW_STATISTICS_MAC: mac statistics464 * @FW_STATISTICS_RX: rx statistics465 * @FW_STATISTICS_TX: tx statistics466 * @FW_STATISTICS_DURATION: duration statistics467 * @FW_STATISTICS_HE: he statistics468 */469enum iwl_fw_statistics_type {470	FW_STATISTICS_OPERATIONAL,471	FW_STATISTICS_PHY,472	FW_STATISTICS_MAC,473	FW_STATISTICS_RX,474	FW_STATISTICS_TX,475	FW_STATISTICS_DURATION,476	FW_STATISTICS_HE,477}; /* FW_STATISTICS_TYPE_API_E_VER_1 */478 479#define IWL_STATISTICS_TYPE_MSK 0x7f480/**481 * struct iwl_statistics_ntfy_hdr482 *483 * @type: struct type484 * @version: version of the struct485 * @size: size in bytes486 */487struct iwl_statistics_ntfy_hdr {488	u8 type;489	u8 version;490	__le16 size;491}; /* STATISTICS_NTFY_HDR_API_S_VER_1 */492 493/**494 * struct iwl_stats_ntfy_per_link495 *496 * @beacon_filter_average_energy: Average energy [-dBm] of the 2497 *	 antennas.498 * @air_time: air time499 * @beacon_counter: all beacons (both filtered and not filtered)500 * @beacon_average_energy: Average energy [-dBm] of all beacons501 *	(both filtered and not filtered)502 * @beacon_rssi_a: beacon RSSI on antenna A503 * @beacon_rssi_b: beacon RSSI on antenna B504 * @rx_bytes: RX byte count505 */506struct iwl_stats_ntfy_per_link {507	__le32 beacon_filter_average_energy;508	__le32 air_time;509	__le32 beacon_counter;510	__le32 beacon_average_energy;511	__le32 beacon_rssi_a;512	__le32 beacon_rssi_b;513	__le32 rx_bytes;514} __packed; /* STATISTICS_NTFY_PER_LINK_API_S_VER_1 */515 516/**517 * struct iwl_stats_ntfy_part1_per_link518 *519 * @rx_time: rx time520 * @tx_time: tx time521 * @rx_action: action frames handled by FW522 * @tx_action: action frames generated and transmitted by FW523 * @cca_defers: cca defer count524 * @beacon_filtered: filtered out beacons525 */526struct iwl_stats_ntfy_part1_per_link {527	__le64 rx_time;528	__le64 tx_time;529	__le32 rx_action;530	__le32 tx_action;531	__le32 cca_defers;532	__le32 beacon_filtered;533} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_PART1_PER_LINK_API_S_VER_1 */534 535/**536 * struct iwl_stats_ntfy_per_mac537 *538 * @beacon_filter_average_energy: Average energy [-dBm] of the 2539 *	 antennas.540 * @air_time: air time541 * @beacon_counter: all beacons (both filtered and not filtered)542 * @beacon_average_energy: all beacons (both filtered and not543 *	 filtered)544 * @beacon_rssi_a: beacon RSSI on antenna A545 * @beacon_rssi_b: beacon RSSI on antenna B546 * @rx_bytes: RX byte count547 */548struct iwl_stats_ntfy_per_mac {549	__le32 beacon_filter_average_energy;550	__le32 air_time;551	__le32 beacon_counter;552	__le32 beacon_average_energy;553	__le32 beacon_rssi_a;554	__le32 beacon_rssi_b;555	__le32 rx_bytes;556} __packed; /* STATISTICS_NTFY_PER_MAC_API_S_VER_1 */557 558#define IWL_STATS_MAX_BW_INDEX 5559/** struct iwl_stats_ntfy_per_phy560 * @channel_load: channel load561 * @channel_load_by_us: device contribution to MCLM562 * @channel_load_not_by_us: other devices' contribution to MCLM563 * @clt: CLT HW timer (TIM_CH_LOAD2)564 * @act: active accumulator SW565 * @elp: elapsed time accumulator SW566 * @rx_detected_per_ch_width: number of deferred TX per channel width,567 *	0 - 20, 1/2/3 - 40/80/160568 * @success_per_ch_width: number of frames that got ACK/BACK/CTS569 *	per channel BW. note, BACK counted as 1570 * @fail_per_ch_width: number of frames that didn't get ACK/BACK/CTS571 *	per channel BW. note BACK counted as 1572 * @last_tx_ch_width_indx: last txed frame channel width index573 */574struct iwl_stats_ntfy_per_phy {575	__le32 channel_load;576	__le32 channel_load_by_us;577	__le32 channel_load_not_by_us;578	__le32 clt;579	__le32 act;580	__le32 elp;581	__le32 rx_detected_per_ch_width[IWL_STATS_MAX_BW_INDEX];582	__le32 success_per_ch_width[IWL_STATS_MAX_BW_INDEX];583	__le32 fail_per_ch_width[IWL_STATS_MAX_BW_INDEX];584	__le32 last_tx_ch_width_indx;585} __packed; /* STATISTICS_NTFY_PER_PHY_API_S_VER_1 */586 587/**588 * struct iwl_stats_ntfy_per_sta589 *590 * @average_energy: in fact it is minus the energy..591 */592struct iwl_stats_ntfy_per_sta {593	__le32 average_energy;594} __packed; /* STATISTICS_NTFY_PER_STA_API_S_VER_1 */595 596#define IWL_STATS_MAX_PHY_OPERATIONAL 3597#define IWL_STATS_MAX_FW_LINKS	(IWL_FW_MAX_LINK_ID + 1)598 599/**600 * struct iwl_system_statistics_notif_oper601 *602 * @time_stamp: time when the notification is sent from firmware603 * @per_link: per link statistics, &struct iwl_stats_ntfy_per_link604 * @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy605 * @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta606 */607struct iwl_system_statistics_notif_oper {608	__le32 time_stamp;609	struct iwl_stats_ntfy_per_link per_link[IWL_STATS_MAX_FW_LINKS];610	struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL];611	struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];612} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_API_S_VER_3 */613 614/**615 * struct iwl_system_statistics_part1_notif_oper616 *617 * @time_stamp: time when the notification is sent from firmware618 * @per_link: per link statistics &struct iwl_stats_ntfy_part1_per_link619 * @per_phy_crc_error_stats: per phy crc error statistics620 */621struct iwl_system_statistics_part1_notif_oper {622	__le32 time_stamp;623	struct iwl_stats_ntfy_part1_per_link per_link[IWL_STATS_MAX_FW_LINKS];624	__le32 per_phy_crc_error_stats[IWL_STATS_MAX_PHY_OPERATIONAL];625} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_PART1_API_S_VER_4 */626 627/**628 * struct iwl_system_statistics_end_notif629 *630 * @time_stamp: time when the notification is sent from firmware631 */632struct iwl_system_statistics_end_notif {633	__le32 time_stamp;634} __packed; /* STATISTICS_FW_NTFY_END_API_S_VER_1 */635 636/**637 * struct iwl_statistics_operational_ntfy638 *639 * @hdr: general statistics header640 * @flags: bitmap of possible notification structures641 * @per_mac: per mac statistics, &struct iwl_stats_ntfy_per_mac642 * @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy643 * @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta644 * @rx_time: rx time645 * @tx_time: usec the radio is transmitting.646 * @on_time_rf: The total time in usec the RF is awake.647 * @on_time_scan: usec the radio is awake due to scan.648 */649struct iwl_statistics_operational_ntfy {650	struct iwl_statistics_ntfy_hdr hdr;651	__le32 flags;652	struct iwl_stats_ntfy_per_mac per_mac[MAC_INDEX_AUX];653	struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL];654	struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];655	__le64 rx_time;656	__le64 tx_time;657	__le64 on_time_rf;658	__le64 on_time_scan;659} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_15 */660 661/**662 * struct iwl_statistics_operational_ntfy_ver_14663 *664 * @hdr: general statistics header665 * @flags: bitmap of possible notification structures666 * @mac_id: mac on which the beacon was received667 * @beacon_filter_average_energy: Average energy [-dBm] of the 2668 *	 antennas.669 * @beacon_filter_reason: beacon filter reason670 * @radio_temperature: radio temperature671 * @air_time: air time672 * @beacon_counter: all beacons (both filtered and not filtered)673 * @beacon_average_energy: all beacons (both filtered and not674 *	 filtered)675 * @beacon_rssi_a: beacon RSSI on antenna A676 * @beacon_rssi_b: beacon RSSI on antenna B677 * @rx_bytes: per MAC RX byte count678 * @rx_time: rx time679 * @tx_time: usec the radio is transmitting.680 * @on_time_rf: The total time in usec the RF is awake.681 * @on_time_scan: usec the radio is awake due to scan.682 * @average_energy: in fact it is minus the energy..683 * @reserved: reserved684 */685struct iwl_statistics_operational_ntfy_ver_14 {686	struct iwl_statistics_ntfy_hdr hdr;687	__le32 flags;688	__le32 mac_id;689	__le32 beacon_filter_average_energy;690	__le32 beacon_filter_reason;691	__le32 radio_temperature;692	__le32 air_time[MAC_INDEX_AUX];693	__le32 beacon_counter[MAC_INDEX_AUX];694	__le32 beacon_average_energy[MAC_INDEX_AUX];695	__le32 beacon_rssi_a;696	__le32 beacon_rssi_b;697	__le32 rx_bytes[MAC_INDEX_AUX];698	__le64 rx_time;699	__le64 tx_time;700	__le64 on_time_rf;701	__le64 on_time_scan;702	__le32 average_energy[IWL_STATION_COUNT_MAX];703	__le32 reserved;704} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */705 706/**707 * struct iwl_statistics_phy_ntfy708 *709 * @hdr: general statistics header710 * RX PHY related statistics711 * @energy_and_config: ???712 * @rssi_band: @31:24 rssiAllBand_B, 23:16 rssiInBand_B, 15:8713 *	 rssiAllBand_A, 7:0 rssiInBand_A714 * @agc_word: @31:16 agcWord_B, 15:0 agcWord_A715 * @agc_gain: @19:10 agcGain_B, 9:0 agcGain_A716 * @dfe_gain: @19:10 dfeGain_B, 9:0 dfeGain_A717 * @snr_calc_main: @18:0 snrCalcMain718 * @energy_calc_main: @18:0 energyCalcMain719 * @snr_calc_aux: @18:0 snrCalcAux720 * @dsp_dc_estim_a: @27:14 dspDcEstimQA, 13:0 dspDcEstimIA721 * @dsp_dc_estim_b: @27:14 dspDcEstimQB, 13:0 dspDcEstimIB722 * @ina_detec_type_and_ofdm_corr_comb: @31:31 inaDetectCckMrc,723 *	 30:27 inaDetectType, 26:0 ofdmCorrComb724 * @cw_corr_comb: @26:0 cwCorrComb725 * @rssi_comb: @25:0 rssiComb726 * @auto_corr_cck: @23:12 autoCck, 11:00 crossCck727 * @ofdm_fine_freq_and_pina_freq_err: @18:7 ofdmFineFreq, 6:0728 *	 ofdmPinaFreqErr729 * @snrm_evm_main: @31:0 snrmEvmMain730 * @snrm_evm_aux: @31:0 snrmEvmAux731 * @rx_rate: @31:0 rate732 * TX PHY related statistics733 * @per_chain_enums_and_dsp_atten_a: @perChainEnumsAndDspAtten734 *	 (per version)735 * @target_power_and_power_meas_a: @31:16 targetPower_A, 15:0736 *	 powerMeasuredCalc_A737 * @tx_config_as_i_and_ac_a: @31:16 txConfigAsI_A, 15:0738 *	 txConfigAc_A739 * @predist_dcq_and_dci_a: @31:16 predist_dci_A, 15:0740 *	 predist_dcq_A741 * @per_chain_enums_and_dsp_atten_b: @perChainEnumsAndDspAtten742 *	 (per version)743 * @target_power_and_power_meas_b: @31:16 targetPower_B, 15:0744 *	 powerMeasuredCalc_B745 * @tx_config_as_i_and_ac_b: @31:16 txConfigAsI_B, 15:0746 *	 txConfigAc_B747 * @predist_dcq_and_dci_b: @31:16 predist_dci_B, 15:0748 *	 predist_dcq_B749 * @tx_rate: @31:0 rate750 * @tlc_backoff: @31:0 tlcBackoff751 * @mpapd_calib_mode_mpapd_calib_type_a: @31:16752 *	 mpapdCalibMode_A, 15:0 mpapdCalibType_A753 * @psat_and_phy_power_limit_a: @31:16 psat_A, 15:0754 *	 phyPowerLimit_A755 * @sar_and_regulatory_power_limit_a: @31:16 sarPowerLimit_A,756 *	 15:0 regulatoryPowerLimit_A757 * @mpapd_calib_mode_mpapd_calib_type_b: @31:16758 *	 mpapdCalibMode_B, 15:0 mpapdCalibType_B759 * @psat_and_phy_power_limit_b: @31:16 psat_B, 15:0760 *	 phyPowerLimit_B761 * @sar_and_regulatory_power_limit_b: @31:16 sarPowerLimit_B,762 *	 15:0 regulatoryPowerLimit_B763 * @srd_and_driver_power_limits: @31:16 srdPowerLimit, 15:0764 *	 driverPowerLimit765 * @reserved: reserved766 */767struct iwl_statistics_phy_ntfy {768	struct iwl_statistics_ntfy_hdr hdr;769	__le32 energy_and_config;770	__le32 rssi_band;771	__le32 agc_word;772	__le32 agc_gain;773	__le32 dfe_gain;774	__le32 snr_calc_main;775	__le32 energy_calc_main;776	__le32 snr_calc_aux;777	__le32 dsp_dc_estim_a;778	__le32 dsp_dc_estim_b;779	__le32 ina_detec_type_and_ofdm_corr_comb;780	__le32 cw_corr_comb;781	__le32 rssi_comb;782	__le32 auto_corr_cck;783	__le32 ofdm_fine_freq_and_pina_freq_err;784	__le32 snrm_evm_main;785	__le32 snrm_evm_aux;786	__le32 rx_rate;787	__le32 per_chain_enums_and_dsp_atten_a;788	__le32 target_power_and_power_meas_a;789	__le32 tx_config_as_i_and_ac_a;790	__le32 predist_dcq_and_dci_a;791	__le32 per_chain_enums_and_dsp_atten_b;792	__le32 target_power_and_power_meas_b;793	__le32 tx_config_as_i_and_ac_b;794	__le32 predist_dcq_and_dci_b;795	__le32 tx_rate;796	__le32 tlc_backoff;797	__le32 mpapd_calib_mode_mpapd_calib_type_a;798	__le32 psat_and_phy_power_limit_a;799	__le32 sar_and_regulatory_power_limit_a;800	__le32 mpapd_calib_mode_mpapd_calib_type_b;801	__le32 psat_and_phy_power_limit_b;802	__le32 sar_and_regulatory_power_limit_b;803	__le32 srd_and_driver_power_limits;804	__le32 reserved;805} __packed; /* STATISTICS_PHY_NTFY_API_S_VER_1 */806 807/**808 * struct iwl_statistics_mac_ntfy809 *810 * @hdr: general statistics header811 * @bcast_filter_passed_per_mac: bcast filter passed per mac812 * @bcast_filter_dropped_per_mac: bcast filter dropped per mac813 * @bcast_filter_passed_per_filter: bcast filter passed per filter814 * @bcast_filter_dropped_per_filter: bcast filter dropped per filter815 * @reserved: reserved816 */817struct iwl_statistics_mac_ntfy {818	struct iwl_statistics_ntfy_hdr hdr;819	__le32 bcast_filter_passed_per_mac[NUM_MAC_INDEX_CDB];820	__le32 bcast_filter_dropped_per_mac[NUM_MAC_INDEX_CDB];821	__le32 bcast_filter_passed_per_filter[MAX_BCAST_FILTER_NUM];822	__le32 bcast_filter_dropped_per_filter[MAX_BCAST_FILTER_NUM];823	__le32 reserved;824} __packed; /* STATISTICS_MAC_NTFY_API_S_VER_1 */825 826/**827 * struct iwl_statistics_rx_ntfy828 *829 * @hdr: general statistics header830 * @rx_agg_mpdu_cnt: aggregation frame count (number of831 *	 delimiters)832 * @rx_agg_cnt: number of RX Aggregations833 * @unsupported_mcs: number of PLCP headers that have rate which834 *	 is unsupported by DSP835 * @bogus_cts: CTS received when not expecting CTS836 * @bogus_ack: ACK received when not expecting ACK837 * @rx_byte_count: ???838 * @rx_packet_count: ???839 * @missed_beacons: ???840 * @unresponded_rts: un-responded RTS, due to NAV not zero841 * @rxe_frame_limit_overrun: RXE got frame limit overrun842 * @sent_ba_rsp_cnt: BA response TX count843 * @late_rx_handle: count the number of times the RX path was844 *	 aborted due to late entry845 * @num_bt_kills: ???846 * @reserved: reserved847 */848struct iwl_statistics_rx_ntfy {849	struct iwl_statistics_ntfy_hdr hdr;850	__le32 rx_agg_mpdu_cnt;851	__le32 rx_agg_cnt;852	__le32 unsupported_mcs;853	__le32 bogus_cts;854	__le32 bogus_ack;855	__le32 rx_byte_count[MAC_INDEX_AUX];856	__le32 rx_packet_count[MAC_INDEX_AUX];857	__le32 missed_beacons;858	__le32 unresponded_rts;859	__le32 rxe_frame_limit_overrun;860	__le32 sent_ba_rsp_cnt;861	__le32 late_rx_handle;862	__le32 num_bt_kills;863	__le32 reserved;864} __packed; /* STATISTICS_RX_NTFY_API_S_VER_1 */865 866/**867 * struct iwl_statistics_tx_ntfy868 *869 * @hdr: general statistics header870 * @cts_timeout: timeout when waiting for CTS871 * @ack_timeout: timeout when waiting for ACK872 * @dump_msdu_cnt: number of MSDUs that were dumped due to any873 *	 reason874 * @burst_abort_missing_next_frame_cnt: number of times a burst875 *	 was aborted due to missing next frame bytes in txfifo876 * number of times got timeout when waiting for CTS/ACK/BA and energy was877 * detected just after sending the RTS/DATA. this statistics may help getting878 * interesting indicators, like the likelihood of collision (so the benefit of879 * protection may be estimated Vs. its cost). Or how many of the failures are880 * due to collision and how many due to SNR.881 * For Link-quality the CTS collision indication is more reliable then the ACK882 * collision indication as the RTS frame is short and has more chance that the883 * frame/s which caused the collision continue after the RTS was sent.884 * @cts_timeout_collision: ???885 * ACK/BA failed and energy as detected after DATA886 * Note: to get the collision ratio need to:887 * ackOrBaTimeoutCollision / (ack_timeout + ba_timeout)888 * @ack_or_ba_timeout_collision: ???889 * @ba_timeout: timeout when waiting for immediate BA response890 * @ba_reschedule_frames: failed to get BA response and891 *	 rescheduled all the non-ACKed frames892 * gives the avarage number of frames inside aggregation893 * @scd_query_agg_frame_cnt: ???894 * @scd_query_no_agg: scheduler query prevented aggregation895 * @scd_query_agg: scheduler query allowed aggregation896 * @scd_query_mismatch: scheduler query inaccurate, either too897 *	 short or too long898 * @agg_terminated_underrun: aggregation was terminated due to899 *	 underrun900 * @agg_terminated_bt_prio_kill: aggregation was terminated due901 *	 to BT902 * @tx_kill_on_long_retry: count the tx frames dropped due to903 *	 long retry limit (DATA frame failed)904 * @tx_kill_on_short_retry: count the tx frames dropped due to905 *	 short retry limit (RTS frame failed)906 * TX deffer on energy. This counter is reset on each successful transmit.907 * When timer exceed TX deffer limit than will be uCode assert.908 * @tx_deffer_counter: ???909 * @tx_deffer_base_time: Keep the time of the last successful910 *	 transmit911 * @tx_underrun: TX killed due to underrun912 * @bt_defer: TX deferred due to BT priority, so probably TX was913 *	 not started.914 * @tx_kill_on_dsp_timeout: TX killed on DSP problem detected915 * @tx_kill_on_immediate_quiet: TX killed due to immediate quiet916 * @kill_ba_cnt: number of times sending BA failed917 * @kill_ack_cnt: number of times sending ACK failed918 * @kill_cts_cnt: number of times sending CTS failed919 * @burst_terminated: Count burst or fragmentation termination920 *	 occurrence921 * @late_tx_vec_wr_cnt: ???922 * TX is not sent because ucode failed to notify the TRM in SIFS-delta from923 * ON_AIR deassertion.924 * @late_rx2_tx_cnt: ???925 * @scd_query_cnt: count the times SCD query was done to check926 *	 for TX AGG927 * @tx_frames_acked_in_agg: count the number of frames928 *	 transmitted inside AGG and were successful929 * @last_tx_ch_width_indx: ???930 * number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160931 * @rx_detected_per_ch_width: ???932 * @success_per_ch_width: ???933 * @fail_per_ch_width: ???934 * @reserved: reserved935 */936struct iwl_statistics_tx_ntfy {937	struct iwl_statistics_ntfy_hdr hdr;938	__le32 cts_timeout;939	__le32 ack_timeout;940	__le32 dump_msdu_cnt;941	__le32 burst_abort_missing_next_frame_cnt;942	__le32 cts_timeout_collision;943	__le32 ack_or_ba_timeout_collision;944	__le32 ba_timeout;945	__le32 ba_reschedule_frames;946	__le32 scd_query_agg_frame_cnt;947	__le32 scd_query_no_agg;948	__le32 scd_query_agg;949	__le32 scd_query_mismatch;950	__le32 agg_terminated_underrun;951	__le32 agg_terminated_bt_prio_kill;952	__le32 tx_kill_on_long_retry;953	__le32 tx_kill_on_short_retry;954	__le32 tx_deffer_counter;955	__le32 tx_deffer_base_time;956	__le32 tx_underrun;957	__le32 bt_defer;958	__le32 tx_kill_on_dsp_timeout;959	__le32 tx_kill_on_immediate_quiet;960	__le32 kill_ba_cnt;961	__le32 kill_ack_cnt;962	__le32 kill_cts_cnt;963	__le32 burst_terminated;964	__le32 late_tx_vec_wr_cnt;965	__le32 late_rx2_tx_cnt;966	__le32 scd_query_cnt;967	__le32 tx_frames_acked_in_agg;968	__le32 last_tx_ch_width_indx;969	__le32 rx_detected_per_ch_width[4];970	__le32 success_per_ch_width[4];971	__le32 fail_per_ch_width[4];972	__le32 reserved;973} __packed; /* STATISTICS_TX_NTFY_API_S_VER_1 */974 975/**976 * struct iwl_statistics_duration_ntfy977 *978 * @hdr: general statistics header979 * @cont_burst_chk_cnt: number of times continuation or980 *	 fragmentation or bursting was checked981 * @cont_burst_cnt: number of times continuation or fragmentation982 *	 or bursting was successful983 * @wait_for_silence_timeout_cnt: ???984 * @reserved: reserved985 */986struct iwl_statistics_duration_ntfy {987	struct iwl_statistics_ntfy_hdr hdr;988	__le32 cont_burst_chk_cnt;989	__le32 cont_burst_cnt;990	__le32 wait_for_silence_timeout_cnt;991	__le32 reserved;992} __packed; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */993 994/**995 * struct iwl_statistics_he_ntfy996 *997 * @hdr: general statistics header998 * received HE frames999 * @rx_siga_valid_cnt: rx HE SIG-A valid1000 * @rx_siga_invalid_cnt: rx HE SIG-A invalid1001 * received HE frames w/ valid Sig-A1002 * @rx_trig_based_frame_cnt: rx HE-TB (trig-based)1003 * @rx_su_frame_cnt: rx HE-SU1004 * @rx_sigb_invalid_cnt: rx (suspected) HE-MU w/ bad SIG-B1005 * @rx_our_bss_color_cnt: rx valid HE SIG-A w/ our BSS color1006 * @rx_other_bss_color_cnt: rx valid HE SIG-A w/ other BSS color1007 * @rx_zero_bss_color_cnt: ???1008 * received HE-MU frames w/ good Sig-B1009 * @rx_mu_for_us_cnt: match AID1010 * @rx_mu_not_for_us_cnt: no matched AID1011 * received HE-MU frames for us (w/ our AID)1012 * @rx_mu_nss_ar: 0 - SISO, 1 - MIMO21013 * @rx_mu_mimo_cnt: full BW RU, compressed SIG-B1014 * @rx_mu_ru_bw_ar: MU alloc, MHz: 0 - 2, 1 - 5, 2 - 10, 3 - 20,1015 *	 4 - 40, 5 - 80, 6 - 1601016 * received trigger frames1017 * @rx_trig_for_us_cnt: ???1018 * @rx_trig_not_for_us_cnt: ???1019 * trigger for us1020 * @rx_trig_with_cs_req_cnt: ???1021 * @rx_trig_type_ar: ???1022 * @rx_trig_in_agg_cnt: ???1023 * basic trigger for us allocations1024 * @rx_basic_trig_alloc_nss_ar: ???1025 * @rx_basic_trig_alloc_mu_mimo_cnt: ???1026 * @rx_basic_trig_alloc_ru_bw_ar: ???1027 * @rx_basic_trig_total_byte_cnt: ???1028 * trig-based TX1029 * @tx_trig_based_cs_req_fail_cnt: ???1030 * @tx_trig_based_sifs_ok_cnt: ???1031 * @tx_trig_based_sifs_fail_cnt: ???1032 * @tx_trig_based_byte_cnt: ???1033 * @tx_trig_based_pad_byte_cnt: ???1034 * @tx_trig_based_frame_cnt: ???1035 * @tx_trig_based_acked_frame_cnt: ???1036 * @tx_trig_based_ack_timeout_cnt: ???1037 * HE-SU TX1038 * @tx_su_frame_cnt: ???1039 * EDCA <--> MU-EDCA transitions1040 * @tx_edca_to_mu_edca_cnt: ???1041 * @tx_mu_edca_to_edca_by_timeout_cnt: ???1042 * @tx_mu_edca_to_edca_by_ack_fail_cnt: ???1043 * @tx_mu_edca_to_edca_by_small_alloc_cnt: ???1044 * @reserved: reserved1045 */1046struct iwl_statistics_he_ntfy {1047	struct iwl_statistics_ntfy_hdr hdr;1048	__le32 rx_siga_valid_cnt;1049	__le32 rx_siga_invalid_cnt;1050	__le32 rx_trig_based_frame_cnt;1051	__le32 rx_su_frame_cnt;1052	__le32 rx_sigb_invalid_cnt;1053	__le32 rx_our_bss_color_cnt;1054	__le32 rx_other_bss_color_cnt;1055	__le32 rx_zero_bss_color_cnt;1056	__le32 rx_mu_for_us_cnt;1057	__le32 rx_mu_not_for_us_cnt;1058	__le32 rx_mu_nss_ar[2];1059	__le32 rx_mu_mimo_cnt;1060	__le32 rx_mu_ru_bw_ar[7];1061	__le32 rx_trig_for_us_cnt;1062	__le32 rx_trig_not_for_us_cnt;1063	__le32 rx_trig_with_cs_req_cnt;1064	__le32 rx_trig_type_ar[8 + 1];1065	__le32 rx_trig_in_agg_cnt;1066	__le32 rx_basic_trig_alloc_nss_ar[2];1067	__le32 rx_basic_trig_alloc_mu_mimo_cnt;1068	__le32 rx_basic_trig_alloc_ru_bw_ar[7];1069	__le32 rx_basic_trig_total_byte_cnt;1070	__le32 tx_trig_based_cs_req_fail_cnt;1071	__le32 tx_trig_based_sifs_ok_cnt;1072	__le32 tx_trig_based_sifs_fail_cnt;1073	__le32 tx_trig_based_byte_cnt;1074	__le32 tx_trig_based_pad_byte_cnt;1075	__le32 tx_trig_based_frame_cnt;1076	__le32 tx_trig_based_acked_frame_cnt;1077	__le32 tx_trig_based_ack_timeout_cnt;1078	__le32 tx_su_frame_cnt;1079	__le32 tx_edca_to_mu_edca_cnt;1080	__le32 tx_mu_edca_to_edca_by_timeout_cnt;1081	__le32 tx_mu_edca_to_edca_by_ack_fail_cnt;1082	__le32 tx_mu_edca_to_edca_by_small_alloc_cnt;1083	__le32 reserved;1084} __packed; /* STATISTICS_HE_NTFY_API_S_VER_1 */1085 1086#endif /* __iwl_fw_api_stats_h__ */1087