Browse Source

qcacmn: Segregate stats among peer, txrx_peer & monitor_peer

Segregate the stats among dp_peer, dp_txrx_peer and dp_mon_peer
structures.

Segregation is done as per below:
 * Move stats updated in per pkt path to dp_txrx_peer
 * Consider stats updated purely in per pkt path as per_pkt_stats
 * Consider stats for which there is an alternate path of
   updation as extd_stats
 * Move delay stats and jitter stats to dp_txrx_peer
 * Maintain calibrated stats in dp_peer
 * Move rdkstats_ctx from dp_peer to dp_mon_peer
 * Move invalid peer from dp_pdev to dp_mon_pdev

As per the above segregation, if there is not support for
alternate path of stats updation, then stats in dp_txrx_peer is
combination of per_pkt_stats and extd_stats and dp_mon_peer
does not hold any stats.

If support is there, then dp_txrx_peer holds only per_pkt_stats and
dp_mon_peer holds extd_stats.

Change-Id: I2eb81d1b93a178985c05ff4f6557a173cc8a262d
CRs-Fixed: 3092123
Harsh Kumar Bijlani 3 years ago
parent
commit
148f220408
3 changed files with 479 additions and 46 deletions
  1. 71 11
      dp/inc/cdp_txrx_stats_struct.h
  2. 363 14
      dp/wifi3.0/dp_types.h
  3. 45 21
      dp/wifi3.0/monitor/dp_mon.h

+ 71 - 11
dp/inc/cdp_txrx_stats_struct.h

