qcacmn: Added rx errors and dropped stats

Rx dma error and reo error are accumulated at pdev level.
Rx error consists of:
 - desc_alloc_failure [No free desc available]
 - csum error [IP/TCP_UDP]
 - mic_err
 - rx_dma_error
 - reo_error
Rx dropped consists of:
 - msdu_not_done
 - mec
 - mesh_filter
 - wifi_parse
 - non_rx_drop
 - non_radiotap_update_err

Change-Id: I4166a32ce94630e8a3ccad7a2551eedf9493e292
CRs-Fixed: 2499563
diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h
index aea884c..90c17af 100644
--- a/dp/inc/cdp_txrx_cmn_struct.h
+++ b/dp/inc/cdp_txrx_cmn_struct.h
@@ -1398,6 +1398,7 @@
  * @rx_packets: Rx total packets transmitted
  * @rx_bytes  : Rx total bytes transmitted
  * @rx_errors : Rx erros
+ * @rx_dropped: Rx dropped stats
  */
 struct cdp_dev_stats {
 	uint32_t tx_packets;
@@ -1407,6 +1408,7 @@
 	uint32_t rx_packets;
 	uint32_t rx_bytes;
 	uint32_t rx_errors;
+	uint32_t rx_dropped;
 };
 
 /**
diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h
index b534948..e6eaca6 100644
--- a/dp/inc/cdp_txrx_stats_struct.h
+++ b/dp/inc/cdp_txrx_stats_struct.h
@@ -1282,6 +1282,8 @@
 		uint32_t desc_alloc_fail;
 		uint32_t ip_csum_err;
 		uint32_t tcp_udp_csum_err;
+		uint32_t rxdma_error;
+		uint32_t reo_error;
 	} err;
 
 	uint32_t buf_freelist;
diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c
index 867fffa..76777c9 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -6845,9 +6845,16 @@
 	stats->rx_errors = pdev->stats.err.desc_alloc_fail +
 		pdev->stats.err.ip_csum_err +
 		pdev->stats.err.tcp_udp_csum_err +
-		pdev->stats.rx.err. mic_err +
-		pdev->stats.rx.err. decrypt_err +
-		pdev->stats.rx.err. fcserr;
+		pdev->stats.rx.err.mic_err +
+		pdev->stats.rx.err.decrypt_err +
+		pdev->stats.err.rxdma_error +
+		pdev->stats.err.reo_error;
+	stats->rx_dropped = pdev->stats.dropped.msdu_not_done +
+		pdev->stats.dropped.mec +
+		pdev->stats.dropped.mesh_filter +
+		pdev->stats.dropped.wifi_parse +
+		pdev->stats.dropped.mon_rx_drop +
+		pdev->stats.dropped.mon_radiotap_update_err;
 }
 
 /**
diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c
index 2de3c63..c38d732 100644
--- a/dp/wifi3.0/dp_rx_err.c
+++ b/dp/wifi3.0/dp_rx_err.c
@@ -1223,6 +1223,10 @@
 				rx.err.
 				reo_error[HAL_REO_ERR_PN_CHECK_FAILED],
 				1);
+			/* increment @pdev level */
+			dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+			if (dp_pdev)
+				DP_STATS_INC(dp_pdev, err.reo_error, 1);
 			count = dp_rx_pn_error_handle(soc,
 						      ring_desc,
 						      &mpdu_desc_info, &mac_id,
@@ -1238,6 +1242,10 @@
 				rx.err.
 				reo_error[HAL_REO_ERR_REGULAR_FRAME_2K_JUMP],
 				1);
+			/* increment @pdev level */
+			dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+			if (dp_pdev)
+				DP_STATS_INC(dp_pdev, err.reo_error, 1);
 
 			count = dp_rx_2k_jump_handle(soc,
 						     ring_desc, &mpdu_desc_info,
@@ -1442,6 +1450,12 @@
 				DP_STATS_INC(soc,
 					rx.err.reo_error
 					[wbm_err_info.reo_err_code], 1);
+				/* increment @pdev level */
+				pool_id = wbm_err_info.pool_id;
+				dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+				if (dp_pdev)
+					DP_STATS_INC(dp_pdev, err.reo_error,
+						     1);
 
 				switch (wbm_err_info.reo_err_code) {
 				/*
@@ -1489,6 +1503,12 @@
 				DP_STATS_INC(soc,
 					rx.err.rxdma_error
 					[wbm_err_info.rxdma_err_code], 1);
+				/* increment @pdev level */
+				pool_id = wbm_err_info.pool_id;
+				dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+				if (dp_pdev)
+					DP_STATS_INC(dp_pdev,
+						     err.rxdma_error, 1);
 
 				switch (wbm_err_info.rxdma_err_code) {
 				case HAL_RXDMA_ERR_UNENCRYPTED:
@@ -1708,6 +1728,8 @@
 	} while (buf_info.paddr);
 
 	DP_STATS_INC(soc, rx.err.rxdma_error[rxdma_error_code], 1);
+	if (pdev)
+		DP_STATS_INC(pdev, err.rxdma_error, 1);
 
 	if (rxdma_error_code == HAL_RXDMA_ERR_DECRYPT) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,