Kaynağa Gözat

qcacld-3.0: update changes for fully supporting MULTI_IF_NAME

Currently, driver don't fully support MULTI_IF_NAME when two wlan
cards are supported by using two drivers:
1. if two wlan cards are all PCIe, driver can't distinguish
two PCIe cards firmware path.
2. When create hdd sysfs file upper folder, it will repeatly create the
same folder if not use MULTI_IF_NAME to distinguish them. It's not
necessary to distinguish the sub-folder once upper folder is different.

Change-Id: I511de46eec98e736d4e97d5c94ab22592d33f347
CRs-Fixed: 2311137
Qun Zhang 6 yıl önce
ebeveyn
işleme
4a83a46fab

+ 7 - 1
core/hdd/src/wlan_hdd_main.c

@@ -202,6 +202,12 @@ static struct attribute *attrs[] = {
 };
 
 #define MODULE_INITIALIZED 1
+
+#ifdef MULTI_IF_NAME
+#define WLAN_LOADER_NAME "boot_" MULTI_IF_NAME
+#else
+#define WLAN_LOADER_NAME "boot_wlan"
+#endif
 #endif
 
 #define HDD_OPS_INACTIVITY_TIMEOUT (120000)
@@ -12971,7 +12977,7 @@ static int wlan_init_sysfs(void)
 	wlan_loader->loaded_state = 0;
 	wlan_loader->attr_group->attrs = attrs;
 