@@ -1174,25 +1174,31 @@ struct cdp_tso_stats {
 
 enum cdp_peer_stats_type {
 	cdp_peer_stats_min = CDP_PEER_STATS_START,
-
-	/* Tx types */
-	cdp_peer_tx_ucast = cdp_peer_stats_min,
+	/* Peer per pkt stats */
+	cdp_peer_per_pkt_stats_min = cdp_peer_stats_min,
+	cdp_peer_tx_ucast = cdp_peer_per_pkt_stats_min,
 	cdp_peer_tx_mcast,
-	cdp_peer_tx_rate,
-	cdp_peer_tx_last_tx_rate,
 	cdp_peer_tx_inactive_time,
+	cdp_peer_rx_ucast,
+	/* Add enum for peer per pkt stats before this */
+	cdp_peer_per_pkt_stats_max,
+
+	/* Peer extd stats */
+	cdp_peer_extd_stats_min,
+	cdp_peer_tx_rate = cdp_peer_extd_stats_min,
+	cdp_peer_tx_last_tx_rate,
 	cdp_peer_tx_ratecode,
 	cdp_peer_tx_flags,
 	cdp_peer_tx_power,
-
-	/* Rx types */
 	cdp_peer_rx_rate,
 	cdp_peer_rx_last_rx_rate,
 	cdp_peer_rx_ratecode,
-	cdp_peer_rx_ucast,
 	cdp_peer_rx_flags,
 	cdp_peer_rx_avg_snr,
-	cdp_peer_stats_max,
+	cdp_peer_rx_snr,
+	/* Add enum for peer extd stats before this */
+	cdp_peer_extd_stats_max,
+	cdp_peer_stats_max = cdp_peer_extd_stats_max,
 };
 
 /*
@@ -1218,6 +1224,7 @@ typedef union cdp_peer_stats_buf {
 	uint32_t rx_ratecode;
 	uint32_t rx_flags;
 	uint32_t rx_avg_snr;
+	uint32_t rx_snr;
 } cdp_peer_stats_param_t; /* Max union size 16 bytes */
 
 /**
@@ -1318,6 +1325,9 @@ struct protocol_trace_count {
  * @failed_retry_count: packets failed due to retry above 802.11 retry limit
  * @retry_count: packets successfully send after one or more retry
  * @multiple_retry_count: packets successfully sent after more than one retry
+ * @tx_ppdus: ppdus in tx
+ * @tx_mpdus_success: mpdus successful in tx
+ * @tx_mpdus_tried: mpdus tried in tx
  * @transmit_type: pkt info for tx transmit type
  * @mu_group_id: mumimo mu group id
  * @ru_start: RU start index
@@ -1423,6 +1433,9 @@ struct cdp_tx_stats {
 	uint32_t retry_count;
 	uint32_t multiple_retry_count;
 	uint32_t last_tx_rate_used;
+	uint32_t tx_ppdus;
+	uint32_t tx_mpdus_success;
+	uint32_t tx_mpdus_tried;
 
 	struct cdp_tx_pkt_info transmit_type[MAX_TRANSMIT_TYPES];
 	uint32_t mu_group_id[MAX_MU_GROUP_ID];
@@ -1532,7 +1545,7 @@ struct cdp_tx_stats {
  * @to_stack_twt: Total packets sent up the stack in TWT session
  * @mpdu_retry_cnt: retries of mpdu in rx
  * @su_be_ppdu_cnt: SU Rx packet count for BE
- * @rx_mu_be: MU rx packet count for BE
+ * @mu_be_ppdu_cnt: MU rx packet count for BE
  */
 struct cdp_rx_stats {
 	struct cdp_pkt_info to_stack;
@@ -1617,7 +1630,7 @@ struct cdp_rx_stats {
 	uint32_t mpdu_retry_cnt;
 #ifdef WLAN_FEATURE_11BE
 	struct cdp_pkt_type su_be_ppdu_cnt;
-	struct cdp_pkt_type rx_mu_be[TXRX_TYPE_MU_MAX];
+	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
 #endif
 };
 
@@ -1758,6 +1771,51 @@ struct cdp_vdev_stats {
 	struct cdp_tso_stats tso_stats;
 };
 
+/* struct cdp_calibr_stats - Calibrated stats
+ * @last_per: Tx last packet error rate
+ * @tx_bytes_success_last: last Tx success bytes
+ * @tx_data_success_last: last Tx success data
+ * @tx_byte_rate: Bytes Trasmitted in last one sec
+ * @tx_data_rate: Data Transmitted in last one sec
+ * @tx_data_ucast_last: last unicast Tx bytes
+ * @tx_data_ucast_rate: last unicast Tx data
+ * @inactive_time: inactive time in secs
+ * @rx_bytes_success_last: last Rx success bytes
+ * @rx_data_success_last: last Rx success data
+ * @rx_byte_rate: Bytes received in last one sec
+ * @rx_data_rate: Data received in last one sec
+ */
+struct cdp_calibr_stats {
+	struct {
+		uint32_t last_per;
+		uint32_t tx_bytes_success_last;
+		uint32_t tx_data_success_last;
+		uint32_t tx_byte_rate;
+		uint32_t tx_data_rate;
+		uint32_t tx_data_ucast_last;
+		uint32_t tx_data_ucast_rate;
+		uint32_t inactive_time;
+	} tx;
+
+	struct {
+		uint32_t rx_bytes_success_last;
+		uint32_t rx_data_success_last;
+		uint32_t rx_byte_rate;
+		uint32_t rx_data_rate;
+	} rx;
+};
+
+/* struct cdp_calibr_stats_intf: Calibrated stats interface
+ * @to_stack: Total packets sent up the stack
+ * @tx_success: Successful Tx Packets
+ * @tx_ucast: Tx Unicast Packet Count
+ */
+struct cdp_calibr_stats_intf {
+	struct cdp_pkt_info to_stack;
+	struct cdp_pkt_info tx_success;
+	struct cdp_pkt_info tx_ucast;
+};
+
 /* struct cdp_peer_stats - peer stats structure
  * @tx: cdp tx stats
  * @rx: cdp rx stats
@@ -1800,6 +1858,7 @@ struct cdp_peer_tid_stats {
  * @per: per error rate
  * @ack_rssi: RSSI of the last ack received
  * @free_buff: free tx descriptor count
+ * @rx_avg_snr: Avg Rx SNR
  */
 struct cdp_interface_peer_stats {
 	uint8_t  peer_mac[QDF_MAC_ADDR_SIZE];
@@ -1815,6 +1874,7 @@ struct cdp_interface_peer_stats {
 	uint32_t per;
 	uint32_t ack_rssi;
 	uint32_t free_buff;
+	uint32_t rx_avg_snr;
 };
 
 /* struct cdp_interface_peer_qos_stats - interface structure for peer qos stats

+ 363 - 14
dp/wifi3.0/dp_types.h

@@ -866,9 +866,6 @@ struct dp_rx_tid {
 
 	/* Coex Override preserved windows size 1 based */
 	uint16_t rx_ba_win_size_override;
-
-	/* Peer TID statistics */
-	struct cdp_peer_tid_stats stats;
 };
 
 /**
@@ -2779,9 +2776,6 @@ struct dp_pdev {
 	struct cdp_tx_sojourn_stats sojourn_stats;
 	qdf_nbuf_t sojourn_buf;
 
-	/* peer pointer for collecting invalid peer stats */
-	struct dp_peer *invalid_peer;
-
 	union dp_rx_desc_list_elem_t *free_list_head;
 	union dp_rx_desc_list_elem_t *free_list_tail;
 	/* Cached peer_id from htt_peer_details_tlv */
@@ -3356,7 +3350,362 @@ struct dp_mld_link_peers {
 
 typedef void *dp_txrx_ref_handle;
 
-/* Peer structure for per packet path usage */
+/**
+ * struct dp_peer_per_pkt_tx_stats- Peer Tx stats updated in per pkt
+ *				Tx completion path
+ * @cdp_pkt_info ucast: Unicast Packet Count
+ * @cdp_pkt_info mcast: Multicast Packet Count
+ * @cdp_pkt_info bcast: Broadcast Packet Count
+ * @cdp_pkt_info nawds_mcast: NAWDS Multicast Packet Count
+ * @cdp_pkt_info tx_success: Successful Tx Packets
+ * @nawds_mcast_drop: NAWDS Multicast Drop Count
+ * @ofdma: Total Packets as ofdma
+ * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation
+ * @amsdu_cnt: Number of MSDUs part of AMSDU
+ * @cdp_pkt_info fw_rem: Discarded by firmware
+ * @fw_rem_notx: firmware_discard_untransmitted
+ * @fw_rem_tx: firmware_discard_transmitted
+ * @age_out: aged out in mpdu/msdu queues
+ * @fw_reason1: discarded by firmware reason 1
+ * @fw_reason2: discarded by firmware reason 2
+ * @fw_reason3: discarded by firmware reason  3
+ * @failed_retry_count: packets failed due to retry above 802.11 retry limit
+ * @retry_count: packets successfully send after one or more retry
+ * @multiple_retry_count: packets successfully sent after more than one retry
+ * @no_ack_count: no ack pkt count for different protocols
+ * @tx_success_twt: Successful Tx Packets in TWT session
+ * @last_tx_ts: last timestamp in jiffies when tx comp occurred
+ * @avg_sojourn_msdu[CDP_DATA_TID_MAX]: Avg sojourn msdu stat
+ * @protocol_trace_cnt: per-peer protocol counter
+ */
+struct dp_peer_per_pkt_tx_stats {
+	struct cdp_pkt_info ucast;
+	struct cdp_pkt_info mcast;
+	struct cdp_pkt_info bcast;
+	struct cdp_pkt_info nawds_mcast;
+	struct cdp_pkt_info tx_success;
+	uint32_t nawds_mcast_drop;
+	uint32_t ofdma;
+	uint32_t non_amsdu_cnt;
+	uint32_t amsdu_cnt;
+	struct {
+		struct cdp_pkt_info fw_rem;
+		uint32_t fw_rem_notx;
+		uint32_t fw_rem_tx;
+		uint32_t age_out;
+		uint32_t fw_reason1;
+		uint32_t fw_reason2;
+		uint32_t fw_reason3;
+	} dropped;
+	uint32_t failed_retry_count;
+	uint32_t retry_count;
+	uint32_t multiple_retry_count;
+	uint32_t no_ack_count[QDF_PROTO_SUBTYPE_MAX];
+	struct cdp_pkt_info tx_success_twt;
+	unsigned long last_tx_ts;
+	qdf_ewma_tx_lag avg_sojourn_msdu[CDP_DATA_TID_MAX];
+#ifdef VDEV_PEER_PROTOCOL_COUNT
+	struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
+#endif
+};
+
+/**
+ * struct dp_peer_extd_tx_stats - Peer Tx stats updated in either
+ *	per pkt Tx completion path when macro QCA_ENHANCED_STATS_SUPPORT is
+ *	disabled or in HTT Tx PPDU completion path when macro is enabled
+ * @stbc: Packets in STBC
+ * @ldpc: Packets in LDPC
+ * @retries: Packet retries
+ * @pkt_type[DOT11_MAX]: pkt count for different .11 modes
+ * @wme_ac_type[WME_AC_MAX]: Wireless Multimedia type Count
+ * @excess_retries_per_ac[WME_AC_MAX]: Wireless Multimedia type Count
+ * @ampdu_cnt: completion of aggregation
+ * @non_ampdu_cnt: tx completion not aggregated
+ * @num_ppdu_cookie_valid: no. of valid ppdu cookies rcvd from FW
+ * @tx_ppdus: ppdus in tx
+ * @tx_mpdus_success: mpdus successful in tx
+ * @tx_mpdus_tried: mpdus tried in tx
+ * @tx_rate: Tx Rate
+ * @last_tx_rate: Last tx rate for unicast packets
+ * @last_tx_rate_mcs: Tx rate mcs for unicast packets
+ * @mcast_last_tx_rate: Last tx rate for multicast packets
+ * @mcast_last_tx_rate_mcs: Last tx rate mcs for multicast
+ * @rnd_avg_tx_rate: Rounded average tx rate
+ * @avg_tx_rate: Average TX rate
+ * @tx_ratecode: Tx rate code of last frame
+ * @pream_punct_cnt: Preamble Punctured count
+ * @sgi_count[MAX_GI]: SGI count
+ * @nss[SS_COUNT]: Packet count for different num_spatial_stream values
+ * @bw[MAX_BW]: Packet Count for different bandwidths
+ * @ru_start: RU start index
+ * @ru_tones: RU tones size
+ * @ru_loc: pkt info for RU location 26/ 52/ 106/ 242/ 484 counter
+ * @transmit_type: pkt info for tx transmit type
+ * @mu_group_id: mumimo mu group id
+ * @last_ack_rssi: RSSI of last acked packet
+ * @nss_info: NSS 1,2, ...8
+ * @mcs_info: MCS index
+ * @bw_info: Bandwidth
+ *       <enum 0 bw_20_MHz>
+ *       <enum 1 bw_40_MHz>
+ *       <enum 2 bw_80_MHz>
+ *       <enum 3 bw_160_MHz>
+ * @gi_info: <enum 0     0_8_us_sgi > Legacy normal GI
+ *       <enum 1     0_4_us_sgi > Legacy short GI
+ *       <enum 2     1_6_us_sgi > HE related GI
+ *       <enum 3     3_2_us_sgi > HE
+ * @preamble_info: preamble
+ * @retries_mpdu: mpdu number of successfully transmitted after retries
+ * @mpdu_success_with_retries: mpdu retry count in case of successful tx
+ * @su_be_ppdu_cnt: SU Tx packet count for 11BE
+ * @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU Tx packet count for 11BE
+ */
+struct dp_peer_extd_tx_stats {
+	uint32_t stbc;
+	uint32_t ldpc;
+	uint32_t retries;
+	struct cdp_pkt_type pkt_type[DOT11_MAX];
+	uint32_t wme_ac_type[WME_AC_MAX];
+	uint32_t excess_retries_per_ac[WME_AC_MAX];
+	uint32_t ampdu_cnt;
+	uint32_t non_ampdu_cnt;
+	uint32_t num_ppdu_cookie_valid;
+	uint32_t tx_ppdus;
+	uint32_t tx_mpdus_success;
+	uint32_t tx_mpdus_tried;
+
+	uint32_t tx_rate;
+	uint32_t last_tx_rate;
+	uint32_t last_tx_rate_mcs;
+	uint32_t mcast_last_tx_rate;
+	uint32_t mcast_last_tx_rate_mcs;
+	uint64_t rnd_avg_tx_rate;
+	uint64_t avg_tx_rate;
+	uint16_t tx_ratecode;
+
+	uint32_t sgi_count[MAX_GI];
+	uint32_t pream_punct_cnt;
+	uint32_t nss[SS_COUNT];
+	uint32_t bw[MAX_BW];
+	uint32_t ru_start;
+	uint32_t ru_tones;
+	struct cdp_tx_pkt_info ru_loc[MAX_RU_LOCATIONS];
+
+	struct cdp_tx_pkt_info transmit_type[MAX_TRANSMIT_TYPES];
+	uint32_t mu_group_id[MAX_MU_GROUP_ID];
+
+	uint32_t last_ack_rssi;
+
+	uint32_t nss_info:4,
+		 mcs_info:4,
+		 bw_info:4,
+		 gi_info:4,
+		 preamble_info:4;
+
+	uint32_t retries_mpdu;
+	uint32_t mpdu_success_with_retries;
+#ifdef WLAN_FEATURE_11BE
+	struct cdp_pkt_type su_be_ppdu_cnt;
+	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+#endif
+};
+
+/**
+ * struct dp_peer_per_pkt_rx_stats - Peer Rx stats updated in per pkt Rx path
+ * @rcvd_reo[CDP_MAX_RX_RINGS]: Packets received on the reo ring
+ * @unicast: Total unicast packets
+ * @multicast: Total multicast packets
+ * @bcast:  Broadcast Packet Count
+ * @raw: Raw Pakets received
+ * @nawds_mcast_drop: Total NAWDS multicast packets dropped
+ * @mec_drop: Total MEC packets dropped
+ * @last_rx_ts: last timestamp in jiffies when RX happened
+ * @intra_bss.pkts: Intra BSS packets received
+ * @intra_bss.fail: Intra BSS packets failed
+ * @intra_bss.mdns_no_fws: Intra BSS MDNS packets not forwarded
+ * @mic_err: Rx MIC errors CCMP
+ * @decrypt_err: Rx Decryption Errors CRC
+ * @fcserr: rx MIC check failed (CCMP)
+ * @pn_err: pn check failed
+ * @oor_err: Rx OOR errors
+ * @jump_2k_err: 2k jump errors
+ * @rxdma_wifi_parse_err: rxdma wifi parse errors
+ * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation
+ * @amsdu_cnt: Number of MSDUs part of AMSDU
+ * @rx_retries: retries of packet in rx
+ * @multipass_rx_pkt_drop: Dropped multipass rx pkt
+ * @peer_unauth_rx_pkt_drop: Unauth rx packet drops
+ * @policy_check_drop: policy check drops
+ * @to_stack_twt: Total packets sent up the stack in TWT session
+ * @protocol_trace_cnt: per-peer protocol counters
+ */
+struct dp_peer_per_pkt_rx_stats {
+	struct cdp_pkt_info rcvd_reo[CDP_MAX_RX_RINGS];
+	struct cdp_pkt_info unicast;
+	struct cdp_pkt_info multicast;
+	struct cdp_pkt_info bcast;
+	struct cdp_pkt_info raw;
+	uint32_t nawds_mcast_drop;
+	struct cdp_pkt_info mec_drop;
+	unsigned long last_rx_ts;
+	struct {
+		struct cdp_pkt_info pkts;
+		struct cdp_pkt_info fail;
+		uint32_t mdns_no_fwd;
+	} intra_bss;
+	struct {
+		uint32_t mic_err;
+		uint32_t decrypt_err;
+		uint32_t fcserr;
+		uint32_t pn_err;
+		uint32_t oor_err;
+		uint32_t jump_2k_err;
+		uint32_t rxdma_wifi_parse_err;
+	} err;
+	uint32_t non_amsdu_cnt;
+	uint32_t amsdu_cnt;
+	uint32_t rx_retries;
+	uint32_t multipass_rx_pkt_drop;
+	uint32_t peer_unauth_rx_pkt_drop;
+	uint32_t policy_check_drop;
+	struct cdp_pkt_info to_stack_twt;
+#ifdef VDEV_PEER_PROTOCOL_COUNT
+	struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
+#endif
+};
+
+/**
+ * struct dp_peer_extd_rx_stats - Peer Rx stats updated in either
+ *	per pkt Rx path when macro QCA_ENHANCED_STATS_SUPPORT is disabled or in
+ *	Rx monitor patch when macro is enabled
+ * @pkt_type[DOT11_MAX]: pkt counter for different .11 modes
+ * @wme_ac_type[WME_AC_MAX]: Wireless Multimedia type Count
+ * @mpdu_cnt_fcs_ok: SU Rx success mpdu count
+ * @mpdu_cnt_fcs_err: SU Rx fail mpdu count
+ * @non_ampdu_cnt: Number of MSDUs with no MPDU level aggregation
+ * @ampdu_cnt: Number of MSDUs part of AMSPU
+ * @rx_mpdus: mpdu in rx
+ * @rx_ppdus: ppdu in rx
+ * @su_ax_ppdu_cnt: SU Rx packet count for .11ax
+ * @rx_mu[TXRX_TYPE_MU_MAX]: Rx MU stats
+ * @reception_type[MAX_RECEPTION_TYPES]: Reception type of packets
+ * @ppdu_cnt[MAX_RECEPTION_TYPES]: PPDU packet count in reception type
+ * @sgi_count[MAX_GI]: sgi count
+ * @nss[SS_COUNT]: packet count in spatiel Streams
+ * @ppdu_nss[SS_COUNT]: PPDU packet count in spatial streams
+ * @bw[MAX_BW]: Packet Count in different bandwidths
+ * @rx_mpdu_cnt[MAX_MCS]: rx mpdu count per MCS rate
+ * @rx_rate: Rx rate
+ * @last_rx_rate: Previous rx rate
+ * @rnd_avg_rx_rate: Rounded average rx rate
+ * @avg_rx_rate: Average Rx rate
+ * @rx_ratecode: Rx rate code of last frame
+ * @avg_snr: Average snr
+ * @rx_snr_measured_time: Time at which snr is measured
+ * @snr: SNR of received signal
+ * @last_snr: Previous snr
+ * @nss_info: NSS 1,2, ...8
+ * @mcs_info: MCS index
+ * @bw_info: Bandwidth
+ *       <enum 0 bw_20_MHz>
+ *       <enum 1 bw_40_MHz>
+ *       <enum 2 bw_80_MHz>
+ *       <enum 3 bw_160_MHz>
+ * @gi_info: <enum 0     0_8_us_sgi > Legacy normal GI
+ *       <enum 1     0_4_us_sgi > Legacy short GI
+ *       <enum 2     1_6_us_sgi > HE related GI
+ *       <enum 3     3_2_us_sgi > HE
+ * @preamble_info: preamble
+ * @mpdu_retry_cnt: retries of mpdu in rx
+ * @su_be_ppdu_cnt: SU Rx packet count for BE
+ * @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU rx packet count for BE
+ */
+struct dp_peer_extd_rx_stats {
+	struct cdp_pkt_type pkt_type[DOT11_MAX];
+	uint32_t wme_ac_type[WME_AC_MAX];
+	uint32_t mpdu_cnt_fcs_ok;
+	uint32_t mpdu_cnt_fcs_err;
+	uint32_t non_ampdu_cnt;
+	uint32_t ampdu_cnt;
+	uint32_t rx_mpdus;
+	uint32_t rx_ppdus;
+
+	struct cdp_pkt_type su_ax_ppdu_cnt;
+	struct cdp_rx_mu rx_mu[TXRX_TYPE_MU_MAX];
+	uint32_t reception_type[MAX_RECEPTION_TYPES];
+	uint32_t ppdu_cnt[MAX_RECEPTION_TYPES];
+
+	uint32_t sgi_count[MAX_GI];
+	uint32_t nss[SS_COUNT];
+	uint32_t ppdu_nss[SS_COUNT];
+	uint32_t bw[MAX_BW];
+	uint32_t rx_mpdu_cnt[MAX_MCS];
+
+	uint32_t rx_rate;
+	uint32_t last_rx_rate;
+	uint32_t rnd_avg_rx_rate;
+	uint32_t avg_rx_rate;
+	uint32_t rx_ratecode;
+
+	uint32_t avg_snr;
+	uint32_t rx_snr_measured_time;
+	uint8_t snr;
+	uint8_t last_snr;
+
+	uint32_t nss_info:4,
+		 mcs_info:4,
+		 bw_info:4,
+		 gi_info:4,
+		 preamble_info:4;
+
+	uint32_t mpdu_retry_cnt;
+#ifdef WLAN_FEATURE_11BE
+	struct cdp_pkt_type su_be_ppdu_cnt;
+	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+#endif
+};
+
+/**
+ * struct dp_peer_per_pkt_stats - Per pkt stats for peer
+ * @tx: Per pkt Tx stats
+ * @rx: Per pkt Rx stats
+ */
+struct dp_peer_per_pkt_stats {
+	struct dp_peer_per_pkt_tx_stats tx;
+	struct dp_peer_per_pkt_rx_stats rx;
+};
+
+/**
+ * struct dp_peer_extd_stats - Stats from extended path for peer
+ * @tx: Extended path tx stats
+ * @rx: Extended path rx stats
+ */
+struct dp_peer_extd_stats {
+	struct dp_peer_extd_tx_stats tx;
+	struct dp_peer_extd_rx_stats rx;
+};
+
+/**
+ * struct dp_peer_stats - Peer stats
+ * @per_pkt_stats: Per packet path stats
+ * @extd_stats: Extended path stats
+ */
+struct dp_peer_stats {
+	struct dp_peer_per_pkt_stats per_pkt_stats;
+#ifndef QCA_ENHANCED_STATS_SUPPORT
+	struct dp_peer_extd_stats extd_stats;
+#endif
+};
+
+/**
+ * struct dp_txrx_peer: DP txrx_peer strcuture used in per pkt path
+ * @tx_failed: Total Tx failure
+ * @cdp_pkt_info comp_pkt: Pkt Info for which completions were received
+ * @to_stack: Total packets sent up the stack
+ * @stats: Peer stats
+ * @delay_stats: Peer delay stats
+ * @jitter_stats: Peer jitter stats
+ */
 struct dp_txrx_peer {
 	/* Core TxRx Peer */
 
@@ -3374,8 +3723,13 @@ struct dp_txrx_peer {
 	uint32_t tx_failed;
 	struct cdp_pkt_info comp_pkt;
 	struct cdp_pkt_info to_stack;
+
+	struct dp_peer_stats stats;
+
 	struct dp_peer_delay_stats *delay_stats;
 
+	struct cdp_peer_tid_stats *jitter_stats;
+
 	struct {
 		enum cdp_sec_type sec_type;
 		u_int32_t michael_key[2]; /* relevant for TKIP */
@@ -3455,8 +3809,8 @@ struct dp_peer {
 	enum ol_txrx_peer_state state;
 	qdf_spinlock_t peer_info_lock;
 
-	/* Peer Stats */
-	struct cdp_peer_stats stats;
+	/* Peer calibrated stats */
+	struct cdp_calibr_stats stats;
 
 	TAILQ_HEAD(, dp_ast_entry) ast_entry_list;
 	/* TBD */
@@ -3474,11 +3828,6 @@ struct dp_peer {
 	uint8_t kill_256_sessions;
 	qdf_atomic_t is_default_route_set;
 
-	/* rdk statistics context */
-	struct cdp_peer_rate_stats_ctx *rdkstats_ctx;
-	/* average sojourn time */
-	qdf_ewma_tx_lag avg_sojourn_msdu[CDP_DATA_TID_MAX];
-
 #ifdef QCA_PEER_MULTIQ_SUPPORT
 	struct dp_peer_ast_params peer_ast_flowq_idx[DP_PEER_AST_FLOWQ_MAX];
 #endif

+ 45 - 21
dp/wifi3.0/monitor/dp_mon.h

@@ -44,6 +44,11 @@
 #define dp_mon_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MON, params)
 #define dp_mon_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MON, params)
 
+#ifdef QCA_ENHANCED_STATS_SUPPORT
+typedef struct dp_peer_extd_tx_stats dp_mon_peer_tx_stats;
+typedef struct dp_peer_extd_rx_stats dp_mon_peer_rx_stats;
+#endif
+
 #ifndef WLAN_TX_PKT_CAPTURE_ENH
 struct dp_pdev_tx_capture {
 };
@@ -672,6 +677,43 @@ struct dp_mon_soc {
 #endif
 };
 
+/**
+ * struct dp_mon_peer_stats - Monitor peer stats
+ */
+struct dp_mon_peer_stats {
+#ifdef QCA_ENHANCED_STATS_SUPPORT
+	dp_mon_peer_tx_stats tx;
+	dp_mon_peer_rx_stats rx;
+#endif
+};
+
+struct dp_mon_peer {
+#ifdef WLAN_TX_PKT_CAPTURE_ENH
+	struct dp_peer_tx_capture tx_capture;
+#endif
+#ifdef FEATURE_PERPKT_INFO
+	/* delayed ba ppdu stats handling */
+	struct cdp_delayed_tx_completion_ppdu_user delayed_ba_ppdu_stats;
+	/* delayed ba flag */
+	bool last_delayed_ba;
+	/* delayed ba ppdu id */
+	uint32_t last_delayed_ba_ppduid;
+#endif
+	uint8_t tx_cap_enabled:1, /* Peer's tx-capture is enabled */
+		rx_cap_enabled:1; /* Peer's rx-capture is enabled */
+
+	/* Peer level flag to check peer based pktlog enabled or
+	 * disabled
+	 */
+	uint8_t peer_based_pktlog_filter;
+
+	/* Monitor peer stats */
+	struct dp_mon_peer_stats stats;
+
+	/* rdk statistics context */
+	struct cdp_peer_rate_stats_ctx *rdkstats_ctx;
+};
+
 struct  dp_mon_pdev {
 	/* monitor */
 	bool monitor_configured;
@@ -854,6 +896,9 @@ struct  dp_mon_pdev {
 #endif
 	bool is_tlv_hdr_64_bit;
 	enum dp_mon_filter_mode current_filter_mode;
+
+	/* Invalid monitor peer to account for stats in mcopy mode */
+	struct dp_mon_peer *invalid_mon_peer;
 };
 
 struct  dp_mon_vdev {
@@ -864,27 +909,6 @@ struct  dp_mon_vdev {
 #endif
 };
 
-struct dp_mon_peer {
-#ifdef WLAN_TX_PKT_CAPTURE_ENH
-	struct dp_peer_tx_capture tx_capture;
-#endif
-#ifdef FEATURE_PERPKT_INFO
-	/* delayed ba ppdu stats handling */
-	struct cdp_delayed_tx_completion_ppdu_user delayed_ba_ppdu_stats;
-	/* delayed ba flag */
-	bool last_delayed_ba;
-	/* delayed ba ppdu id */
-	uint32_t last_delayed_ba_ppduid;
-#endif
-	/* Peer level flag to check peer based pktlog enabled or
-	 * disabled
-	 */
-	uint8_t peer_based_pktlog_filter;
-
-	uint8_t tx_cap_enabled:1, /* Peer's tx-capture is enabled */
-		rx_cap_enabled:1; /* Peer's rx-capture is enabled */
-};
-
 #if defined(QCA_TX_CAPTURE_SUPPORT) || defined(QCA_ENHANCED_STATS_SUPPORT)
 void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf);
 #else