All of lore.kernel.org
 help / color / mirror / Atom feed
* 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, &regctrl, 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),
 				&param);
 }
@@ -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.