diff options
author | Daniel Drake <dsd@gentoo.org> | 2007-07-01 13:22:32 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2007-07-10 14:14:56 -0400 |
commit | 74553aedd46b3a2cae986f909cf2a3f99369decc (patch) | |
tree | 6904945b36c017c58249b1900fbbd531f3286e49 /drivers/net/wireless/zd1211rw/zd_usb.h | |
parent | 93f510bbac64f552ef6872a39ae12afa06c4e999 (diff) |
[PATCH] zd1211rw: Defer firmware load until first ifup
While playing with the firmware a while back, I discovered a way to
access the device's entire address space before the firmware has been
loaded.
Previously we were loading the firmware early on (during probe) so that
we could read the MAC address from the EEPROM and register a netdevice.
Now that we can read the EEPROM without having firmware, we can defer
firmware loading until later while still reading the MAC address early
on.
This has the advantage that zd1211rw can now be built into the kernel --
previously if this was the case, zd1211rw would be loaded before the
filesystem is available and firmware loading would fail.
Firmware load and other device initialization operations now happen the
first time the interface is brought up.
Some architectural changes were needed: handling of the is_zd1211b flag
was moved into the zd_usb structure, MAC address handling was obviously
changed, and a preinit_hw stage was added (the order is now: init,
preinit_hw, init_hw).
Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_usb.h')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.h b/drivers/net/wireless/zd1211rw/zd_usb.h index 506ea6a74393..961a7a12ad68 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.h +++ b/drivers/net/wireless/zd1211rw/zd_usb.h | |||
@@ -188,6 +188,7 @@ struct zd_usb { | |||
188 | struct zd_usb_rx rx; | 188 | struct zd_usb_rx rx; |
189 | struct zd_usb_tx tx; | 189 | struct zd_usb_tx tx; |
190 | struct usb_interface *intf; | 190 | struct usb_interface *intf; |
191 | u8 is_zd1211b:1, initialized:1; | ||
191 | }; | 192 | }; |
192 | 193 | ||
193 | #define zd_usb_dev(usb) (&usb->intf->dev) | 194 | #define zd_usb_dev(usb) (&usb->intf->dev) |
@@ -236,6 +237,8 @@ int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs, | |||
236 | 237 | ||
237 | int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits); | 238 | int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits); |
238 | 239 | ||
240 | int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len); | ||
241 | |||
239 | extern struct workqueue_struct *zd_workqueue; | 242 | extern struct workqueue_struct *zd_workqueue; |
240 | 243 | ||
241 | #endif /* _ZD_USB_H */ | 244 | #endif /* _ZD_USB_H */ |