#ifndef  _MUC_PHY_STATS_H
#define _MUC_PHY_STATS_H

#include "../common/ruby_mem.h"
#include "../common/queue.h"

#define NUM_ANT 4
#define NUM_LOG_BUFFS 0x8

#define MUC_PHY_STATS_ALTERNATE		0
#define MUC_PHY_STATS_RSSI_RCPI_ONLY	1
#define MUC_PHY_STATS_ERROR_SUM_ONLY	2

#define MUC_PHY_ERR_SUM_NOT_AVAIL	0xffffffff

#define MUC_PHY_RSSI_NOT_AVAIL		(-1000)

#include <qtn/muc_txrx_stats.h>

/**
 * \defgroup PHYSTATS PHY generated statistics
 */
/** @{ */

#define QTN_STATS_MCS_SGI	0x40000000
#define QTN_STATS_MCS_BW40	0x80000000

#define QTN_PHY_STATS_MCS_PHYRATE	0xFFFF0000
#define QTN_PHY_STATS_MCS_PHYRATE_S	16
#define QTN_PHY_STATS_MCS_NSS	0xf000
#define QTN_PHY_STATS_MCS_NSS_S	12
#define QTN_PHY_STATS_MCS_BW		0xC00
#define QTN_PHY_STATS_MCS_BW_S	10
#define QTN_PHY_STATS_MCS_MODE		0x380
#define QTN_PHY_STATS_MCS_MODE_S	7
#define QTN_STATS_MCS_RATE_MASK	0x7f
#define QTN_STATS_MCS_RATE_MASK_S 0

#define QTN_PHY_STATS_MODE_11N	1
#define QTN_PHY_STATS_MODE_11AC	2


#define QTN_PER_NODE_STATS_POOL_SIZE	QTN_NODE_TBL_SIZE_LHOST

#define EVM_TIME_MEAN_SHIFT	4
#define EVM_TIME_MEAN_COUNT	(1 << EVM_TIME_MEAN_SHIFT)
#define RSSI_TIME_MEAN_SHIFT	4
#define RSSI_TIME_MEAN_COUNT	(1 << RSSI_TIME_MEAN_SHIFT)
#define PHY_RATE_MEAN_SHIFT	4
#define PHY_RATE_MEAN_COUNT	(1 << PHY_RATE_MEAN_SHIFT)

struct qtn_node_shared_stats_tx {
	uint32_t max_queue;
	/*
	 * last_mcs are used as bitmask value
	 * bit[31:16]		rate		(Mbps)
	 * bit[15:12]		nss		(1~4)
	 * bit[11:10]		bw		(0 - 20; 1-40; 2-80; 3-unknow)
	 * bit[9:7]		mode		(1-11n, 2-11ac others-unknow)
	 * bit[6:0]		mcs		([0,76] for 11n, [0,9] [33,76] for 11ac)
	 */
	uint32_t last_mcs;
	uint32_t last_tx_scale;
	uint32_t ralg_inv_phy_rate;
	uint32_t avg_rssi_dbm;
	uint32_t cost;
	uint32_t pkts;
	uint32_t txdone_failed_cum;
	uint32_t avg_per;
	uint32_t pkts_per_sec;
	uint32_t avg_tx_phy_rate;
	uint32_t acks;
	uint32_t tx_airtime;
	uint32_t tx_accum_airtime;
};

struct qtn_node_shared_stats_rx {
	uint32_t last_rssi_dbm[NUM_ANT + 1];
	uint32_t rssi_dbm_smoothed[NUM_ANT + 1];
	uint32_t last_rcpi_dbm[NUM_ANT + 1];
	uint32_t rcpi_dbm_smoothed[NUM_ANT + 1];
	uint32_t last_evm_dbm[NUM_ANT + 1];
	uint32_t evm_dbm_smoothed[NUM_ANT + 1];
	uint32_t last_hw_noise[NUM_ANT + 1];
	uint32_t last_rxsym;
	/*
	 * last_mcs are used as bitmask value
	 * bit[31:16]		rate		(Mbps)
	 * bit[15:12]		nss		(1~4)
	 * bit[11:10]		bw		(0 - 20; 1-40; 2-80; 3-unknow)
	 * bit[9:7]		mode		(1-11n, 2-11ac others-unknow)
	 * bit[6:0]		mcs		([0,76] for 11n, [0,9] [33,76] for 11ac)
	 */
	uint32_t last_mcs;
	uint32_t pkts;
	uint32_t pkts_cum;
	uint32_t inv_phy_rate_smoothed;
	uint32_t cost;
};

