浏览代码

qcacmn: Add rx_ops and TGT layer APIs for MGMT Rx FW consumed event handler

When MGMT frames are consumed by the FW, FW sends MGMT Rx FW consumed event
to the Host. Add rx_ops and TGT layer functions for this event handling.

Change-Id: I50a4b02063bc545d6976944cf331982dc3e853d0
CRs-Fixed: 2959082
Shiva Krishna Pittala 4 年之前
父节点
当前提交
3bde57d8de

+ 12 - 0
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h

@@ -64,5 +64,17 @@ struct mgmt_rx_reo_snapshot {
 	uint32_t mgmt_rx_reo_snapshot_low;
 	uint32_t mgmt_rx_reo_snapshot_high;
 };
+
+/*
+ * struct mgmt_rx_reo_params - MGMT Rx REO parameters
+ * @pdev_id: pdev ID for which FW consumed event is received
+ * @mgmt_pkt_ctr: MGMT packet counter of the frame that is consumed
+ * @global_timestamp: Global timestamp of the frame that is consumed
+ */
+struct mgmt_rx_reo_params {
+	uint8_t  pdev_id;
+	uint16_t mgmt_pkt_ctr;
+	uint32_t global_timestamp;
+};
 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
 #endif /* _WLAN_MGMT_TXRX_RX_REO_PUBLIC_STRUCTS_H */

+ 11 - 0
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_tgt_api.h

@@ -44,5 +44,16 @@ tgt_mgmt_rx_reo_read_snapshot(struct wlan_objmgr_pdev *pdev,
 			      struct mgmt_rx_reo_snapshot *address,
 			      enum mgmt_rx_reo_snapshot_id id,
 			      struct mgmt_rx_reo_snapshot_params *value);
+/**
+ * tgt_mgmt_rx_reo_fw_consumed_event_handler() - MGMT Rx REO FW consumed
+ * event handler
+ * @psoc: Pointer to psoc object
+ * @params: Pointer to MGMT Rx REO parameters
+ *
+ * Return: QDF_STATUS of operation
+ */
+QDF_STATUS
+tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_psoc *psoc,
+					  struct mgmt_rx_reo_params *params);
 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
 #endif /* _WLAN_MGMT_TXRX_RX_REO_TGT_API_H */

+ 7 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_rx_reo_tgt_api.c

@@ -77,3 +77,10 @@ tgt_mgmt_rx_reo_read_snapshot(struct wlan_objmgr_pdev *pdev,
 
 	return mgmt_rx_reo_txops->read_mgmt_rx_reo_snapshot(address, id, value);
 }
+
+QDF_STATUS
+tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_psoc *psoc,
+					  struct mgmt_rx_reo_params *params)
+{
+	return QDF_STATUS_SUCCESS;
+}

+ 14 - 0
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -224,6 +224,17 @@ struct wlan_lmac_if_mgmt_rx_reo_tx_ops {
 			 enum mgmt_rx_reo_snapshot_id id,
 			 struct mgmt_rx_reo_snapshot_params *value);
 };
+
+/**
+ * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
+ * pointers for mgmt rx reo module
+ * @fw_consumed_event_handler: FW consumed event handler
+ */
+struct wlan_lmac_if_mgmt_rx_reo_rx_ops {
+	QDF_STATUS (*fw_consumed_event_handler)(
+			struct wlan_objmgr_psoc *psoc,
+			struct mgmt_rx_reo_params *params);
+};
 #endif
 
 /**
@@ -1284,6 +1295,9 @@ struct wlan_lmac_if_mgmt_txrx_rx_ops {
 			uint32_t desc_id);
 	uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
 			struct wlan_objmgr_pdev *pdev);
+#ifdef WLAN_MGMT_RX_REO_SUPPORT
+	struct wlan_lmac_if_mgmt_rx_reo_rx_ops mgmt_rx_reo_rx_ops;
+#endif
 };
 
 struct wlan_lmac_if_reg_rx_ops {

+ 55 - 16
umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c

@@ -77,6 +77,8 @@
 #include "wifi_pos_api.h"
 #endif
 
+#include "wlan_mgmt_txrx_rx_reo_tgt_api.h"
+
 /* Function pointer for OL/WMA specific UMAC tx_ops
  * registration.
  */
@@ -547,6 +549,57 @@ register_dfs_chan_postnol_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
 }
 #endif
 
+#ifdef WLAN_MGMT_RX_REO_SUPPORT
+static QDF_STATUS
+wlan_lmac_if_mgmt_rx_reo_rx_ops_register(
+	struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops)
+{
+	struct wlan_lmac_if_mgmt_rx_reo_rx_ops *mgmt_rx_reo_rx_ops;
+
+	mgmt_rx_reo_rx_ops = &mgmt_txrx_rx_ops->mgmt_rx_reo_rx_ops;
+	mgmt_rx_reo_rx_ops->fw_consumed_event_handler =
+			tgt_mgmt_rx_reo_fw_consumed_event_handler;
+
+	return QDF_STATUS_SUCCESS;
+}
+#else
+static QDF_STATUS
+wlan_lmac_if_mgmt_rx_reo_rx_ops_register(
+	struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
+static QDF_STATUS
+wlan_lmac_if_mgmt_txrx_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
+{
+	struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops;
+
+	if (!rx_ops) {
+		qdf_print("lmac if rx ops pointer is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	/* mgmt txrx rx ops */
+	mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops;
+
+	mgmt_txrx_rx_ops->mgmt_tx_completion_handler =
+			tgt_mgmt_txrx_tx_completion_handler;
+	mgmt_txrx_rx_ops->mgmt_rx_frame_handler =
+			tgt_mgmt_txrx_rx_frame_handler;
+	mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id =
+			tgt_mgmt_txrx_get_nbuf_from_desc_id;
+	mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id =
+			tgt_mgmt_txrx_get_peer_from_desc_id;
+	mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id =
+			tgt_mgmt_txrx_get_vdev_id_from_desc_id;
+	mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count =
+			tgt_mgmt_txrx_get_free_desc_pool_count;
+
+	return wlan_lmac_if_mgmt_rx_reo_rx_ops_register(mgmt_txrx_rx_ops);
+}
+
 static QDF_STATUS
 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
 {
@@ -699,6 +752,7 @@ wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+
 /**
  * wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register
  * @rx_ops: Pointer to rx_ops structure to be populated
@@ -714,28 +768,13 @@ wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
 	 * respective callbacks
 	 * Ex: rx_ops->fp = function;
 	 */
-	struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops;
 
 	if (!rx_ops) {
 		qdf_print("lmac if rx ops pointer is NULL");
 		return QDF_STATUS_E_INVAL;
 	}
 
-	/* mgmt txrx rx ops */
-	mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops;
-
-	mgmt_txrx_rx_ops->mgmt_tx_completion_handler =
-			tgt_mgmt_txrx_tx_completion_handler;
-	mgmt_txrx_rx_ops->mgmt_rx_frame_handler =
-			tgt_mgmt_txrx_rx_frame_handler;
-	mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id =
-			tgt_mgmt_txrx_get_nbuf_from_desc_id;
-	mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id =
-			tgt_mgmt_txrx_get_peer_from_desc_id;
-	mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id =
-			tgt_mgmt_txrx_get_vdev_id_from_desc_id;
-	mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count =
-			tgt_mgmt_txrx_get_free_desc_pool_count;
+	wlan_lmac_if_mgmt_txrx_rx_ops_register(rx_ops);
 
 	/* scan rx ops */
 	rx_ops->scan.scan_ev_handler = tgt_scan_event_handler;