summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/b43legacy/b43legacy.h
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2012-12-07 07:55:16 +0400
committerJohn W. Linville <linville@tuxdriver.com>2012-12-11 00:47:29 +0400
commit576d28a7c73013717311cfcb514dbcae27c82eeb (patch)
tree9d74550687b6fa12bb92a005aee042ba71500f6c /drivers/net/wireless/b43legacy/b43legacy.h
parent6f80f01483d122174d9aa7864a8ac4050ba6daaa (diff)
downloadlinux-576d28a7c73013717311cfcb514dbcae27c82eeb.tar.xz
b43legacy: Fix firmware loading when driver is built into the kernel
Recent versions of udev cause synchronous firmware loading from the probe routine to fail because the request to user space times out. The original fix for b43legacy (commit a3ea2c7) moved the firmware load from the probe routine to a work queue, but it still used synchronous firmware loading. This method is OK when b43legacy is built as a module; however, it fails when the driver is compiled into the kernel. This version changes the code to load the initial firmware file using request_firmware_nowait(). A completion event is used to hold the work queue until that file is available. The remaining firmware files are read synchronously. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: Stable <stable@vger.kernel.org> (V3.4+) Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy/b43legacy.h')
-rw-r--r--drivers/net/wireless/b43legacy/b43legacy.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43legacy/b43legacy.h b/drivers/net/wireless/b43legacy/b43legacy.h
index a29da674e69d..482476fdb1f3 100644
--- a/drivers/net/wireless/b43legacy/b43legacy.h
+++ b/drivers/net/wireless/b43legacy/b43legacy.h
@@ -13,6 +13,7 @@
#include <linux/ssb/ssb.h>
#include <linux/ssb/ssb_driver_chipcommon.h>
+#include <linux/completion.h>
#include <net/mac80211.h>
@@ -733,6 +734,10 @@ struct b43legacy_wldev {
/* Firmware data */
struct b43legacy_firmware fw;
+ const struct firmware *fwp; /* needed to pass fw pointer */
+
+ /* completion struct for firmware loading */
+ struct completion fw_load_complete;
/* Devicelist in struct b43legacy_wl (all 802.11 cores) */
struct list_head list;