diff --git a/umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h b/umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h index 934b20cb70..91f6f728ed 100644 --- a/umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h +++ b/umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h @@ -1019,4 +1019,12 @@ struct mlo_link_removal_cmd_params { uint8_t *reconfig_ml_ie; uint32_t reconfig_ml_ie_size; }; + +/* + * struct mlo_link_removal_evt_params - MLO link removal event parameters + * @vdev_id: vdev ID of the link to be removed + */ +struct mlo_link_removal_evt_params { + uint8_t vdev_id; +}; #endif diff --git a/wmi/inc/wmi_unified_11be_api.h b/wmi/inc/wmi_unified_11be_api.h index 611f621f49..98c20e464f 100644 --- a/wmi/inc/wmi_unified_11be_api.h +++ b/wmi/inc/wmi_unified_11be_api.h @@ -75,6 +75,20 @@ wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi_handle, void *evt_buf, QDF_STATUS wmi_send_mlo_link_removal_cmd( wmi_unified_t wmi, const struct mlo_link_removal_cmd_params *param); + +/** + * wmi_extract_mlo_link_removal_evt_fixed_param() - Extract fixed parameters TLV + * from the MLO link removal WMI event + * @wmi_handle: wmi handle + * @buf: pointer to event buffer + * @params: MLO link removal event parameters + * + * Return: QDF_STATUS_SUCCESS of operation + */ +QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param( + struct wmi_unified *wmi_handle, + void *buf, + struct mlo_link_removal_evt_params *params); #endif /*WLAN_FEATURE_11BE_MLO*/ #ifdef WLAN_FEATURE_11BE diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index df6e7d4b58..3c7513d274 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -3039,6 +3039,11 @@ QDF_STATUS QDF_STATUS (*send_mlo_link_removal_cmd)( wmi_unified_t wmi_handle, const struct mlo_link_removal_cmd_params *params); + +QDF_STATUS (*extract_mlo_link_removal_evt_fixed_param)( + struct wmi_unified *wmi_handle, + void *buf, + struct mlo_link_removal_evt_params *params); #endif #ifdef WLAN_FEATURE_SON diff --git a/wmi/src/wmi_unified_11be_api.c b/wmi/src/wmi_unified_11be_api.c index a3521319b9..4d8aa7ea3a 100644 --- a/wmi/src/wmi_unified_11be_api.c +++ b/wmi/src/wmi_unified_11be_api.c @@ -129,3 +129,15 @@ QDF_STATUS wmi_send_mlo_link_removal_cmd( return QDF_STATUS_E_FAILURE; } + +QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param( + struct wmi_unified *wmi, + void *buf, + struct mlo_link_removal_evt_params *params) +{ + if (wmi->ops->extract_mlo_link_removal_evt_fixed_param) + return wmi->ops->extract_mlo_link_removal_evt_fixed_param( + wmi, buf, params); + + return QDF_STATUS_E_FAILURE; +} diff --git a/wmi/src/wmi_unified_11be_tlv.c b/wmi/src/wmi_unified_11be_tlv.c index 7a51fb14cd..2e22d78c95 100644 --- a/wmi/src/wmi_unified_11be_tlv.c +++ b/wmi/src/wmi_unified_11be_tlv.c @@ -668,6 +668,40 @@ static QDF_STATUS send_mlo_link_removal_cmd_tlv( return ret; } +/** + * extract_mlo_link_removal_evt_fixed_param_tlv() - Extract fixed parameters TLV + * from the MLO link removal WMI event + * @wmi_handle: wmi handle + * @buf: pointer to event buffer + * @params: MLO link removal event parameters + * + * Return: QDF_STATUS of operation + */ +static QDF_STATUS +extract_mlo_link_removal_evt_fixed_param_tlv( + struct wmi_unified *wmi_handle, + void *buf, + struct mlo_link_removal_evt_params *params) +{ + WMI_MLO_LINK_REMOVAL_EVENTID_param_tlvs *param_buf = buf; + wmi_mlo_link_removal_evt_fixed_param *ev; + + if (!param_buf) { + wmi_err_rl("Param_buf is NULL"); + return QDF_STATUS_E_NULL_VALUE; + } + + if (!params) { + wmi_err_rl("params is NULL"); + return QDF_STATUS_E_NULL_VALUE; + } + + ev = param_buf->fixed_param; + params->vdev_id = ev->vdev_id; + + return QDF_STATUS_SUCCESS; +} + #ifdef WLAN_FEATURE_11BE size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req) { @@ -1383,4 +1417,6 @@ void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) ops->extract_mgmt_rx_ml_cu_params = extract_mgmt_rx_ml_cu_params_tlv; ops->send_mlo_link_removal_cmd = send_mlo_link_removal_cmd_tlv; + ops->extract_mlo_link_removal_evt_fixed_param = + extract_mlo_link_removal_evt_fixed_param_tlv; }