浏览代码

qcacld-3.0: Move dump in progress feature to separate file

With this change introduce featurization for dump in progress
and move implementation related to this feature to new files.

Change-Id: I4614aecde57a9c5ffec765f3afaa943c58956132
CRs-Fixed: 2979226
Ashish Kumar Dhanotiya 3 年之前
父节点
当前提交
55ab069325

+ 4 - 0
Kbuild

@@ -404,6 +404,9 @@ HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_sysfs_dp_aggregation.o
 ifeq ($(CONFIG_DP_SWLM), y)
 HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_sysfs_swlm.o
 endif
+ifeq ($(CONFIG_WLAN_DUMP_IN_PROGRESS), y)
+HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_sysfs_dump_in_progress.o
+endif
 endif
 
 ifeq ($(CONFIG_QCACLD_FEATURE_FW_STATE), y)
@@ -2999,6 +3002,7 @@ cppflags-$(CONFIG_WLAN_SYSFS_HE_BSS_COLOR) += -DWLAN_SYSFS_HE_BSS_COLOR
 cppflags-$(CONFIG_WLAN_SYSFS_STA_INFO) += -DWLAN_SYSFS_STA_INFO
 cppflags-$(CONFIG_WLAN_DL_MODES) += -DCONFIG_WLAN_DL_MODES
 cppflags-$(CONFIG_WLAN_THERMAL_MULTI_CLIENT_SUPPORT) += -DFEATURE_WPSS_THERMAL_MITIGATION
+cppflags-$(CONFIG_WLAN_DUMP_IN_PROGRESS) += -DCONFIG_WLAN_DUMP_IN_PROGRESS
 
 ifeq ($(CONFIG_LEAK_DETECTION), y)
 cppflags-y += \

+ 1 - 0
configs/default_defconfig

@@ -302,6 +302,7 @@ endif
 	CONFIG_WLAN_SYSFS_TEMPERATURE := y
 	CONFIG_WLAN_THERMAL_CFG := y
 	CONFIG_WLAN_DL_MODES := y
+	CONFIG_WLAN_DUMP_IN_PROGRESS := y
 endif
 
 CONFIG_WLAN_POWER_DEBUG := y

+ 52 - 0
core/hdd/inc/wlan_hdd_sysfs_dump_in_progress.h

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2017-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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: wlan_hdd_sysfs_dump_in_progress.h
+ *
+ * hdd dump in progress declarations
+ */
+
+#if defined(WLAN_SYSFS) && defined(CONFIG_WLAN_DUMP_IN_PROGRESS)
+/**
+ * hdd_sysfs_create_dump_in_progress_interface() - API to create
+ * dump_in_progress sysfs file
+ * @wifi_kobject: sysfs wifi kobject
+ *
+ * Return: None
+ */
+void hdd_sysfs_create_dump_in_progress_interface(struct kobject *wifi_kobject);
+
+/**
+ * hdd_sysfs_destroy_dump_in_progress_interface() - API to destroy
+ * dump_in_progress sysfs file
+ * @driver_kobject: sysfs driver kobject
+ *
+ * Return: None
+ */
+void hdd_sysfs_destroy_dump_in_progress_interface(struct kobject *wifi_kobject);
+#else
+static inline void
+hdd_sysfs_create_dump_in_progress_interface(struct kobject *wifi_kobject)
+{
+}
+static inline void
+hdd_sysfs_destroy_dump_in_progress_interface(struct kobject *wifi_kobject)
+{
+}
+#endif

+ 3 - 130
core/hdd/src/wlan_hdd_sysfs.c

@@ -76,6 +76,7 @@
 #include <wlan_hdd_sysfs_dp_aggregation.h>
 #include <wlan_hdd_sysfs_dl_modes.h>
 #include <wlan_hdd_sysfs_swlm.h>
+#include <wlan_hdd_sysfs_dump_in_progress.h>
 #include "wma_api.h"
 
 #define MAX_PSOC_ID_SIZE 10
@@ -493,109 +494,6 @@ static DEVICE_ATTR(beacon_stats, 0444,
 		   show_beacon_reception_stats, NULL);
 #endif
 
-static ssize_t
-__hdd_sysfs_dump_in_progress_store(struct hdd_context *hdd_ctx,
-				   struct kobj_attribute *attr,
-				   char const *buf, size_t count)
-{
-	char buf_local[MAX_SYSFS_USER_COMMAND_SIZE_LENGTH + 1];
-	char *sptr, *token;
-	int value, ret;
-
-	if (!wlan_hdd_validate_modules_state(hdd_ctx))
-		return -EINVAL;
-
-	ret = hdd_sysfs_validate_and_copy_buf(buf_local, sizeof(buf_local),
-					      buf, count);
-	if (ret) {
-		hdd_err_rl("invalid input");
-		return ret;
-	}
-
-	sptr = buf_local;
-	/* Get value */
-	token = strsep(&sptr, " ");
-	if (!token)
-		return -EINVAL;
-	if (kstrtou32(token, 0, &value))
-		return -EINVAL;
-
-	hdd_debug_rl("dump in progress %d", value);
-	if (value < 0 || value > 1)
-		return -EINVAL;
-
-	hdd_ctx->dump_in_progress = value;
-
-	return count;
-}
-
-static ssize_t hdd_sysfs_dump_in_progress_store(struct kobject *kobj,
-						struct kobj_attribute *attr,
-						char const *buf, size_t count)
-{
-	struct osif_psoc_sync *psoc_sync;
-	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
-	ssize_t errno_size;
-	int ret;
-
-	ret = wlan_hdd_validate_context(hdd_ctx);
-	if (ret != 0)
-		return ret;
-
-	errno_size = osif_psoc_sync_op_start(wiphy_dev(hdd_ctx->wiphy),
-					     &psoc_sync);
-	if (errno_size)
-		return errno_size;
-
-	errno_size = __hdd_sysfs_dump_in_progress_store(hdd_ctx, attr,
-							buf, count);
-
-	osif_psoc_sync_op_stop(psoc_sync);
-
-	return errno_size;
-}
-
-static ssize_t  __hdd_sysfs_dump_in_progress_show(struct hdd_context *hdd_ctx,
-						  struct kobj_attribute *attr,
-						  char *buf)
-{
-	ssize_t ret_val;
-
-	hdd_debug_rl("dump in progress %d", hdd_ctx->dump_in_progress);
-	ret_val = scnprintf(buf, PAGE_SIZE, "%d\n", hdd_ctx->dump_in_progress);
-
-	return ret_val;
-}
-
-static ssize_t hdd_sysfs_dump_in_progress_show(struct kobject *kobj,
-					       struct kobj_attribute *attr,
-					       char *buf)
-{
-	struct osif_psoc_sync *psoc_sync;
-	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
-	ssize_t errno_size;
-	int ret;
-
-	ret = wlan_hdd_validate_context(hdd_ctx);
-	if (ret != 0)
-		return ret;
-
-	errno_size = osif_psoc_sync_op_start(wiphy_dev(hdd_ctx->wiphy),
-					     &psoc_sync);
-	if (errno_size)
-		return errno_size;
-
-	errno_size = __hdd_sysfs_dump_in_progress_show(hdd_ctx, attr, buf);
-
-	osif_psoc_sync_op_stop(psoc_sync);
-
-	return errno_size;
-}
-
-static struct kobj_attribute dump_in_progress_attribute =
-	__ATTR(dump_in_progress, 0660, hdd_sysfs_dump_in_progress_show,
-	       hdd_sysfs_dump_in_progress_store);
-
 static struct kobj_attribute dr_ver_attribute =
 	__ATTR(driver_version, 0440, show_driver_version, NULL);
 static struct kobj_attribute fw_ver_attribute =
@@ -681,31 +579,6 @@ static void hdd_sysfs_destroy_wifi_root_obj(void)
 	wifi_kobject = NULL;
 }
 