/**
 * Per node values and statistics; updated periodically
 * with each invocation of qtn_stats_sample, based on
 * MuC per node stats
 */
struct qtn_node_shared_stats {
	/* 0 for SU, 1 for MU */
#define STATS_MIN	0
#define STATS_SU	STATS_MIN
#define STATS_MU	1
#define STATS_MAX	2
	struct qtn_node_shared_stats_tx tx[STATS_MAX];
	struct qtn_node_shared_stats_rx rx[STATS_MAX];
	uint64_t beacon_tbtt;
	uint64_t beacon_tbtt_jiffies;
	uint64_t last_rx_jiffies;
	uint64_t dtim_tbtt;
	uint32_t tim_set;
	uint32_t dtim_set;
	uint16_t beacon_interval;
	TAILQ_ENTRY(qtn_node_shared_stats) next;
};

/**
 * \brief PHY receive statistics
 *
 * These statistics are either read directly from the PHY or are generated
 * based on PHY inputs (eg, RX vector or other structures).
 */
struct qtn_rx_stats {
	/**
	 * The count of the number of packets the PHY has received and passed
	 * up. This is the total of the number of singleton packets (MPDU, MMPDU, control frames),
	 * plus the total of subframes within AMPDUs, plus the number of AMSDUs which have been
	 * passed up from the PHY.
	 *
	 * \note On BBIC4, it just counts single AMPDU rather than the subframes in AMPDU.
	 */
	u_int32_t num_pkts;

	/**
	 * count of packets with A-MSDU flag set
	 */
	u_int32_t num_amsdu;

	/**
	 * The average RX gain used on the previously received packet
	 * (MMPDU, MPDU, AMPDU or singleton AMSDU).
	 */
	u_int32_t avg_rxgain;

	/**
	 * The number of packets received by the PHY with invalid CRC.
	 */
	u_int32_t cnt_mac_crc;

	/**
	 * The number of short preamble failures reported by the PHY.
	 */
	u_int32_t cnt_sp_fail;

	/**
	 * The number of long preamble failures reported by the PHY.
	 */
	u_int32_t cnt_lp_fail;

	u_int32_t hw_noise;

	u_int32_t max_init_gain;

	/**
	 * The current temperature of the system.
	 */
	u_int32_t sys_temp;

	/**
	 * The mode of the last received packet.
	 * 1 - 11n
	 * 2 - 11ac
	 * others - unknow
	 */
	u_int32_t last_rx_mode;

	/**
	 * The bandwidth of the last received packet.
	 * 0 - 20MHZ
	 * 1 - 40MHZ
	 * 2 - 80MHZ
	 * others - unknow
	 */
	u_int32_t last_rx_bw;

	/**
	 * The MCS index of the last received packet.
	 */
	u_int32_t last_rx_mcs;

	/**
	 * Debug information.
	 */
	u_int32_t rx_gain_fields;

	/**
	 * RSSI / RCPI / EVM for frames
	 */
	u_int32_t last_rssi_evm[NUM_ANT];

	u_int32_t last_rssi_all;

	u_int32_t last_rxsym;
};

/**
 * \brief PHY transmit statistics
 *
 * These statistics are either read directly from the PHY or are generated
 * based on PHY values.
 */
struct qtn_tx_stats {
	/**
	 * The count of the number of packets (MMPDU, MPDU, AMSDU, and one for each
	 * subframe in an AMPDU) sent to the PHY.
	 *
	 * \note On BBIC4, it just counts single AMPDU rather than the subframes in AMPDU.
	 */
	u_int32_t num_pkts;

