* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-04 13:59 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-04 13:59 UTC (permalink / raw)
To: jeff; +Cc: davem, netdev, linux-wireless
Jeff,
Here are more than 5 score patches intended for 2.6.25. This request
replaces the request sent on 27 November. [1]
There are tons of updates here, especially iwlwifi and libertas. The
b43, b43legacy, rt2x00, rtl8187, and zd1211rw drivers are also updated.
This pull contains the port of zd1211rw to the mac80211 infrastructure.
There is also some SSB stuff in there. I've been sending that stuff
to Dave M., but since later b43 patches depend on it I thought it
would be better to send them your way. I'll CC Dave.
Also included is the iwl4965 work to use the .11n stuff that has been
added in the net-2.6.25 tree. For now I've added a "depends on n" to
the IWL4965_HT Kconfig to avoid build breakage in your tree.
The total diff is getting big -- the patch is nearing 2MB. Please let
me know if there are any problems so we can get (at least some of)
this merged!
Thanks,
John
[1] http://marc.info/?l=3Dlinux-netdev&m=3D119617493212177&w=3D2
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/up=
stream-jgarzik
---
The following changes since commit e86d91426d8b3d79010c9d5c617d7594e5c1=
65aa:
Jeff Garzik (1):
Merge branch 'r6040' of git://git.kernel.org/.../romieu/netdev-=
2.6 into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.g=
it upstream-jgarzik
Andrea Merello (1):
rtl8187: fix tx power reading
Andres Salomon (4):
libertas: drop useless default_fw_name variable
libertas: mark module_init/exit functions as __init/__exit
libertas: reset devices upon disconnect rather than module unload=
ing
libertas: nuke useless variable usbdriver_name and useless commen=
ts
Ben M Cahill (29):
iwl3945: re-align 3945 event log data
iwl4965: add comments to rate scaling code
iwlwifi: add comments to EEPROM stuff
iwl-4965-hw.h: clean up unused eeprom structures and definitions
iwlwifi: clean up and clarify some comments after 3945/4965 split
iwlwifi: Move is_legacy() macro family from iwl-4965-hw.h to iwl-=
4965-rs.h
iwlwifi: Add comments to some driver data structures
iwlwifi: Document 4965 rate_n_flags bits
iwlwifi: Document Rx calibration
iwlwifi: Partially clean-up, add comments to iwl-*-hw.h
iwlwifi: clean up some unused definitions in iwl-4965.h and iwl-3=
945.h
iwlwifi: add comments, mostly on Tx queues
iwlwifi: add comments to iwl*-base.c
iwlwifi: Clean up unused definitions in iwl-3945-hw.h
iwlwifi: clean up unused definitions in iwl-4965-hw.h
iwlwifi: move uCode API definitions to iwl-4965-commands.h
iwlwifi: move HT_IE_EXT_CHANNEL_* driver definitions to iwl-4965.=
h
iwlwifi: document temperature calculation
iwlwifi: document txpower calculations
iwlwifi: document keep-warm buffer
iwlwifi: document Rx registers
iwlwifi: document Tx registers
iwlwifi: document shared Tx structures
iwlwifi: document 4965 Tx scheduler
iwlwifi: document command header and "alive" responses
iwlwifi: add comments to RXON command and txpower formats
iwlwifi: add comments to QOS and ADD_STA commands
iwlwifi: add comments to Tx commands
iwlwifi: document 4965 rate scaling
Brajesh Dave (2):
libertas: separate mesh connectivity from that of the main interf=
ace
libertas: configurable beacon interval
Christoph Hellwig (1):
iwlwifi: cleanup namespace
Daniel Drake (3):
zd1211rw: port to mac80211
zd1211rw: Add ID for Trendnet TEW-429UB A
zd1211rw: add copyright notices
=46rank Lichtenheld (2):
b43: silence a bogus gcc warning
b43legacy: properly fix a bogus gcc warning
Holger Schurig (9):
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
libertas: remove arbitrary typedefs
libertas: rework event subscription
libertas: tweak association debug output
libertas: tweak tx path debugging
libertas: remove numprobes
libertas: remove user-specified channel list
libertas: less eventcause shifts
Ivo van Doorn (10):
rt2x00: Move duplicate code into rt2x00pci_txdone()
rt2x00: Replace DRV_NAME with KBUILD_MODNAME
rt2x00: Extend PLCP descriptor definition for rt2400pci
rt2x00: Move register value/offset files into new folder
rt2x00: Add chipset version to chipset debugfs entry
rt2x00: Add skb descriptor
rt2x00: Add TX/RX frame dumping facility
rt2x00: Use IEEE80211_IF_TYPE_INVALID directly
rt2x00: Cleanup rfkill
rt2x00: Release rt2x00 2.0.13
Johannes Berg (3):
b43: include full 64-bit timestamp in monitor mode
b43: include FCS in frames handed to mac80211
b43legacy: include full 64-bit timestamp in monitor mode
John W. Linville (1):
iwlwifi: remove redundant initialization of final_mode
Larry Finger (8):
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
b43: Changes to enable BCM4311 rev 02 with wireless core revision=
13
rt2x00: Remove redundant code in rfkill setup
Matthias Mueller (1):
rtl8187: Add USB ID for Sitecom WL-168 v1 001
Mattias Nissler (2):
rt2x00: Allow rt61 to catch up after a missing tx report
rt2x00: Only update rssi average approximation on receiving beaco=
n frames.
Miguel Bot=F3n (1):
iwlwifi: remove redundant declaration of 'iwl3945_priv' and 'iwl4=
965_priv' structs
Mohamed Abbas (4):
iwl4965: fix cannot find a suitable rate issue
iwlwifi: enhance WPA authenication stability
iwlwifi: fix ucode assertion for RX queue overrun
iwlwifi: avoid firmware command sending if rfkill is enabled
Reinette Chatre (2):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
iwlwifi: continue namespace changes - fix CONFIG variables
Ron Rindjunsky (8):
iwlwifi: 802.11n remove unnecessary config dependency
iwlwifi: 802.11n new framework structures preperation
iwlwifi: 802.11n configuring hw_mode parameters to support HT in =
A/G
iwlwifi: 802.11n handling probe request HT IE
iwlwifi: 802.11n comply HT self configuration flow with mac80211 =
framework
iwlwifi: 802.11n comply HT add station flow with mac80211 framewo=
rk
iwlwifi: 802.11n comply HT rate scaling flows with mac80211 frame=
work
iwlwifi: 802.11n add support to 8K A-MSDU Rx frames
Stefano Brivio (8):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
b43: reinit on too many PHY TX errors
b43legacy: reinit on too many PHY TX errors
Tomas Winkler (1):
iwlwifi: Support for uCode without init and bsm section
Ulrich Kunitz (1):
zd1211rw: Fix alignment problems
Zhu Yi (5):
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_=
changed
iwlwifi: update version number to 1.2.22
iwlwifi: cache mac80211 conf setting during a hardware scan
MAINTAINERS | 10 +-
drivers/net/b44.c | 8 +-
drivers/net/wireless/b43/Makefile | 1 +
drivers/net/wireless/b43/b43.h | 11 +
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/dma.c | 32 +-
drivers/net/wireless/b43/leds.c | 10 +-
drivers/net/wireless/b43/lo.c | 8 +-
drivers/net/wireless/b43/main.c | 62 +-
drivers/net/wireless/b43/main.h | 2 +-
drivers/net/wireless/b43/phy.c | 672 +----
drivers/net/wireless/b43/phy.h | 18 +-
drivers/net/wireless/b43/tables.c | 103 +-
drivers/net/wireless/b43/tables.h | 12 +-
drivers/net/wireless/b43/wa.c | 666 +++++
drivers/net/wireless/b43/wa.h | 7 +
drivers/net/wireless/b43/xmit.c | 23 +-
drivers/net/wireless/b43legacy/Kconfig | 8 +-
drivers/net/wireless/b43legacy/b43legacy.h | 7 +
drivers/net/wireless/b43legacy/debugfs.c | 2 +-
drivers/net/wireless/b43legacy/ilt.c | 2 +-
drivers/net/wireless/b43legacy/leds.c | 10 +-
drivers/net/wireless/b43legacy/main.c | 172 +-
drivers/net/wireless/b43legacy/main.h | 2 +-
drivers/net/wireless/b43legacy/phy.c | 40 +-
drivers/net/wireless/b43legacy/phy.h | 2 +-
drivers/net/wireless/b43legacy/radio.c | 14 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 16 +-
drivers/net/wireless/b43legacy/rfkill.h | 8 +-
drivers/net/wireless/b43legacy/xmit.c | 25 +-
drivers/net/wireless/iwlwifi/Kconfig | 31 +-
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 586 +++--
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 353 ++--
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 37 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 553 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 445 ++--
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 1394 ++++++++--
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 2139 ++++++++++----=
-
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 869 +++++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 87 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 1136 +++++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 641 +++---
drivers/net/wireless/iwlwifi/iwl-prph.h | 14 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2776 ++++++++++----=
-----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 3241 +++++++++++---=
--------
drivers/net/wireless/libertas/11d.c | 72 +-
drivers/net/wireless/libertas/11d.h | 26 +-
drivers/net/wireless/libertas/README | 40 +-
drivers/net/wireless/libertas/assoc.c | 265 +-
drivers/net/wireless/libertas/assoc.h | 14 +-
drivers/net/wireless/libertas/cmd.c | 354 ++-
drivers/net/wireless/libertas/cmdresp.c | 238 +-
drivers/net/wireless/libertas/debugfs.c | 1375 ++-------
drivers/net/wireless/libertas/debugfs.h | 12 +-
drivers/net/wireless/libertas/decl.h | 116 +-
drivers/net/wireless/libertas/defs.h | 52 +-
drivers/net/wireless/libertas/dev.h | 45 +-
drivers/net/wireless/libertas/ethtool.c | 52 +-
drivers/net/wireless/libertas/host.h | 70 +-
drivers/net/wireless/libertas/hostcmd.h | 26 +-
drivers/net/wireless/libertas/if_cs.c | 45 +-
drivers/net/wireless/libertas/if_sdio.c | 51 +-
drivers/net/wireless/libertas/if_sdio.h | 4 +-
drivers/net/wireless/libertas/if_usb.c | 132 +-
drivers/net/wireless/libertas/if_usb.h | 7 +-
drivers/net/wireless/libertas/join.c | 202 +-
drivers/net/wireless/libertas/join.h | 38 +-
drivers/net/wireless/libertas/main.c | 563 ++--
drivers/net/wireless/libertas/rx.c | 68 +-
drivers/net/wireless/libertas/scan.c | 274 +--
drivers/net/wireless/libertas/scan.h | 96 +-
drivers/net/wireless/libertas/tx.c | 45 +-
drivers/net/wireless/libertas/types.h | 25 +-
drivers/net/wireless/libertas/wext.c | 487 ++--
drivers/net/wireless/libertas/wext.h | 14 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.h | 20 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 29 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 39 +-
drivers/net/wireless/rt2x00/rt2x00.h | 26 +-
drivers/net/wireless/rt2x00/rt2x00config.c | 5 -
drivers/net/wireless/rt2x00/rt2x00debug.c | 240 ++-
drivers/net/wireless/rt2x00/rt2x00dev.c | 93 +-
drivers/net/wireless/rt2x00/rt2x00dump.h | 121 +
drivers/net/wireless/rt2x00/rt2x00firmware.c | 5 -
drivers/net/wireless/rt2x00/rt2x00lib.h | 6 +
drivers/net/wireless/rt2x00/rt2x00mac.c | 7 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 92 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 15 -
drivers/net/wireless/rt2x00/rt2x00ring.h | 22 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 41 +-
drivers/net/wireless/rt2x00/rt61pci.c | 68 +-
drivers/net/wireless/rt2x00/rt73usb.c | 36 +-
drivers/net/wireless/rtl8187_dev.c | 2 +
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/zd1211rw/Kconfig | 7 +-
drivers/net/wireless/zd1211rw/Makefile | 3 +-
drivers/net/wireless/zd1211rw/zd_chip.c | 126 +-
drivers/net/wireless/zd1211rw/zd_chip.h | 60 +-
drivers/net/wireless/zd1211rw/zd_def.h | 5 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.c | 196 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 49 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 1535 ++++-------
drivers/net/wireless/zd1211rw/zd_mac.h | 117 +-
drivers/net/wireless/zd1211rw/zd_netdev.c | 264 --
drivers/net/wireless/zd1211rw/zd_netdev.h | 45 -
drivers/net/wireless/zd1211rw/zd_rf.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf.h | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 5 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 289 ++-
drivers/net/wireless/zd1211rw/zd_usb.h | 36 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/main.c | 10 +-
drivers/ssb/pci.c | 221 +-
include/linux/ssb/ssb.h | 71 +-
include/linux/ssb/ssb_regs.h | 59 +-
126 files changed, 14163 insertions(+), 11658 deletions(-)
create mode 100644 drivers/net/wireless/b43/wa.c
create mode 100644 drivers/net/wireless/b43/wa.h
create mode 100644 drivers/net/wireless/rt2x00/rt2x00dump.h
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.c
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzi=
k.patch.bz2
--=20
John W. Linville
linville@tuxdriver.com
-
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-04 13:59 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-04 13:59 UTC (permalink / raw)
To: jeff; +Cc: davem, netdev, linux-wireless
Jeff,
Here are more than 5 score patches intended for 2.6.25. This request
replaces the request sent on 27 November. [1]
There are tons of updates here, especially iwlwifi and libertas. The
b43, b43legacy, rt2x00, rtl8187, and zd1211rw drivers are also updated.
This pull contains the port of zd1211rw to the mac80211 infrastructure.
There is also some SSB stuff in there. I've been sending that stuff
to Dave M., but since later b43 patches depend on it I thought it
would be better to send them your way. I'll CC Dave.
Also included is the iwl4965 work to use the .11n stuff that has been
added in the net-2.6.25 tree. For now I've added a "depends on n" to
the IWL4965_HT Kconfig to avoid build breakage in your tree.
The total diff is getting big -- the patch is nearing 2MB. Please let
me know if there are any problems so we can get (at least some of)
this merged!
Thanks,
John
[1] http://marc.info/?l=linux-netdev&m=119617493212177&w=2
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit e86d91426d8b3d79010c9d5c617d7594e5c165aa:
Jeff Garzik (1):
Merge branch 'r6040' of git://git.kernel.org/.../romieu/netdev-2.6 into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Andrea Merello (1):
rtl8187: fix tx power reading
Andres Salomon (4):
libertas: drop useless default_fw_name variable
libertas: mark module_init/exit functions as __init/__exit
libertas: reset devices upon disconnect rather than module unloading
libertas: nuke useless variable usbdriver_name and useless comments
Ben M Cahill (29):
iwl3945: re-align 3945 event log data
iwl4965: add comments to rate scaling code
iwlwifi: add comments to EEPROM stuff
iwl-4965-hw.h: clean up unused eeprom structures and definitions
iwlwifi: clean up and clarify some comments after 3945/4965 split
iwlwifi: Move is_legacy() macro family from iwl-4965-hw.h to iwl-4965-rs.h
iwlwifi: Add comments to some driver data structures
iwlwifi: Document 4965 rate_n_flags bits
iwlwifi: Document Rx calibration
iwlwifi: Partially clean-up, add comments to iwl-*-hw.h
iwlwifi: clean up some unused definitions in iwl-4965.h and iwl-3945.h
iwlwifi: add comments, mostly on Tx queues
iwlwifi: add comments to iwl*-base.c
iwlwifi: Clean up unused definitions in iwl-3945-hw.h
iwlwifi: clean up unused definitions in iwl-4965-hw.h
iwlwifi: move uCode API definitions to iwl-4965-commands.h
iwlwifi: move HT_IE_EXT_CHANNEL_* driver definitions to iwl-4965.h
iwlwifi: document temperature calculation
iwlwifi: document txpower calculations
iwlwifi: document keep-warm buffer
iwlwifi: document Rx registers
iwlwifi: document Tx registers
iwlwifi: document shared Tx structures
iwlwifi: document 4965 Tx scheduler
iwlwifi: document command header and "alive" responses
iwlwifi: add comments to RXON command and txpower formats
iwlwifi: add comments to QOS and ADD_STA commands
iwlwifi: add comments to Tx commands
iwlwifi: document 4965 rate scaling
Brajesh Dave (2):
libertas: separate mesh connectivity from that of the main interface
libertas: configurable beacon interval
Christoph Hellwig (1):
iwlwifi: cleanup namespace
Daniel Drake (3):
zd1211rw: port to mac80211
zd1211rw: Add ID for Trendnet TEW-429UB A
zd1211rw: add copyright notices
Frank Lichtenheld (2):
b43: silence a bogus gcc warning
b43legacy: properly fix a bogus gcc warning
Holger Schurig (9):
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
libertas: remove arbitrary typedefs
libertas: rework event subscription
libertas: tweak association debug output
libertas: tweak tx path debugging
libertas: remove numprobes
libertas: remove user-specified channel list
libertas: less eventcause shifts
Ivo van Doorn (10):
rt2x00: Move duplicate code into rt2x00pci_txdone()
rt2x00: Replace DRV_NAME with KBUILD_MODNAME
rt2x00: Extend PLCP descriptor definition for rt2400pci
rt2x00: Move register value/offset files into new folder
rt2x00: Add chipset version to chipset debugfs entry
rt2x00: Add skb descriptor
rt2x00: Add TX/RX frame dumping facility
rt2x00: Use IEEE80211_IF_TYPE_INVALID directly
rt2x00: Cleanup rfkill
rt2x00: Release rt2x00 2.0.13
Johannes Berg (3):
b43: include full 64-bit timestamp in monitor mode
b43: include FCS in frames handed to mac80211
b43legacy: include full 64-bit timestamp in monitor mode
John W. Linville (1):
iwlwifi: remove redundant initialization of final_mode
Larry Finger (8):
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
b43: Changes to enable BCM4311 rev 02 with wireless core revision 13
rt2x00: Remove redundant code in rfkill setup
Matthias Mueller (1):
rtl8187: Add USB ID for Sitecom WL-168 v1 001
Mattias Nissler (2):
rt2x00: Allow rt61 to catch up after a missing tx report
rt2x00: Only update rssi average approximation on receiving beacon frames.
Miguel Botón (1):
iwlwifi: remove redundant declaration of 'iwl3945_priv' and 'iwl4965_priv' structs
Mohamed Abbas (4):
iwl4965: fix cannot find a suitable rate issue
iwlwifi: enhance WPA authenication stability
iwlwifi: fix ucode assertion for RX queue overrun
iwlwifi: avoid firmware command sending if rfkill is enabled
Reinette Chatre (2):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
iwlwifi: continue namespace changes - fix CONFIG variables
Ron Rindjunsky (8):
iwlwifi: 802.11n remove unnecessary config dependency
iwlwifi: 802.11n new framework structures preperation
iwlwifi: 802.11n configuring hw_mode parameters to support HT in A/G
iwlwifi: 802.11n handling probe request HT IE
iwlwifi: 802.11n comply HT self configuration flow with mac80211 framework
iwlwifi: 802.11n comply HT add station flow with mac80211 framework
iwlwifi: 802.11n comply HT rate scaling flows with mac80211 framework
iwlwifi: 802.11n add support to 8K A-MSDU Rx frames
Stefano Brivio (8):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
b43: reinit on too many PHY TX errors
b43legacy: reinit on too many PHY TX errors
Tomas Winkler (1):
iwlwifi: Support for uCode without init and bsm section
Ulrich Kunitz (1):
zd1211rw: Fix alignment problems
Zhu Yi (5):
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_changed
iwlwifi: update version number to 1.2.22
iwlwifi: cache mac80211 conf setting during a hardware scan
MAINTAINERS | 10 +-
drivers/net/b44.c | 8 +-
drivers/net/wireless/b43/Makefile | 1 +
drivers/net/wireless/b43/b43.h | 11 +
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/dma.c | 32 +-
drivers/net/wireless/b43/leds.c | 10 +-
drivers/net/wireless/b43/lo.c | 8 +-
drivers/net/wireless/b43/main.c | 62 +-
drivers/net/wireless/b43/main.h | 2 +-
drivers/net/wireless/b43/phy.c | 672 +----
drivers/net/wireless/b43/phy.h | 18 +-
drivers/net/wireless/b43/tables.c | 103 +-
drivers/net/wireless/b43/tables.h | 12 +-
drivers/net/wireless/b43/wa.c | 666 +++++
drivers/net/wireless/b43/wa.h | 7 +
drivers/net/wireless/b43/xmit.c | 23 +-
drivers/net/wireless/b43legacy/Kconfig | 8 +-
drivers/net/wireless/b43legacy/b43legacy.h | 7 +
drivers/net/wireless/b43legacy/debugfs.c | 2 +-
drivers/net/wireless/b43legacy/ilt.c | 2 +-
drivers/net/wireless/b43legacy/leds.c | 10 +-
drivers/net/wireless/b43legacy/main.c | 172 +-
drivers/net/wireless/b43legacy/main.h | 2 +-
drivers/net/wireless/b43legacy/phy.c | 40 +-
drivers/net/wireless/b43legacy/phy.h | 2 +-
drivers/net/wireless/b43legacy/radio.c | 14 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 16 +-
drivers/net/wireless/b43legacy/rfkill.h | 8 +-
drivers/net/wireless/b43legacy/xmit.c | 25 +-
drivers/net/wireless/iwlwifi/Kconfig | 31 +-
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 586 +++--
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 353 ++--
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 37 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 553 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 445 ++--
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 1394 ++++++++--
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 2139 ++++++++++-----
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 869 +++++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 87 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 1136 +++++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 641 +++---
drivers/net/wireless/iwlwifi/iwl-prph.h | 14 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2776 ++++++++++---------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 3241 +++++++++++-----------
drivers/net/wireless/libertas/11d.c | 72 +-
drivers/net/wireless/libertas/11d.h | 26 +-
drivers/net/wireless/libertas/README | 40 +-
drivers/net/wireless/libertas/assoc.c | 265 +-
drivers/net/wireless/libertas/assoc.h | 14 +-
drivers/net/wireless/libertas/cmd.c | 354 ++-
drivers/net/wireless/libertas/cmdresp.c | 238 +-
drivers/net/wireless/libertas/debugfs.c | 1375 ++-------
drivers/net/wireless/libertas/debugfs.h | 12 +-
drivers/net/wireless/libertas/decl.h | 116 +-
drivers/net/wireless/libertas/defs.h | 52 +-
drivers/net/wireless/libertas/dev.h | 45 +-
drivers/net/wireless/libertas/ethtool.c | 52 +-
drivers/net/wireless/libertas/host.h | 70 +-
drivers/net/wireless/libertas/hostcmd.h | 26 +-
drivers/net/wireless/libertas/if_cs.c | 45 +-
drivers/net/wireless/libertas/if_sdio.c | 51 +-
drivers/net/wireless/libertas/if_sdio.h | 4 +-
drivers/net/wireless/libertas/if_usb.c | 132 +-
drivers/net/wireless/libertas/if_usb.h | 7 +-
drivers/net/wireless/libertas/join.c | 202 +-
drivers/net/wireless/libertas/join.h | 38 +-
drivers/net/wireless/libertas/main.c | 563 ++--
drivers/net/wireless/libertas/rx.c | 68 +-
drivers/net/wireless/libertas/scan.c | 274 +--
drivers/net/wireless/libertas/scan.h | 96 +-
drivers/net/wireless/libertas/tx.c | 45 +-
drivers/net/wireless/libertas/types.h | 25 +-
drivers/net/wireless/libertas/wext.c | 487 ++--
drivers/net/wireless/libertas/wext.h | 14 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.h | 20 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 29 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 39 +-
drivers/net/wireless/rt2x00/rt2x00.h | 26 +-
drivers/net/wireless/rt2x00/rt2x00config.c | 5 -
drivers/net/wireless/rt2x00/rt2x00debug.c | 240 ++-
drivers/net/wireless/rt2x00/rt2x00dev.c | 93 +-
drivers/net/wireless/rt2x00/rt2x00dump.h | 121 +
drivers/net/wireless/rt2x00/rt2x00firmware.c | 5 -
drivers/net/wireless/rt2x00/rt2x00lib.h | 6 +
drivers/net/wireless/rt2x00/rt2x00mac.c | 7 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 92 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 15 -
drivers/net/wireless/rt2x00/rt2x00ring.h | 22 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 41 +-
drivers/net/wireless/rt2x00/rt61pci.c | 68 +-
drivers/net/wireless/rt2x00/rt73usb.c | 36 +-
drivers/net/wireless/rtl8187_dev.c | 2 +
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/zd1211rw/Kconfig | 7 +-
drivers/net/wireless/zd1211rw/Makefile | 3 +-
drivers/net/wireless/zd1211rw/zd_chip.c | 126 +-
drivers/net/wireless/zd1211rw/zd_chip.h | 60 +-
drivers/net/wireless/zd1211rw/zd_def.h | 5 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.c | 196 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 49 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 1535 ++++-------
drivers/net/wireless/zd1211rw/zd_mac.h | 117 +-
drivers/net/wireless/zd1211rw/zd_netdev.c | 264 --
drivers/net/wireless/zd1211rw/zd_netdev.h | 45 -
drivers/net/wireless/zd1211rw/zd_rf.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf.h | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 5 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 289 ++-
drivers/net/wireless/zd1211rw/zd_usb.h | 36 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/main.c | 10 +-
drivers/ssb/pci.c | 221 +-
include/linux/ssb/ssb.h | 71 +-
include/linux/ssb/ssb_regs.h | 59 +-
126 files changed, 14163 insertions(+), 11658 deletions(-)
create mode 100644 drivers/net/wireless/b43/wa.c
create mode 100644 drivers/net/wireless/b43/wa.h
create mode 100644 drivers/net/wireless/rt2x00/rt2x00dump.h
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.c
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzik.patch.bz2
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-12-04 13:59 ` John W. Linville
(?)
@ 2007-12-04 20:13 ` Jeff Garzik
-1 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-12-04 20:13 UTC (permalink / raw)
To: John W. Linville; +Cc: davem, netdev, linux-wireless
John W. Linville wrote:
> Jeff,
>
> Here are more than 5 score patches intended for 2.6.25. This request
> replaces the request sent on 27 November. [1]
>
> There are tons of updates here, especially iwlwifi and libertas. The
> b43, b43legacy, rt2x00, rtl8187, and zd1211rw drivers are also updated.
>
> This pull contains the port of zd1211rw to the mac80211 infrastructure.
> There is also some SSB stuff in there. I've been sending that stuff
> to Dave M., but since later b43 patches depend on it I thought it
> would be better to send them your way. I'll CC Dave.
>
> Also included is the iwl4965 work to use the .11n stuff that has been
> added in the net-2.6.25 tree. For now I've added a "depends on n" to
> the IWL4965_HT Kconfig to avoid build breakage in your tree.
>
> The total diff is getting big -- the patch is nearing 2MB. Please let
> me know if there are any problems so we can get (at least some of)
> this merged!
>
> Thanks,
>
> John
>
> [1] http://marc.info/?l=linux-netdev&m=119617493212177&w=2
>
> ---
>
> Individual patches are available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
>
> ---
>
> The following changes since commit e86d91426d8b3d79010c9d5c617d7594e5c165aa:
> Jeff Garzik (1):
> Merge branch 'r6040' of git://git.kernel.org/.../romieu/netdev-2.6 into upstream
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2008-01-08 22:23 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2008-01-08 22:23 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless, davem
[-- Attachment #1: Type: text/plain, Size: 8477 bytes --]
Jeff,
Another round of patches intended for 2.6.25...the biggest factions are
rt2x00 and b43 updates, as well as some Viro-isms... :-)
Please let me know if there are any problems!
John
P.S. Copying Dave in case he is handling these requests...FWIW, it
will definitely depend on the patches already in netdev-2.6#upstream...
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 65d0aa09c183ee45dc1786675209313fa75cf4ec:
Jeff Garzik (1):
wireless/iwl: fix namespace breakage
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Al Viro (35):
eliminate byteswapping in struct ieee80211_qos_parameters
several missing cpu_to_le16() in ieee80211softmac_capabilities()
ieee80211softmac_auth_resp() fix
ieee80211: fix misannotations
ieee80211: beacon->capability is little-endian
airo: fix transmit_802_11_packet()
airo: fix endianness bug in ->dBm handling
airo: bug in airo_interrupt() handling on incoming 802.11
airo endianness bug: cap_rid.extSoftCap
airo: fix writerids() endianness
hostap: fix endianness with txdesc->sw_support
p54common annotations and fixes
ipw2100 annotations and fixes
ray_cs fixes
ipw2200 fix: struct ieee80211_radiotap_header is little-endian
ipw2200 fix: ->rt_chbitmask is le16
ipw2200: ipw_tx_skb() endianness bug
airo: trivial endianness annotations
airo: sanitize handling of SSID_rid
bap_read()/bap_write() work with fixed-endian buffers
airo: sanitize BSSListRid handling
airo: sanitize handling of WepKeyRid
airo: sanitize handling of StatsRid
airo: sanitize handling of CapabilityRid
airo: sanitize APListRid handling
airo: sanitize handling of StatusRid
airo: last of endianness annotations
hostap annotations
hostap: don't mess with mixed-endian even for internal skb queues
p54pci: endianness annotations and fixes
bcm43xx annotations
prism54 trivial annotations
ipw2200 trivial annotations
ipw2200: do not byteswap struct ipw_associate
misc wireless annotations
Daniel Walker (1):
prism54: remove questionable down_interruptible usage
Ivo van Doorn (12):
rt2x00: Fix chipset debugfs file
rt2x00: Always call ieee80211_stop_queue() when return NETDEV_TX_BUSY
rt2x00: Only set the TBCN flag when the interface is configured to send beacons.
rt2x00: Store queue idx and entry idx in data_ring and data_entry
rt2x00: Move start() and stop() handlers into rt2x00lib.c
rt2x00: Put 802.11 data on 4 byte boundary
rt2x00: Move packet filter flags
rt2x00: Cleanup write_tx_desc() arguments
rt2x00: Determine MY_BSS from descriptor
rt2x00: Move init_txring and init_rxring into rt2x00lib
rt2x00: Correctly initialize data and desc pointer
rt2x00: Release rt2x00 2.0.14
John W. Linville (1):
Revert "rtl8187: fix tx power reading"
Michael Buesch (14):
ssb: Fix extraction of values from SPROM
b43: Only select allowed TX and RX antennas
b43: Fix chip access validation for new devices
ssb: Fix PCMCIA lowlevel register access
b43: Remove PIO support
b43: Add definitions for MAC Control register
b43: Fix upload of beacon packets to the hardware
b43: Fix template upload locking.
b43: Put multicast frames on the mcast queue
b43: Fix tim search buffer overrun
b43-ssb-bridge: Add PCI ID for BCM43XG
b43: Add NPHY kconfig option
b43: Fix any N-PHY related WARN_ON() in the attach stage.
b43: Add N-PHY related initvals firmware filenames.
Miguel Botón (3):
ssb: add 'ssb_pcihost_set_power_state' function
b44: power down PHY when interface down
iwlwifi: fix compilation warning in 'iwl-4965.c'
Zhu Yi (1):
iwlwifi: fix typo in 'drivers/net/wireless/iwlwifi/Kconfig'
drivers/net/b44.c | 28 +-
drivers/net/wireless/adm8211.c | 8 +-
drivers/net/wireless/airo.c | 1233 ++++++++++++-------------
drivers/net/wireless/atmel.c | 30 +-
drivers/net/wireless/b43/Kconfig | 58 +-
drivers/net/wireless/b43/Makefile | 9 +-
drivers/net/wireless/b43/b43.h | 97 +--
drivers/net/wireless/b43/debugfs.c | 1 -
drivers/net/wireless/b43/dma.c | 101 ++-
drivers/net/wireless/b43/dma.h | 50 -
drivers/net/wireless/b43/main.c | 627 +++++++------
drivers/net/wireless/b43/main.h | 3 +
drivers/net/wireless/b43/xmit.c | 26 +-
drivers/net/wireless/b43legacy/main.c | 5 -
drivers/net/wireless/b43legacy/phy.c | 2 +-
drivers/net/wireless/bcm43xx/bcm43xx.h | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 40 +-
drivers/net/wireless/bcm43xx/bcm43xx_pio.c | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_xmit.c | 6 +-
drivers/net/wireless/hostap/hostap_80211.h | 34 +-
drivers/net/wireless/hostap/hostap_80211_rx.c | 2 +-
drivers/net/wireless/hostap/hostap_ap.c | 72 +-
drivers/net/wireless/hostap/hostap_common.h | 34 +-
drivers/net/wireless/hostap/hostap_download.c | 22 +-
drivers/net/wireless/hostap/hostap_hw.c | 28 +-
drivers/net/wireless/hostap/hostap_info.c | 9 +-
drivers/net/wireless/hostap/hostap_ioctl.c | 66 +-
drivers/net/wireless/hostap/hostap_main.c | 6 +-
drivers/net/wireless/hostap/hostap_pci.c | 16 +-
drivers/net/wireless/hostap/hostap_wlan.h | 202 ++--
drivers/net/wireless/ipw2100.c | 10 +-
drivers/net/wireless/ipw2200.c | 175 ++--
drivers/net/wireless/ipw2200.h | 190 ++--
drivers/net/wireless/iwlwifi/Kconfig | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 2 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 +-
drivers/net/wireless/iwlwifi/iwl4965-base.c | 4 +-
drivers/net/wireless/p54common.c | 8 +-
drivers/net/wireless/p54pci.c | 16 +-
drivers/net/wireless/p54pci.h | 4 +-
drivers/net/wireless/prism54/isl_38xx.h | 10 +-
drivers/net/wireless/prism54/isl_ioctl.c | 12 +-
drivers/net/wireless/prism54/islpci_eth.c | 2 +-
drivers/net/wireless/prism54/islpci_eth.h | 38 +-
drivers/net/wireless/prism54/islpci_mgt.h | 2 +-
drivers/net/wireless/ray_cs.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 102 +--
drivers/net/wireless/rt2x00/rt2500pci.c | 88 +--
drivers/net/wireless/rt2x00/rt2500usb.c | 36 +-
drivers/net/wireless/rt2x00/rt2x00.h | 32 +-
drivers/net/wireless/rt2x00/rt2x00debug.c | 13 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 142 +++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 59 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 28 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 13 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 87 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 5 +-
drivers/net/wireless/rt2x00/rt61pci.c | 114 +--
drivers/net/wireless/rt2x00/rt73usb.c | 35 +-
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/wavelan_cs.p.h | 2 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/pci.c | 76 ++-
drivers/ssb/pcmcia.c | 71 +-
include/linux/ssb/ssb.h | 29 +-
include/linux/ssb/ssb_regs.h | 38 +-
include/net/ieee80211.h | 6 +-
net/ieee80211/ieee80211_crypt_tkip.c | 22 +-
net/ieee80211/ieee80211_rx.c | 47 +-
net/ieee80211/ieee80211_tx.c | 14 +-
net/ieee80211/softmac/ieee80211softmac_auth.c | 6 +-
net/ieee80211/softmac/ieee80211softmac_io.c | 10 +-
73 files changed, 2209 insertions(+), 2256 deletions(-)
Omnibus patch attached as 'upstream-jgarzik.patch.bz2'.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 66997 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2008-01-08 22:23 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2008-01-08 22:23 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
davem-fT/PcQaiUtIeIZ0/mPfg9Q
[-- Attachment #1: Type: text/plain, Size: 8503 bytes --]
Jeff,
Another round of patches intended for 2.6.25...the biggest factions are
rt2x00 and b43 updates, as well as some Viro-isms... :-)
Please let me know if there are any problems!
John
P.S. Copying Dave in case he is handling these requests...FWIW, it
will definitely depend on the patches already in netdev-2.6#upstream...
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 65d0aa09c183ee45dc1786675209313fa75cf4ec:
Jeff Garzik (1):
wireless/iwl: fix namespace breakage
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Al Viro (35):
eliminate byteswapping in struct ieee80211_qos_parameters
several missing cpu_to_le16() in ieee80211softmac_capabilities()
ieee80211softmac_auth_resp() fix
ieee80211: fix misannotations
ieee80211: beacon->capability is little-endian
airo: fix transmit_802_11_packet()
airo: fix endianness bug in ->dBm handling
airo: bug in airo_interrupt() handling on incoming 802.11
airo endianness bug: cap_rid.extSoftCap
airo: fix writerids() endianness
hostap: fix endianness with txdesc->sw_support
p54common annotations and fixes
ipw2100 annotations and fixes
ray_cs fixes
ipw2200 fix: struct ieee80211_radiotap_header is little-endian
ipw2200 fix: ->rt_chbitmask is le16
ipw2200: ipw_tx_skb() endianness bug
airo: trivial endianness annotations
airo: sanitize handling of SSID_rid
bap_read()/bap_write() work with fixed-endian buffers
airo: sanitize BSSListRid handling
airo: sanitize handling of WepKeyRid
airo: sanitize handling of StatsRid
airo: sanitize handling of CapabilityRid
airo: sanitize APListRid handling
airo: sanitize handling of StatusRid
airo: last of endianness annotations
hostap annotations
hostap: don't mess with mixed-endian even for internal skb queues
p54pci: endianness annotations and fixes
bcm43xx annotations
prism54 trivial annotations
ipw2200 trivial annotations
ipw2200: do not byteswap struct ipw_associate
misc wireless annotations
Daniel Walker (1):
prism54: remove questionable down_interruptible usage
Ivo van Doorn (12):
rt2x00: Fix chipset debugfs file
rt2x00: Always call ieee80211_stop_queue() when return NETDEV_TX_BUSY
rt2x00: Only set the TBCN flag when the interface is configured to send beacons.
rt2x00: Store queue idx and entry idx in data_ring and data_entry
rt2x00: Move start() and stop() handlers into rt2x00lib.c
rt2x00: Put 802.11 data on 4 byte boundary
rt2x00: Move packet filter flags
rt2x00: Cleanup write_tx_desc() arguments
rt2x00: Determine MY_BSS from descriptor
rt2x00: Move init_txring and init_rxring into rt2x00lib
rt2x00: Correctly initialize data and desc pointer
rt2x00: Release rt2x00 2.0.14
John W. Linville (1):
Revert "rtl8187: fix tx power reading"
Michael Buesch (14):
ssb: Fix extraction of values from SPROM
b43: Only select allowed TX and RX antennas
b43: Fix chip access validation for new devices
ssb: Fix PCMCIA lowlevel register access
b43: Remove PIO support
b43: Add definitions for MAC Control register
b43: Fix upload of beacon packets to the hardware
b43: Fix template upload locking.
b43: Put multicast frames on the mcast queue
b43: Fix tim search buffer overrun
b43-ssb-bridge: Add PCI ID for BCM43XG
b43: Add NPHY kconfig option
b43: Fix any N-PHY related WARN_ON() in the attach stage.
b43: Add N-PHY related initvals firmware filenames.
Miguel Botón (3):
ssb: add 'ssb_pcihost_set_power_state' function
b44: power down PHY when interface down
iwlwifi: fix compilation warning in 'iwl-4965.c'
Zhu Yi (1):
iwlwifi: fix typo in 'drivers/net/wireless/iwlwifi/Kconfig'
drivers/net/b44.c | 28 +-
drivers/net/wireless/adm8211.c | 8 +-
drivers/net/wireless/airo.c | 1233 ++++++++++++-------------
drivers/net/wireless/atmel.c | 30 +-
drivers/net/wireless/b43/Kconfig | 58 +-
drivers/net/wireless/b43/Makefile | 9 +-
drivers/net/wireless/b43/b43.h | 97 +--
drivers/net/wireless/b43/debugfs.c | 1 -
drivers/net/wireless/b43/dma.c | 101 ++-
drivers/net/wireless/b43/dma.h | 50 -
drivers/net/wireless/b43/main.c | 627 +++++++------
drivers/net/wireless/b43/main.h | 3 +
drivers/net/wireless/b43/xmit.c | 26 +-
drivers/net/wireless/b43legacy/main.c | 5 -
drivers/net/wireless/b43legacy/phy.c | 2 +-
drivers/net/wireless/bcm43xx/bcm43xx.h | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 40 +-
drivers/net/wireless/bcm43xx/bcm43xx_pio.c | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_xmit.c | 6 +-
drivers/net/wireless/hostap/hostap_80211.h | 34 +-
drivers/net/wireless/hostap/hostap_80211_rx.c | 2 +-
drivers/net/wireless/hostap/hostap_ap.c | 72 +-
drivers/net/wireless/hostap/hostap_common.h | 34 +-
drivers/net/wireless/hostap/hostap_download.c | 22 +-
drivers/net/wireless/hostap/hostap_hw.c | 28 +-
drivers/net/wireless/hostap/hostap_info.c | 9 +-
drivers/net/wireless/hostap/hostap_ioctl.c | 66 +-
drivers/net/wireless/hostap/hostap_main.c | 6 +-
drivers/net/wireless/hostap/hostap_pci.c | 16 +-
drivers/net/wireless/hostap/hostap_wlan.h | 202 ++--
drivers/net/wireless/ipw2100.c | 10 +-
drivers/net/wireless/ipw2200.c | 175 ++--
drivers/net/wireless/ipw2200.h | 190 ++--
drivers/net/wireless/iwlwifi/Kconfig | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 2 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 +-
drivers/net/wireless/iwlwifi/iwl4965-base.c | 4 +-
drivers/net/wireless/p54common.c | 8 +-
drivers/net/wireless/p54pci.c | 16 +-
drivers/net/wireless/p54pci.h | 4 +-
drivers/net/wireless/prism54/isl_38xx.h | 10 +-
drivers/net/wireless/prism54/isl_ioctl.c | 12 +-
drivers/net/wireless/prism54/islpci_eth.c | 2 +-
drivers/net/wireless/prism54/islpci_eth.h | 38 +-
drivers/net/wireless/prism54/islpci_mgt.h | 2 +-
drivers/net/wireless/ray_cs.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 102 +--
drivers/net/wireless/rt2x00/rt2500pci.c | 88 +--
drivers/net/wireless/rt2x00/rt2500usb.c | 36 +-
drivers/net/wireless/rt2x00/rt2x00.h | 32 +-
drivers/net/wireless/rt2x00/rt2x00debug.c | 13 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 142 +++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 59 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 28 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 13 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 87 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 5 +-
drivers/net/wireless/rt2x00/rt61pci.c | 114 +--
drivers/net/wireless/rt2x00/rt73usb.c | 35 +-
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/wavelan_cs.p.h | 2 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/pci.c | 76 ++-
drivers/ssb/pcmcia.c | 71 +-
include/linux/ssb/ssb.h | 29 +-
include/linux/ssb/ssb_regs.h | 38 +-
include/net/ieee80211.h | 6 +-
net/ieee80211/ieee80211_crypt_tkip.c | 22 +-
net/ieee80211/ieee80211_rx.c | 47 +-
net/ieee80211/ieee80211_tx.c | 14 +-
net/ieee80211/softmac/ieee80211softmac_auth.c | 6 +-
net/ieee80211/softmac/ieee80211softmac_io.c | 10 +-
73 files changed, 2209 insertions(+), 2256 deletions(-)
Omnibus patch attached as 'upstream-jgarzik.patch.bz2'.
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 66997 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-20 15:54 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-20 15:54 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
[-- Attachment #1: Type: text/plain, Size: 5099 bytes --]
Jeff,
More for 2.6.25...Mr. Woodhouse continues his savage assault on
libertas, the b43legacy version of the rfkill led patch is here
(b43legacy rfkill stuff is not in 2.6.24), and there are a couple of
iwlwifi patches as well.
Let me know if there are problems!
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit b503d38b01bf313e4f1250c4ded89fc10a1d3da0:
Ramkrishna Vepa (1):
S2io: Fixes to enable multiple transmit fifos
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
David Woodhouse (38):
libertas: don't exit worker thread until kthread_stop() is called
libertas: stop attempting to reset devices on unload
libertas: clean up if_usb driver
libertas: kill whitespace at end of lines
libertas: kill unused wait_option field in struct cmd_ctrl_node
libertas: rename and clean up DownloadcommandToStation
libertas: don't use __lbs_cmd() with empty callback in if_usb.c
libertas: remove some pointless checks for cmdnode buffer being present
libertas: introduce and use lbs_complete_command() for command completion
libertas: don't re-initialise cmdnode when taking it off the free queue
libertas: kill cleanup_cmdnode()
libertas: let __lbs_cmd() free its own cmdnode
libertas: kill pdata_buf member of struct cmd_ctrl_node
libertas: store command result in cmdnode instead of priv->cur_cmd_retcode
libertas: add __lbs_cmd_async() for asynchronous command submission
libertas: ensure response buffer size is always set for lbs_cmd_with_response
libertas: handle command timeout in main thread instead of directly in timer
libertas: kill 'addtail' argument to lbs_queue_cmd() and make it static
libertas: fix return from lbs_update_channel()
libertas: add SLEEP_PERIOD and FW_WAKE_METHOD command definitions
libertas: fix buffer handling of PS_MODE commands and responses
libertas: don't clear priv->dnld_sent after sending sleep confirm
libertas: handle HOST_AWAKE event by sending WAKEUP_CONFIRM command
libertas: allow for PS mode to be disabled when firmware doesn't support it
libertas: Check for PS mode support on USB devices
libertas: reduce explicit references to priv->cur_cmd->cmdbuf
libertas: use priv->upld_buf for command responses
libertas: discard DEFER responses to commands; let the timeout trigger
libertas: make lbs_submit_command always 'succeed' and set command timer
libertas: submit RSSI command on tx timeout, to check whether module is dead
libertas: convert RADIO_CONTROL to a direct command
libertas: convert INACTIVITY_TIMEOUT to a direct command
libertas: convert SLEEP_PARAMS to a direct command
libertas: convert SET_WEP to a direct command
libertas: convert ENABLE_RSN to a direct command
libertas: change inference about buffer size in lbs_cmd()
libertas: convert SUBSCRIBE_EVENT to a direct command
libertas: remove check for driver_lock in lbs_interrupt()
Larry Finger (1):
b43legacy: Fix rfkill radio LED
Zhu Yi (2):
iwlwifi: proper monitor support
iwlwifi: skip mac80211 conf during a hardware scan and replay it afterwards
drivers/net/wireless/b43legacy/leds.c | 4 +
drivers/net/wireless/b43legacy/main.c | 20 +-
drivers/net/wireless/b43legacy/rfkill.c | 133 ++++---
drivers/net/wireless/iwlwifi/iwl-3945.c | 120 +++++-
drivers/net/wireless/iwlwifi/iwl-3945.h | 38 +--
drivers/net/wireless/iwlwifi/iwl-4965.c | 120 ++++++-
drivers/net/wireless/iwlwifi/iwl-4965.h | 26 +--
drivers/net/wireless/iwlwifi/iwl3945-base.c | 139 +------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 122 +------
drivers/net/wireless/libertas/assoc.c | 61 ++--
drivers/net/wireless/libertas/cmd.c | 565 +++++++++++----------------
drivers/net/wireless/libertas/cmd.h | 29 ++-
drivers/net/wireless/libertas/cmdresp.c | 162 +++-----
drivers/net/wireless/libertas/debugfs.c | 350 ++++++++---------
drivers/net/wireless/libertas/decl.h | 9 +-
drivers/net/wireless/libertas/dev.h | 19 +-
drivers/net/wireless/libertas/host.h | 8 +
drivers/net/wireless/libertas/hostcmd.h | 47 ++-
drivers/net/wireless/libertas/if_cs.c | 10 +-
drivers/net/wireless/libertas/if_sdio.c | 10 +-
drivers/net/wireless/libertas/if_usb.c | 470 ++++++++++-------------
drivers/net/wireless/libertas/if_usb.h | 95 ++---
drivers/net/wireless/libertas/main.c | 92 +++--
drivers/net/wireless/libertas/tx.c | 4 +-
drivers/net/wireless/libertas/wext.c | 7 +
25 files changed, 1200 insertions(+), 1460 deletions(-)
Omnibus patch attached is 'upstream-jgarzik.patch.bz2' due to size concerns.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 30113 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-20 15:54 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-20 15:54 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-wireless-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 5125 bytes --]
Jeff,
More for 2.6.25...Mr. Woodhouse continues his savage assault on
libertas, the b43legacy version of the rfkill led patch is here
(b43legacy rfkill stuff is not in 2.6.24), and there are a couple of
iwlwifi patches as well.
Let me know if there are problems!
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit b503d38b01bf313e4f1250c4ded89fc10a1d3da0:
Ramkrishna Vepa (1):
S2io: Fixes to enable multiple transmit fifos
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
David Woodhouse (38):
libertas: don't exit worker thread until kthread_stop() is called
libertas: stop attempting to reset devices on unload
libertas: clean up if_usb driver
libertas: kill whitespace at end of lines
libertas: kill unused wait_option field in struct cmd_ctrl_node
libertas: rename and clean up DownloadcommandToStation
libertas: don't use __lbs_cmd() with empty callback in if_usb.c
libertas: remove some pointless checks for cmdnode buffer being present
libertas: introduce and use lbs_complete_command() for command completion
libertas: don't re-initialise cmdnode when taking it off the free queue
libertas: kill cleanup_cmdnode()
libertas: let __lbs_cmd() free its own cmdnode
libertas: kill pdata_buf member of struct cmd_ctrl_node
libertas: store command result in cmdnode instead of priv->cur_cmd_retcode
libertas: add __lbs_cmd_async() for asynchronous command submission
libertas: ensure response buffer size is always set for lbs_cmd_with_response
libertas: handle command timeout in main thread instead of directly in timer
libertas: kill 'addtail' argument to lbs_queue_cmd() and make it static
libertas: fix return from lbs_update_channel()
libertas: add SLEEP_PERIOD and FW_WAKE_METHOD command definitions
libertas: fix buffer handling of PS_MODE commands and responses
libertas: don't clear priv->dnld_sent after sending sleep confirm
libertas: handle HOST_AWAKE event by sending WAKEUP_CONFIRM command
libertas: allow for PS mode to be disabled when firmware doesn't support it
libertas: Check for PS mode support on USB devices
libertas: reduce explicit references to priv->cur_cmd->cmdbuf
libertas: use priv->upld_buf for command responses
libertas: discard DEFER responses to commands; let the timeout trigger
libertas: make lbs_submit_command always 'succeed' and set command timer
libertas: submit RSSI command on tx timeout, to check whether module is dead
libertas: convert RADIO_CONTROL to a direct command
libertas: convert INACTIVITY_TIMEOUT to a direct command
libertas: convert SLEEP_PARAMS to a direct command
libertas: convert SET_WEP to a direct command
libertas: convert ENABLE_RSN to a direct command
libertas: change inference about buffer size in lbs_cmd()
libertas: convert SUBSCRIBE_EVENT to a direct command
libertas: remove check for driver_lock in lbs_interrupt()
Larry Finger (1):
b43legacy: Fix rfkill radio LED
Zhu Yi (2):
iwlwifi: proper monitor support
iwlwifi: skip mac80211 conf during a hardware scan and replay it afterwards
drivers/net/wireless/b43legacy/leds.c | 4 +
drivers/net/wireless/b43legacy/main.c | 20 +-
drivers/net/wireless/b43legacy/rfkill.c | 133 ++++---
drivers/net/wireless/iwlwifi/iwl-3945.c | 120 +++++-
drivers/net/wireless/iwlwifi/iwl-3945.h | 38 +--
drivers/net/wireless/iwlwifi/iwl-4965.c | 120 ++++++-
drivers/net/wireless/iwlwifi/iwl-4965.h | 26 +--
drivers/net/wireless/iwlwifi/iwl3945-base.c | 139 +------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 122 +------
drivers/net/wireless/libertas/assoc.c | 61 ++--
drivers/net/wireless/libertas/cmd.c | 565 +++++++++++----------------
drivers/net/wireless/libertas/cmd.h | 29 ++-
drivers/net/wireless/libertas/cmdresp.c | 162 +++-----
drivers/net/wireless/libertas/debugfs.c | 350 ++++++++---------
drivers/net/wireless/libertas/decl.h | 9 +-
drivers/net/wireless/libertas/dev.h | 19 +-
drivers/net/wireless/libertas/host.h | 8 +
drivers/net/wireless/libertas/hostcmd.h | 47 ++-
drivers/net/wireless/libertas/if_cs.c | 10 +-
drivers/net/wireless/libertas/if_sdio.c | 10 +-
drivers/net/wireless/libertas/if_usb.c | 470 ++++++++++-------------
drivers/net/wireless/libertas/if_usb.h | 95 ++---
drivers/net/wireless/libertas/main.c | 92 +++--
drivers/net/wireless/libertas/tx.c | 4 +-
drivers/net/wireless/libertas/wext.c | 7 +
25 files changed, 1200 insertions(+), 1460 deletions(-)
Omnibus patch attached is 'upstream-jgarzik.patch.bz2' due to size concerns.
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 30113 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-12-17 23:40 ` Jeff Garzik
@ 2007-12-18 1:24 ` Zhu Yi
-1 siblings, 0 replies; 42+ messages in thread
From: Zhu Yi @ 2007-12-18 1:24 UTC (permalink / raw)
To: Jeff Garzik; +Cc: John W. Linville, netdev, linux-wireless, Andrew Morton
On Mon, 2007-12-17 at 18:40 -0500, Jeff Garzik wrote:
> drivers/net/wireless/iwlwifi/iwl3945-base.c: In function=20
> =A1=AEiwl3945_alive_start=A1=AF:
> drivers/net/wireless/iwlwifi/iwl3945-base.c:6285: error: implicit=20
> declaration of function =A1=AEiwl_rate_control_unregister=A1=AF
> make[4]: *** [drivers/net/wireless/iwlwifi/iwl3945-base.o] Error 1
> make[3]: *** [drivers/net/wireless/iwlwifi] Error 2
> make[2]: *** [drivers/net/wireless] Error 2
> make[1]: *** [drivers/net] Error 2
> make: *** [drivers] Error 2
We changed the namespace between 2.6.24 and upstream. So
iwl_rate_control_unregister should be renamed to
iwl3945_rate_control_unregister when the patch is merged from
fix-jgarzik to upstream-jgarzik. The same thing is also for
iwl4965_rate_control_unregister.
> I'll leave it there and assume that you will send a fix --on top of--=
=20
> netdev#upstream ...
I assume John will do it.
Thanks,
-yi
-
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-18 1:24 ` Zhu Yi
0 siblings, 0 replies; 42+ messages in thread
From: Zhu Yi @ 2007-12-18 1:24 UTC (permalink / raw)
To: Jeff Garzik; +Cc: John W. Linville, netdev, linux-wireless, Andrew Morton
On Mon, 2007-12-17 at 18:40 -0500, Jeff Garzik wrote:
> drivers/net/wireless/iwlwifi/iwl3945-base.c: In function
> ‘iwl3945_alive_start’:
> drivers/net/wireless/iwlwifi/iwl3945-base.c:6285: error: implicit
> declaration of function ‘iwl_rate_control_unregister’
> make[4]: *** [drivers/net/wireless/iwlwifi/iwl3945-base.o] Error 1
> make[3]: *** [drivers/net/wireless/iwlwifi] Error 2
> make[2]: *** [drivers/net/wireless] Error 2
> make[1]: *** [drivers/net] Error 2
> make: *** [drivers] Error 2
We changed the namespace between 2.6.24 and upstream. So
iwl_rate_control_unregister should be renamed to
iwl3945_rate_control_unregister when the patch is merged from
fix-jgarzik to upstream-jgarzik. The same thing is also for
iwl4965_rate_control_unregister.
> I'll leave it there and assume that you will send a fix --on top of--
> netdev#upstream ...
I assume John will do it.
Thanks,
-yi
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-17 23:40 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-12-17 23:40 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, linux-wireless, Andrew Morton
Hum, this required merging also, and broke the build too :/
drivers/net/wireless/iwlwifi/iwl3945-base.c: In function=20
=91iwl3945_alive_start=92:
drivers/net/wireless/iwlwifi/iwl3945-base.c:6285: error: implicit=20
declaration of function =91iwl_rate_control_unregister=92
make[4]: *** [drivers/net/wireless/iwlwifi/iwl3945-base.o] Error 1
make[3]: *** [drivers/net/wireless/iwlwifi] Error 2
make[2]: *** [drivers/net/wireless] Error 2
make[1]: *** [drivers/net] Error 2
make: *** [drivers] Error 2
I'll leave it there and assume that you will send a fix --on top of--=20
netdev#upstream ...
-
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-17 23:40 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-12-17 23:40 UTC (permalink / raw)
To: John W. Linville
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA, Andrew Morton
Hum, this required merging also, and broke the build too :/
drivers/net/wireless/iwlwifi/iwl3945-base.c: In function
‘iwl3945_alive_start’:
drivers/net/wireless/iwlwifi/iwl3945-base.c:6285: error: implicit
declaration of function ‘iwl_rate_control_unregister’
make[4]: *** [drivers/net/wireless/iwlwifi/iwl3945-base.o] Error 1
make[3]: *** [drivers/net/wireless/iwlwifi] Error 2
make[2]: *** [drivers/net/wireless] Error 2
make[1]: *** [drivers/net] Error 2
make: *** [drivers] Error 2
I'll leave it there and assume that you will send a fix --on top of--
netdev#upstream ...
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-12-16 4:34 John W. Linville
@ 2007-12-17 23:24 ` Jeff Garzik
2007-12-17 23:40 ` Jeff Garzik
0 siblings, 1 reply; 42+ messages in thread
From: Jeff Garzik @ 2007-12-17 23:24 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, linux-wireless
John W. Linville wrote:
> Jeff,
>
> Some more patches intended for 2.6.25... There are a bunch of libertas
> patches in there, as well as some iwlwifi cleanups from the last merge
> and a couple of b43 fixes resulting from a regression in an earlier
> patch already queued in netdev-2.6#upstream.
>
> Let me know if there are any problems!
>
> Thanks,
>
> John
>
> ---
>
> Individual patches available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
>
> ---
>
> The following changes since commit 9c8e86195d75a1f4875e9ced083a015a99cec94e:
> John W. Linville (1):
> rt2x00: correct "skb_buff" typo
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik ..BRANCH.NOT.VERIFIED..
>
> Dan Williams (11):
> orinoco: always use latest BSS info when caching scan results
> libertas: make lbs_cmd() usage nicer
> libertas: clean up is_command_allowed_in_ps()
> libertas: clean up direct command handling
> libertas: add simple copyback command callback
> libertas: convert GET_HW_SPEC to a direct command
> libertas: rename and re-type bufvirtualaddr to cmdbuf
> libertas: fix case of FWT_ACCESS_LIST_ROUTE and FWT_ACCESS_LIST_NEIGHBOR commands
> libertas: convert DATA_RATE to a direct command
> libertas: convert RF_CHANNEL to a direct command
> libertas: endianness fixes for get_channel/set_channel
>
> David Woodhouse (76):
> libertas: Fix memory leak of RX skbs
> libertas: Remove cmd_oid from struct cmd_ctrl_node
> libertas: Consolidate lbs_host_to_card_done() function.
> libertas: Don't claim to have checksummed incoming packets.
> libertas: Move SET_BOOT2_VER command to if_usb where it belongs
> libertas: Zero 'pdata_size' field in cmd_ctrl_node reliably.
> libertas: Byteswap cmdptr->size in lbs_cmd()
> libertas: Use lbs_cmd() for setting Boot2 version
> libertas: Remove SET_BOOT2_VER support from the Big Switch Statement.
> libertas: Fix endianness in boot2_version handling.
> libertas: when usb_submit_usb fails, include the error code in the printk
> libertas: Switch to using a callback function pointer for commands
> libertas: Don't set IW_ENCODE_NOKEY when returning WEP keys.
> libertas: Fix up error handling in lbs_setuserscan()
> libertas: kill adapter->nr_cmd_pending
> libertas: switch lbs_cmd() to take a callback function pointer
> libertas: clean up lbs_thread() to make it slightly more readable
> libertas: fix lbs_rtap attribute in sysfs
> libertas: kill TxLockFlag
> libertas: kill struct lbs_adapter
> libertas: use lbs_host_to_card_done() in lbs_tx_timeout()
> libertas: cope with device which already has firmware loaded
> libertas: stop debugfs code looking at cmdpendingq
> libertas: kill internal tx queue for PS mode
> libertas: kill SendSinglePacket() function.
> libertas: move lbs_hard_start_xmit() into tx.c
> libertas: kill lbs_process_tx() by merging it into lbs_hard_start_xmit()
> libertas: clean up lbs_hard_start_xmit()
> libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit()
> libertas: stop using ieee80211 for radiotap device
> libertas: set dev_addr on rtap device
> libertas: TX packet is radiotap iff it comes from rtap_dev
> libertas: free successfully transmitted skbs again
> libertas: refactor the 'should I sleep?' decision in lbs_thread()
> libertas: Move actual transmission to main thread
> libertas: remove unreachable code from process_rxed_802_11_packet()
> libertas: fix error cases in lbs_process_rxed_802_11_packet()
> libertas: kill lbs_upload_tx_packet()
> libertas: kill (IS,SET,UNSET)_MESH_FRAME.
> libertas: add opaque extra argument to cmd callback function
> libertas: clean up lbs_interrupt()
> libertas: remove pre_open_check()
> libertas: make rtap and normal modes mutually exclusive, clean up open/stop
> libertas: improve reliability of firmware reloading on USB
> libertas: switch to a waitqueue and timer for handling USB firmware load
> libertas: don't run thread while firmware not yet ready
> libertas: switch USB cardp->priv to 'struct lbs_private *' and resulting fix
> libertas: move removal of lbs_rtap file to lbs_stop_card()
> libertas: wait for 'firmware ready' event from firmware after loading
> libertas: fix debug output in lbs_cmd_copyback() function.
> libertas: convert CMD_MESH_ACCESS to a direct command
> libertas: remove casts from lbs_cmd() and lbs_cmd_with_response() macros
> libertas: make some more functions static
> libertas: fix sparse endianness warnings in scan.c
> libertas: add lbs_mesh sysfs attribute for enabling mesh
> libertas: kill references to mesh autostart
> libertas: kill rx_urb_recall and eth_dev members of struct usb_card_rec
> libertas: whitespace cleanup in host.h
> libertas: allow get/set SSID on mshX device
> libertas: allow setting channel on mshX device
> libertas: add missing newline on debug message
> libertas: disable mesh temporarily while setting eth channel/assoc
> libertas: add debugging output to lbs_mesh_config()
> libertas: be more careful about command responses matching cur_cmd
> libertas: add missing newlines in debugging statements
> libertas: slight cleanup of netif queue stop/wake
> libertas: add lbs_host_sleep_cfg() command function
> libertas: switch lbs_cmd() to take a _pointer_ to the command structure
> libertas: make worker thread not freezable
> libertas: implement suspend and resume core methods
> libertas: implement suspend/resume for USB devices
> libertas: add ethtool support for wake-on-lan configuration
> libertas: make lbs_update_channel() function non-static
> libertas: cope with both old and new mesh TLV values
> libertas: pass channel argument directly to lbs_mesh_config()
> libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt()
>
> Holger Schurig (8):
> libertas: remove cmd_ctrl_node->cmdflags
> libertas: remove cmd_ctrl_node->status
> libertas: make more functions static
> libertas: handy function to call firmware commands
> libertas: fix data packet size errors
> libertas: implement new scanning logic
> libertas: endianness fixes
> libertas: fix use-after-free error
>
> Li Zefan (1):
> libertas: don't cast a pointer to pointer of
>
> Michael Buesch (2):
> b43: Fix ofdmtab write regression
> b43: Fix for broken transmission
>
> Reinette Chatre (1):
> iwlwifi: remove HT code from iwl-3945.h
>
> Tomas Winkler (2):
> iwlwifi: fix compliation warnings
> iwlwifi: add missing comments
Pulled.
PLEASE verify iwlwifi and zd1121rw drivers, as soon as netdev-2.6.git
mirrors out, because I had to do some hand-merging when bringing the .24
fixes into #upstream.
Jeff
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-16 4:34 John W. Linville
2007-12-17 23:24 ` Jeff Garzik
0 siblings, 1 reply; 42+ messages in thread
From: John W. Linville @ 2007-12-16 4:34 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
[-- Attachment #1: Type: text/plain, Size: 9005 bytes --]
Jeff,
Some more patches intended for 2.6.25... There are a bunch of libertas
patches in there, as well as some iwlwifi cleanups from the last merge
and a couple of b43 fixes resulting from a regression in an earlier
patch already queued in netdev-2.6#upstream.
Let me know if there are any problems!
Thanks,
John
---
Individual patches available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 9c8e86195d75a1f4875e9ced083a015a99cec94e:
John W. Linville (1):
rt2x00: correct "skb_buff" typo
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik ..BRANCH.NOT.VERIFIED..
Dan Williams (11):
orinoco: always use latest BSS info when caching scan results
libertas: make lbs_cmd() usage nicer
libertas: clean up is_command_allowed_in_ps()
libertas: clean up direct command handling
libertas: add simple copyback command callback
libertas: convert GET_HW_SPEC to a direct command
libertas: rename and re-type bufvirtualaddr to cmdbuf
libertas: fix case of FWT_ACCESS_LIST_ROUTE and FWT_ACCESS_LIST_NEIGHBOR commands
libertas: convert DATA_RATE to a direct command
libertas: convert RF_CHANNEL to a direct command
libertas: endianness fixes for get_channel/set_channel
David Woodhouse (76):
libertas: Fix memory leak of RX skbs
libertas: Remove cmd_oid from struct cmd_ctrl_node
libertas: Consolidate lbs_host_to_card_done() function.
libertas: Don't claim to have checksummed incoming packets.
libertas: Move SET_BOOT2_VER command to if_usb where it belongs
libertas: Zero 'pdata_size' field in cmd_ctrl_node reliably.
libertas: Byteswap cmdptr->size in lbs_cmd()
libertas: Use lbs_cmd() for setting Boot2 version
libertas: Remove SET_BOOT2_VER support from the Big Switch Statement.
libertas: Fix endianness in boot2_version handling.
libertas: when usb_submit_usb fails, include the error code in the printk
libertas: Switch to using a callback function pointer for commands
libertas: Don't set IW_ENCODE_NOKEY when returning WEP keys.
libertas: Fix up error handling in lbs_setuserscan()
libertas: kill adapter->nr_cmd_pending
libertas: switch lbs_cmd() to take a callback function pointer
libertas: clean up lbs_thread() to make it slightly more readable
libertas: fix lbs_rtap attribute in sysfs
libertas: kill TxLockFlag
libertas: kill struct lbs_adapter
libertas: use lbs_host_to_card_done() in lbs_tx_timeout()
libertas: cope with device which already has firmware loaded
libertas: stop debugfs code looking at cmdpendingq
libertas: kill internal tx queue for PS mode
libertas: kill SendSinglePacket() function.
libertas: move lbs_hard_start_xmit() into tx.c
libertas: kill lbs_process_tx() by merging it into lbs_hard_start_xmit()
libertas: clean up lbs_hard_start_xmit()
libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit()
libertas: stop using ieee80211 for radiotap device
libertas: set dev_addr on rtap device
libertas: TX packet is radiotap iff it comes from rtap_dev
libertas: free successfully transmitted skbs again
libertas: refactor the 'should I sleep?' decision in lbs_thread()
libertas: Move actual transmission to main thread
libertas: remove unreachable code from process_rxed_802_11_packet()
libertas: fix error cases in lbs_process_rxed_802_11_packet()
libertas: kill lbs_upload_tx_packet()
libertas: kill (IS,SET,UNSET)_MESH_FRAME.
libertas: add opaque extra argument to cmd callback function
libertas: clean up lbs_interrupt()
libertas: remove pre_open_check()
libertas: make rtap and normal modes mutually exclusive, clean up open/stop
libertas: improve reliability of firmware reloading on USB
libertas: switch to a waitqueue and timer for handling USB firmware load
libertas: don't run thread while firmware not yet ready
libertas: switch USB cardp->priv to 'struct lbs_private *' and resulting fix
libertas: move removal of lbs_rtap file to lbs_stop_card()
libertas: wait for 'firmware ready' event from firmware after loading
libertas: fix debug output in lbs_cmd_copyback() function.
libertas: convert CMD_MESH_ACCESS to a direct command
libertas: remove casts from lbs_cmd() and lbs_cmd_with_response() macros
libertas: make some more functions static
libertas: fix sparse endianness warnings in scan.c
libertas: add lbs_mesh sysfs attribute for enabling mesh
libertas: kill references to mesh autostart
libertas: kill rx_urb_recall and eth_dev members of struct usb_card_rec
libertas: whitespace cleanup in host.h
libertas: allow get/set SSID on mshX device
libertas: allow setting channel on mshX device
libertas: add missing newline on debug message
libertas: disable mesh temporarily while setting eth channel/assoc
libertas: add debugging output to lbs_mesh_config()
libertas: be more careful about command responses matching cur_cmd
libertas: add missing newlines in debugging statements
libertas: slight cleanup of netif queue stop/wake
libertas: add lbs_host_sleep_cfg() command function
libertas: switch lbs_cmd() to take a _pointer_ to the command structure
libertas: make worker thread not freezable
libertas: implement suspend and resume core methods
libertas: implement suspend/resume for USB devices
libertas: add ethtool support for wake-on-lan configuration
libertas: make lbs_update_channel() function non-static
libertas: cope with both old and new mesh TLV values
libertas: pass channel argument directly to lbs_mesh_config()
libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt()
Holger Schurig (8):
libertas: remove cmd_ctrl_node->cmdflags
libertas: remove cmd_ctrl_node->status
libertas: make more functions static
libertas: handy function to call firmware commands
libertas: fix data packet size errors
libertas: implement new scanning logic
libertas: endianness fixes
libertas: fix use-after-free error
Li Zefan (1):
libertas: don't cast a pointer to pointer of
Michael Buesch (2):
b43: Fix ofdmtab write regression
b43: Fix for broken transmission
Reinette Chatre (1):
iwlwifi: remove HT code from iwl-3945.h
Tomas Winkler (2):
iwlwifi: fix compliation warnings
iwlwifi: add missing comments
drivers/net/wireless/b43/b43.h | 14 +-
drivers/net/wireless/b43/main.c | 12 +-
drivers/net/wireless/b43/phy.h | 6 +-
drivers/net/wireless/b43/tables.c | 35 +-
drivers/net/wireless/b43/wa.c | 30 +-
drivers/net/wireless/iwlwifi/iwl-3945.h | 24 -
drivers/net/wireless/iwlwifi/iwl-4965.h | 2 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2 +-
drivers/net/wireless/iwlwifi/iwl4965-base.c | 6 +-
drivers/net/wireless/libertas/11d.c | 70 +-
drivers/net/wireless/libertas/assoc.c | 194 +++---
drivers/net/wireless/libertas/assoc.h | 2 +-
drivers/net/wireless/libertas/cmd.c | 899 +++++++++++++++---------
drivers/net/wireless/libertas/cmd.h | 40 +
drivers/net/wireless/libertas/cmdresp.c | 488 +++++--------
drivers/net/wireless/libertas/debugfs.c | 93 ++--
drivers/net/wireless/libertas/decl.h | 27 +-
drivers/net/wireless/libertas/defs.h | 15 +-
drivers/net/wireless/libertas/dev.h | 122 ++--
drivers/net/wireless/libertas/ethtool.c | 66 ++-
drivers/net/wireless/libertas/host.h | 386 +++++------
drivers/net/wireless/libertas/hostcmd.h | 74 ++-
drivers/net/wireless/libertas/if_cs.c | 43 +-
drivers/net/wireless/libertas/if_sdio.c | 37 +-
drivers/net/wireless/libertas/if_usb.c | 232 +++---
drivers/net/wireless/libertas/if_usb.h | 14 +-
drivers/net/wireless/libertas/join.c | 157 ++---
drivers/net/wireless/libertas/main.c | 995 ++++++++++++--------------
drivers/net/wireless/libertas/rx.c | 187 ++---
drivers/net/wireless/libertas/scan.c | 1048 ++++++++++++---------------
drivers/net/wireless/libertas/scan.h | 6 +-
drivers/net/wireless/libertas/tx.c | 240 +++----
drivers/net/wireless/libertas/wext.c | 496 +++++++------
drivers/net/wireless/orinoco.c | 11 +-
34 files changed, 3002 insertions(+), 3071 deletions(-)
create mode 100644 drivers/net/wireless/libertas/cmd.h
Omnibus patch attached as 'upstream-jgarzik.patch.bz2' due to size
constraints.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 65020 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-04 13:55 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-04 13:55 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
On Tue, Nov 27, 2007 at 09:47:48AM -0500, John W. Linville wrote:
> A slew of patches for 2.6.25...
Disregard this request -- new request coming shortly.
John
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-04 13:55 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-12-04 13:55 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-wireless-u79uwXL29TY76Z2rM5mHXA
On Tue, Nov 27, 2007 at 09:47:48AM -0500, John W. Linville wrote:
> A slew of patches for 2.6.25...
Disregard this request -- new request coming shortly.
John
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-11-27 16:12 ` Dan Williams
@ 2007-11-28 7:25 ` Holger Schurig
0 siblings, 0 replies; 42+ messages in thread
From: Holger Schurig @ 2007-11-28 7:25 UTC (permalink / raw)
To: linux-wireless; +Cc: Dan Williams, John W. Linville
> But then again it's dealing with hardware bits. I do have an
> 8385 CF card on the way though.
Ah, that explains your question in #libertas on freenode.org:
[23:15] <dcbw> schurig: what CF parts are you using, off the shelf ones or the Ambicom WL54-CF or something?
The WLAN card that I have is unmarked. Is has a blue label on it
says just
WLAN CF Card
802.11b/g
and on the back side is just a MAC address. No FCC number, no
nothing. I guess it was an engeneering sample. However, the MAC
address begins with 00:16:41 and according to
http://standards.ieee.org/regauth/oui/index.shtml
this is therefore an USI card, or manufactured by them.
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-11-27 16:08 ` Holger Schurig
2007-11-27 16:12 ` Dan Williams
@ 2007-11-27 18:55 ` John W. Linville
1 sibling, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-11-27 18:55 UTC (permalink / raw)
To: Holger Schurig; +Cc: linux-wireless
On Tue, Nov 27, 2007 at 05:08:54PM +0100, Holger Schurig wrote:
> > A slew of patches for 2.6.25...
>
> You should consider my patch with the subject
>
> [PATCH] libertas: let more than one MAC event through
>
> as well. As Dan Williams doesn't have the hardware, he can't
> really ack or nack this patch anyway :-)
Don't worry, there are still many more patches in my queue... :-)
John
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-11-27 16:08 ` Holger Schurig
@ 2007-11-27 16:12 ` Dan Williams
2007-11-28 7:25 ` Holger Schurig
2007-11-27 18:55 ` John W. Linville
1 sibling, 1 reply; 42+ messages in thread
From: Dan Williams @ 2007-11-27 16:12 UTC (permalink / raw)
To: Holger Schurig; +Cc: linux-wireless, John W. Linville
On Tue, 2007-11-27 at 17:08 +0100, Holger Schurig wrote:
> > A slew of patches for 2.6.25...
>
> You should consider my patch with the subject
>
> [PATCH] libertas: let more than one MAC event through
>
> as well. As Dan Williams doesn't have the hardware, he can't
> really ack or nack this patch anyway :-)
I can ack it insofar as it's a 1-liner and doesn't look like it'll screw
a lot of stuff up :) But then again it's dealing with hardware bits. I
do have an 8385 CF card on the way though.
Dan
> -
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-11-27 14:47 John W. Linville
@ 2007-11-27 16:08 ` Holger Schurig
2007-11-27 16:12 ` Dan Williams
2007-11-27 18:55 ` John W. Linville
2007-12-04 13:55 ` John W. Linville
1 sibling, 2 replies; 42+ messages in thread
From: Holger Schurig @ 2007-11-27 16:08 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
> A slew of patches for 2.6.25...
You should consider my patch with the subject
[PATCH] libertas: let more than one MAC event through
as well. As Dan Williams doesn't have the hardware, he can't
really ack or nack this patch anyway :-)
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-11-27 14:47 John W. Linville
2007-11-27 16:08 ` Holger Schurig
2007-12-04 13:55 ` John W. Linville
0 siblings, 2 replies; 42+ messages in thread
From: John W. Linville @ 2007-11-27 14:47 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
[-- Attachment #1: Type: text/plain, Size: 7556 bytes --]
Jeff,
A slew of patches for 2.6.25...
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 02e063b58b7c7084bae3d599c54dcf26c8efa9b7:
Komuro (1):
axnet_cs: use spin_lock_irqsave instead of spin_lock + disable_irq
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Christoph Hellwig (1):
iwlwifi: cleanup namespace
Frank Lichtenheld (1):
b43: silence a bogus gcc warning
Holger Schurig (2):
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
Ivo van Doorn (1):
rt2x00: Move duplicate code into rt2x00pci_txdone()
John W. Linville (1):
iwlwifi: remove redundant initialization of final_mode
Larry Finger (6):
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
Mattias Nissler (1):
rt2x00: Allow rt61 to catch up after a missing tx report
Mohamed Abbas (1):
iwl4965: fix cannot find a suitable rate issue
Reinette Chatre (1):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
Stefano Brivio (6):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
Zhu Yi (3):
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_changed
MAINTAINERS | 10 +-
drivers/net/b44.c | 8 +-
drivers/net/wireless/b43/Makefile | 1 +
drivers/net/wireless/b43/b43.h | 4 +
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/leds.c | 10 +-
drivers/net/wireless/b43/lo.c | 8 +-
drivers/net/wireless/b43/main.c | 37 +-
drivers/net/wireless/b43/main.h | 2 +-
drivers/net/wireless/b43/phy.c | 672 ++-----
drivers/net/wireless/b43/phy.h | 18 +-
drivers/net/wireless/b43/tables.c | 103 +-
drivers/net/wireless/b43/tables.h | 12 +-
drivers/net/wireless/b43/wa.c | 665 ++++++
drivers/net/wireless/b43/wa.h | 7 +
drivers/net/wireless/b43/xmit.c | 4 +-
drivers/net/wireless/b43legacy/Kconfig | 8 +-
drivers/net/wireless/b43legacy/ilt.c | 2 +-
drivers/net/wireless/b43legacy/leds.c | 10 +-
drivers/net/wireless/b43legacy/main.c | 155 +-
drivers/net/wireless/b43legacy/main.h | 2 +-
drivers/net/wireless/b43legacy/phy.c | 40 +-
drivers/net/wireless/b43legacy/phy.h | 2 +-
drivers/net/wireless/b43legacy/radio.c | 14 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 16 +-
drivers/net/wireless/b43legacy/rfkill.h | 8 +-
drivers/net/wireless/b43legacy/xmit.c | 7 +-
drivers/net/wireless/iwlwifi/Kconfig | 14 +-
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 190 +-
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 50 +-
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 256 ++--
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 26 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 532 +++---
drivers/net/wireless/iwlwifi/iwl-3945.h | 376 ++--
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 200 +-
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 72 +-
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 256 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 313 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 32 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 762 ++++----
drivers/net/wireless/iwlwifi/iwl-4965.h | 452 +++---
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2208 ++++++++++----------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 2327 +++++++++++-----------
drivers/net/wireless/libertas/11d.c | 72 +-
drivers/net/wireless/libertas/11d.h | 24 +-
drivers/net/wireless/libertas/assoc.c | 254 ++--
drivers/net/wireless/libertas/assoc.h | 12 +-
drivers/net/wireless/libertas/cmd.c | 274 ++--
drivers/net/wireless/libertas/cmdresp.c | 174 +-
drivers/net/wireless/libertas/debugfs.c | 402 ++--
drivers/net/wireless/libertas/debugfs.h | 12 +-
drivers/net/wireless/libertas/decl.h | 84 +-
drivers/net/wireless/libertas/defs.h | 54 +-
drivers/net/wireless/libertas/dev.h | 42 +-
drivers/net/wireless/libertas/ethtool.c | 52 +-
drivers/net/wireless/libertas/host.h | 6 +-
drivers/net/wireless/libertas/hostcmd.h | 12 +-
drivers/net/wireless/libertas/if_cs.c | 42 +-
drivers/net/wireless/libertas/if_sdio.c | 46 +-
drivers/net/wireless/libertas/if_sdio.h | 4 +-
drivers/net/wireless/libertas/if_usb.c | 86 +-
drivers/net/wireless/libertas/if_usb.h | 4 +-
drivers/net/wireless/libertas/join.c | 130 +-
drivers/net/wireless/libertas/join.h | 38 +-
drivers/net/wireless/libertas/main.c | 528 +++---
drivers/net/wireless/libertas/rx.c | 66 +-
drivers/net/wireless/libertas/scan.c | 184 +-
drivers/net/wireless/libertas/scan.h | 86 +-
drivers/net/wireless/libertas/tx.c | 38 +-
drivers/net/wireless/libertas/types.h | 6 +-
drivers/net/wireless/libertas/wext.c | 476 +++---
drivers/net/wireless/libertas/wext.h | 14 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 20 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 20 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 33 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 4 +-
drivers/net/wireless/rt2x00/rt61pci.c | 32 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/main.c | 10 +-
drivers/ssb/pci.c | 221 +--
include/linux/ssb/ssb.h | 71 +-
include/linux/ssb/ssb_regs.h | 59 +-
86 files changed, 7082 insertions(+), 6676 deletions(-)
create mode 100644 drivers/net/wireless/b43/wa.c
create mode 100644 drivers/net/wireless/b43/wa.h
Omnibus patch attached as upstream-jgarzik.patch.bz2 due to size
constraints.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 170301 bytes --]
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-11-06 1:16 ` John W. Linville
(?)
@ 2007-11-06 17:43 ` Jeff Garzik
-1 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-11-06 17:43 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, linux-wireless
John W. Linville wrote:
> Jeff,
>
> Here is a slew of patches targeted for 2.6.25. There are a bunch
> of rt2x00, iwl3945, iwl4965, b43, and b43legacy patches, as well as
> a few others. I'm sorry I didn't spread this out better -- I got a
> bit behind... :-(
>
> Thanks,
>
> John
>
> ---
>
> Individual patches are available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-11-06 1:16 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-11-06 1:16 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
Jeff,
Here is a slew of patches targeted for 2.6.25. There are a bunch
of rt2x00, iwl3945, iwl4965, b43, and b43legacy patches, as well as
a few others. I'm sorry I didn't spread this out better -- I got a
bit behind... :-(
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
---
The following changes since commit 5d66f151ac7cb5162f201fe2996c6e01f0323f37:
Linus Torvalds (1):
Merge master.kernel.org:/.../gregkh/pci-2.6
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Adam Baker (2):
rt2x00: Unconstify rt2x00dev
rt2x00: Place mutex around USB register access
Christoph Hellwig (3):
iwlwifi: mark more functions/variables static
iwlwifi: keep 3945 and 4965 headers separate
iwlwifi: cleanup Kconfig and ifdefs to split 3945 and 4965
Dan Williams (1):
orinoco: more reliable scan handling
Dmitry Torokhov (1):
P54: use temporary variables to reduce size of generated code
Emmanuel Grumbach (3):
iwlwifi-ht: move 4965 SCD registers to iwl-prph.h
iwlwifi: move 3945 SCD registers to iwl-prph.h
iwlwifi: add 5965 SCD registers to iwl-prph.h
Holger Schurig (1):
libertas: move wlan_*_association_work from header to c file
Ian Schram (5):
iwlwifi: fix various spelling and typos
iwlwifi: rename iwl_eeprom_aqcuire_semaphore to _acquire_
iwlwifi: Two comments in iwl-3945.c were longer than 80 columns
iwlwifi: Beautify by removing superfluous newlines and code
iwlwifi: remove late null-check and duplicate bug_on
Ivo van Doorn (15):
rt2x00: Move quality statistics into seperate structure
rt2x00: Use enum defines
rt2x00: Correctly translate mac80211 antenna setup to rt2x00
rt2x00: SW diversity should default to antenna B
rt2x00: Remove rt2x00_clear_link
rt2x00: Implement SW diversity
rt2x00: Cleanup if-statements
rt2x00: Release rt2x00 2.0.11
rt2x00: Disable RX when switching antenna
rt2x00: Split rt61/rt73 antenna selection into RX and TX antenna
rt2x00: Input-polldev requires input device
rt2x00: Detect initial rfkill state on register
rt2x00: Remove unused variables
rt2x00: Remove data_desc structure
rt2x00: Release rt2x00 2.0.12
Jes Sorensen (1):
iwlwifi: disable interrupts before calling request_irq
Larry Finger (4):
b43legacy: LED triggers support
b43legacy: RF-kill support
b43legacy: Use input-polldev for the rfkill switch
b43legacy: Rewrite pwork locking
Matthias Kaehlcke (1):
Prism54: Convert mgmt_sem to the mutex API
Mattias Nissler (4):
rt2x00: Fix antenna selection.
rt2x00: Rework rt61 antenna selection.
rt2x00: Rework rt73 antenna selection
rt2x00: Correctly set ACK bit in tx descriptors
Michael Buesch (7):
b43legacy: Remove set_key callback
b43: Dereference of wl->current_dev must be protected by wl->mutex
b43: Use the retry limit parameters from mac80211
b43: consistent naming for ieee80211_ops
b43: Fix rfkill callback deadlock
b43: debugfs SHM read buffer overrun fix
b43: Rewrite and fix rfkill init
Roel Kluin (1):
wireless: fix '!x & y' typo's
Tomas Winkler (11):
iwlwifi: Add erp_ie_changed hanlder
iwlwifi: renaming last_used and first_empty
iwlwifi: rs-4965 fix return values
iwlwifi: add TGN flag to qos parameters
iwlwifi: remove cck_flag from iwl_driver_hw_info
iwlwifi: remove cck_power_index_compensation
iwlwifi: using PCI_DEVICE macro
iwlwifi: replace restricted_reg with prph
iwlwifi: rename restricted_mem to targ_mem
iwlwifi: replacing wording restricted to nic access in iwl-io
iwlwifi: Renames struct fw_image_desc to struct fw_desc
Zhu Yi (2):
iwlwifi: Update iwlwifi version stamp to 1.1.18
iwlwifi: Update iwlwifi version stamp to 1.1.19
mabbas (2):
iwlwifi: accept up to 4K frame size on Rx side to fit A-MSDU frame
iwl4965: exclude 60M rate from probe request
drivers/net/wireless/Makefile | 3 +-
drivers/net/wireless/airo.c | 2 +-
drivers/net/wireless/atmel.c | 2 +-
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/main.c | 159 ++--
drivers/net/wireless/b43/rfkill.c | 115 +--
drivers/net/wireless/b43/rfkill.h | 14 +-
drivers/net/wireless/b43/xmit.c | 3 +-
drivers/net/wireless/b43legacy/Kconfig | 12 +
drivers/net/wireless/b43legacy/Makefile | 29 +-
drivers/net/wireless/b43legacy/b43legacy.h | 11 +-
drivers/net/wireless/b43legacy/leds.c | 413 ++++-----
drivers/net/wireless/b43legacy/leds.h | 61 +-
drivers/net/wireless/b43legacy/main.c | 214 ++---
drivers/net/wireless/b43legacy/radio.c | 15 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 185 ++++
drivers/net/wireless/b43legacy/rfkill.h | 59 ++
drivers/net/wireless/iwlwifi/Kconfig | 169 ++--
.../{iwl-commands.h => iwl-3945-commands.h} | 275 +-----
.../iwlwifi/{iwl-debug.h => iwl-3945-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 629 ++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 8 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 182 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 963 ++++++++++++++++++-
.../{iwl-commands.h => iwl-4965-commands.h} | 154 +---
.../iwlwifi/{iwl-debug.h => iwl-4965-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 711 +++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 149 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 305 +++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 1035 +++++++++++++++++++-
drivers/net/wireless/iwlwifi/iwl-channel.h | 161 ---
drivers/net/wireless/iwlwifi/iwl-eeprom.h | 336 -------
drivers/net/wireless/iwlwifi/iwl-hw.h | 537 ----------
drivers/net/wireless/iwlwifi/iwl-priv.h | 308 ------
drivers/net/wireless/iwlwifi/iwl-prph.h | 53 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 405 ++++----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 529 +++++-----
drivers/net/wireless/iwlwifi/iwlwifi.h | 708 -------------
drivers/net/wireless/libertas/assoc.h | 18 -
drivers/net/wireless/libertas/wext.c | 52 +-
drivers/net/wireless/orinoco.c | 541 ++++++-----
drivers/net/wireless/orinoco.h | 12 +-
drivers/net/wireless/p54common.c | 2 +-
drivers/net/wireless/p54pci.c | 77 +-
drivers/net/wireless/prism54/isl_ioctl.c | 4 +-
drivers/net/wireless/prism54/islpci_dev.c | 2 +-
drivers/net/wireless/prism54/islpci_dev.h | 3 +-
drivers/net/wireless/prism54/islpci_mgt.c | 4 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 104 ++-
drivers/net/wireless/rt2x00/rt2400pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 112 ++--
drivers/net/wireless/rt2x00/rt2500pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 169 +++--
drivers/net/wireless/rt2x00/rt2500usb.h | 17 +-
drivers/net/wireless/rt2x00/rt2x00.h | 192 +++-
drivers/net/wireless/rt2x00/rt2x00config.c | 95 ++-
drivers/net/wireless/rt2x00/rt2x00debug.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 212 ++++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 2 +
drivers/net/wireless/rt2x00/rt2x00pci.c | 4 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 8 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 44 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 23 +-
drivers/net/wireless/rt2x00/rt2x00usb.c | 38 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 19 +-
drivers/net/wireless/rt2x00/rt61pci.c | 332 ++++---
drivers/net/wireless/rt2x00/rt61pci.h | 14 +-
drivers/net/wireless/rt2x00/rt73usb.c | 198 +++--
drivers/net/wireless/rt2x00/rt73usb.h | 14 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 2 +-
net/ieee80211/ieee80211_wx.c | 2 +-
76 files changed, 6655 insertions(+), 5189 deletions(-)
create mode 100644 drivers/net/wireless/b43legacy/rfkill.c
create mode 100644 drivers/net/wireless/b43legacy/rfkill.h
copy drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-3945-commands.h} (86%)
copy drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-3945-debug.h} (97%)
copy drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} (50%)
rename drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-4965-commands.h} (93%)
rename drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-4965-debug.h} (97%)
rename drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} (50%)
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-channel.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-eeprom.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-hw.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-priv.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwlwifi.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzik.patch
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-11-06 1:16 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-11-06 1:16 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-wireless-u79uwXL29TY76Z2rM5mHXA
Jeff,
Here is a slew of patches targeted for 2.6.25. There are a bunch
of rt2x00, iwl3945, iwl4965, b43, and b43legacy patches, as well as
a few others. I'm sorry I didn't spread this out better -- I got a
bit behind... :-(
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
---
The following changes since commit 5d66f151ac7cb5162f201fe2996c6e01f0323f37:
Linus Torvalds (1):
Merge master.kernel.org:/.../gregkh/pci-2.6
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Adam Baker (2):
rt2x00: Unconstify rt2x00dev
rt2x00: Place mutex around USB register access
Christoph Hellwig (3):
iwlwifi: mark more functions/variables static
iwlwifi: keep 3945 and 4965 headers separate
iwlwifi: cleanup Kconfig and ifdefs to split 3945 and 4965
Dan Williams (1):
orinoco: more reliable scan handling
Dmitry Torokhov (1):
P54: use temporary variables to reduce size of generated code
Emmanuel Grumbach (3):
iwlwifi-ht: move 4965 SCD registers to iwl-prph.h
iwlwifi: move 3945 SCD registers to iwl-prph.h
iwlwifi: add 5965 SCD registers to iwl-prph.h
Holger Schurig (1):
libertas: move wlan_*_association_work from header to c file
Ian Schram (5):
iwlwifi: fix various spelling and typos
iwlwifi: rename iwl_eeprom_aqcuire_semaphore to _acquire_
iwlwifi: Two comments in iwl-3945.c were longer than 80 columns
iwlwifi: Beautify by removing superfluous newlines and code
iwlwifi: remove late null-check and duplicate bug_on
Ivo van Doorn (15):
rt2x00: Move quality statistics into seperate structure
rt2x00: Use enum defines
rt2x00: Correctly translate mac80211 antenna setup to rt2x00
rt2x00: SW diversity should default to antenna B
rt2x00: Remove rt2x00_clear_link
rt2x00: Implement SW diversity
rt2x00: Cleanup if-statements
rt2x00: Release rt2x00 2.0.11
rt2x00: Disable RX when switching antenna
rt2x00: Split rt61/rt73 antenna selection into RX and TX antenna
rt2x00: Input-polldev requires input device
rt2x00: Detect initial rfkill state on register
rt2x00: Remove unused variables
rt2x00: Remove data_desc structure
rt2x00: Release rt2x00 2.0.12
Jes Sorensen (1):
iwlwifi: disable interrupts before calling request_irq
Larry Finger (4):
b43legacy: LED triggers support
b43legacy: RF-kill support
b43legacy: Use input-polldev for the rfkill switch
b43legacy: Rewrite pwork locking
Matthias Kaehlcke (1):
Prism54: Convert mgmt_sem to the mutex API
Mattias Nissler (4):
rt2x00: Fix antenna selection.
rt2x00: Rework rt61 antenna selection.
rt2x00: Rework rt73 antenna selection
rt2x00: Correctly set ACK bit in tx descriptors
Michael Buesch (7):
b43legacy: Remove set_key callback
b43: Dereference of wl->current_dev must be protected by wl->mutex
b43: Use the retry limit parameters from mac80211
b43: consistent naming for ieee80211_ops
b43: Fix rfkill callback deadlock
b43: debugfs SHM read buffer overrun fix
b43: Rewrite and fix rfkill init
Roel Kluin (1):
wireless: fix '!x & y' typo's
Tomas Winkler (11):
iwlwifi: Add erp_ie_changed hanlder
iwlwifi: renaming last_used and first_empty
iwlwifi: rs-4965 fix return values
iwlwifi: add TGN flag to qos parameters
iwlwifi: remove cck_flag from iwl_driver_hw_info
iwlwifi: remove cck_power_index_compensation
iwlwifi: using PCI_DEVICE macro
iwlwifi: replace restricted_reg with prph
iwlwifi: rename restricted_mem to targ_mem
iwlwifi: replacing wording restricted to nic access in iwl-io
iwlwifi: Renames struct fw_image_desc to struct fw_desc
Zhu Yi (2):
iwlwifi: Update iwlwifi version stamp to 1.1.18
iwlwifi: Update iwlwifi version stamp to 1.1.19
mabbas (2):
iwlwifi: accept up to 4K frame size on Rx side to fit A-MSDU frame
iwl4965: exclude 60M rate from probe request
drivers/net/wireless/Makefile | 3 +-
drivers/net/wireless/airo.c | 2 +-
drivers/net/wireless/atmel.c | 2 +-
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/main.c | 159 ++--
drivers/net/wireless/b43/rfkill.c | 115 +--
drivers/net/wireless/b43/rfkill.h | 14 +-
drivers/net/wireless/b43/xmit.c | 3 +-
drivers/net/wireless/b43legacy/Kconfig | 12 +
drivers/net/wireless/b43legacy/Makefile | 29 +-
drivers/net/wireless/b43legacy/b43legacy.h | 11 +-
drivers/net/wireless/b43legacy/leds.c | 413 ++++-----
drivers/net/wireless/b43legacy/leds.h | 61 +-
drivers/net/wireless/b43legacy/main.c | 214 ++---
drivers/net/wireless/b43legacy/radio.c | 15 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 185 ++++
drivers/net/wireless/b43legacy/rfkill.h | 59 ++
drivers/net/wireless/iwlwifi/Kconfig | 169 ++--
.../{iwl-commands.h => iwl-3945-commands.h} | 275 +-----
.../iwlwifi/{iwl-debug.h => iwl-3945-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 629 ++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 8 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 182 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 963 ++++++++++++++++++-
.../{iwl-commands.h => iwl-4965-commands.h} | 154 +---
.../iwlwifi/{iwl-debug.h => iwl-4965-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 711 +++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 149 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 305 +++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 1035 +++++++++++++++++++-
drivers/net/wireless/iwlwifi/iwl-channel.h | 161 ---
drivers/net/wireless/iwlwifi/iwl-eeprom.h | 336 -------
drivers/net/wireless/iwlwifi/iwl-hw.h | 537 ----------
drivers/net/wireless/iwlwifi/iwl-priv.h | 308 ------
drivers/net/wireless/iwlwifi/iwl-prph.h | 53 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 405 ++++----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 529 +++++-----
drivers/net/wireless/iwlwifi/iwlwifi.h | 708 -------------
drivers/net/wireless/libertas/assoc.h | 18 -
drivers/net/wireless/libertas/wext.c | 52 +-
drivers/net/wireless/orinoco.c | 541 ++++++-----
drivers/net/wireless/orinoco.h | 12 +-
drivers/net/wireless/p54common.c | 2 +-
drivers/net/wireless/p54pci.c | 77 +-
drivers/net/wireless/prism54/isl_ioctl.c | 4 +-
drivers/net/wireless/prism54/islpci_dev.c | 2 +-
drivers/net/wireless/prism54/islpci_dev.h | 3 +-
drivers/net/wireless/prism54/islpci_mgt.c | 4 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 104 ++-
drivers/net/wireless/rt2x00/rt2400pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 112 ++--
drivers/net/wireless/rt2x00/rt2500pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 169 +++--
drivers/net/wireless/rt2x00/rt2500usb.h | 17 +-
drivers/net/wireless/rt2x00/rt2x00.h | 192 +++-
drivers/net/wireless/rt2x00/rt2x00config.c | 95 ++-
drivers/net/wireless/rt2x00/rt2x00debug.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 212 ++++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 2 +
drivers/net/wireless/rt2x00/rt2x00pci.c | 4 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 8 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 44 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 23 +-
drivers/net/wireless/rt2x00/rt2x00usb.c | 38 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 19 +-
drivers/net/wireless/rt2x00/rt61pci.c | 332 ++++---
drivers/net/wireless/rt2x00/rt61pci.h | 14 +-
drivers/net/wireless/rt2x00/rt73usb.c | 198 +++--
drivers/net/wireless/rt2x00/rt73usb.h | 14 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 2 +-
net/ieee80211/ieee80211_wx.c | 2 +-
76 files changed, 6655 insertions(+), 5189 deletions(-)
create mode 100644 drivers/net/wireless/b43legacy/rfkill.c
create mode 100644 drivers/net/wireless/b43legacy/rfkill.h
copy drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-3945-commands.h} (86%)
copy drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-3945-debug.h} (97%)
copy drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} (50%)
rename drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-4965-commands.h} (93%)
rename drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-4965-debug.h} (97%)
rename drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} (50%)
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-channel.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-eeprom.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-hw.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-priv.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwlwifi.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzik.patch
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-09-15 13:21 ` John W. Linville
(?)
@ 2007-09-18 1:54 ` Zhu Yi
-1 siblings, 0 replies; 42+ messages in thread
From: Zhu Yi @ 2007-09-18 1:54 UTC (permalink / raw)
To: John W. Linville; +Cc: jeff, netdev, linux-wireless
On Sat, 2007-09-15 at 09:21 -0400, John W. Linville wrote:
> Jeff,
>
> A few more for 2.6.24...
Hi John, how is the iwlwifi driver going? Would you like to push it to
Jeff for .24? Or you'd like me to create a patch against this branch?
Thanks,
-yi
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-09-15 13:21 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-09-15 13:21 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
Jeff,
A few more for 2.6.24...
Thanks,
John
---
The following changes since commit 18d256761aa268fd2fb113c4fd26c400431f1dc1:
Jeff Garzik (1):
Merge branch 'stats' into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Jesper Juhl (1):
zd1211rw: Don't needlessly initialize variable to NULL in zd_chip
Larry Finger (1):
bcm43xx: Change radio hardware switch status printk from debug to regular
Ulrich Kunitz (1):
zd1211rw: add USB id for Telegent TG54USB WLAN adapter
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 4 ++--
drivers/net/wireless/zd1211rw/zd_chip.c | 2 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 618d1a2..4d84631 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -2380,7 +2380,7 @@ static int bcm43xx_chip_init(struct bcm43xx_private *bcm)
goto err_gpio_cleanup;
bcm43xx_radio_turn_on(bcm);
bcm->radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
- dprintk(KERN_INFO PFX "Radio %s by hardware\n",
+ printk(KERN_INFO PFX "Radio %s by hardware\n",
(bcm->radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_write16(bcm, 0x03E6, 0x0000);
@@ -3129,7 +3129,7 @@ static void bcm43xx_periodic_every1sec(struct bcm43xx_private *bcm)
radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
if (unlikely(bcm->radio_hw_enable != radio_hw_enable)) {
bcm->radio_hw_enable = radio_hw_enable;
- dprintk(KERN_INFO PFX "Radio hardware status changed to %s\n",
+ printk(KERN_INFO PFX "Radio hardware status changed to %s\n",
(radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_leds_update(bcm, 0);
}
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 4959042..06244d8 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -106,7 +106,7 @@ int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr
{
int r;
int i;
- zd_addr_t *a16 = (zd_addr_t *)NULL;
+ zd_addr_t *a16;
u16 *v16;
unsigned int count16;
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index e49628b..895ff84 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -55,6 +55,7 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 },
+ { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 },
/* ZD1211B */
{ USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-09-15 13:21 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-09-15 13:21 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-wireless-u79uwXL29TY76Z2rM5mHXA
Jeff,
A few more for 2.6.24...
Thanks,
John
---
The following changes since commit 18d256761aa268fd2fb113c4fd26c400431f1dc1:
Jeff Garzik (1):
Merge branch 'stats' into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Jesper Juhl (1):
zd1211rw: Don't needlessly initialize variable to NULL in zd_chip
Larry Finger (1):
bcm43xx: Change radio hardware switch status printk from debug to regular
Ulrich Kunitz (1):
zd1211rw: add USB id for Telegent TG54USB WLAN adapter
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 4 ++--
drivers/net/wireless/zd1211rw/zd_chip.c | 2 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 618d1a2..4d84631 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -2380,7 +2380,7 @@ static int bcm43xx_chip_init(struct bcm43xx_private *bcm)
goto err_gpio_cleanup;
bcm43xx_radio_turn_on(bcm);
bcm->radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
- dprintk(KERN_INFO PFX "Radio %s by hardware\n",
+ printk(KERN_INFO PFX "Radio %s by hardware\n",
(bcm->radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_write16(bcm, 0x03E6, 0x0000);
@@ -3129,7 +3129,7 @@ static void bcm43xx_periodic_every1sec(struct bcm43xx_private *bcm)
radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
if (unlikely(bcm->radio_hw_enable != radio_hw_enable)) {
bcm->radio_hw_enable = radio_hw_enable;
- dprintk(KERN_INFO PFX "Radio hardware status changed to %s\n",
+ printk(KERN_INFO PFX "Radio hardware status changed to %s\n",
(radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_leds_update(bcm, 0);
}
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 4959042..06244d8 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -106,7 +106,7 @@ int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr
{
int r;
int i;
- zd_addr_t *a16 = (zd_addr_t *)NULL;
+ zd_addr_t *a16;
u16 *v16;
unsigned int count16;
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index e49628b..895ff84 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -55,6 +55,7 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 },
+ { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 },
/* ZD1211B */
{ USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-31 13:44 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-08-31 13:44 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
John W. Linville wrote:
> Jeff,
>=20
> A few more for 2.6.24 -- mostly libertas.
>=20
> Individual patches are available here:
>=20
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/=
upstream-jgarzik/
>=20
> Thanks!
>=20
> John
>=20
> ---
>=20
> The following changes since commit e54cfa621f4cca9cca500019aa600c71d2=
0f0592:
> Jeff Garzik (1):
> Merge branch 'upstream-jgarzik' of git://git.kernel.org/.../l=
inville/wireless-2.6 into upstream
>=20
> are available in the git repository at:
>=20
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6=
=2Egit upstream-jgarzik
>=20
> Andrew Morton (1):
> libertas: printk warning fixes
>=20
> Brajesh Dave (1):
> libertas: advertise 11g ad-hoc rates
>=20
> Dan Williams (4):
> libertas: fix inadvertant removal of bits from commit 831441862=
956fffa17b9801db37e6ea1650b0f69
> libertas: reorganize and simplify init sequence
> libertas: don't stomp on interface-specific private data
> libertas: send reset command directly instead of calling libert=
as_reset_device
>=20
> Jesper Juhl (1):
> net: Kill some unneeded allocation return value casts in libert=
as
>=20
> Johannes Berg (1):
> rtl8187: remove IEEE80211_HW_DATA_NULLFUNC_ACK
>=20
> John W. Linville (1):
> libertas: remove unused adhoc_rates_b definition
>=20
> Marek Va=C5=A1ut (1):
> libertas: region code values specified as 8bit
>=20
> Pierre Ossman (1):
> libertas: properly end commands on hardware failure
>=20
> drivers/net/wireless/libertas/cmd.c | 2 +
> drivers/net/wireless/libertas/cmdresp.c | 6 +-
> drivers/net/wireless/libertas/debugfs.c | 2 +-
> drivers/net/wireless/libertas/decl.h | 3 +-
> drivers/net/wireless/libertas/dev.h | 4 -
> drivers/net/wireless/libertas/ethtool.c | 3 +-
> drivers/net/wireless/libertas/if_cs.c | 58 +----
> drivers/net/wireless/libertas/if_usb.c | 371 +++++++++++++--------=
--------
> drivers/net/wireless/libertas/if_usb.h | 4 +-
> drivers/net/wireless/libertas/join.c | 7 +-
> drivers/net/wireless/libertas/main.c | 408 +++++++++++++--------=
----------
> drivers/net/wireless/rtl8187_dev.c | 3 +-
> 12 files changed, 354 insertions(+), 517 deletions(-)
pulled
-
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-31 13:44 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-08-31 13:44 UTC (permalink / raw)
To: John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
John W. Linville wrote:
> Jeff,
>
> A few more for 2.6.24 -- mostly libertas.
>
> Individual patches are available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
>
> Thanks!
>
> John
>
> ---
>
> The following changes since commit e54cfa621f4cca9cca500019aa600c71d20f0592:
> Jeff Garzik (1):
> Merge branch 'upstream-jgarzik' of git://git.kernel.org/.../linville/wireless-2.6 into upstream
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Andrew Morton (1):
> libertas: printk warning fixes
>
> Brajesh Dave (1):
> libertas: advertise 11g ad-hoc rates
>
> Dan Williams (4):
> libertas: fix inadvertant removal of bits from commit 831441862956fffa17b9801db37e6ea1650b0f69
> libertas: reorganize and simplify init sequence
> libertas: don't stomp on interface-specific private data
> libertas: send reset command directly instead of calling libertas_reset_device
>
> Jesper Juhl (1):
> net: Kill some unneeded allocation return value casts in libertas
>
> Johannes Berg (1):
> rtl8187: remove IEEE80211_HW_DATA_NULLFUNC_ACK
>
> John W. Linville (1):
> libertas: remove unused adhoc_rates_b definition
>
> Marek Vašut (1):
> libertas: region code values specified as 8bit
>
> Pierre Ossman (1):
> libertas: properly end commands on hardware failure
>
> drivers/net/wireless/libertas/cmd.c | 2 +
> drivers/net/wireless/libertas/cmdresp.c | 6 +-
> drivers/net/wireless/libertas/debugfs.c | 2 +-
> drivers/net/wireless/libertas/decl.h | 3 +-
> drivers/net/wireless/libertas/dev.h | 4 -
> drivers/net/wireless/libertas/ethtool.c | 3 +-
> drivers/net/wireless/libertas/if_cs.c | 58 +----
> drivers/net/wireless/libertas/if_usb.c | 371 +++++++++++++----------------
> drivers/net/wireless/libertas/if_usb.h | 4 +-
> drivers/net/wireless/libertas/join.c | 7 +-
> drivers/net/wireless/libertas/main.c | 408 +++++++++++++------------------
> drivers/net/wireless/rtl8187_dev.c | 3 +-
> 12 files changed, 354 insertions(+), 517 deletions(-)
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-28 23:17 John W. Linville
2007-08-31 13:44 ` Jeff Garzik
0 siblings, 1 reply; 42+ messages in thread
From: John W. Linville @ 2007-08-28 23:17 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
Jeff,
A few more for 2.6.24 -- mostly libertas.
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/up=
stream-jgarzik/
Thanks!
John
---
The following changes since commit e54cfa621f4cca9cca500019aa600c71d20f=
0592:
Jeff Garzik (1):
Merge branch 'upstream-jgarzik' of git://git.kernel.org/.../lin=
ville/wireless-2.6 into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.g=
it upstream-jgarzik
Andrew Morton (1):
libertas: printk warning fixes
Brajesh Dave (1):
libertas: advertise 11g ad-hoc rates
Dan Williams (4):
libertas: fix inadvertant removal of bits from commit 83144186295=
6fffa17b9801db37e6ea1650b0f69
libertas: reorganize and simplify init sequence
libertas: don't stomp on interface-specific private data
libertas: send reset command directly instead of calling libertas=
_reset_device
Jesper Juhl (1):
net: Kill some unneeded allocation return value casts in libertas
Johannes Berg (1):
rtl8187: remove IEEE80211_HW_DATA_NULLFUNC_ACK
John W. Linville (1):
libertas: remove unused adhoc_rates_b definition
Marek Va=C5=A1ut (1):
libertas: region code values specified as 8bit
Pierre Ossman (1):
libertas: properly end commands on hardware failure
drivers/net/wireless/libertas/cmd.c | 2 +
drivers/net/wireless/libertas/cmdresp.c | 6 +-
drivers/net/wireless/libertas/debugfs.c | 2 +-
drivers/net/wireless/libertas/decl.h | 3 +-
drivers/net/wireless/libertas/dev.h | 4 -
drivers/net/wireless/libertas/ethtool.c | 3 +-
drivers/net/wireless/libertas/if_cs.c | 58 +----
drivers/net/wireless/libertas/if_usb.c | 371 +++++++++++++----------=
------
drivers/net/wireless/libertas/if_usb.h | 4 +-
drivers/net/wireless/libertas/join.c | 7 +-
drivers/net/wireless/libertas/main.c | 408 +++++++++++++----------=
--------
drivers/net/wireless/rtl8187_dev.c | 3 +-
12 files changed, 354 insertions(+), 517 deletions(-)
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless=
/libertas/cmd.c
index 98092b9..33dbed0 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -1009,7 +1009,9 @@ static int DownloadcommandToStation(wlan_private =
* priv,
if (ret !=3D 0) {
lbs_deb_host("DNLD_CMD: hw_host_to_card failed\n");
spin_lock_irqsave(&adapter->driver_lock, flags);
+ adapter->cur_cmd_retcode =3D ret;
__libertas_cleanup_and_insert_cmd(priv, adapter->cur_cmd);
+ adapter->nr_cmd_pending--;
adapter->cur_cmd =3D NULL;
spin_unlock_irqrestore(&adapter->driver_lock, flags);
goto done;
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wire=
less/libertas/cmdresp.c
index 4c36e63..d64ad87 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -174,7 +174,11 @@ static int wlan_ret_get_hw_spec(wlan_private * pri=
v,
lbs_deb_cmd("GET_HW_SPEC: hardware interface 0x%x, hardware spec 0x%0=
4x\n",
hwspec->hwifversion, hwspec->version);
=20
- adapter->regioncode =3D le16_to_cpu(hwspec->regioncode);
+ /* Clamp region code to 8-bit since FW spec indicates that it should
+ * only ever be 8-bit, even though the field size is 16-bit. Some fi=
rmware
+ * returns non-zero high 8 bits here.
+ */
+ adapter->regioncode =3D le16_to_cpu(hwspec->regioncode) & 0xFF;
=20
for (i =3D 0; i < MRVDRV_MAX_REGION_CODE; i++) {
/* use the region code to search for the index */
diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wire=
less/libertas/debugfs.c
index 6d95148..816f42e 100644
--- a/drivers/net/wireless/libertas/debugfs.c
+++ b/drivers/net/wireless/libertas/debugfs.c
@@ -1838,7 +1838,7 @@ static ssize_t wlan_debugfs_write(struct file *f,=
const char __user *buf,
char *p2;
struct debug_data *d =3D (struct debug_data *)f->private_data;
=20
- pdata =3D (char *)kmalloc(cnt, GFP_KERNEL);
+ pdata =3D kmalloc(cnt, GFP_KERNEL);
if (pdata =3D=3D NULL)
return 0;
=20
diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireles=
s/libertas/decl.h
index 095edf6..87fea9d 100644
--- a/drivers/net/wireless/libertas/decl.h
+++ b/drivers/net/wireless/libertas/decl.h
@@ -72,8 +72,9 @@ void libertas_send_iwevcustom_event(wlan_private * pr=
iv, s8 * str);
struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 ba=
nd,
int *cfp_no);
wlan_private *libertas_add_card(void *card, struct device *dmdev);
-int libertas_activate_card(wlan_private *priv);
int libertas_remove_card(wlan_private *priv);
+int libertas_start_card(wlan_private *priv);
+int libertas_stop_card(wlan_private *priv);
int libertas_add_mesh(wlan_private *priv, struct device *dev);
void libertas_remove_mesh(wlan_private *priv);
int libertas_reset_device(wlan_private *priv);
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless=
/libertas/dev.h
index a3c94d7..1fb807a 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -143,7 +143,6 @@ struct _wlan_private {
all other bits reserved 0 */
u8 dnld_sent;
=20
- const struct firmware *firmware;
struct device *hotplug_device;
=20
/** thread to service interrupts */
@@ -156,9 +155,6 @@ struct _wlan_private {
struct work_struct sync_channel;
=20
/** Hardware access */
- int (*hw_register_dev) (wlan_private * priv);
- int (*hw_unregister_dev) (wlan_private *);
- int (*hw_prog_firmware) (wlan_private *);
int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u=
16 nb);
int (*hw_get_int_status) (wlan_private * priv, u8 *);
int (*hw_read_event_cause) (wlan_private *);
diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wire=
less/libertas/ethtool.c
index ec99cb8..d793d84 100644
--- a/drivers/net/wireless/libertas/ethtool.c
+++ b/drivers/net/wireless/libertas/ethtool.c
@@ -60,8 +60,7 @@ static int libertas_ethtool_get_eeprom(struct net_dev=
ice *dev,
=20
// mutex_lock(&priv->mutex);
=20
- adapter->prdeeprom =3D
- (char *)kmalloc(eeprom->len+sizeof(regctrl), GFP_KERNEL);
+ adapter->prdeeprom =3D kmalloc(eeprom->len+sizeof(regctrl), GFP_KERNE=
L);
if (!adapter->prdeeprom)
return -ENOMEM;
memcpy(adapter->prdeeprom, ®ctrl, sizeof(regctrl));
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wirele=
ss/libertas/if_cs.c
index 888f023..09c87df 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -459,7 +459,7 @@ static int if_cs_prog_helper(struct if_cs_card *car=
d)
ret =3D -ENODEV;
goto done;
}
- lbs_deb_cs("helper size %d\n", fw->size);
+ lbs_deb_cs("helper size %td\n", fw->size);
=20
/* "Set the 5 bytes of the helper image to 0" */
/* Not needed, this contains an ARM branch instruction */
@@ -535,7 +535,7 @@ static int if_cs_prog_real(struct if_cs_card *card)
ret =3D -ENODEV;
goto done;
}
- lbs_deb_cs("fw size %d\n", fw->size);
+ lbs_deb_cs("fw size %td\n", fw->size);
=20
ret =3D if_cs_poll_while_fw_download(card, IF_CS_C_SQ_READ_LOW, IF_CS=
_C_SQ_HELPER_OK);
if (ret < 0) {
@@ -608,51 +608,6 @@ done:
/* Callback functions for libertas.ko */
/********************************************************************/
=20
-static int if_cs_register_dev(wlan_private *priv)
-{
- struct if_cs_card *card =3D (struct if_cs_card *)priv->card;
-
- lbs_deb_enter(LBS_DEB_CS);
-
- card->priv =3D priv;
-
- return 0;
-}
-
-
-static int if_cs_unregister_dev(wlan_private *priv)
-{
- lbs_deb_enter(LBS_DEB_CS);
-
- /*
- * Nothing special here. Because the device's power gets turned off
- * anyway, there's no need to send a RESET command like in if_usb.c
- */
-
- return 0;
-}
-
-
-/*
- * This callback is a dummy. The reason is that the USB code needs
- * to have various things set up in order to be able to download the
- * firmware. That's not needed in our case.
- *
- * On the contrary, if libertas_add_card() has been called and we're
- * then later called via libertas_activate_card(), but without a valid
- * firmware, then it's quite tedious to tear down the half-installed
- * card. Therefore, we download the firmware before calling adding/
- * activating the card in the first place. If that doesn't work, we
- * won't call into libertas.ko at all.
- */
-
-static int if_cs_prog_firmware(wlan_private *priv)
-{
- priv->adapter->fw_ready =3D 1;
- return 0;
-}
-
-
/* Send commands or data packets to the card */
static int if_cs_host_to_card(wlan_private *priv, u8 type, u8 *buf, u1=
6 nb)
{
@@ -902,14 +857,14 @@ static int if_cs_probe(struct pcmcia_device *p_de=
v)
}
=20
/* Store pointers to our call-back functions */
+ card->priv =3D priv;
priv->card =3D card;
- priv->hw_register_dev =3D if_cs_register_dev;
- priv->hw_unregister_dev =3D if_cs_unregister_dev;
- priv->hw_prog_firmware =3D if_cs_prog_firmware;
priv->hw_host_to_card =3D if_cs_host_to_card;
priv->hw_get_int_status =3D if_cs_get_int_status;
priv->hw_read_event_cause =3D if_cs_read_event_cause;
=20
+ priv->adapter->fw_ready =3D 1;
+
/* Now actually get the IRQ */
ret =3D request_irq(p_dev->irq.AssignedIRQ, if_cs_interrupt,
IRQF_SHARED, DRV_NAME, card);
@@ -919,7 +874,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
}
=20
/* And finally bring the card up */
- if (libertas_activate_card(priv) !=3D 0) {
+ if (libertas_start_card(priv) !=3D 0) {
lbs_pr_err("could not activate card\n");
goto out3;
}
@@ -951,6 +906,7 @@ static void if_cs_detach(struct pcmcia_device *p_de=
v)
=20
lbs_deb_enter(LBS_DEB_CS);
=20
+ libertas_stop_card(card->priv);
libertas_remove_card(card->priv);
if_cs_release(p_dev);
kfree(card);
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wirel=
ess/libertas/if_usb.c
index 364eae3..8a3c70e 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -45,14 +45,14 @@ MODULE_DEVICE_TABLE(usb, if_usb_table);
=20
static void if_usb_receive(struct urb *urb);
static void if_usb_receive_fwload(struct urb *urb);
-static int if_usb_register_dev(wlan_private * priv);
-static int if_usb_unregister_dev(wlan_private *);
-static int if_usb_prog_firmware(wlan_private *);
+static int if_usb_prog_firmware(struct usb_card_rec *cardp);
static int if_usb_host_to_card(wlan_private * priv, u8 type, u8 * payl=
oad, u16 nb);
static int if_usb_get_int_status(wlan_private * priv, u8 *);
static int if_usb_read_event_cause(wlan_private *);
-static int usb_tx_block(wlan_private *priv, u8 *payload, u16 nb);
+static int usb_tx_block(struct usb_card_rec *cardp, u8 *payload, u16 n=
b);
static void if_usb_free(struct usb_card_rec *cardp);
+static int if_usb_submit_rx_urb(struct usb_card_rec *cardp);
+static int if_usb_reset_device(struct usb_card_rec *cardp);
=20
/**
* @brief call back function to handle the status of the URB
@@ -61,29 +61,40 @@ static void if_usb_free(struct usb_card_rec *cardp)=
;
*/
static void if_usb_write_bulk_callback(struct urb *urb)
{
- wlan_private *priv =3D (wlan_private *) (urb->context);
- wlan_adapter *adapter =3D priv->adapter;
- struct net_device *dev =3D priv->dev;
+ struct usb_card_rec *cardp =3D (struct usb_card_rec *) urb->context;
=20
/* handle the transmission complete validations */
=20
- if (urb->status !=3D 0) {
- /* print the failure status number for debug */
- lbs_pr_info("URB in failure status: %d\n", urb->status);
- } else {
+ if (urb->status =3D=3D 0) {
+ wlan_private *priv =3D cardp->priv;
+
/*
lbs_deb_usbd(&urb->dev->dev, "URB status is successfull\n");
lbs_deb_usbd(&urb->dev->dev, "Actual length transmitted %d\n",
urb->actual_length);
*/
- priv->dnld_sent =3D DNLD_RES_RECEIVED;
- /* Wake main thread if commands are pending */
- if (!adapter->cur_cmd)
- wake_up_interruptible(&priv->waitq);
- if ((adapter->connect_status =3D=3D LIBERTAS_CONNECTED)) {
- netif_wake_queue(dev);
- netif_wake_queue(priv->mesh_dev);
+
+ /* Used for both firmware TX and regular TX. priv isn't
+ * valid at firmware load time.
+ */
+ if (priv) {
+ wlan_adapter *adapter =3D priv->adapter;
+ struct net_device *dev =3D priv->dev;
+
+ priv->dnld_sent =3D DNLD_RES_RECEIVED;
+
+ /* Wake main thread if commands are pending */
+ if (!adapter->cur_cmd)
+ wake_up_interruptible(&priv->waitq);
+
+ if ((adapter->connect_status =3D=3D LIBERTAS_CONNECTED)) {
+ netif_wake_queue(dev);
+ netif_wake_queue(priv->mesh_dev);
+ }
}
+ } else {
+ /* print the failure status number for debug */
+ lbs_pr_info("URB in failure status: %d\n", urb->status);
}
=20
return;
@@ -205,24 +216,35 @@ static int if_usb_probe(struct usb_interface *int=
f,
}
}
=20
+ /* Upload firmware */
+ cardp->rinfo.cardp =3D cardp;
+ if (if_usb_prog_firmware(cardp)) {
+ lbs_deb_usbd(&udev->dev, "FW upload failed");
+ goto err_prog_firmware;
+ }
+
if (!(priv =3D libertas_add_card(cardp, &udev->dev)))
- goto dealloc;
+ goto err_prog_firmware;
=20
- udev->dev.driver_data =3D priv;
+ cardp->priv =3D priv;
=20
if (libertas_add_mesh(priv, &udev->dev))
goto err_add_mesh;
=20
- priv->hw_register_dev =3D if_usb_register_dev;
- priv->hw_unregister_dev =3D if_usb_unregister_dev;
- priv->hw_prog_firmware =3D if_usb_prog_firmware;
+ cardp->eth_dev =3D priv->dev;
+
priv->hw_host_to_card =3D if_usb_host_to_card;
priv->hw_get_int_status =3D if_usb_get_int_status;
priv->hw_read_event_cause =3D if_usb_read_event_cause;
priv->boot2_version =3D udev->descriptor.bcdDevice;
=20
- if (libertas_activate_card(priv))
- goto err_activate_card;
+ /* Delay 200 ms to waiting for the FW ready */
+ if_usb_submit_rx_urb(cardp);
+ msleep_interruptible(200);
+ priv->adapter->fw_ready =3D 1;
+
+ if (libertas_start_card(priv))
+ goto err_start_card;
=20
list_add_tail(&cardp->list, &usb_devices);
=20
@@ -231,11 +253,12 @@ static int if_usb_probe(struct usb_interface *int=
f,
=20
return 0;
=20
-err_activate_card:
+err_start_card:
libertas_remove_mesh(priv);
err_add_mesh:
- free_netdev(priv->dev);
- kfree(priv->adapter);
+ libertas_remove_card(priv);
+err_prog_firmware:
+ if_usb_reset_device(cardp);
dealloc:
if_usb_free(cardp);
=20
@@ -252,21 +275,22 @@ static void if_usb_disconnect(struct usb_interfac=
e *intf)
{
struct usb_card_rec *cardp =3D usb_get_intfdata(intf);
wlan_private *priv =3D (wlan_private *) cardp->priv;
- wlan_adapter *adapter =3D NULL;
=20
- adapter =3D priv->adapter;
+ lbs_deb_enter(LBS_DEB_MAIN);
=20
- /*
- * Update Surprise removed to TRUE
- */
- adapter->surpriseremoved =3D 1;
+ /* Update Surprise removed to TRUE */
+ cardp->surprise_removed =3D 1;
=20
list_del(&cardp->list);
=20
- /* card is removed and we can call wlan_remove_card */
- lbs_deb_usbd(&cardp->udev->dev, "call remove card\n");
- libertas_remove_mesh(priv);
- libertas_remove_card(priv);
+ if (priv) {
+ wlan_adapter *adapter =3D priv->adapter;
+
+ adapter->surpriseremoved =3D 1;
+ libertas_stop_card(priv);
+ libertas_remove_mesh(priv);
+ libertas_remove_card(priv);
+ }
=20
/* Unlink and free urb */
if_usb_free(cardp);
@@ -274,7 +298,7 @@ static void if_usb_disconnect(struct usb_interface =
*intf)
usb_set_intfdata(intf, NULL);
usb_put_dev(interface_to_usbdev(intf));
=20
- return;
+ lbs_deb_leave(LBS_DEB_MAIN);
}
=20
/**
@@ -282,12 +306,11 @@ static void if_usb_disconnect(struct usb_interfac=
e *intf)
* @param priv pointer to wlan_private
* @return 0
*/
-static int if_prog_firmware(wlan_private * priv)
+static int if_prog_firmware(struct usb_card_rec *cardp)
{
- struct usb_card_rec *cardp =3D priv->card;
struct FWData *fwdata;
struct fwheader *fwheader;
- u8 *firmware =3D priv->firmware->data;
+ u8 *firmware =3D cardp->fw->data;
=20
fwdata =3D kmalloc(sizeof(struct FWData), GFP_ATOMIC);
=20
@@ -335,7 +358,7 @@ static int if_prog_firmware(wlan_private * priv)
cardp->totalbytes);
*/
memcpy(cardp->bulk_out_buffer, fwheader, FW_DATA_XMIT_SIZE);
- usb_tx_block(priv, cardp->bulk_out_buffer, FW_DATA_XMIT_SIZE);
+ usb_tx_block(cardp, cardp->bulk_out_buffer, FW_DATA_XMIT_SIZE);
=20
} else if (fwdata->fwheader.dnldcmd =3D=3D cpu_to_le32(FW_HAS_LAST_BL=
OCK)) {
/*
@@ -345,7 +368,7 @@ static int if_prog_firmware(wlan_private * priv)
"Donwloading FW JUMP BLOCK\n");
*/
memcpy(cardp->bulk_out_buffer, fwheader, FW_DATA_XMIT_SIZE);
- usb_tx_block(priv, cardp->bulk_out_buffer, FW_DATA_XMIT_SIZE);
+ usb_tx_block(cardp, cardp->bulk_out_buffer, FW_DATA_XMIT_SIZE);
cardp->fwfinalblk =3D 1;
}
=20
@@ -360,10 +383,10 @@ static int if_prog_firmware(wlan_private * priv)
return 0;
}
=20
-static int if_usb_reset_device(wlan_private *priv)
+static int if_usb_reset_device(struct usb_card_rec *cardp)
{
int ret;
- struct usb_card_rec *cardp =3D priv->card;
+ wlan_private * priv =3D cardp->priv;
=20
lbs_deb_enter(LBS_DEB_USB);
=20
@@ -371,7 +394,7 @@ static int if_usb_reset_device(wlan_private *priv)
* command to the firmware.
*/
ret =3D usb_reset_device(cardp->udev);
- if (!ret) {
+ if (!ret && priv) {
msleep(10);
ret =3D libertas_reset_device(priv);
msleep(10);
@@ -389,14 +412,12 @@ static int if_usb_reset_device(wlan_private *priv=
)
* @param nb data length
* @return 0 or -1
*/
-static int usb_tx_block(wlan_private * priv, u8 * payload, u16 nb)
+static int usb_tx_block(struct usb_card_rec *cardp, u8 * payload, u16 =
nb)
{
- /* pointer to card structure */
- struct usb_card_rec *cardp =3D priv->card;
int ret =3D -1;
=20
/* check if device is removed */
- if (priv->adapter->surpriseremoved) {
+ if (cardp->surprise_removed) {
lbs_deb_usbd(&cardp->udev->dev, "Device removed\n");
goto tx_ret;
}
@@ -404,7 +425,7 @@ static int usb_tx_block(wlan_private * priv, u8 * p=
ayload, u16 nb)
usb_fill_bulk_urb(cardp->tx_urb, cardp->udev,
usb_sndbulkpipe(cardp->udev,
cardp->bulk_out_endpointAddr),
- payload, nb, if_usb_write_bulk_callback, priv);
+ payload, nb, if_usb_write_bulk_callback, cardp);
=20
cardp->tx_urb->transfer_flags |=3D URB_ZERO_PACKET;
=20
@@ -421,11 +442,9 @@ tx_ret:
return ret;
}
=20
-static int __if_usb_submit_rx_urb(wlan_private * priv,
- void (*callbackfn)
- (struct urb *urb))
+static int __if_usb_submit_rx_urb(struct usb_card_rec *cardp,
+ void (*callbackfn)(struct urb *urb))
{
- struct usb_card_rec *cardp =3D priv->card;
struct sk_buff *skb;
struct read_cb_info *rinfo =3D &cardp->rinfo;
int ret =3D -1;
@@ -461,22 +480,21 @@ rx_ret:
return ret;
}
=20
-static inline int if_usb_submit_rx_urb_fwload(wlan_private * priv)
+static int if_usb_submit_rx_urb_fwload(struct usb_card_rec *cardp)
{
- return __if_usb_submit_rx_urb(priv, &if_usb_receive_fwload);
+ return __if_usb_submit_rx_urb(cardp, &if_usb_receive_fwload);
}
=20
-static inline int if_usb_submit_rx_urb(wlan_private * priv)
+static int if_usb_submit_rx_urb(struct usb_card_rec *cardp)
{
- return __if_usb_submit_rx_urb(priv, &if_usb_receive);
+ return __if_usb_submit_rx_urb(cardp, &if_usb_receive);
}
=20
static void if_usb_receive_fwload(struct urb *urb)
{
struct read_cb_info *rinfo =3D (struct read_cb_info *)urb->context;
- wlan_private *priv =3D rinfo->priv;
struct sk_buff *skb =3D rinfo->skb;
- struct usb_card_rec *cardp =3D (struct usb_card_rec *)priv->card;
+ struct usb_card_rec *cardp =3D (struct usb_card_rec *)rinfo->cardp;
struct fwsyncheader *syncfwheader;
struct bootcmdrespStr bootcmdresp;
=20
@@ -492,7 +510,7 @@ static void if_usb_receive_fwload(struct urb *urb)
sizeof(bootcmdresp));
if (le16_to_cpu(cardp->udev->descriptor.bcdDevice) < 0x3106) {
kfree_skb(skb);
- if_usb_submit_rx_urb_fwload(priv);
+ if_usb_submit_rx_urb_fwload(cardp);
cardp->bootcmdresp =3D 1;
lbs_deb_usbd(&cardp->udev->dev,
"Received valid boot command response\n");
@@ -516,7 +534,7 @@ static void if_usb_receive_fwload(struct urb *urb)
"Received valid boot command response\n");
}
kfree_skb(skb);
- if_usb_submit_rx_urb_fwload(priv);
+ if_usb_submit_rx_urb_fwload(cardp);
return;
}
=20
@@ -552,9 +570,9 @@ static void if_usb_receive_fwload(struct urb *urb)
goto exit;
}
=20
- if_prog_firmware(priv);
+ if_prog_firmware(cardp);
=20
- if_usb_submit_rx_urb_fwload(priv);
+ if_usb_submit_rx_urb_fwload(cardp);
exit:
kfree(syncfwheader);
=20
@@ -633,9 +651,9 @@ static inline void process_cmdrequest(int recvlengt=
h, u8 *recvbuff,
static void if_usb_receive(struct urb *urb)
{
struct read_cb_info *rinfo =3D (struct read_cb_info *)urb->context;
- wlan_private *priv =3D rinfo->priv;
struct sk_buff *skb =3D rinfo->skb;
- struct usb_card_rec *cardp =3D (struct usb_card_rec *)priv->card;
+ struct usb_card_rec *cardp =3D (struct usb_card_rec *) rinfo->cardp;
+ wlan_private * priv =3D cardp->priv;
=20
int recvlength =3D urb->actual_length;
u8 *recvbuff =3D NULL;
@@ -696,7 +714,7 @@ static void if_usb_receive(struct urb *urb)
}
=20
setup_for_next:
- if_usb_submit_rx_urb(priv);
+ if_usb_submit_rx_urb(cardp);
rx_exit:
lbs_deb_leave(LBS_DEB_USB);
}
@@ -731,7 +749,7 @@ static int if_usb_host_to_card(wlan_private * priv,=
u8 type, u8 * payload, u16 n
=20
memcpy((cardp->bulk_out_buffer + MESSAGE_HEADER_LEN), payload, nb);
=20
- return usb_tx_block(priv, cardp->bulk_out_buffer,
+ return usb_tx_block(cardp, cardp->bulk_out_buffer,
nb + MESSAGE_HEADER_LEN);
}
=20
@@ -751,46 +769,10 @@ static int if_usb_get_int_status(wlan_private * p=
riv, u8 * ireg)
static int if_usb_read_event_cause(wlan_private * priv)
{
struct usb_card_rec *cardp =3D priv->card;
+
priv->adapter->eventcause =3D cardp->usb_event_cause;
/* Re-submit rx urb here to avoid event lost issue */
- if_usb_submit_rx_urb(priv);
- return 0;
-}
-
-static int if_usb_unregister_dev(wlan_private * priv)
-{
- int ret =3D 0;
-
- /* Need to send a Reset command to device before USB resources freed
- * and wlan_remove_card() called, then device can handle FW download
- * again.
- */
- if (priv)
- libertas_reset_device(priv);
-
- return ret;
-}
-
-
-/**
- * @brief This function register usb device and initialize parameter
- * @param priv pointer to wlan_private
- * @return 0 or -1
- */
-static int if_usb_register_dev(wlan_private * priv)
-{
- struct usb_card_rec *cardp =3D (struct usb_card_rec *)priv->card;
-
- lbs_deb_enter(LBS_DEB_USB);
-
- cardp->priv =3D priv;
- cardp->eth_dev =3D priv->dev;
- priv->hotplug_device =3D &(cardp->udev->dev);
-
- lbs_deb_usbd(&cardp->udev->dev, "udev pointer is at %p\n",
- cardp->udev);
-
- lbs_deb_leave(LBS_DEB_USB);
+ if_usb_submit_rx_urb(cardp);
return 0;
}
=20
@@ -800,10 +782,9 @@ static int if_usb_register_dev(wlan_private * priv=
)
* 2:Boot from FW in EEPROM
* @return 0
*/
-static int if_usb_issue_boot_command(wlan_private *priv, int ivalue)
+static int if_usb_issue_boot_command(struct usb_card_rec *cardp, int i=
value)
{
- struct usb_card_rec *cardp =3D priv->card;
- struct bootcmdstr sbootcmd;
+ struct bootcmdstr sbootcmd;
int i;
=20
/* Prepare command */
@@ -814,28 +795,83 @@ static int if_usb_issue_boot_command(wlan_private=
*priv, int ivalue)
memcpy(cardp->bulk_out_buffer, &sbootcmd, sizeof(struct bootcmdstr));
=20
/* Issue command */
- usb_tx_block(priv, cardp->bulk_out_buffer, sizeof(struct bootcmdstr))=
;
+ usb_tx_block(cardp, cardp->bulk_out_buffer, sizeof(struct bootcmdstr)=
);
=20
return 0;
}
=20
=20
-static int if_usb_do_prog_firmware(wlan_private * priv)
+/**
+ * @brief This function checks the validity of Boot2/FW image.
+ *
+ * @param data pointer to image
+ * len image length
+ * @return 0 or -1
+ */
+static int check_fwfile_format(u8 *data, u32 totlen)
+{
+ u32 bincmd, exit;
+ u32 blksize, offset, len;
+ int ret;
+
+ ret =3D 1;
+ exit =3D len =3D 0;
+
+ do {
+ struct fwheader *fwh =3D (void *)data;
+
+ bincmd =3D le32_to_cpu(fwh->dnldcmd);
+ blksize =3D le32_to_cpu(fwh->datalength);
+ switch (bincmd) {
+ case FW_HAS_DATA_TO_RECV:
+ offset =3D sizeof(struct fwheader) + blksize;
+ data +=3D offset;
+ len +=3D offset;
+ if (len >=3D totlen)
+ exit =3D 1;
+ break;
+ case FW_HAS_LAST_BLOCK:
+ exit =3D 1;
+ ret =3D 0;
+ break;
+ default:
+ exit =3D 1;
+ break;
+ }
+ } while (!exit);
+
+ if (ret)
+ lbs_pr_err("firmware file format check FAIL\n");
+ else
+ lbs_deb_fw("firmware file format check PASS\n");
+
+ return ret;
+}
+
+
+static int if_usb_prog_firmware(struct usb_card_rec *cardp)
{
- struct usb_card_rec *cardp =3D priv->card;
int i =3D 0;
static int reset_count =3D 10;
int ret =3D 0;
=20
lbs_deb_enter(LBS_DEB_USB);
=20
- cardp->rinfo.priv =3D priv;
+ if ((ret =3D request_firmware(&cardp->fw, libertas_fw_name,
+ &cardp->udev->dev)) < 0) {
+ lbs_pr_err("request_firmware() failed with %#x\n", ret);
+ lbs_pr_err("firmware %s not found\n", libertas_fw_name);
+ goto done;
+ }
+
+ if (check_fwfile_format(cardp->fw->data, cardp->fw->size))
+ goto release_fw;
=20
restart:
- if (if_usb_submit_rx_urb_fwload(priv) < 0) {
+ if (if_usb_submit_rx_urb_fwload(cardp) < 0) {
lbs_deb_usbd(&cardp->udev->dev, "URB submission is failed\n");
ret =3D -1;
- goto done;
+ goto release_fw;
}
=20
cardp->bootcmdresp =3D 0;
@@ -843,7 +879,7 @@ restart:
int j =3D 0;
i++;
/* Issue Boot command =3D 1, Boot from Download-FW */
- if_usb_issue_boot_command(priv, BOOT_CMD_FW_BY_USB);
+ if_usb_issue_boot_command(cardp, BOOT_CMD_FW_BY_USB);
/* wait for command response */
do {
j++;
@@ -853,14 +889,13 @@ restart:
=20
if (cardp->bootcmdresp =3D=3D 0) {
if (--reset_count >=3D 0) {
- if_usb_reset_device(priv);
+ if_usb_reset_device(cardp);
goto restart;
}
return -1;
}
=20
i =3D 0;
- priv->adapter->fw_ready =3D 0;
=20
cardp->totalbytes =3D 0;
cardp->fwlastblksent =3D 0;
@@ -870,113 +905,37 @@ restart:
cardp->totalbytes =3D 0;
cardp->fwfinalblk =3D 0;
=20
- if_prog_firmware(priv);
+ if_prog_firmware(cardp);
=20
do {
lbs_deb_usbd(&cardp->udev->dev,"Wlan sched timeout\n");
i++;
msleep_interruptible(100);
- if (priv->adapter->surpriseremoved || i >=3D 20)
+ if (cardp->surprise_removed || i >=3D 20)
break;
} while (!cardp->fwdnldover);
=20
if (!cardp->fwdnldover) {
lbs_pr_info("failed to load fw, resetting device!\n");
if (--reset_count >=3D 0) {
- if_usb_reset_device(priv);
+ if_usb_reset_device(cardp);
goto restart;
}
=20
lbs_pr_info("FW download failure, time =3D %d ms\n", i * 100);
ret =3D -1;
- goto done;
+ goto release_fw;
}
=20
- if_usb_submit_rx_urb(priv);
-
- /* Delay 200 ms to waiting for the FW ready */
- msleep_interruptible(200);
-
- priv->adapter->fw_ready =3D 1;
+release_fw:
+ release_firmware(cardp->fw);
+ cardp->fw =3D NULL;
=20
done:
lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret);
return ret;
}
=20
-/**
- * @brief This function checks the validity of Boot2/FW image.
- *
- * @param data pointer to image
- * len image length
- * @return 0 or -1
- */
-static int check_fwfile_format(u8 *data, u32 totlen)
-{
- u32 bincmd, exit;
- u32 blksize, offset, len;
- int ret;
-
- ret =3D 1;
- exit =3D len =3D 0;
-
- do {
- struct fwheader *fwh =3D (void *)data;
-
- bincmd =3D le32_to_cpu(fwh->dnldcmd);
- blksize =3D le32_to_cpu(fwh->datalength);
- switch (bincmd) {
- case FW_HAS_DATA_TO_RECV:
- offset =3D sizeof(struct fwheader) + blksize;
- data +=3D offset;
- len +=3D offset;
- if (len >=3D totlen)
- exit =3D 1;
- break;
- case FW_HAS_LAST_BLOCK:
- exit =3D 1;
- ret =3D 0;
- break;
- default:
- exit =3D 1;
- break;
- }
- } while (!exit);
-
- if (ret)
- lbs_pr_err("firmware file format check FAIL\n");
- else
- lbs_deb_fw("firmware file format check PASS\n");
-
- return ret;
-}
-
-
-static int if_usb_prog_firmware(wlan_private *priv)
-{
- int ret =3D -1;
-
- lbs_deb_enter(LBS_DEB_FW);
-
- if ((ret =3D request_firmware(&priv->firmware, libertas_fw_name,
- priv->hotplug_device)) < 0) {
- lbs_pr_err("request_firmware() failed with %#x\n", ret);
- lbs_pr_err("firmware %s not found\n", libertas_fw_name);
- goto done;
- }
-
- if (check_fwfile_format(priv->firmware->data, priv->firmware->size)) =
{
- release_firmware(priv->firmware);
- goto done;
- }
-
- ret =3D if_usb_do_prog_firmware(priv);
-
- release_firmware(priv->firmware);
-done:
- return ret;
-}
-
=20
#ifdef CONFIG_PM
static int if_usb_suspend(struct usb_interface *intf, pm_message_t mes=
sage)
@@ -1085,8 +1044,10 @@ static void if_usb_exit_module(void)
=20
lbs_deb_enter(LBS_DEB_MAIN);
=20
- list_for_each_entry_safe(cardp, cardp_temp, &usb_devices, list)
- libertas_reset_device((wlan_private *) cardp->priv);
+ list_for_each_entry_safe(cardp, cardp_temp, &usb_devices, list) {
+ libertas_prepare_and_send_command(cardp->priv, CMD_802_11_RESET,
+ CMD_ACT_HALT, 0, 0, NULL);
+ }
=20
/* API unregisters the driver from USB subsystem */
usb_deregister(&if_usb_driver);
diff --git a/drivers/net/wireless/libertas/if_usb.h b/drivers/net/wirel=
ess/libertas/if_usb.h
index 8b3b4f1..e07a10e 100644
--- a/drivers/net/wireless/libertas/if_usb.h
+++ b/drivers/net/wireless/libertas/if_usb.h
@@ -38,7 +38,7 @@ struct bootcmdrespStr
=20
/* read callback private data */
struct read_cb_info {
- wlan_private *priv;
+ struct usb_card_rec *cardp;
struct sk_buff *skb;
};
=20
@@ -58,6 +58,7 @@ struct usb_card_rec {
int bulk_out_size;
u8 bulk_out_endpointAddr;
=20
+ const struct firmware *fw;
u8 CRC_OK;
u32 fwseqnum;
u32 lastseqnum;
@@ -65,6 +66,7 @@ struct usb_card_rec {
u32 fwlastblksent;
u8 fwdnldover;
u8 fwfinalblk;
+ u8 surprise_removed;
=20
u32 usb_event_cause;
u8 usb_int_cause;
diff --git a/drivers/net/wireless/libertas/join.c b/drivers/net/wireles=
s/libertas/join.c
index ce49d3f..0ad1362 100644
--- a/drivers/net/wireless/libertas/join.c
+++ b/drivers/net/wireless/libertas/join.c
@@ -17,9 +17,6 @@
#include "dev.h"
#include "assoc.h"
=20
-/* Supported rates for ad-hoc B mode */
-static u8 adhoc_rates_b[5] =3D { 0x02, 0x04, 0x0b, 0x16, 0x00 };
-
/* The firmware needs certain bits masked out of the beacon-derviced c=
apability
* field when associating/joining to BSSs.
*/
@@ -550,8 +547,8 @@ int libertas_cmd_80211_ad_hoc_start(wlan_private * =
priv,
adhs->probedelay =3D cpu_to_le16(CMD_SCAN_PROBE_DELAY_TIME);
=20
memset(adhs->rates, 0, sizeof(adhs->rates));
- ratesize =3D min(sizeof(adhs->rates), sizeof(adhoc_rates_b));
- memcpy(adhs->rates, adhoc_rates_b, ratesize);
+ ratesize =3D min(sizeof(adhs->rates), sizeof(libertas_bg_rates));
+ memcpy(adhs->rates, libertas_bg_rates, ratesize);
=20
/* Copy the ad-hoc creating rates into Current BSS state structure */
memset(&adapter->curbssparams.rates, 0, sizeof(adapter->curbssparams.=
rates));
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireles=
s/libertas/main.c
index f0213ec..3feddcc 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -256,7 +256,7 @@ void libertas_remove_rtap(wlan_private *priv);
static ssize_t libertas_rtap_get(struct device * dev,
struct device_attribute *attr, char * buf)
{
- wlan_private *priv =3D (wlan_private *) dev->driver_data;
+ wlan_private *priv =3D (wlan_private *) (to_net_dev(dev))->priv;
wlan_adapter *adapter =3D priv->adapter;
return snprintf(buf, 5, "0x%X\n", adapter->monitormode);
}
@@ -268,7 +268,7 @@ static ssize_t libertas_rtap_set(struct device * de=
v,
struct device_attribute *attr, const char * buf, size_t count)
{
int monitor_mode;
- wlan_private *priv =3D (wlan_private *) dev->driver_data;
+ wlan_private *priv =3D (wlan_private *) (to_net_dev(dev))->priv;
wlan_adapter *adapter =3D priv->adapter;
=20
sscanf(buf, "%x", &monitor_mode);
@@ -768,6 +768,7 @@ static int libertas_thread(void *data)
=20
init_waitqueue_entry(&wait, current);
=20
+ set_freezable();
for (;;) {
lbs_deb_thread( "main-thread 111: intcounter=3D%d "
"currenttxskb=3D%p dnld_sent=3D%d\n",
@@ -790,7 +791,6 @@ static int libertas_thread(void *data)
} else
spin_unlock_irq(&adapter->driver_lock);
=20
-
lbs_deb_thread(
"main-thread 222 (waking up): intcounter=3D%d currenttxskb=3D=
%p "
"dnld_sent=3D%d\n", adapter->intcounter,
@@ -925,7 +925,7 @@ static int libertas_thread(void *data)
* @param priv A pointer to wlan_private structure
* @return 0 or -1
*/
-static int wlan_setup_station_hw(wlan_private * priv)
+static int wlan_setup_firmware(wlan_private * priv)
{
int ret =3D -1;
wlan_adapter *adapter =3D priv->adapter;
@@ -933,14 +933,6 @@ static int wlan_setup_station_hw(wlan_private * pr=
iv)
=20
lbs_deb_enter(LBS_DEB_FW);
=20
- ret =3D priv->hw_prog_firmware(priv);
-
- if (ret) {
- lbs_deb_fw("bootloader in invalid state\n");
- ret =3D -1;
- goto done;
- }
-
/*
* Read MAC address from HW
*/
@@ -991,8 +983,6 @@ done:
return ret;
}
=20
-static void command_timer_fn(unsigned long data);
-
/**
* This function handles the timeout of command sending.
* It will re-send the same command again.
@@ -1034,155 +1024,99 @@ static void command_timer_fn(unsigned long dat=
a)
return;
}
=20
-static void libertas_free_adapter(wlan_private * priv)
+static int libertas_init_adapter(wlan_private * priv)
{
wlan_adapter *adapter =3D priv->adapter;
-
- if (!adapter) {
- lbs_deb_fw("why double free adapter?\n");
- return;
- }
-
- lbs_deb_fw("free command buffer\n");
- libertas_free_cmd_buffer(priv);
-
- lbs_deb_fw("free command_timer\n");
- del_timer(&adapter->command_timer);
-
- lbs_deb_fw("free scan results table\n");
- kfree(adapter->networks);
- adapter->networks =3D NULL;
-
- /* Free the adapter object itself */
- lbs_deb_fw("free adapter\n");
- kfree(adapter);
- priv->adapter =3D NULL;
-}
-
-static int wlan_allocate_adapter(wlan_private * priv)
-{
size_t bufsize;
- wlan_adapter *adapter =3D priv->adapter;
+ int i, ret =3D 0;
=20
/* Allocate buffer to store the BSSID list */
bufsize =3D MAX_NETWORK_COUNT * sizeof(struct bss_descriptor);
adapter->networks =3D kzalloc(bufsize, GFP_KERNEL);
if (!adapter->networks) {
lbs_pr_err("Out of memory allocating beacons\n");
- libertas_free_adapter(priv);
- return -ENOMEM;
+ ret =3D -1;
+ goto out;
}
=20
- /* Allocate the command buffers */
- libertas_allocate_cmd_buffer(priv);
+ /* Initialize scan result lists */
+ INIT_LIST_HEAD(&adapter->network_free_list);
+ INIT_LIST_HEAD(&adapter->network_list);
+ for (i =3D 0; i < MAX_NETWORK_COUNT; i++) {
+ list_add_tail(&adapter->networks[i].list,
+ &adapter->network_free_list);
+ }
=20
- memset(&adapter->libertas_ps_confirm_sleep, 0, sizeof(struct PS_CMD_C=
onfirmSleep));
adapter->libertas_ps_confirm_sleep.seqnum =3D cpu_to_le16(++adapter->=
seqnum);
adapter->libertas_ps_confirm_sleep.command =3D
cpu_to_le16(CMD_802_11_PS_MODE);
adapter->libertas_ps_confirm_sleep.size =3D
cpu_to_le16(sizeof(struct PS_CMD_ConfirmSleep));
- adapter->libertas_ps_confirm_sleep.result =3D 0;
adapter->libertas_ps_confirm_sleep.action =3D
cpu_to_le16(CMD_SUBCMD_SLEEP_CONFIRMED);
=20
- return 0;
-}
-
-static void wlan_init_adapter(wlan_private * priv)
-{
- wlan_adapter *adapter =3D priv->adapter;
- int i;
-
- adapter->connect_status =3D LIBERTAS_DISCONNECTED;
memset(adapter->current_addr, 0xff, ETH_ALEN);
=20
- /* 802.11 specific */
- adapter->secinfo.wep_enabled =3D 0;
- for (i =3D 0; i < sizeof(adapter->wep_keys) / sizeof(adapter->wep_key=
s[0]);
- i++)
- memset(&adapter->wep_keys[i], 0, sizeof(struct enc_key));
- adapter->wep_tx_keyidx =3D 0;
+ adapter->connect_status =3D LIBERTAS_DISCONNECTED;
adapter->secinfo.auth_mode =3D IW_AUTH_ALG_OPEN_SYSTEM;
adapter->mode =3D IW_MODE_INFRA;
-
- adapter->pending_assoc_req =3D NULL;
- adapter->in_progress_assoc_req =3D NULL;
-
- /* Initialize scan result lists */
- INIT_LIST_HEAD(&adapter->network_free_list);
- INIT_LIST_HEAD(&adapter->network_list);
- for (i =3D 0; i < MAX_NETWORK_COUNT; i++) {
- list_add_tail(&adapter->networks[i].list,
- &adapter->network_free_list);
- }
-
- mutex_init(&adapter->lock);
-
- memset(&adapter->curbssparams, 0, sizeof(adapter->curbssparams));
adapter->curbssparams.channel =3D DEFAULT_AD_HOC_CHANNEL;
-
- /* PnP and power profile */
- adapter->surpriseremoved =3D 0;
-
- adapter->currentpacketfilter =3D
- CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_ON;
-
+ adapter->currentpacketfilter =3D CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_O=
N;
adapter->radioon =3D RADIO_ON;
-
adapter->auto_rate =3D 1;
- adapter->cur_rate =3D 0;
-
- // set default capabilities
adapter->capability =3D WLAN_CAPABILITY_SHORT_PREAMBLE;
-
adapter->psmode =3D WLAN802_11POWERMODECAM;
-
adapter->psstate =3D PS_STATE_FULL_POWER;
- adapter->needtowakeup =3D 0;
=20
- adapter->intcounter =3D 0;
-
- adapter->currenttxskb =3D NULL;
+ mutex_init(&adapter->lock);
=20
memset(&adapter->tx_queue_ps, 0, NR_TX_QUEUE*sizeof(struct sk_buff*))=
;
adapter->tx_queue_idx =3D 0;
spin_lock_init(&adapter->txqueue_lock);
=20
- return;
-}
+ setup_timer(&adapter->command_timer, command_timer_fn,
+ (unsigned long)priv);
=20
-static int libertas_init_fw(wlan_private * priv)
-{
- int ret =3D -1;
- wlan_adapter *adapter =3D priv->adapter;
+ INIT_LIST_HEAD(&adapter->cmdfreeq);
+ INIT_LIST_HEAD(&adapter->cmdpendingq);
=20
- lbs_deb_enter(LBS_DEB_FW);
+ spin_lock_init(&adapter->driver_lock);
+ init_waitqueue_head(&adapter->cmd_pending);
+ adapter->nr_cmd_pending =3D 0;
=20
- /* Allocate adapter structure */
- if ((ret =3D wlan_allocate_adapter(priv)) !=3D 0)
- goto done;
+ /* Allocate the command buffers */
+ if (libertas_allocate_cmd_buffer(priv)) {
+ lbs_pr_err("Out of memory allocating command buffers\n");
+ ret =3D -1;
+ }
=20
- /* init adapter structure */
- wlan_init_adapter(priv);
+out:
+ return ret;
+}
=20
- /* init timer etc. */
- setup_timer(&adapter->command_timer, command_timer_fn,
- (unsigned long)priv);
+static void libertas_free_adapter(wlan_private * priv)
+{
+ wlan_adapter *adapter =3D priv->adapter;
=20
- /* download fimrware etc. */
- if ((ret =3D wlan_setup_station_hw(priv)) !=3D 0) {
- del_timer_sync(&adapter->command_timer);
- goto done;
+ if (!adapter) {
+ lbs_deb_fw("why double free adapter?\n");
+ return;
}
=20
- /* init 802.11d */
- libertas_init_11d(priv);
+ lbs_deb_fw("free command buffer\n");
+ libertas_free_cmd_buffer(priv);
=20
- ret =3D 0;
-done:
- lbs_deb_leave_args(LBS_DEB_FW, "ret %d", ret);
- return ret;
+ lbs_deb_fw("free command_timer\n");
+ del_timer(&adapter->command_timer);
+
+ lbs_deb_fw("free scan results table\n");
+ kfree(adapter->networks);
+ adapter->networks =3D NULL;
+
+ /* Free the adapter object itself */
+ lbs_deb_fw("free adapter\n");
+ kfree(adapter);
+ priv->adapter =3D NULL;
}
=20
/**
@@ -1202,7 +1136,7 @@ wlan_private *libertas_add_card(void *card, struc=
t device *dmdev)
/* Allocate an Ethernet device and register it */
if (!(dev =3D alloc_etherdev(sizeof(wlan_private)))) {
lbs_pr_err("init ethX device failed\n");
- return NULL;
+ goto done;
}
priv =3D dev->priv;
=20
@@ -1212,10 +1146,16 @@ wlan_private *libertas_add_card(void *card, str=
uct device *dmdev)
goto err_kzalloc;
}
=20
+ if (libertas_init_adapter(priv)) {
+ lbs_pr_err("failed to initialize adapter structure.\n");
+ goto err_init_adapter;
+ }
+
priv->dev =3D dev;
priv->card =3D card;
priv->mesh_open =3D 0;
priv->infra_open =3D 0;
+ priv->hotplug_device =3D dmdev;
=20
SET_MODULE_OWNER(dev);
=20
@@ -1238,87 +1178,144 @@ wlan_private *libertas_add_card(void *card, st=
ruct device *dmdev)
=20
SET_NETDEV_DEV(dev, dmdev);
=20
- INIT_LIST_HEAD(&priv->adapter->cmdfreeq);
- INIT_LIST_HEAD(&priv->adapter->cmdpendingq);
-
- spin_lock_init(&priv->adapter->driver_lock);
- init_waitqueue_head(&priv->adapter->cmd_pending);
- priv->adapter->nr_cmd_pending =3D 0;
priv->rtap_net_dev =3D NULL;
if (device_create_file(dmdev, &dev_attr_libertas_rtap))
- goto err_kzalloc;
+ goto err_init_adapter;
+
+ lbs_deb_thread("Starting main thread...\n");
+ init_waitqueue_head(&priv->waitq);
+ priv->main_thread =3D kthread_run(libertas_thread, dev, "libertas_mai=
n");
+ if (IS_ERR(priv->main_thread)) {
+ lbs_deb_thread("Error creating main thread.\n");
+ goto err_kthread_run;
+ }
+
+ priv->work_thread =3D create_singlethread_workqueue("libertas_worker"=
);
+ INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker);
+ INIT_DELAYED_WORK(&priv->scan_work, libertas_scan_worker);
+ INIT_WORK(&priv->sync_channel, libertas_sync_channel);
+
goto done;
=20
+err_kthread_run:
+ device_remove_file(dmdev, &dev_attr_libertas_rtap);
+
+err_init_adapter:
+ libertas_free_adapter(priv);
+
err_kzalloc:
free_netdev(dev);
priv =3D NULL;
+
done:
lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv);
return priv;
}
EXPORT_SYMBOL_GPL(libertas_add_card);
=20
-int libertas_activate_card(wlan_private *priv)
+
+int libertas_remove_card(wlan_private *priv)
{
+ wlan_adapter *adapter =3D priv->adapter;
struct net_device *dev =3D priv->dev;
- int ret =3D -1;
+ union iwreq_data wrqu;
=20
lbs_deb_enter(LBS_DEB_MAIN);
=20
- lbs_deb_thread("Starting main thread...\n");
- init_waitqueue_head(&priv->waitq);
- priv->main_thread =3D kthread_run(libertas_thread, dev, "libertas_mai=
n");
- if (IS_ERR(priv->main_thread)) {
- lbs_deb_thread("Error creating main thread.\n");
- goto done;
- }
+ libertas_remove_rtap(priv);
=20
- priv->work_thread =3D create_singlethread_workqueue("libertas_worker"=
);
- INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker);
- INIT_DELAYED_WORK(&priv->scan_work, libertas_scan_worker);
+ dev =3D priv->dev;
+ device_remove_file(priv->hotplug_device, &dev_attr_libertas_rtap);
=20
- INIT_WORK(&priv->sync_channel, libertas_sync_channel);
+ cancel_delayed_work(&priv->scan_work);
+ cancel_delayed_work(&priv->assoc_work);
+ destroy_workqueue(priv->work_thread);
=20
- /*
- * Register the device. Fillup the private data structure with
- * relevant information from the card and request for the required
- * IRQ.
- */
- if (priv->hw_register_dev(priv) < 0) {
- lbs_pr_err("failed to register WLAN device\n");
- goto err_registerdev;
+ if (adapter->psmode =3D=3D WLAN802_11POWERMODEMAX_PSP) {
+ adapter->psmode =3D WLAN802_11POWERMODECAM;
+ libertas_ps_wakeup(priv, CMD_OPTION_WAITFORRSP);
}
=20
- /* init FW and HW */
- if (libertas_init_fw(priv)) {
- lbs_pr_err("firmware init failed\n");
- goto err_registerdev;
- }
+ memset(wrqu.ap_addr.sa_data, 0xaa, ETH_ALEN);
+ wrqu.ap_addr.sa_family =3D ARPHRD_ETHER;
+ wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL);
+
+ /* Stop the thread servicing the interrupts */
+ adapter->surpriseremoved =3D 1;
+ kthread_stop(priv->main_thread);
+
+ libertas_free_adapter(priv);
+
+ priv->dev =3D NULL;
+ free_netdev(dev);
+
+ lbs_deb_leave(LBS_DEB_MAIN);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(libertas_remove_card);
+
+
+int libertas_start_card(wlan_private *priv)
+{
+ struct net_device *dev =3D priv->dev;
+ int ret =3D -1;
+
+ lbs_deb_enter(LBS_DEB_MAIN);
+
+ /* poke the firmware */
+ ret =3D wlan_setup_firmware(priv);
+ if (ret)
+ goto done;
+
+ /* init 802.11d */
+ libertas_init_11d(priv);
=20
if (register_netdev(dev)) {
lbs_pr_err("cannot register ethX device\n");
- goto err_init_fw;
+ goto done;
}
=20
- lbs_pr_info("%s: Marvell WLAN 802.11 adapter\n", dev->name);
-
libertas_debugfs_init_one(priv, dev);
=20
+ lbs_pr_info("%s: Marvell WLAN 802.11 adapter\n", dev->name);
+
ret =3D 0;
- goto done;
=20
-err_init_fw:
- priv->hw_unregister_dev(priv);
-err_registerdev:
- destroy_workqueue(priv->work_thread);
- /* Stop the thread servicing the interrupts */
- wake_up_interruptible(&priv->waitq);
- kthread_stop(priv->main_thread);
done:
- lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret);
+ lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
return ret;
}
-EXPORT_SYMBOL_GPL(libertas_activate_card);
+EXPORT_SYMBOL_GPL(libertas_start_card);
+
+
+int libertas_stop_card(wlan_private *priv)
+{
+ struct net_device *dev =3D priv->dev;
+ int ret =3D -1;
+ struct cmd_ctrl_node *cmdnode;
+ unsigned long flags;
+
+ lbs_deb_enter(LBS_DEB_MAIN);
+
+ netif_stop_queue(priv->dev);
+ netif_carrier_off(priv->dev);
+
+ libertas_debugfs_remove_one(priv);
+
+ /* Flush pending command nodes */
+ spin_lock_irqsave(&priv->adapter->driver_lock, flags);
+ list_for_each_entry(cmdnode, &priv->adapter->cmdpendingq, list) {
+ cmdnode->cmdwaitqwoken =3D 1;
+ wake_up_interruptible(&cmdnode->cmdwait_q);
+ }
+ spin_unlock_irqrestore(&priv->adapter->driver_lock, flags);
+
+ unregister_netdev(dev);
+
+ lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
+ return ret;
+}
+EXPORT_SYMBOL_GPL(libertas_stop_card);
=20
=20
/**
@@ -1388,89 +1385,12 @@ done:
}
EXPORT_SYMBOL_GPL(libertas_add_mesh);
=20
-static void wake_pending_cmdnodes(wlan_private *priv)
-{
- struct cmd_ctrl_node *cmdnode;
- unsigned long flags;
-
- lbs_deb_enter(LBS_DEB_HOST);
-
- spin_lock_irqsave(&priv->adapter->driver_lock, flags);
- list_for_each_entry(cmdnode, &priv->adapter->cmdpendingq, list) {
- cmdnode->cmdwaitqwoken =3D 1;
- wake_up_interruptible(&cmdnode->cmdwait_q);
- }
- spin_unlock_irqrestore(&priv->adapter->driver_lock, flags);
-}
-
-
-int libertas_remove_card(wlan_private *priv)
-{
- wlan_adapter *adapter;
- struct net_device *dev;
- union iwreq_data wrqu;
-
- lbs_deb_enter(LBS_DEB_NET);
-
- libertas_remove_rtap(priv);
- if (!priv)
- goto out;
-
- adapter =3D priv->adapter;
-
- if (!adapter)
- goto out;
-
- dev =3D priv->dev;
- device_remove_file(priv->hotplug_device, &dev_attr_libertas_rtap);
-
- netif_stop_queue(priv->dev);
- netif_carrier_off(priv->dev);
-
- wake_pending_cmdnodes(priv);
-
- unregister_netdev(dev);
-
- cancel_delayed_work(&priv->scan_work);
- cancel_delayed_work(&priv->assoc_work);
- destroy_workqueue(priv->work_thread);
-
- if (adapter->psmode =3D=3D WLAN802_11POWERMODEMAX_PSP) {
- adapter->psmode =3D WLAN802_11POWERMODECAM;
- libertas_ps_wakeup(priv, CMD_OPTION_WAITFORRSP);
- }
-
- memset(wrqu.ap_addr.sa_data, 0xaa, ETH_ALEN);
- wrqu.ap_addr.sa_family =3D ARPHRD_ETHER;
- wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL);
-
- adapter->surpriseremoved =3D 1;
-
- /* Stop the thread servicing the interrupts */
- kthread_stop(priv->main_thread);
-
- libertas_debugfs_remove_one(priv);
-
- lbs_deb_net("free adapter\n");
- libertas_free_adapter(priv);
-
- lbs_deb_net("unregister finish\n");
-
- priv->dev =3D NULL;
- free_netdev(dev);
-
-out:
- lbs_deb_leave(LBS_DEB_NET);
- return 0;
-}
-EXPORT_SYMBOL_GPL(libertas_remove_card);
-
=20
void libertas_remove_mesh(wlan_private *priv)
{
struct net_device *mesh_dev;
=20
- lbs_deb_enter(LBS_DEB_NET);
+ lbs_deb_enter(LBS_DEB_MAIN);
=20
if (!priv)
goto out;
@@ -1487,7 +1407,7 @@ void libertas_remove_mesh(wlan_private *priv)
free_netdev(mesh_dev);
=20
out:
- lbs_deb_leave(LBS_DEB_NET);
+ lbs_deb_leave(LBS_DEB_MAIN);
}
EXPORT_SYMBOL_GPL(libertas_remove_mesh);
=20
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/=
rtl8187_dev.c
index e61c6d5..d52e487 100644
--- a/drivers/net/wireless/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl8187_dev.c
@@ -604,8 +604,7 @@ static int __devinit rtl8187_probe(struct usb_inter=
face *intf,
priv->mode =3D IEEE80211_IF_TYPE_MGMT;
dev->flags =3D IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
IEEE80211_HW_RX_INCLUDES_FCS |
- IEEE80211_HW_WEP_INCLUDE_IV |
- IEEE80211_HW_DATA_NULLFUNC_ACK;
+ IEEE80211_HW_WEP_INCLUDE_IV;
dev->extra_tx_headroom =3D sizeof(struct rtl8187_tx_hdr);
dev->queues =3D 1;
dev->max_rssi =3D 65;
--=20
John W. Linville
linville@tuxdriver.com
-
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-25 6:40 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-08-25 6:40 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
John W. Linville wrote:
> A few items intended for 2.6.24.
>
> Individual patches here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
>
> Thanks!
>
> John
>
> ---
>
> The following changes since commit 39d3520c92cf7a28c07229ca00cc35a1e8026c77:
> Linus Torvalds (1):
> Linux 2.6.23-rc3
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Daniel Drake (2):
> zd1211rw: Add ID for Sitecom WL-162
> zd1211rw: Add ID for ZyXEL M-202 XtremeMIMO
>
> Mariusz Kozlowski (1):
> drivers/net/wireless/wl3501_cs.c: remove redundant memset
>
> Ulrich Kunitz (2):
> zd1211rw: removed noisy debug messages
> zd1211rw: consistent handling of ZD1211 specific rates
>
> drivers/net/wireless/wl3501_cs.c | 1 -
> drivers/net/wireless/zd1211rw/zd_chip.c | 69 +++++++-----------
> drivers/net/wireless/zd1211rw/zd_ieee80211.h | 43 +++++++----
> drivers/net/wireless/zd1211rw/zd_mac.c | 99 +++++++-------------------
> drivers/net/wireless/zd1211rw/zd_mac.h | 65 +++++++++++------
> drivers/net/wireless/zd1211rw/zd_usb.c | 2 +
> 6 files changed, 128 insertions(+), 151 deletions(-)
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-25 6:40 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-08-25 6:40 UTC (permalink / raw)
To: John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
John W. Linville wrote:
> A few items intended for 2.6.24.
>
> Individual patches here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
>
> Thanks!
>
> John
>
> ---
>
> The following changes since commit 39d3520c92cf7a28c07229ca00cc35a1e8026c77:
> Linus Torvalds (1):
> Linux 2.6.23-rc3
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Daniel Drake (2):
> zd1211rw: Add ID for Sitecom WL-162
> zd1211rw: Add ID for ZyXEL M-202 XtremeMIMO
>
> Mariusz Kozlowski (1):
> drivers/net/wireless/wl3501_cs.c: remove redundant memset
>
> Ulrich Kunitz (2):
> zd1211rw: removed noisy debug messages
> zd1211rw: consistent handling of ZD1211 specific rates
>
> drivers/net/wireless/wl3501_cs.c | 1 -
> drivers/net/wireless/zd1211rw/zd_chip.c | 69 +++++++-----------
> drivers/net/wireless/zd1211rw/zd_ieee80211.h | 43 +++++++----
> drivers/net/wireless/zd1211rw/zd_mac.c | 99 +++++++-------------------
> drivers/net/wireless/zd1211rw/zd_mac.h | 65 +++++++++++------
> drivers/net/wireless/zd1211rw/zd_usb.c | 2 +
> 6 files changed, 128 insertions(+), 151 deletions(-)
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-15 0:36 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-08-15 0:36 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
A few items intended for 2.6.24.
Individual patches here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
Thanks!
John
---
The following changes since commit 39d3520c92cf7a28c07229ca00cc35a1e8026c77:
Linus Torvalds (1):
Linux 2.6.23-rc3
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Daniel Drake (2):
zd1211rw: Add ID for Sitecom WL-162
zd1211rw: Add ID for ZyXEL M-202 XtremeMIMO
Mariusz Kozlowski (1):
drivers/net/wireless/wl3501_cs.c: remove redundant memset
Ulrich Kunitz (2):
zd1211rw: removed noisy debug messages
zd1211rw: consistent handling of ZD1211 specific rates
drivers/net/wireless/wl3501_cs.c | 1 -
drivers/net/wireless/zd1211rw/zd_chip.c | 69 +++++++-----------
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 43 +++++++----
drivers/net/wireless/zd1211rw/zd_mac.c | 99 +++++++-------------------
drivers/net/wireless/zd1211rw/zd_mac.h | 65 +++++++++++------
drivers/net/wireless/zd1211rw/zd_usb.c | 2 +
6 files changed, 128 insertions(+), 151 deletions(-)
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c8b5c22..62b8669 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -1841,7 +1841,6 @@ static int wl3501_get_encode(struct net_device *dev,
tocopy = min_t(u8, len_keys, wrqu->encoding.length);
tocopy = min_t(u8, tocopy, 100);
wrqu->encoding.length = tocopy;
- memset(extra, 0, tocopy);
memcpy(extra, keys, tocopy);
out:
return rc;
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index c39f198..4959042 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -500,8 +500,6 @@ int zd_chip_lock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp & ~UNLOCK_PHY_REGS);
tmp &= ~UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -523,8 +521,6 @@ int zd_chip_unlock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp | UNLOCK_PHY_REGS);
tmp |= UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -841,8 +837,6 @@ static int get_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
s->atim_wnd_period = values[0];
s->pre_tbtt = values[1];
s->beacon_interval = values[2];
- dev_dbg_f(zd_chip_dev(chip), "aw %u pt %u bi %u\n",
- s->atim_wnd_period, s->pre_tbtt, s->beacon_interval);
return 0;
}
@@ -864,9 +858,6 @@ static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
reqs[2].addr = CR_BCN_INTERVAL;
reqs[2].value = s->beacon_interval;
- dev_dbg_f(zd_chip_dev(chip),
- "aw %u pt %u bi %u\n", s->atim_wnd_period, s->pre_tbtt,
- s->beacon_interval);
return zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
}
@@ -1018,19 +1009,19 @@ int zd_chip_set_rts_cts_rate_locked(struct zd_chip *chip,
u32 value = 0;
/* Modulation bit */
- if (ZD_CS_TYPE(rts_rate) == ZD_CS_OFDM)
+ if (ZD_MODULATION_TYPE(rts_rate) == ZD_OFDM)
rts_mod = ZD_RX_OFDM;
dev_dbg_f(zd_chip_dev(chip), "rts_rate=%x preamble=%x\n",
rts_rate, preamble);
- value |= rts_rate << RTSCTS_SH_RTS_RATE;
+ value |= ZD_PURE_RATE(rts_rate) << RTSCTS_SH_RTS_RATE;
value |= rts_mod << RTSCTS_SH_RTS_MOD_TYPE;
value |= preamble << RTSCTS_SH_RTS_PMB_TYPE;
value |= preamble << RTSCTS_SH_CTS_PMB_TYPE;
/* We always send 11M self-CTS messages, like the vendor driver. */
- value |= ZD_CCK_RATE_11M << RTSCTS_SH_CTS_RATE;
+ value |= ZD_PURE_RATE(ZD_CCK_RATE_11M) << RTSCTS_SH_CTS_RATE;
value |= ZD_RX_CCK << RTSCTS_SH_CTS_MOD_TYPE;
return zd_iowrite32_locked(chip, value, CR_RTS_CTS_RATE);
@@ -1160,16 +1151,12 @@ out:
static int update_pwr_int(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_int_values[channel - 1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_int %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR31);
}
static int update_pwr_cal(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_cal_values[channel-1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_cal %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR68);
}
@@ -1184,9 +1171,6 @@ static int update_ofdm_cal(struct zd_chip *chip, u8 channel)
ioreqs[2].addr = CR65;
ioreqs[2].value = chip->ofdm_cal_values[OFDM_54M_INDEX][channel-1];
- dev_dbg_f(zd_chip_dev(chip),
- "channel %d ofdm_cal 36M %#04x 48M %#04x 54M %#04x\n",
- channel, ioreqs[0].value, ioreqs[1].value, ioreqs[2].value);
return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
@@ -1344,7 +1328,7 @@ int zd_chip_set_basic_rates_locked(struct zd_chip *chip, u16 cr_rates)
return zd_iowrite32_locked(chip, cr_rates, CR_BASIC_RATE_TBL);
}
-static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_db(u8 status_quality, u8 zd_rate, unsigned int size)
{
static const u16 constants[] = {
715, 655, 585, 540, 470, 410, 360, 315,
@@ -1358,7 +1342,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
/* It seems that their quality parameter is somehow per signal
* and is now transferred per bit.
*/
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_12M:
case ZD_OFDM_RATE_24M:
@@ -1385,7 +1369,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
break;
}
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_9M:
i += 3;
@@ -1409,11 +1393,11 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
return i;
}
-static int ofdm_qual_percent(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_percent(u8 status_quality, u8 zd_rate, unsigned int size)
{
int r;
- r = ofdm_qual_db(status_quality, rate, size);
+ r = ofdm_qual_db(status_quality, zd_rate, size);
ZD_ASSERT(r >= 0);
if (r < 0)
r = 0;
@@ -1474,12 +1458,17 @@ static int cck_qual_percent(u8 status_quality)
return r <= 100 ? r : 100;
}
+static inline u8 zd_rate_from_ofdm_plcp_header(const void *rx_frame)
+{
+ return ZD_OFDM | zd_ofdm_plcp_header_rate(rx_frame);
+}
+
u8 zd_rx_qual_percent(const void *rx_frame, unsigned int size,
const struct rx_status *status)
{
return (status->frame_status&ZD_RX_OFDM) ?
ofdm_qual_percent(status->signal_quality_ofdm,
- zd_ofdm_plcp_header_rate(rx_frame),
+ zd_rate_from_ofdm_plcp_header(rx_frame),
size) :
cck_qual_percent(status->signal_quality_cck);
}
@@ -1495,32 +1484,32 @@ u8 zd_rx_strength_percent(u8 rssi)
u16 zd_rx_rate(const void *rx_frame, const struct rx_status *status)
{
static const u16 ofdm_rates[] = {
- [ZD_OFDM_RATE_6M] = 60,
- [ZD_OFDM_RATE_9M] = 90,
- [ZD_OFDM_RATE_12M] = 120,
- [ZD_OFDM_RATE_18M] = 180,
- [ZD_OFDM_RATE_24M] = 240,
- [ZD_OFDM_RATE_36M] = 360,
- [ZD_OFDM_RATE_48M] = 480,
- [ZD_OFDM_RATE_54M] = 540,
+ [ZD_OFDM_PLCP_RATE_6M] = 60,
+ [ZD_OFDM_PLCP_RATE_9M] = 90,
+ [ZD_OFDM_PLCP_RATE_12M] = 120,
+ [ZD_OFDM_PLCP_RATE_18M] = 180,
+ [ZD_OFDM_PLCP_RATE_24M] = 240,
+ [ZD_OFDM_PLCP_RATE_36M] = 360,
+ [ZD_OFDM_PLCP_RATE_48M] = 480,
+ [ZD_OFDM_PLCP_RATE_54M] = 540,
};
u16 rate;
if (status->frame_status & ZD_RX_OFDM) {
+ /* Deals with PLCP OFDM rate (not zd_rates) */
u8 ofdm_rate = zd_ofdm_plcp_header_rate(rx_frame);
rate = ofdm_rates[ofdm_rate & 0xf];
} else {
- u8 cck_rate = zd_cck_plcp_header_rate(rx_frame);
- switch (cck_rate) {
- case ZD_CCK_SIGNAL_1M:
+ switch (zd_cck_plcp_header_signal(rx_frame)) {
+ case ZD_CCK_PLCP_SIGNAL_1M:
rate = 10;
break;
- case ZD_CCK_SIGNAL_2M:
+ case ZD_CCK_PLCP_SIGNAL_2M:
rate = 20;
break;
- case ZD_CCK_SIGNAL_5M5:
+ case ZD_CCK_PLCP_SIGNAL_5M5:
rate = 55;
break;
- case ZD_CCK_SIGNAL_11M:
+ case ZD_CCK_PLCP_SIGNAL_11M:
rate = 110;
break;
default:
@@ -1638,7 +1627,5 @@ int zd_chip_set_multicast_hash(struct zd_chip *chip,
{ CR_GROUP_HASH_P2, hash->high },
};
- dev_dbg_f(zd_chip_dev(chip), "hash l 0x%08x h 0x%08x\n",
- ioreqs[0].value, ioreqs[1].value);
return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
diff --git a/drivers/net/wireless/zd1211rw/zd_ieee80211.h b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
index c4f36d3..fbf6491 100644
--- a/drivers/net/wireless/zd1211rw/zd_ieee80211.h
+++ b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
@@ -43,21 +43,25 @@ struct ofdm_plcp_header {
__le16 service;
} __attribute__((packed));
-static inline u8 zd_ofdm_plcp_header_rate(
- const struct ofdm_plcp_header *header)
+static inline u8 zd_ofdm_plcp_header_rate(const struct ofdm_plcp_header *header)
{
return header->prefix[0] & 0xf;
}
-/* These are referred to as zd_rates */
-#define ZD_OFDM_RATE_6M 0xb
-#define ZD_OFDM_RATE_9M 0xf
-#define ZD_OFDM_RATE_12M 0xa
-#define ZD_OFDM_RATE_18M 0xe
-#define ZD_OFDM_RATE_24M 0x9
-#define ZD_OFDM_RATE_36M 0xd
-#define ZD_OFDM_RATE_48M 0x8
-#define ZD_OFDM_RATE_54M 0xc
+/* The following defines give the encoding of the 4-bit rate field in the
+ * OFDM (802.11a/802.11g) PLCP header. Notify that these values are used to
+ * define the zd-rate values for OFDM.
+ *
+ * See the struct zd_ctrlset definition in zd_mac.h.
+ */
+#define ZD_OFDM_PLCP_RATE_6M 0xb
+#define ZD_OFDM_PLCP_RATE_9M 0xf
+#define ZD_OFDM_PLCP_RATE_12M 0xa
+#define ZD_OFDM_PLCP_RATE_18M 0xe
+#define ZD_OFDM_PLCP_RATE_24M 0x9
+#define ZD_OFDM_PLCP_RATE_36M 0xd
+#define ZD_OFDM_PLCP_RATE_48M 0x8
+#define ZD_OFDM_PLCP_RATE_54M 0xc
struct cck_plcp_header {
u8 signal;
@@ -66,15 +70,22 @@ struct cck_plcp_header {
__le16 crc16;
} __attribute__((packed));
-static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header)
+static inline u8 zd_cck_plcp_header_signal(const struct cck_plcp_header *header)
{
return header->signal;
}
-#define ZD_CCK_SIGNAL_1M 0x0a
-#define ZD_CCK_SIGNAL_2M 0x14
-#define ZD_CCK_SIGNAL_5M5 0x37
-#define ZD_CCK_SIGNAL_11M 0x6e
+/* These defines give the encodings of the signal field in the 802.11b PLCP
+ * header. The signal field gives the bit rate of the following packet. Even
+ * if technically wrong we use CCK here also for the 1 MBit/s and 2 MBit/s
+ * rate to stay consistent with Zydas and our use of the term.
+ *
+ * Notify that these values are *not* used in the zd-rates.
+ */
+#define ZD_CCK_PLCP_SIGNAL_1M 0x0a
+#define ZD_CCK_PLCP_SIGNAL_2M 0x14
+#define ZD_CCK_PLCP_SIGNAL_5M5 0x37
+#define ZD_CCK_PLCP_SIGNAL_11M 0x6e
enum ieee80211_std {
IEEE80211B = 0x01,
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 26869d1..f9cd317 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -582,28 +582,6 @@ u8 zd_mac_get_channel(struct zd_mac *mac)
return channel;
}
-/* If wrong rate is given, we are falling back to the slowest rate: 1MBit/s */
-static u8 zd_rate_typed(u8 zd_rate)
-{
- static const u8 typed_rates[16] = {
- [ZD_CCK_RATE_1M] = ZD_CS_CCK|ZD_CCK_RATE_1M,
- [ZD_CCK_RATE_2M] = ZD_CS_CCK|ZD_CCK_RATE_2M,
- [ZD_CCK_RATE_5_5M] = ZD_CS_CCK|ZD_CCK_RATE_5_5M,
- [ZD_CCK_RATE_11M] = ZD_CS_CCK|ZD_CCK_RATE_11M,
- [ZD_OFDM_RATE_6M] = ZD_CS_OFDM|ZD_OFDM_RATE_6M,
- [ZD_OFDM_RATE_9M] = ZD_CS_OFDM|ZD_OFDM_RATE_9M,
- [ZD_OFDM_RATE_12M] = ZD_CS_OFDM|ZD_OFDM_RATE_12M,
- [ZD_OFDM_RATE_18M] = ZD_CS_OFDM|ZD_OFDM_RATE_18M,
- [ZD_OFDM_RATE_24M] = ZD_CS_OFDM|ZD_OFDM_RATE_24M,
- [ZD_OFDM_RATE_36M] = ZD_CS_OFDM|ZD_OFDM_RATE_36M,
- [ZD_OFDM_RATE_48M] = ZD_CS_OFDM|ZD_OFDM_RATE_48M,
- [ZD_OFDM_RATE_54M] = ZD_CS_OFDM|ZD_OFDM_RATE_54M,
- };
-
- ZD_ASSERT(ZD_CS_RATE_MASK == 0x0f);
- return typed_rates[zd_rate & ZD_CS_RATE_MASK];
-}
-
int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
{
struct ieee80211_device *ieee;
@@ -707,25 +685,30 @@ int zd_mac_get_range(struct zd_mac *mac, struct iw_range *range)
static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
{
+ /* ZD_PURE_RATE() must be used to remove the modulation type flag of
+ * the zd-rate values. */
static const u8 rate_divisor[] = {
- [ZD_CCK_RATE_1M] = 1,
- [ZD_CCK_RATE_2M] = 2,
- [ZD_CCK_RATE_5_5M] = 11, /* bits must be doubled */
- [ZD_CCK_RATE_11M] = 11,
- [ZD_OFDM_RATE_6M] = 6,
- [ZD_OFDM_RATE_9M] = 9,
- [ZD_OFDM_RATE_12M] = 12,
- [ZD_OFDM_RATE_18M] = 18,
- [ZD_OFDM_RATE_24M] = 24,
- [ZD_OFDM_RATE_36M] = 36,
- [ZD_OFDM_RATE_48M] = 48,
- [ZD_OFDM_RATE_54M] = 54,
+ [ZD_PURE_RATE(ZD_CCK_RATE_1M)] = 1,
+ [ZD_PURE_RATE(ZD_CCK_RATE_2M)] = 2,
+
+ /* bits must be doubled */
+ [ZD_PURE_RATE(ZD_CCK_RATE_5_5M)] = 11,
+
+ [ZD_PURE_RATE(ZD_CCK_RATE_11M)] = 11,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_6M)] = 6,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_9M)] = 9,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_12M)] = 12,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_18M)] = 18,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_24M)] = 24,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_36M)] = 36,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_48M)] = 48,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_54M)] = 54,
};
u32 bits = (u32)tx_length * 8;
u32 divisor;
- divisor = rate_divisor[zd_rate];
+ divisor = rate_divisor[ZD_PURE_RATE(zd_rate)];
if (divisor == 0)
return -EINVAL;
@@ -748,52 +731,24 @@ static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
return bits/divisor;
}
-enum {
- R2M_SHORT_PREAMBLE = 0x01,
- R2M_11A = 0x02,
-};
-
-static u8 zd_rate_to_modulation(u8 zd_rate, int flags)
-{
- u8 modulation;
-
- modulation = zd_rate_typed(zd_rate);
- if (flags & R2M_SHORT_PREAMBLE) {
- switch (ZD_CS_RATE(modulation)) {
- case ZD_CCK_RATE_2M:
- case ZD_CCK_RATE_5_5M:
- case ZD_CCK_RATE_11M:
- modulation |= ZD_CS_CCK_PREA_SHORT;
- return modulation;
- }
- }
- if (flags & R2M_11A) {
- if (ZD_CS_TYPE(modulation) == ZD_CS_OFDM)
- modulation |= ZD_CS_OFDM_MODE_11A;
- }
- return modulation;
-}
-
static void cs_set_modulation(struct zd_mac *mac, struct zd_ctrlset *cs,
struct ieee80211_hdr_4addr *hdr)
{
struct ieee80211softmac_device *softmac = ieee80211_priv(mac->netdev);
u16 ftype = WLAN_FC_GET_TYPE(le16_to_cpu(hdr->frame_ctl));
- u8 rate, zd_rate;
+ u8 rate;
int is_mgt = (ftype == IEEE80211_FTYPE_MGMT) != 0;
int is_multicast = is_multicast_ether_addr(hdr->addr1);
int short_preamble = ieee80211softmac_short_preamble_ok(softmac,
is_multicast, is_mgt);
- int flags = 0;
- /* FIXME: 802.11a? */
rate = ieee80211softmac_suggest_txrate(softmac, is_multicast, is_mgt);
+ cs->modulation = rate_to_zd_rate(rate);
- if (short_preamble)
- flags |= R2M_SHORT_PREAMBLE;
-
- zd_rate = rate_to_zd_rate(rate);
- cs->modulation = zd_rate_to_modulation(zd_rate, flags);
+ /* Set short preamble bit when appropriate */
+ if (short_preamble && ZD_MODULATION_TYPE(cs->modulation) == ZD_CCK
+ && cs->modulation != ZD_CCK_RATE_1M)
+ cs->modulation |= ZD_CCK_PREA_SHORT;
}
static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
@@ -832,7 +787,7 @@ static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
cs->control |= ZD_CS_RTS;
/* Use CTS-to-self protection if required */
- if (ZD_CS_TYPE(cs->modulation) == ZD_CS_OFDM &&
+ if (ZD_MODULATION_TYPE(cs->modulation) == ZD_OFDM &&
ieee80211softmac_protection_needed(softmac)) {
/* FIXME: avoid sending RTS *and* self-CTS, is that correct? */
cs->control &= ~ZD_CS_RTS;
@@ -893,7 +848,7 @@ static int fill_ctrlset(struct zd_mac *mac,
* - see line 53 of zdinlinef.h
*/
cs->service = 0;
- r = zd_calc_tx_length_us(&cs->service, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(&cs->service, ZD_RATE(cs->modulation),
le16_to_cpu(cs->tx_length));
if (r < 0)
return r;
@@ -902,7 +857,7 @@ static int fill_ctrlset(struct zd_mac *mac,
if (next_frag_len == 0) {
cs->next_frame_length = 0;
} else {
- r = zd_calc_tx_length_us(NULL, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(NULL, ZD_RATE(cs->modulation),
next_frag_len);
if (r < 0)
return r;
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index 9f9344e..1b15bde 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -40,28 +40,51 @@ struct zd_ctrlset {
#define ZD_CS_RESERVED_SIZE 25
-/* zd_crtlset field modulation */
-#define ZD_CS_RATE_MASK 0x0f
-#define ZD_CS_TYPE_MASK 0x10
-#define ZD_CS_RATE(modulation) ((modulation) & ZD_CS_RATE_MASK)
-#define ZD_CS_TYPE(modulation) ((modulation) & ZD_CS_TYPE_MASK)
-
-#define ZD_CS_CCK 0x00
-#define ZD_CS_OFDM 0x10
-
-/* These are referred to as zd_rates */
-#define ZD_CCK_RATE_1M 0x00
-#define ZD_CCK_RATE_2M 0x01
-#define ZD_CCK_RATE_5_5M 0x02
-#define ZD_CCK_RATE_11M 0x03
-/* The rates for OFDM are encoded as in the PLCP header. Use ZD_OFDM_RATE_*.
+/* The field modulation of struct zd_ctrlset controls the bit rate, the use
+ * of short or long preambles in 802.11b (CCK mode) or the use of 802.11a or
+ * 802.11g in OFDM mode.
+ *
+ * The term zd-rate is used for the combination of the modulation type flag
+ * and the "pure" rate value.
*/
-
-/* bit 5 is preamble (when in CCK mode), or a/g selection (when in OFDM mode) */
-#define ZD_CS_CCK_PREA_LONG 0x00
-#define ZD_CS_CCK_PREA_SHORT 0x20
-#define ZD_CS_OFDM_MODE_11G 0x00
-#define ZD_CS_OFDM_MODE_11A 0x20
+#define ZD_PURE_RATE_MASK 0x0f
+#define ZD_MODULATION_TYPE_MASK 0x10
+#define ZD_RATE_MASK (ZD_PURE_RATE_MASK|ZD_MODULATION_TYPE_MASK)
+#define ZD_PURE_RATE(modulation) ((modulation) & ZD_PURE_RATE_MASK)
+#define ZD_MODULATION_TYPE(modulation) ((modulation) & ZD_MODULATION_TYPE_MASK)
+#define ZD_RATE(modulation) ((modulation) & ZD_RATE_MASK)
+
+/* The two possible modulation types. Notify that 802.11b doesn't use the CCK
+ * codeing for the 1 and 2 MBit/s rate. We stay with the term here to remain
+ * consistent with uses the term at other places.
+ */
+#define ZD_CCK 0x00
+#define ZD_OFDM 0x10
+
+/* The ZD1211 firmware uses proprietary encodings of the 802.11b (CCK) rates.
+ * For OFDM the PLCP rate encodings are used. We combine these "pure" rates
+ * with the modulation type flag and call the resulting values zd-rates.
+ */
+#define ZD_CCK_RATE_1M (ZD_CCK|0x00)
+#define ZD_CCK_RATE_2M (ZD_CCK|0x01)
+#define ZD_CCK_RATE_5_5M (ZD_CCK|0x02)
+#define ZD_CCK_RATE_11M (ZD_CCK|0x03)
+#define ZD_OFDM_RATE_6M (ZD_OFDM|ZD_OFDM_PLCP_RATE_6M)
+#define ZD_OFDM_RATE_9M (ZD_OFDM|ZD_OFDM_PLCP_RATE_9M)
+#define ZD_OFDM_RATE_12M (ZD_OFDM|ZD_OFDM_PLCP_RATE_12M)
+#define ZD_OFDM_RATE_18M (ZD_OFDM|ZD_OFDM_PLCP_RATE_18M)
+#define ZD_OFDM_RATE_24M (ZD_OFDM|ZD_OFDM_PLCP_RATE_24M)
+#define ZD_OFDM_RATE_36M (ZD_OFDM|ZD_OFDM_PLCP_RATE_36M)
+#define ZD_OFDM_RATE_48M (ZD_OFDM|ZD_OFDM_PLCP_RATE_48M)
+#define ZD_OFDM_RATE_54M (ZD_OFDM|ZD_OFDM_PLCP_RATE_54M)
+
+/* The bit 5 of the zd_ctrlset modulation field controls the preamble in CCK
+ * mode or the 802.11a/802.11g selection in OFDM mode.
+ */
+#define ZD_CCK_PREA_LONG 0x00
+#define ZD_CCK_PREA_SHORT 0x20
+#define ZD_OFDM_MODE_11G 0x00
+#define ZD_OFDM_MODE_11A 0x20
/* zd_ctrlset control field */
#define ZD_CS_NEED_RANDOM_BACKOFF 0x01
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index a9c339e..e49628b 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -74,6 +74,8 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-15 0:36 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-08-15 0:36 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
A few items intended for 2.6.24.
Individual patches here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
Thanks!
John
---
The following changes since commit 39d3520c92cf7a28c07229ca00cc35a1e8026c77:
Linus Torvalds (1):
Linux 2.6.23-rc3
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Daniel Drake (2):
zd1211rw: Add ID for Sitecom WL-162
zd1211rw: Add ID for ZyXEL M-202 XtremeMIMO
Mariusz Kozlowski (1):
drivers/net/wireless/wl3501_cs.c: remove redundant memset
Ulrich Kunitz (2):
zd1211rw: removed noisy debug messages
zd1211rw: consistent handling of ZD1211 specific rates
drivers/net/wireless/wl3501_cs.c | 1 -
drivers/net/wireless/zd1211rw/zd_chip.c | 69 +++++++-----------
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 43 +++++++----
drivers/net/wireless/zd1211rw/zd_mac.c | 99 +++++++-------------------
drivers/net/wireless/zd1211rw/zd_mac.h | 65 +++++++++++------
drivers/net/wireless/zd1211rw/zd_usb.c | 2 +
6 files changed, 128 insertions(+), 151 deletions(-)
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c8b5c22..62b8669 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -1841,7 +1841,6 @@ static int wl3501_get_encode(struct net_device *dev,
tocopy = min_t(u8, len_keys, wrqu->encoding.length);
tocopy = min_t(u8, tocopy, 100);
wrqu->encoding.length = tocopy;
- memset(extra, 0, tocopy);
memcpy(extra, keys, tocopy);
out:
return rc;
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index c39f198..4959042 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -500,8 +500,6 @@ int zd_chip_lock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp & ~UNLOCK_PHY_REGS);
tmp &= ~UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -523,8 +521,6 @@ int zd_chip_unlock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp | UNLOCK_PHY_REGS);
tmp |= UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -841,8 +837,6 @@ static int get_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
s->atim_wnd_period = values[0];
s->pre_tbtt = values[1];
s->beacon_interval = values[2];
- dev_dbg_f(zd_chip_dev(chip), "aw %u pt %u bi %u\n",
- s->atim_wnd_period, s->pre_tbtt, s->beacon_interval);
return 0;
}
@@ -864,9 +858,6 @@ static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
reqs[2].addr = CR_BCN_INTERVAL;
reqs[2].value = s->beacon_interval;
- dev_dbg_f(zd_chip_dev(chip),
- "aw %u pt %u bi %u\n", s->atim_wnd_period, s->pre_tbtt,
- s->beacon_interval);
return zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
}
@@ -1018,19 +1009,19 @@ int zd_chip_set_rts_cts_rate_locked(struct zd_chip *chip,
u32 value = 0;
/* Modulation bit */
- if (ZD_CS_TYPE(rts_rate) == ZD_CS_OFDM)
+ if (ZD_MODULATION_TYPE(rts_rate) == ZD_OFDM)
rts_mod = ZD_RX_OFDM;
dev_dbg_f(zd_chip_dev(chip), "rts_rate=%x preamble=%x\n",
rts_rate, preamble);
- value |= rts_rate << RTSCTS_SH_RTS_RATE;
+ value |= ZD_PURE_RATE(rts_rate) << RTSCTS_SH_RTS_RATE;
value |= rts_mod << RTSCTS_SH_RTS_MOD_TYPE;
value |= preamble << RTSCTS_SH_RTS_PMB_TYPE;
value |= preamble << RTSCTS_SH_CTS_PMB_TYPE;
/* We always send 11M self-CTS messages, like the vendor driver. */
- value |= ZD_CCK_RATE_11M << RTSCTS_SH_CTS_RATE;
+ value |= ZD_PURE_RATE(ZD_CCK_RATE_11M) << RTSCTS_SH_CTS_RATE;
value |= ZD_RX_CCK << RTSCTS_SH_CTS_MOD_TYPE;
return zd_iowrite32_locked(chip, value, CR_RTS_CTS_RATE);
@@ -1160,16 +1151,12 @@ out:
static int update_pwr_int(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_int_values[channel - 1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_int %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR31);
}
static int update_pwr_cal(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_cal_values[channel-1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_cal %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR68);
}
@@ -1184,9 +1171,6 @@ static int update_ofdm_cal(struct zd_chip *chip, u8 channel)
ioreqs[2].addr = CR65;
ioreqs[2].value = chip->ofdm_cal_values[OFDM_54M_INDEX][channel-1];
- dev_dbg_f(zd_chip_dev(chip),
- "channel %d ofdm_cal 36M %#04x 48M %#04x 54M %#04x\n",
- channel, ioreqs[0].value, ioreqs[1].value, ioreqs[2].value);
return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
@@ -1344,7 +1328,7 @@ int zd_chip_set_basic_rates_locked(struct zd_chip *chip, u16 cr_rates)
return zd_iowrite32_locked(chip, cr_rates, CR_BASIC_RATE_TBL);
}
-static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_db(u8 status_quality, u8 zd_rate, unsigned int size)
{
static const u16 constants[] = {
715, 655, 585, 540, 470, 410, 360, 315,
@@ -1358,7 +1342,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
/* It seems that their quality parameter is somehow per signal
* and is now transferred per bit.
*/
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_12M:
case ZD_OFDM_RATE_24M:
@@ -1385,7 +1369,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
break;
}
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_9M:
i += 3;
@@ -1409,11 +1393,11 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
return i;
}
-static int ofdm_qual_percent(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_percent(u8 status_quality, u8 zd_rate, unsigned int size)
{
int r;
- r = ofdm_qual_db(status_quality, rate, size);
+ r = ofdm_qual_db(status_quality, zd_rate, size);
ZD_ASSERT(r >= 0);
if (r < 0)
r = 0;
@@ -1474,12 +1458,17 @@ static int cck_qual_percent(u8 status_quality)
return r <= 100 ? r : 100;
}
+static inline u8 zd_rate_from_ofdm_plcp_header(const void *rx_frame)
+{
+ return ZD_OFDM | zd_ofdm_plcp_header_rate(rx_frame);
+}
+
u8 zd_rx_qual_percent(const void *rx_frame, unsigned int size,
const struct rx_status *status)
{
return (status->frame_status&ZD_RX_OFDM) ?
ofdm_qual_percent(status->signal_quality_ofdm,
- zd_ofdm_plcp_header_rate(rx_frame),
+ zd_rate_from_ofdm_plcp_header(rx_frame),
size) :
cck_qual_percent(status->signal_quality_cck);
}
@@ -1495,32 +1484,32 @@ u8 zd_rx_strength_percent(u8 rssi)
u16 zd_rx_rate(const void *rx_frame, const struct rx_status *status)
{
static const u16 ofdm_rates[] = {
- [ZD_OFDM_RATE_6M] = 60,
- [ZD_OFDM_RATE_9M] = 90,
- [ZD_OFDM_RATE_12M] = 120,
- [ZD_OFDM_RATE_18M] = 180,
- [ZD_OFDM_RATE_24M] = 240,
- [ZD_OFDM_RATE_36M] = 360,
- [ZD_OFDM_RATE_48M] = 480,
- [ZD_OFDM_RATE_54M] = 540,
+ [ZD_OFDM_PLCP_RATE_6M] = 60,
+ [ZD_OFDM_PLCP_RATE_9M] = 90,
+ [ZD_OFDM_PLCP_RATE_12M] = 120,
+ [ZD_OFDM_PLCP_RATE_18M] = 180,
+ [ZD_OFDM_PLCP_RATE_24M] = 240,
+ [ZD_OFDM_PLCP_RATE_36M] = 360,
+ [ZD_OFDM_PLCP_RATE_48M] = 480,
+ [ZD_OFDM_PLCP_RATE_54M] = 540,
};
u16 rate;
if (status->frame_status & ZD_RX_OFDM) {
+ /* Deals with PLCP OFDM rate (not zd_rates) */
u8 ofdm_rate = zd_ofdm_plcp_header_rate(rx_frame);
rate = ofdm_rates[ofdm_rate & 0xf];
} else {
- u8 cck_rate = zd_cck_plcp_header_rate(rx_frame);
- switch (cck_rate) {
- case ZD_CCK_SIGNAL_1M:
+ switch (zd_cck_plcp_header_signal(rx_frame)) {
+ case ZD_CCK_PLCP_SIGNAL_1M:
rate = 10;
break;
- case ZD_CCK_SIGNAL_2M:
+ case ZD_CCK_PLCP_SIGNAL_2M:
rate = 20;
break;
- case ZD_CCK_SIGNAL_5M5:
+ case ZD_CCK_PLCP_SIGNAL_5M5:
rate = 55;
break;
- case ZD_CCK_SIGNAL_11M:
+ case ZD_CCK_PLCP_SIGNAL_11M:
rate = 110;
break;
default:
@@ -1638,7 +1627,5 @@ int zd_chip_set_multicast_hash(struct zd_chip *chip,
{ CR_GROUP_HASH_P2, hash->high },
};
- dev_dbg_f(zd_chip_dev(chip), "hash l 0x%08x h 0x%08x\n",
- ioreqs[0].value, ioreqs[1].value);
return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
diff --git a/drivers/net/wireless/zd1211rw/zd_ieee80211.h b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
index c4f36d3..fbf6491 100644
--- a/drivers/net/wireless/zd1211rw/zd_ieee80211.h
+++ b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
@@ -43,21 +43,25 @@ struct ofdm_plcp_header {
__le16 service;
} __attribute__((packed));
-static inline u8 zd_ofdm_plcp_header_rate(
- const struct ofdm_plcp_header *header)
+static inline u8 zd_ofdm_plcp_header_rate(const struct ofdm_plcp_header *header)
{
return header->prefix[0] & 0xf;
}
-/* These are referred to as zd_rates */
-#define ZD_OFDM_RATE_6M 0xb
-#define ZD_OFDM_RATE_9M 0xf
-#define ZD_OFDM_RATE_12M 0xa
-#define ZD_OFDM_RATE_18M 0xe
-#define ZD_OFDM_RATE_24M 0x9
-#define ZD_OFDM_RATE_36M 0xd
-#define ZD_OFDM_RATE_48M 0x8
-#define ZD_OFDM_RATE_54M 0xc
+/* The following defines give the encoding of the 4-bit rate field in the
+ * OFDM (802.11a/802.11g) PLCP header. Notify that these values are used to
+ * define the zd-rate values for OFDM.
+ *
+ * See the struct zd_ctrlset definition in zd_mac.h.
+ */
+#define ZD_OFDM_PLCP_RATE_6M 0xb
+#define ZD_OFDM_PLCP_RATE_9M 0xf
+#define ZD_OFDM_PLCP_RATE_12M 0xa
+#define ZD_OFDM_PLCP_RATE_18M 0xe
+#define ZD_OFDM_PLCP_RATE_24M 0x9
+#define ZD_OFDM_PLCP_RATE_36M 0xd
+#define ZD_OFDM_PLCP_RATE_48M 0x8
+#define ZD_OFDM_PLCP_RATE_54M 0xc
struct cck_plcp_header {
u8 signal;
@@ -66,15 +70,22 @@ struct cck_plcp_header {
__le16 crc16;
} __attribute__((packed));
-static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header)
+static inline u8 zd_cck_plcp_header_signal(const struct cck_plcp_header *header)
{
return header->signal;
}
-#define ZD_CCK_SIGNAL_1M 0x0a
-#define ZD_CCK_SIGNAL_2M 0x14
-#define ZD_CCK_SIGNAL_5M5 0x37
-#define ZD_CCK_SIGNAL_11M 0x6e
+/* These defines give the encodings of the signal field in the 802.11b PLCP
+ * header. The signal field gives the bit rate of the following packet. Even
+ * if technically wrong we use CCK here also for the 1 MBit/s and 2 MBit/s
+ * rate to stay consistent with Zydas and our use of the term.
+ *
+ * Notify that these values are *not* used in the zd-rates.
+ */
+#define ZD_CCK_PLCP_SIGNAL_1M 0x0a
+#define ZD_CCK_PLCP_SIGNAL_2M 0x14
+#define ZD_CCK_PLCP_SIGNAL_5M5 0x37
+#define ZD_CCK_PLCP_SIGNAL_11M 0x6e
enum ieee80211_std {
IEEE80211B = 0x01,
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 26869d1..f9cd317 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -582,28 +582,6 @@ u8 zd_mac_get_channel(struct zd_mac *mac)
return channel;
}
-/* If wrong rate is given, we are falling back to the slowest rate: 1MBit/s */
-static u8 zd_rate_typed(u8 zd_rate)
-{
- static const u8 typed_rates[16] = {
- [ZD_CCK_RATE_1M] = ZD_CS_CCK|ZD_CCK_RATE_1M,
- [ZD_CCK_RATE_2M] = ZD_CS_CCK|ZD_CCK_RATE_2M,
- [ZD_CCK_RATE_5_5M] = ZD_CS_CCK|ZD_CCK_RATE_5_5M,
- [ZD_CCK_RATE_11M] = ZD_CS_CCK|ZD_CCK_RATE_11M,
- [ZD_OFDM_RATE_6M] = ZD_CS_OFDM|ZD_OFDM_RATE_6M,
- [ZD_OFDM_RATE_9M] = ZD_CS_OFDM|ZD_OFDM_RATE_9M,
- [ZD_OFDM_RATE_12M] = ZD_CS_OFDM|ZD_OFDM_RATE_12M,
- [ZD_OFDM_RATE_18M] = ZD_CS_OFDM|ZD_OFDM_RATE_18M,
- [ZD_OFDM_RATE_24M] = ZD_CS_OFDM|ZD_OFDM_RATE_24M,
- [ZD_OFDM_RATE_36M] = ZD_CS_OFDM|ZD_OFDM_RATE_36M,
- [ZD_OFDM_RATE_48M] = ZD_CS_OFDM|ZD_OFDM_RATE_48M,
- [ZD_OFDM_RATE_54M] = ZD_CS_OFDM|ZD_OFDM_RATE_54M,
- };
-
- ZD_ASSERT(ZD_CS_RATE_MASK == 0x0f);
- return typed_rates[zd_rate & ZD_CS_RATE_MASK];
-}
-
int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
{
struct ieee80211_device *ieee;
@@ -707,25 +685,30 @@ int zd_mac_get_range(struct zd_mac *mac, struct iw_range *range)
static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
{
+ /* ZD_PURE_RATE() must be used to remove the modulation type flag of
+ * the zd-rate values. */
static const u8 rate_divisor[] = {
- [ZD_CCK_RATE_1M] = 1,
- [ZD_CCK_RATE_2M] = 2,
- [ZD_CCK_RATE_5_5M] = 11, /* bits must be doubled */
- [ZD_CCK_RATE_11M] = 11,
- [ZD_OFDM_RATE_6M] = 6,
- [ZD_OFDM_RATE_9M] = 9,
- [ZD_OFDM_RATE_12M] = 12,
- [ZD_OFDM_RATE_18M] = 18,
- [ZD_OFDM_RATE_24M] = 24,
- [ZD_OFDM_RATE_36M] = 36,
- [ZD_OFDM_RATE_48M] = 48,
- [ZD_OFDM_RATE_54M] = 54,
+ [ZD_PURE_RATE(ZD_CCK_RATE_1M)] = 1,
+ [ZD_PURE_RATE(ZD_CCK_RATE_2M)] = 2,
+
+ /* bits must be doubled */
+ [ZD_PURE_RATE(ZD_CCK_RATE_5_5M)] = 11,
+
+ [ZD_PURE_RATE(ZD_CCK_RATE_11M)] = 11,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_6M)] = 6,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_9M)] = 9,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_12M)] = 12,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_18M)] = 18,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_24M)] = 24,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_36M)] = 36,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_48M)] = 48,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_54M)] = 54,
};
u32 bits = (u32)tx_length * 8;
u32 divisor;
- divisor = rate_divisor[zd_rate];
+ divisor = rate_divisor[ZD_PURE_RATE(zd_rate)];
if (divisor == 0)
return -EINVAL;
@@ -748,52 +731,24 @@ static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
return bits/divisor;
}
-enum {
- R2M_SHORT_PREAMBLE = 0x01,
- R2M_11A = 0x02,
-};
-
-static u8 zd_rate_to_modulation(u8 zd_rate, int flags)
-{
- u8 modulation;
-
- modulation = zd_rate_typed(zd_rate);
- if (flags & R2M_SHORT_PREAMBLE) {
- switch (ZD_CS_RATE(modulation)) {
- case ZD_CCK_RATE_2M:
- case ZD_CCK_RATE_5_5M:
- case ZD_CCK_RATE_11M:
- modulation |= ZD_CS_CCK_PREA_SHORT;
- return modulation;
- }
- }
- if (flags & R2M_11A) {
- if (ZD_CS_TYPE(modulation) == ZD_CS_OFDM)
- modulation |= ZD_CS_OFDM_MODE_11A;
- }
- return modulation;
-}
-
static void cs_set_modulation(struct zd_mac *mac, struct zd_ctrlset *cs,
struct ieee80211_hdr_4addr *hdr)
{
struct ieee80211softmac_device *softmac = ieee80211_priv(mac->netdev);
u16 ftype = WLAN_FC_GET_TYPE(le16_to_cpu(hdr->frame_ctl));
- u8 rate, zd_rate;
+ u8 rate;
int is_mgt = (ftype == IEEE80211_FTYPE_MGMT) != 0;
int is_multicast = is_multicast_ether_addr(hdr->addr1);
int short_preamble = ieee80211softmac_short_preamble_ok(softmac,
is_multicast, is_mgt);
- int flags = 0;
- /* FIXME: 802.11a? */
rate = ieee80211softmac_suggest_txrate(softmac, is_multicast, is_mgt);
+ cs->modulation = rate_to_zd_rate(rate);
- if (short_preamble)
- flags |= R2M_SHORT_PREAMBLE;
-
- zd_rate = rate_to_zd_rate(rate);
- cs->modulation = zd_rate_to_modulation(zd_rate, flags);
+ /* Set short preamble bit when appropriate */
+ if (short_preamble && ZD_MODULATION_TYPE(cs->modulation) == ZD_CCK
+ && cs->modulation != ZD_CCK_RATE_1M)
+ cs->modulation |= ZD_CCK_PREA_SHORT;
}
static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
@@ -832,7 +787,7 @@ static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
cs->control |= ZD_CS_RTS;
/* Use CTS-to-self protection if required */
- if (ZD_CS_TYPE(cs->modulation) == ZD_CS_OFDM &&
+ if (ZD_MODULATION_TYPE(cs->modulation) == ZD_OFDM &&
ieee80211softmac_protection_needed(softmac)) {
/* FIXME: avoid sending RTS *and* self-CTS, is that correct? */
cs->control &= ~ZD_CS_RTS;
@@ -893,7 +848,7 @@ static int fill_ctrlset(struct zd_mac *mac,
* - see line 53 of zdinlinef.h
*/
cs->service = 0;
- r = zd_calc_tx_length_us(&cs->service, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(&cs->service, ZD_RATE(cs->modulation),
le16_to_cpu(cs->tx_length));
if (r < 0)
return r;
@@ -902,7 +857,7 @@ static int fill_ctrlset(struct zd_mac *mac,
if (next_frag_len == 0) {
cs->next_frame_length = 0;
} else {
- r = zd_calc_tx_length_us(NULL, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(NULL, ZD_RATE(cs->modulation),
next_frag_len);
if (r < 0)
return r;
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index 9f9344e..1b15bde 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -40,28 +40,51 @@ struct zd_ctrlset {
#define ZD_CS_RESERVED_SIZE 25
-/* zd_crtlset field modulation */
-#define ZD_CS_RATE_MASK 0x0f
-#define ZD_CS_TYPE_MASK 0x10
-#define ZD_CS_RATE(modulation) ((modulation) & ZD_CS_RATE_MASK)
-#define ZD_CS_TYPE(modulation) ((modulation) & ZD_CS_TYPE_MASK)
-
-#define ZD_CS_CCK 0x00
-#define ZD_CS_OFDM 0x10
-
-/* These are referred to as zd_rates */
-#define ZD_CCK_RATE_1M 0x00
-#define ZD_CCK_RATE_2M 0x01
-#define ZD_CCK_RATE_5_5M 0x02
-#define ZD_CCK_RATE_11M 0x03
-/* The rates for OFDM are encoded as in the PLCP header. Use ZD_OFDM_RATE_*.
+/* The field modulation of struct zd_ctrlset controls the bit rate, the use
+ * of short or long preambles in 802.11b (CCK mode) or the use of 802.11a or
+ * 802.11g in OFDM mode.
+ *
+ * The term zd-rate is used for the combination of the modulation type flag
+ * and the "pure" rate value.
*/
-
-/* bit 5 is preamble (when in CCK mode), or a/g selection (when in OFDM mode) */
-#define ZD_CS_CCK_PREA_LONG 0x00
-#define ZD_CS_CCK_PREA_SHORT 0x20
-#define ZD_CS_OFDM_MODE_11G 0x00
-#define ZD_CS_OFDM_MODE_11A 0x20
+#define ZD_PURE_RATE_MASK 0x0f
+#define ZD_MODULATION_TYPE_MASK 0x10
+#define ZD_RATE_MASK (ZD_PURE_RATE_MASK|ZD_MODULATION_TYPE_MASK)
+#define ZD_PURE_RATE(modulation) ((modulation) & ZD_PURE_RATE_MASK)
+#define ZD_MODULATION_TYPE(modulation) ((modulation) & ZD_MODULATION_TYPE_MASK)
+#define ZD_RATE(modulation) ((modulation) & ZD_RATE_MASK)
+
+/* The two possible modulation types. Notify that 802.11b doesn't use the CCK
+ * codeing for the 1 and 2 MBit/s rate. We stay with the term here to remain
+ * consistent with uses the term at other places.
+ */
+#define ZD_CCK 0x00
+#define ZD_OFDM 0x10
+
+/* The ZD1211 firmware uses proprietary encodings of the 802.11b (CCK) rates.
+ * For OFDM the PLCP rate encodings are used. We combine these "pure" rates
+ * with the modulation type flag and call the resulting values zd-rates.
+ */
+#define ZD_CCK_RATE_1M (ZD_CCK|0x00)
+#define ZD_CCK_RATE_2M (ZD_CCK|0x01)
+#define ZD_CCK_RATE_5_5M (ZD_CCK|0x02)
+#define ZD_CCK_RATE_11M (ZD_CCK|0x03)
+#define ZD_OFDM_RATE_6M (ZD_OFDM|ZD_OFDM_PLCP_RATE_6M)
+#define ZD_OFDM_RATE_9M (ZD_OFDM|ZD_OFDM_PLCP_RATE_9M)
+#define ZD_OFDM_RATE_12M (ZD_OFDM|ZD_OFDM_PLCP_RATE_12M)
+#define ZD_OFDM_RATE_18M (ZD_OFDM|ZD_OFDM_PLCP_RATE_18M)
+#define ZD_OFDM_RATE_24M (ZD_OFDM|ZD_OFDM_PLCP_RATE_24M)
+#define ZD_OFDM_RATE_36M (ZD_OFDM|ZD_OFDM_PLCP_RATE_36M)
+#define ZD_OFDM_RATE_48M (ZD_OFDM|ZD_OFDM_PLCP_RATE_48M)
+#define ZD_OFDM_RATE_54M (ZD_OFDM|ZD_OFDM_PLCP_RATE_54M)
+
+/* The bit 5 of the zd_ctrlset modulation field controls the preamble in CCK
+ * mode or the 802.11a/802.11g selection in OFDM mode.
+ */
+#define ZD_CCK_PREA_LONG 0x00
+#define ZD_CCK_PREA_SHORT 0x20
+#define ZD_OFDM_MODE_11G 0x00
+#define ZD_OFDM_MODE_11A 0x20
/* zd_ctrlset control field */
#define ZD_CS_NEED_RANDOM_BACKOFF 0x01
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index a9c339e..e49628b 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -74,6 +74,8 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-08-06 20:16 ` John W. Linville
(?)
@ 2007-08-07 22:21 ` Jeff Garzik
-1 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-08-07 22:21 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
John W. Linville wrote:
> These are intended for 2.6.24...
>
> ---
>
> The following changes since commit fdc8f43b5e49b64b251bb48da95193a13ac0132f:
> Michael Buesch (1):
> softmac: Fix deadlock of wx_set_essid with assoc work
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Bill Nottingham (1):
> remove gratuitous space in airo module description
>
> Faidon Liambotis (2):
> Kconfig: order options
> Kconfig: remove references of pcmcia-cs
>
> Mariusz Kozlowski (1):
> drivers/net/wireless/prism54/oid_mgt.c: kmalloc + memset conversion to kzalloc
>
> Matthias Kaehlcke (1):
> Use mutex instead of semaphore in the Host AP driver
>
> Ulrich Kunitz (1):
> zd1211rw: monitor all packets
>
> Yoann Padioleau (1):
> dev->priv to netdev_priv(dev), for drivers/net/wireless
>
> drivers/net/wireless/Kconfig | 85 +++++++++++----------------
> drivers/net/wireless/airo.c | 4 +-
> drivers/net/wireless/arlan-proc.c | 14 ++--
> drivers/net/wireless/hostap/hostap_cs.c | 2 +-
> drivers/net/wireless/hostap/hostap_hw.c | 16 +++---
> drivers/net/wireless/hostap/hostap_ioctl.c | 14 ++--
> drivers/net/wireless/hostap/hostap_wlan.h | 3 +-
> drivers/net/wireless/orinoco_tmd.c | 2 +-
> drivers/net/wireless/prism54/isl_ioctl.c | 6 +-
> drivers/net/wireless/prism54/oid_mgt.c | 4 +-
> drivers/net/wireless/ray_cs.c | 66 +++++++++++-----------
> drivers/net/wireless/strip.c | 2 +-
> drivers/net/wireless/wl3501_cs.c | 66 +++++++++++-----------
> drivers/net/wireless/zd1211rw/zd_chip.h | 5 --
> drivers/net/wireless/zd1211rw/zd_mac.c | 44 ++++++++++++--
> 15 files changed, 172 insertions(+), 161 deletions(-)
pulled into #upstream
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-06 20:16 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-08-06 20:16 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
These are intended for 2.6.24...
---
The following changes since commit fdc8f43b5e49b64b251bb48da95193a13ac0132f:
Michael Buesch (1):
softmac: Fix deadlock of wx_set_essid with assoc work
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Bill Nottingham (1):
remove gratuitous space in airo module description
Faidon Liambotis (2):
Kconfig: order options
Kconfig: remove references of pcmcia-cs
Mariusz Kozlowski (1):
drivers/net/wireless/prism54/oid_mgt.c: kmalloc + memset conversion to kzalloc
Matthias Kaehlcke (1):
Use mutex instead of semaphore in the Host AP driver
Ulrich Kunitz (1):
zd1211rw: monitor all packets
Yoann Padioleau (1):
dev->priv to netdev_priv(dev), for drivers/net/wireless
drivers/net/wireless/Kconfig | 85 +++++++++++----------------
drivers/net/wireless/airo.c | 4 +-
drivers/net/wireless/arlan-proc.c | 14 ++--
drivers/net/wireless/hostap/hostap_cs.c | 2 +-
drivers/net/wireless/hostap/hostap_hw.c | 16 +++---
drivers/net/wireless/hostap/hostap_ioctl.c | 14 ++--
drivers/net/wireless/hostap/hostap_wlan.h | 3 +-
drivers/net/wireless/orinoco_tmd.c | 2 +-
drivers/net/wireless/prism54/isl_ioctl.c | 6 +-
drivers/net/wireless/prism54/oid_mgt.c | 4 +-
drivers/net/wireless/ray_cs.c | 66 +++++++++++-----------
drivers/net/wireless/strip.c | 2 +-
drivers/net/wireless/wl3501_cs.c | 66 +++++++++++-----------
drivers/net/wireless/zd1211rw/zd_chip.h | 5 --
drivers/net/wireless/zd1211rw/zd_mac.c | 44 ++++++++++++--
15 files changed, 172 insertions(+), 161 deletions(-)
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index ae27af0..80667b1 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -63,11 +63,6 @@ config WAVELAN
a Radio LAN (wireless Ethernet-like Local Area Network) using the
radio frequencies 900 MHz and 2.4 GHz.
- This driver support the ISA version of the WaveLAN card. A separate
- driver for the PCMCIA (PC-card) hardware is available in David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location).
-
If you want to use an ISA WaveLAN card under Linux, say Y and read
the Ethernet-HOWTO, available from
<http://www.tldp.org/docs.html#howto>. Some more specific
@@ -379,30 +374,6 @@ config PCI_HERMES
common. Some of the built-in wireless adaptors in laptops are of
this variety.
-config ATMEL
- tristate "Atmel at76c50x chipset 802.11b support"
- depends on (PCI || PCMCIA) && WLAN_80211
- select WIRELESS_EXT
- select FW_LOADER
- select CRC32
- ---help---
- A driver 802.11b wireless cards based on the Atmel fast-vnet
- chips. This driver supports standard Linux wireless extensions.
-
- Many cards based on this chipset do not have flash memory
- and need their firmware loaded at start-up. If yours is
- one of these, you will need to provide a firmware image
- to be loaded into the card by the driver. The Atmel
- firmware package can be downloaded from
- <http://www.thekelleys.org.uk/atmel>
-
-config PCI_ATMEL
- tristate "Atmel at76c506 PCI cards"
- depends on ATMEL && PCI
- ---help---
- Enable support for PCI and mini-PCI cards containing the
- Atmel at76c506 chip.
-
config PCMCIA_HERMES
tristate "Hermes PCMCIA card support"
depends on PCMCIA && HERMES
@@ -414,12 +385,7 @@ config PCMCIA_HERMES
such as the Linksys, D-Link and Farallon Skyline. It should also
work on Symbol cards such as the 3Com AirConnect and Ericsson WLAN.
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- You will also very likely also need the Wireless Tools in order to
+ You will very likely need the Wireless Tools in order to
configure your card and that /etc/pcmcia/wireless.opts works:
<http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
@@ -437,6 +403,40 @@ config PCMCIA_SPECTRUM
for downloading Symbol firmware are available at
<http://sourceforge.net/projects/orinoco/>
+config ATMEL
+ tristate "Atmel at76c50x chipset 802.11b support"
+ depends on (PCI || PCMCIA) && WLAN_80211
+ select WIRELESS_EXT
+ select FW_LOADER
+ select CRC32
+ ---help---
+ A driver 802.11b wireless cards based on the Atmel fast-vnet
+ chips. This driver supports standard Linux wireless extensions.
+
+ Many cards based on this chipset do not have flash memory
+ and need their firmware loaded at start-up. If yours is
+ one of these, you will need to provide a firmware image
+ to be loaded into the card by the driver. The Atmel
+ firmware package can be downloaded from
+ <http://www.thekelleys.org.uk/atmel>
+
+config PCI_ATMEL
+ tristate "Atmel at76c506 PCI cards"
+ depends on ATMEL && PCI
+ ---help---
+ Enable support for PCI and mini-PCI cards containing the
+ Atmel at76c506 chip.
+
+config PCMCIA_ATMEL
+ tristate "Atmel at76c502/at76c504 PCMCIA cards"
+ depends on ATMEL && PCMCIA
+ select WIRELESS_EXT
+ select FW_LOADER
+ select CRC32
+ ---help---
+ Enable support for PCMCIA cards containing the
+ Atmel at76c502 and at76c504 chips.
+
config AIRO_CS
tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
depends on PCMCIA && (BROKEN || !M32R) && WLAN_80211
@@ -457,21 +457,6 @@ config AIRO_CS
and Cisco proprietary API, so both the Linux Wireless Tools and the
Cisco Linux utilities can be used to configure the card.
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
-config PCMCIA_ATMEL
- tristate "Atmel at76c502/at76c504 PCMCIA cards"
- depends on ATMEL && PCMCIA
- select WIRELESS_EXT
- select FW_LOADER
- select CRC32
- ---help---
- Enable support for PCMCIA cards containing the
- Atmel at76c502 and at76c504 chips.
-
config PCMCIA_WL3501
tristate "Planet WL3501 PCMCIA cards"
depends on EXPERIMENTAL && PCMCIA && WLAN_80211
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index ee1cc14..a152797 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -241,8 +241,8 @@ static int proc_perm = 0644;
MODULE_AUTHOR("Benjamin Reed");
MODULE_DESCRIPTION("Support for Cisco/Aironet 802.11 wireless ethernet \
- cards. Direct support for ISA/PCI/MPI cards and support \
- for PCMCIA when used with airo_cs.");
+cards. Direct support for ISA/PCI/MPI cards and support \
+for PCMCIA when used with airo_cs.");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340/350");
module_param_array(io, int, NULL, 0);
diff --git a/drivers/net/wireless/arlan-proc.c b/drivers/net/wireless/arlan-proc.c
index 015abd9..c6e70db 100644
--- a/drivers/net/wireless/arlan-proc.c
+++ b/drivers/net/wireless/arlan-proc.c
@@ -435,7 +435,7 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, struct file *filp,
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
@@ -654,7 +654,7 @@ static int arlan_sysctl_info161719(ctl_table * ctl, int write, struct file *filp
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -688,7 +688,7 @@ static int arlan_sysctl_infotxRing(ctl_table * ctl, int write, struct file *filp
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -716,7 +716,7 @@ static int arlan_sysctl_inforxRing(ctl_table * ctl, int write, struct file *filp
pos += sprintf(arlan_drive_info + pos, "No device found here \n");
goto final;
} else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -745,7 +745,7 @@ static int arlan_sysctl_info18(ctl_table * ctl, int write, struct file *filp,
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -780,7 +780,7 @@ static int arlan_configure(ctl_table * ctl, int write, struct file *filp,
}
else if (arlan_device[devnum] != NULL)
{
- priv = arlan_device[devnum]->priv;
+ priv = netdev_priv(arlan_device[devnum]);
arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_CONF);
}
@@ -805,7 +805,7 @@ static int arlan_sysctl_reset(ctl_table * ctl, int write, struct file *filp,
}
else if (arlan_device[devnum] != NULL)
{
- priv = arlan_device[devnum]->priv;
+ priv = netdev_priv(arlan_device[devnum]);
arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_RESET);
} else
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index 30e723f..f9cf22b 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -272,7 +272,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
{
int res, ret = 0;
conf_reg_t reg;
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
tuple_t tuple;
cisparse_t *parse = NULL;
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index 959887b..adedb97 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -825,7 +825,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
local->hw_downloading)
return -ENODEV;
- res = down_interruptible(&local->rid_bap_sem);
+ res = mutex_lock_interruptible(&local->rid_bap_mtx);
if (res)
return res;
@@ -834,7 +834,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
printk(KERN_DEBUG "%s: hfa384x_get_rid: CMDCODE_ACCESS failed "
"(res=%d, rid=%04x, len=%d)\n",
dev->name, res, rid, len);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
return res;
}
@@ -861,7 +861,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
res = hfa384x_from_bap(dev, BAP0, buf, len);
spin_unlock_bh(&local->baplock);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
if (res) {
if (res != -ENODATA)
@@ -902,7 +902,7 @@ static int hfa384x_set_rid(struct net_device *dev, u16 rid, void *buf, int len)
/* RID len in words and +1 for rec.rid */
rec.len = cpu_to_le16(len / 2 + len % 2 + 1);
- res = down_interruptible(&local->rid_bap_sem);
+ res = mutex_lock_interruptible(&local->rid_bap_mtx);
if (res)
return res;
@@ -917,12 +917,12 @@ static int hfa384x_set_rid(struct net_device *dev, u16 rid, void *buf, int len)
if (res) {
printk(KERN_DEBUG "%s: hfa384x_set_rid (rid=%04x, len=%d) - "
"failed - res=%d\n", dev->name, rid, len, res);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
return res;
}
res = hfa384x_cmd(dev, HFA384X_CMDCODE_ACCESS_WRITE, rid, NULL, NULL);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
if (res) {
printk(KERN_DEBUG "%s: hfa384x_set_rid: CMDCODE_ACCESS_WRITE "
@@ -3171,7 +3171,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
spin_lock_init(&local->cmdlock);
spin_lock_init(&local->baplock);
spin_lock_init(&local->lock);
- init_MUTEX(&local->rid_bap_sem);
+ mutex_init(&local->rid_bap_mtx);
if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES)
card_idx = 0;
@@ -3424,7 +3424,7 @@ static void prism2_suspend(struct net_device *dev)
struct local_info *local;
union iwreq_data wrqu;
- iface = dev->priv;
+ iface = netdev_priv(dev);
local = iface->local;
/* Send disconnect event, e.g., to trigger reassociation after resume
diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c
index 8c71077..d58ac84 100644
--- a/drivers/net/wireless/hostap/hostap_ioctl.c
+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
@@ -3088,7 +3088,7 @@ static int prism2_ioctl_priv_download(local_info_t *local, struct iw_point *p)
static int prism2_set_genericelement(struct net_device *dev, u8 *elem,
size_t len)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
u8 *buf;
@@ -3116,7 +3116,7 @@ static int prism2_ioctl_siwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
switch (data->flags & IW_AUTH_INDEX) {
@@ -3182,7 +3182,7 @@ static int prism2_ioctl_giwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
switch (data->flags & IW_AUTH_INDEX) {
@@ -3221,7 +3221,7 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;
int i, ret = 0;
@@ -3395,7 +3395,7 @@ static int prism2_ioctl_giwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct ieee80211_crypt_data **crypt;
void *sta_ptr;
@@ -3716,7 +3716,7 @@ static int prism2_ioctl_giwgenie(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
int len = local->generic_elem_len - 2;
@@ -3755,7 +3755,7 @@ static int prism2_ioctl_siwmlme(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct iw_mlme *mlme = (struct iw_mlme *) extra;
u16 reason;
diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
index 87a54aa..a42325c 100644
--- a/drivers/net/wireless/hostap/hostap_wlan.h
+++ b/drivers/net/wireless/hostap/hostap_wlan.h
@@ -3,6 +3,7 @@
#include <linux/wireless.h>
#include <linux/netdevice.h>
+#include <linux/mutex.h>
#include <net/iw_handler.h>
#include "hostap_config.h"
@@ -641,7 +642,7 @@ struct local_info {
* when removing entries from the list.
* TX and RX paths can use read lock. */
spinlock_t cmdlock, baplock, lock;
- struct semaphore rid_bap_sem;
+ struct mutex rid_bap_mtx;
u16 infofid; /* MAC buffer id for info frame */
/* txfid, intransmitfid, next_txtid, and next_alloc are protected by
* txfidlock */
diff --git a/drivers/net/wireless/orinoco_tmd.c b/drivers/net/wireless/orinoco_tmd.c
index 7c7b960..b9c54d8 100644
--- a/drivers/net/wireless/orinoco_tmd.c
+++ b/drivers/net/wireless/orinoco_tmd.c
@@ -190,7 +190,7 @@ static int orinoco_tmd_init_one(struct pci_dev *pdev,
static void __devexit orinoco_tmd_remove_one(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
- struct orinoco_private *priv = dev->priv;
+ struct orinoco_private *priv = netdev_priv(dev);
struct orinoco_pci_card *card = priv->card;
unregister_netdev(dev);
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
index 585f599..f106661 100644
--- a/drivers/net/wireless/prism54/isl_ioctl.c
+++ b/drivers/net/wireless/prism54/isl_ioctl.c
@@ -1753,7 +1753,7 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
int rvalue;
enum oid_num_t n = dwrq->flags;
- rvalue = mgt_get_request((islpci_private *) ndev->priv, n, 0, NULL, &r);
+ rvalue = mgt_get_request(netdev_priv(ndev), n, 0, NULL, &r);
dwrq->length = mgt_response_to_str(n, &r, extra);
if ((isl_oid[n].flags & OID_FLAG_TYPE) != OID_TYPE_U32)
kfree(r.ptr);
@@ -1766,7 +1766,7 @@ prism54_set_u32(struct net_device *ndev, struct iw_request_info *info,
{
u32 oid = uwrq[0], u = uwrq[1];
- return mgt_set_request((islpci_private *) ndev->priv, oid, 0, &u);
+ return mgt_set_request(netdev_priv(ndev), oid, 0, &u);
}
static int
@@ -1775,7 +1775,7 @@ prism54_set_raw(struct net_device *ndev, struct iw_request_info *info,
{
u32 oid = dwrq->flags;
- return mgt_set_request((islpci_private *) ndev->priv, oid, 0, extra);
+ return mgt_set_request(netdev_priv(ndev), oid, 0, extra);
}
void
diff --git a/drivers/net/wireless/prism54/oid_mgt.c b/drivers/net/wireless/prism54/oid_mgt.c
index 4278032..57a4ac3 100644
--- a/drivers/net/wireless/prism54/oid_mgt.c
+++ b/drivers/net/wireless/prism54/oid_mgt.c
@@ -244,13 +244,11 @@ mgt_init(islpci_private *priv)
/* Alloc the cache */
for (i = 0; i < OID_NUM_LAST; i++) {
if (isl_oid[i].flags & OID_FLAG_CACHED) {
- priv->mib[i] = kmalloc(isl_oid[i].size *
+ priv->mib[i] = kzalloc(isl_oid[i].size *
(isl_oid[i].range + 1),
GFP_KERNEL);
if (!priv->mib[i])
return -ENOMEM;
- memset(priv->mib[i], 0,
- isl_oid[i].size * (isl_oid[i].range + 1));
} else
priv->mib[i] = NULL;
}
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 3be6242..1d9dbf8 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -314,7 +314,7 @@ static int ray_probe(struct pcmcia_device *p_dev)
if (!dev)
goto fail_alloc_dev;
- local = dev->priv;
+ local = netdev_priv(dev);
local->finder = p_dev;
/* The io structure describes IO port mapping. None used here */
@@ -388,7 +388,7 @@ static void ray_detach(struct pcmcia_device *link)
ray_release(link);
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
del_timer(&local->timer);
if (link->priv) {
@@ -412,7 +412,7 @@ static int ray_config(struct pcmcia_device *link)
win_req_t req;
memreq_t mem;
struct net_device *dev = (struct net_device *)link->priv;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
DEBUG(1, "ray_config(0x%p)\n", link);
@@ -520,7 +520,7 @@ static int ray_init(struct net_device *dev)
int i;
UCHAR *p;
struct ccs __iomem *pccs;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
DEBUG(1, "ray_init(0x%p)\n", dev);
if (!(pcmcia_dev_present(link))) {
@@ -581,7 +581,7 @@ static int ray_init(struct net_device *dev)
static int dl_startup_params(struct net_device *dev)
{
int ccsindex;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct ccs __iomem *pccs;
struct pcmcia_device *link = local->finder;
@@ -786,7 +786,7 @@ static void join_net(u_long data)
static void ray_release(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int i;
DEBUG(1, "ray_release(0x%p)\n", link);
@@ -834,7 +834,7 @@ int ray_dev_init(struct net_device *dev)
#ifdef RAY_IMMEDIATE_INIT
int i;
#endif /* RAY_IMMEDIATE_INIT */
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
DEBUG(1,"ray_dev_init(dev=%p)\n",dev);
@@ -868,7 +868,7 @@ int ray_dev_init(struct net_device *dev)
/*===========================================================================*/
static int ray_dev_config(struct net_device *dev, struct ifmap *map)
{
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
/* Dummy routine to satisfy device structure */
DEBUG(1,"ray_dev_config(dev=%p,ifmap=%p)\n",dev,map);
@@ -882,7 +882,7 @@ static int ray_dev_config(struct net_device *dev, struct ifmap *map)
/*===========================================================================*/
static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
short length = skb->len;
@@ -925,7 +925,7 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int ray_hw_xmit(unsigned char* data, int len, struct net_device* dev,
UCHAR msg_type)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct ccs __iomem *pccs;
int ccsindex;
int offset;
@@ -1099,7 +1099,7 @@ static int ray_set_freq(struct net_device *dev,
struct iw_freq *fwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int err = -EINPROGRESS; /* Call commit handler */
/* Reject if card is already initialised */
@@ -1124,7 +1124,7 @@ static int ray_get_freq(struct net_device *dev,
struct iw_freq *fwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
fwrq->m = local->sparm.b5.a_hop_pattern;
fwrq->e = 0;
@@ -1140,7 +1140,7 @@ static int ray_set_essid(struct net_device *dev,
struct iw_point *dwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Reject if card is already initialised */
if(local->card_status != CARD_AWAITING_PARAM)
@@ -1173,7 +1173,7 @@ static int ray_get_essid(struct net_device *dev,
struct iw_point *dwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Get the essid that was set */
memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
@@ -1194,7 +1194,7 @@ static int ray_get_wap(struct net_device *dev,
struct sockaddr *awrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
memcpy(awrq->sa_data, local->bss_id, ETH_ALEN);
awrq->sa_family = ARPHRD_ETHER;
@@ -1211,7 +1211,7 @@ static int ray_set_rate(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Reject if card is already initialised */
if(local->card_status != CARD_AWAITING_PARAM)
@@ -1240,7 +1240,7 @@ static int ray_get_rate(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
if(local->net_default_tx_rate == 3)
vwrq->value = 2000000; /* Hum... */
@@ -1260,7 +1260,7 @@ static int ray_set_rts(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int rthr = vwrq->value;
/* Reject if card is already initialised */
@@ -1290,7 +1290,7 @@ static int ray_get_rts(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
vwrq->value = (local->sparm.b5.a_rts_threshold[0] << 8)
+ local->sparm.b5.a_rts_threshold[1];
@@ -1309,7 +1309,7 @@ static int ray_set_frag(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int fthr = vwrq->value;
/* Reject if card is already initialised */
@@ -1338,7 +1338,7 @@ static int ray_get_frag(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
vwrq->value = (local->sparm.b5.a_frag_threshold[0] << 8)
+ local->sparm.b5.a_frag_threshold[1];
@@ -1357,7 +1357,7 @@ static int ray_set_mode(struct net_device *dev,
__u32 *uwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int err = -EINPROGRESS; /* Call commit handler */
char card_mode = 1;
@@ -1389,7 +1389,7 @@ static int ray_get_mode(struct net_device *dev,
__u32 *uwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
if(local->sparm.b5.a_network_type)
*uwrq = IW_MODE_INFRA;
@@ -1492,7 +1492,7 @@ static int ray_commit(struct net_device *dev,
*/
static iw_stats * ray_get_wireless_stats(struct net_device * dev)
{
- ray_dev_t * local = (ray_dev_t *) dev->priv;
+ ray_dev_t * local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
struct status __iomem *p = local->sram + STATUS_BASE;
@@ -1580,7 +1580,7 @@ static const struct iw_handler_def ray_handler_def =
/*===========================================================================*/
static int ray_open(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link;
link = local->finder;
@@ -1614,7 +1614,7 @@ static int ray_open(struct net_device *dev)
/*===========================================================================*/
static int ray_dev_close(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link;
link = local->finder;
@@ -1773,7 +1773,7 @@ static int parse_addr(char *in_str, UCHAR *out)
/*===========================================================================*/
static struct net_device_stats *ray_get_stats(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
struct status __iomem *p = local->sram + STATUS_BASE;
if (!(pcmcia_dev_present(link))) {
@@ -1803,7 +1803,7 @@ static struct net_device_stats *ray_get_stats(struct net_device *dev)
/*===========================================================================*/
static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value, int len)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
int ccsindex;
int i;
@@ -1840,7 +1840,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
int ccsindex;
struct ccs __iomem *pccs;
int i = 0;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
void __iomem *p = local->sram + HOST_TO_ECF_BASE;
@@ -1884,7 +1884,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
/*===========================================================================*/
static void set_multicast_list(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
UCHAR promisc;
DEBUG(2,"ray_cs set_multicast_list(%p)\n",dev);
@@ -1935,7 +1935,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev);
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
link = (struct pcmcia_device *)local->finder;
if (!pcmcia_dev_present(link)) {
DEBUG(2,"ray_cs interrupt from device not present or suspended.\n");
@@ -2165,7 +2165,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs, unsigned i
{
struct sk_buff *skb = NULL;
struct rcs __iomem *prcslink = prcs;
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
UCHAR *rx_ptr;
int total_len;
int tmp;
@@ -2618,7 +2618,7 @@ static int ray_cs_proc_read(char *buf, char **start, off_t offset, int len)
dev = (struct net_device *)link->priv;
if (!dev)
return 0;
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
if (!local)
return 0;
diff --git a/drivers/net/wireless/strip.c b/drivers/net/wireless/strip.c
index ef32a5c..ed146ae 100644
--- a/drivers/net/wireless/strip.c
+++ b/drivers/net/wireless/strip.c
@@ -2571,7 +2571,7 @@ static struct strip *strip_alloc(void)
return NULL; /* If no more memory, return */
- strip_info = dev->priv;
+ strip_info = netdev_priv(dev);
strip_info->dev = dev;
strip_info->magic = STRIP_MAGIC;
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c8b5c22..72f3d97 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -859,7 +859,7 @@ static int wl3501_esbq_confirm(struct wl3501_card *this)
static void wl3501_online(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
printk(KERN_INFO "%s: Wireless LAN online. BSSID: "
"%02X %02X %02X %02X %02X %02X\n", dev->name,
@@ -907,7 +907,7 @@ static int wl3501_mgmt_association(struct wl3501_card *this)
static void wl3501_mgmt_join_confirm(struct net_device *dev, u16 addr)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct wl3501_join_confirm sig;
dprintk(3, "entry");
@@ -1046,7 +1046,7 @@ static inline void wl3501_start_confirm_interrupt(struct net_device *dev,
static inline void wl3501_assoc_confirm_interrupt(struct net_device *dev,
u16 addr)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct wl3501_assoc_confirm sig;
dprintk(3, "entry");
@@ -1075,7 +1075,7 @@ static inline void wl3501_rx_interrupt(struct net_device *dev)
int morepkts;
u16 addr;
u8 sig_id;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
dprintk(3, "entry");
loop:
@@ -1257,7 +1257,7 @@ fail:
static int wl3501_close(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = -ENODEV;
unsigned long flags;
struct pcmcia_device *link;
@@ -1289,7 +1289,7 @@ static int wl3501_close(struct net_device *dev)
*/
static int wl3501_reset(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = -ENODEV;
wl3501_block_interrupt(this);
@@ -1318,7 +1318,7 @@ out:
static void wl3501_tx_timeout(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct net_device_stats *stats = &this->stats;
unsigned long flags;
int rc;
@@ -1344,7 +1344,7 @@ static void wl3501_tx_timeout(struct net_device *dev)
static int wl3501_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
int enabled, rc;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
spin_lock_irqsave(&this->lock, flags);
@@ -1371,7 +1371,7 @@ static int wl3501_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int wl3501_open(struct net_device *dev)
{
int rc = -ENODEV;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
struct pcmcia_device *link;
link = this->p_dev;
@@ -1410,14 +1410,14 @@ fail:
static struct net_device_stats *wl3501_get_stats(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
return &this->stats;
}
static struct iw_statistics *wl3501_get_wireless_stats(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct iw_statistics *wstats = &this->wstats;
u32 value; /* size checked: it is u32 */
@@ -1497,7 +1497,7 @@ static int wl3501_get_name(struct net_device *dev, struct iw_request_info *info,
static int wl3501_set_freq(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int channel = wrqu->freq.m;
int rc = -EINVAL;
@@ -1511,7 +1511,7 @@ static int wl3501_set_freq(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_freq(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->freq.m = wl3501_chan2freq[this->chan - 1] * 100000;
wrqu->freq.e = 1;
@@ -1526,7 +1526,7 @@ static int wl3501_set_mode(struct net_device *dev, struct iw_request_info *info,
if (wrqu->mode == IW_MODE_INFRA ||
wrqu->mode == IW_MODE_ADHOC ||
wrqu->mode == IW_MODE_AUTO) {
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
this->net_type = wrqu->mode;
rc = wl3501_reset(dev);
@@ -1537,7 +1537,7 @@ static int wl3501_set_mode(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_mode(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->mode = this->net_type;
return 0;
@@ -1546,7 +1546,7 @@ static int wl3501_get_mode(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_sens(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->sens.value = this->rssi;
wrqu->sens.disabled = !wrqu->sens.value;
@@ -1577,7 +1577,7 @@ static int wl3501_get_range(struct net_device *dev,
static int wl3501_set_wap(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
static const u8 bcast[ETH_ALEN] = { 255, 255, 255, 255, 255, 255 };
int rc = -EINVAL;
@@ -1597,7 +1597,7 @@ out:
static int wl3501_get_wap(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->ap_addr.sa_family = ARPHRD_ETHER;
memcpy(wrqu->ap_addr.sa_data, this->bssid, ETH_ALEN);
@@ -1616,7 +1616,7 @@ static int wl3501_set_scan(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_scan(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int i;
char *current_ev = extra;
struct iw_event iwe;
@@ -1666,7 +1666,7 @@ static int wl3501_set_essid(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
if (wrqu->data.flags) {
iw_set_mgmt_info_element(IW_MGMT_INFO_ELEMENT_SSID,
@@ -1683,7 +1683,7 @@ static int wl3501_get_essid(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
spin_lock_irqsave(&this->lock, flags);
@@ -1697,7 +1697,7 @@ static int wl3501_get_essid(struct net_device *dev,
static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
if (wrqu->data.length > sizeof(this->nick))
return -E2BIG;
@@ -1708,7 +1708,7 @@ static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_nick(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
strlcpy(extra, this->nick, 32);
wrqu->data.length = strlen(extra);
@@ -1733,7 +1733,7 @@ static int wl3501_get_rts_threshold(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 threshold; /* size checked: it is u16 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this, WL3501_MIB_ATTR_RTS_THRESHOLD,
&threshold, sizeof(threshold));
if (!rc) {
@@ -1749,7 +1749,7 @@ static int wl3501_get_frag_threshold(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 threshold; /* size checked: it is u16 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this, WL3501_MIB_ATTR_FRAG_THRESHOLD,
&threshold, sizeof(threshold));
if (!rc) {
@@ -1765,7 +1765,7 @@ static int wl3501_get_txpow(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 txpow;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_CURRENT_TX_PWR_LEVEL,
&txpow, sizeof(txpow));
@@ -1787,7 +1787,7 @@ static int wl3501_get_retry(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 retry; /* size checked: it is u8 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_LONG_RETRY_LIMIT,
&retry, sizeof(retry));
@@ -1814,7 +1814,7 @@ static int wl3501_get_encode(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 implemented, restricted, keys[100], len_keys, tocopy;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_PRIV_OPT_IMPLEMENTED,
&implemented, sizeof(implemented));
@@ -1852,7 +1852,7 @@ static int wl3501_get_power(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 pwr_state;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_CURRENT_PWR_STATE,
&pwr_state, sizeof(pwr_state));
@@ -1937,7 +1937,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
dev->tx_timeout = wl3501_tx_timeout;
dev->watchdog_timeo = 5 * HZ;
dev->get_stats = wl3501_get_stats;
- this = dev->priv;
+ this = netdev_priv(dev);
this->wireless_data.spy_data = &this->spy_data;
this->p_dev = p_dev;
dev->wireless_data = &this->wireless_data;
@@ -2006,7 +2006,7 @@ static int wl3501_config(struct pcmcia_device *link)
SET_MODULE_OWNER(dev);
- this = dev->priv;
+ this = netdev_priv(dev);
/*
* At this point, the dev_node_t structure(s) should be initialized and
* arranged in a linked list at link->dev_node.
@@ -2079,7 +2079,7 @@ static int wl3501_suspend(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- wl3501_pwr_mgmt(dev->priv, WL3501_SUSPEND);
+ wl3501_pwr_mgmt(netdev_priv(dev), WL3501_SUSPEND);
if (link->open)
netif_device_detach(dev);
@@ -2090,7 +2090,7 @@ static int wl3501_resume(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- wl3501_pwr_mgmt(dev->priv, WL3501_RESUME);
+ wl3501_pwr_mgmt(netdev_priv(dev), WL3501_RESUME);
if (link->open) {
wl3501_reset(dev);
netif_device_attach(dev);
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index f469857..8009b70 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -871,11 +871,6 @@ static inline int zd_chip_set_basic_rates(struct zd_chip *chip, u16 cr_rates)
return r;
}
-static inline int zd_chip_set_rx_filter(struct zd_chip *chip, u32 filter)
-{
- return zd_iowrite32(chip, CR_RX_FILTER, filter);
-}
-
int zd_chip_lock_phy_regs(struct zd_chip *chip);
int zd_chip_unlock_phy_regs(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 26869d1..7ec1fcf 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -161,13 +161,33 @@ void zd_mac_clear(struct zd_mac *mac)
ZD_MEMCLEAR(mac, sizeof(struct zd_mac));
}
-static int reset_mode(struct zd_mac *mac)
+static int set_rx_filter(struct zd_mac *mac)
{
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
u32 filter = (ieee->iw_mode == IW_MODE_MONITOR) ? ~0 : STA_RX_FILTER;
return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter);
}
+static int set_sniffer(struct zd_mac *mac)
+{
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+ return zd_iowrite32(&mac->chip, CR_SNIFFER_ON,
+ ieee->iw_mode == IW_MODE_MONITOR ? 1 : 0);
+ return 0;
+}
+
+static int set_mc_hash(struct zd_mac *mac)
+{
+ struct zd_mc_hash hash;
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+
+ zd_mc_clear(&hash);
+ if (ieee->iw_mode == IW_MODE_MONITOR)
+ zd_mc_add_all(&hash);
+
+ return zd_chip_set_multicast_hash(&mac->chip, &hash);
+}
+
int zd_mac_open(struct net_device *netdev)
{
struct zd_mac *mac = zd_netdev_mac(netdev);
@@ -194,7 +214,13 @@ int zd_mac_open(struct net_device *netdev)
r = zd_chip_set_basic_rates(chip, CR_RATES_80211B | CR_RATES_80211G);
if (r < 0)
goto disable_int;
- r = reset_mode(mac);
+ r = set_rx_filter(mac);
+ if (r)
+ goto disable_int;
+ r = set_sniffer(mac);
+ if (r)
+ goto disable_int;
+ r = set_mc_hash(mac);
if (r)
goto disable_int;
r = zd_chip_switch_radio_on(chip);
@@ -298,12 +324,14 @@ static void set_multicast_hash_handler(struct work_struct *work)
void zd_mac_set_multicast_list(struct net_device *dev)
{
- struct zd_mc_hash hash;
struct zd_mac *mac = zd_netdev_mac(dev);
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+ struct zd_mc_hash hash;
struct dev_mc_list *mc;
unsigned long flags;
- if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
+ if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI) ||
+ ieee->iw_mode == IW_MODE_MONITOR) {
zd_mc_add_all(&hash);
} else {
zd_mc_clear(&hash);
@@ -628,8 +656,12 @@ int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
ieee->iw_mode = mode;
spin_unlock_irq(&ieee->lock);
- if (netif_running(mac->netdev))
- return reset_mode(mac);
+ if (netif_running(mac->netdev)) {
+ int r = set_rx_filter(mac);
+ if (r)
+ return r;
+ return set_sniffer(mac);
+ }
return 0;
}
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-06 20:16 ` John W. Linville
0 siblings, 0 replies; 42+ messages in thread
From: John W. Linville @ 2007-08-06 20:16 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
These are intended for 2.6.24...
---
The following changes since commit fdc8f43b5e49b64b251bb48da95193a13ac0132f:
Michael Buesch (1):
softmac: Fix deadlock of wx_set_essid with assoc work
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Bill Nottingham (1):
remove gratuitous space in airo module description
Faidon Liambotis (2):
Kconfig: order options
Kconfig: remove references of pcmcia-cs
Mariusz Kozlowski (1):
drivers/net/wireless/prism54/oid_mgt.c: kmalloc + memset conversion to kzalloc
Matthias Kaehlcke (1):
Use mutex instead of semaphore in the Host AP driver
Ulrich Kunitz (1):
zd1211rw: monitor all packets
Yoann Padioleau (1):
dev->priv to netdev_priv(dev), for drivers/net/wireless
drivers/net/wireless/Kconfig | 85 +++++++++++----------------
drivers/net/wireless/airo.c | 4 +-
drivers/net/wireless/arlan-proc.c | 14 ++--
drivers/net/wireless/hostap/hostap_cs.c | 2 +-
drivers/net/wireless/hostap/hostap_hw.c | 16 +++---
drivers/net/wireless/hostap/hostap_ioctl.c | 14 ++--
drivers/net/wireless/hostap/hostap_wlan.h | 3 +-
drivers/net/wireless/orinoco_tmd.c | 2 +-
drivers/net/wireless/prism54/isl_ioctl.c | 6 +-
drivers/net/wireless/prism54/oid_mgt.c | 4 +-
drivers/net/wireless/ray_cs.c | 66 +++++++++++-----------
drivers/net/wireless/strip.c | 2 +-
drivers/net/wireless/wl3501_cs.c | 66 +++++++++++-----------
drivers/net/wireless/zd1211rw/zd_chip.h | 5 --
drivers/net/wireless/zd1211rw/zd_mac.c | 44 ++++++++++++--
15 files changed, 172 insertions(+), 161 deletions(-)
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index ae27af0..80667b1 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -63,11 +63,6 @@ config WAVELAN
a Radio LAN (wireless Ethernet-like Local Area Network) using the
radio frequencies 900 MHz and 2.4 GHz.
- This driver support the ISA version of the WaveLAN card. A separate
- driver for the PCMCIA (PC-card) hardware is available in David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location).
-
If you want to use an ISA WaveLAN card under Linux, say Y and read
the Ethernet-HOWTO, available from
<http://www.tldp.org/docs.html#howto>. Some more specific
@@ -379,30 +374,6 @@ config PCI_HERMES
common. Some of the built-in wireless adaptors in laptops are of
this variety.
-config ATMEL
- tristate "Atmel at76c50x chipset 802.11b support"
- depends on (PCI || PCMCIA) && WLAN_80211
- select WIRELESS_EXT
- select FW_LOADER
- select CRC32
- ---help---
- A driver 802.11b wireless cards based on the Atmel fast-vnet
- chips. This driver supports standard Linux wireless extensions.
-
- Many cards based on this chipset do not have flash memory
- and need their firmware loaded at start-up. If yours is
- one of these, you will need to provide a firmware image
- to be loaded into the card by the driver. The Atmel
- firmware package can be downloaded from
- <http://www.thekelleys.org.uk/atmel>
-
-config PCI_ATMEL
- tristate "Atmel at76c506 PCI cards"
- depends on ATMEL && PCI
- ---help---
- Enable support for PCI and mini-PCI cards containing the
- Atmel at76c506 chip.
-
config PCMCIA_HERMES
tristate "Hermes PCMCIA card support"
depends on PCMCIA && HERMES
@@ -414,12 +385,7 @@ config PCMCIA_HERMES
such as the Linksys, D-Link and Farallon Skyline. It should also
work on Symbol cards such as the 3Com AirConnect and Ericsson WLAN.
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- You will also very likely also need the Wireless Tools in order to
+ You will very likely need the Wireless Tools in order to
configure your card and that /etc/pcmcia/wireless.opts works:
<http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
@@ -437,6 +403,40 @@ config PCMCIA_SPECTRUM
for downloading Symbol firmware are available at
<http://sourceforge.net/projects/orinoco/>
+config ATMEL
+ tristate "Atmel at76c50x chipset 802.11b support"
+ depends on (PCI || PCMCIA) && WLAN_80211
+ select WIRELESS_EXT
+ select FW_LOADER
+ select CRC32
+ ---help---
+ A driver 802.11b wireless cards based on the Atmel fast-vnet
+ chips. This driver supports standard Linux wireless extensions.
+
+ Many cards based on this chipset do not have flash memory
+ and need their firmware loaded at start-up. If yours is
+ one of these, you will need to provide a firmware image
+ to be loaded into the card by the driver. The Atmel
+ firmware package can be downloaded from
+ <http://www.thekelleys.org.uk/atmel>
+
+config PCI_ATMEL
+ tristate "Atmel at76c506 PCI cards"
+ depends on ATMEL && PCI
+ ---help---
+ Enable support for PCI and mini-PCI cards containing the
+ Atmel at76c506 chip.
+
+config PCMCIA_ATMEL
+ tristate "Atmel at76c502/at76c504 PCMCIA cards"
+ depends on ATMEL && PCMCIA
+ select WIRELESS_EXT
+ select FW_LOADER
+ select CRC32
+ ---help---
+ Enable support for PCMCIA cards containing the
+ Atmel at76c502 and at76c504 chips.
+
config AIRO_CS
tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
depends on PCMCIA && (BROKEN || !M32R) && WLAN_80211
@@ -457,21 +457,6 @@ config AIRO_CS
and Cisco proprietary API, so both the Linux Wireless Tools and the
Cisco Linux utilities can be used to configure the card.
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
-config PCMCIA_ATMEL
- tristate "Atmel at76c502/at76c504 PCMCIA cards"
- depends on ATMEL && PCMCIA
- select WIRELESS_EXT
- select FW_LOADER
- select CRC32
- ---help---
- Enable support for PCMCIA cards containing the
- Atmel at76c502 and at76c504 chips.
-
config PCMCIA_WL3501
tristate "Planet WL3501 PCMCIA cards"
depends on EXPERIMENTAL && PCMCIA && WLAN_80211
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index ee1cc14..a152797 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -241,8 +241,8 @@ static int proc_perm = 0644;
MODULE_AUTHOR("Benjamin Reed");
MODULE_DESCRIPTION("Support for Cisco/Aironet 802.11 wireless ethernet \
- cards. Direct support for ISA/PCI/MPI cards and support \
- for PCMCIA when used with airo_cs.");
+cards. Direct support for ISA/PCI/MPI cards and support \
+for PCMCIA when used with airo_cs.");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340/350");
module_param_array(io, int, NULL, 0);
diff --git a/drivers/net/wireless/arlan-proc.c b/drivers/net/wireless/arlan-proc.c
index 015abd9..c6e70db 100644
--- a/drivers/net/wireless/arlan-proc.c
+++ b/drivers/net/wireless/arlan-proc.c
@@ -435,7 +435,7 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, struct file *filp,
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
@@ -654,7 +654,7 @@ static int arlan_sysctl_info161719(ctl_table * ctl, int write, struct file *filp
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -688,7 +688,7 @@ static int arlan_sysctl_infotxRing(ctl_table * ctl, int write, struct file *filp
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -716,7 +716,7 @@ static int arlan_sysctl_inforxRing(ctl_table * ctl, int write, struct file *filp
pos += sprintf(arlan_drive_info + pos, "No device found here \n");
goto final;
} else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -745,7 +745,7 @@ static int arlan_sysctl_info18(ctl_table * ctl, int write, struct file *filp,
goto final;
}
else
- priva = arlan_device[devnum]->priv;
+ priva = netdev_priv(arlan_device[devnum]);
if (priva == NULL)
{
printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n ");
@@ -780,7 +780,7 @@ static int arlan_configure(ctl_table * ctl, int write, struct file *filp,
}
else if (arlan_device[devnum] != NULL)
{
- priv = arlan_device[devnum]->priv;
+ priv = netdev_priv(arlan_device[devnum]);
arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_CONF);
}
@@ -805,7 +805,7 @@ static int arlan_sysctl_reset(ctl_table * ctl, int write, struct file *filp,
}
else if (arlan_device[devnum] != NULL)
{
- priv = arlan_device[devnum]->priv;
+ priv = netdev_priv(arlan_device[devnum]);
arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_RESET);
} else
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index 30e723f..f9cf22b 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -272,7 +272,7 @@ static int sandisk_enable_wireless(struct net_device *dev)
{
int res, ret = 0;
conf_reg_t reg;
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
tuple_t tuple;
cisparse_t *parse = NULL;
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index 959887b..adedb97 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -825,7 +825,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
local->hw_downloading)
return -ENODEV;
- res = down_interruptible(&local->rid_bap_sem);
+ res = mutex_lock_interruptible(&local->rid_bap_mtx);
if (res)
return res;
@@ -834,7 +834,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
printk(KERN_DEBUG "%s: hfa384x_get_rid: CMDCODE_ACCESS failed "
"(res=%d, rid=%04x, len=%d)\n",
dev->name, res, rid, len);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
return res;
}
@@ -861,7 +861,7 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len,
res = hfa384x_from_bap(dev, BAP0, buf, len);
spin_unlock_bh(&local->baplock);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
if (res) {
if (res != -ENODATA)
@@ -902,7 +902,7 @@ static int hfa384x_set_rid(struct net_device *dev, u16 rid, void *buf, int len)
/* RID len in words and +1 for rec.rid */
rec.len = cpu_to_le16(len / 2 + len % 2 + 1);
- res = down_interruptible(&local->rid_bap_sem);
+ res = mutex_lock_interruptible(&local->rid_bap_mtx);
if (res)
return res;
@@ -917,12 +917,12 @@ static int hfa384x_set_rid(struct net_device *dev, u16 rid, void *buf, int len)
if (res) {
printk(KERN_DEBUG "%s: hfa384x_set_rid (rid=%04x, len=%d) - "
"failed - res=%d\n", dev->name, rid, len, res);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
return res;
}
res = hfa384x_cmd(dev, HFA384X_CMDCODE_ACCESS_WRITE, rid, NULL, NULL);
- up(&local->rid_bap_sem);
+ mutex_unlock(&local->rid_bap_mtx);
if (res) {
printk(KERN_DEBUG "%s: hfa384x_set_rid: CMDCODE_ACCESS_WRITE "
@@ -3171,7 +3171,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
spin_lock_init(&local->cmdlock);
spin_lock_init(&local->baplock);
spin_lock_init(&local->lock);
- init_MUTEX(&local->rid_bap_sem);
+ mutex_init(&local->rid_bap_mtx);
if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES)
card_idx = 0;
@@ -3424,7 +3424,7 @@ static void prism2_suspend(struct net_device *dev)
struct local_info *local;
union iwreq_data wrqu;
- iface = dev->priv;
+ iface = netdev_priv(dev);
local = iface->local;
/* Send disconnect event, e.g., to trigger reassociation after resume
diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c
index 8c71077..d58ac84 100644
--- a/drivers/net/wireless/hostap/hostap_ioctl.c
+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
@@ -3088,7 +3088,7 @@ static int prism2_ioctl_priv_download(local_info_t *local, struct iw_point *p)
static int prism2_set_genericelement(struct net_device *dev, u8 *elem,
size_t len)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
u8 *buf;
@@ -3116,7 +3116,7 @@ static int prism2_ioctl_siwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
switch (data->flags & IW_AUTH_INDEX) {
@@ -3182,7 +3182,7 @@ static int prism2_ioctl_giwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
switch (data->flags & IW_AUTH_INDEX) {
@@ -3221,7 +3221,7 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;
int i, ret = 0;
@@ -3395,7 +3395,7 @@ static int prism2_ioctl_giwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct ieee80211_crypt_data **crypt;
void *sta_ptr;
@@ -3716,7 +3716,7 @@ static int prism2_ioctl_giwgenie(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
int len = local->generic_elem_len - 2;
@@ -3755,7 +3755,7 @@ static int prism2_ioctl_siwmlme(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
- struct hostap_interface *iface = dev->priv;
+ struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct iw_mlme *mlme = (struct iw_mlme *) extra;
u16 reason;
diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
index 87a54aa..a42325c 100644
--- a/drivers/net/wireless/hostap/hostap_wlan.h
+++ b/drivers/net/wireless/hostap/hostap_wlan.h
@@ -3,6 +3,7 @@
#include <linux/wireless.h>
#include <linux/netdevice.h>
+#include <linux/mutex.h>
#include <net/iw_handler.h>
#include "hostap_config.h"
@@ -641,7 +642,7 @@ struct local_info {
* when removing entries from the list.
* TX and RX paths can use read lock. */
spinlock_t cmdlock, baplock, lock;
- struct semaphore rid_bap_sem;
+ struct mutex rid_bap_mtx;
u16 infofid; /* MAC buffer id for info frame */
/* txfid, intransmitfid, next_txtid, and next_alloc are protected by
* txfidlock */
diff --git a/drivers/net/wireless/orinoco_tmd.c b/drivers/net/wireless/orinoco_tmd.c
index 7c7b960..b9c54d8 100644
--- a/drivers/net/wireless/orinoco_tmd.c
+++ b/drivers/net/wireless/orinoco_tmd.c
@@ -190,7 +190,7 @@ static int orinoco_tmd_init_one(struct pci_dev *pdev,
static void __devexit orinoco_tmd_remove_one(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
- struct orinoco_private *priv = dev->priv;
+ struct orinoco_private *priv = netdev_priv(dev);
struct orinoco_pci_card *card = priv->card;
unregister_netdev(dev);
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
index 585f599..f106661 100644
--- a/drivers/net/wireless/prism54/isl_ioctl.c
+++ b/drivers/net/wireless/prism54/isl_ioctl.c
@@ -1753,7 +1753,7 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
int rvalue;
enum oid_num_t n = dwrq->flags;
- rvalue = mgt_get_request((islpci_private *) ndev->priv, n, 0, NULL, &r);
+ rvalue = mgt_get_request(netdev_priv(ndev), n, 0, NULL, &r);
dwrq->length = mgt_response_to_str(n, &r, extra);
if ((isl_oid[n].flags & OID_FLAG_TYPE) != OID_TYPE_U32)
kfree(r.ptr);
@@ -1766,7 +1766,7 @@ prism54_set_u32(struct net_device *ndev, struct iw_request_info *info,
{
u32 oid = uwrq[0], u = uwrq[1];
- return mgt_set_request((islpci_private *) ndev->priv, oid, 0, &u);
+ return mgt_set_request(netdev_priv(ndev), oid, 0, &u);
}
static int
@@ -1775,7 +1775,7 @@ prism54_set_raw(struct net_device *ndev, struct iw_request_info *info,
{
u32 oid = dwrq->flags;
- return mgt_set_request((islpci_private *) ndev->priv, oid, 0, extra);
+ return mgt_set_request(netdev_priv(ndev), oid, 0, extra);
}
void
diff --git a/drivers/net/wireless/prism54/oid_mgt.c b/drivers/net/wireless/prism54/oid_mgt.c
index 4278032..57a4ac3 100644
--- a/drivers/net/wireless/prism54/oid_mgt.c
+++ b/drivers/net/wireless/prism54/oid_mgt.c
@@ -244,13 +244,11 @@ mgt_init(islpci_private *priv)
/* Alloc the cache */
for (i = 0; i < OID_NUM_LAST; i++) {
if (isl_oid[i].flags & OID_FLAG_CACHED) {
- priv->mib[i] = kmalloc(isl_oid[i].size *
+ priv->mib[i] = kzalloc(isl_oid[i].size *
(isl_oid[i].range + 1),
GFP_KERNEL);
if (!priv->mib[i])
return -ENOMEM;
- memset(priv->mib[i], 0,
- isl_oid[i].size * (isl_oid[i].range + 1));
} else
priv->mib[i] = NULL;
}
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
index 3be6242..1d9dbf8 100644
--- a/drivers/net/wireless/ray_cs.c
+++ b/drivers/net/wireless/ray_cs.c
@@ -314,7 +314,7 @@ static int ray_probe(struct pcmcia_device *p_dev)
if (!dev)
goto fail_alloc_dev;
- local = dev->priv;
+ local = netdev_priv(dev);
local->finder = p_dev;
/* The io structure describes IO port mapping. None used here */
@@ -388,7 +388,7 @@ static void ray_detach(struct pcmcia_device *link)
ray_release(link);
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
del_timer(&local->timer);
if (link->priv) {
@@ -412,7 +412,7 @@ static int ray_config(struct pcmcia_device *link)
win_req_t req;
memreq_t mem;
struct net_device *dev = (struct net_device *)link->priv;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
DEBUG(1, "ray_config(0x%p)\n", link);
@@ -520,7 +520,7 @@ static int ray_init(struct net_device *dev)
int i;
UCHAR *p;
struct ccs __iomem *pccs;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
DEBUG(1, "ray_init(0x%p)\n", dev);
if (!(pcmcia_dev_present(link))) {
@@ -581,7 +581,7 @@ static int ray_init(struct net_device *dev)
static int dl_startup_params(struct net_device *dev)
{
int ccsindex;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct ccs __iomem *pccs;
struct pcmcia_device *link = local->finder;
@@ -786,7 +786,7 @@ static void join_net(u_long data)
static void ray_release(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int i;
DEBUG(1, "ray_release(0x%p)\n", link);
@@ -834,7 +834,7 @@ int ray_dev_init(struct net_device *dev)
#ifdef RAY_IMMEDIATE_INIT
int i;
#endif /* RAY_IMMEDIATE_INIT */
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
DEBUG(1,"ray_dev_init(dev=%p)\n",dev);
@@ -868,7 +868,7 @@ int ray_dev_init(struct net_device *dev)
/*===========================================================================*/
static int ray_dev_config(struct net_device *dev, struct ifmap *map)
{
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
/* Dummy routine to satisfy device structure */
DEBUG(1,"ray_dev_config(dev=%p,ifmap=%p)\n",dev,map);
@@ -882,7 +882,7 @@ static int ray_dev_config(struct net_device *dev, struct ifmap *map)
/*===========================================================================*/
static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
short length = skb->len;
@@ -925,7 +925,7 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int ray_hw_xmit(unsigned char* data, int len, struct net_device* dev,
UCHAR msg_type)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct ccs __iomem *pccs;
int ccsindex;
int offset;
@@ -1099,7 +1099,7 @@ static int ray_set_freq(struct net_device *dev,
struct iw_freq *fwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int err = -EINPROGRESS; /* Call commit handler */
/* Reject if card is already initialised */
@@ -1124,7 +1124,7 @@ static int ray_get_freq(struct net_device *dev,
struct iw_freq *fwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
fwrq->m = local->sparm.b5.a_hop_pattern;
fwrq->e = 0;
@@ -1140,7 +1140,7 @@ static int ray_set_essid(struct net_device *dev,
struct iw_point *dwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Reject if card is already initialised */
if(local->card_status != CARD_AWAITING_PARAM)
@@ -1173,7 +1173,7 @@ static int ray_get_essid(struct net_device *dev,
struct iw_point *dwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Get the essid that was set */
memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
@@ -1194,7 +1194,7 @@ static int ray_get_wap(struct net_device *dev,
struct sockaddr *awrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
memcpy(awrq->sa_data, local->bss_id, ETH_ALEN);
awrq->sa_family = ARPHRD_ETHER;
@@ -1211,7 +1211,7 @@ static int ray_set_rate(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
/* Reject if card is already initialised */
if(local->card_status != CARD_AWAITING_PARAM)
@@ -1240,7 +1240,7 @@ static int ray_get_rate(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
if(local->net_default_tx_rate == 3)
vwrq->value = 2000000; /* Hum... */
@@ -1260,7 +1260,7 @@ static int ray_set_rts(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int rthr = vwrq->value;
/* Reject if card is already initialised */
@@ -1290,7 +1290,7 @@ static int ray_get_rts(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
vwrq->value = (local->sparm.b5.a_rts_threshold[0] << 8)
+ local->sparm.b5.a_rts_threshold[1];
@@ -1309,7 +1309,7 @@ static int ray_set_frag(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int fthr = vwrq->value;
/* Reject if card is already initialised */
@@ -1338,7 +1338,7 @@ static int ray_get_frag(struct net_device *dev,
struct iw_param *vwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
vwrq->value = (local->sparm.b5.a_frag_threshold[0] << 8)
+ local->sparm.b5.a_frag_threshold[1];
@@ -1357,7 +1357,7 @@ static int ray_set_mode(struct net_device *dev,
__u32 *uwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
int err = -EINPROGRESS; /* Call commit handler */
char card_mode = 1;
@@ -1389,7 +1389,7 @@ static int ray_get_mode(struct net_device *dev,
__u32 *uwrq,
char *extra)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
if(local->sparm.b5.a_network_type)
*uwrq = IW_MODE_INFRA;
@@ -1492,7 +1492,7 @@ static int ray_commit(struct net_device *dev,
*/
static iw_stats * ray_get_wireless_stats(struct net_device * dev)
{
- ray_dev_t * local = (ray_dev_t *) dev->priv;
+ ray_dev_t * local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
struct status __iomem *p = local->sram + STATUS_BASE;
@@ -1580,7 +1580,7 @@ static const struct iw_handler_def ray_handler_def =
/*===========================================================================*/
static int ray_open(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link;
link = local->finder;
@@ -1614,7 +1614,7 @@ static int ray_open(struct net_device *dev)
/*===========================================================================*/
static int ray_dev_close(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link;
link = local->finder;
@@ -1773,7 +1773,7 @@ static int parse_addr(char *in_str, UCHAR *out)
/*===========================================================================*/
static struct net_device_stats *ray_get_stats(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
struct status __iomem *p = local->sram + STATUS_BASE;
if (!(pcmcia_dev_present(link))) {
@@ -1803,7 +1803,7 @@ static struct net_device_stats *ray_get_stats(struct net_device *dev)
/*===========================================================================*/
static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value, int len)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
int ccsindex;
int i;
@@ -1840,7 +1840,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
int ccsindex;
struct ccs __iomem *pccs;
int i = 0;
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
void __iomem *p = local->sram + HOST_TO_ECF_BASE;
@@ -1884,7 +1884,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
/*===========================================================================*/
static void set_multicast_list(struct net_device *dev)
{
- ray_dev_t *local = (ray_dev_t *)dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
UCHAR promisc;
DEBUG(2,"ray_cs set_multicast_list(%p)\n",dev);
@@ -1935,7 +1935,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev);
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
link = (struct pcmcia_device *)local->finder;
if (!pcmcia_dev_present(link)) {
DEBUG(2,"ray_cs interrupt from device not present or suspended.\n");
@@ -2165,7 +2165,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs, unsigned i
{
struct sk_buff *skb = NULL;
struct rcs __iomem *prcslink = prcs;
- ray_dev_t *local = dev->priv;
+ ray_dev_t *local = netdev_priv(dev);
UCHAR *rx_ptr;
int total_len;
int tmp;
@@ -2618,7 +2618,7 @@ static int ray_cs_proc_read(char *buf, char **start, off_t offset, int len)
dev = (struct net_device *)link->priv;
if (!dev)
return 0;
- local = (ray_dev_t *)dev->priv;
+ local = netdev_priv(dev);
if (!local)
return 0;
diff --git a/drivers/net/wireless/strip.c b/drivers/net/wireless/strip.c
index ef32a5c..ed146ae 100644
--- a/drivers/net/wireless/strip.c
+++ b/drivers/net/wireless/strip.c
@@ -2571,7 +2571,7 @@ static struct strip *strip_alloc(void)
return NULL; /* If no more memory, return */
- strip_info = dev->priv;
+ strip_info = netdev_priv(dev);
strip_info->dev = dev;
strip_info->magic = STRIP_MAGIC;
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c8b5c22..72f3d97 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -859,7 +859,7 @@ static int wl3501_esbq_confirm(struct wl3501_card *this)
static void wl3501_online(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
printk(KERN_INFO "%s: Wireless LAN online. BSSID: "
"%02X %02X %02X %02X %02X %02X\n", dev->name,
@@ -907,7 +907,7 @@ static int wl3501_mgmt_association(struct wl3501_card *this)
static void wl3501_mgmt_join_confirm(struct net_device *dev, u16 addr)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct wl3501_join_confirm sig;
dprintk(3, "entry");
@@ -1046,7 +1046,7 @@ static inline void wl3501_start_confirm_interrupt(struct net_device *dev,
static inline void wl3501_assoc_confirm_interrupt(struct net_device *dev,
u16 addr)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct wl3501_assoc_confirm sig;
dprintk(3, "entry");
@@ -1075,7 +1075,7 @@ static inline void wl3501_rx_interrupt(struct net_device *dev)
int morepkts;
u16 addr;
u8 sig_id;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
dprintk(3, "entry");
loop:
@@ -1257,7 +1257,7 @@ fail:
static int wl3501_close(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = -ENODEV;
unsigned long flags;
struct pcmcia_device *link;
@@ -1289,7 +1289,7 @@ static int wl3501_close(struct net_device *dev)
*/
static int wl3501_reset(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = -ENODEV;
wl3501_block_interrupt(this);
@@ -1318,7 +1318,7 @@ out:
static void wl3501_tx_timeout(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct net_device_stats *stats = &this->stats;
unsigned long flags;
int rc;
@@ -1344,7 +1344,7 @@ static void wl3501_tx_timeout(struct net_device *dev)
static int wl3501_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
int enabled, rc;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
spin_lock_irqsave(&this->lock, flags);
@@ -1371,7 +1371,7 @@ static int wl3501_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int wl3501_open(struct net_device *dev)
{
int rc = -ENODEV;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
struct pcmcia_device *link;
link = this->p_dev;
@@ -1410,14 +1410,14 @@ fail:
static struct net_device_stats *wl3501_get_stats(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
return &this->stats;
}
static struct iw_statistics *wl3501_get_wireless_stats(struct net_device *dev)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
struct iw_statistics *wstats = &this->wstats;
u32 value; /* size checked: it is u32 */
@@ -1497,7 +1497,7 @@ static int wl3501_get_name(struct net_device *dev, struct iw_request_info *info,
static int wl3501_set_freq(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int channel = wrqu->freq.m;
int rc = -EINVAL;
@@ -1511,7 +1511,7 @@ static int wl3501_set_freq(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_freq(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->freq.m = wl3501_chan2freq[this->chan - 1] * 100000;
wrqu->freq.e = 1;
@@ -1526,7 +1526,7 @@ static int wl3501_set_mode(struct net_device *dev, struct iw_request_info *info,
if (wrqu->mode == IW_MODE_INFRA ||
wrqu->mode == IW_MODE_ADHOC ||
wrqu->mode == IW_MODE_AUTO) {
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
this->net_type = wrqu->mode;
rc = wl3501_reset(dev);
@@ -1537,7 +1537,7 @@ static int wl3501_set_mode(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_mode(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->mode = this->net_type;
return 0;
@@ -1546,7 +1546,7 @@ static int wl3501_get_mode(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_sens(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->sens.value = this->rssi;
wrqu->sens.disabled = !wrqu->sens.value;
@@ -1577,7 +1577,7 @@ static int wl3501_get_range(struct net_device *dev,
static int wl3501_set_wap(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
static const u8 bcast[ETH_ALEN] = { 255, 255, 255, 255, 255, 255 };
int rc = -EINVAL;
@@ -1597,7 +1597,7 @@ out:
static int wl3501_get_wap(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
wrqu->ap_addr.sa_family = ARPHRD_ETHER;
memcpy(wrqu->ap_addr.sa_data, this->bssid, ETH_ALEN);
@@ -1616,7 +1616,7 @@ static int wl3501_set_scan(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_scan(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int i;
char *current_ev = extra;
struct iw_event iwe;
@@ -1666,7 +1666,7 @@ static int wl3501_set_essid(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
if (wrqu->data.flags) {
iw_set_mgmt_info_element(IW_MGMT_INFO_ELEMENT_SSID,
@@ -1683,7 +1683,7 @@ static int wl3501_get_essid(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
unsigned long flags;
spin_lock_irqsave(&this->lock, flags);
@@ -1697,7 +1697,7 @@ static int wl3501_get_essid(struct net_device *dev,
static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
if (wrqu->data.length > sizeof(this->nick))
return -E2BIG;
@@ -1708,7 +1708,7 @@ static int wl3501_set_nick(struct net_device *dev, struct iw_request_info *info,
static int wl3501_get_nick(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
strlcpy(extra, this->nick, 32);
wrqu->data.length = strlen(extra);
@@ -1733,7 +1733,7 @@ static int wl3501_get_rts_threshold(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 threshold; /* size checked: it is u16 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this, WL3501_MIB_ATTR_RTS_THRESHOLD,
&threshold, sizeof(threshold));
if (!rc) {
@@ -1749,7 +1749,7 @@ static int wl3501_get_frag_threshold(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 threshold; /* size checked: it is u16 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this, WL3501_MIB_ATTR_FRAG_THRESHOLD,
&threshold, sizeof(threshold));
if (!rc) {
@@ -1765,7 +1765,7 @@ static int wl3501_get_txpow(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u16 txpow;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_CURRENT_TX_PWR_LEVEL,
&txpow, sizeof(txpow));
@@ -1787,7 +1787,7 @@ static int wl3501_get_retry(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 retry; /* size checked: it is u8 */
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_LONG_RETRY_LIMIT,
&retry, sizeof(retry));
@@ -1814,7 +1814,7 @@ static int wl3501_get_encode(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 implemented, restricted, keys[100], len_keys, tocopy;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_PRIV_OPT_IMPLEMENTED,
&implemented, sizeof(implemented));
@@ -1852,7 +1852,7 @@ static int wl3501_get_power(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
u8 pwr_state;
- struct wl3501_card *this = dev->priv;
+ struct wl3501_card *this = netdev_priv(dev);
int rc = wl3501_get_mib_value(this,
WL3501_MIB_ATTR_CURRENT_PWR_STATE,
&pwr_state, sizeof(pwr_state));
@@ -1937,7 +1937,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
dev->tx_timeout = wl3501_tx_timeout;
dev->watchdog_timeo = 5 * HZ;
dev->get_stats = wl3501_get_stats;
- this = dev->priv;
+ this = netdev_priv(dev);
this->wireless_data.spy_data = &this->spy_data;
this->p_dev = p_dev;
dev->wireless_data = &this->wireless_data;
@@ -2006,7 +2006,7 @@ static int wl3501_config(struct pcmcia_device *link)
SET_MODULE_OWNER(dev);
- this = dev->priv;
+ this = netdev_priv(dev);
/*
* At this point, the dev_node_t structure(s) should be initialized and
* arranged in a linked list at link->dev_node.
@@ -2079,7 +2079,7 @@ static int wl3501_suspend(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- wl3501_pwr_mgmt(dev->priv, WL3501_SUSPEND);
+ wl3501_pwr_mgmt(netdev_priv(dev), WL3501_SUSPEND);
if (link->open)
netif_device_detach(dev);
@@ -2090,7 +2090,7 @@ static int wl3501_resume(struct pcmcia_device *link)
{
struct net_device *dev = link->priv;
- wl3501_pwr_mgmt(dev->priv, WL3501_RESUME);
+ wl3501_pwr_mgmt(netdev_priv(dev), WL3501_RESUME);
if (link->open) {
wl3501_reset(dev);
netif_device_attach(dev);
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index f469857..8009b70 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -871,11 +871,6 @@ static inline int zd_chip_set_basic_rates(struct zd_chip *chip, u16 cr_rates)
return r;
}
-static inline int zd_chip_set_rx_filter(struct zd_chip *chip, u32 filter)
-{
- return zd_iowrite32(chip, CR_RX_FILTER, filter);
-}
-
int zd_chip_lock_phy_regs(struct zd_chip *chip);
int zd_chip_unlock_phy_regs(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 26869d1..7ec1fcf 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -161,13 +161,33 @@ void zd_mac_clear(struct zd_mac *mac)
ZD_MEMCLEAR(mac, sizeof(struct zd_mac));
}
-static int reset_mode(struct zd_mac *mac)
+static int set_rx_filter(struct zd_mac *mac)
{
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
u32 filter = (ieee->iw_mode == IW_MODE_MONITOR) ? ~0 : STA_RX_FILTER;
return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter);
}
+static int set_sniffer(struct zd_mac *mac)
+{
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+ return zd_iowrite32(&mac->chip, CR_SNIFFER_ON,
+ ieee->iw_mode == IW_MODE_MONITOR ? 1 : 0);
+ return 0;
+}
+
+static int set_mc_hash(struct zd_mac *mac)
+{
+ struct zd_mc_hash hash;
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+
+ zd_mc_clear(&hash);
+ if (ieee->iw_mode == IW_MODE_MONITOR)
+ zd_mc_add_all(&hash);
+
+ return zd_chip_set_multicast_hash(&mac->chip, &hash);
+}
+
int zd_mac_open(struct net_device *netdev)
{
struct zd_mac *mac = zd_netdev_mac(netdev);
@@ -194,7 +214,13 @@ int zd_mac_open(struct net_device *netdev)
r = zd_chip_set_basic_rates(chip, CR_RATES_80211B | CR_RATES_80211G);
if (r < 0)
goto disable_int;
- r = reset_mode(mac);
+ r = set_rx_filter(mac);
+ if (r)
+ goto disable_int;
+ r = set_sniffer(mac);
+ if (r)
+ goto disable_int;
+ r = set_mc_hash(mac);
if (r)
goto disable_int;
r = zd_chip_switch_radio_on(chip);
@@ -298,12 +324,14 @@ static void set_multicast_hash_handler(struct work_struct *work)
void zd_mac_set_multicast_list(struct net_device *dev)
{
- struct zd_mc_hash hash;
struct zd_mac *mac = zd_netdev_mac(dev);
+ struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
+ struct zd_mc_hash hash;
struct dev_mc_list *mc;
unsigned long flags;
- if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
+ if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI) ||
+ ieee->iw_mode == IW_MODE_MONITOR) {
zd_mc_add_all(&hash);
} else {
zd_mc_clear(&hash);
@@ -628,8 +656,12 @@ int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
ieee->iw_mode = mode;
spin_unlock_irq(&ieee->lock);
- if (netif_running(mac->netdev))
- return reset_mode(mac);
+ if (netif_running(mac->netdev)) {
+ int r = set_rx_filter(mac);
+ if (r)
+ return r;
+ return set_sniffer(mac);
+ }
return 0;
}
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-18 22:31 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-07-18 22:31 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
John W. Linville wrote:
> A few more for 2.6.23...
>
> Thanks!
>
> John
>
> ---
>
> The following changes since commit 4ad1366376bfef32ec0ffa12d1faa483d6f330bd:
> NeilBrown (1):
> md: change bitmap_unplug and others to void functions
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Daniel Drake (1):
> zd1211rw: Add ID for Siemens Gigaset USB Stick 54
>
> Jean Tourrilhes (1):
> softmac: Channel is listed twice in scan output
>
> Masakazu Mokuno (1):
> zd1211rw: Add ID for Planex GW-US54GXS
>
> Zhu Yi (4):
> ipw2100: Fix `iwpriv set_power` error
> Fix ipw2200 set wrong power parameter causing firmware error
> ipw2200: Fix ipw_isr() comments error on shared IRQ
> Update version ipw2200 stamp to 1.2.2
>
> drivers/net/wireless/ipw2100.c | 6 +++---
> drivers/net/wireless/ipw2200.c | 18 ++++++++----------
> drivers/net/wireless/zd1211rw/zd_usb.c | 2 ++
> net/ieee80211/ieee80211_wx.c | 7 ++-----
> 4 files changed, 15 insertions(+), 18 deletions(-)
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-18 22:31 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-07-18 22:31 UTC (permalink / raw)
To: John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
John W. Linville wrote:
> A few more for 2.6.23...
>
> Thanks!
>
> John
>
> ---
>
> The following changes since commit 4ad1366376bfef32ec0ffa12d1faa483d6f330bd:
> NeilBrown (1):
> md: change bitmap_unplug and others to void functions
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Daniel Drake (1):
> zd1211rw: Add ID for Siemens Gigaset USB Stick 54
>
> Jean Tourrilhes (1):
> softmac: Channel is listed twice in scan output
>
> Masakazu Mokuno (1):
> zd1211rw: Add ID for Planex GW-US54GXS
>
> Zhu Yi (4):
> ipw2100: Fix `iwpriv set_power` error
> Fix ipw2200 set wrong power parameter causing firmware error
> ipw2200: Fix ipw_isr() comments error on shared IRQ
> Update version ipw2200 stamp to 1.2.2
>
> drivers/net/wireless/ipw2100.c | 6 +++---
> drivers/net/wireless/ipw2200.c | 18 ++++++++----------
> drivers/net/wireless/zd1211rw/zd_usb.c | 2 ++
> net/ieee80211/ieee80211_wx.c | 7 ++-----
> 4 files changed, 15 insertions(+), 18 deletions(-)
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-18 2:19 John W. Linville
2007-07-18 22:31 ` Jeff Garzik
0 siblings, 1 reply; 42+ messages in thread
From: John W. Linville @ 2007-07-18 2:19 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
A few more for 2.6.23...
Thanks!
John
---
The following changes since commit 4ad1366376bfef32ec0ffa12d1faa483d6f330bd:
NeilBrown (1):
md: change bitmap_unplug and others to void functions
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Daniel Drake (1):
zd1211rw: Add ID for Siemens Gigaset USB Stick 54
Jean Tourrilhes (1):
softmac: Channel is listed twice in scan output
Masakazu Mokuno (1):
zd1211rw: Add ID for Planex GW-US54GXS
Zhu Yi (4):
ipw2100: Fix `iwpriv set_power` error
Fix ipw2200 set wrong power parameter causing firmware error
ipw2200: Fix ipw_isr() comments error on shared IRQ
Update version ipw2200 stamp to 1.2.2
drivers/net/wireless/ipw2100.c | 6 +++---
drivers/net/wireless/ipw2200.c | 18 ++++++++----------
drivers/net/wireless/zd1211rw/zd_usb.c | 2 ++
net/ieee80211/ieee80211_wx.c | 7 ++-----
4 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index 072ede7..8990585 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -7868,10 +7868,10 @@ static int ipw2100_wx_set_powermode(struct net_device *dev,
goto done;
}
- if ((mode < 1) || (mode > POWER_MODES))
+ if ((mode < 0) || (mode > POWER_MODES))
mode = IPW_POWER_AUTO;
- if (priv->power_mode != mode)
+ if (IPW_POWER_LEVEL(priv->power_mode) != mode)
err = ipw2100_set_power_mode(priv, mode);
done:
mutex_unlock(&priv->action_mutex);
@@ -7902,7 +7902,7 @@ static int ipw2100_wx_get_powermode(struct net_device *dev,
break;
case IPW_POWER_AUTO:
snprintf(extra, MAX_POWER_STRING,
- "Power save level: %d (Auto)", 0);
+ "Power save level: %d (Auto)", level);
break;
default:
timeout = timeout_duration[level - 1] / 1000;
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index aa32a97..61497c4 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -70,7 +70,7 @@
#define VQ
#endif
-#define IPW2200_VERSION "1.2.0" VK VD VM VP VR VQ
+#define IPW2200_VERSION "1.2.2" VK VD VM VP VR VQ
#define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2200/2915 Network Driver"
#define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation"
#define DRV_VERSION IPW2200_VERSION
@@ -2506,7 +2506,7 @@ static int ipw_send_power_mode(struct ipw_priv *priv, u32 mode)
break;
}
- param = cpu_to_le32(mode);
+ param = cpu_to_le32(param);
return ipw_send_cmd_pdu(priv, IPW_CMD_POWER_MODE, sizeof(param),
¶m);
}
@@ -9568,6 +9568,7 @@ static int ipw_wx_set_power(struct net_device *dev,
priv->power_mode = IPW_POWER_ENABLED | IPW_POWER_BATTERY;
else
priv->power_mode = IPW_POWER_ENABLED | priv->power_mode;
+
err = ipw_send_power_mode(priv, IPW_POWER_LEVEL(priv->power_mode));
if (err) {
IPW_DEBUG_WX("failed setting power mode.\n");
@@ -9604,22 +9605,19 @@ static int ipw_wx_set_powermode(struct net_device *dev,
struct ipw_priv *priv = ieee80211_priv(dev);
int mode = *(int *)extra;
int err;
+
mutex_lock(&priv->mutex);
- if ((mode < 1) || (mode > IPW_POWER_LIMIT)) {
+ if ((mode < 1) || (mode > IPW_POWER_LIMIT))
mode = IPW_POWER_AC;
- priv->power_mode = mode;
- } else {
- priv->power_mode = IPW_POWER_ENABLED | mode;
- }
- if (priv->power_mode != mode) {
+ if (IPW_POWER_LEVEL(priv->power_mode) != mode) {
err = ipw_send_power_mode(priv, mode);
-
if (err) {
IPW_DEBUG_WX("failed setting power mode.\n");
mutex_unlock(&priv->mutex);
return err;
}
+ priv->power_mode = IPW_POWER_ENABLED | mode;
}
mutex_unlock(&priv->mutex);
return 0;
@@ -10555,7 +10553,7 @@ static irqreturn_t ipw_isr(int irq, void *data)
spin_lock(&priv->irq_lock);
if (!(priv->status & STATUS_INT_ENABLED)) {
- /* Shared IRQ */
+ /* IRQ is disabled */
goto none;
}
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 28d41a2..a9c339e 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -72,6 +72,8 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c
index 523a137..465b73d 100644
--- a/net/ieee80211/ieee80211_wx.c
+++ b/net/ieee80211/ieee80211_wx.c
@@ -90,14 +90,11 @@ static char *ieee80211_translate_scan(struct ieee80211_device *ieee,
}
/* Add channel and frequency */
+ /* Note : userspace automatically computes channel using iwrange */
iwe.cmd = SIOCGIWFREQ;
- iwe.u.freq.m = network->channel;
- iwe.u.freq.e = 0;
- iwe.u.freq.i = 0;
- start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
-
iwe.u.freq.m = ieee80211_channel_to_freq(ieee, network->channel);
iwe.u.freq.e = 6;
+ iwe.u.freq.i = 0;
start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
/* Add encryption capability */
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-16 21:59 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-07-16 21:59 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
John W. Linville wrote:
> The following changes since commit 71780f59e127bb281a9302d430495ca9586c14e7:
> Linus Torvalds (1):
> Merge branch 'for-linus' of git://git.kernel.org/.../ieee1394/linux1394-2.6
>
> are found in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Adrian Bunk (1):
> drivers/net/wireless/libertas/wext.c: remove dead code
>
> Dan Williams (1):
> libertas: fix disabling WPA
>
> Daniel Drake (4):
> zd1211rw: Allow channels 1-11 for unrecognised regulatory domains
> zd1211rw: Detect more AL2230S radios
> zd1211rw: Add ID for Buffalo WLI-U2-KG54L
> zd1211rw: Defer firmware load until first ifup
>
> Holger Schurig (1):
> libertas: fix use-after-free in rx path
>
> Jean Tourrilhes (1):
> softmac: Fix ESSID problem
>
> Matthias Kaehlcke (1):
> use list_for_each_entry() for iteration in Prism 54 driver
>
> Michael Wu (1):
> rtl8187: fix endianness issue in rtl8225 register writing
>
> Michal Schmidt (5):
> airo: disable the PCI device when unloading module
> airo: delay some initialization until the netdev is up
> airo: fix a race causing initialization failures
> airo: simpler calling convention for enable_MAC()
> airo: start with radio off
>
> Robert P. J. Day (1):
> WIRELESS: Remove clearly obsolete libertas/version.h file.
>
> Stephen Hemminger (2):
> ipw2200: rf kill switch polling power saving
> ipw2100: RF kill switch timer power save
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-16 21:59 ` Jeff Garzik
0 siblings, 0 replies; 42+ messages in thread
From: Jeff Garzik @ 2007-07-16 21:59 UTC (permalink / raw)
To: John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
John W. Linville wrote:
> The following changes since commit 71780f59e127bb281a9302d430495ca9586c14e7:
> Linus Torvalds (1):
> Merge branch 'for-linus' of git://git.kernel.org/.../ieee1394/linux1394-2.6
>
> are found in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
>
> Adrian Bunk (1):
> drivers/net/wireless/libertas/wext.c: remove dead code
>
> Dan Williams (1):
> libertas: fix disabling WPA
>
> Daniel Drake (4):
> zd1211rw: Allow channels 1-11 for unrecognised regulatory domains
> zd1211rw: Detect more AL2230S radios
> zd1211rw: Add ID for Buffalo WLI-U2-KG54L
> zd1211rw: Defer firmware load until first ifup
>
> Holger Schurig (1):
> libertas: fix use-after-free in rx path
>
> Jean Tourrilhes (1):
> softmac: Fix ESSID problem
>
> Matthias Kaehlcke (1):
> use list_for_each_entry() for iteration in Prism 54 driver
>
> Michael Wu (1):
> rtl8187: fix endianness issue in rtl8225 register writing
>
> Michal Schmidt (5):
> airo: disable the PCI device when unloading module
> airo: delay some initialization until the netdev is up
> airo: fix a race causing initialization failures
> airo: simpler calling convention for enable_MAC()
> airo: start with radio off
>
> Robert P. J. Day (1):
> WIRELESS: Remove clearly obsolete libertas/version.h file.
>
> Stephen Hemminger (2):
> ipw2200: rf kill switch polling power saving
> ipw2100: RF kill switch timer power save
pulled
^ permalink raw reply [flat|nested] 42+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-10 18:57 John W. Linville
2007-07-16 21:59 ` Jeff Garzik
0 siblings, 1 reply; 42+ messages in thread
From: John W. Linville @ 2007-07-10 18:57 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
The following changes since commit 71780f59e127bb281a9302d430495ca9586c14e7:
Linus Torvalds (1):
Merge branch 'for-linus' of git://git.kernel.org/.../ieee1394/linux1394-2.6
are found in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Adrian Bunk (1):
drivers/net/wireless/libertas/wext.c: remove dead code
Dan Williams (1):
libertas: fix disabling WPA
Daniel Drake (4):
zd1211rw: Allow channels 1-11 for unrecognised regulatory domains
zd1211rw: Detect more AL2230S radios
zd1211rw: Add ID for Buffalo WLI-U2-KG54L
zd1211rw: Defer firmware load until first ifup
Holger Schurig (1):
libertas: fix use-after-free in rx path
Jean Tourrilhes (1):
softmac: Fix ESSID problem
Matthias Kaehlcke (1):
use list_for_each_entry() for iteration in Prism 54 driver
Michael Wu (1):
rtl8187: fix endianness issue in rtl8225 register writing
Michal Schmidt (5):
airo: disable the PCI device when unloading module
airo: delay some initialization until the netdev is up
airo: fix a race causing initialization failures
airo: simpler calling convention for enable_MAC()
airo: start with radio off
Robert P. J. Day (1):
WIRELESS: Remove clearly obsolete libertas/version.h file.
Stephen Hemminger (2):
ipw2200: rf kill switch polling power saving
ipw2100: RF kill switch timer power save
drivers/net/wireless/airo.c | 208 ++++++++++++------------
drivers/net/wireless/ipw2100.c | 11 +-
drivers/net/wireless/ipw2200.c | 5 +-
drivers/net/wireless/libertas/cmd.c | 2 +-
drivers/net/wireless/libertas/rx.c | 1 -
drivers/net/wireless/libertas/version.h | 1 -
drivers/net/wireless/libertas/wext.c | 3 -
drivers/net/wireless/prism54/isl_ioctl.c | 22 +--
drivers/net/wireless/rtl8187_rtl8225.c | 4 +-
drivers/net/wireless/zd1211rw/zd_chip.c | 88 ++---------
drivers/net/wireless/zd1211rw/zd_chip.h | 13 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 59 +++++---
drivers/net/wireless/zd1211rw/zd_mac.h | 3 +-
drivers/net/wireless/zd1211rw/zd_rf.c | 3 +-
drivers/net/wireless/zd1211rw/zd_rf.h | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 12 +-
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 2 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 98 ++++++++---
drivers/net/wireless/zd1211rw/zd_usb.h | 3 +
net/ieee80211/softmac/ieee80211softmac_assoc.c | 5 +-
22 files changed, 280 insertions(+), 269 deletions(-)
delete mode 100644 drivers/net/wireless/libertas/version.h
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index 2d3a180..1c54908 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -52,6 +52,8 @@
#include "airo.h"
+#define DRV_NAME "airo"
+
#ifdef CONFIG_PCI
static struct pci_device_id card_ids[] = {
{ 0x14b9, 1, PCI_ANY_ID, PCI_ANY_ID, },
@@ -71,7 +73,7 @@ static int airo_pci_suspend(struct pci_dev *pdev, pm_message_t state);
static int airo_pci_resume(struct pci_dev *pdev);
static struct pci_driver airo_driver = {
- .name = "airo",
+ .name = DRV_NAME,
.id_table = card_ids,
.probe = airo_pci_probe,
.remove = __devexit_p(airo_pci_remove),
@@ -1092,7 +1094,7 @@ static int get_dec_u16( char *buffer, int *start, int limit );
static void OUT4500( struct airo_info *, u16 register, u16 value );
static unsigned short IN4500( struct airo_info *, u16 register );
static u16 setup_card(struct airo_info*, u8 *mac, int lock);
-static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock );
+static int enable_MAC(struct airo_info *ai, int lock);
static void disable_MAC(struct airo_info *ai, int lock);
static void enable_interrupts(struct airo_info*);
static void disable_interrupts(struct airo_info*);
@@ -1250,7 +1252,7 @@ static int flashputbuf(struct airo_info *ai);
static int flashrestart(struct airo_info *ai,struct net_device *dev);
#define airo_print(type, name, fmt, args...) \
- { printk(type "airo(%s): " fmt "\n", name, ##args); }
+ printk(type DRV_NAME "(%s): " fmt "\n", name, ##args)
#define airo_print_info(name, fmt, args...) \
airo_print(KERN_INFO, name, fmt, ##args)
@@ -1926,28 +1928,54 @@ static int readStatsRid(struct airo_info*ai, StatsRid *sr, int rid, int lock) {
return rc;
}
+static void try_auto_wep(struct airo_info *ai)
+{
+ if (auto_wep && !(ai->flags & FLAG_RADIO_DOWN)) {
+ ai->expires = RUN_AT(3*HZ);
+ wake_up_interruptible(&ai->thr_wait);
+ }
+}
+
static int airo_open(struct net_device *dev) {
- struct airo_info *info = dev->priv;
- Resp rsp;
+ struct airo_info *ai = dev->priv;
+ int rc = 0;
- if (test_bit(FLAG_FLASHING, &info->flags))
+ if (test_bit(FLAG_FLASHING, &ai->flags))
return -EIO;
/* Make sure the card is configured.
* Wireless Extensions may postpone config changes until the card
* is open (to pipeline changes and speed-up card setup). If
* those changes are not yet commited, do it now - Jean II */
- if (test_bit (FLAG_COMMIT, &info->flags)) {
- disable_MAC(info, 1);
- writeConfigRid(info, 1);
+ if (test_bit(FLAG_COMMIT, &ai->flags)) {
+ disable_MAC(ai, 1);
+ writeConfigRid(ai, 1);
}
- if (info->wifidev != dev) {
+ if (ai->wifidev != dev) {
+ clear_bit(JOB_DIE, &ai->jobs);
+ ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name);
+ if (IS_ERR(ai->airo_thread_task))
+ return (int)PTR_ERR(ai->airo_thread_task);
+
+ rc = request_irq(dev->irq, airo_interrupt, IRQF_SHARED,
+ dev->name, dev);
+ if (rc) {
+ airo_print_err(dev->name,
+ "register interrupt %d failed, rc %d",
+ dev->irq, rc);
+ set_bit(JOB_DIE, &ai->jobs);
+ kthread_stop(ai->airo_thread_task);
+ return rc;
+ }
+
/* Power on the MAC controller (which may have been disabled) */
- clear_bit(FLAG_RADIO_DOWN, &info->flags);
- enable_interrupts(info);
+ clear_bit(FLAG_RADIO_DOWN, &ai->flags);
+ enable_interrupts(ai);
+
+ try_auto_wep(ai);
}
- enable_MAC(info, &rsp, 1);
+ enable_MAC(ai, 1);
netif_start_queue(dev);
return 0;
@@ -2338,14 +2366,13 @@ static int airo_set_mac_address(struct net_device *dev, void *p)
{
struct airo_info *ai = dev->priv;
struct sockaddr *addr = p;
- Resp rsp;
readConfigRid(ai, 1);
memcpy (ai->config.macAddr, addr->sa_data, dev->addr_len);
set_bit (FLAG_COMMIT, &ai->flags);
disable_MAC(ai, 1);
writeConfigRid (ai, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
memcpy (ai->dev->dev_addr, addr->sa_data, dev->addr_len);
if (ai->wifidev)
memcpy (ai->wifidev->dev_addr, addr->sa_data, dev->addr_len);
@@ -2392,6 +2419,11 @@ static int airo_close(struct net_device *dev) {
disable_MAC(ai, 1);
#endif
disable_interrupts( ai );
+
+ free_irq(dev->irq, dev);
+
+ set_bit(JOB_DIE, &ai->jobs);
+ kthread_stop(ai->airo_thread_task);
}
return 0;
}
@@ -2403,7 +2435,6 @@ void stop_airo_card( struct net_device *dev, int freeres )
set_bit(FLAG_RADIO_DOWN, &ai->flags);
disable_MAC(ai, 1);
disable_interrupts(ai);
- free_irq( dev->irq, dev );
takedown_proc_entry( dev, ai );
if (test_bit(FLAG_REGISTERED, &ai->flags)) {
unregister_netdev( dev );
@@ -2414,9 +2445,6 @@ void stop_airo_card( struct net_device *dev, int freeres )
}
clear_bit(FLAG_REGISTERED, &ai->flags);
}
- set_bit(JOB_DIE, &ai->jobs);
- kthread_stop(ai->airo_thread_task);
-
/*
* Clean out tx queue
*/
@@ -2554,8 +2582,7 @@ static int mpi_init_descriptors (struct airo_info *ai)
* 2) Map PCI memory for issueing commands.
* 3) Allocate memory (shared) to send and receive ethernet frames.
*/
-static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci,
- const char *name)
+static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci)
{
unsigned long mem_start, mem_len, aux_start, aux_len;
int rc = -1;
@@ -2569,35 +2596,35 @@ static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci,
aux_start = pci_resource_start(pci, 2);
aux_len = AUXMEMSIZE;
- if (!request_mem_region(mem_start, mem_len, name)) {
- airo_print_err(ai->dev->name, "Couldn't get region %x[%x] for %s",
- (int)mem_start, (int)mem_len, name);
+ if (!request_mem_region(mem_start, mem_len, DRV_NAME)) {
+ airo_print_err("", "Couldn't get region %x[%x]",
+ (int)mem_start, (int)mem_len);
goto out;
}
- if (!request_mem_region(aux_start, aux_len, name)) {
- airo_print_err(ai->dev->name, "Couldn't get region %x[%x] for %s",
- (int)aux_start, (int)aux_len, name);
+ if (!request_mem_region(aux_start, aux_len, DRV_NAME)) {
+ airo_print_err("", "Couldn't get region %x[%x]",
+ (int)aux_start, (int)aux_len);
goto free_region1;
}
ai->pcimem = ioremap(mem_start, mem_len);
if (!ai->pcimem) {
- airo_print_err(ai->dev->name, "Couldn't map region %x[%x] for %s",
- (int)mem_start, (int)mem_len, name);
+ airo_print_err("", "Couldn't map region %x[%x]",
+ (int)mem_start, (int)mem_len);
goto free_region2;
}
ai->pciaux = ioremap(aux_start, aux_len);
if (!ai->pciaux) {
- airo_print_err(ai->dev->name, "Couldn't map region %x[%x] for %s",
- (int)aux_start, (int)aux_len, name);
+ airo_print_err("", "Couldn't map region %x[%x]",
+ (int)aux_start, (int)aux_len);
goto free_memmap;
}
/* Reserve PKTSIZE for each fid and 2K for the Rids */
ai->shared = pci_alloc_consistent(pci, PCI_SHARED_LEN, &ai->shared_dma);
if (!ai->shared) {
- airo_print_err(ai->dev->name, "Couldn't alloc_consistent %d",
- PCI_SHARED_LEN);
+ airo_print_err("", "Couldn't alloc_consistent %d",
+ PCI_SHARED_LEN);
goto free_auxmap;
}
@@ -2742,7 +2769,7 @@ static int airo_networks_allocate(struct airo_info *ai)
kzalloc(AIRO_MAX_NETWORK_COUNT * sizeof(BSSListElement),
GFP_KERNEL);
if (!ai->networks) {
- airo_print_warn(ai->dev->name, "Out of memory allocating beacons");
+ airo_print_warn("", "Out of memory allocating beacons");
return -ENOMEM;
}
@@ -2770,7 +2797,6 @@ static int airo_test_wpa_capable(struct airo_info *ai)
{
int status;
CapabilityRid cap_rid;
- const char *name = ai->dev->name;
status = readCapabilityRid(ai, &cap_rid, 1);
if (status != SUCCESS) return 0;
@@ -2778,12 +2804,12 @@ static int airo_test_wpa_capable(struct airo_info *ai)
/* Only firmware versions 5.30.17 or better can do WPA */
if ((cap_rid.softVer > 0x530)
|| ((cap_rid.softVer == 0x530) && (cap_rid.softSubVer >= 17))) {
- airo_print_info(name, "WPA is supported.");
+ airo_print_info("", "WPA is supported.");
return 1;
}
/* No WPA support */
- airo_print_info(name, "WPA unsupported (only firmware versions 5.30.17"
+ airo_print_info("", "WPA unsupported (only firmware versions 5.30.17"
" and greater support WPA. Detected %s)", cap_rid.prodVer);
return 0;
}
@@ -2797,23 +2823,19 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
int i, rc;
/* Create the network device object. */
- dev = alloc_etherdev(sizeof(*ai));
- if (!dev) {
+ dev = alloc_netdev(sizeof(*ai), "", ether_setup);
+ if (!dev) {
airo_print_err("", "Couldn't alloc_etherdev");
return NULL;
- }
- if (dev_alloc_name(dev, dev->name) < 0) {
- airo_print_err("", "Couldn't get name!");
- goto err_out_free;
}
ai = dev->priv;
ai->wifidev = NULL;
- ai->flags = 0;
+ ai->flags = 1 << FLAG_RADIO_DOWN;
ai->jobs = 0;
ai->dev = dev;
if (pci && (pci->device == 0x5000 || pci->device == 0xa504)) {
- airo_print_dbg(dev->name, "Found an MPI350 card");
+ airo_print_dbg("", "Found an MPI350 card");
set_bit(FLAG_MPI, &ai->flags);
}
spin_lock_init(&ai->aux_lock);
@@ -2821,14 +2843,11 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
ai->config.len = 0;
ai->pci = pci;
init_waitqueue_head (&ai->thr_wait);
- ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name);
- if (IS_ERR(ai->airo_thread_task))
- goto err_out_free;
ai->tfm = NULL;
add_airo_dev(ai);
if (airo_networks_allocate (ai))
- goto err_out_thr;
+ goto err_out_free;
airo_networks_initialize (ai);
/* The Airo-specific entries in the device structure. */
@@ -2851,27 +2870,22 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
dev->base_addr = port;
SET_NETDEV_DEV(dev, dmdev);
+ SET_MODULE_OWNER(dev);
reset_card (dev, 1);
msleep(400);
- rc = request_irq( dev->irq, airo_interrupt, IRQF_SHARED, dev->name, dev );
- if (rc) {
- airo_print_err(dev->name, "register interrupt %d failed, rc %d",
- irq, rc);
- goto err_out_nets;
- }
if (!is_pcmcia) {
- if (!request_region( dev->base_addr, 64, dev->name )) {
+ if (!request_region(dev->base_addr, 64, DRV_NAME)) {
rc = -EBUSY;
airo_print_err(dev->name, "Couldn't request region");
- goto err_out_irq;
+ goto err_out_nets;
}
}
if (test_bit(FLAG_MPI,&ai->flags)) {
- if (mpi_map_card(ai, pci, dev->name)) {
- airo_print_err(dev->name, "Could not map memory");
+ if (mpi_map_card(ai, pci)) {
+ airo_print_err("", "Could not map memory");
goto err_out_res;
}
}
@@ -2899,6 +2913,7 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
ai->bssListRidLen = sizeof(BSSListRid) - sizeof(BSSListRidExtra);
}
+ strcpy(dev->name, "eth%d");
rc = register_netdev(dev);
if (rc) {
airo_print_err(dev->name, "Couldn't register_netdev");
@@ -2921,8 +2936,6 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
if (setup_proc_entry(dev, dev->priv) < 0)
goto err_out_wifi;
- netif_start_queue(dev);
- SET_MODULE_OWNER(dev);
return dev;
err_out_wifi:
@@ -2940,14 +2953,9 @@ err_out_map:
err_out_res:
if (!is_pcmcia)
release_region( dev->base_addr, 64 );
-err_out_irq:
- free_irq(dev->irq, dev);
err_out_nets:
airo_networks_free(ai);
-err_out_thr:
del_airo_dev(ai);
- set_bit(JOB_DIE, &ai->jobs);
- kthread_stop(ai->airo_thread_task);
err_out_free:
free_netdev(dev);
return NULL;
@@ -3529,9 +3537,11 @@ static u16 IN4500( struct airo_info *ai, u16 reg ) {
return rc;
}
-static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
+static int enable_MAC(struct airo_info *ai, int lock)
+{
int rc;
- Cmd cmd;
+ Cmd cmd;
+ Resp rsp;
/* FLAG_RADIO_OFF : Radio disabled via /proc or Wireless Extensions
* FLAG_RADIO_DOWN : Radio disabled via "ifconfig ethX down"
@@ -3547,7 +3557,7 @@ static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
if (!test_bit(FLAG_ENABLED, &ai->flags)) {
memset(&cmd, 0, sizeof(cmd));
cmd.cmd = MAC_ENABLE;
- rc = issuecommand(ai, &cmd, rsp);
+ rc = issuecommand(ai, &cmd, &rsp);
if (rc == SUCCESS)
set_bit(FLAG_ENABLED, &ai->flags);
} else
@@ -3557,8 +3567,12 @@ static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
up(&ai->sem);
if (rc)
- airo_print_err(ai->dev->name, "%s: Cannot enable MAC, err=%d",
- __FUNCTION__, rc);
+ airo_print_err(ai->dev->name, "Cannot enable MAC");
+ else if ((rsp.status & 0xFF00) != 0) {
+ airo_print_err(ai->dev->name, "Bad MAC enable reason=%x, "
+ "rid=%x, offset=%d", rsp.rsp0, rsp.rsp1, rsp.rsp2);
+ rc = ERROR;
+ }
return rc;
}
@@ -3902,12 +3916,9 @@ static u16 setup_card(struct airo_info *ai, u8 *mac, int lock)
if ( status != SUCCESS ) return ERROR;
}
- status = enable_MAC(ai, &rsp, lock);
- if ( status != SUCCESS || (rsp.status & 0xFF00) != 0) {
- airo_print_err(ai->dev->name, "Bad MAC enable reason = %x, rid = %x,"
- " offset = %d", rsp.rsp0, rsp.rsp1, rsp.rsp2 );
+ status = enable_MAC(ai, lock);
+ if (status != SUCCESS)
return ERROR;
- }
/* Grab the initial wep key, we gotta save it for auto_wep */
rc = readWepKeyRid(ai, &wkr, 1, lock);
@@ -3919,10 +3930,7 @@ static u16 setup_card(struct airo_info *ai, u8 *mac, int lock)
rc = readWepKeyRid(ai, &wkr, 0, lock);
} while(lastindex != wkr.kindex);
- if (auto_wep) {
- ai->expires = RUN_AT(3*HZ);
- wake_up_interruptible(&ai->thr_wait);
- }
+ try_auto_wep(ai);
return SUCCESS;
}
@@ -4004,7 +4012,7 @@ static int bap_setup(struct airo_info *ai, u16 rid, u16 offset, int whichbap )
}
if ( !(max_tries--) ) {
airo_print_err(ai->dev->name,
- "airo: BAP setup error too many retries\n");
+ "BAP setup error too many retries\n");
return ERROR;
}
// -- PC4500 missed it, try again
@@ -5152,7 +5160,6 @@ static void proc_SSID_on_close( struct inode *inode, struct file *file ) {
struct net_device *dev = dp->data;
struct airo_info *ai = dev->priv;
SsidRid SSID_rid;
- Resp rsp;
int i;
int offset = 0;
@@ -5177,7 +5184,7 @@ static void proc_SSID_on_close( struct inode *inode, struct file *file ) {
SSID_rid.len = sizeof(SSID_rid);
disable_MAC(ai, 1);
writeSsidRid(ai, &SSID_rid, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
static inline u8 hexVal(char c) {
@@ -5193,7 +5200,6 @@ static void proc_APList_on_close( struct inode *inode, struct file *file ) {
struct net_device *dev = dp->data;
struct airo_info *ai = dev->priv;
APListRid APList_rid;
- Resp rsp;
int i;
if ( !data->writelen ) return;
@@ -5218,18 +5224,17 @@ static void proc_APList_on_close( struct inode *inode, struct file *file ) {
}
disable_MAC(ai, 1);
writeAPListRid(ai, &APList_rid, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
/* This function wraps PC4500_writerid with a MAC disable */
static int do_writerid( struct airo_info *ai, u16 rid, const void *rid_data,
int len, int dummy ) {
int rc;
- Resp rsp;
disable_MAC(ai, 1);
rc = PC4500_writerid(ai, rid, rid_data, len, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
return rc;
}
@@ -5260,7 +5265,6 @@ static int set_wep_key(struct airo_info *ai, u16 index,
const char *key, u16 keylen, int perm, int lock ) {
static const unsigned char macaddr[ETH_ALEN] = { 0x01, 0, 0, 0, 0, 0 };
WepKeyRid wkr;
- Resp rsp;
memset(&wkr, 0, sizeof(wkr));
if (keylen == 0) {
@@ -5280,7 +5284,7 @@ static int set_wep_key(struct airo_info *ai, u16 index,
if (perm) disable_MAC(ai, lock);
writeWepKeyRid(ai, &wkr, perm, lock);
- if (perm) enable_MAC(ai, &rsp, lock);
+ if (perm) enable_MAC(ai, lock);
return 0;
}
@@ -5548,7 +5552,6 @@ static int proc_close( struct inode *inode, struct file *file )
changed. */
static void timer_func( struct net_device *dev ) {
struct airo_info *apriv = dev->priv;
- Resp rsp;
/* We don't have a link so try changing the authtype */
readConfigRid(apriv, 0);
@@ -5575,7 +5578,7 @@ static void timer_func( struct net_device *dev ) {
}
set_bit (FLAG_COMMIT, &apriv->flags);
writeConfigRid(apriv, 0);
- enable_MAC(apriv, &rsp, 0);
+ enable_MAC(apriv, 0);
up(&apriv->sem);
/* Schedule check to see if the change worked */
@@ -5597,8 +5600,10 @@ static int __devinit airo_pci_probe(struct pci_dev *pdev,
dev = _init_airo_card(pdev->irq, pdev->resource[0].start, 0, pdev, &pdev->dev);
else
dev = _init_airo_card(pdev->irq, pdev->resource[2].start, 0, pdev, &pdev->dev);
- if (!dev)
+ if (!dev) {
+ pci_disable_device(pdev);
return -ENODEV;
+ }
pci_set_drvdata(pdev, dev);
return 0;
@@ -5610,6 +5615,8 @@ static void __devexit airo_pci_remove(struct pci_dev *pdev)
airo_print_info(dev->name, "Unregistering...");
stop_airo_card(dev, 1);
+ pci_disable_device(pdev);
+ pci_set_drvdata(pdev, NULL);
}
static int airo_pci_suspend(struct pci_dev *pdev, pm_message_t state)
@@ -5646,7 +5653,6 @@ static int airo_pci_resume(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
struct airo_info *ai = dev->priv;
- Resp rsp;
pci_power_t prev_state = pdev->current_state;
pci_set_power_state(pdev, PCI_D0);
@@ -5679,7 +5685,7 @@ static int airo_pci_resume(struct pci_dev *pdev)
ai->APList = NULL;
}
writeConfigRid(ai, 0);
- enable_MAC(ai, &rsp, 0);
+ enable_MAC(ai, 0);
ai->power = PMSG_ON;
netif_device_attach(dev);
netif_wake_queue(dev);
@@ -5903,7 +5909,6 @@ static int airo_set_essid(struct net_device *dev,
char *extra)
{
struct airo_info *local = dev->priv;
- Resp rsp;
SsidRid SSID_rid; /* SSIDs */
/* Reload the list of current SSID */
@@ -5935,7 +5940,7 @@ static int airo_set_essid(struct net_device *dev,
/* Write it to the card */
disable_MAC(local, 1);
writeSsidRid(local, &SSID_rid, 1);
- enable_MAC(local, &rsp, 1);
+ enable_MAC(local, 1);
return 0;
}
@@ -6000,7 +6005,7 @@ static int airo_set_wap(struct net_device *dev,
memcpy(APList_rid.ap[0], awrq->sa_data, ETH_ALEN);
disable_MAC(local, 1);
writeAPListRid(local, &APList_rid, 1);
- enable_MAC(local, &rsp, 1);
+ enable_MAC(local, 1);
}
return 0;
}
@@ -7454,7 +7459,6 @@ static int airo_config_commit(struct net_device *dev,
char *extra) /* NULL */
{
struct airo_info *local = dev->priv;
- Resp rsp;
if (!test_bit (FLAG_COMMIT, &local->flags))
return 0;
@@ -7479,7 +7483,7 @@ static int airo_config_commit(struct net_device *dev,
if (down_interruptible(&local->sem))
return -ERESTARTSYS;
writeConfigRid(local, 0);
- enable_MAC(local, &rsp, 0);
+ enable_MAC(local, 0);
if (test_bit (FLAG_RESET, &local->flags))
airo_set_promisc(local);
else
@@ -7746,7 +7750,6 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {
unsigned char *iobuf;
int len;
struct airo_info *ai = dev->priv;
- Resp rsp;
if (test_bit(FLAG_FLASHING, &ai->flags))
return -EIO;
@@ -7758,7 +7761,7 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {
if (test_bit(FLAG_COMMIT, &ai->flags)) {
disable_MAC (ai, 1);
writeConfigRid (ai, 1);
- enable_MAC (ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
break;
case AIROGSLIST: ridcode = RID_SSID; break;
@@ -7815,7 +7818,6 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
struct airo_info *ai = dev->priv;
int ridcode;
int enabled;
- Resp rsp;
static int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
unsigned char *iobuf;
@@ -7849,7 +7851,7 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
* same with MAC off
*/
case AIROPMACON:
- if (enable_MAC(ai, &rsp, 1) != 0)
+ if (enable_MAC(ai, 1) != 0)
return -EIO;
return 0;
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index d51daf8..072ede7 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -1768,7 +1768,8 @@ static int ipw2100_up(struct ipw2100_priv *priv, int deferred)
if (priv->stop_rf_kill) {
priv->stop_rf_kill = 0;
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
}
deferred = 1;
@@ -2098,7 +2099,7 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
/* Make sure the RF Kill check timer is running */
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
}
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
@@ -4233,7 +4234,8 @@ static int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio)
/* Make sure the RF_KILL check timer is running */
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
} else
schedule_reset(priv);
}
@@ -5969,7 +5971,8 @@ static void ipw2100_rf_kill(struct work_struct *work)
if (rf_kill_active(priv)) {
IPW_DEBUG_RF_KILL("RF Kill active, rescheduling GPIO check\n");
if (!priv->stop_rf_kill)
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
goto exit_unlock;
}
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index 7cb2052..aa32a97 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -1751,7 +1751,7 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
/* Make sure the RF_KILL check timer is running */
cancel_delayed_work(&priv->rf_kill);
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- 2 * HZ);
+ round_jiffies(2 * HZ));
} else
queue_work(priv->workqueue, &priv->up);
}
@@ -4690,7 +4690,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
else if (priv->config & CFG_BACKGROUND_SCAN
&& priv->status & STATUS_ASSOCIATED)
queue_delayed_work(priv->workqueue,
- &priv->request_scan, HZ);
+ &priv->request_scan,
+ round_jiffies(HZ));
/* Send an empty event to user space.
* We don't send the received data on the event because
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 13f6528..4a8f5dc 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -240,7 +240,7 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
if (*enable)
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
else
- penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
+ penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
}
lbs_deb_leave(LBS_DEB_CMD);
diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c
index 88d9d2d..769c86f 100644
--- a/drivers/net/wireless/libertas/rx.c
+++ b/drivers/net/wireless/libertas/rx.c
@@ -439,7 +439,6 @@ static int process_rxed_802_11_packet(wlan_private * priv, struct sk_buff *skb)
ret = 0;
done:
- skb->protocol = __constant_htons(0x0019); /* ETH_P_80211_RAW */
lbs_deb_leave_args(LBS_DEB_RX, "ret %d", ret);
return ret;
}
diff --git a/drivers/net/wireless/libertas/version.h b/drivers/net/wireless/libertas/version.h
deleted file mode 100644
index 8b13789..0000000
--- a/drivers/net/wireless/libertas/version.h
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index f42b796..2fcc3bf 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -1719,9 +1719,6 @@ static int wlan_set_encodeext(struct net_device *dev,
pkey->type = KEY_TYPE_ID_TKIP;
} else if (alg == IW_ENCODE_ALG_CCMP) {
pkey->type = KEY_TYPE_ID_AES;
- } else {
- ret = -EINVAL;
- goto out;
}
/* If WPA isn't enabled yet, do that now */
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
index 283be4a..585f599 100644
--- a/drivers/net/wireless/prism54/isl_ioctl.c
+++ b/drivers/net/wireless/prism54/isl_ioctl.c
@@ -1853,7 +1853,6 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
islpci_private *priv = netdev_priv(ndev);
struct islpci_acl *acl = &priv->acl;
struct mac_entry *entry;
- struct list_head *ptr;
struct sockaddr *addr = (struct sockaddr *) extra;
if (addr->sa_family != ARPHRD_ETHER)
@@ -1861,11 +1860,9 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
if (down_interruptible(&acl->sem))
return -ERESTARTSYS;
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
-
+ list_for_each_entry(entry, &acl->mac_list, _list) {
if (memcmp(entry->addr, addr->sa_data, ETH_ALEN) == 0) {
- list_del(ptr);
+ list_del(&entry->_list);
acl->size--;
kfree(entry);
up(&acl->sem);
@@ -1883,7 +1880,6 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
islpci_private *priv = netdev_priv(ndev);
struct islpci_acl *acl = &priv->acl;
struct mac_entry *entry;
- struct list_head *ptr;
struct sockaddr *dst = (struct sockaddr *) extra;
dwrq->length = 0;
@@ -1891,9 +1887,7 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
if (down_interruptible(&acl->sem))
return -ERESTARTSYS;
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
-
+ list_for_each_entry(entry, &acl->mac_list, _list) {
memcpy(dst->sa_data, entry->addr, ETH_ALEN);
dst->sa_family = ARPHRD_ETHER;
dwrq->length++;
@@ -1960,7 +1954,6 @@ prism54_get_policy(struct net_device *ndev, struct iw_request_info *info,
static int
prism54_mac_accept(struct islpci_acl *acl, char *mac)
{
- struct list_head *ptr;
struct mac_entry *entry;
int res = 0;
@@ -1972,8 +1965,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)
return 1;
}
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
+ list_for_each_entry(entry, &acl->mac_list, _list) {
if (memcmp(entry->addr, mac, ETH_ALEN) == 0) {
res = 1;
break;
@@ -2216,11 +2208,9 @@ prism54_wpa_bss_ie_init(islpci_private *priv)
void
prism54_wpa_bss_ie_clean(islpci_private *priv)
{
- struct list_head *ptr, *n;
+ struct islpci_bss_wpa_ie *bss, *n;
- list_for_each_safe(ptr, n, &priv->bss_wpa_list) {
- struct islpci_bss_wpa_ie *bss;
- bss = list_entry(ptr, struct islpci_bss_wpa_ie, list);
+ list_for_each_entry_safe(bss, n, &priv->bss_wpa_list, list) {
kfree(bss);
}
}
diff --git a/drivers/net/wireless/rtl8187_rtl8225.c b/drivers/net/wireless/rtl8187_rtl8225.c
index e25a09f..efc4120 100644
--- a/drivers/net/wireless/rtl8187_rtl8225.c
+++ b/drivers/net/wireless/rtl8187_rtl8225.c
@@ -67,7 +67,7 @@ static void rtl8225_write_bitbang(struct ieee80211_hw *dev, u8 addr, u16 data)
msleep(2);
}
-static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, u16 data)
+static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data)
{
struct rtl8187_priv *priv = dev->priv;
u16 reg80, reg82, reg84;
@@ -106,7 +106,7 @@ void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
struct rtl8187_priv *priv = dev->priv;
if (priv->asic_rev)
- rtl8225_write_8051(dev, addr, data);
+ rtl8225_write_8051(dev, addr, cpu_to_le16(data));
else
rtl8225_write_bitbang(dev, addr, data);
}
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 5b624bf..c39f198 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -49,8 +49,9 @@ void zd_chip_clear(struct zd_chip *chip)
ZD_MEMCLEAR(chip, sizeof(*chip));
}
-static int scnprint_mac_oui(const u8 *addr, char *buffer, size_t size)
+static int scnprint_mac_oui(struct zd_chip *chip, char *buffer, size_t size)
{
+ u8 *addr = zd_usb_to_netdev(&chip->usb)->dev_addr;
return scnprintf(buffer, size, "%02x-%02x-%02x",
addr[0], addr[1], addr[2]);
}
@@ -61,10 +62,10 @@ static int scnprint_id(struct zd_chip *chip, char *buffer, size_t size)
int i = 0;
i = scnprintf(buffer, size, "zd1211%s chip ",
- chip->is_zd1211b ? "b" : "");
+ zd_chip_is_zd1211b(chip) ? "b" : "");
i += zd_usb_scnprint_id(&chip->usb, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " ");
- i += scnprint_mac_oui(chip->e2p_mac, buffer+i, size-i);
+ i += scnprint_mac_oui(chip, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " ");
i += zd_rf_scnprint_id(&chip->rf, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c%c", chip->pa_type,
@@ -366,64 +367,9 @@ error:
return r;
}
-static int _read_mac_addr(struct zd_chip *chip, u8 *mac_addr,
- const zd_addr_t *addr)
-{
- int r;
- u32 parts[2];
-
- r = zd_ioread32v_locked(chip, parts, (const zd_addr_t *)addr, 2);
- if (r) {
- dev_dbg_f(zd_chip_dev(chip),
- "error: couldn't read e2p macs. Error number %d\n", r);
- return r;
- }
-
- mac_addr[0] = parts[0];
- mac_addr[1] = parts[0] >> 8;
- mac_addr[2] = parts[0] >> 16;
- mac_addr[3] = parts[0] >> 24;
- mac_addr[4] = parts[1];
- mac_addr[5] = parts[1] >> 8;
-
- return 0;
-}
-
-static int read_e2p_mac_addr(struct zd_chip *chip)
-{
- static const zd_addr_t addr[2] = { E2P_MAC_ADDR_P1, E2P_MAC_ADDR_P2 };
-
- ZD_ASSERT(mutex_is_locked(&chip->mutex));
- return _read_mac_addr(chip, chip->e2p_mac, (const zd_addr_t *)addr);
-}
-
/* MAC address: if custom mac addresses are to to be used CR_MAC_ADDR_P1 and
* CR_MAC_ADDR_P2 must be overwritten
*/
-void zd_get_e2p_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- mutex_lock(&chip->mutex);
- memcpy(mac_addr, chip->e2p_mac, ETH_ALEN);
- mutex_unlock(&chip->mutex);
-}
-
-static int read_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- static const zd_addr_t addr[2] = { CR_MAC_ADDR_P1, CR_MAC_ADDR_P2 };
- return _read_mac_addr(chip, mac_addr, (const zd_addr_t *)addr);
-}
-
-int zd_read_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- int r;
-
- dev_dbg_f(zd_chip_dev(chip), "\n");
- mutex_lock(&chip->mutex);
- r = read_mac_addr(chip, mac_addr);
- mutex_unlock(&chip->mutex);
- return r;
-}
-
int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
{
int r;
@@ -444,12 +390,6 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
mutex_lock(&chip->mutex);
r = zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
-#ifdef DEBUG
- {
- u8 tmp[ETH_ALEN];
- read_mac_addr(chip, tmp);
- }
-#endif /* DEBUG */
mutex_unlock(&chip->mutex);
return r;
}
@@ -809,7 +749,7 @@ out:
static int hw_reset_phy(struct zd_chip *chip)
{
- return chip->is_zd1211b ? zd1211b_hw_reset_phy(chip) :
+ return zd_chip_is_zd1211b(chip) ? zd1211b_hw_reset_phy(chip) :
zd1211_hw_reset_phy(chip);
}
@@ -874,7 +814,7 @@ static int hw_init_hmac(struct zd_chip *chip)
if (r)
return r;
- return chip->is_zd1211b ?
+ return zd_chip_is_zd1211b(chip) ?
zd1211b_hw_init_hmac(chip) : zd1211_hw_init_hmac(chip);
}
@@ -1136,8 +1076,15 @@ static int read_fw_regs_offset(struct zd_chip *chip)
return 0;
}
+/* Read mac address using pre-firmware interface */
+int zd_chip_read_mac_addr_fw(struct zd_chip *chip, u8 *addr)
+{
+ dev_dbg_f(zd_chip_dev(chip), "\n");
+ return zd_usb_read_fw(&chip->usb, E2P_MAC_ADDR_P1, addr,
+ ETH_ALEN);
+}
-int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
+int zd_chip_init_hw(struct zd_chip *chip)
{
int r;
u8 rf_type;
@@ -1145,7 +1092,6 @@ int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
dev_dbg_f(zd_chip_dev(chip), "\n");
mutex_lock(&chip->mutex);
- chip->is_zd1211b = (device_type == DEVICE_ZD1211B) != 0;
#ifdef DEBUG
r = test_init(chip);
@@ -1201,10 +1147,6 @@ int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
goto out;
#endif /* DEBUG */
- r = read_e2p_mac_addr(chip);
- if (r)
- goto out;
-
r = read_cal_int_tables(chip);
if (r)
goto out;
@@ -1259,7 +1201,7 @@ static int update_channel_integration_and_calibration(struct zd_chip *chip,
r = update_pwr_int(chip, channel);
if (r)
return r;
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
static const struct zd_ioreq16 ioreqs[] = {
{ CR69, 0x28 },
{},
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index 79d0288..f469857 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -704,7 +704,6 @@ struct zd_chip {
struct mutex mutex;
/* Base address of FW_REG_ registers */
zd_addr_t fw_regs_base;
- u8 e2p_mac[ETH_ALEN];
/* EepSetPoint in the vendor driver */
u8 pwr_cal_values[E2P_CHANNEL_COUNT];
/* integration values in the vendor driver */
@@ -715,7 +714,7 @@ struct zd_chip {
unsigned int pa_type:4,
patch_cck_gain:1, patch_cr157:1, patch_6m_band_edge:1,
new_phy_layout:1, al2230s_bit:1,
- is_zd1211b:1, supports_tx_led:1;
+ supports_tx_led:1;
};
static inline struct zd_chip *zd_usb_to_chip(struct zd_usb *usb)
@@ -734,9 +733,15 @@ void zd_chip_init(struct zd_chip *chip,
struct net_device *netdev,
struct usb_interface *intf);
void zd_chip_clear(struct zd_chip *chip);
-int zd_chip_init_hw(struct zd_chip *chip, u8 device_type);
+int zd_chip_read_mac_addr_fw(struct zd_chip *chip, u8 *addr);
+int zd_chip_init_hw(struct zd_chip *chip);
int zd_chip_reset(struct zd_chip *chip);
+static inline int zd_chip_is_zd1211b(struct zd_chip *chip)
+{
+ return chip->usb.is_zd1211b;
+}
+
static inline int zd_ioread16v_locked(struct zd_chip *chip, u16 *values,
const zd_addr_t *addresses,
unsigned int count)
@@ -825,8 +830,6 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
}
u8 zd_chip_get_channel(struct zd_chip *chip);
int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
-void zd_get_e2p_mac_addr(struct zd_chip *chip, u8 *mac_addr);
-int zd_read_mac_addr(struct zd_chip *chip, u8 *mac_addr);
int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
int zd_chip_switch_radio_on(struct zd_chip *chip);
int zd_chip_switch_radio_off(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 6753d24..f6c487a 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -86,38 +86,46 @@ out:
return r;
}
-int zd_mac_init_hw(struct zd_mac *mac, u8 device_type)
+int zd_mac_preinit_hw(struct zd_mac *mac)
{
int r;
- struct zd_chip *chip = &mac->chip;
u8 addr[ETH_ALEN];
+
+ r = zd_chip_read_mac_addr_fw(&mac->chip, addr);
+ if (r)
+ return r;
+
+ memcpy(mac->netdev->dev_addr, addr, ETH_ALEN);
+ return 0;
+}
+
+int zd_mac_init_hw(struct zd_mac *mac)
+{
+ int r;
+ struct zd_chip *chip = &mac->chip;
u8 default_regdomain;
r = zd_chip_enable_int(chip);
if (r)
goto out;
- r = zd_chip_init_hw(chip, device_type);
+ r = zd_chip_init_hw(chip);
if (r)
goto disable_int;
- zd_get_e2p_mac_addr(chip, addr);
- r = zd_write_mac_addr(chip, addr);
- if (r)
- goto disable_int;
ZD_ASSERT(!irqs_disabled());
- spin_lock_irq(&mac->lock);
- memcpy(mac->netdev->dev_addr, addr, ETH_ALEN);
- spin_unlock_irq(&mac->lock);
r = zd_read_regdomain(chip, &default_regdomain);
if (r)
goto disable_int;
if (!zd_regdomain_supported(default_regdomain)) {
- dev_dbg_f(zd_mac_dev(mac),
- "Regulatory Domain %#04x is not supported.\n",
- default_regdomain);
- r = -EINVAL;
- goto disable_int;
+ /* The vendor driver overrides the regulatory domain and
+ * allowed channel registers and unconditionally restricts
+ * available channels to 1-11 everywhere. Match their
+ * questionable behaviour only for regdomains which we don't
+ * recognise. */
+ dev_warn(zd_mac_dev(mac), "Unrecognised regulatory domain: "
+ "%#04x. Defaulting to FCC.\n", default_regdomain);
+ default_regdomain = ZD_REGDOMAIN_FCC;
}
spin_lock_irq(&mac->lock);
mac->regdomain = mac->default_regdomain = default_regdomain;
@@ -164,14 +172,25 @@ int zd_mac_open(struct net_device *netdev)
{
struct zd_mac *mac = zd_netdev_mac(netdev);
struct zd_chip *chip = &mac->chip;
+ struct zd_usb *usb = &chip->usb;
int r;
+ if (!usb->initialized) {
+ r = zd_usb_init_hw(usb);
+ if (r)
+ goto out;
+ }
+
tasklet_enable(&mac->rx_tasklet);
r = zd_chip_enable_int(chip);
if (r < 0)
goto out;
+ r = zd_write_mac_addr(chip, netdev->dev_addr);
+ if (r)
+ goto disable_int;
+
r = zd_chip_set_basic_rates(chip, CR_RATES_80211B | CR_RATES_80211G);
if (r < 0)
goto disable_int;
@@ -251,9 +270,11 @@ int zd_mac_set_mac_address(struct net_device *netdev, void *p)
dev_dbg_f(zd_mac_dev(mac),
"Setting MAC to " MAC_FMT "\n", MAC_ARG(addr->sa_data));
- r = zd_write_mac_addr(chip, addr->sa_data);
- if (r)
- return r;
+ if (netdev->flags & IFF_UP) {
+ r = zd_write_mac_addr(chip, addr->sa_data);
+ if (r)
+ return r;
+ }
spin_lock_irqsave(&mac->lock, flags);
memcpy(netdev->dev_addr, addr->sa_data, ETH_ALEN);
@@ -855,7 +876,7 @@ static int fill_ctrlset(struct zd_mac *mac,
/* ZD1211B: Computing the length difference this way, gives us
* flexibility to compute the packet length.
*/
- cs->packet_length = cpu_to_le16(mac->chip.is_zd1211b ?
+ cs->packet_length = cpu_to_le16(zd_chip_is_zd1211b(&mac->chip) ?
packet_length - frag_len : packet_length);
/*
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index faf4c78..9f9344e 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -189,7 +189,8 @@ int zd_mac_init(struct zd_mac *mac,
struct usb_interface *intf);
void zd_mac_clear(struct zd_mac *mac);
-int zd_mac_init_hw(struct zd_mac *mac, u8 device_type);
+int zd_mac_preinit_hw(struct zd_mac *mac);
+int zd_mac_init_hw(struct zd_mac *mac);
int zd_mac_open(struct net_device *netdev);
int zd_mac_stop(struct net_device *netdev);
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.c b/drivers/net/wireless/zd1211rw/zd_rf.c
index 7407409..abe5d38 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf.c
@@ -34,7 +34,7 @@ static const char * const rfs[] = {
[AL2210_RF] = "AL2210_RF",
[MAXIM_NEW_RF] = "MAXIM_NEW_RF",
[UW2453_RF] = "UW2453_RF",
- [UNKNOWN_A_RF] = "UNKNOWN_A_RF",
+ [AL2230S_RF] = "AL2230S_RF",
[RALINK_RF] = "RALINK_RF",
[INTERSIL_RF] = "INTERSIL_RF",
[RF2959_RF] = "RF2959_RF",
@@ -77,6 +77,7 @@ int zd_rf_init_hw(struct zd_rf *rf, u8 type)
r = zd_rf_init_rf2959(rf);
break;
case AL2230_RF:
+ case AL2230S_RF:
r = zd_rf_init_al2230(rf);
break;
case AL7230B_RF:
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.h b/drivers/net/wireless/zd1211rw/zd_rf.h
index c6dfd82..30502f2 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf.h
+++ b/drivers/net/wireless/zd1211rw/zd_rf.h
@@ -26,7 +26,7 @@
#define AL2210_RF 0x7
#define MAXIM_NEW_RF 0x8
#define UW2453_RF 0x9
-#define UNKNOWN_A_RF 0xa
+#define AL2230S_RF 0xa
#define RALINK_RF 0xb
#define INTERSIL_RF 0xc
#define RF2959_RF 0xd
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
index e7a4ecf..006774d 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
@@ -21,6 +21,8 @@
#include "zd_usb.h"
#include "zd_chip.h"
+#define IS_AL2230S(chip) ((chip)->al2230s_bit || (chip)->rf.type == AL2230S_RF)
+
static const u32 zd1211_al2230_table[][3] = {
RF_CHANNEL( 1) = { 0x03f790, 0x033331, 0x00000d, },
RF_CHANNEL( 2) = { 0x03f790, 0x0b3331, 0x00000d, },
@@ -176,7 +178,7 @@ static int zd1211_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit) {
+ if (IS_AL2230S(chip)) {
r = zd_iowrite16a_locked(chip, ioreqs_init_al2230s,
ARRAY_SIZE(ioreqs_init_al2230s));
if (r)
@@ -188,7 +190,7 @@ static int zd1211_al2230_init_hw(struct zd_rf *rf)
return r;
/* improve band edge for AL2230S */
- if (chip->al2230s_bit)
+ if (IS_AL2230S(chip))
r = zd_rfwrite_locked(chip, 0x000824, RF_RV_BITS);
else
r = zd_rfwrite_locked(chip, 0x0005a4, RF_RV_BITS);
@@ -314,7 +316,7 @@ static int zd1211b_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit) {
+ if (IS_AL2230S(chip)) {
r = zd_iowrite16a_locked(chip, ioreqs_init_al2230s,
ARRAY_SIZE(ioreqs_init_al2230s));
if (r)
@@ -328,7 +330,7 @@ static int zd1211b_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit)
+ if (IS_AL2230S(chip))
r = zd_rfwrite_locked(chip, 0x241000, RF_RV_BITS);
else
r = zd_rfwrite_locked(chip, 0x25a000, RF_RV_BITS);
@@ -422,7 +424,7 @@ int zd_rf_init_al2230(struct zd_rf *rf)
struct zd_chip *chip = zd_rf_to_chip(rf);
rf->switch_radio_off = al2230_switch_radio_off;
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
rf->init_hw = zd1211b_al2230_init_hw;
rf->set_channel = zd1211b_al2230_set_channel;
rf->switch_radio_on = zd1211b_al2230_switch_radio_on;
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
index f4e8b6a..73d0bb2 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
@@ -473,7 +473,7 @@ int zd_rf_init_al7230b(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
rf->init_hw = zd1211b_al7230b_init_hw;
rf->switch_radio_on = zd1211b_al7230b_switch_radio_on;
rf->set_channel = zd1211b_al7230b_set_channel;
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c b/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
index 2d736bd..cc70d40 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
@@ -265,7 +265,7 @@ int zd_rf_init_rf2959(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
dev_err(zd_chip_dev(chip),
"RF2959 is currently not supported for ZD1211B"
" devices\n");
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c b/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
index 414e40d..857dcf3 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
@@ -486,7 +486,7 @@ static int uw2453_switch_radio_on(struct zd_rf *rf)
if (r)
return r;
- if (chip->is_zd1211b)
+ if (zd_chip_is_zd1211b(chip))
ioreqs[1].value = 0x7f;
return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 740a219..a1a5474 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -71,6 +71,7 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0586, 0x3412), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
@@ -195,26 +196,27 @@ static u16 get_word(const void *data, u16 offset)
return le16_to_cpu(p[offset]);
}
-static char *get_fw_name(char *buffer, size_t size, u8 device_type,
+static char *get_fw_name(struct zd_usb *usb, char *buffer, size_t size,
const char* postfix)
{
scnprintf(buffer, size, "%s%s",
- device_type == DEVICE_ZD1211B ?
+ usb->is_zd1211b ?
FW_ZD1211B_PREFIX : FW_ZD1211_PREFIX,
postfix);
return buffer;
}
-static int handle_version_mismatch(struct usb_device *udev, u8 device_type,
+static int handle_version_mismatch(struct zd_usb *usb,
const struct firmware *ub_fw)
{
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
const struct firmware *ur_fw = NULL;
int offset;
int r = 0;
char fw_name[128];
r = request_fw_file(&ur_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "ur"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "ur"),
&udev->dev);
if (r)
goto error;
@@ -237,11 +239,12 @@ error:
return r;
}
-static int upload_firmware(struct usb_device *udev, u8 device_type)
+static int upload_firmware(struct zd_usb *usb)
{
int r;
u16 fw_bcdDevice;
u16 bcdDevice;
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
const struct firmware *ub_fw = NULL;
const struct firmware *uph_fw = NULL;
char fw_name[128];
@@ -249,7 +252,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
bcdDevice = get_bcdDevice(udev);
r = request_fw_file(&ub_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "ub"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "ub"),
&udev->dev);
if (r)
goto error;
@@ -264,7 +267,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
dev_warn(&udev->dev, "device has old bootcode, please "
"report success or failure\n");
- r = handle_version_mismatch(udev, device_type, ub_fw);
+ r = handle_version_mismatch(usb, ub_fw);
if (r)
goto error;
} else {
@@ -275,7 +278,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
r = request_fw_file(&uph_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "uphr"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "uphr"),
&udev->dev);
if (r)
goto error;
@@ -294,6 +297,30 @@ error:
return r;
}
+/* Read data from device address space using "firmware interface" which does
+ * not require firmware to be loaded. */
+int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len)
+{
+ int r;
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
+
+ r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
+ USB_REQ_FIRMWARE_READ_DATA, USB_DIR_IN | 0x40, addr, 0,
+ data, len, 5000);
+ if (r < 0) {
+ dev_err(&udev->dev,
+ "read over firmware interface failed: %d\n", r);
+ return r;
+ } else if (r != len) {
+ dev_err(&udev->dev,
+ "incomplete read over firmware interface: %d/%d\n",
+ r, len);
+ return -EIO;
+ }
+
+ return 0;
+}
+
#define urb_dev(urb) (&(urb)->dev->dev)
static inline void handle_regs_int(struct urb *urb)
@@ -920,9 +947,42 @@ static int eject_installer(struct usb_interface *intf)
return 0;
}
+int zd_usb_init_hw(struct zd_usb *usb)
+{
+ int r;
+ struct zd_mac *mac = zd_usb_to_mac(usb);
+
+ dev_dbg_f(zd_usb_dev(usb), "\n");
+
+ r = upload_firmware(usb);
+ if (r) {
+ dev_err(zd_usb_dev(usb),
+ "couldn't load firmware. Error number %d\n", r);
+ return r;
+ }
+
+ r = usb_reset_configuration(zd_usb_to_usbdev(usb));
+ if (r) {
+ dev_dbg_f(zd_usb_dev(usb),
+ "couldn't reset configuration. Error number %d\n", r);
+ return r;
+ }
+
+ r = zd_mac_init_hw(mac);
+ if (r) {
+ dev_dbg_f(zd_usb_dev(usb),
+ "couldn't initialize mac. Error number %d\n", r);
+ return r;
+ }
+
+ usb->initialized = 1;
+ return 0;
+}
+
static int probe(struct usb_interface *intf, const struct usb_device_id *id)
{
int r;
+ struct zd_usb *usb;
struct usb_device *udev = interface_to_usbdev(intf);
struct net_device *netdev = NULL;
@@ -950,26 +1010,10 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
goto error;
}
- r = upload_firmware(udev, id->driver_info);
- if (r) {
- dev_err(&intf->dev,
- "couldn't load firmware. Error number %d\n", r);
- goto error;
- }
+ usb = &zd_netdev_mac(netdev)->chip.usb;
+ usb->is_zd1211b = (id->driver_info == DEVICE_ZD1211B) != 0;
- r = usb_reset_configuration(udev);
- if (r) {
- dev_dbg_f(&intf->dev,
- "couldn't reset configuration. Error number %d\n", r);
- goto error;
- }
-
- /* At this point the interrupt endpoint is not generally enabled. We
- * save the USB bandwidth until the network device is opened. But
- * notify that the initialization of the MAC will require the
- * interrupts to be temporary enabled.
- */
- r = zd_mac_init_hw(zd_netdev_mac(netdev), id->driver_info);
+ r = zd_mac_preinit_hw(zd_netdev_mac(netdev));
if (r) {
dev_dbg_f(&intf->dev,
"couldn't initialize mac. Error number %d\n", r);
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.h b/drivers/net/wireless/zd1211rw/zd_usb.h
index 506ea6a..961a7a1 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.h
+++ b/drivers/net/wireless/zd1211rw/zd_usb.h
@@ -188,6 +188,7 @@ struct zd_usb {
struct zd_usb_rx rx;
struct zd_usb_tx tx;
struct usb_interface *intf;
+ u8 is_zd1211b:1, initialized:1;
};
#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,
int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits);
+int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len);
+
extern struct workqueue_struct *zd_workqueue;
#endif /* _ZD_USB_H */
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c
index cc8110b..afb6c66 100644
--- a/net/ieee80211/softmac/ieee80211softmac_assoc.c
+++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c
@@ -271,8 +271,11 @@ ieee80211softmac_assoc_work(struct work_struct *work)
*/
dprintk(KERN_INFO PFX "Associate: Scanning for networks first.\n");
ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL);
- if (ieee80211softmac_start_scan(mac))
+ if (ieee80211softmac_start_scan(mac)) {
dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n");
+ mac->associnfo.associating = 0;
+ mac->associnfo.associated = 0;
+ }
goto out;
} else {
mac->associnfo.associating = 0;
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 42+ messages in thread
end of thread, other threads:[~2008-01-08 22:50 UTC | newest]
Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-04 13:59 Please pull 'upstream-jgarzik' branch of wireless-2.6 John W. Linville
2007-12-04 13:59 ` John W. Linville
2007-12-04 20:13 ` Jeff Garzik
-- strict thread matches above, loose matches on Subject: below --
2008-01-08 22:23 John W. Linville
2008-01-08 22:23 ` John W. Linville
2007-12-20 15:54 John W. Linville
2007-12-20 15:54 ` John W. Linville
2007-12-16 4:34 John W. Linville
2007-12-17 23:24 ` Jeff Garzik
2007-12-17 23:40 ` Jeff Garzik
2007-12-17 23:40 ` Jeff Garzik
2007-12-18 1:24 ` Zhu Yi
2007-12-18 1:24 ` Zhu Yi
2007-11-27 14:47 John W. Linville
2007-11-27 16:08 ` Holger Schurig
2007-11-27 16:12 ` Dan Williams
2007-11-28 7:25 ` Holger Schurig
2007-11-27 18:55 ` John W. Linville
2007-12-04 13:55 ` John W. Linville
2007-12-04 13:55 ` John W. Linville
2007-11-06 1:16 John W. Linville
2007-11-06 1:16 ` John W. Linville
2007-11-06 17:43 ` Jeff Garzik
2007-09-15 13:21 John W. Linville
2007-09-15 13:21 ` John W. Linville
2007-09-18 1:54 ` Zhu Yi
2007-08-28 23:17 John W. Linville
2007-08-31 13:44 ` Jeff Garzik
2007-08-31 13:44 ` Jeff Garzik
2007-08-15 0:36 John W. Linville
2007-08-15 0:36 ` John W. Linville
2007-08-25 6:40 ` Jeff Garzik
2007-08-25 6:40 ` Jeff Garzik
2007-08-06 20:14 Please pull 'fixes-jgarzik' " John W. Linville
2007-08-06 20:16 ` Please pull 'upstream-jgarzik' " John W. Linville
2007-08-06 20:16 ` John W. Linville
2007-08-07 22:21 ` Jeff Garzik
2007-07-18 2:19 John W. Linville
2007-07-18 22:31 ` Jeff Garzik
2007-07-18 22:31 ` Jeff Garzik
2007-07-10 18:57 John W. Linville
2007-07-16 21:59 ` Jeff Garzik
2007-07-16 21:59 ` Jeff Garzik
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.