qcacmn: create the vdev response timers in psoc_mlme
Move the vdev response timer from the vdev object manager structure to the psoc mlme structure. Change-Id: Ieb87ac6549aa23e0beb61441fea459d3db78c2f3 CRs-Fixed: 2563410
This commit is contained in:
94
target_if/mlme/psoc/inc/target_if_psoc_timer_tx_ops.h
Normal file
94
target_if/mlme/psoc/inc/target_if_psoc_timer_tx_ops.h
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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: target_if_psoc_timer_tx_ops.h
|
||||||
|
*
|
||||||
|
* This file provide declaration for APIs registered through lmac Tx Ops
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __TARGET_IF_PSOC_TIMER_TX_OPS_H__
|
||||||
|
#define __TARGET_IF_PSOC_TIMER_TX_OPS_H__
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_psoc_vdev_rsp_timer_inuse() - API to check if the response timer
|
||||||
|
* for vdev is inuse
|
||||||
|
* @psoc: Psoc object
|
||||||
|
* @vdev_id: Vdev object id
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_E_ALREADY in case the timer is inuse or QDF_STATUS_SUCCESS
|
||||||
|
*/
|
||||||
|
QDF_STATUS target_if_psoc_vdev_rsp_timer_inuse(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_flush_psoc_vdev_timers() - API to flush target_if response timers
|
||||||
|
* for vdev
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
*
|
||||||
|
* This API is used to flush target_if response timer. This API used while
|
||||||
|
* wlan driver shutdown.
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void target_if_flush_psoc_vdev_timers(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_psoc_vdev_rsp_timer_init() - API to initialize response timers for
|
||||||
|
* vdev from psoc
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @vdev_id: vdev id for which response timer to be retrieved
|
||||||
|
*
|
||||||
|
* This API is used to initialize vdev response timer for vdev-id.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS target_if_psoc_vdev_rsp_timer_init(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_psoc_vdev_rsp_timer_deinit() - API to de-initialize response timers
|
||||||
|
* for vdev from psoc
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @vdev_id: vdev id for which response timer to be retrieved
|
||||||
|
*
|
||||||
|
* This API is used to de-initialize vdev response timer from vdev-id.
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void target_if_psoc_vdev_rsp_timer_deinit(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_vdev_mgr_rsp_timer_mod() - API to modify time of response timers
|
||||||
|
* for vdev from psoc
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @vdev_id: vdev id for which response timer to be retrieved
|
||||||
|
* @mseconds: milli seconds
|
||||||
|
*
|
||||||
|
* This API is used to modify vdev response timer for vdev-id.
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
QDF_STATUS target_if_vdev_mgr_rsp_timer_mod(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
int mseconds);
|
||||||
|
|
||||||
|
#endif
|
177
target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c
Normal file
177
target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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: target_if_psoc_timer_tx_ops.c
|
||||||
|
*
|
||||||
|
* This file provide definition for APIs registered through lmac Tx Ops
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wlan_objmgr_psoc_obj.h>
|
||||||
|
#include <wlan_mlme_dbg.h>
|
||||||
|
#include <target_if_psoc_timer_tx_ops.h>
|
||||||
|
#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
|
||||||
|
#include <target_if_vdev_mgr_tx_ops.h>
|
||||||
|
#include <target_if_vdev_mgr_rx_ops.h>
|
||||||
|
|
||||||
|
QDF_STATUS target_if_psoc_vdev_rsp_timer_inuse(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id)
|
||||||
|
{
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
|
|
||||||
|
if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
|
||||||
|
mlme_err("Invalid vdev id passed VDEV_%d", vdev_id);
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops && !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response is NULL for VDEV_%d PSOC_%d",
|
||||||
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qdf_atomic_read(&vdev_rsp->rsp_timer_inuse)) {
|
||||||
|
mlme_err("vdev response timer still inuse VDEV_%d PSOC_%d",
|
||||||
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_ALREADY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS target_if_psoc_vdev_rsp_timer_init(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id)
|
||||||
|
{
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
|
|
||||||
|
if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
|
||||||
|
mlme_err("Invalid vdev id passed VDEV_%d PSOC_%d", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops && !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response is NULL for VDEV_%d PSOC_%d",
|
||||||
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp->psoc = psoc;
|
||||||
|
vdev_rsp->vdev_id = vdev_id;
|
||||||
|
qdf_timer_init(NULL, &vdev_rsp->rsp_timer,
|
||||||
|
target_if_vdev_mgr_rsp_timer_mgmt_cb,
|
||||||
|
vdev_rsp, QDF_TIMER_TYPE_WAKE_APPS);
|
||||||
|
qdf_atomic_init(&vdev_rsp->rsp_timer_inuse);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void target_if_psoc_vdev_rsp_timer_deinit(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id)
|
||||||
|
{
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
|
|
||||||
|
if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
|
||||||
|
mlme_err("Invalid vdev id passed VDEV_%d PSOC_%d", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops && !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response is NULL for VDEV_%d PSOC_%d",
|
||||||
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_timer_free(&vdev_rsp->rsp_timer);
|
||||||
|
qdf_atomic_set(&vdev_rsp->rsp_timer_inuse, 0);
|
||||||
|
vdev_rsp->psoc = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void target_if_flush_psoc_vdev_timers(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops && !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("PSOC_%d No Rx Ops", wlan_psoc_get_id(psoc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < WLAN_UMAC_PSOC_MAX_VDEVS; i++) {
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||||
|
i);
|
||||||
|
if (vdev_rsp && qdf_timer_sync_cancel(&vdev_rsp->rsp_timer))
|
||||||
|
target_if_vdev_mgr_rsp_timer_cb(vdev_rsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS target_if_vdev_mgr_rsp_timer_mod(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
int mseconds)
|
||||||
|
{
|
||||||
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("Invalid input");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops && !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
|
qdf_timer_mod(&vdev_rsp->rsp_timer, mseconds);
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
@@ -51,33 +51,6 @@ static inline bool target_if_vdev_mgr_is_panic_allowed(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* target_if_timer_flush_handler() - API to handle target_if timer flush
|
|
||||||
* request
|
|
||||||
* @pdev: pointer to pdev object
|
|
||||||
* @object: pointer to vdev object
|
|
||||||
* @arg: pointer to arguments passed
|
|
||||||
*
|
|
||||||
* This is a target_if timer flush handler used to flush target_if response
|
|
||||||
* timer. This API used while wlan driver shut down.
|
|
||||||
*
|
|
||||||
* Return: none
|
|
||||||
*/
|
|
||||||
void target_if_timer_flush_handler(struct wlan_objmgr_pdev *pdev,
|
|
||||||
void *object,
|
|
||||||
void *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* target_if_flush_vdev_timers() - API to flush target_if response timers
|
|
||||||
* for vdev
|
|
||||||
* @pdev: pointer to pdev object
|
|
||||||
*
|
|
||||||
* This API is used to flush target_if response timer. This API used while
|
|
||||||
* wlan driver shut down.
|
|
||||||
*
|
|
||||||
* Return: none
|
|
||||||
*/
|
|
||||||
void target_if_flush_vdev_timers(struct wlan_objmgr_pdev *pdev);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* target_if_vdev_mgr_offload_bcn_tx_status_handler() - API to handle beacon
|
* target_if_vdev_mgr_offload_bcn_tx_status_handler() - API to handle beacon
|
||||||
@@ -175,4 +148,12 @@ QDF_STATUS target_if_vdev_mgr_wmi_event_register(
|
|||||||
QDF_STATUS target_if_vdev_mgr_wmi_event_unregister(
|
QDF_STATUS target_if_vdev_mgr_wmi_event_unregister(
|
||||||
struct wlan_objmgr_psoc *psoc);
|
struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_vdev_mgr_rsp_timer_cb() - function to handle vdev related timeouts
|
||||||
|
* @vdev_rsp: pointer to vdev response timer
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*/
|
||||||
|
void target_if_vdev_mgr_rsp_timer_cb(struct vdev_response_timer *vdev_rsp);
|
||||||
|
|
||||||
#endif /* __TARGET_IF_VDEV_MGR_RX_OPS_H__ */
|
#endif /* __TARGET_IF_VDEV_MGR_RX_OPS_H__ */
|
||||||
|
@@ -63,24 +63,22 @@ target_if_vdev_mgr_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* target_if_vdev_mgr_assert_mgmt() - vdev assert mgmt api
|
* target_if_vdev_mgr_assert_mgmt() - vdev assert mgmt api
|
||||||
* @vdev: pointer to objmgr vdev
|
* @PSOC: pointer to objmgr psoc
|
||||||
* @vdev_rsp: pointer to vdev mlme response timer
|
* @vdev_id: vdev id
|
||||||
* @set_bit: bit to be set
|
|
||||||
*
|
*
|
||||||
* Return: NA
|
* Return: NA
|
||||||
*/
|
*/
|
||||||
#ifdef VDEV_ASSERT_MANAGEMENT
|
#ifdef VDEV_ASSERT_MANAGEMENT
|
||||||
static inline void target_if_vdev_mgr_assert_mgmt(
|
static inline void target_if_vdev_mgr_assert_mgmt(
|
||||||
struct wlan_objmgr_vdev *vdev,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_response_timer *vdev_rsp,
|
uint8_t vdev_id)
|
||||||
uint8_t set_bit)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void target_if_vdev_mgr_assert_mgmt(
|
static inline void target_if_vdev_mgr_assert_mgmt(
|
||||||
struct wlan_objmgr_vdev *vdev,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_response_timer *vdev_rsp,
|
uint8_t vdev_id)
|
||||||
uint8_t set_bit)
|
|
||||||
{
|
{
|
||||||
QDF_ASSERT(0);
|
QDF_ASSERT(0);
|
||||||
}
|
}
|
||||||
@@ -89,14 +87,15 @@ static inline void target_if_vdev_mgr_assert_mgmt(
|
|||||||
/**
|
/**
|
||||||
* target_if_vdev_mgr_rsp_timer_stop() - API to stop response timer for
|
* target_if_vdev_mgr_rsp_timer_stop() - API to stop response timer for
|
||||||
* vdev manager operations
|
* vdev manager operations
|
||||||
* @vdev: pointer to vdev object
|
* @psoc: pointer to psoc object
|
||||||
* @vdev_rsp: pointer to response timer
|
* @vdev_rsp: vdev response timer
|
||||||
* @clear_bit: acton bit
|
* @clear_bit: enum of wlan_vdev_mgr_tgt_if_rsp_bit
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
|
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
|
||||||
*/
|
*/
|
||||||
QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
|
QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
|
||||||
struct wlan_objmgr_vdev *vdev,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_response_timer *vdev_rsp,
|
struct vdev_response_timer *vdev_rsp,
|
||||||
uint8_t clear_bit);
|
enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit);
|
||||||
|
|
||||||
#endif /* __TARGET_IF_VDEV_MGR_TX_OPS_H__ */
|
#endif /* __TARGET_IF_VDEV_MGR_TX_OPS_H__ */
|
||||||
|
@@ -32,12 +32,10 @@
|
|||||||
#include <wlan_vdev_mlme_main.h>
|
#include <wlan_vdev_mlme_main.h>
|
||||||
#include <wmi_unified_vdev_api.h>
|
#include <wmi_unified_vdev_api.h>
|
||||||
|
|
||||||
static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
void target_if_vdev_mgr_rsp_timer_cb(struct vdev_response_timer *vdev_rsp)
|
||||||
{
|
{
|
||||||
struct wlan_objmgr_vdev *vdev = arg;
|
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
struct crash_inject param;
|
struct crash_inject param;
|
||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
struct vdev_start_response start_rsp = {0};
|
struct vdev_start_response start_rsp = {0};
|
||||||
@@ -47,22 +45,23 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
uint16_t rsp_pos = RESPONSE_BIT_MAX;
|
uint16_t rsp_pos = RESPONSE_BIT_MAX;
|
||||||
|
|
||||||
vdev_id = wlan_vdev_get_id(vdev);
|
if (!vdev_rsp) {
|
||||||
mlme_debug("Response timer expired for VDEV %d", vdev_id);
|
mlme_err("Vdev response timer is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
psoc = vdev_rsp->psoc;
|
||||||
if (!psoc) {
|
if (!psoc) {
|
||||||
mlme_err("PSOC is NULL");
|
mlme_err("PSOC is NULL");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
if (!rx_ops || !rx_ops->vdev_mgr_get_response_timer_info) {
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
mlme_err("No Rx Ops");
|
mlme_err("No Rx Ops");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
|
||||||
if (!qdf_atomic_test_bit(START_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
if (!qdf_atomic_test_bit(START_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
||||||
!qdf_atomic_test_bit(RESTART_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
!qdf_atomic_test_bit(RESTART_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
||||||
!qdf_atomic_test_bit(STOP_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
!qdf_atomic_test_bit(STOP_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
|
||||||
@@ -70,7 +69,15 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
!qdf_atomic_test_bit(
|
!qdf_atomic_test_bit(
|
||||||
PEER_DELETE_ALL_RESPONSE_BIT,
|
PEER_DELETE_ALL_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
mlme_debug("No response bit is set, ignoring actions");
|
mlme_debug("No response bit is set, ignoring actions :%d",
|
||||||
|
vdev_rsp->vdev_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_id = vdev_rsp->vdev_id;
|
||||||
|
if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) {
|
||||||
|
mlme_err("Invalid VDEV_%d PSOC_%d", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +86,7 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
&vdev_rsp->rsp_status) ||
|
&vdev_rsp->rsp_status) ||
|
||||||
qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
|
qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
start_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
start_rsp.vdev_id = vdev_id;
|
||||||
start_rsp.status = WLAN_MLME_HOST_VDEV_START_TIMEOUT;
|
start_rsp.status = WLAN_MLME_HOST_VDEV_START_TIMEOUT;
|
||||||
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
@@ -92,31 +99,28 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
rsp_pos = RESTART_RESPONSE_BIT;
|
rsp_pos = RESTART_RESPONSE_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
|
||||||
|
|
||||||
rx_ops->vdev_mgr_start_response(psoc, &start_rsp);
|
rx_ops->vdev_mgr_start_response(psoc, &start_rsp);
|
||||||
} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
rsp_pos = STOP_RESPONSE_BIT;
|
rsp_pos = STOP_RESPONSE_BIT;
|
||||||
stop_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
stop_rsp.vdev_id = vdev_id;
|
||||||
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
|
||||||
|
|
||||||
rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
|
rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
|
||||||
} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
del_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
del_rsp.vdev_id = vdev_id;
|
||||||
rsp_pos = DELETE_RESPONSE_BIT;
|
rsp_pos = DELETE_RESPONSE_BIT;
|
||||||
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
|
||||||
|
|
||||||
rx_ops->vdev_mgr_delete_response(psoc, &del_rsp);
|
rx_ops->vdev_mgr_delete_response(psoc, &del_rsp);
|
||||||
} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
peer_del_all_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
peer_del_all_rsp.vdev_id = vdev_id;
|
||||||
rsp_pos = PEER_DELETE_ALL_RESPONSE_BIT;
|
rsp_pos = PEER_DELETE_ALL_RESPONSE_BIT;
|
||||||
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
|
||||||
|
|
||||||
rx_ops->vdev_mgr_peer_delete_all_response(
|
rx_ops->vdev_mgr_peer_delete_all_response(
|
||||||
psoc,
|
psoc,
|
||||||
@@ -134,7 +138,7 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Trigger fw recovery to collect fw dump */
|
/* Trigger fw recovery to collect fw dump */
|
||||||
wmi_handle = target_if_vdev_mgr_wmi_handle_get(vdev);
|
wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc);
|
||||||
if (wmi_handle) {
|
if (wmi_handle) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: Self recovery, %s rsp timeout",
|
mlme_err("PSOC_%d VDEV_%d: Self recovery, %s rsp timeout",
|
||||||
wlan_psoc_get_id(psoc), vdev_id,
|
wlan_psoc_get_id(psoc), vdev_id,
|
||||||
@@ -150,46 +154,31 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void target_if_timer_flush_handler(struct wlan_objmgr_pdev *pdev,
|
|
||||||
void *object,
|
|
||||||
void *arg)
|
|
||||||
{
|
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
|
||||||
struct wlan_objmgr_psoc *psoc;
|
|
||||||
struct wlan_objmgr_vdev *vdev = object;
|
|
||||||
|
|
||||||
psoc = wlan_pdev_get_psoc(pdev);
|
|
||||||
if (!psoc) {
|
|
||||||
mlme_err("PSOC is NULL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
|
||||||
if (!rx_ops || !rx_ops->vdev_mgr_get_response_timer_info) {
|
|
||||||
mlme_err("No Rx Ops");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
|
||||||
if (qdf_timer_sync_cancel(&vdev_rsp->rsp_timer))
|
|
||||||
target_if_vdev_mgr_rsp_timer_cb(vdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
void target_if_flush_vdev_timers(struct wlan_objmgr_pdev *pdev)
|
|
||||||
{
|
|
||||||
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
|
|
||||||
target_if_timer_flush_handler,
|
|
||||||
NULL, true, WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SERIALIZE_VDEV_RESP
|
#ifdef SERIALIZE_VDEV_RESP
|
||||||
static QDF_STATUS target_if_vdev_mgr_rsp_flush_cb(struct scheduler_msg *msg)
|
static QDF_STATUS target_if_vdev_mgr_rsp_flush_cb(struct scheduler_msg *msg)
|
||||||
{
|
{
|
||||||
struct wlan_objmgr_vdev *vdev = msg->bodyptr;
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
|
||||||
if (vdev)
|
if (!msg->bodyptr) {
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
mlme_err("Message bodyptr is NULL");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_rsp = msg->bodyptr;
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response timer is NULL");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
psoc = vdev_rsp->psoc;
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("PSOC is NULL");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vdev_rsp->rsp_status)
|
||||||
|
wlan_objmgr_psoc_release_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -198,12 +187,19 @@ static void
|
|||||||
target_if_vdev_mgr_rsp_cb_mc_ctx(void *arg)
|
target_if_vdev_mgr_rsp_cb_mc_ctx(void *arg)
|
||||||
{
|
{
|
||||||
struct scheduler_msg msg = {0};
|
struct scheduler_msg msg = {0};
|
||||||
struct wlan_objmgr_vdev *vdev = arg;
|
struct vdev_response_timer *vdev_rsp = arg;
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
|
||||||
|
psoc = vdev_rsp->psoc;
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("PSOC is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
msg.type = SYS_MSG_ID_MC_TIMER;
|
msg.type = SYS_MSG_ID_MC_TIMER;
|
||||||
msg.reserved = SYS_MSG_COOKIE;
|
msg.reserved = SYS_MSG_COOKIE;
|
||||||
msg.callback = target_if_vdev_mgr_rsp_timer_cb;
|
msg.callback = target_if_vdev_mgr_rsp_timer_cb;
|
||||||
msg.bodyptr = arg;
|
msg.bodyptr = vdev_rsp;
|
||||||
msg.bodyval = 0;
|
msg.bodyval = 0;
|
||||||
msg.flush_callback = target_if_vdev_mgr_rsp_flush_cb;
|
msg.flush_callback = target_if_vdev_mgr_rsp_flush_cb;
|
||||||
|
|
||||||
@@ -214,8 +210,8 @@ target_if_vdev_mgr_rsp_cb_mc_ctx(void *arg)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
mlme_err("Could not enqueue timer to timer queue");
|
mlme_err("Could not enqueue timer to timer queue");
|
||||||
if (vdev)
|
if (psoc)
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
wlan_objmgr_psoc_release_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void target_if_vdev_mgr_rsp_timer_mgmt_cb(void *arg)
|
void target_if_vdev_mgr_rsp_timer_mgmt_cb(void *arg)
|
||||||
@@ -243,8 +239,8 @@ static int target_if_vdev_mgr_start_response_handler(ol_scn_t scn,
|
|||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct vdev_start_response rsp = {0};
|
struct vdev_start_response rsp = {0};
|
||||||
wmi_host_vdev_start_resp vdev_start_resp;
|
wmi_host_vdev_start_resp vdev_start_resp;
|
||||||
|
uint8_t vdev_id;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
struct vdev_response_timer *vdev_rsp;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
|
||||||
|
|
||||||
if (!scn || !data) {
|
if (!scn || !data) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -274,35 +270,26 @@ static int target_if_vdev_mgr_start_response_handler(ol_scn_t scn,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
vdev_id = vdev_start_resp.vdev_id;
|
||||||
psoc,
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
vdev_start_resp.vdev_id,
|
|
||||||
WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
if (!vdev) {
|
|
||||||
mlme_err("PSOC_%d :VDEV_%d is NULL", psoc->soc_objmgr.psoc_id,
|
|
||||||
vdev_start_resp.vdev_id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDEV RSP is NULL",
|
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||||
psoc->soc_objmgr.psoc_id, vdev_start_resp.vdev_id);
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
goto release_vdev_target_if_ref;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vdev_start_resp.resp_type == WMI_HOST_VDEV_RESTART_RESP_EVENT)
|
if (vdev_start_resp.resp_type == WMI_HOST_VDEV_RESTART_RESP_EVENT)
|
||||||
status = target_if_vdev_mgr_rsp_timer_stop(
|
status = target_if_vdev_mgr_rsp_timer_stop(
|
||||||
vdev, vdev_rsp,
|
psoc, vdev_rsp,
|
||||||
RESTART_RESPONSE_BIT);
|
RESTART_RESPONSE_BIT);
|
||||||
else
|
else
|
||||||
status = target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
status = target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
START_RESPONSE_BIT);
|
START_RESPONSE_BIT);
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||||
psoc->soc_objmgr.psoc_id, vdev_start_resp.vdev_id);
|
psoc->soc_objmgr.psoc_id, vdev_id);
|
||||||
goto release_vdev_target_if_ref;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp.vdev_id = vdev_start_resp.vdev_id;
|
rsp.vdev_id = vdev_start_resp.vdev_id;
|
||||||
@@ -317,8 +304,7 @@ static int target_if_vdev_mgr_start_response_handler(ol_scn_t scn,
|
|||||||
|
|
||||||
status = rx_ops->vdev_mgr_start_response(psoc, &rsp);
|
status = rx_ops->vdev_mgr_start_response(psoc, &rsp);
|
||||||
|
|
||||||
release_vdev_target_if_ref:
|
err:
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
return qdf_status_to_os_return(status);
|
return qdf_status_to_os_return(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +319,6 @@ static int target_if_vdev_mgr_stop_response_handler(ol_scn_t scn,
|
|||||||
struct vdev_stop_response rsp = {0};
|
struct vdev_stop_response rsp = {0};
|
||||||
uint32_t vdev_id;
|
uint32_t vdev_id;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
struct vdev_response_timer *vdev_rsp;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
|
||||||
|
|
||||||
if (!scn || !data) {
|
if (!scn || !data) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -363,37 +348,26 @@ static int target_if_vdev_mgr_stop_response_handler(ol_scn_t scn,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
psoc,
|
if (!vdev_rsp) {
|
||||||
vdev_id,
|
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||||
WLAN_VDEV_TARGET_IF_ID);
|
vdev_id, wlan_psoc_get_id(psoc));
|
||||||
if (!vdev) {
|
|
||||||
mlme_err("PSOC_%d: VDEV_%d is NULL", psoc->soc_objmgr.psoc_id,
|
|
||||||
vdev_id);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
status = target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
if (!vdev_rsp) {
|
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDEV RSP is NULL",
|
|
||||||
psoc->soc_objmgr.psoc_id, vdev_id);
|
|
||||||
goto release_vdev_target_if_ref;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
|
||||||
STOP_RESPONSE_BIT);
|
STOP_RESPONSE_BIT);
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||||
psoc->soc_objmgr.psoc_id, vdev_id);
|
psoc->soc_objmgr.psoc_id, vdev_id);
|
||||||
goto release_vdev_target_if_ref;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp.vdev_id = vdev_id;
|
rsp.vdev_id = vdev_id;
|
||||||
status = rx_ops->vdev_mgr_stop_response(psoc, &rsp);
|
status = rx_ops->vdev_mgr_stop_response(psoc, &rsp);
|
||||||
|
|
||||||
release_vdev_target_if_ref:
|
err:
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
return qdf_status_to_os_return(status);
|
return qdf_status_to_os_return(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,7 +382,6 @@ static int target_if_vdev_mgr_delete_response_handler(ol_scn_t scn,
|
|||||||
struct vdev_delete_response rsp = {0};
|
struct vdev_delete_response rsp = {0};
|
||||||
struct wmi_host_vdev_delete_resp vdev_del_resp;
|
struct wmi_host_vdev_delete_resp vdev_del_resp;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
struct vdev_response_timer *vdev_rsp;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
|
||||||
|
|
||||||
if (!scn || !data) {
|
if (!scn || !data) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -438,38 +411,28 @@ static int target_if_vdev_mgr_delete_response_handler(ol_scn_t scn,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||||
psoc,
|
|
||||||
vdev_del_resp.vdev_id,
|
|
||||||
WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
if (!vdev) {
|
|
||||||
mlme_err("PSOC_%d: VDEV_%d is NULL", psoc->soc_objmgr.psoc_id,
|
|
||||||
vdev_del_resp.vdev_id);
|
vdev_del_resp.vdev_id);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||||
|
vdev_del_resp.vdev_id, wlan_psoc_get_id(psoc));
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
|
||||||
if (!vdev_rsp) {
|
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDEV RSP is NULL",
|
|
||||||
psoc->soc_objmgr.psoc_id, vdev_del_resp.vdev_id);
|
|
||||||
goto release_vdev_target_if_ref;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = target_if_vdev_mgr_rsp_timer_stop(
|
status = target_if_vdev_mgr_rsp_timer_stop(
|
||||||
vdev, vdev_rsp,
|
psoc, vdev_rsp,
|
||||||
DELETE_RESPONSE_BIT);
|
DELETE_RESPONSE_BIT);
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||||
psoc->soc_objmgr.psoc_id, vdev_del_resp.vdev_id);
|
wlan_psoc_get_id(psoc), vdev_del_resp.vdev_id);
|
||||||
goto release_vdev_target_if_ref;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp.vdev_id = vdev_del_resp.vdev_id;
|
rsp.vdev_id = vdev_del_resp.vdev_id;
|
||||||
status = rx_ops->vdev_mgr_delete_response(psoc, &rsp);
|
status = rx_ops->vdev_mgr_delete_response(psoc, &rsp);
|
||||||
|
|
||||||
release_vdev_target_if_ref:
|
err:
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
return qdf_status_to_os_return(status);
|
return qdf_status_to_os_return(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,7 +449,6 @@ static int target_if_vdev_mgr_peer_delete_all_response_handler(
|
|||||||
struct wmi_host_vdev_peer_delete_all_response_event
|
struct wmi_host_vdev_peer_delete_all_response_event
|
||||||
vdev_peer_del_all_resp;
|
vdev_peer_del_all_resp;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
struct vdev_response_timer *vdev_rsp;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
|
||||||
|
|
||||||
if (!scn || !data) {
|
if (!scn || !data) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -518,41 +480,32 @@ static int target_if_vdev_mgr_peer_delete_all_response_handler(
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||||
psoc,
|
|
||||||
vdev_peer_del_all_resp.vdev_id,
|
|
||||||
WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
if (!vdev) {
|
|
||||||
mlme_err("PSOC_%d: VDEV_%d is NULL", psoc->soc_objmgr.psoc_id,
|
|
||||||
vdev_peer_del_all_resp.vdev_id);
|
vdev_peer_del_all_resp.vdev_id);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||||
|
vdev_peer_del_all_resp.vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
|
||||||
if (!vdev_rsp) {
|
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDEV RSP is NULL",
|
|
||||||
psoc->soc_objmgr.psoc_id,
|
|
||||||
vdev_peer_del_all_resp.vdev_id);
|
|
||||||
goto release_vdev_target_if_ref;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = target_if_vdev_mgr_rsp_timer_stop(
|
status = target_if_vdev_mgr_rsp_timer_stop(
|
||||||
vdev, vdev_rsp,
|
psoc,
|
||||||
|
vdev_rsp,
|
||||||
PEER_DELETE_ALL_RESPONSE_BIT);
|
PEER_DELETE_ALL_RESPONSE_BIT);
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||||
psoc->soc_objmgr.psoc_id,
|
psoc->soc_objmgr.psoc_id,
|
||||||
vdev_peer_del_all_resp.vdev_id);
|
vdev_peer_del_all_resp.vdev_id);
|
||||||
goto release_vdev_target_if_ref;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp.vdev_id = vdev_peer_del_all_resp.vdev_id;
|
rsp.vdev_id = vdev_peer_del_all_resp.vdev_id;
|
||||||
rsp.status = vdev_peer_del_all_resp.status;
|
rsp.status = vdev_peer_del_all_resp.status;
|
||||||
status = rx_ops->vdev_mgr_peer_delete_all_response(psoc, &rsp);
|
status = rx_ops->vdev_mgr_peer_delete_all_response(psoc, &rsp);
|
||||||
|
|
||||||
release_vdev_target_if_ref:
|
err:
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
|
||||||
return qdf_status_to_os_return(status);
|
return qdf_status_to_os_return(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -37,6 +37,7 @@
|
|||||||
#include <wlan_cmn.h>
|
#include <wlan_cmn.h>
|
||||||
#include <wmi_unified_vdev_api.h>
|
#include <wmi_unified_vdev_api.h>
|
||||||
#include <cdp_txrx_ctrl.h>
|
#include <cdp_txrx_ctrl.h>
|
||||||
|
#include <target_if_psoc_timer_tx_ops.h>
|
||||||
|
|
||||||
static QDF_STATUS target_if_vdev_mgr_register_event_handler(
|
static QDF_STATUS target_if_vdev_mgr_register_event_handler(
|
||||||
struct wlan_objmgr_psoc *psoc)
|
struct wlan_objmgr_psoc *psoc)
|
||||||
@@ -50,25 +51,20 @@ static QDF_STATUS target_if_vdev_mgr_unregister_event_handler(
|
|||||||
return target_if_vdev_mgr_wmi_event_unregister(psoc);
|
return target_if_vdev_mgr_wmi_event_unregister(psoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS target_if_vdev_mgr_rsp_timer_mod(
|
QDF_STATUS
|
||||||
struct wlan_objmgr_vdev *vdev,
|
target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_response_timer *vdev_rsp,
|
struct vdev_response_timer *vdev_rsp,
|
||||||
int mseconds)
|
enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit)
|
||||||
{
|
{
|
||||||
if (!vdev || !vdev_rsp) {
|
struct wlan_lmac_if_mlme_tx_ops *txops;
|
||||||
mlme_err("Invalid input");
|
|
||||||
|
txops = target_if_vdev_mgr_get_tx_ops(psoc);
|
||||||
|
if (!txops || !txops->psoc_vdev_rsp_timer_deinit) {
|
||||||
|
mlme_err("Failed to get mlme txrx_ops VDEV_%d PSOC_%d",
|
||||||
|
vdev_rsp->vdev_id, wlan_psoc_get_id(psoc));
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_timer_mod(&vdev_rsp->rsp_timer, mseconds);
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
|
|
||||||
struct wlan_objmgr_vdev *vdev,
|
|
||||||
struct vdev_response_timer *vdev_rsp,
|
|
||||||
uint8_t clear_bit)
|
|
||||||
{
|
|
||||||
if (qdf_atomic_test_and_clear_bit(clear_bit, &vdev_rsp->rsp_status)) {
|
if (qdf_atomic_test_and_clear_bit(clear_bit, &vdev_rsp->rsp_status)) {
|
||||||
/*
|
/*
|
||||||
* This is triggered from timer expiry case only for
|
* This is triggered from timer expiry case only for
|
||||||
@@ -78,46 +74,43 @@ QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
|
|||||||
qdf_timer_stop(&vdev_rsp->rsp_timer);
|
qdf_timer_stop(&vdev_rsp->rsp_timer);
|
||||||
|
|
||||||
vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
|
vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
|
||||||
|
if (clear_bit == DELETE_RESPONSE_BIT)
|
||||||
|
txops->psoc_vdev_rsp_timer_deinit(psoc,
|
||||||
|
vdev_rsp->vdev_id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Releasing reference taken at the time of
|
* Releasing reference taken at the time of
|
||||||
* starting response timer
|
* starting response timer
|
||||||
*/
|
*/
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
wlan_objmgr_psoc_release_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS target_if_vdev_mgr_rsp_timer_start(
|
static QDF_STATUS target_if_vdev_mgr_rsp_timer_start(
|
||||||
struct wlan_objmgr_vdev *vdev,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_response_timer *vdev_rsp,
|
struct vdev_response_timer *vdev_rsp,
|
||||||
uint8_t set_bit)
|
enum wlan_vdev_mgr_tgt_if_rsp_bit set_bit)
|
||||||
{
|
{
|
||||||
uint8_t vdev_id;
|
|
||||||
uint8_t rsp_pos;
|
uint8_t rsp_pos;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
uint8_t vdev_id;
|
||||||
|
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
|
||||||
if (!psoc) {
|
|
||||||
mlme_err("PSOC is NULL");
|
|
||||||
return QDF_STATUS_E_INVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
vdev_id = wlan_vdev_get_id(vdev);
|
|
||||||
/* it is expected to be only one command with FW at a time */
|
/* it is expected to be only one command with FW at a time */
|
||||||
for (rsp_pos = START_RESPONSE_BIT; rsp_pos <= RESPONSE_BIT_MAX;
|
for (rsp_pos = START_RESPONSE_BIT; rsp_pos <= RESPONSE_BIT_MAX;
|
||||||
rsp_pos++) {
|
rsp_pos++) {
|
||||||
if (rsp_pos != set_bit) {
|
if (rsp_pos != set_bit) {
|
||||||
if (qdf_atomic_test_bit(rsp_pos,
|
if (qdf_atomic_test_bit(rsp_pos,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
|
vdev_id = vdev_rsp->vdev_id;
|
||||||
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
||||||
wlan_psoc_get_id(psoc),
|
wlan_psoc_get_id(psoc),
|
||||||
vdev_id, string_from_rsp_bit(set_bit),
|
vdev_id,
|
||||||
|
string_from_rsp_bit(set_bit),
|
||||||
string_from_rsp_bit(rsp_pos));
|
string_from_rsp_bit(rsp_pos));
|
||||||
target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
|
target_if_vdev_mgr_assert_mgmt(psoc,
|
||||||
rsp_pos);
|
vdev_id);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev,
|
target_if_vdev_mgr_rsp_timer_stop(psoc,
|
||||||
vdev_rsp,
|
vdev_rsp,
|
||||||
rsp_pos);
|
rsp_pos);
|
||||||
}
|
}
|
||||||
@@ -127,39 +120,21 @@ static QDF_STATUS target_if_vdev_mgr_rsp_timer_start(
|
|||||||
if (qdf_atomic_test_and_set_bit(set_bit, &vdev_rsp->rsp_status)) {
|
if (qdf_atomic_test_and_set_bit(set_bit, &vdev_rsp->rsp_status)) {
|
||||||
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
||||||
wlan_psoc_get_id(psoc),
|
wlan_psoc_get_id(psoc),
|
||||||
vdev_id, string_from_rsp_bit(set_bit),
|
vdev_rsp->vdev_id, string_from_rsp_bit(set_bit),
|
||||||
string_from_rsp_bit(set_bit));
|
string_from_rsp_bit(set_bit));
|
||||||
target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
|
target_if_vdev_mgr_assert_mgmt(psoc, vdev_rsp->vdev_id);
|
||||||
set_bit);
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, set_bit);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, set_bit);
|
|
||||||
|
|
||||||
qdf_atomic_set_bit(set_bit, &vdev_rsp->rsp_status);
|
qdf_atomic_set_bit(set_bit, &vdev_rsp->rsp_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reference taken for timer start, will be released with stop */
|
/* reference taken for timer start, will be released with stop */
|
||||||
wlan_objmgr_vdev_get_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
wlan_objmgr_psoc_get_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
|
||||||
qdf_timer_start(&vdev_rsp->rsp_timer, vdev_rsp->expire_time);
|
qdf_timer_start(&vdev_rsp->rsp_timer, vdev_rsp->expire_time);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS target_if_vdev_mgr_rsp_timer_init(
|
|
||||||
struct wlan_objmgr_vdev *vdev,
|
|
||||||
qdf_timer_t *rsp_timer)
|
|
||||||
{
|
|
||||||
if (!vdev || !rsp_timer) {
|
|
||||||
mlme_err("Invalid input");
|
|
||||||
return QDF_STATUS_E_INVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
qdf_timer_init(NULL, rsp_timer,
|
|
||||||
target_if_vdev_mgr_rsp_timer_mgmt_cb,
|
|
||||||
(void *)vdev, QDF_TIMER_TYPE_WAKE_APPS);
|
|
||||||
mlme_debug("VDEV_%d: Response timer initialized",
|
|
||||||
wlan_vdev_get_id(vdev));
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wmi_unified
|
struct wmi_unified
|
||||||
*target_if_vdev_mgr_wmi_handle_get(struct wlan_objmgr_vdev *vdev)
|
*target_if_vdev_mgr_wmi_handle_get(struct wlan_objmgr_vdev *vdev)
|
||||||
@@ -390,12 +365,29 @@ static QDF_STATUS target_if_vdev_mgr_create_send(
|
|||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
uint8_t vap_addr[QDF_MAC_ADDR_SIZE] = {0};
|
uint8_t vap_addr[QDF_MAC_ADDR_SIZE] = {0};
|
||||||
|
struct wlan_lmac_if_mlme_tx_ops *txops;
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
|
||||||
if (!vdev || !param) {
|
if (!vdev || !param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("Failed to get psoc for VDEV_%d",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
txops = wlan_mlme_get_lmac_tx_ops(psoc);
|
||||||
|
if (!txops || !txops->psoc_vdev_rsp_timer_init) {
|
||||||
|
mlme_err("Failed to get mlme txrx_ops for VDEV_%d PSOC_%d",
|
||||||
|
wlan_vdev_get_id(vdev), wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
wmi_handle = target_if_vdev_mgr_wmi_handle_get(vdev);
|
wmi_handle = target_if_vdev_mgr_wmi_handle_get(vdev);
|
||||||
if (!wmi_handle) {
|
if (!wmi_handle) {
|
||||||
mlme_err("Failed to get WMI handle!");
|
mlme_err("Failed to get WMI handle!");
|
||||||
@@ -406,6 +398,10 @@ static QDF_STATUS target_if_vdev_mgr_create_send(
|
|||||||
status = wmi_unified_vdev_create_send(wmi_handle, vap_addr,
|
status = wmi_unified_vdev_create_send(wmi_handle, vap_addr,
|
||||||
param);
|
param);
|
||||||
|
|
||||||
|
vdev_id = wlan_vdev_get_id(vdev);
|
||||||
|
if (QDF_IS_STATUS_SUCCESS(status))
|
||||||
|
status = txops->psoc_vdev_rsp_timer_init(psoc, vdev_id);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,8 +413,8 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
|||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
if (!vdev || !param) {
|
if (!vdev || !param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -434,24 +430,27 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
|||||||
vdev_id = wlan_vdev_get_id(vdev);
|
vdev_id = wlan_vdev_get_id(vdev);
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
mlme_err("VEV_%d: PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||||
return QDF_STATUS_E_FAILURE;
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
target_if_wake_lock_timeout_acquire(vdev, START_WAKELOCK);
|
|
||||||
|
|
||||||
vdev_rsp->expire_time = START_RESPONSE_TIMER;
|
vdev_rsp->expire_time = START_RESPONSE_TIMER;
|
||||||
|
target_if_wake_lock_timeout_acquire(vdev, START_WAKELOCK);
|
||||||
|
|
||||||
if (param->is_restart)
|
if (param->is_restart)
|
||||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||||
RESTART_RESPONSE_BIT);
|
RESTART_RESPONSE_BIT);
|
||||||
else
|
else
|
||||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||||
START_RESPONSE_BIT);
|
START_RESPONSE_BIT);
|
||||||
|
|
||||||
status = wmi_unified_vdev_start_send(wmi_handle, param);
|
status = wmi_unified_vdev_start_send(wmi_handle, param);
|
||||||
@@ -460,13 +459,12 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
|||||||
vdev_rsp->expire_time = 0;
|
vdev_rsp->expire_time = 0;
|
||||||
target_if_wake_lock_timeout_release(vdev, START_WAKELOCK);
|
target_if_wake_lock_timeout_release(vdev, START_WAKELOCK);
|
||||||
if (param->is_restart)
|
if (param->is_restart)
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
RESTART_RESPONSE_BIT);
|
RESTART_RESPONSE_BIT);
|
||||||
else
|
else
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
START_RESPONSE_BIT);
|
START_RESPONSE_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,9 +490,9 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
|||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
if (!vdev || !param) {
|
if (!vdev || !param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -510,19 +508,22 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
|||||||
vdev_id = wlan_vdev_get_id(vdev);
|
vdev_id = wlan_vdev_get_id(vdev);
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||||
return QDF_STATUS_E_FAILURE;
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_if_wake_lock_timeout_acquire(vdev, DELETE_WAKELOCK);
|
target_if_wake_lock_timeout_acquire(vdev, DELETE_WAKELOCK);
|
||||||
vdev_rsp->expire_time = DELETE_RESPONSE_TIMER;
|
vdev_rsp->expire_time = DELETE_RESPONSE_TIMER;
|
||||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||||
DELETE_RESPONSE_BIT);
|
DELETE_RESPONSE_BIT);
|
||||||
|
|
||||||
status = wmi_unified_vdev_delete_send(wmi_handle, param->vdev_id);
|
status = wmi_unified_vdev_delete_send(wmi_handle, param->vdev_id);
|
||||||
@@ -534,7 +535,7 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
|||||||
wmi_service_sync_delete_cmds) ||
|
wmi_service_sync_delete_cmds) ||
|
||||||
wlan_psoc_nif_feat_cap_get(psoc,
|
wlan_psoc_nif_feat_cap_get(psoc,
|
||||||
WLAN_SOC_F_TESTMODE_ENABLE)) {
|
WLAN_SOC_F_TESTMODE_ENABLE)) {
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
DELETE_RESPONSE_BIT);
|
DELETE_RESPONSE_BIT);
|
||||||
target_if_vdev_mgr_delete_response_send(vdev, rx_ops);
|
target_if_vdev_mgr_delete_response_send(vdev, rx_ops);
|
||||||
}
|
}
|
||||||
@@ -542,10 +543,9 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
|||||||
target_if_wake_lock_timeout_release(vdev, DELETE_WAKELOCK);
|
target_if_wake_lock_timeout_release(vdev, DELETE_WAKELOCK);
|
||||||
vdev_rsp->expire_time = 0;
|
vdev_rsp->expire_time = 0;
|
||||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
DELETE_RESPONSE_BIT);
|
DELETE_RESPONSE_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,8 +557,9 @@ static QDF_STATUS target_if_vdev_mgr_stop_send(
|
|||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
|
|
||||||
if (!vdev || !param) {
|
if (!vdev || !param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -574,31 +575,31 @@ static QDF_STATUS target_if_vdev_mgr_stop_send(
|
|||||||
vdev_id = wlan_vdev_get_id(vdev);
|
vdev_id = wlan_vdev_get_id(vdev);
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
wlan_psoc_get_id(psoc));
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||||
return QDF_STATUS_E_FAILURE;
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_if_wake_lock_timeout_acquire(vdev, STOP_WAKELOCK);
|
target_if_wake_lock_timeout_acquire(vdev, STOP_WAKELOCK);
|
||||||
vdev_rsp->expire_time = STOP_RESPONSE_TIMER;
|
vdev_rsp->expire_time = STOP_RESPONSE_TIMER;
|
||||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp, STOP_RESPONSE_BIT);
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp, STOP_RESPONSE_BIT);
|
||||||
|
|
||||||
status = wmi_unified_vdev_stop_send(wmi_handle, param->vdev_id);
|
status = wmi_unified_vdev_stop_send(wmi_handle, param->vdev_id);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
vdev_rsp->expire_time = 0;
|
vdev_rsp->expire_time = 0;
|
||||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||||
target_if_wake_lock_timeout_release(vdev, STOP_WAKELOCK);
|
target_if_wake_lock_timeout_release(vdev, STOP_WAKELOCK);
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
STOP_RESPONSE_BIT);
|
STOP_RESPONSE_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -837,15 +838,16 @@ static int32_t target_if_vdev_mgr_multi_vdev_restart_get_ref(
|
|||||||
{
|
{
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct wlan_objmgr_vdev *tvdev;
|
struct wlan_objmgr_vdev *tvdev;
|
||||||
struct vdev_response_timer *vdev_rsp = NULL;
|
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
uint32_t vdev_idx;
|
int32_t vdev_idx = -1;
|
||||||
int32_t last_vdev_idx = -1;
|
int32_t last_vdev_idx = -1;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
psoc = wlan_pdev_get_psoc(pdev);
|
psoc = wlan_pdev_get_psoc(pdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
if (!(rx_ops && rx_ops->vdev_mgr_get_response_timer_info)) {
|
|
||||||
mlme_err("No Rx Ops");
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d: No Rx Ops", vdev_idx);
|
||||||
return last_vdev_idx;
|
return last_vdev_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -860,15 +862,16 @@ static int32_t target_if_vdev_mgr_multi_vdev_restart_get_ref(
|
|||||||
return last_vdev_idx;
|
return last_vdev_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
last_vdev_idx = vdev_idx;
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||||
vdev_rsp =
|
vdev_idx);
|
||||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("VDEV_%d: No Rx Ops", vdev_idx);
|
mlme_err("VDEV_%d PSOC_%d No vdev rsp timer",
|
||||||
|
vdev_idx, wlan_psoc_get_id(psoc));
|
||||||
return last_vdev_idx;
|
return last_vdev_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_if_vdev_mgr_rsp_timer_start(tvdev, vdev_rsp,
|
last_vdev_idx = vdev_idx;
|
||||||
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||||
RESTART_RESPONSE_BIT);
|
RESTART_RESPONSE_BIT);
|
||||||
vdev_timer_started[vdev_idx] = true;
|
vdev_timer_started[vdev_idx] = true;
|
||||||
}
|
}
|
||||||
@@ -886,19 +889,30 @@ static void target_if_vdev_mgr_multi_vdev_restart_rel_ref(
|
|||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct wlan_objmgr_vdev *tvdev;
|
struct wlan_objmgr_vdev *tvdev;
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct vdev_response_timer *vdev_rsp = NULL;
|
|
||||||
uint32_t vdev_idx;
|
uint32_t vdev_idx;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
psoc = wlan_pdev_get_psoc(pdev);
|
psoc = wlan_pdev_get_psoc(pdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
|
mlme_err("VDEV_%d: No Rx Ops", last_vdev_idx);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (vdev_idx = 0; vdev_idx <= last_vdev_idx; vdev_idx++) {
|
for (vdev_idx = 0; vdev_idx <= last_vdev_idx; vdev_idx++) {
|
||||||
tvdev = vdev_list[vdev_idx];
|
tvdev = vdev_list[vdev_idx];
|
||||||
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||||
|
vdev_idx);
|
||||||
|
if (!vdev_rsp) {
|
||||||
|
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer",
|
||||||
|
vdev_idx, wlan_psoc_get_id(psoc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
vdev_rsp =
|
if (vdev_timer_started[vdev_idx]) {
|
||||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
|
||||||
if (vdev_rsp && vdev_timer_started[vdev_idx]) {
|
|
||||||
target_if_vdev_mgr_rsp_timer_stop(
|
target_if_vdev_mgr_rsp_timer_stop(
|
||||||
tvdev, vdev_rsp,
|
psoc, vdev_rsp,
|
||||||
RESTART_RESPONSE_BIT);
|
RESTART_RESPONSE_BIT);
|
||||||
vdev_timer_started[vdev_idx] = false;
|
vdev_timer_started[vdev_idx] = false;
|
||||||
}
|
}
|
||||||
@@ -1018,8 +1032,8 @@ static QDF_STATUS target_if_vdev_mgr_peer_delete_all_send(
|
|||||||
struct wmi_unified *wmi_handle;
|
struct wmi_unified *wmi_handle;
|
||||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
|
struct vdev_response_timer *vdev_rsp;
|
||||||
|
|
||||||
if (!vdev || !param) {
|
if (!vdev || !param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -1036,29 +1050,30 @@ static QDF_STATUS target_if_vdev_mgr_peer_delete_all_send(
|
|||||||
psoc = wlan_vdev_get_psoc(vdev);
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||||
|
|
||||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
mlme_err("VDEV_%d PSOC_%d No Rx Ops", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||||
if (!vdev_rsp) {
|
if (!vdev_rsp) {
|
||||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||||
return QDF_STATUS_E_FAILURE;
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_rsp->expire_time = PEER_DELETE_ALL_RESPONSE_TIMER;
|
vdev_rsp->expire_time = PEER_DELETE_ALL_RESPONSE_TIMER;
|
||||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||||
PEER_DELETE_ALL_RESPONSE_BIT);
|
PEER_DELETE_ALL_RESPONSE_BIT);
|
||||||
|
|
||||||
status = wmi_unified_peer_delete_all_send(wmi_handle, param);
|
status = wmi_unified_peer_delete_all_send(wmi_handle, param);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
vdev_rsp->expire_time = 0;
|
vdev_rsp->expire_time = 0;
|
||||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||||
PEER_DELETE_ALL_RESPONSE_BIT);
|
PEER_DELETE_ALL_RESPONSE_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1147,13 +1162,17 @@ target_if_vdev_mgr_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
|
|||||||
target_if_vdev_set_tx_rx_decap_type;
|
target_if_vdev_set_tx_rx_decap_type;
|
||||||
mlme_tx_ops->vdev_sta_ps_param_send =
|
mlme_tx_ops->vdev_sta_ps_param_send =
|
||||||
target_if_vdev_mgr_sta_ps_param_send;
|
target_if_vdev_mgr_sta_ps_param_send;
|
||||||
mlme_tx_ops->vdev_mgr_rsp_timer_init =
|
mlme_tx_ops->psoc_vdev_rsp_timer_mod =
|
||||||
target_if_vdev_mgr_rsp_timer_init;
|
|
||||||
mlme_tx_ops->vdev_mgr_rsp_timer_mod =
|
|
||||||
target_if_vdev_mgr_rsp_timer_mod;
|
target_if_vdev_mgr_rsp_timer_mod;
|
||||||
mlme_tx_ops->peer_delete_all_send =
|
mlme_tx_ops->peer_delete_all_send =
|
||||||
target_if_vdev_mgr_peer_delete_all_send;
|
target_if_vdev_mgr_peer_delete_all_send;
|
||||||
target_if_vdev_register_tx_fils(mlme_tx_ops);
|
target_if_vdev_register_tx_fils(mlme_tx_ops);
|
||||||
|
|
||||||
|
mlme_tx_ops->psoc_vdev_rsp_timer_init =
|
||||||
|
target_if_psoc_vdev_rsp_timer_init;
|
||||||
|
mlme_tx_ops->psoc_vdev_rsp_timer_deinit =
|
||||||
|
target_if_psoc_vdev_rsp_timer_deinit;
|
||||||
|
mlme_tx_ops->psoc_vdev_rsp_timer_inuse =
|
||||||
|
target_if_psoc_vdev_rsp_timer_inuse;
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -256,6 +256,7 @@ typedef void (*wlan_objmgr_peer_status_handler)(
|
|||||||
* @WLAN_MISC_ID: power manager, PAPI, rate set, etc.
|
* @WLAN_MISC_ID: power manager, PAPI, rate set, etc.
|
||||||
* @WLAN_FWOL_NB_ID: fw offload northbound operations
|
* @WLAN_FWOL_NB_ID: fw offload northbound operations
|
||||||
* @WLAN_FWOL_SB_ID: fw offload southbound operations
|
* @WLAN_FWOL_SB_ID: fw offload southbound operations
|
||||||
|
* @WLAN_PSOC_TARGET_IF_ID PSOC related target_if operations
|
||||||
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
|
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
|
||||||
*/
|
*/
|
||||||
/* New value added to the enum must also be reflected in function
|
/* New value added to the enum must also be reflected in function
|
||||||
@@ -334,6 +335,7 @@ typedef enum {
|
|||||||
WLAN_MISC_ID = 69,
|
WLAN_MISC_ID = 69,
|
||||||
WLAN_FWOL_NB_ID = 70,
|
WLAN_FWOL_NB_ID = 70,
|
||||||
WLAN_FWOL_SB_ID = 71,
|
WLAN_FWOL_SB_ID = 71,
|
||||||
|
WLAN_PSOC_TARGET_IF_ID = 72,
|
||||||
WLAN_REF_ID_MAX,
|
WLAN_REF_ID_MAX,
|
||||||
} wlan_objmgr_ref_dbgid;
|
} wlan_objmgr_ref_dbgid;
|
||||||
|
|
||||||
|
@@ -185,8 +185,6 @@ enum wlan_mlme_cfg_id;
|
|||||||
* @get_wifi_iface_id: function to get wifi interface id
|
* @get_wifi_iface_id: function to get wifi interface id
|
||||||
* @vdev_mlme_attach: function to register events
|
* @vdev_mlme_attach: function to register events
|
||||||
* @vdev_mlme_detach: function to unregister events
|
* @vdev_mlme_detach: function to unregister events
|
||||||
* @vdev_mgr_rsp_timer_init: function to initialize vdev response timer
|
|
||||||
* @vdev_mgr_rsp_timer_mod: function to timer_mod vdev response timer
|
|
||||||
* @vdev_create_send: function to send vdev create
|
* @vdev_create_send: function to send vdev create
|
||||||
* @vdev_start_send: function to send vdev start
|
* @vdev_start_send: function to send vdev start
|
||||||
* @vdev_up_send: function to send vdev up
|
* @vdev_up_send: function to send vdev up
|
||||||
@@ -207,18 +205,16 @@ enum wlan_mlme_cfg_id;
|
|||||||
* @vdev_bcn_miss_offload_send: function to send beacon miss offload
|
* @vdev_bcn_miss_offload_send: function to send beacon miss offload
|
||||||
* @vdev_sta_ps_param_send: function to sent STA power save config
|
* @vdev_sta_ps_param_send: function to sent STA power save config
|
||||||
* @peer_delete_all_send: function to send vdev delete all peer request
|
* @peer_delete_all_send: function to send vdev delete all peer request
|
||||||
|
* @psoc_vdev_rsp_timer_init: function to initialize psoc vdev response timer
|
||||||
|
* @psoc_vdev_rsp_timer_deinit: function to deinitialize psoc vdev rsp timer
|
||||||
|
* @psoc_vdev_rsp_timer_inuse: function to determine whether the vdev rsp
|
||||||
|
* timer is inuse or not
|
||||||
|
* @psoc_vdev_rsp_timer_mod: function to modify the time of vdev rsp timer
|
||||||
*/
|
*/
|
||||||
struct wlan_lmac_if_mlme_tx_ops {
|
struct wlan_lmac_if_mlme_tx_ops {
|
||||||
uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
|
uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
|
||||||
QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
|
QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
|
||||||
QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
|
QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
|
||||||
QDF_STATUS (*vdev_mgr_rsp_timer_init)(
|
|
||||||
struct wlan_objmgr_vdev *vdev,
|
|
||||||
qdf_timer_t *rsp_timer);
|
|
||||||
QDF_STATUS (*vdev_mgr_rsp_timer_mod)(
|
|
||||||
struct wlan_objmgr_vdev *vdev,
|
|
||||||
struct vdev_response_timer *vdev_rsp,
|
|
||||||
int mseconds);
|
|
||||||
QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
|
QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
|
||||||
struct vdev_create_params *param);
|
struct vdev_create_params *param);
|
||||||
QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
|
QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
|
||||||
@@ -272,6 +268,20 @@ struct wlan_lmac_if_mlme_tx_ops {
|
|||||||
QDF_STATUS (*peer_delete_all_send)(
|
QDF_STATUS (*peer_delete_all_send)(
|
||||||
struct wlan_objmgr_vdev *vdev,
|
struct wlan_objmgr_vdev *vdev,
|
||||||
struct peer_delete_all_params *param);
|
struct peer_delete_all_params *param);
|
||||||
|
QDF_STATUS (*psoc_vdev_rsp_timer_init)(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
void (*psoc_vdev_rsp_timer_deinit)(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
QDF_STATUS (*psoc_vdev_rsp_timer_inuse)(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
|
QDF_STATUS (*psoc_vdev_rsp_timer_mod)(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
int mseconds);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1489,7 +1499,6 @@ struct wlan_lmac_if_dfs_rx_ops {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
|
* struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
|
||||||
* @vdev_mgr_get_response_timer_info: function to get response timer info
|
|
||||||
* @vdev_mgr_start_response: function to handle start response
|
* @vdev_mgr_start_response: function to handle start response
|
||||||
* @vdev_mgr_stop_response: function to handle stop response
|
* @vdev_mgr_stop_response: function to handle stop response
|
||||||
* @vdev_mgr_delete_response: function to handle delete response
|
* @vdev_mgr_delete_response: function to handle delete response
|
||||||
@@ -1499,10 +1508,10 @@ struct wlan_lmac_if_dfs_rx_ops {
|
|||||||
* @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
|
* @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
|
||||||
* event
|
* event
|
||||||
* @vdev_mgr_get_wakelock_info: function to get wakelock info
|
* @vdev_mgr_get_wakelock_info: function to get wakelock info
|
||||||
|
* @psoc_get_vdev_response_timer_info: function to get vdev response timer
|
||||||
|
* structure for a specific vdev id
|
||||||
*/
|
*/
|
||||||
struct wlan_lmac_if_mlme_rx_ops {
|
struct wlan_lmac_if_mlme_rx_ops {
|
||||||
struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)(
|
|
||||||
struct wlan_objmgr_vdev *vdev);
|
|
||||||
QDF_STATUS (*vdev_mgr_start_response)(
|
QDF_STATUS (*vdev_mgr_start_response)(
|
||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct vdev_start_response *rsp);
|
struct vdev_start_response *rsp);
|
||||||
@@ -1525,6 +1534,9 @@ struct wlan_lmac_if_mlme_rx_ops {
|
|||||||
struct vdev_mlme_wakelock *(*vdev_mgr_get_wakelock_info)(
|
struct vdev_mlme_wakelock *(*vdev_mgr_get_wakelock_info)(
|
||||||
struct wlan_objmgr_vdev *vdev);
|
struct wlan_objmgr_vdev *vdev);
|
||||||
#endif
|
#endif
|
||||||
|
struct vdev_response_timer *(*psoc_get_vdev_response_timer_info)(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef WLAN_SUPPORT_GREEN_AP
|
#ifdef WLAN_SUPPORT_GREEN_AP
|
||||||
|
@@ -21,15 +21,19 @@
|
|||||||
#define _WLAN_PSOC_MLME_H_
|
#define _WLAN_PSOC_MLME_H_
|
||||||
|
|
||||||
#include <wlan_ext_mlme_obj_types.h>
|
#include <wlan_ext_mlme_obj_types.h>
|
||||||
|
#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
|
||||||
|
#include <qdf_timer.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct psoc_mlme_obj - PSOC MLME component object
|
* struct psoc_mlme_obj - PSoC MLME component object
|
||||||
* @psoc: PSOC object
|
* @psoc: PSoC object
|
||||||
* @ext_psoc_ptr: extended psoc mlme pointer
|
* @ext_psoc_ptr: PSoC legacy pointer
|
||||||
|
* @psoc_vdev_rt: PSoC Vdev response timer
|
||||||
*/
|
*/
|
||||||
struct psoc_mlme_obj {
|
struct psoc_mlme_obj {
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
mlme_psoc_ext_t *ext_psoc_ptr;
|
mlme_psoc_ext_t *ext_psoc_ptr;
|
||||||
|
struct vdev_response_timer psoc_vdev_rt[WLAN_UMAC_PSOC_MAX_VDEVS];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -567,7 +567,6 @@ struct vdev_mlme_obj {
|
|||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
struct vdev_mlme_ops *ops;
|
struct vdev_mlme_ops *ops;
|
||||||
mlme_vdev_ext_t *ext_vdev_ptr;
|
mlme_vdev_ext_t *ext_vdev_ptr;
|
||||||
struct vdev_response_timer vdev_rt;
|
|
||||||
#ifdef FEATURE_VDEV_RSP_WAKELOCK
|
#ifdef FEATURE_VDEV_RSP_WAKELOCK
|
||||||
struct vdev_mlme_wakelock vdev_wakelock;
|
struct vdev_mlme_wakelock vdev_wakelock;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -40,4 +40,12 @@ QDF_STATUS wlan_psoc_mlme_init(void);
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS wlan_psoc_mlme_deinit(void);
|
QDF_STATUS wlan_psoc_mlme_deinit(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mlme_psoc_get_priv: get MLME priv object from psoc object
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
*
|
||||||
|
* Return: pointer to MLME psoc private object
|
||||||
|
*/
|
||||||
|
struct psoc_mlme_obj *mlme_psoc_get_priv(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -26,6 +26,20 @@
|
|||||||
#include <wlan_psoc_mlme_main.h>
|
#include <wlan_psoc_mlme_main.h>
|
||||||
#include <wlan_psoc_mlme_api.h>
|
#include <wlan_psoc_mlme_api.h>
|
||||||
|
|
||||||
|
struct psoc_mlme_obj *mlme_psoc_get_priv(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
struct psoc_mlme_obj *psoc_mlme;
|
||||||
|
|
||||||
|
psoc_mlme = wlan_objmgr_psoc_get_comp_private_obj(psoc,
|
||||||
|
WLAN_UMAC_COMP_MLME);
|
||||||
|
if (!psoc_mlme) {
|
||||||
|
mlme_err("PSOC MLME component object is NULL");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return psoc_mlme;
|
||||||
|
}
|
||||||
|
|
||||||
static QDF_STATUS mlme_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc,
|
static QDF_STATUS mlme_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
@@ -67,10 +81,9 @@ static QDF_STATUS mlme_psoc_obj_destroy_handler(struct wlan_objmgr_psoc *psoc,
|
|||||||
{
|
{
|
||||||
struct psoc_mlme_obj *psoc_mlme;
|
struct psoc_mlme_obj *psoc_mlme;
|
||||||
|
|
||||||
psoc_mlme = wlan_objmgr_psoc_get_comp_private_obj(psoc,
|
psoc_mlme = mlme_psoc_get_priv(psoc);
|
||||||
WLAN_UMAC_COMP_MLME);
|
|
||||||
if (!psoc_mlme) {
|
if (!psoc_mlme) {
|
||||||
mlme_err(" PSOC MLME component object is NULL");
|
mlme_err("PSOC MLME component object is NULL");
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,23 +22,28 @@
|
|||||||
#include <wlan_objmgr_global_obj.h>
|
#include <wlan_objmgr_global_obj.h>
|
||||||
#include <wlan_objmgr_vdev_obj.h>
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
#include <wlan_mlme_dbg.h>
|
#include <wlan_mlme_dbg.h>
|
||||||
#include "include/wlan_mlme_cmn.h"
|
#include <include/wlan_mlme_cmn.h>
|
||||||
#include "include/wlan_vdev_mlme.h"
|
#include <include/wlan_vdev_mlme.h>
|
||||||
#include "include/wlan_pdev_mlme.h"
|
#include <include/wlan_pdev_mlme.h>
|
||||||
#include "vdev_mgr/core/src/vdev_mlme_sm.h"
|
#include <vdev_mgr/core/src/vdev_mlme_sm.h>
|
||||||
#include "wlan_pdev_mlme_api.h"
|
#include <wlan_pdev_mlme_api.h>
|
||||||
#include "wlan_vdev_mlme_api.h"
|
#include <wlan_vdev_mlme_api.h>
|
||||||
#include "wlan_serialization_api.h"
|
#include <wlan_serialization_api.h>
|
||||||
#include "wlan_utility.h"
|
#include <wlan_utility.h>
|
||||||
#include <cdp_txrx_cmn.h>
|
#include <cdp_txrx_cmn.h>
|
||||||
#include "target_if_vdev_mgr_wake_lock.h"
|
#include <target_if_vdev_mgr_wake_lock.h>
|
||||||
|
#include <wlan_lmac_if_def.h>
|
||||||
|
#include <target_if_vdev_mgr_tx_ops.h>
|
||||||
|
|
||||||
static QDF_STATUS mlme_vdev_obj_create_handler(struct wlan_objmgr_vdev *vdev,
|
static QDF_STATUS mlme_vdev_obj_create_handler(struct wlan_objmgr_vdev *vdev,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
struct vdev_mlme_obj *vdev_mlme;
|
struct vdev_mlme_obj *vdev_mlme;
|
||||||
struct wlan_objmgr_pdev *pdev;
|
struct wlan_objmgr_pdev *pdev;
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct pdev_mlme_obj *pdev_mlme;
|
struct pdev_mlme_obj *pdev_mlme;
|
||||||
|
struct wlan_lmac_if_mlme_tx_ops *txops;
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
mlme_err(" VDEV is NULL");
|
mlme_err(" VDEV is NULL");
|
||||||
@@ -51,9 +56,33 @@ static QDF_STATUS mlme_vdev_obj_create_handler(struct wlan_objmgr_vdev *vdev,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1st check whether for this vdev any vdev commands are pending for
|
||||||
|
* response.
|
||||||
|
*/
|
||||||
|
psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("PSOC is NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
txops = target_if_vdev_mgr_get_tx_ops(psoc);
|
||||||
|
if (!txops || !txops->psoc_vdev_rsp_timer_inuse) {
|
||||||
|
mlme_err("Failed to get mlme txrx_ops PSOC_%d",
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = txops->psoc_vdev_rsp_timer_inuse(psoc, wlan_vdev_get_id(vdev));
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
mlme_err("The vdev response is pending for VDEV_%d status:%d",
|
||||||
|
wlan_vdev_get_id(vdev), status);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
pdev_mlme = wlan_pdev_mlme_get_cmpt_obj(pdev);
|
pdev_mlme = wlan_pdev_mlme_get_cmpt_obj(pdev);
|
||||||
if (!pdev_mlme) {
|
if (!pdev_mlme) {
|
||||||
mlme_err(" PDEV MLME is NULL");
|
mlme_err("PDEV MLME is NULL");
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,15 +134,6 @@ init_failed:
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mlme_vdev_obj_timer_deinit(
|
|
||||||
struct vdev_mlme_obj *vdev_mlme)
|
|
||||||
{
|
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
|
|
||||||
vdev_rsp = &vdev_mlme->vdev_rt;
|
|
||||||
qdf_timer_free(&vdev_rsp->rsp_timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static QDF_STATUS mlme_vdev_obj_destroy_handler(struct wlan_objmgr_vdev *vdev,
|
static QDF_STATUS mlme_vdev_obj_destroy_handler(struct wlan_objmgr_vdev *vdev,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
@@ -143,8 +163,6 @@ static QDF_STATUS mlme_vdev_obj_destroy_handler(struct wlan_objmgr_vdev *vdev,
|
|||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
mlme_vdev_obj_timer_deinit(vdev_mlme);
|
|
||||||
|
|
||||||
mlme_vdev_sm_destroy(vdev_mlme);
|
mlme_vdev_sm_destroy(vdev_mlme);
|
||||||
|
|
||||||
mlme_vdev_ops_ext_hdl_destroy(vdev_mlme);
|
mlme_vdev_ops_ext_hdl_destroy(vdev_mlme);
|
||||||
|
@@ -81,16 +81,22 @@ static inline char *string_from_rsp_bit(enum wlan_vdev_mgr_tgt_if_rsp_bit bit)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct vdev_response_timer - vdev mgmt response ops timer
|
* struct vdev_response_timer - vdev mgmt response ops timer
|
||||||
|
* @psoc: Object manager psoc
|
||||||
* @rsp_timer: VDEV MLME mgmt response timer
|
* @rsp_timer: VDEV MLME mgmt response timer
|
||||||
* @rsp_status: variable to check response status
|
* @rsp_status: variable to check response status
|
||||||
* @expire_time: time to expire timer
|
* @expire_time: time to expire timer
|
||||||
* @timer_status: status of timer
|
* @timer_status: status of timer
|
||||||
|
* @rsp_timer_inuse: Status bit to inform whether the rsp timer is inuse
|
||||||
|
* @vdev_id: vdev object id
|
||||||
*/
|
*/
|
||||||
struct vdev_response_timer {
|
struct vdev_response_timer {
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
qdf_timer_t rsp_timer;
|
qdf_timer_t rsp_timer;
|
||||||
unsigned long rsp_status;
|
unsigned long rsp_status;
|
||||||
uint32_t expire_time;
|
uint32_t expire_time;
|
||||||
QDF_STATUS timer_status;
|
QDF_STATUS timer_status;
|
||||||
|
qdf_atomic_t rsp_timer_inuse;
|
||||||
|
uint8_t vdev_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -28,19 +28,23 @@
|
|||||||
#include <wlan_mlme_dbg.h>
|
#include <wlan_mlme_dbg.h>
|
||||||
#include <wlan_vdev_mlme_api.h>
|
#include <wlan_vdev_mlme_api.h>
|
||||||
#include <target_if_vdev_mgr_tx_ops.h>
|
#include <target_if_vdev_mgr_tx_ops.h>
|
||||||
|
#include <wlan_psoc_mlme_main.h>
|
||||||
|
#include <include/wlan_psoc_mlme.h>
|
||||||
|
|
||||||
static struct vdev_response_timer *
|
static struct vdev_response_timer *
|
||||||
tgt_vdev_mgr_get_response_timer_info(struct wlan_objmgr_vdev *vdev)
|
tgt_vdev_mgr_get_response_timer_info(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id)
|
||||||
{
|
{
|
||||||
struct vdev_mlme_obj *vdev_mlme;
|
struct psoc_mlme_obj *psoc_mlme;
|
||||||
|
|
||||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
psoc_mlme = mlme_psoc_get_priv(psoc);
|
||||||
if (!vdev_mlme) {
|
if (!psoc_mlme) {
|
||||||
mlme_err("VDEV_%d: VDEV_MLME is NULL", wlan_vdev_get_id(vdev));
|
mlme_err("VDEV_%d PSOC_%d PSOC_MLME is NULL", vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &vdev_mlme->vdev_rt;
|
return &psoc_mlme->psoc_vdev_rt[vdev_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS tgt_vdev_mgr_start_response_handler(
|
static QDF_STATUS tgt_vdev_mgr_start_response_handler(
|
||||||
@@ -65,7 +69,8 @@ static QDF_STATUS tgt_vdev_mgr_start_response_handler(
|
|||||||
|
|
||||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
if (!vdev_mlme) {
|
if (!vdev_mlme) {
|
||||||
mlme_err("VDEV_%d: VDEV_MLME is NULL", rsp->vdev_id);
|
mlme_err("VDEV_%d PSOC_%d VDEV_MLME is NULL", rsp->vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
goto tgt_vdev_mgr_start_response_handler_end;
|
goto tgt_vdev_mgr_start_response_handler_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +106,8 @@ static QDF_STATUS tgt_vdev_mgr_stop_response_handler(
|
|||||||
|
|
||||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
if (!vdev_mlme) {
|
if (!vdev_mlme) {
|
||||||
mlme_err("VDEV_%d: VDEV_MLME is NULL", rsp->vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d VDEV_MLME is NULL", rsp->vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
goto tgt_vdev_mgr_stop_response_handler_end;
|
goto tgt_vdev_mgr_stop_response_handler_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +144,8 @@ static QDF_STATUS tgt_vdev_mgr_delete_response_handler(
|
|||||||
|
|
||||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
if (!vdev_mlme) {
|
if (!vdev_mlme) {
|
||||||
mlme_err("VDEV_%d: VDEV_MLME is NULL", rsp->vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d VDEV_MLME is NULL", rsp->vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
goto tgt_vdev_mgr_delete_response_handler_end;
|
goto tgt_vdev_mgr_delete_response_handler_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +183,8 @@ static QDF_STATUS tgt_vdev_mgr_peer_delete_all_response_handler(
|
|||||||
|
|
||||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
if (!vdev_mlme) {
|
if (!vdev_mlme) {
|
||||||
mlme_err("VDEV_%d: VDEV_MLME is NULL", rsp->vdev_id);
|
mlme_err("VDEV_%d: PSOC_%d VDEV_MLME is NULL", rsp->vdev_id,
|
||||||
|
wlan_psoc_get_id(psoc));
|
||||||
goto tgt_vdev_mgr_peer_delete_all_response_handler_end;
|
goto tgt_vdev_mgr_peer_delete_all_response_handler_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,8 +270,7 @@ void tgt_vdev_mgr_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
|
|||||||
tgt_vdev_mgr_delete_response_handler;
|
tgt_vdev_mgr_delete_response_handler;
|
||||||
mlme_rx_ops->vdev_mgr_peer_delete_all_response =
|
mlme_rx_ops->vdev_mgr_peer_delete_all_response =
|
||||||
tgt_vdev_mgr_peer_delete_all_response_handler;
|
tgt_vdev_mgr_peer_delete_all_response_handler;
|
||||||
mlme_rx_ops->vdev_mgr_get_response_timer_info =
|
mlme_rx_ops->psoc_get_vdev_response_timer_info =
|
||||||
tgt_vdev_mgr_get_response_timer_info;
|
tgt_vdev_mgr_get_response_timer_info;
|
||||||
|
|
||||||
tgt_vdev_mgr_reg_wakelock_info_rx_op(&rx_ops->mops);
|
tgt_vdev_mgr_reg_wakelock_info_rx_op(&rx_ops->mops);
|
||||||
}
|
}
|
||||||
|
@@ -63,7 +63,6 @@ QDF_STATUS tgt_vdev_mgr_create_send(
|
|||||||
enum wlan_op_subtype cdp_txrx_subtype;
|
enum wlan_op_subtype cdp_txrx_subtype;
|
||||||
uint32_t vdev_id;
|
uint32_t vdev_id;
|
||||||
uint8_t *vdev_addr;
|
uint8_t *vdev_addr;
|
||||||
struct vdev_response_timer *vdev_rsp;
|
|
||||||
|
|
||||||
if (!param) {
|
if (!param) {
|
||||||
mlme_err("Invalid input");
|
mlme_err("Invalid input");
|
||||||
@@ -73,25 +72,27 @@ QDF_STATUS tgt_vdev_mgr_create_send(
|
|||||||
vdev = mlme_obj->vdev;
|
vdev = mlme_obj->vdev;
|
||||||
vdev_id = wlan_vdev_get_id(vdev);
|
vdev_id = wlan_vdev_get_id(vdev);
|
||||||
txops = wlan_vdev_mlme_get_lmac_txops(vdev);
|
txops = wlan_vdev_mlme_get_lmac_txops(vdev);
|
||||||
if (!txops || !txops->vdev_create_send ||
|
if (!txops || !txops->vdev_create_send) {
|
||||||
!txops->vdev_mgr_rsp_timer_init) {
|
mlme_err("VDEV_%d No Tx Ops", vdev_id);
|
||||||
mlme_err("VDEV_%d: No Tx Ops", vdev_id);
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
if (!psoc) {
|
||||||
|
mlme_err("psoc object is NULL");
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = txops->vdev_create_send(vdev, param);
|
status = txops->vdev_create_send(vdev, param);
|
||||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
vdev_rsp = &mlme_obj->vdev_rt;
|
mlme_err("VDEV_%d PSOC_%d Tx Ops Error : %d", vdev_id,
|
||||||
txops->vdev_mgr_rsp_timer_init(vdev, &vdev_rsp->rsp_timer);
|
wlan_psoc_get_id(psoc), status);
|
||||||
} else {
|
|
||||||
mlme_err("VDEV_%d: Tx Ops Error : %d", vdev_id, status);
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
cdp_txrx_opmode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
|
cdp_txrx_opmode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
|
||||||
cdp_txrx_subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
|
cdp_txrx_subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
|
||||||
vdev_addr = wlan_vdev_mlme_get_macaddr(vdev);
|
vdev_addr = wlan_vdev_mlme_get_macaddr(vdev);
|
||||||
psoc = wlan_vdev_get_psoc(vdev);
|
|
||||||
pdev = wlan_vdev_get_pdev(vdev);
|
pdev = wlan_vdev_get_pdev(vdev);
|
||||||
soc_txrx_handle = wlan_psoc_get_dp_handle(psoc);
|
soc_txrx_handle = wlan_psoc_get_dp_handle(psoc);
|
||||||
pdev_txrx_handle = wlan_pdev_get_dp_handle(pdev);
|
pdev_txrx_handle = wlan_pdev_get_dp_handle(pdev);
|
||||||
@@ -107,7 +108,6 @@ QDF_STATUS tgt_vdev_mgr_create_send(
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
wlan_vdev_set_dp_handle(vdev, vdev_txrx_handle);
|
wlan_vdev_set_dp_handle(vdev, vdev_txrx_handle);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user