浏览代码

qcacmn: Add support for MGMT Rx REO filter config command

WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMD is used to the configure re-order
criterion for incoming management frames.
Add target_if and tgt layer support for the same command.

Change-Id: I5daaf4d095774d751d98a27fd77dec9daaa6b16a
CRs-Fixed: 2960488
Shiva Krishna Pittala 4 年之前
父节点
当前提交
93c0702c78

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

@@ -24,6 +24,8 @@
 #include <target_if.h>
 #include <wlan_mgmt_txrx_rx_reo_public_structs.h>
 #include <target_if_mgmt_txrx_rx_reo.h>
+#include <wlan_lmac_if_api.h>
+#include <init_deinit_lmac.h>
 
 /**
  * target_if_mgmt_rx_reo_fw_consumed_event_handler() - WMI event handler to
@@ -221,6 +223,37 @@ target_if_mgmt_rx_reo_read_snapshot(
 	return status;
 }
 
+/**
+ * target_if_mgmt_rx_reo_filter_config() - Configure MGMT Rx REO filter
+ * @pdev: Pointer to pdev objmgr
+ * @filter: Pointer to MGMT Rx REO filter
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+static QDF_STATUS
+target_if_mgmt_rx_reo_filter_config(
+	struct wlan_objmgr_pdev *pdev,
+	struct mgmt_rx_reo_filter *filter)
+{
+	QDF_STATUS status;
+	struct wmi_unified *wmi_handle;
+	uint8_t pdev_id;
+
+	wmi_handle = lmac_get_pdev_wmi_handle(pdev);
+	if (!wmi_handle) {
+		mgmt_rx_reo_err("Invalid WMI handle");
+		return QDF_STATUS_E_INVAL;
+	}
+	pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
+
+	status = wmi_unified_mgmt_rx_reo_filter_config_cmd(wmi_handle, pdev_id,
+							   filter);
+	if (QDF_IS_STATUS_ERROR(status))
+		mgmt_rx_reo_err("Unable to send MGMT Rx REO Filter config cmd");
+
+	return status;
+}
+
 QDF_STATUS
 target_if_mgmt_rx_reo_extract_reo_params(
 	wmi_unified_t wmi_handle, void *evt_buf,
@@ -248,6 +281,8 @@ target_if_mgmt_rx_reo_tx_ops_register(
 	mgmt_rx_reo_tx_ops = &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops;
 	mgmt_rx_reo_tx_ops->read_mgmt_rx_reo_snapshot =
 				target_if_mgmt_rx_reo_read_snapshot;
+	mgmt_rx_reo_tx_ops->mgmt_rx_reo_filter_config =
+					target_if_mgmt_rx_reo_filter_config;
 
 	return QDF_STATUS_SUCCESS;
 }

+ 0 - 16
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h

@@ -61,22 +61,6 @@ struct mgmt_rx_reo_list_entry {
 	uint32_t insertion_timestamp;
 };
 
-/*
- * struct mgmt_rx_reo_pdev_info - Pdev information required by the Management
- * Rx REO module
- * @host_or_fw_consumed_snapshot: Snapshot of latest frame consumed by Host/FW
- * @mac_hw_snapshot: Pointer to the snapshot of latest frame seen at the MAC HW
- * @fw_consumed_snapshot: Pointer to the snapshot of latest frame consumed
- * by the FW
- * @fw_forwarded_snapshot: Pointer to the snapshot of latest frame forwarded
- * to the Host by FW
- */
-struct mgmt_rx_reo_pdev_info {
-	struct mgmt_rx_reo_snapshot_params host_or_fw_consumed_snapshot;
-	struct mgmt_rx_reo_snapshot *mac_hw_snapshot;
-	struct mgmt_rx_reo_snapshot *fw_consumed_snapshot;
-	struct mgmt_rx_reo_snapshot *fw_forwarded_snapshot;
-};
 /**
  * struct mgmt_rx_reo_context - This structure holds the info required for
  * management rx-reordering. Reordering is done across all the psocs.

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

@@ -88,5 +88,24 @@ struct mgmt_rx_reo_filter {
 	uint32_t low;
 	uint32_t high;
 };
+
+/*
+ * struct mgmt_rx_reo_pdev_info - Pdev information required by the Management
+ * Rx REO module
+ * @host_or_fw_consumed_snapshot: Snapshot of latest frame consumed by Host/FW
+ * @mac_hw_snapshot: Pointer to the snapshot of latest frame seen at the MAC HW
+ * @fw_consumed_snapshot: Pointer to the snapshot of latest frame consumed
+ * by the FW
+ * @fw_forwarded_snapshot: Pointer to the snapshot of latest frame forwarded
+ * to the Host by FW
+ * @filter: MGMT Rx REO filter
+ */
+struct mgmt_rx_reo_pdev_info {
+	struct mgmt_rx_reo_snapshot_params host_or_fw_consumed_snapshot;
+	struct mgmt_rx_reo_snapshot *mac_hw_snapshot;
+	struct mgmt_rx_reo_snapshot *fw_consumed_snapshot;
+	struct mgmt_rx_reo_snapshot *fw_forwarded_snapshot;
+	struct mgmt_rx_reo_filter filter;
+};
 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
 #endif /* _WLAN_MGMT_TXRX_RX_REO_PUBLIC_STRUCTS_H */

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

