qcacmn: Add APIs to extract MGMT Rx REO params tlv

When MGMT Rx REO feature is enabled, FW will be sending MGMT Rx REO
parameters TLV as part of WMI_MGMT_RX_EVENTID for the frames that require
reordering. Add APIs to extract the same.

Change-Id: I57b132927cf413384d680b5778bfe6a2e2737adf
CRs-Fixed: 2960471
This commit is contained in:
Shiva Krishna Pittala
2021-05-16 18:20:26 +05:30
committed by Madan Koyyalamudi
parent a4d289451e
commit 361f45dd82
7 changed files with 132 additions and 2 deletions

View File

@@ -26,6 +26,8 @@
#include <wlan_objmgr_psoc_obj.h> #include <wlan_objmgr_psoc_obj.h>
#include <wlan_mgmt_txrx_rx_reo_utils_api.h> #include <wlan_mgmt_txrx_rx_reo_utils_api.h>
#include <wlan_lmac_if_api.h> #include <wlan_lmac_if_api.h>
#include <wlan_lmac_if_def.h>
#include <wmi_unified_param.h>
#ifdef WLAN_MGMT_RX_REO_SUPPORT #ifdef WLAN_MGMT_RX_REO_SUPPORT
@@ -86,6 +88,20 @@ target_if_mgmt_rx_reo_get_rx_ops(struct wlan_objmgr_psoc *psoc)
return &mgmt_rx_ops->mgmt_rx_reo_rx_ops; return &mgmt_rx_ops->mgmt_rx_reo_rx_ops;
} }
/**
* target_if_mgmt_rx_reo_extract_reo_params() - Extract MGMT Rx REO params from
* MGMT_RX_EVENT_ID
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @params: Pointer to MGMT Rx event parameters
*
* Return: QDF_STATUS of operation
*/
QDF_STATUS
target_if_mgmt_rx_reo_extract_reo_params(wmi_unified_t wmi_handle,
void *evt_buf,
struct mgmt_rx_event_params *params);
#else #else
/** /**
* target_if_mgmt_rx_reo_register_event_handlers() - Register management * target_if_mgmt_rx_reo_register_event_handlers() - Register management
@@ -126,5 +142,22 @@ target_if_mgmt_rx_reo_tx_ops_register(
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
/**
* target_if_mgmt_rx_reo_extract_reo_params() - Extract MGMT Rx REO params from
* MGMT_RX_EVENT_ID
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @hdr: Pointer to MGMT Rx event parameters
*
* Return: QDF_STATUS of operation
*/
static inline QDF_STATUS
target_if_mgmt_rx_reo_extract_reo_params(wmi_unified_t wmi_handle,
void *evt_buf,
struct mgmt_rx_event_params *hdr)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_MGMT_RX_REO_SUPPORT */ #endif /* WLAN_MGMT_RX_REO_SUPPORT */
#endif /* _TARGET_IF_MGMT_TXRX_RX_REO_H_ */ #endif /* _TARGET_IF_MGMT_TXRX_RX_REO_H_ */

View File

@@ -221,6 +221,20 @@ target_if_mgmt_rx_reo_read_snapshot(
return status; return status;
} }
QDF_STATUS
target_if_mgmt_rx_reo_extract_reo_params(
wmi_unified_t wmi_handle, void *evt_buf,
struct mgmt_rx_event_params *params)
{
if (!params) {
mgmt_rx_reo_err("MGMT Rx event parameters is NULL");
return QDF_STATUS_E_INVAL;
}
return wmi_extract_mgmt_rx_reo_params(wmi_handle, evt_buf,
params->reo_params);
}
QDF_STATUS QDF_STATUS
target_if_mgmt_rx_reo_tx_ops_register( target_if_mgmt_rx_reo_tx_ops_register(
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops) struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops)

View File

