diff --git a/core/cds/inc/cds_concurrency.h b/core/cds/inc/cds_concurrency.h index 1604c977f425..efe9f70622e0 100644 --- a/core/cds/inc/cds_concurrency.h +++ b/core/cds/inc/cds_concurrency.h @@ -635,13 +635,10 @@ static inline void cds_force_sap_on_scc(eCsrRoamResult roam_result, #endif /* FEATURE_WLAN_FORCE_SAP_SCC */ #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH -void cds_check_concurrent_intf_and_restart_sap( - hdd_station_ctx_t *hdd_sta_ctx, - hdd_adapter_t *adapter); +void cds_check_concurrent_intf_and_restart_sap(hdd_adapter_t *adapter); #else static inline void cds_check_concurrent_intf_and_restart_sap( - hdd_station_ctx_t *hdd_sta_ctx, - hdd_adapter_t *adapter) + hdd_adapter_t *adapter) { } @@ -798,7 +795,7 @@ QDF_STATUS qdf_wait_for_connection_update(void); QDF_STATUS qdf_reset_connection_update(void); QDF_STATUS qdf_set_connection_update(void); QDF_STATUS qdf_init_connection_update(void); -QDF_STATUS cds_stop_start_opportunistic_timer(void); +QDF_STATUS cds_restart_opportunistic_timer(bool check_state); QDF_STATUS cds_modify_sap_pcl_based_on_mandatory_channel(uint8_t *pcl_list_org, uint8_t *weight_list_org, uint32_t *pcl_len_org); @@ -833,4 +830,8 @@ bool cds_is_hw_mode_change_after_vdev_up(void); void cds_dump_connection_status_info(void); uint32_t cds_mode_specific_connection_count(enum cds_con_mode mode, uint32_t *list); +void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, + uint32_t new_hw_mode_index, + uint32_t num_vdev_mac_entries, + struct sir_vdev_mac_map *vdev_mac_map); #endif /* __CDS_CONCURRENCY_H */ diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 6e7d95790568..946dc819b45a 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -2512,10 +2512,10 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status, * * Return: None */ -static void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, - uint32_t new_hw_mode_index, - uint32_t num_vdev_mac_entries, - struct sir_vdev_mac_map *vdev_mac_map) +void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index, + uint32_t new_hw_mode_index, + uint32_t num_vdev_mac_entries, + struct sir_vdev_mac_map *vdev_mac_map) { QDF_STATUS status; struct sir_hw_mode_params hw_mode; @@ -6275,14 +6275,11 @@ QDF_STATUS cds_next_actions(uint32_t session_id, return status; } /** - * if already in DBS no need to request DBS or if already in - * non dbs no need request for non dbs again. Might be needed + * if already in DBS no need to request DBS. Might be needed * to extend the logic when multiple dbs HW mode is available */ if ((((CDS_DBS_DOWNGRADE == action) || (CDS_DBS == action)) - && hw_mode.dbs_cap) || - (((CDS_SINGLE_MAC_UPGRADE == action) || - (CDS_SINGLE_MAC == action)) && !hw_mode.dbs_cap)) { + && hw_mode.dbs_cap)) { cds_err("driver is already in %s mode, no further action needed", (hw_mode.dbs_cap) ? "dbs" : "non dbs"); return QDF_STATUS_E_ALREADY; @@ -7043,17 +7040,18 @@ static void cds_check_sta_ap_concurrent_ch_intf(void *data) } } + /** * cds_check_concurrent_intf_and_restart_sap() - Check concurrent change intf - * @hdd_sta_ctx: Pointer to HDD STA context + * @adapter: Pointer to HDD adapter * * Checks the concurrent change interface and restarts SAP * Return: None */ -void cds_check_concurrent_intf_and_restart_sap(hdd_station_ctx_t *hdd_sta_ctx, - hdd_adapter_t *adapter) +void cds_check_concurrent_intf_and_restart_sap(hdd_adapter_t *adapter) { hdd_context_t *hdd_ctx; + hdd_station_ctx_t *hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); if (!hdd_ctx) { @@ -8199,13 +8197,17 @@ enum cds_conc_next_action cds_get_current_pref_hw_mode(void) } /** - * cds_stop_start_opportunistic_timer() - Start and stop the opportunistic timer + * cds_restart_opportunistic_timer() - Restarts opportunistic timer + * @check_state: check timer state if this flag is set, else restart + * irrespective of state * - * Stops and starts the opportunistic timer for DBS_OPPORTUNISTIC_TIME seconds + * Restarts opportunistic timer for DBS_OPPORTUNISTIC_TIME seconds. + * Check if current state is RUNNING if check_state is set, else + * restart the timer irrespective of state. * * Return: QDF_STATUS */ -QDF_STATUS cds_stop_start_opportunistic_timer(void) +QDF_STATUS cds_restart_opportunistic_timer(bool check_state) { QDF_STATUS status = QDF_STATUS_E_FAILURE; p_cds_contextType cds_ctx; @@ -8216,6 +8218,11 @@ QDF_STATUS cds_stop_start_opportunistic_timer(void) return status; } + if (check_state && + QDF_TIMER_STATE_RUNNING != + cds_ctx->dbs_opportunistic_timer.state) + return status; + qdf_mc_timer_stop(&cds_ctx->dbs_opportunistic_timer); status = qdf_mc_timer_start( @@ -8852,7 +8859,7 @@ QDF_STATUS cds_set_hw_mode_on_channel_switch(uint8_t session_id) * as well. */ if (action == CDS_SINGLE_MAC_UPGRADE) { - qdf_status = cds_stop_start_opportunistic_timer(); + qdf_status = cds_restart_opportunistic_timer(false); if (QDF_IS_STATUS_SUCCESS(qdf_status)) cds_info("opportunistic timer for MCC upgrade"); goto done; diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 93a7529b856e..0c40894ec775 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -2482,8 +2482,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, #endif hdd_info("check for SAP restart"); - cds_check_concurrent_intf_and_restart_sap(pHddStaCtx, - pAdapter); + cds_check_concurrent_intf_and_restart_sap(pAdapter); DPTRACE(qdf_dp_trace_mgmt_pkt(QDF_DP_TRACE_MGMT_PACKET_RECORD, pAdapter->sessionId, @@ -4738,19 +4737,6 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, FL("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d"), pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); break; - case eCSR_ROAM_DISABLE_QUEUES: - hdd_info("Disabling queues"); - wlan_hdd_netif_queue_control(pAdapter, - WLAN_NETIF_TX_DISABLE, - WLAN_CONTROL_PATH); - break; - case eCSR_ROAM_ENABLE_QUEUES: - hdd_info("Enabling queues"); - wlan_hdd_netif_queue_control(pAdapter, - WLAN_WAKE_ALL_NETIF_QUEUE, - WLAN_CONTROL_PATH); - break; - case eCSR_ROAM_SHOULD_ROAM: /* notify apps that we can't pass traffic anymore */ hddLog(LOG1, FL("Disabling queues")); @@ -5034,6 +5020,22 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, hdd_ndp_event_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); break; + case eCSR_ROAM_START: + hdd_info("Process ROAM_START from firmware"); + wlan_hdd_netif_queue_control(pAdapter, + WLAN_NETIF_TX_DISABLE, + WLAN_CONTROL_PATH); + cds_set_connection_in_progress(true); + cds_restart_opportunistic_timer(true); + break; + case eCSR_ROAM_ABORT: + hdd_info("Firmware aborted roaming operation, previous connection is still valid"); + wlan_hdd_netif_queue_control(pAdapter, + WLAN_WAKE_ALL_NETIF_QUEUE, + WLAN_CONTROL_PATH); + cds_set_connection_in_progress(false); + break; + default: break; } diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 2d427064e918..2a680486c1f0 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -6075,37 +6075,12 @@ int wlan_hdd_set_channel(struct wiphy *wiphy, case NL80211_CHAN_HT20: case NL80211_CHAN_NO_HT: smeConfig.csrConfig.obssEnabled = false; - if (channel <= 14) - smeConfig.csrConfig. - channelBondingMode24GHz = - eCSR_INI_SINGLE_CHANNEL_CENTERED; - else - smeConfig.csrConfig. - channelBondingMode5GHz = - eCSR_INI_SINGLE_CHANNEL_CENTERED; sap_config->sec_ch = 0; break; - case NL80211_CHAN_HT40MINUS: - if (channel <= 14) - smeConfig.csrConfig. - channelBondingMode24GHz = - eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY; - else - smeConfig.csrConfig. - channelBondingMode5GHz = - eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY; sap_config->sec_ch = sap_config->channel - 4; break; case NL80211_CHAN_HT40PLUS: - if (channel <= 14) - smeConfig.csrConfig. - channelBondingMode24GHz = - eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY; - else - smeConfig.csrConfig. - channelBondingMode5GHz = - eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY; sap_config->sec_ch = sap_config->channel + 4; break; default: diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 905187b460a1..2e478fb7af8f 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -193,14 +193,16 @@ typedef enum { * enum sir_roam_op_code - Operation to be done by the callback. * @SIR_ROAM_SYNCH_PROPAGATION: Propagate the new BSS info after roaming. * @SIR_ROAMING_DEREGISTER_STA: Deregister the old STA after roaming. - * @SIR_ROAMING_TX_QUEUE_DISABLE: Disable the network queues while roaming. - * @SIR_ROAMING_TX_QUEUE_ENABLE: Enable back the n/w queues in case roam fails. + * @SIR_ROAMING_START: Firmware started roaming operation + * @SIR_ROAMING_ABORT: Firmware aborted roaming operation, still connected. + * @SIR_ROAM_SYNCH_COMPLETE: Roam sync propagation is complete. */ enum sir_roam_op_code { SIR_ROAM_SYNCH_PROPAGATION = 1, SIR_ROAMING_DEREGISTER_STA, - SIR_ROAMING_TX_QUEUE_DISABLE, - SIR_ROAMING_TX_QUEUE_ENABLE, + SIR_ROAMING_START, + SIR_ROAMING_ABORT, + SIR_ROAM_SYNCH_COMPLETE, }; /** * Module ID definitions. @@ -4153,6 +4155,7 @@ typedef struct sSirSmeRoamOffloadSynchInd { void *add_bss_params; tpSirSmeJoinRsp join_rsp; uint16_t aid; + struct sir_hw_mode_trans_ind hw_mode_trans_ind; } roam_offload_synch_ind; #ifdef WLAN_FEATURE_ROAM_OFFLOAD diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index b5752db35700..5467b645ca4f 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -505,11 +505,11 @@ typedef enum { /* Channel sw update notification */ eCSR_ROAM_DFS_CHAN_SW_NOTIFY, eCSR_ROAM_EXT_CHG_CHNL_IND, - eCSR_ROAM_DISABLE_QUEUES, - eCSR_ROAM_ENABLE_QUEUES, eCSR_ROAM_STA_CHANNEL_SWITCH, eCSR_ROAM_NDP_STATUS_UPDATE, eCSR_ROAM_UPDATE_SCAN_RESULT, + eCSR_ROAM_START, + eCSR_ROAM_ABORT, } eRoamCmdStatus; /* comment inside indicates what roaming callback gets */ diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index b7b068de0337..2be95a2bc3b2 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -18778,6 +18778,7 @@ void csr_process_ho_fail_ind(tpAniSirGlobal pMac, void *pMsgBuf) sessionId); return; } + cds_set_connection_in_progress(false); csr_roam_synch_clean_up(pMac, sessionId); csr_roaming_report_diag_event(pMac, NULL, eCSR_REASON_ROAM_HO_FAIL); @@ -19501,18 +19502,41 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, eCSR_ROAM_FT_START, eSIR_SME_SUCCESS); sme_release_global_lock(&mac_ctx->sme); return; - case SIR_ROAMING_TX_QUEUE_DISABLE: + case SIR_ROAMING_START: csr_roam_call_callback(mac_ctx, session_id, NULL, 0, - eCSR_ROAM_DISABLE_QUEUES, eSIR_SME_SUCCESS); + eCSR_ROAM_START, eSIR_SME_SUCCESS); sme_release_global_lock(&mac_ctx->sme); return; - case SIR_ROAMING_TX_QUEUE_ENABLE: + case SIR_ROAMING_ABORT: csr_roam_call_callback(mac_ctx, session_id, NULL, 0, - eCSR_ROAM_ENABLE_QUEUES, eSIR_SME_SUCCESS); + eCSR_ROAM_ABORT, eSIR_SME_SUCCESS); sme_release_global_lock(&mac_ctx->sme); return; case SIR_ROAM_SYNCH_PROPAGATION: break; + case SIR_ROAM_SYNCH_COMPLETE: + /* + * Following operations need to be done once roam sync + * completion is sent to FW, hence called here: + * 1) Firmware has already updated DBS policy. Update connection + * table in the host driver. + * 2) Force SCC switch if needed + * 3) Set connection in progress = false + */ + /* first update connection info from wma interface */ + cds_update_connection_info(session_id); + /* then update remaining parameters from roam sync ctx */ + sms_log(mac_ctx, LOGE, FL("Update DBS hw mode")); + cds_hw_mode_transition_cb( + roam_synch_data->hw_mode_trans_ind.old_hw_mode_index, + roam_synch_data->hw_mode_trans_ind.new_hw_mode_index, + roam_synch_data->hw_mode_trans_ind.num_vdev_mac_entries, + roam_synch_data->hw_mode_trans_ind.vdev_mac_map); + cds_set_connection_in_progress(false); + session->roam_synch_in_progress = false; + cds_check_concurrent_intf_and_restart_sap(session->pContext); + sme_release_global_lock(&mac_ctx->sme); + return; default: sms_log(mac_ctx, LOGE, FL("LFR3: callback reason %d"), reason); sme_release_global_lock(&mac_ctx->sme); @@ -19737,6 +19761,7 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, ("NO CSR_IS_WAIT_FOR_KEY -> csr_roam_link_up")); csr_roam_link_up(mac_ctx, conn_profile->bssid); } + session->fRoaming = false; session->roam_synch_in_progress = false; qdf_mem_free(roam_info->pbFrames); diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index a63db28d3d8e..d2bb1098c54d 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -296,4 +296,9 @@ bool wma_is_p2p_lo_capable(void); QDF_STATUS wma_p2p_lo_start(struct sir_p2p_lo_start *params); QDF_STATUS wma_p2p_lo_stop(u_int32_t vdev_id); QDF_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats); + +void wma_process_pdev_hw_mode_trans_ind(void *wma, + wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param, + wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry, + struct sir_hw_mode_trans_ind *hw_mode_trans_ind); #endif diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 7c74c570e82a..7a46b314380f 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -2488,6 +2488,66 @@ fail: return QDF_STATUS_E_FAILURE; } +/** + * wma_process_pdev_hw_mode_trans_ind() - Process HW mode transition info + * + * @handle: WMA handle + * @fixed_param: Event fixed parameters + * @vdev_mac_entry - vdev mac entry + * @hw_mode_trans_ind - Buffer to store parsed information + * + * Parses fixed_param, vdev_mac_entry and fills in the information into + * hw_mode_trans_ind and wma + * + * Return: None + */ +void wma_process_pdev_hw_mode_trans_ind(void *handle, + wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param, + wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry, + struct sir_hw_mode_trans_ind *hw_mode_trans_ind) +{ + uint32_t i; + tp_wma_handle wma = (tp_wma_handle) handle; + + hw_mode_trans_ind->old_hw_mode_index = fixed_param->old_hw_mode_index; + hw_mode_trans_ind->new_hw_mode_index = fixed_param->new_hw_mode_index; + hw_mode_trans_ind->num_vdev_mac_entries = + fixed_param->num_vdev_mac_entries; + WMA_LOGI("%s: old_hw_mode_index:%d new_hw_mode_index:%d entries=%d", + __func__, fixed_param->old_hw_mode_index, + fixed_param->new_hw_mode_index, + fixed_param->num_vdev_mac_entries); + + /* Store the vdev-mac map in WMA and send to policy manager */ + for (i = 0; i < fixed_param->num_vdev_mac_entries; i++) { + uint32_t vdev_id, mac_id, pdev_id; + vdev_id = vdev_mac_entry[i].vdev_id; + pdev_id = vdev_mac_entry[i].pdev_id; + + if (pdev_id == WMI_PDEV_ID_SOC) { + WMA_LOGE("%s: soc level id received for mac id)", + __func__); + QDF_BUG(0); + return; + } + + mac_id = WMA_PDEV_TO_MAC_MAP(vdev_mac_entry[i].pdev_id); + + WMA_LOGI("%s: vdev_id:%d mac_id:%d", + __func__, vdev_id, mac_id); + + hw_mode_trans_ind->vdev_mac_map[i].vdev_id = vdev_id; + hw_mode_trans_ind->vdev_mac_map[i].mac_id = mac_id; + wma_update_intf_hw_mode_params(vdev_id, mac_id, + fixed_param->new_hw_mode_index); + } + wma->old_hw_mode_index = fixed_param->old_hw_mode_index; + wma->new_hw_mode_index = fixed_param->new_hw_mode_index; + + WMA_LOGI("%s: Updated: old_hw_mode_index:%d new_hw_mode_index:%d", + __func__, wma->old_hw_mode_index, wma->new_hw_mode_index); +} + /** * wma_pdev_hw_mode_transition_evt_handler() - HW mode transition evt handler * @handle: WMI handle @@ -2505,7 +2565,6 @@ static int wma_pdev_hw_mode_transition_evt_handler(void *handle, uint8_t *event, uint32_t len) { - uint32_t i; WMI_PDEV_HW_MODE_TRANSITION_EVENTID_param_tlvs *param_buf; wmi_pdev_hw_mode_transition_event_fixed_param *wmi_event; wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry; @@ -2532,46 +2591,10 @@ static int wma_pdev_hw_mode_transition_evt_handler(void *handle, } wmi_event = param_buf->fixed_param; - hw_mode_trans_ind->old_hw_mode_index = wmi_event->old_hw_mode_index; - hw_mode_trans_ind->new_hw_mode_index = wmi_event->new_hw_mode_index; - hw_mode_trans_ind->num_vdev_mac_entries = - wmi_event->num_vdev_mac_entries; - WMA_LOGI("%s: old_hw_mode_index:%d new_hw_mode_index:%d entries=%d", - __func__, wmi_event->old_hw_mode_index, - wmi_event->new_hw_mode_index, wmi_event->num_vdev_mac_entries); - vdev_mac_entry = param_buf->wmi_pdev_set_hw_mode_response_vdev_mac_mapping; - - /* Store the vdev-mac map in WMA and prepare to send to HDD */ - for (i = 0; i < wmi_event->num_vdev_mac_entries; i++) { - uint32_t vdev_id, mac_id, pdev_id; - vdev_id = vdev_mac_entry[i].vdev_id; - pdev_id = vdev_mac_entry[i].pdev_id; - - if (pdev_id == WMI_PDEV_ID_SOC) { - WMA_LOGE("%s: soc level id received for mac id)", - __func__); - QDF_BUG(0); - return QDF_STATUS_E_FAILURE; - } - - mac_id = WMA_PDEV_TO_MAC_MAP(vdev_mac_entry[i].pdev_id); - - WMA_LOGI("%s: vdev_id:%d mac_id:%d", - __func__, vdev_id, mac_id); - - hw_mode_trans_ind->vdev_mac_map[i].vdev_id = vdev_id; - hw_mode_trans_ind->vdev_mac_map[i].mac_id = mac_id; - wma_update_intf_hw_mode_params(vdev_id, mac_id, - wmi_event->new_hw_mode_index); - } - wma->old_hw_mode_index = wmi_event->old_hw_mode_index; - wma->new_hw_mode_index = wmi_event->new_hw_mode_index; - - WMA_LOGI("%s: Updated: old_hw_mode_index:%d new_hw_mode_index:%d", - __func__, wma->old_hw_mode_index, wma->new_hw_mode_index); - + wma_process_pdev_hw_mode_trans_ind(wma, wmi_event, vdev_mac_entry, + hw_mode_trans_ind); /* Pass the message to PE */ wma_send_msg(wma, SIR_HAL_PDEV_HW_MODE_TRANS_IND, (void *) hw_mode_trans_ind, 0); diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 96d6fde1c490..11ee61b69cf4 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2155,6 +2155,13 @@ void wma_fill_roam_synch_buffer(tp_wma_handle wma, QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, key->replay_counter, SIR_REPLAY_CTR_LEN); } + if (param_buf->hw_mode_transition_fixed_param) + wma_process_pdev_hw_mode_trans_ind(wma, + param_buf->hw_mode_transition_fixed_param, + param_buf->wmi_pdev_set_hw_mode_response_vdev_mac_mapping, + &roam_synch_ind_ptr->hw_mode_trans_ind); + else + WMA_LOGD(FL("hw_mode transition fixed param is NULL")); } /** @@ -2284,8 +2291,7 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, } qdf_mem_zero(roam_synch_ind_ptr, len); wma_fill_roam_synch_buffer(wma, roam_synch_ind_ptr, param_buf); - - /* 24 byte MAC header and 12 byte to ssid IE */ + /* 24 byte MAC header and 12 byte to ssid IE */ if (roam_synch_ind_ptr->beaconProbeRespLength > (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET)) { ie_len = roam_synch_ind_ptr->beaconProbeRespLength - @@ -2308,6 +2314,16 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context, roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_PROPAGATION); wma_process_roam_synch_complete(wma, synch_event->vdev_id); + + /* update freq and channel width */ + wma->interfaces[synch_event->vdev_id].mhz = + roam_synch_ind_ptr->chan_freq; + if (roam_synch_ind_ptr->join_rsp) + wma->interfaces[synch_event->vdev_id].chan_width = + roam_synch_ind_ptr->join_rsp->vht_channel_width; + + wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context, + roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_COMPLETE); wma->interfaces[synch_event->vdev_id].roam_synch_delay = qdf_get_system_timestamp() - roam_synch_received; WMA_LOGD("LFR3: roam_synch_delay:%d", @@ -5789,9 +5805,9 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, return -ENOMEM; } if (wmi_event->notif == WMI_ROAM_NOTIF_ROAM_START) - op_code = SIR_ROAMING_TX_QUEUE_DISABLE; + op_code = SIR_ROAMING_START; if (wmi_event->notif == WMI_ROAM_NOTIF_ROAM_ABORT) - op_code = SIR_ROAMING_TX_QUEUE_ENABLE; + op_code = SIR_ROAMING_ABORT; roam_synch_data->roamedVdevId = wmi_event->vdev_id; wma_handle->csr_roam_synch_cb( (tpAniSirGlobal)wma_handle->mac_context,