qcacmn: Add support for run-time enablement of MGMT Rx REO feature
Add INI and WMI service bit based enablement support for MGMT Rx REO feature. CRs-Fixed: 3014353 Change-Id: I95650718d69b70f119621a9481dbf1518bc5500b
This commit is contained in:

committed by
Madan Koyyalamudi

parent
bb30b105cf
commit
81f3009593
@@ -50,6 +50,7 @@
|
||||
#else
|
||||
#define CFG_WLAN_CM_UTF_PARAM
|
||||
#endif
|
||||
#include <cfg_mgmt_txrx.h>
|
||||
|
||||
#define CFG_CONVERGED_ALL \
|
||||
CFG_SCAN_ALL \
|
||||
@@ -62,7 +63,8 @@
|
||||
CFG_CFR_ALL \
|
||||
CFG_MLME_SCORE_ALL \
|
||||
CFG_WLAN_CM_UTF_PARAM \
|
||||
CFG_CMN_MLME_ALL
|
||||
CFG_CMN_MLME_ALL \
|
||||
CFG_MGMT_TXRX_ALL
|
||||
|
||||
#endif /* __CFG_CONVERGED_H */
|
||||
|
||||
|
@@ -185,6 +185,11 @@ static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle,
|
||||
|
||||
target_if_atf_cfg_enable(psoc, tgt_hdl, event);
|
||||
|
||||
if (wmi_service_enabled(wmi_handle,
|
||||
wmi_service_mgmt_rx_reo_supported))
|
||||
wlan_psoc_nif_fw_ext_cap_set(psoc,
|
||||
WLAN_SOC_F_MGMT_RX_REO_CAPABLE);
|
||||
|
||||
if (!wmi_service_enabled(wmi_handle, wmi_service_ext_msg))
|
||||
target_if_qwrap_cfg_enable(psoc, tgt_hdl, event);
|
||||
|
||||
|
@@ -340,9 +340,26 @@ target_if_mgmt_rx_reo_extract_reo_params(
|
||||
wmi_unified_t wmi_handle, void *evt_buf,
|
||||
struct mgmt_rx_event_params *params)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
|
||||
if (!wmi_handle) {
|
||||
mgmt_rx_reo_err("wmi_handle is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
psoc = target_if_get_psoc_from_scn_hdl(wmi_handle->scn_handle);
|
||||
if (!psoc) {
|
||||
mgmt_rx_reo_err("null psoc");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
/* If REO feature is not enabled, no need to extract REO params */
|
||||
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(psoc))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
if (!params) {
|
||||
mgmt_rx_reo_err("MGMT Rx event parameters is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
return wmi_extract_mgmt_rx_reo_params(wmi_handle, evt_buf,
|
||||
|
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "wlan_mgmt_txrx_rx_reo_i.h"
|
||||
#include <wlan_mgmt_txrx_rx_reo_tgt_api.h>
|
||||
#include "wlan_mgmt_txrx_main_i.h"
|
||||
#include <qdf_util.h>
|
||||
|
||||
static struct mgmt_rx_reo_context g_rx_reo_ctx;
|
||||
@@ -1266,3 +1267,99 @@ mgmt_rx_reo_deinit_context(void)
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_mgmt_rx_reo_initialize_snapshot_params() - Initialize a given snapshot
|
||||
* params object
|
||||
* @snapshot_params: Pointer to snapshot params object
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(
|
||||
struct mgmt_rx_reo_snapshot_params *snapshot_params)
|
||||
{
|
||||
snapshot_params->valid = false;
|
||||
snapshot_params->mgmt_pkt_ctr = 0;
|
||||
snapshot_params->global_timestamp = 0;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mgmt_rx_reo_pdev_obj_create_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS temp_status;
|
||||
struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx = NULL;
|
||||
enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
|
||||
|
||||
if (!pdev) {
|
||||
mgmt_rx_reo_err("pdev is null");
|
||||
status = QDF_STATUS_E_NULL_VALUE;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev)) {
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
mgmt_rx_reo_pdev_ctx = qdf_mem_malloc(sizeof(*mgmt_rx_reo_pdev_ctx));
|
||||
if (!mgmt_rx_reo_pdev_ctx) {
|
||||
mgmt_rx_reo_err("Allocation failure for REO pdev context");
|
||||
status = QDF_STATUS_E_NOMEM;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
snapshot_id = 0;
|
||||
while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
|
||||
struct mgmt_rx_reo_snapshot **snapshot_address;
|
||||
|
||||
snapshot_address = &mgmt_rx_reo_pdev_ctx->
|
||||
host_target_shared_snapshot[snapshot_id];
|
||||
temp_status = tgt_mgmt_rx_reo_get_snapshot_address(
|
||||
pdev, snapshot_id, snapshot_address);
|
||||
if (QDF_IS_STATUS_ERROR(temp_status)) {
|
||||
mgmt_rx_reo_err("Get snapshot address failed, id = %u",
|
||||
snapshot_id);
|
||||
status = temp_status;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(
|
||||
&mgmt_rx_reo_pdev_ctx->
|
||||
last_valid_shared_snapshot[snapshot_id]);
|
||||
snapshot_id++;
|
||||
}
|
||||
|
||||
/* Initialize Host snapshot params */
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(&mgmt_rx_reo_pdev_ctx->
|
||||
host_snapshot);
|
||||
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = mgmt_rx_reo_pdev_ctx;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
failure:
|
||||
if (mgmt_rx_reo_pdev_ctx)
|
||||
qdf_mem_free(mgmt_rx_reo_pdev_ctx);
|
||||
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = NULL;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mgmt_rx_reo_pdev_obj_destroy_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
qdf_mem_free(mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx);
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = NULL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -55,6 +55,58 @@
|
||||
(mgmt_rx_reo_compare_global_timestamps_gte( \
|
||||
(ts)->global_ts, mgmt_rx_reo_get_global_ts((entry)->rx_params)))
|
||||
|
||||
/*
|
||||
* struct mgmt_rx_reo_pdev_info - Pdev information required by the Management
|
||||
* Rx REO module
|
||||
* @host_snapshot: Latest snapshot seen at the Host.
|
||||
* It considers both MGMT Rx and MGMT FW consumed.
|
||||
* @last_valid_shared_snapshot: Array of last valid snapshots(for snapshots
|
||||
* shared between host and target)
|
||||
* @host_target_shared_snapshot: Array of snapshot addresses(for snapshots
|
||||
* shared between host and target)
|
||||
* @filter: MGMT Rx REO filter
|
||||
*/
|
||||
struct mgmt_rx_reo_pdev_info {
|
||||
struct mgmt_rx_reo_snapshot_params host_snapshot;
|
||||
struct mgmt_rx_reo_snapshot_params last_valid_shared_snapshot
|
||||
[MGMT_RX_REO_SHARED_SNAPSHOT_MAX];
|
||||
struct mgmt_rx_reo_snapshot *host_target_shared_snapshot
|
||||
[MGMT_RX_REO_SHARED_SNAPSHOT_MAX];
|
||||
struct mgmt_rx_reo_filter filter;
|
||||
};
|
||||
|
||||
/**
|
||||
* mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
|
||||
* management rx-reorder module
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being created and
|
||||
* creates management rx-reorder pdev context
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
mgmt_rx_reo_pdev_obj_create_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
|
||||
|
||||
/**
|
||||
* mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for
|
||||
* management rx-reorder feature
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being destroyed
|
||||
* and destroys management rx-reorder pdev context
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
mgmt_rx_reo_pdev_obj_destroy_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
|
||||
|
||||
/**
|
||||
* enum mgmt_rx_reo_frame_descriptor_type - Enumeration for management frame
|
||||
* descriptor type.
|
||||
@@ -260,10 +312,11 @@ static inline bool is_mgmt_rx_reo_required(
|
||||
struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
{
|
||||
/**
|
||||
* TODO: Need to implement the actual policy based on WMI service bit.
|
||||
* For now, returning false so that algorithm won't kick in on mainline.
|
||||
* NOTE: Implementing a simple policy based on INI and WMI serive bit
|
||||
* for now. Finer policies like checking whether this pdev has
|
||||
* any MLO VAPs or checking the frame type can be implemented later.
|
||||
*/
|
||||
return false;
|
||||
return wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
55
umac/cmn_services/mgmt_txrx/dispatcher/inc/cfg_mgmt_rx_reo.h
Normal file
55
umac/cmn_services/mgmt_txrx/dispatcher/inc/cfg_mgmt_rx_reo.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: cfg_mgmt_txrx.h
|
||||
* This file contains cfg definitions of mgmt rx reo sub-component
|
||||
*/
|
||||
|
||||
#ifndef __CFG_MGMT_RX_REO_H
|
||||
#define __CFG_MGMT_RX_REO_H
|
||||
|
||||
#ifdef WLAN_MGMT_RX_REO_SUPPORT
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* mgmt_rx_reo_enable - Enable MGMT Rx REO feature
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to enable MGMT Rx REO feature
|
||||
*
|
||||
* Related: None
|
||||
*
|
||||
* Supported Feature: MGMT Rx REO
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_MGMT_RX_REO_ENABLE \
|
||||
CFG_INI_BOOL("mgmt_rx_reo_enable", false, \
|
||||
"Enable MGMT Rx REO feature")
|
||||
|
||||
#define CFG_MGMT_RX_REO_ALL \
|
||||
CFG(CFG_MGMT_RX_REO_ENABLE)
|
||||
#else
|
||||
|
||||
#define CFG_MGMT_RX_REO_ALL
|
||||
|
||||
#endif /* WLAN_MGMT_RX_REO_SUPPORT */
|
||||
#endif /* __CFG_MGMT_RX_REO_H */
|
30
umac/cmn_services/mgmt_txrx/dispatcher/inc/cfg_mgmt_txrx.h
Normal file
30
umac/cmn_services/mgmt_txrx/dispatcher/inc/cfg_mgmt_txrx.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: cfg_mgmt_txrx.h
|
||||
* This file contains cfg definitions of mgmt txrx component
|
||||
*/
|
||||
|
||||
#ifndef __CFG_MGMT_TXRX_H
|
||||
#define __CFG_MGMT_TXRX_H
|
||||
|
||||
#include <cfg_mgmt_rx_reo.h>
|
||||
|
||||
#define CFG_MGMT_TXRX_ALL \
|
||||
CFG_MGMT_RX_REO_ALL
|
||||
|
||||
#endif
|
@@ -91,25 +91,5 @@ struct mgmt_rx_reo_filter {
|
||||
uint32_t low;
|
||||
uint32_t high;
|
||||
};
|
||||
|
||||
/*
|
||||
* struct mgmt_rx_reo_pdev_info - Pdev information required by the Management
|
||||
* Rx REO module
|
||||
* @host_snapshot: Latest snapshot seen at the Host.
|
||||
* It considers both MGMT Rx and MGMT FW consumed.
|
||||
* @last_valid_shared_snapshot: Array of last valid snapshots(for snapshots
|
||||
* shared between host and target)
|
||||
* @host_target_shared_snapshot: Array of snapshot addresses(for snapshots
|
||||
* shared between host and target)
|
||||
* @filter: MGMT Rx REO filter
|
||||
*/
|
||||
struct mgmt_rx_reo_pdev_info {
|
||||
struct mgmt_rx_reo_snapshot_params host_snapshot;
|
||||
struct mgmt_rx_reo_snapshot_params last_valid_shared_snapshot
|
||||
[MGMT_RX_REO_SHARED_SNAPSHOT_MAX];
|
||||
struct mgmt_rx_reo_snapshot *host_target_shared_snapshot
|
||||
[MGMT_RX_REO_SHARED_SNAPSHOT_MAX];
|
||||
struct mgmt_rx_reo_filter filter;
|
||||
};
|
||||
#endif /* WLAN_MGMT_RX_REO_SUPPORT */
|
||||
#endif /* _WLAN_MGMT_TXRX_RX_REO_PUBLIC_STRUCTS_H */
|
||||
|
@@ -85,6 +85,7 @@ wlan_mgmt_rx_reo_deinit(void);
|
||||
* wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
|
||||
* management rx-reorder module
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being created and
|
||||
* creates management rx-reorder pdev context
|
||||
@@ -100,6 +101,7 @@ wlan_mgmt_rx_reo_pdev_obj_create_notification(
|
||||
* wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for
|
||||
* management rx-reorder feature
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being destroyed
|
||||
* and destroys management rx-reorder pdev context
|
||||
@@ -112,19 +114,30 @@ wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
|
||||
|
||||
/**
|
||||
* wlan_mgmt_rx_reo_get_priv_object() - Get the pdev private object of
|
||||
* MGMT Rx REO module
|
||||
* @pdev: pointer to pdev object
|
||||
* Return: Pointer to pdev private object of MGMT Rx REO module on success,
|
||||
* else NULL
|
||||
* wlan_mgmt_rx_reo_is_feature_enabled_at_psoc() - Check if MGMT Rx REO feature
|
||||
* is enabled on a given psoc
|
||||
* @psoc: pointer to psoc object
|
||||
*
|
||||
* Return: true if the feature is enabled, else false
|
||||
*/
|
||||
struct mgmt_rx_reo_pdev_info *
|
||||
wlan_mgmt_rx_reo_get_priv_object(struct wlan_objmgr_pdev *pdev);
|
||||
bool
|
||||
wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* wlan_mgmt_rx_reo_is_feature_enabled_at_pdev() - Check if MGMT Rx REO feature
|
||||
* is enabled on a given pdev
|
||||
* @psoc: pointer to pdev object
|
||||
*
|
||||
* Return: true if the feature is enabled, else false
|
||||
*/
|
||||
bool
|
||||
wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev);
|
||||
#else
|
||||
/**
|
||||
* wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
|
||||
* management rx-reorder feature
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being created and
|
||||
* creates management rx-reorder pdev context
|
||||
@@ -143,6 +156,7 @@ wlan_mgmt_rx_reo_pdev_obj_create_notification(
|
||||
* wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for
|
||||
* management rx-reorder feature
|
||||
* @pdev: pointer to pdev object
|
||||
* @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
|
||||
*
|
||||
* This function gets called from object manager when pdev is being destroyed
|
||||
* and destroys management rx-reorder pdev context
|
||||
|
@@ -20,144 +20,8 @@
|
||||
*/
|
||||
|
||||
#include <wlan_mgmt_txrx_rx_reo_utils_api.h>
|
||||
#include <wlan_mgmt_txrx_rx_reo_tgt_api.h>
|
||||
#include "../../core/src/wlan_mgmt_txrx_rx_reo_i.h"
|
||||
#include "../../core/src/wlan_mgmt_txrx_main_i.h"
|
||||
|
||||
struct mgmt_rx_reo_pdev_info *
|
||||
wlan_mgmt_rx_reo_get_priv_object(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx;
|
||||
|
||||
if (!pdev) {
|
||||
mgmt_rx_reo_err("pdev is null");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mgmt_txrx_pdev_ctx = (struct mgmt_txrx_priv_pdev_context *)
|
||||
wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
||||
WLAN_UMAC_COMP_MGMT_TXRX);
|
||||
|
||||
if (!mgmt_txrx_pdev_ctx) {
|
||||
mgmt_rx_reo_err("mgmt txrx context is NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_set_priv_object(struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_rx_reo_pdev_info *reo_pdev_context)
|
||||
{
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx;
|
||||
|
||||
if (!pdev) {
|
||||
mgmt_rx_reo_err("pdev is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
mgmt_txrx_pdev_ctx = (struct mgmt_txrx_priv_pdev_context *)
|
||||
wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
||||
WLAN_UMAC_COMP_MGMT_TXRX);
|
||||
|
||||
if (!mgmt_txrx_pdev_ctx) {
|
||||
mgmt_rx_reo_err("mgmt txrx context is NULL");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = reo_pdev_context;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_mgmt_rx_reo_initialize_snapshot_params() - Initialize a given snapshot
|
||||
* params object
|
||||
* @snapshot_params: Pointer to snapshot params object
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(
|
||||
struct mgmt_rx_reo_snapshot_params *snapshot_params)
|
||||
{
|
||||
snapshot_params->valid = false;
|
||||
snapshot_params->mgmt_pkt_ctr = 0;
|
||||
snapshot_params->global_timestamp = 0;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_pdev_obj_create_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS temp_status;
|
||||
struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx = NULL;
|
||||
enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
|
||||
|
||||
if (!pdev) {
|
||||
mgmt_rx_reo_err("pdev is null");
|
||||
status = QDF_STATUS_E_NULL_VALUE;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
mgmt_rx_reo_pdev_ctx = qdf_mem_malloc(sizeof(*mgmt_rx_reo_pdev_ctx));
|
||||
if (!mgmt_rx_reo_pdev_ctx) {
|
||||
mgmt_rx_reo_err("Allocation failure for REO pdev context");
|
||||
status = QDF_STATUS_E_NOMEM;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
snapshot_id = 0;
|
||||
while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
|
||||
struct mgmt_rx_reo_snapshot **snapshot_address;
|
||||
|
||||
snapshot_address = &mgmt_rx_reo_pdev_ctx->
|
||||
host_target_shared_snapshot[snapshot_id];
|
||||
temp_status = tgt_mgmt_rx_reo_get_snapshot_address(
|
||||
pdev, snapshot_id, snapshot_address);
|
||||
if (QDF_IS_STATUS_ERROR(temp_status)) {
|
||||
mgmt_rx_reo_err("Get snapshot address failed, id = %u",
|
||||
snapshot_id);
|
||||
status = temp_status;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(
|
||||
&mgmt_rx_reo_pdev_ctx->
|
||||
last_valid_shared_snapshot[snapshot_id]);
|
||||
snapshot_id++;
|
||||
}
|
||||
|
||||
/* Initialize Host snapshot params */
|
||||
wlan_mgmt_rx_reo_initialize_snapshot_params(&mgmt_rx_reo_pdev_ctx->
|
||||
host_snapshot);
|
||||
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = mgmt_rx_reo_pdev_ctx;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
failure:
|
||||
if (mgmt_rx_reo_pdev_ctx)
|
||||
qdf_mem_free(mgmt_rx_reo_pdev_ctx);
|
||||
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = NULL;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
qdf_mem_free(mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx);
|
||||
mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = NULL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#include <cfg_ucfg_api.h>
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_deinit(void)
|
||||
@@ -170,3 +34,47 @@ wlan_mgmt_rx_reo_init(void)
|
||||
{
|
||||
return mgmt_rx_reo_init_context();
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_pdev_obj_create_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
return mgmt_rx_reo_pdev_obj_create_notification(pdev,
|
||||
mgmt_txrx_pdev_ctx);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
|
||||
{
|
||||
return mgmt_rx_reo_pdev_obj_destroy_notification(pdev,
|
||||
mgmt_txrx_pdev_ctx);
|
||||
}
|
||||
|
||||
bool
|
||||
wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
if (!psoc) {
|
||||
mgmt_rx_reo_err("psoc is NULL!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!cfg_get(psoc, CFG_MGMT_RX_REO_ENABLE))
|
||||
return false;
|
||||
|
||||
return wlan_psoc_nif_feat_cap_get(psoc, WLAN_SOC_F_MGMT_RX_REO_CAPABLE);
|
||||
}
|
||||
|
||||
bool
|
||||
wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (!pdev) {
|
||||
mgmt_rx_reo_err("pdev is NULL!");
|
||||
return false;
|
||||
}
|
||||
|
||||
return wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(
|
||||
wlan_pdev_get_psoc(pdev));
|
||||
}
|
||||
|
@@ -218,7 +218,8 @@
|
||||
#define WLAN_SOC_F_PEER_CREATE_RESP 0x10000000
|
||||
/* Strict channel mode */
|
||||
#define WLAN_SOC_F_STRICT_CHANNEL 0x20000000
|
||||
|
||||
/* MGMT Rx REO feature capability */
|
||||
#define WLAN_SOC_F_MGMT_RX_REO_CAPABLE 0x40000000
|
||||
|
||||
/* PSOC op flags */
|
||||
|
||||
|
@@ -5298,6 +5298,7 @@ typedef enum {
|
||||
wmi_service_thermal_stats_temp_range_supported,
|
||||
#endif
|
||||
wmi_service_hw_mode_policy_offload_support,
|
||||
wmi_service_mgmt_rx_reo_supported,
|
||||
wmi_services_max,
|
||||
} wmi_conv_service_ids;
|
||||
#define WMI_SERVICE_UNAVAILABLE 0xFFFF
|
||||
|
@@ -17320,6 +17320,8 @@ static void populate_tlv_service(uint32_t *wmi_service)
|
||||
#endif
|
||||
wmi_service[wmi_service_hw_mode_policy_offload_support] =
|
||||
WMI_SERVICE_HW_MODE_POLICY_OFFLOAD_SUPPORT;
|
||||
wmi_service[wmi_service_mgmt_rx_reo_supported] =
|
||||
WMI_SERVICE_MGMT_RX_REO_SUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user