@@ -47,7 +47,7 @@ tgt_mgmt_rx_reo_read_snapshot(struct wlan_objmgr_pdev *pdev,
 /**
  * tgt_mgmt_rx_reo_fw_consumed_event_handler() - MGMT Rx REO FW consumed
  * event handler
- * @psoc: Pointer to psoc object
+ * @psoc: Pointer to psoc objmgr
  * @params: Pointer to MGMT Rx REO parameters
  *
  * Return: QDF_STATUS of operation
@@ -55,5 +55,15 @@ tgt_mgmt_rx_reo_read_snapshot(struct wlan_objmgr_pdev *pdev,
 QDF_STATUS
 tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_psoc *psoc,
 					  struct mgmt_rx_reo_params *params);
+
+/**
+ * tgt_mgmt_rx_reo_filter_config() - Configure MGMT Rx REO filter
+ * @pdev: Pointer to pdev object
+ * @filter: Pointer to MGMT Rx REO filter
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+QDF_STATUS tgt_mgmt_rx_reo_filter_config(struct wlan_objmgr_pdev *pdev,
+					 struct mgmt_rx_reo_filter *filter);
 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
 #endif /* _WLAN_MGMT_TXRX_RX_REO_TGT_API_H */

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

@@ -84,3 +84,22 @@ tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_psoc *psoc,
 {
 	return QDF_STATUS_SUCCESS;
 }
+
+QDF_STATUS tgt_mgmt_rx_reo_filter_config(struct wlan_objmgr_pdev *pdev,
+					 struct mgmt_rx_reo_filter *filter)
+{
+	struct wlan_lmac_if_mgmt_rx_reo_tx_ops *mgmt_rx_reo_txops;
+
+	mgmt_rx_reo_txops = wlan_pdev_get_mgmt_rx_reo_txops(pdev);
+	if (!mgmt_rx_reo_txops) {
+		mgmt_rx_reo_err("MGMT Rx REO txops is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!mgmt_rx_reo_txops->mgmt_rx_reo_filter_config) {
+		mgmt_rx_reo_err("mgmt_rx_reo_filter_config is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	return mgmt_rx_reo_txops->mgmt_rx_reo_filter_config(pdev, filter);
+}

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

@@ -217,12 +217,16 @@ struct wlan_target_if_dcs_rx_ops {
  * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
  * pointers for mgmt rx reo
  * @read_mgmt_rx_reo_snapshot: Read rx-reorder snapshots
+ * @mgmt_rx_reo_filter_config:  Configure MGMT Rx REO filter
  */
 struct wlan_lmac_if_mgmt_rx_reo_tx_ops {
 	QDF_STATUS (*read_mgmt_rx_reo_snapshot)
 			(struct mgmt_rx_reo_snapshot *address,
 			 enum mgmt_rx_reo_snapshot_id id,
 			 struct mgmt_rx_reo_snapshot_params *value);
+	QDF_STATUS (*mgmt_rx_reo_filter_config)(
+					struct wlan_objmgr_pdev *pdev,
+					struct mgmt_rx_reo_filter *filter);
 };
 
 /**