Selaa lähdekoodia

qcacmn: Consolidate PMO ObjMgr Abstractions

Begin moving ObjMgr abstractions to their own file, ensure API
consistency, and ensure proper usage from within PMO.

Change-Id: I013ae3b9d7be22378420913df0d2283431398af3
CRs-Fixed: 2047321
Dustin Brown 8 vuotta sitten
vanhempi
sitoutus
a17c68d656

+ 13 - 66
pmo/core/inc/wlan_pmo_main.h

@@ -30,12 +30,13 @@
 #include "wlan_objmgr_pdev_obj.h"
 #include "wlan_objmgr_vdev_obj.h"
 #include "wlan_objmgr_peer_obj.h"
+#include "wlan_pmo_objmgr.h"
 #include "qdf_status.h"
 #include "qdf_types.h"
 #include "qdf_lock.h"
 #include "wlan_pmo_obj_mgmt_public_struct.h"
 
-#define pmo_log(level, args...) QDF_TRACE(QDF_MODULE_ID_HDD, level, ## args)
+#define pmo_log(level, args...) QDF_TRACE(QDF_MODULE_ID_PMO, level, ## args)
 #define pmo_logfl(level, format, args...) pmo_log(level, FL(format), ## args)
 
 #define pmo_fatal(format, args...) \
@@ -49,11 +50,11 @@
 #define pmo_debug(format, args...) \
 		pmo_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args)
 
-#define PMO_ENTER() pmo_logfl(QDF_TRACE_LEVEL_INFO, "enter")
-#define PMO_EXIT() pmo_logfl(QDF_TRACE_LEVEL_INFO, "exit")
+#define PMO_ENTER() pmo_debug("enter")
+#define PMO_EXIT() pmo_debug("exit")
 
-#define PMO_VDEV_IN_STA_MODE(mode)\
-	((mode == QDF_STA_MODE || mode == QDF_P2P_CLIENT_MODE) == 1 ? 1 : 0)
+#define PMO_VDEV_IN_STA_MODE(mode) \
+	((mode) == QDF_STA_MODE || (mode) == QDF_P2P_CLIENT_MODE ? 1 : 0)
 
 static inline enum tQDF_ADAPTER_MODE pmo_get_vdev_opmode(
 			struct wlan_objmgr_vdev *vdev)
@@ -67,17 +68,6 @@ static inline enum tQDF_ADAPTER_MODE pmo_get_vdev_opmode(
 	return opmode;
 }
 
-static inline uint8_t pmo_get_vdev_id(struct wlan_objmgr_vdev *vdev)
-{
-	uint8_t vdev_id;
-
-	wlan_vdev_obj_lock(vdev);
-	vdev_id = wlan_vdev_get_id(vdev);
-	wlan_vdev_obj_unlock(vdev);
-
-	return vdev_id;
-}
-
 /**
  * pmo_allocate_ctx() - Api to allocate pmo ctx
  *
@@ -105,26 +95,6 @@ void pmo_free_ctx(void);
  */
 struct wlan_pmo_ctx *pmo_get_context(void);
 
-/**
- * pmo_get_psoc_priv_ctx() - return pmo psoc priv ctx from objmgr psoc
- * @psoc: objmgr psoc
- *
- * Helper function to pmo psoc ctx from objmgr psoc
- *
- * Return: if success pmo psoc ctx else NULL
- */
-struct pmo_psoc_priv_obj *pmo_get_psoc_priv_ctx(struct wlan_objmgr_psoc *psoc);
-
-/**
- * pmo_get_vdev_priv_ctx() - return pmo vdev priv ctx from objmgr vdev
- * @vdev: objmgr vdev
- *
- * Helper function to pmo vdev ctx from objmgr vdev
- *
- * Return: if success pmo vdev ctx else NULL
- */
-struct pmo_vdev_priv_obj *pmo_get_vdev_priv_ctx(struct wlan_objmgr_vdev *vdev);
-
 /**
  * pmo_get_vdev_bss_peer_mac_addr() - API to get bss peer mac address
  * @vdev: objmgr vdev
@@ -137,17 +107,6 @@ struct pmo_vdev_priv_obj *pmo_get_vdev_priv_ctx(struct wlan_objmgr_vdev *vdev);
 QDF_STATUS pmo_get_vdev_bss_peer_mac_addr(struct wlan_objmgr_vdev *vdev,
 		struct qdf_mac_addr *bss_peer_mac_address);
 
-/**
- * pmo_psoc_ctx_from_vdev_ctx() - return pmo psoc ctx from pmo vdev ctx
- * @vdev: pmo vdev ctx
- *
- * Helper function to get pmo psoc ctx from pmo vdev ctx
- *
- * Return: pmo psoc ctx
- */
-struct pmo_psoc_priv_obj *pmo_psoc_ctx_from_vdev_ctx(
-	struct pmo_vdev_priv_obj *vdev_ctx);
-
 /**
  * pmo_is_vdev_in_beaconning_mode() - check if vdev is in a beaconning mode
  * @vdev_opmode: vdev opmode
@@ -247,9 +206,7 @@ void pmo_core_psoc_update_dp_handle(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->dp_hdl = dp_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -267,9 +224,7 @@ void *pmo_core_psoc_get_dp_handle(struct wlan_objmgr_psoc *psoc)
 	void *dp_hdl;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return NULL;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	dp_hdl = psoc_ctx->dp_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -290,9 +245,7 @@ void pmo_core_vdev_update_dp_handle(struct wlan_objmgr_vdev *vdev,
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->vdev_dp_hdl = dp_hdl;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -310,9 +263,7 @@ void *pmo_core_vdev_get_dp_handle(struct wlan_objmgr_vdev *vdev)
 	void *dp_hdl;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return NULL;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	dp_hdl = vdev_ctx->vdev_dp_hdl;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -333,9 +284,7 @@ void pmo_core_psoc_update_htc_handle(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->htc_hdl = htc_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -353,9 +302,7 @@ void *pmo_core_psoc_get_htc_handle(struct wlan_objmgr_psoc *psoc)
 	void *htc_hdl;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return NULL;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	htc_hdl = psoc_ctx->htc_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -418,7 +365,7 @@ bool pmo_is_vdev_up(struct wlan_objmgr_vdev *vdev)
 	state = wlan_vdev_mlme_get_state(vdev);
 	wlan_vdev_obj_unlock(vdev);
 
-	return (state == WLAN_VDEV_S_RUN) ? true : false;
+	return state == WLAN_VDEV_S_RUN;
 }
 
 #endif /* end  of _WLAN_PMO_MAIN_H_ */

+ 217 - 0
pmo/core/inc/wlan_pmo_objmgr.h

