/******************************************************************************
 *
 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright (C) 2018 Intel Corporation
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Intel Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/

#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_STATS_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_STATS_H_

#include "third_party/iwlwifi/fw/api/mac.h"
#include "third_party/iwlwifi/platform/compiler.h"

struct mvm_statistics_dbg {
  __le32 burst_check;
  __le32 burst_count;
  __le32 wait_for_silence_timeout_cnt;
  uint8_t reserved[12];
} __packed; /* STATISTICS_DEBUG_API_S_VER_2 */

struct mvm_statistics_div {
  __le32 tx_on_a;
  __le32 tx_on_b;
  __le32 exec_time;
  __le32 probe_time;
  __le32 rssi_ant;
  __le32 reserved2;
} __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */

/**
 * 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 anntena 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_rx_phy {
  __le32 unresponded_rts;
  __le32 rxe_frame_lmt_overrun;
  __le32 sent_ba_rsp_cnt;
  __le32 dsp_self_kill;
  __le32 reserved;
} __packed; /* STATISTICS_RX_PHY_API_S_VER_3 */

struct mvm_statistics_rx_phy_v2 {
  __le32 ina_cnt;
  __le32 fina_cnt;
  __le32 plcp_err;
  __le32 crc32_err;
  __le32 overrun_err;
  __le32 early_overrun_err;
  __le32 crc32_good;
  __le32 false_alarm_cnt;
  __le32 fina_sync_err_cnt;
  __le32 sfd_timeout;
  __le32 fina_timeout;
  __le32 unresponded_rts;
  __le32 rxe_frame_lmt_overrun;
  __le32 sent_ack_cnt;
  __le32 sent_cts_cnt;
  __le32 sent_ba_rsp_cnt;
  __le32 dsp_self_kill;
  __le32 mh_format_err;
  __le32 re_acq_main_rssi_sum;
  __le32 reserved;
} __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */

struct mvm_statistics_rx_ht_phy_v1 {
  __le32 plcp_err;
  __le32 overrun_err;
  __le32 early_overrun_err;
  __le32 crc32_good;
  __le32 crc32_err;
  __le32 mh_format_err;
  __le32 agg_crc32_good;
  __le32 agg_mpdu_cnt;
  __le32 agg_cnt;
  __le32 unsupport_mcs;
} __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */

struct mvm_statistics_rx_ht_phy {
  __le32 mh_format_err;
  __le32 agg_mpdu_cnt;
  __le32 agg_cnt;
  __le32 unsupport_mcs;
} __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_2 */

struct mvm_statistics_tx_non_phy_v3 {
  __le32 preamble_cnt;
  __le32 rx_detected_cnt;
  __le32 bt_prio_defer_cnt;
  __le32 bt_prio_kill_cnt;
  __le32 few_bytes_cnt;
  __le32 cts_timeout;
  __le32 ack_timeout;
  __le32 expected_ack_cnt;
  __le32 actual_ack_cnt;
  __le32 dump_msdu_cnt;
  __le32 burst_abort_next_frame_mismatch_cnt;
  __le32 burst_abort_missing_next_frame_cnt;
  __le32 cts_timeout_collision;
  __le32 ack_or_ba_timeout_collision;
} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */

struct mvm_statistics_tx_non_phy {
  __le32 bt_prio_defer_cnt;
  __le32 bt_prio_kill_cnt;
  __le32 few_bytes_cnt;
  __le32 cts_timeout;
  __le32 ack_timeout;
  __le32 dump_msdu_cnt;
  __le32 burst_abort_next_frame_mismatch_cnt;
  __le32 burst_abort_missing_next_frame_cnt;
  __le32 cts_timeout_collision;
  __le32 ack_or_ba_timeout_collision;
} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_4 */

#define MAX_CHAINS 3

