Forráskód Böngészése

qcacld-3.0: Get the current chains in drv_cmd_get_antenna_mode

In the API drv_cmd_get_antenna_mode, the driver gets the
hdd_ctx->current_antenna_mode, which is pdev level, but
with the new feature of per vdev antenna mode, return the
num of chains for that particular vdev.

Change-Id: Ia8180592c34a29a7593943fc5e10c781682aac56
CRs-Fixed: 2347494
gaurank kathpalia 6 éve
szülő
commit
2472fb942e
1 módosított fájl, 37 hozzáadás és 0 törlés
  1. 37 0
      core/hdd/src/wlan_hdd_ioctl.c

+ 37 - 0
core/hdd/src/wlan_hdd_ioctl.c

@@ -6846,6 +6846,39 @@ static int drv_cmd_set_antenna_mode(struct hdd_adapter *adapter,
 	return hdd_set_antenna_mode(adapter, hdd_ctx, mode);
 }
 
+/**
+ * hdd_get_dynamic_antenna_mode() -get the dynamic antenna mode for vdev
+ * @antenna_mode: pointer to antenna mode of vdev
+ * @dynamic_nss_chains_support: feature support for dynamic nss chains update
+ * @vdev: Pointer to vdev
+ *
+ * This API will check for the num of chains configured for the vdev, and fill
+ * that info in the antenna mode if the dynamic chains per vdev are supported.
+ *
+ * Return: None
+ */
+static void
+hdd_get_dynamic_antenna_mode(uint32_t *antenna_mode,
+			     bool dynamic_nss_chains_support,
+			     struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_mlme_nss_chains *nss_chains_dynamic_cfg;
+
+	if (!dynamic_nss_chains_support)
+		return;
+
+	nss_chains_dynamic_cfg = mlme_get_dynamic_vdev_config(vdev);
+	if (!nss_chains_dynamic_cfg) {
+		hdd_err("nss chain dynamic config NULL");
+		return;
+	}
+	/*
+	 * At present, this command doesn't include band, so by default
+	 * it will return the band 2ghz present rf chains.
+	 */
+	*antenna_mode = nss_chains_dynamic_cfg->num_rx_chains[BAND_2GHZ];
+}
+
 /**
  * drv_cmd_get_antenna_mode() - GET ANTENNA MODE driver command
  * handler
@@ -6868,6 +6901,10 @@ static inline int drv_cmd_get_antenna_mode(struct hdd_adapter *adapter,
 	uint8_t len = 0;
 
 	antenna_mode = hdd_ctx->current_antenna_mode;
+	/* Overwrite this antenna mode if dynamic vdev chains are supported */
+	hdd_get_dynamic_antenna_mode(&antenna_mode,
+				     hdd_ctx->dynamic_nss_chains_support,
+				     adapter->vdev);
 	len = scnprintf(extra, sizeof(extra), "%s %d", command,
 			antenna_mode);
 	len = QDF_MIN(priv_data->total_len, len + 1);