qcacld-3.0: Don't fill vdev start req in wma rsp queue

Vdev start req timeout is moved to target if.
Req msg type can be got from vdev mlme instead of wma rsp queue
in vdev start rsp handler.

Set bss params into vdev mlme priv when start vdev with add bss.
then can get bss params from vdev mlme priv when handle start
vdev add bss rsp.

Free hidden ssid vdev req after vdev restart return, don't need
it when handle rsp.

Change-Id: I956fc5a9164d5961513dfa922aee27af28483807
CRs-Fixed: 2516587
This commit is contained in:
Jianmin Zhu 2019-08-28 14:55:42 +08:00 committed by nshrivas
parent 7658df6386
commit 48ccbd05d0
6 changed files with 35 additions and 89 deletions

View File

@ -1222,7 +1222,7 @@ QDF_STATUS wma_vdev_start_resp_handler(struct vdev_mlme_obj *vdev_mlme,
struct mac_context *mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
#endif
QDF_STATUS status;
enum vdev_assoc_type assoc_type;
enum vdev_assoc_type assoc_type = VDEV_ASSOC;
struct bss_params *bss_params;
wma = cds_get_context(QDF_MODULE_ID_WMA);
@ -3808,7 +3808,7 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, struct bss_params *add_bss)
struct cdp_vdev *vdev;
struct wma_vdev_start_req req;
void *peer;
struct wma_target_req *msg;
struct wlan_objmgr_vdev *vdev_obj;
uint8_t vdev_id, peer_id;
QDF_STATUS status;
int8_t maxTxPower;
@ -3847,16 +3847,14 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, struct bss_params *add_bss)
add_bss->bssId);
goto send_fail_resp;
}
msg = wma_fill_vdev_req(wma, vdev_id, WMA_ADD_BSS_REQ,
WMA_TARGET_REQ_TYPE_VDEV_START, add_bss,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGE("%s Failed to allocate vdev request vdev_id %d",
__func__, vdev_id);
goto peer_cleanup;
}
iface = &wma->interfaces[vdev_id];
vdev_obj = iface->vdev;
if (!vdev_obj) {
wma_err("vdev not found for id: %d", vdev_id);
goto send_fail_resp;
}
mlme_set_bss_params(vdev_obj, add_bss);
add_bss->staContext.staIdx = cdp_peer_get_local_peer_id(soc, peer);
@ -3906,8 +3904,7 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, struct bss_params *add_bss)
status = wma_vdev_start(wma, &req, false);
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
mlme_clear_bss_params(vdev_obj);
goto peer_cleanup;
}
@ -3940,7 +3937,7 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, struct bss_params *add_bss)
struct cdp_vdev *vdev;
struct wma_vdev_start_req req;
void *peer = NULL;
struct wma_target_req *msg;
struct wlan_objmgr_vdev *vdev_obj;
uint8_t vdev_id, peer_id;
QDF_STATUS status;
tSetBssKeyParams key_info;
@ -3991,16 +3988,12 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, struct bss_params *add_bss)
/* start ibss vdev */
add_bss->operMode = BSS_OPERATIONAL_MODE_IBSS;
msg = wma_fill_vdev_req(wma, vdev_id, WMA_ADD_BSS_REQ,
WMA_TARGET_REQ_TYPE_VDEV_START, add_bss,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGE("%s Failed to allocate vdev request vdev_id %d",
__func__, vdev_id);
goto peer_cleanup;
vdev_obj = wma->interfaces[vdev_id].vdev;
if (!vdev_obj) {
wma_err("vdev not found for id: %d", vdev_id);
goto send_fail_resp;
}
WMA_LOGD("%s: vdev start request for IBSS enqueued", __func__);
mlme_set_bss_params(vdev_obj, add_bss);
add_bss->staContext.staIdx = cdp_peer_get_local_peer_id(soc, peer);
@ -4054,11 +4047,9 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, struct bss_params *add_bss)
status = wma_vdev_start(wma, &req, false);
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
mlme_clear_bss_params(vdev_obj);
goto peer_cleanup;
}
WMA_LOGD("%s: vdev start request for IBSS sent to target", __func__);
/* Initialize protection mode to no protection */
status = wma_vdev_set_param(wma->wmi_handle, vdev_id,
@ -4090,6 +4081,7 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, struct bss_params *add_bss)
struct cdp_pdev *pdev;
struct wma_vdev_start_req req;
struct wma_target_req *msg;
struct wlan_objmgr_vdev *vdev_obj;
uint8_t vdev_id = 0, peer_id;
void *peer = NULL;
QDF_STATUS status;
@ -4181,15 +4173,13 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, struct bss_params *add_bss)
add_bss->staContext.staIdx);
return;
}
msg = wma_fill_vdev_req(wma, vdev_id, WMA_ADD_BSS_REQ,
WMA_TARGET_REQ_TYPE_VDEV_START,
add_bss,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGE("%s Failed to allocate vdev request vdev_id %d",
__func__, vdev_id);
goto peer_cleanup;
vdev_obj = iface->vdev;
if (!vdev_obj) {
wma_err("vdev not found for id: %d", vdev_id);
goto send_fail_resp;
}
mlme_set_bss_params(vdev_obj, add_bss);
add_bss->staContext.staIdx =
cdp_peer_get_local_peer_id(soc, peer);
@ -4227,10 +4217,11 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, struct bss_params *add_bss)
status = wma_vdev_start(wma, &req, false);
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
wma_err("failed, status: %d", status);
mlme_clear_bss_params(vdev_obj);
goto peer_cleanup;
}
#if defined(QCA_LL_LEGACY_TX_FLOW_CONTROL) || defined(QCA_LL_TX_FLOW_CONTROL_V2)
vdev = wma_find_vdev_by_id(wma, vdev_id);
if (!vdev) {

View File

@ -8782,6 +8782,7 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
case WMA_HIDDEN_SSID_VDEV_RESTART:
wma_hidden_ssid_vdev_restart(wma_handle,
(tHalHiddenSsidVdevRestart *) msg->bodyptr);
qdf_mem_free(msg->bodyptr);
break;
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
case WMA_WLAN_EXT_WOW:

View File

@ -3613,7 +3613,6 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
tHalHiddenSsidVdevRestart *pReq)
{
struct wma_txrx_node *intr = wma->interfaces;
struct wma_target_req *msg;
struct hidden_ssid_vdev_restart_params params;
QDF_STATUS status;
uint8_t vdev_id;
@ -3630,18 +3629,6 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
WMA_LOGD(FL("hidden ssid set using IOCTL for vdev %d ssid_hidden %d"),
vdev_id, pReq->ssidHidden);
msg = wma_fill_vdev_req(wma, vdev_id,
WMA_HIDDEN_SSID_VDEV_RESTART,
WMA_TARGET_REQ_TYPE_VDEV_START,
pReq,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGE(FL("Failed to fill vdev request, vdev_id %d"),
vdev_id);
qdf_mem_free(pReq);
return;
}
params.vdev_id = vdev_id;
params.ssid_len = intr[vdev_id].vdev_restart_params.ssid.ssid_len;
qdf_mem_copy(params.ssid,
@ -3669,9 +3656,6 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
&params);
if (QDF_IS_STATUS_ERROR(status)) {
WMA_LOGE(FL("Failed to send vdev restart command"));
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
qdf_mem_free(pReq);
}
}