struct mvm_statistics_tx_non_phy_agg {
  __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 frame_not_ready;
  __le32 underrun;
  __le32 bt_prio_kill;
  __le32 rx_ba_rsp_cnt;
  __s8 txpower[MAX_CHAINS];
  __s8 reserved;
  __le32 reserved2;
} __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */

struct mvm_statistics_tx_channel_width {
  __le32 ext_cca_narrow_ch20[1];
  __le32 ext_cca_narrow_ch40[2];
  __le32 ext_cca_narrow_ch80[3];
  __le32 ext_cca_narrow_ch160[4];
  __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];
}; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */

struct mvm_statistics_tx_v4 {
  struct mvm_statistics_tx_non_phy_v3 general;
  struct mvm_statistics_tx_non_phy_agg agg;
  struct mvm_statistics_tx_channel_width channel_width;
} __packed; /* STATISTICS_TX_API_S_VER_4 */

struct mvm_statistics_tx {
  struct mvm_statistics_tx_non_phy general;
  struct mvm_statistics_tx_non_phy_agg agg;
  struct mvm_statistics_tx_channel_width channel_width;
} __packed; /* STATISTICS_TX_API_S_VER_5 */

struct mvm_statistics_bt_activity {
  __le32 hi_priority_tx_req_cnt;
  __le32 hi_priority_tx_denied_cnt;
  __le32 lo_priority_tx_req_cnt;
  __le32 lo_priority_tx_denied_cnt;
  __le32 hi_priority_rx_req_cnt;
  __le32 hi_priority_rx_denied_cnt;
  __le32 lo_priority_rx_req_cnt;
  __le32 lo_priority_rx_denied_cnt;
} __packed; /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */

struct mvm_statistics_general_common_v19 {
  __le32 radio_temperature;
  __le32 radio_voltage;
  struct mvm_statistics_dbg dbg;
  __le32 sleep_time;
  __le32 slots_out;
  __le32 slots_idle;
  __le32 ttl_timestamp;
  struct mvm_statistics_div slow_div;
  __le32 rx_enable_counter;
  /*
   * num_of_sos_states:
   *  count the number of times we have to re-tune
   *  in order to get out of bad PHY status
   */
  __le32 num_of_sos_states;
  __le32 beacon_filtered;
  __le32 missed_beacons;
  uint8_t beacon_filter_average_energy;
  uint8_t beacon_filter_reason;
  uint8_t beacon_filter_current_energy;
  uint8_t beacon_filter_reserved;
  __le32 beacon_filter_delta_time;
  struct mvm_statistics_bt_activity bt_activity;
  __le64 rx_time;
  __le64 on_time_rf;
  __le64 on_time_scan;
  __le64 tx_time;
} __packed;

struct mvm_statistics_general_common {
  __le32 radio_temperature;
  struct mvm_statistics_dbg dbg;
  __le32 sleep_time;
  __le32 slots_out;
  __le32 slots_idle;
  __le32 ttl_timestamp;
  struct mvm_statistics_div slow_div;
  __le32 rx_enable_counter;
  /*
   * num_of_sos_states:
   *  count the number of times we have to re-tune
   *  in order to get out of bad PHY status
   */
  __le32 num_of_sos_states;
  __le32 beacon_filtered;
  __le32 missed_beacons;
  uint8_t beacon_filter_average_energy;
  uint8_t beacon_filter_reason;
  uint8_t beacon_filter_current_energy;
  uint8_t beacon_filter_reserved;
  __le32 beacon_filter_delta_time;
  struct mvm_statistics_bt_activity bt_activity;
  __le64 rx_time;
  __le64 on_time_rf;
  __le64 on_time_scan;
  __le64 tx_time;
} __packed; /* STATISTICS_GENERAL_API_S_VER_10 */

struct mvm_statistics_general_v8 {
  struct mvm_statistics_general_common_v19 common;
  __le32 beacon_counter[NUM_MAC_INDEX];
  uint8_t beacon_average_energy[NUM_MAC_INDEX];
  uint8_t reserved[4 - (NUM_MAC_INDEX % 4)];
} __packed; /* STATISTICS_GENERAL_API_S_VER_8 */

struct mvm_statistics_general {
  struct mvm_statistics_general_common common;
  __le32 beacon_counter[MAC_INDEX_AUX];
  uint8_t beacon_average_energy[MAC_INDEX_AUX];
  uint8_t reserved[8 - MAC_INDEX_AUX];
} __packed; /* STATISTICS_GENERAL_API_S_VER_10 */

/**
 * 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];
  uint8_t avg_energy[IWL_MVM_STATION_COUNT];
} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_3 */

struct mvm_statistics_load_v1 {
  __le32 air_time[NUM_MAC_INDEX];
  __le32 byte_count[NUM_MAC_INDEX];
  __le32 pkt_count[NUM_MAC_INDEX];
  uint8_t avg_energy[IWL_MVM_STATION_COUNT];
} __packed; /* STATISTICS_RX_MAC_STATION_S_VER_1 */

struct mvm_statistics_rx {
  struct mvm_statistics_rx_phy ofdm;
  struct mvm_statistics_rx_phy cck;
  struct mvm_statistics_rx_non_phy general;
  struct mvm_statistics_rx_ht_phy ofdm_ht;
} __packed; /* STATISTICS_RX_API_S_VER_4 */

struct mvm_statistics_rx_v3 {
  struct mvm_statistics_rx_phy_v2 ofdm;
  struct mvm_statistics_rx_phy_v2 cck;
  struct mvm_statistics_rx_non_phy_v3 general;
  struct mvm_statistics_rx_ht_phy_v1 ofdm_ht;
} __packed; /* STATISTICS_RX_API_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.
 */

struct iwl_notif_statistics_v10 {
  __le32 flag;
  struct mvm_statistics_rx_v3 rx;
  struct mvm_statistics_tx_v4 tx;
  struct mvm_statistics_general_v8 general;
} __packed; /* STATISTICS_NTFY_API_S_VER_10 */

struct iwl_notif_statistics_v11 {
  __le32 flag;
  struct mvm_statistics_rx_v3 rx;
  struct mvm_statistics_tx_v4 tx;
  struct mvm_statistics_general_v8 general;
  struct mvm_statistics_load_v1 load_stats;
} __packed; /* STATISTICS_NTFY_API_S_VER_11 */

struct iwl_notif_statistics {
  __le32 flag;
  struct mvm_statistics_rx rx;
  struct mvm_statistics_tx tx;
  struct mvm_statistics_general general;
  struct mvm_statistics_load load_stats;
} __packed; /* STATISTICS_NTFY_API_S_VER_13 */

/**
 * enum iwl_statistics_notif_flags - flags used in statistics notification
 * @IWL_STATISTICS_REPLY_FLG_CLEAR: statistics were cleared after this report
 */
enum iwl_statistics_notif_flags {
  IWL_STATISTICS_REPLY_FLG_CLEAR = 0x1,
};

/**
 * enum iwl_statistics_cmd_flags - flags used in statistics command
 * @IWL_STATISTICS_FLG_CLEAR: request to clear statistics after the report
 *  that's sent after this command
 * @IWL_STATISTICS_FLG_DISABLE_NOTIF: disable unilateral statistics
 *  notifications
 */
enum iwl_statistics_cmd_flags {
  IWL_STATISTICS_FLG_CLEAR = 0x1,
  IWL_STATISTICS_FLG_DISABLE_NOTIF = 0x2,
};

/**
 * struct iwl_statistics_cmd - statistics config command
 * @flags: flags from &enum iwl_statistics_cmd_flags
 */
struct iwl_statistics_cmd {
  __le32 flags;
} __packed; /* STATISTICS_CMD_API_S_VER_1 */

#endif  // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_STATS_H_
