From 4a83a46fabe3ac6cf8ddcb391a42ccfb5e53f2e2 Mon Sep 17 00:00:00 2001 From: Qun Zhang Date: Tue, 11 Sep 2018 16:28:51 +0800 Subject: [PATCH] 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 --- core/hdd/src/wlan_hdd_main.c | 8 ++++++- core/hdd/src/wlan_hdd_sysfs.c | 40 +++++++++++++++++------------------ core/pld/src/pld_common.c | 14 ++++++------ core/pld/src/pld_pcie.c | 28 ++++++++++++------------ core/pld/src/pld_pcie.h | 6 ++++++ 5 files changed, 54 insertions(+), 42 deletions(-) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index df078dba69a3..39c1756ca449 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/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"); diff --git a/core/hdd/src/wlan_hdd_sysfs.c b/core/hdd/src/wlan_hdd_sysfs.c index 7000bc60533f..9a936c627ebb 100644 --- a/core/hdd/src/wlan_hdd_sysfs.c +++ b/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; - } - - error = sysfs_create_file(driver_kobject, &dr_ver_attribute.attr); - if (error) { - hdd_err("could not create driver sysfs file"); + wlan_kobject = kobject_create_and_add("wlan", driver_kobject); + if (!wlan_kobject) { + hdd_err("could not allocate wlan kobject"); goto free_drv_kobj; } - fw_kobject = kobject_create_and_add("fw", driver_kobject); + error = sysfs_create_file(wlan_kobject, &dr_ver_attribute.attr); + if (error) { + hdd_err("could not create wlan sysfs file"); + goto free_wlan_kobj; + } + + 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; } } diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index 25a7b058f64b..04d67212004a 100644 --- a/core/pld/src/pld_common.c +++ b/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); } diff --git a/core/pld/src/pld_pcie.c b/core/pld/src/pld_pcie.c index 5442b1009ae8..c4fc3530e921 100644 --- a/core/pld/src/pld_pcie.c +++ b/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; } diff --git a/core/pld/src/pld_pcie.h b/core/pld/src/pld_pcie.h index 2887ea9bbe8b..14f3f1ec4058 100644 --- a/core/pld/src/pld_pcie.h +++ b/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) {