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