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
This commit is contained in:
Qun Zhang 2018-09-11 16:28:51 +08:00 • committed by nshrivas
commit 4a83a46fab
5 changed files with 52 additions and 40 deletions

View file

@ -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");

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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)
{