Bläddra i källkod

qcacmn: Add APIs to extract MGMT Rx REO params tlv

When MGMT Rx REO feature is enabled, FW will be sending MGMT Rx REO
parameters TLV as part of WMI_MGMT_RX_EVENTID for the frames that require
reordering. Add APIs to extract the same.

Change-Id: I57b132927cf413384d680b5778bfe6a2e2737adf
CRs-Fixed: 2960471
Shiva Krishna Pittala 4 år sedan
förälder
incheckning
361f45dd82

+ 33 - 0
target_if/mgmt_txrx/inc/target_if_mgmt_txrx_rx_reo.h

@@ -26,6 +26,8 @@
 #include <wlan_objmgr_psoc_obj.h>
 #include <wlan_mgmt_txrx_rx_reo_utils_api.h>
 #include <wlan_lmac_if_api.h>
+#include <wlan_lmac_if_def.h>
+#include <wmi_unified_param.h>
 
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 
@@ -86,6 +88,20 @@ target_if_mgmt_rx_reo_get_rx_ops(struct wlan_objmgr_psoc *psoc)
 
 	return &mgmt_rx_ops->mgmt_rx_reo_rx_ops;
 }
+
+/**
+ * target_if_mgmt_rx_reo_extract_reo_params() - Extract MGMT Rx REO params from
+ * MGMT_RX_EVENT_ID
+ * @wmi_handle: wmi handle
+ * @evt_buf: pointer to event buffer
+ * @params: Pointer to MGMT Rx event parameters
+ *
+ * Return: QDF_STATUS of operation
+ */
+QDF_STATUS
+target_if_mgmt_rx_reo_extract_reo_params(wmi_unified_t wmi_handle,
+					 void *evt_buf,
+					 struct mgmt_rx_event_params *params);
 #else
 /**
  * target_if_mgmt_rx_reo_register_event_handlers() - Register management
@@ -126,5 +142,22 @@ target_if_mgmt_rx_reo_tx_ops_register(
 {
 	return QDF_STATUS_SUCCESS;
 }
+
+/**
+ * target_if_mgmt_rx_reo_extract_reo_params() - Extract MGMT Rx REO params from
+ * MGMT_RX_EVENT_ID
+ * @wmi_handle: wmi handle
+ * @evt_buf: pointer to event buffer
+ * @hdr: Pointer to MGMT Rx event parameters
+ *
+ * Return: QDF_STATUS of operation
+ */
+static inline QDF_STATUS
+target_if_mgmt_rx_reo_extract_reo_params(wmi_unified_t wmi_handle,
+					 void *evt_buf,
+					 struct mgmt_rx_event_params *hdr)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
 #endif /* _TARGET_IF_MGMT_TXRX_RX_REO_H_ */

+ 14 - 0
target_if/mgmt_txrx/src/target_if_mgmt_txrx_rx_reo.c

@@ -221,6 +221,20 @@ target_if_mgmt_rx_reo_read_snapshot(
 	return status;
 }
 
+QDF_STATUS
+target_if_mgmt_rx_reo_extract_reo_params(
+	wmi_unified_t wmi_handle, void *evt_buf,
+	struct mgmt_rx_event_params *params)
+{
+	if (!params) {
+		mgmt_rx_reo_err("MGMT Rx event parameters is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	return wmi_extract_mgmt_rx_reo_params(wmi_handle, evt_buf,
+					      params->reo_params);
+}
+
 QDF_STATUS
 target_if_mgmt_rx_reo_tx_ops_register(
 			struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops)

+ 5 - 0
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h

@@ -29,6 +29,7 @@
 
 #include "wlan_objmgr_cmn.h"
 #include "qdf_nbuf.h"
+#include "wlan_mgmt_txrx_rx_reo_public_structs.h"
 
 #define mgmt_txrx_alert(params...) \
 	QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_TXRX, params)
