diff --git a/os_if/linux/mlme/inc/osif_cm_util.h b/os_if/linux/mlme/inc/osif_cm_util.h index 7136bbd35b..b88a69fd8f 100644 --- a/os_if/linux/mlme/inc/osif_cm_util.h +++ b/os_if/linux/mlme/inc/osif_cm_util.h @@ -28,6 +28,9 @@ #include #include "wlan_cm_ucfg_api.h" #include "wlan_cm_public_struct.h" +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +#include "wlan_cm_roam_public_struct.h" +#endif #ifdef CONN_MGR_ADV_FEATURE #include #endif @@ -299,6 +302,23 @@ void osif_cm_unlink_bss(struct wlan_objmgr_vdev *vdev, uint8_t *ssid, uint8_t ssid_len) {} #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +/** + * typedef osif_cm_roam_rt_stats_cb: Callback to send roam + * stats event + * @roam_stats: roam_stats_event pointer + * @idx: TLV idx for roam stats event + * + * This callback sends roam_stats_event to userspace + * + * Context: Any context. + * Return: void + */ +typedef void + (*osif_cm_roam_rt_stats_cb)(struct roam_stats_event *roam_stats, + uint8_t idx); +#endif + #ifdef WLAN_FEATURE_PREAUTH_ENABLE /** * typedef osif_cm_ft_preauth_complete_cb: Callback to send fast @@ -347,6 +367,7 @@ typedef QDF_STATUS * @send_vdev_keys_cb: callback to send vdev keys * @get_scan_ie_params_cb: callback to get scan ie params * @set_hlp_data_cb: callback to legacy module to save hlp data + * @roam_rt_stats_event_cb: callback to send roam stats to userspace * @ft_preauth_complete_cb: callback to legacy module to send fast * transition event * @cckm_preauth_complete_cb: callback to legacy module to send cckm @@ -367,6 +388,9 @@ struct osif_cm_ops { #ifdef WLAN_FEATURE_FILS_SK osif_cm_set_hlp_data_cb set_hlp_data_cb; #endif +#ifdef WLAN_FEATURE_ROAM_OFFLOAD + osif_cm_roam_rt_stats_cb roam_rt_stats_event_cb; +#endif #ifdef WLAN_FEATURE_PREAUTH_ENABLE osif_cm_ft_preauth_complete_cb ft_preauth_complete_cb; #ifdef FEATURE_WLAN_ESE diff --git a/os_if/linux/mlme/src/osif_cm_util.c b/os_if/linux/mlme/src/osif_cm_util.c index 3b9c35ea79..1380ebd71d 100644 --- a/os_if/linux/mlme/src/osif_cm_util.c +++ b/os_if/linux/mlme/src/osif_cm_util.c @@ -465,6 +465,27 @@ osif_cm_get_scan_ie_info_cb(struct wlan_objmgr_vdev *vdev, { return osif_cm_get_scan_ie_params(vdev, scan_ie, dot11mode_filter); } + +/** + * osif_cm_roam_rt_stats_evt_cb() - Roam stats callback + * @roam_stats: roam_stats_event pointer + * @idx: TLV idx for roam_stats_event + * + * This callback indicates os_if that roam stats event is received + * so that os_if can send the event + * + * Return: void + */ + +static void +osif_cm_roam_rt_stats_evt_cb(struct roam_stats_event *roam_stats, + uint8_t idx) +{ + if (osif_cm_legacy_ops && + osif_cm_legacy_ops->roam_rt_stats_event_cb) + osif_cm_legacy_ops->roam_rt_stats_event_cb(roam_stats, idx); +} + #endif #ifdef WLAN_FEATURE_PREAUTH_ENABLE @@ -540,6 +561,7 @@ static struct mlme_cm_ops cm_ops = { .mlme_cm_roam_abort_cb = osif_cm_roam_abort_cb, .mlme_cm_roam_cmpl_cb = osif_cm_roam_cmpl_cb, .mlme_cm_roam_get_scan_ie_cb = osif_cm_get_scan_ie_info_cb, + .mlme_cm_roam_rt_stats_cb = osif_cm_roam_rt_stats_evt_cb, #endif #ifdef WLAN_FEATURE_PREAUTH_ENABLE .mlme_cm_ft_preauth_cmpl_cb = osif_cm_ft_preauth_cmpl_cb, diff --git a/umac/mlme/include/wlan_mlme_cmn.h b/umac/mlme/include/wlan_mlme_cmn.h index 093ef58fbb..f30beaa6ec 100644 --- a/umac/mlme/include/wlan_mlme_cmn.h +++ b/umac/mlme/include/wlan_mlme_cmn.h @@ -25,6 +25,9 @@ #include #include #include "wlan_cm_public_struct.h" +#ifdef WLAN_FEATURE_ROAM_OFFLOAD +#include "wlan_cm_roam_public_struct.h" +#endif #include "wlan_twt_public_structs.h" /** @@ -79,6 +82,10 @@ * @scan_ie: scan ie element pointer * @dot11mode_filter: dot11mode filter enumn pointer * + * @mlme_cm_roam_rt_stats_cb: Roam stats cb + * @roam_stats_event: roam_stats_event pointer + * @idx: TLV idx for roam_stats_event + * * @mlme_cm_ft_preauth_cmpl_cb: Roam ft preauth complete cb * @vdev: vdev pointer * @rsp: preauth response pointer @@ -125,6 +132,8 @@ struct mlme_cm_ops { QDF_STATUS (*mlme_cm_roam_get_scan_ie_cb)(struct wlan_objmgr_vdev *vdev, struct element_info *scan_ie, enum dot11_mode_filter *dot11mode_filter); + void (*mlme_cm_roam_rt_stats_cb)(struct roam_stats_event *roam_stats, + uint8_t idx); #endif #ifdef WLAN_FEATURE_PREAUTH_ENABLE QDF_STATUS (*mlme_cm_ft_preauth_cmpl_cb)( @@ -932,6 +941,14 @@ QDF_STATUS mlme_cm_osif_roam_abort_ind(struct wlan_objmgr_vdev *vdev); */ QDF_STATUS mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev); +/** + * mlme_cm_osif_roam_rt_stats() - osif Roam stats callback + * @roam_stats: roam_stats_event pointer + * @idx: TLV idx for roam_stats_event + * + * Return: void + */ +void mlme_cm_osif_roam_rt_stats(struct roam_stats_event *roam_stats, uint8_t idx); /** * mlme_cm_osif_roam_get_scan_params() - osif Roam get scan params callback * @vdev: vdev pointer diff --git a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c index 9305489e07..831c64d4b3 100644 --- a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c +++ b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c @@ -602,6 +602,16 @@ mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev) return ret; } +void +mlme_cm_osif_roam_rt_stats(struct roam_stats_event *roam_stats, + uint8_t idx) +{ + if (glbl_cm_ops && + glbl_cm_ops->mlme_cm_roam_rt_stats_cb) + glbl_cm_ops->mlme_cm_roam_rt_stats_cb(roam_stats, + idx); +} + QDF_STATUS mlme_cm_osif_roam_get_scan_params(struct wlan_objmgr_vdev *vdev, struct element_info *scan_ie,