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
This commit is contained in:
Dustin Brown 2017-05-12 17:35:48 -07:00 • committed by snandini
commit a17c68d656
24 changed files with 608 additions and 943 deletions

View file

@ -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_ */

View file

@ -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 */

View file

@ -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);

View file

@ -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);

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -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 */

View file

@ -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);

View file

@ -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();

View file

@ -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();

View file

@ -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);
}

View file

@ -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();
}

View file

@ -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");

View file

@ -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;

View file

@ -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) {

View file

@ -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();

View file

@ -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);

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {