瀏覽代碼

qcacld-3.0: Add case handling for unit test WoW suspend

When unit test WoW is executed, system suspend case is currently being
executed. Add a new case for handling unit test WoW suspend mode.

Change-Id: I9defa7175a638363a1dd736018d17a42d8afe6b3
CRs-Fixed: 2855437
Alan Chen 4 年之前
父節點
當前提交
65119e6610

+ 2 - 0
components/pmo/core/src/wlan_pmo_suspend_resume.c

@@ -811,6 +811,8 @@ pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
 	if (type == QDF_SYSTEM_SUSPEND) {
 		pmo_info("system suspend wow");
 		param.flags |= WMI_WOW_FLAG_SYSTEM_SUSPEND_WOW;
+	} else if (type == QDF_UNIT_TEST_WOW_SUSPEND) {
+		pmo_info("unit test wow suspend");
 	} else {
 		pmo_info("RTPM wow");
 	}

+ 5 - 2
core/hdd/inc/wlan_hdd_driver_ops.h

@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 2015-2017, 2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2017, 2019, 2021 The Linux Foundation.
+ * All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -76,12 +77,14 @@ int wlan_hdd_bus_suspend_noirq(void);
 /**
  * wlan_hdd_bus_resume() - wake up the bus
  *
+ * @type: WoW suspend type
+ *
  * This function is called by the platform driver to resume wlan
  * bus
  *
  * Return: 0 for success and negative errno if failure
  */
-int wlan_hdd_bus_resume(void);
+int wlan_hdd_bus_resume(enum qdf_suspend_type type);
 
 /**
  * wlan_hdd_bus_resume_noirq() - handle bus resume no irq

+ 13 - 9
core/hdd/src/wlan_hdd_driver_ops.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1119,6 +1119,7 @@ hdd_to_pmo_wow_enable_params(struct wow_enable_params *in_params,
 /**
  * __wlan_hdd_bus_suspend() - handles platform supsend
  * @wow_params: collection of wow enable override parameters
+ * @type: WoW suspend type
  *
  * Does precondtion validation. Ensures that a subsystem restart isn't in
  * progress. Ensures that no load or unload is in progress. Does:
@@ -1130,7 +1131,8 @@ hdd_to_pmo_wow_enable_params(struct wow_enable_params *in_params,
  *     -EBUSY or -EAGAIN if another opperation is in progress and
  *     wlan will not be ready to suspend in time.
  */
-static int __wlan_hdd_bus_suspend(struct wow_enable_params wow_params)
+static int __wlan_hdd_bus_suspend(struct wow_enable_params wow_params,
+				  enum qdf_suspend_type type)
 {
 	int err;
 	QDF_STATUS status;
@@ -1189,7 +1191,7 @@ static int __wlan_hdd_bus_suspend(struct wow_enable_params wow_params)
 	}
 
 	status = ucfg_pmo_psoc_bus_suspend_req(hdd_ctx->psoc,
-					       QDF_SYSTEM_SUSPEND,
+					       type,
 					       &pmo_params);
 	err = qdf_status_to_os_return(status);
 	if (err) {
@@ -1227,7 +1229,7 @@ resume_hif:
 
 resume_pmo:
 	status = ucfg_pmo_psoc_bus_resume_req(hdd_ctx->psoc,
-					      QDF_SYSTEM_SUSPEND);
+					      type);
 	QDF_BUG(QDF_IS_STATUS_SUCCESS(status));
 
 late_hif_resume:
@@ -1245,13 +1247,13 @@ int wlan_hdd_bus_suspend(void)
 {
 	struct wow_enable_params default_params = {0};
 
-	return __wlan_hdd_bus_suspend(default_params);
+	return __wlan_hdd_bus_suspend(default_params, QDF_SYSTEM_SUSPEND);
 }
 
 #ifdef WLAN_SUSPEND_RESUME_TEST
 int wlan_hdd_unit_test_bus_suspend(struct wow_enable_params wow_params)
 {
-	return __wlan_hdd_bus_suspend(wow_params);
+	return __wlan_hdd_bus_suspend(wow_params, QDF_UNIT_TEST_WOW_SUSPEND);
 }
 #endif
 
@@ -1329,6 +1331,8 @@ done:
 /**
  * wlan_hdd_bus_resume() - handles platform resume
  *
+ * @type: WoW suspend type
+ *
  * Does precondtion validation. Ensures that a subsystem restart isn't in
  * progress.  Ensures that no load or unload is in progress.  Ensures that
  * it has valid pointers for the required contexts.
@@ -1339,7 +1343,7 @@ done:
  *
  * return: error code or 0 for success
  */
-int wlan_hdd_bus_resume(void)
+int wlan_hdd_bus_resume(enum qdf_suspend_type type)
 {
 	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
 	void *hif_ctx;
@@ -1385,7 +1389,7 @@ int wlan_hdd_bus_resume(void)
 	}
 
 	qdf_status = ucfg_pmo_psoc_bus_resume_req(hdd_ctx->psoc,
-						  QDF_SYSTEM_SUSPEND);
+						  type);
 	status = qdf_status_to_os_return(qdf_status);
 	if (status) {
 		hdd_err("Failed pmo bus resume");
@@ -1818,7 +1822,7 @@ static int wlan_hdd_pld_resume(struct device *dev,
 	if (errno)
 		return errno;
 
-	errno = wlan_hdd_bus_resume();
+	errno = wlan_hdd_bus_resume(QDF_SYSTEM_SUSPEND);
 
 	osif_psoc_sync_op_stop(psoc_sync);
 

+ 2 - 2
core/hdd/src/wlan_hdd_power.c

@@ -2855,7 +2855,7 @@ static void __hdd_wlan_fake_apps_resume(struct wiphy *wiphy,
 	/* simulate kernel enable irqs */
 	QDF_BUG(!hif_apps_irqs_enable(hif_ctx));
 
-	QDF_BUG(!wlan_hdd_bus_resume());
+	QDF_BUG(!wlan_hdd_bus_resume(QDF_UNIT_TEST_WOW_SUSPEND));
 
 	QDF_BUG(!wlan_hdd_cfg80211_resume_wlan(wiphy));
 
@@ -2992,7 +2992,7 @@ enable_irqs:
 	QDF_BUG(!hif_apps_irqs_enable(hif_ctx));
 
 bus_resume:
-	QDF_BUG(!wlan_hdd_bus_resume());
+	QDF_BUG(!wlan_hdd_bus_resume(QDF_UNIT_TEST_WOW_SUSPEND));
 
 cfg80211_resume:
 	QDF_BUG(!wlan_hdd_cfg80211_resume_wlan(wiphy));