|
@@ -26,33 +26,12 @@
|
|
|
#include "wlan_pmo_main.h"
|
|
|
#include "wlan_pmo_obj_mgmt_public_struct.h"
|
|
|
|
|
|
-static QDF_STATUS pmo_core_conf_hw_filter(struct wlan_objmgr_vdev *vdev,
|
|
|
- enum pmo_hw_filter_mode mode)
|
|
|
-{
|
|
|
- QDF_STATUS status;
|
|
|
- struct pmo_hw_filter_params req = { .mode = mode, };
|
|
|
-
|
|
|
- pmo_enter();
|
|
|
-
|
|
|
- if (!pmo_core_is_vdev_connected(vdev)) {
|
|
|
- status = QDF_STATUS_E_NOSUPPORT;
|
|
|
- goto exit_with_status;
|
|
|
- }
|
|
|
-
|
|
|
- req.vdev_id = pmo_vdev_get_id(vdev);
|
|
|
- status = pmo_tgt_conf_hw_filter(pmo_vdev_get_psoc(vdev), &req);
|
|
|
-
|
|
|
-exit_with_status:
|
|
|
- pmo_exit();
|
|
|
-
|
|
|
- return status;
|
|
|
-}
|
|
|
-
|
|
|
QDF_STATUS pmo_core_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
|
QDF_STATUS status;
|
|
|
struct pmo_psoc_priv_obj *psoc_priv;
|
|
|
- enum pmo_hw_filter_mode mode;
|
|
|
+ enum pmo_hw_filter_mode mode_bitmap;
|
|
|
+ struct pmo_hw_filter_params req = {0};
|
|
|
|
|
|
pmo_enter();
|
|
|
|
|
@@ -60,12 +39,20 @@ QDF_STATUS pmo_core_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
|
|
|
if (QDF_IS_STATUS_ERROR(status))
|
|
|
goto exit_with_status;
|
|
|
|
|
|
+ if (!pmo_core_is_vdev_connected(vdev)) {
|
|
|
+ status = QDF_STATUS_E_NOSUPPORT;
|
|
|
+ goto exit_with_status;
|
|
|
+ }
|
|
|
+
|
|
|
psoc_priv = pmo_vdev_get_psoc_priv(vdev);
|
|
|
qdf_spin_lock_bh(&psoc_priv->lock);
|
|
|
- mode = psoc_priv->psoc_cfg.hw_filter_mode;
|
|
|
+ mode_bitmap = psoc_priv->psoc_cfg.hw_filter_mode_bitmap;
|
|
|
qdf_spin_unlock_bh(&psoc_priv->lock);
|
|
|
|
|
|
- status = pmo_core_conf_hw_filter(vdev, mode);
|
|
|
+ req.vdev_id = pmo_vdev_get_id(vdev);
|
|
|
+ req.mode_bitmap = psoc_priv->psoc_cfg.hw_filter_mode_bitmap;
|
|
|
+ req.enable = true;
|
|
|
+ status = pmo_tgt_conf_hw_filter(pmo_vdev_get_psoc(vdev), &req);
|
|
|
|
|
|
pmo_vdev_put_ref(vdev);
|
|
|
|
|
@@ -78,6 +65,9 @@ exit_with_status:
|
|
|
QDF_STATUS pmo_core_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
|
QDF_STATUS status;
|
|
|
+ struct pmo_psoc_priv_obj *psoc_priv;
|
|
|
+ enum pmo_hw_filter_mode mode_bitmap;
|
|
|
+ struct pmo_hw_filter_params req = {0};
|
|
|
|
|
|
pmo_enter();
|
|
|
|
|
@@ -85,7 +75,20 @@ QDF_STATUS pmo_core_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
|
|
|
if (QDF_IS_STATUS_ERROR(status))
|
|
|
goto exit_with_status;
|
|
|
|
|
|
- status = pmo_core_conf_hw_filter(vdev, PMO_HW_FILTER_DISABLED);
|
|
|
+ if (!pmo_core_is_vdev_connected(vdev)) {
|
|
|
+ status = QDF_STATUS_E_NOSUPPORT;
|
|
|
+ goto exit_with_status;
|
|
|
+ }
|
|
|
+
|
|
|
+ psoc_priv = pmo_vdev_get_psoc_priv(vdev);
|
|
|
+ qdf_spin_lock_bh(&psoc_priv->lock);
|
|
|
+ mode_bitmap = psoc_priv->psoc_cfg.hw_filter_mode_bitmap;
|
|
|
+ qdf_spin_unlock_bh(&psoc_priv->lock);
|
|
|
+
|
|
|
+ req.vdev_id = pmo_vdev_get_id(vdev);
|
|
|
+ req.mode_bitmap = mode_bitmap;
|
|
|
+ req.enable = false;
|
|
|
+ status = pmo_tgt_conf_hw_filter(pmo_vdev_get_psoc(vdev), &req);
|
|
|
|
|
|
pmo_vdev_put_ref(vdev);
|
|
|
|