From a17c68d6569869fce34084e257949939660981cb Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Fri, 12 May 2017 17:35:48 -0700 Subject: [PATCH] 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 --- pmo/core/inc/wlan_pmo_main.h | 79 +----- pmo/core/inc/wlan_pmo_objmgr.h | 217 ++++++++++++++++ pmo/core/inc/wlan_pmo_suspend_resume.h | 25 +- pmo/core/inc/wlan_pmo_wow.h | 24 +- pmo/core/src/wlan_pmo_arp.c | 83 +++---- pmo/core/src/wlan_pmo_gtk.c | 66 ++--- pmo/core/src/wlan_pmo_hw_bcast_fltr.c | 19 +- pmo/core/src/wlan_pmo_lphb.c | 17 +- pmo/core/src/wlan_pmo_main.c | 66 +---- pmo/core/src/wlan_pmo_mc_addr_filtering.c | 168 +++++-------- pmo/core/src/wlan_pmo_ns.c | 103 +++----- pmo/core/src/wlan_pmo_static_config.c | 65 ++--- pmo/core/src/wlan_pmo_suspend_resume.c | 235 ++++++------------ pmo/core/src/wlan_pmo_wow.c | 97 ++++---- pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c | 61 +---- pmo/dispatcher/src/wlan_pmo_tgt_arp.c | 30 +-- pmo/dispatcher/src/wlan_pmo_tgt_gtk.c | 26 +- pmo/dispatcher/src/wlan_pmo_tgt_lphb.c | 7 +- .../src/wlan_pmo_tgt_mc_addr_filtering.c | 18 +- .../src/wlan_pmo_tgt_non_arp_bcast_fltr.c | 30 +-- pmo/dispatcher/src/wlan_pmo_tgt_ns.c | 29 +-- .../src/wlan_pmo_tgt_static_config.c | 35 +-- .../src/wlan_pmo_tgt_suspend_resume.c | 18 +- pmo/dispatcher/src/wlan_pmo_tgt_wow.c | 33 +-- 24 files changed, 608 insertions(+), 943 deletions(-) create mode 100644 pmo/core/inc/wlan_pmo_objmgr.h diff --git a/pmo/core/inc/wlan_pmo_main.h b/pmo/core/inc/wlan_pmo_main.h index d2524dba3362..9c4d8d128837 100644 --- a/pmo/core/inc/wlan_pmo_main.h +++ b/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_ */ diff --git a/pmo/core/inc/wlan_pmo_objmgr.h b/pmo/core/inc/wlan_pmo_objmgr.h new file mode 100644 index 000000000000..b1871c5a80f1 --- /dev/null +++ b/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 */ diff --git a/pmo/core/inc/wlan_pmo_suspend_resume.h b/pmo/core/inc/wlan_pmo_suspend_resume.h index d6a6192f6eb7..0896b831d6da 100644 --- a/pmo/core/inc/wlan_pmo_suspend_resume.h +++ b/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); diff --git a/pmo/core/inc/wlan_pmo_wow.h b/pmo/core/inc/wlan_pmo_wow.h index 69cbe77d3cd8..ffd6805f15d1 100644 --- a/pmo/core/inc/wlan_pmo_wow.h +++ b/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); diff --git a/pmo/core/src/wlan_pmo_arp.c b/pmo/core/src/wlan_pmo_arp.c index b3285987698b..c658560939b2 100644 --- a/pmo/core/src/wlan_pmo_arp.c +++ b/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(); diff --git a/pmo/core/src/wlan_pmo_gtk.c b/pmo/core/src/wlan_pmo_gtk.c index 646ef5d0c58f..120ff04275d1 100644 --- a/pmo/core/src/wlan_pmo_gtk.c +++ b/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(); diff --git a/pmo/core/src/wlan_pmo_hw_bcast_fltr.c b/pmo/core/src/wlan_pmo_hw_bcast_fltr.c index 2bbcc487e47e..3d9172c90be8 100644 --- a/pmo/core/src/wlan_pmo_hw_bcast_fltr.c +++ b/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(); diff --git a/pmo/core/src/wlan_pmo_lphb.c b/pmo/core/src/wlan_pmo_lphb.c index ff7159f016a2..39c2a388f756 100644 --- a/pmo/core/src/wlan_pmo_lphb.c +++ b/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 */ diff --git a/pmo/core/src/wlan_pmo_main.c b/pmo/core/src/wlan_pmo_main.c index cf5711a0c84b..9792f77e0b47 100644 --- a/pmo/core/src/wlan_pmo_main.c +++ b/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); diff --git a/pmo/core/src/wlan_pmo_mc_addr_filtering.c b/pmo/core/src/wlan_pmo_mc_addr_filtering.c index bff5bb2d3cc4..be4bb2dab22d 100644 --- a/pmo/core/src/wlan_pmo_mc_addr_filtering.c +++ b/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(); diff --git a/pmo/core/src/wlan_pmo_ns.c b/pmo/core/src/wlan_pmo_ns.c index c15b49268aea..509d74462a3e 100644 --- a/pmo/core/src/wlan_pmo_ns.c +++ b/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(); diff --git a/pmo/core/src/wlan_pmo_static_config.c b/pmo/core/src/wlan_pmo_static_config.c index e64594fff889..05e0fb98fbff 100644 --- a/pmo/core/src/wlan_pmo_static_config.c +++ b/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); - } diff --git a/pmo/core/src/wlan_pmo_suspend_resume.c b/pmo/core/src/wlan_pmo_suspend_resume.c index 71c83aafbb18..b6e09e131e28 100644 --- a/pmo/core/src/wlan_pmo_suspend_resume.c +++ b/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(); } diff --git a/pmo/core/src/wlan_pmo_wow.c b/pmo/core/src/wlan_pmo_wow.c index 21cb4ebf1c14..44448bf4aeb8 100644 --- a/pmo/core/src/wlan_pmo_wow.c +++ b/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"); diff --git a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c b/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c index 5600242ac399..ada0d391d960 100644 --- a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c +++ b/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; diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_arp.c b/pmo/dispatcher/src/wlan_pmo_tgt_arp.c index ef962be2c315..049f5de958dd 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_arp.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c b/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c index 46670ec50143..2d6324c461f4 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c +++ b/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(); diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c b/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c index e91546872bec..30bfb7a3d231 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c +++ b/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); diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c b/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c index 30d6e9422986..6fa3f9c60a27 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_non_arp_bcast_fltr.c b/pmo/dispatcher/src/wlan_pmo_tgt_non_arp_bcast_fltr.c index 20672ab5cf22..49c084f2033a 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_non_arp_bcast_fltr.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_ns.c b/pmo/dispatcher/src/wlan_pmo_tgt_ns.c index 9feb56f3fad2..b97500b037ec 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_ns.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c b/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c index 89f077d0d3e0..862f82f17a59 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c b/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c index df1738755a2c..1af752877d0c 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c +++ b/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) { diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_wow.c b/pmo/dispatcher/src/wlan_pmo_tgt_wow.c index 71fe2574baa2..eb826f1e09d8 100644 --- a/pmo/dispatcher/src/wlan_pmo_tgt_wow.c +++ b/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) {