@@ -773,6 +774,7 @@ enum mgmt_frame_type {
  * @pdev_id: pdev id
  * @rx_params: pointer to other rx params
  *             (win specific, will be removed in phase 4)
+ * @reo_params: Pointer to MGMT Rx REO params
  */
 struct mgmt_rx_event_params {
 	uint32_t    chan_freq;
@@ -789,6 +791,9 @@ struct mgmt_rx_event_params {
 	uint32_t    tsf_l32;
 	uint8_t     pdev_id;
 	void        *rx_params;
+#ifdef WLAN_MGMT_RX_REO_SUPPORT
+	struct mgmt_rx_reo_params *reo_params;
+#endif
 };
 
 /**

+ 13 - 2
wmi/inc/wmi_unified_api.h

@@ -116,8 +116,6 @@
 
 #include "wmi_unified_cp_stats_api.h"
 
-#include "wlan_mgmt_txrx_rx_reo_public_structs.h"
-
 typedef qdf_nbuf_t wmi_buf_t;
 #define wmi_buf_data(_buf) qdf_nbuf_data(_buf)
 
@@ -2756,6 +2754,19 @@ wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf,
 QDF_STATUS
 wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle, void *evt_buf,
 				struct mgmt_rx_reo_params *params);
+
+/**
+ * wmi_extract_mgmt_rx_reo_params() - extract MGMT Rx REO params from
+ * MGMT_RX_EVENT_ID
+ * @wmi_handle: wmi handle
+ * @evt_buf: pointer to event buffer
+ * @params: Pointer to MGMT Rx REO parameters
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+QDF_STATUS
+wmi_extract_mgmt_rx_reo_params(wmi_unified_t wmi_handle, void *evt_buf,
+			       struct mgmt_rx_reo_params *params);
 #endif
 
 /**

+ 4 - 0
wmi/inc/wmi_unified_priv.h

@@ -2642,6 +2642,10 @@ QDF_STATUS
 QDF_STATUS (*extract_mgmt_rx_fw_consumed)(wmi_unified_t wmi_handle,
 					  void *evt_buf,
 					  struct mgmt_rx_reo_params *params);
+
+QDF_STATUS (*extract_mgmt_rx_reo_params)(wmi_unified_t wmi_handle,
+					 void *evt_buf,
+					 struct mgmt_rx_reo_params *params);
 #endif
 };
 

+ 11 - 0
wmi/src/wmi_unified_api.c

@@ -1967,6 +1967,17 @@ QDF_STATUS wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle,
 
 	return QDF_STATUS_E_FAILURE;
 }
+
+QDF_STATUS
+wmi_extract_mgmt_rx_reo_params(wmi_unified_t wmi_handle, void *evt_buf,
+			       struct mgmt_rx_reo_params *params)
+{
+	if (wmi_handle->ops->extract_mgmt_rx_reo_params)
+		return wmi_handle->ops->extract_mgmt_rx_reo_params(
+				wmi_handle, evt_buf, params);
+
+	return QDF_STATUS_E_FAILURE;
+}
 #endif
 
 QDF_STATUS

+ 52 - 0
wmi/src/wmi_unified_tlv.c

@@ -10658,6 +10658,57 @@ extract_mgmt_rx_fw_consumed_tlv(wmi_unified_t wmi_handle,
 
 	return QDF_STATUS_SUCCESS;
 }
+
+/**
+ * extract_mgmt_rx_reo_params_tlv() - extract MGMT Rx REO params from
+ * MGMT_RX_EVENT_ID
+ * @wmi_handle: wmi handle
+ * @evt_buf: pointer to event buffer
+ * @params: Pointer to MGMT Rx REO parameters
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+static QDF_STATUS extract_mgmt_rx_reo_params_tlv(wmi_unified_t wmi_handle,
+	void *evt_buf, struct mgmt_rx_reo_params *reo_params)
+{
+	WMI_MGMT_RX_EVENTID_param_tlvs *param_tlvs;
+	wmi_mgmt_rx_reo_params *reo_params_tlv;
+	wmi_mgmt_rx_hdr *ev_hdr;
+
+	param_tlvs = evt_buf;
+	if (!param_tlvs) {
+		wmi_err("param_tlvs is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	ev_hdr = param_tlvs->hdr;
+	if (!ev_hdr) {
+		wmi_err("Rx event is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	reo_params_tlv = param_tlvs->reo_params;
+	if (!reo_params_tlv) {
+		wmi_err("mgmt_rx_reo_params TLV is not sent by FW");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	if (!reo_params) {
+		wmi_err("MGMT Rx REO params is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	reo_params->pdev_id = wmi_handle->ops->convert_pdev_id_target_to_host(
+							wmi_handle,
+							ev_hdr->pdev_id);
+	reo_params->valid = WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_VALID_GET(
+					reo_params_tlv->mgmt_pkt_ctr_link_info);
+	reo_params->global_timestamp = reo_params_tlv->global_timestamp;
+	reo_params->mgmt_pkt_ctr = WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_GET(
+					reo_params_tlv->mgmt_pkt_ctr_link_info);
+
+	return QDF_STATUS_SUCCESS;
+}
 #endif
 
 /**
@@ -15813,6 +15864,7 @@ struct wmi_ops tlv_ops =  {
 	.extract_halphy_cal_ev_param = extract_halphy_cal_ev_param_tlv,
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 	.extract_mgmt_rx_fw_consumed = extract_mgmt_rx_fw_consumed_tlv,
+	.extract_mgmt_rx_reo_params = extract_mgmt_rx_reo_params_tlv,
 #endif
 };