@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2017 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: This file contains various object manager related wrappers and helpers
+ */
+
+#ifndef _WLAN_PMO_OBJMGR_H
+#define _WLAN_PMO_OBJMGR_H
+
+#include "wlan_cmn.h"
+#include "wlan_objmgr_cmn.h"
+#include "wlan_objmgr_peer_obj.h"
+#include "wlan_objmgr_vdev_obj.h"
+#include "wlan_objmgr_pdev_obj.h"
+#include "wlan_objmgr_psoc_obj.h"
+#include "wlan_pmo_obj_mgmt_public_struct.h"
+
+/* Get/Put Ref */
+
+#define pmo_peer_get_ref(peer) wlan_objmgr_peer_try_get_ref(peer, WLAN_PMO_ID)
+#define pmo_peer_put_ref(peer) wlan_objmgr_peer_release_ref(peer, WLAN_PMO_ID)
+
+#define pmo_vdev_get_ref(vdev) wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID)
+#define pmo_vdev_put_ref(vdev) wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID)
+
+#define pmo_pdev_get_ref(pdev) wlan_objmgr_pdev_try_get_ref(pdev, WLAN_PMO_ID)
+#define pmo_pdev_put_ref(pdev) wlan_objmgr_pdev_release_ref(pdev, WLAN_PMO_ID)
+
+#define pmo_psoc_get_ref(psoc) wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID)
+#define pmo_psoc_put_ref(psoc) wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID)
+
+/* Private Data */
+
+#define pmo_vdev_get_priv_nolock(vdev) \
+	wlan_objmgr_vdev_get_comp_private_obj(vdev, WLAN_UMAC_COMP_PMO)
+#define pmo_psoc_get_priv_nolock(psoc) \
+	wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_PMO)
+
+/* Ids */
+
+static inline uint8_t
+pmo_vdev_get_id(struct wlan_objmgr_vdev *vdev)
+{
+	uint8_t vdev_id;
+
+	wlan_vdev_obj_lock(vdev);
+	vdev_id = wlan_vdev_get_id(vdev);
+	wlan_vdev_obj_unlock(vdev);
+
+	QDF_BUG(vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS);
+
+	return vdev_id;
+}
+
+/* Tree Navigation */
+
+/**
+ * !PLEASE READ!
+ *
+ * The following are objmgr naviation helpers for traversing objmgr object
+ * trees.
+ *
+ * Objmgr ensures parents of an objmgr object cannot be freed while a valid
+ * reference to one of its children is held. Based on this fact, all of these
+ * navigation helpers make the following assumptions to ensure safe usage:
+ *
+ * 1) The caller must hold a valid reference to the input objmgr object!
+ *	E.g. Use pmo_[peer|vdev|pdev|psoc]_get_ref() on the input objmgr object
+ *	before using these APIs
+ * 2) Given assumption #1, the caller does not need to hold a reference to the
+ *	parents of the input objmgr object
+ * 3) Given assumption #1, parents of the input objmgr object cannot be null
+ * 4) Given assumption #1, private contexts of any parent of the input objmgr
+ *	object cannot be null
+ *
+ * These characteristics remove the need for most sanity checks when dealing
+ * with objmgr objects. However, please note that if you ever walk the tree
+ * from parent to child, references must be acquired all the way down!
+ *
+ * Example #1:
+ *
+ *	psoc = pmo_vdev_get_psoc(vdev);
+ *	if (!psoc)
+ *		// this is dead code
+ *
+ * Example #2:
+ *
+ *	psoc_priv = pmo_psoc_get_priv(psoc);
+ *	if (!psoci_priv)
+ *		// this is dead code
+ *
+ * Example #3:
+ *
+ *	status = pmo_vdev_get_ref(vdev);
+ *
+ *	...
+ *
+ *	psoc = pmo_vdev_get_psoc(vdev);
+ *
+ *	// the next line is redundant, don't do it!
+ *	status = pmo_psoc_get_ref(psoc);
+ */
+
+/* Tree Navigation: psoc */
+
+static inline struct wlan_objmgr_vdev *
+pmo_psoc_get_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
+{
+	struct wlan_objmgr_vdev *vdev;
+
+	if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
+		QDF_BUG(0);
+		return NULL;
+	}
+
+	wlan_psoc_obj_lock(psoc);
+	vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
+	wlan_psoc_obj_unlock(psoc);
+
+	return vdev;
+}
+
+static inline struct pmo_psoc_priv_obj *
+pmo_psoc_get_priv(struct wlan_objmgr_psoc *psoc)
+{
+	struct pmo_psoc_priv_obj *psoc_priv;
+
+	wlan_psoc_obj_lock(psoc);
+	psoc_priv = pmo_psoc_get_priv_nolock(psoc);
+	wlan_psoc_obj_unlock(psoc);
+
+	QDF_BUG(psoc_priv);
+
+	return psoc_priv;
+}
+
+/* Tree Navigation: pdev */
+
+static inline struct wlan_objmgr_psoc *
+pmo_pdev_get_psoc(struct wlan_objmgr_pdev *pdev)
+{
+	struct wlan_objmgr_psoc *psoc;
+
+	wlan_pdev_obj_lock(pdev);
+	psoc = wlan_pdev_get_psoc(pdev);
+	wlan_pdev_obj_unlock(pdev);
+
+	QDF_BUG(psoc);
+
+	return psoc;
+}
+
+static inline struct pmo_psoc_priv_obj *
+pmo_pdev_get_psoc_priv(struct wlan_objmgr_pdev *pdev)
+{
+	return pmo_psoc_get_priv(pmo_pdev_get_psoc(pdev));
+}
+
+/* Tree Navigation: vdev */
+
+static inline struct pmo_vdev_priv_obj *
+pmo_vdev_get_priv(struct wlan_objmgr_vdev *vdev)
+{
+	struct pmo_vdev_priv_obj *vdev_priv;
+
+	wlan_vdev_obj_lock(vdev);
+	vdev_priv = pmo_vdev_get_priv_nolock(vdev);
+	wlan_vdev_obj_unlock(vdev);
+
+	QDF_BUG(vdev_priv);
+
+	return vdev_priv;
+}
+
+static inline struct wlan_objmgr_pdev *
+pmo_vdev_get_pdev(struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_pdev *pdev;
+
+	wlan_vdev_obj_lock(vdev);
+	pdev = wlan_vdev_get_pdev(vdev);
+	wlan_vdev_obj_unlock(vdev);
+
+	QDF_BUG(pdev);
+
+	return pdev;
+}
+
+static inline struct wlan_objmgr_psoc *
+pmo_vdev_get_psoc(struct wlan_objmgr_vdev *vdev)
+{
+	return pmo_pdev_get_psoc(pmo_vdev_get_pdev(vdev));
+}
+
+static inline struct pmo_psoc_priv_obj *
+pmo_vdev_get_psoc_priv(struct wlan_objmgr_vdev *vdev)
+{
+	return pmo_psoc_get_priv(pmo_pdev_get_psoc(pmo_vdev_get_pdev(vdev)));
+}
+
+#endif /* _WLAN_PMO_OBJMGR_H */

+ 6 - 19
pmo/core/inc/wlan_pmo_suspend_resume.h

