From 3e679f9176162d06c8f72318a687c80d91792e9b Mon Sep 17 00:00:00 2001 From: Edayilliam Jayadev Date: Thu, 17 Dec 2020 11:36:02 +0530 Subject: [PATCH] qcacmn: Add APIs to init Spectral feature caps in the upper layer Add APIs to init Spectral feature caps in the upper layer of the Spectral module. CRs-Fixed: 2840249 Change-Id: Idfb34a9eec3a66c6d193be7bb828eeec30548ae7 --- .../dispatcher/inc/wlan_spectral_tgt_api.h | 9 ++++ .../dispatcher/inc/wlan_spectral_utils_api.h | 37 ++++++++++++++ .../dispatcher/src/wlan_spectral_tgt_api.c | 18 +++++++ .../dispatcher/src/wlan_spectral_utils_api.c | 50 +++++++++++++++++++ target_if/spectral/target_if_spectral.c | 2 + .../lmac_if/inc/wlan_lmac_if_def.h | 3 ++ 6 files changed, 119 insertions(+) diff --git a/spectral/dispatcher/inc/wlan_spectral_tgt_api.h b/spectral/dispatcher/inc/wlan_spectral_tgt_api.h index 0b2bb15546..6b4246cc25 100644 --- a/spectral/dispatcher/inc/wlan_spectral_tgt_api.h +++ b/spectral/dispatcher/inc/wlan_spectral_tgt_api.h @@ -344,4 +344,13 @@ tgt_spectral_register_events(struct wlan_objmgr_psoc *psoc); */ QDF_STATUS tgt_spectral_unregister_events(struct wlan_objmgr_psoc *psoc); + +/** + * tgt_spectral_init_pdev_feature_caps() - Init pdev spectral feature caps + * @pdev: pdev handle + * + * Return: QDF_STATUS + */ +QDF_STATUS +tgt_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev); #endif /* _WLAN_SPECTRAL_TGT_API_H_ */ diff --git a/spectral/dispatcher/inc/wlan_spectral_utils_api.h b/spectral/dispatcher/inc/wlan_spectral_utils_api.h index 3774ad1f86..a328727e6a 100644 --- a/spectral/dispatcher/inc/wlan_spectral_utils_api.h +++ b/spectral/dispatcher/inc/wlan_spectral_utils_api.h @@ -245,6 +245,43 @@ QDF_STATUS spectral_register_dbr(struct wlan_objmgr_pdev *pdev); */ QDF_STATUS spectral_unregister_dbr(struct wlan_objmgr_pdev *pdev); +/** + * wlan_spectral_init_pdev_feature_caps() - API to initialize + * spectral pdev feature caps + * @pdev: pointer to pdev object + * + * API to initialize Spectral feature caps for a given pdev. + * + * Return: QDF_STATUS_SUCCESS upon successful initialization, + * QDF_STATUS_E_FAILURE upon failure + */ +QDF_STATUS wlan_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev); + +/** + * wlan_spectral_init_psoc_feature_cap() - API to initialize + * spectral psoc feature caps + * @psoc: pointer to psoc object + * + * API to initialize Spectral feature caps for a given psoc. + * + * Return: QDF_STATUS_SUCCESS upon successful initialization, + * QDF_STATUS_E_FAILURE upon failure + */ +QDF_STATUS wlan_spectral_init_psoc_feature_cap(struct wlan_objmgr_psoc *psoc); + +/** + * wlan_spectral_pdev_get_lmac_if_txops() - API to get pointer + * to Spectral txops structure + * @pdev: pointer to pdev object + * + * API to get pointer to Spectral txops structure + * + * Return: Pointer to Spectral txops structure, NULL in case of + * error. + */ +struct wlan_lmac_if_sptrl_tx_ops * +wlan_spectral_pdev_get_lmac_if_txops(struct wlan_objmgr_pdev *pdev); + #ifdef DIRECT_BUF_RX_ENABLE /** * spectral_dbr_event_handler() - Spectral dbr event handler diff --git a/spectral/dispatcher/src/wlan_spectral_tgt_api.c b/spectral/dispatcher/src/wlan_spectral_tgt_api.c index fea4178dac..436e40f22a 100644 --- a/spectral/dispatcher/src/wlan_spectral_tgt_api.c +++ b/spectral/dispatcher/src/wlan_spectral_tgt_api.c @@ -661,3 +661,21 @@ tgt_spectral_unregister_events(struct wlan_objmgr_psoc *psoc) return psptrl_tx_ops->sptrlto_unregister_events(psoc); } +QDF_STATUS +tgt_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev) +{ + struct wlan_lmac_if_sptrl_tx_ops *spectral_tx_ops; + + if (!pdev) { + spectral_err("pdev is NULL!"); + return QDF_STATUS_E_INVAL; + } + + spectral_tx_ops = wlan_spectral_pdev_get_lmac_if_txops(pdev); + if (!spectral_tx_ops) { + spectral_err("Spectral txops is null"); + return QDF_STATUS_E_FAILURE; + } + + return spectral_tx_ops->sptrlto_init_pdev_feature_caps(pdev); +} diff --git a/spectral/dispatcher/src/wlan_spectral_utils_api.c b/spectral/dispatcher/src/wlan_spectral_utils_api.c index fd9a5c1fe9..850ea14037 100644 --- a/spectral/dispatcher/src/wlan_spectral_utils_api.c +++ b/spectral/dispatcher/src/wlan_spectral_utils_api.c @@ -36,6 +36,30 @@ bool wlan_spectral_is_feature_disabled(struct wlan_objmgr_psoc *psoc) return false; } +QDF_STATUS +wlan_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev) +{ + return tgt_spectral_init_pdev_feature_caps(pdev); +} + +QDF_STATUS +wlan_spectral_init_psoc_feature_cap(struct wlan_objmgr_psoc *psoc) +{ + if (!psoc) { + spectral_err("PSOC is NULL!"); + return QDF_STATUS_E_INVAL; + } + + if (cfg_get(psoc, CFG_SPECTRAL_DISABLE)) + wlan_psoc_nif_feat_cap_set(psoc, + WLAN_SOC_F_SPECTRAL_INI_DISABLE); + else + wlan_psoc_nif_feat_cap_clear(psoc, + WLAN_SOC_F_SPECTRAL_INI_DISABLE); + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_spectral_init(void) { @@ -462,3 +486,29 @@ QDF_STATUS wlan_spectral_psoc_disable(struct wlan_objmgr_psoc *psoc) return tgt_spectral_unregister_events(psoc); } + +struct wlan_lmac_if_sptrl_tx_ops * +wlan_spectral_pdev_get_lmac_if_txops(struct wlan_objmgr_pdev *pdev) +{ + struct wlan_objmgr_psoc *psoc; + struct wlan_lmac_if_tx_ops *tx_ops; + + if (!pdev) { + spectral_err("pdev is NULL!"); + return NULL; + } + + psoc = wlan_pdev_get_psoc(pdev); + if (!psoc) { + spectral_err("psoc is NULL!"); + return NULL; + } + + tx_ops = wlan_psoc_get_lmac_if_txops(psoc); + if (!tx_ops) { + spectral_err("tx_ops is NULL"); + return NULL; + } + + return &tx_ops->sptrl_tx_ops; +} diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index 5dff630ea4..b61111fe7c 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/target_if/spectral/target_if_spectral.c @@ -6004,6 +6004,8 @@ target_if_sptrl_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) target_if_spectral_register_events; tx_ops->sptrl_tx_ops.sptrlto_unregister_events = target_if_spectral_unregister_events; + tx_ops->sptrl_tx_ops.sptrlto_init_pdev_feature_caps = + target_if_spectral_init_pdev_feature_caps; target_if_sptrl_debug_register_tx_ops(tx_ops); } diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index 1e924cc1ad..313431167f 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -594,6 +594,7 @@ struct spectral_tgt_ops; * on the previous state * @sptrlto_register_events: Registration of WMI events for Spectral * @sptrlto_unregister_events: Unregistration of WMI events for Spectral + * @sptrlto_init_pdev_feature_caps: Initialize spectral feature capabilities **/ struct wlan_lmac_if_sptrl_tx_ops { void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev); @@ -656,6 +657,8 @@ struct wlan_lmac_if_sptrl_tx_ops { struct wlan_objmgr_pdev *pdev); QDF_STATUS (*sptrlto_register_events)(struct wlan_objmgr_psoc *psoc); QDF_STATUS (*sptrlto_unregister_events)(struct wlan_objmgr_psoc *psoc); + QDF_STATUS (*sptrlto_init_pdev_feature_caps)( + struct wlan_objmgr_pdev *pdev); }; #endif /* WLAN_CONV_SPECTRAL_ENABLE */