Преглед на файлове

qcacmn: Fix tlv processing for Big endian mode

Fix tlv processing code for monitor mode in Big endian mode.
Changed all the 64bit tlv extraction apis and used 32 bit extraction apis.
This is needed in big endian mode since HW supports word swap option and
TLV has to be intepretted using 32bit extraction APIs.

TLV tag, userid and TLV len falls on the first 32 bit and hence using
both 32bit or 64 bit extraction APIs give same result.

Change-Id: I9b9ff78c79f21888964d405016c58c3b5988b254
CRs-Fixed: 3551002
Nandha Kishore Easwaran преди 2 години
родител
ревизия
72a6ff4b6e
променени са 5 файла, в които са добавени 26 реда и са изтрити 53 реда
  1. 15 14
      hal/wifi3.0/be/hal_be_api_mon.h
  2. 4 4
      hal/wifi3.0/be/hal_be_generic_api.h
  3. 3 18
      hal/wifi3.0/hal_api_mon.h
  4. 1 14
      hal/wifi3.0/hal_rx_hw_defines.h
  5. 3 3
      hal/wifi3.0/qcn9224/hal_9224.h

+ 15 - 14
hal/wifi3.0/be/hal_be_api_mon.h

@@ -2360,8 +2360,9 @@ hal_rx_status_get_mon_buf_addr(uint8_t *rx_tlv,
 {
 	struct mon_buffer_addr *addr = (struct mon_buffer_addr *)rx_tlv;
 
-	ppdu_info->packet_info.sw_cookie = (((uint64_t)qdf_le32_to_cpu(addr->buffer_virt_addr_63_32) << 32) |
-					    qdf_le32_to_cpu(addr->buffer_virt_addr_31_0));
+	ppdu_info->packet_info.sw_cookie =
+			(((uint64_t)addr->buffer_virt_addr_63_32 << 32) |
+			(addr->buffer_virt_addr_31_0));
 	/* HW DMA length is '-1' of actual DMA length*/
 	ppdu_info->packet_info.dma_length = addr->dma_length + 1;
 	ppdu_info->packet_info.msdu_continuation = addr->msdu_continuation;
@@ -2496,9 +2497,9 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
 	struct hal_rx_ppdu_info *ppdu_info =
 			(struct hal_rx_ppdu_info *)ppduinfo;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(rx_tlv_hdr);
-	user_id = HAL_RX_GET_USER_TLV64_USERID(rx_tlv_hdr);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
+	user_id = HAL_RX_GET_USER_TLV32_USERID(rx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
 
 	rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV_HDR_SIZE;
 
@@ -3686,9 +3687,9 @@ hal_rx_status_aggr_tlv(struct hal_soc *hal_soc, void *rx_tlv_hdr,
 	uint32_t tlv_tag, user_id, tlv_len;
 	void *rx_tlv;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(rx_tlv_hdr);
-	user_id = HAL_RX_GET_USER_TLV64_USERID(rx_tlv_hdr);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
+	user_id = HAL_RX_GET_USER_TLV32_USERID(rx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
 
 	rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV_HDR_SIZE;
 
@@ -3712,9 +3713,9 @@ hal_rx_status_start_new_aggr_tlv(struct hal_soc *hal_soc, void *rx_tlv_hdr,
 {
 	uint32_t tlv_tag, user_id, tlv_len;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(rx_tlv_hdr);
-	user_id = HAL_RX_GET_USER_TLV64_USERID(rx_tlv_hdr);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
+	user_id = HAL_RX_GET_USER_TLV32_USERID(rx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
 
 	ppdu_info->tlv_aggr.in_progress = 1;
 	ppdu_info->tlv_aggr.tlv_tag = tlv_tag;
@@ -3733,9 +3734,9 @@ hal_rx_status_get_tlv_info_wrapper_be(void *rx_tlv_hdr, void *ppduinfo,
 	struct hal_rx_ppdu_info *ppdu_info =
 			(struct hal_rx_ppdu_info *)ppduinfo;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(rx_tlv_hdr);
-	user_id = HAL_RX_GET_USER_TLV64_USERID(rx_tlv_hdr);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
+	user_id = HAL_RX_GET_USER_TLV32_USERID(rx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
 
 	/*
 	 * Handle the case where aggregation is in progress

+ 4 - 4
hal/wifi3.0/be/hal_be_generic_api.h

@@ -350,7 +350,7 @@ hal_txmon_is_mon_buf_addr_tlv_generic_be(void *tx_tlv_hdr)
 {
 	uint32_t tlv_tag;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(tx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(tx_tlv_hdr);
 
 	if (WIFIMON_BUFFER_ADDR_E == tlv_tag)
 		return true;
@@ -1559,9 +1559,9 @@ hal_txmon_status_parse_tlv_generic_be(void *data_ppdu_info,
 	uint32_t status = HAL_MON_TX_STATUS_PPDU_NOT_DONE;
 	void *tx_tlv;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(tx_tlv_hdr);
-	tlv_user_id = HAL_RX_GET_USER_TLV64_USERID(tx_tlv_hdr);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(tx_tlv_hdr);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(tx_tlv_hdr);
+	tlv_user_id = HAL_RX_GET_USER_TLV32_USERID(tx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(tx_tlv_hdr);
 
 	tx_tlv = (uint8_t *)tx_tlv_hdr + HAL_RX_TLV64_HDR_SIZE;
 

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

@@ -38,17 +38,17 @@
 #define HAL_RX_TLV32_HDR_SIZE			4
 
 #define HAL_RX_GET_USER_TLV32_TYPE(rx_status_tlv_ptr) \
-		((qdf_le32_to_cpu(*((uint32_t *)(rx_status_tlv_ptr))) & \
+		((*((uint32_t *)(rx_status_tlv_ptr)) & \
 		HAL_RX_USER_TLV32_TYPE_MASK) >> \
 		HAL_RX_USER_TLV32_TYPE_LSB)
 
 #define HAL_RX_GET_USER_TLV32_LEN(rx_status_tlv_ptr) \
-		((qdf_le32_to_cpu(*((uint32_t *)(rx_status_tlv_ptr))) & \
+		((*((uint32_t *)(rx_status_tlv_ptr)) & \
 		HAL_RX_USER_TLV32_LEN_MASK) >> \
 		HAL_RX_USER_TLV32_LEN_LSB)
 
 #define HAL_RX_GET_USER_TLV32_USERID(rx_status_tlv_ptr) \
-		((qdf_le32_to_cpu(*((uint32_t *)(rx_status_tlv_ptr))) & \
+		((*((uint32_t *)(rx_status_tlv_ptr)) & \
 		HAL_RX_USER_TLV32_USERID_MASK) >> \
 		HAL_RX_USER_TLV32_USERID_LSB)
 
@@ -60,21 +60,6 @@
 #define HAL_RX_TLV_HDR_SIZE HAL_RX_TLV64_HDR_SIZE
 #endif
 
-#define HAL_RX_GET_USER_TLV64_TYPE(rx_status_tlv_ptr) \
-		((qdf_le64_to_cpu(*((uint64_t *)(rx_status_tlv_ptr))) & \
-		HAL_RX_USER_TLV64_TYPE_MASK) >> \
-		HAL_RX_USER_TLV64_TYPE_LSB)
-
-#define HAL_RX_GET_USER_TLV64_LEN(rx_status_tlv_ptr) \
-		((qdf_le64_to_cpu(*((uint64_t *)(rx_status_tlv_ptr))) & \
-		HAL_RX_USER_TLV64_LEN_MASK) >> \
-		HAL_RX_USER_TLV64_LEN_LSB)
-
-#define HAL_RX_GET_USER_TLV64_USERID(rx_status_tlv_ptr) \
-		((qdf_le64_to_cpu(*((uint64_t *)(rx_status_tlv_ptr))) & \
-		HAL_RX_USER_TLV64_USERID_MASK) >> \
-		HAL_RX_USER_TLV64_USERID_LSB)
-
 #define HAL_TLV_STATUS_PPDU_NOT_DONE 0
 #define HAL_TLV_STATUS_PPDU_DONE 1
 #define HAL_TLV_STATUS_BUF_DONE 2

+ 1 - 14
hal/wifi3.0/hal_rx_hw_defines.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021,2023 Qualcomm Innovation Center, Inc. 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
@@ -33,19 +33,6 @@
 #define HAL_RX_USER_TLV32_USERID_LSB		26
 #define HAL_RX_USER_TLV32_USERID_MASK		0xFC000000
 
-/* Unified 64-bit desc fields */
-#define HAL_RX_USER_TLV64_TYPE_OFFSET		0x0000000000000000
-#define HAL_RX_USER_TLV64_TYPE_LSB		1
-#define HAL_RX_USER_TLV64_TYPE_MASK		0x00000000000003FE
-
-#define HAL_RX_USER_TLV64_LEN_OFFSET		0x0000000000000000
-#define HAL_RX_USER_TLV64_LEN_LSB		10
-#define HAL_RX_USER_TLV64_LEN_MASK		0x00000000003FFC00
-
-#define HAL_RX_USER_TLV64_USERID_OFFSET		0x0000000000000000
-#define HAL_RX_USER_TLV64_USERID_LSB		26
-#define HAL_RX_USER_TLV64_USERID_MASK		0x00000000FC000000
-
 /* rx mpdu desc info */
 #define HAL_RX_MPDU_DESC_INFO_MSDU_COUNT_OFFSET		0x0
 #define HAL_RX_MPDU_DESC_INFO_MSDU_COUNT_LSB		0

+ 3 - 3
hal/wifi3.0/qcn9224/hal_9224.h

@@ -328,14 +328,14 @@ void hal_rx_proc_phyrx_other_receive_info_tlv_9224(void *rx_tlv_hdr,
 	void *rx_tlv;
 	struct hal_rx_ppdu_info *ppdu_info  = ppdu_info_hdl;
 
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv_hdr);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
 	rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV64_HDR_SIZE;
 
 	if (!tlv_len)
 		return;
 
-	tlv_tag = HAL_RX_GET_USER_TLV64_TYPE(rx_tlv);
-	tlv_len = HAL_RX_GET_USER_TLV64_LEN(rx_tlv);
+	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv);
+	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv);
 
 	if (!tlv_len)
 		return;