Bläddra i källkod

qcacld-3.0: Configure Power Save for ML link

Currently, driver configures PS only for assoc vdev for static IP case.
To fix it, driver should configure power save for ML links as well.

Change-Id: Ifc37b6027c8bf94fefb15260fe7758635d5f1b88
CRs-Fixed: 3319458
Jianmin Zhu 2 år sedan
förälder
incheckning
5eb727828b
2 ändrade filer med 39 tillägg och 7 borttagningar
  1. 38 6
      core/hdd/src/wlan_hdd_power.c
  2. 1 1
      core/sme/src/common/sme_power_save.c

+ 38 - 6
core/hdd/src/wlan_hdd_power.c

@@ -681,6 +681,32 @@ out:
 
 }
 
+#if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
+static void hdd_send_mlo_ps_to_fw(struct hdd_adapter *adapter,
+				  struct hdd_context *hdd_ctx,
+				  enum sme_ps_cmd command)
+{
+	struct hdd_adapter *link_adapter;
+	struct hdd_mlo_adapter_info *mlo_adapter_info;
+	int i;
+
+	mlo_adapter_info = &adapter->mlo_adapter_info;
+	for (i = 0; i < WLAN_MAX_MLD; i++) {
+		link_adapter = mlo_adapter_info->link_adapter[i];
+		if (!link_adapter)
+			continue;
+		sme_ps_enable_disable(hdd_ctx->mac_handle,
+				      link_adapter->vdev_id,
+				      command);
+	}
+}
+#else
+static void hdd_send_mlo_ps_to_fw(struct hdd_adapter *adapter,
+				  struct hdd_context *hdd_ctx,
+				  enum sme_ps_cmd command)
+{}
+#endif
+
 /**
  * hdd_send_ps_config_to_fw() - Check user pwr save config set/reset PS
  * @adapter: pointer to hdd adapter
@@ -694,19 +720,25 @@ static void hdd_send_ps_config_to_fw(struct hdd_adapter *adapter)
 {
 	struct hdd_context *hdd_ctx;
 	bool usr_ps_cfg;
+	enum sme_ps_cmd command;
+	bool is_mlo_vdev;
 
 	if (hdd_validate_adapter(adapter))
 		return;
 
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-
 	usr_ps_cfg = ucfg_mlme_get_user_ps(hdd_ctx->psoc, adapter->vdev_id);
-	if (usr_ps_cfg)
-		sme_ps_enable_disable(hdd_ctx->mac_handle, adapter->vdev_id,
-				      SME_PS_ENABLE);
-	else
+	command = usr_ps_cfg ? SME_PS_ENABLE : SME_PS_DISABLE;
+
+	is_mlo_vdev = wlan_vdev_mlme_is_mlo_vdev(adapter->vdev);
+
+	if (!is_mlo_vdev) {
 		sme_ps_enable_disable(hdd_ctx->mac_handle, adapter->vdev_id,
-				      SME_PS_DISABLE);
+				      command);
+		return;
+	}
+
+	hdd_send_mlo_ps_to_fw(adapter, hdd_ctx, command);
 }
 
 /**

+ 1 - 1
core/sme/src/common/sme_power_save.c

@@ -288,7 +288,7 @@ QDF_STATUS sme_ps_process_command(struct mac_context *mac_ctx, uint32_t session_
 		sme_err("Invalid Session_id: %d", session_id);
 		return QDF_STATUS_E_INVAL;
 	}
-	sme_debug("Power Save command %d", command);
+	sme_debug("Vdev id %d, Power Save command %d", session_id, command);
 	switch (command) {
 	case SME_PS_ENABLE:
 		status = sme_ps_enable_ps_req_params(mac_ctx, session_id);