@@ -29,6 +29,7 @@
#include "wlan_objmgr_cmn.h" #include "wlan_objmgr_cmn.h"
#include "qdf_nbuf.h" #include "qdf_nbuf.h"
#include "wlan_mgmt_txrx_rx_reo_public_structs.h"
#define mgmt_txrx_alert(params...) \ #define mgmt_txrx_alert(params...) \
QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_TXRX, params) QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_TXRX, params)
@@ -773,6 +774,7 @@ enum mgmt_frame_type {
* @pdev_id: pdev id * @pdev_id: pdev id
* @rx_params: pointer to other rx params * @rx_params: pointer to other rx params
* (win specific, will be removed in phase 4) * (win specific, will be removed in phase 4)
* @reo_params: Pointer to MGMT Rx REO params
*/ */
struct mgmt_rx_event_params { struct mgmt_rx_event_params {
uint32_t chan_freq; uint32_t chan_freq;
@@ -789,6 +791,9 @@ struct mgmt_rx_event_params {
uint32_t tsf_l32; uint32_t tsf_l32;
uint8_t pdev_id; uint8_t pdev_id;
void *rx_params; void *rx_params;
#ifdef WLAN_MGMT_RX_REO_SUPPORT
struct mgmt_rx_reo_params *reo_params;
#endif
}; };
/** /**

View File

@@ -116,8 +116,6 @@
#include "wmi_unified_cp_stats_api.h" #include "wmi_unified_cp_stats_api.h"
#include "wlan_mgmt_txrx_rx_reo_public_structs.h"
typedef qdf_nbuf_t wmi_buf_t; typedef qdf_nbuf_t wmi_buf_t;
#define wmi_buf_data(_buf) qdf_nbuf_data(_buf) #define wmi_buf_data(_buf) qdf_nbuf_data(_buf)
@@ -2756,6 +2754,19 @@ wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf,
QDF_STATUS QDF_STATUS
wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle, void *evt_buf, wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle, void *evt_buf,
struct mgmt_rx_reo_params *params); struct mgmt_rx_reo_params *params);
/**
* wmi_extract_mgmt_rx_reo_params() - extract MGMT Rx REO params from
* MGMT_RX_EVENT_ID
* @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_reo_params(wmi_unified_t wmi_handle, void *evt_buf,
struct mgmt_rx_reo_params *params);
#endif #endif
/** /**

View File

@@ -2642,6 +2642,10 @@ QDF_STATUS
QDF_STATUS (*extract_mgmt_rx_fw_consumed)(wmi_unified_t wmi_handle, QDF_STATUS (*extract_mgmt_rx_fw_consumed)(wmi_unified_t wmi_handle,
void *evt_buf, void *evt_buf,
struct mgmt_rx_reo_params *params); struct mgmt_rx_reo_params *params);
QDF_STATUS (*extract_mgmt_rx_reo_params)(wmi_unified_t wmi_handle,
void *evt_buf,
struct mgmt_rx_reo_params *params);
#endif #endif
}; };

View File

@@ -1967,6 +1967,17 @@ QDF_STATUS wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
QDF_STATUS
wmi_extract_mgmt_rx_reo_params(wmi_unified_t wmi_handle, void *evt_buf,
struct mgmt_rx_reo_params *params)
{
if (wmi_handle->ops->extract_mgmt_rx_reo_params)
return wmi_handle->ops->extract_mgmt_rx_reo_params(
wmi_handle, evt_buf, params);
return QDF_STATUS_E_FAILURE;
}
#endif #endif
QDF_STATUS QDF_STATUS

View File

@@ -10658,6 +10658,57 @@ extract_mgmt_rx_fw_consumed_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
/**
* extract_mgmt_rx_reo_params_tlv() - extract MGMT Rx REO params from
* MGMT_RX_EVENT_ID
* @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_reo_params_tlv(wmi_unified_t wmi_handle,
void *evt_buf, struct mgmt_rx_reo_params *reo_params)
{
WMI_MGMT_RX_EVENTID_param_tlvs *param_tlvs;
wmi_mgmt_rx_reo_params *reo_params_tlv;
wmi_mgmt_rx_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 (!ev_hdr) {
wmi_err("Rx event is NULL");
return QDF_STATUS_E_INVAL;
}
reo_params_tlv = param_tlvs->reo_params;
if (!reo_params_tlv) {
wmi_err("mgmt_rx_reo_params TLV is not sent by FW");
return QDF_STATUS_E_INVAL;
}
if (!reo_params) {
wmi_err("MGMT Rx REO params is NULL");
return QDF_STATUS_E_INVAL;
}
reo_params->pdev_id = wmi_handle->ops->convert_pdev_id_target_to_host(
wmi_handle,
ev_hdr->pdev_id);
reo_params->valid = WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_VALID_GET(
reo_params_tlv->mgmt_pkt_ctr_link_info);
reo_params->global_timestamp = reo_params_tlv->global_timestamp;
reo_params->mgmt_pkt_ctr = WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_GET(
reo_params_tlv->mgmt_pkt_ctr_link_info);
return QDF_STATUS_SUCCESS;
}
#endif #endif
/** /**
@@ -15813,6 +15864,7 @@ struct wmi_ops tlv_ops = {
.extract_halphy_cal_ev_param = extract_halphy_cal_ev_param_tlv, .extract_halphy_cal_ev_param = extract_halphy_cal_ev_param_tlv,
#ifdef WLAN_MGMT_RX_REO_SUPPORT #ifdef WLAN_MGMT_RX_REO_SUPPORT
.extract_mgmt_rx_fw_consumed = extract_mgmt_rx_fw_consumed_tlv, .extract_mgmt_rx_fw_consumed = extract_mgmt_rx_fw_consumed_tlv,
.extract_mgmt_rx_reo_params = extract_mgmt_rx_reo_params_tlv,
#endif #endif
}; };