diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 28a9522582cc..69af49913683 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -276,6 +276,7 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { #define WE_GET_GTX_BWMASK 54 #define WE_GET_TEMPERATURE 56 #define WE_CAP_TSF 58 +#define WE_GET_ROAM_SYNCH_DELAY 59 /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_INT_GET_INT (SIOCIWFIRSTPRIV + 2) @@ -6804,6 +6805,15 @@ static int __iw_setnone_getint(struct net_device *dev, break; } + case WE_GET_ROAM_SYNCH_DELAY: + { + hddLog(LOG1, "GET ROAM SYNCH DELAY"); + *value = wma_cli_get_command(pAdapter->sessionId, + GEN_VDEV_ROAM_SYNCH_DELAY, + GEN_CMD); + break; + } + case WE_GET_BURST_ENABLE: { hddLog(LOG1, "GET Burst enable value"); @@ -11069,6 +11079,12 @@ static const struct iw_priv_args we_private_args[] = { IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "setMonChan"} , + + {WE_GET_ROAM_SYNCH_DELAY, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "hostroamdelay"} + , }; const struct iw_handler_def we_handler_def = { diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 3f1ac3b5fac4..9feb2e06451d 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -912,6 +912,7 @@ struct wma_txrx_node { uint32_t chain_mask; uint32_t mac_id; bool roaming_in_progress; + int32_t roam_synch_delay; }; #if defined(QCA_WIFI_FTM) diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 039202571f2a..0b72c211c025 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -67,6 +67,7 @@ typedef enum { GEN_PARAM_MODULATED_DTIM, GEN_PARAM_CAPTURE_TSF, GEN_PARAM_RESET_TSF_GPIO, + GEN_VDEV_ROAM_SYNCH_DELAY, } GEN_PARAM; #define VDEV_CMD 1 diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 347c745c95d8..92b63fc635bd 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -387,6 +387,9 @@ int wma_cli_get_command(int vdev_id, int param_id, int vpdev) case GEN_VDEV_PARAM_AMSDU: ret = intr[vdev_id].config.amsdu; break; + case GEN_VDEV_ROAM_SYNCH_DELAY: + ret = intr[vdev_id].roam_synch_delay; + break; default: WMA_LOGE("Invalid generic vdev command/Not" " yet implemented 0x%x", param_id); diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 0822e76b54be..39bc2196bb3d 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2031,6 +2031,7 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, tpSirBssDescription bss_desc_ptr = NULL; uint16_t ie_len = 0; int status = -EINVAL; + qdf_time_t roam_synch_received = qdf_get_system_timestamp(); WMA_LOGD("LFR3:%s", __func__); if (!event) { @@ -2095,6 +2096,10 @@ 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); + wma->interfaces[synch_event->vdev_id].roam_synch_delay = + qdf_get_system_timestamp() - roam_synch_received; + WMA_LOGD("LFR3: roam_synch_delay:%d", + wma->interfaces[synch_event->vdev_id].roam_synch_delay); cleanup_label: if (roam_synch_ind_ptr->join_rsp) qdf_mem_free(roam_synch_ind_ptr->join_rsp);