Parcourir la source

qcacmn: Populate mon_rx_status structure fields

Update mon_rx_status fields for HE case. Also
added rs_fcs_err field to structure and populate
its value.

Change-Id: I4681543c7d6c6c7ac0d666cd93072caaee285585
Keyur Parekh il y a 7 ans
Parent
commit
71ab9ef0b7
3 fichiers modifiés avec 17 ajouts et 5 suppressions
  1. 4 1
      dp/wifi3.0/dp_rx_mon_dest.c
  2. 10 3
      hal/wifi3.0/hal_api_mon.h
  3. 3 1
      qdf/inc/qdf_nbuf.h

+ 4 - 1
dp/wifi3.0/dp_rx_mon_dest.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -334,6 +334,7 @@ qdf_nbuf_t dp_rx_mon_restitch_mpdu_from_msdus(struct dp_soc *soc,
 	unsigned char *dest;
 	struct ieee80211_frame *wh;
 	struct ieee80211_qoscntl *qos;
+	struct dp_pdev *dp_pdev = soc->pdev_list[mac_id];
 	head_frag_list = NULL;
 
 	/* The nbuf has been pulled just beyond the status and points to the
@@ -352,6 +353,8 @@ qdf_nbuf_t dp_rx_mon_restitch_mpdu_from_msdus(struct dp_soc *soc,
 	rx_desc = qdf_nbuf_data(last_msdu);
 
 	rx_status->cdp_rs_fcs_err = HAL_RX_DESC_GET_MPDU_FCS_ERR(rx_desc);
+	dp_pdev->ppdu_info.rx_status.rs_fcs_err =
+		HAL_RX_DESC_GET_MPDU_FCS_ERR(rx_desc);
 
 	/* Fill out the rx_status from the PPDU start and end fields */
 	/*   HAL_RX_GET_PPDU_STATUS(soc, mac_id, rx_status); */

+ 10 - 3
hal/wifi3.0/hal_api_mon.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -568,7 +568,8 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 				HT_SIG_INFO_0, MCS);
 		ppdu_info->rx_status.bw = HAL_RX_GET(ht_sig_info,
 				HT_SIG_INFO_0, CBW);
-
+		ppdu_info->rx_status.sgi = HAL_RX_GET(ht_sig_info,
+				HT_SIG_INFO_1, SHORT_GI);
 		break;
 	}
 
@@ -659,6 +660,8 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		ppdu_info->rx_status.vht_flag_values5 = group_id;
 		ppdu_info->rx_status.mcs = HAL_RX_GET(vht_sig_a_info,
 				VHT_SIG_A_INFO_1, MCS);
+		ppdu_info->rx_status.sgi = HAL_RX_GET(vht_sig_a_info,
+				VHT_SIG_A_INFO_1, GI_SETTING);
 #if !defined(QCA_WIFI_QCA6290_11AX)
 		value =  HAL_RX_GET(vht_sig_a_info,
 				VHT_SIG_A_INFO_0, N_STS);
@@ -706,7 +709,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		/*data2*/
 		ppdu_info->rx_status.he_data2 =
 			QDF_MON_STATUS_HE_GI_KNOWN;
-		ppdu_info->rx_status.he_data2 =
+		ppdu_info->rx_status.he_data2 |=
 			QDF_MON_STATUS_TXBF_KNOWN |
 			QDF_MON_STATUS_PE_DISAMBIGUITY_KNOWN |
 			QDF_MON_STATUS_TXOP_KNOWN |
@@ -728,6 +731,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		ppdu_info->rx_status.he_data3 |= value;
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, TRANSMIT_MCS);
+		ppdu_info->rx_status.mcs = value;
 		value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
 		ppdu_info->rx_status.he_data3 |= value;
 		value = HAL_RX_GET(he_sig_a_su_info,
@@ -757,6 +761,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, TRANSMIT_BW);
 		ppdu_info->rx_status.he_data5 = value;
+		ppdu_info->rx_status.bw = value;
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, CP_LTF_SIZE);
 		switch (value) {
@@ -777,6 +782,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 				he_ltf = HE_LTF_4_X;
 				break;
 		}
+		ppdu_info->rx_status.sgi = he_gi;
 		value = he_gi << QDF_MON_STATUS_GI_SHIFT;
 		ppdu_info->rx_status.he_data5 |= value;
 		value = he_ltf << QDF_MON_STATUS_HE_LTF_SHIFT;
@@ -797,6 +803,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		/*data6*/
 		value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0, NSTS);
 		value++;
+		ppdu_info->rx_status.nss = value;
 		ppdu_info->rx_status.he_data6 = value;
 		value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_1,
 							DOPPLER_INDICATION);

+ 3 - 1
qdf/inc/qdf_nbuf.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -160,6 +160,7 @@
  * @first_data_seq_ctrl: Sequence ctrl field of first data frame
  * @ast_index: AST table hash index
  * @tid: QoS traffic tid number
+ * @rs_fcs_err: FCS error flag
  * @he_per_user_1: HE per user info1
  * @he_per_user_2: HE per user info2
  * @he_per_user_position: HE per user position info
@@ -220,6 +221,7 @@ struct mon_rx_status {
 	int16_t first_data_seq_ctrl;
 	uint32_t ast_index;
 	uint32_t tid;
+	uint8_t  rs_fcs_err;
 	/* New HE radiotap fields */
 	uint16_t he_per_user_1;
 	uint16_t he_per_user_2;