-static void hdd_sysfs_create_dump_in_progress_interface(void)
-{
-	int error;
-
-	if (!wifi_kobject) {
-		hdd_err("could not get wifi kobject!");
-		return;
-	}
-	error = sysfs_create_file(wifi_kobject,
-				  &dump_in_progress_attribute.attr);
-	if (error)
-		hdd_err("could not create dump in progress sysfs file");
-}
-
-static void hdd_sysfs_destroy_dump_in_progress_interface(void)
-{
-	if (!wifi_kobject) {
-		hdd_err("could not get wifi kobject!");
-		return;
-	}
-
-	sysfs_remove_file(wifi_kobject,
-			  &dump_in_progress_attribute.attr);
-}
-
 #ifdef WLAN_POWER_DEBUG
 static void hdd_sysfs_create_powerstats_interface(void)
 {
@@ -974,7 +847,7 @@ void hdd_create_sysfs_files(struct hdd_context *hdd_ctx)
 	hdd_sysfs_create_wifi_root_obj();
 	if  (QDF_GLOBAL_MISSION_MODE == hdd_get_conparam()) {
 		hdd_sysfs_create_powerstats_interface();
-		hdd_sysfs_create_dump_in_progress_interface();
+		hdd_sysfs_create_dump_in_progress_interface(wifi_kobject);
 		hdd_sysfs_fw_mode_config_create(driver_kobject);
 		hdd_sysfs_scan_disable_create(driver_kobject);
 		hdd_sysfs_wow_ito_create(driver_kobject);
@@ -1009,7 +882,7 @@ void hdd_destroy_sysfs_files(void)
 		hdd_sysfs_wow_ito_destroy(driver_kobject);
 		hdd_sysfs_scan_disable_destroy(driver_kobject);
 		hdd_sysfs_fw_mode_config_destroy(driver_kobject);
-		hdd_sysfs_destroy_dump_in_progress_interface();
+		hdd_sysfs_destroy_dump_in_progress_interface(wifi_kobject);
 		hdd_sysfs_destroy_powerstats_interface();
 	}
 	hdd_sysfs_destroy_wifi_root_obj();

+ 159 - 0
core/hdd/src/wlan_hdd_sysfs_dump_in_progress.c

@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2017-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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: wlan_hdd_sysfs_dump_in_progress.c
+ *
+ * Dump in progress sysfs implementation
+ */
+
+#include <linux/kobject.h>
+
+#include "wlan_hdd_includes.h"
+#include "wlan_hdd_sysfs_dump_in_progress.h"
+#include "wlan_hdd_sysfs.h"
+#include "osif_sync.h"
+
+static ssize_t
+__hdd_sysfs_dump_in_progress_store(struct hdd_context *hdd_ctx,
+				   struct kobj_attribute *attr,
+				   char const *buf, size_t count)
+{
+	char buf_local[MAX_SYSFS_USER_COMMAND_SIZE_LENGTH + 1];
+	char *sptr, *token;
+	int value, ret;
+
+	if (!wlan_hdd_validate_modules_state(hdd_ctx))
+		return -EINVAL;
+
+	ret = hdd_sysfs_validate_and_copy_buf(buf_local, sizeof(buf_local),
+					      buf, count);
+	if (ret) {
+		hdd_err_rl("invalid input");
+		return ret;
+	}
+
+	sptr = buf_local;
+	/* Get value */
+	token = strsep(&sptr, " ");
+	if (!token)
+		return -EINVAL;
+	if (kstrtou32(token, 0, &value))
+		return -EINVAL;
+
+	hdd_debug_rl("dump in progress %d", value);
+	if (value < 0 || value > 1)
+		return -EINVAL;
+
+	hdd_ctx->dump_in_progress = value;
+
+	return count;
+}
+
+static ssize_t hdd_sysfs_dump_in_progress_store(struct kobject *kobj,
+						struct kobj_attribute *attr,
+						char const *buf, size_t count)
+{
+	struct osif_psoc_sync *psoc_sync;
+	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	ssize_t errno_size;
+	int ret;
+
+	ret = wlan_hdd_validate_context(hdd_ctx);
+	if (ret != 0)
+		return ret;
+
+	errno_size = osif_psoc_sync_op_start(wiphy_dev(hdd_ctx->wiphy),
+					     &psoc_sync);
+	if (errno_size)
+		return errno_size;
+
+	errno_size = __hdd_sysfs_dump_in_progress_store(hdd_ctx, attr,
+							buf, count);
+
+	osif_psoc_sync_op_stop(psoc_sync);
+
+	return errno_size;
+}
+
+static ssize_t  __hdd_sysfs_dump_in_progress_show(struct hdd_context *hdd_ctx,
+						  struct kobj_attribute *attr,
+						  char *buf)
+{
+	ssize_t ret_val;
+
+	hdd_debug_rl("dump in progress %d", hdd_ctx->dump_in_progress);
+	ret_val = scnprintf(buf, PAGE_SIZE, "%d\n", hdd_ctx->dump_in_progress);
+
+	return ret_val;
+}
+
+static ssize_t hdd_sysfs_dump_in_progress_show(struct kobject *kobj,
+					       struct kobj_attribute *attr,
+					       char *buf)
+{
+	struct osif_psoc_sync *psoc_sync;
+	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	ssize_t errno_size;
+	int ret;
+
+	ret = wlan_hdd_validate_context(hdd_ctx);
+	if (ret != 0)
+		return ret;
+
+	errno_size = osif_psoc_sync_op_start(wiphy_dev(hdd_ctx->wiphy),
+					     &psoc_sync);
+	if (errno_size)
+		return errno_size;
+
+	errno_size = __hdd_sysfs_dump_in_progress_show(hdd_ctx, attr, buf);
+
+	osif_psoc_sync_op_stop(psoc_sync);
+
+	return errno_size;
+}
+
+static struct kobj_attribute dump_in_progress_attribute =
+	__ATTR(dump_in_progress, 0660, hdd_sysfs_dump_in_progress_show,
+	       hdd_sysfs_dump_in_progress_store);
+
+void hdd_sysfs_create_dump_in_progress_interface(struct kobject *wifi_kobject)
+{
+	int error;
+
+	if (!wifi_kobject) {
+		hdd_err("could not get wifi kobject!");
+		return;
+	}
+	error = sysfs_create_file(wifi_kobject,
+				  &dump_in_progress_attribute.attr);
+	if (error)
+		hdd_err("could not create dump in progress sysfs file");
+}
+
+void hdd_sysfs_destroy_dump_in_progress_interface(struct kobject *wifi_kobject)
+{
+	if (!wifi_kobject) {
+		hdd_err("could not get wifi kobject!");
+		return;
+	}
+
+	sysfs_remove_file(wifi_kobject,
+			  &dump_in_progress_attribute.attr);
+}
+