View File

@ -49,7 +49,7 @@ void wma_add_bss_ndi_mode(tp_wma_handle wma, struct bss_params *add_bss)
struct cdp_vdev *vdev;
struct wma_vdev_start_req req;
void *peer = NULL;
struct wma_target_req *msg;
struct wlan_objmgr_vdev *vdev_obj;
uint8_t vdev_id, peer_id;
QDF_STATUS status;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
@ -84,14 +84,12 @@ void wma_add_bss_ndi_mode(tp_wma_handle wma, struct bss_params *add_bss)
goto send_fail_resp;
}
msg = wma_fill_vdev_req(wma, vdev_id, WMA_ADD_BSS_REQ,
WMA_TARGET_REQ_TYPE_VDEV_START, add_bss,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGE("%s Failed to allocate vdev request vdev_id %d",
__func__, vdev_id);
vdev_obj = wma->interfaces[vdev_id].vdev;
if (!vdev_obj) {
wma_err("vdev not found for id: %d", vdev_id);
goto send_fail_resp;
}
mlme_set_bss_params(vdev_obj, add_bss);
add_bss->staContext.staIdx = cdp_peer_get_local_peer_id(soc, peer);
@ -110,11 +108,9 @@ void wma_add_bss_ndi_mode(tp_wma_handle wma, struct bss_params *add_bss)
status = wma_vdev_start(wma, &req, false);
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
mlme_clear_bss_params(vdev_obj, add_bss);
goto send_fail_resp;
}
WMA_LOGD("%s: vdev start request for NDI sent to target", __func__);
/* Initialize protection mode to no protection */
wma_vdev_set_param(wma->wmi_handle, vdev_id,

View File

@ -35,23 +35,13 @@
*/
static QDF_STATUS wma_start_ocb_vdev(struct ocb_config *config)
{
struct wma_target_req *msg;
struct wma_vdev_start_req req;
QDF_STATUS status;
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
qdf_mem_zero(&req, sizeof(req));
msg = wma_fill_vdev_req(wma, config->vdev_id,
WMA_OCB_SET_CONFIG_CMD,
WMA_TARGET_REQ_TYPE_VDEV_START,
(void *)config, 1000);
if (!msg) {
WMA_LOGE(FL("Failed to fill vdev req %d"), config->vdev_id);
return QDF_STATUS_E_NOMEM;
}
req.op_chan_freq = config->channels[0].chan_freq;
req.vdev_id = msg->vdev_id;
req.vdev_id = config->vdev_id;
if (wlan_reg_is_24ghz_ch_freq(req.op_chan_freq))
req.dot11_mode = MLME_DOT11_MODE_11G;
else
@ -61,11 +51,8 @@ static QDF_STATUS wma_start_ocb_vdev(struct ocb_config *config)
req.preferred_tx_streams = 2;
status = wma_vdev_start(wma, &req, false);
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, req.vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
if (status != QDF_STATUS_SUCCESS)
WMA_LOGE(FL("vdev_start failed, status = %d"), status);
}
return status;
}

View File

@ -3501,7 +3501,6 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle, uint8_t vdev_id)
void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
{
struct wma_vdev_start_req req;
struct wma_target_req *msg;
QDF_STATUS status = QDF_STATUS_SUCCESS;
uint8_t vdev_id, peer_id;
void *peer;
@ -3609,21 +3608,9 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
}
}
msg = wma_fill_vdev_req(wma, req.vdev_id, WMA_CHNL_SWITCH_REQ,
WMA_TARGET_REQ_TYPE_VDEV_START, params,
WMA_VDEV_START_REQUEST_TIMEOUT);
if (!msg) {
WMA_LOGP("%s: Failed to fill channel switch request for vdev %d",
__func__, req.vdev_id);
status = QDF_STATUS_E_NOMEM;
goto send_resp;
}
status = wma_vdev_start(wma, &req, wma_get_channel_switch_in_progress(
&wma->interfaces[req.vdev_id]));
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, req.vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
WMA_LOGP("%s: vdev start failed status = %d", __func__,
status);
goto send_resp;