qcacld-3.0: Optimise the roam time latency
This change optimises the time to enable the TX queues during connection/roaming by deferring the oem response to userspace and roam_auth event to wpa_supplicant. Change-ID: I1724022de3b87482e4e4a35efac358de9f6a367d CRs-Fixed: 3119070
This commit is contained in:

committed by
Madan Koyyalamudi

parent
1a6c49978e
commit
e8894805e6
@@ -1095,6 +1095,7 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
bool is_roam_offload = false;
|
||||
bool is_roam = rsp->is_reassoc;
|
||||
ol_txrx_soc_handle soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
uint8_t uapsd_mask = 0;
|
||||
uint32_t phymode;
|
||||
uint32_t time_buffer_size;
|
||||
|
||||
@@ -1162,19 +1163,6 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
* hdd_send_ft_assoc_response,
|
||||
*/
|
||||
|
||||
/* send peer status indication to oem app */
|
||||
vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||
WLAN_UMAC_COMP_MLME);
|
||||
if (vdev_mlme) {
|
||||
hdd_send_peer_status_ind_to_app(
|
||||
&rsp->bssid,
|
||||
ePeerConnected,
|
||||
vdev_mlme->ext_vdev_ptr->connect_info.timing_meas_cap,
|
||||
adapter->vdev_id,
|
||||
&vdev_mlme->ext_vdev_ptr->connect_info.chan_info,
|
||||
adapter->device_mode);
|
||||
}
|
||||
|
||||
hdd_ipa_set_tx_flow_info();
|
||||
hdd_place_marker(adapter, "ASSOCIATION COMPLETE", NULL);
|
||||
|
||||
@@ -1211,6 +1199,16 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
adapter->is_link_up_service_needed = false;
|
||||
}
|
||||
|
||||
vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||
WLAN_UMAC_COMP_MLME);
|
||||
if (vdev_mlme)
|
||||
uapsd_mask =
|
||||
vdev_mlme->ext_vdev_ptr->connect_info.uapsd_per_ac_bitmask;
|
||||
|
||||
cdp_hl_fc_set_td_limit(soc, adapter->vdev_id,
|
||||
sta_ctx->conn_info.chan_freq);
|
||||
hdd_wmm_assoc(adapter, false, uapsd_mask);
|
||||
|
||||
if (!rsp->is_wps_connection &&
|
||||
(sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_NONE ||
|
||||
sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_OPEN_SYSTEM ||
|
||||
@@ -1222,9 +1220,32 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
/* If roaming is set check if FW roaming/LFR3 */
|
||||
ucfg_mlme_get_roaming_offload(hdd_ctx->psoc, &is_roam_offload);
|
||||
|
||||
if (is_roam_offload)
|
||||
if (is_roam_offload || !is_roam) {
|
||||
/* For FW_ROAM/LFR3 OR connect */
|
||||
/* for LFR 3 get authenticated info from resp */
|
||||
is_auth_required = hdd_cm_is_roam_auth_required(sta_ctx, rsp);
|
||||
if (is_roam)
|
||||
is_auth_required =
|
||||
hdd_cm_is_roam_auth_required(sta_ctx, rsp);
|
||||
hdd_roam_register_sta(adapter, &rsp->bssid, is_auth_required);
|
||||
} else {
|
||||
/* for host roam/LFR2 */
|
||||
hdd_cm_set_peer_authenticate(adapter, &rsp->bssid,
|
||||
is_auth_required);
|
||||
}
|
||||
|
||||
hdd_debug("Enabling queues");
|
||||
hdd_cm_netif_queue_enable(adapter);
|
||||
|
||||
/* send peer status indication to oem app */
|
||||
if (vdev_mlme) {
|
||||
hdd_send_peer_status_ind_to_app(
|
||||
&rsp->bssid,
|
||||
ePeerConnected,
|
||||
vdev_mlme->ext_vdev_ptr->connect_info.timing_meas_cap,
|
||||
adapter->vdev_id,
|
||||
&vdev_mlme->ext_vdev_ptr->connect_info.chan_info,
|
||||
adapter->device_mode);
|
||||
}
|
||||
|
||||
if (ucfg_ipa_is_enabled() && !is_auth_required)
|
||||
ucfg_ipa_wlan_evt(hdd_ctx->pdev, adapter->dev,
|
||||
@@ -1256,12 +1277,6 @@ hdd_cm_connect_success_post_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
{
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
struct hdd_adapter *adapter;
|
||||
struct hdd_station_ctx *sta_ctx;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct vdev_mlme_obj *mlme_obj = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||
uint8_t uapsd_mask = 0;
|
||||
bool is_auth_required = true;
|
||||
bool is_roam_offload = false;
|
||||
bool is_roam = rsp->is_reassoc;
|
||||
|
||||
if (!hdd_ctx) {
|
||||
@@ -1275,46 +1290,12 @@ hdd_cm_connect_success_post_user_update(struct wlan_objmgr_vdev *vdev,
|
||||
return;
|
||||
}
|
||||
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
if (mlme_obj)
|
||||
uapsd_mask =
|
||||
mlme_obj->ext_vdev_ptr->connect_info.uapsd_per_ac_bitmask;
|
||||
if (is_roam) {
|
||||
/* If roaming is set check if FW roaming/LFR3 */
|
||||
ucfg_mlme_get_roaming_offload(hdd_ctx->psoc, &is_roam_offload);
|
||||
} else {
|
||||
if (!is_roam) {
|
||||
/* call only for connect */
|
||||
qdf_runtime_pm_allow_suspend(&hdd_ctx->runtime_context.connect);
|
||||
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_CONNECT);
|
||||
}
|
||||
|
||||
cdp_hl_fc_set_td_limit(soc, adapter->vdev_id,
|
||||
sta_ctx->conn_info.chan_freq);
|
||||
hdd_wmm_assoc(adapter, false, uapsd_mask);
|
||||
|
||||
if (!rsp->is_wps_connection &&
|
||||
(sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_NONE ||
|
||||
sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_OPEN_SYSTEM ||
|
||||
sta_ctx->conn_info.auth_type == eCSR_AUTH_TYPE_SHARED_KEY ||
|
||||
hdd_cm_is_fils_connection(rsp)))
|
||||
is_auth_required = false;
|
||||
|
||||
if (is_roam_offload || !is_roam) {
|
||||
/* For FW_ROAM/LFR3 OR connect */
|
||||
/* for LFR 3 get authenticated info from resp */
|
||||
if (is_roam)
|
||||
is_auth_required =
|
||||
hdd_cm_is_roam_auth_required(sta_ctx, rsp);
|
||||
hdd_roam_register_sta(adapter, &rsp->bssid, is_auth_required);
|
||||
} else {
|
||||
/* for host roam/LFR2 */
|
||||
hdd_cm_set_peer_authenticate(adapter, &rsp->bssid,
|
||||
is_auth_required);
|
||||
}
|
||||
|
||||
hdd_debug("Enabling queues");
|
||||
hdd_cm_netif_queue_enable(adapter);
|
||||
|
||||
hdd_cm_clear_pmf_stats(adapter);
|
||||
|
||||
if (adapter->device_mode == QDF_STA_MODE) {
|
||||
|
Reference in New Issue
Block a user