brcmsmac: Fix I/O functions for MIPS and for big-endian architectures
svn path=/dists/sid/linux-2.6/; revision=18356
This commit is contained in:
parent
619c99e343
commit
893f0879fa
|
@ -10,6 +10,7 @@ linux-2.6 (3.1.4-2) UNRELEASED; urgency=low
|
||||||
* USB: EHCI: fix HUB TT scheduling issue with iso transfer (Closes: #651015)
|
* USB: EHCI: fix HUB TT scheduling issue with iso transfer (Closes: #651015)
|
||||||
* [x86] Enable MEMTEST (Closes: #613321, #646361)
|
* [x86] Enable MEMTEST (Closes: #613321, #646361)
|
||||||
- If bad RAM is detected, WARN and recommend a more thorough test
|
- If bad RAM is detected, WARN and recommend a more thorough test
|
||||||
|
* brcmsmac: Fix I/O functions for MIPS and for big-endian architectures
|
||||||
|
|
||||||
-- Bastian Blank <waldi@debian.org> Thu, 01 Dec 2011 13:17:34 +0100
|
-- Bastian Blank <waldi@debian.org> Thu, 01 Dec 2011 13:17:34 +0100
|
||||||
|
|
||||||
|
|
67
debian/patches/bugfix/all/0001-staging-brcm80211-fixed-build-issue-for-big-endian-p.patch
vendored
Normal file
67
debian/patches/bugfix/all/0001-staging-brcm80211-fixed-build-issue-for-big-endian-p.patch
vendored
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
From: Roland Vossen <rvossen@broadcom.com>
|
||||||
|
Date: Mon, 8 Aug 2011 15:58:22 +0200
|
||||||
|
Subject: [PATCH 1/5] staging: brcm80211: fixed build issue for big endian
|
||||||
|
platforms
|
||||||
|
|
||||||
|
commit 98ff86e37d1d1c3ebcaa124dfa9a900eb0e1fa77 upstream.
|
||||||
|
|
||||||
|
Driver now builds for big endian mips platform, possibly also for other
|
||||||
|
big endian platforms. A change was made to the R_REG and W_REG macro's.
|
||||||
|
These macro's perform an xor (^) operation for endianess swap purposes.
|
||||||
|
Gcc complained because an xor operation is not allowed on a pointer type.
|
||||||
|
Fixed this by casting the pointer to an unsigned long.
|
||||||
|
|
||||||
|
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
---
|
||||||
|
drivers/staging/brcm80211/brcmsmac/dma.h | 1 +
|
||||||
|
drivers/staging/brcm80211/brcmsmac/types.h | 8 ++++----
|
||||||
|
2 files changed, 5 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/dma.h b/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
index 3ff109f..334f2eb 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
#ifndef _BRCM_DMA_H_
|
||||||
|
#define _BRCM_DMA_H_
|
||||||
|
|
||||||
|
+#include <linux/delay.h>
|
||||||
|
#include "types.h" /* forward structure declarations */
|
||||||
|
|
||||||
|
/* DMA structure:
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/types.h b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
index e0880a0..ab97718 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
@@ -305,11 +305,11 @@ do { \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
__osl_v = \
|
||||||
|
- readb((u8 *)((r)^3)); \
|
||||||
|
+ readb((u8 *)((unsigned long)(r)^3)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
__osl_v = \
|
||||||
|
- readw((u16 *)((r)^2)); \
|
||||||
|
+ readw((u16 *)((unsigned long)(r)^2)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
__osl_v = readl((u32 *)(r)); \
|
||||||
|
@@ -322,10 +322,10 @@ do { \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
writeb((u8)(v), \
|
||||||
|
- (u8 *)((r)^3)); break; \
|
||||||
|
+ (u8 *)((unsigned long)(r)^3)); break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
writew((u16)(v), \
|
||||||
|
- (u16 *)((r)^2)); break; \
|
||||||
|
+ (u16 *)((unsigned long)(r)^2)); break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
writel((u32)(v), \
|
||||||
|
(u32 *)(r)); break; \
|
||||||
|
--
|
||||||
|
1.7.7.3
|
||||||
|
|
137
debian/patches/bugfix/all/0002-staging-brcm80211-simplified-register-access-macro-s.patch
vendored
Normal file
137
debian/patches/bugfix/all/0002-staging-brcm80211-simplified-register-access-macro-s.patch
vendored
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
From: Roland Vossen <rvossen@broadcom.com>
|
||||||
|
Date: Mon, 8 Aug 2011 15:58:49 +0200
|
||||||
|
Subject: [PATCH 2/5] staging: brcm80211: simplified register access macro's in
|
||||||
|
softmac
|
||||||
|
|
||||||
|
commit b60987a15628046259be17471fd80ba92cf35ed2 upstream.
|
||||||
|
|
||||||
|
Code cleanup. Removed MIPS specific 'sync' instruction since this is not
|
||||||
|
required for the chips that this driver supports. MIPS specific macro's
|
||||||
|
were now the same as non-MIPS register access macro's and thus have been
|
||||||
|
deleted. Also added comment that makes clearer what the benefit of these
|
||||||
|
macro's is. Unified big and little end register access macro's.
|
||||||
|
|
||||||
|
Reported-by: Dan Carpenter <error27@gmail.com>
|
||||||
|
Reported-by: Julian Calaby <julian.calaby@gmail.com>
|
||||||
|
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
---
|
||||||
|
drivers/staging/brcm80211/brcmsmac/types.h | 81 ++++++++++------------------
|
||||||
|
1 files changed, 29 insertions(+), 52 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/types.h b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
index 360795f..16a1c6a 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
@@ -320,60 +320,38 @@ do { \
|
||||||
|
|
||||||
|
#define WL_ERROR_ON() (brcm_msg_level & LOG_ERROR_VAL)
|
||||||
|
|
||||||
|
-/* register access macros */
|
||||||
|
+/*
|
||||||
|
+ * Register access macros.
|
||||||
|
+ *
|
||||||
|
+ * These macro's take a pointer to the address to read as one of their
|
||||||
|
+ * arguments. The macro itself deduces the size of the IO transaction (u8, u16
|
||||||
|
+ * or u32). Advantage of this approach in combination with using a struct to
|
||||||
|
+ * define the registers in a register block, is that access size and access
|
||||||
|
+ * location are defined in only one spot. This reduces the risk of the
|
||||||
|
+ * programmer trying to use an unsupported transaction size on a register.
|
||||||
|
+ *
|
||||||
|
+ * For big endian operation, a byte swap has to be done. Eg, when attempting
|
||||||
|
+ * to read byte address 0, byte 3 should be read. This is accomplished
|
||||||
|
+ * using an xor ('^') operator.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
#ifndef __BIG_ENDIAN
|
||||||
|
-#ifndef __mips__
|
||||||
|
-#define R_REG(r) \
|
||||||
|
- ({\
|
||||||
|
- sizeof(*(r)) == sizeof(u8) ? \
|
||||||
|
- readb((u8 *)(r)) : \
|
||||||
|
- sizeof(*(r)) == sizeof(u16) ? readw((u16 *)(r)) : \
|
||||||
|
- readl((u32 *)(r)); \
|
||||||
|
- })
|
||||||
|
-#else /* __mips__ */
|
||||||
|
-#define R_REG(r) \
|
||||||
|
- ({ \
|
||||||
|
- __typeof(*(r)) __osl_v; \
|
||||||
|
- __asm__ __volatile__("sync"); \
|
||||||
|
- switch (sizeof(*(r))) { \
|
||||||
|
- case sizeof(u8): \
|
||||||
|
- __osl_v = readb((u8 *)(r)); \
|
||||||
|
- break; \
|
||||||
|
- case sizeof(u16): \
|
||||||
|
- __osl_v = readw((u16 *)(r)); \
|
||||||
|
- break; \
|
||||||
|
- case sizeof(u32): \
|
||||||
|
- __osl_v = \
|
||||||
|
- readl((u32 *)(r)); \
|
||||||
|
- break; \
|
||||||
|
- } \
|
||||||
|
- __asm__ __volatile__("sync"); \
|
||||||
|
- __osl_v; \
|
||||||
|
- })
|
||||||
|
-#endif /* __mips__ */
|
||||||
|
+#define SWP2(r) (r)
|
||||||
|
+#define SWP3(r) (r)
|
||||||
|
+#else
|
||||||
|
+#define SWP2(r) ((unsigned long)(r)^2)
|
||||||
|
+#define SWP3(r) ((unsigned long)(r)^3)
|
||||||
|
+#endif /* __BIG_ENDIAN */
|
||||||
|
|
||||||
|
-#define W_REG(r, v) do { \
|
||||||
|
- switch (sizeof(*(r))) { \
|
||||||
|
- case sizeof(u8): \
|
||||||
|
- writeb((u8)(v), (u8 *)(r)); break; \
|
||||||
|
- case sizeof(u16): \
|
||||||
|
- writew((u16)(v), (u16 *)(r)); break; \
|
||||||
|
- case sizeof(u32): \
|
||||||
|
- writel((u32)(v), (u32 *)(r)); break; \
|
||||||
|
- }; \
|
||||||
|
- } while (0)
|
||||||
|
-#else /* __BIG_ENDIAN */
|
||||||
|
#define R_REG(r) \
|
||||||
|
({ \
|
||||||
|
__typeof(*(r)) __osl_v; \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
- __osl_v = \
|
||||||
|
- readb((u8 *)((unsigned long)(r)^3)); \
|
||||||
|
+ __osl_v = readb((u8 *)(SWP3(r))); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
- __osl_v = \
|
||||||
|
- readw((u16 *)((unsigned long)(r)^2)); \
|
||||||
|
+ __osl_v = readw((u16 *)(SWP2(r))); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
__osl_v = readl((u32 *)(r)); \
|
||||||
|
@@ -385,17 +363,16 @@ do { \
|
||||||
|
#define W_REG(r, v) do { \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
- writeb((u8)(v), \
|
||||||
|
- (u8 *)((unsigned long)(r)^3)); break; \
|
||||||
|
+ writeb((u8)(v), (u8 *)(SWP3(r))); \
|
||||||
|
+ break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
- writew((u16)(v), \
|
||||||
|
- (u16 *)((unsigned long)(r)^2)); break; \
|
||||||
|
+ writew((u16)(v), (u16 *)(SWP2(r))); \
|
||||||
|
+ break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
- writel((u32)(v), \
|
||||||
|
- (u32 *)(r)); break; \
|
||||||
|
+ writel((u32)(v), (u32 *)(r)); \
|
||||||
|
+ break; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
-#endif /* __BIG_ENDIAN */
|
||||||
|
|
||||||
|
#ifdef __mips__
|
||||||
|
/*
|
||||||
|
--
|
||||||
|
1.7.7.3
|
||||||
|
|
71
debian/patches/bugfix/all/0003-staging-brcm80211-Remove-swaps-in-R_REG-and-W_REG-ma.patch
vendored
Normal file
71
debian/patches/bugfix/all/0003-staging-brcm80211-Remove-swaps-in-R_REG-and-W_REG-ma.patch
vendored
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
From: Henry Ptasinski <henryp@broadcom.com>
|
||||||
|
Date: Mon, 15 Aug 2011 15:34:22 +0200
|
||||||
|
Subject: [PATCH 3/5] staging: brcm80211: Remove swaps in R_REG and W_REG macros
|
||||||
|
|
||||||
|
commit ba1fff7f705ed15e9d5a5922614aa4a259e9f8bc upstream.
|
||||||
|
|
||||||
|
Swapping the addresses is unnecessary, since the swaps are handled by the
|
||||||
|
underlying platform code (i.e. readb() etc. handle any necessary swapping).
|
||||||
|
|
||||||
|
Tested on Mac G5 PPC and BCM63281.
|
||||||
|
|
||||||
|
Signed-off-by: Henry Ptasinski <henryp@broadcom.com>
|
||||||
|
Reviewed-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Tested-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
---
|
||||||
|
drivers/staging/brcm80211/brcmsmac/types.h | 19 ++++---------------
|
||||||
|
1 files changed, 4 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/types.h b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
index c0d41cc..ad874a7 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
@@ -329,28 +329,17 @@ do { \
|
||||||
|
* location are defined in only one spot. This reduces the risk of the
|
||||||
|
* programmer trying to use an unsupported transaction size on a register.
|
||||||
|
*
|
||||||
|
- * For big endian operation, a byte swap has to be done. Eg, when attempting
|
||||||
|
- * to read byte address 0, byte 3 should be read. This is accomplished
|
||||||
|
- * using an xor ('^') operator.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#ifndef __BIG_ENDIAN
|
||||||
|
-#define SWP2(r) (r)
|
||||||
|
-#define SWP3(r) (r)
|
||||||
|
-#else
|
||||||
|
-#define SWP2(r) ((unsigned long)(r)^2)
|
||||||
|
-#define SWP3(r) ((unsigned long)(r)^3)
|
||||||
|
-#endif /* __BIG_ENDIAN */
|
||||||
|
-
|
||||||
|
#define R_REG(r) \
|
||||||
|
({ \
|
||||||
|
__typeof(*(r)) __osl_v; \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
- __osl_v = readb((u8 *)(SWP3(r))); \
|
||||||
|
+ __osl_v = readb((u8 *)(r)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
- __osl_v = readw((u16 *)(SWP2(r))); \
|
||||||
|
+ __osl_v = readw((u16 *)(r)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
__osl_v = readl((u32 *)(r)); \
|
||||||
|
@@ -362,10 +351,10 @@ do { \
|
||||||
|
#define W_REG(r, v) do { \
|
||||||
|
switch (sizeof(*(r))) { \
|
||||||
|
case sizeof(u8): \
|
||||||
|
- writeb((u8)(v), (u8 *)(SWP3(r))); \
|
||||||
|
+ writeb((u8)(v), (u8 *)(r)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u16): \
|
||||||
|
- writew((u16)(v), (u16 *)(SWP2(r))); \
|
||||||
|
+ writew((u16)(v), (u16 *)(r)); \
|
||||||
|
break; \
|
||||||
|
case sizeof(u32): \
|
||||||
|
writel((u32)(v), (u32 *)(r)); \
|
||||||
|
--
|
||||||
|
1.7.7.3
|
||||||
|
|
62
debian/patches/bugfix/all/0004-staging-brcm80211-restrict-register-access-method-fo.patch
vendored
Normal file
62
debian/patches/bugfix/all/0004-staging-brcm80211-restrict-register-access-method-fo.patch
vendored
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
From: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Date: Mon, 15 Aug 2011 15:34:25 +0200
|
||||||
|
Subject: [PATCH 4/5] staging: brcm80211: restrict register access method for
|
||||||
|
bcm47xx
|
||||||
|
|
||||||
|
commit 3bd8ef6799524fd48044a83aab38da57d9a98dbc upstream.
|
||||||
|
|
||||||
|
The driver contained conditional code for resolving issue with
|
||||||
|
dma transaction reordering. This code was conditionalized using
|
||||||
|
__mips__ macro, but it actually is specific to bcm47xx chips.
|
||||||
|
This patch replaces it for the more speficic CONFIG_BCM47XX macro.
|
||||||
|
|
||||||
|
Tested on BCM63281.
|
||||||
|
|
||||||
|
Reviewed-by: Henry Ptasinski <henryp@broadcom.com>
|
||||||
|
Reviewed-by: Roland Vossen <rvossen@broadcom.com>
|
||||||
|
Tested-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
---
|
||||||
|
drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c | 2 +-
|
||||||
|
drivers/staging/brcm80211/brcmsmac/types.h | 4 ++--
|
||||||
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
|
||||||
|
index c00178d..448afae 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
|
||||||
|
@@ -380,7 +380,7 @@ void write_phy_reg(struct brcms_phy *pi, u16 addr, u16 val)
|
||||||
|
|
||||||
|
regs = pi->regs;
|
||||||
|
|
||||||
|
-#ifdef __mips__
|
||||||
|
+#ifdef CONFIG_BCM47XX
|
||||||
|
W_REG_FLUSH(®s->phyregaddr, addr);
|
||||||
|
W_REG(®s->phyregdata, val);
|
||||||
|
if (addr == 0x72)
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/types.h b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
index ad874a7..d44db56 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/types.h
|
||||||
|
@@ -362,7 +362,7 @@ do { \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
-#ifdef __mips__
|
||||||
|
+#ifdef CONFIG_BCM47XX
|
||||||
|
/*
|
||||||
|
* bcm4716 (which includes 4717 & 4718), plus 4706 on PCIe can reorder
|
||||||
|
* transactions. As a fix, a read after write is performed on certain places
|
||||||
|
@@ -371,7 +371,7 @@ do { \
|
||||||
|
#define W_REG_FLUSH(r, v) ({ W_REG((r), (v)); (void)R_REG(r); })
|
||||||
|
#else
|
||||||
|
#define W_REG_FLUSH(r, v) W_REG((r), (v))
|
||||||
|
-#endif /* __mips__ */
|
||||||
|
+#endif /* CONFIG_BCM47XX */
|
||||||
|
|
||||||
|
#define AND_REG(r, v) W_REG((r), R_REG(r) & (v))
|
||||||
|
#define OR_REG(r, v) W_REG((r), R_REG(r) | (v))
|
||||||
|
--
|
||||||
|
1.7.7.3
|
||||||
|
|
56
debian/patches/bugfix/all/0005-staging-brcm80211-restrict-MIPS-dma-bug-workaround-t.patch
vendored
Normal file
56
debian/patches/bugfix/all/0005-staging-brcm80211-restrict-MIPS-dma-bug-workaround-t.patch
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
From: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Date: Mon, 15 Aug 2011 15:34:26 +0200
|
||||||
|
Subject: [PATCH 5/5] staging: brcm80211: restrict MIPS dma bug workaround to
|
||||||
|
BCM47XX
|
||||||
|
|
||||||
|
commit adf27befdc79a9403bfba82ee84f02a47bcd546c upstream.
|
||||||
|
|
||||||
|
The inline function dma_spin_for_len() was defined for MIPS platforms
|
||||||
|
but the problem only occurs with dma of the PCI core in bcm47xx chips.
|
||||||
|
This patch restricts the function further to BCM47XX platforms only.
|
||||||
|
|
||||||
|
Tested on BCM63281.
|
||||||
|
|
||||||
|
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
||||||
|
Reviewed-by: Henry Ptasinski <henryp@broadcom.com>
|
||||||
|
Reviewed-by: Roland Vossen <rvossen@broadcom.com>
|
||||||
|
Tested-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
||||||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
---
|
||||||
|
drivers/staging/brcm80211/brcmsmac/dma.h | 8 ++++----
|
||||||
|
1 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/brcm80211/brcmsmac/dma.h b/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
index 134402c..2ce59638 100644
|
||||||
|
--- a/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
+++ b/drivers/staging/brcm80211/brcmsmac/dma.h
|
||||||
|
@@ -100,21 +100,21 @@ void dma_walk_packets(struct dma_pub *dmah, void (*callback_fnc)
|
||||||
|
(void *pkt, void *arg_a), void *arg_a);
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * DMA(Bug) on some chips seems to declare that the packet is ready, but the
|
||||||
|
- * packet length is not updated yet (by DMA) on the expected time.
|
||||||
|
+ * DMA(Bug) on bcm47xx chips seems to declare that the packet is ready, but
|
||||||
|
+ * the packet length is not updated yet (by DMA) on the expected time.
|
||||||
|
* Workaround is to hold processor till DMA updates the length, and stay off
|
||||||
|
* the bus to allow DMA update the length in buffer
|
||||||
|
*/
|
||||||
|
static inline void dma_spin_for_len(uint len, struct sk_buff *head)
|
||||||
|
{
|
||||||
|
-#if defined(__mips__)
|
||||||
|
+#if defined(CONFIG_BCM47XX)
|
||||||
|
if (!len) {
|
||||||
|
while (!(len = *(u16 *) KSEG1ADDR(head->data)))
|
||||||
|
udelay(1);
|
||||||
|
|
||||||
|
*(u16 *) (head->data) = cpu_to_le16((u16) len);
|
||||||
|
}
|
||||||
|
-#endif /* defined(__mips__) */
|
||||||
|
+#endif /* defined(CONFIG_BCM47XX) */
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _BRCM_DMA_H_ */
|
||||||
|
--
|
||||||
|
1.7.7.3
|
||||||
|
|
|
@ -83,3 +83,9 @@
|
||||||
+ bugfix/all/USB-EHCI-fix-HUB-TT-scheduling-issue-with-iso-transf.patch
|
+ bugfix/all/USB-EHCI-fix-HUB-TT-scheduling-issue-with-iso-transf.patch
|
||||||
+ bugfix/all/EHCI-Fix-a-regression-in-the-ISO-scheduler.patch
|
+ bugfix/all/EHCI-Fix-a-regression-in-the-ISO-scheduler.patch
|
||||||
+ debian/x86-memtest-WARN-if-bad-RAM-found.patch
|
+ debian/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||||
|
|
||||||
|
+ bugfix/all/0001-staging-brcm80211-fixed-build-issue-for-big-endian-p.patch
|
||||||
|
+ bugfix/all/0002-staging-brcm80211-simplified-register-access-macro-s.patch
|
||||||
|
+ bugfix/all/0003-staging-brcm80211-Remove-swaps-in-R_REG-and-W_REG-ma.patch
|
||||||
|
+ bugfix/all/0004-staging-brcm80211-restrict-register-access-method-fo.patch
|
||||||
|
+ bugfix/all/0005-staging-brcm80211-restrict-MIPS-dma-bug-workaround-t.patch
|
||||||
|
|
Loading…
Reference in New Issue