-	wlan_loader->boot_wlan_obj = kobject_create_and_add("boot_wlan",
+	wlan_loader->boot_wlan_obj = kobject_create_and_add(WLAN_LOADER_NAME,
 							    kernel_kobj);
 	if (!wlan_loader->boot_wlan_obj) {
 		hdd_err("sysfs create and add failed");

+ 18 - 18
core/hdd/src/wlan_hdd_sysfs.c

@@ -37,7 +37,7 @@
 #ifdef MULTI_IF_NAME
 #define DRIVER_NAME MULTI_IF_NAME
 #else
-#define DRIVER_NAME "wlan"
+#define DRIVER_NAME "wifi"
 #endif
 
 static struct kobject *wlan_kobject;
@@ -120,25 +120,25 @@ void hdd_sysfs_create_version_interface(struct wlan_objmgr_psoc *psoc)
 	uint32_t psoc_id;
 	char buf[MAX_PSOC_ID_SIZE];
 
-	wlan_kobject = kobject_create_and_add("wifi", kernel_kobj);
-	if (!wlan_kobject) {
-		hdd_err("could not allocate wlan kobject");
+	driver_kobject = kobject_create_and_add(DRIVER_NAME, kernel_kobj);
+	if (!driver_kobject) {
+		hdd_err("could not allocate driver kobject");
 		return;
 	}
 
-	driver_kobject = kobject_create_and_add(DRIVER_NAME, wlan_kobject);
-	if (!driver_kobject) {
-		hdd_err("could not allocate driver kobject");
-		goto free_wlan_kobj;
+	wlan_kobject = kobject_create_and_add("wlan", driver_kobject);
+	if (!wlan_kobject) {
+		hdd_err("could not allocate wlan kobject");
+		goto free_drv_kobj;
 	}
 
-	error = sysfs_create_file(driver_kobject, &dr_ver_attribute.attr);
+	error = sysfs_create_file(wlan_kobject, &dr_ver_attribute.attr);
 	if (error) {
-		hdd_err("could not create driver sysfs file");
-		goto free_drv_kobj;
+		hdd_err("could not create wlan sysfs file");
+		goto free_wlan_kobj;
 	}
 
-	fw_kobject = kobject_create_and_add("fw", driver_kobject);
+	fw_kobject = kobject_create_and_add("fw", wlan_kobject);
 	if (!fw_kobject) {
 		hdd_err("could not allocate fw kobject");
 		goto free_fw_kobj;
@@ -169,13 +169,13 @@ free_fw_kobj:
 	kobject_put(fw_kobject);
 	fw_kobject = NULL;
 
-free_drv_kobj:
-	kobject_put(driver_kobject);
-	driver_kobject = NULL;
-
 free_wlan_kobj:
 	kobject_put(wlan_kobject);
 	wlan_kobject = NULL;
+
+free_drv_kobj:
+	kobject_put(driver_kobject);
+	driver_kobject = NULL;
 }
 
 void hdd_sysfs_destroy_version_interface(void)
@@ -185,9 +185,9 @@ void hdd_sysfs_destroy_version_interface(void)
 		psoc_kobject = NULL;
 		kobject_put(fw_kobject);
 		fw_kobject = NULL;
-		kobject_put(driver_kobject);
-		driver_kobject = NULL;
 		kobject_put(wlan_kobject);
 		wlan_kobject = NULL;
+		kobject_put(driver_kobject);
+		driver_kobject = NULL;
 	}
 }

+ 7 - 7
core/pld/src/pld_common.c

@@ -427,19 +427,19 @@ void pld_get_default_fw_files(struct pld_fw_files *pfw_files)
 {
 	memset(pfw_files, 0, sizeof(*pfw_files));
 
-	strlcpy(pfw_files->image_file, PLD_IMAGE_FILE,
+	strlcpy(pfw_files->image_file, PREFIX PLD_IMAGE_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->board_data, PLD_BOARD_DATA_FILE,
+	strlcpy(pfw_files->board_data, PREFIX PLD_BOARD_DATA_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->otp_data, PLD_OTP_FILE,
+	strlcpy(pfw_files->otp_data, PREFIX PLD_OTP_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->utf_file, PLD_UTF_FIRMWARE_FILE,
+	strlcpy(pfw_files->utf_file, PREFIX PLD_UTF_FIRMWARE_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->utf_board_data, PLD_BOARD_DATA_FILE,
+	strlcpy(pfw_files->utf_board_data, PREFIX PLD_BOARD_DATA_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->epping_file, PLD_EPPING_FILE,
+	strlcpy(pfw_files->epping_file, PREFIX PLD_EPPING_FILE,
 		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->setup_file, PLD_SETUP_FILE,
+	strlcpy(pfw_files->setup_file, PREFIX PLD_SETUP_FILE,
 		PLD_MAX_FILE_NAME);
 }
 

+ 14 - 14
core/pld/src/pld_pcie.c

@@ -632,20 +632,20 @@ int pld_pcie_get_fw_files_for_target(struct device *dev,
 	if (ret)
 		return ret;
 
-	strlcpy(pfw_files->image_file, cnss_fw_files.image_file,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->board_data, cnss_fw_files.board_data,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->otp_data, cnss_fw_files.otp_data,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->utf_file, cnss_fw_files.utf_file,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->utf_board_data, cnss_fw_files.utf_board_data,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->epping_file, cnss_fw_files.epping_file,
-		PLD_MAX_FILE_NAME);
-	strlcpy(pfw_files->evicted_data, cnss_fw_files.evicted_data,
-		PLD_MAX_FILE_NAME);
+	scnprintf(pfw_files->image_file, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.image_file);
+	scnprintf(pfw_files->board_data, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.board_data);
+	scnprintf(pfw_files->otp_data, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.otp_data);
+	scnprintf(pfw_files->utf_file, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.utf_file);
+	scnprintf(pfw_files->utf_board_data, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.utf_board_data);
+	scnprintf(pfw_files->epping_file, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.epping_file);
+	scnprintf(pfw_files->evicted_data, PLD_MAX_FILE_NAME, PREFIX "%s",
+		  cnss_fw_files.evicted_data);
 
 	return 0;
 }

+ 6 - 0
core/pld/src/pld_pcie.h

@@ -24,6 +24,12 @@
 #endif
 #include "pld_internal.h"
 
+#ifdef MULTI_IF_NAME
+#define PREFIX MULTI_IF_NAME "/"
+#else
+#define PREFIX ""
+#endif
+
 #ifndef HIF_PCI
 static inline int pld_pcie_register_driver(void)
 {