linux/drivers/net/wireless
Zhu Yi 5a66926aa9 iwlwifi: delay firmware loading from pci_probe to network interface open
This patch moves the firmware loading (read firmware from disk and load
it into the device SRAM) from pci_probe time to the first network
interface open time. There are two reasons for doing this:

1. To support kernel buildin iwlwifi drivers. Because kernel initializes
   network devices subsystem before hard disk and SATA subsystem, it is
   impossible to get the firmware image from hard disk in the PCI probe
   handler. Thus delaying the firmware loading into the network
   interface open time is the way to go. Note, we only read the firmware
   image from hard disk the first time the interface is open. After this
   is succeeded, we cache the firmware image into the host memory. This
   is a performance gain when user open and close the interface multiple
   times and is necessary for device suspend and resume.

2. For better power saving. When the iwlwifi modules are loaded (or
   buildin the kernel) but the wireless network interface is not being
   used, it is a good practice the wireless device consumes as less
   power as possible. Unloading the firmware from the wireless device
   and unregister the driver's interrupt handler in the network
   interface close handler provides users a way to achieve this. User
   space network configuration tools (i.e NetworkManager) can also
   contribute here when it detects a wired cable is connected and
   close the wireless interface automatically.

This patch also includes the pci_save/restore_state() fixed by Ian Schram
upon the first version.

Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: Ian Schram <ischram@telenet.be>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2008-01-28 15:09:57 -08:00
..
ath5k ath5k: Fix frame duration oops 2008-01-28 15:09:40 -08:00
b43 b43: Add NPHY channel switch code 2008-01-28 15:09:53 -08:00
b43legacy mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
bcm43xx bcm43xx annotations 2008-01-28 15:09:08 -08:00
hostap hostap_cs: don't match revisions in presense of the MAC chip name 2008-01-28 15:09:33 -08:00
iwlwifi iwlwifi: delay firmware loading from pci_probe to network interface open 2008-01-28 15:09:57 -08:00
libertas libertas: remove check for driver_lock in lbs_interrupt() 2008-01-28 15:07:52 -08:00
prism54 prism54: remove questionable down_interruptible usage 2008-01-28 15:09:12 -08:00
rt2x00 rt2x00: Fix queue_idx initialization 2008-01-28 15:09:48 -08:00
zd1211rw mac80211: add unified BSS configuration 2008-01-28 15:09:43 -08:00
adm8211.c mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
adm8211.h
airo_cs.c
airo.c airo: last of endianness annotations 2008-01-28 15:09:05 -08:00
airo.h
airport.c
arlan-main.c
arlan-proc.c
arlan.h
atmel_cs.c
atmel_pci.c
atmel.c misc wireless annotations 2008-01-28 15:09:11 -08:00
atmel.h
hermes_rid.h
hermes.c
hermes.h
i82586.h
i82593.h
ipw2100.c ipw2100 annotations and fixes 2008-01-28 15:08:54 -08:00
ipw2100.h
ipw2200.c ipw2200: do not byteswap struct ipw_associate 2008-01-28 15:09:10 -08:00
ipw2200.h ipw2200: do not byteswap struct ipw_associate 2008-01-28 15:09:10 -08:00
Kconfig Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
Makefile Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
net2280.h
netwave_cs.c
orinoco_cs.c
orinoco_nortel.c
orinoco_pci.c
orinoco_pci.h
orinoco_plx.c
orinoco_tmd.c
orinoco.c orinoco: always use latest BSS info when caching scan results 2008-01-28 15:05:55 -08:00
orinoco.h orinoco: more reliable scan handling 2008-01-28 15:03:32 -08:00
p54.h
p54common.c mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
p54common.h
p54pci.c p54pci: endianness annotations and fixes 2008-01-28 15:09:07 -08:00
p54pci.h p54pci: endianness annotations and fixes 2008-01-28 15:09:07 -08:00
p54usb.c
p54usb.h
ray_cs.c misc wireless annotations 2008-01-28 15:09:11 -08:00
ray_cs.h
rayctl.h
rtl818x.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_dev.c mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
rtl8180_grf5101.c Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_grf5101.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_max2820.c Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_max2820.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_rtl8225.c Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_rtl8225.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_sa2400.c Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180_sa2400.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8180.h mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
rtl8187_dev.c mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
rtl8187_rtl8225.c Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8187_rtl8225.h Add rtl8180 wireless driver 2008-01-28 15:09:35 -08:00
rtl8187.h mac80211: dont use interface indices in drivers 2008-01-28 15:09:36 -08:00
spectrum_cs.c
strip.c
wavelan_cs.c WAVELAN - compile-time check for struct sizes 2008-01-28 15:09:50 -08:00
wavelan_cs.h
wavelan_cs.p.h WAVELAN - compile-time check for struct sizes 2008-01-28 15:09:50 -08:00
wavelan.c WAVELAN - compile-time check for struct sizes 2008-01-28 15:09:50 -08:00
wavelan.h
wavelan.p.h WAVELAN - compile-time check for struct sizes 2008-01-28 15:09:50 -08:00
wl3501_cs.c
wl3501.h
zd1201.c
zd1201.h