mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
qcacmn: Skip CFR umac handling when feature is disabled
Retrieve the INI option to disable CFR and store the same in pdev feature ext caps. When CFR feature is disabled - 1. Skip pdev/peer cfr object allocations 2. Skip CFR SRNG allocations 3. Skip WMI registration for DBR and TX completion events Change-Id: I5a7a6ae67d2c3a863b952e00e317c44a71e9fbc1 CRs-Fixed: 2671620
This commit is contained in:
parent
297e63ab48
commit
79f10bc2d2
4 changed files with 124 additions and 0 deletions
|
|
@ -25,6 +25,37 @@
|
|||
#include <qdf_streamfs.h>
|
||||
#include <target_if.h>
|
||||
#include <wlan_osif_priv.h>
|
||||
#include <cfg_ucfg_api.h>
|
||||
#include "cfr_cfg.h"
|
||||
|
||||
/**
|
||||
* wlan_cfr_is_ini_disabled() - Check if cfr feature is disabled
|
||||
* @pdev - the physical device object.
|
||||
*
|
||||
* Return : true if cfr is disabled, else false.
|
||||
*/
|
||||
static bool
|
||||
wlan_cfr_is_ini_disabled(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
uint8_t cfr_disable_bitmap;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
if (!psoc) {
|
||||
cfr_err("psoc is null");
|
||||
return true;
|
||||
}
|
||||
|
||||
cfr_disable_bitmap = cfg_get(psoc, CFG_CFR_DISABLE);
|
||||
|
||||
if (cfr_disable_bitmap & (1 << wlan_objmgr_pdev_get_pdev_id(pdev))) {
|
||||
cfr_info("cfr is disabled for pdev[%d]",
|
||||
wlan_objmgr_pdev_get_pdev_id(pdev));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cfr_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
||||
|
|
@ -73,6 +104,13 @@ wlan_cfr_pdev_obj_create_handler(struct wlan_objmgr_pdev *pdev, void *arg)
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (wlan_cfr_is_ini_disabled(pdev)) {
|
||||
wlan_pdev_nif_feat_ext_cap_clear(pdev, WLAN_PDEV_FEXT_CFR_EN);
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
wlan_pdev_nif_feat_ext_cap_set(pdev, WLAN_PDEV_FEXT_CFR_EN);
|
||||
|
||||
pa = (struct pdev_cfr *)qdf_mem_malloc(sizeof(struct pdev_cfr));
|
||||
if (NULL == pa) {
|
||||
cfr_err("Failed to allocate pdev_cfr object\n");
|
||||
|
|
@ -97,6 +135,11 @@ wlan_cfr_pdev_obj_destroy_handler(struct wlan_objmgr_pdev *pdev, void *arg)
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_info("cfr is disabled");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
|
||||
if (NULL != pa) {
|
||||
wlan_objmgr_pdev_component_obj_detach(pdev, WLAN_UMAC_COMP_CFR,
|
||||
|
|
@ -111,12 +154,28 @@ QDF_STATUS
|
|||
wlan_cfr_peer_obj_create_handler(struct wlan_objmgr_peer *peer, void *arg)
|
||||
{
|
||||
struct peer_cfr *pe = NULL;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev = NULL;
|
||||
|
||||
if (NULL == peer) {
|
||||
cfr_err("PEER is NULL\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev = wlan_peer_get_vdev(peer);
|
||||
if (vdev)
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
|
||||
if (!pdev) {
|
||||
cfr_err("PDEV is NULL\n");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_info("cfr is disabled");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
pe = (struct peer_cfr *)qdf_mem_malloc(sizeof(struct peer_cfr));
|
||||
if (NULL == pe) {
|
||||
cfr_err("Failed to allocate peer_cfr object\n");
|
||||
|
|
@ -148,6 +207,11 @@ wlan_cfr_peer_obj_destroy_handler(struct wlan_objmgr_peer *peer, void *arg)
|
|||
if (vdev)
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_info("cfr is disabled");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
if (pdev)
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
||||
WLAN_UMAC_COMP_CFR);
|
||||
|
|
@ -214,6 +278,11 @@ QDF_STATUS cfr_streamfs_init(struct wlan_objmgr_pdev *pdev)
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_info("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
|
||||
|
||||
if (pa == NULL) {
|
||||
|
|
@ -259,6 +328,11 @@ QDF_STATUS cfr_streamfs_remove(struct wlan_objmgr_pdev *pdev)
|
|||
{
|
||||
struct pdev_cfr *pa = NULL;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_info("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
|
||||
if (pa) {
|
||||
if (pa->chan_ptr) {
|
||||
|
|
|
|||
|
|
@ -588,6 +588,14 @@ QDF_STATUS wlan_cfr_pdev_close(struct wlan_objmgr_pdev *pdev);
|
|||
*/
|
||||
uint8_t count_set_bits(uint32_t value);
|
||||
|
||||
/**
|
||||
* wlan_cfr_is_feature_disabled() - Check if cfr feature is disabled
|
||||
* @pdev - the physical device object.
|
||||
*
|
||||
* Return : true if cfr is disabled, else false.
|
||||
*/
|
||||
bool wlan_cfr_is_feature_disabled(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
#ifdef WLAN_ENH_CFR_ENABLE
|
||||
/**
|
||||
* wlan_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in
|
||||
|
|
|
|||
|
|
@ -233,6 +233,11 @@ int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value)
|
|||
{
|
||||
struct pdev_cfr *pa;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
|
||||
if (pa == NULL) {
|
||||
cfr_err("PDEV cfr object is NULL!");
|
||||
|
|
@ -252,6 +257,11 @@ int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev)
|
|||
{
|
||||
struct pdev_cfr *pa;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
|
||||
if (pa == NULL) {
|
||||
cfr_err("PDEV cfr object is NULL!");
|
||||
|
|
|
|||
|
|
@ -98,6 +98,10 @@ QDF_STATUS wlan_cfr_pdev_open(struct wlan_objmgr_pdev *pdev)
|
|||
{
|
||||
int status;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
/* chip specific init */
|
||||
status = tgt_cfr_init_pdev(pdev);
|
||||
|
||||
|
|
@ -120,6 +124,11 @@ QDF_STATUS wlan_cfr_pdev_open(struct wlan_objmgr_pdev *pdev)
|
|||
QDF_STATUS wlan_cfr_pdev_close(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
int status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
/*
|
||||
* DBR does not have close as of now;
|
||||
* but this is getting added as part for new gerrit
|
||||
|
|
@ -134,6 +143,11 @@ QDF_STATUS cfr_initialize_pdev(struct wlan_objmgr_pdev *pdev)
|
|||
{
|
||||
int status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
|
||||
/* chip specific init */
|
||||
|
||||
status = tgt_cfr_init_pdev(pdev);
|
||||
|
|
@ -149,6 +163,11 @@ QDF_STATUS cfr_deinitialize_pdev(struct wlan_objmgr_pdev *pdev)
|
|||
{
|
||||
int status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (wlan_cfr_is_feature_disabled(pdev)) {
|
||||
cfr_err("cfr is disabled");
|
||||
return QDF_STATUS_COMP_DISABLED;
|
||||
}
|
||||
|
||||
/* chip specific deinit */
|
||||
|
||||
status = tgt_cfr_deinit_pdev(pdev);
|
||||
|
|
@ -182,3 +201,16 @@ void wlan_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
|
|||
|
||||
qdf_export_symbol(wlan_cfr_rx_tlv_process);
|
||||
#endif
|
||||
|
||||
bool wlan_cfr_is_feature_disabled(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (!pdev) {
|
||||
cfr_err("PDEV is NULL!");
|
||||
return true;
|
||||
}
|
||||
|
||||
return (wlan_pdev_nif_feat_ext_cap_get(pdev, WLAN_PDEV_FEXT_CFR_EN) ?
|
||||
false : true);
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_cfr_is_feature_disabled);
|
||||
|
|
|
|||
Loading…
Reference in a new issue