Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/iwlwifi/fw/api/stats.h
48425 views
1
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2
/*
3
* Copyright (C) 2012-2014, 2018, 2020-2021, 2023-2025 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
#include "mac-cfg.h"
11
12
struct 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
19
struct 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_phy
30
* @bogus_cts: CTS received when not expecting CTS
31
* @bogus_ack: ACK received when not expecting ACK
32
* @non_channel_beacons: beacons with our bss id but not on our serving channel
33
* @channel_beacons: beacons with our bss id and in our serving channel
34
* @num_missed_bcon: number of missed beacons
35
* @adc_rx_saturation_time: count in 0.8us units the time the ADC was in
36
* saturation
37
* @ina_detection_search_time: total time (in 0.8us) searched for INA
38
* @beacon_silence_rssi_a: RSSI silence after beacon frame
39
* @beacon_silence_rssi_b: RSSI silence after beacon frame
40
* @beacon_silence_rssi_c: RSSI silence after beacon frame
41
* @interference_data_flag: flag for interference data availability. 1 when data
42
* is available.
43
* @channel_load: counts RX Enable time in uSec
44
* @beacon_rssi_a: beacon RSSI on antenna A
45
* @beacon_rssi_b: beacon RSSI on antenna B
46
* @beacon_rssi_c: beacon RSSI on antenna C
47
* @beacon_energy_a: beacon energy on antenna A
48
* @beacon_energy_b: beacon energy on antenna B
49
* @beacon_energy_c: beacon energy on antenna C
50
* @num_bt_kills: number of BT "kills" (frame TX aborts)
51
* @mac_id: mac ID
52
*/
53
struct 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
76
struct 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 that
80
* doesn't belong to the STA BSSID */
81
__le32 filtered_frames; /* count frames that were dumped in the
82
* filtering process */
83
__le32 non_channel_beacons; /* beacons with our bss id but not on
84
* our serving channel */
85
__le32 channel_beacons; /* beacons with our bss id and in our
86
* serving channel */
87
__le32 num_missed_bcon; /* number of missed beacons */
88
__le32 adc_rx_saturation_time; /* count in 0.8us units the time the
89
* ADC was in saturation */
90
__le32 ina_detection_search_time;/* total time (in 0.8us) searched
91
* 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 data
96
* availability. 1 when data is
97
* available. */
98
__le32 channel_load; /* counts RX Enable time in uSec */
99
__le32 dsp_false_alarms; /* DSP false alarm (both OFDM
100
* 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
112
struct 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
120
struct 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
143
struct 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
156
struct 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
163
struct 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
180
struct 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 3
194
195
struct 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
211
struct 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
222
struct 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
228
struct 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
235
struct 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
246
struct 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-tune
259
* in order to get out of bad PHY status
260
*/
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
276
struct 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-tune
288
* in order to get out of bad PHY status
289
*/
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
305
struct 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
312
struct 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 devices
321
* @air_time: accumulated air time, per mac
322
* @byte_count: accumulated byte count, per mac
323
* @pkt_count: accumulated packet count, per mac
324
* @avg_energy: average RSSI, per station
325
*/
326
struct 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
333
struct 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
340
struct 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
347
struct 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 beacon
358
* while associated. To disable this behavior, set DISABLE_NOTIF flag in the
359
* STATISTICS_CMD (0x9c), below.
360
*/
361
362
struct 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
369
struct 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
377
struct 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 notification
387
* @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report
388
*/
389
enum iwl_statistics_notif_flags {
390
IWL_STATISTICS_REPLY_FLG_CLEAR = 0x1,
391
};
392
393
/**
394
* enum iwl_statistics_cmd_flags - flags used in statistics command
395
* @IWL_STATISTICS_FLG_CLEAR: request to clear statistics after the report
396
* that's sent after this command
397
* @IWL_STATISTICS_FLG_DISABLE_NOTIF: disable unilateral statistics
398
* notifications
399
*/
400
enum 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 command
407
* @flags: flags from &enum iwl_statistics_cmd_flags
408
*/
409
struct iwl_statistics_cmd {
410
__le32 flags;
411
} __packed; /* STATISTICS_CMD_API_S_VER_1 */
412
413
#define MAX_BCAST_FILTER_NUM 8
414
415
/**
416
* enum iwl_statistics_notify_type_id - type_id used in system statistics
417
* command
418
* @IWL_STATS_NTFY_TYPE_ID_OPER: request legacy statistics
419
* @IWL_STATS_NTFY_TYPE_ID_OPER_PART1: request operational part1 statistics
420
* @IWL_STATS_NTFY_TYPE_ID_OPER_PART2: request operational part2 statistics
421
* @IWL_STATS_NTFY_TYPE_ID_OPER_PART3: request operational part3 statistics
422
* @IWL_STATS_NTFY_TYPE_ID_OPER_PART4: request operational part4 statistics
423
*/
424
enum 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 command
434
* @IWL_STATS_CFG_FLG_DISABLE_NTFY_MSK: 0 for enable, 1 for disable
435
* @IWL_STATS_CFG_FLG_ON_DEMAND_NTFY_MSK: 0 for periodic, 1 for on-demand
436
* @IWL_STATS_CFG_FLG_RESET_MSK: 0 for reset statistics after
437
* sending the notification, 1 for do not reset statistics after sending
438
* the notification
439
*/
440
enum 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 command
448
* @cfg_mask: configuration mask, &enum iwl_statistics_cfg_flags
449
* @config_time_sec: time in sec for periodic notification
450
* @type_id_mask: type_id masks, &enum iwl_statistics_notify_type_id
451
*/
452
struct 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_type
460
*
461
* @FW_STATISTICS_OPERATIONAL: operational statistics
462
* @FW_STATISTICS_PHY: phy statistics
463
* @FW_STATISTICS_MAC: mac statistics
464
* @FW_STATISTICS_RX: rx statistics
465
* @FW_STATISTICS_TX: tx statistics
466
* @FW_STATISTICS_DURATION: duration statistics
467
* @FW_STATISTICS_HE: he statistics
468
*/
469
enum 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 0x7f
480
/**
481
* struct iwl_statistics_ntfy_hdr
482
*
483
* @type: struct type
484
* @version: version of the struct
485
* @size: size in bytes
486
*/
487
struct 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_link
495
*
496
* @beacon_filter_average_energy: Average energy [-dBm] of the 2
497
* antennas.
498
* @air_time: air time
499
* @beacon_counter: all beacons (both filtered and not filtered)
500
* @beacon_average_energy: Average energy [-dBm] of all beacons
501
* (both filtered and not filtered)
502
* @beacon_rssi_a: beacon RSSI on antenna A
503
* @beacon_rssi_b: beacon RSSI on antenna B
504
* @rx_bytes: RX byte count
505
*/
506
struct 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_link
518
*
519
* @rx_time: rx time
520
* @tx_time: tx time
521
* @rx_action: action frames handled by FW
522
* @tx_action: action frames generated and transmitted by FW
523
* @cca_defers: cca defer count
524
* @beacon_filtered: filtered out beacons
525
*/
526
struct 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_mac
537
*
538
* @beacon_filter_average_energy: Average energy [-dBm] of the 2
539
* antennas.
540
* @air_time: air time
541
* @beacon_counter: all beacons (both filtered and not filtered)
542
* @beacon_average_energy: all beacons (both filtered and not
543
* filtered)
544
* @beacon_rssi_a: beacon RSSI on antenna A
545
* @beacon_rssi_b: beacon RSSI on antenna B
546
* @rx_bytes: RX byte count
547
*/
548
struct 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 5
559
/** struct iwl_stats_ntfy_per_phy
560
* @channel_load: channel load
561
* @channel_load_by_us: device contribution to MCLM
562
* @channel_load_not_by_us: other devices' contribution to MCLM
563
* @clt: CLT HW timer (TIM_CH_LOAD2)
564
* @act: active accumulator SW
565
* @elp: elapsed time accumulator SW
566
* @rx_detected_per_ch_width: number of deferred TX per channel width,
567
* 0 - 20, 1/2/3 - 40/80/160
568
* @success_per_ch_width: number of frames that got ACK/BACK/CTS
569
* per channel BW. note, BACK counted as 1
570
* @fail_per_ch_width: number of frames that didn't get ACK/BACK/CTS
571
* per channel BW. note BACK counted as 1
572
* @last_tx_ch_width_indx: last txed frame channel width index
573
*/
574
struct 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
/* unknown channel load (due to not being active on channel) */
588
#define IWL_STATS_UNKNOWN_CHANNEL_LOAD 0xffffffff
589
590
/**
591
* struct iwl_stats_ntfy_per_sta
592
*
593
* @average_energy: in fact it is minus the energy..
594
*/
595
struct iwl_stats_ntfy_per_sta {
596
__le32 average_energy;
597
} __packed; /* STATISTICS_NTFY_PER_STA_API_S_VER_1 */
598
599
#define IWL_STATS_MAX_PHY_OPERATIONAL 3
600
#define IWL_STATS_MAX_FW_LINKS (IWL_FW_MAX_LINK_ID + 1)
601
602
/**
603
* struct iwl_system_statistics_notif_oper
604
*
605
* @time_stamp: time when the notification is sent from firmware
606
* @per_link: per link statistics, &struct iwl_stats_ntfy_per_link
607
* @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy
608
* @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta
609
*/
610
struct iwl_system_statistics_notif_oper {
611
__le32 time_stamp;
612
struct iwl_stats_ntfy_per_link per_link[IWL_STATS_MAX_FW_LINKS];
613
struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL];
614
struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];
615
} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_API_S_VER_3 */
616
617
/**
618
* struct iwl_system_statistics_part1_notif_oper
619
*
620
* @time_stamp: time when the notification is sent from firmware
621
* @per_link: per link statistics &struct iwl_stats_ntfy_part1_per_link
622
* @per_phy_crc_error_stats: per phy crc error statistics
623
*/
624
struct iwl_system_statistics_part1_notif_oper {
625
__le32 time_stamp;
626
struct iwl_stats_ntfy_part1_per_link per_link[IWL_STATS_MAX_FW_LINKS];
627
__le32 per_phy_crc_error_stats[IWL_STATS_MAX_PHY_OPERATIONAL];
628
} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_PART1_API_S_VER_4 */
629
630
/**
631
* struct iwl_system_statistics_end_notif
632
*
633
* @time_stamp: time when the notification is sent from firmware
634
*/
635
struct iwl_system_statistics_end_notif {
636
__le32 time_stamp;
637
} __packed; /* STATISTICS_FW_NTFY_END_API_S_VER_1 */
638
639
/**
640
* struct iwl_statistics_operational_ntfy
641
*
642
* @hdr: general statistics header
643
* @flags: bitmap of possible notification structures
644
* @per_mac: per mac statistics, &struct iwl_stats_ntfy_per_mac
645
* @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy
646
* @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta
647
* @rx_time: rx time
648
* @tx_time: usec the radio is transmitting.
649
* @on_time_rf: The total time in usec the RF is awake.
650
* @on_time_scan: usec the radio is awake due to scan.
651
*/
652
struct iwl_statistics_operational_ntfy {
653
struct iwl_statistics_ntfy_hdr hdr;
654
__le32 flags;
655
struct iwl_stats_ntfy_per_mac per_mac[MAC_INDEX_AUX];
656
struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL];
657
struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];
658
__le64 rx_time;
659
__le64 tx_time;
660
__le64 on_time_rf;
661
__le64 on_time_scan;
662
} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_15 */
663
664
/**
665
* struct iwl_statistics_operational_ntfy_ver_14
666
*
667
* @hdr: general statistics header
668
* @flags: bitmap of possible notification structures
669
* @mac_id: mac on which the beacon was received
670
* @beacon_filter_average_energy: Average energy [-dBm] of the 2
671
* antennas.
672
* @beacon_filter_reason: beacon filter reason
673
* @radio_temperature: radio temperature
674
* @air_time: air time
675
* @beacon_counter: all beacons (both filtered and not filtered)
676
* @beacon_average_energy: all beacons (both filtered and not
677
* filtered)
678
* @beacon_rssi_a: beacon RSSI on antenna A
679
* @beacon_rssi_b: beacon RSSI on antenna B
680
* @rx_bytes: per MAC RX byte count
681
* @rx_time: rx time
682
* @tx_time: usec the radio is transmitting.
683
* @on_time_rf: The total time in usec the RF is awake.
684
* @on_time_scan: usec the radio is awake due to scan.
685
* @average_energy: in fact it is minus the energy..
686
* @reserved: reserved
687
*/
688
struct iwl_statistics_operational_ntfy_ver_14 {
689
struct iwl_statistics_ntfy_hdr hdr;
690
__le32 flags;
691
__le32 mac_id;
692
__le32 beacon_filter_average_energy;
693
__le32 beacon_filter_reason;
694
__le32 radio_temperature;
695
__le32 air_time[MAC_INDEX_AUX];
696
__le32 beacon_counter[MAC_INDEX_AUX];
697
__le32 beacon_average_energy[MAC_INDEX_AUX];
698
__le32 beacon_rssi_a;
699
__le32 beacon_rssi_b;
700
__le32 rx_bytes[MAC_INDEX_AUX];
701
__le64 rx_time;
702
__le64 tx_time;
703
__le64 on_time_rf;
704
__le64 on_time_scan;
705
__le32 average_energy[IWL_STATION_COUNT_MAX];
706
__le32 reserved;
707
} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */
708
709
/**
710
* struct iwl_statistics_phy_ntfy
711
*
712
* @hdr: general statistics header
713
* RX PHY related statistics
714
* @energy_and_config: ???
715
* @rssi_band: @31:24 rssiAllBand_B, 23:16 rssiInBand_B, 15:8
716
* rssiAllBand_A, 7:0 rssiInBand_A
717
* @agc_word: @31:16 agcWord_B, 15:0 agcWord_A
718
* @agc_gain: @19:10 agcGain_B, 9:0 agcGain_A
719
* @dfe_gain: @19:10 dfeGain_B, 9:0 dfeGain_A
720
* @snr_calc_main: @18:0 snrCalcMain
721
* @energy_calc_main: @18:0 energyCalcMain
722
* @snr_calc_aux: @18:0 snrCalcAux
723
* @dsp_dc_estim_a: @27:14 dspDcEstimQA, 13:0 dspDcEstimIA
724
* @dsp_dc_estim_b: @27:14 dspDcEstimQB, 13:0 dspDcEstimIB
725
* @ina_detec_type_and_ofdm_corr_comb: @31:31 inaDetectCckMrc,
726
* 30:27 inaDetectType, 26:0 ofdmCorrComb
727
* @cw_corr_comb: @26:0 cwCorrComb
728
* @rssi_comb: @25:0 rssiComb
729
* @auto_corr_cck: @23:12 autoCck, 11:00 crossCck
730
* @ofdm_fine_freq_and_pina_freq_err: @18:7 ofdmFineFreq, 6:0
731
* ofdmPinaFreqErr
732
* @snrm_evm_main: @31:0 snrmEvmMain
733
* @snrm_evm_aux: @31:0 snrmEvmAux
734
* @rx_rate: @31:0 rate
735
* TX PHY related statistics
736
* @per_chain_enums_and_dsp_atten_a: @perChainEnumsAndDspAtten
737
* (per version)
738
* @target_power_and_power_meas_a: @31:16 targetPower_A, 15:0
739
* powerMeasuredCalc_A
740
* @tx_config_as_i_and_ac_a: @31:16 txConfigAsI_A, 15:0
741
* txConfigAc_A
742
* @predist_dcq_and_dci_a: @31:16 predist_dci_A, 15:0
743
* predist_dcq_A
744
* @per_chain_enums_and_dsp_atten_b: @perChainEnumsAndDspAtten
745
* (per version)
746
* @target_power_and_power_meas_b: @31:16 targetPower_B, 15:0
747
* powerMeasuredCalc_B
748
* @tx_config_as_i_and_ac_b: @31:16 txConfigAsI_B, 15:0
749
* txConfigAc_B
750
* @predist_dcq_and_dci_b: @31:16 predist_dci_B, 15:0
751
* predist_dcq_B
752
* @tx_rate: @31:0 rate
753
* @tlc_backoff: @31:0 tlcBackoff
754
* @mpapd_calib_mode_mpapd_calib_type_a: @31:16
755
* mpapdCalibMode_A, 15:0 mpapdCalibType_A
756
* @psat_and_phy_power_limit_a: @31:16 psat_A, 15:0
757
* phyPowerLimit_A
758
* @sar_and_regulatory_power_limit_a: @31:16 sarPowerLimit_A,
759
* 15:0 regulatoryPowerLimit_A
760
* @mpapd_calib_mode_mpapd_calib_type_b: @31:16
761
* mpapdCalibMode_B, 15:0 mpapdCalibType_B
762
* @psat_and_phy_power_limit_b: @31:16 psat_B, 15:0
763
* phyPowerLimit_B
764
* @sar_and_regulatory_power_limit_b: @31:16 sarPowerLimit_B,
765
* 15:0 regulatoryPowerLimit_B
766
* @srd_and_driver_power_limits: @31:16 srdPowerLimit, 15:0
767
* driverPowerLimit
768
* @reserved: reserved
769
*/
770
struct iwl_statistics_phy_ntfy {
771
struct iwl_statistics_ntfy_hdr hdr;
772
__le32 energy_and_config;
773
__le32 rssi_band;
774
__le32 agc_word;
775
__le32 agc_gain;
776
__le32 dfe_gain;
777
__le32 snr_calc_main;
778
__le32 energy_calc_main;
779
__le32 snr_calc_aux;
780
__le32 dsp_dc_estim_a;
781
__le32 dsp_dc_estim_b;
782
__le32 ina_detec_type_and_ofdm_corr_comb;
783
__le32 cw_corr_comb;
784
__le32 rssi_comb;
785
__le32 auto_corr_cck;
786
__le32 ofdm_fine_freq_and_pina_freq_err;
787
__le32 snrm_evm_main;
788
__le32 snrm_evm_aux;
789
__le32 rx_rate;
790
__le32 per_chain_enums_and_dsp_atten_a;
791
__le32 target_power_and_power_meas_a;
792
__le32 tx_config_as_i_and_ac_a;
793
__le32 predist_dcq_and_dci_a;
794
__le32 per_chain_enums_and_dsp_atten_b;
795
__le32 target_power_and_power_meas_b;
796
__le32 tx_config_as_i_and_ac_b;
797
__le32 predist_dcq_and_dci_b;
798
__le32 tx_rate;
799
__le32 tlc_backoff;
800
__le32 mpapd_calib_mode_mpapd_calib_type_a;
801
__le32 psat_and_phy_power_limit_a;
802
__le32 sar_and_regulatory_power_limit_a;
803
__le32 mpapd_calib_mode_mpapd_calib_type_b;
804
__le32 psat_and_phy_power_limit_b;
805
__le32 sar_and_regulatory_power_limit_b;
806
__le32 srd_and_driver_power_limits;
807
__le32 reserved;
808
} __packed; /* STATISTICS_PHY_NTFY_API_S_VER_1 */
809
810
/**
811
* struct iwl_statistics_mac_ntfy
812
*
813
* @hdr: general statistics header
814
* @bcast_filter_passed_per_mac: bcast filter passed per mac
815
* @bcast_filter_dropped_per_mac: bcast filter dropped per mac
816
* @bcast_filter_passed_per_filter: bcast filter passed per filter
817
* @bcast_filter_dropped_per_filter: bcast filter dropped per filter
818
* @reserved: reserved
819
*/
820
struct iwl_statistics_mac_ntfy {
821
struct iwl_statistics_ntfy_hdr hdr;
822
__le32 bcast_filter_passed_per_mac[NUM_MAC_INDEX_CDB];
823
__le32 bcast_filter_dropped_per_mac[NUM_MAC_INDEX_CDB];
824
__le32 bcast_filter_passed_per_filter[MAX_BCAST_FILTER_NUM];
825
__le32 bcast_filter_dropped_per_filter[MAX_BCAST_FILTER_NUM];
826
__le32 reserved;
827
} __packed; /* STATISTICS_MAC_NTFY_API_S_VER_1 */
828
829
/**
830
* struct iwl_statistics_rx_ntfy
831
*
832
* @hdr: general statistics header
833
* @rx_agg_mpdu_cnt: aggregation frame count (number of
834
* delimiters)
835
* @rx_agg_cnt: number of RX Aggregations
836
* @unsupported_mcs: number of PLCP headers that have rate which
837
* is unsupported by DSP
838
* @bogus_cts: CTS received when not expecting CTS
839
* @bogus_ack: ACK received when not expecting ACK
840
* @rx_byte_count: ???
841
* @rx_packet_count: ???
842
* @missed_beacons: ???
843
* @unresponded_rts: un-responded RTS, due to NAV not zero
844
* @rxe_frame_limit_overrun: RXE got frame limit overrun
845
* @sent_ba_rsp_cnt: BA response TX count
846
* @late_rx_handle: count the number of times the RX path was
847
* aborted due to late entry
848
* @num_bt_kills: ???
849
* @reserved: reserved
850
*/
851
struct iwl_statistics_rx_ntfy {
852
struct iwl_statistics_ntfy_hdr hdr;
853
__le32 rx_agg_mpdu_cnt;
854
__le32 rx_agg_cnt;
855
__le32 unsupported_mcs;
856
__le32 bogus_cts;
857
__le32 bogus_ack;
858
__le32 rx_byte_count[MAC_INDEX_AUX];
859
__le32 rx_packet_count[MAC_INDEX_AUX];
860
__le32 missed_beacons;
861
__le32 unresponded_rts;
862
__le32 rxe_frame_limit_overrun;
863
__le32 sent_ba_rsp_cnt;
864
__le32 late_rx_handle;
865
__le32 num_bt_kills;
866
__le32 reserved;
867
} __packed; /* STATISTICS_RX_NTFY_API_S_VER_1 */
868
869
/**
870
* struct iwl_statistics_tx_ntfy
871
*
872
* @hdr: general statistics header
873
* @cts_timeout: timeout when waiting for CTS
874
* @ack_timeout: timeout when waiting for ACK
875
* @dump_msdu_cnt: number of MSDUs that were dumped due to any
876
* reason
877
* @burst_abort_missing_next_frame_cnt: number of times a burst
878
* was aborted due to missing next frame bytes in txfifo
879
* number of times got timeout when waiting for CTS/ACK/BA and energy was
880
* detected just after sending the RTS/DATA. this statistics may help getting
881
* interesting indicators, like the likelihood of collision (so the benefit of
882
* protection may be estimated Vs. its cost). Or how many of the failures are
883
* due to collision and how many due to SNR.
884
* For Link-quality the CTS collision indication is more reliable then the ACK
885
* collision indication as the RTS frame is short and has more chance that the
886
* frame/s which caused the collision continue after the RTS was sent.
887
* @cts_timeout_collision: ???
888
* ACK/BA failed and energy as detected after DATA
889
* Note: to get the collision ratio need to:
890
* ackOrBaTimeoutCollision / (ack_timeout + ba_timeout)
891
* @ack_or_ba_timeout_collision: ???
892
* @ba_timeout: timeout when waiting for immediate BA response
893
* @ba_reschedule_frames: failed to get BA response and
894
* rescheduled all the non-ACKed frames
895
* gives the avarage number of frames inside aggregation
896
* @scd_query_agg_frame_cnt: ???
897
* @scd_query_no_agg: scheduler query prevented aggregation
898
* @scd_query_agg: scheduler query allowed aggregation
899
* @scd_query_mismatch: scheduler query inaccurate, either too
900
* short or too long
901
* @agg_terminated_underrun: aggregation was terminated due to
902
* underrun
903
* @agg_terminated_bt_prio_kill: aggregation was terminated due
904
* to BT
905
* @tx_kill_on_long_retry: count the tx frames dropped due to
906
* long retry limit (DATA frame failed)
907
* @tx_kill_on_short_retry: count the tx frames dropped due to
908
* short retry limit (RTS frame failed)
909
* TX deffer on energy. This counter is reset on each successful transmit.
910
* When timer exceed TX deffer limit than will be uCode assert.
911
* @tx_deffer_counter: ???
912
* @tx_deffer_base_time: Keep the time of the last successful
913
* transmit
914
* @tx_underrun: TX killed due to underrun
915
* @bt_defer: TX deferred due to BT priority, so probably TX was
916
* not started.
917
* @tx_kill_on_dsp_timeout: TX killed on DSP problem detected
918
* @tx_kill_on_immediate_quiet: TX killed due to immediate quiet
919
* @kill_ba_cnt: number of times sending BA failed
920
* @kill_ack_cnt: number of times sending ACK failed
921
* @kill_cts_cnt: number of times sending CTS failed
922
* @burst_terminated: Count burst or fragmentation termination
923
* occurrence
924
* @late_tx_vec_wr_cnt: ???
925
* TX is not sent because ucode failed to notify the TRM in SIFS-delta from
926
* ON_AIR deassertion.
927
* @late_rx2_tx_cnt: ???
928
* @scd_query_cnt: count the times SCD query was done to check
929
* for TX AGG
930
* @tx_frames_acked_in_agg: count the number of frames
931
* transmitted inside AGG and were successful
932
* @last_tx_ch_width_indx: ???
933
* number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160
934
* @rx_detected_per_ch_width: ???
935
* @success_per_ch_width: ???
936
* @fail_per_ch_width: ???
937
* @reserved: reserved
938
*/
939
struct iwl_statistics_tx_ntfy {
940
struct iwl_statistics_ntfy_hdr hdr;
941
__le32 cts_timeout;
942
__le32 ack_timeout;
943
__le32 dump_msdu_cnt;
944
__le32 burst_abort_missing_next_frame_cnt;
945
__le32 cts_timeout_collision;
946
__le32 ack_or_ba_timeout_collision;
947
__le32 ba_timeout;
948
__le32 ba_reschedule_frames;
949
__le32 scd_query_agg_frame_cnt;
950
__le32 scd_query_no_agg;
951
__le32 scd_query_agg;
952
__le32 scd_query_mismatch;
953
__le32 agg_terminated_underrun;
954
__le32 agg_terminated_bt_prio_kill;
955
__le32 tx_kill_on_long_retry;
956
__le32 tx_kill_on_short_retry;
957
__le32 tx_deffer_counter;
958
__le32 tx_deffer_base_time;
959
__le32 tx_underrun;
960
__le32 bt_defer;
961
__le32 tx_kill_on_dsp_timeout;
962
__le32 tx_kill_on_immediate_quiet;
963
__le32 kill_ba_cnt;
964
__le32 kill_ack_cnt;
965
__le32 kill_cts_cnt;
966
__le32 burst_terminated;
967
__le32 late_tx_vec_wr_cnt;
968
__le32 late_rx2_tx_cnt;
969
__le32 scd_query_cnt;
970
__le32 tx_frames_acked_in_agg;
971
__le32 last_tx_ch_width_indx;
972
__le32 rx_detected_per_ch_width[4];
973
__le32 success_per_ch_width[4];
974
__le32 fail_per_ch_width[4];
975
__le32 reserved;
976
} __packed; /* STATISTICS_TX_NTFY_API_S_VER_1 */
977
978
/**
979
* struct iwl_statistics_duration_ntfy
980
*
981
* @hdr: general statistics header
982
* @cont_burst_chk_cnt: number of times continuation or
983
* fragmentation or bursting was checked
984
* @cont_burst_cnt: number of times continuation or fragmentation
985
* or bursting was successful
986
* @wait_for_silence_timeout_cnt: ???
987
* @reserved: reserved
988
*/
989
struct iwl_statistics_duration_ntfy {
990
struct iwl_statistics_ntfy_hdr hdr;
991
__le32 cont_burst_chk_cnt;
992
__le32 cont_burst_cnt;
993
__le32 wait_for_silence_timeout_cnt;
994
__le32 reserved;
995
} __packed; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */
996
997
/**
998
* struct iwl_statistics_he_ntfy
999
*
1000
* @hdr: general statistics header
1001
* received HE frames
1002
* @rx_siga_valid_cnt: rx HE SIG-A valid
1003
* @rx_siga_invalid_cnt: rx HE SIG-A invalid
1004
* received HE frames w/ valid Sig-A
1005
* @rx_trig_based_frame_cnt: rx HE-TB (trig-based)
1006
* @rx_su_frame_cnt: rx HE-SU
1007
* @rx_sigb_invalid_cnt: rx (suspected) HE-MU w/ bad SIG-B
1008
* @rx_our_bss_color_cnt: rx valid HE SIG-A w/ our BSS color
1009
* @rx_other_bss_color_cnt: rx valid HE SIG-A w/ other BSS color
1010
* @rx_zero_bss_color_cnt: ???
1011
* received HE-MU frames w/ good Sig-B
1012
* @rx_mu_for_us_cnt: match AID
1013
* @rx_mu_not_for_us_cnt: no matched AID
1014
* received HE-MU frames for us (w/ our AID)
1015
* @rx_mu_nss_ar: 0 - SISO, 1 - MIMO2
1016
* @rx_mu_mimo_cnt: full BW RU, compressed SIG-B
1017
* @rx_mu_ru_bw_ar: MU alloc, MHz: 0 - 2, 1 - 5, 2 - 10, 3 - 20,
1018
* 4 - 40, 5 - 80, 6 - 160
1019
* received trigger frames
1020
* @rx_trig_for_us_cnt: ???
1021
* @rx_trig_not_for_us_cnt: ???
1022
* trigger for us
1023
* @rx_trig_with_cs_req_cnt: ???
1024
* @rx_trig_type_ar: ???
1025
* @rx_trig_in_agg_cnt: ???
1026
* basic trigger for us allocations
1027
* @rx_basic_trig_alloc_nss_ar: ???
1028
* @rx_basic_trig_alloc_mu_mimo_cnt: ???
1029
* @rx_basic_trig_alloc_ru_bw_ar: ???
1030
* @rx_basic_trig_total_byte_cnt: ???
1031
* trig-based TX
1032
* @tx_trig_based_cs_req_fail_cnt: ???
1033
* @tx_trig_based_sifs_ok_cnt: ???
1034
* @tx_trig_based_sifs_fail_cnt: ???
1035
* @tx_trig_based_byte_cnt: ???
1036
* @tx_trig_based_pad_byte_cnt: ???
1037
* @tx_trig_based_frame_cnt: ???
1038
* @tx_trig_based_acked_frame_cnt: ???
1039
* @tx_trig_based_ack_timeout_cnt: ???
1040
* HE-SU TX
1041
* @tx_su_frame_cnt: ???
1042
* EDCA <--> MU-EDCA transitions
1043
* @tx_edca_to_mu_edca_cnt: ???
1044
* @tx_mu_edca_to_edca_by_timeout_cnt: ???
1045
* @tx_mu_edca_to_edca_by_ack_fail_cnt: ???
1046
* @tx_mu_edca_to_edca_by_small_alloc_cnt: ???
1047
* @reserved: reserved
1048
*/
1049
struct iwl_statistics_he_ntfy {
1050
struct iwl_statistics_ntfy_hdr hdr;
1051
__le32 rx_siga_valid_cnt;
1052
__le32 rx_siga_invalid_cnt;
1053
__le32 rx_trig_based_frame_cnt;
1054
__le32 rx_su_frame_cnt;
1055
__le32 rx_sigb_invalid_cnt;
1056
__le32 rx_our_bss_color_cnt;
1057
__le32 rx_other_bss_color_cnt;
1058
__le32 rx_zero_bss_color_cnt;
1059
__le32 rx_mu_for_us_cnt;
1060
__le32 rx_mu_not_for_us_cnt;
1061
__le32 rx_mu_nss_ar[2];
1062
__le32 rx_mu_mimo_cnt;
1063
__le32 rx_mu_ru_bw_ar[7];
1064
__le32 rx_trig_for_us_cnt;
1065
__le32 rx_trig_not_for_us_cnt;
1066
__le32 rx_trig_with_cs_req_cnt;
1067
__le32 rx_trig_type_ar[8 + 1];
1068
__le32 rx_trig_in_agg_cnt;
1069
__le32 rx_basic_trig_alloc_nss_ar[2];
1070
__le32 rx_basic_trig_alloc_mu_mimo_cnt;
1071
__le32 rx_basic_trig_alloc_ru_bw_ar[7];
1072
__le32 rx_basic_trig_total_byte_cnt;
1073
__le32 tx_trig_based_cs_req_fail_cnt;
1074
__le32 tx_trig_based_sifs_ok_cnt;
1075
__le32 tx_trig_based_sifs_fail_cnt;
1076
__le32 tx_trig_based_byte_cnt;
1077
__le32 tx_trig_based_pad_byte_cnt;
1078
__le32 tx_trig_based_frame_cnt;
1079
__le32 tx_trig_based_acked_frame_cnt;
1080
__le32 tx_trig_based_ack_timeout_cnt;
1081
__le32 tx_su_frame_cnt;
1082
__le32 tx_edca_to_mu_edca_cnt;
1083
__le32 tx_mu_edca_to_edca_by_timeout_cnt;
1084
__le32 tx_mu_edca_to_edca_by_ack_fail_cnt;
1085
__le32 tx_mu_edca_to_edca_by_small_alloc_cnt;
1086
__le32 reserved;
1087
} __packed; /* STATISTICS_HE_NTFY_API_S_VER_1 */
1088
1089
#endif /* __iwl_fw_api_stats_h__ */
1090
1091