OSDN Git Service

staging: brcm80211: bugfix for 32 bit power pc platform
authorRoland Vossen <rvossen@broadcom.com>
Fri, 26 Aug 2011 13:19:36 +0000 (15:19 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 26 Aug 2011 17:53:12 +0000 (10:53 -0700)
On some platforms resource_size_t == 64 but but unsigned long is only 32-bits.
In this particular problem, reported and fixed by Tony Breeds, a physical
address was truncated as a result.

Reported-by: Tony Breeds <tony@bakeyournoodle.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Roland Vossen <rvossen@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmsmac/mac80211_if.c

index 2370171..9b787e6 100644 (file)
@@ -752,12 +752,11 @@ static int brcms_set_hint(struct brcms_info *wl, char *abbrev)
  * is called in brcms_pci_probe() context, therefore no locking required.
  */
 static struct brcms_info *brcms_attach(u16 vendor, u16 device,
-                                      unsigned long regs,
+                                      resource_size_t regs,
                                       struct pci_dev *btparam, uint irq)
 {
        struct brcms_info *wl = NULL;
        int unit, err;
-       unsigned long base_addr;
        struct ieee80211_hw *hw;
        u8 perm[ETH_ALEN];
 
@@ -780,11 +779,7 @@ static struct brcms_info *brcms_attach(u16 vendor, u16 device,
        /* setup the bottom half handler */
        tasklet_init(&wl->tasklet, brcms_dpc, (unsigned long) wl);
 
-
-
-       base_addr = regs;
-
-       wl->regsva = ioremap_nocache(base_addr, PCI_BAR0_WINSZ);
+       wl->regsva = ioremap_nocache(regs, PCI_BAR0_WINSZ);
        if (wl->regsva == NULL) {
                wiphy_err(wl->wiphy, "wl%d: ioremap() failed\n", unit);
                goto fail;