	/**
	 * The number of times transmitted packets were deferred due to CCA.
	 */
	u_int32_t num_defers;

	/**
	 * The number of times packets were timed out - spent too long inside the MAC.
	 */
	u_int32_t num_timeouts;

	/**
	 * The number of retries - singleton retransmissions, full AMPDU retransmissions,
	 * or partial AMPDU retransmissions.
	 */
	u_int32_t num_retries;

	/**
	 * The transmit power scale index used for the last packet
	 *
	 * \note On BBIC4, This variable is not available.
	 */
	u_int32_t last_tx_scale;

	/**
	 * The mode of the last transmit packet.
	 * 1 - 11n
	 * 2 - 11ac
	 * others - unknow
	 */
	u_int32_t last_tx_mode;

	/**
	 * The bandwidth of the last transmit packet.
	 * 0 - 20MHZ
	 * 1 - 40MHZ
	 * 2 - 80MHZ
	 */
	u_int32_t last_tx_bw;

	/**
	 * The MCS index of the last acknowledged transmit packet.
	 */
	u_int32_t last_tx_mcs;

	/**
	 * Rate adaptations current best throughput rate
	 */
	u_int32_t rate;		/* this field must be last for stat_parser.pl */
};

/** @} */

struct qtn_stats {
	u_int32_t tstamp;
	struct qtn_rx_stats rx_phy_stats;
	struct qtn_rx_stats mu_rx_phy_stats;
	struct qtn_tx_stats tx_phy_stats;
	struct qtn_tx_stats mu_tx_phy_stats;
};

struct qtn_stats_log {
	int curr_buff; /* Indx of the buffer with latest data */
	struct qtn_stats stat_buffs[NUM_LOG_BUFFS];
	struct muc_rx_stats *rx_muc_stats;
	struct muc_rx_rates *rx_muc_rates;
	struct muc_rx_bf_stats *rx_muc_bf_stats;
	struct muc_tx_stats *tx_muc_stats;
	struct qtn_rate_tx_stats_per_sec *tx_muc_rates;
	uint32_t *muc_su_rate_stats_read;
	uint32_t *muc_mu_rate_stats_read;
	uint32_t *scs_cnt;
	uint32_t pad[7]; /* Ensure the pad makes this structure a multiple of ARC cache line size */
};

/*
 * Micro stats: provide stats in micro view along the time axis
 * Can be used for off-channel and other debug purpose.
 */
#define QTN_MICRO_STATS_GRANULARITY	1	/* ms, for trace burst in traffic */
#define QTN_MICRO_STATS_NUM		32	/* enough for max off-channel duration */
struct qtn_micro_stats {
	/*
	 * tx msdu: collected in tx done. With average 1.5ms aggregation timeout, this is accurate
	 * enough for off-channel use.
	 */
	uint32_t tx_msdu;
	/*
	 * rx msdu: collected after rx reorder and mpdu decap, and amsdu decap if existing.
	 * - Delay in rx reorder lead to different instantaneous pkt rate from what is in the
	 *   air in ms level granularity.
	 * - If amsdu decap is done in lhost, bbic3 or bbic4 sdp, this value is not correct.
	 */
	uint32_t rx_msdu;
};

struct qtn_micro_stats_log {
	struct qtn_micro_stats latest_stats;
	/* snapshot */
	uint32_t curr_idx;
	struct qtn_micro_stats micro_stats[QTN_MICRO_STATS_NUM];
};

RUBY_INLINE int qtn_select_rssi_over_error_sums(u_int32_t timestamp, int muc_phy_stats_mode)
{
	int	retval = 0;

	switch (muc_phy_stats_mode) {
	case MUC_PHY_STATS_RSSI_RCPI_ONLY:
		retval = 1;
		break;
	case MUC_PHY_STATS_ERROR_SUM_ONLY:
		retval = 0;
		break;
	case MUC_PHY_STATS_ALTERNATE:
	default:
		retval = (timestamp & 0x01);
		break;
	}

	return( retval );
}

#endif
