qcacmn: Wait for RSO stop response from firmware

Firmware doesn't expect any vdev commands from host while RSO stop
is happening. It sends a response to the RSO_STOP command once
it's done with cleanup. Host needs to run a timer and wait for a
maximum of 6 seconds for the response. Host can stop the timer and
allow the commands to firmware in the below cases,
1. RSO_STOP response with success status
2. RSO_STOP response with HO_FAIL status followed by
   HO_FAIL event: Host needs to wait till HO_FAIL event is
   received

If firmware doesn't send any response in the 6 seconds wait, issue
a recovery to help to check the firmware state.

Change-Id: I4577f9b0aac71c0c86bd32b59e69d9527bf107b9
CRs-Fixed: 3106032
This commit is contained in:
Srinivas Dasari
2022-01-13 01:36:57 +05:30
committed by Madan Koyyalamudi
parent e7074b084e
commit f8921a74b9
12 changed files with 182 additions and 27 deletions

View File

@@ -1412,6 +1412,7 @@ enum qdf_suspend_type {
* @QDF_VDEV_SM_OUT_OF_SYNC: Vdev SM is out of sync and connect req received * @QDF_VDEV_SM_OUT_OF_SYNC: Vdev SM is out of sync and connect req received
* when already connected * when already connected
* @QDF_STATS_REQ_TIMEDOUT: Stats request timedout * @QDF_STATS_REQ_TIMEDOUT: Stats request timedout
* @QDF_RSO_STOP_RSP_TIMEOUT: Firmware hasn't sent RSO stop response
*/ */
enum qdf_hang_reason { enum qdf_hang_reason {
QDF_REASON_UNSPECIFIED, QDF_REASON_UNSPECIFIED,
@@ -1443,6 +1444,7 @@ enum qdf_hang_reason {
QDF_VDEV_SM_OUT_OF_SYNC, QDF_VDEV_SM_OUT_OF_SYNC,
QDF_STATS_REQ_TIMEDOUT, QDF_STATS_REQ_TIMEDOUT,
QDF_TX_DESC_LEAK, QDF_TX_DESC_LEAK,
QDF_RSO_STOP_RSP_TIMEOUT,
}; };
/** /**

View File

@@ -118,4 +118,17 @@ QDF_STATUS target_if_vdev_mgr_rsp_timer_stop(
struct vdev_response_timer *vdev_rsp, struct vdev_response_timer *vdev_rsp,
enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit); enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit);
/**
* target_if_vdev_mgr_rsp_timer_start() - API to start response timer for
* vdev manager operations
* @psoc: pointer to psoc object
* @vdev_rsp: vdev response timer
* @set_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_start(struct wlan_objmgr_psoc *psoc,
struct vdev_response_timer *vdev_rsp,
enum wlan_vdev_mgr_tgt_if_rsp_bit set_bit);
#endif /* __TARGET_IF_VDEV_MGR_TX_OPS_H__ */ #endif /* __TARGET_IF_VDEV_MGR_TX_OPS_H__ */

View File

@@ -33,6 +33,9 @@
#include <wlan_vdev_mlme_main.h> #include <wlan_vdev_mlme_main.h>
#include <wmi_unified_vdev_api.h> #include <wmi_unified_vdev_api.h>
#include <target_if_psoc_wake_lock.h> #include <target_if_psoc_wake_lock.h>
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#include <target_if_cm_roam_offload.h>
#endif
static inline static inline
void target_if_vdev_mgr_handle_recovery(struct wlan_objmgr_psoc *psoc, void target_if_vdev_mgr_handle_recovery(struct wlan_objmgr_psoc *psoc,
@@ -49,6 +52,22 @@ void target_if_vdev_mgr_handle_recovery(struct wlan_objmgr_psoc *psoc,
wlan_psoc_get_id(psoc), vdev_id); wlan_psoc_get_id(psoc), vdev_id);
} }
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
static inline QDF_STATUS
target_if_send_rso_stop_failure_rsp(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return target_if_cm_send_rso_stop_failure_rsp(psoc, vdev_id);
}
#else
static inline QDF_STATUS
target_if_send_rso_stop_failure_rsp(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif
void target_if_vdev_mgr_rsp_timer_cb(void *arg) void target_if_vdev_mgr_rsp_timer_cb(void *arg)
{ {
struct wlan_objmgr_psoc *psoc; struct wlan_objmgr_psoc *psoc;
@@ -83,9 +102,10 @@ void target_if_vdev_mgr_rsp_timer_cb(void *arg)
!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) &&
!qdf_atomic_test_bit(DELETE_RESPONSE_BIT, &vdev_rsp->rsp_status) && !qdf_atomic_test_bit(DELETE_RESPONSE_BIT, &vdev_rsp->rsp_status) &&
!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)) { !qdf_atomic_test_bit(RSO_STOP_RESPONSE_BIT,
&vdev_rsp->rsp_status)) {
mlme_debug("No response bit is set, ignoring actions :%d", mlme_debug("No response bit is set, ignoring actions :%d",
vdev_rsp->vdev_id); vdev_rsp->vdev_id);
return; return;
@@ -151,6 +171,14 @@ void target_if_vdev_mgr_rsp_timer_cb(void *arg)
recovery_reason, rsp_pos); recovery_reason, rsp_pos);
rx_ops->vdev_mgr_peer_delete_all_response(psoc, rx_ops->vdev_mgr_peer_delete_all_response(psoc,
&peer_del_all_rsp); &peer_del_all_rsp);
} else if (qdf_atomic_test_bit(RSO_STOP_RESPONSE_BIT,
&vdev_rsp->rsp_status)) {
rsp_pos = RSO_STOP_RESPONSE_BIT;
recovery_reason = QDF_RSO_STOP_RSP_TIMEOUT;
target_if_vdev_mgr_rsp_timer_stop(psoc, vdev_rsp, rsp_pos);
target_if_vdev_mgr_handle_recovery(psoc, vdev_id,
recovery_reason, rsp_pos);
target_if_send_rso_stop_failure_rsp(psoc, vdev_id);
} else { } else {
mlme_err("PSOC_%d VDEV_%d: Unknown error", mlme_err("PSOC_%d VDEV_%d: Unknown error",
wlan_psoc_get_id(psoc), vdev_id); wlan_psoc_get_id(psoc), vdev_id);

View File

@@ -101,10 +101,10 @@ target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
static QDF_STATUS target_if_vdev_mgr_rsp_timer_start( QDF_STATUS
struct wlan_objmgr_psoc *psoc, target_if_vdev_mgr_rsp_timer_start(struct wlan_objmgr_psoc *psoc,
struct vdev_response_timer *vdev_rsp, struct vdev_response_timer *vdev_rsp,
enum wlan_vdev_mgr_tgt_if_rsp_bit set_bit) enum wlan_vdev_mgr_tgt_if_rsp_bit set_bit)
{ {
uint8_t rsp_pos; uint8_t rsp_pos;
uint8_t vdev_id; uint8_t vdev_id;

View File

@@ -377,29 +377,24 @@ QDF_STATUS cm_disconnect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
{ {
struct wlan_cm_vdev_discon_req *req; struct wlan_cm_vdev_discon_req *req;
struct cm_req *cm_req; struct cm_req *cm_req;
struct qdf_mac_addr bssid = QDF_MAC_ADDR_ZERO_INIT; QDF_STATUS status = QDF_STATUS_E_NOSUPPORT;
QDF_STATUS status;
cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id); cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id);
if (!cm_req) if (!cm_req)
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
cm_ctx->active_cm_id = *cm_id;
if (wlan_vdev_mlme_get_opmode(cm_ctx->vdev) == QDF_STA_MODE)
status = mlme_cm_rso_stop_req(cm_ctx->vdev);
if (status != QDF_STATUS_E_NOSUPPORT)
return status;
req = qdf_mem_malloc(sizeof(*req)); req = qdf_mem_malloc(sizeof(*req));
if (!req) if (!req)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
cm_ctx->active_cm_id = *cm_id;
wlan_vdev_get_bss_peer_mac(cm_ctx->vdev, &bssid);
/*
* for northbound req, bssid is not provided so update it from vdev
* in case bssid is not present
*/
if (qdf_is_macaddr_zero(&cm_req->discon_req.req.bssid) ||
qdf_is_macaddr_broadcast(&cm_req->discon_req.req.bssid))
qdf_copy_macaddr(&cm_req->discon_req.req.bssid, &bssid);
qdf_copy_macaddr(&req->req.bssid, &bssid);
req->cm_id = *cm_id; req->cm_id = *cm_id;
req->req.vdev_id = wlan_vdev_get_id(cm_ctx->vdev); req->req.vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
req->req.source = cm_req->discon_req.req.source; req->req.source = cm_req->discon_req.req.source;
@@ -407,20 +402,70 @@ QDF_STATUS cm_disconnect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
req->req.is_no_disassoc_disconnect = req->req.is_no_disassoc_disconnect =
cm_req->discon_req.req.is_no_disassoc_disconnect; cm_req->discon_req.req.is_no_disassoc_disconnect;
cm_disconnect_continue_after_rso_stop(cm_ctx->vdev, false,
req);
qdf_mem_free(req);
return status;
}
QDF_STATUS
cm_disconnect_continue_after_rso_stop(struct wlan_objmgr_vdev *vdev,
bool is_ho_fail,
struct wlan_cm_vdev_discon_req *req)
{
struct cm_req *cm_req;
QDF_STATUS status;
struct qdf_mac_addr bssid = QDF_MAC_ADDR_ZERO_INIT;
struct cnx_mgr *cm_ctx = cm_get_cm_ctx(vdev);
if (!cm_ctx)
return QDF_STATUS_E_INVAL;
if ((CM_ID_GET_PREFIX(req->cm_id)) != DISCONNECT_REQ_PREFIX) {
mlme_err(CM_PREFIX_FMT "active req is not disconnect req",
CM_PREFIX_REF(wlan_vdev_get_id(vdev), req->cm_id));
return QDF_STATUS_E_INVAL;
}
cm_req = cm_get_req_by_cm_id(cm_ctx, req->cm_id);
if (!cm_req)
return QDF_STATUS_E_INVAL;
if (is_ho_fail) {
mlme_debug(CM_PREFIX_FMT "Updating source(%d) and reason code (%d) to RSO reason and source as ho fail is received in RSO stop",
CM_PREFIX_REF(req->req.vdev_id, req->cm_id),
req->req.source, req->req.reason_code);
req->req.source = CM_MLME_DISCONNECT;
req->req.reason_code = REASON_FW_TRIGGERED_ROAM_FAILURE;
}
wlan_vdev_get_bss_peer_mac(cm_ctx->vdev, &bssid);
/*
* for northbound req, bssid is not provided so update it from vdev
* in case bssid is not present
*/
if (qdf_is_macaddr_zero(&cm_req->discon_req.req.bssid) ||
qdf_is_macaddr_broadcast(&cm_req->discon_req.req.bssid))
qdf_copy_macaddr(&cm_req->discon_req.req.bssid,
&req->req.bssid);
qdf_copy_macaddr(&req->req.bssid, &bssid);
cm_update_scan_mlme_on_disconnect(cm_ctx->vdev, cm_update_scan_mlme_on_disconnect(cm_ctx->vdev,
&cm_req->discon_req); &cm_req->discon_req);
mlme_debug(CM_PREFIX_FMT "disconnect " QDF_MAC_ADDR_FMT " source %d reason %d", mlme_debug(CM_PREFIX_FMT "disconnect " QDF_MAC_ADDR_FMT
" source %d reason %d is_ho_fail: %u",
CM_PREFIX_REF(req->req.vdev_id, req->cm_id), CM_PREFIX_REF(req->req.vdev_id, req->cm_id),
QDF_MAC_ADDR_REF(req->req.bssid.bytes), QDF_MAC_ADDR_REF(req->req.bssid.bytes),
req->req.source, req->req.reason_code); req->req.source, req->req.reason_code, is_ho_fail);
status = mlme_cm_disconnect_req(cm_ctx->vdev, req); status = mlme_cm_disconnect_req(cm_ctx->vdev, req);
if (QDF_IS_STATUS_ERROR(status)) { if (QDF_IS_STATUS_ERROR(status)) {
mlme_err(CM_PREFIX_FMT "disconnect req fail", mlme_err(CM_PREFIX_FMT "disconnect req fail",
CM_PREFIX_REF(req->req.vdev_id, req->cm_id)); CM_PREFIX_REF(req->req.vdev_id, req->cm_id));
cm_send_disconnect_resp(cm_ctx, req->cm_id); cm_send_disconnect_resp(cm_ctx, req->cm_id);
} }
qdf_mem_free(req);
return status; return status;
} }

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -460,6 +461,19 @@ void cm_initiate_internal_disconnect(struct cnx_mgr *cm_ctx);
*/ */
void cm_send_disconnect_resp(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id); void cm_send_disconnect_resp(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id);
/**
* cm_disconnect_continue_after_rso_stop() - Continue disconnect after RSO stop
* @vdev: Objmgr vdev
* @is_ho_fail: True if ho_fail happened
* @req: pointer to cm vdev disconnect req
*
* Return: QDF_STATUS
*/
QDF_STATUS
cm_disconnect_continue_after_rso_stop(struct wlan_objmgr_vdev *vdev,
bool is_ho_fail,
struct wlan_cm_vdev_discon_req *req);
/*************** UTIL APIs ****************/ /*************** UTIL APIs ****************/
/** /**
@@ -1153,5 +1167,4 @@ void cm_set_candidate_custom_sort_cb(
qdf_list_t *list)); qdf_list_t *list));
#endif #endif
#endif /* __WLAN_CM_MAIN_API_H__ */ #endif /* __WLAN_CM_MAIN_API_H__ */

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -459,4 +460,19 @@ void wlan_cm_set_candidate_custom_sort_cb(
*/ */
struct reduced_neighbor_report *wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, struct reduced_neighbor_report *wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev,
wlan_cm_id cm_id); wlan_cm_id cm_id);
/**
* wlan_cm_disc_cont_after_rso_stop() - Continue disconnect after RSO stop
* @vdev: Objmgr vdev
* @is_ho_fail: True if ho_fail happened
* @req: pointer to cm vdev disconnect req
* This is a wrapper to call core API cm_disconnect_continue_after_rso_stop
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev,
bool is_ho_fail,
struct wlan_cm_vdev_discon_req *req);
#endif /* __WLAN_CM_UCFG_API_H */ #endif /* __WLAN_CM_UCFG_API_H */

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2012-2015,2020-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015,2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -35,7 +35,9 @@
typedef uint32_t wlan_cm_id; typedef uint32_t wlan_cm_id;
/* Diconnect active timeout */ /* Diconnect active timeout */
#define DISCONNECT_TIMEOUT STOP_RESPONSE_TIMER + DELETE_RESPONSE_TIMER + 1000 #define DISCONNECT_TIMEOUT \
((STOP_RESPONSE_TIMER) + (DELETE_RESPONSE_TIMER) +\
(RSO_STOP_RESPONSE_TIMER) + (1000))
/* /*
* Disconnect command wait timeout VDEV timeouts + 5 sec buff for current active * Disconnect command wait timeout VDEV timeouts + 5 sec buff for current active

View File

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -370,3 +371,12 @@ struct reduced_neighbor_report *wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev,
return NULL; return NULL;
} }
QDF_STATUS
wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev,
bool is_ho_fail,
struct wlan_cm_vdev_discon_req *req)
{
return cm_disconnect_continue_after_rso_stop(vdev, is_ho_fail,
req);
}

View File

@@ -258,6 +258,7 @@ struct mlme_twt_ops {
* complete * complete
* @mlme_cm_ext_vdev_down_req_cb: callback to send vdev down to FW * @mlme_cm_ext_vdev_down_req_cb: callback to send vdev down to FW
* @mlme_cm_ext_roam_start_ind_cb: callback to indicate roam start * @mlme_cm_ext_roam_start_ind_cb: callback to indicate roam start
* @mlme_cm_ext_rso_stop_cb: callback to send rso stop to FW
* @mlme_cm_ext_reassoc_req_cb: callback for reassoc request to * @mlme_cm_ext_reassoc_req_cb: callback for reassoc request to
* VDEV/PEER SM * VDEV/PEER SM
* @mlme_vdev_send_set_mac_addr: callback to send set MAC address * @mlme_vdev_send_set_mac_addr: callback to send set MAC address
@@ -329,6 +330,7 @@ struct mlme_ext_ops {
QDF_STATUS (*mlme_cm_ext_roam_start_ind_cb)( QDF_STATUS (*mlme_cm_ext_roam_start_ind_cb)(
struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_vdev *vdev,
struct wlan_cm_roam_req *req); struct wlan_cm_roam_req *req);
QDF_STATUS (*mlme_cm_ext_rso_stop_cb)(struct wlan_objmgr_vdev *vdev);
QDF_STATUS (*mlme_cm_ext_reassoc_req_cb)( QDF_STATUS (*mlme_cm_ext_reassoc_req_cb)(
struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_vdev *vdev,
struct wlan_cm_vdev_reassoc_req *req); struct wlan_cm_vdev_reassoc_req *req);
@@ -629,6 +631,14 @@ QDF_STATUS mlme_cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
QDF_STATUS mlme_cm_roam_start_ind(struct wlan_objmgr_vdev *vdev, QDF_STATUS mlme_cm_roam_start_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_roam_req *req); struct wlan_cm_roam_req *req);
/**
* mlme_cm_rso_stop_req() - Connection manager ext RSO stop request
* @vdev: VDEV object
*
* Return: QDF_STATUS
*/
QDF_STATUS mlme_cm_rso_stop_req(struct wlan_objmgr_vdev *vdev);
/** /**
* mlme_cm_reassoc_req() - Connection manager ext reassoc request * mlme_cm_reassoc_req() - Connection manager ext reassoc request
* @vdev: VDEV object * @vdev: VDEV object

View File

@@ -356,6 +356,16 @@ QDF_STATUS mlme_cm_roam_start_ind(struct wlan_objmgr_vdev *vdev,
return ret; return ret;
} }
QDF_STATUS mlme_cm_rso_stop_req(struct wlan_objmgr_vdev *vdev)
{
QDF_STATUS ret = QDF_STATUS_E_NOSUPPORT;
if ((glbl_ops) && glbl_ops->mlme_cm_ext_rso_stop_cb)
ret = glbl_ops->mlme_cm_ext_rso_stop_cb(vdev);
return ret;
}
QDF_STATUS mlme_cm_reassoc_req(struct wlan_objmgr_vdev *vdev, QDF_STATUS mlme_cm_reassoc_req(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_vdev_reassoc_req *req) struct wlan_cm_vdev_reassoc_req *req)
{ {

View File

@@ -42,6 +42,7 @@
* STOP_RESPONSE_BIT: vdev stop response bit * STOP_RESPONSE_BIT: vdev stop response bit
* DELETE_RESPONSE_BIT: vdev delete response bit * DELETE_RESPONSE_BIT: vdev delete response bit
* PEER_DELETE_ALL_RESPONSE_BIT: vdev peer delete all response bit * PEER_DELETE_ALL_RESPONSE_BIT: vdev peer delete all response bit
* RSO_STOP_RESPONSE_BIT : RSO stop response bit
*/ */
enum wlan_vdev_mgr_tgt_if_rsp_bit { enum wlan_vdev_mgr_tgt_if_rsp_bit {
START_RESPONSE_BIT = 0, START_RESPONSE_BIT = 0,
@@ -49,6 +50,7 @@ enum wlan_vdev_mgr_tgt_if_rsp_bit {
STOP_RESPONSE_BIT = 2, STOP_RESPONSE_BIT = 2,
DELETE_RESPONSE_BIT = 3, DELETE_RESPONSE_BIT = 3,
PEER_DELETE_ALL_RESPONSE_BIT = 4, PEER_DELETE_ALL_RESPONSE_BIT = 4,
RSO_STOP_RESPONSE_BIT = 5,
RESPONSE_BIT_MAX, RESPONSE_BIT_MAX,
}; };
@@ -66,6 +68,7 @@ static inline char *string_from_rsp_bit(enum wlan_vdev_mgr_tgt_if_rsp_bit bit)
"STOP", "STOP",
"DELETE", "DELETE",
"PEER DELETE ALL", "PEER DELETE ALL",
"RSO STOP",
"RESPONE MAX"}; "RESPONE MAX"};
return (char *)strings[bit]; return (char *)strings[bit];
} }
@@ -76,17 +79,20 @@ static inline char *string_from_rsp_bit(enum wlan_vdev_mgr_tgt_if_rsp_bit bit)
#define STOP_RESPONSE_TIMER (4000 + PMO_RESUME_TIMEOUT) #define STOP_RESPONSE_TIMER (4000 + PMO_RESUME_TIMEOUT)
#define DELETE_RESPONSE_TIMER (4000 + PMO_RESUME_TIMEOUT) #define DELETE_RESPONSE_TIMER (4000 + PMO_RESUME_TIMEOUT)
#define PEER_DELETE_ALL_RESPONSE_TIMER (6000 + PMO_RESUME_TIMEOUT) #define PEER_DELETE_ALL_RESPONSE_TIMER (6000 + PMO_RESUME_TIMEOUT)
#define RSO_STOP_RESPONSE_TIMER (6000 + PMO_RESUME_TIMEOUT)
#elif defined(QCA_LOWMEM_CONFIG) || defined(QCA_512M_CONFIG) || \ #elif defined(QCA_LOWMEM_CONFIG) || defined(QCA_512M_CONFIG) || \
defined(QCA_WIFI_QCA5018) defined(QCA_WIFI_QCA5018)
#define START_RESPONSE_TIMER 15000 #define START_RESPONSE_TIMER 15000
#define STOP_RESPONSE_TIMER 15000 #define STOP_RESPONSE_TIMER 15000
#define DELETE_RESPONSE_TIMER 15000 #define DELETE_RESPONSE_TIMER 15000
#define PEER_DELETE_ALL_RESPONSE_TIMER 15000 #define PEER_DELETE_ALL_RESPONSE_TIMER 15000
#define RSO_STOP_RESPONSE_TIMER 15000
#else #else
#define START_RESPONSE_TIMER 8000 #define START_RESPONSE_TIMER 8000
#define STOP_RESPONSE_TIMER 6000 #define STOP_RESPONSE_TIMER 6000
#define DELETE_RESPONSE_TIMER 4000 #define DELETE_RESPONSE_TIMER 4000
#define PEER_DELETE_ALL_RESPONSE_TIMER 6000 #define PEER_DELETE_ALL_RESPONSE_TIMER 6000
#define RSO_STOP_RESPONSE_TIMER 6000
#endif #endif
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE