Browse Source

qcacmn: Add NDP frame supporting for monitor mode of Lithium

NDP is a preamble only PPDU, which do not have payload information
from RXDMA destination ring. The detailed TLV sequence is:
 * RSSI legcy
 * LSIG_A
 * HE_SIGA_SU
 * RSSI_HT
 * GENERATED_CBF_DETAILS
 * PKT_END

CRs-Fixed: 2296348
Change-Id: I19f253c65969b59947bd9a21cf3912b16eb21324
chenguo 6 years ago
parent
commit
4fd11a7234
1 changed files with 13 additions and 2 deletions
  1. 13 2
      hal/wifi3.0/hal_api_mon.h

+ 13 - 2
hal/wifi3.0/hal_api_mon.h

@@ -515,7 +515,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv_hdr, struct hal_rx_ppdu_info *ppdu_info,
 	uint16_t he_ltf = 0;
 	void *rx_tlv;
 	bool unhandled = false;
-
+	bool is_no_payload_ppdu = false;
 
 	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
 	user_id = HAL_RX_GET_USER_TLV32_USERID(rx_tlv_hdr);
@@ -637,7 +637,12 @@ hal_rx_status_get_tlv_info(void *rx_tlv_hdr, struct hal_rx_ppdu_info *ppdu_info,
 		break;
 
 	case WIFIRX_PPDU_END_STATUS_DONE_E:
-		return HAL_TLV_STATUS_PPDU_DONE;
+	{
+		if (is_no_payload_ppdu)
+			return HAL_TLV_STATUS_PPDU_NON_STD_DONE;
+		else
+			return HAL_TLV_STATUS_PPDU_DONE;
+	}
 
 	case WIFIDUMMY_E:
 		return HAL_TLV_STATUS_BUF_DONE;
@@ -1305,6 +1310,12 @@ hal_rx_status_get_tlv_info(void *rx_tlv_hdr, struct hal_rx_ppdu_info *ppdu_info,
 		hal_rx_proc_phyrx_other_receive_info_tlv(hal, rx_tlv_hdr,
 								ppdu_info);
 		break;
+	case WIFIPHYRX_GENERATED_CBF_DETAILS_E:
+	{
+		/* This is a NDP frame, set no payload flag to true */
+		is_no_payload_ppdu = true;
+		break;
+	}
 	case WIFIRX_HEADER_E:
 		ppdu_info->msdu_info.first_msdu_payload = rx_tlv;
 		ppdu_info->msdu_info.payload_len = tlv_len;