From a52614b732a2b876e5044d04667b7c75deec9697 Mon Sep 17 00:00:00 2001 From: Shiva Krishna Pittala Date: Tue, 3 Aug 2021 13:33:41 +0530 Subject: [PATCH] qcacmn: Add WMI layer functionality for MGMT Rx FW consumed event handler When MGMT frames are consumed by the FW, FW sends MGMT Rx FW consumed event to the Host. Add WMI layer functionality for this event handling. Change-Id: Id95f41a717b88589e861781e1111b17dc90475be CRs-Fixed: 2959118 --- .../wlan_mgmt_txrx_rx_reo_public_structs.h | 2 + wmi/inc/wmi_unified_api.h | 16 ++++++ wmi/inc/wmi_unified_param.h | 3 ++ wmi/inc/wmi_unified_priv.h | 6 +++ wmi/src/wmi_unified_api.c | 13 +++++ wmi/src/wmi_unified_tlv.c | 49 +++++++++++++++++++ 6 files changed, 89 insertions(+) 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