summaryrefslogtreecommitdiff
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorMursalin Akon <makon@nvidia.com>2012-01-24 14:24:08 -0800
committerLokesh Pathak <lpathak@nvidia.com>2012-02-23 04:44:44 -0800
commit6daef168181dd174cf0c103ab0619031ab6c9bc3 (patch)
tree24377adfc040f3660ebc4d82c896dcf1cdc86f4f /drivers/net/wireless
parent65acb0e7b2cfa64d13b952f7209e7d5c52b25735 (diff)
net: wireless: bcmdhd: set reference to physical device
Set the parent field of the netdevice, which causes sysfs to create a device subdirectory under the netdevice. Without this subdirectory the user-space NetworkManager cannot manage the network device. Implemented using void * to maintain current driver implementation of segregated OS-specific implementation. This CL contains changes similar to http://git-master/r/77889 which was done for bcm4329. Bug 924521 (cherry picked from commit 8ce30af25321844cb0e89a3c23f0a6521885b6db) Signed-off-by: Mursalin Akon <makon@nvidia.com> Change-Id: I78ef9883ae1f85dbd3ad18e0ee2dece1559c4da8 Reviewed-on: http://git-master/r/82875 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Allen Martin <amartin@nvidia.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/bcmdhd/bcmsdh_linux.c4
-rw-r--r--drivers/net/wireless/bcmdhd/dhd.h2
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c4
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_sdio.c4
-rw-r--r--drivers/net/wireless/bcmdhd/include/bcmsdh.h2
5 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
index 096abb824350..414b172a9ab1 100644
--- a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
+++ b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
@@ -247,7 +247,7 @@ int bcmsdh_probe(struct device *dev)
/* try to attach to the target device */
if (!(sdhc->ch = drvinfo.attach((vendevid >> 16),
func->device, 0, 0, 0, 0,
- (void *)regs, NULL, sdh))) {
+ (void *)regs, NULL, sdh, dev))) {
SDLX_MSG(("%s: device attach failed\n", __FUNCTION__));
goto err;
}
@@ -465,7 +465,7 @@ bcmsdh_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
/* try to attach to the target device */
if (!(sdhc->ch = drvinfo.attach(VENDOR_BROADCOM, /* pdev->vendor, */
bcmsdh_query_device(sdh) & 0xFFFF, 0, 0, 0, 0,
- (void *)regs, NULL, sdh))) {
+ (void *)regs, NULL, sdh, pdev->dev))) {
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 18d48d846d08..1b7242d48280 100644
--- a/drivers/net/wireless/bcmdhd/dhd.h
+++ b/drivers/net/wireless/bcmdhd/dhd.h
@@ -364,7 +364,7 @@ void dhd_osl_detach(osl_t *osh);
* Returned structure should have bus and prot pointers filled in.
* bus_hdrlen specifies required headroom for bus module header.
*/
-extern dhd_pub_t *dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen);
+extern dhd_pub_t *dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen, void *dev);
extern int dhd_net_attach(dhd_pub_t *dhdp, int idx);
/* Indication from bus module regarding removal/absence of dongle */
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index b5a91eb4034c..891cf3b084de 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -42,6 +42,7 @@
#include <linux/ethtool.h>
#include <linux/fcntl.h>
#include <linux/fs.h>
+#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/unaligned.h>
@@ -2485,7 +2486,7 @@ dhd_del_if(dhd_info_t *dhd, int ifidx)
}
dhd_pub_t *
-dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
+dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen, void *dev)
{
dhd_info_t *dhd = NULL;
struct net_device *net = NULL;
@@ -2506,6 +2507,7 @@ dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
}
dhd_state |= DHD_ATTACH_STATE_NET_ALLOC;
+ SET_NETDEV_DEV(net, (struct device *)dev);
/* Allocate primary dhd_info */
if (!(dhd = MALLOC(osh, sizeof(dhd_info_t)))) {
DHD_ERROR(("%s: OOM - alloc dhd_info\n", __FUNCTION__));
diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c
index 0b90ed48a0f0..57aee5705454 100644
--- a/drivers/net/wireless/bcmdhd/dhd_sdio.c
+++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c
@@ -5198,7 +5198,7 @@ dhdsdio_chipmatch(uint16 chipid)
static void *
dhdsdio_probe(uint16 venid, uint16 devid, uint16 bus_no, uint16 slot,
- uint16 func, uint bustype, void *regsva, osl_t * osh, void *sdh)
+ uint16 func, uint bustype, void *regsva, osl_t * osh, void *sdh, void *dev)
{
int ret;
dhd_bus_t *bus;
@@ -5318,7 +5318,7 @@ dhdsdio_probe(uint16 venid, uint16 devid, uint16 bus_no, uint16 slot,
}
/* Attach to the dhd/OS/network interface */
- if (!(bus->dhd = dhd_attach(osh, bus, SDPCM_RESERVE))) {
+ if (!(bus->dhd = dhd_attach(osh, bus, SDPCM_RESERVE, dev))) {
DHD_ERROR(("%s: dhd_attach failed\n", __FUNCTION__));
goto fail;
}
diff --git a/drivers/net/wireless/bcmdhd/include/bcmsdh.h b/drivers/net/wireless/bcmdhd/include/bcmsdh.h
index 6131d8ae4305..4e3affde6b06 100644
--- a/drivers/net/wireless/bcmdhd/include/bcmsdh.h
+++ b/drivers/net/wireless/bcmdhd/include/bcmsdh.h
@@ -182,7 +182,7 @@ typedef struct {
/* attach to device */
void *(*attach)(uint16 vend_id, uint16 dev_id, uint16 bus, uint16 slot,
uint16 func, uint bustype, void * regsva, osl_t * osh,
- void * param);
+ void * param, void *dev);
/* detach from device */
void (*detach)(void *ch);
} bcmsdh_driver_t;