/** * struct mvm_statistics_rx_non_phy * @bogus_cts: CTS received when not expecting CTS * @bogus_ack: ACK received when not expecting ACK * @non_channel_beacons: beacons with our bss id but not on our serving channel * @channel_beacons: beacons with our bss id and in our serving channel * @num_missed_bcon: number of missed beacons * @adc_rx_saturation_time: count in 0.8us units the time the ADC was in * saturation * @ina_detection_search_time: total time (in 0.8us) searched for INA * @beacon_silence_rssi_a: RSSI silence after beacon frame * @beacon_silence_rssi_b: RSSI silence after beacon frame * @beacon_silence_rssi_c: RSSI silence after beacon frame * @interference_data_flag: flag for interference data availability. 1 when data * is available. * @channel_load: counts RX Enable time in uSec * @beacon_rssi_a: beacon RSSI on antenna A * @beacon_rssi_b: beacon RSSI on antenna B * @beacon_rssi_c: beacon RSSI on antenna C * @beacon_energy_a: beacon energy on antenna A * @beacon_energy_b: beacon energy on antenna B * @beacon_energy_c: beacon energy on antenna C * @num_bt_kills: number of BT "kills" (frame TX aborts) * @mac_id: mac ID
*/ struct mvm_statistics_rx_non_phy {
__le32 bogus_cts;
__le32 bogus_ack;
__le32 non_channel_beacons;
__le32 channel_beacons;
__le32 num_missed_bcon;
__le32 adc_rx_saturation_time;
__le32 ina_detection_search_time;
__le32 beacon_silence_rssi_a;
__le32 beacon_silence_rssi_b;
__le32 beacon_silence_rssi_c;
__le32 interference_data_flag;
__le32 channel_load;
__le32 beacon_rssi_a;
__le32 beacon_rssi_b;
__le32 beacon_rssi_c;
__le32 beacon_energy_a;
__le32 beacon_energy_b;
__le32 beacon_energy_c;
__le32 num_bt_kills;
__le32 mac_id;
} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_4 */
struct mvm_statistics_rx_non_phy_v3 {
__le32 bogus_cts; /* CTS received when not expecting CTS */
__le32 bogus_ack; /* ACK received when not expecting ACK */
__le32 non_bssid_frames; /* number of frames with BSSID that
* doesn't belong to the STA BSSID */
__le32 filtered_frames; /* count frames that were dumped in the
* filtering process */
__le32 non_channel_beacons; /* beacons with our bss id but not on
* our serving channel */
__le32 channel_beacons; /* beacons with our bss id and in our
* serving channel */
__le32 num_missed_bcon; /* number of missed beacons */
__le32 adc_rx_saturation_time; /* count in 0.8us units the time the
* ADC was in saturation */
__le32 ina_detection_search_time;/* total time (in 0.8us) searched
* for INA */
__le32 beacon_silence_rssi_a; /* RSSI silence after beacon frame */
__le32 beacon_silence_rssi_b; /* RSSI silence after beacon frame */
__le32 beacon_silence_rssi_c; /* RSSI silence after beacon frame */
__le32 interference_data_flag; /* flag for interference data * availability. 1 when data is
* available. */
__le32 channel_load; /* counts RX Enable time in uSec */
__le32 dsp_false_alarms; /* DSP false alarm (both OFDM
* and CCK) counter */
__le32 beacon_rssi_a;
__le32 beacon_rssi_b;
__le32 beacon_rssi_c;
__le32 beacon_energy_a;
__le32 beacon_energy_b;
__le32 beacon_energy_c;
__le32 num_bt_kills;
__le32 mac_id;
__le32 directed_data_mpdu;
} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
/** * struct mvm_statistics_load - RX statistics for multi-queue devices * @air_time: accumulated air time, per mac * @byte_count: accumulated byte count, per mac * @pkt_count: accumulated packet count, per mac * @avg_energy: average RSSI, per station
*/ struct mvm_statistics_load {
__le32 air_time[MAC_INDEX_AUX];
__le32 byte_count[MAC_INDEX_AUX];
__le32 pkt_count[MAC_INDEX_AUX];
u8 avg_energy[IWL_STATION_COUNT_MAX];
} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */
/* * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command) * * By default, uCode issues this notification after receiving a beacon * while associated. To disable this behavior, set DISABLE_NOTIF flag in the * STATISTICS_CMD (0x9c), below.
*/
/** * enum iwl_statistics_cfg_flags - cfg_mask used in system statistics command * @IWL_STATS_CFG_FLG_DISABLE_NTFY_MSK: 0 for enable, 1 for disable * @IWL_STATS_CFG_FLG_ON_DEMAND_NTFY_MSK: 0 for periodic, 1 for on-demand * @IWL_STATS_CFG_FLG_RESET_MSK: 0 for reset statistics after * sending the notification, 1 for do not reset statistics after sending * the notification
*/ enum iwl_statistics_cfg_flags {
IWL_STATS_CFG_FLG_DISABLE_NTFY_MSK = BIT(0),
IWL_STATS_CFG_FLG_ON_DEMAND_NTFY_MSK = BIT(1),
IWL_STATS_CFG_FLG_RESET_MSK = BIT(2),
};
#define IWL_STATISTICS_TYPE_MSK 0x7f /** * struct iwl_statistics_ntfy_hdr * * @type: struct type * @version: version of the struct * @size: size in bytes
*/ struct iwl_statistics_ntfy_hdr {
u8 type;
u8 version;
__le16 size;
}; /* STATISTICS_NTFY_HDR_API_S_VER_1 */
/** * struct iwl_stats_ntfy_per_link * * @beacon_filter_average_energy: Average energy [-dBm] of the 2 * antennas. * @air_time: air time * @beacon_counter: all beacons (both filtered and not filtered) * @beacon_average_energy: Average energy [-dBm] of all beacons * (both filtered and not filtered) * @beacon_rssi_a: beacon RSSI on antenna A * @beacon_rssi_b: beacon RSSI on antenna B * @rx_bytes: RX byte count
*/ struct iwl_stats_ntfy_per_link {
__le32 beacon_filter_average_energy;
__le32 air_time;
__le32 beacon_counter;
__le32 beacon_average_energy;
__le32 beacon_rssi_a;
__le32 beacon_rssi_b;
__le32 rx_bytes;
} __packed; /* STATISTICS_NTFY_PER_LINK_API_S_VER_1 */
/** * struct iwl_stats_ntfy_part1_per_link * * @rx_time: rx time * @tx_time: tx time * @rx_action: action frames handled by FW * @tx_action: action frames generated and transmitted by FW * @cca_defers: cca defer count * @beacon_filtered: filtered out beacons
*/ struct iwl_stats_ntfy_part1_per_link {
__le64 rx_time;
__le64 tx_time;
__le32 rx_action;
__le32 tx_action;
__le32 cca_defers;
__le32 beacon_filtered;
} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_PART1_PER_LINK_API_S_VER_1 */
/** * struct iwl_stats_ntfy_per_mac * * @beacon_filter_average_energy: Average energy [-dBm] of the 2 * antennas. * @air_time: air time * @beacon_counter: all beacons (both filtered and not filtered) * @beacon_average_energy: all beacons (both filtered and not * filtered) * @beacon_rssi_a: beacon RSSI on antenna A * @beacon_rssi_b: beacon RSSI on antenna B * @rx_bytes: RX byte count
*/ struct iwl_stats_ntfy_per_mac {
__le32 beacon_filter_average_energy;
__le32 air_time;
__le32 beacon_counter;
__le32 beacon_average_energy;
__le32 beacon_rssi_a;
__le32 beacon_rssi_b;
__le32 rx_bytes;
} __packed; /* STATISTICS_NTFY_PER_MAC_API_S_VER_1 */
#define IWL_STATS_MAX_BW_INDEX 5 /** struct iwl_stats_ntfy_per_phy * @channel_load: channel load * @channel_load_by_us: device contribution to MCLM * @channel_load_not_by_us: other devices' contribution to MCLM * @clt: CLT HW timer (TIM_CH_LOAD2) * @act: active accumulator SW * @elp: elapsed time accumulator SW * @rx_detected_per_ch_width: number of deferred TX per channel width, * 0 - 20, 1/2/3 - 40/80/160 * @success_per_ch_width: number of frames that got ACK/BACK/CTS * per channel BW. note, BACK counted as 1 * @fail_per_ch_width: number of frames that didn't get ACK/BACK/CTS * per channel BW. note BACK counted as 1 * @last_tx_ch_width_indx: last txed frame channel width index
*/ struct iwl_stats_ntfy_per_phy {
__le32 channel_load;
__le32 channel_load_by_us;
__le32 channel_load_not_by_us;
__le32 clt;
__le32 act;
__le32 elp;
__le32 rx_detected_per_ch_width[IWL_STATS_MAX_BW_INDEX];
__le32 success_per_ch_width[IWL_STATS_MAX_BW_INDEX];
__le32 fail_per_ch_width[IWL_STATS_MAX_BW_INDEX];
__le32 last_tx_ch_width_indx;
} __packed; /* STATISTICS_NTFY_PER_PHY_API_S_VER_1 */
/* unknown channel load (due to not being active on channel) */ #define IWL_STATS_UNKNOWN_CHANNEL_LOAD 0xffffffff
/** * struct iwl_stats_ntfy_per_sta * * @average_energy: in fact it is minus the energy..
*/ struct iwl_stats_ntfy_per_sta {
__le32 average_energy;
} __packed; /* STATISTICS_NTFY_PER_STA_API_S_VER_1 */
/** * struct iwl_system_statistics_notif_oper * * @time_stamp: time when the notification is sent from firmware * @per_link: per link statistics, &struct iwl_stats_ntfy_per_link * @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy * @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta
*/ struct iwl_system_statistics_notif_oper {
__le32 time_stamp; struct iwl_stats_ntfy_per_link per_link[IWL_STATS_MAX_FW_LINKS]; struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL]; struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];
} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_API_S_VER_3 */
/** * struct iwl_system_statistics_part1_notif_oper * * @time_stamp: time when the notification is sent from firmware * @per_link: per link statistics &struct iwl_stats_ntfy_part1_per_link * @per_phy_crc_error_stats: per phy crc error statistics
*/ struct iwl_system_statistics_part1_notif_oper {
__le32 time_stamp; struct iwl_stats_ntfy_part1_per_link per_link[IWL_STATS_MAX_FW_LINKS];
__le32 per_phy_crc_error_stats[IWL_STATS_MAX_PHY_OPERATIONAL];
} __packed; /* STATISTICS_FW_NTFY_OPERATIONAL_PART1_API_S_VER_4 */
/** * struct iwl_system_statistics_end_notif * * @time_stamp: time when the notification is sent from firmware
*/ struct iwl_system_statistics_end_notif {
__le32 time_stamp;
} __packed; /* STATISTICS_FW_NTFY_END_API_S_VER_1 */
/** * struct iwl_statistics_operational_ntfy * * @hdr: general statistics header * @flags: bitmap of possible notification structures * @per_mac: per mac statistics, &struct iwl_stats_ntfy_per_mac * @per_phy: per phy statistics, &struct iwl_stats_ntfy_per_phy * @per_sta: per sta statistics, &struct iwl_stats_ntfy_per_sta * @rx_time: rx time * @tx_time: usec the radio is transmitting. * @on_time_rf: The total time in usec the RF is awake. * @on_time_scan: usec the radio is awake due to scan.
*/ struct iwl_statistics_operational_ntfy { struct iwl_statistics_ntfy_hdr hdr;
__le32 flags; struct iwl_stats_ntfy_per_mac per_mac[MAC_INDEX_AUX]; struct iwl_stats_ntfy_per_phy per_phy[IWL_STATS_MAX_PHY_OPERATIONAL]; struct iwl_stats_ntfy_per_sta per_sta[IWL_STATION_COUNT_MAX];
__le64 rx_time;
__le64 tx_time;
__le64 on_time_rf;
__le64 on_time_scan;
} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_15 */
/** * struct iwl_statistics_operational_ntfy_ver_14 * * @hdr: general statistics header * @flags: bitmap of possible notification structures * @mac_id: mac on which the beacon was received * @beacon_filter_average_energy: Average energy [-dBm] of the 2 * antennas. * @beacon_filter_reason: beacon filter reason * @radio_temperature: radio temperature * @air_time: air time * @beacon_counter: all beacons (both filtered and not filtered) * @beacon_average_energy: all beacons (both filtered and not * filtered) * @beacon_rssi_a: beacon RSSI on antenna A * @beacon_rssi_b: beacon RSSI on antenna B * @rx_bytes: per MAC RX byte count * @rx_time: rx time * @tx_time: usec the radio is transmitting. * @on_time_rf: The total time in usec the RF is awake. * @on_time_scan: usec the radio is awake due to scan. * @average_energy: in fact it is minus the energy.. * @reserved: reserved
*/ struct iwl_statistics_operational_ntfy_ver_14 { struct iwl_statistics_ntfy_hdr hdr;
__le32 flags;
__le32 mac_id;
__le32 beacon_filter_average_energy;
__le32 beacon_filter_reason;
__le32 radio_temperature;
__le32 air_time[MAC_INDEX_AUX];
__le32 beacon_counter[MAC_INDEX_AUX];
__le32 beacon_average_energy[MAC_INDEX_AUX];
__le32 beacon_rssi_a;
__le32 beacon_rssi_b;
__le32 rx_bytes[MAC_INDEX_AUX];
__le64 rx_time;
__le64 tx_time;
__le64 on_time_rf;
__le64 on_time_scan;
__le32 average_energy[IWL_STATION_COUNT_MAX];
__le32 reserved;
} __packed; /* STATISTICS_OPERATIONAL_NTFY_API_S_VER_14 */
/** * struct iwl_statistics_mac_ntfy * * @hdr: general statistics header * @bcast_filter_passed_per_mac: bcast filter passed per mac * @bcast_filter_dropped_per_mac: bcast filter dropped per mac * @bcast_filter_passed_per_filter: bcast filter passed per filter * @bcast_filter_dropped_per_filter: bcast filter dropped per filter * @reserved: reserved
*/ struct iwl_statistics_mac_ntfy { struct iwl_statistics_ntfy_hdr hdr;
__le32 bcast_filter_passed_per_mac[NUM_MAC_INDEX_CDB];
__le32 bcast_filter_dropped_per_mac[NUM_MAC_INDEX_CDB];
__le32 bcast_filter_passed_per_filter[MAX_BCAST_FILTER_NUM];
__le32 bcast_filter_dropped_per_filter[MAX_BCAST_FILTER_NUM];
__le32 reserved;
} __packed; /* STATISTICS_MAC_NTFY_API_S_VER_1 */
/** * struct iwl_statistics_rx_ntfy * * @hdr: general statistics header * @rx_agg_mpdu_cnt: aggregation frame count (number of * delimiters) * @rx_agg_cnt: number of RX Aggregations * @unsupported_mcs: number of PLCP headers that have rate which * is unsupported by DSP * @bogus_cts: CTS received when not expecting CTS * @bogus_ack: ACK received when not expecting ACK * @rx_byte_count: ??? * @rx_packet_count: ??? * @missed_beacons: ??? * @unresponded_rts: un-responded RTS, due to NAV not zero * @rxe_frame_limit_overrun: RXE got frame limit overrun * @sent_ba_rsp_cnt: BA response TX count * @late_rx_handle: count the number of times the RX path was * aborted due to late entry * @num_bt_kills: ??? * @reserved: reserved
*/ struct iwl_statistics_rx_ntfy { struct iwl_statistics_ntfy_hdr hdr;
__le32 rx_agg_mpdu_cnt;
__le32 rx_agg_cnt;
__le32 unsupported_mcs;
__le32 bogus_cts;
__le32 bogus_ack;
__le32 rx_byte_count[MAC_INDEX_AUX];
__le32 rx_packet_count[MAC_INDEX_AUX];
__le32 missed_beacons;
__le32 unresponded_rts;
__le32 rxe_frame_limit_overrun;
__le32 sent_ba_rsp_cnt;
__le32 late_rx_handle;
__le32 num_bt_kills;
__le32 reserved;
} __packed; /* STATISTICS_RX_NTFY_API_S_VER_1 */
/** * struct iwl_statistics_tx_ntfy * * @hdr: general statistics header * @cts_timeout: timeout when waiting for CTS * @ack_timeout: timeout when waiting for ACK * @dump_msdu_cnt: number of MSDUs that were dumped due to any * reason * @burst_abort_missing_next_frame_cnt: number of times a burst * was aborted due to missing next frame bytes in txfifo * number of times got timeout when waiting for CTS/ACK/BA and energy was * detected just after sending the RTS/DATA. this statistics may help getting * interesting indicators, like the likelihood of collision (so the benefit of * protection may be estimated Vs. its cost). Or how many of the failures are * due to collision and how many due to SNR. * For Link-quality the CTS collision indication is more reliable then the ACK * collision indication as the RTS frame is short and has more chance that the * frame/s which caused the collision continue after the RTS was sent. * @cts_timeout_collision: ??? * ACK/BA failed and energy as detected after DATA * Note: to get the collision ratio need to: * ackOrBaTimeoutCollision / (ack_timeout + ba_timeout) * @ack_or_ba_timeout_collision: ??? * @ba_timeout: timeout when waiting for immediate BA response * @ba_reschedule_frames: failed to get BA response and * rescheduled all the non-ACKed frames * gives the avarage number of frames inside aggregation * @scd_query_agg_frame_cnt: ??? * @scd_query_no_agg: scheduler query prevented aggregation * @scd_query_agg: scheduler query allowed aggregation * @scd_query_mismatch: scheduler query inaccurate, either too * short or too long * @agg_terminated_underrun: aggregation was terminated due to * underrun * @agg_terminated_bt_prio_kill: aggregation was terminated due * to BT * @tx_kill_on_long_retry: count the tx frames dropped due to * long retry limit (DATA frame failed) * @tx_kill_on_short_retry: count the tx frames dropped due to * short retry limit (RTS frame failed) * TX deffer on energy. This counter is reset on each successful transmit. * When timer exceed TX deffer limit than will be uCode assert. * @tx_deffer_counter: ??? * @tx_deffer_base_time: Keep the time of the last successful * transmit * @tx_underrun: TX killed due to underrun * @bt_defer: TX deferred due to BT priority, so probably TX was * not started. * @tx_kill_on_dsp_timeout: TX killed on DSP problem detected * @tx_kill_on_immediate_quiet: TX killed due to immediate quiet * @kill_ba_cnt: number of times sending BA failed * @kill_ack_cnt: number of times sending ACK failed * @kill_cts_cnt: number of times sending CTS failed * @burst_terminated: Count burst or fragmentation termination * occurrence * @late_tx_vec_wr_cnt: ??? * TX is not sent because ucode failed to notify the TRM in SIFS-delta from * ON_AIR deassertion. * @late_rx2_tx_cnt: ??? * @scd_query_cnt: count the times SCD query was done to check * for TX AGG * @tx_frames_acked_in_agg: count the number of frames * transmitted inside AGG and were successful * @last_tx_ch_width_indx: ??? * number of deferred TX per channel width, 0 - 20, 1/2/3 - 40/80/160 * @rx_detected_per_ch_width: ??? * @success_per_ch_width: ??? * @fail_per_ch_width: ??? * @reserved: reserved
*/ struct iwl_statistics_tx_ntfy { struct iwl_statistics_ntfy_hdr hdr;
__le32 cts_timeout;
__le32 ack_timeout;
__le32 dump_msdu_cnt;
__le32 burst_abort_missing_next_frame_cnt;
__le32 cts_timeout_collision;
__le32 ack_or_ba_timeout_collision;
__le32 ba_timeout;
__le32 ba_reschedule_frames;
__le32 scd_query_agg_frame_cnt;
__le32 scd_query_no_agg;
__le32 scd_query_agg;
__le32 scd_query_mismatch;
__le32 agg_terminated_underrun;
__le32 agg_terminated_bt_prio_kill;
__le32 tx_kill_on_long_retry;
__le32 tx_kill_on_short_retry;
__le32 tx_deffer_counter;
__le32 tx_deffer_base_time;
__le32 tx_underrun;
__le32 bt_defer;
__le32 tx_kill_on_dsp_timeout;
__le32 tx_kill_on_immediate_quiet;
__le32 kill_ba_cnt;
__le32 kill_ack_cnt;
__le32 kill_cts_cnt;
__le32 burst_terminated;
__le32 late_tx_vec_wr_cnt;
__le32 late_rx2_tx_cnt;
__le32 scd_query_cnt;
__le32 tx_frames_acked_in_agg;
__le32 last_tx_ch_width_indx;
__le32 rx_detected_per_ch_width[4];
__le32 success_per_ch_width[4];
__le32 fail_per_ch_width[4];
__le32 reserved;
} __packed; /* STATISTICS_TX_NTFY_API_S_VER_1 */
/** * struct iwl_statistics_duration_ntfy * * @hdr: general statistics header * @cont_burst_chk_cnt: number of times continuation or * fragmentation or bursting was checked * @cont_burst_cnt: number of times continuation or fragmentation * or bursting was successful * @wait_for_silence_timeout_cnt: ??? * @reserved: reserved
*/ struct iwl_statistics_duration_ntfy { struct iwl_statistics_ntfy_hdr hdr;
__le32 cont_burst_chk_cnt;
__le32 cont_burst_cnt;
__le32 wait_for_silence_timeout_cnt;
__le32 reserved;
} __packed; /* STATISTICS_DURATION_NTFY_API_S_VER_1 */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.