浏览代码

qcacmn: Add target if APIs to initialize spectral feature caps

Add target if APIs to initialize normal and agile Spectral
feature caps for a pdev.

CRs-Fixed: 2840247
Change-Id: I6c5385c2050007a5ff3f668ab3d6176328294549
Edayilliam Jayadev 4 年之前
父节点
当前提交
19aaca7ff9
共有 1 个文件被更改,包括 106 次插入0 次删除
  1. 106 0
      target_if/spectral/target_if_spectral.c

+ 106 - 0
target_if/spectral/target_if_spectral.c

@@ -218,6 +218,112 @@ target_if_spectral_get_agile_mode_cap(
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * target_if_spectral_init_pdev_feature_cap_per_mode() - API to initialize
+ * Spectral scan pdev feature caps for a given Spectral mode
+ * @pdev: pdev handle
+ * @smode: Spectral scan mode
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_FAILURE/
+ * QDF_STATUS_E_INVAL on failure
+ */
+static QDF_STATUS
+target_if_spectral_init_pdev_feature_cap_per_mode(struct wlan_objmgr_pdev *pdev,
+						  enum spectral_scan_mode smode)
+{
+	bool normal_mode_disable;
+	struct target_if_spectral_agile_mode_cap agile_cap = { 0 };
+	QDF_STATUS status;
+
+	switch (smode) {
+	case SPECTRAL_SCAN_MODE_NORMAL:
+		status = target_if_spectral_get_normal_mode_cap(
+				pdev, &normal_mode_disable);
+		if (QDF_IS_STATUS_ERROR(status)) {
+			spectral_err("Failed to get normal spectral scan caps");
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		if (normal_mode_disable)
+			wlan_pdev_nif_feat_ext_cap_set(
+				pdev, WLAN_PDEV_FEXT_NORMAL_SPECTRAL_SCAN_DIS);
+		else
+			wlan_pdev_nif_feat_ext_cap_clear(
+				pdev, WLAN_PDEV_FEXT_NORMAL_SPECTRAL_SCAN_DIS);
+		break;
+
+	case SPECTRAL_SCAN_MODE_AGILE:
+		status = target_if_spectral_get_agile_mode_cap(
+				pdev, &agile_cap);
+		if (QDF_IS_STATUS_ERROR(status)) {
+			spectral_err("Failed to get agile Spectral capability");
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		if (!agile_cap.agile_spectral_cap)
+			wlan_pdev_nif_feat_ext_cap_set(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_DIS);
+		else
+			wlan_pdev_nif_feat_ext_cap_clear(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_DIS);
+
+		if (!agile_cap.agile_spectral_cap_160)
+			wlan_pdev_nif_feat_ext_cap_set(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_160_DIS);
+		else
+			wlan_pdev_nif_feat_ext_cap_clear(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_160_DIS);
+
+		if (!agile_cap.agile_spectral_cap_80p80)
+			wlan_pdev_nif_feat_ext_cap_set(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_80P80_DIS);
+		else
+			wlan_pdev_nif_feat_ext_cap_clear(
+			  pdev, WLAN_PDEV_FEXT_AGILE_SPECTRAL_SCAN_80P80_DIS);
+
+		break;
+
+	default:
+		spectral_err("Invalid Spectral scan mode %d", smode);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * target_if_spectral_init_pdev_feature_caps() - API to initialize
+ * Spectral scan pdev feature caps for a given pdev
+ * @pdev: pdev handle
+ *
+ * API initialize normal and agile Spectral scan pdev
+ * feature caps for a given pdev.
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_INVAL on failure
+ */
+static QDF_STATUS
+target_if_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev)
+{
+	enum spectral_scan_mode smode;
+
+	if (!pdev) {
+		spectral_err("pdev is NULL!");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	smode = SPECTRAL_SCAN_MODE_NORMAL;
+	for (; smode < SPECTRAL_SCAN_MODE_MAX; smode++) {
+		QDF_STATUS status;
+
+		status = target_if_spectral_init_pdev_feature_cap_per_mode(
+				pdev, smode);
+		if (QDF_IS_STATUS_ERROR(status))
+			return QDF_STATUS_E_INVAL;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 static void target_if_spectral_get_firstvdev_pdev(struct wlan_objmgr_pdev *pdev,
 						  void *obj, void *arg)
 {