Browse Source

qcacmn: Add hal_rx_desc_is_first_msdu API

Implement hal_rx_desc_is_first_msdu API
based on the chipset as the macro to
retrieve first_msdu bit value is chipset
dependent.

Change-Id: I8e8a3aceb225b591b96e6f8453ffbebf1f78e529
CRs-Fixed: 2522133
Venkata Sharath Chandra Manchala 5 years ago
parent
commit
43d563277d

+ 1 - 1
dp/wifi3.0/dp_rx.c

@@ -731,7 +731,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
 
 	rx_pkt_hdr = hal_rx_pkt_hdr_get(rx_tlv_hdr);
 
-	if (!HAL_IS_DECAP_FORMAT_RAW(rx_tlv_hdr)) {
+	if (!HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, rx_tlv_hdr)) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
 			  "Drop decapped frames");
 		goto free;

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

@@ -415,7 +415,8 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 					buf_info.paddr;
 			}
 
-			if (hal_rx_desc_is_first_msdu(rx_desc_tlv))
+			if (hal_rx_desc_is_first_msdu(soc->hal_soc,
+						      rx_desc_tlv))
 				hal_rx_mon_hw_desc_get_mpdu_status(soc->hal_soc,
 					rx_desc_tlv,
 					&(dp_pdev->ppdu_info.rx_status));

+ 1 - 0
hal/wifi3.0/hal_internal.h

@@ -384,6 +384,7 @@ struct hal_hw_txrx_ops {
 	uint8_t (*hal_rx_msdu_end_da_is_mcbc_get)(uint8_t *buf);
 	uint8_t (*hal_rx_msdu_end_sa_is_valid_get)(uint8_t *buf);
 	uint16_t (*hal_rx_msdu_end_sa_idx_get)(uint8_t *buf);
+	uint32_t (*hal_rx_desc_is_first_msdu)(void *hw_desc_addr);
 };
 
 /**

+ 17 - 7
hal/wifi3.0/hal_rx.h

@@ -3389,13 +3389,21 @@ void hal_reo_status_get_header(uint32_t *d, int b,
 	hal_soc->ops->hal_reo_status_get_header(d, b, h);
 }
 
+/**
+ * hal_rx_desc_is_first_msdu() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
 static inline
-uint32_t hal_rx_desc_is_first_msdu(void *hw_desc_addr)
+uint32_t hal_rx_desc_is_first_msdu(hal_soc_handle_t hal_soc_hdl,
+				   void *hw_desc_addr)
 {
-	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
-	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
 
-	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+	return hal_soc->ops->hal_rx_desc_is_first_msdu(hw_desc_addr);
 }
 
 static inline
@@ -3433,11 +3441,12 @@ HAL_RX_DESC_GET_80211_HDR(void *hw_desc_addr) {
 
 #ifdef NO_RX_PKT_HDR_TLV
 static inline
-bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
+bool HAL_IS_DECAP_FORMAT_RAW(hal_soc_handle_t hal_soc_hdl,
+			     uint8_t *rx_tlv_hdr)
 {
 	uint8_t decap_format;
 
-	if (hal_rx_desc_is_first_msdu(rx_tlv_hdr)) {
+	if (hal_rx_desc_is_first_msdu(hal_soc_hdl, rx_tlv_hdr)) {
 		decap_format = HAL_RX_DESC_GET_DECAP_FORMAT(rx_tlv_hdr);
 		if (decap_format == HAL_HW_RX_DECAP_FORMAT_RAW)
 			return true;
@@ -3447,7 +3456,8 @@ bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
 }
 #else
 static inline
-bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
+bool HAL_IS_DECAP_FORMAT_RAW(hal_soc_handle_t hal_soc_hdl,
+			     uint8_t *rx_tlv_hdr)
 {
 	return true;
 }

+ 17 - 0
hal/wifi3.0/qca6290/hal_6290.c

@@ -181,6 +181,22 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6290(uint8_t *buf)
 	return sa_idx;
 }
 
+/**
+ * hal_rx_desc_is_first_msdu_6290() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_6290(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+}
+
 struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
 	/* init and setup */
 	hal_srng_dst_hw_init_generic,
