diff options
| author | Service qcabuildsw <qcabuildsw@localhost> | 2016-09-20 17:45:11 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-20 17:45:11 -0700 |
| commit | 7329f35b8e70b94d2bcdda425801eaa608643e0c (patch) | |
| tree | dce3bd6126e58c42d8a91310057eccf658aab7d8 | |
| parent | ec902e2adf6e3a53112e791a58e7673ebced8eb4 (diff) | |
| parent | a0083c4cfa601e55137a344398df0e7da3de381c (diff) | |
Merge "qcacld-3.0: Unpause data queue after SAP SSID setting" into wlan-cld3.driver.lnx.1.1-dev
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_sme_req_messages.c | 9 | ||||
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 26 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 13 |
3 files changed, 45 insertions, 3 deletions
diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index b976f0ab24aa..ddfe50dca300 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -4194,8 +4194,13 @@ static void __lim_process_sme_hide_ssid(tpAniSirGlobal pMac, uint32_t *pMsgBuf) return; } - /* Update the session entry */ - psessionEntry->ssidHidden = pUpdateParams->ssidHidden; + if (psessionEntry->ssidHidden != pUpdateParams->ssidHidden) { + /* Update the session entry */ + psessionEntry->ssidHidden = pUpdateParams->ssidHidden; + } else { + lim_log(pMac, LOG1, FL("Same config already present!")); + return; + } /* Send vdev restart */ lim_send_vdev_restart(pMac, psessionEntry, pUpdateParams->sessionId); diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index e341ad89cd19..3d7be2431319 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -859,6 +859,8 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, wma->interfaces[resp_event->vdev_id].mac_id); } + iface = &wma->interfaces[resp_event->vdev_id]; + if ((resp_event->vdev_id <= wma->max_bssid) && (qdf_atomic_read (&wma->interfaces[resp_event->vdev_id].vdev_restart_params.hidden_ssid_restart_in_progress)) @@ -880,6 +882,15 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, vdev_restart_params. hidden_ssid_restart_in_progress, 0); wma->interfaces[resp_event->vdev_id].vdev_up = true; + /* + * Unpause TX queue in SAP case while configuring hidden ssid + * enable or disable, else the data path is paused forever + * causing data packets(starting from DHCP offer) to get stuck + */ + ol_txrx_vdev_unpause(iface->handle, + OL_TXQ_PAUSE_REASON_VDEV_STOP); + iface->pause_bitmap &= ~(1 << PAUSE_TYPE_HOST); + } req_msg = wma_find_vdev_req(wma, resp_event->vdev_id, @@ -900,7 +911,6 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, wma_find_mcc_ap(wma, resp_event->vdev_id, true); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ - iface = &wma->interfaces[resp_event->vdev_id]; if (req_msg->msg_type == WMA_CHNL_SWITCH_REQ) { tpSwitchChannelParams params = (tpSwitchChannelParams) req_msg->user_data; @@ -1345,6 +1355,17 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info, && (wma->interfaces[resp_event->vdev_id].sub_type == 0))) { WMA_LOGE("%s: vdev stop event recevied for hidden ssid set using IOCTL ", __func__); + + req_msg = wma_fill_vdev_req(wma, resp_event->vdev_id, + WMA_HIDDEN_SSID_VDEV_RESTART, + WMA_TARGET_REQ_TYPE_VDEV_START, resp_event, + WMA_VDEV_START_REQUEST_TIMEOUT); + if (!req_msg) { + WMA_LOGE("%s: Failed to fill vdev request, vdev_id %d", + __func__, resp_event->vdev_id); + return -EINVAL; + } + wma_hidden_ssid_vdev_restart_on_vdev_stop(wma, resp_event->vdev_id); } @@ -2539,6 +2560,9 @@ error0: iface = &wma->interfaces[tgt_req->vdev_id]; iface->vdev_up = false; wma_ocb_set_config_resp(wma, QDF_STATUS_E_TIMEOUT); + } else if (tgt_req->msg_type == WMA_HIDDEN_SSID_VDEV_RESTART) { + WMA_LOGE("Hidden ssid vdev restart Timed Out; vdev_id: %d, type = %d", + tgt_req->vdev_id, tgt_req->type); } free_tgt_req: qdf_mc_timer_destroy(&tgt_req->event_timeout); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index d001d5005720..42e9c526ccf8 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -2710,6 +2710,7 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma_handle, tHalHiddenSsidVdevRestart *pReq) { struct wma_txrx_node *intr = wma_handle->interfaces; + struct wma_target_req *msg; if ((pReq->sessionId != intr[pReq->sessionId].vdev_restart_params.vdev_id) @@ -2723,6 +2724,16 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma_handle, qdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params. hidden_ssid_restart_in_progress, 1); + msg = wma_fill_vdev_req(wma_handle, pReq->sessionId, + WMA_HIDDEN_SSID_VDEV_RESTART, + WMA_TARGET_REQ_TYPE_VDEV_STOP, pReq, + WMA_VDEV_STOP_REQUEST_TIMEOUT); + if (!msg) { + WMA_LOGE("%s: Failed to fill vdev restart request for vdev_id %d", + __func__, pReq->sessionId); + return; + } + /* vdev stop -> vdev restart -> vdev up */ WMA_LOGD("%s, vdev_id: %d, pausing tx_ll_queue for VDEV_STOP", __func__, pReq->sessionId); @@ -2734,6 +2745,8 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma_handle, WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__); qdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params. hidden_ssid_restart_in_progress, 0); + wma_remove_vdev_req(wma_handle, pReq->sessionId, + WMA_TARGET_REQ_TYPE_VDEV_STOP); return; } } |
