diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h index 70c5be833b..b900a2dd9e 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h +++ b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h @@ -67,11 +67,13 @@ struct mgmt_rx_reo_snapshot { /* * struct mgmt_rx_reo_params - MGMT Rx REO parameters + * @valid: Whether these params are valid * @pdev_id: pdev ID for which FW consumed event is received * @mgmt_pkt_ctr: MGMT packet counter of the frame that is consumed * @global_timestamp: Global timestamp of the frame that is consumed */ struct mgmt_rx_reo_params { + bool valid; uint8_t pdev_id; uint16_t mgmt_pkt_ctr; uint32_t global_timestamp; diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index f844d7bf4d..bec5e6e399 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -116,6 +116,8 @@ #include "wmi_unified_cp_stats_api.h" +#include "wlan_mgmt_txrx_rx_reo_public_structs.h" + typedef qdf_nbuf_t wmi_buf_t; #define wmi_buf_data(_buf) qdf_nbuf_data(_buf) @@ -2742,6 +2744,20 @@ QDF_STATUS wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf, struct mgmt_rx_event_params *hdr, uint8_t **bufp); +#ifdef WLAN_MGMT_RX_REO_SUPPORT +/** + * wmi_extract_mgmt_rx_fw_consumed() - extract MGMT Rx FW consumed event + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buffer + * @params: Pointer to MGMT Rx REO parameters + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +QDF_STATUS +wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle, void *evt_buf, + struct mgmt_rx_reo_params *params); +#endif + /** * wmi_extract_vdev_roam_param() - extract vdev roam param from event * @wmi_handle: wmi handle diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index c91498076f..2621e9a69e 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4685,6 +4685,9 @@ typedef enum { wmi_pdev_get_halphy_cal_status_event_id, wmi_pdev_set_halphy_cal_event_id, wmi_pdev_aoa_phasedelta_event_id, +#ifdef WLAN_MGMT_RX_REO_SUPPORT + wmi_mgmt_rx_fw_consumed_eventid, +#endif wmi_events_max, } wmi_conv_event_id; diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 5982e1db89..72ada5d406 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2632,6 +2632,12 @@ QDF_STATUS (*extract_halphy_cal_ev_param)(wmi_unified_t wmi_handle, void *evt_buf, struct wmi_host_pdev_set_halphy_cal_event *param); + +#ifdef WLAN_MGMT_RX_REO_SUPPORT +QDF_STATUS (*extract_mgmt_rx_fw_consumed)(wmi_unified_t wmi_handle, + void *evt_buf, + struct mgmt_rx_reo_params *params); +#endif }; /* Forward declartion for psoc*/ diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index d04e463eb7..a328cbd2df 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -1956,6 +1956,19 @@ wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf, return QDF_STATUS_E_FAILURE; } +#ifdef WLAN_MGMT_RX_REO_SUPPORT +QDF_STATUS wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle, + void *evt_buf, + struct mgmt_rx_reo_params *params) +{ + if (wmi_handle->ops->extract_mgmt_rx_fw_consumed) + return wmi_handle->ops->extract_mgmt_rx_fw_consumed( + wmi_handle, evt_buf, params); + + return QDF_STATUS_E_FAILURE; +} +#endif + QDF_STATUS wmi_extract_vdev_roam_param(wmi_unified_t wmi_handle, void *evt_buf, wmi_host_roam_event *param) diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 159720339b..5b39c42508 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -10618,6 +10618,48 @@ static QDF_STATUS extract_mgmt_rx_params_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +#ifdef WLAN_MGMT_RX_REO_SUPPORT +/** + * extract_mgmt_rx_fw_consumed_tlv() - extract MGMT Rx FW consumed event + * @wmi_handle: wmi handle + * @evt_buf: pointer to event buffer + * @params: Pointer to MGMT Rx REO parameters + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS +extract_mgmt_rx_fw_consumed_tlv(wmi_unified_t wmi_handle, + void *evt_buf, + struct mgmt_rx_reo_params *params) +{ + WMI_MGMT_RX_FW_CONSUMED_EVENTID_param_tlvs *param_tlvs; + wmi_mgmt_rx_fw_consumed_hdr *ev_hdr; + + param_tlvs = evt_buf; + if (!param_tlvs) { + wmi_err("param_tlvs is NULL"); + return QDF_STATUS_E_INVAL; + } + + ev_hdr = param_tlvs->hdr; + if (!params) { + wmi_err("Rx REO parameters is NULL"); + return QDF_STATUS_E_INVAL; + } + + params->pdev_id = wmi_handle->ops->convert_pdev_id_target_to_host( + wmi_handle, + ev_hdr->pdev_id); + params->valid = WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_VALID_GET( + ev_hdr->mgmt_pkt_ctr_info); + params->global_timestamp = ev_hdr->global_timestamp; + params->mgmt_pkt_ctr = WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_GET( + ev_hdr->mgmt_pkt_ctr_info); + + return QDF_STATUS_SUCCESS; +} +#endif + /** * extract_vdev_roam_param_tlv() - extract vdev roam param from event * @wmi_handle: wmi handle @@ -15769,6 +15811,9 @@ struct wmi_ops tlv_ops = { .extract_halphy_cal_status_ev_param = extract_halphy_cal_status_ev_param_tlv, .send_set_halphy_cal = send_set_halphy_cal_tlv, .extract_halphy_cal_ev_param = extract_halphy_cal_ev_param_tlv, +#ifdef WLAN_MGMT_RX_REO_SUPPORT + .extract_mgmt_rx_fw_consumed = extract_mgmt_rx_fw_consumed_tlv, +#endif }; /** @@ -16187,6 +16232,10 @@ event_ids[wmi_roam_scan_chan_list_id] = WMI_PDEV_SET_HALPHY_CAL_BMAP_EVENTID; event_ids[wmi_pdev_aoa_phasedelta_event_id] = WMI_PDEV_AOA_PHASEDELTA_EVENTID; +#ifdef WLAN_MGMT_RX_REO_SUPPORT + event_ids[wmi_mgmt_rx_fw_consumed_eventid] = + WMI_MGMT_RX_FW_CONSUMED_EVENTID; +#endif } #ifdef WLAN_FEATURE_LINK_LAYER_STATS