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:
Shiva Krishna Pittala
2021-08-15 21:10:17 +05:30
committed by Madan Koyyalamudi
parent bb30b105cf
commit 81f3009593
13 changed files with 335 additions and 170 deletions

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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,

View File

@@ -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;
}

View File

@@ -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);
}
/**

View 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 */

View 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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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));
}

View File

@@ -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 */

View File

@@ -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

View File

@@ -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;
}
/**