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:
@@ -51,33 +51,6 @@ static inline bool target_if_vdev_mgr_is_panic_allowed(void)
|
||||
}
|
||||
#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
|
||||
@@ -175,4 +148,12 @@ QDF_STATUS target_if_vdev_mgr_wmi_event_register(
|
||||
QDF_STATUS target_if_vdev_mgr_wmi_event_unregister(
|
||||
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__ */
|
||||
|
@@ -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
|
||||
* @vdev: pointer to objmgr vdev
|
||||
* @vdev_rsp: pointer to vdev mlme response timer
|
||||
* @set_bit: bit to be set
|
||||
* @PSOC: pointer to objmgr psoc
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: NA
|
||||
*/
|
||||
#ifdef VDEV_ASSERT_MANAGEMENT
|
||||
static inline void target_if_vdev_mgr_assert_mgmt(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
uint8_t set_bit)
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
#else
|
||||
static inline void target_if_vdev_mgr_assert_mgmt(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
uint8_t set_bit)
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
|
||||
{
|
||||
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
|
||||
* vdev manager operations
|
||||
* @vdev: pointer to vdev object
|
||||
* @vdev_rsp: pointer to response timer
|
||||
* @clear_bit: acton bit
|
||||
* @psoc: pointer to psoc object
|
||||
* @vdev_rsp: vdev response timer
|
||||
* @clear_bit: enum of wlan_vdev_mgr_tgt_if_rsp_bit
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
|
||||
*/
|
||||
QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
uint8_t clear_bit);
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit);
|
||||
|
||||
#endif /* __TARGET_IF_VDEV_MGR_TX_OPS_H__ */
|
||||
|
@@ -32,12 +32,10 @@
|
||||
#include <wlan_vdev_mlme_main.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_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct crash_inject param;
|
||||
struct wmi_unified *wmi_handle;
|
||||
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;
|
||||
uint16_t rsp_pos = RESPONSE_BIT_MAX;
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
mlme_debug("Response timer expired for VDEV %d", vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("Vdev response timer is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
psoc = vdev_rsp->psoc;
|
||||
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) {
|
||||
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||
mlme_err("No Rx Ops");
|
||||
return;
|
||||
}
|
||||
|
||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
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(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(
|
||||
PEER_DELETE_ALL_RESPONSE_BIT,
|
||||
&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;
|
||||
}
|
||||
|
||||
@@ -79,7 +86,7 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
||||
&vdev_rsp->rsp_status) ||
|
||||
qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
|
||||
&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;
|
||||
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
||||
&vdev_rsp->rsp_status)) {
|
||||
@@ -92,31 +99,28 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
||||
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);
|
||||
} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
|
||||
&vdev_rsp->rsp_status)) {
|
||||
rsp_pos = STOP_RESPONSE_BIT;
|
||||
stop_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
||||
stop_rsp.vdev_id = vdev_id;
|
||||
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
|
||||
|
||||
rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
|
||||
} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
|
||||
&vdev_rsp->rsp_status)) {
|
||||
del_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||
del_rsp.vdev_id = vdev_id;
|
||||
rsp_pos = DELETE_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_delete_response(psoc, &del_rsp);
|
||||
} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
|
||||
&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;
|
||||
|
||||
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_peer_delete_all_response(
|
||||
psoc,
|
||||
@@ -134,7 +138,7 @@ static void target_if_vdev_mgr_rsp_timer_cb(void *arg)
|
||||
}
|
||||
|
||||
/* 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) {
|
||||
mlme_err("PSOC_%d VDEV_%d: Self recovery, %s rsp timeout",
|
||||
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
|
||||
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)
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
if (!msg->bodyptr) {
|
||||
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;
|
||||
}
|
||||
@@ -198,12 +187,19 @@ static void
|
||||
target_if_vdev_mgr_rsp_cb_mc_ctx(void *arg)
|
||||
{
|
||||
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.reserved = SYS_MSG_COOKIE;
|
||||
msg.callback = target_if_vdev_mgr_rsp_timer_cb;
|
||||
msg.bodyptr = arg;
|
||||
msg.bodyptr = vdev_rsp;
|
||||
msg.bodyval = 0;
|
||||
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;
|
||||
|
||||
mlme_err("Could not enqueue timer to timer queue");
|
||||
if (vdev)
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
if (psoc)
|
||||
wlan_objmgr_psoc_release_ref(psoc, WLAN_PSOC_TARGET_IF_ID);
|
||||
}
|
||||
|
||||
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 vdev_start_response rsp = {0};
|
||||
wmi_host_vdev_start_resp vdev_start_resp;
|
||||
uint8_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
if (!scn || !data) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -274,35 +270,26 @@ static int target_if_vdev_mgr_start_response_handler(ol_scn_t scn,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
psoc,
|
||||
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);
|
||||
vdev_id = vdev_start_resp.vdev_id;
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("PSOC_%d VDEV_%d: VDEV RSP is NULL",
|
||||
psoc->soc_objmgr.psoc_id, vdev_start_resp.vdev_id);
|
||||
goto release_vdev_target_if_ref;
|
||||
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||
vdev_id, wlan_psoc_get_id(psoc));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (vdev_start_resp.resp_type == WMI_HOST_VDEV_RESTART_RESP_EVENT)
|
||||
status = target_if_vdev_mgr_rsp_timer_stop(
|
||||
vdev, vdev_rsp,
|
||||
psoc, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
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);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||
psoc->soc_objmgr.psoc_id, vdev_start_resp.vdev_id);
|
||||
goto release_vdev_target_if_ref;
|
||||
psoc->soc_objmgr.psoc_id, vdev_id);
|
||||
goto err;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
release_vdev_target_if_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
err:
|
||||
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};
|
||||
uint32_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
if (!scn || !data) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -363,37 +348,26 @@ static int target_if_vdev_mgr_stop_response_handler(ol_scn_t scn,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
psoc,
|
||||
vdev_id,
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
if (!vdev) {
|
||||
mlme_err("PSOC_%d: VDEV_%d is NULL", psoc->soc_objmgr.psoc_id,
|
||||
vdev_id);
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("vdev response timer is null VDEV_%d PSOC_%d",
|
||||
vdev_id, wlan_psoc_get_id(psoc));
|
||||
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_id);
|
||||
goto release_vdev_target_if_ref;
|
||||
}
|
||||
|
||||
status = target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
||||
status = target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||
STOP_RESPONSE_BIT);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||
psoc->soc_objmgr.psoc_id, vdev_id);
|
||||
goto release_vdev_target_if_ref;
|
||||
goto err;
|
||||
}
|
||||
|
||||
rsp.vdev_id = vdev_id;
|
||||
status = rx_ops->vdev_mgr_stop_response(psoc, &rsp);
|
||||
|
||||
release_vdev_target_if_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
err:
|
||||
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 wmi_host_vdev_delete_resp vdev_del_resp;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
if (!scn || !data) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -438,38 +411,28 @@ static int target_if_vdev_mgr_delete_response_handler(ol_scn_t scn,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_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_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||
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;
|
||||
}
|
||||
|
||||
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(
|
||||
vdev, vdev_rsp,
|
||||
psoc, vdev_rsp,
|
||||
DELETE_RESPONSE_BIT);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||
psoc->soc_objmgr.psoc_id, vdev_del_resp.vdev_id);
|
||||
goto release_vdev_target_if_ref;
|
||||
wlan_psoc_get_id(psoc), vdev_del_resp.vdev_id);
|
||||
goto err;
|
||||
}
|
||||
|
||||
rsp.vdev_id = vdev_del_resp.vdev_id;
|
||||
status = rx_ops->vdev_mgr_delete_response(psoc, &rsp);
|
||||
|
||||
release_vdev_target_if_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
err:
|
||||
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
|
||||
vdev_peer_del_all_resp;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
if (!scn || !data) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -518,41 +480,32 @@ static int target_if_vdev_mgr_peer_delete_all_response_handler(
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_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_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||
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;
|
||||
}
|
||||
|
||||
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(
|
||||
vdev, vdev_rsp,
|
||||
psoc,
|
||||
vdev_rsp,
|
||||
PEER_DELETE_ALL_RESPONSE_BIT);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("PSOC_%d VDEV_%d: VDE MGR RSP Timer stop failed",
|
||||
psoc->soc_objmgr.psoc_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.status = vdev_peer_del_all_resp.status;
|
||||
status = rx_ops->vdev_mgr_peer_delete_all_response(psoc, &rsp);
|
||||
|
||||
release_vdev_target_if_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
|
||||
err:
|
||||
return qdf_status_to_os_return(status);
|
||||
}
|
||||
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include <wlan_cmn.h>
|
||||
#include <wmi_unified_vdev_api.h>
|
||||
#include <cdp_txrx_ctrl.h>
|
||||
#include <target_if_psoc_timer_tx_ops.h>
|
||||
|
||||
static QDF_STATUS target_if_vdev_mgr_register_event_handler(
|
||||
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);
|
||||
}
|
||||
|
||||
static QDF_STATUS target_if_vdev_mgr_rsp_timer_mod(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
int mseconds)
|
||||
QDF_STATUS
|
||||
target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit)
|
||||
{
|
||||
if (!vdev || !vdev_rsp) {
|
||||
mlme_err("Invalid input");
|
||||
struct wlan_lmac_if_mlme_tx_ops *txops;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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)) {
|
||||
/*
|
||||
* 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);
|
||||
|
||||
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
|
||||
* 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_E_FAILURE;
|
||||
}
|
||||
|
||||
static QDF_STATUS target_if_vdev_mgr_rsp_timer_start(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
uint8_t set_bit)
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct vdev_response_timer *vdev_rsp,
|
||||
enum wlan_vdev_mgr_tgt_if_rsp_bit set_bit)
|
||||
{
|
||||
uint8_t vdev_id;
|
||||
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 */
|
||||
for (rsp_pos = START_RESPONSE_BIT; rsp_pos <= RESPONSE_BIT_MAX;
|
||||
rsp_pos++) {
|
||||
if (rsp_pos != set_bit) {
|
||||
if (qdf_atomic_test_bit(rsp_pos,
|
||||
&vdev_rsp->rsp_status)) {
|
||||
vdev_id = vdev_rsp->vdev_id;
|
||||
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
||||
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));
|
||||
target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
|
||||
rsp_pos);
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev,
|
||||
target_if_vdev_mgr_assert_mgmt(psoc,
|
||||
vdev_id);
|
||||
target_if_vdev_mgr_rsp_timer_stop(psoc,
|
||||
vdev_rsp,
|
||||
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)) {
|
||||
mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
|
||||
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));
|
||||
target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
|
||||
set_bit);
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, set_bit);
|
||||
target_if_vdev_mgr_assert_mgmt(psoc, vdev_rsp->vdev_id);
|
||||
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, set_bit);
|
||||
|
||||
qdf_atomic_set_bit(set_bit, &vdev_rsp->rsp_status);
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
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
|
||||
*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;
|
||||
struct wmi_unified *wmi_handle;
|
||||
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) {
|
||||
mlme_err("Invalid input");
|
||||
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);
|
||||
if (!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,
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -417,8 +413,8 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
||||
struct wmi_unified *wmi_handle;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
uint8_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
if (!vdev || !param) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -434,24 +430,27 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
||||
if (!rx_ops || !rx_ops->psoc_get_vdev_response_timer_info) {
|
||||
mlme_err("VEV_%d: PSOC_%d No Rx Ops", vdev_id,
|
||||
wlan_psoc_get_id(psoc));
|
||||
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) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||
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;
|
||||
target_if_wake_lock_timeout_acquire(vdev, START_WAKELOCK);
|
||||
|
||||
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);
|
||||
else
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
target_if_vdev_mgr_rsp_timer_start(psoc, vdev_rsp,
|
||||
START_RESPONSE_BIT);
|
||||
|
||||
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;
|
||||
target_if_wake_lock_timeout_release(vdev, START_WAKELOCK);
|
||||
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);
|
||||
else
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
||||
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp,
|
||||
START_RESPONSE_BIT);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -492,9 +490,9 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
||||
QDF_STATUS status;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wmi_unified *wmi_handle;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
uint8_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
if (!vdev || !param) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -510,19 +508,22 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
||||
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->vdev_mgr_get_response_timer_info(vdev);
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||
wlan_psoc_get_id(psoc));
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
target_if_wake_lock_timeout_acquire(vdev, DELETE_WAKELOCK);
|
||||
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);
|
||||
|
||||
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) ||
|
||||
wlan_psoc_nif_feat_cap_get(psoc,
|
||||
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);
|
||||
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);
|
||||
vdev_rsp->expire_time = 0;
|
||||
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);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -557,8 +557,9 @@ static QDF_STATUS target_if_vdev_mgr_stop_send(
|
||||
struct wmi_unified *wmi_handle;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
uint8_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
|
||||
if (!vdev || !param) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -574,31 +575,31 @@ static QDF_STATUS target_if_vdev_mgr_stop_send(
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
psoc = wlan_vdev_get_psoc(vdev);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
||||
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->vdev_mgr_get_response_timer_info(vdev);
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||
wlan_psoc_get_id(psoc));
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
target_if_wake_lock_timeout_acquire(vdev, STOP_WAKELOCK);
|
||||
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);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
vdev_rsp->expire_time = 0;
|
||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||
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);
|
||||
}
|
||||
|
||||
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_vdev *tvdev;
|
||||
struct vdev_response_timer *vdev_rsp = NULL;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
uint32_t vdev_idx;
|
||||
int32_t vdev_idx = -1;
|
||||
int32_t last_vdev_idx = -1;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -860,15 +862,16 @@ static int32_t target_if_vdev_mgr_multi_vdev_restart_get_ref(
|
||||
return last_vdev_idx;
|
||||
}
|
||||
|
||||
last_vdev_idx = vdev_idx;
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc,
|
||||
vdev_idx);
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
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_vdev *tvdev;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct vdev_response_timer *vdev_rsp = NULL;
|
||||
uint32_t vdev_idx;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
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++) {
|
||||
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)) {
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
||||
if (vdev_rsp && vdev_timer_started[vdev_idx]) {
|
||||
if (vdev_timer_started[vdev_idx]) {
|
||||
target_if_vdev_mgr_rsp_timer_stop(
|
||||
tvdev, vdev_rsp,
|
||||
psoc, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
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 wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
uint8_t vdev_id;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
|
||||
if (!vdev || !param) {
|
||||
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);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
||||
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->vdev_mgr_get_response_timer_info(vdev);
|
||||
vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, vdev_id);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
mlme_err("VDEV_%d: PSOC_%d No vdev rsp timer", vdev_id,
|
||||
wlan_psoc_get_id(psoc));
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
status = wmi_unified_peer_delete_all_send(wmi_handle, param);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
vdev_rsp->expire_time = 0;
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
mlme_tx_ops->vdev_sta_ps_param_send =
|
||||
target_if_vdev_mgr_sta_ps_param_send;
|
||||
mlme_tx_ops->vdev_mgr_rsp_timer_init =
|
||||
target_if_vdev_mgr_rsp_timer_init;
|
||||
mlme_tx_ops->vdev_mgr_rsp_timer_mod =
|
||||
mlme_tx_ops->psoc_vdev_rsp_timer_mod =
|
||||
target_if_vdev_mgr_rsp_timer_mod;
|
||||
mlme_tx_ops->peer_delete_all_send =
|
||||
target_if_vdev_mgr_peer_delete_all_send;
|
||||
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user