qcacmn: Read 256 fcs_ok bitmap from user ext TLV

Read extra bits of fcs okay bit map from
RX_PPDU_END_USER_STATS_EXT TLV and use the same
to send first fcs okay packet in case of M COPY

CRs-Fixed: 2499150
Change-Id: I1a25971ea789dd7fddddb312af8a18a4cccdc178
diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c
index a5dbcf3..463bd60 100644
--- a/dp/wifi3.0/dp_rx_mon_status.c
+++ b/dp/wifi3.0/dp_rx_mon_status.c
@@ -202,8 +202,10 @@
 			rx_user_status->mpdu_cnt_fcs_ok;
 		rx_stats_peruser->mpdu_cnt_fcs_err =
 			rx_user_status->mpdu_cnt_fcs_err;
-		rx_stats_peruser->mpdu_fcs_ok_bitmap =
-			rx_user_status->mpdu_fcs_ok_bitmap;
+		qdf_mem_copy(&rx_stats_peruser->mpdu_fcs_ok_bitmap,
+			     &rx_user_status->mpdu_fcs_ok_bitmap,
+			     HAL_RX_NUM_WORDS_PER_PPDU_BITMAP *
+			     sizeof(rx_user_status->mpdu_fcs_ok_bitmap[0]));
 		rx_stats_peruser->mpdu_ok_byte_count =
 			rx_user_status->mpdu_ok_byte_count;
 		rx_stats_peruser->mpdu_err_byte_count =
@@ -544,18 +546,19 @@
 {
 	uint16_t mpdu_fcs_ok;
 	qdf_nbuf_t status_nbuf = NULL;
-	unsigned long int fcs_ok_bitmap;
-
-	/* If fcs_ok_bitmap is zero, no need to procees further */
-	if (qdf_unlikely(!ppdu_info->com_info.mpdu_fcs_ok_bitmap))
-		return NULL;
+	unsigned long *fcs_ok_bitmap;
 
 	/* Obtain fcs_ok passed index from bitmap
 	 * this index is used to get fcs passed first msdu payload
 	 */
 
-	fcs_ok_bitmap = ppdu_info->com_info.mpdu_fcs_ok_bitmap;
-	mpdu_fcs_ok = qdf_find_first_bit(&fcs_ok_bitmap, HAL_RX_MAX_MPDU);
+	fcs_ok_bitmap =
+		(unsigned long *)&ppdu_info->com_info.mpdu_fcs_ok_bitmap[0];
+	mpdu_fcs_ok = qdf_find_first_bit(fcs_ok_bitmap,
+					 HAL_RX_MAX_MPDU);
+
+	if (mpdu_fcs_ok >= HAL_RX_MAX_MPDU)
+		goto end;
 
 	/* Get status buffer by indexing mpdu_fcs_ok index
 	 * containing first msdu payload with fcs passed
@@ -567,6 +570,7 @@
 	 */
 	qdf_nbuf_ref(status_nbuf);
 
+end:
 	/* Free the ppdu status buffer queue */
 	qdf_nbuf_queue_free(&pdev->rx_ppdu_buf_q);