Ver Fonte

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
Edayilliam Jayadev há 4 anos atrás
pai
commit
3e679f9176

+ 9 - 0
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_ */

+ 37 - 0
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

+ 18 - 0
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);
+}

+ 50 - 0
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;
+}

+ 2 - 0
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);
 }

+ 3 - 0
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 */