@@ -226,6 +242,7 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
 	hal_rx_msdu_end_da_is_mcbc_get_6290,
 	hal_rx_msdu_end_sa_is_valid_get_6290,
 	hal_rx_msdu_end_sa_idx_get_6290,
+	hal_rx_desc_is_first_msdu_6290,
 };
 
 struct hal_hw_srng_config hw_srng_table_6290[] = {

+ 18 - 0
hal/wifi3.0/qca6390/hal_6390.c

@@ -180,6 +180,23 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6390(uint8_t *buf)
 
 	return sa_idx;
 }
+
+/**
+ * hal_rx_desc_is_first_msdu_6390() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_6390(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+}
+
 struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
 	/* init and setup */
 	hal_srng_dst_hw_init_generic,
@@ -225,6 +242,7 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
 	hal_rx_msdu_end_da_is_mcbc_get_6390,
 	hal_rx_msdu_end_sa_is_valid_get_6390,
 	hal_rx_msdu_end_sa_idx_get_6390,
+	hal_rx_desc_is_first_msdu_6390,
 };
 
 struct hal_hw_srng_config hw_srng_table_6390[] = {

+ 17 - 0
hal/wifi3.0/qca6490/hal_6490.c

@@ -87,9 +87,26 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6490(uint8_t *buf)
 	return sa_idx;
 }
 
+/**
+ * hal_rx_desc_is_first_msdu_6490() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_6490(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_10, FIRST_MSDU);
+}
+
 struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = {
 	/* rx */
 	hal_rx_get_rx_fragment_number_6490,
 	hal_rx_msdu_end_da_is_mcbc_get_6490,
 	hal_rx_msdu_end_sa_is_valid_get_6490,
+	hal_rx_desc_is_first_msdu_6490,
 };

+ 16 - 0
hal/wifi3.0/qca8074v1/hal_8074v1.c

@@ -176,6 +176,21 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_8074v1(uint8_t *buf)
 	return sa_idx;
 }
 
+/**
+ * hal_rx_desc_is_first_msdu_8074v1() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_8074v1(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+}
 struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
 
 	/* init and setup */
@@ -222,6 +237,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
 	hal_rx_msdu_end_da_is_mcbc_get_8074v1,
 	hal_rx_msdu_end_sa_is_valid_get_8074v1,
 	hal_rx_msdu_end_sa_idx_get_8074v1,
+	hal_rx_desc_is_first_msdu_8074v1,
 };
 
 struct hal_hw_srng_config hw_srng_table_8074[] = {

+ 17 - 0
hal/wifi3.0/qca8074v2/hal_8074v2.c

@@ -176,6 +176,22 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_8074v2(uint8_t *buf)
 	return sa_idx;
 }
 
+/**
+ * hal_rx_desc_is_first_msdu_8074v2() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_8074v2(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+}
+
 struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
 
 	/* init and setup */
@@ -222,6 +238,7 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
 	hal_rx_msdu_end_da_is_mcbc_get_8074v2,
 	hal_rx_msdu_end_sa_is_valid_get_8074v2,
 	hal_rx_msdu_end_sa_idx_get_8074v2,
+	hal_rx_desc_is_first_msdu_8074v2,
 };
 
 struct hal_hw_srng_config hw_srng_table_8074v2[] = {

+ 17 - 0
hal/wifi3.0/qcn9000/hal_9000.c

@@ -185,6 +185,22 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_9000(uint8_t *buf)
 	return sa_idx;
 }
 
+/**
+ * hal_rx_desc_is_first_msdu_9000() - Check if first msdu
+ *
+ * @hal_soc_hdl: hal_soc handle
+ * @hw_desc_addr: hardware descriptor address
+ *
+ * Return: 0 - success/ non-zero failure
+ */
+static uint32_t hal_rx_desc_is_first_msdu_9000(void *hw_desc_addr)
+{
+	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
+	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
+
+	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
+}
+
 struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
 
 	/* init and setup */
@@ -231,6 +247,7 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
 	hal_rx_msdu_end_da_is_mcbc_get_9000,
 	hal_rx_msdu_end_sa_is_valid_get_9000,
 	hal_rx_msdu_end_sa_idx_get_9000,
+	hal_rx_desc_is_first_msdu_9000,
 };
 
 struct hal_hw_srng_config hw_srng_table_9000[] = {