@@ -47,10 +47,7 @@ bool pmo_core_get_wow_bus_suspend(struct wlan_objmgr_psoc *psoc)
 	bool value;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return false;
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	value = psoc_ctx->wow.is_wow_bus_suspended;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -204,9 +201,7 @@ void pmo_core_update_alt_modulated_dtim_enable(struct wlan_objmgr_vdev *vdev,
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->alt_modulated_dtim_enable = value;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -225,9 +220,7 @@ void pmo_core_vdev_set_dtim_policy(struct wlan_objmgr_vdev *vdev,
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->dtim_policy = value;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -245,9 +238,7 @@ uint32_t pmo_core_vdev_get_dtim_policy(struct wlan_objmgr_vdev *vdev)
 	uint32_t value;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return 0;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	value = vdev_ctx->dtim_policy;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -268,9 +259,7 @@ void pmo_core_psoc_update_power_save_mode(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->psoc_cfg.power_save_mode = value;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -288,9 +277,7 @@ uint8_t pmo_core_psoc_get_power_save_mode(struct wlan_objmgr_psoc *psoc)
 	uint8_t value;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return 0;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	value = psoc_ctx->psoc_cfg.power_save_mode;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);

+ 6 - 18
pmo/core/inc/wlan_pmo_wow.h

@@ -430,9 +430,7 @@ bool pmo_core_is_extscan_in_progress(struct wlan_objmgr_vdev *vdev)
 	bool extscan_in_progress;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return false;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	extscan_in_progress = vdev_ctx->extscan_in_progress;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -453,9 +451,7 @@ void pmo_core_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev,
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->extscan_in_progress = value;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -486,9 +482,7 @@ bool pmo_core_is_p2plo_in_progress(struct wlan_objmgr_vdev *vdev)
 	bool p2plo_in_progress;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return false;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	p2plo_in_progress = vdev_ctx->p2plo_in_progress;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -509,9 +503,7 @@ void pmo_core_update_p2plo_in_progress(struct wlan_objmgr_vdev *vdev,
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->p2plo_in_progress = value;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -534,9 +526,7 @@ bool pmo_core_is_lpass_enabled(struct wlan_objmgr_vdev *vdev)
 	bool lpass_enable;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return false;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	lpass_enable = vdev_ctx->pmo_psoc_ctx->psoc_cfg.lpass_enable;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -568,9 +558,7 @@ bool pmo_core_is_nan_enabled(struct wlan_objmgr_vdev *vdev)
 	bool nan_enable;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx)
-		return false;
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	nan_enable = vdev_ctx->pmo_psoc_ctx->psoc_cfg.nan_enable;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);

+ 32 - 51
pmo/core/src/wlan_pmo_arp.c

@@ -36,19 +36,9 @@ static QDF_STATUS pmo_core_cache_arp_in_vdev_priv(
 	struct qdf_mac_addr peer_bssid;
 
 	PMO_ENTER();
-	psoc_ctx = pmo_get_psoc_priv_ctx(arp_req->psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(arp_req->psoc);
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	request = qdf_mem_malloc(sizeof(*request));
 	if (!request) {
@@ -97,25 +87,20 @@ static QDF_STATUS pmo_core_flush_arp_from_vdev_priv(
 			struct wlan_objmgr_vdev *vdev)
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	/* clear arp request */
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_zero(&vdev_ctx->vdev_arp_req, sizeof(vdev_ctx->vdev_arp_req));
 	vdev_ctx->vdev_arp_req.enable = PMO_OFFLOAD_DISABLE;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-out:
+
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 static QDF_STATUS pmo_core_do_enable_arp_offload(struct wlan_objmgr_vdev *vdev,
@@ -126,12 +111,8 @@ static QDF_STATUS pmo_core_do_enable_arp_offload(struct wlan_objmgr_vdev *vdev,
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	psoc_ctx = vdev_ctx->pmo_psoc_ctx;
 	if (!psoc_ctx) {
@@ -180,12 +161,8 @@ static QDF_STATUS pmo_core_do_disable_arp_offload(struct wlan_objmgr_vdev *vdev,
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	psoc_ctx = vdev_ctx->pmo_psoc_ctx;
 	if (!psoc_ctx) {
@@ -226,12 +203,7 @@ static QDF_STATUS pmo_core_arp_offload_sanity(
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.arp_offload_enable) {
 		pmo_err("user disabled arp offload using ini");
 		return QDF_STATUS_E_INVAL;
@@ -267,14 +239,23 @@ QDF_STATUS pmo_core_cache_arp_offload_req(struct pmo_arp_req *arp_req)
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(arp_req->psoc,
-			arp_req->vdev_id, WLAN_PMO_ID);
+	if (arp_req->vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
+		pmo_err("Invalid vdev_id: %u", arp_req->vdev_id);
+		status = QDF_STATUS_E_INVAL;
+		goto out;
+	}
+
+	vdev = pmo_psoc_get_vdev(arp_req->psoc, arp_req->vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_INVAL;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	status = pmo_core_arp_offload_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -284,7 +265,7 @@ QDF_STATUS pmo_core_cache_arp_offload_req(struct pmo_arp_req *arp_req)
 
 	status = pmo_core_cache_arp_in_vdev_priv(arp_req, vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -303,7 +284,7 @@ QDF_STATUS pmo_core_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev)
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -311,12 +292,12 @@ QDF_STATUS pmo_core_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev)
 	if (status != QDF_STATUS_SUCCESS)
 		goto def_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Flush arp for vdev id: %d vdev: %p", vdev_id, vdev);
 
 	status = pmo_core_flush_arp_from_vdev_priv(vdev);
 def_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -336,7 +317,7 @@ QDF_STATUS pmo_core_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -344,13 +325,13 @@ QDF_STATUS pmo_core_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 	if (status != QDF_STATUS_SUCCESS)
 		goto def_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Enable arp offload in fwr vdev id: %d vdev: %p",
 		vdev_id, vdev);
 
 	status = pmo_core_do_enable_arp_offload(vdev, vdev_id, trigger);
 def_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -370,7 +351,7 @@ QDF_STATUS pmo_core_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -378,13 +359,13 @@ QDF_STATUS pmo_core_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 	if (status != QDF_STATUS_SUCCESS)
 		goto def_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Disable arp offload in fwr vdev id: %d vdev: %p",
 		vdev_id, vdev);
 
 	status = pmo_core_do_disable_arp_offload(vdev, vdev_id, trigger);
 def_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 21 - 45
pmo/core/src/wlan_pmo_gtk.c

@@ -32,16 +32,11 @@ static QDF_STATUS pmo_core_cache_gtk_req_in_vdev_priv(
 	QDF_STATUS status;
 	struct qdf_mac_addr peer_bssid;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
-	status = pmo_get_vdev_bss_peer_mac_addr(vdev,
-			&peer_bssid);
+	status = pmo_get_vdev_bss_peer_mac_addr(vdev, &peer_bssid);
 	if (status != QDF_STATUS_SUCCESS)
-		return QDF_STATUS_E_INVAL;
+		return status;
 
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_copy(&vdev_ctx->vdev_gtk_req, gtk_req,
@@ -51,7 +46,7 @@ static QDF_STATUS pmo_core_cache_gtk_req_in_vdev_priv(
 	vdev_ctx->vdev_gtk_req.flags = PMO_GTK_OFFLOAD_ENABLE;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 static QDF_STATUS pmo_core_flush_gtk_req_from_vdev_priv(
@@ -59,11 +54,7 @@ static QDF_STATUS pmo_core_flush_gtk_req_from_vdev_priv(
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_zero(&vdev_ctx->vdev_gtk_req, sizeof(vdev_ctx->vdev_gtk_req));
@@ -90,7 +81,7 @@ static QDF_STATUS pmo_core_do_enable_gtk_offload(
 	if (!pmo_core_is_vdev_connected(vdev))
 		return QDF_STATUS_E_INVAL;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_copy(op_gtk_req, &vdev_ctx->vdev_gtk_req,
@@ -195,12 +186,12 @@ QDF_STATUS pmo_core_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
 	opmode = pmo_get_vdev_opmode(vdev);
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("vdev opmode: %d vdev_id: %d", opmode, vdev_id);
 	if (!pmo_core_is_vdev_supports_offload(vdev)) {
 		pmo_info("vdev in invalid opmode for caching gtk request %d",
@@ -211,7 +202,7 @@ QDF_STATUS pmo_core_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
 
 	status = pmo_core_cache_gtk_req_in_vdev_priv(vdev, gtk_req);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -231,12 +222,12 @@ QDF_STATUS pmo_core_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev)
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
 	opmode = pmo_get_vdev_opmode(vdev);
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("vdev opmode: %d vdev_id: %d", opmode, vdev_id);
 	if (!pmo_core_is_vdev_supports_offload(vdev)) {
 		pmo_info("vdev in invalid opmode for flushing gtk request %d",
@@ -247,7 +238,7 @@ QDF_STATUS pmo_core_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev)
 
 	status = pmo_core_flush_gtk_req_from_vdev_priv(vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -267,16 +258,11 @@ QDF_STATUS pmo_core_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto dec_ref;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	op_gtk_req = qdf_mem_malloc(sizeof(*op_gtk_req));
 	if (!op_gtk_req) {
@@ -286,7 +272,7 @@ QDF_STATUS pmo_core_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
 	}
 	status = pmo_core_do_enable_gtk_offload(vdev, vdev_ctx, op_gtk_req);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	if (op_gtk_req)
 		qdf_mem_free(op_gtk_req);
@@ -308,16 +294,11 @@ QDF_STATUS pmo_core_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto dec_ref;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	op_gtk_req = qdf_mem_malloc(sizeof(*op_gtk_req));
 	if (!op_gtk_req) {
@@ -328,7 +309,7 @@ QDF_STATUS pmo_core_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
 
 	status = pmo_core_do_disable_gtk_offload(vdev, vdev_ctx, op_gtk_req);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	if (op_gtk_req)
 		qdf_mem_free(op_gtk_req);
@@ -350,16 +331,11 @@ QDF_STATUS pmo_core_get_gtk_rsp(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto dec_ref;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	status = pmo_core_is_gtk_enabled_in_fwr(vdev, vdev_ctx);
 	if (status != QDF_STATUS_SUCCESS)
@@ -373,7 +349,7 @@ QDF_STATUS pmo_core_get_gtk_rsp(struct wlan_objmgr_vdev *vdev,
 	/* send cmd to fwr */
 	status = pmo_tgt_get_gtk_rsp(vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 7 - 12
pmo/core/src/wlan_pmo_hw_bcast_fltr.c

@@ -34,12 +34,7 @@ static QDF_STATUS pmo_core_non_arp_bcast_filter_sanity(
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.hw_bcast_filter) {
 		pmo_err("user disabled hw broadcast filter using ini");
 		return QDF_STATUS_E_INVAL;
@@ -92,7 +87,7 @@ QDF_STATUS pmo_core_enable_non_arp_bcast_filter_in_fwr(
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -100,13 +95,13 @@ QDF_STATUS pmo_core_enable_non_arp_bcast_filter_in_fwr(
 	if (status != QDF_STATUS_SUCCESS)
 		goto def_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Enable non arp hw bcast filter in fwr vdev id: %d vdev: %p",
 		vdev_id, vdev);
 
 	status = pmo_core_do_enable_non_arp_bcast_filter(vdev, vdev_id);
 def_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -126,7 +121,7 @@ QDF_STATUS pmo_core_disable_non_arp_bcast_filter_in_fwr(
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -134,13 +129,13 @@ QDF_STATUS pmo_core_disable_non_arp_bcast_filter_in_fwr(
 	if (status != QDF_STATUS_SUCCESS)
 		goto def_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Disable non arp hw bcast filter in fwr vdev id: %d vdev: %p",
 		vdev_id, vdev);
 
 	status = pmo_core_do_disable_non_arp_bcast_filter(vdev, vdev_id);
 def_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 4 - 13
pmo/core/src/wlan_pmo_lphb.c

@@ -195,11 +195,8 @@ void pmo_core_apply_lphb(struct wlan_objmgr_psoc *psoc)
 	int i;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc ctx is null");
-		return;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
+
 	pmo_debug("checking LPHB cache");
 	for (i = 0; i < 2; i++) {
 		if (psoc_ctx->wow.lphb_cache[i].params.lphb_enable_req.enable) {
@@ -215,7 +212,6 @@ QDF_STATUS pmo_core_lphb_config_req(struct wlan_objmgr_psoc *psoc,
 		struct pmo_lphb_req *lphb_req, void *lphb_cb_ctx,
 		pmo_lphb_callback callback)
 {
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
 	if (lphb_req == NULL) {
@@ -223,11 +219,7 @@ QDF_STATUS pmo_core_lphb_config_req(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	if (pmo_lphb_set_en_param_indid == lphb_req->cmd) {
 		if (!lphb_cb_ctx) {
@@ -243,9 +235,8 @@ QDF_STATUS pmo_core_lphb_config_req(struct wlan_objmgr_psoc *psoc,
 		psoc_ctx->wow.lphb_cb = callback;
 		qdf_spin_unlock_bh(&psoc_ctx->lock);
 	}
-	status = pmo_process_lphb_conf_req(psoc, psoc_ctx, lphb_req);
 
-	return status;
+	return pmo_process_lphb_conf_req(psoc, psoc_ctx, lphb_req);
 }
 
 #endif /* FEATURE_WLAN_LPHB */

+ 7 - 59
pmo/core/src/wlan_pmo_main.c

@@ -63,36 +63,6 @@ struct wlan_pmo_ctx *pmo_get_context(void)
 	return gp_pmo_ctx;
 }
 
-struct pmo_psoc_priv_obj *pmo_get_psoc_priv_ctx(
-	struct wlan_objmgr_psoc *psoc)
-{
-	struct pmo_psoc_priv_obj *psoc_ctx;
-
-	wlan_psoc_obj_lock(psoc);
-	psoc_ctx = wlan_objmgr_psoc_get_comp_private_obj(psoc,
-			WLAN_UMAC_COMP_PMO);
-	wlan_psoc_obj_unlock(psoc);
-	return psoc_ctx;
-}
-
-struct pmo_vdev_priv_obj *pmo_get_vdev_priv_ctx(struct wlan_objmgr_vdev *vdev)
-{
-	struct pmo_vdev_priv_obj *vdev_ctx = NULL;
-
-	wlan_vdev_obj_lock(vdev);
-	vdev_ctx = wlan_objmgr_vdev_get_comp_private_obj(vdev,
-			WLAN_UMAC_COMP_PMO);
-	wlan_vdev_obj_unlock(vdev);
-
-	return vdev_ctx;
-}
-
-struct pmo_psoc_priv_obj *pmo_psoc_ctx_from_vdev_ctx(
-	struct pmo_vdev_priv_obj *vdev_ctx)
-{
-	return vdev_ctx->pmo_psoc_ctx;
-}
-
 bool pmo_is_vdev_in_beaconning_mode(
 		enum tQDF_ADAPTER_MODE vdev_opmode)
 {
@@ -144,11 +114,7 @@ bool pmo_core_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		return false;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	if ((vdev_opmode == QDF_SAP_MODE ||
 		vdev_opmode == QDF_P2P_GO_MODE) &&
@@ -220,12 +186,7 @@ QDF_STATUS pmo_core_get_psoc_config(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("pmo psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	qdf_spin_lock(&psoc_ctx->lock);
 	qdf_mem_copy(psoc_cfg, &psoc_ctx->psoc_cfg, sizeof(*psoc_cfg));
@@ -249,12 +210,7 @@ QDF_STATUS pmo_core_update_psoc_config(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("pmo psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	qdf_spin_lock(&psoc_ctx->lock);
 	qdf_mem_copy(&psoc_ctx->psoc_cfg, psoc_cfg, sizeof(*psoc_cfg));
@@ -270,9 +226,7 @@ void pmo_core_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->hif_hdl = hif_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -283,9 +237,7 @@ void *pmo_core_psoc_get_hif_handle(struct wlan_objmgr_psoc *psoc)
 	void *hif_hdl;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return NULL;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	hif_hdl = psoc_ctx->hif_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -298,9 +250,7 @@ void pmo_core_psoc_set_txrx_handle(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->txrx_hdl = txrx_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -311,9 +261,7 @@ void *pmo_core_psoc_get_txrx_handle(struct wlan_objmgr_psoc *psoc)
 	void *txrx_hdl;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx)
-		return NULL;
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	txrx_hdl = psoc_ctx->txrx_hdl;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);

+ 68 - 100
pmo/core/src/wlan_pmo_mc_addr_filtering.c

@@ -80,17 +80,11 @@ static QDF_STATUS pmo_core_cache_mc_addr_list_in_vdev_priv(
 		struct wlan_objmgr_vdev *vdev)
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
-
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
 
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	pmo_core_fill_mc_list(&vdev_ctx, mc_list_config);
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 static QDF_STATUS pmo_core_flush_mc_addr_list_from_vdev_priv(
@@ -98,11 +92,7 @@ static QDF_STATUS pmo_core_flush_mc_addr_list_from_vdev_priv(
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_zero(&vdev_ctx->vdev_mc_list_req,
@@ -115,19 +105,12 @@ static QDF_STATUS pmo_core_flush_mc_addr_list_from_vdev_priv(
 QDF_STATUS pmo_core_set_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 	struct pmo_mc_addr_list *mc_list)
 {
-	struct pmo_vdev_priv_obj *vdev_ctx;
 	uint8_t vdev_id;
 	int i;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
-	vdev_id = pmo_get_vdev_id(vdev);
+
+	vdev_id = pmo_vdev_get_id(vdev);
 	/*
 	 * Configure enhance multicast offload feature for filtering out
 	 * multicast IP data packets transmitted using unicast MAC address
@@ -154,28 +137,21 @@ QDF_STATUS pmo_core_set_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 		pmo_tgt_set_mc_filter_req(vdev,
 					mc_list->mc_addr[i]);
 	}
-out:
+
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS pmo_core_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 	struct pmo_mc_addr_list *mc_list)
 {
-	struct pmo_vdev_priv_obj *vdev_ctx;
 	uint8_t vdev_id;
 	int i;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
-	vdev_id = pmo_get_vdev_id(vdev);
+
+	vdev_id = pmo_vdev_get_id(vdev);
 
 	/*
 	 * Configure enhance multicast offload feature for filtering out
@@ -200,13 +176,12 @@ QDF_STATUS pmo_core_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 	 * to configure the MCList in FW
 	 */
 	for (i = 0; i < mc_list->mc_cnt; i++) {
-		pmo_tgt_clear_mc_filter_req(vdev,
-					mc_list->mc_addr[i]);
+		pmo_tgt_clear_mc_filter_req(vdev, mc_list->mc_addr[i]);
 	}
-out:
+
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 static QDF_STATUS pmo_core_do_enable_mc_addr_list(struct wlan_objmgr_vdev *vdev,
@@ -287,37 +262,29 @@ uint8_t pmo_core_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc)
 int pmo_core_get_mc_addr_list_count(struct wlan_objmgr_psoc *psoc,
 		uint8_t vdev_id)
 {
-	struct pmo_psoc_priv_obj *psoc_ctx;
+	QDF_STATUS status;
 	struct wlan_objmgr_vdev *vdev;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 	uint8_t mc_cnt;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is");
-		mc_cnt = PMO_INVALID_MC_ADDR_COUNT;
-		goto out;
-	}
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
-		mc_cnt = PMO_INVALID_MC_ADDR_COUNT;
-		goto out;
+		return PMO_INVALID_MC_ADDR_COUNT;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		mc_cnt = PMO_INVALID_MC_ADDR_COUNT;
-		goto dec_ref;
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		pmo_warn("failed to get vdev reference");
+		return PMO_INVALID_MC_ADDR_COUNT;
 	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	mc_cnt = vdev_ctx->vdev_mc_list_req.mc_cnt;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
-out:
+
+	pmo_vdev_put_ref(vdev);
 
 	return mc_cnt;
 }
@@ -325,36 +292,28 @@ out:
 void pmo_core_set_mc_addr_list_count(struct wlan_objmgr_psoc *psoc,
 		uint8_t vdev_id, uint8_t count)
 {
-	struct pmo_psoc_priv_obj *psoc_ctx;
+	QDF_STATUS status;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 	struct wlan_objmgr_vdev *vdev;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		goto out;
-	}
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
-		goto out;
+		return;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		goto dec_ref;
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		pmo_warn("failed to get vdev reference");
+		return;
 	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	vdev_ctx->vdev_mc_list_req.mc_cnt = count;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
 
-dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
-out:
-
-	return;
+	pmo_vdev_put_ref(vdev);
 }
 
 static QDF_STATUS pmo_core_mc_addr_flitering_sanity(
@@ -367,11 +326,7 @@ static QDF_STATUS pmo_core_mc_addr_flitering_sanity(
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	/* Check if INI is enabled or not, otherwise just return */
 	if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.enable_mc_list) {
@@ -397,20 +352,27 @@ QDF_STATUS pmo_core_cache_mc_addr_list(
 	QDF_STATUS status;
 
 	PMO_ENTER();
+
 	if (!mc_list_config->psoc) {
 		pmo_err("psoc is NULL");
 		status = QDF_STATUS_E_NULL_VALUE;
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mc_list_config->psoc,
-			mc_list_config->vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(mc_list_config->psoc, mc_list_config->vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_NULL_VALUE;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		pmo_warn("failed to get vdev reference");
+		status = QDF_STATUS_E_INVAL;
+		goto out;
+	}
+
 	status = pmo_core_mc_addr_flitering_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -420,7 +382,7 @@ QDF_STATUS pmo_core_cache_mc_addr_list(
 
 	status = pmo_core_cache_mc_addr_list_in_vdev_priv(mc_list_config, vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -440,13 +402,20 @@ QDF_STATUS pmo_core_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_NULL_VALUE;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		pmo_warn("failed to get vdev reference");
+		status = QDF_STATUS_E_INVAL;
+		goto out;
+	}
+
 	status = pmo_core_mc_addr_flitering_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -455,8 +424,9 @@ QDF_STATUS pmo_core_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc,
 			vdev_id, psoc, vdev);
 
 	status = pmo_core_flush_mc_addr_list_from_vdev_priv(vdev);
+
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -471,12 +441,7 @@ static QDF_STATUS pmo_core_handle_enable_mc_list_trigger(
 	QDF_STATUS status;
 	struct pmo_mc_addr_list *op_mc_list_req = NULL;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	op_mc_list_req = qdf_mem_malloc(sizeof(*op_mc_list_req));
 	if (!op_mc_list_req) {
@@ -533,13 +498,17 @@ QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr(
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_NULL_VALUE;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	status = pmo_core_mc_addr_flitering_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -547,7 +516,7 @@ QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr(
 	pmo_info("enable mclist trigger: %d", trigger);
 	status = pmo_core_handle_enable_mc_list_trigger(vdev, trigger);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -562,12 +531,7 @@ static QDF_STATUS pmo_core_handle_disable_mc_list_trigger(
 	QDF_STATUS status;
 	struct pmo_mc_addr_list *op_mc_list_req = NULL;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	op_mc_list_req = qdf_mem_malloc(sizeof(*op_mc_list_req));
 	if (!op_mc_list_req) {
@@ -625,13 +589,17 @@ QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr(
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_NULL_VALUE;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	status = pmo_core_mc_addr_flitering_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -639,7 +607,7 @@ QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr(
 	pmo_info("disable mclist trigger: %d", trigger);
 	status = pmo_core_handle_disable_mc_list_trigger(vdev, trigger);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 33 - 70
pmo/core/src/wlan_pmo_ns.c

@@ -71,25 +71,13 @@ static QDF_STATUS pmo_core_cache_ns_in_vdev_priv(
 			struct wlan_objmgr_vdev *vdev)
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
-	struct pmo_psoc_priv_obj *psoc_ctx;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 	struct pmo_ns_offload_params request;
 	struct wlan_objmgr_peer *peer;
 
 	PMO_ENTER();
-	psoc_ctx = pmo_get_psoc_priv_ctx(ns_req->psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	qdf_mem_zero(&request, sizeof(request));
 	pmo_core_fill_ns_addr(&request, ns_req);
@@ -130,25 +118,20 @@ static QDF_STATUS pmo_core_flush_ns_from_vdev_priv(
 		struct wlan_objmgr_vdev *vdev)
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	/* clear ns request */
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_zero(&vdev_ctx->vdev_ns_req, sizeof(vdev_ctx->vdev_ns_req));
 	vdev_ctx->vdev_ns_req.enable = PMO_OFFLOAD_DISABLE;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-out:
+
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 static QDF_STATUS pmo_core_do_enable_ns_offload(struct wlan_objmgr_vdev *vdev,
@@ -159,12 +142,8 @@ static QDF_STATUS pmo_core_do_enable_ns_offload(struct wlan_objmgr_vdev *vdev,
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	psoc_ctx = vdev_ctx->pmo_psoc_ctx;
 	if (!psoc_ctx) {
@@ -211,22 +190,10 @@ static QDF_STATUS pmo_core_do_disable_ns_offload(struct wlan_objmgr_vdev *vdev,
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	struct pmo_psoc_priv_obj *psoc_ctx;
-	struct pmo_vdev_priv_obj *vdev_ctx;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
 
-	psoc_ctx = vdev_ctx->pmo_psoc_ctx;
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
+	psoc_ctx = pmo_vdev_get_psoc_priv(vdev);
 
 	switch (trigger) {
 	case pmo_ipv6_change_notify:
@@ -266,11 +233,7 @@ static QDF_STATUS pmo_core_ns_offload_sanity(struct wlan_objmgr_vdev *vdev)
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_static) {
 		pmo_info("ns offload statically disable");
@@ -312,14 +275,24 @@ QDF_STATUS pmo_core_cache_ns_offload_req(
 		status = QDF_STATUS_E_INVAL;
 		goto out;
 	}
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(ns_req->psoc,
-			ns_req->vdev_id, WLAN_PMO_ID);
+
+	if (ns_req->vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
+		pmo_err("Invalid vdev_id: %u", ns_req->vdev_id);
+		status = QDF_STATUS_E_INVAL;
+		goto out;
+	}
+
+	vdev = pmo_psoc_get_vdev(ns_req->psoc, ns_req->vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		status = QDF_STATUS_E_INVAL;
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	status = pmo_core_ns_offload_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
@@ -332,7 +305,7 @@ QDF_STATUS pmo_core_cache_ns_offload_req(
 
 	status = pmo_core_cache_ns_in_vdev_priv(ns_req, vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -351,7 +324,7 @@ QDF_STATUS pmo_core_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev)
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
@@ -359,12 +332,12 @@ QDF_STATUS pmo_core_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev)
 	if (status != QDF_STATUS_SUCCESS)
 		goto dec_ref;
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Flush ns offload on vdev id: %d vdev: %p", vdev_id, vdev);
 
 	status = pmo_core_flush_ns_from_vdev_priv(vdev);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -385,16 +358,11 @@ QDF_STATUS pmo_core_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto dec_ref;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	status = pmo_core_ns_offload_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
@@ -425,12 +393,12 @@ skip_ns_dynamic_check:
 	}
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("Enable ns offload in fwr vdev id: %d vdev: %p trigger: %d",
 		vdev_id, vdev, trigger);
 	status = pmo_core_do_enable_ns_offload(vdev, vdev_id, trigger);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 
@@ -451,16 +419,11 @@ QDF_STATUS pmo_core_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
+	status = pmo_vdev_get_ref(vdev);
 	if (status != QDF_STATUS_SUCCESS)
 		goto out;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto dec_ref;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	status = pmo_core_ns_offload_sanity(vdev);
 	if (status != QDF_STATUS_SUCCESS)
@@ -482,13 +445,13 @@ QDF_STATUS pmo_core_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
 	}
 
 skip_ns_dynamic_check:
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("disable ns offload in fwr vdev id: %d vdev: %p trigger: %d",
 		vdev_id, vdev, trigger);
 
 	status = pmo_core_do_disable_ns_offload(vdev, vdev_id, trigger);
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 14 - 51
pmo/core/src/wlan_pmo_static_config.c

@@ -63,14 +63,10 @@ void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev)
 	struct wlan_objmgr_psoc *psoc;
 	enum tQDF_ADAPTER_MODE  vdev_opmode = QDF_MAX_NO_OF_MODE;
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (psoc == NULL) {
-		pmo_err("psoc is NULL");
-		return;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	vdev_opmode = pmo_get_vdev_opmode(vdev);
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	pmo_info("vdev_opmode %d vdev_id %d", vdev_opmode, vdev_id);
 
 	switch (vdev_opmode) {
@@ -128,11 +124,7 @@ static QDF_STATUS pmo_configure_wow_ap(struct wlan_objmgr_vdev *vdev)
 	uint8_t mac_mask[PMO_80211_ADDR_LEN];
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_FAILURE;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	/*
 	 * Setup unicast pkt pattern
@@ -178,15 +170,12 @@ static QDF_STATUS pmo_configure_mc_ssdp(
 {
 	struct wlan_objmgr_psoc *psoc;
 	const uint8_t ssdp_addr[QDF_MAC_ADDR_SIZE] = {
-		0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfa};
+		0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfa };
 	struct qdf_mac_addr multicast_addr;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
+
 	qdf_mem_copy(&multicast_addr.bytes, &ssdp_addr, QDF_MAC_ADDR_SIZE);
 	status = pmo_tgt_set_mc_filter_req(vdev,
 					  multicast_addr);
@@ -211,11 +200,8 @@ static QDF_STATUS pmo_configure_wow_ssdp(
 	uint8_t discvr_offset = 30;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
 	/*
 	 * WoW pattern ID should be unique for each vdev
 	 * Different WoW patterns can use same pattern ID
@@ -243,14 +229,8 @@ static QDF_STATUS pmo_configure_wow_ssdp(
 static QDF_STATUS pmo_configure_ssdp(struct wlan_objmgr_vdev *vdev)
 {
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	uint8_t vdev_id;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ssdp) {
 		pmo_err("mDNS, SSDP, LLMNR patterns are disabled from ini");
@@ -281,11 +261,7 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev)
 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
 	struct pmo_vdev_priv_obj *vdev_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return QDF_STATUS_E_INVAL;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	qdf_mem_set(&mac_mask, PMO_80211_ADDR_LEN, 0xFF);
 	/*
@@ -350,13 +326,9 @@ void pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev)
 	uint8_t vdev_id;
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		return;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	if (vdev_id > WLAN_UMAC_PSOC_MAX_VDEVS) {
 		pmo_err("Invalid vdev id %d", vdev_id);
 		return;
@@ -393,22 +365,14 @@ void pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev)
 
 }
 
-void pmo_register_action_frame_patterns(
-		struct wlan_objmgr_vdev *vdev)
+void pmo_register_action_frame_patterns(struct wlan_objmgr_vdev *vdev)
 {
 
 	struct pmo_action_wakeup_set_params cmd = {0};
 	int i = 0;
-	uint8_t vdev_id;
 	QDF_STATUS status;
 
-	vdev_id = pmo_get_vdev_id(vdev);
-	if (vdev_id > WLAN_UMAC_PSOC_MAX_VDEVS) {
-		pmo_err("Invalid vdev id %d", vdev_id);
-		return;
-	}
-
-	cmd.vdev_id = vdev_id;
+	cmd.vdev_id = pmo_vdev_get_id(vdev);
 	cmd.operation = pmo_action_wakeup_set;
 
 	cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP0;
@@ -433,6 +397,5 @@ void pmo_register_action_frame_patterns(
 	if (status != QDF_STATUS_SUCCESS)
 		pmo_err("Failed to config wow action frame map, ret %d",
 			status);
-
 }
 

+ 78 - 157
pmo/core/src/wlan_pmo_suspend_resume.c

@@ -112,7 +112,7 @@ static void pmo_core_set_vdev_suspend_dtim(struct wlan_objmgr_psoc *psoc,
 	enum tQDF_ADAPTER_MODE opmode = pmo_core_get_vdev_op_mode(vdev);
 
 	qpower_config = pmo_core_psoc_get_qpower_config(psoc);
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	if (PMO_VDEV_IN_STA_MODE(opmode) &&
 	    pmo_core_get_vdev_dtim_period(vdev) != 0) {
 		/* calculate listen interval */
@@ -164,36 +164,30 @@ static void pmo_core_set_vdev_suspend_dtim(struct wlan_objmgr_psoc *psoc,
 static void pmo_core_set_suspend_dtim(struct wlan_objmgr_psoc *psoc)
 {
 	uint8_t vdev_id;
-	struct wlan_objmgr_psoc_objmgr *objmgr;
 	struct wlan_objmgr_vdev *vdev;
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	bool alt_mdtim_enabled = false;
-	QDF_STATUS ret;
+	bool alt_mdtim_enabled;
+	QDF_STATUS status;
 
 	/* Iterate through VDEV list */
 	for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) {
-		wlan_psoc_obj_lock(psoc);
-		objmgr = &psoc->soc_objmgr;
-		if (!objmgr->wlan_vdev_list[vdev_id]) {
-			wlan_psoc_obj_unlock(psoc);
+		vdev = pmo_psoc_get_vdev(psoc, vdev_id);
+		if (!vdev)
 			continue;
-		}
-		vdev = objmgr->wlan_vdev_list[vdev_id];
-		wlan_psoc_obj_unlock(psoc);
 
-		if (vdev) {
-			vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-			ret = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
-			if (ret != QDF_STATUS_SUCCESS)
-				continue;
-			qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
-			alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable;
-			qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-			if (!alt_mdtim_enabled)
-				pmo_core_set_vdev_suspend_dtim(psoc,
-					vdev, vdev_ctx);
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
-		}
+		status = pmo_vdev_get_ref(vdev);
+		if (QDF_IS_STATUS_ERROR(status))
+			continue;
+
+		vdev_ctx = pmo_vdev_get_priv(vdev);
+		qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
+		alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable;
+		qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
+
+		if (!alt_mdtim_enabled)
+			pmo_core_set_vdev_suspend_dtim(psoc, vdev, vdev_ctx);
+
+		pmo_vdev_put_ref(vdev);
 	}
 }
 
@@ -264,16 +258,10 @@ void pmo_core_configure_dynamic_wake_events(struct wlan_objmgr_psoc *psoc)
 static QDF_STATUS pmo_core_psoc_configure_suspend(struct wlan_objmgr_psoc *psoc)
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("pmo psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	if (pmo_core_is_wow_applicable(psoc)) {
 		pmo_info("WOW Suspend");
@@ -292,20 +280,19 @@ static QDF_STATUS pmo_core_psoc_configure_suspend(struct wlan_objmgr_psoc *psoc)
 	 */
 	pmo_core_update_wow_bus_suspend(psoc, psoc_ctx, true);
 
-out:
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS pmo_core_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc,
 		enum qdf_suspend_type type)
 {
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	QDF_STATUS status;
 
 	PMO_ENTER();
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
@@ -323,7 +310,7 @@ QDF_STATUS pmo_core_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc,
 		pmo_err("Failed to configure suspend");
 
 dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 
@@ -349,7 +336,7 @@ static void pmo_core_set_vdev_resume_dtim(struct wlan_objmgr_psoc *psoc,
 	uint32_t cfg_data_val = 0;
 
 	qpower_config = pmo_core_psoc_get_qpower_config(psoc);
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_id = pmo_vdev_get_id(vdev);
 	if ((PMO_VDEV_IN_STA_MODE(opmode)) &&
 	    (pmo_core_vdev_get_dtim_policy(vdev) == pmo_normal_dtim)) {
 /*
@@ -404,36 +391,30 @@ static void pmo_core_set_vdev_resume_dtim(struct wlan_objmgr_psoc *psoc,
 static void pmo_core_set_resume_dtim(struct wlan_objmgr_psoc *psoc)
 {
 	uint8_t vdev_id;
-	struct wlan_objmgr_psoc_objmgr *objmgr;
 	struct wlan_objmgr_vdev *vdev;
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	bool alt_mdtim_enabled = false;
-	QDF_STATUS ret;
+	bool alt_mdtim_enabled;
+	QDF_STATUS status;
 
 	/* Iterate through VDEV list */
 	for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) {
-		wlan_psoc_obj_lock(psoc);
-		objmgr = &psoc->soc_objmgr;
-		if (!objmgr->wlan_vdev_list[vdev_id]) {
-			wlan_psoc_obj_unlock(psoc);
+		vdev = pmo_psoc_get_vdev(psoc, vdev_id);
+		if (!vdev)
 			continue;
-		}
-		vdev = objmgr->wlan_vdev_list[vdev_id];
-		wlan_psoc_obj_unlock(psoc);
 
-		if (vdev) {
-			vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-			ret = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
-			if (ret != QDF_STATUS_SUCCESS)
-				continue;
-			qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
-			alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable;
-			qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-			if (!alt_mdtim_enabled)
-				pmo_core_set_vdev_resume_dtim(psoc,
-					vdev, vdev_ctx);
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
-		}
+		status = pmo_vdev_get_ref(vdev);
+		if (QDF_IS_STATUS_ERROR(status))
+			continue;
+
+		vdev_ctx = pmo_vdev_get_priv(vdev);
+		qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
+		alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable;
+		qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
+
+		if (!alt_mdtim_enabled)
+			pmo_core_set_vdev_resume_dtim(psoc, vdev, vdev_ctx);
+
+		pmo_vdev_put_ref(vdev);
 	}
 }
 
@@ -493,25 +474,18 @@ static void pmo_unpause_all_vdev(struct wlan_objmgr_psoc *psoc,
 static QDF_STATUS pmo_core_psoc_configure_resume(struct wlan_objmgr_psoc *psoc)
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("pmo psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	pmo_core_set_resume_dtim(psoc);
 	pmo_core_update_wow_bus_suspend(psoc, psoc_ctx, false);
 	pmo_unpause_all_vdev(psoc, psoc_ctx);
 
-out:
 	PMO_EXIT();
 
-	return status;
+	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
@@ -521,7 +495,7 @@ QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
 
 	PMO_ENTER();
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
@@ -539,7 +513,7 @@ QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
 		pmo_err("Failed to configure resume");
 
 dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 
@@ -671,12 +645,7 @@ QDF_STATUS pmo_core_psoc_suspend_target(struct wlan_objmgr_psoc *psoc,
 
 	PMO_ENTER();
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	qdf_event_reset(&psoc_ctx->wow.target_suspend);
 	param.disable_target_intr = disable_target_intr;
@@ -721,18 +690,13 @@ QDF_STATUS pmo_core_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto dec_psoc_ref;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 /* TODO - scan manager need to provide the below public api
 	if (wma_check_scan_in_progress(handle)) {
@@ -749,8 +713,8 @@ QDF_STATUS pmo_core_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc,
 		status = pmo_core_enable_wow_in_fw(psoc, psoc_ctx, wow_params);
 	else
 		status = pmo_core_psoc_suspend_target(psoc, 0);
-dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 
@@ -761,7 +725,6 @@ out:
 QDF_STATUS pmo_core_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc,
 					     pmo_pld_auto_suspend_cb pld_cb)
 {
-	struct pmo_psoc_priv_obj *psoc_ctx;
 	void *hif_ctx;
 	void *dp_soc;
 	void *txrx_pdev;
@@ -777,19 +740,12 @@ QDF_STATUS pmo_core_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto dec_psoc_ref;
-	}
-
 	hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
 	dp_soc = pmo_core_psoc_get_dp_handle(psoc);
 	txrx_pdev = pmo_core_psoc_get_txrx_handle(psoc);
@@ -859,7 +815,7 @@ runtime_failure:
 	hif_process_runtime_suspend_failure(hif_ctx);
 
 dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+	pmo_psoc_put_ref(psoc);
 
 out:
 	PMO_EXIT();
@@ -870,7 +826,6 @@ out:
 QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
 					    pmo_pld_auto_resume_cb pld_cb)
 {
-	struct pmo_psoc_priv_obj *psoc_ctx;
 	void *hif_ctx;
 	void *dp_soc;
 	void *txrx_pdev;
@@ -885,19 +840,12 @@ QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("pmo psoc ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto dec_psoc_ref;
-	}
-
 	hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
 	dp_soc = pmo_core_psoc_get_dp_handle(psoc);
 	txrx_pdev = pmo_core_psoc_get_txrx_handle(psoc);
@@ -933,7 +881,7 @@ QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
 	hif_process_runtime_resume_success(hif_ctx);
 
 dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+	pmo_psoc_put_ref(psoc);
 
 out:
 	PMO_EXIT();
@@ -1076,19 +1024,13 @@ QDF_STATUS pmo_core_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("pmo cannot get the reference out of psoc");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto dec_psoc_ref;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	wow_mode = pmo_core_is_wow_enabled(psoc_ctx);
 	pmo_info("wow mode %d", wow_mode);
 
@@ -1098,8 +1040,9 @@ QDF_STATUS pmo_core_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc,
 		status = pmo_core_psoc_disable_wow_in_fw(psoc, psoc_ctx);
 	else
 		status = pmo_core_psoc_resume_target(psoc, psoc_ctx);
-dec_psoc_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
+
 out:
 	PMO_EXIT();
 
@@ -1118,17 +1061,13 @@ void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("Failed to get psoc reference");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		goto dec_ref;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	pmo_core_set_wow_nack(psoc_ctx, wow_nack);
 	qdf_event_set(&psoc_ctx->wow.target_suspend);
@@ -1136,8 +1075,8 @@ void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack)
 		qdf_wake_lock_timeout_acquire(&psoc_ctx->wow.wow_wake_lock,
 						PMO_WAKE_LOCK_TIMEOUT);
 	}
-dec_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 }
@@ -1151,11 +1090,8 @@ void pmo_core_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc)
 		pmo_err("psoc is null");
 		goto out;
 	}
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		goto out;
-	}
+
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_event_set(&psoc_ctx->wow.target_resume);
 out:
 	PMO_EXIT();
@@ -1173,26 +1109,20 @@ int pmo_core_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc)
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("Failed to get psoc reference");
 		ret = -EAGAIN;
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		ret = -EAGAIN;
-		goto dec_ref;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	if (pmo_core_get_wow_initial_wake_up(psoc_ctx)) {
 		pmo_err("Target initial wake up received try again");
 		ret = -EAGAIN;
 	}
-dec_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 
@@ -1212,23 +1142,17 @@ int pmo_core_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("Failed to get psoc reference");
 		ret = -EAGAIN;
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		ret = -EAGAIN;
-		goto dec_ref;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	pmo_core_update_wow_initial_wake_up(psoc_ctx, false);
-dec_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
 out:
 	PMO_EXIT();
 
@@ -1247,20 +1171,17 @@ void pmo_core_psoc_handle_initial_wake_up(void *cb_ctx)
 		goto out;
 	}
 
-	status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID);
+	status = pmo_psoc_get_ref(psoc);
 	if (status != QDF_STATUS_SUCCESS) {
 		pmo_err("Failed to get psoc reference");
 		goto out;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		goto dec_ref;
-	}
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	pmo_core_update_wow_initial_wake_up(psoc_ctx, true);
-dec_ref:
-	wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID);
+
+	pmo_psoc_put_ref(psoc);
+
 out:
 	PMO_EXIT();
 }

+ 42 - 55
pmo/core/src/wlan_pmo_wow.c

@@ -64,6 +64,7 @@ QDF_STATUS pmo_core_wow_exit(struct wlan_objmgr_vdev *vdev)
 void pmo_core_enable_wakeup_event(struct wlan_objmgr_psoc *psoc,
 	uint32_t vdev_id, uint32_t bitmap)
 {
+	QDF_STATUS status;
 	struct wlan_objmgr_vdev *vdev;
 
 	PMO_ENTER();
@@ -72,24 +73,30 @@ void pmo_core_enable_wakeup_event(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	pmo_info("enable wakeup event vdev_id %d wake up event 0x%x",
 		vdev_id, bitmap);
 	pmo_tgt_enable_wow_wakeup_event(vdev, bitmap);
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+
+	pmo_vdev_put_ref(vdev);
+
 out:
 	PMO_EXIT();
-
 }
 
 void pmo_core_disable_wakeup_event(struct wlan_objmgr_psoc *psoc,
 	uint32_t vdev_id, uint32_t bitmap)
 {
+	QDF_STATUS status;
 	struct wlan_objmgr_vdev *vdev;
 
 	PMO_ENTER();
@@ -98,58 +105,59 @@ void pmo_core_disable_wakeup_event(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is NULL");
 		goto out;
 	}
 
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
 	pmo_info("Disable wakeup eventvdev_id %d wake up event 0x%x",
 		vdev_id, bitmap);
 	pmo_tgt_disable_wow_wakeup_event(vdev, bitmap);
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+
+	pmo_vdev_put_ref(vdev);
+
 out:
 	PMO_EXIT();
-
 }
 
 /**
- * pmo_is_beaconning_vdev_up(): check if a beaconning vdev is up
+ * pmo_is_beaconing_vdev_up(): check if a beaconning vdev is up
  * @psoc: objmgr psoc handle
  *
  * Return TRUE if beaconning vdev is up
  */
 static
-bool pmo_is_beaconning_vdev_up(struct wlan_objmgr_psoc *psoc)
+bool pmo_is_beaconing_vdev_up(struct wlan_objmgr_psoc *psoc)
 {
 	int vdev_id;
-	struct wlan_objmgr_psoc_objmgr *objmgr;
 	struct wlan_objmgr_vdev *vdev;
 	enum tQDF_ADAPTER_MODE vdev_opmode;
+	bool is_beaconing;
 	QDF_STATUS status;
 
 	/* Iterate through VDEV list */
 	for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) {
-		wlan_psoc_obj_lock(psoc);
-		objmgr = &psoc->soc_objmgr;
-		if (!objmgr->wlan_vdev_list[vdev_id]) {
-			wlan_psoc_obj_unlock(psoc);
+		vdev = pmo_psoc_get_vdev(psoc, vdev_id);
+		if (!vdev)
 			continue;
-		}
-		vdev = objmgr->wlan_vdev_list[vdev_id];
-		wlan_psoc_obj_unlock(psoc);
 
-		status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
-		if (status != QDF_STATUS_SUCCESS)
+		status = pmo_vdev_get_ref(vdev);
+		if (QDF_IS_STATUS_ERROR(status))
 			continue;
 
 		vdev_opmode = pmo_get_vdev_opmode(vdev);
-		if (pmo_is_vdev_in_beaconning_mode(vdev_opmode) &&
-		    pmo_is_vdev_up(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+		is_beaconing = pmo_is_vdev_in_beaconning_mode(vdev_opmode) &&
+			pmo_is_vdev_up(vdev);
+
+		pmo_vdev_put_ref(vdev);
+
+		if (is_beaconing)
 			return true;
-		}
-		wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 	}
 
 	return false;
@@ -171,18 +179,14 @@ bool pmo_support_wow_for_beaconing(struct wlan_objmgr_psoc *psoc)
 	 * if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap,
 	 *			WMI_SERVICE_BEACON_OFFLOAD))
 	 */
-	if (pmo_is_beaconning_vdev_up(psoc))
-		return true;
-
-	return false;
+	return pmo_is_beaconing_vdev_up(psoc);
 }
 
 bool pmo_core_is_wow_applicable(struct wlan_objmgr_psoc *psoc)
 {
 	int vdev_id;
-	struct wlan_objmgr_psoc_objmgr *objmgr;
 	struct wlan_objmgr_vdev *vdev;
-	bool is_wow_applicable = false;
+	bool is_wow_applicable;
 	QDF_STATUS status;
 
 	if (!psoc) {
@@ -197,61 +201,44 @@ bool pmo_core_is_wow_applicable(struct wlan_objmgr_psoc *psoc)
 
 	/* Iterate through VDEV list */
 	for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) {
-		wlan_psoc_obj_lock(psoc);
-		objmgr = &psoc->soc_objmgr;
-		if (!objmgr->wlan_vdev_list[vdev_id]) {
-			wlan_psoc_obj_unlock(psoc);
+		vdev = pmo_psoc_get_vdev(psoc, vdev_id);
+		if (!vdev)
 			continue;
-		}
-		vdev = objmgr->wlan_vdev_list[vdev_id];
-		wlan_psoc_obj_unlock(psoc);
 
-		status = wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID);
-		if (status != QDF_STATUS_SUCCESS)
+		status = pmo_vdev_get_ref(vdev);
+		if (QDF_IS_STATUS_ERROR(status))
 			continue;
 
 		if (pmo_core_is_vdev_connected(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("STA is connected, enabling wow");
 			is_wow_applicable = true;
-			break;
 		} else if (ucfg_scan_get_pno_in_progress(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("NLO is in progress, enabling wow");
 			is_wow_applicable = true;
-			break;
 		} else if (pmo_core_is_extscan_in_progress(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("EXT is in progress, enabling wow");
 			is_wow_applicable = true;
-			break;
 		} else if (pmo_core_is_p2plo_in_progress(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("P2P LO is in progress, enabling wow");
 			is_wow_applicable = true;
-			break;
 		} else if (pmo_core_is_lpass_enabled(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("LPASS is enabled, enabling WoW");
 			is_wow_applicable = true;
-			break;
 		} else if (pmo_core_is_nan_enabled(vdev)) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("NAN is enabled, enabling WoW");
 			is_wow_applicable = true;
-			break;
 		} else if (pmo_core_get_vdev_op_mode(vdev) == QDF_NDI_MODE) {
-			wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
 			pmo_debug("vdev %d is in NAN data mode, enabling wow",
 				vdev_id);
 			is_wow_applicable = true;
-			break;
 		}
-		wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+
+		pmo_vdev_put_ref(vdev);
+
+		if (is_wow_applicable)
+			return true;
 	}
 
-	if (is_wow_applicable)
-		return true;
 	pmo_debug("All vdev are in disconnected state\n"
 		"and pno/extscan is not in progress, skipping wow");
 

+ 12 - 49
pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c

@@ -198,12 +198,8 @@ QDF_STATUS pmo_psoc_object_destroyed_notification(
 	QDF_STATUS status;
 
 	PMO_ENTER();
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_FAILURE;
-		goto out;
-	}
+
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	status = wlan_objmgr_psoc_component_obj_detach(psoc,
 			WLAN_UMAC_COMP_PMO,
@@ -234,19 +230,10 @@ QDF_STATUS pmo_vdev_object_created_notification(
 	QDF_STATUS status;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (psoc == NULL) {
-		pmo_err("psoc is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
+
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 
 	vdev_ctx = qdf_mem_malloc(sizeof(*vdev_ctx));
 	if (vdev_ctx == NULL) {
@@ -303,12 +290,8 @@ QDF_STATUS pmo_vdev_object_destroyed_notification(
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_INVAL;
-		goto out;
-	}
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	status = wlan_objmgr_vdev_component_obj_detach(vdev,
 			 WLAN_UMAC_COMP_PMO,
@@ -318,7 +301,7 @@ QDF_STATUS pmo_vdev_object_destroyed_notification(
 
 	qdf_spinlock_destroy(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_free(vdev_ctx);
-out:
+
 	PMO_EXIT();
 
 	return status;
@@ -592,12 +575,7 @@ QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->pause_bitmap_notifier = handler;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -620,12 +598,7 @@ QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	if (psoc_ctx->pause_bitmap_notifier == handler)
 		psoc_ctx->pause_bitmap_notifier = NULL;
@@ -649,12 +622,7 @@ QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	psoc_ctx->get_pause_bitmap = handler;
 	qdf_spin_unlock_bh(&psoc_ctx->lock);
@@ -677,12 +645,7 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_NULL_VALUE;
 	}
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	qdf_spin_lock_bh(&psoc_ctx->lock);
 	if (psoc_ctx->get_pause_bitmap == handler)
 		psoc_ctx->get_pause_bitmap = NULL;

+ 6 - 24
pmo/dispatcher/src/wlan_pmo_tgt_arp.c

@@ -35,19 +35,10 @@ QDF_STATUS pmo_tgt_enable_arp_offload_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req));
 	if (!arp_offload_req) {
@@ -109,19 +100,10 @@ QDF_STATUS pmo_tgt_disable_arp_offload_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req));
 	if (!arp_offload_req) {

+ 9 - 17
pmo/dispatcher/src/wlan_pmo_tgt_gtk.c

@@ -31,7 +31,6 @@ QDF_STATUS pmo_tgt_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
 	QDF_STATUS status;
 	struct wlan_objmgr_psoc *psoc;
 	struct pmo_vdev_priv_obj *vdev_ctx;
-	uint8_t vdev_id;
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
@@ -43,13 +42,7 @@ QDF_STATUS pmo_tgt_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
 		goto out;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_gtk_offload_req) {
@@ -135,8 +128,7 @@ QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
-			rsp_param->vdev_id, WLAN_PMO_ID);
+	vdev = pmo_psoc_get_vdev(psoc, rsp_param->vdev_id);
 	if (!vdev) {
 		pmo_err("vdev is null vdev_id:%d psoc:%p",
 			rsp_param->vdev_id, psoc);
@@ -144,12 +136,11 @@ QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc,
 		goto out;
 	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto dec_ref;
-	}
+	status = pmo_vdev_get_ref(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto out;
+
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	status = pmo_get_vdev_bss_peer_mac_addr(vdev, &rsp_param->bssid);
 	if (status != QDF_STATUS_SUCCESS) {
@@ -175,8 +166,9 @@ QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc,
 			rsp_param->vdev_id,
 			psoc);
 	}
+
 dec_ref:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID);
+	pmo_vdev_put_ref(vdev);
 out:
 	PMO_EXIT();
 

+ 1 - 6
pmo/dispatcher/src/wlan_pmo_tgt_lphb.c

@@ -139,12 +139,7 @@ QDF_STATUS pmo_tgt_lphb_rsp_evt(struct wlan_objmgr_psoc *psoc,
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 
-	psoc_ctx = pmo_get_psoc_priv_ctx(psoc);
-	if (!psoc_ctx) {
-		pmo_err("psoc_ctx is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
-
+	psoc_ctx = pmo_psoc_get_priv(psoc);
 	if (psoc_ctx->wow.lphb_cb && psoc_ctx->wow.lphb_cb_ctx) {
 		pmo_info("callback:%p context:%p psoc:%p",
 			psoc_ctx->wow.lphb_cb, psoc_ctx->wow.lphb_cb_ctx, psoc);

+ 4 - 14
pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c

@@ -31,13 +31,8 @@ QDF_STATUS pmo_tgt_set_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_set_mc_filter_req) {
@@ -64,13 +59,8 @@ QDF_STATUS pmo_tgt_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_clear_mc_filter_req) {

+ 6 - 24
pmo/dispatcher/src/wlan_pmo_tgt_non_arp_bcast_fltr.c

@@ -35,19 +35,10 @@ QDF_STATUS pmo_tgt_enable_non_arp_bcast_filter_req(
 	struct qdf_mac_addr peer_bssid;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	bcast_req = qdf_mem_malloc(sizeof(*bcast_req));
 	if (!bcast_req) {
@@ -103,19 +94,10 @@ QDF_STATUS pmo_tgt_disable_non_arp_bcast_filter_req(
 	struct qdf_mac_addr peer_bssid;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	bcast_req = qdf_mem_malloc(sizeof(*bcast_req));
 	if (!bcast_req) {

+ 5 - 24
pmo/dispatcher/src/wlan_pmo_tgt_ns.c

@@ -36,19 +36,9 @@ QDF_STATUS pmo_tgt_enable_ns_offload_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req));
 	if (!arp_offload_req) {
@@ -111,19 +101,10 @@ QDF_STATUS pmo_tgt_disable_ns_offload_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("psoc unavailable for vdev %p", vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req));
 	if (!arp_offload_req) {

+ 7 - 28
pmo/dispatcher/src/wlan_pmo_tgt_static_config.c

@@ -33,13 +33,7 @@ QDF_STATUS pmo_tgt_send_enhance_multicast_offload_req(
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_enhance_mc_offload_req) {
@@ -69,22 +63,12 @@ QDF_STATUS pmo_tgt_send_ra_filter_req(struct wlan_objmgr_vdev *vdev)
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
 
-	vdev_id = pmo_get_vdev_id(vdev);
+	vdev_ctx = pmo_vdev_get_priv(vdev);
+
+	vdev_id = pmo_vdev_get_id(vdev);
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	ra_interval = vdev_ctx->pmo_psoc_ctx->psoc_cfg.ra_ratelimit_interval;
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
@@ -121,13 +105,8 @@ QDF_STATUS pmo_tgt_send_action_frame_pattern_req(
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_action_frame_pattern_req) {

+ 4 - 14
pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c

@@ -31,13 +31,8 @@ QDF_STATUS pmo_tgt_vdev_update_param_req(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_vdev_param_update_req) {
@@ -62,13 +57,8 @@ QDF_STATUS pmo_tgt_send_vdev_sta_ps_param(struct wlan_objmgr_vdev *vdev,
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_vdev_sta_ps_param_req) {

+ 6 - 27
pmo/dispatcher/src/wlan_pmo_tgt_wow.c

@@ -32,13 +32,8 @@ QDF_STATUS pmo_tgt_enable_wow_wakeup_event(
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_enable_wow_wakeup_event_req) {
@@ -64,13 +59,8 @@ QDF_STATUS pmo_tgt_disable_wow_wakeup_event(
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+
+	psoc = pmo_vdev_get_psoc(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_disable_wow_wakeup_event_req) {
@@ -99,20 +89,9 @@ QDF_STATUS pmo_tgt_send_wow_patterns_to_fw(
 	struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops;
 
 	PMO_ENTER();
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		pmo_err("Failed to find psoc from from vdev:%p",
-			vdev);
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	psoc = pmo_vdev_get_psoc(vdev);
 
-	vdev_ctx = pmo_get_vdev_priv_ctx(vdev);
-	if (!vdev_ctx) {
-		pmo_err("vdev_ctx is NULL");
-		status = QDF_STATUS_E_NULL_VALUE;
-		goto out;
-	}
+	vdev_ctx = pmo_vdev_get_priv(vdev);
 
 	pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
 	if (!pmo_tx_ops.send_add_wow_pattern) {