qcacmn: Add target_if layer functionality for FW consumed event handling

Add register and unregister handlers to MGMT Rx FW consumed event handlers.
Add target if layer handlers for the event.

Change-Id: I3b70f86811c562a3be75353585dc1f6cf43c02ac
CRs-Fixed: 2959925
This commit is contained in:
Shiva Krishna Pittala
2021-08-03 13:39:19 +05:30
committed by Madan Koyyalamudi
父節點 a52614b732
當前提交 593e206028
共有 2 個文件被更改,包括 96 次插入4 次删除

查看文件

@@ -25,6 +25,7 @@
#include <qdf_types.h>
#include <wlan_objmgr_psoc_obj.h>
#include <wlan_mgmt_txrx_rx_reo_utils_api.h>
#include <wlan_lmac_if_api.h>
#ifdef WLAN_MGMT_RX_REO_SUPPORT
@@ -65,6 +66,26 @@ target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc);
QDF_STATUS
target_if_mgmt_rx_reo_tx_ops_register(
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops);
/**
* target_if_mgmt_rx_reo_get_rx_ops() - Retrieve rx_ops of MGMT Rx REO module
* @psoc:psoc context
*
* Return: Pointer to rx_ops of MGMT Rx REO module
*/
static struct wlan_lmac_if_mgmt_rx_reo_rx_ops *
target_if_mgmt_rx_reo_get_rx_ops(struct wlan_objmgr_psoc *psoc)
{
struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_rx_ops;
mgmt_rx_ops = wlan_lmac_if_get_mgmt_txrx_rx_ops(psoc);
if (!mgmt_rx_ops) {
mgmt_rx_reo_err("MGMT TxRx rx_ops is NULL");
return NULL;
}
return &mgmt_rx_ops->mgmt_rx_reo_rx_ops;
}
#else
/**
* target_if_mgmt_rx_reo_register_event_handlers() - Register management

查看文件

@@ -25,10 +25,68 @@
#include <wlan_mgmt_txrx_rx_reo_public_structs.h>
#include <target_if_mgmt_txrx_rx_reo.h>
/**
* target_if_mgmt_rx_reo_fw_consumed_event_handler() - WMI event handler to
* process MGMT Rx FW consumed event handler
* @scn: Pointer to scn object
* @data_buf: Pointer to event buffer
* @data_len: Length of event buffer
*
* Return: 0 for success, else failure
*/
static int
target_if_mgmt_rx_reo_fw_consumed_event_handler(
ol_scn_t scn, uint8_t *data, uint32_t datalen)
{
struct wlan_objmgr_psoc *psoc;
struct wmi_unified *wmi_handle;
QDF_STATUS status;
struct mgmt_rx_reo_params params;
struct wlan_lmac_if_mgmt_rx_reo_rx_ops *mgmt_rx_reo_rx_ops;
psoc = target_if_get_psoc_from_scn_hdl(scn);
if (!psoc) {
mgmt_rx_reo_err("null psoc");
return -EINVAL;
}
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
mgmt_rx_reo_err("wmi_handle is NULL");
return -EINVAL;
}
status = wmi_extract_mgmt_rx_fw_consumed(wmi_handle, data, &params);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("Failed to extract mgmt rx params");
return -EINVAL;
}
mgmt_rx_reo_rx_ops = target_if_mgmt_rx_reo_get_rx_ops(psoc);
if (!mgmt_rx_reo_rx_ops) {
mgmt_rx_reo_err("rx_ops of MGMT Rx REO module is NULL");
return -EINVAL;
}
if (!mgmt_rx_reo_rx_ops->fw_consumed_event_handler) {
mgmt_rx_reo_err("FW consumed event handler is NULL");
return -EINVAL;
}
status = mgmt_rx_reo_rx_ops->fw_consumed_event_handler(psoc, &params);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("FW consumed event handling failed");
return -EINVAL;
}
return 0;
}
QDF_STATUS
target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc)
{
struct wmi_unified *wmi_handle;
QDF_STATUS status;
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
@@ -36,15 +94,23 @@ target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_INVAL;
}
/* Register mgmt rx fw consumed event handler here */
status = wmi_unified_register_event_handler(
wmi_handle,
wmi_mgmt_rx_fw_consumed_eventid,
target_if_mgmt_rx_reo_fw_consumed_event_handler,
WMI_RX_UMAC_CTX);
return QDF_STATUS_SUCCESS;
if (QDF_IS_STATUS_ERROR(status))
mgmt_rx_reo_err("Registering for MGMT Rx FW consumed event failed");
return status;
}
QDF_STATUS
target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc)
{
struct wmi_unified *wmi_handle;
QDF_STATUS status;
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
@@ -52,9 +118,14 @@ target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_INVAL;
}
/* Unregister mgmt rx fw consumed event handler here */
status = wmi_unified_unregister_event_handler(
wmi_handle,
wmi_mgmt_rx_fw_consumed_eventid);
return QDF_STATUS_SUCCESS;
if (QDF_IS_STATUS_ERROR(status))
mgmt_rx_reo_err("Unregistering for MGMT Rx FW consumed event failed");
return status;
}
/**