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:
parent
7658df6386
commit
48ccbd05d0
@ -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) {
|
||||
|
@ -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:
|
||||
|
@ -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,
|
||||
¶ms);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user