summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorNarayan Reddy <narayanr@nvidia.com>2011-10-25 16:39:59 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:52:35 -0800
commitf8a0d126be464a21bb55cafed5285bd4cd9a511e (patch)
treebeaf6b4eb98142c8709b4d5467ca0fa429312792 /drivers/net
parent84d261b7df0abd9ff03c4a111008d6f51cc1c4ce (diff)
drivers: net: bcmdhd: load firmare based on chipid
bcm4329 and bcm4330 need different firmware files. This change detects chipid and loads firmware located at CONFIG_BCMDHD_FW_DIR/firmware_bcm<chipid>.bin Bug 820860 (cherry picked from commit 850c98cc99c0bd8feee523a6c62501de9be3c770) Change-Id: I043ffeda3ae8fe6f5c0c133bacc4aba7a080b983 Reviewed-on: http://git-master/r/60221 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: R59196ff5cb76aedcfaae1e84277a2ae27ce92314
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/bcmdhd/Kconfig23
-rw-r--r--drivers/net/wireless/bcmdhd/Makefile14
-rw-r--r--drivers/net/wireless/bcmdhd/bcmsdh_linux.c7
-rw-r--r--drivers/net/wireless/bcmdhd/dhd.h2
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_common.c13
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c3
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_sdio.c2
7 files changed, 50 insertions, 14 deletions
diff --git a/drivers/net/wireless/bcmdhd/Kconfig b/drivers/net/wireless/bcmdhd/Kconfig
index db434ab04cda..60f5a3adbc91 100644
--- a/drivers/net/wireless/bcmdhd/Kconfig
+++ b/drivers/net/wireless/bcmdhd/Kconfig
@@ -10,17 +10,17 @@ config BCMDHD
If you choose to build a module, it'll be called dhd. Say M if
unsure.
-config BCMDHD_FW_PATH
+config BCMDHD_FW_DIR
depends on BCMDHD
string "Firmware path"
- default "/system/etc/firmware/fw_bcmdhd.bin"
+ default "/system/vendor/firmware"
---help---
Path to the firmware file.
-config BCMDHD_NVRAM_PATH
+config BCMDHD_NVRAM_DIR
depends on BCMDHD
string "NVRAM path"
- default "/system/etc/wifi/bcmdhd.cal"
+ default "/system/etc"
---help---
Path to the calibration file.
@@ -31,3 +31,18 @@ config BCMDHD_WEXT
select WEXT_PRIV
help
Enables WEXT support
+
+config BCMDHD_WIFI_CONTROL_FUNC
+ bool "Use bcmdhd_wlan device"
+ depends on BCMDHD
+ default n
+ ---help---
+ Use this option to get various parameters from architecture specific
+ bcmdhd_wlan platform device. Say n if unsure.
+
+config BCMDHD_HW_OOB
+ bool "Use out of band interrupt"
+ depends on BCMDHD
+ default n
+ ---help---
+ Use out of band interrupt for card interrupt and wake on wireless.
diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile
index e82c9856f006..632f43a8c198 100644
--- a/drivers/net/wireless/bcmdhd/Makefile
+++ b/drivers/net/wireless/bcmdhd/Makefile
@@ -3,13 +3,25 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER \
-DBCMDONGLEHOST -DUNRELEASEDCHIP -DBCMDMA32 -DWLBTAMP -DBCMFILEIMAGE \
-DDHDTHREAD -DDHD_GPL -DDHD_SCHED -DDHD_DEBUG -DSDTEST -DBDC -DTOE \
-DDHD_BCMEVENTS -DSHOW_EVENTS -DDONGLEOVERLAYS -DBCMDBG \
- -DCUSTOMER_HW2 -DCUSTOM_OOB_GPIO_NUM=2 -DOOB_INTR_ONLY -DHW_OOB \
+ -DCUSTOMER_HW2 \
-DMMC_SDIO_ABORT -DBCMSDIO -DBCMLXSDMMC -DBCMPLATFORM_BUS -DWLP2P \
-DNEW_COMPAT_WIRELESS -DWIFI_ACT_FRAME -DARP_OFFLOAD_SUPPORT \
-DKEEP_ALIVE -DCSCAN -DGET_CUSTOM_MAC_ENABLE -DPKT_FILTER_SUPPORT \
-DEMBEDDED_PLATFORM -DENABLE_INSMOD_NO_FW_LOAD -DPNO_SUPPORT \
-Idrivers/net/wireless/bcmdhd -Idrivers/net/wireless/bcmdhd/include
+ifeq ($(CONFIG_BCMDHD_WIFI_CONTROL_FUNC),y)
+DHDCFLAGS += -DCONFIG_WIFI_CONTROL_FUNC
+else
+DHDCFLAGS += -DCUSTOM_OOB_GPIO_NUM=2
+endif
+
+ifeq ($(CONFIG_BCMDHD_HW_OOB),y)
+DHDCFLAGS += -DHW_OOB -DOOB_INTR_ONLY
+else
+DHDCFLAGS += -DSDIO_ISR_THREAD
+endif
+
DHDOFILES = aiutils.o bcmsdh_sdmmc_linux.o dhd_linux.o siutils.o bcmutils.o \
dhd_linux_sched.o bcmwifi.o dhd_sdio.o bcmevent.o dhd_bta.o hndpmu.o \
bcmsdh.o dhd_cdc.o bcmsdh_linux.o dhd_common.o linux_osl.o \
diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
index 04c43a3225cf..096abb824350 100644
--- a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
+++ b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
@@ -35,6 +35,7 @@
#include <linux/pci.h>
#include <linux/completion.h>
+#include <linux/mmc/sdio_func.h>
#include <osl.h>
#include <pcicfg.h>
@@ -166,6 +167,7 @@ int bcmsdh_probe(struct device *dev)
bcmsdh_hc_t *sdhc = NULL;
ulong regs = 0;
bcmsdh_info_t *sdh = NULL;
+ struct sdio_func *func = container_of(dev, struct sdio_func, dev);
#if !defined(BCMLXSDMMC) && defined(BCMPLATFORM_BUS)
struct platform_device *pdev;
struct resource *r;
@@ -241,10 +243,11 @@ int bcmsdh_probe(struct device *dev)
/* Read the vendor/device ID from the CIS */
vendevid = bcmsdh_query_device(sdh);
+
/* try to attach to the target device */
if (!(sdhc->ch = drvinfo.attach((vendevid >> 16),
- (vendevid & 0xFFFF), 0, 0, 0, 0,
- (void *)regs, NULL, sdh))) {
+ func->device, 0, 0, 0, 0,
+ (void *)regs, NULL, sdh))) {
SDLX_MSG(("%s: device attach failed\n", __FUNCTION__));
goto err;
}
diff --git a/drivers/net/wireless/bcmdhd/dhd.h b/drivers/net/wireless/bcmdhd/dhd.h
index c87f6cf37d9c..18d48d846d08 100644
--- a/drivers/net/wireless/bcmdhd/dhd.h
+++ b/drivers/net/wireless/bcmdhd/dhd.h
@@ -462,7 +462,7 @@ extern int dhd_wl_ioctl(dhd_pub_t *dhd_pub, int ifindex, wl_ioctl_t *ioc, void *
extern int dhd_wl_ioctl_cmd(dhd_pub_t *dhd_pub, int cmd, void *arg, int len, uint8 set,
int ifindex);
-extern struct dhd_cmn *dhd_common_init(osl_t *osh);
+extern struct dhd_cmn *dhd_common_init(uint16 devid, osl_t *osh);
extern void dhd_common_deinit(dhd_pub_t *dhd_pub, dhd_cmn_t *sa_cmn);
extern int dhd_add_if(struct dhd_info *dhd, int ifidx, void *handle,
diff --git a/drivers/net/wireless/bcmdhd/dhd_common.c b/drivers/net/wireless/bcmdhd/dhd_common.c
index a29c2fab28cd..372ec80c866a 100644
--- a/drivers/net/wireless/bcmdhd/dhd_common.c
+++ b/drivers/net/wireless/bcmdhd/dhd_common.c
@@ -170,7 +170,7 @@ const bcm_iovar_t dhd_iovars[] = {
};
struct dhd_cmn *
-dhd_common_init(osl_t *osh)
+dhd_common_init(uint16 devid, osl_t *osh)
{
dhd_cmn_t *cmn;
@@ -190,17 +190,22 @@ dhd_common_init(osl_t *osh)
#ifdef CONFIG_BCMDHD_FW_PATH
bcm_strncpy_s(fw_path, sizeof(fw_path), CONFIG_BCMDHD_FW_PATH, MOD_PARAM_PATHLEN-1);
-#else /* CONFIG_BCMDHD_FW_PATH */
+#elif defined(CONFIG_BCMDHD_FW_DIR) /* CONFIG_BCMDHD_FW_PATH */
+ sprintf(fw_path, "%s/bcm%x/fw_bcmdhd.bin", CONFIG_BCMDHD_FW_DIR, devid);
+#else
fw_path[0] = '\0';
-#endif /* CONFIG_BCMDHD_FW_PATH */
+#endif /* CONFIG_BCMDHD_FW_DIR */
#ifdef CONFIG_BCMDHD_NVRAM_PATH
bcm_strncpy_s(nv_path, sizeof(nv_path), CONFIG_BCMDHD_NVRAM_PATH, MOD_PARAM_PATHLEN-1);
-#else /* CONFIG_BCMDHD_NVRAM_PATH */
+#elif defined(CONFIG_BCMDHD_NVRAM_DIR) /* CONFIG_BCMDHD_NVRAM_PATH */
+ sprintf(nv_path, "%s/nvram_%x.txt", CONFIG_BCMDHD_NVRAM_DIR, devid);
+#else
nv_path[0] = '\0';
#endif /* CONFIG_BCMDHD_NVRAM_PATH */
#ifdef SOFTAP
fw_path2[0] = '\0';
#endif
+ DHD_ERROR(("bcmdhd: fw_path: %s nvram_path: %s\n", fw_path, nv_path));
return cmn;
}
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index 92cdc9b1a4b1..b5a91eb4034c 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -2928,8 +2928,9 @@ dhd_preinit_ioctls(dhd_pub_t *dhd)
dhd_pkt_filter_enable = TRUE;
}
- DHD_ERROR(("Firmware up: op_mode=%d, "
+ DHD_ERROR(("Firmware up: fw_path=%s op_mode=%d, "
"Broadcom Dongle Host Driver mac=%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
+ fw_path,
dhd->op_mode,
dhd->mac.octet[0], dhd->mac.octet[1], dhd->mac.octet[2],
dhd->mac.octet[3], dhd->mac.octet[4], dhd->mac.octet[5]));
diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c
index 29301159cbd2..b43c7422e02c 100644
--- a/drivers/net/wireless/bcmdhd/dhd_sdio.c
+++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c
@@ -5305,7 +5305,7 @@ dhdsdio_probe(uint16 venid, uint16 devid, uint16 bus_no, uint16 slot,
bus->usebufpool = FALSE; /* Use bufpool if allocated, else use locally malloced rxbuf */
/* attach the common module */
- if (!(cmn = dhd_common_init(osh))) {
+ if (!(cmn = dhd_common_init(bus->cl_devid, osh))) {
DHD_ERROR(("%s: dhd_common_init failed\n", __FUNCTION__));
goto fail;
}