netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Please pull 'libertas' branch of wireless-2.6
@ 2007-05-29 18:33 John W. Linville
       [not found] ` <20070529183347.GD3496-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  2007-06-12 21:05 ` John W. Linville
  0 siblings, 2 replies; 19+ messages in thread
From: John W. Linville @ 2007-05-29 18:33 UTC (permalink / raw)
  To: jeff; +Cc: linux-wireless, netdev, Dan Williams

[-- Attachment #1: Type: text/plain, Size: 6724 bytes --]

Lots of stuff here...probably best for 2.6.23...

The following changes since commit c420bc9f09a0926b708c3edb27eacba434a4f4ba:
  Linus Torvalds (1):
        Linux 2.6.22-rc3

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas

Chris Ball (1):
      libertas: wakeup both mesh and normal wakeup when getting out of scan

Dan Williams (25):
      libertas: call SET_NETDEV_DEV from common code
      libertas: replace 'macaddress' with 'bssid'
      libertas: correctly unregister mesh netdev on error
      libertas: don't tear down netdev in libertas_activate_card
      libertas: make scan result handling more flexible
      libertas: fix 'keep previous scan' behavior
      libertas: move channel changing into association framework
      libertas: make association paths consistent
      libertas: use MAC_FMT and MAC_ARG where appropriate
      libertas: use compare_ether_addr() rather than memcmp() where appropriate
      libertas: fix debug enter/leave prints for libertas_execute_next_command
      libertas: correctly balance locking in libertas_process_rx_command
      libertas: correct error report paths for wlan_fwt_list_ioctl
      libertas: fix deadlock SIOCGIWSCAN handler
      libertas: fix default adhoc channel
      libertas: honor specific channel requests during association
      libertas: send SIOCGIWSCAN event after partial scans too
      libertas: debug print spacing fixes in assoc.c
      libertas: add more verbose debugging to libertas_cmd_80211_authenticate
      libertas: Make WPA work through supplicant handshake
      libertas: sparse fixes
      libertas: tweak association debug output
      libertas: remove structure WLAN_802_11_SSID and libertas_escape_essid
      libertas: remove WPA_SUPPLICANT structure
      libertas: reduce SSID and BSSID mixed-case abuse

David Woodhouse (6):
      libertas: fix character set in README
      libertas: first pass at fixing up endianness issues
      libertas: More endianness fixes.
      libertas: more endianness fixes, in tx.c this time
      libertas: don't byte-swap firmware version number. It's a byte array.
      libertas: fix big-endian associate command.

Holger Schurig (23):
      libertas: rename wlan_association_worker
      libertas: a debug output was missing a newline
      libertas: fix removal of all debugfs files
      libertas: remove __FILE__ from debug output
      libertas: remove unused/superfluous definitions of DEV_NAME_LEN
      libertas: move vendor & product id's into if_usb.c
      libertas: make libertas_wlan_data_rates static
      libertas: exclude non-used code when PROC_DEBUG is not set
      libertas: make debug configurable
      libertas: tune debug code
      libertas: single out mesh code
      libertas: change debug output of libertas_interrupt()
      libertas: get rid of libertas_sbi_get_priv()
      libertas: fix SSID output
      libertas: changed some occurences of kmalloc() + memset(&a,0,sz) to kzalloc()
      libertas: move reset_device() code main.c to if_usb.c
      libertas: split wlan_add_card()
      libertas: indirect all hardware access via hw_XXXX functions
      libertas: move contents of fw.h to decl.h
      libertas: split module into two (libertas.ko and usb8xxx.ko)
      libertas: fix RESET logic at unload time
      libertas: let DRV_NAME be overridable
      libertas: remove unused variables in wlan_dev_t

Javier Cardona (2):
      libertas: fixed transmission flow control on the mesh interface
      libertas: added transmission failures to mesh statistics

Luis Carlos Cobo (4):
      libertas: fixed incorrect assigment of fcs errors to frag errors
      libertas: add URB debug info
      libertas: fixed kernel oops on module/card removal
      libertas: updated mesh commands for 5.220.9.p11

Luis Carlos Cobo Rus (6):
      libertas: version bump (321p0) and cmds update for new fw (5.220.10.p0)
      libertas: cleanup of fwt_list_route processing
      libertas: updated readme file
      libertas: make mac address configuration work with mesh interface too
      libertas: split wext for eth and msh
      libertas: support for mesh autostart on firmware 5.220.11

Marcelo Tosatti (5):
      libertas: scan two channels per scan command
      libertas: remove deprecated pm_register and associated code
      libertas: fix scanning from associate path
      libertas: fix error handling of card initialization
      libertas: fix oops on rmmod

 drivers/net/wireless/Kconfig               |   19 +-
 drivers/net/wireless/libertas/11d.c        |  152 ++--
 drivers/net/wireless/libertas/11d.h        |    6 +-
 drivers/net/wireless/libertas/Makefile     |    4 +-
 drivers/net/wireless/libertas/README       |   52 +-
 drivers/net/wireless/libertas/assoc.c      |  345 +++++---
 drivers/net/wireless/libertas/assoc.h      |    8 +-
 drivers/net/wireless/libertas/cmd.c        |  559 +++++------
 drivers/net/wireless/libertas/cmdresp.c    |  375 ++++----
 drivers/net/wireless/libertas/debugfs.c    |  432 ++++----
 drivers/net/wireless/libertas/decl.h       |   20 +-
 drivers/net/wireless/libertas/defs.h       |  101 ++-
 drivers/net/wireless/libertas/dev.h        |   98 +-
 drivers/net/wireless/libertas/ethtool.c    |   55 +-
 drivers/net/wireless/libertas/fw.c         |  111 +--
 drivers/net/wireless/libertas/fw.h         |   13 -
 drivers/net/wireless/libertas/host.h       |   13 +-
 drivers/net/wireless/libertas/hostcmd.h    |  392 ++++----
 drivers/net/wireless/libertas/if_bootcmd.c |    6 +-
 drivers/net/wireless/libertas/if_usb.c     |  448 +++++----
 drivers/net/wireless/libertas/if_usb.h     |   32 +-
 drivers/net/wireless/libertas/ioctl.c      |  286 ++++--
 drivers/net/wireless/libertas/join.c       |  464 ++++-----
 drivers/net/wireless/libertas/join.h       |   13 +-
 drivers/net/wireless/libertas/main.c       |  673 ++++++-------
 drivers/net/wireless/libertas/rx.c         |   63 +-
 drivers/net/wireless/libertas/sbi.h        |   40 -
 drivers/net/wireless/libertas/scan.c       | 1529 +++++++++++++---------------
 drivers/net/wireless/libertas/scan.h       |   81 +-
 drivers/net/wireless/libertas/thread.h     |    8 +-
 drivers/net/wireless/libertas/tx.c         |   74 +-
 drivers/net/wireless/libertas/types.h      |   63 +-
 drivers/net/wireless/libertas/wext.c       |  778 ++++++++-------
 drivers/net/wireless/libertas/wext.h       |   13 +-
 34 files changed, 3679 insertions(+), 3647 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/fw.h
 delete mode 100644 drivers/net/wireless/libertas/sbi.h

Omnibus patch attached as "libertas.patch.bz2" due to size concerns.
-- 
John W. Linville
linville@tuxdriver.com

[-- Attachment #2: libertas.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 76006 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6
       [not found] ` <20070529183347.GD3496-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-05-30 14:07   ` Jeff Garzik
  2007-05-30 15:28     ` Dan Williams
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Garzik @ 2007-05-30 14:07 UTC (permalink / raw)
  To: John W. Linville
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

John W. Linville wrote:
> Lots of stuff here...probably best for 2.6.23...

Is this best for Linux users... or just easy for developers?

Won't putting off all these fixes until 2.6.23 leave the driver released 
in 2.6.22 in shoddy shape?

libertas is upstream now, so we cannot pretend that the driver is 
completely independent from upstream release cycles and maintenance.

libertas fixes should go upstream immediately, since we are in a bugfix 
cycle, and since libertas (from upstream perspective) is about to make 
its big debut on the world stage.

	Jeff

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6
  2007-05-30 14:07   ` Jeff Garzik
@ 2007-05-30 15:28     ` Dan Williams
       [not found]       ` <1180538928.17163.10.camel-Hs+VJEcF3DojzQS9c19i8iZi+YwRKgec@public.gmane.org>
  0 siblings, 1 reply; 19+ messages in thread
From: Dan Williams @ 2007-05-30 15:28 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: John W. Linville, linux-wireless, netdev

On Wed, 2007-05-30 at 10:07 -0400, Jeff Garzik wrote:
> John W. Linville wrote:
> > Lots of stuff here...probably best for 2.6.23...
> 
> Is this best for Linux users... or just easy for developers?
> 
> Won't putting off all these fixes until 2.6.23 leave the driver released 
> in 2.6.22 in shoddy shape?

Not really; it more or less works there.  What's gone on since then is
general driver cleanup (Christoph's comments and more), splitting the
driver so that other bus types can use it (SDIO for example once
Pierre's SDIO patches get upstream), wireless extensions fixes, etc.

> libertas is upstream now, so we cannot pretend that the driver is 
> completely independent from upstream release cycles and maintenance.

True, but some of the stuff in here I didn't think would be suitable
during an -rc cycle, for example the driver splitting and the cleanups
that don't impact function at all, but are good to do nonetheless.

> libertas fixes should go upstream immediately, since we are in a bugfix 
> cycle, and since libertas (from upstream perspective) is about to make 
> its big debut on the world stage.

If you think all the bits from this should just go to 2.6.22, that's
fine with me.  But I don't feel comfortable making that call given what
I thought were the constraints on pushing changes through during an rc
cycle.  When the merge window was open, we backported critical bug fixes
and necessary merge-requirement cleanups to the code in linville's tree,
but avoided changes that didn't impact function.

Dan



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6
       [not found]       ` <1180538928.17163.10.camel-Hs+VJEcF3DojzQS9c19i8iZi+YwRKgec@public.gmane.org>
@ 2007-05-31 21:13         ` Dan Williams
  2007-05-31 21:16           ` John W. Linville
  0 siblings, 1 reply; 19+ messages in thread
From: Dan Williams @ 2007-05-31 21:13 UTC (permalink / raw)
  To: Jeff Garzik
  Cc: John W. Linville, linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA

On Wed, 2007-05-30 at 11:28 -0400, Dan Williams wrote:
> On Wed, 2007-05-30 at 10:07 -0400, Jeff Garzik wrote:
> > John W. Linville wrote:
> > > Lots of stuff here...probably best for 2.6.23...
> > 
> > Is this best for Linux users... or just easy for developers?
> > 
> > Won't putting off all these fixes until 2.6.23 leave the driver released 
> > in 2.6.22 in shoddy shape?
> 
> Not really; it more or less works there.  What's gone on since then is
> general driver cleanup (Christoph's comments and more), splitting the
> driver so that other bus types can use it (SDIO for example once
> Pierre's SDIO patches get upstream), wireless extensions fixes, etc.
> 
> > libertas is upstream now, so we cannot pretend that the driver is 
> > completely independent from upstream release cycles and maintenance.
> 
> True, but some of the stuff in here I didn't think would be suitable
> during an -rc cycle, for example the driver splitting and the cleanups
> that don't impact function at all, but are good to do nonetheless.
> 
> > libertas fixes should go upstream immediately, since we are in a bugfix 
> > cycle, and since libertas (from upstream perspective) is about to make 
> > its big debut on the world stage.
> 
> If you think all the bits from this should just go to 2.6.22, that's
> fine with me.  But I don't feel comfortable making that call given what
> I thought were the constraints on pushing changes through during an rc
> cycle.  When the merge window was open, we backported critical bug fixes
> and necessary merge-requirement cleanups to the code in linville's tree,
> but avoided changes that didn't impact function.

Any response on these points yet?  I've got yet more cleanups and a few
other things queued in libertas-2.6 but I'd like to see where this
discussion goes before sending a pull request for the new bits.

Dan

> Dan
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6
  2007-05-31 21:13         ` Dan Williams
@ 2007-05-31 21:16           ` John W. Linville
       [not found]             ` <20070531211605.GA30161-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  0 siblings, 1 reply; 19+ messages in thread
From: John W. Linville @ 2007-05-31 21:16 UTC (permalink / raw)
  To: Dan Williams; +Cc: Jeff Garzik, linux-wireless, netdev

On Thu, May 31, 2007 at 05:13:17PM -0400, Dan Williams wrote:
> On Wed, 2007-05-30 at 11:28 -0400, Dan Williams wrote:
> > On Wed, 2007-05-30 at 10:07 -0400, Jeff Garzik wrote:
> > > John W. Linville wrote:
> > > > Lots of stuff here...probably best for 2.6.23...
> > > 
> > > Is this best for Linux users... or just easy for developers?
> > > 
> > > Won't putting off all these fixes until 2.6.23 leave the driver released 
> > > in 2.6.22 in shoddy shape?

> > If you think all the bits from this should just go to 2.6.22, that's
> > fine with me.  But I don't feel comfortable making that call given what
> > I thought were the constraints on pushing changes through during an rc
> > cycle.  When the merge window was open, we backported critical bug fixes
> > and necessary merge-requirement cleanups to the code in linville's tree,
> > but avoided changes that didn't impact function.
> 
> Any response on these points yet?  I've got yet more cleanups and a few
> other things queued in libertas-2.6 but I'd like to see where this
> discussion goes before sending a pull request for the new bits.

As for me, I have no great problem w/ the whole batch going to 2.6.22.
The driver is still new and most acknowledge it still has significant
defficiencies.  Most (but probably not all) of the patches would seem
to fit some definition of bug fix anyway.  I was just trying to err
on the side of caution and follow the normal "bugfixes in -rc" process.

Jeff, the branch in question is based off a vanilla 2.6.22-rc3.
So it is safe to pull (from a "won't mess-up my tree" perspective)
if you are so inclined.

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6
       [not found]             ` <20070531211605.GA30161-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-06-01 21:48               ` Dan Williams
  0 siblings, 0 replies; 19+ messages in thread
From: Dan Williams @ 2007-06-01 21:48 UTC (permalink / raw)
  To: John W. Linville
  Cc: Jeff Garzik, linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA

On Thu, 2007-05-31 at 17:16 -0400, John W. Linville wrote:
> On Thu, May 31, 2007 at 05:13:17PM -0400, Dan Williams wrote:
> > On Wed, 2007-05-30 at 11:28 -0400, Dan Williams wrote:
> > > On Wed, 2007-05-30 at 10:07 -0400, Jeff Garzik wrote:
> > > > John W. Linville wrote:
> > > > > Lots of stuff here...probably best for 2.6.23...
> > > > 
> > > > Is this best for Linux users... or just easy for developers?
> > > > 
> > > > Won't putting off all these fixes until 2.6.23 leave the driver released 
> > > > in 2.6.22 in shoddy shape?
> 
> > > If you think all the bits from this should just go to 2.6.22, that's
> > > fine with me.  But I don't feel comfortable making that call given what
> > > I thought were the constraints on pushing changes through during an rc
> > > cycle.  When the merge window was open, we backported critical bug fixes
> > > and necessary merge-requirement cleanups to the code in linville's tree,
> > > but avoided changes that didn't impact function.
> > 
> > Any response on these points yet?  I've got yet more cleanups and a few
> > other things queued in libertas-2.6 but I'd like to see where this
> > discussion goes before sending a pull request for the new bits.
> 
> As for me, I have no great problem w/ the whole batch going to 2.6.22.
> The driver is still new and most acknowledge it still has significant
> defficiencies.  Most (but probably not all) of the patches would seem
> to fit some definition of bug fix anyway.  I was just trying to err
> on the side of caution and follow the normal "bugfixes in -rc" process.
> 
> Jeff, the branch in question is based off a vanilla 2.6.22-rc3.
> So it is safe to pull (from a "won't mess-up my tree" perspective)
> if you are so inclined.

Ok; if Jeff is so inclined, we'll push further libertas
cleanups/bugfixes/etc to you, and then you upstream to Jeff, targetted
for inclusion in 2.6.22.

Dan

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Please pull 'libertas' branch of wireless-2.6
  2007-05-29 18:33 Please pull 'libertas' branch of wireless-2.6 John W. Linville
       [not found] ` <20070529183347.GD3496-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-06-12 21:05 ` John W. Linville
  2007-06-12 21:06   ` Please pull 'libertas-fixes' " John W. Linville
       [not found]   ` <20070612210544.GF310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  1 sibling, 2 replies; 19+ messages in thread
From: John W. Linville @ 2007-06-12 21:05 UTC (permalink / raw)
  To: jeff; +Cc: linux-wireless, netdev, Dan Williams

[-- Attachment #1: Type: text/plain, Size: 6911 bytes --]

Jeff,

This is the same as the previous pull request, only rebased on
2.6.22-rc4.  Since this is a big pull already, I didn't want to
complicate it with the additional patches identified by the libertas
team as 2.6.22-worthy.

John

---

The following changes since commit 5ecd3100e695228ac5e0ce0e325e252c0f11806f:
  Linus Torvalds (1):
        Linux 2.6.22-rc4

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas

Chris Ball (1):
      libertas: wakeup both mesh and normal wakeup when getting out of scan

Dan Williams (25):
      libertas: call SET_NETDEV_DEV from common code
      libertas: replace 'macaddress' with 'bssid'
      libertas: correctly unregister mesh netdev on error
      libertas: don't tear down netdev in libertas_activate_card
      libertas: make scan result handling more flexible
      libertas: fix 'keep previous scan' behavior
      libertas: move channel changing into association framework
      libertas: make association paths consistent
      libertas: use MAC_FMT and MAC_ARG where appropriate
      libertas: use compare_ether_addr() rather than memcmp() where appropriate
      libertas: fix debug enter/leave prints for libertas_execute_next_command
      libertas: correctly balance locking in libertas_process_rx_command
      libertas: correct error report paths for wlan_fwt_list_ioctl
      libertas: fix deadlock SIOCGIWSCAN handler
      libertas: fix default adhoc channel
      libertas: honor specific channel requests during association
      libertas: send SIOCGIWSCAN event after partial scans too
      libertas: debug print spacing fixes in assoc.c
      libertas: add more verbose debugging to libertas_cmd_80211_authenticate
      libertas: Make WPA work through supplicant handshake
      libertas: sparse fixes
      libertas: tweak association debug output
      libertas: remove structure WLAN_802_11_SSID and libertas_escape_essid
      libertas: remove WPA_SUPPLICANT structure
      libertas: reduce SSID and BSSID mixed-case abuse

David Woodhouse (6):
      libertas: fix character set in README
      libertas: first pass at fixing up endianness issues
      libertas: More endianness fixes.
      libertas: more endianness fixes, in tx.c this time
      libertas: don't byte-swap firmware version number. It's a byte array.
      libertas: fix big-endian associate command.

Holger Schurig (23):
      libertas: rename wlan_association_worker
      libertas: a debug output was missing a newline
      libertas: fix removal of all debugfs files
      libertas: remove __FILE__ from debug output
      libertas: remove unused/superfluous definitions of DEV_NAME_LEN
      libertas: move vendor & product id's into if_usb.c
      libertas: make libertas_wlan_data_rates static
      libertas: exclude non-used code when PROC_DEBUG is not set
      libertas: make debug configurable
      libertas: tune debug code
      libertas: single out mesh code
      libertas: change debug output of libertas_interrupt()
      libertas: get rid of libertas_sbi_get_priv()
      libertas: fix SSID output
      libertas: changed some occurences of kmalloc() + memset(&a,0,sz) to kzalloc()
      libertas: move reset_device() code main.c to if_usb.c
      libertas: split wlan_add_card()
      libertas: indirect all hardware access via hw_XXXX functions
      libertas: move contents of fw.h to decl.h
      libertas: split module into two (libertas.ko and usb8xxx.ko)
      libertas: fix RESET logic at unload time
      libertas: let DRV_NAME be overridable
      libertas: remove unused variables in wlan_dev_t

Javier Cardona (2):
      libertas: fixed transmission flow control on the mesh interface
      libertas: added transmission failures to mesh statistics

Luis Carlos Cobo (4):
      libertas: fixed incorrect assigment of fcs errors to frag errors
      libertas: add URB debug info
      libertas: fixed kernel oops on module/card removal
      libertas: updated mesh commands for 5.220.9.p11

Luis Carlos Cobo Rus (6):
      libertas: version bump (321p0) and cmds update for new fw (5.220.10.p0)
      libertas: cleanup of fwt_list_route processing
      libertas: updated readme file
      libertas: make mac address configuration work with mesh interface too
      libertas: split wext for eth and msh
      libertas: support for mesh autostart on firmware 5.220.11

Marcelo Tosatti (5):
      libertas: scan two channels per scan command
      libertas: remove deprecated pm_register and associated code
      libertas: fix scanning from associate path
      libertas: fix error handling of card initialization
      libertas: fix oops on rmmod

 drivers/net/wireless/Kconfig               |   19 +-
 drivers/net/wireless/libertas/11d.c        |  152 ++--
 drivers/net/wireless/libertas/11d.h        |    6 +-
 drivers/net/wireless/libertas/Makefile     |    4 +-
 drivers/net/wireless/libertas/README       |   52 +-
 drivers/net/wireless/libertas/assoc.c      |  345 +++++---
 drivers/net/wireless/libertas/assoc.h      |    8 +-
 drivers/net/wireless/libertas/cmd.c        |  559 +++++------
 drivers/net/wireless/libertas/cmdresp.c    |  375 ++++----
 drivers/net/wireless/libertas/debugfs.c    |  432 ++++----
 drivers/net/wireless/libertas/decl.h       |   20 +-
 drivers/net/wireless/libertas/defs.h       |  101 ++-
 drivers/net/wireless/libertas/dev.h        |   98 +-
 drivers/net/wireless/libertas/ethtool.c    |   55 +-
 drivers/net/wireless/libertas/fw.c         |  111 +--
 drivers/net/wireless/libertas/fw.h         |   13 -
 drivers/net/wireless/libertas/host.h       |   13 +-
 drivers/net/wireless/libertas/hostcmd.h    |  392 ++++----
 drivers/net/wireless/libertas/if_bootcmd.c |    6 +-
 drivers/net/wireless/libertas/if_usb.c     |  448 +++++----
 drivers/net/wireless/libertas/if_usb.h     |   32 +-
 drivers/net/wireless/libertas/ioctl.c      |  286 ++++--
 drivers/net/wireless/libertas/join.c       |  464 ++++-----
 drivers/net/wireless/libertas/join.h       |   13 +-
 drivers/net/wireless/libertas/main.c       |  673 ++++++-------
 drivers/net/wireless/libertas/rx.c         |   63 +-
 drivers/net/wireless/libertas/sbi.h        |   40 -
 drivers/net/wireless/libertas/scan.c       | 1529 +++++++++++++---------------
 drivers/net/wireless/libertas/scan.h       |   81 +-
 drivers/net/wireless/libertas/thread.h     |    8 +-
 drivers/net/wireless/libertas/tx.c         |   74 +-
 drivers/net/wireless/libertas/types.h      |   63 +-
 drivers/net/wireless/libertas/wext.c       |  778 ++++++++-------
 drivers/net/wireless/libertas/wext.h       |   13 +-
 34 files changed, 3679 insertions(+), 3647 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/fw.h
 delete mode 100644 drivers/net/wireless/libertas/sbi.h

Omnibus patch attached as "libertas.diff.bz2" due to size concerns.
-- 
John W. Linville
linville@tuxdriver.com

[-- Attachment #2: libertas.diff.bz2 --]
[-- Type: application/x-bzip2, Size: 75879 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Please pull 'libertas-fixes' branch of wireless-2.6
  2007-06-12 21:05 ` John W. Linville
@ 2007-06-12 21:06   ` John W. Linville
       [not found]     ` <20070612210658.GG310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
       [not found]   ` <20070612210544.GF310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  1 sibling, 1 reply; 19+ messages in thread
From: John W. Linville @ 2007-06-12 21:06 UTC (permalink / raw)
  To: jeff; +Cc: linux-wireless, netdev, Dan Williams

Fixes identified by the libertas team as important for 2.6.22...

---

The following changes since commit 717c9339202a42ae7bec7d3c4b84deecdcae9f81:
  Dan Williams (1):
        libertas: reduce SSID and BSSID mixed-case abuse

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes

Dan Williams (1):
      libertas: actually send mesh frames to mesh netdev

Luis Carlos (1):
      libertas: convert libertas_mpp into anycast_mask

Luis Carlos Cobo Rus (2):
      libertas: pull current channel from firmware on mesh autostart
      libertas: deauthenticate from AP in channel switch

 drivers/net/wireless/libertas/assoc.c   |   13 +++++++++++++
 drivers/net/wireless/libertas/assoc.h   |    2 ++
 drivers/net/wireless/libertas/cmdresp.c |    1 +
 drivers/net/wireless/libertas/dev.h     |    1 +
 drivers/net/wireless/libertas/host.h    |    4 ++--
 drivers/net/wireless/libertas/main.c    |   27 ++++++++++++++-------------
 drivers/net/wireless/libertas/rx.c      |    5 ++---
 7 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
index ee82413..f67efa0 100644
--- a/drivers/net/wireless/libertas/assoc.c
+++ b/drivers/net/wireless/libertas/assoc.c
@@ -200,6 +200,14 @@ static int update_channel(wlan_private * priv)
 				    cmd_option_waitforrsp, 0, NULL);
 }
 
+void libertas_sync_channel(struct work_struct *work)
+{
+	wlan_private *priv = container_of(work, wlan_private, sync_channel);
+
+	if (update_channel(priv) != 0)
+		lbs_pr_info("Channel synchronization failed.");
+}
+
 static int assoc_helper_channel(wlan_private *priv,
                                 struct assoc_request * assoc_req)
 {
@@ -403,6 +411,11 @@ static int should_deauth_infrastructure(wlan_adapter *adapter,
 		return 1;
 	}
 
+	if (test_bit(ASSOC_FLAG_CHANNEL, &assoc_req->flags)) {
+		lbs_deb_assoc("Deauthenticating due to channel switch.\n");
+		return 1;
+	}
+
 	/* FIXME: deal with 'auto' mode somehow */
 	if (test_bit(ASSOC_FLAG_MODE, &assoc_req->flags)) {
 		if (assoc_req->mode != IW_MODE_INFRA)
diff --git a/drivers/net/wireless/libertas/assoc.h b/drivers/net/wireless/libertas/assoc.h
index b5eddf8..5e9c31f 100644
--- a/drivers/net/wireless/libertas/assoc.h
+++ b/drivers/net/wireless/libertas/assoc.h
@@ -9,6 +9,8 @@ void libertas_association_worker(struct work_struct *work);
 
 struct assoc_request * wlan_get_association_request(wlan_adapter *adapter);
 
+void libertas_sync_channel(struct work_struct *work);
+
 #define ASSOC_DELAY (HZ / 2)
 static inline void wlan_postpone_association_work(wlan_private *priv)
 {
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
index ebedd63..0c3b9a5 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -987,6 +987,7 @@ int libertas_process_event(wlan_private * priv)
 			netif_carrier_on(priv->mesh_dev) ;
 		}
 		adapter->mode = IW_MODE_ADHOC ;
+		schedule_work(&priv->sync_channel);
 		break;
 
 	default:
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
index d6c340a..785192b 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -150,6 +150,7 @@ struct _wlan_private {
 
 	struct delayed_work assoc_work;
 	struct workqueue_struct *assoc_thread;
+	struct work_struct sync_channel;
 
 	/** Hardware access */
 	int (*hw_register_dev) (wlan_private * priv);
diff --git a/drivers/net/wireless/libertas/host.h b/drivers/net/wireless/libertas/host.h
index cedf1db..7509cc1 100644
--- a/drivers/net/wireless/libertas/host.h
+++ b/drivers/net/wireless/libertas/host.h
@@ -310,8 +310,8 @@ enum cmd_mesh_access_opts {
 	cmd_act_mesh_get_ttl = 1,
 	cmd_act_mesh_set_ttl,
 	cmd_act_mesh_get_stats,
-	cmd_act_mesh_get_mpp,
-	cmd_act_mesh_set_mpp,
+	cmd_act_mesh_get_anycast,
+	cmd_act_mesh_set_anycast,
 };
 
 /** Card Event definition */
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index ec9be0c..623ab4b 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -178,45 +178,45 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
  */
 
 /**
- * @brief Get function for sysfs attribute libertas_mpp
+ * @brief Get function for sysfs attribute anycast_mask
  */
-static ssize_t libertas_mpp_get(struct device * dev,
+static ssize_t libertas_anycast_get(struct device * dev,
 		struct device_attribute *attr, char * buf) {
 	struct cmd_ds_mesh_access mesh_access;
 
 	memset(&mesh_access, 0, sizeof(mesh_access));
 	libertas_prepare_and_send_command(to_net_dev(dev)->priv,
 			cmd_mesh_access,
-			cmd_act_mesh_get_mpp,
+			cmd_act_mesh_get_anycast,
 			cmd_option_waitforrsp, 0, (void *)&mesh_access);
 
-	return snprintf(buf, 3, "%d\n", le32_to_cpu(mesh_access.data[0]));
+	return snprintf(buf, 12, "0x%X\n", le32_to_cpu(mesh_access.data[0]));
 }
 
 /**
- * @brief Set function for sysfs attribute libertas_mpp
+ * @brief Set function for sysfs attribute anycast_mask
  */
-static ssize_t libertas_mpp_set(struct device * dev,
+static ssize_t libertas_anycast_set(struct device * dev,
 		struct device_attribute *attr, const char * buf, size_t count) {
 	struct cmd_ds_mesh_access mesh_access;
 	uint32_t datum;
 
 	memset(&mesh_access, 0, sizeof(mesh_access));
-	sscanf(buf, "%d", &datum);
+	sscanf(buf, "%x", &datum);
 	mesh_access.data[0] = cpu_to_le32(datum);
 
 	libertas_prepare_and_send_command((to_net_dev(dev))->priv,
 			cmd_mesh_access,
-			cmd_act_mesh_set_mpp,
+			cmd_act_mesh_set_anycast,
 			cmd_option_waitforrsp, 0, (void *)&mesh_access);
 	return strlen(buf);
 }
 
 /**
- * libertas_mpp attribute to be exported per mshX interface
- * through sysfs (/sys/class/net/mshX/libertas-mpp)
+ * anycast_mask attribute to be exported per mshX interface
+ * through sysfs (/sys/class/net/mshX/anycast_mask)
  */
-static DEVICE_ATTR(libertas_mpp, 0644, libertas_mpp_get, libertas_mpp_set );
+static DEVICE_ATTR(anycast_mask, 0644, libertas_anycast_get, libertas_anycast_set);
 
 /**
  *  @brief Check if the device can be open and wait if necessary.
@@ -847,6 +847,7 @@ int libertas_activate_card(wlan_private *priv, char *fw_name)
 	priv->assoc_thread =
 		create_singlethread_workqueue("libertas_assoc");
 	INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker);
+	INIT_WORK(&priv->sync_channel, libertas_sync_channel);
 
 	/*
 	 * Register the device. Fillup the private data structure with
@@ -938,7 +939,7 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
 		goto err_free;
 	}
 
-	ret = device_create_file(&(mesh_dev->dev), &dev_attr_libertas_mpp);
+	ret = device_create_file(&(mesh_dev->dev), &dev_attr_anycast_mask);
 	if (ret)
 		goto err_unregister;
 
@@ -1048,7 +1049,7 @@ void libertas_remove_mesh(wlan_private *priv)
 	netif_stop_queue(mesh_dev);
 	netif_carrier_off(priv->mesh_dev);
 
-	device_remove_file(&(mesh_dev->dev), &dev_attr_libertas_mpp);
+	device_remove_file(&(mesh_dev->dev), &dev_attr_anycast_mask);
 	unregister_netdev(mesh_dev);
 
 	priv->mesh_dev = NULL ;
diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c
index 5d70a76..88d9d2d 100644
--- a/drivers/net/wireless/libertas/rx.c
+++ b/drivers/net/wireless/libertas/rx.c
@@ -141,10 +141,9 @@ void libertas_upload_rx_packet(wlan_private * priv, struct sk_buff *skb)
 	lbs_deb_rx("skb->data %p\n", skb->data);
 
 	if (priv->mesh_dev && IS_MESH_FRAME(skb))
-		skb->dev = priv->mesh_dev;
+		skb->protocol = eth_type_trans(skb, priv->mesh_dev);
 	else
-		skb->dev = priv->dev;
-	skb->protocol = eth_type_trans(skb, priv->dev);
+		skb->protocol = eth_type_trans(skb, priv->dev);
 	skb->ip_summed = CHECKSUM_UNNECESSARY;
 
 	netif_rx(skb);
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Please pull 'libertas-upstream' branch of wireless-2.6
       [not found]     ` <20070612210658.GG310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-06-12 21:08       ` John W. Linville
       [not found]         ` <20070612210814.GH310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  2007-06-12 22:54       ` Please pull 'libertas-fixes' " Jeff Garzik
  2007-06-13  2:28       ` Jeff Garzik
  2 siblings, 1 reply; 19+ messages in thread
From: John W. Linville @ 2007-06-12 21:08 UTC (permalink / raw)
  To: jeff-o2qLIJkoznsdnm+yROfE0A
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

[-- Attachment #1: Type: text/plain, Size: 3959 bytes --]

Patches identified by the libertas team as suitable for 2.6.23...

---

The following changes since commit 82fde74b94f11eee1e9c30e43fb162f80a5e63c0:
  Luis Carlos (1):
        libertas: convert libertas_mpp into anycast_mask

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-upstream

Dan Williams (23):
      libertas: actually remove version.h
      libertas: kill wlan_scan_process_results
      libertas: kill ieeetypes_capinfo bitfield, use ieee80211.h types
      libertas: rename WLAN_802_11_KEY to enc_key and clean up usage
      libertas: clean up indentation in libertas_association_worker
      libertas: clean up 802.11 IE post-scan handling
      libertas: rename private ioctl constants and clean up ioctl handling
      libertas: remove if_bootcmd.c
      libertas: fix mixed-case abuse in cmd_ds_802_11_scan
      libertas: fix mixed-case abuse in cmd_ds_802_11_ad_hoc_result
      libertas: fix mixed-case abuse in cmd_ds_802_11_ad_hoc_start
      libertas: re-uppercase command defines and other constants
      libertas: fix debug build breakage due to field rename
      libertas: remove thread.h and make kthread usage clearer
      libertas: new mesh control knobs
      libertas: bump version to 322.p1
      libertas: wlan_ -> libertas_ rename in ioctl.c
      libertas: fix more mixed-case abuse
      libertas: move generic firmware reset command to common code
      libertas: wlan_ -> libertas_ function prefix renames for main.c
      libertas: simplify and clean up data rate handling
      libertas: fix MESH_[GET/SET]_BCASTR ioctl, clean up ioctl subcmd handling
      libertas: style fixes

Luis Carlos Cobo (1):
      libertas: specific mesh scan for mshX interface

 drivers/net/wireless/libertas/11d.c        |   22 +-
 drivers/net/wireless/libertas/Makefile     |    1 -
 drivers/net/wireless/libertas/README       |   65 ++++
 drivers/net/wireless/libertas/assoc.c      |   85 +++---
 drivers/net/wireless/libertas/cmd.c        |  338 ++++++++++----------
 drivers/net/wireless/libertas/cmdresp.c    |  172 +++++-----
 drivers/net/wireless/libertas/debugfs.c    |  130 ++++----
 drivers/net/wireless/libertas/decl.h       |    6 +-
 drivers/net/wireless/libertas/defs.h       |   66 ++---
 drivers/net/wireless/libertas/dev.h        |   34 +--
 drivers/net/wireless/libertas/ethtool.c    |    8 +-
 drivers/net/wireless/libertas/fw.c         |   43 ++--
 drivers/net/wireless/libertas/host.h       |  438 +++++++++++++-------------
 drivers/net/wireless/libertas/hostcmd.h    |   69 ++---
 drivers/net/wireless/libertas/if_bootcmd.c |   40 ---
 drivers/net/wireless/libertas/if_usb.c     |   58 ++--
 drivers/net/wireless/libertas/if_usb.h     |    1 -
 drivers/net/wireless/libertas/ioctl.c      |  478 +++++++++++++++-------------
 drivers/net/wireless/libertas/join.c       |  368 +++++++++++-----------
 drivers/net/wireless/libertas/join.h       |    2 +
 drivers/net/wireless/libertas/main.c       |  237 +++++++++------
 drivers/net/wireless/libertas/rx.c         |    9 +-
 drivers/net/wireless/libertas/scan.c       |  355 ++++++++-------------
 drivers/net/wireless/libertas/scan.h       |   10 +-
 drivers/net/wireless/libertas/thread.h     |   52 ---
 drivers/net/wireless/libertas/tx.c         |    2 +-
 drivers/net/wireless/libertas/types.h      |   65 +----
 drivers/net/wireless/libertas/version.h    |    1 -
 drivers/net/wireless/libertas/wext.c       |  428 ++++++++------------------
 drivers/net/wireless/libertas/wext.h       |   68 +++--
 30 files changed, 1684 insertions(+), 1967 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/if_bootcmd.c
 delete mode 100644 drivers/net/wireless/libertas/thread.h
 delete mode 100644 drivers/net/wireless/libertas/version.h

Omnibus patch attached as "libertas-upstream.diff.bz2" due to size concerns.
-- 
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org

[-- Attachment #2: libertas-upstream.diff.bz2 --]
[-- Type: application/x-bzip2, Size: 40341 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Please pull 'libertas' branch of wireless-2.6 (resent w/o attachment)
       [not found]   ` <20070612210544.GF310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-06-12 21:26     ` John W. Linville
  2007-06-13  2:28       ` Jeff Garzik
  0 siblings, 1 reply; 19+ messages in thread
From: John W. Linville @ 2007-06-12 21:26 UTC (permalink / raw)
  To: jeff-o2qLIJkoznsdnm+yROfE0A
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

Resending w/o the attached patch, in case it was too big...yikes!

Individual patches are available here:

	http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/libertas

John

---

Jeff,

This is the same as the previous pull request, only rebased on
2.6.22-rc4.  Since this is a big pull already, I didn't want to
complicate it with the additional patches identified by the libertas
team as 2.6.22-worthy.

John

---

The following changes since commit 5ecd3100e695228ac5e0ce0e325e252c0f11806f:
  Linus Torvalds (1):
        Linux 2.6.22-rc4

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas

Chris Ball (1):
      libertas: wakeup both mesh and normal wakeup when getting out of scan

Dan Williams (25):
      libertas: call SET_NETDEV_DEV from common code
      libertas: replace 'macaddress' with 'bssid'
      libertas: correctly unregister mesh netdev on error
      libertas: don't tear down netdev in libertas_activate_card
      libertas: make scan result handling more flexible
      libertas: fix 'keep previous scan' behavior
      libertas: move channel changing into association framework
      libertas: make association paths consistent
      libertas: use MAC_FMT and MAC_ARG where appropriate
      libertas: use compare_ether_addr() rather than memcmp() where appropriate
      libertas: fix debug enter/leave prints for libertas_execute_next_command
      libertas: correctly balance locking in libertas_process_rx_command
      libertas: correct error report paths for wlan_fwt_list_ioctl
      libertas: fix deadlock SIOCGIWSCAN handler
      libertas: fix default adhoc channel
      libertas: honor specific channel requests during association
      libertas: send SIOCGIWSCAN event after partial scans too
      libertas: debug print spacing fixes in assoc.c
      libertas: add more verbose debugging to libertas_cmd_80211_authenticate
      libertas: Make WPA work through supplicant handshake
      libertas: sparse fixes
      libertas: tweak association debug output
      libertas: remove structure WLAN_802_11_SSID and libertas_escape_essid
      libertas: remove WPA_SUPPLICANT structure
      libertas: reduce SSID and BSSID mixed-case abuse

David Woodhouse (6):
      libertas: fix character set in README
      libertas: first pass at fixing up endianness issues
      libertas: More endianness fixes.
      libertas: more endianness fixes, in tx.c this time
      libertas: don't byte-swap firmware version number. It's a byte array.
      libertas: fix big-endian associate command.

Holger Schurig (23):
      libertas: rename wlan_association_worker
      libertas: a debug output was missing a newline
      libertas: fix removal of all debugfs files
      libertas: remove __FILE__ from debug output
      libertas: remove unused/superfluous definitions of DEV_NAME_LEN
      libertas: move vendor & product id's into if_usb.c
      libertas: make libertas_wlan_data_rates static
      libertas: exclude non-used code when PROC_DEBUG is not set
      libertas: make debug configurable
      libertas: tune debug code
      libertas: single out mesh code
      libertas: change debug output of libertas_interrupt()
      libertas: get rid of libertas_sbi_get_priv()
      libertas: fix SSID output
      libertas: changed some occurences of kmalloc() + memset(&a,0,sz) to kzalloc()
      libertas: move reset_device() code main.c to if_usb.c
      libertas: split wlan_add_card()
      libertas: indirect all hardware access via hw_XXXX functions
      libertas: move contents of fw.h to decl.h
      libertas: split module into two (libertas.ko and usb8xxx.ko)
      libertas: fix RESET logic at unload time
      libertas: let DRV_NAME be overridable
      libertas: remove unused variables in wlan_dev_t

Javier Cardona (2):
      libertas: fixed transmission flow control on the mesh interface
      libertas: added transmission failures to mesh statistics

Luis Carlos Cobo (4):
      libertas: fixed incorrect assigment of fcs errors to frag errors
      libertas: add URB debug info
      libertas: fixed kernel oops on module/card removal
      libertas: updated mesh commands for 5.220.9.p11

Luis Carlos Cobo Rus (6):
      libertas: version bump (321p0) and cmds update for new fw (5.220.10.p0)
      libertas: cleanup of fwt_list_route processing
      libertas: updated readme file
      libertas: make mac address configuration work with mesh interface too
      libertas: split wext for eth and msh
      libertas: support for mesh autostart on firmware 5.220.11

Marcelo Tosatti (5):
      libertas: scan two channels per scan command
      libertas: remove deprecated pm_register and associated code
      libertas: fix scanning from associate path
      libertas: fix error handling of card initialization
      libertas: fix oops on rmmod

 drivers/net/wireless/Kconfig               |   19 +-
 drivers/net/wireless/libertas/11d.c        |  152 ++--
 drivers/net/wireless/libertas/11d.h        |    6 +-
 drivers/net/wireless/libertas/Makefile     |    4 +-
 drivers/net/wireless/libertas/README       |   52 +-
 drivers/net/wireless/libertas/assoc.c      |  345 +++++---
 drivers/net/wireless/libertas/assoc.h      |    8 +-
 drivers/net/wireless/libertas/cmd.c        |  559 +++++------
 drivers/net/wireless/libertas/cmdresp.c    |  375 ++++----
 drivers/net/wireless/libertas/debugfs.c    |  432 ++++----
 drivers/net/wireless/libertas/decl.h       |   20 +-
 drivers/net/wireless/libertas/defs.h       |  101 ++-
 drivers/net/wireless/libertas/dev.h        |   98 +-
 drivers/net/wireless/libertas/ethtool.c    |   55 +-
 drivers/net/wireless/libertas/fw.c         |  111 +--
 drivers/net/wireless/libertas/fw.h         |   13 -
 drivers/net/wireless/libertas/host.h       |   13 +-
 drivers/net/wireless/libertas/hostcmd.h    |  392 ++++----
 drivers/net/wireless/libertas/if_bootcmd.c |    6 +-
 drivers/net/wireless/libertas/if_usb.c     |  448 +++++----
 drivers/net/wireless/libertas/if_usb.h     |   32 +-
 drivers/net/wireless/libertas/ioctl.c      |  286 ++++--
 drivers/net/wireless/libertas/join.c       |  464 ++++-----
 drivers/net/wireless/libertas/join.h       |   13 +-
 drivers/net/wireless/libertas/main.c       |  673 ++++++-------
 drivers/net/wireless/libertas/rx.c         |   63 +-
 drivers/net/wireless/libertas/sbi.h        |   40 -
 drivers/net/wireless/libertas/scan.c       | 1529 +++++++++++++---------------
 drivers/net/wireless/libertas/scan.h       |   81 +-
 drivers/net/wireless/libertas/thread.h     |    8 +-
 drivers/net/wireless/libertas/tx.c         |   74 +-
 drivers/net/wireless/libertas/types.h      |   63 +-
 drivers/net/wireless/libertas/wext.c       |  778 ++++++++-------
 drivers/net/wireless/libertas/wext.h       |   13 +-
 34 files changed, 3679 insertions(+), 3647 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/fw.h
 delete mode 100644 drivers/net/wireless/libertas/sbi.h

-- 
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-fixes' branch of wireless-2.6
       [not found]     ` <20070612210658.GG310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  2007-06-12 21:08       ` Please pull 'libertas-upstream' " John W. Linville
@ 2007-06-12 22:54       ` Jeff Garzik
  2007-06-13  0:03         ` John W. Linville
  2007-06-13  2:28       ` Jeff Garzik
  2 siblings, 1 reply; 19+ messages in thread
From: Jeff Garzik @ 2007-06-12 22:54 UTC (permalink / raw)
  To: John W. Linville
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

John W. Linville wrote:
> Fixes identified by the libertas team as important for 2.6.22...
> 
> ---
> 
> The following changes since commit 717c9339202a42ae7bec7d3c4b84deecdcae9f81:
>   Dan Williams (1):
>         libertas: reduce SSID and BSSID mixed-case abuse
> 
> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes
> 
> Dan Williams (1):
>       libertas: actually send mesh frames to mesh netdev
> 
> Luis Carlos (1):
>       libertas: convert libertas_mpp into anycast_mask
> 
> Luis Carlos Cobo Rus (2):
>       libertas: pull current channel from firmware on mesh autostart
>       libertas: deauthenticate from AP in channel switch

Just to be clear, you intend 'libertas' and 'libertas-fixes' (in that 
order) for 2.6.22, and 'libertas-upstream' for 2.6.23?

	Jeff

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-fixes' branch of wireless-2.6
  2007-06-12 22:54       ` Please pull 'libertas-fixes' " Jeff Garzik
@ 2007-06-13  0:03         ` John W. Linville
  0 siblings, 0 replies; 19+ messages in thread
From: John W. Linville @ 2007-06-13  0:03 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-wireless, netdev, Dan Williams

On Tue, Jun 12, 2007 at 06:54:35PM -0400, Jeff Garzik wrote:
> John W. Linville wrote:
> >Fixes identified by the libertas team as important for 2.6.22...
> >
> >---
> >
> >The following changes since commit 
> >717c9339202a42ae7bec7d3c4b84deecdcae9f81:
> >  Dan Williams (1):
> >        libertas: reduce SSID and BSSID mixed-case abuse
> >
> >are found in the git repository at:
> >
> >  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git 
> >  libertas-fixes
> >
> >Dan Williams (1):
> >      libertas: actually send mesh frames to mesh netdev
> >
> >Luis Carlos (1):
> >      libertas: convert libertas_mpp into anycast_mask
> >
> >Luis Carlos Cobo Rus (2):
> >      libertas: pull current channel from firmware on mesh autostart
> >      libertas: deauthenticate from AP in channel switch
> 
> Just to be clear, you intend 'libertas' and 'libertas-fixes' (in that 
> order) for 2.6.22, and 'libertas-upstream' for 2.6.23?

Yes, correct.

Thanks,

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-fixes' branch of wireless-2.6
       [not found]     ` <20070612210658.GG310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  2007-06-12 21:08       ` Please pull 'libertas-upstream' " John W. Linville
  2007-06-12 22:54       ` Please pull 'libertas-fixes' " Jeff Garzik
@ 2007-06-13  2:28       ` Jeff Garzik
  2 siblings, 0 replies; 19+ messages in thread
From: Jeff Garzik @ 2007-06-13  2:28 UTC (permalink / raw)
  To: John W. Linville
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

John W. Linville wrote:
> Fixes identified by the libertas team as important for 2.6.22...
> 
> ---
> 
> The following changes since commit 717c9339202a42ae7bec7d3c4b84deecdcae9f81:
>   Dan Williams (1):
>         libertas: reduce SSID and BSSID mixed-case abuse
> 
> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes
> 
> Dan Williams (1):
>       libertas: actually send mesh frames to mesh netdev
> 
> Luis Carlos (1):
>       libertas: convert libertas_mpp into anycast_mask
> 
> Luis Carlos Cobo Rus (2):
>       libertas: pull current channel from firmware on mesh autostart
>       libertas: deauthenticate from AP in channel switch
> 
>  drivers/net/wireless/libertas/assoc.c   |   13 +++++++++++++
>  drivers/net/wireless/libertas/assoc.h   |    2 ++
>  drivers/net/wireless/libertas/cmdresp.c |    1 +
>  drivers/net/wireless/libertas/dev.h     |    1 +
>  drivers/net/wireless/libertas/host.h    |    4 ++--
>  drivers/net/wireless/libertas/main.c    |   27 ++++++++++++++-------------
>  drivers/net/wireless/libertas/rx.c      |    5 ++---
>  7 files changed, 35 insertions(+), 18 deletions(-)

pulled into #upstream-fixes

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas' branch of wireless-2.6 (resent w/o attachment)
  2007-06-12 21:26     ` Please pull 'libertas' branch of wireless-2.6 (resent w/o attachment) John W. Linville
@ 2007-06-13  2:28       ` Jeff Garzik
  0 siblings, 0 replies; 19+ messages in thread
From: Jeff Garzik @ 2007-06-13  2:28 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-wireless, netdev, Dan Williams

John W. Linville wrote:
> Resending w/o the attached patch, in case it was too big...yikes!
> 
> Individual patches are available here:
> 
> 	http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/libertas
> 
> John
> 
> ---
> 
> Jeff,
> 
> This is the same as the previous pull request, only rebased on
> 2.6.22-rc4.  Since this is a big pull already, I didn't want to
> complicate it with the additional patches identified by the libertas
> team as 2.6.22-worthy.
> 
> John
> 
> ---
> 
> The following changes since commit 5ecd3100e695228ac5e0ce0e325e252c0f11806f:
>   Linus Torvalds (1):
>         Linux 2.6.22-rc4
> 
> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas
> 
> Chris Ball (1):
>       libertas: wakeup both mesh and normal wakeup when getting out of scan
> 
> Dan Williams (25):
>       libertas: call SET_NETDEV_DEV from common code
>       libertas: replace 'macaddress' with 'bssid'
>       libertas: correctly unregister mesh netdev on error
>       libertas: don't tear down netdev in libertas_activate_card
>       libertas: make scan result handling more flexible
>       libertas: fix 'keep previous scan' behavior
>       libertas: move channel changing into association framework
>       libertas: make association paths consistent
>       libertas: use MAC_FMT and MAC_ARG where appropriate
>       libertas: use compare_ether_addr() rather than memcmp() where appropriate
>       libertas: fix debug enter/leave prints for libertas_execute_next_command
>       libertas: correctly balance locking in libertas_process_rx_command
>       libertas: correct error report paths for wlan_fwt_list_ioctl
>       libertas: fix deadlock SIOCGIWSCAN handler
>       libertas: fix default adhoc channel
>       libertas: honor specific channel requests during association
>       libertas: send SIOCGIWSCAN event after partial scans too
>       libertas: debug print spacing fixes in assoc.c
>       libertas: add more verbose debugging to libertas_cmd_80211_authenticate
>       libertas: Make WPA work through supplicant handshake
>       libertas: sparse fixes
>       libertas: tweak association debug output
>       libertas: remove structure WLAN_802_11_SSID and libertas_escape_essid
>       libertas: remove WPA_SUPPLICANT structure
>       libertas: reduce SSID and BSSID mixed-case abuse
> 
> David Woodhouse (6):
>       libertas: fix character set in README
>       libertas: first pass at fixing up endianness issues
>       libertas: More endianness fixes.
>       libertas: more endianness fixes, in tx.c this time
>       libertas: don't byte-swap firmware version number. It's a byte array.
>       libertas: fix big-endian associate command.
> 
> Holger Schurig (23):
>       libertas: rename wlan_association_worker
>       libertas: a debug output was missing a newline
>       libertas: fix removal of all debugfs files
>       libertas: remove __FILE__ from debug output
>       libertas: remove unused/superfluous definitions of DEV_NAME_LEN
>       libertas: move vendor & product id's into if_usb.c
>       libertas: make libertas_wlan_data_rates static
>       libertas: exclude non-used code when PROC_DEBUG is not set
>       libertas: make debug configurable
>       libertas: tune debug code
>       libertas: single out mesh code
>       libertas: change debug output of libertas_interrupt()
>       libertas: get rid of libertas_sbi_get_priv()
>       libertas: fix SSID output
>       libertas: changed some occurences of kmalloc() + memset(&a,0,sz) to kzalloc()
>       libertas: move reset_device() code main.c to if_usb.c
>       libertas: split wlan_add_card()
>       libertas: indirect all hardware access via hw_XXXX functions
>       libertas: move contents of fw.h to decl.h
>       libertas: split module into two (libertas.ko and usb8xxx.ko)
>       libertas: fix RESET logic at unload time
>       libertas: let DRV_NAME be overridable
>       libertas: remove unused variables in wlan_dev_t
> 
> Javier Cardona (2):
>       libertas: fixed transmission flow control on the mesh interface
>       libertas: added transmission failures to mesh statistics
> 
> Luis Carlos Cobo (4):
>       libertas: fixed incorrect assigment of fcs errors to frag errors
>       libertas: add URB debug info
>       libertas: fixed kernel oops on module/card removal
>       libertas: updated mesh commands for 5.220.9.p11
> 
> Luis Carlos Cobo Rus (6):
>       libertas: version bump (321p0) and cmds update for new fw (5.220.10.p0)
>       libertas: cleanup of fwt_list_route processing
>       libertas: updated readme file
>       libertas: make mac address configuration work with mesh interface too
>       libertas: split wext for eth and msh
>       libertas: support for mesh autostart on firmware 5.220.11
> 
> Marcelo Tosatti (5):
>       libertas: scan two channels per scan command
>       libertas: remove deprecated pm_register and associated code
>       libertas: fix scanning from associate path
>       libertas: fix error handling of card initialization
>       libertas: fix oops on rmmod
> 
>  drivers/net/wireless/Kconfig               |   19 +-
>  drivers/net/wireless/libertas/11d.c        |  152 ++--
>  drivers/net/wireless/libertas/11d.h        |    6 +-
>  drivers/net/wireless/libertas/Makefile     |    4 +-
>  drivers/net/wireless/libertas/README       |   52 +-
>  drivers/net/wireless/libertas/assoc.c      |  345 +++++---
>  drivers/net/wireless/libertas/assoc.h      |    8 +-
>  drivers/net/wireless/libertas/cmd.c        |  559 +++++------
>  drivers/net/wireless/libertas/cmdresp.c    |  375 ++++----
>  drivers/net/wireless/libertas/debugfs.c    |  432 ++++----
>  drivers/net/wireless/libertas/decl.h       |   20 +-
>  drivers/net/wireless/libertas/defs.h       |  101 ++-
>  drivers/net/wireless/libertas/dev.h        |   98 +-
>  drivers/net/wireless/libertas/ethtool.c    |   55 +-
>  drivers/net/wireless/libertas/fw.c         |  111 +--
>  drivers/net/wireless/libertas/fw.h         |   13 -
>  drivers/net/wireless/libertas/host.h       |   13 +-
>  drivers/net/wireless/libertas/hostcmd.h    |  392 ++++----
>  drivers/net/wireless/libertas/if_bootcmd.c |    6 +-
>  drivers/net/wireless/libertas/if_usb.c     |  448 +++++----
>  drivers/net/wireless/libertas/if_usb.h     |   32 +-
>  drivers/net/wireless/libertas/ioctl.c      |  286 ++++--
>  drivers/net/wireless/libertas/join.c       |  464 ++++-----
>  drivers/net/wireless/libertas/join.h       |   13 +-
>  drivers/net/wireless/libertas/main.c       |  673 ++++++-------
>  drivers/net/wireless/libertas/rx.c         |   63 +-
>  drivers/net/wireless/libertas/sbi.h        |   40 -
>  drivers/net/wireless/libertas/scan.c       | 1529 +++++++++++++---------------
>  drivers/net/wireless/libertas/scan.h       |   81 +-
>  drivers/net/wireless/libertas/thread.h     |    8 +-
>  drivers/net/wireless/libertas/tx.c         |   74 +-
>  drivers/net/wireless/libertas/types.h      |   63 +-
>  drivers/net/wireless/libertas/wext.c       |  778 ++++++++-------
>  drivers/net/wireless/libertas/wext.h       |   13 +-
>  34 files changed, 3679 insertions(+), 3647 deletions(-)
>  delete mode 100644 drivers/net/wireless/libertas/fw.h
>  delete mode 100644 drivers/net/wireless/libertas/sbi.h

pulled into #upstream-fixes


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-upstream' branch of wireless-2.6
       [not found]         ` <20070612210814.GH310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-06-13 19:57           ` Jeff Garzik
  0 siblings, 0 replies; 19+ messages in thread
From: Jeff Garzik @ 2007-06-13 19:57 UTC (permalink / raw)
  To: John W. Linville
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, Dan Williams

John W. Linville wrote:
> Patches identified by the libertas team as suitable for 2.6.23...
> 
> ---
> 
> The following changes since commit 82fde74b94f11eee1e9c30e43fb162f80a5e63c0:
>   Luis Carlos (1):
>         libertas: convert libertas_mpp into anycast_mask
> 
> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-upstream

since it sounds like some additional 2.6.22 (warning?) fixes will be 
coming, I'm going to hold off pulling this.  I would rather the wireless 
maintainer sort out the merging in this case :)  Once 2.6.22 is all 
upstream, please do resend this push...

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Please pull 'libertas-fixes' branch of wireless-2.6
@ 2007-06-27 20:55 John W. Linville
       [not found] ` <20070627205539.GB13617-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
  2007-07-02 12:14 ` Jeff Garzik
  0 siblings, 2 replies; 19+ messages in thread
From: John W. Linville @ 2007-06-27 20:55 UTC (permalink / raw)
  To: jeff-o2qLIJkoznsdnm+yROfE0A
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, dcbw-H+wXaHxf7aLQT0dZR+AlfA

The following changes since commit 189548642c5962e60c3667bdb3a703fe0bed12a6:
  Linus Torvalds (1):
        Linus 2.6.22-rc6

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes

Dan Williams (4):
      libertas: style fixes
      libertas: kill wlan_scan_process_results
      libertas: fix WPA associations by handling ENABLE_RSN correctly
      libertas: remove private ioctls

 drivers/net/wireless/libertas/Makefile  |    2 +-
 drivers/net/wireless/libertas/README    |  275 --------
 drivers/net/wireless/libertas/assoc.c   |   28 +-
 drivers/net/wireless/libertas/cmd.c     |   12 +-
 drivers/net/wireless/libertas/cmdresp.c |   21 +
 drivers/net/wireless/libertas/hostcmd.h |    2 +-
 drivers/net/wireless/libertas/ioctl.c   | 1081 -------------------------------
 drivers/net/wireless/libertas/main.c    |    8 +-
 drivers/net/wireless/libertas/scan.c    |   51 +--
 drivers/net/wireless/libertas/wext.c    |  152 -----
 drivers/net/wireless/libertas/wext.h    |   45 +--
 11 files changed, 79 insertions(+), 1598 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/ioctl.c

diff --git a/drivers/net/wireless/libertas/Makefile b/drivers/net/wireless/libertas/Makefile
index a1097f5..32ed413 100644
--- a/drivers/net/wireless/libertas/Makefile
+++ b/drivers/net/wireless/libertas/Makefile
@@ -2,7 +2,7 @@ libertas-objs := main.o fw.o wext.o \
 		rx.o tx.o cmd.o 	  \
 		cmdresp.o scan.o	  \
 		join.o 11d.o 		  \
-		ioctl.o debugfs.o	  \
+		debugfs.o	  \
 		ethtool.o assoc.o
 
 usb8xxx-objs += if_bootcmd.o
diff --git a/drivers/net/wireless/libertas/README b/drivers/net/wireless/libertas/README
index 1f92f50..0b133ce 100644
--- a/drivers/net/wireless/libertas/README
+++ b/drivers/net/wireless/libertas/README
@@ -28,281 +28,6 @@ DRIVER LOADING
 
 		insmod usb8388.ko [fw_name=usb8388.bin]
 
-=====================
-IWPRIV COMMAND
-=====================
-
-NAME
-	This manual describes the usage of private commands used in Marvell WLAN
-	Linux Driver. All the commands available in Wlanconfig will not be available
-	in the iwpriv.
-
-SYNOPSIS
-	iwpriv <ethX> <command> [sub-command] ...
-
-	iwpriv ethX setregioncode <n>
-	iwpriv ethX getregioncode
-
-Version 5 Command:
-	iwpriv ethX ledgpio <n>
-
-BT Commands:
-	The blinding table (BT) contains a list of mac addresses that will be,
-	by default, ignored by the firmware. It is also possible to invert this
-	behavior so that we will ignore all traffic except for the portion
-	coming from mac addresess in the list. It is primarily used for
-	debugging and testing networks.  It can be edited and inspected with
-	the following commands:
-
-	iwpriv ethX bt_reset
-	iwpriv ethX bt_add <mac_address>
-	iwpriv ethX bt_del <mac_address>
-	iwpriv ethX bt_list <id>
-	iwpriv ethX bt_get_invert <n>
-	iwpriv ethX bt_set_invert <n>
-
-FWT Commands:
-	The forwarding table (FWT) is a feature used to manage mesh network
-	routing in the firmware.  The FWT is essentially a routing table that
-	associates a destination mac address (da) with a next hop receiver
-	address (ra).  The FWT can be inspected and edited with the following
-	iwpriv commands, which are described in greater detail below.
-	Eventually, the table will be automatically maintained by a custom
-	routing protocol.
-
-	NOTE: FWT commands replace the previous DFT commands.  What were the DFT
-	commands?, you might ask.  They were an earlier API to the firmware that
-	implemented a simple MAC-layer forwarding mechanism.  In the unlikely
-	event that you were using these commands, you must migrate to the new
-	FWT commands which can be used to achieve the same functionality.
-
-	iwpriv ethX fwt_add [parameters]
-	iwpriv ethX fwt_del [parameters]
-	iwpriv ethX fwt_lookup [parameters]
-	iwpriv ethX fwt_list [parameters]
-	iwpriv ethX fwt_list_route [parameters]
-	iwpriv ethX fwt_list_neigh [parameters]
-	iwpriv ethX fwt_reset [parameters]
-	iwpriv ethX fwt_cleanup
-	iwpriv ethX fwt_time
-
-MESH Commands:
-
-	The MESH commands are used to configure various features of the mesh
-	routing protocol.  The following commands are supported:
-
-	iwpriv ethX mesh_get_ttl
-	iwpriv ethX mesh_set_ttl ttl
-
-DESCRIPTION
-	Those commands are used to send additional commands to the Marvell WLAN
-	card via the Linux device driver.
-
-	The ethX parameter specifies the network device that is to be used to
-		perform this command on. it could be eth0, eth1 etc.
-
-setregioncode
-	This command is used to set the region code in the station.
-	where value is 'region code' for various regions like
-	USA FCC, Canada IC, Spain, France, Europe ETSI,	Japan ...
-
-	Usage:
-		iwpriv ethX setregioncode 0x10: set region code to USA (0x10).
-
-getregioncode
-	This command is used to get the region code information set in the
-	station.
-
-ledgpio
-	This command is used to set/get LEDs.
-
-	iwpriv ethX ledgpio <LEDs>
-		will set the corresponding LED for the GPIO Line.
-
-	iwpriv ethX ledgpio
-		will give u which LEDs are Enabled.
-
-	Usage:
-		iwpriv eth1 ledgpio 1 0 2 1 3 4
-			will enable
-			LED 1 -> GPIO 0
-			LED 2 -> GPIO 1
-			LED 3 -> GPIO 4
-
-		iwpriv eth1 ledgpio
-			shows LED information in the format as mentioned above.
-
-	Note: LED0 is invalid
-	Note: Maximum Number of LEDs are 16.
-
-fwt_add
-	This command is used to insert an entry into the FWT table. The list of
-	parameters must follow the following structure:
-
-	iwpriv ethX fwt_add da ra [metric dir rate ssn dsn hopcount ttl expiration sleepmode snr]
-
-	The parameters between brackets are optional, but they must appear in
-	the order specified.  For example, if you want to specify the metric,
-	you must also specify the dir, ssn, and dsn but you need not specify the
-	hopcount, expiration, sleepmode, or snr.  Any unspecified parameters
-	will be assigned the defaults specified below.
-
-	The different parameters are:-
-		da		-- DA MAC address in the form 00:11:22:33:44:55
-		ra		-- RA MAC address in the form 00:11:22:33:44:55
-		metric		-- route metric (cost: smaller-metric routes are
-				   preferred, default is 0)
-		dir		-- direction (1 for direct, 0 for reverse,
-				   default is 1)
-		rate		-- data rate used for transmission to the RA,
-				   as specified for the rateadapt command,
-				   default is 3 (11Mbps)
-		ssn		-- Source Sequence Number (time at the RA for
-				   reverse routes.  Default is 0)
-		dsn		-- Destination Sequence Number (time at the DA
-				   for direct routes.  Default is 0)
-		hopcount	-- hop count (currently unused, default is 0)
-		ttl		-- TTL (Only used in reverse entries)
-		expiration	-- entry expiration (in ticks, where a tick is
-				   1024us, or ~ 1ms. Use 0 for an indefinite
-				   entry, default is 0)
-		sleepmode	-- RA's sleep mode (currently unused, default is
-				   0)
-		snr		-- SNR in the link to RA (currently unused,
-				   default is 0)
-
-	The command does not return anything.
-
-fwt_del
-	This command is used to remove an entry to the FWT table. The list of
-	parameters must follow the following structure:
-
-		iwpriv ethX fwt_del da ra [dir]
-
-	where the different parameters are:-
-		da		-- DA MAC address (in the form "00:11:22:33:44:55")
-		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
-		dir		-- direction (1 for direct, 0 for reverse,
-				   default is 1)
-
-	The command does not return anything.
-
-fwt_lookup
-	This command is used to get the best route in the FWT table to a given
-	host. The only parameter is the MAC address of the host that is being
-	looked for.
-
-		iwpriv ethX fwt_lookup da
-
-	where:-
-		da		-- DA MAC address (in the form "00:11:22:33:44:55")
-
-	The command returns an output string identical to the one returned by
-	fwt_list described below.
-
-
-fwt_list
-	This command is used to list a route from the FWT table. The only
-	parameter is the index into the table. If you want to list all the
-	routes in a table, start with index=0, and keep listing until you get a
-	"(null)" string.  Note that the indicies may change as the fwt is
-	updated.  It is expected that most users will not use fwt_list directly,
-	but that a utility similar to the traditional route command will be used
-	to invoke fwt_list over and over.
-
-		iwpriv ethX fwt_list index
-
-	The output is a string of the following form:
-
-		da ra valid metric dir rate ssn dsn hopcount ttl expiration
-		sleepmode snr precursor
-
-	where the different fields are:-
-		da		-- DA MAC address (in the form "00:11:22:33:44:55")
-		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
-		valid		-- whether the route is valid (0 if not valid)
-		metric		-- route metric (cost: smaller-metric routes are preferred)
-		dir		-- direction (1 for direct, 0 for reverse)
-		rate		-- data rate used for transmission to the RA,
-				   as specified for the rateadapt command
-		ssn		-- Source Sequence Number (time at the RA for reverse routes)
-		dsn		-- Destination Sequence Number (time at the DA for direct routes)
-		hopcount	-- hop count (currently unused)
-		ttl		-- TTL (only used in reverse entries)
-		expiration	-- entry expiration (in ticks, where a tick is 1024us, or ~ 1ms. Use 0 for an indefinite entry)
-		sleepmode	-- RA's sleep mode (currently unused)
-		snr		-- SNR in the link to RA (currently unused)
-		precursor	-- predecessor in direct routes
-
-fwt_list_route
-	This command is equivalent to fwt_list.
-
-fwt_list_neigh
-	This command is used to list a neighbor from the FWT table. The only
-	parameter is the neighbor ID. If you want to list all the neighbors in a
-	table, start with nid=0, and keep incrementing nid until you get a
-	"(null)" string.  Note that the nid from a fwt_list_route command can be
-	used as an input to this command.  Also note that this command is meant
-	mostly for debugging.  It is expected that users will use fwt_lookup.
-	One important reason for this is that the neighbor id may change as the
-	neighbor table is altered.
-
-		iwpriv ethX fwt_list_neigh nid
-
-	The output is a string of the following form:
-
-		ra sleepmode snr references
-
-	where the different fields are:-
-		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
-		sleepmode	-- RA's sleep mode (currently unused)
-		snr		-- SNR in the link to RA (currently unused)
-		references	-- RA's reference counter
-
-fwt_reset
-	This command is used to reset the FWT table, getting rid of all the
-	entries. There are no input parameters.
-
-		iwpriv ethX fwt_reset
-
-	The command does not return anything.
-
-fwt_cleanup
-	This command is used to perform user-based garbage recollection. The
-	FWT table is checked, and all the entries that are expired or invalid
-	are cleaned. Note that this is exported to the driver for debugging
-	purposes, as garbage collection is also fired by the firmware when in
-	space problems. There are no input parameters.
-
-		iwpriv ethX fwt_cleanup
-
-	The command does returns the number of invalid/expired routes deleted.
-
-fwt_time
-	This command returns a card's internal time representation.  It is this
-	time that is used to represent the expiration times of FWT entries.  The
-	number is not consistent from card to card; it is simply a timer count.
-	The fwt_time command is used to inspect the timer so that expiration
-	times reported by fwt_list can be properly interpreted.
-
-		iwpriv ethX fwt_time
-
-mesh_get_ttl
-
-	The mesh ttl is the number of hops a mesh packet can traverse before it
-	is dropped.  This parameter is used to prevent infinite loops in the
-	mesh network.  The value returned by this function is the ttl assigned
-	to all mesh packets.  Currently there is no way to control the ttl on a
-	per packet or per socket basis.
-
-	iwpriv ethX mesh_get_ttl
-
-mesh_set_ttl ttl
-
-	Set the ttl.  The argument must be between 0 and 255.
-
-	iwpriv ethX mesh_set_ttl <ttl>
-
 =========================
 ETHTOOL
 =========================
diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
index f67efa0..afd5617 100644
--- a/drivers/net/wireless/libertas/assoc.c
+++ b/drivers/net/wireless/libertas/assoc.c
@@ -323,6 +323,8 @@ static int assoc_helper_secinfo(wlan_private *priv,
 {
 	wlan_adapter *adapter = priv->adapter;
 	int ret = 0;
+	u32 do_wpa;
+	u32 rsn = 0;
 
 	lbs_deb_enter(LBS_DEB_ASSOC);
 
@@ -333,12 +335,34 @@ static int assoc_helper_secinfo(wlan_private *priv,
 	if (ret)
 		goto out;
 
-	/* enable/disable RSN */
+	/* If RSN is already enabled, don't try to enable it again, since
+	 * ENABLE_RSN resets internal state machines and will clobber the
+	 * 4-way WPA handshake.
+	 */
+
+	/* Get RSN enabled/disabled */
 	ret = libertas_prepare_and_send_command(priv,
 				    cmd_802_11_enable_rsn,
 				    cmd_act_set,
 				    cmd_option_waitforrsp,
-				    0, assoc_req);
+				    0, &rsn);
+	if (ret) {
+		lbs_deb_assoc("Failed to get RSN status: %d", ret);
+		goto out;
+	}
+
+	/* Don't re-enable RSN if it's already enabled */
+	do_wpa = (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled);
+	if (do_wpa == rsn)
+		goto out;
+
+	/* Set RSN enabled/disabled */
+	rsn = do_wpa;
+	ret = libertas_prepare_and_send_command(priv,
+				    cmd_802_11_enable_rsn,
+				    cmd_act_set,
+				    cmd_option_waitforrsp,
+				    0, &rsn);
 
 out:
 	lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 124e029..13f6528 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -228,17 +228,19 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
 				      void * pdata_buf)
 {
 	struct cmd_ds_802_11_enable_rsn *penableRSN = &cmd->params.enbrsn;
-	struct assoc_request * assoc_req = pdata_buf;
+	u32 * enable = pdata_buf;
 
 	lbs_deb_enter(LBS_DEB_CMD);
 
 	cmd->command = cpu_to_le16(cmd_802_11_enable_rsn);
 	cmd->size = cpu_to_le16(sizeof(*penableRSN) + S_DS_GEN);
 	penableRSN->action = cpu_to_le16(cmd_action);
-	if (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled) {
-		penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
-	} else {
-		penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
+
+	if (cmd_action == cmd_act_set) {
+		if (*enable)
+			penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
+		else
+			penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
 	}
 
 	lbs_deb_leave(LBS_DEB_CMD);
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
index 0c3b9a5..6ac0d47 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -537,6 +537,24 @@ static int wlan_ret_get_log(wlan_private * priv,
 	return 0;
 }
 
+static int libertas_ret_802_11_enable_rsn(wlan_private * priv,
+                                          struct cmd_ds_command *resp)
+{
+	struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn;
+	wlan_adapter *adapter = priv->adapter;
+	u32 * pdata_buf = adapter->cur_cmd->pdata_buf;
+
+	lbs_deb_enter(LBS_DEB_CMD);
+
+	if (enable_rsn->action == cpu_to_le16(cmd_act_get)) {
+		if (pdata_buf)
+			*pdata_buf = (u32) le16_to_cpu(enable_rsn->enable);
+	}
+
+	lbs_deb_enter(LBS_DEB_CMD);
+	return 0;
+}
+
 static inline int handle_cmd_response(u16 respcmd,
 				      struct cmd_ds_command *resp,
 				      wlan_private *priv)
@@ -610,7 +628,10 @@ static inline int handle_cmd_response(u16 respcmd,
 	case cmd_ret_802_11_authenticate:
 	case cmd_ret_802_11_radio_control:
 	case cmd_ret_802_11_beacon_stop:
+		break;
+
 	case cmd_ret_802_11_enable_rsn:
+		ret = libertas_ret_802_11_enable_rsn(priv, resp);
 		break;
 
 	case cmd_ret_802_11_data_rate:
diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h
index 3acf939..09b898f 100644
--- a/drivers/net/wireless/libertas/hostcmd.h
+++ b/drivers/net/wireless/libertas/hostcmd.h
@@ -503,7 +503,7 @@ struct cmd_ds_802_11_ad_hoc_join {
 struct cmd_ds_802_11_enable_rsn {
 	__le16 action;
 	__le16 enable;
-};
+} __attribute__ ((packed));
 
 struct MrvlIEtype_keyParamSet {
 	/* type ID */
diff --git a/drivers/net/wireless/libertas/ioctl.c b/drivers/net/wireless/libertas/ioctl.c
deleted file mode 100644
index f410815..0000000
--- a/drivers/net/wireless/libertas/ioctl.c
+++ /dev/null
@@ -1,1081 +0,0 @@
-/**
-  * This file contains ioctl functions
-  */
-
-#include <linux/ctype.h>
-#include <linux/delay.h>
-#include <linux/if.h>
-#include <linux/if_arp.h>
-#include <linux/wireless.h>
-
-#include <net/iw_handler.h>
-#include <net/ieee80211.h>
-
-#include "host.h"
-#include "radiotap.h"
-#include "decl.h"
-#include "defs.h"
-#include "dev.h"
-#include "join.h"
-#include "wext.h"
-
-#define MAX_SCAN_CELL_SIZE      (IW_EV_ADDR_LEN + \
-				IW_ESSID_MAX_SIZE + \
-				IW_EV_UINT_LEN + IW_EV_FREQ_LEN + \
-				IW_EV_QUAL_LEN + IW_ESSID_MAX_SIZE + \
-				IW_EV_PARAM_LEN + 40)	/* 40 for WPAIE */
-
-#define WAIT_FOR_SCAN_RRESULT_MAX_TIME (10 * HZ)
-
-static int wlan_set_region(wlan_private * priv, u16 region_code)
-{
-	int i;
-	int ret = 0;
-
-	for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) {
-		// use the region code to search for the index
-		if (region_code == libertas_region_code_to_index[i]) {
-			priv->adapter->regiontableindex = (u16) i;
-			priv->adapter->regioncode = region_code;
-			break;
-		}
-	}
-
-	// if it's unidentified region code
-	if (i >= MRVDRV_MAX_REGION_CODE) {
-		lbs_deb_ioctl("region Code not identified\n");
-		ret = -1;
-		goto done;
-	}
-
-	if (libertas_set_regiontable(priv, priv->adapter->regioncode, 0)) {
-		ret = -EINVAL;
-	}
-
-done:
-	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
-	return ret;
-}
-
-static inline int hex2int(char c)
-{
-	if (c >= '0' && c <= '9')
-		return (c - '0');
-	if (c >= 'a' && c <= 'f')
-		return (c - 'a' + 10);
-	if (c >= 'A' && c <= 'F')
-		return (c - 'A' + 10);
-	return -1;
-}
-
-/* Convert a string representation of a MAC address ("xx:xx:xx:xx:xx:xx")
-   into binary format (6 bytes).
-
-   This function expects that each byte is represented with 2 characters
-   (e.g., 11:2:11:11:11:11 is invalid)
-
- */
-static char *eth_str2addr(char *ethstr, u8 * addr)
-{
-	int i, val, val2;
-	char *pos = ethstr;
-
-	/* get rid of initial blanks */
-	while (*pos == ' ' || *pos == '\t')
-		++pos;
-
-	for (i = 0; i < 6; i++) {
-		val = hex2int(*pos++);
-		if (val < 0)
-			return NULL;
-		val2 = hex2int(*pos++);
-		if (val2 < 0)
-			return NULL;
-		addr[i] = (val * 16 + val2) & 0xff;
-
-		if (i < 5 && *pos++ != ':')
-			return NULL;
-	}
-	return pos;
-}
-
-/* this writes xx:xx:xx:xx:xx:xx into ethstr
-   (ethstr must have space for 18 chars) */
-static int eth_addr2str(u8 * addr, char *ethstr)
-{
-	int i;
-	char *pos = ethstr;
-
-	for (i = 0; i < 6; i++) {
-		sprintf(pos, "%02x", addr[i] & 0xff);
-		pos += 2;
-		if (i < 5)
-			*pos++ = ':';
-	}
-	return 17;
-}
-
-/**
- *  @brief          Add an entry to the BT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_add_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char ethaddrs_str[18];
-	char *pos;
-	u8 ethaddr[ETH_ALEN];
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(ethaddrs_str, wrq->u.data.pointer,
-			   sizeof(ethaddrs_str)))
-		return -EFAULT;
-
-	if ((pos = eth_str2addr(ethaddrs_str, ethaddr)) == NULL) {
-		lbs_pr_info("BT_ADD: Invalid MAC address\n");
-		return -EINVAL;
-	}
-
-	lbs_deb_ioctl("BT: adding %s\n", ethaddrs_str);
-	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
-				      cmd_act_bt_access_add,
-				      cmd_option_waitforrsp, 0, ethaddr);
-	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
-	return ret;
-}
-
-/**
- *  @brief          Delete an entry from the BT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_del_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char ethaddrs_str[18];
-	u8 ethaddr[ETH_ALEN];
-	char *pos;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(ethaddrs_str, wrq->u.data.pointer,
-			   sizeof(ethaddrs_str)))
-		return -EFAULT;
-
-	if ((pos = eth_str2addr(ethaddrs_str, ethaddr)) == NULL) {
-		lbs_pr_info("Invalid MAC address\n");
-		return -EINVAL;
-	}
-
-	lbs_deb_ioctl("BT: deleting %s\n", ethaddrs_str);
-
-	return (libertas_prepare_and_send_command(priv,
-				      cmd_bt_access,
-				      cmd_act_bt_access_del,
-				      cmd_option_waitforrsp, 0, ethaddr));
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Reset all entries from the BT table
- *  @param priv     A pointer to wlan_private structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_reset_ioctl(wlan_private * priv)
-{
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	lbs_pr_alert( "BT: resetting\n");
-
-	return (libertas_prepare_and_send_command(priv,
-				      cmd_bt_access,
-				      cmd_act_bt_access_reset,
-				      cmd_option_waitforrsp, 0, NULL));
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          List an entry from the BT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	int pos;
-	char *addr1;
-	struct iwreq *wrq = (struct iwreq *)req;
-	/* used to pass id and store the bt entry returned by the FW */
-	union {
-		u32 id;
-		char addr1addr2[2 * ETH_ALEN];
-	} param;
-	static char outstr[64];
-	char *pbuf = outstr;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(outstr, wrq->u.data.pointer, sizeof(outstr))) {
-		lbs_deb_ioctl("Copy from user failed\n");
-		return -1;
-	}
-	param.id = simple_strtoul(outstr, NULL, 10);
-	pos = sprintf(pbuf, "%d: ", param.id);
-	pbuf += pos;
-
-	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
-				    cmd_act_bt_access_list,
-				    cmd_option_waitforrsp, 0,
-				    (char *)&param);
-
-	if (ret == 0) {
-		addr1 = param.addr1addr2;
-
-		pos = sprintf(pbuf, "BT includes node ");
-		pbuf += pos;
-		pos = eth_addr2str(addr1, pbuf);
-		pbuf += pos;
-	} else {
-		sprintf(pbuf, "(null)");
-		pbuf += pos;
-	}
-
-	wrq->u.data.length = strlen(outstr);
-	if (copy_to_user(wrq->u.data.pointer, (char *)outstr,
-			 wrq->u.data.length)) {
-		lbs_deb_ioctl("BT_LIST: Copy to user failed!\n");
-		return -EFAULT;
-	}
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0 ;
-}
-
-/**
- *  @brief          Sets inverted state of blacklist (non-zero if inverted)
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_set_invert_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	int ret;
-	struct iwreq *wrq = (struct iwreq *)req;
-	union {
-		u32 id;
-		char addr1addr2[2 * ETH_ALEN];
-	} param;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	param.id = SUBCMD_DATA(wrq) ;
-	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
-				    cmd_act_bt_access_set_invert,
-				    cmd_option_waitforrsp, 0,
-				    (char *)&param);
-	if (ret != 0)
-		return -EFAULT;
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Gets inverted state of blacklist (non-zero if inverted)
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_bt_get_invert_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	int ret;
-	union {
-		u32 id;
-		char addr1addr2[2 * ETH_ALEN];
-	} param;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
-				    cmd_act_bt_access_get_invert,
-				    cmd_option_waitforrsp, 0,
-				    (char *)&param);
-
-	if (ret == 0)
-		wrq->u.param.value = le32_to_cpu(param.id);
-	else
-		return -EFAULT;
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Find the next parameter in an input string
- *  @param ptr      A pointer to the input parameter string
- *  @return         A pointer to the next parameter, or 0 if no parameters left.
- */
-static char * next_param(char * ptr)
-{
-	if (!ptr) return NULL;
-	while (*ptr == ' ' || *ptr == '\t') ++ptr;
-	return (*ptr == '\0') ? NULL : ptr;
-}
-
-/**
- *  @brief          Add an entry to the FWT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_add_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[128];
-	static struct cmd_ds_fwt_access fwt_access;
-	char *ptr;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
-		return -EFAULT;
-
-	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
-		lbs_pr_alert( "FWT_ADD: Invalid MAC address 1\n");
-		return -EINVAL;
-	}
-
-	if ((ptr = eth_str2addr(ptr, fwt_access.ra)) == NULL) {
-		lbs_pr_alert( "FWT_ADD: Invalid MAC address 2\n");
-		return -EINVAL;
-	}
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.metric =
-			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-	else
-		fwt_access.metric = cpu_to_le32(FWT_DEFAULT_METRIC);
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.dir = (u8)simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.dir = FWT_DEFAULT_DIR;
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.rate = (u8) simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.rate = FWT_DEFAULT_RATE;
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.ssn =
-			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-	else
-		fwt_access.ssn = cpu_to_le32(FWT_DEFAULT_SSN);
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.dsn =
-			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-	else
-		fwt_access.dsn = cpu_to_le32(FWT_DEFAULT_DSN);
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.hopcount = simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.hopcount = FWT_DEFAULT_HOPCOUNT;
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.ttl = simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.ttl = FWT_DEFAULT_TTL;
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.expiration =
-			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-	else
-		fwt_access.expiration = cpu_to_le32(FWT_DEFAULT_EXPIRATION);
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.sleepmode = (u8)simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.sleepmode = FWT_DEFAULT_SLEEPMODE;
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.snr =
-			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-	else
-		fwt_access.snr = cpu_to_le32(FWT_DEFAULT_SNR);
-
-#ifdef DEBUG
-	{
-		char ethaddr1_str[18], ethaddr2_str[18];
-		eth_addr2str(fwt_access.da, ethaddr1_str);
-		eth_addr2str(fwt_access.ra, ethaddr2_str);
-		lbs_deb_ioctl("FWT_ADD: adding (da:%s,%i,ra:%s)\n", ethaddr1_str,
-		       fwt_access.dir, ethaddr2_str);
-		lbs_deb_ioctl("FWT_ADD: ssn:%u dsn:%u met:%u hop:%u ttl:%u exp:%u slp:%u snr:%u\n",
-		       fwt_access.ssn, fwt_access.dsn, fwt_access.metric,
-		       fwt_access.hopcount, fwt_access.ttl, fwt_access.expiration,
-		       fwt_access.sleepmode, fwt_access.snr);
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-						cmd_act_fwt_access_add,
-						cmd_option_waitforrsp, 0,
-						(void *)&fwt_access);
-
-	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
-	return ret;
-}
-
-/**
- *  @brief          Delete an entry from the FWT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_del_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[64];
-	static struct cmd_ds_fwt_access fwt_access;
-	char *ptr;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
-		return -EFAULT;
-
-	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
-		lbs_pr_alert( "FWT_DEL: Invalid MAC address 1\n");
-		return -EINVAL;
-	}
-
-	if ((ptr = eth_str2addr(ptr, fwt_access.ra)) == NULL) {
-		lbs_pr_alert( "FWT_DEL: Invalid MAC address 2\n");
-		return -EINVAL;
-	}
-
-	if ((ptr = next_param(ptr)))
-		fwt_access.dir = (u8)simple_strtoul(ptr, &ptr, 10);
-	else
-		fwt_access.dir = FWT_DEFAULT_DIR;
-
-#ifdef DEBUG
-	{
-		char ethaddr1_str[18], ethaddr2_str[18];
-		lbs_deb_ioctl("FWT_DEL: line is %s\n", in_str);
-		eth_addr2str(fwt_access.da, ethaddr1_str);
-		eth_addr2str(fwt_access.ra, ethaddr2_str);
-		lbs_deb_ioctl("FWT_DEL: removing (da:%s,ra:%s,dir:%d)\n", ethaddr1_str,
-		       ethaddr2_str, fwt_access.dir);
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv,
-						cmd_fwt_access,
-						cmd_act_fwt_access_del,
-						cmd_option_waitforrsp, 0,
-						(void *)&fwt_access);
-	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
-	return ret;
-}
-
-
-/**
- *  @brief             Print route parameters
- *  @param fwt_access  struct cmd_ds_fwt_access with route info
- *  @param buf         destination buffer for route info
- */
-static void print_route(struct cmd_ds_fwt_access fwt_access, char *buf)
-{
-	buf += sprintf(buf, " ");
-	buf += eth_addr2str(fwt_access.da, buf);
-	buf += sprintf(buf, " ");
-	buf += eth_addr2str(fwt_access.ra, buf);
-	buf += sprintf(buf, " %u", fwt_access.valid);
-	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.metric));
-	buf += sprintf(buf, " %u", fwt_access.dir);
-	buf += sprintf(buf, " %u", fwt_access.rate);
-	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.ssn));
-	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.dsn));
-	buf += sprintf(buf, " %u", fwt_access.hopcount);
-	buf += sprintf(buf, " %u", fwt_access.ttl);
-	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.expiration));
-	buf += sprintf(buf, " %u", fwt_access.sleepmode);
-	buf += sprintf(buf, " %u ", le32_to_cpu(fwt_access.snr));
-	buf += eth_addr2str(fwt_access.prec, buf);
-}
-
-/**
- *  @brief          Lookup an entry in the FWT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_lookup_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[64];
-	char *ptr;
-	static struct cmd_ds_fwt_access fwt_access;
-	static char out_str[128];
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
-		return -EFAULT;
-
-	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
-		lbs_pr_alert( "FWT_LOOKUP: Invalid MAC address\n");
-		return -EINVAL;
-	}
-
-#ifdef DEBUG
-	{
-		char ethaddr1_str[18];
-		lbs_deb_ioctl("FWT_LOOKUP: line is %s\n", in_str);
-		eth_addr2str(fwt_access.da, ethaddr1_str);
-		lbs_deb_ioctl("FWT_LOOKUP: looking for (da:%s)\n", ethaddr1_str);
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv,
-						cmd_fwt_access,
-						cmd_act_fwt_access_lookup,
-						cmd_option_waitforrsp, 0,
-						(void *)&fwt_access);
-
-	if (ret == 0)
-		print_route(fwt_access, out_str);
-	else
-		sprintf(out_str, "(null)");
-
-	wrq->u.data.length = strlen(out_str);
-	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
-			 wrq->u.data.length)) {
-		lbs_deb_ioctl("FWT_LOOKUP: Copy to user failed!\n");
-		return -EFAULT;
-	}
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Reset all entries from the FWT table
- *  @param priv     A pointer to wlan_private structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_reset_ioctl(wlan_private * priv)
-{
-	lbs_deb_ioctl("FWT: resetting\n");
-
-	return (libertas_prepare_and_send_command(priv,
-				      cmd_fwt_access,
-				      cmd_act_fwt_access_reset,
-				      cmd_option_waitforrsp, 0, NULL));
-}
-
-/**
- *  @brief          List an entry from the FWT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_list_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[8];
-	static struct cmd_ds_fwt_access fwt_access;
-	char *ptr = in_str;
-	static char out_str[128];
-	char *pbuf = out_str;
-	int ret = 0;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str))) {
-		ret = -EFAULT;
-		goto out;
-	}
-
-	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-
-#ifdef DEBUG
-	{
-		lbs_deb_ioctl("FWT_LIST: line is %s\n", in_str);
-		lbs_deb_ioctl("FWT_LIST: listing id:%i\n", le32_to_cpu(fwt_access.id));
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-				    cmd_act_fwt_access_list,
-				    cmd_option_waitforrsp, 0, (void *)&fwt_access);
-
-	if (ret == 0)
-		print_route(fwt_access, pbuf);
-	else
-		pbuf += sprintf(pbuf, " (null)");
-
-	wrq->u.data.length = strlen(out_str);
-	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
-			 wrq->u.data.length)) {
-		lbs_deb_ioctl("FWT_LIST: Copy to user failed!\n");
-		ret = -EFAULT;
-		goto out;
-	}
-
-	ret = 0;
-
-out:
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return ret;
-}
-
-/**
- *  @brief          List an entry from the FRT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_list_route_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[64];
-	static struct cmd_ds_fwt_access fwt_access;
-	char *ptr = in_str;
-	static char out_str[128];
-	char *pbuf = out_str;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
-		return -EFAULT;
-
-	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-
-#ifdef DEBUG
-	{
-		lbs_deb_ioctl("FWT_LIST_ROUTE: line is %s\n", in_str);
-		lbs_deb_ioctl("FWT_LIST_ROUTE: listing id:%i\n", le32_to_cpu(fwt_access.id));
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-				    cmd_act_fwt_access_list_route,
-				    cmd_option_waitforrsp, 0, (void *)&fwt_access);
-
-	if (ret == 0) {
-		print_route(fwt_access, pbuf);
-	} else
-		pbuf += sprintf(pbuf, " (null)");
-
-	wrq->u.data.length = strlen(out_str);
-	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
-			 wrq->u.data.length)) {
-		lbs_deb_ioctl("FWT_LIST_ROUTE: Copy to user failed!\n");
-		return -EFAULT;
-	}
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          List an entry from the FNT table
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_list_neighbor_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	char in_str[8];
-	static struct cmd_ds_fwt_access fwt_access;
-	char *ptr = in_str;
-	static char out_str[128];
-	char *pbuf = out_str;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
-		return -EFAULT;
-
-	memset(&fwt_access, 0, sizeof(fwt_access));
-	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
-
-#ifdef DEBUG
-	{
-		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: line is %s\n", in_str);
-		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: listing id:%i\n", le32_to_cpu(fwt_access.id));
-	}
-#endif
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-				    cmd_act_fwt_access_list_neighbor,
-				    cmd_option_waitforrsp, 0,
-				    (void *)&fwt_access);
-
-	if (ret == 0) {
-		pbuf += sprintf(pbuf, " ra ");
-		pbuf += eth_addr2str(fwt_access.ra, pbuf);
-		pbuf += sprintf(pbuf, "  slp %u", fwt_access.sleepmode);
-		pbuf += sprintf(pbuf, "  snr %u", le32_to_cpu(fwt_access.snr));
-		pbuf += sprintf(pbuf, "  ref %u", le32_to_cpu(fwt_access.references));
-	} else
-		pbuf += sprintf(pbuf, " (null)");
-
-	wrq->u.data.length = strlen(out_str);
-	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
-			 wrq->u.data.length)) {
-		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: Copy to user failed!\n");
-		return -EFAULT;
-	}
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Cleans up the route (FRT) and neighbor (FNT) tables
- *                  (Garbage Collection)
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_cleanup_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	static struct cmd_ds_fwt_access fwt_access;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	lbs_deb_ioctl("FWT: cleaning up\n");
-
-	memset(&fwt_access, 0, sizeof(fwt_access));
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-				    cmd_act_fwt_access_cleanup,
-				    cmd_option_waitforrsp, 0,
-				    (void *)&fwt_access);
-
-	if (ret == 0)
-		wrq->u.param.value = le32_to_cpu(fwt_access.references);
-	else
-		return -EFAULT;
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Gets firmware internal time (debug purposes)
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_fwt_time_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	static struct cmd_ds_fwt_access fwt_access;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	lbs_deb_ioctl("FWT: getting time\n");
-
-	memset(&fwt_access, 0, sizeof(fwt_access));
-
-	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
-				    cmd_act_fwt_access_time,
-				    cmd_option_waitforrsp, 0,
-				    (void *)&fwt_access);
-
-	if (ret == 0)
-		wrq->u.param.value = le32_to_cpu(fwt_access.references);
-	else
-		return -EFAULT;
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Gets mesh ttl from firmware
- *  @param priv     A pointer to wlan_private structure
- *  @param req      A pointer to ifreq structure
- *  @return         0 --success, otherwise fail
- */
-static int wlan_mesh_get_ttl_ioctl(wlan_private * priv, struct ifreq *req)
-{
-	struct iwreq *wrq = (struct iwreq *)req;
-	struct cmd_ds_mesh_access mesh_access;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	memset(&mesh_access, 0, sizeof(mesh_access));
-
-	ret = libertas_prepare_and_send_command(priv, cmd_mesh_access,
-				    cmd_act_mesh_get_ttl,
-				    cmd_option_waitforrsp, 0,
-				    (void *)&mesh_access);
-
-	if (ret == 0)
-		wrq->u.param.value = le32_to_cpu(mesh_access.data[0]);
-	else
-		return -EFAULT;
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return 0;
-}
-
-/**
- *  @brief          Gets mesh ttl from firmware
- *  @param priv     A pointer to wlan_private structure
- *  @param ttl      New ttl value
- *  @return         0 --success, otherwise fail
- */
-static int wlan_mesh_set_ttl_ioctl(wlan_private * priv, int ttl)
-{
-	struct cmd_ds_mesh_access mesh_access;
-	int ret;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	if( (ttl > 0xff) || (ttl < 0) )
-		return -EINVAL;
-
-	memset(&mesh_access, 0, sizeof(mesh_access));
-	mesh_access.data[0] = cpu_to_le32(ttl);
-
-	ret = libertas_prepare_and_send_command(priv, cmd_mesh_access,
-						cmd_act_mesh_set_ttl,
-						cmd_option_waitforrsp, 0,
-						(void *)&mesh_access);
-
-	if (ret != 0)
-		ret = -EFAULT;
-
-	lbs_deb_leave(LBS_DEB_IOCTL);
-	return ret;
-}
-
-/**
- *  @brief ioctl function - entry point
- *
- *  @param dev		A pointer to net_device structure
- *  @param req	   	A pointer to ifreq structure
- *  @param cmd 		command
- *  @return 	   	0--success, otherwise fail
- */
-int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
-{
-	int subcmd = 0;
-	int idata = 0;
-	int *pdata;
-	int ret = 0;
-	wlan_private *priv = dev->priv;
-	wlan_adapter *adapter = priv->adapter;
-	struct iwreq *wrq = (struct iwreq *)req;
-
-	lbs_deb_enter(LBS_DEB_IOCTL);
-
-	lbs_deb_ioctl("libertas_do_ioctl: ioctl cmd = 0x%x\n", cmd);
-	switch (cmd) {
-	case WLAN_SETNONE_GETNONE:	/* set WPA mode on/off ioctl #20 */
-		switch (wrq->u.data.flags) {
-		case WLAN_SUBCMD_BT_RESET:	/* bt_reset */
-			wlan_bt_reset_ioctl(priv);
-			break;
-		case WLAN_SUBCMD_FWT_RESET:	/* fwt_reset */
-			wlan_fwt_reset_ioctl(priv);
-			break;
-		}		/* End of switch */
-		break;
-
-	case WLAN_SETONEINT_GETNONE:
-		/* The first 4 bytes of req->ifr_data is sub-ioctl number
-		 * after 4 bytes sits the payload.
-		 */
-		subcmd = wrq->u.data.flags;
-		if (!subcmd)
-			subcmd = (int)wrq->u.param.value;
-
-		switch (subcmd) {
-		case WLANSETREGION:
-			idata = SUBCMD_DATA(wrq);
-			ret = wlan_set_region(priv, (u16) idata);
-			break;
-		case WLAN_SUBCMD_MESH_SET_TTL:
-			idata = SUBCMD_DATA(wrq);
-			ret = wlan_mesh_set_ttl_ioctl(priv, idata);
-			break;
-
-		case WLAN_SUBCMD_BT_SET_INVERT:
-			ret = wlan_bt_set_invert_ioctl(priv, req);
-			break ;
-
-		default:
-			ret = -EOPNOTSUPP;
-			break;
-		}
-
-		break;
-
-	case WLAN_SET128CHAR_GET128CHAR:
-		switch ((int)wrq->u.data.flags) {
-		case WLAN_SUBCMD_BT_ADD:
-			ret = wlan_bt_add_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_BT_DEL:
-			ret = wlan_bt_del_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_BT_LIST:
-			ret = wlan_bt_list_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_ADD:
-			ret = wlan_fwt_add_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_DEL:
-			ret = wlan_fwt_del_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_LOOKUP:
-			ret = wlan_fwt_lookup_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_LIST_NEIGHBOR:
-			ret = wlan_fwt_list_neighbor_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_LIST:
-			ret = wlan_fwt_list_ioctl(priv, req);
-			break;
-		case WLAN_SUBCMD_FWT_LIST_ROUTE:
-			ret = wlan_fwt_list_route_ioctl(priv, req);
-			break;
-		}
-		break;
-
-	case WLAN_SETNONE_GETONEINT:
-		switch (wrq->u.param.value) {
-		case WLANGETREGION:
-			pdata = (int *)wrq->u.name;
-			*pdata = (int)adapter->regioncode;
-			break;
-		case WLAN_SUBCMD_FWT_CLEANUP:	/* fwt_cleanup */
-			ret = wlan_fwt_cleanup_ioctl(priv, req);
-			break;
-
-		case WLAN_SUBCMD_FWT_TIME:	/* fwt_time */
-			ret = wlan_fwt_time_ioctl(priv, req);
-			break;
-
-		case WLAN_SUBCMD_MESH_GET_TTL:
-			ret = wlan_mesh_get_ttl_ioctl(priv, req);
-			break;
-
-		case WLAN_SUBCMD_BT_GET_INVERT:
-			ret = wlan_bt_get_invert_ioctl(priv, req);
-			break ;
-
-		default:
-			ret = -EOPNOTSUPP;
-
-		}
-
-		break;
-
-	case WLAN_SET_GET_SIXTEEN_INT:
-		switch ((int)wrq->u.data.flags) {
-		case WLAN_LED_GPIO_CTRL:
-			{
-				int i;
-				int data[16];
-
-				struct cmd_ds_802_11_led_ctrl ctrl;
-				struct mrvlietypes_ledgpio *gpio =
-				    (struct mrvlietypes_ledgpio *) ctrl.data;
-
-				memset(&ctrl, 0, sizeof(ctrl));
-				if (wrq->u.data.length > MAX_LEDS * 2)
-					return -ENOTSUPP;
-				if ((wrq->u.data.length % 2) != 0)
-					return -ENOTSUPP;
-				if (wrq->u.data.length == 0) {
-					ctrl.action =
-					    cpu_to_le16
-					    (cmd_act_get);
-				} else {
-					if (copy_from_user
-					    (data, wrq->u.data.pointer,
-					     sizeof(int) *
-					     wrq->u.data.length)) {
-						lbs_deb_ioctl(
-						       "Copy from user failed\n");
-						return -EFAULT;
-					}
-
-					ctrl.action =
-					    cpu_to_le16
-					    (cmd_act_set);
-					ctrl.numled = cpu_to_le16(0);
-					gpio->header.type =
-					    cpu_to_le16(TLV_TYPE_LED_GPIO);
-					gpio->header.len = wrq->u.data.length;
-					for (i = 0; i < wrq->u.data.length;
-					     i += 2) {
-						gpio->ledpin[i / 2].led =
-						    data[i];
-						gpio->ledpin[i / 2].pin =
-						    data[i + 1];
-					}
-				}
-				ret =
-				    libertas_prepare_and_send_command(priv,
-							  cmd_802_11_led_gpio_ctrl,
-							  0,
-							  cmd_option_waitforrsp,
-							  0, (void *)&ctrl);
-				for (i = 0; i < gpio->header.len; i += 2) {
-					data[i] = gpio->ledpin[i / 2].led;
-					data[i + 1] = gpio->ledpin[i / 2].pin;
-				}
-				if (copy_to_user(wrq->u.data.pointer, data,
-						 sizeof(int) *
-						 gpio->header.len)) {
-					lbs_deb_ioctl("Copy to user failed\n");
-					return -EFAULT;
-				}
-
-				wrq->u.data.length = gpio->header.len;
-			}
-			break;
-		}
-		break;
-
-	default:
-		ret = -EINVAL;
-		break;
-	}
-
-	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
-	return ret;
-}
-
-
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 623ab4b..4a59306 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -181,7 +181,8 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
  * @brief Get function for sysfs attribute anycast_mask
  */
 static ssize_t libertas_anycast_get(struct device * dev,
-		struct device_attribute *attr, char * buf) {
+		struct device_attribute *attr, char * buf)
+{
 	struct cmd_ds_mesh_access mesh_access;
 
 	memset(&mesh_access, 0, sizeof(mesh_access));
@@ -197,7 +198,8 @@ static ssize_t libertas_anycast_get(struct device * dev,
  * @brief Set function for sysfs attribute anycast_mask
  */
 static ssize_t libertas_anycast_set(struct device * dev,
-		struct device_attribute *attr, const char * buf, size_t count) {
+		struct device_attribute *attr, const char * buf, size_t count)
+{
 	struct cmd_ds_mesh_access mesh_access;
 	uint32_t datum;
 
@@ -799,7 +801,6 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev)
 	dev->open = wlan_open;
 	dev->hard_start_xmit = wlan_pre_start_xmit;
 	dev->stop = wlan_close;
-	dev->do_ioctl = libertas_do_ioctl;
 	dev->set_mac_address = wlan_set_mac_address;
 	dev->tx_timeout = wlan_tx_timeout;
 	dev->get_stats = wlan_get_stats;
@@ -918,7 +919,6 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
 	mesh_dev->open = mesh_open;
 	mesh_dev->hard_start_xmit = mesh_pre_start_xmit;
 	mesh_dev->stop = mesh_close;
-	mesh_dev->do_ioctl = libertas_do_ioctl;
 	mesh_dev->get_stats = wlan_get_stats;
 	mesh_dev->set_mac_address = wlan_set_mac_address;
 	mesh_dev->ethtool_ops = &libertas_ethtool_ops;
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
index 606af50..c3043dc 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -215,38 +215,6 @@ done:
 }
 
 /**
- *  @brief Post process the scan table after a new scan command has completed
- *
- *  Inspect each entry of the scan table and try to find an entry that
- *    matches our current associated/joined network from the scan.  If
- *    one is found, update the stored copy of the bssdescriptor for our
- *    current network.
- *
- *  Debug dump the current scan table contents if compiled accordingly.
- *
- *  @param priv   A pointer to wlan_private structure
- *
- *  @return       void
- */
-static void wlan_scan_process_results(wlan_private * priv)
-{
-	wlan_adapter *adapter = priv->adapter;
-	struct bss_descriptor * iter_bss;
-	int i = 0;
-
-	if (adapter->connect_status == libertas_connected)
-		return;
-
-	mutex_lock(&adapter->lock);
-	list_for_each_entry (iter_bss, &adapter->network_list, list) {
-		lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
-		       i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
-		       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
-	}
-	mutex_unlock(&adapter->lock);
-}
-
-/**
  *  @brief Create a channel list for the driver to scan based on region info
  *
  *  Use the driver region/band information to construct a comprehensive list
@@ -791,6 +759,10 @@ int wlan_scan_networks(wlan_private * priv,
 	u8 scancurrentchanonly;
 	int maxchanperscan;
 	int ret;
+#ifdef CONFIG_LIBERTAS_DEBUG
+	struct bss_descriptor * iter_bss;
+	int i = 0;
+#endif
 
 	lbs_deb_enter(LBS_DEB_ASSOC);
 
@@ -832,11 +804,16 @@ int wlan_scan_networks(wlan_private * priv,
 				     puserscanin,
 				     full_scan);
 
-	/*  Process the resulting scan table:
-	 *    - Remove any bad ssids
-	 *    - Update our current BSS information from scan data
-	 */
-	wlan_scan_process_results(priv);
+#ifdef CONFIG_LIBERTAS_DEBUG
+	/* Dump the scan table */
+	mutex_lock(&adapter->lock);
+	list_for_each_entry (iter_bss, &adapter->network_list, list) {
+		lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
+		       i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
+		       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
+	}
+	mutex_unlock(&adapter->lock);
+#endif
 
 	if (priv->adapter->connect_status == libertas_connected) {
 		netif_carrier_on(priv->dev);
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index 8939251..f42b796 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -913,148 +913,6 @@ out:
 	return 0;
 }
 
-/*
- * iwpriv settable callbacks
- */
-
-static const iw_handler wlan_private_handler[] = {
-	NULL,			/* SIOCIWFIRSTPRIV */
-};
-
-static const struct iw_priv_args wlan_private_args[] = {
-	/*
-	 * { cmd, set_args, get_args, name }
-	 */
-	/* Using iwpriv sub-command feature */
-	{
-	 WLAN_SETONEINT_GETNONE,	/* IOCTL: 24 */
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 IW_PRIV_TYPE_NONE,
-	 ""},
-	{
-	 WLANSETREGION,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 IW_PRIV_TYPE_NONE,
-	 "setregioncode"},
-	{
-	 WLAN_SUBCMD_MESH_SET_TTL,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 IW_PRIV_TYPE_NONE,
-	 "mesh_set_ttl"},
-	{
-	 WLAN_SETNONE_GETONEINT,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 ""},
-	{
-	 WLANGETREGION,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 "getregioncode"},
-	{
-	 WLAN_SUBCMD_FWT_CLEANUP,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 "fwt_cleanup"},
-	{
-	 WLAN_SUBCMD_FWT_TIME,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 "fwt_time"},
-	{
-	 WLAN_SUBCMD_MESH_GET_TTL,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 "mesh_get_ttl"},
-	{
-	 WLAN_SETNONE_GETNONE,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_NONE,
-	 ""},
-	{
-	 WLAN_SUBCMD_FWT_RESET,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_NONE,
-	 "fwt_reset"},
-	{
-	 WLAN_SUBCMD_BT_RESET,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_NONE,
-	 "bt_reset"},
-	{
-	 WLAN_SET128CHAR_GET128CHAR,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 ""},
-	/* BT Management */
-	{
-	 WLAN_SUBCMD_BT_ADD,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "bt_add"},
-	{
-	 WLAN_SUBCMD_BT_DEL,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "bt_del"},
-	{
-	 WLAN_SUBCMD_BT_LIST,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "bt_list"},
-	{
-	 WLAN_SUBCMD_BT_SET_INVERT,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 IW_PRIV_TYPE_NONE,
-	 "bt_set_invert"},
-	{
-	 WLAN_SUBCMD_BT_GET_INVERT,
-	 IW_PRIV_TYPE_NONE,
-	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-	 "bt_get_invert"},
-	/* FWT Management */
-	{
-	 WLAN_SUBCMD_FWT_ADD,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_add"},
-	{
-	 WLAN_SUBCMD_FWT_DEL,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_del"},
-	{
-	 WLAN_SUBCMD_FWT_LOOKUP,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_lookup"},
-	{
-	 WLAN_SUBCMD_FWT_LIST_NEIGHBOR,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_list_neigh"},
-	{
-	 WLAN_SUBCMD_FWT_LIST,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_list"},
-	{
-	 WLAN_SUBCMD_FWT_LIST_ROUTE,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 IW_PRIV_TYPE_CHAR | 128,
-	 "fwt_list_route"},
-	{
-	 WLAN_SET_GET_SIXTEEN_INT,
-	 IW_PRIV_TYPE_INT | 16,
-	 IW_PRIV_TYPE_INT | 16,
-	 ""},
-	{
-	 WLAN_LED_GPIO_CTRL,
-	 IW_PRIV_TYPE_INT | 16,
-	 IW_PRIV_TYPE_INT | 16,
-	 "ledgpio"},
-};
-
 static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
 {
 	enum {
@@ -2444,22 +2302,12 @@ static const iw_handler mesh_wlan_handler[] = {
 };
 struct iw_handler_def libertas_handler_def = {
 	.num_standard	= sizeof(wlan_handler) / sizeof(iw_handler),
-	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
-	.num_private_args = sizeof(wlan_private_args) /
-		sizeof(struct iw_priv_args),
 	.standard	= (iw_handler *) wlan_handler,
-	.private	= (iw_handler *) wlan_private_handler,
-	.private_args	= (struct iw_priv_args *)wlan_private_args,
 	.get_wireless_stats = wlan_get_wireless_stats,
 };
 
 struct iw_handler_def mesh_handler_def = {
 	.num_standard	= sizeof(mesh_wlan_handler) / sizeof(iw_handler),
-	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
-	.num_private_args = sizeof(wlan_private_args) /
-		sizeof(struct iw_priv_args),
 	.standard	= (iw_handler *) mesh_wlan_handler,
-	.private	= (iw_handler *) wlan_private_handler,
-	.private_args	= (struct iw_priv_args *)wlan_private_args,
 	.get_wireless_stats = wlan_get_wireless_stats,
 };
diff --git a/drivers/net/wireless/libertas/wext.h b/drivers/net/wireless/libertas/wext.h
index d555056..3d5196c 100644
--- a/drivers/net/wireless/libertas/wext.h
+++ b/drivers/net/wireless/libertas/wext.h
@@ -7,45 +7,6 @@
 #define SUBCMD_OFFSET			4
 #define SUBCMD_DATA(x)			*((int *)(x->u.name + SUBCMD_OFFSET))
 
-/** PRIVATE CMD ID */
-#define	WLANIOCTL			SIOCIWFIRSTPRIV
-
-#define WLAN_SETNONE_GETNONE	        (WLANIOCTL + 8)
-#define WLAN_SUBCMD_BT_RESET			13
-#define WLAN_SUBCMD_FWT_RESET			14
-
-#define WLAN_SETNONE_GETONEINT		(WLANIOCTL + 15)
-#define WLANGETREGION				1
-
-#define WLAN_SUBCMD_FWT_CLEANUP			15
-#define WLAN_SUBCMD_FWT_TIME			16
-#define WLAN_SUBCMD_MESH_GET_TTL		17
-#define WLAN_SUBCMD_BT_GET_INVERT		18
-
-#define WLAN_SETONEINT_GETNONE		(WLANIOCTL + 24)
-#define WLANSETREGION				8
-#define WLAN_SUBCMD_MESH_SET_TTL		18
-#define WLAN_SUBCMD_BT_SET_INVERT		19
-
-#define WLAN_SET128CHAR_GET128CHAR	(WLANIOCTL + 25)
-#define WLAN_SUBCMD_BT_ADD			18
-#define WLAN_SUBCMD_BT_DEL   			19
-#define WLAN_SUBCMD_BT_LIST			20
-#define WLAN_SUBCMD_FWT_ADD			21
-#define WLAN_SUBCMD_FWT_DEL   			22
-#define WLAN_SUBCMD_FWT_LOOKUP			23
-#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR		24
-#define WLAN_SUBCMD_FWT_LIST			25
-#define WLAN_SUBCMD_FWT_LIST_ROUTE		26
-
-#define WLAN_SET_GET_SIXTEEN_INT       (WLANIOCTL + 29)
-#define WLAN_LED_GPIO_CTRL			5
-
-#define WLAN_LINKMODE_802_3			0
-#define WLAN_LINKMODE_802_11			2
-#define WLAN_RADIOMODE_NONE    			0
-#define WLAN_RADIOMODE_RADIOTAP			2
-
 /** wlan_ioctl_regrdwr */
 struct wlan_ioctl_regrdwr {
 	/** Which register to access */
@@ -57,9 +18,13 @@ struct wlan_ioctl_regrdwr {
 	u32 value;
 };
 
+#define WLAN_LINKMODE_802_3			0
+#define WLAN_LINKMODE_802_11			2
+#define WLAN_RADIOMODE_NONE			0
+#define WLAN_RADIOMODE_RADIOTAP			2
+
 extern struct iw_handler_def libertas_handler_def;
 extern struct iw_handler_def mesh_handler_def;
-int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
 int wlan_radio_ioctl(wlan_private * priv, u8 option);
 
 #endif				/* _WLAN_WEXT_H_ */
-- 
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-fixes' branch of wireless-2.6
       [not found] ` <20070627205539.GB13617-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-07-02 11:07   ` Dan Williams
  0 siblings, 0 replies; 19+ messages in thread
From: Dan Williams @ 2007-07-02 11:07 UTC (permalink / raw)
  To: jeff-o2qLIJkoznsdnm+yROfE0A
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA, John W. Linville

On Wed, 2007-06-27 at 16:55 -0400, John W. Linville wrote:
> The following changes since commit 189548642c5962e60c3667bdb3a703fe0bed12a6:
>   Linus Torvalds (1):
>         Linus 2.6.22-rc6

Jeff,

These don't look like they made it into rc7 at all; we don't really want
the ioctls leaking out into kernel ABI, which these fixes remove...

Thanks,
Dan


> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes
> 
> Dan Williams (4):
>       libertas: style fixes
>       libertas: kill wlan_scan_process_results
>       libertas: fix WPA associations by handling ENABLE_RSN correctly
>       libertas: remove private ioctls
> 
>  drivers/net/wireless/libertas/Makefile  |    2 +-
>  drivers/net/wireless/libertas/README    |  275 --------
>  drivers/net/wireless/libertas/assoc.c   |   28 +-
>  drivers/net/wireless/libertas/cmd.c     |   12 +-
>  drivers/net/wireless/libertas/cmdresp.c |   21 +
>  drivers/net/wireless/libertas/hostcmd.h |    2 +-
>  drivers/net/wireless/libertas/ioctl.c   | 1081 -------------------------------
>  drivers/net/wireless/libertas/main.c    |    8 +-
>  drivers/net/wireless/libertas/scan.c    |   51 +--
>  drivers/net/wireless/libertas/wext.c    |  152 -----
>  drivers/net/wireless/libertas/wext.h    |   45 +--
>  11 files changed, 79 insertions(+), 1598 deletions(-)
>  delete mode 100644 drivers/net/wireless/libertas/ioctl.c
> 
> diff --git a/drivers/net/wireless/libertas/Makefile b/drivers/net/wireless/libertas/Makefile
> index a1097f5..32ed413 100644
> --- a/drivers/net/wireless/libertas/Makefile
> +++ b/drivers/net/wireless/libertas/Makefile
> @@ -2,7 +2,7 @@ libertas-objs := main.o fw.o wext.o \
>  		rx.o tx.o cmd.o 	  \
>  		cmdresp.o scan.o	  \
>  		join.o 11d.o 		  \
> -		ioctl.o debugfs.o	  \
> +		debugfs.o	  \
>  		ethtool.o assoc.o
>  
>  usb8xxx-objs += if_bootcmd.o
> diff --git a/drivers/net/wireless/libertas/README b/drivers/net/wireless/libertas/README
> index 1f92f50..0b133ce 100644
> --- a/drivers/net/wireless/libertas/README
> +++ b/drivers/net/wireless/libertas/README
> @@ -28,281 +28,6 @@ DRIVER LOADING
>  
>  		insmod usb8388.ko [fw_name=usb8388.bin]
>  
> -=====================
> -IWPRIV COMMAND
> -=====================
> -
> -NAME
> -	This manual describes the usage of private commands used in Marvell WLAN
> -	Linux Driver. All the commands available in Wlanconfig will not be available
> -	in the iwpriv.
> -
> -SYNOPSIS
> -	iwpriv <ethX> <command> [sub-command] ...
> -
> -	iwpriv ethX setregioncode <n>
> -	iwpriv ethX getregioncode
> -
> -Version 5 Command:
> -	iwpriv ethX ledgpio <n>
> -
> -BT Commands:
> -	The blinding table (BT) contains a list of mac addresses that will be,
> -	by default, ignored by the firmware. It is also possible to invert this
> -	behavior so that we will ignore all traffic except for the portion
> -	coming from mac addresess in the list. It is primarily used for
> -	debugging and testing networks.  It can be edited and inspected with
> -	the following commands:
> -
> -	iwpriv ethX bt_reset
> -	iwpriv ethX bt_add <mac_address>
> -	iwpriv ethX bt_del <mac_address>
> -	iwpriv ethX bt_list <id>
> -	iwpriv ethX bt_get_invert <n>
> -	iwpriv ethX bt_set_invert <n>
> -
> -FWT Commands:
> -	The forwarding table (FWT) is a feature used to manage mesh network
> -	routing in the firmware.  The FWT is essentially a routing table that
> -	associates a destination mac address (da) with a next hop receiver
> -	address (ra).  The FWT can be inspected and edited with the following
> -	iwpriv commands, which are described in greater detail below.
> -	Eventually, the table will be automatically maintained by a custom
> -	routing protocol.
> -
> -	NOTE: FWT commands replace the previous DFT commands.  What were the DFT
> -	commands?, you might ask.  They were an earlier API to the firmware that
> -	implemented a simple MAC-layer forwarding mechanism.  In the unlikely
> -	event that you were using these commands, you must migrate to the new
> -	FWT commands which can be used to achieve the same functionality.
> -
> -	iwpriv ethX fwt_add [parameters]
> -	iwpriv ethX fwt_del [parameters]
> -	iwpriv ethX fwt_lookup [parameters]
> -	iwpriv ethX fwt_list [parameters]
> -	iwpriv ethX fwt_list_route [parameters]
> -	iwpriv ethX fwt_list_neigh [parameters]
> -	iwpriv ethX fwt_reset [parameters]
> -	iwpriv ethX fwt_cleanup
> -	iwpriv ethX fwt_time
> -
> -MESH Commands:
> -
> -	The MESH commands are used to configure various features of the mesh
> -	routing protocol.  The following commands are supported:
> -
> -	iwpriv ethX mesh_get_ttl
> -	iwpriv ethX mesh_set_ttl ttl
> -
> -DESCRIPTION
> -	Those commands are used to send additional commands to the Marvell WLAN
> -	card via the Linux device driver.
> -
> -	The ethX parameter specifies the network device that is to be used to
> -		perform this command on. it could be eth0, eth1 etc.
> -
> -setregioncode
> -	This command is used to set the region code in the station.
> -	where value is 'region code' for various regions like
> -	USA FCC, Canada IC, Spain, France, Europe ETSI,	Japan ...
> -
> -	Usage:
> -		iwpriv ethX setregioncode 0x10: set region code to USA (0x10).
> -
> -getregioncode
> -	This command is used to get the region code information set in the
> -	station.
> -
> -ledgpio
> -	This command is used to set/get LEDs.
> -
> -	iwpriv ethX ledgpio <LEDs>
> -		will set the corresponding LED for the GPIO Line.
> -
> -	iwpriv ethX ledgpio
> -		will give u which LEDs are Enabled.
> -
> -	Usage:
> -		iwpriv eth1 ledgpio 1 0 2 1 3 4
> -			will enable
> -			LED 1 -> GPIO 0
> -			LED 2 -> GPIO 1
> -			LED 3 -> GPIO 4
> -
> -		iwpriv eth1 ledgpio
> -			shows LED information in the format as mentioned above.
> -
> -	Note: LED0 is invalid
> -	Note: Maximum Number of LEDs are 16.
> -
> -fwt_add
> -	This command is used to insert an entry into the FWT table. The list of
> -	parameters must follow the following structure:
> -
> -	iwpriv ethX fwt_add da ra [metric dir rate ssn dsn hopcount ttl expiration sleepmode snr]
> -
> -	The parameters between brackets are optional, but they must appear in
> -	the order specified.  For example, if you want to specify the metric,
> -	you must also specify the dir, ssn, and dsn but you need not specify the
> -	hopcount, expiration, sleepmode, or snr.  Any unspecified parameters
> -	will be assigned the defaults specified below.
> -
> -	The different parameters are:-
> -		da		-- DA MAC address in the form 00:11:22:33:44:55
> -		ra		-- RA MAC address in the form 00:11:22:33:44:55
> -		metric		-- route metric (cost: smaller-metric routes are
> -				   preferred, default is 0)
> -		dir		-- direction (1 for direct, 0 for reverse,
> -				   default is 1)
> -		rate		-- data rate used for transmission to the RA,
> -				   as specified for the rateadapt command,
> -				   default is 3 (11Mbps)
> -		ssn		-- Source Sequence Number (time at the RA for
> -				   reverse routes.  Default is 0)
> -		dsn		-- Destination Sequence Number (time at the DA
> -				   for direct routes.  Default is 0)
> -		hopcount	-- hop count (currently unused, default is 0)
> -		ttl		-- TTL (Only used in reverse entries)
> -		expiration	-- entry expiration (in ticks, where a tick is
> -				   1024us, or ~ 1ms. Use 0 for an indefinite
> -				   entry, default is 0)
> -		sleepmode	-- RA's sleep mode (currently unused, default is
> -				   0)
> -		snr		-- SNR in the link to RA (currently unused,
> -				   default is 0)
> -
> -	The command does not return anything.
> -
> -fwt_del
> -	This command is used to remove an entry to the FWT table. The list of
> -	parameters must follow the following structure:
> -
> -		iwpriv ethX fwt_del da ra [dir]
> -
> -	where the different parameters are:-
> -		da		-- DA MAC address (in the form "00:11:22:33:44:55")
> -		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
> -		dir		-- direction (1 for direct, 0 for reverse,
> -				   default is 1)
> -
> -	The command does not return anything.
> -
> -fwt_lookup
> -	This command is used to get the best route in the FWT table to a given
> -	host. The only parameter is the MAC address of the host that is being
> -	looked for.
> -
> -		iwpriv ethX fwt_lookup da
> -
> -	where:-
> -		da		-- DA MAC address (in the form "00:11:22:33:44:55")
> -
> -	The command returns an output string identical to the one returned by
> -	fwt_list described below.
> -
> -
> -fwt_list
> -	This command is used to list a route from the FWT table. The only
> -	parameter is the index into the table. If you want to list all the
> -	routes in a table, start with index=0, and keep listing until you get a
> -	"(null)" string.  Note that the indicies may change as the fwt is
> -	updated.  It is expected that most users will not use fwt_list directly,
> -	but that a utility similar to the traditional route command will be used
> -	to invoke fwt_list over and over.
> -
> -		iwpriv ethX fwt_list index
> -
> -	The output is a string of the following form:
> -
> -		da ra valid metric dir rate ssn dsn hopcount ttl expiration
> -		sleepmode snr precursor
> -
> -	where the different fields are:-
> -		da		-- DA MAC address (in the form "00:11:22:33:44:55")
> -		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
> -		valid		-- whether the route is valid (0 if not valid)
> -		metric		-- route metric (cost: smaller-metric routes are preferred)
> -		dir		-- direction (1 for direct, 0 for reverse)
> -		rate		-- data rate used for transmission to the RA,
> -				   as specified for the rateadapt command
> -		ssn		-- Source Sequence Number (time at the RA for reverse routes)
> -		dsn		-- Destination Sequence Number (time at the DA for direct routes)
> -		hopcount	-- hop count (currently unused)
> -		ttl		-- TTL (only used in reverse entries)
> -		expiration	-- entry expiration (in ticks, where a tick is 1024us, or ~ 1ms. Use 0 for an indefinite entry)
> -		sleepmode	-- RA's sleep mode (currently unused)
> -		snr		-- SNR in the link to RA (currently unused)
> -		precursor	-- predecessor in direct routes
> -
> -fwt_list_route
> -	This command is equivalent to fwt_list.
> -
> -fwt_list_neigh
> -	This command is used to list a neighbor from the FWT table. The only
> -	parameter is the neighbor ID. If you want to list all the neighbors in a
> -	table, start with nid=0, and keep incrementing nid until you get a
> -	"(null)" string.  Note that the nid from a fwt_list_route command can be
> -	used as an input to this command.  Also note that this command is meant
> -	mostly for debugging.  It is expected that users will use fwt_lookup.
> -	One important reason for this is that the neighbor id may change as the
> -	neighbor table is altered.
> -
> -		iwpriv ethX fwt_list_neigh nid
> -
> -	The output is a string of the following form:
> -
> -		ra sleepmode snr references
> -
> -	where the different fields are:-
> -		ra		-- RA MAC address (in the form "00:11:22:33:44:55")
> -		sleepmode	-- RA's sleep mode (currently unused)
> -		snr		-- SNR in the link to RA (currently unused)
> -		references	-- RA's reference counter
> -
> -fwt_reset
> -	This command is used to reset the FWT table, getting rid of all the
> -	entries. There are no input parameters.
> -
> -		iwpriv ethX fwt_reset
> -
> -	The command does not return anything.
> -
> -fwt_cleanup
> -	This command is used to perform user-based garbage recollection. The
> -	FWT table is checked, and all the entries that are expired or invalid
> -	are cleaned. Note that this is exported to the driver for debugging
> -	purposes, as garbage collection is also fired by the firmware when in
> -	space problems. There are no input parameters.
> -
> -		iwpriv ethX fwt_cleanup
> -
> -	The command does returns the number of invalid/expired routes deleted.
> -
> -fwt_time
> -	This command returns a card's internal time representation.  It is this
> -	time that is used to represent the expiration times of FWT entries.  The
> -	number is not consistent from card to card; it is simply a timer count.
> -	The fwt_time command is used to inspect the timer so that expiration
> -	times reported by fwt_list can be properly interpreted.
> -
> -		iwpriv ethX fwt_time
> -
> -mesh_get_ttl
> -
> -	The mesh ttl is the number of hops a mesh packet can traverse before it
> -	is dropped.  This parameter is used to prevent infinite loops in the
> -	mesh network.  The value returned by this function is the ttl assigned
> -	to all mesh packets.  Currently there is no way to control the ttl on a
> -	per packet or per socket basis.
> -
> -	iwpriv ethX mesh_get_ttl
> -
> -mesh_set_ttl ttl
> -
> -	Set the ttl.  The argument must be between 0 and 255.
> -
> -	iwpriv ethX mesh_set_ttl <ttl>
> -
>  =========================
>  ETHTOOL
>  =========================
> diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
> index f67efa0..afd5617 100644
> --- a/drivers/net/wireless/libertas/assoc.c
> +++ b/drivers/net/wireless/libertas/assoc.c
> @@ -323,6 +323,8 @@ static int assoc_helper_secinfo(wlan_private *priv,
>  {
>  	wlan_adapter *adapter = priv->adapter;
>  	int ret = 0;
> +	u32 do_wpa;
> +	u32 rsn = 0;
>  
>  	lbs_deb_enter(LBS_DEB_ASSOC);
>  
> @@ -333,12 +335,34 @@ static int assoc_helper_secinfo(wlan_private *priv,
>  	if (ret)
>  		goto out;
>  
> -	/* enable/disable RSN */
> +	/* If RSN is already enabled, don't try to enable it again, since
> +	 * ENABLE_RSN resets internal state machines and will clobber the
> +	 * 4-way WPA handshake.
> +	 */
> +
> +	/* Get RSN enabled/disabled */
>  	ret = libertas_prepare_and_send_command(priv,
>  				    cmd_802_11_enable_rsn,
>  				    cmd_act_set,
>  				    cmd_option_waitforrsp,
> -				    0, assoc_req);
> +				    0, &rsn);
> +	if (ret) {
> +		lbs_deb_assoc("Failed to get RSN status: %d", ret);
> +		goto out;
> +	}
> +
> +	/* Don't re-enable RSN if it's already enabled */
> +	do_wpa = (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled);
> +	if (do_wpa == rsn)
> +		goto out;
> +
> +	/* Set RSN enabled/disabled */
> +	rsn = do_wpa;
> +	ret = libertas_prepare_and_send_command(priv,
> +				    cmd_802_11_enable_rsn,
> +				    cmd_act_set,
> +				    cmd_option_waitforrsp,
> +				    0, &rsn);
>  
>  out:
>  	lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
> diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
> index 124e029..13f6528 100644
> --- a/drivers/net/wireless/libertas/cmd.c
> +++ b/drivers/net/wireless/libertas/cmd.c
> @@ -228,17 +228,19 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
>  				      void * pdata_buf)
>  {
>  	struct cmd_ds_802_11_enable_rsn *penableRSN = &cmd->params.enbrsn;
> -	struct assoc_request * assoc_req = pdata_buf;
> +	u32 * enable = pdata_buf;
>  
>  	lbs_deb_enter(LBS_DEB_CMD);
>  
>  	cmd->command = cpu_to_le16(cmd_802_11_enable_rsn);
>  	cmd->size = cpu_to_le16(sizeof(*penableRSN) + S_DS_GEN);
>  	penableRSN->action = cpu_to_le16(cmd_action);
> -	if (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled) {
> -		penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
> -	} else {
> -		penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
> +
> +	if (cmd_action == cmd_act_set) {
> +		if (*enable)
> +			penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
> +		else
> +			penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
>  	}
>  
>  	lbs_deb_leave(LBS_DEB_CMD);
> diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
> index 0c3b9a5..6ac0d47 100644
> --- a/drivers/net/wireless/libertas/cmdresp.c
> +++ b/drivers/net/wireless/libertas/cmdresp.c
> @@ -537,6 +537,24 @@ static int wlan_ret_get_log(wlan_private * priv,
>  	return 0;
>  }
>  
> +static int libertas_ret_802_11_enable_rsn(wlan_private * priv,
> +                                          struct cmd_ds_command *resp)
> +{
> +	struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn;
> +	wlan_adapter *adapter = priv->adapter;
> +	u32 * pdata_buf = adapter->cur_cmd->pdata_buf;
> +
> +	lbs_deb_enter(LBS_DEB_CMD);
> +
> +	if (enable_rsn->action == cpu_to_le16(cmd_act_get)) {
> +		if (pdata_buf)
> +			*pdata_buf = (u32) le16_to_cpu(enable_rsn->enable);
> +	}
> +
> +	lbs_deb_enter(LBS_DEB_CMD);
> +	return 0;
> +}
> +
>  static inline int handle_cmd_response(u16 respcmd,
>  				      struct cmd_ds_command *resp,
>  				      wlan_private *priv)
> @@ -610,7 +628,10 @@ static inline int handle_cmd_response(u16 respcmd,
>  	case cmd_ret_802_11_authenticate:
>  	case cmd_ret_802_11_radio_control:
>  	case cmd_ret_802_11_beacon_stop:
> +		break;
> +
>  	case cmd_ret_802_11_enable_rsn:
> +		ret = libertas_ret_802_11_enable_rsn(priv, resp);
>  		break;
>  
>  	case cmd_ret_802_11_data_rate:
> diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h
> index 3acf939..09b898f 100644
> --- a/drivers/net/wireless/libertas/hostcmd.h
> +++ b/drivers/net/wireless/libertas/hostcmd.h
> @@ -503,7 +503,7 @@ struct cmd_ds_802_11_ad_hoc_join {
>  struct cmd_ds_802_11_enable_rsn {
>  	__le16 action;
>  	__le16 enable;
> -};
> +} __attribute__ ((packed));
>  
>  struct MrvlIEtype_keyParamSet {
>  	/* type ID */
> diff --git a/drivers/net/wireless/libertas/ioctl.c b/drivers/net/wireless/libertas/ioctl.c
> deleted file mode 100644
> index f410815..0000000
> --- a/drivers/net/wireless/libertas/ioctl.c
> +++ /dev/null
> @@ -1,1081 +0,0 @@
> -/**
> -  * This file contains ioctl functions
> -  */
> -
> -#include <linux/ctype.h>
> -#include <linux/delay.h>
> -#include <linux/if.h>
> -#include <linux/if_arp.h>
> -#include <linux/wireless.h>
> -
> -#include <net/iw_handler.h>
> -#include <net/ieee80211.h>
> -
> -#include "host.h"
> -#include "radiotap.h"
> -#include "decl.h"
> -#include "defs.h"
> -#include "dev.h"
> -#include "join.h"
> -#include "wext.h"
> -
> -#define MAX_SCAN_CELL_SIZE      (IW_EV_ADDR_LEN + \
> -				IW_ESSID_MAX_SIZE + \
> -				IW_EV_UINT_LEN + IW_EV_FREQ_LEN + \
> -				IW_EV_QUAL_LEN + IW_ESSID_MAX_SIZE + \
> -				IW_EV_PARAM_LEN + 40)	/* 40 for WPAIE */
> -
> -#define WAIT_FOR_SCAN_RRESULT_MAX_TIME (10 * HZ)
> -
> -static int wlan_set_region(wlan_private * priv, u16 region_code)
> -{
> -	int i;
> -	int ret = 0;
> -
> -	for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) {
> -		// use the region code to search for the index
> -		if (region_code == libertas_region_code_to_index[i]) {
> -			priv->adapter->regiontableindex = (u16) i;
> -			priv->adapter->regioncode = region_code;
> -			break;
> -		}
> -	}
> -
> -	// if it's unidentified region code
> -	if (i >= MRVDRV_MAX_REGION_CODE) {
> -		lbs_deb_ioctl("region Code not identified\n");
> -		ret = -1;
> -		goto done;
> -	}
> -
> -	if (libertas_set_regiontable(priv, priv->adapter->regioncode, 0)) {
> -		ret = -EINVAL;
> -	}
> -
> -done:
> -	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
> -	return ret;
> -}
> -
> -static inline int hex2int(char c)
> -{
> -	if (c >= '0' && c <= '9')
> -		return (c - '0');
> -	if (c >= 'a' && c <= 'f')
> -		return (c - 'a' + 10);
> -	if (c >= 'A' && c <= 'F')
> -		return (c - 'A' + 10);
> -	return -1;
> -}
> -
> -/* Convert a string representation of a MAC address ("xx:xx:xx:xx:xx:xx")
> -   into binary format (6 bytes).
> -
> -   This function expects that each byte is represented with 2 characters
> -   (e.g., 11:2:11:11:11:11 is invalid)
> -
> - */
> -static char *eth_str2addr(char *ethstr, u8 * addr)
> -{
> -	int i, val, val2;
> -	char *pos = ethstr;
> -
> -	/* get rid of initial blanks */
> -	while (*pos == ' ' || *pos == '\t')
> -		++pos;
> -
> -	for (i = 0; i < 6; i++) {
> -		val = hex2int(*pos++);
> -		if (val < 0)
> -			return NULL;
> -		val2 = hex2int(*pos++);
> -		if (val2 < 0)
> -			return NULL;
> -		addr[i] = (val * 16 + val2) & 0xff;
> -
> -		if (i < 5 && *pos++ != ':')
> -			return NULL;
> -	}
> -	return pos;
> -}
> -
> -/* this writes xx:xx:xx:xx:xx:xx into ethstr
> -   (ethstr must have space for 18 chars) */
> -static int eth_addr2str(u8 * addr, char *ethstr)
> -{
> -	int i;
> -	char *pos = ethstr;
> -
> -	for (i = 0; i < 6; i++) {
> -		sprintf(pos, "%02x", addr[i] & 0xff);
> -		pos += 2;
> -		if (i < 5)
> -			*pos++ = ':';
> -	}
> -	return 17;
> -}
> -
> -/**
> - *  @brief          Add an entry to the BT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_add_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char ethaddrs_str[18];
> -	char *pos;
> -	u8 ethaddr[ETH_ALEN];
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(ethaddrs_str, wrq->u.data.pointer,
> -			   sizeof(ethaddrs_str)))
> -		return -EFAULT;
> -
> -	if ((pos = eth_str2addr(ethaddrs_str, ethaddr)) == NULL) {
> -		lbs_pr_info("BT_ADD: Invalid MAC address\n");
> -		return -EINVAL;
> -	}
> -
> -	lbs_deb_ioctl("BT: adding %s\n", ethaddrs_str);
> -	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
> -				      cmd_act_bt_access_add,
> -				      cmd_option_waitforrsp, 0, ethaddr);
> -	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
> -	return ret;
> -}
> -
> -/**
> - *  @brief          Delete an entry from the BT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_del_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char ethaddrs_str[18];
> -	u8 ethaddr[ETH_ALEN];
> -	char *pos;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(ethaddrs_str, wrq->u.data.pointer,
> -			   sizeof(ethaddrs_str)))
> -		return -EFAULT;
> -
> -	if ((pos = eth_str2addr(ethaddrs_str, ethaddr)) == NULL) {
> -		lbs_pr_info("Invalid MAC address\n");
> -		return -EINVAL;
> -	}
> -
> -	lbs_deb_ioctl("BT: deleting %s\n", ethaddrs_str);
> -
> -	return (libertas_prepare_and_send_command(priv,
> -				      cmd_bt_access,
> -				      cmd_act_bt_access_del,
> -				      cmd_option_waitforrsp, 0, ethaddr));
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Reset all entries from the BT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_reset_ioctl(wlan_private * priv)
> -{
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	lbs_pr_alert( "BT: resetting\n");
> -
> -	return (libertas_prepare_and_send_command(priv,
> -				      cmd_bt_access,
> -				      cmd_act_bt_access_reset,
> -				      cmd_option_waitforrsp, 0, NULL));
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          List an entry from the BT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	int pos;
> -	char *addr1;
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	/* used to pass id and store the bt entry returned by the FW */
> -	union {
> -		u32 id;
> -		char addr1addr2[2 * ETH_ALEN];
> -	} param;
> -	static char outstr[64];
> -	char *pbuf = outstr;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(outstr, wrq->u.data.pointer, sizeof(outstr))) {
> -		lbs_deb_ioctl("Copy from user failed\n");
> -		return -1;
> -	}
> -	param.id = simple_strtoul(outstr, NULL, 10);
> -	pos = sprintf(pbuf, "%d: ", param.id);
> -	pbuf += pos;
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
> -				    cmd_act_bt_access_list,
> -				    cmd_option_waitforrsp, 0,
> -				    (char *)&param);
> -
> -	if (ret == 0) {
> -		addr1 = param.addr1addr2;
> -
> -		pos = sprintf(pbuf, "BT includes node ");
> -		pbuf += pos;
> -		pos = eth_addr2str(addr1, pbuf);
> -		pbuf += pos;
> -	} else {
> -		sprintf(pbuf, "(null)");
> -		pbuf += pos;
> -	}
> -
> -	wrq->u.data.length = strlen(outstr);
> -	if (copy_to_user(wrq->u.data.pointer, (char *)outstr,
> -			 wrq->u.data.length)) {
> -		lbs_deb_ioctl("BT_LIST: Copy to user failed!\n");
> -		return -EFAULT;
> -	}
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0 ;
> -}
> -
> -/**
> - *  @brief          Sets inverted state of blacklist (non-zero if inverted)
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_set_invert_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	int ret;
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	union {
> -		u32 id;
> -		char addr1addr2[2 * ETH_ALEN];
> -	} param;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	param.id = SUBCMD_DATA(wrq) ;
> -	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
> -				    cmd_act_bt_access_set_invert,
> -				    cmd_option_waitforrsp, 0,
> -				    (char *)&param);
> -	if (ret != 0)
> -		return -EFAULT;
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Gets inverted state of blacklist (non-zero if inverted)
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_bt_get_invert_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	int ret;
> -	union {
> -		u32 id;
> -		char addr1addr2[2 * ETH_ALEN];
> -	} param;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
> -				    cmd_act_bt_access_get_invert,
> -				    cmd_option_waitforrsp, 0,
> -				    (char *)&param);
> -
> -	if (ret == 0)
> -		wrq->u.param.value = le32_to_cpu(param.id);
> -	else
> -		return -EFAULT;
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Find the next parameter in an input string
> - *  @param ptr      A pointer to the input parameter string
> - *  @return         A pointer to the next parameter, or 0 if no parameters left.
> - */
> -static char * next_param(char * ptr)
> -{
> -	if (!ptr) return NULL;
> -	while (*ptr == ' ' || *ptr == '\t') ++ptr;
> -	return (*ptr == '\0') ? NULL : ptr;
> -}
> -
> -/**
> - *  @brief          Add an entry to the FWT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_add_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[128];
> -	static struct cmd_ds_fwt_access fwt_access;
> -	char *ptr;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
> -		return -EFAULT;
> -
> -	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
> -		lbs_pr_alert( "FWT_ADD: Invalid MAC address 1\n");
> -		return -EINVAL;
> -	}
> -
> -	if ((ptr = eth_str2addr(ptr, fwt_access.ra)) == NULL) {
> -		lbs_pr_alert( "FWT_ADD: Invalid MAC address 2\n");
> -		return -EINVAL;
> -	}
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.metric =
> -			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -	else
> -		fwt_access.metric = cpu_to_le32(FWT_DEFAULT_METRIC);
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.dir = (u8)simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.dir = FWT_DEFAULT_DIR;
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.rate = (u8) simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.rate = FWT_DEFAULT_RATE;
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.ssn =
> -			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -	else
> -		fwt_access.ssn = cpu_to_le32(FWT_DEFAULT_SSN);
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.dsn =
> -			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -	else
> -		fwt_access.dsn = cpu_to_le32(FWT_DEFAULT_DSN);
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.hopcount = simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.hopcount = FWT_DEFAULT_HOPCOUNT;
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.ttl = simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.ttl = FWT_DEFAULT_TTL;
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.expiration =
> -			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -	else
> -		fwt_access.expiration = cpu_to_le32(FWT_DEFAULT_EXPIRATION);
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.sleepmode = (u8)simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.sleepmode = FWT_DEFAULT_SLEEPMODE;
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.snr =
> -			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -	else
> -		fwt_access.snr = cpu_to_le32(FWT_DEFAULT_SNR);
> -
> -#ifdef DEBUG
> -	{
> -		char ethaddr1_str[18], ethaddr2_str[18];
> -		eth_addr2str(fwt_access.da, ethaddr1_str);
> -		eth_addr2str(fwt_access.ra, ethaddr2_str);
> -		lbs_deb_ioctl("FWT_ADD: adding (da:%s,%i,ra:%s)\n", ethaddr1_str,
> -		       fwt_access.dir, ethaddr2_str);
> -		lbs_deb_ioctl("FWT_ADD: ssn:%u dsn:%u met:%u hop:%u ttl:%u exp:%u slp:%u snr:%u\n",
> -		       fwt_access.ssn, fwt_access.dsn, fwt_access.metric,
> -		       fwt_access.hopcount, fwt_access.ttl, fwt_access.expiration,
> -		       fwt_access.sleepmode, fwt_access.snr);
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -						cmd_act_fwt_access_add,
> -						cmd_option_waitforrsp, 0,
> -						(void *)&fwt_access);
> -
> -	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
> -	return ret;
> -}
> -
> -/**
> - *  @brief          Delete an entry from the FWT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_del_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[64];
> -	static struct cmd_ds_fwt_access fwt_access;
> -	char *ptr;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
> -		return -EFAULT;
> -
> -	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
> -		lbs_pr_alert( "FWT_DEL: Invalid MAC address 1\n");
> -		return -EINVAL;
> -	}
> -
> -	if ((ptr = eth_str2addr(ptr, fwt_access.ra)) == NULL) {
> -		lbs_pr_alert( "FWT_DEL: Invalid MAC address 2\n");
> -		return -EINVAL;
> -	}
> -
> -	if ((ptr = next_param(ptr)))
> -		fwt_access.dir = (u8)simple_strtoul(ptr, &ptr, 10);
> -	else
> -		fwt_access.dir = FWT_DEFAULT_DIR;
> -
> -#ifdef DEBUG
> -	{
> -		char ethaddr1_str[18], ethaddr2_str[18];
> -		lbs_deb_ioctl("FWT_DEL: line is %s\n", in_str);
> -		eth_addr2str(fwt_access.da, ethaddr1_str);
> -		eth_addr2str(fwt_access.ra, ethaddr2_str);
> -		lbs_deb_ioctl("FWT_DEL: removing (da:%s,ra:%s,dir:%d)\n", ethaddr1_str,
> -		       ethaddr2_str, fwt_access.dir);
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv,
> -						cmd_fwt_access,
> -						cmd_act_fwt_access_del,
> -						cmd_option_waitforrsp, 0,
> -						(void *)&fwt_access);
> -	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
> -	return ret;
> -}
> -
> -
> -/**
> - *  @brief             Print route parameters
> - *  @param fwt_access  struct cmd_ds_fwt_access with route info
> - *  @param buf         destination buffer for route info
> - */
> -static void print_route(struct cmd_ds_fwt_access fwt_access, char *buf)
> -{
> -	buf += sprintf(buf, " ");
> -	buf += eth_addr2str(fwt_access.da, buf);
> -	buf += sprintf(buf, " ");
> -	buf += eth_addr2str(fwt_access.ra, buf);
> -	buf += sprintf(buf, " %u", fwt_access.valid);
> -	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.metric));
> -	buf += sprintf(buf, " %u", fwt_access.dir);
> -	buf += sprintf(buf, " %u", fwt_access.rate);
> -	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.ssn));
> -	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.dsn));
> -	buf += sprintf(buf, " %u", fwt_access.hopcount);
> -	buf += sprintf(buf, " %u", fwt_access.ttl);
> -	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.expiration));
> -	buf += sprintf(buf, " %u", fwt_access.sleepmode);
> -	buf += sprintf(buf, " %u ", le32_to_cpu(fwt_access.snr));
> -	buf += eth_addr2str(fwt_access.prec, buf);
> -}
> -
> -/**
> - *  @brief          Lookup an entry in the FWT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_lookup_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[64];
> -	char *ptr;
> -	static struct cmd_ds_fwt_access fwt_access;
> -	static char out_str[128];
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
> -		return -EFAULT;
> -
> -	if ((ptr = eth_str2addr(in_str, fwt_access.da)) == NULL) {
> -		lbs_pr_alert( "FWT_LOOKUP: Invalid MAC address\n");
> -		return -EINVAL;
> -	}
> -
> -#ifdef DEBUG
> -	{
> -		char ethaddr1_str[18];
> -		lbs_deb_ioctl("FWT_LOOKUP: line is %s\n", in_str);
> -		eth_addr2str(fwt_access.da, ethaddr1_str);
> -		lbs_deb_ioctl("FWT_LOOKUP: looking for (da:%s)\n", ethaddr1_str);
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv,
> -						cmd_fwt_access,
> -						cmd_act_fwt_access_lookup,
> -						cmd_option_waitforrsp, 0,
> -						(void *)&fwt_access);
> -
> -	if (ret == 0)
> -		print_route(fwt_access, out_str);
> -	else
> -		sprintf(out_str, "(null)");
> -
> -	wrq->u.data.length = strlen(out_str);
> -	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
> -			 wrq->u.data.length)) {
> -		lbs_deb_ioctl("FWT_LOOKUP: Copy to user failed!\n");
> -		return -EFAULT;
> -	}
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Reset all entries from the FWT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_reset_ioctl(wlan_private * priv)
> -{
> -	lbs_deb_ioctl("FWT: resetting\n");
> -
> -	return (libertas_prepare_and_send_command(priv,
> -				      cmd_fwt_access,
> -				      cmd_act_fwt_access_reset,
> -				      cmd_option_waitforrsp, 0, NULL));
> -}
> -
> -/**
> - *  @brief          List an entry from the FWT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_list_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[8];
> -	static struct cmd_ds_fwt_access fwt_access;
> -	char *ptr = in_str;
> -	static char out_str[128];
> -	char *pbuf = out_str;
> -	int ret = 0;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str))) {
> -		ret = -EFAULT;
> -		goto out;
> -	}
> -
> -	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -
> -#ifdef DEBUG
> -	{
> -		lbs_deb_ioctl("FWT_LIST: line is %s\n", in_str);
> -		lbs_deb_ioctl("FWT_LIST: listing id:%i\n", le32_to_cpu(fwt_access.id));
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -				    cmd_act_fwt_access_list,
> -				    cmd_option_waitforrsp, 0, (void *)&fwt_access);
> -
> -	if (ret == 0)
> -		print_route(fwt_access, pbuf);
> -	else
> -		pbuf += sprintf(pbuf, " (null)");
> -
> -	wrq->u.data.length = strlen(out_str);
> -	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
> -			 wrq->u.data.length)) {
> -		lbs_deb_ioctl("FWT_LIST: Copy to user failed!\n");
> -		ret = -EFAULT;
> -		goto out;
> -	}
> -
> -	ret = 0;
> -
> -out:
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return ret;
> -}
> -
> -/**
> - *  @brief          List an entry from the FRT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_list_route_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[64];
> -	static struct cmd_ds_fwt_access fwt_access;
> -	char *ptr = in_str;
> -	static char out_str[128];
> -	char *pbuf = out_str;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
> -		return -EFAULT;
> -
> -	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -
> -#ifdef DEBUG
> -	{
> -		lbs_deb_ioctl("FWT_LIST_ROUTE: line is %s\n", in_str);
> -		lbs_deb_ioctl("FWT_LIST_ROUTE: listing id:%i\n", le32_to_cpu(fwt_access.id));
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -				    cmd_act_fwt_access_list_route,
> -				    cmd_option_waitforrsp, 0, (void *)&fwt_access);
> -
> -	if (ret == 0) {
> -		print_route(fwt_access, pbuf);
> -	} else
> -		pbuf += sprintf(pbuf, " (null)");
> -
> -	wrq->u.data.length = strlen(out_str);
> -	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
> -			 wrq->u.data.length)) {
> -		lbs_deb_ioctl("FWT_LIST_ROUTE: Copy to user failed!\n");
> -		return -EFAULT;
> -	}
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          List an entry from the FNT table
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_list_neighbor_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	char in_str[8];
> -	static struct cmd_ds_fwt_access fwt_access;
> -	char *ptr = in_str;
> -	static char out_str[128];
> -	char *pbuf = out_str;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if (copy_from_user(in_str, wrq->u.data.pointer, sizeof(in_str)))
> -		return -EFAULT;
> -
> -	memset(&fwt_access, 0, sizeof(fwt_access));
> -	fwt_access.id = cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
> -
> -#ifdef DEBUG
> -	{
> -		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: line is %s\n", in_str);
> -		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: listing id:%i\n", le32_to_cpu(fwt_access.id));
> -	}
> -#endif
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -				    cmd_act_fwt_access_list_neighbor,
> -				    cmd_option_waitforrsp, 0,
> -				    (void *)&fwt_access);
> -
> -	if (ret == 0) {
> -		pbuf += sprintf(pbuf, " ra ");
> -		pbuf += eth_addr2str(fwt_access.ra, pbuf);
> -		pbuf += sprintf(pbuf, "  slp %u", fwt_access.sleepmode);
> -		pbuf += sprintf(pbuf, "  snr %u", le32_to_cpu(fwt_access.snr));
> -		pbuf += sprintf(pbuf, "  ref %u", le32_to_cpu(fwt_access.references));
> -	} else
> -		pbuf += sprintf(pbuf, " (null)");
> -
> -	wrq->u.data.length = strlen(out_str);
> -	if (copy_to_user(wrq->u.data.pointer, (char *)out_str,
> -			 wrq->u.data.length)) {
> -		lbs_deb_ioctl("FWT_LIST_NEIGHBOR: Copy to user failed!\n");
> -		return -EFAULT;
> -	}
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Cleans up the route (FRT) and neighbor (FNT) tables
> - *                  (Garbage Collection)
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_cleanup_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	static struct cmd_ds_fwt_access fwt_access;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	lbs_deb_ioctl("FWT: cleaning up\n");
> -
> -	memset(&fwt_access, 0, sizeof(fwt_access));
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -				    cmd_act_fwt_access_cleanup,
> -				    cmd_option_waitforrsp, 0,
> -				    (void *)&fwt_access);
> -
> -	if (ret == 0)
> -		wrq->u.param.value = le32_to_cpu(fwt_access.references);
> -	else
> -		return -EFAULT;
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Gets firmware internal time (debug purposes)
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_fwt_time_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	static struct cmd_ds_fwt_access fwt_access;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	lbs_deb_ioctl("FWT: getting time\n");
> -
> -	memset(&fwt_access, 0, sizeof(fwt_access));
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_fwt_access,
> -				    cmd_act_fwt_access_time,
> -				    cmd_option_waitforrsp, 0,
> -				    (void *)&fwt_access);
> -
> -	if (ret == 0)
> -		wrq->u.param.value = le32_to_cpu(fwt_access.references);
> -	else
> -		return -EFAULT;
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Gets mesh ttl from firmware
> - *  @param priv     A pointer to wlan_private structure
> - *  @param req      A pointer to ifreq structure
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_mesh_get_ttl_ioctl(wlan_private * priv, struct ifreq *req)
> -{
> -	struct iwreq *wrq = (struct iwreq *)req;
> -	struct cmd_ds_mesh_access mesh_access;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	memset(&mesh_access, 0, sizeof(mesh_access));
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_mesh_access,
> -				    cmd_act_mesh_get_ttl,
> -				    cmd_option_waitforrsp, 0,
> -				    (void *)&mesh_access);
> -
> -	if (ret == 0)
> -		wrq->u.param.value = le32_to_cpu(mesh_access.data[0]);
> -	else
> -		return -EFAULT;
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return 0;
> -}
> -
> -/**
> - *  @brief          Gets mesh ttl from firmware
> - *  @param priv     A pointer to wlan_private structure
> - *  @param ttl      New ttl value
> - *  @return         0 --success, otherwise fail
> - */
> -static int wlan_mesh_set_ttl_ioctl(wlan_private * priv, int ttl)
> -{
> -	struct cmd_ds_mesh_access mesh_access;
> -	int ret;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	if( (ttl > 0xff) || (ttl < 0) )
> -		return -EINVAL;
> -
> -	memset(&mesh_access, 0, sizeof(mesh_access));
> -	mesh_access.data[0] = cpu_to_le32(ttl);
> -
> -	ret = libertas_prepare_and_send_command(priv, cmd_mesh_access,
> -						cmd_act_mesh_set_ttl,
> -						cmd_option_waitforrsp, 0,
> -						(void *)&mesh_access);
> -
> -	if (ret != 0)
> -		ret = -EFAULT;
> -
> -	lbs_deb_leave(LBS_DEB_IOCTL);
> -	return ret;
> -}
> -
> -/**
> - *  @brief ioctl function - entry point
> - *
> - *  @param dev		A pointer to net_device structure
> - *  @param req	   	A pointer to ifreq structure
> - *  @param cmd 		command
> - *  @return 	   	0--success, otherwise fail
> - */
> -int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
> -{
> -	int subcmd = 0;
> -	int idata = 0;
> -	int *pdata;
> -	int ret = 0;
> -	wlan_private *priv = dev->priv;
> -	wlan_adapter *adapter = priv->adapter;
> -	struct iwreq *wrq = (struct iwreq *)req;
> -
> -	lbs_deb_enter(LBS_DEB_IOCTL);
> -
> -	lbs_deb_ioctl("libertas_do_ioctl: ioctl cmd = 0x%x\n", cmd);
> -	switch (cmd) {
> -	case WLAN_SETNONE_GETNONE:	/* set WPA mode on/off ioctl #20 */
> -		switch (wrq->u.data.flags) {
> -		case WLAN_SUBCMD_BT_RESET:	/* bt_reset */
> -			wlan_bt_reset_ioctl(priv);
> -			break;
> -		case WLAN_SUBCMD_FWT_RESET:	/* fwt_reset */
> -			wlan_fwt_reset_ioctl(priv);
> -			break;
> -		}		/* End of switch */
> -		break;
> -
> -	case WLAN_SETONEINT_GETNONE:
> -		/* The first 4 bytes of req->ifr_data is sub-ioctl number
> -		 * after 4 bytes sits the payload.
> -		 */
> -		subcmd = wrq->u.data.flags;
> -		if (!subcmd)
> -			subcmd = (int)wrq->u.param.value;
> -
> -		switch (subcmd) {
> -		case WLANSETREGION:
> -			idata = SUBCMD_DATA(wrq);
> -			ret = wlan_set_region(priv, (u16) idata);
> -			break;
> -		case WLAN_SUBCMD_MESH_SET_TTL:
> -			idata = SUBCMD_DATA(wrq);
> -			ret = wlan_mesh_set_ttl_ioctl(priv, idata);
> -			break;
> -
> -		case WLAN_SUBCMD_BT_SET_INVERT:
> -			ret = wlan_bt_set_invert_ioctl(priv, req);
> -			break ;
> -
> -		default:
> -			ret = -EOPNOTSUPP;
> -			break;
> -		}
> -
> -		break;
> -
> -	case WLAN_SET128CHAR_GET128CHAR:
> -		switch ((int)wrq->u.data.flags) {
> -		case WLAN_SUBCMD_BT_ADD:
> -			ret = wlan_bt_add_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_BT_DEL:
> -			ret = wlan_bt_del_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_BT_LIST:
> -			ret = wlan_bt_list_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_ADD:
> -			ret = wlan_fwt_add_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_DEL:
> -			ret = wlan_fwt_del_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_LOOKUP:
> -			ret = wlan_fwt_lookup_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_LIST_NEIGHBOR:
> -			ret = wlan_fwt_list_neighbor_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_LIST:
> -			ret = wlan_fwt_list_ioctl(priv, req);
> -			break;
> -		case WLAN_SUBCMD_FWT_LIST_ROUTE:
> -			ret = wlan_fwt_list_route_ioctl(priv, req);
> -			break;
> -		}
> -		break;
> -
> -	case WLAN_SETNONE_GETONEINT:
> -		switch (wrq->u.param.value) {
> -		case WLANGETREGION:
> -			pdata = (int *)wrq->u.name;
> -			*pdata = (int)adapter->regioncode;
> -			break;
> -		case WLAN_SUBCMD_FWT_CLEANUP:	/* fwt_cleanup */
> -			ret = wlan_fwt_cleanup_ioctl(priv, req);
> -			break;
> -
> -		case WLAN_SUBCMD_FWT_TIME:	/* fwt_time */
> -			ret = wlan_fwt_time_ioctl(priv, req);
> -			break;
> -
> -		case WLAN_SUBCMD_MESH_GET_TTL:
> -			ret = wlan_mesh_get_ttl_ioctl(priv, req);
> -			break;
> -
> -		case WLAN_SUBCMD_BT_GET_INVERT:
> -			ret = wlan_bt_get_invert_ioctl(priv, req);
> -			break ;
> -
> -		default:
> -			ret = -EOPNOTSUPP;
> -
> -		}
> -
> -		break;
> -
> -	case WLAN_SET_GET_SIXTEEN_INT:
> -		switch ((int)wrq->u.data.flags) {
> -		case WLAN_LED_GPIO_CTRL:
> -			{
> -				int i;
> -				int data[16];
> -
> -				struct cmd_ds_802_11_led_ctrl ctrl;
> -				struct mrvlietypes_ledgpio *gpio =
> -				    (struct mrvlietypes_ledgpio *) ctrl.data;
> -
> -				memset(&ctrl, 0, sizeof(ctrl));
> -				if (wrq->u.data.length > MAX_LEDS * 2)
> -					return -ENOTSUPP;
> -				if ((wrq->u.data.length % 2) != 0)
> -					return -ENOTSUPP;
> -				if (wrq->u.data.length == 0) {
> -					ctrl.action =
> -					    cpu_to_le16
> -					    (cmd_act_get);
> -				} else {
> -					if (copy_from_user
> -					    (data, wrq->u.data.pointer,
> -					     sizeof(int) *
> -					     wrq->u.data.length)) {
> -						lbs_deb_ioctl(
> -						       "Copy from user failed\n");
> -						return -EFAULT;
> -					}
> -
> -					ctrl.action =
> -					    cpu_to_le16
> -					    (cmd_act_set);
> -					ctrl.numled = cpu_to_le16(0);
> -					gpio->header.type =
> -					    cpu_to_le16(TLV_TYPE_LED_GPIO);
> -					gpio->header.len = wrq->u.data.length;
> -					for (i = 0; i < wrq->u.data.length;
> -					     i += 2) {
> -						gpio->ledpin[i / 2].led =
> -						    data[i];
> -						gpio->ledpin[i / 2].pin =
> -						    data[i + 1];
> -					}
> -				}
> -				ret =
> -				    libertas_prepare_and_send_command(priv,
> -							  cmd_802_11_led_gpio_ctrl,
> -							  0,
> -							  cmd_option_waitforrsp,
> -							  0, (void *)&ctrl);
> -				for (i = 0; i < gpio->header.len; i += 2) {
> -					data[i] = gpio->ledpin[i / 2].led;
> -					data[i + 1] = gpio->ledpin[i / 2].pin;
> -				}
> -				if (copy_to_user(wrq->u.data.pointer, data,
> -						 sizeof(int) *
> -						 gpio->header.len)) {
> -					lbs_deb_ioctl("Copy to user failed\n");
> -					return -EFAULT;
> -				}
> -
> -				wrq->u.data.length = gpio->header.len;
> -			}
> -			break;
> -		}
> -		break;
> -
> -	default:
> -		ret = -EINVAL;
> -		break;
> -	}
> -
> -	lbs_deb_leave_args(LBS_DEB_IOCTL, "ret %d", ret);
> -	return ret;
> -}
> -
> -
> diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
> index 623ab4b..4a59306 100644
> --- a/drivers/net/wireless/libertas/main.c
> +++ b/drivers/net/wireless/libertas/main.c
> @@ -181,7 +181,8 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
>   * @brief Get function for sysfs attribute anycast_mask
>   */
>  static ssize_t libertas_anycast_get(struct device * dev,
> -		struct device_attribute *attr, char * buf) {
> +		struct device_attribute *attr, char * buf)
> +{
>  	struct cmd_ds_mesh_access mesh_access;
>  
>  	memset(&mesh_access, 0, sizeof(mesh_access));
> @@ -197,7 +198,8 @@ static ssize_t libertas_anycast_get(struct device * dev,
>   * @brief Set function for sysfs attribute anycast_mask
>   */
>  static ssize_t libertas_anycast_set(struct device * dev,
> -		struct device_attribute *attr, const char * buf, size_t count) {
> +		struct device_attribute *attr, const char * buf, size_t count)
> +{
>  	struct cmd_ds_mesh_access mesh_access;
>  	uint32_t datum;
>  
> @@ -799,7 +801,6 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev)
>  	dev->open = wlan_open;
>  	dev->hard_start_xmit = wlan_pre_start_xmit;
>  	dev->stop = wlan_close;
> -	dev->do_ioctl = libertas_do_ioctl;
>  	dev->set_mac_address = wlan_set_mac_address;
>  	dev->tx_timeout = wlan_tx_timeout;
>  	dev->get_stats = wlan_get_stats;
> @@ -918,7 +919,6 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
>  	mesh_dev->open = mesh_open;
>  	mesh_dev->hard_start_xmit = mesh_pre_start_xmit;
>  	mesh_dev->stop = mesh_close;
> -	mesh_dev->do_ioctl = libertas_do_ioctl;
>  	mesh_dev->get_stats = wlan_get_stats;
>  	mesh_dev->set_mac_address = wlan_set_mac_address;
>  	mesh_dev->ethtool_ops = &libertas_ethtool_ops;
> diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
> index 606af50..c3043dc 100644
> --- a/drivers/net/wireless/libertas/scan.c
> +++ b/drivers/net/wireless/libertas/scan.c
> @@ -215,38 +215,6 @@ done:
>  }
>  
>  /**
> - *  @brief Post process the scan table after a new scan command has completed
> - *
> - *  Inspect each entry of the scan table and try to find an entry that
> - *    matches our current associated/joined network from the scan.  If
> - *    one is found, update the stored copy of the bssdescriptor for our
> - *    current network.
> - *
> - *  Debug dump the current scan table contents if compiled accordingly.
> - *
> - *  @param priv   A pointer to wlan_private structure
> - *
> - *  @return       void
> - */
> -static void wlan_scan_process_results(wlan_private * priv)
> -{
> -	wlan_adapter *adapter = priv->adapter;
> -	struct bss_descriptor * iter_bss;
> -	int i = 0;
> -
> -	if (adapter->connect_status == libertas_connected)
> -		return;
> -
> -	mutex_lock(&adapter->lock);
> -	list_for_each_entry (iter_bss, &adapter->network_list, list) {
> -		lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
> -		       i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
> -		       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
> -	}
> -	mutex_unlock(&adapter->lock);
> -}
> -
> -/**
>   *  @brief Create a channel list for the driver to scan based on region info
>   *
>   *  Use the driver region/band information to construct a comprehensive list
> @@ -791,6 +759,10 @@ int wlan_scan_networks(wlan_private * priv,
>  	u8 scancurrentchanonly;
>  	int maxchanperscan;
>  	int ret;
> +#ifdef CONFIG_LIBERTAS_DEBUG
> +	struct bss_descriptor * iter_bss;
> +	int i = 0;
> +#endif
>  
>  	lbs_deb_enter(LBS_DEB_ASSOC);
>  
> @@ -832,11 +804,16 @@ int wlan_scan_networks(wlan_private * priv,
>  				     puserscanin,
>  				     full_scan);
>  
> -	/*  Process the resulting scan table:
> -	 *    - Remove any bad ssids
> -	 *    - Update our current BSS information from scan data
> -	 */
> -	wlan_scan_process_results(priv);
> +#ifdef CONFIG_LIBERTAS_DEBUG
> +	/* Dump the scan table */
> +	mutex_lock(&adapter->lock);
> +	list_for_each_entry (iter_bss, &adapter->network_list, list) {
> +		lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
> +		       i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
> +		       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
> +	}
> +	mutex_unlock(&adapter->lock);
> +#endif
>  
>  	if (priv->adapter->connect_status == libertas_connected) {
>  		netif_carrier_on(priv->dev);
> diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
> index 8939251..f42b796 100644
> --- a/drivers/net/wireless/libertas/wext.c
> +++ b/drivers/net/wireless/libertas/wext.c
> @@ -913,148 +913,6 @@ out:
>  	return 0;
>  }
>  
> -/*
> - * iwpriv settable callbacks
> - */
> -
> -static const iw_handler wlan_private_handler[] = {
> -	NULL,			/* SIOCIWFIRSTPRIV */
> -};
> -
> -static const struct iw_priv_args wlan_private_args[] = {
> -	/*
> -	 * { cmd, set_args, get_args, name }
> -	 */
> -	/* Using iwpriv sub-command feature */
> -	{
> -	 WLAN_SETONEINT_GETNONE,	/* IOCTL: 24 */
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 IW_PRIV_TYPE_NONE,
> -	 ""},
> -	{
> -	 WLANSETREGION,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 IW_PRIV_TYPE_NONE,
> -	 "setregioncode"},
> -	{
> -	 WLAN_SUBCMD_MESH_SET_TTL,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 IW_PRIV_TYPE_NONE,
> -	 "mesh_set_ttl"},
> -	{
> -	 WLAN_SETNONE_GETONEINT,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 ""},
> -	{
> -	 WLANGETREGION,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 "getregioncode"},
> -	{
> -	 WLAN_SUBCMD_FWT_CLEANUP,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 "fwt_cleanup"},
> -	{
> -	 WLAN_SUBCMD_FWT_TIME,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 "fwt_time"},
> -	{
> -	 WLAN_SUBCMD_MESH_GET_TTL,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 "mesh_get_ttl"},
> -	{
> -	 WLAN_SETNONE_GETNONE,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_NONE,
> -	 ""},
> -	{
> -	 WLAN_SUBCMD_FWT_RESET,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_NONE,
> -	 "fwt_reset"},
> -	{
> -	 WLAN_SUBCMD_BT_RESET,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_NONE,
> -	 "bt_reset"},
> -	{
> -	 WLAN_SET128CHAR_GET128CHAR,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 ""},
> -	/* BT Management */
> -	{
> -	 WLAN_SUBCMD_BT_ADD,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "bt_add"},
> -	{
> -	 WLAN_SUBCMD_BT_DEL,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "bt_del"},
> -	{
> -	 WLAN_SUBCMD_BT_LIST,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "bt_list"},
> -	{
> -	 WLAN_SUBCMD_BT_SET_INVERT,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 IW_PRIV_TYPE_NONE,
> -	 "bt_set_invert"},
> -	{
> -	 WLAN_SUBCMD_BT_GET_INVERT,
> -	 IW_PRIV_TYPE_NONE,
> -	 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
> -	 "bt_get_invert"},
> -	/* FWT Management */
> -	{
> -	 WLAN_SUBCMD_FWT_ADD,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_add"},
> -	{
> -	 WLAN_SUBCMD_FWT_DEL,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_del"},
> -	{
> -	 WLAN_SUBCMD_FWT_LOOKUP,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_lookup"},
> -	{
> -	 WLAN_SUBCMD_FWT_LIST_NEIGHBOR,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_list_neigh"},
> -	{
> -	 WLAN_SUBCMD_FWT_LIST,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_list"},
> -	{
> -	 WLAN_SUBCMD_FWT_LIST_ROUTE,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 IW_PRIV_TYPE_CHAR | 128,
> -	 "fwt_list_route"},
> -	{
> -	 WLAN_SET_GET_SIXTEEN_INT,
> -	 IW_PRIV_TYPE_INT | 16,
> -	 IW_PRIV_TYPE_INT | 16,
> -	 ""},
> -	{
> -	 WLAN_LED_GPIO_CTRL,
> -	 IW_PRIV_TYPE_INT | 16,
> -	 IW_PRIV_TYPE_INT | 16,
> -	 "ledgpio"},
> -};
> -
>  static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
>  {
>  	enum {
> @@ -2444,22 +2302,12 @@ static const iw_handler mesh_wlan_handler[] = {
>  };
>  struct iw_handler_def libertas_handler_def = {
>  	.num_standard	= sizeof(wlan_handler) / sizeof(iw_handler),
> -	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
> -	.num_private_args = sizeof(wlan_private_args) /
> -		sizeof(struct iw_priv_args),
>  	.standard	= (iw_handler *) wlan_handler,
> -	.private	= (iw_handler *) wlan_private_handler,
> -	.private_args	= (struct iw_priv_args *)wlan_private_args,
>  	.get_wireless_stats = wlan_get_wireless_stats,
>  };
>  
>  struct iw_handler_def mesh_handler_def = {
>  	.num_standard	= sizeof(mesh_wlan_handler) / sizeof(iw_handler),
> -	.num_private	= sizeof(wlan_private_handler) / sizeof(iw_handler),
> -	.num_private_args = sizeof(wlan_private_args) /
> -		sizeof(struct iw_priv_args),
>  	.standard	= (iw_handler *) mesh_wlan_handler,
> -	.private	= (iw_handler *) wlan_private_handler,
> -	.private_args	= (struct iw_priv_args *)wlan_private_args,
>  	.get_wireless_stats = wlan_get_wireless_stats,
>  };
> diff --git a/drivers/net/wireless/libertas/wext.h b/drivers/net/wireless/libertas/wext.h
> index d555056..3d5196c 100644
> --- a/drivers/net/wireless/libertas/wext.h
> +++ b/drivers/net/wireless/libertas/wext.h
> @@ -7,45 +7,6 @@
>  #define SUBCMD_OFFSET			4
>  #define SUBCMD_DATA(x)			*((int *)(x->u.name + SUBCMD_OFFSET))
>  
> -/** PRIVATE CMD ID */
> -#define	WLANIOCTL			SIOCIWFIRSTPRIV
> -
> -#define WLAN_SETNONE_GETNONE	        (WLANIOCTL + 8)
> -#define WLAN_SUBCMD_BT_RESET			13
> -#define WLAN_SUBCMD_FWT_RESET			14
> -
> -#define WLAN_SETNONE_GETONEINT		(WLANIOCTL + 15)
> -#define WLANGETREGION				1
> -
> -#define WLAN_SUBCMD_FWT_CLEANUP			15
> -#define WLAN_SUBCMD_FWT_TIME			16
> -#define WLAN_SUBCMD_MESH_GET_TTL		17
> -#define WLAN_SUBCMD_BT_GET_INVERT		18
> -
> -#define WLAN_SETONEINT_GETNONE		(WLANIOCTL + 24)
> -#define WLANSETREGION				8
> -#define WLAN_SUBCMD_MESH_SET_TTL		18
> -#define WLAN_SUBCMD_BT_SET_INVERT		19
> -
> -#define WLAN_SET128CHAR_GET128CHAR	(WLANIOCTL + 25)
> -#define WLAN_SUBCMD_BT_ADD			18
> -#define WLAN_SUBCMD_BT_DEL   			19
> -#define WLAN_SUBCMD_BT_LIST			20
> -#define WLAN_SUBCMD_FWT_ADD			21
> -#define WLAN_SUBCMD_FWT_DEL   			22
> -#define WLAN_SUBCMD_FWT_LOOKUP			23
> -#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR		24
> -#define WLAN_SUBCMD_FWT_LIST			25
> -#define WLAN_SUBCMD_FWT_LIST_ROUTE		26
> -
> -#define WLAN_SET_GET_SIXTEEN_INT       (WLANIOCTL + 29)
> -#define WLAN_LED_GPIO_CTRL			5
> -
> -#define WLAN_LINKMODE_802_3			0
> -#define WLAN_LINKMODE_802_11			2
> -#define WLAN_RADIOMODE_NONE    			0
> -#define WLAN_RADIOMODE_RADIOTAP			2
> -
>  /** wlan_ioctl_regrdwr */
>  struct wlan_ioctl_regrdwr {
>  	/** Which register to access */
> @@ -57,9 +18,13 @@ struct wlan_ioctl_regrdwr {
>  	u32 value;
>  };
>  
> +#define WLAN_LINKMODE_802_3			0
> +#define WLAN_LINKMODE_802_11			2
> +#define WLAN_RADIOMODE_NONE			0
> +#define WLAN_RADIOMODE_RADIOTAP			2
> +
>  extern struct iw_handler_def libertas_handler_def;
>  extern struct iw_handler_def mesh_handler_def;
> -int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
>  int wlan_radio_ioctl(wlan_private * priv, u8 option);
>  
>  #endif				/* _WLAN_WEXT_H_ */

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Please pull 'libertas-fixes' branch of wireless-2.6
  2007-06-27 20:55 Please pull 'libertas-fixes' branch of wireless-2.6 John W. Linville
       [not found] ` <20070627205539.GB13617-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
@ 2007-07-02 12:14 ` Jeff Garzik
  1 sibling, 0 replies; 19+ messages in thread
From: Jeff Garzik @ 2007-07-02 12:14 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-wireless, netdev, dcbw

John W. Linville wrote:
> The following changes since commit 189548642c5962e60c3667bdb3a703fe0bed12a6:
>   Linus Torvalds (1):
>         Linus 2.6.22-rc6
> 
> are found in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes
> 
> Dan Williams (4):
>       libertas: style fixes
>       libertas: kill wlan_scan_process_results
>       libertas: fix WPA associations by handling ENABLE_RSN correctly
>       libertas: remove private ioctls
> 
>  drivers/net/wireless/libertas/Makefile  |    2 +-
>  drivers/net/wireless/libertas/README    |  275 --------
>  drivers/net/wireless/libertas/assoc.c   |   28 +-
>  drivers/net/wireless/libertas/cmd.c     |   12 +-
>  drivers/net/wireless/libertas/cmdresp.c |   21 +
>  drivers/net/wireless/libertas/hostcmd.h |    2 +-
>  drivers/net/wireless/libertas/ioctl.c   | 1081 -------------------------------
>  drivers/net/wireless/libertas/main.c    |    8 +-
>  drivers/net/wireless/libertas/scan.c    |   51 +--
>  drivers/net/wireless/libertas/wext.c    |  152 -----
>  drivers/net/wireless/libertas/wext.h    |   45 +--
>  11 files changed, 79 insertions(+), 1598 deletions(-)
>  delete mode 100644 drivers/net/wireless/libertas/ioctl.c

pulled



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Please pull 'libertas-fixes' branch of wireless-2.6
@ 2007-07-03 18:48 John W. Linville
  0 siblings, 0 replies; 19+ messages in thread
From: John W. Linville @ 2007-07-03 18:48 UTC (permalink / raw)
  To: jeff-o2qLIJkoznsdnm+yROfE0A
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA

The following changes since commit aa2e09da2a332e748532aa2a71b090e7e7c3203d:
  Len Brown (1):
        ACPI: fix acpi_osi=!Linux

are found in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git libertas-fixes

Holger Schurig (1):
      libertas: fix use-after-free in rx path

Robert P. J. Day (1):
      WIRELESS: Remove clearly obsolete libertas/version.h file.

 drivers/net/wireless/libertas/rx.c      |    1 -
 drivers/net/wireless/libertas/version.h |    1 -
 2 files changed, 0 insertions(+), 2 deletions(-)
 delete mode 100644 drivers/net/wireless/libertas/version.h

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 @@
-

-- 
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2007-07-03 18:48 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-29 18:33 Please pull 'libertas' branch of wireless-2.6 John W. Linville
     [not found] ` <20070529183347.GD3496-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-05-30 14:07   ` Jeff Garzik
2007-05-30 15:28     ` Dan Williams
     [not found]       ` <1180538928.17163.10.camel-Hs+VJEcF3DojzQS9c19i8iZi+YwRKgec@public.gmane.org>
2007-05-31 21:13         ` Dan Williams
2007-05-31 21:16           ` John W. Linville
     [not found]             ` <20070531211605.GA30161-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-06-01 21:48               ` Dan Williams
2007-06-12 21:05 ` John W. Linville
2007-06-12 21:06   ` Please pull 'libertas-fixes' " John W. Linville
     [not found]     ` <20070612210658.GG310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-06-12 21:08       ` Please pull 'libertas-upstream' " John W. Linville
     [not found]         ` <20070612210814.GH310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-06-13 19:57           ` Jeff Garzik
2007-06-12 22:54       ` Please pull 'libertas-fixes' " Jeff Garzik
2007-06-13  0:03         ` John W. Linville
2007-06-13  2:28       ` Jeff Garzik
     [not found]   ` <20070612210544.GF310-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-06-12 21:26     ` Please pull 'libertas' branch of wireless-2.6 (resent w/o attachment) John W. Linville
2007-06-13  2:28       ` Jeff Garzik
  -- strict thread matches above, loose matches on Subject: below --
2007-06-27 20:55 Please pull 'libertas-fixes' branch of wireless-2.6 John W. Linville
     [not found] ` <20070627205539.GB13617-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-07-02 11:07   ` Dan Williams
2007-07-02 12:14 ` Jeff Garzik
2007-07-03 18:48 John W. Linville

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).