From b24b3a7e2506d9140dac8d14c1593ae4d6f6d14f Mon Sep 17 00:00:00 2001 From: Shiva Krishna Pittala Date: Thu, 20 Oct 2022 11:44:34 +0530 Subject: [PATCH] qcacmn: Add support to extract wmi_mlo_link_removal_evt_fixed_param TLV WMI_MLO_LINK_REMOVAL_EVENTID will be sent by FW to update the Host with the progress of the link delete operation. Add support to extract the fixed params TLV sent in this event. Change-Id: Ic42a822339363b1347ae174926a4dac19eef3f99 CRs-Fixed: 3318005 --- .../mlo_mgr/inc/wlan_mlo_mgr_public_structs.h | 8 +++++ wmi/inc/wmi_unified_11be_api.h | 14 ++++++++ wmi/inc/wmi_unified_priv.h | 5 +++ wmi/src/wmi_unified_11be_api.c | 12 +++++++ wmi/src/wmi_unified_11be_tlv.c | 36 +++++++++++++++++++ 5 files changed, 75 insertions(+) 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; }