All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
@ 2010-12-02  1:31 Bing Zhao
  2010-12-02 19:33 ` John W. Linville
  2010-12-03 12:53 ` Johannes Berg
  0 siblings, 2 replies; 23+ messages in thread
From: Bing Zhao @ 2010-12-02  1:31 UTC (permalink / raw)
  To: linux-wireless
  Cc: John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Bing Zhao

The mwifiex driver for Marvell 802.11n chipset SD8787 is available at
git://git.marvell.com/mwifiex.git. Both STA mode and Mobile hotspot
mode are supported.

git pull git://git.marvell.com/mwifiex.git master


The firmware image for SD8787 is also available at:
git://git.marvell.com/mwifiex-firmware.git

---

The following changes since commit 56174316 or tag "master-2010-11-30":

Amitkumar Karwar (17):
  mwifiex: move netdev init code out of _cfg80211
  mwifiex: uAP: bring up uAP interface
  mwifiex: uAP: add basic uAP support
  mwifiex: uAP: add data path support
  mwifiex: uAP: fix kernel crash while loading the driver
  mwifiex: do not hold off cfg80211 callback for scan
  mwifiex: make tx_buf_size alignment
  mwifiex: correct short_time_slot setting for B-only mode
  mwifiex: catch failure status in cmd response handler
  mwifiex: change default settings of aggrpriotbl
  mwifiex: fill in HT cap info correctly
  mwifiex: correct WEP status setting
  mwifiex: update copyright descriptions
  mwifiex: improve re-transmit handling
  mwifiex: prevent spurious error messages
  mwifiex: accept hex values for debugfs command drvdbg
  mwifiex: fix errors found by checkpatch.pl

Bing Zhao (12):
  wireless: mwifiex: initial commit for Marvell mwifiex driver
  mwifiex: fix error and warning after rebased to 2.6.37-rc1
  mwifiex: add WPS support
  mwifiex: fix coding style warning: suspect code indent
  mwifiex: handle error cases if init commands fail
  mwifiex: move re-order table cleanup out of TX spinlock
  mwifiex: fix warm-reset crash issue
  mwifiex: get power save status in STA-AP mode
  mwifiex: set sysfs physical device reference for netdev
  mwifiex: fix checkpatch.pl warning
  mwifiex: remove MWIFIEX_PACK_START
  mwifiex: remove mwifiex_ prefix from the filenames

Kiran Divekar (2):
  mwifiex: handle erroneous response of sleep confirm
  mwifiex: set card quirk MMC_QUIRK_BLKSZ_FOR_BYTE_MODE


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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-02  1:31 [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
@ 2010-12-02 19:33 ` John W. Linville
  2010-12-02 19:58   ` Johannes Berg
  2010-12-03 12:53 ` Johannes Berg
  1 sibling, 1 reply; 23+ messages in thread
From: John W. Linville @ 2010-12-02 19:33 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, Dan Williams, David Woodhouse, Amitkumar Karwar,
	Kiran Divekar

On Wed, Dec 01, 2010 at 05:31:56PM -0800, Bing Zhao wrote:
> The mwifiex driver for Marvell 802.11n chipset SD8787 is available at
> git://git.marvell.com/mwifiex.git. Both STA mode and Mobile hotspot
> mode are supported.
> 
> git pull git://git.marvell.com/mwifiex.git master
> 
> 
> The firmware image for SD8787 is also available at:
> git://git.marvell.com/mwifiex-firmware.git

All,

I would like to merge this in this cycle.  If you are interested in
reviewing this driver, please do so soon.

Thanks,

John

> The following changes since commit 56174316 or tag "master-2010-11-30":
> 
> Amitkumar Karwar (17):
>   mwifiex: move netdev init code out of _cfg80211
>   mwifiex: uAP: bring up uAP interface
>   mwifiex: uAP: add basic uAP support
>   mwifiex: uAP: add data path support
>   mwifiex: uAP: fix kernel crash while loading the driver
>   mwifiex: do not hold off cfg80211 callback for scan
>   mwifiex: make tx_buf_size alignment
>   mwifiex: correct short_time_slot setting for B-only mode
>   mwifiex: catch failure status in cmd response handler
>   mwifiex: change default settings of aggrpriotbl
>   mwifiex: fill in HT cap info correctly
>   mwifiex: correct WEP status setting
>   mwifiex: update copyright descriptions
>   mwifiex: improve re-transmit handling
>   mwifiex: prevent spurious error messages
>   mwifiex: accept hex values for debugfs command drvdbg
>   mwifiex: fix errors found by checkpatch.pl
> 
> Bing Zhao (12):
>   wireless: mwifiex: initial commit for Marvell mwifiex driver
>   mwifiex: fix error and warning after rebased to 2.6.37-rc1
>   mwifiex: add WPS support
>   mwifiex: fix coding style warning: suspect code indent
>   mwifiex: handle error cases if init commands fail
>   mwifiex: move re-order table cleanup out of TX spinlock
>   mwifiex: fix warm-reset crash issue
>   mwifiex: get power save status in STA-AP mode
>   mwifiex: set sysfs physical device reference for netdev
>   mwifiex: fix checkpatch.pl warning
>   mwifiex: remove MWIFIEX_PACK_START
>   mwifiex: remove mwifiex_ prefix from the filenames
> 
> Kiran Divekar (2):
>   mwifiex: handle erroneous response of sleep confirm
>   mwifiex: set card quirk MMC_QUIRK_BLKSZ_FOR_BYTE_MODE
> 
> 

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-02 19:33 ` John W. Linville
@ 2010-12-02 19:58   ` Johannes Berg
  0 siblings, 0 replies; 23+ messages in thread
From: Johannes Berg @ 2010-12-02 19:58 UTC (permalink / raw)
  To: John W. Linville
  Cc: Bing Zhao, linux-wireless, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar

On Thu, 2010-12-02 at 14:33 -0500, John W. Linville wrote:

> I would like to merge this in this cycle.  If you are interested in
> reviewing this driver, please do so soon.

I know there's a Norwegian bus stop or town or something called "Hell"
that's shown frozen on google maps, but still, no way!

This thing ships a whole bunch of private wext stuff, and a whole load
of other junk.

johannes


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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-02  1:31 [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
  2010-12-02 19:33 ` John W. Linville
@ 2010-12-03 12:53 ` Johannes Berg
  2010-12-03 15:06   ` Greg KH
                     ` (4 more replies)
  1 sibling, 5 replies; 23+ messages in thread
From: Johannes Berg @ 2010-12-03 12:53 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Greg KH, David S. Miller

On Wed, 2010-12-01 at 17:31 -0800, Bing Zhao wrote:
> The mwifiex driver for Marvell 802.11n chipset SD8787 is available at
> git://git.marvell.com/mwifiex.git. Both STA mode and Mobile hotspot
> mode are supported.
> 
> git pull git://git.marvell.com/mwifiex.git master

Please post patches, not git trees.

But since John is holding us somewhat hostage by saying he'll consider
merging this, and apparently you don't have the taste to even consider
the review comments you have gotten before, I took a brief look to
*prove* that this driver cannot be merged as is.


Here's a short list of things to fix:
 * __packed
 * ENTER/LEAVE must go
 * enum mwifiex_status must go -- use errno
 * private ioctls were grandfathered in,
   but aren't allowed in new drivers
 * do you really need your own crypto mode definitions?
 * your pseudo-kerneldoc comments "/**" don't conform
   to the right format
 * private locking wrappers are not allowed (mwifiex_spin_lock etc)
 * private debugging like PRINTM is not allowed
 * there's exactly one space after "#include"
 * struct eth_803_hdr? are you serious? and you even have
   it twice: struct eth_II_hdr
 * enum ieee_types_elementid_e must go
 * similarly, almost all of ieee.h
 * no bitfields and BIG_ENDIAN_BITFIELD allowed
 * not all allocations are GFP_ATOMIC, use wisely and
   GFP_KERNEL in most places
 * a wifi driver that's doing stuff with sockets (nl_sk, sk_socket)?
   explain, in MUCH detail (or preferably just get rid of it)
 * there's debugfs_remove_recursive
 * some functions like mwifiex_is_network_compatible need to be broken
   into smaller ones to avoid the crap indentation they have
 * mwifiex_uap_ap_cfg_parse_data. Must I say more?
 * struct mwifiex_buffer *mbuf? Is this a BSD driver? We have SKBs, get
   rid of this. (Oh and skbs have a CB)
 * mwifiex_init_lock/mwifiex_free_lock -- I'd laugh in your general
   direction if it wasn't so sad
 * mwifiex_util_peek_list etc.: learn about list.h
 * mwifiex_init_timer -- still sad, dynamically allocating timers? just
   like spinlocks, they can be embedded and make your code simpler

Ok good enough, that should keep you busy for a while...

The above is might be a good basis for a TODO file for staging...

johannes


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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 12:53 ` Johannes Berg
@ 2010-12-03 15:06   ` Greg KH
       [not found]   ` <477F20668A386D41ADCC57781B1F704307D59F9D6D@SC-VEXCH1.marvell.com>
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 23+ messages in thread
From: Greg KH @ 2010-12-03 15:06 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Bing Zhao, linux-wireless, John W. Linville, Dan Williams,
	David Woodhouse, Amitkumar Karwar, Kiran Divekar,
	David S. Miller

On Fri, Dec 03, 2010 at 01:53:00PM +0100, Johannes Berg wrote:
> On Wed, 2010-12-01 at 17:31 -0800, Bing Zhao wrote:
> > The mwifiex driver for Marvell 802.11n chipset SD8787 is available at
> > git://git.marvell.com/mwifiex.git. Both STA mode and Mobile hotspot
> > mode are supported.
> > 
> > git pull git://git.marvell.com/mwifiex.git master
> 
> Please post patches, not git trees.
> 
> But since John is holding us somewhat hostage by saying he'll consider
> merging this, and apparently you don't have the taste to even consider
> the review comments you have gotten before, I took a brief look to
> *prove* that this driver cannot be merged as is.
> 
> 
> Here's a short list of things to fix:
>  * __packed
>  * ENTER/LEAVE must go
>  * enum mwifiex_status must go -- use errno
>  * private ioctls were grandfathered in,
>    but aren't allowed in new drivers
>  * do you really need your own crypto mode definitions?
>  * your pseudo-kerneldoc comments "/**" don't conform
>    to the right format
>  * private locking wrappers are not allowed (mwifiex_spin_lock etc)
>  * private debugging like PRINTM is not allowed
>  * there's exactly one space after "#include"
>  * struct eth_803_hdr? are you serious? and you even have
>    it twice: struct eth_II_hdr
>  * enum ieee_types_elementid_e must go
>  * similarly, almost all of ieee.h
>  * no bitfields and BIG_ENDIAN_BITFIELD allowed
>  * not all allocations are GFP_ATOMIC, use wisely and
>    GFP_KERNEL in most places
>  * a wifi driver that's doing stuff with sockets (nl_sk, sk_socket)?
>    explain, in MUCH detail (or preferably just get rid of it)
>  * there's debugfs_remove_recursive
>  * some functions like mwifiex_is_network_compatible need to be broken
>    into smaller ones to avoid the crap indentation they have
>  * mwifiex_uap_ap_cfg_parse_data. Must I say more?
>  * struct mwifiex_buffer *mbuf? Is this a BSD driver? We have SKBs, get
>    rid of this. (Oh and skbs have a CB)
>  * mwifiex_init_lock/mwifiex_free_lock -- I'd laugh in your general
>    direction if it wasn't so sad
>  * mwifiex_util_peek_list etc.: learn about list.h
>  * mwifiex_init_timer -- still sad, dynamically allocating timers? just
>    like spinlocks, they can be embedded and make your code simpler
> 
> Ok good enough, that should keep you busy for a while...
> 
> The above is might be a good basis for a TODO file for staging...

Yeah, that sounds like plenty of reasons for this to be in staging for
now.  Bing, care to send me patches that add the driver to
drivers/staging/ with a TODO file that at least contains the information
above in it?  If so, I'll be glad to queue it up there.

thanks,

greg k-h

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
       [not found]     ` <77956EDC1B917843AC9B7965A3BD78B058FEF48E24@SC-VEXCH2.marvell.com>
@ 2010-12-03 18:39       ` Johannes Berg
  2010-12-03 19:11         ` John W. Linville
  2010-12-04  0:59         ` [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
  0 siblings, 2 replies; 23+ messages in thread
From: Johannes Berg @ 2010-12-03 18:39 UTC (permalink / raw)
  To: Frank Huang; +Cc: Bing Zhao, linux-wireless

On Fri, 2010-12-03 at 09:01 -0800, Frank Huang wrote:
	
> [snip]

Mind you, there will definitely be more things to change in this
driver ... that was just the tip of the iceberg really.

Also, there is a lot of stuff talking of "ioctl". I initially wrongly
assumed you were using wireless extensions or something -- I apologise
for that misconception (but you'll have to agree that it was an easy
mistake to make!). However, the "ioctl" layer in the driver needs to be
_dissolved_ entirely, there's no real reason why for example
mwifiex_set_rf_channel() shouldn't directly call into the functions set
that the channel, rather than allocating an "ioctl" request and calling
it.

A better exmaple might be mwifiex_set_tx_power -- it calls
mwifiex_request_ioctl, which calls mwifiex_ioctl, which calls a
mode-dependent ioctl handler, which is, say, mwifiex_ops_sta_ioctl --
which then parses the arguments and calls mwifiex_power_ioctl. This in
turn calls mwifiex_power_ioctl_set_power, which finally does something
like allocating a command.

Almost *everything* described in that paragraph should be dissolved --
mwifiex_set_tx_power() should call a function pointer like
ops.set_tx_power which is set to a function similar to
mwifiex_power_ioctl_set_power, but that similar function should probably
wait for the command to be processed by the device as well.

There's really no need to marshal parameters and settings a few times
before they arrive at the hardware!

A more minor thing: there are a lot of static forward declarations that
aren't really necessary if you shuffle the code a bit -- that would be
appreciated.


On a broader view, I would suggest that you stop thinking of your driver
as special. Clearly, it is dear to you, as are everyone's drivers to
them, but in the overall ecosystem it should fit in with a minimum of
fuzz, and not require special tools or special programming. The custom
wireless events, for example, are entirely useless to existing
applications. Similarly, NETLINK_MARVELL (not to mention the abuse of
the netlink system a driver presents that unilaterally declares that a
given netlink ID is reserved for it without making that known to the
kernel at large).


All this said, though, don't think I'm entirely negative. I'm happy
there's a driver, and that you're starting to engage with the community
(although I don't quite understand why your response was private). And
the driver code is at least clean -- I may not agree with how it works,
but at least I don't have to run it through Lindent to protect myself
from eye cancer :)

Mind you, I haven't done a cfg80211 API review at all. I'll do that when
the code flow is easier to follow and not hidden in multiple abstraction
layers and "ioctls".

johannes


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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 18:39       ` Johannes Berg
@ 2010-12-03 19:11         ` John W. Linville
  2010-12-03 21:17           ` [PATCH 0/3] mwifiex: remove some stuff John W. Linville
                             ` (3 more replies)
  2010-12-04  0:59         ` [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
  1 sibling, 4 replies; 23+ messages in thread
From: John W. Linville @ 2010-12-03 19:11 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Frank Huang, Bing Zhao, linux-wireless

On Fri, Dec 03, 2010 at 07:39:28PM +0100, Johannes Berg wrote:
> On Fri, 2010-12-03 at 09:01 -0800, Frank Huang wrote:
> 	
> > [snip]
> 
> Mind you, there will definitely be more things to change in this
> driver ... that was just the tip of the iceberg really.

FWIW, I think it would be worthwhile to remove the uAP bits, at least
for working towards the initial merge.  That can live out of tree
at least for now.

That will remove some of the wireless events stuff.  Probably the
other wireless events stuff can be removed as well.

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

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

* [PATCH 0/3] mwifiex: remove some stuff...
  2010-12-03 19:11         ` John W. Linville
@ 2010-12-03 21:17           ` John W. Linville
  2010-12-03 22:22             ` Bing Zhao
  2010-12-03 21:17           ` [PATCH 1/3] mwifiex: remove uAP functionality John W. Linville
                             ` (2 subsequent siblings)
  3 siblings, 1 reply; 23+ messages in thread
From: John W. Linville @ 2010-12-03 21:17 UTC (permalink / raw)
  To: Bing Zhao, linux-wireless; +Cc: John W. Linville

This series remvoes lots of stuff -- some bits might even be necessary,
but if so it is worth thinking about why that may be.

Not tested...YMMV...

John

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

* [PATCH 1/3] mwifiex: remove uAP functionality
  2010-12-03 19:11         ` John W. Linville
  2010-12-03 21:17           ` [PATCH 0/3] mwifiex: remove some stuff John W. Linville
@ 2010-12-03 21:17           ` John W. Linville
  2010-12-03 21:17           ` [PATCH 2/3] mwifiex: remove NETLINK_MARVELL and associate madness John W. Linville
  2010-12-03 21:17           ` [PATCH 3/3] mwifiex: remove questionable wireless_send_event stuff John W. Linville
  3 siblings, 0 replies; 23+ messages in thread
From: John W. Linville @ 2010-12-03 21:17 UTC (permalink / raw)
  To: Bing Zhao, linux-wireless; +Cc: John W. Linville

Let's remove this from consideration for now...

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
 drivers/net/wireless/mwifiex/11n.h           |   43 -
 drivers/net/wireless/mwifiex/11n_aggr.c      |    6 +-
 drivers/net/wireless/mwifiex/11n_rxreorder.c |    7 +-
 drivers/net/wireless/mwifiex/11n_rxreorder.h |    2 +-
 drivers/net/wireless/mwifiex/Makefile        |    4 -
 drivers/net/wireless/mwifiex/README          |   44 -
 drivers/net/wireless/mwifiex/cfg80211.c      |  130 +--
 drivers/net/wireless/mwifiex/cmdevt.c        |   63 +-
 drivers/net/wireless/mwifiex/debugfs.c       |  319 +-----
 drivers/net/wireless/mwifiex/decl.h          |    8 +-
 drivers/net/wireless/mwifiex/fw.h            |  370 ------
 drivers/net/wireless/mwifiex/init.c          |    8 +-
 drivers/net/wireless/mwifiex/ioctl.h         |  216 +----
 drivers/net/wireless/mwifiex/join.c          |    4 +-
 drivers/net/wireless/mwifiex/main.c          |  176 +---
 drivers/net/wireless/mwifiex/main.h          |   69 +-
 drivers/net/wireless/mwifiex/sdio.c          |    4 -
 drivers/net/wireless/mwifiex/sta_cmd.c       |    4 +-
 drivers/net/wireless/mwifiex/sta_cmdresp.c   |    2 +-
 drivers/net/wireless/mwifiex/sta_event.c     |    2 +-
 drivers/net/wireless/mwifiex/sta_ioctl.c     |    6 +-
 drivers/net/wireless/mwifiex/sta_rx.c        |    2 +-
 drivers/net/wireless/mwifiex/sta_tx.c        |    2 +-
 drivers/net/wireless/mwifiex/txrx.c          |   25 +-
 drivers/net/wireless/mwifiex/uap.c           |   99 --
 drivers/net/wireless/mwifiex/uap.h           |  160 ---
 drivers/net/wireless/mwifiex/uap_cmdevent.c  | 1544 --------------------------
 drivers/net/wireless/mwifiex/uap_ioctl.c     |  397 -------
 drivers/net/wireless/mwifiex/uap_txrx.c      |  416 -------
 drivers/net/wireless/mwifiex/util.c          |   58 +-
 30 files changed, 110 insertions(+), 4080 deletions(-)
 delete mode 100644 drivers/net/wireless/mwifiex/uap.c
 delete mode 100644 drivers/net/wireless/mwifiex/uap.h
 delete mode 100644 drivers/net/wireless/mwifiex/uap_cmdevent.c
 delete mode 100644 drivers/net/wireless/mwifiex/uap_ioctl.c
 delete mode 100644 drivers/net/wireless/mwifiex/uap_txrx.c

diff --git a/drivers/net/wireless/mwifiex/11n.h b/drivers/net/wireless/mwifiex/11n.h
index 4095f3d..65f9ae8 100644
--- a/drivers/net/wireless/mwifiex/11n.h
+++ b/drivers/net/wireless/mwifiex/11n.h
@@ -91,49 +91,6 @@ enum mwifiex_status mwifiex_cmd_amsdu_aggr_ctrl(struct mwifiex_private *priv,
 						void *data_buf);
 
 /*
- * This function checks whether a station has 11N enabled or not.
- */
-static inline u8 is_station_11n_enabled(struct mwifiex_private *priv, u8 *mac)
-{
-	struct sta_node *sta_ptr = NULL;
-	sta_ptr = mwifiex_get_station_entry(priv, mac);
-	if (sta_ptr)
-		return (sta_ptr->is_11n_enabled) ? true : false;
-	return false;
-}
-
-/*
- * This function checks whether a station allows AMPDU or not
- */
-static inline u8 is_station_ampdu_allowed(struct mwifiex_private *priv,
-					  struct mwifiex_ra_list_tbl *ptr,
-					  int tid)
-{
-	struct sta_node *sta_ptr = NULL;
-	sta_ptr = mwifiex_get_station_entry(priv, ptr->ra);
-	if (sta_ptr) {
-		if (priv->sec_info.wapi_enabled && !sta_ptr->wapi_key_on)
-			return false;
-		return ((sta_ptr->ampdu_sta[tid] != BA_STREAM_NOT_ALLOWED)
-				? true : false);
-	}
-	return false;
-}
-
-/*
- * This function disable station ampdu for specific tid
- */
-static inline void disable_station_ampdu(struct mwifiex_private *priv,
-					 u8 tid, u8 *ra)
-{
-	struct sta_node *sta_ptr = NULL;
-	sta_ptr = mwifiex_get_station_entry(priv, ra);
-	if (sta_ptr)
-		sta_ptr->ampdu_sta[tid] = BA_STREAM_NOT_ALLOWED;
-	return;
-}
-
-/*
  * This function checks whether AMPDU is allowed or not for a particular TID.
  */
 static inline u8
diff --git a/drivers/net/wireless/mwifiex/11n_aggr.c b/drivers/net/wireless/mwifiex/11n_aggr.c
index 69f7fa2..a9a28ed 100644
--- a/drivers/net/wireless/mwifiex/11n_aggr.c
+++ b/drivers/net/wireless/mwifiex/11n_aggr.c
@@ -270,10 +270,8 @@ mwifiex_11n_deaggregate_pkt(struct mwifiex_private *priv,
 		mbuf_daggr->priority = mbuf->priority;
 		memcpy(mbuf_daggr->buffer + mbuf_daggr->data_offset, data,
 								pkt_len);
-		if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP)
-			ret = mwifiex_uap_recv_packet(priv, mbuf_daggr);
-		else
-			ret = mwifiex_recv_packet(adapter, mbuf_daggr);
+
+		ret = mwifiex_recv_packet(adapter, mbuf_daggr);
 
 		switch (ret) {
 		case MWIFIEX_STATUS_PENDING:
diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.c b/drivers/net/wireless/mwifiex/11n_rxreorder.c
index 3461d52..06bf96f 100644
--- a/drivers/net/wireless/mwifiex/11n_rxreorder.c
+++ b/drivers/net/wireless/mwifiex/11n_rxreorder.c
@@ -37,11 +37,6 @@ mwifiex_11n_dispatch_pkt(struct mwifiex_private *priv, void *payload)
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
 	struct mwifiex_adapter *adapter = priv->adapter;
 
-	if (GET_BSS_ROLE((struct mwifiex_private *)priv) ==
-						MWIFIEX_BSS_ROLE_UAP)
-		return mwifiex_process_uap_rx_packet(priv,
-					(struct mwifiex_buffer *)payload);
-
 	ret = mwifiex_process_rx_packet(adapter,
 					(struct mwifiex_buffer *) payload);
 	return ret;
@@ -210,7 +205,7 @@ mwifiex_11n_delete_rx_reorder_tbl_entry(struct mwifiex_private *priv,
  * This function returns the pointer to an entry in Rx reordering
  * table which matches the given TA/TID pair.
  */
-struct mwifiex_rx_reorder_tbl *
+static struct mwifiex_rx_reorder_tbl *
 mwifiex_11n_get_rx_reorder_tbl(struct mwifiex_private *priv, int tid, u8 *ta)
 {
 	struct mwifiex_rx_reorder_tbl *rx_reor_tbl_ptr;
diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.h b/drivers/net/wireless/mwifiex/11n_rxreorder.h
index ba0454f..e9b82cd 100644
--- a/drivers/net/wireless/mwifiex/11n_rxreorder.h
+++ b/drivers/net/wireless/mwifiex/11n_rxreorder.h
@@ -67,7 +67,7 @@ enum mwifiex_status mwifiex_cmd_11n_addba_req(struct mwifiex_private *priv,
 					      struct host_cmd_ds_command *cmd,
 					      void *data_buf);
 void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv);
-struct mwifiex_rx_reorder_tbl *mwifiex_11n_get_rx_reorder_tbl(struct
+struct mwifiex_rx_reorder_tbl *mwifiex_11n_get_rxreorder_tbl(struct
 							   mwifiex_private
 							   *priv, int tid,
 							   u8 *ta);
diff --git a/drivers/net/wireless/mwifiex/Makefile b/drivers/net/wireless/mwifiex/Makefile
index 4268f81..e689d1d 100644
--- a/drivers/net/wireless/mwifiex/Makefile
+++ b/drivers/net/wireless/mwifiex/Makefile
@@ -34,10 +34,6 @@ mwifiex-y += sta_event.o
 mwifiex-y += sta_tx.o
 mwifiex-y += sta_rx.o
 mwifiex-y += cfg80211.o
-mwifiex-y += uap.o
-mwifiex-y += uap_ioctl.o
-mwifiex-y += uap_cmdevent.o
-mwifiex-y += uap_txrx.o
 mwifiex-$(CONFIG_DEBUG_FS) += debugfs.o
 obj-$(CONFIG_MWIFIEX) += mwifiex.o
 
diff --git a/drivers/net/wireless/mwifiex/README b/drivers/net/wireless/mwifiex/README
index 4546c6e..1c01854 100644
--- a/drivers/net/wireless/mwifiex/README
+++ b/drivers/net/wireless/mwifiex/README
@@ -762,48 +762,4 @@ esuppmode
 		(The current RSN mode is WPA, active pairwise cipher is TKIP and
 		 active group cipher is TKIP.)
 
-bssctrl
-	This command is used to start/stop the AP mode, so that UAP will start/stop transmitting beacon.
-
-	Path: /debugfs/mwifiex/uapX/bssctrl
-        Usage:
-
-		echo "1" > bssctrl     : start the AP mode
-		echo "0" > bssctrl     : stop the AP mode and disconnect all stations.
-		cat bssctrl            : Get the current state (start/stop)
-apcfg
-
-	This command is used to set/get the AP configurations. Here string
-	"ASCII_CMD=AP_CFG" is minimum requirement in the ASCII string.
-
-	Path: /debugfs/mwifiex/uapX/apcfg
-        Usage:
-	1) Set the AP configurations
-	echo "ASCII_CMD=AP_CFG,SSID=TEST_uAP,[SEC=sec,][KEY=key,]
-			[CHANNEL=channel,][PREAMBLE=peramble,][MAX_STA_NUM=max_sta_num,][END]" > apcfg
-
-	Where the parameters are:
-		SSID:       Set SSID to be used in beacon and probe response
-		[SEC]:      Security modes - open or wpa2-psk
-		[KEY]:      Encrypted key for WPA2-PSK, minimum 8 chars
-		[CHANNEL]:  Channel to be selected
-		[PREAMBLE]: Preamble
-		[MAX_STA_NUM]:  Maximum station count
-		[END]:      Optional termination in ASCII string
-
-	Examples:
-		echo "ASCII_CMD=AP_CFG,SSID=TEST_uAP" > apcfg
-					: Set AP SSID to "TEST_uAP"
-		echo "ASCII_CMD=AP_CFG,SSID=TEST_uAP,SEC=open" > apcfg
-					: Set AP SSID to "TEST_uAP" and
-					security mode is disabled
-		echo "ASCII_CMD=AP_CFG,SSID=TEST_uAP,SEC=WPA2-PSK,KEY=ecbe5facdbfe234a" > apcfg
-					: Set AP SSID to "TEST_uAP" and security mode
-					to WPA2-SPK and encrypted key ecbe5facdbfe234a
-		echo "ASCII_CMD=AP_CFG,SSID=TEST_uAP,CHANNEL=8" > apcfg
-					: Set AP SSID to "TEST_uAP" and
-					  set the AP channel to 8
-
-	2) Get the AP configurations
-	cat apcfg
 ===============================================================================
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 674c716..d3b2b3e 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -72,33 +72,6 @@ static int mwifiex_cfg80211_set_power_mgmt(struct wiphy *wiphy,
 static int mwifiex_cfg80211_set_tx_power(struct wiphy *wiphy,
 					 enum nl80211_tx_power_setting type,
 					 int dbm);
-
-static int mwifiex_uap_cfg80211_get_station(struct wiphy *wiphy,
-					    struct net_device *dev,
-					    u8 *mac,
-					    struct station_info *sinfo);
-
-static int mwifiex_uap_cfg80211_set_wiphy_params(struct wiphy *wiphy,
-						 u32 changed);
-
-static int mwifiex_uap_cfg80211_set_channel(struct wiphy *wiphy,
-					struct net_device *dev,
-					struct ieee80211_channel *chan,
-					enum nl80211_channel_type channel_type);
-
-static int mwifiex_uap_cfg80211_del_station(struct wiphy *wiphy,
-					    struct net_device *dev,
-					    u8 *mac);
-
-static int mwifiex_uap_cfg80211_dump_station(struct wiphy *wiphy,
-					     struct net_device *dev,
-					     int idx, u8 *mac,
-					     struct station_info *sinfo);
-
-static int mwifiex_uap_cfg80211_set_tx_power(struct wiphy *wiphy,
-					     enum nl80211_tx_power_setting type,
-					     int dbm);
-
 static enum mwifiex_status
 mwifiex_inform_bss_from_scan_result(struct mwifiex_private *priv,
 		struct mwifiex_802_11_ssid *ssid);
@@ -1428,76 +1401,6 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy, struct net_device *dev,
 	return 0;
 }
 
-/** uap cfg80211 operations */
-static struct cfg80211_ops mwifiex_uap_cfg80211_ops = {
-	.get_station = mwifiex_uap_cfg80211_get_station,
-	.set_wiphy_params = mwifiex_uap_cfg80211_set_wiphy_params,
-	.set_channel = mwifiex_uap_cfg80211_set_channel,
-	.del_station = mwifiex_uap_cfg80211_del_station,
-	.dump_station = mwifiex_uap_cfg80211_dump_station,
-	.set_tx_power = mwifiex_uap_cfg80211_set_tx_power,
-};
-
-static int
-mwifiex_uap_cfg80211_get_station(struct wiphy *wiphy,
-			     struct net_device *dev,
-			     u8 *mac, struct station_info *sinfo)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
-static int
-mwifiex_uap_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
-static int
-mwifiex_uap_cfg80211_set_channel(struct wiphy *wiphy,
-			     struct net_device *dev,
-			     struct ieee80211_channel *chan,
-			     enum nl80211_channel_type channel_type)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
-static int
-mwifiex_uap_cfg80211_del_station(struct wiphy *wiphy,
-				 struct net_device *dev,
-				 u8 *mac)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
-static int
-mwifiex_uap_cfg80211_dump_station(struct wiphy *wiphy,
-				  struct net_device *dev,
-				  int idx, u8 *mac,
-				  struct station_info *sinfo)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
-static int
-mwifiex_uap_cfg80211_set_tx_power(struct wiphy *wiphy,
-				  enum nl80211_tx_power_setting type,
-				  int dbm)
-{
-	ENTER();
-	return 0;
-	LEAVE();
-}
-
 /*
  * This function sets up the CFG802.11 specific HT capability fields
  * with default values.
@@ -1566,30 +1469,17 @@ mwifiex_register_cfg80211(struct net_device *dev, u8 *mac,
 		ret = -ENOMEM;
 		goto done;
 	}
-
-	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) {
-		wdev->wiphy = wiphy_new(&mwifiex_cfg80211_ops,
-					sizeof(struct mwifiex_private *));
-		if (!wdev->wiphy) {
-			ret = -ENOMEM;
-			goto done;
-		}
-		wdev->iftype = NL80211_IFTYPE_STATION;
-		wdev->wiphy->interface_modes =
-		BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
-		wdev->wiphy->reg_notifier = mwifiex_reg_notifier;
-	} else if (priv->bss_type == MWIFIEX_BSS_TYPE_UAP) {
-		wdev->wiphy = wiphy_new(&mwifiex_uap_cfg80211_ops,
-				sizeof(struct mwifiex_private *));
-		if (!wdev->wiphy) {
-			ret = -ENOMEM;
-			goto done;
-		}
-		wdev->iftype = NL80211_IFTYPE_AP;
-		wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_AP);
+	wdev->wiphy =
+		wiphy_new(&mwifiex_cfg80211_ops,
+			  sizeof(struct mwifiex_private *));
+	if (!wdev->wiphy) {
+		ret = -ENOMEM;
+		goto done;
 	}
-
+	wdev->iftype = NL80211_IFTYPE_STATION;
 	wdev->wiphy->max_scan_ssids = 10;
+	wdev->wiphy->interface_modes =
+		BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
 	wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &mwifiex_band_2ghz;
 	wdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &mwifiex_band_5ghz;
 
@@ -1610,6 +1500,8 @@ mwifiex_register_cfg80211(struct net_device *dev, u8 *mac,
 	/* We are using custom domains */
 	wdev->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
 
+	wdev->wiphy->reg_notifier = mwifiex_reg_notifier;
+
 	/** Set struct mwifiex_private pointer in wiphy_priv */
 	wdev_priv = wiphy_priv(wdev->wiphy);
 
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
index 6ae9e22..6f22f5a 100644
--- a/drivers/net/wireless/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/mwifiex/cmdevt.c
@@ -584,7 +584,7 @@ mwifiex_process_event(struct mwifiex_adapter *adapter)
 		       tstamp.tv_sec, tstamp.tv_usec, eventcause);
 	}
 
-	ret = priv->ops.process_event(priv);
+	ret = mwifiex_process_sta_event(priv);
 
 	adapter->event_cause = 0;
 	adapter->mwifiex_buffer_event = NULL;
@@ -670,7 +670,7 @@ mwifiex_prepare_cmd(struct mwifiex_private *priv,
 
 	/* Prepare command */
 	if (cmd_no)
-		ret = priv->ops.prepare_cmd(priv, cmd_no, cmd_action,
+		ret = mwifiex_sta_prepare_cmd(priv, cmd_no, cmd_action,
 					      cmd_oid, ioctl_buf, data_buf,
 					      cmd_ptr);
 	else {
@@ -992,7 +992,7 @@ mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
 							ioctl_buf);
 	} else {
 		/* handle response */
-		ret = priv->ops.process_cmdresp(priv, cmdresp_no, resp,
+		ret = mwifiex_process_sta_cmdresp(priv, cmdresp_no, resp,
 						  ioctl_buf);
 	}
 
@@ -1542,56 +1542,6 @@ mwifiex_cmd_enh_power_mode(struct mwifiex_private *priv,
 			PRINTM(MCMND, "PS Command: Enter Auto Deep Sleep\n");
 			auto_ds->deep_sleep_timeout = cpu_to_le16(idletime);
 		}
-
-		if (ps_bitmap & (BITMAP_UAP_INACT_PS | BITMAP_UAP_DTIM_PS)) {
-			struct mwifiex_ds_ps_mgmt *ps_mgmt =
-					(struct mwifiex_ds_ps_mgmt *)data_buf;
-			struct mwifiex_ie_types_sleep_param *sleep_tlv = NULL;
-			struct mwifiex_ie_types_inact_sleep_param *inact_tlv =
-									NULL;
-			if (ps_mgmt->flags & PS_FLAG_SLEEP_PARAM) {
-				sleep_tlv = (struct
-					     mwifiex_ie_types_sleep_param
-					     *)tlv;
-				sleep_tlv->header.type = cpu_to_le16(
-						TLV_TYPE_AP_SLEEP_PARAM);
-				sleep_tlv->header.len = cpu_to_le16(sizeof(
-					struct mwifiex_ie_types_sleep_param) -
-					sizeof(struct mwifiex_ie_types_header));
-				sleep_tlv->ctrl_bitmap = cpu_to_le32(
-					ps_mgmt->sleep_param.ctrl_bitmap);
-				sleep_tlv->min_sleep = cpu_to_le32(
-					ps_mgmt->sleep_param.min_sleep);
-				sleep_tlv->max_sleep = cpu_to_le32(
-					ps_mgmt->sleep_param.max_sleep);
-				cmd_size += sizeof(
-					struct mwifiex_ie_types_sleep_param);
-				tlv += sizeof(
-					struct mwifiex_ie_types_sleep_param);
-			}
-			if (ps_mgmt->flags & PS_FLAG_INACT_SLEEP_PARAM) {
-				inact_tlv = (struct
-					     mwifiex_ie_types_inact_sleep_param
-					     *)tlv;
-				inact_tlv->header.type = cpu_to_le16(
-						TLV_TYPE_AP_INACT_SLEEP_PARAM);
-				inact_tlv->header.len = cpu_to_le16(
-					sizeof(struct
-					mwifiex_ie_types_inact_sleep_param)
-					- sizeof(struct
-					mwifiex_ie_types_header));
-				inact_tlv->inactivity_to = cpu_to_le32(
-					ps_mgmt->inact_param.inactivity_to);
-				inact_tlv->min_awake = cpu_to_le32(
-					ps_mgmt->inact_param.min_awake);
-				inact_tlv->max_awake = cpu_to_le32(
-					ps_mgmt->inact_param.max_awake);
-				cmd_size += sizeof(struct
-					mwifiex_ie_types_inact_sleep_param);
-				tlv += sizeof(struct
-					mwifiex_ie_types_inact_sleep_param);
-			}
-		}
 		cmd->size = cpu_to_le16(cmd_size);
 	}
 	return MWIFIEX_STATUS_SUCCESS;
@@ -1631,13 +1581,6 @@ mwifiex_ret_enh_power_mode(struct mwifiex_private *priv,
 				       "Setting uapsd/pps mode to TRUE\n");
 			}
 		}
-		if (ps_mode->params.auto_ps.ps_bitmap &
-				cpu_to_le16(BITMAP_UAP_INACT_PS |
-					    BITMAP_UAP_DTIM_PS)) {
-			adapter->ps_mode = MWIFIEX_802_11_POWER_MODE_PSP;
-			PRINTM(MCMND, "Enabled uAP power save\n");
-		}
-
 	} else if (action == DIS_AUTO_PS) {
 		if (ps_bitmap & BITMAP_AUTO_DS) {
 			priv->adapter->is_deep_sleep = false;
diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c
index fa94c6e..4ea5cbc 100644
--- a/drivers/net/wireless/mwifiex/debugfs.c
+++ b/drivers/net/wireless/mwifiex/debugfs.c
@@ -20,7 +20,6 @@
 #include <linux/debugfs.h>
 
 #include "main.h"
-#include "uap.h"
 
 
 static struct dentry *mwifiex_dfs_dir;
@@ -2404,216 +2403,6 @@ exit:
 	return ret;
 }
 
-static int bssctrl;
-/*
- * Proc bssctrl file write handler.
- *
- * This function is called when the 'bssctrl' file is opened for writing
- *
- * This function can be used to start/stop the AP mode.
- */
-static ssize_t
-mwifiex_bssctrl_write(struct file *file,
-		      const char __user *ubuf, size_t count, loff_t *ppos)
-{
-	struct mwifiex_private *priv =
-		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
-	size_t buf_size = min(count, (size_t) (PAGE_SIZE - 1));
-	int ret = 0;
-	ENTER();
-
-	if (!buf)
-		return -ENOMEM;
-
-	if (copy_from_user(buf, ubuf, buf_size)) {
-		ret = -EFAULT;
-		goto done;
-	}
-
-	ret = sscanf(buf, "%d", &bssctrl);
-
-	if (bssctrl != 0 && bssctrl != 1) {
-		ret = -EINVAL;
-		goto done;
-	}
-	if (bssctrl == 1)
-		ret = mwifiex_uap_bss_ctrl(priv, UAP_BSS_START);
-	else if (bssctrl == 0)
-		ret = mwifiex_uap_bss_ctrl(priv, UAP_BSS_STOP);
-
-	if (!ret)
-		ret = count;
-	else
-		ret = -EINVAL;
-done:
-	free_page(addr);
-	if (ret < 0)
-		bssctrl = 0;
-	LEAVE();
-	return ret;
-}
-
-/*
- * Proc bssctrl file read handler.
- *
- * This function is called when the 'bssctrl' file is opened for reading
- *
- * This function can be used to get the current AP mode state (start/stop).
- */
-static ssize_t
-mwifiex_bssctrl_read(struct file *file, char __user *ubuf,
-		    size_t count, loff_t *ppos)
-{
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
-	int pos = 0, ret = 0;
-	ENTER();
-
-	if (!buf)
-		return -ENOMEM;
-
-	pos += snprintf(buf, PAGE_SIZE, "%d\n", bssctrl);
-
-	ret = simple_read_from_buffer(ubuf, count, ppos, buf, pos);
-
-	free_page(addr);
-
-	LEAVE();
-
-	return ret;
-}
-
-/*
- * Proc apcfg file write handler.
- *
- * This function is called when the 'apcfg' file is opened for writing
- *
- * This function can be used to set following AP configuration parameters
- *      - ssid
- *      - security mode
- *      - encrypted key for WPA2-PSK
- *      - channel to be selected
- *      - preamble
- *      - maximum station count
- */
-static ssize_t
-mwifiex_apcfg_write(struct file *file,
-		      const char __user *ubuf, size_t count, loff_t *ppos)
-{
-	struct mwifiex_private *priv =
-		(struct mwifiex_private *) file->private_data;
-	unsigned long addr = get_zeroed_page(GFP_KERNEL);
-	char *buf = (char *) addr;
-	size_t buf_size = min(count, (size_t) (PAGE_SIZE - 1));
-	int ret = 0;
-	struct mwifiex_uap_bss_param sys_config;
-
-	ENTER();
-
-	if (!buf)
-		return -ENOMEM;
-
-	memset(&sys_config, 0, sizeof(struct mwifiex_uap_bss_param));
-
-	if (copy_from_user(buf, ubuf, buf_size)) {
-		ret = -EFAULT;
-		goto done;
-	}
-
-	/* Overwrite last charactor '\n' in buf by '\0' */
-	buf[buf_size - 1] = '\0';
-
-	/* Initialize the invalid values so that the correct
-	 * values below are downloaded to firmware */
-	mwifiex_set_sys_config_invalid_data(&sys_config);
-
-	/* Setting the default values */
-	sys_config.channel = 6;
-	sys_config.preamble_type = 0;
-
-	ret = mwifiex_uap_ap_cfg_parse_data(&sys_config, buf);
-	if (ret)
-		goto done;
-
-	if (MWIFIEX_STATUS_SUCCESS !=
-			mwifiex_set_get_sys_config(priv, MWIFIEX_ACT_SET,
-						   &sys_config)) {
-		ret =  -EFAULT;
-		goto done;
-	}
-
-	ret = count;
-done:
-	free_page(addr);
-	LEAVE();
-	return ret;
-}
-
-/*
- * Proc apcfg file read handler.
- *
- * This function is called when the 'apcfg' file is opened for reading
- * It prints following ap configuration information -
- *      - ssid
- *      - security mode
- *      - encrypted key for WPA2-PSK
- *      - channel to be selected
- *      - preamble
- *      - maximum station count
- */
-static ssize_t
-mwifiex_apcfg_read(struct file *file, char __user *ubuf,
-		     size_t count, loff_t *ppos)
-{
-	struct mwifiex_private *priv =
-		(struct mwifiex_private *) file->private_data;
-	unsigned long page = get_zeroed_page(GFP_KERNEL);
-	char *p = (char *) page;
-	int ret = 0;
-	struct mwifiex_uap_bss_param ap_cfg;
-
-	ENTER();
-
-	if (!p) {
-		ret = -ENOMEM;
-		goto exit;
-	}
-
-	memset(&ap_cfg, 0, sizeof(ap_cfg));
-	if (MWIFIEX_STATUS_SUCCESS !=
-			mwifiex_set_get_sys_config(priv, MWIFIEX_ACT_GET,
-						   &ap_cfg)) {
-		PRINTM(MERROR, "Error getting AP confiruration\n");
-		ret = -EFAULT;
-		goto free_and_exit;
-	}
-
-	p += sprintf(p, "ssid =\"%s\"\n", ap_cfg.ssid.ssid);
-	if (ap_cfg.protocol == PROTOCOL_NO_SECURITY)
-		p += sprintf(p, "security mode = open\n");
-	else if (ap_cfg.protocol == PROTOCOL_WPA2) {
-		p += sprintf(p, "security mode = wpa2-psk\n");
-		if (ap_cfg.wpa_cfg.length)
-			p += sprintf(p, "key = %s\n",
-						ap_cfg.wpa_cfg.passphrase);
-	}
-	if (ap_cfg.channel)
-		p += sprintf(p, "channel = %d\n", ap_cfg.channel);
-	if (ap_cfg.max_sta_count)
-		p += sprintf(p, "max station count = %d\n",
-							ap_cfg.max_sta_count);
-	ret = simple_read_from_buffer(ubuf, count, ppos, (char *) page,
-			(unsigned long) p - page);
-
-free_and_exit:
-	free_page(page);
-exit:
-	LEAVE();
-	return ret;
-}
-
 #define MWIFIEX_DFS_ADD_FILE(name) do {                                 \
 	priv->dfs_##name =                                              \
 	debugfs_create_file(#name, 0644, priv->dfs_dev_dir,             \
@@ -2668,8 +2457,6 @@ MWIFIEX_DFS_FILE_OPS(drvdbg);
 MWIFIEX_DFS_FILE_OPS(txbufcfg);
 MWIFIEX_DFS_FILE_OPS(passphrase);
 MWIFIEX_DFS_FILE_READ_OPS(esuppmode);
-MWIFIEX_DFS_FILE_OPS(bssctrl);
-MWIFIEX_DFS_FILE_OPS(apcfg);
 
 /*
  * This function creates the debug FS directory structure and the files.
@@ -2698,34 +2485,30 @@ mwifiex_dev_debugfs_init(struct mwifiex_private *priv)
 		items[i].addr += (size_t) priv->adapter;
 
 
-	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) {
-		MWIFIEX_DFS_ADD_FILE(info);
-		MWIFIEX_DFS_ADD_FILE(debug);
-		MWIFIEX_DFS_ADD_FILE(deepsleep);
-		MWIFIEX_DFS_ADD_FILE(hscfg);
-		MWIFIEX_DFS_ADD_FILE(amsduaggrctrl);
-		MWIFIEX_DFS_ADD_FILE(txaggrprio);
-		MWIFIEX_DFS_ADD_FILE(sleeppd);
-		MWIFIEX_DFS_ADD_FILE(mpactrl);
-		MWIFIEX_DFS_ADD_FILE(qoscfg);
-		MWIFIEX_DFS_ADD_FILE(atimwindow);
-		MWIFIEX_DFS_ADD_FILE(txratecfg);
-		MWIFIEX_DFS_ADD_FILE(addbapara);
-		MWIFIEX_DFS_ADD_FILE(addbareject);
-		MWIFIEX_DFS_ADD_FILE(httxcfg);
-		MWIFIEX_DFS_ADD_FILE(htcapinfo);
-		MWIFIEX_DFS_ADD_FILE(getlog);
-		MWIFIEX_DFS_ADD_FILE(antcfg);
-		MWIFIEX_DFS_ADD_FILE(regrdwr);
-		MWIFIEX_DFS_ADD_FILE(rdeeprom);
-		MWIFIEX_DFS_ADD_FILE(drvdbg);
-		MWIFIEX_DFS_ADD_FILE(txbufcfg);
-		MWIFIEX_DFS_ADD_FILE(passphrase);
-		MWIFIEX_DFS_ADD_FILE(esuppmode);
-	} else if (priv->bss_type == MWIFIEX_BSS_TYPE_UAP) {
-		MWIFIEX_DFS_ADD_FILE(bssctrl);
-		MWIFIEX_DFS_ADD_FILE(apcfg);
-	}
+	MWIFIEX_DFS_ADD_FILE(info);
+	MWIFIEX_DFS_ADD_FILE(debug);
+	MWIFIEX_DFS_ADD_FILE(deepsleep);
+	MWIFIEX_DFS_ADD_FILE(hscfg);
+	MWIFIEX_DFS_ADD_FILE(amsduaggrctrl);
+	MWIFIEX_DFS_ADD_FILE(txaggrprio);
+	MWIFIEX_DFS_ADD_FILE(sleeppd);
+	MWIFIEX_DFS_ADD_FILE(mpactrl);
+	MWIFIEX_DFS_ADD_FILE(qoscfg);
+	MWIFIEX_DFS_ADD_FILE(atimwindow);
+	MWIFIEX_DFS_ADD_FILE(txratecfg);
+	MWIFIEX_DFS_ADD_FILE(addbapara);
+	MWIFIEX_DFS_ADD_FILE(addbareject);
+	MWIFIEX_DFS_ADD_FILE(httxcfg);
+	MWIFIEX_DFS_ADD_FILE(htcapinfo);
+	MWIFIEX_DFS_ADD_FILE(getlog);
+	MWIFIEX_DFS_ADD_FILE(antcfg);
+	MWIFIEX_DFS_ADD_FILE(regrdwr);
+	MWIFIEX_DFS_ADD_FILE(rdeeprom);
+	MWIFIEX_DFS_ADD_FILE(drvdbg);
+	MWIFIEX_DFS_ADD_FILE(txbufcfg);
+	MWIFIEX_DFS_ADD_FILE(passphrase);
+	MWIFIEX_DFS_ADD_FILE(esuppmode);
+
 exit:
 	LEAVE();
 }
@@ -2741,36 +2524,30 @@ mwifiex_dev_debugfs_remove(struct mwifiex_private *priv)
 	if (!priv)
 		goto exit;
 
-	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) {
-		MWIFIEX_DFS_REM_FILE(info);
-		MWIFIEX_DFS_REM_FILE(debug);
-		MWIFIEX_DFS_REM_FILE(deepsleep);
-		MWIFIEX_DFS_REM_FILE(hscfg);
-		MWIFIEX_DFS_REM_FILE(amsduaggrctrl);
-		MWIFIEX_DFS_REM_FILE(txaggrprio);
-		MWIFIEX_DFS_REM_FILE(sleeppd);
-		MWIFIEX_DFS_REM_FILE(mpactrl);
-		MWIFIEX_DFS_REM_FILE(qoscfg);
-		MWIFIEX_DFS_REM_FILE(atimwindow);
-		MWIFIEX_DFS_REM_FILE(txratecfg);
-		MWIFIEX_DFS_REM_FILE(addbapara);
-		MWIFIEX_DFS_REM_FILE(addbareject);
-		MWIFIEX_DFS_REM_FILE(httxcfg);
-		MWIFIEX_DFS_REM_FILE(htcapinfo);
-		MWIFIEX_DFS_REM_FILE(getlog);
-		MWIFIEX_DFS_REM_FILE(antcfg);
-		MWIFIEX_DFS_REM_FILE(regrdwr);
-		MWIFIEX_DFS_REM_FILE(rdeeprom);
-		MWIFIEX_DFS_REM_FILE(drvdbg);
-		MWIFIEX_DFS_REM_FILE(txbufcfg);
-		MWIFIEX_DFS_REM_FILE(passphrase);
-		MWIFIEX_DFS_REM_FILE(esuppmode);
-		MWIFIEX_DFS_REM_FILE(dev_dir);
-	} else if (priv->bss_type == MWIFIEX_BSS_TYPE_UAP) {
-		MWIFIEX_DFS_REM_FILE(bssctrl);
-		MWIFIEX_DFS_REM_FILE(apcfg);
-		MWIFIEX_DFS_REM_FILE(dev_dir);
-	}
+	MWIFIEX_DFS_REM_FILE(info);
+	MWIFIEX_DFS_REM_FILE(debug);
+	MWIFIEX_DFS_REM_FILE(deepsleep);
+	MWIFIEX_DFS_REM_FILE(hscfg);
+	MWIFIEX_DFS_REM_FILE(amsduaggrctrl);
+	MWIFIEX_DFS_REM_FILE(txaggrprio);
+	MWIFIEX_DFS_REM_FILE(sleeppd);
+	MWIFIEX_DFS_REM_FILE(mpactrl);
+	MWIFIEX_DFS_REM_FILE(qoscfg);
+	MWIFIEX_DFS_REM_FILE(atimwindow);
+	MWIFIEX_DFS_REM_FILE(txratecfg);
+	MWIFIEX_DFS_REM_FILE(addbapara);
+	MWIFIEX_DFS_REM_FILE(addbareject);
+	MWIFIEX_DFS_REM_FILE(httxcfg);
+	MWIFIEX_DFS_REM_FILE(htcapinfo);
+	MWIFIEX_DFS_REM_FILE(getlog);
+	MWIFIEX_DFS_REM_FILE(antcfg);
+	MWIFIEX_DFS_REM_FILE(regrdwr);
+	MWIFIEX_DFS_REM_FILE(rdeeprom);
+	MWIFIEX_DFS_REM_FILE(drvdbg);
+	MWIFIEX_DFS_REM_FILE(txbufcfg);
+	MWIFIEX_DFS_REM_FILE(passphrase);
+	MWIFIEX_DFS_REM_FILE(esuppmode);
+	MWIFIEX_DFS_REM_FILE(dev_dir);
 exit:
 	LEAVE();
 }
diff --git a/drivers/net/wireless/mwifiex/decl.h b/drivers/net/wireless/mwifiex/decl.h
index 464c25d..a316446 100644
--- a/drivers/net/wireless/mwifiex/decl.h
+++ b/drivers/net/wireless/mwifiex/decl.h
@@ -25,7 +25,7 @@
 #include	<linux/wireless.h>
 
 
-#define MWIFIEX_MAX_BSS_NUM         (2)
+#define MWIFIEX_MAX_BSS_NUM         (1)
 
 #define MWIFIEX_MIN_DATA_HEADER_LEN 32	/* (sizeof(mwifiex_txpd)) */
 
@@ -65,9 +65,6 @@
 
 #define MWIFIEX_BUF_FLAG_REQUEUED_PKT      BIT(0)
 #define MWIFIEX_FLAG_TX_BUF                BIT(1)
-#define MWIFIEX_BUF_FLAG_MALLOC_BUF        BIT(2)
-#define MWIFIEX_BUF_FLAG_BRIDGE_BUF        BIT(3)
-
 
 enum mwifiex_status {
 	MWIFIEX_STATUS_FAILURE = 0xffffffff,
@@ -148,9 +145,6 @@ enum mwifiex_event_id {
 	MWIFIEX_EVENT_ID_FW_START_TX,
 	MWIFIEX_EVENT_ID_FW_BW_CHANGED,
 	MWIFIEX_EVENT_ID_HOSTWAKE_STAIE,
-	MWIFIEX_EVENT_ID_UAP_FW_BSS_START,
-	MWIFIEX_EVENT_ID_UAP_FW_BSS_ACTIVE,
-	MWIFIEX_EVENT_ID_UAP_FW_BSS_IDLE,
 
 	MWIFIEX_EVENT_ID_DRV_CONNECTED = 0x80000001,
 	MWIFIEX_EVENT_ID_DRV_DEFER_HANDLING,
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index 8a0f6b8..bafeafb 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -169,7 +169,6 @@ enum MWIFIEX_802_11_WEP_STATUS {
 
 #define TLV_TYPE_CHANNELBANDLIST    (PROPRIETARY_TLV_BASE_ID + 42)
 #define TLV_TYPE_WAPI_IE            (PROPRIETARY_TLV_BASE_ID + 94)
-#define TLV_TYPE_MGMT_IE            (PROPRIETARY_TLV_BASE_ID + 105)
 #define TLV_TYPE_ENCRYPTION_PROTO   (PROPRIETARY_TLV_BASE_ID + 64)
 #define TLV_TYPE_CIPHER             (PROPRIETARY_TLV_BASE_ID + 66)
 #define TLV_TYPE_PMK                (PROPRIETARY_TLV_BASE_ID + 68)
@@ -356,15 +355,6 @@ enum MWIFIEX_802_11_WEP_STATUS {
 #define HostCmd_CMD_CAU_REG_ACCESS                    0x00ed
 #define HostCmd_CMD_SET_BSS_MODE                      0x00f7
 
-#define HOST_CMD_APCMD_SYS_INFO                       0x00ae
-#define HOST_CMD_APCMD_SYS_RESET                      0x00af
-#define HOST_CMD_APCMD_SYS_CONFIGURE                  0x00b0
-#define HOST_CMD_APCMD_BSS_START                      0x00b1
-#define HOST_CMD_APCMD_BSS_STOP                       0x00b2
-#define HOST_CMD_APCMD_STA_LIST                       0x00b3
-#define HOST_CMD_APCMD_STA_DEAUTH                     0x00b5
-
-#define HOST_CMD_RX_DATA_PAUSE                        0x0101
 
 enum ENH_PS_MODES {
 	EN_PS = 1,
@@ -477,11 +467,6 @@ enum ENH_PS_MODES {
 
 #define EVENT_HOSTWAKE_STAIE		0x0000004d
 
-#define EVENT_MICRO_AP_STA_DEAUTH       0x0000002c
-#define EVENT_MICRO_AP_STA_ASSOC        0x0000002d
-#define EVENT_MICRO_AP_BSS_START        0x0000002e
-#define EVENT_MICRO_AP_BSS_IDLE         0x00000043
-#define EVENT_MICRO_AP_BSS_ACTIVE       0x00000044
 #define EVENT_ID_MASK                   0xffff
 #define BSS_NUM_MASK                    0xf
 
@@ -550,63 +535,6 @@ struct rxpd {
 	u8 reserved;
 } __attribute__ ((packed));
 
-struct mwifiex_uap_txpd {
-	u8  bss_type;
-	u8  bss_num;
-	__le16 tx_pkt_length;
-	__le16 tx_pkt_offset;
-	__le16 tx_pkt_type;
-	__le32 tx_control;
-	u8  priority;
-	u8  flags;
-	u8  pkt_delay_2ms;
-	u8  reserved1;
-	__le32 reserved;
-} __attribute__ ((packed));
-
-struct mwifiex_uap_rxpd {
-	u8  bss_type;
-	u8  bss_num;
-	__le16 rx_pkt_length;
-	__le16 rx_pkt_offset;
-	__le16 rx_pkt_type;
-	__le16 reserved;
-	__le16 seq_num;
-	u8  priority;
-	u8  reserved1;
-} __attribute__ ((packed));
-
-struct ieee_types_frame_ctl {
-	u8 protocol_version:2;
-	u8 type:2;
-	u8 sub_type:4;
-	u8 to_ds:1;
-	u8 from_ds:1;
-	u8 more_frag:1;
-	u8 retry:1;
-	u8 pwr_mgmt:1;
-	u8 more_data:1;
-	u8 wep:1;
-	u8 order:1;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_mgmt_frame_set {
-	u16 type;
-	u16 len;
-	struct ieee_types_frame_ctl frame_control;
-} __attribute__ ((packed));
-
-struct ieee_types_assoc_rqst {
-	u16 cap_info;
-	u16 listen_interval;
-} __attribute__ ((packed));
-
-struct ieee_types_reassoc_rqst {
-	u16 cap_info;
-	u16 listen_interval;
-	u8  current_ap_addr[MWIFIEX_MAC_ADDR_LENGTH];
-} __attribute__ ((packed));
-
 struct mwifiex_chan_scan_mode {
 #ifdef __BIG_ENDIAN__BITFIELD
 	u8 reserved_2_7:6;
@@ -868,11 +796,6 @@ struct host_cmd_ds_mac_control {
 	__le16 reserved;
 };
 
-struct host_cmd_ds_rx_data_pause {
-	u16 action;
-	u16 rx_pause;
-};
-
 struct host_cmd_ds_mac_multicast_adr {
 	__le16 action;
 	__le16 num_of_adrs;
@@ -1431,293 +1354,6 @@ struct host_cmd_ds_set_bss_mode {
 	u8 con_type;
 } __attribute__ ((packed));
 
-struct mwifiex_ie_types_macaddr {
-	struct mwifiex_ie_types_header header;
-	u8 mac[MWIFIEX_MAC_ADDR_LENGTH];
-} __attribute__ ((packed));
-
-#define TLV_TYPE_UAP_CHAN_BAND_CONFIG (PROPRIETARY_TLV_BASE_ID + 42)
-#define TLV_TYPE_UAP_MAC_ADDRESS      (PROPRIETARY_TLV_BASE_ID + 43)
-#define TLV_TYPE_UAP_BEACON_PERIOD    (PROPRIETARY_TLV_BASE_ID + 44)
-#define TLV_TYPE_UAP_DTIM_PERIOD      (PROPRIETARY_TLV_BASE_ID + 45)
-#define TLV_TYPE_UAP_TX_POWER         (PROPRIETARY_TLV_BASE_ID + 47)
-#define TLV_TYPE_UAP_BCAST_SSID_CTL   (PROPRIETARY_TLV_BASE_ID + 48)
-#define TLV_TYPE_UAP_PREAMBLE_CTL     (PROPRIETARY_TLV_BASE_ID + 49)
-#define TLV_TYPE_UAP_ANTENNA_CTL      (PROPRIETARY_TLV_BASE_ID + 50)
-#define TLV_TYPE_UAP_RTS_THRESHOLD    (PROPRIETARY_TLV_BASE_ID + 51)
-#define TLV_TYPE_UAP_RADIO_CONTROL    (PROPRIETARY_TLV_BASE_ID + 52)
-#define TLV_TYPE_UAP_TX_DATA_RATE     (PROPRIETARY_TLV_BASE_ID + 53)
-#define TLV_TYPE_UAP_PKT_FWD_CTL      (PROPRIETARY_TLV_BASE_ID + 54)
-#define TLV_TYPE_UAP_STA_INFO         (PROPRIETARY_TLV_BASE_ID + 55)
-#define TLV_TYPE_UAP_STA_MAC_ADDR_FILTER (PROPRIETARY_TLV_BASE_ID + 56)
-#define TLV_TYPE_UAP_STA_AGEOUT_TIMER (PROPRIETARY_TLV_BASE_ID + 57)
-#define TLV_TYPE_UAP_WEP_KEY          (PROPRIETARY_TLV_BASE_ID + 59)
-#define TLV_TYPE_UAP_WPA_PASSPHRASE    (PROPRIETARY_TLV_BASE_ID + 60)
-#define TLV_TYPE_UAP_ENCRYPT_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64)
-#define TLV_TYPE_UAP_AKMP             (PROPRIETARY_TLV_BASE_ID + 65)
-#define TLV_TYPE_UAP_CIPHER           (PROPRIETARY_TLV_BASE_ID + 66)
-#define TLV_TYPE_UAP_FRAG_THRESHOLD   (PROPRIETARY_TLV_BASE_ID + 70)
-#define TLV_TYPE_UAP_GRP_REKEY_TIME   (PROPRIETARY_TLV_BASE_ID + 71)
-#define TLV_TYPE_UAP_MAX_STA_CNT      (PROPRIETARY_TLV_BASE_ID + 85)
-#define TLV_TYPE_UAP_RETRY_LIMIT      (PROPRIETARY_TLV_BASE_ID + 93)
-#define TLV_TYPE_UAP_MCBC_DATA_RATE   (PROPRIETARY_TLV_BASE_ID + 98)
-#define TLV_TYPE_UAP_RSN_REPLAY_PROTECT  (PROPRIETARY_TLV_BASE_ID + 100)
-#define TLV_TYPE_UAP_MGMT_FRAME          (PROPRIETARY_TLV_BASE_ID + 104)
-#define TLV_TYPE_UAP_EAPOL_PWK_HSK_TIMEOUT  (PROPRIETARY_TLV_BASE_ID + 117)
-#define TLV_TYPE_UAP_EAPOL_PWK_HSK_RETRIES  (PROPRIETARY_TLV_BASE_ID + 118)
-#define TLV_TYPE_UAP_EAPOL_GWK_HSK_TIMEOUT  (PROPRIETARY_TLV_BASE_ID + 119)
-#define TLV_TYPE_UAP_EAPOL_GWK_HSK_RETRIES  (PROPRIETARY_TLV_BASE_ID + 120)
-#define TLV_TYPE_UAP_PS_STA_AGEOUT_TIMER (PROPRIETARY_TLV_BASE_ID + 123)
-#define TLV_TYPE_PWK_CIPHER              (PROPRIETARY_TLV_BASE_ID + 145)
-#define TLV_TYPE_GWK_CIPHER              (PROPRIETARY_TLV_BASE_ID + 146)
-
-#define SUBTYPE_ASSOC_REQUEST        0
-#define SUBTYPE_REASSOC_REQUEST      2
-
-struct mwifiex_ie_types_beacon_period {
-	struct mwifiex_ie_types_header header;
-	__le16 beacon_period;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_dtim_period {
-	struct mwifiex_ie_types_header header;
-	u8 dtim_period;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_tx_rate {
-	struct mwifiex_ie_types_header header;
-	__le16 tx_data_rate;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_mcbc_rate {
-	struct mwifiex_ie_types_header header;
-	__le16 mcbc_data_rate;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_tx_power {
-	struct mwifiex_ie_types_header header;
-	u8 tx_power;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_bcast_ssid {
-	struct mwifiex_ie_types_header header;
-	u8 bcast_ssid_ctl;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_antenna_mode {
-	struct mwifiex_ie_types_header header;
-	u8 which_antenna;
-	u8 antenna_mode;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_pkt_forward {
-	struct mwifiex_ie_types_header header;
-	u8 pkt_forward_ctl;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_max_sta_count {
-	struct mwifiex_ie_types_header header;
-	__le16 max_sta_count;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_sta_ageout {
-	struct mwifiex_ie_types_header header;
-	__le32 sta_ageout_timer;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_rts_threshold {
-	struct mwifiex_ie_types_header header;
-	__le16 rts_threshold;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_frag_threshold {
-	struct mwifiex_ie_types_header header;
-	__le16 frag_threshold;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_retry_limit {
-	struct mwifiex_ie_types_header header;
-	u8 retry_limit;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_eapol_pwk_hsk_timeout {
-	struct mwifiex_ie_types_header header;
-	__le32 pairwise_update_timeout;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_eapol_pwk_hsk_retries {
-	struct mwifiex_ie_types_header header;
-	__le32 pwk_retries;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_eapol_gwk_hsk_timeout {
-	struct mwifiex_ie_types_header header;
-	__le32 groupwise_update_timeout;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_eapol_gwk_hsk_retries {
-	struct mwifiex_ie_types_header header;
-	__le32 gwk_retries;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_mac_filter {
-	struct mwifiex_ie_types_header header;
-	u8 filter_mode;
-	u8 count;
-	u8 mac_address[1];
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_channel_band {
-	struct mwifiex_ie_types_header     header;
-	/** Band Configuration
-	 *
-	 * [7-6] Channel Selection Mode; 00 manual, 01 ACS
-	 * [3-2] Channel Width; 00 20 MHz
-	 * [1-0] Band Info; 00 2.4 GHz
-	 */
-	u8 band_config;
-	u8 channel;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_radio_control {
-	struct mwifiex_ie_types_header header;
-	u8 radio_ctl;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_encrypt_protocol {
-	struct mwifiex_ie_types_header header;
-	__le16 protocol;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_pwk_cipher {
-	struct mwifiex_ie_types_header header;
-	__le16 protocol;
-	u8 pairwise_cipher;
-	u8 reserved;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_gwk_cipher {
-	struct mwifiex_ie_types_header header;
-	u8 group_cipher;
-	u8 reserved;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_akmp {
-	struct mwifiex_ie_types_header header;
-	__le16 key_mgmt;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_rsn_replay_prot {
-	struct mwifiex_ie_types_header header;
-	u8 rsn_replay_prot;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_group_rekey_time {
-	struct mwifiex_ie_types_header header;
-	__le32 gk_rekey_time;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_wep_key {
-	struct mwifiex_ie_types_header header;
-	u8 key_index;
-	u8 is_default;
-	u8 key[1];
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_preamble {
-	struct mwifiex_ie_types_header header;
-	u8 preamble_type;
-} __attribute__ ((packed));
-
-enum SNMP_MIB_UAP_INDEX {
-	tkip_mic_failures = 0x0b,
-	ccmp_decrypt_errors = 0x0c,
-	wep_undecryptable_count = 0x0d,
-	wep_icv_error_count = 0x0e,
-	decrypt_failure_count = 0xf,
-	dot11_failed_count = 0x12,
-	dot11_retry_count = 0x13,
-	dot11_multi_retry_count = 0x14,
-	dot11_frame_dup_count = 0x15,
-	dot11_rts_success_count = 0x16,
-	dot11_rts_failure_count = 0x17,
-	dot11_ack_failure_count = 0x18,
-	dot11_rx_fragment_count = 0x19,
-	dot11_mcast_rx_frame_count = 0x1a,
-	dot11_fcs_error_count = 0x1b,
-	dot11_tx_frame_count = 0x1c,
-	dot11_rsna_tkip_cm_invoked = 0x1d,
-	dot11_rsna_4way_hshk_failures = 0x1e,
-	dot11_mcast_tx_count = 0x1f,
-};
-
-struct mwifiex_ie_types_snmp_oid {
-	struct mwifiex_ie_types_header header;
-	__le32 data;
-} __attribute__ ((packed));
-
-struct host_cmd_ds_sys_config {
-	__le16 action;
-	u8 tlv_buffer[1];
-} __attribute__ ((packed));
-
-struct host_cmd_ds_sys_info {
-	u8 sys_info[64];
-} __attribute__ ((packed));
-
-struct host_cmd_ds_sta_deauth {
-	u8 mac[MWIFIEX_MAC_ADDR_LENGTH];
-	u16 reason;
-} __attribute__ ((packed));
-
-#define HOST_CMD_POWER_MGMT_EXT                   0x00ef
-#define TLV_TYPE_AP_SLEEP_PARAM         (PROPRIETARY_TLV_BASE_ID + 106)
-#define TLV_TYPE_AP_INACT_SLEEP_PARAM   (PROPRIETARY_TLV_BASE_ID + 107)
-
-#define HOST_CMD_SLEEP_CONFIRM                 0x00d8
-
-struct mwifiex_ie_types_sleep_param {
-	struct mwifiex_ie_types_header     header;
-	__le32 ctrl_bitmap;
-	__le32 min_sleep;
-	__le32 max_sleep;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_inact_sleep_param {
-	struct mwifiex_ie_types_header header;
-	__le32 inactivity_to;
-	__le32 min_awake;
-	__le32 max_awake;
-} __attribute__ ((packed));
-
-struct host_cmd_ds_power_mgmt_ext {
-	u16 action;
-	u16 power_mode;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_ps_sta_ageout {
-	struct mwifiex_ie_types_header header;
-	__le32 ps_sta_ageout_timer;
-} __attribute__ ((packed));
-
-struct mwifiex_ie_types_sta_info {
-	struct mwifiex_ie_types_header header;
-	u8 mac_address[MWIFIEX_MAC_ADDR_LENGTH];
-	u8 power_mfg_status;
-	s8 rssi;
-} __attribute__ ((packed));
-
-struct host_cmd_ds_sta_list {
-	u16 sta_count;
-} __attribute__ ((packed));
-
-#define TLV_TYPE_AP_WAPI_INFO         (PROPRIETARY_TLV_BASE_ID + 103)
-
-struct mwifiex_ie_types_wapi_info {
-	struct mwifiex_ie_types_header     header;
-	u8 multicast_PN[16];
-} __attribute__ ((packed));
-
 struct host_cmd_ds_command {
 	__le16 command;
 	__le16 size;
@@ -1769,12 +1405,6 @@ struct host_cmd_ds_command {
 		struct host_cmd_ds_pmic_reg_access pmic_reg;
 		struct host_cmd_ds_set_bss_mode bss_mode;
 		struct host_cmd_ds_802_11_eeprom_access eeprom;
-		struct host_cmd_ds_sys_config sys_config;
-		struct host_cmd_ds_sys_info sys_info;
-		struct host_cmd_ds_sta_deauth sta_deauth;
-		struct host_cmd_ds_sta_list sta_list;
-		struct host_cmd_ds_rx_data_pause data_pause;
-		struct host_cmd_ds_power_mgmt_ext pm_cfg;
 		struct host_cmd_ds_802_11_sleep_period sleep_pd;
 	} params;
 } __attribute__ ((packed));
diff --git a/drivers/net/wireless/mwifiex/init.c b/drivers/net/wireless/mwifiex/init.c
index bd65b7d..664959a 100644
--- a/drivers/net/wireless/mwifiex/init.c
+++ b/drivers/net/wireless/mwifiex/init.c
@@ -453,7 +453,6 @@ enum mwifiex_status wlan_init_lock_list(struct mwifiex_adapter *adapter)
 									true);
 			mwifiex_util_init_list_head(&priv->rx_reorder_tbl_ptr,
 									true);
-			mwifiex_util_init_list_head(&priv->sta_list, true);
 		}
 	}
 
@@ -508,7 +507,6 @@ void wlan_free_lock_list(struct mwifiex_adapter *adapter)
 
 	for (i = 0; i < adapter->priv_num; i++) {
 		if (adapter->priv[i]) {
-			mwifiex_util_free_list_head(&priv->sta_list);
 			priv = adapter->priv[i];
 			for (j = 0; j < MAX_NUM_TID; ++j)
 				mwifiex_util_free_list_head(&priv->wmm
@@ -570,8 +568,8 @@ mwifiex_init_fw(struct mwifiex_adapter *adapter)
 	}
 	for (i = 0; i < adapter->priv_num; i++) {
 		if (adapter->priv[i]) {
-			ret = adapter->priv[i]->ops.init_cmd(adapter->priv[i],
-							     first_sta);
+			ret = mwifiex_sta_init_cmd(adapter->priv[i],
+						   first_sta);
 			if (ret == MWIFIEX_STATUS_FAILURE)
 				goto done;
 
@@ -632,8 +630,6 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter)
 
 			mwifiex_clean_txrx(priv);
 			mwifiex_delete_bss_prio_tbl(priv);
-			if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP)
-				mwifiex_delete_station_list(priv);
 		}
 	}
 
diff --git a/drivers/net/wireless/mwifiex/ioctl.h b/drivers/net/wireless/mwifiex/ioctl.h
index 6d08cb9..c5205cb 100644
--- a/drivers/net/wireless/mwifiex/ioctl.h
+++ b/drivers/net/wireless/mwifiex/ioctl.h
@@ -40,9 +40,6 @@ enum {
 	MWIFIEX_OID_BSS_FIND_BSS,
 	MWIFIEX_OID_IBSS_ATIM_WINDOW,
 	MWIFIEX_OID_IBSS_CHANNEL,
-	MWIFIEX_OID_UAP_BSS_CONFIG,
-	MWIFIEX_OID_UAP_DEAUTH_STA,
-	MWIFIEX_OID_UAP_BSS_RESET,
 
 	MWIFIEX_IOCTL_RADIO_CFG = 0x00030000,
 	MWIFIEX_OID_BAND_CFG,
@@ -60,7 +57,6 @@ enum {
 	MWIFIEX_OID_GET_VER_EXT,
 	MWIFIEX_OID_GET_BSS_INFO,
 	MWIFIEX_OID_GET_DEBUG_INFO,
-	MWIFIEX_OID_UAP_STA_LIST,
 
 	MWIFIEX_IOCTL_SEC_CFG = 0x00060000,
 	MWIFIEX_OID_SEC_CFG_AUTH_MODE,
@@ -71,7 +67,6 @@ enum {
 	MWIFIEX_OID_SEC_CFG_EWPA_ENABLED,
 	MWIFIEX_OID_SEC_CFG_ESUPP_MODE,
 	MWIFIEX_OID_SEC_CFG_WAPI_ENABLED,
-	MWIFIEX_OID_SEC_CFG_REPORT_MIC_ERR,
 
 	MWIFIEX_IOCTL_RATE = 0x00070000,
 	MWIFIEX_OID_RATE_CFG,
@@ -86,7 +81,6 @@ enum {
 	MWIFIEX_OID_PM_CFG_HS_CFG,
 	MWIFIEX_OID_PM_CFG_DEEP_SLEEP,
 	MWIFIEX_OID_PM_CFG_SLEEP_PD,
-	MWIFIEX_OID_PM_CFG_PS_MODE,
 
 	MWIFIEX_IOCTL_WMM_CFG = 0x000A0000,
 	MWIFIEX_OID_WMM_CFG_QOS,
@@ -109,7 +103,6 @@ enum {
 	MWIFIEX_OID_MISC_GEN_IE,
 	MWIFIEX_OID_MISC_HOST_CMD,
 	MWIFIEX_OID_MISC_INIT_SHUTDOWN,
-	MWIFIEX_OID_MISC_CUSTOM_IE,
 };
 
 #define MWIFIEX_SUB_COMMAND_SIZE	4
@@ -212,139 +205,6 @@ struct mwifiex_ssid_bssid {
 	u8 bssid[MWIFIEX_MAC_ADDR_LENGTH];
 };
 
-#define MAX_BEACON_PERIOD 4000
-#define MIN_BEACON_PERIOD 50
-#define MAX_DTIM_PERIOD 100
-#define MIN_DTIM_PERIOD 1
-#define MAX_TX_POWER    20
-#define MIN_TX_POWER    0
-#define MAX_STA_COUNT   10
-#define MAX_RTS_THRESHOLD   2347
-#define MAX_FRAG_THRESHOLD 2346
-#define MIN_FRAG_THRESHOLD 256
-#define DATA_RATE_54M   108
-#define ANTENNA_MODE_A      0
-#define ANTENNA_MODE_B      1
-#define TX_ANTENNA          1
-#define RX_ANTENNA          0
-#define MAX_STAGE_OUT_TIME  864000
-#define MIN_STAGE_OUT_TIME  300
-#define MAX_RETRY_LIMIT         14
-
-#define MAX_GRP_TIMER           86400
-
-#define BAND_CONFIG_ACS_MODE    0x40
-#define BAND_CONFIG_MANUAL      0x00
-#define MWIFIEX_SCAN_CHANNEL_NUM    165
-
-#define MAX_DATA_RATES          14
-
-#define DATA_RATE_AUTO       0
-
-#define MAX_CHANNEL             14
-
-#define MAC_FILTER_MODE_DISABLE         0
-#define MAC_FILTER_MODE_ALLOW_MAC       1
-#define MAC_FILTER_MODE_BLOCK_MAC       2
-#define MAX_MAC_FILTER_NUM           16
-
-#define PROTOCOL_NO_SECURITY        0x01
-#define PROTOCOL_STATIC_WEP         0x02
-#define PROTOCOL_WPA                0x08
-#define PROTOCOL_WPA2               0x20
-#define PROTOCOL_WPA2_MIXED         0x28
-#define PROTOCOL_WAPI               0x80
-
-#define KEY_MGMT_NONE   0x04
-#define KEY_MGMT_PSK    0x02
-
-#define CIPHER_TKIP                 0x04
-#define CIPHER_AES_CCMP             0x08
-
-#define VALID_CIPHER_BITMAP         0x0c
-
-struct scan_chan_list {
-	u32 num_of_chan;
-	u16 chan[MWIFIEX_SCAN_CHANNEL_NUM];
-};
-
-struct mac_filter {
-	u16 filter_mode;
-	u16 mac_count;
-	u8 mac_list[ETH_ALEN][MAX_MAC_FILTER_NUM];
-};
-
-struct wpa_param {
-	u8 pairwise_cipher_wpa;
-	u8 pairwise_cipher_wpa2;
-	u8 group_cipher;
-	u8 rsn_protection;
-	u32 length;
-	u8 passphrase[64];
-	u32 gk_rekey_time;
-};
-
-struct wep_key {
-	u8 key_index;
-	u8 is_default;
-	u16 length;
-	u8 key[26];
-};
-
-struct wep_param {
-	struct wep_key key0;
-	struct wep_key key1;
-	struct wep_key key2;
-	struct wep_key key3;
-};
-
-/** mwifiex_bss_param
- * Note: For each entry you must enter an invalid value
- * in the MWIFIEX function woal_set_sys_config_invalid_data().
- * Otherwise for a valid data an unwanted TLV will be
- * added to that command.
- */
-struct mwifiex_uap_bss_param {
-	u8 mac_addr[ETH_ALEN];
-	struct mwifiex_802_11_ssid ssid;
-	u8 bcast_ssid_ctl;
-	u8 radio_ctl;
-	u8 dtim_period;
-	u16 beacon_period;
-	u8 rates[MAX_DATA_RATES];
-	u16 tx_data_rate;
-	u16 mcbc_data_rate;
-	u8 tx_power_level;
-	u8 tx_antenna;
-	u8 rx_antenna;
-	u8 pkt_forward_ctl;
-	u16 max_sta_count;
-	struct mac_filter filter;
-	u32 sta_ageout_timer;
-	u32 ps_sta_ageout_timer;
-	u16 rts_threshold;
-	u16 frag_threshold;
-	u16 retry_limit;
-	u32 pairwise_update_timeout;
-	u32 pwk_retries;
-	u32 groupwise_update_timeout;
-	u32 gwk_retries;
-	u8 preamble_type;
-	u8 band_cfg;
-	u8 channel;
-	struct scan_chan_list chan_list;
-	u16 auth_mode;
-	u16 protocol;
-	u16 key_mgmt;
-	struct wep_param wep_cfg;
-	struct wpa_param wpa_cfg;
-};
-
-struct mwifiex_deauth_param {
-	u8 mac_addr[MWIFIEX_MAC_ADDR_LENGTH];
-	u16 reason_code;
-};
-
 struct mwifiex_ds_bss {
 	u32 sub_command;
 	union {
@@ -356,8 +216,6 @@ struct mwifiex_ds_bss {
 		u8 mac_addr[MWIFIEX_MAC_ADDR_LENGTH];
 		struct mwifiex_multicast_list multicast_list;
 		u32 atim_window;
-		struct mwifiex_uap_bss_param bss_config;
-		struct mwifiex_deauth_param deauth_param;
 	} param;
 };
 
@@ -420,28 +278,6 @@ struct mwifiex_ds_get_stats {
 	u32 wep_icv_error[4];
 };
 
-struct mwifiex_ds_uap_stats {
-	u32 tkip_mic_failures;
-	u32 ccmp_decrypt_errors;
-	u32 wep_undecryptable_count;
-	u32 wep_icv_error_count;
-	u32 decrypt_failure_count;
-	u32 mcast_tx_count;
-	u32 failed_count;
-	u32 retry_count;
-	u32 multi_retry_count;
-	u32 frame_dup_count;
-	u32 rts_success_count;
-	u32 rts_failure_count;
-	u32 ack_failure_count;
-	u32 rx_fragment_count;
-	u32 mcast_rx_frame_count;
-	u32 fcs_error_count;
-	u32 tx_frame_count;
-	u32 rsna_tkip_cm_invoked;
-	u32 rsna_4way_hshk_failures;
-};
-
 
 #define BCN_RSSI_LAST_MASK              0x00000001
 #define BCN_RSSI_AVG_MASK               0x00000002
@@ -576,19 +412,6 @@ struct mwifiex_debug_info {
 	u8 event_received;
 };
 
-#define MAX_NUM_CLIENTS         16
-
-struct sta_info {
-	u8 mac_address[MWIFIEX_MAC_ADDR_LENGTH];
-	u8 power_mfg_status;
-	s8 rssi;
-};
-
-struct mwifiex_ds_sta_list {
-	u16 sta_count;
-	struct sta_info info[MAX_NUM_CLIENTS];
-};
-
 struct mwifiex_ds_get_info {
 	u32 sub_command;
 	union {
@@ -598,9 +421,6 @@ struct mwifiex_ds_get_info {
 		struct mwifiex_ver_ext ver_ext;
 		struct mwifiex_bss_info bss_info;
 		struct mwifiex_debug_info debug_info;
-		struct mwifiex_ds_uap_stats ustats;
-		struct mwifiex_ds_sta_list sta_list;
-
 	} param;
 };
 
@@ -656,12 +476,12 @@ struct mwifiex_pmk {
 };
 
 struct mwifiex_ds_passphrase {
-	struct mwifiex_802_11_ssid ssid;
+	struct mwifiex_802_11_ssid        ssid;
 	u8 bssid[MWIFIEX_MAC_ADDR_LENGTH];
-	u16 psk_type;
+	u16  psk_type;
 	union {
-		struct mwifiex_passphrase passphrase;
-		struct mwifiex_pmk pmk;
+		struct mwifiex_passphrase   passphrase;
+		struct mwifiex_pmk          pmk;
 	} psk;
 };
 
@@ -682,7 +502,6 @@ struct mwifiex_ds_sec_cfg {
 		struct mwifiex_ds_passphrase passphrase;
 		u32 ewpa_enabled;
 		struct mwifiex_ds_esupp_mode esupp_mode;
-		u8 sta_mac[MWIFIEX_MAC_ADDR_LENGTH];
 	} param;
 };
 
@@ -765,33 +584,6 @@ struct mwifiex_ds_pm_cfg {
 	} param;
 };
 
-struct ps_sleep_param {
-	u32 ctrl_bitmap;
-	u32 min_sleep;
-	u32 max_sleep;
-};
-
-struct inact_sleep_param {
-	u32 inactivity_to;
-	u32 min_awake;
-	u32 max_awake;
-};
-
-#define PS_FLAG_PS_MODE                 1
-#define PS_FLAG_SLEEP_PARAM             2
-#define PS_FLAG_INACT_SLEEP_PARAM       4
-
-#define PS_MODE_DISABLE                      0
-#define PS_MODE_PERIODIC_DTIM                1
-#define PS_MODE_INACTIVITY                   2
-
-struct mwifiex_ds_ps_mgmt {
-	u16 flags;
-	u16 ps_mode;
-	struct ps_sleep_param sleep_param;
-	struct inact_sleep_param inact_param;
-};
-
 struct mwifiex_ioctl_wmm_queue_status_ac {
 	u8 wmm_acm;
 	u8 flow_required;
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c
index da13d42..aa26105 100644
--- a/drivers/net/wireless/mwifiex/join.c
+++ b/drivers/net/wireless/mwifiex/join.c
@@ -432,8 +432,8 @@ mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
 		auth_tlv->header.len = cpu_to_le16(sizeof(auth_tlv->auth_type));
 		if (priv->sec_info.wep_status == MWIFIEX_802_11_WEP_ENABLED)
 			auth_tlv->auth_type =
-				cpu_to_le16((u16)priv->sec_info
-					.authentication_mode);
+				cpu_to_le16((u16) priv->sec_info.
+					    authentication_mode);
 		else
 			auth_tlv->auth_type =
 				cpu_to_le16(MWIFIEX_AUTH_MODE_OPEN);
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
index f27a3f0..7359715 100644
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
@@ -20,7 +20,6 @@
 #include	"main.h"
 #include	"wmm.h"
 #include	"cfg80211.h"
-#include	"uap.h"
 
 #define VERSION	"1.0"
 
@@ -29,69 +28,25 @@ const char driver_version[] = "mwifiex " VERSION " (%s) ";
 struct mwifiex_adapter *g_adapter;
 EXPORT_SYMBOL_GPL(g_adapter);
 
-static struct mwifiex_bss_attr mwifiex_bss_uap[] = {
-	{MWIFIEX_BSS_TYPE_UAP, MWIFIEX_DATA_FRAME_TYPE_ETH_II, true, 0, 0},
-};
-
 static struct mwifiex_bss_attr mwifiex_bss_sta[] = {
 	{MWIFIEX_BSS_TYPE_STA, MWIFIEX_DATA_FRAME_TYPE_ETH_II, true, 0, 0},
 };
 
-static struct mwifiex_bss_attr mwifiex_bss_multi[] = {
-	{MWIFIEX_BSS_TYPE_STA, MWIFIEX_DATA_FRAME_TYPE_ETH_II, true, 0, 0},
-	{MWIFIEX_BSS_TYPE_UAP, MWIFIEX_DATA_FRAME_TYPE_ETH_II, true, 0, 0},
-};
-
-static int drv_mode = DRV_MODE_UAP_STA;
+static int drv_mode = DRV_MODE_STA;
 
 static char fw_name[32] = DEFAULT_FW_NAME;
 
 /** Supported drv_mode table */
 static struct mwifiex_drv_mode mwifiex_drv_mode_tbl[] = {
 	{
+	 /* drv_mode */
 	 .drv_mode = DRV_MODE_STA,
+	 /* intf number */
 	 .intf_num = ARRAY_SIZE(mwifiex_bss_sta),
+	 /* bss_attr */
 	 .bss_attr = mwifiex_bss_sta,
-	 },
-	{
-		.drv_mode = DRV_MODE_UAP,
-		.intf_num =  ARRAY_SIZE(mwifiex_bss_uap),
-		.bss_attr = mwifiex_bss_uap,
-	},
-	{
-	 .drv_mode = DRV_MODE_UAP_STA,
-	 .intf_num = ARRAY_SIZE(mwifiex_bss_multi),
-	 .bss_attr = mwifiex_bss_multi,
-	 },
-};
-
-static struct mwifiex_operations mwifiex_sta_ops = {
-	.init_cmd = mwifiex_ops_sta_init_cmd,
-	.ioctl = mwifiex_ops_sta_ioctl,
-	.prepare_cmd = mwifiex_ops_sta_prepare_cmd,
-	.process_cmdresp = mwifiex_ops_sta_process_cmdresp,
-	.process_rx_packet = mwifiex_ops_sta_process_rx_packet,
-	.process_event = mwifiex_ops_sta_process_event,
-	.process_txpd = mwifiex_ops_sta_process_txpd,
-	.bss_role = MWIFIEX_BSS_ROLE_STA,
-};
-
-static struct mwifiex_operations mwifiex_uap_ops = {
-	.init_cmd = mwifiex_ops_uap_init_cmd,
-	.ioctl = mwifiex_ops_uap_ioctl,
-	.prepare_cmd = mwifiex_ops_uap_prepare_cmd,
-	.process_cmdresp = mwifiex_ops_uap_process_cmdresp,
-	.process_rx_packet = mwifiex_ops_uap_process_rx_packet,
-	.process_event = mwifiex_ops_uap_process_event,
-	.process_txpd = mwifiex_ops_uap_process_txpd,
-	.bss_role = MWIFIEX_BSS_ROLE_UAP,
-};
-
-/** mwifiex function table */
-static struct mwifiex_operations *mwifiex_ops[] = {
-	&mwifiex_sta_ops,
-	&mwifiex_uap_ops,
-	NULL,
+	 }
+	,
 };
 
 u32 drvdbg = MMSG | MFATAL | MERROR;
@@ -120,7 +75,6 @@ mwifiex_register(void *card,
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
 	struct mwifiex_adapter *adapter = NULL;
 	u8 i = 0;
-	u32 j = 0;
 
 	ENTER();
 
@@ -185,18 +139,6 @@ mwifiex_register(void *card,
 			adapter->priv[i]->bss_index = i;
 			adapter->priv[i]->bss_num =
 				mdevice->bss_attr[i].bss_num;
-
-			/* init function table */
-			for (j = 0; mwifiex_ops[j]; j++) {
-				if (mwifiex_ops[j]->bss_role ==
-						GET_BSS_ROLE(
-							adapter->priv[i])) {
-					memcpy(&adapter->priv[i]->ops,
-					       mwifiex_ops[j],
-					       sizeof(
-					       struct mwifiex_operations));
-				}
-			}
 		}
 	}
 
@@ -805,12 +747,6 @@ static struct net_device_stats *mwifiex_get_stats(struct net_device *dev)
 	return &priv->stats;
 }
 
-static void mwifiex_uap_set_multicast_list(struct net_device *dev)
-{
-	ENTER();
-	LEAVE();
-}
-
 /** Network device handlers */
 static const struct net_device_ops mwifiex_netdev_ops = {
 	.ndo_open = mwifiex_open,
@@ -842,7 +778,7 @@ static const struct net_device_ops mwifiex_netdev_ops = {
  * In addition, the CFG80211 work queue is also created.
  */
 static void
-mwifiex_init_sta_dev(struct mwifiex_private *priv, struct net_device *dev)
+mwifiex_init_priv_params(struct mwifiex_private *priv, struct net_device *dev)
 {
 	ENTER();
 
@@ -863,34 +799,6 @@ mwifiex_init_sta_dev(struct mwifiex_private *priv, struct net_device *dev)
 	LEAVE();
 }
 
-static const struct net_device_ops mwifiex_uap_netdev_ops = {
-	.ndo_open = mwifiex_open,
-	.ndo_stop = mwifiex_close,
-	.ndo_start_xmit = mwifiex_hard_start_xmit,
-	.ndo_set_mac_address = mwifiex_set_mac_address,
-	.ndo_tx_timeout = mwifiex_tx_timeout,
-	.ndo_get_stats = mwifiex_get_stats,
-	.ndo_set_multicast_list = mwifiex_uap_set_multicast_list,
-};
-
-static enum mwifiex_status mwifiex_init_uap_dev(struct net_device *dev,
-		struct mwifiex_private *priv)
-{
-	enum mwifiex_status status = MWIFIEX_STATUS_SUCCESS;
-
-	ENTER();
-
-	dev->netdev_ops = &mwifiex_uap_netdev_ops;
-
-	/* Initialize private structure */
-	init_waitqueue_head(&priv->ioctl_wait_q);
-	init_waitqueue_head(&priv->cmd_wait_q);
-	priv->media_connected = false;
-
-	LEAVE();
-	return status;
-}
-
 /*
  * This function adds a new logical interface.
  *
@@ -913,15 +821,8 @@ static struct mwifiex_private *mwifiex_add_interface(
 
 	ENTER();
 
-	if (bss_type == MWIFIEX_BSS_TYPE_STA)
-		dev = alloc_netdev_mq(sizeof(struct mwifiex_private *),
-				"mlan%d",
-				ether_setup, 1);
-	else if (bss_type == MWIFIEX_BSS_TYPE_UAP)
-		dev = alloc_netdev_mq(sizeof(struct mwifiex_private *),
-				"uap%d",
-				ether_setup, 1);
-
+	dev = alloc_netdev_mq(sizeof(struct mwifiex_private *), "mlan%d",
+			      ether_setup, 1);
 	if (!dev) {
 		PRINTM(MERROR, "No memory available\n");
 		goto error;
@@ -943,18 +844,10 @@ static struct mwifiex_private *mwifiex_add_interface(
 
 	priv->netdev = dev;
 
-	if (bss_type == MWIFIEX_BSS_TYPE_STA) {
-		sema_init(&priv->async_sem, 1);
-		priv->scan_pending_on_block = false;
-
-		mwifiex_init_sta_dev(priv, dev);
-	}
+	sema_init(&priv->async_sem, 1);
+	priv->scan_pending_on_block = false;
 
-	if (bss_type == MWIFIEX_BSS_TYPE_UAP) {
-		if (MWIFIEX_STATUS_SUCCESS !=
-				mwifiex_init_uap_dev(dev, priv))
-			goto error;
-	}
+	mwifiex_init_priv_params(priv, dev);
 
 	SET_NETDEV_DEV(dev, adapter->hotplug_device);
 
@@ -964,9 +857,6 @@ static struct mwifiex_private *mwifiex_add_interface(
 		goto error;
 	}
 
-	netif_carrier_off(dev);
-	netif_stop_queue(dev);
-
 	PRINTM(MINFO, "%s: Marvell 802.11 Adapter\n", dev->name);
 #ifdef CONFIG_DEBUG_FS
 	mwifiex_dev_debugfs_init(priv);
@@ -1030,12 +920,9 @@ mwifiex_remove_interface(struct mwifiex_adapter *adapter, u8 bss_index)
 	if (dev)
 		free_netdev(dev);
 
-	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) {
-		cancel_work_sync(&priv->cfg_workqueue);
-		flush_workqueue(priv->workqueue);
-		destroy_workqueue(priv->workqueue);
-	}
-
+	cancel_work_sync(&priv->cfg_workqueue);
+	flush_workqueue(priv->workqueue);
+	destroy_workqueue(priv->workqueue);
 	wiphy_unregister(priv->wdev->wiphy);
 	wiphy_free(priv->wdev->wiphy);
 	kfree(priv->wdev);
@@ -1148,37 +1035,6 @@ int mwifiex_atox(char *a)
 }
 
 /*
- * This function returns integer value of a given ascii string
- */
-enum mwifiex_status mwifiex_atoi(int *data, char *a)
-{
-	int i, val = 0, len;
-
-	ENTER();
-
-	len = strlen(a);
-	if (!strncmp(a, "0x", 2)) {
-		a = a + 2;
-		len -= 2;
-		*data = mwifiex_atox(a);
-		return MWIFIEX_STATUS_SUCCESS;
-	}
-	for (i = 0; i < len; i++) {
-		if (isdigit(a[i])) {
-			val = val * 10 + (a[i] - '0');
-		} else {
-			PRINTM(MERROR, "Invalid char %c in string %s\n"
-					, a[i], a);
-			return MWIFIEX_STATUS_FAILURE;
-		}
-	}
-	*data = val;
-
-	LEAVE();
-	return MWIFIEX_STATUS_SUCCESS;
-}
-
-/*
  *  This function is an extension of strsep lib command. The function will also
  *  take care of an escape character
  */
@@ -1408,7 +1264,7 @@ mwifiex_add_card(void *card, struct semaphore *sem,
 	enum mwifiex_status status = MWIFIEX_STATUS_SUCCESS;
 	int i;
 	struct mwifiex_adapter *adapter = NULL;
-	struct mwifiex_drv_mode *drv_mode_info = &mwifiex_drv_mode_tbl[2];
+	struct mwifiex_drv_mode *drv_mode_info = &mwifiex_drv_mode_tbl[0];
 
 	ENTER();
 
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index c8450c3..8972566 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -130,9 +130,6 @@ struct mwifiex_drv_mode {
 #define MWIFIEX_TYPE_DATA				0
 #define MWIFIEX_TYPE_EVENT				3
 
-#define RX_HIGH_THRESHOLD				60
-#define RX_LOW_THRESHOLD				15
-
 #define DBG_CMD_NUM						5
 
 #define MAX_BITMAP_RATES_SIZE			10
@@ -324,28 +321,6 @@ struct wps {
 struct mwifiex_adapter;
 struct mwifiex_private;
 
-struct mwifiex_operations {
-	enum mwifiex_status (*init_cmd) (struct mwifiex_private *priv,
-					 u8 first_sta);
-	enum mwifiex_status (*ioctl) (struct mwifiex_adapter *adapter,
-				      struct mwifiex_ioctl_req *ioctl_req);
-	enum mwifiex_status (*prepare_cmd)(struct mwifiex_private *priv,
-					   u16 cmd_no, u16 cmd_action,
-					   u32 cmd_oid, void *ioctl_buf,
-					   void *data_buf, void *cmd_buf);
-	enum mwifiex_status (*process_cmdresp)(struct mwifiex_private *priv,
-					       u16 cmdresp_no, void *cmd_buf,
-					       void *ioctl);
-	enum mwifiex_status (*process_rx_packet) (struct
-						  mwifiex_adapter *
-						  adapter,
-						  struct mwifiex_buffer *buf);
-	enum mwifiex_status (*process_event) (struct mwifiex_private *priv);
-	void *(*process_txpd) (struct mwifiex_private *priv,
-				struct mwifiex_buffer *buf);
-	enum mwifiex_bss_role bss_role;
-};
-
 struct mwifiex_private {
 	struct mwifiex_adapter *adapter;
 	u8 bss_index;
@@ -368,8 +343,6 @@ struct mwifiex_private {
 	u8 tx_rate;
 	u8 tx_htinfo;
 	u8 rxpd_htinfo;
-	u8 is_11n_enabled;
-	u8 pkt_fwd;
 	u8 rxpd_rate;
 	u16 rate_bitmap;
 	u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
@@ -405,7 +378,6 @@ struct mwifiex_private {
 	struct host_cmd_ds_802_11_key_material aes_key;
 	u8 wapi_ie[256];
 	u8 wapi_ie_len;
-	struct mwifiex_list_head sta_list;
 	u8 wmm_required;
 	u8 wmm_enabled;
 	u8 wmm_qosinfo;
@@ -467,8 +439,6 @@ struct mwifiex_private {
 	struct dentry *dfs_txbufcfg;
 	struct dentry *dfs_passphrase;
 	struct dentry *dfs_esuppmode;
-	struct dentry *dfs_bssctrl;
-	struct dentry *dfs_apcfg;
 #endif
 	u8 nick_name[16];
 	bool is_adhoc_link_sensed;
@@ -492,7 +462,6 @@ struct mwifiex_private {
 	struct work_struct cfg_workqueue;
 	u8 country_code[COUNTRY_CODE_LEN];
 	struct wps wps;
-	struct mwifiex_operations ops;
 	u8 scan_block;
 };
 
@@ -554,16 +523,6 @@ struct cmd_ctrl_node {
 	struct mwifiex_buffer *mbuf;
 };
 
-struct sta_node {
-	struct sta_node *pprev;
-	struct sta_node *pnext;
-	u8 mac_addr[MWIFIEX_MAC_ADDR_LENGTH];
-	u8 is_11n_enabled;
-	u8 ampdu_sta[MAX_NUM_TID];
-	u16 rx_seq[MAX_NUM_TID];
-	u8 wapi_key_on;
-};
-
 struct mwifiex_if_ops {
 	enum mwifiex_status (*init_if) (struct mwifiex_adapter *);
 	void (*cleanup_if) (struct mwifiex_adapter *);
@@ -689,8 +648,6 @@ struct mwifiex_adapter {
 	u8 adhoc_11n_enabled;
 	u8 chan_offset;
 	struct mwifiex_dbg dbg;
-	u16 pending_bridge_pkts;
-	u16 rx_pause_flag;
 	u8 arp_filter[ARP_FILTER_MAX_BUF_SIZE];
 	u32 arp_filter_size;
 };
@@ -825,22 +782,22 @@ enum mwifiex_status mwifiex_ret_802_11_hs_cfg(struct mwifiex_private *priv,
 void mwifiex_host_sleep_wakeup_event(struct mwifiex_private *priv);
 enum mwifiex_status mwifiex_process_rx_packet(struct mwifiex_adapter *adapter,
 					      struct mwifiex_buffer *mbuf);
-enum mwifiex_status mwifiex_ops_sta_ioctl(struct mwifiex_adapter *,
+enum mwifiex_status mwifiex_sta_ioctl(struct mwifiex_adapter *,
 				      struct mwifiex_ioctl_req *ioctl_req);
-enum mwifiex_status mwifiex_ops_sta_prepare_cmd(struct mwifiex_private *,
+enum mwifiex_status mwifiex_sta_prepare_cmd(struct mwifiex_private *,
 						uint16_t cmd_no,
 					    u16 cmd_action, u32 cmd_oid,
 					    void *ioctl_buf, void *data_buf,
 					    void *cmd_buf);
-enum mwifiex_status mwifiex_ops_sta_process_cmdresp(struct mwifiex_private *,
+enum mwifiex_status mwifiex_process_sta_cmdresp(struct mwifiex_private *,
 						u16 cmdresp_no,
 						void *cmd_buf, void *ioctl);
-enum mwifiex_status mwifiex_ops_sta_process_rx_packet(struct mwifiex_adapter *,
+enum mwifiex_status mwifiex_process_sta_rx_packet(struct mwifiex_adapter *,
 						  struct mwifiex_buffer *mbuf);
-enum mwifiex_status mwifiex_ops_sta_process_event(struct mwifiex_private *);
-void *mwifiex_ops_sta_process_txpd(struct mwifiex_private *,
+enum mwifiex_status mwifiex_process_sta_event(struct mwifiex_private *);
+void *mwifiex_process_sta_txpd(struct mwifiex_private *,
 				struct mwifiex_buffer *mbuf);
-enum mwifiex_status mwifiex_ops_sta_init_cmd(struct mwifiex_private *,
+enum mwifiex_status mwifiex_sta_init_cmd(struct mwifiex_private *,
 						u8 first_sta);
 enum mwifiex_status mwifiex_scan_networks(struct mwifiex_private *priv,
 					  void *ioctl_buf,
@@ -947,17 +904,6 @@ enum mwifiex_status mwifiex_ret_get_hw_spec(struct mwifiex_private *priv,
 					    struct host_cmd_ds_command *resp,
 					    void *ioctl_buf);
 
-struct sta_node *mwifiex_get_station_entry(struct mwifiex_private *priv,
-						u8 *mac);
-void mwifiex_delete_station_list(struct mwifiex_private *priv);
-struct sta_node *mwifiex_add_station_entry(struct mwifiex_private *priv,
-						u8 *mac);
-enum mwifiex_status mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
-					       struct mwifiex_buffer *mbuf);
-
-enum mwifiex_status mwifiex_uap_recv_packet(struct mwifiex_private *priv,
-					 struct mwifiex_buffer *mbuf);
-
 /*
  * This function checks if the queuing is RA based or not.
  */
@@ -1054,7 +1000,6 @@ enum mwifiex_status mwifiex_shutdown_fw(struct mwifiex_private *, u8);
 
 char *mwifiex_strsep(char **s, char delim, char esc);
 int mwifiex_atox(char *a);
-enum mwifiex_status mwifiex_atoi(int *data, char *a);
 void mwifiex_mac2u8(u8 *mac_addr, char *buf);
 int mwifiex_ascii2hex(u8 *d, char *s, u32 dlen);
 
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index ab392d4..132347d 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -2136,10 +2136,6 @@ mwifiex_sdio_cleanup_module(void)
 			mwifiex_disconnect(adapter->priv[i], MWIFIEX_CMD_WAIT,
 					   NULL);
 		}
-
-		if (GET_BSS_ROLE(adapter->priv[i]) == MWIFIEX_BSS_ROLE_UAP)
-				mwifiex_disconnect(adapter->priv[i],
-						   MWIFIEX_CMD_WAIT, NULL);
 	}
 
 	if (!adapter->surprise_removed)
diff --git a/drivers/net/wireless/mwifiex/sta_cmd.c b/drivers/net/wireless/mwifiex/sta_cmd.c
index 5f4b29c..51206db 100644
--- a/drivers/net/wireless/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/mwifiex/sta_cmd.c
@@ -1267,7 +1267,7 @@ mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
  * routines based upon the command number.
  */
 enum mwifiex_status
-mwifiex_ops_sta_prepare_cmd(struct mwifiex_private *priv,
+mwifiex_sta_prepare_cmd(struct mwifiex_private *priv,
 			uint16_t cmd_no,
 			u16 cmd_action,
 			u32 cmd_oid,
@@ -1487,7 +1487,7 @@ mwifiex_ops_sta_prepare_cmd(struct mwifiex_private *priv,
  *      - Set MAC control (this must be the last command to initialize firmware)
  */
 enum mwifiex_status
-mwifiex_ops_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta)
+mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta)
 {
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
 	u16 enable = true;
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c
index d59f0a5..5ae2c8e 100644
--- a/drivers/net/wireless/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c
@@ -1382,7 +1382,7 @@ mwifiex_ret_ibss_coalescing_status(struct mwifiex_private *priv,
  * response handlers based on the command ID.
  */
 enum mwifiex_status
-mwifiex_ops_sta_process_cmdresp(struct mwifiex_private *priv,
+mwifiex_process_sta_cmdresp(struct mwifiex_private *priv,
 			    u16 cmdresp_no, void *cmd_buf, void *ioctl)
 {
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
diff --git a/drivers/net/wireless/mwifiex/sta_event.c b/drivers/net/wireless/mwifiex/sta_event.c
index 743a673..005f522 100644
--- a/drivers/net/wireless/mwifiex/sta_event.c
+++ b/drivers/net/wireless/mwifiex/sta_event.c
@@ -232,7 +232,7 @@ mwifiex_2040_coex_event(struct mwifiex_private *priv)
  *      - EVENT_AMSDU_AGGR_CTRL
  */
 enum mwifiex_status
-mwifiex_ops_sta_process_event(struct mwifiex_private *priv)
+mwifiex_process_sta_event(struct mwifiex_private *priv)
 {
 	struct mwifiex_adapter *adapter = priv->adapter;
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
index ff3629c..0bcb1ac 100644
--- a/drivers/net/wireless/mwifiex/sta_ioctl.c
+++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
@@ -39,7 +39,6 @@ mwifiex_ioctl(struct mwifiex_adapter *adapter,
 	      struct mwifiex_ioctl_req *ioctl_req)
 {
 	enum mwifiex_status ret;
-	struct mwifiex_private *priv = NULL;
 
 	ENTER();
 
@@ -55,8 +54,7 @@ mwifiex_ioctl(struct mwifiex_adapter *adapter,
 		goto exit;
 	}
 
-	priv = adapter->priv[ioctl_req->bss_index];
-	ret = priv->ops.ioctl(adapter, ioctl_req);
+	ret = mwifiex_sta_ioctl(adapter, ioctl_req);
 
 exit:
 	LEAVE();
@@ -6162,7 +6160,7 @@ mwifiex_scan_ioctl(struct mwifiex_adapter *adapter,
  *      MWIFIEX_IOCTL_MISC_CFG - Other miscellaneous IOCTLs
  */
 enum mwifiex_status
-mwifiex_ops_sta_ioctl(struct mwifiex_adapter *adapter,
+mwifiex_sta_ioctl(struct mwifiex_adapter *adapter,
 			struct mwifiex_ioctl_req *ioctl_req)
 {
 	enum mwifiex_status status = MWIFIEX_STATUS_SUCCESS;
diff --git a/drivers/net/wireless/mwifiex/sta_rx.c b/drivers/net/wireless/mwifiex/sta_rx.c
index 7b506f2..504c377 100644
--- a/drivers/net/wireless/mwifiex/sta_rx.c
+++ b/drivers/net/wireless/mwifiex/sta_rx.c
@@ -184,7 +184,7 @@ done:
  * The completion callback is called after processing in complete.
  */
 enum mwifiex_status
-mwifiex_ops_sta_process_rx_packet(struct mwifiex_adapter *adapter,
+mwifiex_process_sta_rx_packet(struct mwifiex_adapter *adapter,
 				struct mwifiex_buffer *mbuf)
 {
 	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
diff --git a/drivers/net/wireless/mwifiex/sta_tx.c b/drivers/net/wireless/mwifiex/sta_tx.c
index 05901a0..b80d245 100644
--- a/drivers/net/wireless/mwifiex/sta_tx.c
+++ b/drivers/net/wireless/mwifiex/sta_tx.c
@@ -43,7 +43,7 @@
  *      - Flags
  */
 void *
-mwifiex_ops_sta_process_txpd(struct mwifiex_private *priv,
+mwifiex_process_sta_txpd(struct mwifiex_private *priv,
 				struct mwifiex_buffer *mbuf)
 {
 	struct mwifiex_adapter *adapter = priv->adapter;
diff --git a/drivers/net/wireless/mwifiex/txrx.c b/drivers/net/wireless/mwifiex/txrx.c
index 13a0290..a05f2d8 100644
--- a/drivers/net/wireless/mwifiex/txrx.c
+++ b/drivers/net/wireless/mwifiex/txrx.c
@@ -54,7 +54,7 @@ mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter,
 		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
 
 	mbuf->bss_index = priv->bss_index;
-	ret = priv->ops.process_rx_packet(adapter, mbuf);
+	ret = mwifiex_process_sta_rx_packet(adapter, mbuf);
 
 	LEAVE();
 	return ret;
@@ -82,7 +82,7 @@ mwifiex_process_tx(struct mwifiex_private *priv, struct mwifiex_buffer *mbuf,
 
 	ENTER();
 
-	head_ptr = (u8 *)priv->ops.process_txpd(priv, mbuf);
+	head_ptr = (u8 *) mwifiex_process_sta_txpd(priv, mbuf);
 	if (!head_ptr) {
 		ret = MWIFIEX_STATUS_FAILURE;
 		goto done;
@@ -158,27 +158,8 @@ mwifiex_write_data_complete(struct mwifiex_adapter *adapter,
 
 		if (mbuf->flags & MWIFIEX_FLAG_TX_BUF)
 			mwifiex_send_packet_complete(adapter, mbuf, status);
-		else {
-			if (mbuf->flags & MWIFIEX_BUF_FLAG_BRIDGE_BUF) {
-				adapter->pending_bridge_pkts--;
-				if (adapter->rx_pause_flag &&
-						(adapter->pending_bridge_pkts <=
-						 RX_LOW_THRESHOLD)) {
-					adapter->rx_pause_flag = false;
-					if (mwifiex_prepare_cmd(
-							adapter->priv[
-							mbuf->bss_index],
-							HOST_CMD_RX_DATA_PAUSE,
-							HostCmd_ACT_GEN_SET, 0,
-							NULL, NULL) !=
-							MWIFIEX_STATUS_SUCCESS)
-						PRINTM(MERROR, "Could not send "
-								"Rx data pause "
-								"command\n");
-				}
-			}
+		else
 			mwifiex_free_buffer(mbuf);
-		}
 	}
 
 	LEAVE();
diff --git a/drivers/net/wireless/mwifiex/uap.c b/drivers/net/wireless/mwifiex/uap.c
deleted file mode 100644
index c94bdf4..0000000
--- a/drivers/net/wireless/mwifiex/uap.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * Marvell Wireless LAN device driver: major functions in UAP
- * driver.
- *
- * Copyright (C) 2010, Marvell International Ltd.
- *
- * This software file (the "File") is distributed by Marvell International
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- **/
-
-#include    "main.h"
-#include    "uap.h"
-
-/*
- * Set/Get system configuration parameters
- */
-enum mwifiex_status
-mwifiex_set_get_sys_config(struct mwifiex_private *priv, u16 action,
-		struct mwifiex_uap_bss_param *sys_cfg)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_ds_bss *bss = NULL;
-	struct mwifiex_ioctl_req *req = NULL;
-
-	ENTER();
-
-	req = mwifiex_alloc_ioctl_req(sizeof(struct mwifiex_ds_bss));
-	if (req == NULL) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-
-	bss = (struct mwifiex_ds_bss *) req->buffer;
-	bss->sub_command = MWIFIEX_OID_UAP_BSS_CONFIG;
-	req->req_id = MWIFIEX_IOCTL_BSS;
-	req->action = action;
-
-	if (action == MWIFIEX_ACT_SET)
-		memcpy(&bss->param.bss_config, sys_cfg,
-					sizeof(struct mwifiex_uap_bss_param));
-
-	if (MWIFIEX_STATUS_SUCCESS !=
-			mwifiex_request_ioctl(priv, req, MWIFIEX_IOCTL_WAIT)) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-
-	if (action == MWIFIEX_ACT_GET)
-		memcpy(sys_cfg, &bss->param.bss_config,
-					sizeof(struct mwifiex_uap_bss_param));
-
-done:
-	kfree(req);
-	LEAVE();
-	return ret;
-}
-
-/*
- * Set invalid data for each member of mwifiex_uap_bss_param
- */
-void mwifiex_set_sys_config_invalid_data(struct mwifiex_uap_bss_param *config)
-{
-	ENTER();
-
-	memset(config, 0, sizeof(struct mwifiex_uap_bss_param));
-	config->bcast_ssid_ctl = 0x7F;
-	config->radio_ctl = 0x7F;
-	config->dtim_period = 0x7F;
-	config->beacon_period = 0x7FFF;
-	config->tx_data_rate = 0x7FFF;
-	config->mcbc_data_rate = 0x7FFF;
-	config->tx_power_level = 0x7F;
-	config->tx_antenna = 0x7F;
-	config->rx_antenna = 0x7F;
-	config->pkt_forward_ctl = 0x7F;
-	config->max_sta_count = 0x7FFF;
-	config->auth_mode = 0x7F;
-	config->sta_ageout_timer = 0x7FFFFFFF;
-	config->ps_sta_ageout_timer = 0x7FFFFFFF;
-	config->rts_threshold = 0x7FFF;
-	config->frag_threshold = 0x7FFF;
-	config->retry_limit = 0x7FFF;
-	config->filter.filter_mode = 0x7FFF;
-	config->filter.mac_count = 0x7FFF;
-	config->wpa_cfg.rsn_protection = 0x7F;
-	config->wpa_cfg.gk_rekey_time = 0x7FFFFFFF;
-
-	LEAVE();
-}
diff --git a/drivers/net/wireless/mwifiex/uap.h b/drivers/net/wireless/mwifiex/uap.h
deleted file mode 100644
index 645e483..0000000
--- a/drivers/net/wireless/mwifiex/uap.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Marvell Wireless LAN device driver: uap driver specific defines etc.
- * driver.
- *
- * Copyright (C) 2010, Marvell International Ltd.
- *
- * This software file (the "File") is distributed by Marvell International
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- *
- **/
-
-#ifndef _MWIFIEX_UAP_H
-#define _MWIFIEX_UAP_H
-
-#define UAP_HOSTCMD			(SIOCDEVPRIVATE + 1)
-#define UAP_IOCTL_CMD			(SIOCDEVPRIVATE + 2)
-#define UAP_POWER_MODE			(SIOCDEVPRIVATE + 3)
-#define UAP_BSS_CTRL			(SIOCDEVPRIVATE + 4)
-#define UAP_BSS_CONFIG			(SIOCDEVPRIVATE + 6)
-#define UAP_STA_DEAUTH			(SIOCDEVPRIVATE + 7)
-#define UAP_WAPI_MSG			(SIOCDEVPRIVATE + 10)
-#define UAP_GET_STA_LIST		(SIOCDEVPRIVATE + 11)
-#define UAP_HS_CFG			(SIOCDEVPRIVATE + 14)
-#define UAP_GET_BSS_TYPE		(SIOCDEVPRIVATE + 15)
-
-#define UAP_ADDBA_PARA			0
-#define UAP_AGGR_PRIOTBL		1
-#define UAP_ADDBA_REJECT		2
-#define UAP_DEEP_SLEEP			3
-
-
-#define UAP_BSS_START			0
-#define UAP_BSS_STOP			1
-#define UAP_BSS_RESET			2
-#define BSS_START_REDUNDANT		3
-#define BSS_STOP_REDUNDANT		2
-
-struct wapi_msg {
-	u16 msg_type;
-	u16 msg_len;
-	u8 msg[96];
-};
-
-struct wapi_key_msg {
-	u8	mac_addr[MWIFIEX_MAC_ADDR_LENGTH];
-	u8	pad;
-	u8	key_id;
-	u8	key[32];
-};
-
-#define P80211_PACKET_WAPIFLAG     0x0001
-#define P80211_PACKET_SETKEY      0x0003
-#define WAPI_MODE_PSK    0x04
-#define WAPI_MODE_CERT   0x08
-
-#define UAP_EVENT_ID_HS_WAKEUP             0x80000001
-#define UAP_EVENT_ID_DRV_HS_ACTIVATED      0x80000002
-#define UAP_EVENT_ID_DRV_HS_DEACTIVATED    0x80000003
-
-#define HS_CFG_FLAG_GET         0
-#define HS_CFG_FLAG_SET         1
-#define HS_CFG_FLAG_CONDITION   2
-#define HS_CFG_FLAG_GPIO        4
-#define HS_CFG_FLAG_GAP         8
-#define HS_CFG_FLAG_ALL         0x0f
-#define HS_CFG_CONDITION_MASK   0x0f
-
-struct ds_hs_cfg {
-	/** Bit0: 0 - Get, 1 Set
-	 *  Bit1: 1 - conditions is valid
-	 *  Bit2: 2 - gpio is valid
-	 *  Bit3: 3 - gap is valid
-	 */
-	u32 flags;
-	/** Host sleep config condition */
-	/** Bit0: non-unicast data
-	 *  Bit1: unicast data
-	 *  Bit2: mac events
-	 *  Bit3: magic packet
-	 */
-	u32  conditions;
-	u32  gpio;
-	u32  gap;
-};
-
-struct addba_param {
-	u32 subcmd;
-	u32 action;
-	u32 timeout;
-	u32 txwinsize;
-	u32 rxwinsize;
-};
-
-struct aggr_prio_tbl {
-	u32 subcmd;
-	u32 action;
-	u8  ampdu[MAX_NUM_TID];
-	u8  amsdu[MAX_NUM_TID];
-};
-
-struct addba_reject_para {
-	u32 subcmd;
-	u32 action;
-	u8  addba_reject[MAX_NUM_TID];
-};
-
-struct deep_sleep_para {
-	u32 subcmd;
-	u32 action;
-	u16 deep_sleep;
-	u16  idle_time;
-};
-
-int mwifiex_uap_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd);
-void mwifiex_uap_get_version(struct mwifiex_private *priv, char *version,
-			     int max_len);
-enum mwifiex_status mwifiex_uap_get_stats(struct mwifiex_private *priv,
-					  u8 wait_option,
-					  struct mwifiex_ds_uap_stats *ustats);
-extern struct iw_handler_def mwifiex_uap_handler_def;
-struct iw_statistics *mwifiex_get_uap_wireless_stats(struct net_device *dev);
-int mwifiex_uap_do_priv_ioctl(struct net_device *dev,
-			      struct ifreq *req, int cmd);
-void mwifiex_set_sys_config_invalid_data(struct mwifiex_uap_bss_param *config);
-enum mwifiex_status mwifiex_set_get_sys_config(struct mwifiex_private *priv,
-		u16 action,
-		struct mwifiex_uap_bss_param *sys_cfg);
-enum mwifiex_status mwifiex_ops_uap_ioctl(struct mwifiex_adapter *adapter,
-				      struct mwifiex_ioctl_req *ioctl_req);
-enum mwifiex_status mwifiex_ops_uap_prepare_cmd(struct mwifiex_private *priv,
-					    uint16_t cmd_no,
-					    u16 cmd_action, u32 cmd_oid,
-					    void *ioctl_buf, void *data_buf,
-					    void *cmd_buf);
-enum mwifiex_status
-mwifiex_ops_uap_process_cmdresp(struct mwifiex_private *priv,
-				u16 cmdresp_no,
-				void *cmd_buf, void *ioctl);
-enum mwifiex_status mwifiex_ops_uap_process_rx_packet(
-						struct mwifiex_adapter *adapter,
-						struct mwifiex_buffer *mbuf);
-enum mwifiex_status mwifiex_ops_uap_process_event(struct mwifiex_private *priv);
-void *mwifiex_ops_uap_process_txpd(struct mwifiex_private *priv,
-			       struct mwifiex_buffer *mbuf);
-enum mwifiex_status mwifiex_ops_uap_init_cmd(struct mwifiex_private *priv,
-					 u8 first_sta);
-int mwifiex_uap_bss_ctrl(struct mwifiex_private *priv, int data);
-int mwifiex_uap_ap_cfg_parse_data(struct mwifiex_uap_bss_param *ap_cfg,
-				  s8 *buf);
-#endif /* _MWIFIEX_UAP_H_ */
diff --git a/drivers/net/wireless/mwifiex/uap_cmdevent.c b/drivers/net/wireless/mwifiex/uap_cmdevent.c
deleted file mode 100644
index 70df390..0000000
--- a/drivers/net/wireless/mwifiex/uap_cmdevent.c
+++ /dev/null
@@ -1,1544 +0,0 @@
-/**
- * Marvell Wireless LAN device driver: handling of AP mode command and event
- *
- * Copyright (C) 2010, Marvell International Ltd.
- *
- * This software file (the "File") is distributed by Marvell International
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- **/
-
-#include "main.h"
-#include "uap.h"
-#include "wmm.h"
-
-/*
- * This function handles the command response error
- */
-static void
-uap_process_cmdresp_error(struct mwifiex_private *priv,
-			  struct host_cmd_ds_command *resp,
-			  struct mwifiex_ioctl_req *pioctl_buf)
-{
-	struct mwifiex_adapter *adapter = priv->adapter;
-
-	ENTER();
-
-	PRINTM(MERROR, "CMD_RESP: cmd %#x error, result=%#x\n", resp->command,
-								resp->result);
-	if (pioctl_buf)
-		pioctl_buf->status_code = le16_to_cpu(resp->result);
-	/*
-	 * Handling errors here
-	 */
-	mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd);
-
-	mwifiex_spin_lock(adapter->mwifiex_cmd_lock);
-	adapter->curr_cmd = NULL;
-	mwifiex_spin_unlock(adapter->mwifiex_cmd_lock);
-
-	LEAVE();
-	return;
-}
-
-/*
- * This function prepares command for config uap settings
- */
-static enum mwifiex_status mwifiex_uap_cmd_ap_config(
-		struct mwifiex_private *priv,
-		struct host_cmd_ds_command *cmd,
-		u16 cmd_action,
-		struct mwifiex_ioctl_req *pioctl_buf)
-{
-	struct mwifiex_ds_bss *bss = NULL;
-	struct host_cmd_ds_sys_config *sys_config =
-				(struct host_cmd_ds_sys_config *)&cmd->params
-								.sys_config;
-	u8 *tlv = NULL;
-	struct mwifiex_ie_types_macaddr *tlv_mac = NULL;
-	struct mwifiex_ie_types_ssid_param_set *tlv_ssid = NULL;
-	struct mwifiex_ie_types_beacon_period *tlv_beacon_period = NULL;
-	struct mwifiex_ie_types_dtim_period *tlv_dtim_period = NULL;
-	struct mwifiex_ie_types_rates_param_set *tlv_rates = NULL;
-	struct mwifiex_ie_types_tx_rate *tlv_txrate = NULL;
-	struct mwifiex_ie_types_mcbc_rate *tlv_mcbc_rate = NULL;
-	struct mwifiex_ie_types_tx_power *tlv_tx_power = NULL;
-	struct mwifiex_ie_types_bcast_ssid *tlv_bcast_ssid = NULL;
-	struct mwifiex_ie_types_antenna_mode *tlv_antenna = NULL;
-	struct mwifiex_ie_types_pkt_forward *tlv_pkt_forward = NULL;
-	struct mwifiex_ie_types_max_sta_count *tlv_sta_count = NULL;
-	struct mwifiex_ie_types_sta_ageout *tlv_sta_ageout = NULL;
-	struct mwifiex_ie_types_ps_sta_ageout *tlv_ps_sta_ageout = NULL;
-	struct mwifiex_ie_types_rts_threshold *tlv_rts_threshold = NULL;
-	struct mwifiex_ie_types_frag_threshold *tlv_frag_threshold = NULL;
-	struct mwifiex_ie_types_retry_limit *tlv_retry_limit = NULL;
-	struct mwifiex_ie_types_eapol_pwk_hsk_timeout *tlv_pairwise_timeout =
-									NULL;
-	struct mwifiex_ie_types_eapol_pwk_hsk_retries *tlv_pairwise_retries =
-									NULL;
-	struct mwifiex_ie_types_eapol_gwk_hsk_timeout *tlv_groupwise_timeout =
-									NULL;
-	struct mwifiex_ie_types_eapol_gwk_hsk_retries *tlv_groupwise_retries =
-									NULL;
-	struct mwifiex_ie_types_mac_filter *tlv_mac_filter = NULL;
-	struct mwifiex_ie_types_channel_band *tlv_chan_band = NULL;
-	struct mwifiex_ie_types_chan_list_param_set *tlv_chan_list = NULL;
-	struct mwifiex_chan_scan_param_set *pscan_chan = NULL;
-	struct mwifiex_ie_types_auth_type *tlv_auth_type = NULL;
-	struct mwifiex_ie_types_encrypt_protocol *tlv_encrypt_protocol = NULL;
-	struct mwifiex_ie_types_akmp *tlv_akmp = NULL;
-	struct mwifiex_ie_types_cipher *tlv_cipher = NULL;
-	struct mwifiex_ie_types_pwk_cipher *tlv_pwk_cipher = NULL;
-	struct mwifiex_ie_types_gwk_cipher *tlv_gwk_cipher = NULL;
-	struct mwifiex_ie_types_rsn_replay_prot *tlv_rsn_prot = NULL;
-	struct mwifiex_ie_types_passphrase *tlv_passphrase = NULL;
-	struct mwifiex_ie_types_group_rekey_time *tlv_rekey_time = NULL;
-	struct mwifiex_ie_types_wep_key *tlv_wep_key = NULL;
-	struct mwifiex_ie_types_radio_control *tlv_radio_control = NULL;
-
-	u32 cmd_size = 0;
-	u8 zero_mac[] = {0, 0, 0, 0, 0, 0 };
-	u16 i;
-
-	ENTER();
-
-	if (pioctl_buf == NULL) {
-		LEAVE();
-		return MWIFIEX_STATUS_FAILURE;
-	}
-
-	bss =  (struct mwifiex_ds_bss *)pioctl_buf->buffer;
-
-	cmd->command = cpu_to_le16(HOST_CMD_APCMD_SYS_CONFIGURE);
-	sys_config->action = cpu_to_le16(cmd_action);
-	cmd_size = sizeof(struct host_cmd_ds_sys_config) - 1 + S_DS_GEN;
-
-	tlv = (u8 *)sys_config->tlv_buffer;
-	if (memcmp(zero_mac, &bss->param.bss_config.mac_addr,
-					MWIFIEX_MAC_ADDR_LENGTH)) {
-		tlv_mac = (struct mwifiex_ie_types_macaddr *)tlv;
-		tlv_mac->header.type = cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
-		tlv_mac->header.len = cpu_to_le16(MWIFIEX_MAC_ADDR_LENGTH);
-		memcpy(tlv_mac->mac, &bss->param.bss_config.mac_addr,
-						MWIFIEX_MAC_ADDR_LENGTH);
-		cmd_size += sizeof(struct mwifiex_ie_types_macaddr);
-		tlv += sizeof(struct mwifiex_ie_types_macaddr);
-	}
-
-	if (bss->param.bss_config.ssid.ssid_len) {
-		tlv_ssid = (struct mwifiex_ie_types_ssid_param_set *)tlv;
-		tlv_ssid->header.type = cpu_to_le16(TLV_TYPE_SSID);
-		tlv_ssid->header.len = cpu_to_le16(
-				(u16)bss->param.bss_config.ssid.ssid_len);
-		memcpy(tlv_ssid->ssid, bss->param.bss_config.ssid.ssid,
-				bss->param.bss_config.ssid.ssid_len);
-		cmd_size += sizeof(struct mwifiex_ie_types_header) +
-				bss->param.bss_config.ssid.ssid_len;
-		tlv += sizeof(struct mwifiex_ie_types_header) +
-				bss->param.bss_config.ssid.ssid_len;
-	}
-
-	if ((bss->param.bss_config.beacon_period >= MIN_BEACON_PERIOD) &&
-			(bss->param.bss_config.beacon_period <=
-				MAX_BEACON_PERIOD)) {
-		tlv_beacon_period =
-			(struct mwifiex_ie_types_beacon_period *)tlv;
-		tlv_beacon_period->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_BEACON_PERIOD);
-		tlv_beacon_period->header.len = cpu_to_le16(
-				sizeof(u16));
-		tlv_beacon_period->beacon_period = cpu_to_le16(
-				bss->param.bss_config.beacon_period);
-		cmd_size += sizeof(struct mwifiex_ie_types_beacon_period);
-		tlv += sizeof(struct mwifiex_ie_types_beacon_period);
-	}
-
-	if ((bss->param.bss_config.dtim_period >= MIN_DTIM_PERIOD) &&
-			(bss->param.bss_config.dtim_period <=
-				MAX_DTIM_PERIOD)) {
-		tlv_dtim_period = (struct mwifiex_ie_types_dtim_period *)tlv;
-		tlv_dtim_period->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_DTIM_PERIOD);
-		tlv_dtim_period->header.len = cpu_to_le16(
-				sizeof(u8));
-		tlv_dtim_period->dtim_period =
-				bss->param.bss_config.dtim_period;
-		cmd_size += sizeof(struct mwifiex_ie_types_dtim_period);
-		tlv += sizeof(struct mwifiex_ie_types_dtim_period);
-	}
-
-	if (bss->param.bss_config.rates[0]) {
-		tlv_rates = (struct mwifiex_ie_types_rates_param_set *)tlv;
-		tlv_rates->header.type = cpu_to_le16(TLV_TYPE_RATES);
-		for (i = 0; i < MAX_DATA_RATES &&
-				bss->param.bss_config.rates[i];
-				i++)
-			tlv_rates->rates[i] = bss->param.bss_config.rates[i];
-		tlv_rates->header.len = cpu_to_le16(i);
-		cmd_size +=  sizeof(struct mwifiex_ie_types_header) + i;
-		tlv += sizeof(struct mwifiex_ie_types_header) + i;
-	}
-
-	if (bss->param.bss_config.tx_data_rate <= DATA_RATE_54M) {
-		tlv_txrate = (struct mwifiex_ie_types_tx_rate *)tlv;
-		tlv_txrate->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_TX_DATA_RATE);
-		tlv_txrate->header.len = cpu_to_le16(sizeof(u16));
-		tlv_txrate->tx_data_rate = cpu_to_le16(bss->param.bss_config
-						       .tx_data_rate);
-		cmd_size += sizeof(struct mwifiex_ie_types_tx_rate);
-		tlv += sizeof(struct mwifiex_ie_types_tx_rate);
-	}
-
-	if (bss->param.bss_config.mcbc_data_rate <= DATA_RATE_54M) {
-		tlv_mcbc_rate = (struct mwifiex_ie_types_mcbc_rate *)tlv;
-		tlv_mcbc_rate->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_MCBC_DATA_RATE);
-		tlv_mcbc_rate->header.len = cpu_to_le16(sizeof(u16));
-		tlv_mcbc_rate->mcbc_data_rate = cpu_to_le16(bss->param
-						.bss_config.mcbc_data_rate);
-		cmd_size += sizeof(struct mwifiex_ie_types_mcbc_rate);
-		tlv += sizeof(struct mwifiex_ie_types_mcbc_rate);
-	}
-
-	if (bss->param.bss_config.tx_power_level <= MAX_TX_POWER) {
-		tlv_tx_power = (struct mwifiex_ie_types_tx_power *)tlv;
-		tlv_tx_power->header.type = cpu_to_le16(TLV_TYPE_UAP_TX_POWER);
-		tlv_tx_power->header.len = cpu_to_le16(sizeof(u8));
-		tlv_tx_power->tx_power = bss->param.bss_config.tx_power_level;
-		cmd_size += sizeof(struct mwifiex_ie_types_tx_power);
-		tlv += sizeof(struct mwifiex_ie_types_tx_power);
-	}
-
-	if (bss->param.bss_config.bcast_ssid_ctl <= true) {
-		tlv_bcast_ssid = (struct mwifiex_ie_types_bcast_ssid *)tlv;
-		tlv_bcast_ssid->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_BCAST_SSID_CTL);
-		tlv_bcast_ssid->header.len = cpu_to_le16(sizeof(u8));
-		tlv_bcast_ssid->bcast_ssid_ctl = bss->param.bss_config
-						.bcast_ssid_ctl;
-		cmd_size += sizeof(struct mwifiex_ie_types_bcast_ssid);
-		tlv += sizeof(struct mwifiex_ie_types_bcast_ssid);
-	}
-
-	if ((bss->param.bss_config.tx_antenna == ANTENNA_MODE_A) ||
-			(bss->param.bss_config.tx_antenna == ANTENNA_MODE_B)) {
-		tlv_antenna = (struct mwifiex_ie_types_antenna_mode *)tlv;
-		tlv_antenna->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_ANTENNA_CTL);
-		tlv_antenna->header.len = cpu_to_le16(sizeof(u8) + sizeof(u8));
-		tlv_antenna->which_antenna = TX_ANTENNA;
-		tlv_antenna->antenna_mode = bss->param.bss_config.tx_antenna;
-		cmd_size += sizeof(struct mwifiex_ie_types_antenna_mode);
-		tlv += sizeof(struct mwifiex_ie_types_antenna_mode);
-	}
-
-	if ((bss->param.bss_config.rx_antenna == ANTENNA_MODE_A) ||
-			(bss->param.bss_config.rx_antenna == ANTENNA_MODE_B)) {
-		tlv_antenna = (struct mwifiex_ie_types_antenna_mode *)tlv;
-		tlv_antenna->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_ANTENNA_CTL);
-		tlv_antenna->header.len = cpu_to_le16(sizeof(u8) + sizeof(u8));
-		tlv_antenna->which_antenna = RX_ANTENNA;
-		tlv_antenna->antenna_mode = bss->param.bss_config.rx_antenna;
-		cmd_size += sizeof(struct mwifiex_ie_types_antenna_mode);
-		tlv += sizeof(struct mwifiex_ie_types_antenna_mode);
-	}
-
-	if (bss->param.bss_config.pkt_forward_ctl <= true) {
-		tlv_pkt_forward = (struct mwifiex_ie_types_pkt_forward *)tlv;
-		tlv_pkt_forward->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_PKT_FWD_CTL);
-		tlv_pkt_forward->header.len = cpu_to_le16(sizeof(u8));
-		tlv_pkt_forward->pkt_forward_ctl = bss->param.bss_config
-						.pkt_forward_ctl;
-		cmd_size += sizeof(struct mwifiex_ie_types_pkt_forward);
-		tlv += sizeof(struct mwifiex_ie_types_pkt_forward);
-	}
-
-	if (bss->param.bss_config.max_sta_count <= MAX_STA_COUNT) {
-		tlv_sta_count = (struct mwifiex_ie_types_max_sta_count *)tlv;
-		tlv_sta_count->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_MAX_STA_CNT);
-		tlv_sta_count->header.len = cpu_to_le16(sizeof(u16));
-		tlv_sta_count->max_sta_count = cpu_to_le16(bss->param
-						.bss_config.max_sta_count);
-		cmd_size += sizeof(struct mwifiex_ie_types_max_sta_count);
-		tlv += sizeof(struct mwifiex_ie_types_max_sta_count);
-	}
-
-	if (((bss->param.bss_config.sta_ageout_timer >= MIN_STAGE_OUT_TIME) &&
-				(bss->param.bss_config.sta_ageout_timer <=
-				MAX_STAGE_OUT_TIME)) ||
-				(bss->param.bss_config.sta_ageout_timer == 0)) {
-		tlv_sta_ageout = (struct mwifiex_ie_types_sta_ageout *)tlv;
-		tlv_sta_ageout->header.type = cpu_to_le16(
-					TLV_TYPE_UAP_STA_AGEOUT_TIMER);
-		tlv_sta_ageout->header.len = cpu_to_le16(sizeof(u32));
-		tlv_sta_ageout->sta_ageout_timer = cpu_to_le32(
-					bss->param.bss_config.sta_ageout_timer);
-		cmd_size += sizeof(struct mwifiex_ie_types_sta_ageout);
-		tlv += sizeof(struct mwifiex_ie_types_sta_ageout);
-	}
-
-	if (((bss->param.bss_config.ps_sta_ageout_timer >= MIN_STAGE_OUT_TIME)
-				&& (bss->param.bss_config.ps_sta_ageout_timer
-				<= MAX_STAGE_OUT_TIME))
-				|| (bss->param.bss_config
-				.ps_sta_ageout_timer == 0)) {
-		tlv_ps_sta_ageout =
-			(struct mwifiex_ie_types_ps_sta_ageout *)tlv;
-		tlv_ps_sta_ageout->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_PS_STA_AGEOUT_TIMER);
-		tlv_ps_sta_ageout->header.len = cpu_to_le16(sizeof(u32));
-		tlv_ps_sta_ageout->ps_sta_ageout_timer = cpu_to_le32(
-				bss->param.bss_config.ps_sta_ageout_timer);
-		cmd_size += sizeof(struct mwifiex_ie_types_ps_sta_ageout);
-		tlv += sizeof(struct mwifiex_ie_types_ps_sta_ageout);
-	}
-	if (bss->param.bss_config.rts_threshold <= MAX_RTS_THRESHOLD) {
-		tlv_rts_threshold =
-			(struct mwifiex_ie_types_rts_threshold *)tlv;
-		tlv_rts_threshold->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_RTS_THRESHOLD);
-		tlv_rts_threshold->header.len = cpu_to_le16(sizeof(u16));
-		tlv_rts_threshold->rts_threshold = cpu_to_le16(
-				bss->param.bss_config.rts_threshold);
-		cmd_size += sizeof(struct mwifiex_ie_types_rts_threshold);
-		tlv += sizeof(struct mwifiex_ie_types_rts_threshold);
-	}
-
-	if ((bss->param.bss_config.frag_threshold >= MIN_FRAG_THRESHOLD) &&
-				(bss->param.bss_config.frag_threshold <=
-				MAX_FRAG_THRESHOLD)) {
-		tlv_frag_threshold =
-			(struct mwifiex_ie_types_frag_threshold *)tlv;
-		tlv_frag_threshold->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_FRAG_THRESHOLD);
-		tlv_frag_threshold->header.len = cpu_to_le16(sizeof(u16));
-		tlv_frag_threshold->frag_threshold = cpu_to_le16(
-				bss->param.bss_config.frag_threshold);
-		cmd_size += sizeof(struct mwifiex_ie_types_frag_threshold);
-		tlv += sizeof(struct mwifiex_ie_types_frag_threshold);
-	}
-
-	if (bss->param.bss_config.retry_limit <= MAX_RETRY_LIMIT) {
-		tlv_retry_limit = (struct mwifiex_ie_types_retry_limit *)tlv;
-		tlv_retry_limit->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_RETRY_LIMIT);
-		tlv_retry_limit->header.len = cpu_to_le16(sizeof(u8));
-		tlv_retry_limit->retry_limit = (u8)bss->param.bss_config
-				.retry_limit;
-		cmd_size += sizeof(struct mwifiex_ie_types_retry_limit);
-		tlv += sizeof(struct mwifiex_ie_types_retry_limit);
-	}
-
-	if (bss->param.bss_config.pairwise_update_timeout) {
-		tlv_pairwise_timeout =
-			(struct mwifiex_ie_types_eapol_pwk_hsk_timeout *)tlv;
-		tlv_pairwise_timeout->header.type = cpu_to_le16(
-			TLV_TYPE_UAP_EAPOL_PWK_HSK_TIMEOUT);
-		tlv_pairwise_timeout->header.len =
-			cpu_to_le16(sizeof(u32));
-		tlv_pairwise_timeout->pairwise_update_timeout =
-			cpu_to_le32(
-			bss->param.bss_config.pairwise_update_timeout);
-		cmd_size +=
-			sizeof(struct mwifiex_ie_types_eapol_pwk_hsk_timeout);
-		tlv += sizeof(struct mwifiex_ie_types_eapol_pwk_hsk_timeout);
-	}
-
-	if (bss->param.bss_config.pwk_retries) {
-		tlv_pairwise_retries =
-			(struct mwifiex_ie_types_eapol_pwk_hsk_retries *)tlv;
-		tlv_pairwise_retries->header.type =
-			cpu_to_le16(TLV_TYPE_UAP_EAPOL_PWK_HSK_RETRIES);
-		tlv_pairwise_retries->header.len =
-			cpu_to_le16(sizeof(u32));
-		tlv_pairwise_retries->pwk_retries =
-			cpu_to_le32(bss->param.bss_config.pwk_retries);
-		cmd_size +=
-			sizeof(struct mwifiex_ie_types_eapol_pwk_hsk_retries);
-		tlv += sizeof(struct mwifiex_ie_types_eapol_pwk_hsk_retries);
-	}
-
-	if (bss->param.bss_config.groupwise_update_timeout) {
-		tlv_groupwise_timeout =
-			(struct mwifiex_ie_types_eapol_gwk_hsk_timeout *)tlv;
-		tlv_groupwise_timeout->header.type =
-			cpu_to_le16(TLV_TYPE_UAP_EAPOL_GWK_HSK_TIMEOUT);
-		tlv_groupwise_timeout->header.len =  cpu_to_le16(sizeof(u32));
-		tlv_groupwise_timeout->groupwise_update_timeout = cpu_to_le32(
-			bss->param.bss_config.groupwise_update_timeout);
-		cmd_size +=
-			sizeof(struct mwifiex_ie_types_eapol_gwk_hsk_timeout);
-		tlv += sizeof(struct mwifiex_ie_types_eapol_gwk_hsk_timeout);
-	}
-
-	if (bss->param.bss_config.gwk_retries) {
-		tlv_groupwise_retries =
-			(struct mwifiex_ie_types_eapol_gwk_hsk_retries *)tlv;
-		tlv_groupwise_retries->header.type =
-			cpu_to_le16(TLV_TYPE_UAP_EAPOL_GWK_HSK_RETRIES);
-		tlv_groupwise_retries->header.len = cpu_to_le16(sizeof(u32));
-		tlv_groupwise_retries->gwk_retries =
-			cpu_to_le32(bss->param.bss_config.gwk_retries);
-		cmd_size +=
-			sizeof(struct mwifiex_ie_types_eapol_gwk_hsk_retries);
-		tlv += sizeof(struct mwifiex_ie_types_eapol_gwk_hsk_retries);
-	}
-
-	if ((bss->param.bss_config.filter.filter_mode <=
-			MAC_FILTER_MODE_BLOCK_MAC)
-			&& (bss->param.bss_config.filter.mac_count <=
-			MAX_MAC_FILTER_NUM)) {
-		tlv_mac_filter = (struct mwifiex_ie_types_mac_filter *)tlv;
-		tlv_mac_filter->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_STA_MAC_ADDR_FILTER);
-		tlv_mac_filter->header.len = cpu_to_le16(
-				2 + MWIFIEX_MAC_ADDR_LENGTH *
-				bss->param.bss_config.filter.mac_count);
-		tlv_mac_filter->count = (u8)bss->param.bss_config.filter
-				.mac_count;
-		tlv_mac_filter->filter_mode = (u8)bss->param.bss_config.filter
-				.filter_mode;
-		memcpy(tlv_mac_filter->mac_address,
-				(u8 *)bss->param.bss_config.filter.mac_list,
-				MWIFIEX_MAC_ADDR_LENGTH *
-				bss->param.bss_config.filter.mac_count);
-		cmd_size += sizeof(struct mwifiex_ie_types_header) + 2 +
-				MWIFIEX_MAC_ADDR_LENGTH *
-				bss->param.bss_config.filter.mac_count;
-		tlv += sizeof(struct mwifiex_ie_types_header) + 2 +
-				MWIFIEX_MAC_ADDR_LENGTH *
-				bss->param.bss_config.filter.mac_count;
-	}
-
-	if ((((bss->param.bss_config.band_cfg & BAND_CONFIG_ACS_MODE) ==
-				BAND_CONFIG_MANUAL) &&
-				(bss->param.bss_config.channel > 0) &&
-				(bss->param.bss_config.channel <=
-				MAX_CHANNEL)) ||
-				(bss->param.bss_config.band_cfg &
-				BAND_CONFIG_ACS_MODE)) {
-		tlv_chan_band = (struct mwifiex_ie_types_channel_band *)tlv;
-		tlv_chan_band->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_CHAN_BAND_CONFIG);
-		tlv_chan_band->header.len = cpu_to_le16(sizeof(u8)+sizeof(u8));
-		tlv_chan_band->band_config = bss->param.bss_config.band_cfg;
-		tlv_chan_band->channel = bss->param.bss_config.channel;
-		cmd_size += sizeof(struct mwifiex_ie_types_channel_band);
-		tlv += sizeof(struct mwifiex_ie_types_channel_band);
-	}
-
-	if ((bss->param.bss_config.chan_list.num_of_chan) &&
-			(bss->param.bss_config.chan_list.num_of_chan <=
-			MWIFIEX_SCAN_CHANNEL_NUM)) {
-		tlv_chan_list = (
-			struct mwifiex_ie_types_chan_list_param_set *)tlv;
-		tlv_chan_list->header.type = cpu_to_le16(TLV_TYPE_CHANLIST);
-		tlv_chan_list->header.len = cpu_to_le16((u16)(sizeof(
-					struct mwifiex_chan_scan_param_set) *
-					bss->param.bss_config.chan_list
-					.num_of_chan));
-
-		pscan_chan = tlv_chan_list->chan_scan_param;
-		for (i = 0; i < bss->param.bss_config.chan_list
-							.num_of_chan; i++) {
-			pscan_chan->chan_number =  (u8)bss->param.bss_config
-						.chan_list.chan[i];
-			pscan_chan++;
-		}
-		cmd_size += sizeof(tlv_chan_list->header) +
-			(sizeof(struct mwifiex_chan_scan_param_set) *
-					bss->param.bss_config
-					.chan_list.num_of_chan);
-		tlv += sizeof(tlv_chan_list->header) +
-			(sizeof(struct mwifiex_chan_scan_param_set) *
-					bss->param.bss_config.chan_list
-					.num_of_chan);
-	}
-
-	if (bss->param.bss_config.auth_mode <= MWIFIEX_AUTH_MODE_SHARED) {
-		tlv_auth_type = (struct mwifiex_ie_types_auth_type *)tlv;
-		tlv_auth_type->header.type = cpu_to_le16(TLV_TYPE_AUTH_TYPE);
-		tlv_auth_type->header.len = cpu_to_le16(sizeof(u16));
-		tlv_auth_type->auth_type =
-					cpu_to_le16((u16)bss->param
-					       .bss_config.auth_mode);
-		cmd_size += sizeof(struct mwifiex_ie_types_auth_type);
-		tlv += sizeof(struct mwifiex_ie_types_auth_type);
-	}
-
-	if (bss->param.bss_config.protocol) {
-		tlv_encrypt_protocol =
-				(struct
-				 mwifiex_ie_types_encrypt_protocol
-				 *)tlv;
-		tlv_encrypt_protocol->header.type = cpu_to_le16(
-					TLV_TYPE_UAP_ENCRYPT_PROTOCOL);
-		tlv_encrypt_protocol->header.len = cpu_to_le16(sizeof(u16));
-		tlv_encrypt_protocol->protocol = cpu_to_le16(bss->param
-					.bss_config.protocol);
-		cmd_size += sizeof(struct mwifiex_ie_types_encrypt_protocol);
-		tlv += sizeof(struct mwifiex_ie_types_encrypt_protocol);
-	}
-	if ((bss->param.bss_config.radio_ctl == 0) ||
-			(bss->param.bss_config.radio_ctl == 1)) {
-		tlv_radio_control =
-			(struct mwifiex_ie_types_radio_control *)tlv;
-		tlv_radio_control->header.type = cpu_to_le16(
-					TLV_TYPE_UAP_RADIO_CONTROL);
-		tlv_radio_control->header.len = cpu_to_le16(sizeof(u8));
-		tlv_radio_control->radio_ctl = bss->param.bss_config.radio_ctl;
-		cmd_size += sizeof(struct mwifiex_ie_types_radio_control);
-		tlv += sizeof(struct mwifiex_ie_types_radio_control);
-	}
-
-	if ((bss->param.bss_config.protocol == PROTOCOL_WPA) ||
-				(bss->param.bss_config.protocol ==
-				PROTOCOL_WPA2) ||
-				(bss->param.bss_config.protocol ==
-				PROTOCOL_WPA2_MIXED)) {
-		tlv_akmp = (struct mwifiex_ie_types_akmp *)tlv;
-		tlv_akmp->header.type = cpu_to_le16(TLV_TYPE_UAP_AKMP);
-		tlv_akmp->header.len = cpu_to_le16(sizeof(u16));
-		tlv_akmp->key_mgmt = cpu_to_le16(KEY_MGMT_PSK);
-		cmd_size += sizeof(struct mwifiex_ie_types_akmp);
-		tlv += sizeof(struct mwifiex_ie_types_akmp);
-
-		if (((bss->param.bss_config.wpa_cfg.pairwise_cipher_wpa &
-						VALID_CIPHER_BITMAP) ||
-						(bss->param.bss_config.wpa_cfg
-						.pairwise_cipher_wpa2 &
-						VALID_CIPHER_BITMAP)) &&
-						(bss->param.bss_config.wpa_cfg
-						.group_cipher &
-						VALID_CIPHER_BITMAP)) {
-			tlv_cipher = (struct mwifiex_ie_types_cipher *)tlv;
-			tlv_cipher->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_CIPHER);
-			tlv_cipher->header.len = cpu_to_le16(sizeof(u8)
-						+ sizeof(u8));
-			tlv_cipher->pair_cipher = (bss->param.bss_config
-						.wpa_cfg.pairwise_cipher_wpa |
-						bss->param.bss_config.wpa_cfg
-						.pairwise_cipher_wpa2) &
-						VALID_CIPHER_BITMAP;
-			tlv_cipher->group_cipher = bss->param.bss_config.wpa_cfg
-						.group_cipher;
-			cmd_size += sizeof(struct mwifiex_ie_types_cipher);
-			tlv += sizeof(struct mwifiex_ie_types_cipher);
-		}
-		if (bss->param.bss_config.wpa_cfg.pairwise_cipher_wpa
-						& VALID_CIPHER_BITMAP) {
-			tlv_pwk_cipher =
-				(struct mwifiex_ie_types_pwk_cipher *)tlv;
-			tlv_pwk_cipher->header.type = cpu_to_le16(
-						TLV_TYPE_PWK_CIPHER);
-			tlv_pwk_cipher->header.len = cpu_to_le16(
-						sizeof(u16) + sizeof(u8) +
-						sizeof(u8));
-			tlv_pwk_cipher->protocol = cpu_to_le16(PROTOCOL_WPA);
-			tlv_pwk_cipher->pairwise_cipher = bss->param.bss_config
-						.wpa_cfg.pairwise_cipher_wpa;
-			cmd_size += sizeof(struct mwifiex_ie_types_pwk_cipher);
-			tlv += sizeof(struct mwifiex_ie_types_pwk_cipher);
-		}
-
-		if (bss->param.bss_config.wpa_cfg.pairwise_cipher_wpa2 &
-						VALID_CIPHER_BITMAP) {
-			tlv_pwk_cipher =
-				(struct mwifiex_ie_types_pwk_cipher *)tlv;
-			tlv_pwk_cipher->header.type = cpu_to_le16(
-						TLV_TYPE_PWK_CIPHER);
-			tlv_pwk_cipher->header.len = cpu_to_le16(sizeof(u16) +
-						sizeof(u8) + sizeof(u8));
-			tlv_pwk_cipher->protocol = cpu_to_le16(PROTOCOL_WPA2);
-			tlv_pwk_cipher->pairwise_cipher = bss->param.bss_config
-						.wpa_cfg.pairwise_cipher_wpa2;
-			cmd_size += sizeof(struct mwifiex_ie_types_pwk_cipher);
-			tlv += sizeof(struct mwifiex_ie_types_pwk_cipher);
-		}
-
-		if (bss->param.bss_config.wpa_cfg.group_cipher &
-						VALID_CIPHER_BITMAP) {
-			tlv_gwk_cipher =
-				(struct mwifiex_ie_types_gwk_cipher *)tlv;
-			tlv_gwk_cipher->header.type = cpu_to_le16(
-						TLV_TYPE_GWK_CIPHER);
-			tlv_gwk_cipher->header.len = cpu_to_le16(
-						sizeof(u8) + sizeof(u8));
-			tlv_gwk_cipher->group_cipher = bss->param.bss_config
-						.wpa_cfg.group_cipher;
-			cmd_size += sizeof(struct mwifiex_ie_types_gwk_cipher);
-			tlv += sizeof(struct mwifiex_ie_types_gwk_cipher);
-		}
-
-		if (bss->param.bss_config.wpa_cfg.rsn_protection <= true) {
-			tlv_rsn_prot = (
-				struct mwifiex_ie_types_rsn_replay_prot *)tlv;
-			tlv_rsn_prot->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_RSN_REPLAY_PROTECT);
-			tlv_rsn_prot->header.len = cpu_to_le16(sizeof(u8));
-			tlv_rsn_prot->rsn_replay_prot = bss->param.bss_config
-						.wpa_cfg.rsn_protection;
-			cmd_size += sizeof(struct
-					mwifiex_ie_types_rsn_replay_prot);
-			tlv += sizeof(struct mwifiex_ie_types_rsn_replay_prot);
-		}
-
-		if (bss->param.bss_config.wpa_cfg.length) {
-			tlv_passphrase =
-				(struct mwifiex_ie_types_passphrase *)tlv;
-			tlv_passphrase->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_WPA_PASSPHRASE);
-			tlv_passphrase->header.len = cpu_to_le16(
-				(u16)bss->param.bss_config.wpa_cfg.length);
-			memcpy(tlv_passphrase->passphrase, bss->param.bss_config
-							.wpa_cfg.passphrase,
-							bss->param.bss_config
-							.wpa_cfg.length);
-			cmd_size +=  sizeof(struct mwifiex_ie_types_header) +
-					bss->param.bss_config.wpa_cfg.length;
-			tlv += sizeof(struct mwifiex_ie_types_header) +
-					bss->param.bss_config.wpa_cfg.length;
-		}
-
-		if (bss->param.bss_config.wpa_cfg.gk_rekey_time <
-								MAX_GRP_TIMER) {
-			tlv_rekey_time = (
-				struct mwifiex_ie_types_group_rekey_time *)tlv;
-			tlv_rekey_time->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_GRP_REKEY_TIME);
-			tlv_rekey_time->header.len = cpu_to_le16(sizeof(u32));
-			tlv_rekey_time->gk_rekey_time = cpu_to_le32(bss->param
-					.bss_config.wpa_cfg.gk_rekey_time);
-			cmd_size += sizeof(struct
-					mwifiex_ie_types_group_rekey_time);
-			tlv += sizeof(struct mwifiex_ie_types_group_rekey_time);
-		}
-	} else {
-		if ((bss->param.bss_config.wep_cfg.key0.length) &&
-				((bss->param.bss_config.wep_cfg.key0
-				.length == 5) ||
-				(bss->param.bss_config.wep_cfg.key0
-				.length == 10) ||
-				(bss->param.bss_config.wep_cfg.key0
-				.length == 13) ||
-				(bss->param.bss_config.wep_cfg.key0
-				.length == 26))) {
-			tlv_wep_key = (struct mwifiex_ie_types_wep_key *)tlv;
-			tlv_wep_key->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_WEP_KEY);
-			tlv_wep_key->header.len = cpu_to_le16(2 + bss->param
-					.bss_config.wep_cfg.key0.length);
-			tlv_wep_key->key_index = bss->param.bss_config.wep_cfg
-							.key0.key_index;
-			tlv_wep_key->is_default = bss->param.bss_config.wep_cfg
-							.key0.is_default;
-			memcpy(tlv_wep_key->key, bss->param.bss_config.wep_cfg
-							.key0.key,
-							bss->param.bss_config
-							.wep_cfg.key0.length);
-			cmd_size += sizeof(struct mwifiex_ie_types_header) + 2
-							+ bss->param.bss_config
-							.wep_cfg.key0.length;
-			tlv += sizeof(struct mwifiex_ie_types_header) + 2 +
-							bss->param.bss_config
-							.wep_cfg.key0.length;
-		}
-
-		if ((bss->param.bss_config.wep_cfg.key1.length) &&
-					((bss->param.bss_config.wep_cfg
-					.key1.length == 5) ||
-					(bss->param.bss_config.wep_cfg
-					.key1.length == 10) ||
-					(bss->param.bss_config.wep_cfg
-					.key1.length == 13) ||
-					(bss->param.bss_config.wep_cfg
-					.key1.length == 26))) {
-			tlv_wep_key = (struct mwifiex_ie_types_wep_key *)tlv;
-			tlv_wep_key->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_WEP_KEY);
-			tlv_wep_key->header.len = cpu_to_le16(2 + bss->param
-						.bss_config.wep_cfg
-						.key1.length);
-			tlv_wep_key->key_index = bss->param.bss_config.wep_cfg
-						.key1.key_index;
-			tlv_wep_key->is_default = bss->param.bss_config.wep_cfg
-						.key1.is_default;
-			memcpy(tlv_wep_key->key, bss->param.bss_config.wep_cfg
-						.key1.key,
-						bss->param.bss_config.wep_cfg
-						.key1.length);
-			cmd_size += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key1.length;
-			tlv += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key1.length;
-		}
-
-		if ((bss->param.bss_config.wep_cfg.key2.length) &&
-					((bss->param.bss_config.wep_cfg
-					.key2.length == 5) ||
-					(bss->param.bss_config.wep_cfg
-					.key2.length == 10) ||
-					(bss->param.bss_config.wep_cfg
-					.key2.length == 13) ||
-					(bss->param.bss_config.wep_cfg
-					.key2.length == 26))) {
-			tlv_wep_key = (struct mwifiex_ie_types_wep_key *)tlv;
-			tlv_wep_key->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_WEP_KEY);
-			tlv_wep_key->header.len = cpu_to_le16(2 + bss->param
-						.bss_config.wep_cfg
-						.key2.length);
-			tlv_wep_key->key_index = bss->param.bss_config.wep_cfg
-						.key2.key_index;
-			tlv_wep_key->is_default = bss->param.bss_config.wep_cfg
-						.key2.is_default;
-			memcpy(tlv_wep_key->key, bss->param.bss_config.wep_cfg
-						.key2.key,
-						bss->param.bss_config.wep_cfg
-						.key2.length);
-			cmd_size += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key2.length;
-			tlv += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key2.length;
-		}
-
-		if ((bss->param.bss_config.wep_cfg.key3.length) &&
-					((bss->param.bss_config.wep_cfg
-					.key3.length == 5) ||
-					(bss->param.bss_config.wep_cfg
-					.key3.length == 10) ||
-					(bss->param.bss_config.wep_cfg
-					.key3.length == 13) ||
-					(bss->param.bss_config.wep_cfg
-					.key3.length == 26))) {
-			tlv_wep_key = (struct mwifiex_ie_types_wep_key *)tlv;
-			tlv_wep_key->header.type = cpu_to_le16(
-						TLV_TYPE_UAP_WEP_KEY);
-			tlv_wep_key->header.len = cpu_to_le16(2 + bss->param
-						.bss_config.wep_cfg
-						.key3.length);
-			tlv_wep_key->key_index = bss->param.bss_config.wep_cfg
-						.key3.key_index;
-			tlv_wep_key->is_default = bss->param.bss_config.wep_cfg
-						.key3.is_default;
-			memcpy(tlv_wep_key->key, bss->param.bss_config.wep_cfg
-						.key3.key,
-						bss->param.bss_config.wep_cfg
-						.key3.length);
-			cmd_size += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key3.length;
-			tlv += sizeof(struct mwifiex_ie_types_header) + 2 +
-						bss->param.bss_config.wep_cfg
-						.key3.length;
-		}
-	}
-	cmd->size = cpu_to_le16((u16)cmd_size);
-	PRINTM(MCMND, "AP config: cmd_size=%d\n", cmd_size);
-	LEAVE();
-	return MWIFIEX_STATUS_SUCCESS;
-}
-
-/*
- * This function prepares command of sys_config
- */
-static enum mwifiex_status
-mwifiex_uap_cmd_sys_configure(struct mwifiex_private *priv,
-			      struct host_cmd_ds_command *cmd,
-			      u16 cmd_action,
-			      struct mwifiex_ioctl_req *pioctl_buf)
-{
-	struct mwifiex_ds_bss *bss = NULL;
-	struct host_cmd_ds_sys_config *sys_config =
-		       (struct host_cmd_ds_sys_config *)&cmd->params.sys_config;
-	struct mwifiex_ie_types_macaddr *mac_tlv = NULL;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-
-	ENTER();
-
-	cmd->command = cpu_to_le16(HOST_CMD_APCMD_SYS_CONFIGURE);
-	sys_config->action = cpu_to_le16(cmd_action);
-	cmd->size = cpu_to_le16(sizeof(struct host_cmd_ds_sys_config) -
-							1 + S_DS_GEN);
-	if (pioctl_buf == NULL) {
-		mac_tlv = (struct
-			   mwifiex_ie_types_macaddr
-			   *)sys_config->tlv_buffer;
-		cmd->size = cpu_to_le16(sizeof(struct host_cmd_ds_sys_config) -
-			1 + S_DS_GEN + sizeof(struct mwifiex_ie_types_macaddr));
-		mac_tlv->header.type = cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
-		mac_tlv->header.len = cpu_to_le16(MWIFIEX_MAC_ADDR_LENGTH);
-		ret = MWIFIEX_STATUS_SUCCESS;
-		goto done;
-	}
-	if (pioctl_buf->req_id == MWIFIEX_IOCTL_BSS) {
-		bss =  (struct mwifiex_ds_bss *)pioctl_buf->buffer;
-		if (bss->sub_command == MWIFIEX_OID_BSS_MAC_ADDR) {
-			mac_tlv = (struct
-				   mwifiex_ie_types_macaddr
-				   *)
-				   sys_config->tlv_buffer;
-			cmd->size = cpu_to_le16(sizeof(
-				struct host_cmd_ds_sys_config) - 1 + S_DS_GEN +
-				sizeof(struct mwifiex_ie_types_macaddr));
-			mac_tlv->header.type = cpu_to_le16(
-				TLV_TYPE_UAP_MAC_ADDRESS);
-			mac_tlv->header.len = cpu_to_le16(
-				MWIFIEX_MAC_ADDR_LENGTH);
-			if (cmd_action == HostCmd_ACT_GEN_SET)
-				memcpy(mac_tlv->mac, &bss->param.mac_addr,
-				MWIFIEX_MAC_ADDR_LENGTH);
-		} else if ((bss->sub_command == MWIFIEX_OID_UAP_BSS_CONFIG) &&
-					(cmd_action == HostCmd_ACT_GEN_SET)) {
-			ret = mwifiex_uap_cmd_ap_config(priv, cmd, cmd_action,
-								pioctl_buf);
-			goto done;
-		}
-	}
-done:
-LEAVE();
-return ret;
-}
-
-/*
- * This function handles command resp for get uap settings
- */
-static enum mwifiex_status mwifiex_uap_ret_cmd_ap_config(
-		struct mwifiex_private *priv,
-		struct host_cmd_ds_command *resp,
-		struct mwifiex_ioctl_req *pioctl_buf)
-{
-	struct host_cmd_ds_sys_config *sys_config =
-					(struct
-					host_cmd_ds_sys_config
-					*)&resp->params.sys_config;
-	struct mwifiex_ds_bss *bss = NULL;
-	struct mwifiex_ie_types_header *tlv = NULL;
-	u16 tlv_buf_left = 0;
-	u16 tlv_type = 0;
-	u16 tlv_len = 0;
-	struct mwifiex_ie_types_macaddr *tlv_mac = NULL;
-	struct mwifiex_ie_types_ssid_param_set *tlv_ssid = NULL;
-	struct mwifiex_ie_types_beacon_period *tlv_beacon_period = NULL;
-	struct mwifiex_ie_types_dtim_period *tlv_dtim_period = NULL;
-	struct mwifiex_ie_types_rates_param_set *tlv_rates = NULL;
-	struct mwifiex_ie_types_tx_rate *tlv_txrate = NULL;
-	struct mwifiex_ie_types_mcbc_rate *tlv_mcbc_rate = NULL;
-	struct mwifiex_ie_types_tx_power *tlv_tx_power = NULL;
-	struct mwifiex_ie_types_bcast_ssid *tlv_bcast_ssid = NULL;
-	struct mwifiex_ie_types_antenna_mode *tlv_antenna = NULL;
-	struct mwifiex_ie_types_pkt_forward *tlv_pkt_forward = NULL;
-	struct mwifiex_ie_types_max_sta_count *tlv_sta_count = NULL;
-	struct mwifiex_ie_types_sta_ageout *tlv_sta_ageout = NULL;
-	struct mwifiex_ie_types_ps_sta_ageout *tlv_ps_sta_ageout = NULL;
-	struct mwifiex_ie_types_rts_threshold *tlv_rts_threshold = NULL;
-	struct mwifiex_ie_types_frag_threshold *tlv_frag_threshold = NULL;
-	struct mwifiex_ie_types_retry_limit *tlv_retry_limit = NULL;
-	struct mwifiex_ie_types_eapol_pwk_hsk_timeout *tlv_pairwise_timeout =
-									NULL;
-	struct mwifiex_ie_types_eapol_pwk_hsk_retries *tlv_pairwise_retries =
-									NULL;
-	struct mwifiex_ie_types_eapol_gwk_hsk_timeout *tlv_groupwise_timeout =
-									NULL;
-	struct mwifiex_ie_types_eapol_gwk_hsk_retries *tlv_groupwise_retries =
-									NULL;
-	struct mwifiex_ie_types_mac_filter *tlv_mac_filter = NULL;
-	struct mwifiex_ie_types_channel_band *tlv_chan_band = NULL;
-	struct mwifiex_ie_types_chan_list_param_set *tlv_chan_list = NULL;
-	struct mwifiex_chan_scan_param_set *pscan_chan = NULL;
-	struct mwifiex_ie_types_auth_type *tlv_auth_type = NULL;
-	struct mwifiex_ie_types_encrypt_protocol *tlv_encrypt_protocol = NULL;
-	struct mwifiex_ie_types_akmp *tlv_akmp = NULL;
-	struct mwifiex_ie_types_cipher *tlv_cipher = NULL;
-	struct mwifiex_ie_types_pwk_cipher *tlv_pwk_cipher = NULL;
-	struct mwifiex_ie_types_gwk_cipher *tlv_gwk_cipher = NULL;
-	struct mwifiex_ie_types_rsn_replay_prot *tlv_rsn_prot = NULL;
-	struct mwifiex_ie_types_passphrase *tlv_passphrase = NULL;
-	struct mwifiex_ie_types_group_rekey_time *tlv_rekey_time = NULL;
-	struct mwifiex_ie_types_wep_key *tlv_wep_key = NULL;
-	struct mwifiex_ie_types_preamble *tlv_preamble = NULL;
-	struct mwifiex_ie_types_radio_control *tlv_radio_control = NULL;
-	struct wep_key *pkey = NULL;
-	u16 i;
-
-	ENTER();
-
-	bss =  (struct mwifiex_ds_bss *)pioctl_buf->buffer;
-	tlv = (struct mwifiex_ie_types_header *)sys_config->tlv_buffer;
-	tlv_buf_left = le16_to_cpu(resp->size) - (sizeof(
-						struct host_cmd_ds_sys_config) -
-						1 +  S_DS_GEN);
-
-	while (tlv_buf_left >= sizeof(struct mwifiex_ie_types_header)) {
-
-		tlv_type = le16_to_cpu(tlv->type);
-		tlv_len = le16_to_cpu(tlv->len);
-
-		switch (tlv_type) {
-		case TLV_TYPE_UAP_MAC_ADDRESS:
-			tlv_mac = (struct mwifiex_ie_types_macaddr *)tlv;
-			memcpy(&bss->param.bss_config.mac_addr, tlv_mac->mac,
-						MWIFIEX_MAC_ADDR_LENGTH);
-			break;
-		case TLV_TYPE_SSID:
-			tlv_ssid =
-				(struct mwifiex_ie_types_ssid_param_set *)tlv;
-			bss->param.bss_config.ssid.ssid_len = tlv_len;
-			memcpy(bss->param.bss_config.ssid.ssid, tlv_ssid->ssid,
-								tlv_len);
-			break;
-		case TLV_TYPE_UAP_BEACON_PERIOD:
-			tlv_beacon_period =
-				(struct mwifiex_ie_types_beacon_period *)tlv;
-			bss->param.bss_config.beacon_period = le16_to_cpu(
-					tlv_beacon_period->beacon_period);
-			break;
-		case TLV_TYPE_UAP_DTIM_PERIOD:
-			tlv_dtim_period = (struct
-					   mwifiex_ie_types_dtim_period
-					   *)tlv;
-			bss->param.bss_config.dtim_period =
-					tlv_dtim_period->dtim_period;
-			break;
-		case TLV_TYPE_RATES:
-			tlv_rates =
-				(struct mwifiex_ie_types_rates_param_set *)tlv;
-			memcpy(bss->param.bss_config.rates, tlv_rates->rates,
-								tlv_len);
-			break;
-		case TLV_TYPE_UAP_TX_DATA_RATE:
-			tlv_txrate = (struct mwifiex_ie_types_tx_rate *)tlv;
-			bss->param.bss_config.tx_data_rate = le16_to_cpu(
-						tlv_txrate->tx_data_rate);
-			break;
-		case TLV_TYPE_UAP_MCBC_DATA_RATE:
-			tlv_mcbc_rate =
-				(struct mwifiex_ie_types_mcbc_rate *)tlv;
-			bss->param.bss_config.mcbc_data_rate = le16_to_cpu(
-						tlv_mcbc_rate->mcbc_data_rate);
-			break;
-		case TLV_TYPE_UAP_TX_POWER:
-			tlv_tx_power = (struct mwifiex_ie_types_tx_power *)tlv;
-			bss->param.bss_config.tx_power_level =
-							tlv_tx_power->tx_power;
-			break;
-		case TLV_TYPE_UAP_BCAST_SSID_CTL:
-			tlv_bcast_ssid =
-				(struct mwifiex_ie_types_bcast_ssid *)tlv;
-			bss->param.bss_config.bcast_ssid_ctl =
-						tlv_bcast_ssid->bcast_ssid_ctl;
-			break;
-		case TLV_TYPE_UAP_RADIO_CONTROL:
-			tlv_radio_control =
-				(struct mwifiex_ie_types_radio_control *)tlv;
-			bss->param.bss_config.radio_ctl =
-					tlv_radio_control->radio_ctl;
-			break;
-		case TLV_TYPE_UAP_ANTENNA_CTL:
-			tlv_antenna =
-				(struct mwifiex_ie_types_antenna_mode *)tlv;
-			if (tlv_antenna->which_antenna == TX_ANTENNA)
-				bss->param.bss_config.tx_antenna =
-						tlv_antenna->antenna_mode;
-			else if (tlv_antenna->which_antenna == RX_ANTENNA)
-				bss->param.bss_config.rx_antenna =
-						tlv_antenna->antenna_mode;
-			break;
-		case TLV_TYPE_UAP_PKT_FWD_CTL:
-			tlv_pkt_forward =
-				(struct mwifiex_ie_types_pkt_forward *)tlv;
-			bss->param.bss_config.pkt_forward_ctl =
-					tlv_pkt_forward->pkt_forward_ctl;
-			break;
-		case TLV_TYPE_UAP_MAX_STA_CNT:
-			tlv_sta_count =
-				(struct mwifiex_ie_types_max_sta_count *)tlv;
-			bss->param.bss_config.max_sta_count = le16_to_cpu(
-					tlv_sta_count->max_sta_count);
-			break;
-		case TLV_TYPE_UAP_STA_AGEOUT_TIMER:
-			tlv_sta_ageout =
-				(struct mwifiex_ie_types_sta_ageout *)tlv;
-			bss->param.bss_config.sta_ageout_timer = le32_to_cpu(
-					tlv_sta_ageout->sta_ageout_timer);
-			break;
-		case TLV_TYPE_UAP_PS_STA_AGEOUT_TIMER:
-			tlv_ps_sta_ageout =
-				(struct mwifiex_ie_types_ps_sta_ageout *)tlv;
-			bss->param.bss_config.ps_sta_ageout_timer = le32_to_cpu(
-					tlv_ps_sta_ageout->ps_sta_ageout_timer);
-			break;
-		case TLV_TYPE_UAP_RTS_THRESHOLD:
-			tlv_rts_threshold =
-				(struct mwifiex_ie_types_rts_threshold *)tlv;
-			bss->param.bss_config.rts_threshold = le16_to_cpu(
-					tlv_rts_threshold->rts_threshold);
-			break;
-		case TLV_TYPE_UAP_FRAG_THRESHOLD:
-			tlv_frag_threshold =
-				(struct mwifiex_ie_types_frag_threshold *)tlv;
-			bss->param.bss_config.frag_threshold = le16_to_cpu(
-					tlv_frag_threshold->frag_threshold);
-			break;
-		case TLV_TYPE_UAP_RETRY_LIMIT:
-			tlv_retry_limit =
-				(struct mwifiex_ie_types_retry_limit *)tlv;
-			bss->param.bss_config.retry_limit =
-					tlv_retry_limit->retry_limit;
-			break;
-		case TLV_TYPE_UAP_EAPOL_PWK_HSK_TIMEOUT:
-			tlv_pairwise_timeout =
-				(struct
-				 mwifiex_ie_types_eapol_pwk_hsk_timeout
-				*)tlv;
-			bss->param.bss_config.pairwise_update_timeout =
-				le32_to_cpu(
-				tlv_pairwise_timeout->pairwise_update_timeout);
-			break;
-		case TLV_TYPE_UAP_EAPOL_PWK_HSK_RETRIES:
-			tlv_pairwise_retries =
-				(struct
-				 mwifiex_ie_types_eapol_pwk_hsk_retries
-				 *)tlv;
-			bss->param.bss_config.pwk_retries = le32_to_cpu(
-				tlv_pairwise_retries->pwk_retries);
-			break;
-		case TLV_TYPE_UAP_EAPOL_GWK_HSK_TIMEOUT:
-			tlv_groupwise_timeout =
-				(struct
-				 mwifiex_ie_types_eapol_gwk_hsk_timeout
-				 *)tlv;
-			bss->param.bss_config.groupwise_update_timeout =
-				le32_to_cpu(
-				tlv_groupwise_timeout->
-				groupwise_update_timeout);
-			break;
-		case TLV_TYPE_UAP_EAPOL_GWK_HSK_RETRIES:
-			tlv_groupwise_retries =
-				(struct
-				 mwifiex_ie_types_eapol_gwk_hsk_retries
-				 *)tlv;
-			bss->param.bss_config.gwk_retries =
-				le32_to_cpu(
-				tlv_groupwise_retries->
-				gwk_retries);
-			break;
-		case TLV_TYPE_UAP_STA_MAC_ADDR_FILTER:
-			tlv_mac_filter =
-				(struct mwifiex_ie_types_mac_filter *)tlv;
-			bss->param.bss_config.filter.mac_count =
-					tlv_mac_filter->count;
-			bss->param.bss_config.filter.filter_mode =
-					tlv_mac_filter->filter_mode;
-			memcpy((u8 *)bss->param.bss_config.filter.mac_list,
-					tlv_mac_filter->mac_address,
-					MWIFIEX_MAC_ADDR_LENGTH *
-					bss->param.bss_config.filter.mac_count);
-			break;
-		case TLV_TYPE_UAP_CHAN_BAND_CONFIG:
-			tlv_chan_band =
-				(struct mwifiex_ie_types_channel_band *)tlv;
-			bss->param.bss_config.band_cfg =
-						tlv_chan_band->band_config;
-			bss->param.bss_config.channel = tlv_chan_band->channel;
-			break;
-		case TLV_TYPE_CHANLIST:
-			tlv_chan_list =
-				(struct
-				 mwifiex_ie_types_chan_list_param_set
-				 *)tlv;
-			bss->param.bss_config.chan_list.num_of_chan =
-				tlv_len / sizeof(
-				struct mwifiex_chan_scan_param_set);
-			pscan_chan = tlv_chan_list->chan_scan_param;
-			for (i = 0; i < bss->param.bss_config.chan_list
-							.num_of_chan; i++) {
-				bss->param.bss_config.chan_list.chan[i] =
-							pscan_chan->chan_number;
-				pscan_chan++;
-			}
-			break;
-		case TLV_TYPE_AUTH_TYPE:
-			tlv_auth_type =
-				(struct mwifiex_ie_types_auth_type *)tlv;
-			bss->param.bss_config.auth_mode =
-					le16_to_cpu(tlv_auth_type->auth_type);
-			break;
-		case TLV_TYPE_UAP_ENCRYPT_PROTOCOL:
-			tlv_encrypt_protocol =
-					(struct
-					 mwifiex_ie_types_encrypt_protocol
-					 *)tlv;
-			bss->param.bss_config.protocol = le16_to_cpu(
-					tlv_encrypt_protocol->protocol);
-			break;
-		case TLV_TYPE_UAP_AKMP:
-			tlv_akmp = (struct mwifiex_ie_types_akmp *)tlv;
-			bss->param.bss_config.key_mgmt = le16_to_cpu(
-					tlv_akmp->key_mgmt);
-			break;
-		case TLV_TYPE_UAP_CIPHER:
-			tlv_cipher = (struct mwifiex_ie_types_cipher *)tlv;
-			bss->param.bss_config.wpa_cfg.pairwise_cipher_wpa =
-						tlv_cipher->pair_cipher;
-			bss->param.bss_config.wpa_cfg.pairwise_cipher_wpa2 =
-						tlv_cipher->pair_cipher;
-			bss->param.bss_config.wpa_cfg.group_cipher =
-						tlv_cipher->group_cipher;
-		case TLV_TYPE_PWK_CIPHER:
-			tlv_pwk_cipher =
-				(struct mwifiex_ie_types_pwk_cipher *)tlv;
-			if (le16_to_cpu(tlv_pwk_cipher->protocol) &
-								PROTOCOL_WPA)
-				bss->param.bss_config.wpa_cfg
-					.pairwise_cipher_wpa =
-						tlv_pwk_cipher->pairwise_cipher;
-			if (le16_to_cpu(tlv_pwk_cipher->protocol) &
-								PROTOCOL_WPA2)
-				bss->param.bss_config.wpa_cfg
-					.pairwise_cipher_wpa2 =
-						tlv_pwk_cipher->pairwise_cipher;
-			break;
-		case TLV_TYPE_GWK_CIPHER:
-			tlv_gwk_cipher =
-				(struct mwifiex_ie_types_gwk_cipher *)tlv;
-			bss->param.bss_config.wpa_cfg.group_cipher =
-						tlv_gwk_cipher->group_cipher;
-			break;
-		case TLV_TYPE_UAP_RSN_REPLAY_PROTECT:
-			tlv_rsn_prot =
-				(struct mwifiex_ie_types_rsn_replay_prot *)tlv;
-			bss->param.bss_config.wpa_cfg.rsn_protection =
-						tlv_rsn_prot->rsn_replay_prot;
-			break;
-		case TLV_TYPE_UAP_WPA_PASSPHRASE:
-			tlv_passphrase =
-				(struct mwifiex_ie_types_passphrase *)tlv;
-			bss->param.bss_config.wpa_cfg.length = tlv_len;
-			memcpy(bss->param.bss_config.wpa_cfg.passphrase,
-					tlv_passphrase->passphrase,
-					bss->param.bss_config.wpa_cfg.length);
-			break;
-		case TLV_TYPE_UAP_GRP_REKEY_TIME:
-			tlv_rekey_time =
-				(struct mwifiex_ie_types_group_rekey_time *)tlv;
-			bss->param.bss_config.wpa_cfg.gk_rekey_time =
-						le32_to_cpu(
-						tlv_rekey_time->gk_rekey_time);
-			break;
-		case TLV_TYPE_UAP_WEP_KEY:
-			tlv_wep_key  = (struct mwifiex_ie_types_wep_key *)tlv;
-			pkey = NULL;
-			if (tlv_wep_key->key_index == 0)
-				pkey = &bss->param.bss_config.wep_cfg.key0;
-			else if (tlv_wep_key->key_index == 1)
-				pkey = &bss->param.bss_config.wep_cfg.key1;
-			else if (tlv_wep_key->key_index == 2)
-				pkey = &bss->param.bss_config.wep_cfg.key2;
-			else if (tlv_wep_key->key_index == 3)
-				pkey = &bss->param.bss_config.wep_cfg.key3;
-			if (pkey) {
-				pkey->key_index = tlv_wep_key->key_index;
-				pkey->is_default = tlv_wep_key->is_default;
-				pkey->length = tlv_len - 2;
-				memcpy(pkey->key, tlv_wep_key->key,
-								pkey->length);
-			}
-			break;
-		case TLV_TYPE_UAP_PREAMBLE_CTL:
-			tlv_preamble = (struct mwifiex_ie_types_preamble *)tlv;
-			bss->param.bss_config.preamble_type =
-						tlv_preamble->preamble_type;
-			break;
-		}
-
-		tlv_buf_left -= tlv_len +
-					sizeof(struct mwifiex_ie_types_header);
-		tlv = (struct mwifiex_ie_types_header *)((u8 *)tlv + tlv_len +
-					sizeof(struct mwifiex_ie_types_header));
-	}
-
-	LEAVE();
-	return MWIFIEX_STATUS_SUCCESS;
-}
-
-/*
- * This function handles the command response of sys_config
- */
-static enum mwifiex_status mwifiex_uap_ret_sys_config(
-		struct mwifiex_private *priv,
-		struct host_cmd_ds_command *resp,
-		struct mwifiex_ioctl_req *pioctl_buf)
-{
-	struct host_cmd_ds_sys_config  *sys_config =
-		(struct host_cmd_ds_sys_config *)&resp->params.sys_config;
-	struct mwifiex_ds_bss *bss = NULL;
-	struct mwifiex_ie_types_macaddr *tlv =
-		(struct mwifiex_ie_types_macaddr *)sys_config->tlv_buffer;
-
-	ENTER();
-
-	if (pioctl_buf) {
-		if (pioctl_buf->req_id == MWIFIEX_IOCTL_BSS) {
-			bss = (struct mwifiex_ds_bss *)pioctl_buf->buffer;
-			if (bss->sub_command == MWIFIEX_OID_BSS_MAC_ADDR) {
-				if (TLV_TYPE_UAP_MAC_ADDRESS ==
-						le16_to_cpu(tlv->header.type))
-					memcpy(&bss->param.mac_addr, tlv->mac,
-						MWIFIEX_MAC_ADDR_LENGTH);
-			} else if ((bss->sub_command ==
-					MWIFIEX_OID_UAP_BSS_CONFIG) &&
-					(pioctl_buf->action ==
-					MWIFIEX_ACT_GET)) {
-				mwifiex_uap_ret_cmd_ap_config(priv, resp,
-								pioctl_buf);
-			}
-		}
-	} else {
-		if (TLV_TYPE_UAP_MAC_ADDRESS ==  le16_to_cpu(tlv->header.type))
-			memcpy(priv->curr_addr, tlv->mac,
-						MWIFIEX_MAC_ADDR_LENGTH);
-	}
-	LEAVE();
-	return MWIFIEX_STATUS_SUCCESS;
-}
-
-/*
- * Clean up wapi station list
- */
-void mwifiex_delete_station_list(struct mwifiex_private *priv)
-{
-	struct sta_node *sta_ptr;
-
-	ENTER();
-	while ((sta_ptr = (struct sta_node *) mwifiex_util_dequeue_list(
-					&priv->sta_list, true))) {
-		kfree(sta_ptr);
-	}
-	LEAVE();
-	return;
-}
-
-#define BSS_START_EVENT_FIX_SIZE    12
-/*
- * This function will search for the specific ie
- */
-	static void
-mwifiex_check_uap_capability(struct mwifiex_private *priv,
-			     struct mwifiex_buffer *pevent)
-{
-	u16 tlv_type, tlv_len;
-	int tlv_buf_left = pevent->data_len - BSS_START_EVENT_FIX_SIZE;
-	struct mwifiex_ie_types_header *tlv = (struct mwifiex_ie_types_header *)
-						(pevent->buffer +
-						pevent->data_offset +
-						BSS_START_EVENT_FIX_SIZE);
-	const u8 wmm_oui[4] = { 0x00, 0x50, 0xf2, 0x02 };
-	struct ieee_types_wmm_parameter *pWmmParamIe = NULL;
-
-	priv->wmm_enabled = false;
-	priv->is_11n_enabled = false;
-	priv->pkt_fwd = false;
-	while (tlv_buf_left >= (int)sizeof(struct mwifiex_ie_types_header)) {
-		tlv_type = le16_to_cpu(tlv->type);
-		tlv_len  = le16_to_cpu(tlv->len);
-		if ((sizeof(struct mwifiex_ie_types_header) + tlv_len) >
-						(unsigned int)tlv_buf_left) {
-			PRINTM(MERROR, "wrong tlv: tlvLen=%d, tlvBufLeft=%d\n",
-					tlv_len, tlv_buf_left);
-			break;
-		}
-		if (tlv_type == VENDOR_SPECIFIC_221) {
-			if (!memcmp((u8 *)tlv +
-						sizeof(
-						struct mwifiex_ie_types_header),
-						wmm_oui, sizeof(wmm_oui))) {
-				DBG_HEXDUMP(MCMD_D, "wmm ie tlv", tlv, tlv_len +
-					sizeof(
-					struct mwifiex_ie_types_header));
-				priv->wmm_enabled = false;
-				mwifiex_wmm_setup_ac_downgrade(priv);
-				priv->wmm_enabled = true;
-				pWmmParamIe =
-					(struct ieee_types_wmm_parameter *)
-					((u8 *)tlv + 2);
-				pWmmParamIe->vend_hdr.len = (u8)tlv_len;
-				pWmmParamIe->vend_hdr.element_id = WMM_IE;
-				mwifiex_wmm_setup_queue_priorities(priv,
-								   pWmmParamIe);
-			}
-		}
-		if (tlv_type == HT_CAPABILITY) {
-			DBG_HEXDUMP(MCMD_D, "HT_CAP tlv", tlv, tlv_len +
-					sizeof(struct mwifiex_ie_types_header));
-			priv->is_11n_enabled = true;
-		}
-		if (tlv_type == TLV_TYPE_UAP_PKT_FWD_CTL) {
-			DBG_HEXDUMP(MCMD_D, "pkt_fwd tlv", tlv, tlv_len +
-					sizeof(struct mwifiex_ie_types_header));
-			/* We will disable host pkt forwarding if firmware's
-						pkt_fwd_ctl is enabled */
-			priv->pkt_fwd = (*((u8 *)tlv + sizeof(
-				struct mwifiex_ie_types_header)) == 1) ? 0 : 1;
-			PRINTM(MCMND, "pkt_fwd=%d\n", priv->pkt_fwd);
-		}
-		tlv_buf_left -= (sizeof(struct mwifiex_ie_types_header) +
-								tlv_len);
-		tlv = (struct mwifiex_ie_types_header *)((u8 *)tlv + tlv_len +
-					sizeof(struct mwifiex_ie_types_header));
-	}
-	if (priv->wmm_enabled == false) {
-		/* Since WMM is not enabled, setup the queues with
-						the defaults */
-		mwifiex_wmm_setup_queues(priv);
-	}
-}
-
-/*
- * This function prepare the command before sending to firmware.
- */
-enum mwifiex_status
-mwifiex_ops_uap_prepare_cmd(struct mwifiex_private *priv, u16 cmd_no,
-			u16 cmd_action, u32 cmd_oid, void *pioctl_buf,
-			void *pdata_buf, void *pcmd_buf)
-{
-	struct host_cmd_ds_command *cmd_ptr =
-					(struct host_cmd_ds_command *)pcmd_buf;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-
-	ENTER();
-
-	/* Prepare command */
-	switch (cmd_no) {
-	case HOST_CMD_APCMD_BSS_STOP:
-	case HOST_CMD_APCMD_BSS_START:
-	case HOST_CMD_APCMD_SYS_INFO:
-	case HOST_CMD_APCMD_SYS_RESET:
-	case HOST_CMD_APCMD_STA_LIST:
-		cmd_ptr->command = cpu_to_le16(cmd_no);
-		cmd_ptr->size = cpu_to_le16(S_DS_GEN);
-		break;
-	case HOST_CMD_APCMD_SYS_CONFIGURE:
-		ret = mwifiex_uap_cmd_sys_configure(priv, cmd_ptr, cmd_action,
-					(struct mwifiex_ioctl_req *)pioctl_buf);
-		break;
-	case HostCmd_CMD_FUNC_INIT:
-		if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET)
-			priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY;
-		cmd_ptr->command = cpu_to_le16(cmd_no);
-		cmd_ptr->size = cpu_to_le16(S_DS_GEN);
-		break;
-	case HostCmd_CMD_FUNC_SHUTDOWN:
-		priv->adapter->hw_status = MWIFIEX_HW_STATUS_RESET;
-		cmd_ptr->command = cpu_to_le16(cmd_no);
-		cmd_ptr->size = cpu_to_le16(S_DS_GEN);
-		break;
-	case HostCmd_CMD_GET_HW_SPEC:
-		ret = mwifiex_cmd_get_hw_spec(priv, cmd_ptr);
-		break;
-	default:
-		PRINTM(MERROR, "PREP_CMD: unknown command- %#x\n", cmd_no);
-		ret = MWIFIEX_STATUS_FAILURE;
-		break;
-	}
-	LEAVE();
-	return ret;
-}
-
-/*
- * This function handles the AP mode command response
- */
-enum mwifiex_status
-mwifiex_ops_uap_process_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
-			    void *pcmd_buf, void *pioctl)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct host_cmd_ds_command *resp =
-					(struct host_cmd_ds_command *)pcmd_buf;
-	struct mwifiex_ioctl_req *pioctl_buf =
-					(struct mwifiex_ioctl_req *)pioctl;
-
-	ENTER();
-
-	/* If the command is not successful, cleanup and return failure */
-	if (resp->result != HostCmd_RESULT_OK) {
-		uap_process_cmdresp_error(priv, resp, pioctl_buf);
-		return MWIFIEX_STATUS_FAILURE;
-	}
-
-	/* Command successful, handle response */
-	switch (cmdresp_no) {
-	case HOST_CMD_APCMD_BSS_STOP:
-	case HOST_CMD_APCMD_BSS_START:
-	case HOST_CMD_APCMD_SYS_RESET:
-		break;
-	case HOST_CMD_APCMD_SYS_CONFIGURE:
-		ret = mwifiex_uap_ret_sys_config(priv, resp, pioctl_buf);
-		break;
-	case HostCmd_CMD_FUNC_INIT:
-	case HostCmd_CMD_FUNC_SHUTDOWN:
-		break;
-	case HostCmd_CMD_GET_HW_SPEC:
-		ret = mwifiex_ret_get_hw_spec(priv, resp, pioctl_buf);
-		break;
-	default:
-		PRINTM(MERROR, "CMD_RESP: Unknown command response %#x\n",
-								resp->command);
-		break;
-	}
-	LEAVE();
-	return ret;
-}
-
-/*
- * This function handles events generated by firmware
- */
-enum mwifiex_status
-mwifiex_ops_uap_process_event(struct mwifiex_private *priv)
-{
-	struct mwifiex_adapter *adapter = priv->adapter;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	u32 eventcause = adapter->event_cause;
-	struct mwifiex_buffer *mbuf = adapter->mwifiex_buffer_event;
-	u8 *event_buf = NULL;
-	struct mwifiex_event *pevent = NULL;
-
-	ENTER();
-
-	/* Allocate memory for event buffer */
-	event_buf = kzalloc(MAX_EVENT_SIZE, GFP_ATOMIC);
-	if (!event_buf) {
-		PRINTM(MERROR, "%s: Could not allocate buffer for event buf\n",
-								 __func__);
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-
-	pevent = (struct mwifiex_event *)event_buf;
-	pevent->event_id = 0;
-
-	memcpy(mbuf->buffer + mbuf->data_offset, (u8 *)&eventcause,
-							sizeof(eventcause));
-
-	switch (eventcause) {
-	case EVENT_MICRO_AP_BSS_START:
-		PRINTM(MEVENT, "EVENT: MICRO_AP_BSS_START\n");
-		memcpy(priv->curr_addr, adapter->event_body+2,
-						MWIFIEX_MAC_ADDR_LENGTH);
-		pevent->event_id = MWIFIEX_EVENT_ID_UAP_FW_BSS_START;
-		mwifiex_check_uap_capability(priv, mbuf);
-		break;
-	case EVENT_MICRO_AP_BSS_ACTIVE:
-		PRINTM(MEVENT, "EVENT: MICRO_AP_BSS_ACTIVE\n");
-		priv->media_connected = true;
-		pevent->event_id = MWIFIEX_EVENT_ID_UAP_FW_BSS_ACTIVE;
-		break;
-	case EVENT_MICRO_AP_BSS_IDLE:
-		PRINTM(MEVENT, "EVENT: MICRO_AP_BSS_IDLE\n");
-		pevent->event_id = MWIFIEX_EVENT_ID_UAP_FW_BSS_IDLE;
-		priv->media_connected = false;
-		mwifiex_clean_txrx(priv);
-		mwifiex_delete_station_list(priv);
-		break;
-	case EVENT_PS_AWAKE:
-		PRINTM(MINFO, "EVENT: AWAKE\n");
-		PRINTM(MEVENT, "||");
-		adapter->pm_wakeup_card_req = false;
-		adapter->pm_wakeup_fw_try = false;
-		adapter->ps_state = PS_STATE_AWAKE;
-		break;
-	case EVENT_PS_SLEEP:
-		PRINTM(MINFO, "EVENT: SLEEP\n");
-		PRINTM(MEVENT, "__");
-		/* Handle unexpected PS SLEEP event */
-		adapter->ps_state = PS_STATE_PRE_SLEEP;
-		mwifiex_check_ps_cond(adapter);
-		break;
-	default:
-		pevent->event_id = MWIFIEX_EVENT_ID_DRV_PASSTHU;
-		break;
-	}
-
-	if (pevent->event_id) {
-		pevent->bss_index = priv->bss_index;
-		pevent->event_len = mbuf->data_len;
-		memcpy((u8 *)pevent->event_buf, mbuf->buffer +
-					mbuf->data_offset, pevent->event_len);
-		mwifiex_recv_event(priv, pevent->event_id, pevent);
-	}
-
-done:
-	kfree(event_buf);
-	LEAVE();
-	return ret;
-}
-
-/*
- * This function issues commands to initialize firmware
- */
-enum mwifiex_status mwifiex_ops_uap_init_cmd(struct mwifiex_private *priv,
-					 u8 first_sta)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	u16 last_cmd = 0;
-
-	ENTER();
-
-	if (!first_sta)
-		goto get_mac;
-	ret = mwifiex_prepare_cmd(priv, HostCmd_CMD_FUNC_INIT,
-			HostCmd_ACT_GEN_SET, 0, NULL, NULL);
-	if (ret) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-	ret = mwifiex_prepare_cmd(priv, HostCmd_CMD_GET_HW_SPEC,
-			HostCmd_ACT_GEN_GET, 0, NULL, NULL);
-	if (ret) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-	/* Reconfigure tx buf size */
-	ret = mwifiex_prepare_cmd(priv, HostCmd_CMD_RECONFIGURE_TX_BUFF,
-						HostCmd_ACT_GEN_SET, 0, NULL,
-						&priv->adapter->tx_buf_size);
-	if (ret) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-
-get_mac:
-	ret = mwifiex_prepare_cmd(priv, HOST_CMD_APCMD_SYS_CONFIGURE,
-			HostCmd_ACT_GEN_GET, 0, NULL, NULL);
-	if (ret) {
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-	last_cmd = HOST_CMD_APCMD_SYS_CONFIGURE;
-	/** set last_init_cmd */
-	if (last_cmd) {
-		priv->adapter->last_init_cmd = last_cmd;
-		ret = MWIFIEX_STATUS_PENDING;
-	}
-done:
-	LEAVE();
-	return ret;
-}
diff --git a/drivers/net/wireless/mwifiex/uap_ioctl.c b/drivers/net/wireless/mwifiex/uap_ioctl.c
deleted file mode 100644
index 4e28b79..0000000
--- a/drivers/net/wireless/mwifiex/uap_ioctl.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/**
- * Marvell Wireless LAN device driver: the handling of AP mode ioctls
- *
- * Copyright (C) 2010, Marvell International Ltd.
- *
- * This software file (the "File") is distributed by Marvell International
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- **/
-
-#include "decl.h"
-#include "ioctl.h"
-#include "ieee.h"
-#include "util.h"
-#include "fw.h"
-#include "main.h"
-#include "sdio.h"
-#include "wmm.h"
-#include "11n_aggr.h"
-#include "11n_rxreorder.h"
-#include "uap.h"
-
-/*
- * IOCTL handler to stop the BSS
- */
-static enum mwifiex_status
-mwifiex_uap_bss_ioctl_stop(struct mwifiex_adapter *adapter,
-			   struct mwifiex_ioctl_req  *pioctl_req)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_private *priv = adapter->priv[pioctl_req->bss_index];
-
-	ENTER();
-
-	ret = mwifiex_prepare_cmd(priv,
-			HOST_CMD_APCMD_BSS_STOP,
-			HostCmd_ACT_GEN_SET,
-			0,
-			(void *)pioctl_req,
-			NULL);
-	if (ret == MWIFIEX_STATUS_SUCCESS)
-		ret = MWIFIEX_STATUS_PENDING;
-
-	LEAVE();
-	return ret;
-}
-
-/*
- * IOCTL handler to start the BSS
- */
-static enum mwifiex_status
-mwifiex_uap_bss_ioctl_start(struct mwifiex_adapter *adapter,
-			    struct mwifiex_ioctl_req  *pioctl_req)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_private *priv = adapter->priv[pioctl_req->bss_index];
-
-	ENTER();
-
-	ret = mwifiex_prepare_cmd(priv,
-			HOST_CMD_APCMD_BSS_START,
-			HostCmd_ACT_GEN_SET,
-			0,
-			(void *)pioctl_req,
-			NULL);
-	if (ret == MWIFIEX_STATUS_SUCCESS)
-		ret = MWIFIEX_STATUS_PENDING;
-
-	LEAVE();
-	return ret;
-}
-
-/*
- * IOCTL handler to set/get MAC address
- */
-static enum mwifiex_status
-mwifiex_uap_bss_ioctl_mac_address(struct mwifiex_adapter *adapter,
-				  struct mwifiex_ioctl_req *pioctl_req)
-{
-	struct mwifiex_private *priv = adapter->priv[pioctl_req->bss_index];
-	struct mwifiex_ds_bss *bss = NULL;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	u16 cmd_action = 0;
-
-	ENTER();
-
-	bss = (struct mwifiex_ds_bss *)pioctl_req->buffer;
-	if (pioctl_req->action == MWIFIEX_ACT_SET) {
-		memcpy(priv->curr_addr, &bss->param.mac_addr,
-						MWIFIEX_MAC_ADDR_LENGTH);
-		cmd_action = HostCmd_ACT_GEN_SET;
-	} else {
-		cmd_action = HostCmd_ACT_GEN_GET;
-	}
-	/* Send request to firmware */
-	ret = mwifiex_prepare_cmd(priv, HOST_CMD_APCMD_SYS_CONFIGURE,
-			cmd_action, 0, (void *)pioctl_req, NULL);
-
-	if (ret == MWIFIEX_STATUS_SUCCESS)
-		ret = MWIFIEX_STATUS_PENDING;
-
-	LEAVE();
-	return ret;
-}
-
-/*
- * IOCTL handler to set/get AP configuration parameters.
- */
-static enum mwifiex_status
-mwifiex_uap_bss_ioctl_config(struct mwifiex_adapter *adapter,
-			     struct mwifiex_ioctl_req *pioctl_req)
-{
-	struct mwifiex_private *priv = adapter->priv[pioctl_req->bss_index];
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	u16 cmd_action = 0;
-
-	ENTER();
-
-	if (pioctl_req->action == MWIFIEX_ACT_SET)
-		cmd_action = HostCmd_ACT_GEN_SET;
-	else
-		cmd_action = HostCmd_ACT_GEN_GET;
-
-	/* Send request to firmware */
-	ret = mwifiex_prepare_cmd(priv, HOST_CMD_APCMD_SYS_CONFIGURE,
-			cmd_action, 0, (void *)pioctl_req, NULL);
-
-	if (ret == MWIFIEX_STATUS_SUCCESS)
-		ret = MWIFIEX_STATUS_PENDING;
-
-	LEAVE();
-	return ret;
-}
-
-/*
- * MWIFIEX uap ioctl handler
- */
-enum mwifiex_status mwifiex_ops_uap_ioctl(struct mwifiex_adapter *adapter,
-				      struct mwifiex_ioctl_req  *pioctl_req)
-{
-	enum mwifiex_status status = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_ds_bss *bss = NULL;
-
-	ENTER();
-
-	switch (pioctl_req->req_id) {
-	case MWIFIEX_IOCTL_BSS:
-		bss = (struct mwifiex_ds_bss *)pioctl_req->buffer;
-		if (bss->sub_command == MWIFIEX_OID_BSS_MAC_ADDR)
-			status = mwifiex_uap_bss_ioctl_mac_address(adapter,
-								pioctl_req);
-		else if (bss->sub_command == MWIFIEX_OID_BSS_STOP)
-			status = mwifiex_uap_bss_ioctl_stop(adapter,
-								pioctl_req);
-		else if (bss->sub_command == MWIFIEX_OID_BSS_START)
-			status = mwifiex_uap_bss_ioctl_start(adapter,
-								pioctl_req);
-		else if (bss->sub_command == MWIFIEX_OID_UAP_BSS_CONFIG)
-			status = mwifiex_uap_bss_ioctl_config(adapter,
-								pioctl_req);
-	default:
-		break;
-	}
-	LEAVE();
-	return status;
-}
-
-/*
- * uap bss control ioctl handler
- */
-int mwifiex_uap_bss_ctrl(struct mwifiex_private *priv, int data)
-{
-	struct mwifiex_ioctl_req *req = NULL;
-	struct mwifiex_ds_bss *bss = NULL;
-	int ret = 0;
-
-	ENTER();
-
-	PRINTM(MINFO, "ioctl bss ctrl=%d\n", data);
-	if ((data != UAP_BSS_START) && (data != UAP_BSS_STOP) &&
-			(data != UAP_BSS_RESET)) {
-		PRINTM(MERROR, "Invalid parameter: %d\n", data);
-		ret = -EINVAL;
-		goto done;
-	}
-
-	req = mwifiex_alloc_ioctl_req(sizeof(struct mwifiex_ds_bss));
-	if (req == NULL) {
-		ret = -ENOMEM;
-		goto done;
-	}
-	bss = (struct mwifiex_ds_bss *) req->buffer;
-	switch (data) {
-	case UAP_BSS_START:
-		bss->sub_command = MWIFIEX_OID_BSS_START;
-		break;
-	case UAP_BSS_STOP:
-		bss->sub_command = MWIFIEX_OID_BSS_STOP;
-		break;
-	}
-	req->req_id = MWIFIEX_IOCTL_BSS;
-	req->action = MWIFIEX_ACT_SET;
-
-	if (MWIFIEX_STATUS_SUCCESS !=
-			mwifiex_request_ioctl(priv, req, MWIFIEX_IOCTL_WAIT)) {
-		if (data == UAP_BSS_START &&
-				req->status_code != BSS_START_REDUNDANT)
-			ret = -EFAULT;
-		if (data == UAP_BSS_STOP &&
-				req->status_code != BSS_STOP_REDUNDANT)
-			ret = -EFAULT;
-	}
-
-done:
-	kfree(req);
-
-	LEAVE();
-	return ret;
-}
-
-/*
- * This function parses AP configuration information from ASCII string
- */
-int mwifiex_uap_ap_cfg_parse_data(struct mwifiex_uap_bss_param *ap_cfg, s8 *buf)
-{
-	int ret = 0, atoi_ret;
-	int set_sec = 0, set_key = 0, set_chan = 0;
-	int set_sta_num = 0, set_ssid = 0;
-	char *begin = buf, *value = NULL, *opt = NULL;
-
-	ENTER();
-
-	while (begin) {
-		value = mwifiex_strsep(&begin, ',', '/');
-		opt = mwifiex_strsep(&value, '=', '/');
-		if (opt && !strncmp(opt, "END", strlen("END"))) {
-			if (!ap_cfg->ssid.ssid_len) {
-				PRINTM(MERROR, "Minimum option required is "
-					       "SSID\n");
-				ret = -EINVAL;
-				goto done;
-			}
-			PRINTM(MINFO, "Parsing terminated by string END\n");
-			break;
-		}
-		if (!opt || !value || !value[0]) {
-			PRINTM(MERROR, "Invalid option\n");
-			ret = -EINVAL;
-			goto done;
-		} else if (!strncmp(opt, "ASCII_CMD", strlen("ASCII_CMD"))) {
-			if (strncmp(value, "AP_CFG", strlen("AP_CFG"))) {
-				PRINTM(MERROR, "ASCII_CMD: %s not matched with "
-					       "AP_CFG\n", value);
-				ret = -EFAULT;
-				goto done;
-			}
-			value = mwifiex_strsep(&begin, ',', '/');
-			opt = mwifiex_strsep(&value, '=', '/');
-			if (!opt || !value || !value[0]) {
-				PRINTM(MERROR, "Minimum option required is "
-					       "SSID\n");
-				ret = -EINVAL;
-				goto done;
-			} else if (!strncmp(opt, "SSID", strlen("SSID"))) {
-				if (set_ssid) {
-					PRINTM(MWARN, "Skipping SSID, found "
-						      "again!\n");
-					continue;
-				}
-				if (strlen(value) > MWIFIEX_MAX_SSID_LENGTH) {
-					PRINTM(MERROR, "SSID length exceeds max"
-						       " length\n");
-					ret = -EFAULT;
-					goto done;
-				}
-				ap_cfg->ssid.ssid_len = strlen(value);
-				strcpy((char *)ap_cfg->ssid.ssid, value);
-				PRINTM(MINFO, "ssid=%s, len=%d\n",
-						ap_cfg->ssid.ssid,
-						(int)ap_cfg->ssid.ssid_len);
-				set_ssid = 1;
-			} else {
-				PRINTM(MERROR, "AP_CFG: Invalid option %s, "
-						"expect SSID\n", opt);
-				ret = -EINVAL;
-				goto done;
-			}
-		} else if (!strncmp(opt, "SEC", strlen("SEC"))) {
-			if (set_sec) {
-				PRINTM(MWARN, "Skipping SEC, found again!\n");
-				continue;
-			}
-			if (!strnicmp(value, "open", strlen("open"))) {
-				ap_cfg->auth_mode = MWIFIEX_AUTH_MODE_OPEN;
-				if (set_key)
-					ap_cfg->wpa_cfg.length = 0;
-				ap_cfg->key_mgmt = KEY_MGMT_NONE;
-				ap_cfg->protocol = PROTOCOL_NO_SECURITY;
-			} else if (!strnicmp(value, "wpa2-psk",
-							strlen("wpa2-psk"))) {
-				ap_cfg->auth_mode = MWIFIEX_AUTH_MODE_OPEN;
-				ap_cfg->protocol = PROTOCOL_WPA2;
-				ap_cfg->key_mgmt = KEY_MGMT_PSK;
-				ap_cfg->wpa_cfg.pairwise_cipher_wpa =
-								CIPHER_AES_CCMP;
-				ap_cfg->wpa_cfg.pairwise_cipher_wpa2 =
-								CIPHER_AES_CCMP;
-				ap_cfg->wpa_cfg.group_cipher = CIPHER_AES_CCMP;
-			} else {
-				PRINTM(MERROR, "AP_CFG: Invalid value=%s for "
-					       "%s\n",
-					       value, opt);
-				ret = -EFAULT;
-				goto done;
-			}
-			set_sec = 1;
-		} else if (!strncmp(opt, "KEY", strlen("KEY"))) {
-			if (set_key) {
-				PRINTM(MWARN, "Skipping KEY, found again!\n");
-				continue;
-			}
-			if (set_sec && ap_cfg->protocol != PROTOCOL_WPA2) {
-				PRINTM(MWARN, "Warning! No KEY for open "
-					      "mode\n");
-				set_key = 1;
-				continue;
-			}
-			if (strlen(value) < MWIFIEX_MIN_PASSPHRASE_LENGTH ||
-						strlen(value) >
-						MWIFIEX_MAX_PMK_LENGTH * 2) {
-				PRINTM(MERROR, "Invalid PSK length\n");
-				ret = -EINVAL;
-				goto done;
-			}
-			ap_cfg->wpa_cfg.length = strlen(value);
-			memcpy(ap_cfg->wpa_cfg.passphrase, value,
-								strlen(value));
-			set_key = 1;
-		} else if (!strncmp(opt, "CHANNEL", strlen("CHANNEL"))) {
-			if (set_chan) {
-				PRINTM(MWARN, "Skipping CHANNEL, found "
-					      "again!\n");
-				continue;
-			}
-			if (mwifiex_atoi(&atoi_ret, value)) {
-				ret = -EINVAL;
-				goto done;
-			}
-			if (atoi_ret < 1 || atoi_ret > MAX_CHANNEL) {
-				PRINTM(MERROR, "AP_CFG: Channel must be between"
-					       " 1 and %d(both included)\n",
-					       MAX_CHANNEL);
-				ret = -EINVAL;
-				goto done;
-			}
-			ap_cfg->channel = atoi_ret;
-			set_chan = 1;
-		} else if (!strncmp(opt, "MAX_STA_NUM",
-						strlen("MAX_STA_NUM"))) {
-			if (set_sta_num) {
-				PRINTM(MWARN, "Skipping MAX_STA_NUM, found "
-					      "again!\n");
-				continue;
-			}
-			if (mwifiex_atoi(&atoi_ret, value)) {
-				ret = -EINVAL;
-				goto done;
-			}
-			if (atoi_ret < 0 || atoi_ret > MAX_STA_COUNT) {
-				PRINTM(MERROR, "AP_CFG: MAX_STA_NUM must be "
-					    "between 0 to %d (both included)\n",
-					    MAX_STA_COUNT);
-				ret = -EINVAL;
-				goto done;
-			}
-			ap_cfg->max_sta_count = (u16)atoi_ret;
-			set_sta_num = 1;
-		} else {
-			PRINTM(MERROR, "Invalid option %s\n", opt);
-			ret = -EINVAL;
-			goto done;
-		}
-	}
-
-done:
-	LEAVE();
-	return ret;
-}
diff --git a/drivers/net/wireless/mwifiex/uap_txrx.c b/drivers/net/wireless/mwifiex/uap_txrx.c
deleted file mode 100644
index 349dd76..0000000
--- a/drivers/net/wireless/mwifiex/uap_txrx.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/**
- * Marvell Wireless LAN device driver: AP mode transmit and receive functions
- *
- * Copyright (C) 2010, Marvell International Ltd.
- *
- * This software file (the "File") is distributed by Marvell International
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
- * (the "License").  You may use, redistribute and/or modify this File in
- * accordance with the terms and conditions of the License, a copy of which
- * is available by writing to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
- * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
- * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
- * this warranty disclaimer.
- **/
-
-#include "decl.h"
-#include "ioctl.h"
-#include "ieee.h"
-#include "util.h"
-#include "fw.h"
-#include "main.h"
-#include "sdio.h"
-#include "wmm.h"
-#include "11n_aggr.h"
-#include "11n_rxreorder.h"
-#include "uap.h"
-
-void *mwifiex_ops_uap_process_txpd(struct mwifiex_private *priv,
-				struct mwifiex_buffer *mbuf)
-{
-	struct mwifiex_uap_txpd *plocal_tx_pd;
-	u8 *head_ptr = NULL;
-	ENTER();
-
-	if (!mbuf->data_len) {
-		PRINTM(MERROR, "uAP Tx Error: Invalid packet length: %d\n",
-				mbuf->data_len);
-		mbuf->status_code = MWIFIEX_ERROR_PKT_SIZE_INVALID;
-		goto done;
-	}
-	if (mbuf->data_offset < (sizeof(struct mwifiex_uap_txpd) +
-						INTF_HEADER_LEN +
-						HEADER_ALIGNMENT)) {
-		PRINTM(MERROR, "not enough space for mwifiex_uap_txpd: len=%d, "
-			       "offset=%d\n", mbuf->data_len,
-			       mbuf->data_offset);
-		DBG_HEXDUMP(MDAT_D, "drop pkt", mbuf->buffer +
-			    mbuf->data_offset, mbuf->data_len);
-		mbuf->status_code = MWIFIEX_ERROR_PKT_SIZE_INVALID;
-		goto done;
-	}
-
-	/* head_ptr should be aligned */
-	head_ptr = mbuf->buffer + mbuf->data_offset -
-			sizeof(struct mwifiex_uap_txpd) - INTF_HEADER_LEN;
-	head_ptr = (u8 *)((unsigned long)head_ptr
-			& ~((unsigned long)(HEADER_ALIGNMENT - 1)));
-
-	plocal_tx_pd = (struct mwifiex_uap_txpd *)(head_ptr + INTF_HEADER_LEN);
-	memset(plocal_tx_pd, 0, sizeof(struct mwifiex_uap_txpd));
-
-	/* Set the BSS number to TxPD */
-	plocal_tx_pd->bss_num = priv->bss_num;
-	plocal_tx_pd->bss_type = priv->bss_type;
-
-	plocal_tx_pd->tx_pkt_length = cpu_to_le16((u16)mbuf->data_len);
-
-	plocal_tx_pd->priority     = (u8)mbuf->priority;
-	plocal_tx_pd->pkt_delay_2ms =
-			mwifiex_wmm_compute_drv_pkt_delay(priv, mbuf);
-
-	if (plocal_tx_pd->priority < ARRAY_SIZE(priv->wmm.user_pri_pkt_tx_ctrl))
-		/*
-		 * Set the priority specific tx_control field, setting of 0 will
-		 *   cause the default value to be used later in this function
-		 */
-		plocal_tx_pd->tx_control = cpu_to_le32(priv->wmm
-				.user_pri_pkt_tx_ctrl[plocal_tx_pd->priority]);
-
-	/* Offset of actual data */
-	plocal_tx_pd->tx_pkt_offset = cpu_to_le16(
-				(u16)((unsigned long)mbuf->buffer +
-					mbuf->data_offset -
-					(unsigned long)plocal_tx_pd));
-
-	/* Adjust the data offset and length to include TxPD in mbuf */
-	mbuf->data_len += mbuf->data_offset;
-	mbuf->data_offset = head_ptr - mbuf->buffer;
-	mbuf->data_len -= mbuf->data_offset;
-
-done:
-	LEAVE();
-	return head_ptr;
-}
-
-/*
- * This function processes received packet and forwards it
- * to kernel/upper layer
- */
-static enum mwifiex_status
-mwifiex_upload_uap_rx_packet(struct mwifiex_adapter *adapter,
-			     struct mwifiex_buffer *mbuf)
-{
-	enum mwifiex_status    ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_uap_rxpd *prx_pd;
-	ENTER();
-
-	prx_pd  = (struct mwifiex_uap_rxpd *)(mbuf->buffer +
-							mbuf->data_offset);
-
-	/* Chop off RxPD */
-	mbuf->data_len -= le16_to_cpu(prx_pd->rx_pkt_offset);
-	mbuf->data_offset += le16_to_cpu(prx_pd->rx_pkt_offset);
-	mbuf->parent = NULL;
-
-	do_gettimeofday(&mbuf->out_tstamp);
-
-	PRINTM(MDATA, "%lu.%lu : Data => kernel seq_num=%d tid=%d\n",
-			mbuf->out_tstamp.tv_sec, mbuf->out_tstamp.tv_usec,
-			prx_pd->seq_num, prx_pd->priority);
-	ret = mwifiex_recv_packet(adapter, mbuf);
-	if (ret == MWIFIEX_STATUS_FAILURE)
-		PRINTM(MERROR, "uAP Rx Error: moal_recv_packet returned "
-			       "error\n");
-
-	if (ret != MWIFIEX_STATUS_PENDING)
-		mwifiex_free_buffer_skb(mbuf);
-
-	LEAVE();
-
-	return ret;
-
-}
-
-/*
- * This function processes received packet and forwards it
- * to kernel/upper layer or send back to firmware
- */
-enum mwifiex_status mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
-						  struct mwifiex_buffer *mbuf)
-{
-	struct mwifiex_adapter *adapter = priv->adapter;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_uap_rxpd *prx_pd;
-	struct rx_packet_hdr *prx_pkt;
-	struct mwifiex_buffer *newbuf = NULL;
-
-	ENTER();
-
-	prx_pd  = (struct mwifiex_uap_rxpd *)(mbuf->buffer +
-						mbuf->data_offset);
-	prx_pkt = (struct rx_packet_hdr *)((u8 *)prx_pd +
-					le16_to_cpu(prx_pd->rx_pkt_offset));
-
-	DBG_HEXDUMP(MDAT_D, "uap_rx_packet", mbuf->buffer + mbuf->data_offset,
-			min_t(u32, mbuf->data_len, MAX_DATA_DUMP_LEN));
-
-	PRINTM(MINFO, "RX Data: data_len - prx_pd->rx_pkt_offset = "
-		      "%d - %d = %d\n",
-			mbuf->data_len, le16_to_cpu(prx_pd->rx_pkt_offset),
-			mbuf->data_len - le16_to_cpu(prx_pd->rx_pkt_offset));
-	PRINTM(MDATA, "Rx dest %02x:%02x:%02x:%02x:%02x:%02x\n",
-			prx_pkt->eth803_hdr.dest_addr[0],
-			prx_pkt->eth803_hdr.dest_addr[1],
-			prx_pkt->eth803_hdr.dest_addr[2],
-			prx_pkt->eth803_hdr.dest_addr[3],
-			prx_pkt->eth803_hdr.dest_addr[4],
-			prx_pkt->eth803_hdr.dest_addr[5]);
-
-	/* don't do packet forwarding in disconnected state */
-	if (priv->media_connected == false)
-		goto upload;
-	if (prx_pkt->eth803_hdr.dest_addr[0] & 0x01) {
-		/* Multicast pkt */
-		newbuf = mwifiex_alloc_buffer(MWIFIEX_TX_DATA_BUF_SIZE_2K);
-		if (newbuf) {
-			newbuf->bss_index = mbuf->bss_index;
-			newbuf->buf_type = mbuf->buf_type;
-			newbuf->priority = mbuf->priority;
-			newbuf->in_tstamp = mbuf->in_tstamp;
-			newbuf->data_offset = (sizeof(struct mwifiex_uap_txpd) +
-					INTF_HEADER_LEN + HEADER_ALIGNMENT);
-			adapter->pending_bridge_pkts++;
-			newbuf->flags |= MWIFIEX_BUF_FLAG_BRIDGE_BUF;
-
-			/* copy the data, skip rxpd */
-			memcpy((u8 *)newbuf->buffer+newbuf->data_offset,
-					mbuf->buffer + mbuf->data_offset +
-					le16_to_cpu(prx_pd->rx_pkt_offset),
-					mbuf->data_len - le16_to_cpu(
-					prx_pd->rx_pkt_offset));
-			newbuf->data_len = mbuf->data_len -
-					le16_to_cpu(prx_pd->rx_pkt_offset);
-			mwifiex_wmm_add_buf_txqueue(adapter, newbuf);
-
-		}
-	} else {
-		if (mwifiex_get_station_entry(priv,
-					prx_pkt->eth803_hdr.dest_addr)) {
-			/* Inter BSS packet */
-			mbuf->data_len -= le16_to_cpu(prx_pd->rx_pkt_offset);
-			mbuf->data_offset +=
-					le16_to_cpu(prx_pd->rx_pkt_offset);
-			mbuf->flags |= MWIFIEX_BUF_FLAG_BRIDGE_BUF;
-			adapter->pending_bridge_pkts++;
-			mwifiex_wmm_add_buf_txqueue(adapter, mbuf);
-			goto done;
-		}
-	}
-upload:
-	/* Chop off RxPD */
-	mbuf->data_len -= le16_to_cpu(prx_pd->rx_pkt_offset);
-	mbuf->data_offset += le16_to_cpu(prx_pd->rx_pkt_offset);
-	mbuf->parent = NULL;
-
-	do_gettimeofday(&mbuf->out_tstamp);
-	PRINTM(MDATA, "%lu.%lu : Data => kernel seq_num=%d tid=%d\n",
-			mbuf->out_tstamp.tv_sec, mbuf->out_tstamp.tv_usec,
-			prx_pd->seq_num, prx_pd->priority);
-
-	ret = mwifiex_recv_packet(adapter, mbuf);
-	if (ret == MWIFIEX_STATUS_FAILURE)
-		PRINTM(MERROR, "uAP Rx Error: moal_recv_packet returned "
-			       "error\n");
-
-	if (ret != MWIFIEX_STATUS_PENDING)
-		mwifiex_free_buffer(mbuf);
-done:
-	LEAVE();
-	return ret;
-}
-
-enum mwifiex_status
-mwifiex_ops_uap_process_rx_packet(struct mwifiex_adapter *adapter,
-						  struct mwifiex_buffer *mbuf)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct mwifiex_uap_rxpd *prx_pd;
-	struct rx_packet_hdr *prx_pkt;
-	struct mwifiex_private *priv = adapter->priv[mbuf->bss_index];
-	u8 ta[MWIFIEX_MAC_ADDR_LENGTH];
-	u16 rx_pkt_type = 0;
-	struct sta_node *sta_ptr = NULL;
-	u16 rx_pkt_length;
-	u16 rx_pkt_offset;
-	u16 seq_num;
-
-	ENTER();
-
-	prx_pd  = (struct mwifiex_uap_rxpd *)(mbuf->buffer + mbuf->data_offset);
-	/* Endian conversion */
-	rx_pkt_type = le16_to_cpu(prx_pd->rx_pkt_type);
-	rx_pkt_length = le16_to_cpu(prx_pd->rx_pkt_length);
-	rx_pkt_offset = le16_to_cpu(prx_pd->rx_pkt_offset);
-	seq_num = le16_to_cpu(prx_pd->seq_num);
-
-	prx_pkt = (struct rx_packet_hdr *)((u8 *)prx_pd + rx_pkt_offset);
-
-	DBG_HEXDUMP(MDAT_D, "UAP Rx", mbuf->buffer + mbuf->data_offset,
-			min_t(u32, mbuf->data_len, MAX_DATA_DUMP_LEN));
-
-	PRINTM(MINFO, "RX Data: data_len - prx_pd->rx_pkt_offset = "
-		      "%d - %d = %d\n",
-			mbuf->data_len, rx_pkt_offset,
-			mbuf->data_len - rx_pkt_offset);
-
-	if ((rx_pkt_offset + rx_pkt_length) > (u16)mbuf->data_len) {
-		PRINTM(MERROR, "Wrong rx packet: len=%d,rx_pkt_offset=%d,"
-				" rx_pkt_length=%d\n", mbuf->data_len,
-				rx_pkt_offset, rx_pkt_length);
-		ret = MWIFIEX_STATUS_FAILURE;
-		mwifiex_free_buffer_skb(mbuf);
-		goto done;
-	}
-	mbuf->data_len = rx_pkt_offset + rx_pkt_length;
-
-	mbuf->priority = prx_pd->priority;
-	if (rx_pkt_type == PKT_TYPE_AMSDU) {
-		mbuf->data_len = rx_pkt_length;
-		mbuf->data_offset += rx_pkt_offset;
-		mwifiex_11n_deaggregate_pkt(priv, mbuf);
-		goto done;
-	}
-	memcpy(ta, prx_pkt->eth803_hdr.src_addr, MWIFIEX_MAC_ADDR_LENGTH);
-	if (rx_pkt_type != PKT_TYPE_BAR) {
-		sta_ptr = mwifiex_get_station_entry(priv, ta);
-		if (sta_ptr)
-			sta_ptr->rx_seq[prx_pd->priority] = seq_num;
-	}
-	/* check if UAP enable 11n */
-	if (!priv->is_11n_enabled || !mwifiex_11n_get_rx_reorder_tbl(
-			(struct mwifiex_private *)priv, prx_pd->priority, ta)) {
-		if (priv->pkt_fwd == true)
-			mwifiex_process_uap_rx_packet(priv, mbuf);
-		else
-			mwifiex_upload_uap_rx_packet(adapter, mbuf);
-		goto done;
-	}
-	/* Reorder and send to OS */
-	ret = mwifiex_11n_rx_reorder_pkt(priv, seq_num,
-					 prx_pd->priority, ta,
-					 (u8)rx_pkt_type,
-					 (void *) mbuf);
-
-	if (ret || (rx_pkt_type == PKT_TYPE_BAR))
-		mwifiex_free_buffer_skb(mbuf);
-
-done:
-
-	if ((adapter->pending_bridge_pkts >= RX_HIGH_THRESHOLD)
-			&& (!adapter->rx_pause_flag)) {
-		adapter->rx_pause_flag = true;
-		mwifiex_prepare_cmd(priv, HOST_CMD_RX_DATA_PAUSE,
-					HostCmd_ACT_GEN_SET, 0, NULL, NULL);
-	}
-
-	LEAVE();
-	return ret;
-
-}
-
-/*
- * This function processes received packet and forwards it
- * to kernel/upper layer or send back to firmware
- */
-enum mwifiex_status mwifiex_uap_recv_packet(struct mwifiex_private *priv,
-					    struct mwifiex_buffer *mbuf)
-{
-	struct mwifiex_adapter *adapter = priv->adapter;
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct rx_packet_hdr *prx_pkt;
-	struct mwifiex_buffer *newbuf = NULL;
-
-	ENTER();
-
-	prx_pkt = (struct rx_packet_hdr *)((u8 *)mbuf->buffer +
-							mbuf->data_offset);
-
-	DBG_HEXDUMP(MDAT_D, "uap_recv_packet", mbuf->buffer +
-				mbuf->data_offset,
-				min_t(u32, mbuf->data_len, MAX_DATA_DUMP_LEN));
-
-	PRINTM(MDATA, "AMSDU dest %02x:%02x:%02x:%02x:%02x:%02x\n",
-			prx_pkt->eth803_hdr.dest_addr[0],
-			prx_pkt->eth803_hdr.dest_addr[1],
-			prx_pkt->eth803_hdr.dest_addr[2],
-			prx_pkt->eth803_hdr.dest_addr[3],
-			prx_pkt->eth803_hdr.dest_addr[4],
-			prx_pkt->eth803_hdr.dest_addr[5]);
-
-	/* don't do packet forwarding in disconnected state */
-	if (priv->media_connected == false)
-		goto upload;
-	if (prx_pkt->eth803_hdr.dest_addr[0] & 0x01) {
-		/* Multicast pkt */
-		newbuf = mwifiex_alloc_buffer(MWIFIEX_TX_DATA_BUF_SIZE_2K);
-		if (newbuf) {
-			newbuf->bss_index = mbuf->bss_index;
-			newbuf->buf_type = mbuf->buf_type;
-			newbuf->priority = mbuf->priority;
-			newbuf->in_tstamp = mbuf->in_tstamp;
-			newbuf->data_offset = (sizeof(struct mwifiex_uap_txpd) +
-					INTF_HEADER_LEN + HEADER_ALIGNMENT);
-			adapter->pending_bridge_pkts++;
-			newbuf->flags |= MWIFIEX_BUF_FLAG_BRIDGE_BUF;
-
-			/* copy the data */
-			memcpy((u8 *)newbuf->buffer+newbuf->data_offset,
-					mbuf->buffer + mbuf->data_offset,
-					mbuf->data_len);
-			newbuf->data_len = mbuf->data_len;
-			mwifiex_wmm_add_buf_txqueue(adapter, newbuf);
-
-		}
-	} else {
-		if (mwifiex_get_station_entry(priv,
-					prx_pkt->eth803_hdr.dest_addr)) {
-			/* Inter BSS packet */
-			newbuf = mwifiex_alloc_buffer(
-						MWIFIEX_TX_DATA_BUF_SIZE_2K);
-			if (newbuf) {
-				newbuf->bss_index = mbuf->bss_index;
-				newbuf->buf_type = mbuf->buf_type;
-				newbuf->priority = mbuf->priority;
-				newbuf->in_tstamp = mbuf->in_tstamp;
-				newbuf->data_offset =
-						(sizeof(struct mwifiex_uap_txpd)
-						+ INTF_HEADER_LEN
-						+ HEADER_ALIGNMENT);
-				adapter->pending_bridge_pkts++;
-				newbuf->flags |= MWIFIEX_BUF_FLAG_BRIDGE_BUF;
-
-				/* copy the data */
-				memcpy((u8 *)newbuf->buffer+newbuf->data_offset,
-						mbuf->buffer +
-						mbuf->data_offset,
-						mbuf->data_len);
-				newbuf->data_len = mbuf->data_len;
-				mwifiex_wmm_add_buf_txqueue(adapter, newbuf);
-
-			}
-			goto done;
-		}
-	}
-upload:
-	/** send packet to moal */
-	ret = mwifiex_recv_packet(adapter, mbuf);
-
-done:
-	LEAVE();
-	return ret;
-}
diff --git a/drivers/net/wireless/mwifiex/util.c b/drivers/net/wireless/mwifiex/util.c
index bf48d2d..abb36f1 100644
--- a/drivers/net/wireless/mwifiex/util.c
+++ b/drivers/net/wireless/mwifiex/util.c
@@ -648,38 +648,6 @@ mwifiex_free_buffer(struct mwifiex_buffer *mbuf)
 }
 
 /*
- * This function will return the pointer to station wapi key in station list
- * table which matches the give mac address
- */
-struct sta_node *mwifiex_get_station_entry(struct mwifiex_private *priv,
-					   u8 *mac)
-{
-	struct sta_node *sta_ptr;
-
-	ENTER();
-
-	if (!mac) {
-		LEAVE();
-		return NULL;
-	}
-	sta_ptr = (struct sta_node *) mwifiex_util_peek_list(&priv->sta_list,
-							     true);
-	if (!sta_ptr) {
-		LEAVE();
-		return NULL;
-	}
-	while (sta_ptr != (struct sta_node *) &priv->sta_list) {
-		if (!memcmp(sta_ptr->mac_addr, mac, MWIFIEX_MAC_ADDR_LENGTH)) {
-			LEAVE();
-			return sta_ptr;
-		}
-		sta_ptr = sta_ptr->pnext;
-	}
-	LEAVE();
-	return NULL;
-}
-
-/*
  * Send packet completion callback handler.
  *
  * This function updates the statistics and frees the buffer SKB.
@@ -1182,33 +1150,9 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 		if (priv) {
 			adapter->hs_activated = false;
 			mwifiex_send_iwevcustom_event(priv,
-					CUS_EVT_HS_DEACTIVATED);
+						      CUS_EVT_HS_DEACTIVATED);
 		}
 		break;
-	case MWIFIEX_EVENT_ID_UAP_FW_BSS_START:
-		memcpy(priv->curr_addr,  event->event_buf + 6, ETH_ALEN);
-		memcpy(priv->netdev->dev_addr, priv->curr_addr, ETH_ALEN);
-		mwifiex_broadcast_event(priv, event->event_buf,
-							event->event_len);
-		break;
-	case MWIFIEX_EVENT_ID_UAP_FW_BSS_ACTIVE:
-		priv->media_connected = true;
-		if (!netif_carrier_ok(priv->netdev))
-			netif_carrier_on(priv->netdev);
-		if (netif_queue_stopped(priv->netdev))
-			netif_wake_queue(priv->netdev);
-		mwifiex_broadcast_event(priv, event->event_buf,
-							event->event_len);
-		break;
-	case MWIFIEX_EVENT_ID_UAP_FW_BSS_IDLE:
-		priv->media_connected = false;
-		if (!netif_queue_stopped(priv->netdev))
-			netif_stop_queue(priv->netdev);
-		if (netif_carrier_ok(priv->netdev))
-			netif_carrier_off(priv->netdev);
-		mwifiex_broadcast_event(priv, event->event_buf,
-							event->event_len);
-		break;
 	case MWIFIEX_EVENT_ID_DRV_PASSTHU:
 		mwifiex_broadcast_event(priv, event->event_buf,
 					event->event_len);
-- 
1.7.3.2


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

* [PATCH 2/3] mwifiex: remove NETLINK_MARVELL and associate madness
  2010-12-03 19:11         ` John W. Linville
  2010-12-03 21:17           ` [PATCH 0/3] mwifiex: remove some stuff John W. Linville
  2010-12-03 21:17           ` [PATCH 1/3] mwifiex: remove uAP functionality John W. Linville
@ 2010-12-03 21:17           ` John W. Linville
  2010-12-03 21:17           ` [PATCH 3/3] mwifiex: remove questionable wireless_send_event stuff John W. Linville
  3 siblings, 0 replies; 23+ messages in thread
From: John W. Linville @ 2010-12-03 21:17 UTC (permalink / raw)
  To: Bing Zhao, linux-wireless; +Cc: John W. Linville

Not clear how this is useful (or to whom)...firmware developers?  Maybe
we can reconsider if you intend to open-source the firmware... :-)

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
 drivers/net/wireless/mwifiex/decl.h |    1 -
 drivers/net/wireless/mwifiex/main.c |   77 -----------------------------------
 drivers/net/wireless/mwifiex/main.h |    4 --
 drivers/net/wireless/mwifiex/util.c |    4 --
 4 files changed, 0 insertions(+), 86 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/decl.h b/drivers/net/wireless/mwifiex/decl.h
index a316446..ea27216 100644
--- a/drivers/net/wireless/mwifiex/decl.h
+++ b/drivers/net/wireless/mwifiex/decl.h
@@ -151,7 +151,6 @@ enum mwifiex_event_id {
 	MWIFIEX_EVENT_ID_DRV_HS_ACTIVATED,
 	MWIFIEX_EVENT_ID_DRV_HS_DEACTIVATED,
 	MWIFIEX_EVENT_ID_DRV_OBSS_SCAN_PARAM,
-	MWIFIEX_EVENT_ID_DRV_PASSTHU,
 	MWIFIEX_EVENT_ID_DRV_SCAN_REPORT,
 };
 
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
index 7359715..0c0053d 100644
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
@@ -444,11 +444,6 @@ static void mwifiex_free_adapter(struct mwifiex_adapter *adapter)
 		return;
 	}
 
-	if ((adapter->nl_sk) && ((adapter->nl_sk)->sk_socket)) {
-		sock_release((adapter->nl_sk)->sk_socket);
-		adapter->nl_sk = NULL;
-	}
-
 	mwifiex_unregister(adapter);
 	PRINTM(MINFO, "Free Adapter\n");
 
@@ -1144,68 +1139,6 @@ mwifiex_alloc_ioctl_req(u32 size)
 EXPORT_SYMBOL_GPL(mwifiex_alloc_ioctl_req);
 
 /*
- * This function broadcasts events generated by firmware to
- * applications.
- *
- * It uses the kernel netlink system to send the events from driver
- * to applications. Every application listening on the particular netlink
- * socket will receive the events.
- */
-enum mwifiex_status
-mwifiex_broadcast_event(struct mwifiex_private *priv, u8 *payload, u32 len)
-{
-	enum mwifiex_status ret = MWIFIEX_STATUS_SUCCESS;
-	struct sk_buff *skb = NULL;
-	struct nlmsghdr *nlh = NULL;
-	struct mwifiex_adapter *adapter = priv->adapter;
-	struct sock *sk = adapter->nl_sk;
-
-	ENTER();
-	if (len > NL_MAX_PAYLOAD) {
-		PRINTM(MERROR, "event size is too big!!! len=%d\n", (int) len);
-		ret = MWIFIEX_STATUS_FAILURE;
-		goto done;
-	}
-	if (sk) {
-		/* Allocate skb */
-		skb = alloc_skb(NLMSG_SPACE(NL_MAX_PAYLOAD), GFP_ATOMIC);
-		if (!skb) {
-			PRINTM(MERROR, "Could not allocate skb \
-			for netlink.\n");
-			ret = MWIFIEX_STATUS_FAILURE;
-			goto done;
-		}
-		nlh = (struct nlmsghdr *) skb->data;
-		nlh->nlmsg_len = NLMSG_SPACE(len);
-		/* From kernel */
-		nlh->nlmsg_pid = 0;
-		nlh->nlmsg_flags = 0;
-
-		/* Data */
-		skb_put(skb, nlh->nlmsg_len);
-		memcpy(NLMSG_DATA(nlh), payload, len);
-
-		/* From Kernel */
-		NETLINK_CB(skb).pid = 0;
-
-		/* Multicast group number */
-		NETLINK_CB(skb).dst_group = NL_MULTICAST_GROUP;
-
-		/* Send message */
-		netlink_broadcast(sk, skb, 0, NL_MULTICAST_GROUP, GFP_ATOMIC);
-
-		ret = MWIFIEX_STATUS_SUCCESS;
-	} else {
-		PRINTM(MERROR, "Could not send event through \
-			NETLINK. Link down.\n");
-		ret = MWIFIEX_STATUS_FAILURE;
-	}
-done:
-	LEAVE();
-	return ret;
-}
-
-/*
  * This is the main work queue function.
  *
  * It handles the main process, which in turn handles the complete
@@ -1287,16 +1220,6 @@ mwifiex_add_card(void *card, struct semaphore *sem,
 	adapter->hs_activated = false;
 	init_waitqueue_head(&adapter->hs_activate_wait_q);
 
-	adapter->nl_sk =
-		netlink_kernel_create(&init_net, NETLINK_MARVELL,
-				      NL_MULTICAST_GROUP, NULL, NULL,
-				      THIS_MODULE);
-	if (adapter->nl_sk == NULL) {
-		PRINTM(MERROR, "Could not initialize netlink event passing "
-				"mechanism!\n");
-		goto err_kmalloc;
-	}
-
 	/** Create workqueue */
 	adapter->workqueue = create_workqueue("MWIFIEX_WORK_QUEUE");
 	if (!adapter->workqueue)
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 8972566..8ae2048 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -75,7 +75,6 @@ struct mwifiex_drv_mode {
 #define MWIFIEX_TIMER_10S			10000
 #define MWIFIEX_TIMER_1S			1000
 
-#define NETLINK_MARVELL     (MAX_LINKS - 1)
 #define NL_MAX_PAYLOAD      1024
 #define NL_MULTICAST_GROUP  1
 
@@ -563,7 +562,6 @@ struct mwifiex_adapter {
 	atomic_t ioctl_pending;
 	struct workqueue_struct *workqueue;
 	struct work_struct main_work;
-	struct sock *nl_sk;
 	struct mwifiex_bss_prio_tbl bss_prio_tbl[MWIFIEX_MAX_BSS_NUM];
 	void *mwifiex_lock;
 	void *main_proc_lock;
@@ -1007,8 +1005,6 @@ int mwifiex_add_card(void *, struct semaphore *, struct mwifiex_if_ops *);
 enum mwifiex_status mwifiex_remove_card(struct mwifiex_adapter *,
 					struct semaphore *);
 
-enum mwifiex_status mwifiex_broadcast_event(struct mwifiex_private *priv,
-					    u8 *payload, u32 len);
 void mwifiex_get_version(struct mwifiex_adapter *adapter, char *version,
 			 int maxlen);
 enum mwifiex_status mwifiex_request_set_mac_address(struct mwifiex_private
diff --git a/drivers/net/wireless/mwifiex/util.c b/drivers/net/wireless/mwifiex/util.c
index abb36f1..cc43313 100644
--- a/drivers/net/wireless/mwifiex/util.c
+++ b/drivers/net/wireless/mwifiex/util.c
@@ -1153,10 +1153,6 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 						      CUS_EVT_HS_DEACTIVATED);
 		}
 		break;
-	case MWIFIEX_EVENT_ID_DRV_PASSTHU:
-		mwifiex_broadcast_event(priv, event->event_buf,
-					event->event_len);
-		break;
 
 	default:
 		break;
-- 
1.7.3.2


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

* [PATCH 3/3] mwifiex: remove questionable wireless_send_event stuff...
  2010-12-03 19:11         ` John W. Linville
                             ` (2 preceding siblings ...)
  2010-12-03 21:17           ` [PATCH 2/3] mwifiex: remove NETLINK_MARVELL and associate madness John W. Linville
@ 2010-12-03 21:17           ` John W. Linville
  3 siblings, 0 replies; 23+ messages in thread
From: John W. Linville @ 2010-12-03 21:17 UTC (permalink / raw)
  To: Bing Zhao, linux-wireless; +Cc: John W. Linville

Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
 drivers/net/wireless/mwifiex/main.c |   11 +--
 drivers/net/wireless/mwifiex/main.h |    2 -
 drivers/net/wireless/mwifiex/scan.c |    5 -
 drivers/net/wireless/mwifiex/util.c |  246 ++++-------------------------------
 4 files changed, 26 insertions(+), 238 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
index 0c0053d..7e8973f 100644
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
@@ -883,22 +883,15 @@ mwifiex_remove_interface(struct mwifiex_adapter *adapter, u8 bss_index)
 {
 	struct net_device *dev = NULL;
 	struct mwifiex_private *priv = adapter->priv[bss_index];
-	union iwreq_data wrqu;
 
 	ENTER();
 	if (!priv)
 		goto error;
 	dev = priv->netdev;
 
-	if (priv->media_connected) {
+	if (priv->media_connected)
 		priv->media_connected = false;
-		if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA) {
-			memset(wrqu.ap_addr.sa_data, 0xaa, ETH_ALEN);
-			wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-			wireless_send_event(priv->netdev, SIOCGIWAP,
-					    &wrqu, NULL);
-		}
-	}
+
 #ifdef CONFIG_DEBUG_FS
 	mwifiex_dev_debugfs_remove(priv);
 #endif
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 8ae2048..285cbc0 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -1035,8 +1035,6 @@ enum mwifiex_status mwifiex_cancel_hs(struct mwifiex_private *priv,
 int mwifiex_enable_hs(struct mwifiex_adapter *adapter);
 int mwifiex_set_deep_sleep(struct mwifiex_private *priv, u8 wait_option,
 			   bool bdeep_sleep, u16 idletime);
-void mwifiex_send_iwevcustom_event(struct mwifiex_private *priv, s8 *str);
-void mwifiex_send_mic_error_event(struct mwifiex_private *priv, u32 event);
 void mwifiex_process_ioctl_resp(struct mwifiex_private *priv,
 				struct mwifiex_ioctl_req *req);
 void mwifiex_request_get_fw_info(struct mwifiex_private *priv);
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
index 21738bb..ddde627 100644
--- a/drivers/net/wireless/mwifiex/scan.c
+++ b/drivers/net/wireless/mwifiex/scan.c
@@ -251,7 +251,6 @@ mwifiex_set_user_scan_ioctl(struct mwifiex_private *priv,
 {
 	struct mwifiex_ioctl_req *req = NULL;
 	struct mwifiex_ds_scan *scan = NULL;
-	union iwreq_data wrqu;
 	enum mwifiex_status status = MWIFIEX_STATUS_SUCCESS;
 
 	ENTER();
@@ -274,10 +273,6 @@ mwifiex_set_user_scan_ioctl(struct mwifiex_private *priv,
 			scan_req, sizeof(struct mwifiex_user_scan_cfg));
 
 	status = mwifiex_request_ioctl(priv, req, MWIFIEX_IOCTL_WAIT);
-	if (status == MWIFIEX_STATUS_SUCCESS) {
-		memset(&wrqu, 0, sizeof(union iwreq_data));
-		wireless_send_event(priv->netdev, SIOCGIWSCAN, &wrqu, NULL);
-	}
 
 done:
 	if (req && (status != MWIFIEX_STATUS_PENDING))
diff --git a/drivers/net/wireless/mwifiex/util.c b/drivers/net/wireless/mwifiex/util.c
index cc43313..d28f5a9 100644
--- a/drivers/net/wireless/mwifiex/util.c
+++ b/drivers/net/wireless/mwifiex/util.c
@@ -827,110 +827,6 @@ mwifiex_print(u32 level, s8 *pformat, ...)
 EXPORT_SYMBOL_GPL(mwifiex_print);
 
 /*
- * This function sends a customized wireless event to application.
- */
-void
-mwifiex_send_iwevcustom_event(struct mwifiex_private *priv, s8 *str)
-{
-	union iwreq_data iwrq;
-	char buf[50];
-
-	ENTER();
-
-	memset(&iwrq, 0, sizeof(union iwreq_data));
-	memset(buf, 0, sizeof(buf));
-
-	snprintf(buf, sizeof(buf) - 1, "%s", str);
-
-	iwrq.data.pointer = (void __force __user *)buf;
-	iwrq.data.length = strlen(buf) + 1 + IW_EV_LCP_LEN;
-
-	/* Send Event to upper layer */
-	wireless_send_event(priv->netdev, IWEVCUSTOM, &iwrq, buf);
-	PRINTM(MINFO, "Wireless event %s is sent to application\n", str);
-
-	LEAVE();
-	return;
-}
-
-/*
- * This function sends a mic error event to application.
- */
-void
-mwifiex_send_mic_error_event(struct mwifiex_private *priv, u32 event)
-{
-	union iwreq_data iwrq;
-	struct iw_michaelmicfailure mic;
-
-	ENTER();
-
-	memset(&iwrq, 0, sizeof(iwrq));
-	memset(&mic, 0, sizeof(mic));
-	if (event == MWIFIEX_EVENT_ID_FW_MIC_ERR_UNI)
-		mic.flags = IW_MICFAILURE_PAIRWISE;
-	else
-		mic.flags = IW_MICFAILURE_GROUP;
-	iwrq.data.pointer = (void __force __user *)&mic;
-	iwrq.data.length = sizeof(mic);
-
-	wireless_send_event(priv->netdev, IWEVMICHAELMICFAILURE, &iwrq,
-			    (char *) &mic);
-
-	LEAVE();
-	return;
-}
-
-/** Custom event : AdHoc link sensed */
-#define CUS_EVT_ADHOC_LINK_SENSED	"EVENT=ADHOC_LINK_SENSED"
-/** Custom event : AdHoc link lost */
-#define CUS_EVT_ADHOC_LINK_LOST		"EVENT=ADHOC_LINK_LOST"
-/** Custom event : Beacon RSSI low */
-#define CUS_EVT_BEACON_RSSI_LOW		"EVENT=BEACON_RSSI_LOW"
-/** Custom event : Beacon SNR low */
-#define CUS_EVT_BEACON_SNR_LOW		"EVENT=BEACON_SNR_LOW"
-/** Custom event : Beacon RSSI high */
-#define CUS_EVT_BEACON_RSSI_HIGH	"EVENT=BEACON_RSSI_HIGH"
-/** Custom event : Beacon SNR high */
-#define CUS_EVT_BEACON_SNR_HIGH		"EVENT=BEACON_SNR_HIGH"
-/** Custom event : Max fail */
-#define CUS_EVT_MAX_FAIL		"EVENT=MAX_FAIL"
-/** Custom event : Data RSSI low */
-#define CUS_EVT_DATA_RSSI_LOW		"EVENT=DATA_RSSI_LOW"
-/** Custom event : Data SNR low */
-#define CUS_EVT_DATA_SNR_LOW		"EVENT=DATA_SNR_LOW"
-/** Custom event : Data RSSI high */
-#define CUS_EVT_DATA_RSSI_HIGH		"EVENT=DATA_RSSI_HIGH"
-/** Custom event : Data SNR high */
-#define CUS_EVT_DATA_SNR_HIGH		"EVENT=DATA_SNR_HIGH"
-/** Custom event : Link Quality */
-#define CUS_EVT_LINK_QUALITY		"EVENT=LINK_QUALITY"
-/** Custom event : Port Release */
-#define CUS_EVT_PORT_RELEASE		"EVENT=PORT_RELEASE"
-/** Custom event : Pre-Beacon Lost */
-#define CUS_EVT_PRE_BEACON_LOST		"EVENT=PRE_BEACON_LOST"
-
-/** Custom event : Deep Sleep awake */
-#define CUS_EVT_DEEP_SLEEP_AWAKE	"EVENT=DS_AWAKE"
-
-/** Custom event : Host Sleep activated */
-#define CUS_EVT_HS_ACTIVATED		"HS_ACTIVATED "
-/** Custom event : Host Sleep deactivated */
-#define CUS_EVT_HS_DEACTIVATED		"HS_DEACTIVATED "
-/** Custom event : Host Sleep wakeup */
-#define CUS_EVT_HS_WAKEUP		"HS_WAKEUP"
-
-/** Custom indiciation message sent to the application layer for WMM changes */
-#define WMM_CONFIG_CHANGE_INDICATION  "WMM_CONFIG_CHANGE.indication"
-
-/** Custom event : WEP ICV error */
-#define CUS_EVT_WEP_ICV_ERR		"EVENT=WEP_ICV_ERR"
-
-/** Custom event : BW changed */
-#define CUS_EVT_BW_CHANGED		"EVENT=BW_CHANGED"
-/** Custom event : OBSS scan parameter */
-#define CUS_EVT_OBSS_SCAN_PARAM		"EVENT=OBSS_SCAN_PARAM"
-
-/*
  * This function handles received events.
  *
  * Handling may include updating the traffic queue status, setting
@@ -943,7 +839,6 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 				struct mwifiex_event *event)
 {
 	struct mwifiex_private *priv = NULL;
-	union iwreq_data wrqu;
 
 	ENTER();
 
@@ -960,7 +855,6 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 			netif_carrier_on(priv->netdev);
 		if (netif_queue_stopped(priv->netdev))
 			netif_wake_queue(priv->netdev);
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_ADHOC_LINK_SENSED);
 		break;
 	case MWIFIEX_EVENT_ID_FW_ADHOC_LINK_LOST:
 		if (!netif_queue_stopped(priv->netdev))
@@ -968,17 +862,8 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 		if (netif_carrier_ok(priv->netdev))
 			netif_carrier_off(priv->netdev);
 		priv->is_adhoc_link_sensed = false;
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_ADHOC_LINK_LOST);
 		break;
 	case MWIFIEX_EVENT_ID_DRV_CONNECTED:
-		if (event->event_len == ETH_ALEN) {
-			memset(wrqu.ap_addr.sa_data, 0x00, ETH_ALEN);
-			memcpy(wrqu.ap_addr.sa_data, event->event_buf,
-			       ETH_ALEN);
-			wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-			wireless_send_event(priv->netdev, SIOCGIWAP, &wrqu,
-					    NULL);
-		}
 		priv->media_connected = true;
 		if (!netif_carrier_ok(priv->netdev))
 			netif_carrier_on(priv->netdev);
@@ -987,54 +872,13 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 		break;
 	case MWIFIEX_EVENT_ID_DRV_SCAN_REPORT:
 		PRINTM(MCMND, "Scan report\n");
-		if (priv->report_scan_result) {
-			memset(&wrqu, 0, sizeof(union iwreq_data));
-			wireless_send_event(priv->netdev, SIOCGIWSCAN, &wrqu,
-					    NULL);
+		if (priv->report_scan_result)
 			priv->report_scan_result = false;
-		}
 		if (priv->scan_pending_on_block) {
 			priv->scan_pending_on_block = false;
 			up(&priv->async_sem);
 		}
 		break;
-	case MWIFIEX_EVENT_ID_DRV_OBSS_SCAN_PARAM:
-		memset(&wrqu, 0, sizeof(union iwreq_data));
-		memmove((event->event_buf + strlen(CUS_EVT_OBSS_SCAN_PARAM) +
-			 1), event->event_buf, event->event_len);
-		memcpy(event->event_buf, (u8 *) CUS_EVT_OBSS_SCAN_PARAM,
-		       strlen(CUS_EVT_OBSS_SCAN_PARAM));
-		event->event_buf[strlen(CUS_EVT_OBSS_SCAN_PARAM)] = 0;
-
-		wrqu.data.pointer = (void __force __user *)event->event_buf;
-		wrqu.data.length =
-			event->event_len + strlen(CUS_EVT_OBSS_SCAN_PARAM) +
-			IW_EV_LCP_LEN + 1;
-		wireless_send_event(priv->netdev, IWEVCUSTOM, &wrqu,
-				    event->event_buf);
-		break;
-	case MWIFIEX_EVENT_ID_FW_BW_CHANGED:
-		memset(&wrqu, 0, sizeof(union iwreq_data));
-		memmove((event->event_buf + strlen(CUS_EVT_BW_CHANGED) + 1),
-			event->event_buf, event->event_len);
-		memcpy(event->event_buf, (u8 *) CUS_EVT_BW_CHANGED,
-		       strlen(CUS_EVT_BW_CHANGED));
-		event->event_buf[strlen(CUS_EVT_BW_CHANGED)] = 0;
-
-		wrqu.data.pointer = (void __force __user *)event->event_buf;
-		wrqu.data.length =
-			event->event_len + strlen(CUS_EVT_BW_CHANGED) +
-			IW_EV_LCP_LEN + 1;
-		wireless_send_event(priv->netdev, IWEVCUSTOM, &wrqu,
-				    event->event_buf);
-		break;
-	case MWIFIEX_EVENT_ID_HOSTWAKE_STAIE:
-		wrqu.data.pointer = (void __force __user *)event->event_buf;
-		wrqu.data.length = event->event_len + IW_EV_LCP_LEN + 1;
-		wireless_send_event(priv->netdev, IWEVCUSTOM, &wrqu,
-				    event->event_buf);
-
-		break;
 	case MWIFIEX_EVENT_ID_FW_DISCONNECTED:
 		priv->media_connected = false;
 		if (!priv->disconnect) {
@@ -1051,76 +895,19 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 			netif_stop_queue(priv->netdev);
 		if (netif_carrier_ok(priv->netdev))
 			netif_carrier_off(priv->netdev);
-		memset(wrqu.ap_addr.sa_data, 0x00, ETH_ALEN);
-		wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-		wireless_send_event(priv->netdev, SIOCGIWAP, &wrqu, NULL);
 		/* Reset wireless stats signal info */
 		priv->w_stats.qual.level = 0;
 		priv->w_stats.qual.noise = 0;
 		break;
-	case MWIFIEX_EVENT_ID_FW_MIC_ERR_UNI:
-		mwifiex_send_mic_error_event(priv,
-					     MWIFIEX_EVENT_ID_FW_MIC_ERR_UNI);
-		break;
-	case MWIFIEX_EVENT_ID_FW_MIC_ERR_MUL:
-		mwifiex_send_mic_error_event(priv,
-					     MWIFIEX_EVENT_ID_FW_MIC_ERR_MUL);
-		break;
-	case MWIFIEX_EVENT_ID_FW_BCN_RSSI_LOW:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_BEACON_RSSI_LOW);
-		break;
-	case MWIFIEX_EVENT_ID_FW_BCN_RSSI_HIGH:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_BEACON_RSSI_HIGH);
-		break;
-	case MWIFIEX_EVENT_ID_FW_BCN_SNR_LOW:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_BEACON_SNR_LOW);
-		break;
-	case MWIFIEX_EVENT_ID_FW_BCN_SNR_HIGH:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_BEACON_SNR_HIGH);
-		break;
-	case MWIFIEX_EVENT_ID_FW_MAX_FAIL:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_MAX_FAIL);
-		break;
-	case MWIFIEX_EVENT_ID_FW_DATA_RSSI_LOW:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_DATA_RSSI_LOW);
-		break;
-	case MWIFIEX_EVENT_ID_FW_DATA_SNR_LOW:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_DATA_SNR_LOW);
-		break;
-	case MWIFIEX_EVENT_ID_FW_DATA_RSSI_HIGH:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_DATA_RSSI_HIGH);
-		break;
-	case MWIFIEX_EVENT_ID_FW_DATA_SNR_HIGH:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_DATA_SNR_HIGH);
-		break;
-	case MWIFIEX_EVENT_ID_FW_LINK_QUALITY:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_LINK_QUALITY);
-		break;
-	case MWIFIEX_EVENT_ID_FW_PORT_RELEASE:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_PORT_RELEASE);
-		break;
-	case MWIFIEX_EVENT_ID_FW_PRE_BCN_LOST:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_PRE_BEACON_LOST);
-		break;
-	case MWIFIEX_EVENT_ID_FW_DS_AWAKE:
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_DEEP_SLEEP_AWAKE);
-		break;
-	case MWIFIEX_EVENT_ID_FW_WMM_CONFIG_CHANGE:
-		mwifiex_send_iwevcustom_event(priv,
-					      WMM_CONFIG_CHANGE_INDICATION);
-		break;
 	case MWIFIEX_EVENT_ID_FW_WEP_ICV_ERR:
 		DBG_HEXDUMP(MCMD_D, "WEP ICV error", event->event_buf,
 			    event->event_len);
-		mwifiex_send_iwevcustom_event(priv, CUS_EVT_WEP_ICV_ERR);
 		break;
 
 	case MWIFIEX_EVENT_ID_DRV_DEFER_HANDLING:
 		queue_work(adapter->workqueue, &adapter->main_work);
 		break;
 	case MWIFIEX_EVENT_ID_FW_BG_SCAN:
-		memset(&wrqu, 0, sizeof(union iwreq_data));
-		wireless_send_event(priv->netdev, SIOCGIWSCAN, &wrqu, NULL);
 		break;
 	case MWIFIEX_EVENT_ID_FW_STOP_TX:
 		netif_carrier_off(priv->netdev);
@@ -1132,14 +919,10 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 		/* simulate HSCFG_CANCEL command */
 		mwifiex_cancel_hs(priv, MWIFIEX_NO_WAIT);
 		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA);
-		if (priv)
-			mwifiex_send_iwevcustom_event(priv, CUS_EVT_HS_WAKEUP);
 		break;
 	case MWIFIEX_EVENT_ID_DRV_HS_ACTIVATED:
 		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA);
 		if (priv) {
-			mwifiex_send_iwevcustom_event(priv,
-						      CUS_EVT_HS_ACTIVATED);
 			adapter->hs_activated = true;
 			adapter->hs_activate_wait_q_woken = true;
 			wake_up_interruptible(&adapter->hs_activate_wait_q);
@@ -1147,11 +930,30 @@ mwifiex_process_recv_event(struct mwifiex_adapter *adapter,
 		break;
 	case MWIFIEX_EVENT_ID_DRV_HS_DEACTIVATED:
 		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA);
-		if (priv) {
+		if (priv)
 			adapter->hs_activated = false;
-			mwifiex_send_iwevcustom_event(priv,
-						      CUS_EVT_HS_DEACTIVATED);
-		}
+		break;
+
+	/* These events might be interesting to some userland? */
+	case MWIFIEX_EVENT_ID_DRV_OBSS_SCAN_PARAM:
+	case MWIFIEX_EVENT_ID_FW_BW_CHANGED:
+	case MWIFIEX_EVENT_ID_HOSTWAKE_STAIE:
+	case MWIFIEX_EVENT_ID_FW_MIC_ERR_UNI:
+	case MWIFIEX_EVENT_ID_FW_MIC_ERR_MUL:
+	case MWIFIEX_EVENT_ID_FW_BCN_RSSI_LOW:
+	case MWIFIEX_EVENT_ID_FW_BCN_RSSI_HIGH:
+	case MWIFIEX_EVENT_ID_FW_BCN_SNR_LOW:
+	case MWIFIEX_EVENT_ID_FW_BCN_SNR_HIGH:
+	case MWIFIEX_EVENT_ID_FW_MAX_FAIL:
+	case MWIFIEX_EVENT_ID_FW_DATA_RSSI_LOW:
+	case MWIFIEX_EVENT_ID_FW_DATA_SNR_LOW:
+	case MWIFIEX_EVENT_ID_FW_DATA_RSSI_HIGH:
+	case MWIFIEX_EVENT_ID_FW_DATA_SNR_HIGH:
+	case MWIFIEX_EVENT_ID_FW_LINK_QUALITY:
+	case MWIFIEX_EVENT_ID_FW_PORT_RELEASE:
+	case MWIFIEX_EVENT_ID_FW_PRE_BCN_LOST:
+	case MWIFIEX_EVENT_ID_FW_DS_AWAKE:
+	case MWIFIEX_EVENT_ID_FW_WMM_CONFIG_CHANGE:
 		break;
 
 	default:
-- 
1.7.3.2


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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 12:53 ` Johannes Berg
  2010-12-03 15:06   ` Greg KH
       [not found]   ` <477F20668A386D41ADCC57781B1F704307D59F9D6D@SC-VEXCH1.marvell.com>
@ 2010-12-03 22:15   ` Bing Zhao
  2011-02-23  3:37   ` Bing Zhao
  2011-03-11  4:04   ` Bing Zhao
  4 siblings, 0 replies; 23+ messages in thread
From: Bing Zhao @ 2010-12-03 22:15 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Greg KH, David S. Miller

SGkgSm9oYW5uZXMsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGlu
dXgtd2lyZWxlc3Mtb3duZXJAdmdlci5rZXJuZWwub3JnIFttYWlsdG86bGludXgtd2lyZWxlc3Mt
b3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YNCj4gSm9oYW5uZXMgQmVyZw0KPiBT
ZW50OiBGcmlkYXksIERlY2VtYmVyIDAzLCAyMDEwIDQ6NTMgQU0NCj4gVG86IEJpbmcgWmhhbw0K
PiBDYzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnOyBKb2huIFcuIExpbnZpbGxlOyBE
YW4gV2lsbGlhbXM7IERhdmlkIFdvb2Rob3VzZTsgQW1pdGt1bWFyIEthcndhcjsNCj4gS2lyYW4g
RGl2ZWthcjsgR3JlZyBLSDsgRGF2aWQgUy4gTWlsbGVyDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
MDAvMzFdIHdpcmVsZXNzOiBNYXJ2ZWxsIG13aWZpZXggZHJpdmVyIGZvciBTRDg3ODcNCj4gDQo+
IE9uIFdlZCwgMjAxMC0xMi0wMSBhdCAxNzozMSAtMDgwMCwgQmluZyBaaGFvIHdyb3RlOg0KPiA+
IFRoZSBtd2lmaWV4IGRyaXZlciBmb3IgTWFydmVsbCA4MDIuMTFuIGNoaXBzZXQgU0Q4Nzg3IGlz
IGF2YWlsYWJsZSBhdA0KPiA+IGdpdDovL2dpdC5tYXJ2ZWxsLmNvbS9td2lmaWV4LmdpdC4gQm90
aCBTVEEgbW9kZSBhbmQgTW9iaWxlIGhvdHNwb3QNCj4gPiBtb2RlIGFyZSBzdXBwb3J0ZWQuDQo+
ID4NCj4gPiBnaXQgcHVsbCBnaXQ6Ly9naXQubWFydmVsbC5jb20vbXdpZmlleC5naXQgbWFzdGVy
DQo+IA0KPiBQbGVhc2UgcG9zdCBwYXRjaGVzLCBub3QgZ2l0IHRyZWVzLg0KPiANCj4gQnV0IHNp
bmNlIEpvaG4gaXMgaG9sZGluZyB1cyBzb21ld2hhdCBob3N0YWdlIGJ5IHNheWluZyBoZSdsbCBj
b25zaWRlcg0KPiBtZXJnaW5nIHRoaXMsIGFuZCBhcHBhcmVudGx5IHlvdSBkb24ndCBoYXZlIHRo
ZSB0YXN0ZSB0byBldmVuIGNvbnNpZGVyDQo+IHRoZSByZXZpZXcgY29tbWVudHMgeW91IGhhdmUg
Z290dGVuIGJlZm9yZSwgSSB0b29rIGEgYnJpZWYgbG9vayB0bw0KPiAqcHJvdmUqIHRoYXQgdGhp
cyBkcml2ZXIgY2Fubm90IGJlIG1lcmdlZCBhcyBpcy4NCj4gDQo+IA0KPiBIZXJlJ3MgYSBzaG9y
dCBsaXN0IG9mIHRoaW5ncyB0byBmaXg6DQo+ICAqIF9fcGFja2VkDQo+ICAqIEVOVEVSL0xFQVZF
IG11c3QgZ28NCj4gICogZW51bSBtd2lmaWV4X3N0YXR1cyBtdXN0IGdvIC0tIHVzZSBlcnJubw0K
PiAgKiBwcml2YXRlIGlvY3RscyB3ZXJlIGdyYW5kZmF0aGVyZWQgaW4sDQo+ICAgIGJ1dCBhcmVu
J3QgYWxsb3dlZCBpbiBuZXcgZHJpdmVycw0KPiAgKiBkbyB5b3UgcmVhbGx5IG5lZWQgeW91ciBv
d24gY3J5cHRvIG1vZGUgZGVmaW5pdGlvbnM/DQo+ICAqIHlvdXIgcHNldWRvLWtlcm5lbGRvYyBj
b21tZW50cyAiLyoqIiBkb24ndCBjb25mb3JtDQo+ICAgIHRvIHRoZSByaWdodCBmb3JtYXQNCj4g
ICogcHJpdmF0ZSBsb2NraW5nIHdyYXBwZXJzIGFyZSBub3QgYWxsb3dlZCAobXdpZmlleF9zcGlu
X2xvY2sgZXRjKQ0KPiAgKiBwcml2YXRlIGRlYnVnZ2luZyBsaWtlIFBSSU5UTSBpcyBub3QgYWxs
b3dlZA0KPiAgKiB0aGVyZSdzIGV4YWN0bHkgb25lIHNwYWNlIGFmdGVyICIjaW5jbHVkZSINCj4g
ICogc3RydWN0IGV0aF84MDNfaGRyPyBhcmUgeW91IHNlcmlvdXM/IGFuZCB5b3UgZXZlbiBoYXZl
DQo+ICAgIGl0IHR3aWNlOiBzdHJ1Y3QgZXRoX0lJX2hkcg0KPiAgKiBlbnVtIGllZWVfdHlwZXNf
ZWxlbWVudGlkX2UgbXVzdCBnbw0KPiAgKiBzaW1pbGFybHksIGFsbW9zdCBhbGwgb2YgaWVlZS5o
DQo+ICAqIG5vIGJpdGZpZWxkcyBhbmQgQklHX0VORElBTl9CSVRGSUVMRCBhbGxvd2VkDQo+ICAq
IG5vdCBhbGwgYWxsb2NhdGlvbnMgYXJlIEdGUF9BVE9NSUMsIHVzZSB3aXNlbHkgYW5kDQo+ICAg
IEdGUF9LRVJORUwgaW4gbW9zdCBwbGFjZXMNCj4gICogYSB3aWZpIGRyaXZlciB0aGF0J3MgZG9p
bmcgc3R1ZmYgd2l0aCBzb2NrZXRzIChubF9zaywgc2tfc29ja2V0KT8NCj4gICAgZXhwbGFpbiwg
aW4gTVVDSCBkZXRhaWwgKG9yIHByZWZlcmFibHkganVzdCBnZXQgcmlkIG9mIGl0KQ0KPiAgKiB0
aGVyZSdzIGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZQ0KPiAgKiBzb21lIGZ1bmN0aW9ucyBsaWtl
IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlIG5lZWQgdG8gYmUgYnJva2VuDQo+ICAgIGlu
dG8gc21hbGxlciBvbmVzIHRvIGF2b2lkIHRoZSBjcmFwIGluZGVudGF0aW9uIHRoZXkgaGF2ZQ0K
PiAgKiBtd2lmaWV4X3VhcF9hcF9jZmdfcGFyc2VfZGF0YS4gTXVzdCBJIHNheSBtb3JlPw0KPiAg
KiBzdHJ1Y3QgbXdpZmlleF9idWZmZXIgKm1idWY/IElzIHRoaXMgYSBCU0QgZHJpdmVyPyBXZSBo
YXZlIFNLQnMsIGdldA0KPiAgICByaWQgb2YgdGhpcy4gKE9oIGFuZCBza2JzIGhhdmUgYSBDQikN
Cj4gICogbXdpZmlleF9pbml0X2xvY2svbXdpZmlleF9mcmVlX2xvY2sgLS0gSSdkIGxhdWdoIGlu
IHlvdXIgZ2VuZXJhbA0KPiAgICBkaXJlY3Rpb24gaWYgaXQgd2Fzbid0IHNvIHNhZA0KPiAgKiBt
d2lmaWV4X3V0aWxfcGVla19saXN0IGV0Yy46IGxlYXJuIGFib3V0IGxpc3QuaA0KPiAgKiBtd2lm
aWV4X2luaXRfdGltZXIgLS0gc3RpbGwgc2FkLCBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHRpbWVy
cz8ganVzdA0KPiAgICBsaWtlIHNwaW5sb2NrcywgdGhleSBjYW4gYmUgZW1iZWRkZWQgYW5kIG1h
a2UgeW91ciBjb2RlIHNpbXBsZXINCg0KVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgYWxsIHRoZSBk
ZXRhaWxlZCBjb21tZW50cy4gV2Ugd2lsbCB3b3JrIG9uIHRoZXNlIGl0ZW1zIGFuZCByZS1zdWJt
aXQgdGhlIHBhdGNoZXMuDQoNClJlZ2FyZHMsDQoNCkJpbmcNCg0KPiANCj4gT2sgZ29vZCBlbm91
Z2gsIHRoYXQgc2hvdWxkIGtlZXAgeW91IGJ1c3kgZm9yIGEgd2hpbGUuLi4NCj4gDQo+IFRoZSBh
Ym92ZSBpcyBtaWdodCBiZSBhIGdvb2QgYmFzaXMgZm9yIGEgVE9ETyBmaWxlIGZvciBzdGFnaW5n
Li4uDQo+IA0KPiBqb2hhbm5lcw0KPiANCj4gLS0NCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlz
IGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXdpcmVsZXNzIiBpbg0KPiB0
aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZw0KPiBNb3Jl
IG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZv
Lmh0bWwNCg==

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

* RE: [PATCH 0/3] mwifiex: remove some stuff...
  2010-12-03 21:17           ` [PATCH 0/3] mwifiex: remove some stuff John W. Linville
@ 2010-12-03 22:22             ` Bing Zhao
  2010-12-04  0:34               ` Bing Zhao
  0 siblings, 1 reply; 23+ messages in thread
From: Bing Zhao @ 2010-12-03 22:22 UTC (permalink / raw)
  To: John W. Linville, linux-wireless

Hi John,

> -----Original Message-----
> From: John W. Linville [mailto:linville@tuxdriver.com]
> Sent: Friday, December 03, 2010 1:17 PM
> To: Bing Zhao; linux-wireless@vger.kernel.org
> Cc: John W. Linville
> Subject: [PATCH 0/3] mwifiex: remove some stuff...
> 
> This series remvoes lots of stuff -- some bits might even be necessary,
> but if so it is worth thinking about why that may be.

Thanks a lot for making changes to the driver.

> 
> Not tested...YMMV...

I'll test all the patches you posted. After that, I will start working on the items suggested by Johannes.

Thanks again.

Bing

> 
> John

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

* RE: [PATCH 0/3] mwifiex: remove some stuff...
  2010-12-03 22:22             ` Bing Zhao
@ 2010-12-04  0:34               ` Bing Zhao
  2010-12-06 19:14                 ` Bing Zhao
  0 siblings, 1 reply; 23+ messages in thread
From: Bing Zhao @ 2010-12-04  0:34 UTC (permalink / raw)
  To: John W. Linville, linux-wireless

Hi John,

> -----Original Message-----
> From: linux-wireless-owner@vger.kernel.org [mailto:linux-wireless-owner@vger.kernel.org] On Behalf Of
> Bing Zhao
> Sent: Friday, December 03, 2010 2:23 PM
> To: John W. Linville; linux-wireless@vger.kernel.org
> Subject: RE: [PATCH 0/3] mwifiex: remove some stuff...
> 
> Hi John,
> 
> > -----Original Message-----
> > From: John W. Linville [mailto:linville@tuxdriver.com]
> > Sent: Friday, December 03, 2010 1:17 PM
> > To: Bing Zhao; linux-wireless@vger.kernel.org
> > Cc: John W. Linville
> > Subject: [PATCH 0/3] mwifiex: remove some stuff...
> >
> > This series remvoes lots of stuff -- some bits might even be necessary,
> > but if so it is worth thinking about why that may be.
> 
> Thanks a lot for making changes to the driver.
> 
> >
> > Not tested...YMMV...
> 
> I'll test all the patches you posted. After that, I will start working on the items suggested by
> Johannes.

I tested all 3 patches. They passed checkpatch.pl and sparse check. Some basic functions have been verified OK: scan, associate, ping, iperf. I will do some more tests (security, ad-hoc, etc.) next week.

I'm planning to work on the cleanups commented by Johannes. If you have any additional suggestion in mind, I can do that too.

Thanks and have a nice weekend!

Bing

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

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 18:39       ` Johannes Berg
  2010-12-03 19:11         ` John W. Linville
@ 2010-12-04  0:59         ` Bing Zhao
  1 sibling, 0 replies; 23+ messages in thread
From: Bing Zhao @ 2010-12-04  0:59 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Frank Huang

SGkgSm9oYW5uZXMsDQoNClRoYW5rIHlvdSBzbyBtdWNoIGZvciB5b3VyIGNvbW1lbnRzIQ0KDQo+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEpvaGFubmVzIEJlcmcgW21haWx0
bzpqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0XQ0KPiBTZW50OiBGcmlkYXksIERlY2VtYmVyIDAz
LCAyMDEwIDEwOjM5IEFNDQo+IFRvOiBGcmFuayBIdWFuZw0KPiBDYzogQmluZyBaaGFvOyBsaW51
eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUkU6IFtQQVRDSCAwMC8zMV0g
d2lyZWxlc3M6IE1hcnZlbGwgbXdpZmlleCBkcml2ZXIgZm9yIFNEODc4Nw0KPiANCj4gT24gRnJp
LCAyMDEwLTEyLTAzIGF0IDA5OjAxIC0wODAwLCBGcmFuayBIdWFuZyB3cm90ZToNCj4gDQo+ID4g
W3NuaXBdDQo+IA0KPiBNaW5kIHlvdSwgdGhlcmUgd2lsbCBkZWZpbml0ZWx5IGJlIG1vcmUgdGhp
bmdzIHRvIGNoYW5nZSBpbiB0aGlzDQo+IGRyaXZlciAuLi4gdGhhdCB3YXMganVzdCB0aGUgdGlw
IG9mIHRoZSBpY2ViZXJnIHJlYWxseS4NCj4gDQo+IEFsc28sIHRoZXJlIGlzIGEgbG90IG9mIHN0
dWZmIHRhbGtpbmcgb2YgImlvY3RsIi4gSSBpbml0aWFsbHkgd3JvbmdseQ0KPiBhc3N1bWVkIHlv
dSB3ZXJlIHVzaW5nIHdpcmVsZXNzIGV4dGVuc2lvbnMgb3Igc29tZXRoaW5nIC0tIEkgYXBvbG9n
aXNlDQo+IGZvciB0aGF0IG1pc2NvbmNlcHRpb24gKGJ1dCB5b3UnbGwgaGF2ZSB0byBhZ3JlZSB0
aGF0IGl0IHdhcyBhbiBlYXN5DQo+IG1pc3Rha2UgdG8gbWFrZSEpLiBIb3dldmVyLCB0aGUgImlv
Y3RsIiBsYXllciBpbiB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlDQo+IF9kaXNzb2x2ZWRfIGVudGly
ZWx5LCB0aGVyZSdzIG5vIHJlYWwgcmVhc29uIHdoeSBmb3IgZXhhbXBsZQ0KPiBtd2lmaWV4X3Nl
dF9yZl9jaGFubmVsKCkgc2hvdWxkbid0IGRpcmVjdGx5IGNhbGwgaW50byB0aGUgZnVuY3Rpb25z
IHNldA0KPiB0aGF0IHRoZSBjaGFubmVsLCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGFuICJpb2N0
bCIgcmVxdWVzdCBhbmQgY2FsbGluZw0KPiBpdC4NCj4gDQo+IEEgYmV0dGVyIGV4bWFwbGUgbWln
aHQgYmUgbXdpZmlleF9zZXRfdHhfcG93ZXIgLS0gaXQgY2FsbHMNCj4gbXdpZmlleF9yZXF1ZXN0
X2lvY3RsLCB3aGljaCBjYWxscyBtd2lmaWV4X2lvY3RsLCB3aGljaCBjYWxscyBhDQo+IG1vZGUt
ZGVwZW5kZW50IGlvY3RsIGhhbmRsZXIsIHdoaWNoIGlzLCBzYXksIG13aWZpZXhfb3BzX3N0YV9p
b2N0bCAtLQ0KPiB3aGljaCB0aGVuIHBhcnNlcyB0aGUgYXJndW1lbnRzIGFuZCBjYWxscyBtd2lm
aWV4X3Bvd2VyX2lvY3RsLiBUaGlzIGluDQo+IHR1cm4gY2FsbHMgbXdpZmlleF9wb3dlcl9pb2N0
bF9zZXRfcG93ZXIsIHdoaWNoIGZpbmFsbHkgZG9lcyBzb21ldGhpbmcNCj4gbGlrZSBhbGxvY2F0
aW5nIGEgY29tbWFuZC4NCj4gDQo+IEFsbW9zdCAqZXZlcnl0aGluZyogZGVzY3JpYmVkIGluIHRo
YXQgcGFyYWdyYXBoIHNob3VsZCBiZSBkaXNzb2x2ZWQgLS0NCj4gbXdpZmlleF9zZXRfdHhfcG93
ZXIoKSBzaG91bGQgY2FsbCBhIGZ1bmN0aW9uIHBvaW50ZXIgbGlrZQ0KPiBvcHMuc2V0X3R4X3Bv
d2VyIHdoaWNoIGlzIHNldCB0byBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8NCj4gbXdpZmlleF9wb3dl
cl9pb2N0bF9zZXRfcG93ZXIsIGJ1dCB0aGF0IHNpbWlsYXIgZnVuY3Rpb24gc2hvdWxkIHByb2Jh
Ymx5DQo+IHdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgZGV2aWNl
IGFzIHdlbGwuDQo+IA0KPiBUaGVyZSdzIHJlYWxseSBubyBuZWVkIHRvIG1hcnNoYWwgcGFyYW1l
dGVycyBhbmQgc2V0dGluZ3MgYSBmZXcgdGltZXMNCj4gYmVmb3JlIHRoZXkgYXJyaXZlIGF0IHRo
ZSBoYXJkd2FyZSENCg0KWW91IGFyZSByaWdodC4gVGhlc2UgaW9jdGxzIHNob3VsZG4ndCBiZSBu
ZWNlc3NhcnkuIEkgd2lsbCBwdXQgdGhlbSBvbiBteSBsaXN0Lg0KDQo+IA0KPiBBIG1vcmUgbWlu
b3IgdGhpbmc6IHRoZXJlIGFyZSBhIGxvdCBvZiBzdGF0aWMgZm9yd2FyZCBkZWNsYXJhdGlvbnMg
dGhhdA0KPiBhcmVuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBpZiB5b3Ugc2h1ZmZsZSB0aGUgY29kZSBh
IGJpdCAtLSB0aGF0IHdvdWxkIGJlDQo+IGFwcHJlY2lhdGVkLg0KPg0KDQpZZXMsIHRoaXMgd2ls
bCBiZSB0YWtlbiBjYXJlIG9mIHRvby4NCiANCj4gDQo+IE9uIGEgYnJvYWRlciB2aWV3LCBJIHdv
dWxkIHN1Z2dlc3QgdGhhdCB5b3Ugc3RvcCB0aGlua2luZyBvZiB5b3VyIGRyaXZlcg0KPiBhcyBz
cGVjaWFsLiBDbGVhcmx5LCBpdCBpcyBkZWFyIHRvIHlvdSwgYXMgYXJlIGV2ZXJ5b25lJ3MgZHJp
dmVycyB0bw0KPiB0aGVtLCBidXQgaW4gdGhlIG92ZXJhbGwgZWNvc3lzdGVtIGl0IHNob3VsZCBm
aXQgaW4gd2l0aCBhIG1pbmltdW0gb2YNCj4gZnV6eiwgYW5kIG5vdCByZXF1aXJlIHNwZWNpYWwg
dG9vbHMgb3Igc3BlY2lhbCBwcm9ncmFtbWluZy4gVGhlIGN1c3RvbQ0KPiB3aXJlbGVzcyBldmVu
dHMsIGZvciBleGFtcGxlLCBhcmUgZW50aXJlbHkgdXNlbGVzcyB0byBleGlzdGluZw0KPiBhcHBs
aWNhdGlvbnMuIFNpbWlsYXJseSwgTkVUTElOS19NQVJWRUxMIChub3QgdG8gbWVudGlvbiB0aGUg
YWJ1c2Ugb2YNCj4gdGhlIG5ldGxpbmsgc3lzdGVtIGEgZHJpdmVyIHByZXNlbnRzIHRoYXQgdW5p
bGF0ZXJhbGx5IGRlY2xhcmVzIHRoYXQgYQ0KPiBnaXZlbiBuZXRsaW5rIElEIGlzIHJlc2VydmVk
IGZvciBpdCB3aXRob3V0IG1ha2luZyB0aGF0IGtub3duIHRvIHRoZQ0KPiBrZXJuZWwgYXQgbGFy
Z2UpLg0KDQpKb2huJ3MgcG9zdGVkIHBhdGNoZXMgdGhhdCByZW1vdmUgdGhlIHdpcmVsZXNzIGV2
ZW50cywgaW5jbHVkaW5nIE5FVExJTktfTUFSVkVMTC4NCg0KPiANCj4gDQo+IEFsbCB0aGlzIHNh
aWQsIHRob3VnaCwgZG9uJ3QgdGhpbmsgSSdtIGVudGlyZWx5IG5lZ2F0aXZlLiBJJ20gaGFwcHkN
Cj4gdGhlcmUncyBhIGRyaXZlciwgYW5kIHRoYXQgeW91J3JlIHN0YXJ0aW5nIHRvIGVuZ2FnZSB3
aXRoIHRoZSBjb21tdW5pdHkNCj4gKGFsdGhvdWdoIEkgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCB3
aHkgeW91ciByZXNwb25zZSB3YXMgcHJpdmF0ZSkuIEFuZA0KPiB0aGUgZHJpdmVyIGNvZGUgaXMg
YXQgbGVhc3QgY2xlYW4gLS0gSSBtYXkgbm90IGFncmVlIHdpdGggaG93IGl0IHdvcmtzLA0KPiBi
dXQgYXQgbGVhc3QgSSBkb24ndCBoYXZlIHRvIHJ1biBpdCB0aHJvdWdoIExpbmRlbnQgdG8gcHJv
dGVjdCBteXNlbGYNCj4gZnJvbSBleWUgY2FuY2VyIDopDQoNClRoYW5rcyEgV2Ugd2lsbCBjb250
aW51ZSBvdXIgZWZmb3J0cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3VibWl0dGVkIHBhdGNoZXMg
YXJlIGNsZWFuLg0KDQo+IA0KPiBNaW5kIHlvdSwgSSBoYXZlbid0IGRvbmUgYSBjZmc4MDIxMSBB
UEkgcmV2aWV3IGF0IGFsbC4gSSdsbCBkbyB0aGF0IHdoZW4NCj4gdGhlIGNvZGUgZmxvdyBpcyBl
YXNpZXIgdG8gZm9sbG93IGFuZCBub3QgaGlkZGVuIGluIG11bHRpcGxlIGFic3RyYWN0aW9uDQo+
IGxheWVycyBhbmQgImlvY3RscyIuDQoNCkkgYXBwcmVjaWF0ZSBpdC4gV2Ugd2lsbCBtYWtlIHRo
ZSBjaGFuZ2VzIGZpcnN0Lg0KDQpCZXN0IHJlZ2FyZHMsDQoNCkJpbmcNCg0KPiANCj4gam9oYW5u
ZXMNCg0K

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

* RE: [PATCH 0/3] mwifiex: remove some stuff...
  2010-12-04  0:34               ` Bing Zhao
@ 2010-12-06 19:14                 ` Bing Zhao
  0 siblings, 0 replies; 23+ messages in thread
From: Bing Zhao @ 2010-12-06 19:14 UTC (permalink / raw)
  To: John W. Linville, linux-wireless; +Cc: Amitkumar Karwar

Hi John,

> > >
> > > Not tested...YMMV...
> >
> > I'll test all the patches you posted. After that, I will start working on the items suggested by
> > Johannes.
> 
> I tested all 3 patches. They passed checkpatch.pl and sparse check. Some basic functions have been
> verified OK: scan, associate, ping, iperf. I will do some more tests (security, ad-hoc, etc.) next
> week.
> 

Tested-by: Amitkumar Karwar <akarwar@marvell.com>


Regards,

Bing


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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 12:53 ` Johannes Berg
                     ` (2 preceding siblings ...)
  2010-12-03 22:15   ` Bing Zhao
@ 2011-02-23  3:37   ` Bing Zhao
  2011-02-23  8:23     ` Johannes Berg
  2011-03-11  4:04   ` Bing Zhao
  4 siblings, 1 reply; 23+ messages in thread
From: Bing Zhao @ 2011-02-23  3:37 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Frank Huang, Greg KH,
	David S. Miller

SGkgSm9oYW5uZXMsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGlu
dXgtd2lyZWxlc3Mtb3duZXJAdmdlci5rZXJuZWwub3JnIFttYWlsdG86bGludXgtd2lyZWxlc3Mt
b3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YNCj4gSm9oYW5uZXMgQmVyZw0KPiBT
ZW50OiBGcmlkYXksIERlY2VtYmVyIDAzLCAyMDEwIDQ6NTMgQU0NCj4gVG86IEJpbmcgWmhhbw0K
PiBDYzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnOyBKb2huIFcuIExpbnZpbGxlOyBE
YW4gV2lsbGlhbXM7IERhdmlkIFdvb2Rob3VzZTsgQW1pdGt1bWFyIEthcndhcjsNCj4gS2lyYW4g
RGl2ZWthcjsgR3JlZyBLSDsgRGF2aWQgUy4gTWlsbGVyDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
MDAvMzFdIHdpcmVsZXNzOiBNYXJ2ZWxsIG13aWZpZXggZHJpdmVyIGZvciBTRDg3ODcNCj4gDQo+
IE9uIFdlZCwgMjAxMC0xMi0wMSBhdCAxNzozMSAtMDgwMCwgQmluZyBaaGFvIHdyb3RlOg0KPiA+
IFRoZSBtd2lmaWV4IGRyaXZlciBmb3IgTWFydmVsbCA4MDIuMTFuIGNoaXBzZXQgU0Q4Nzg3IGlz
IGF2YWlsYWJsZSBhdA0KPiA+IGdpdDovL2dpdC5tYXJ2ZWxsLmNvbS9td2lmaWV4LmdpdC4gQm90
aCBTVEEgbW9kZSBhbmQgTW9iaWxlIGhvdHNwb3QNCj4gPiBtb2RlIGFyZSBzdXBwb3J0ZWQuDQo+
ID4NCj4gPiBnaXQgcHVsbCBnaXQ6Ly9naXQubWFydmVsbC5jb20vbXdpZmlleC5naXQgbWFzdGVy
DQo+IA0KPiBQbGVhc2UgcG9zdCBwYXRjaGVzLCBub3QgZ2l0IHRyZWVzLg0KPiANCj4gQnV0IHNp
bmNlIEpvaG4gaXMgaG9sZGluZyB1cyBzb21ld2hhdCBob3N0YWdlIGJ5IHNheWluZyBoZSdsbCBj
b25zaWRlcg0KPiBtZXJnaW5nIHRoaXMsIGFuZCBhcHBhcmVudGx5IHlvdSBkb24ndCBoYXZlIHRo
ZSB0YXN0ZSB0byBldmVuIGNvbnNpZGVyDQo+IHRoZSByZXZpZXcgY29tbWVudHMgeW91IGhhdmUg
Z290dGVuIGJlZm9yZSwgSSB0b29rIGEgYnJpZWYgbG9vayB0bw0KPiAqcHJvdmUqIHRoYXQgdGhp
cyBkcml2ZXIgY2Fubm90IGJlIG1lcmdlZCBhcyBpcy4NCj4gDQo+IA0KPiBIZXJlJ3MgYSBzaG9y
dCBsaXN0IG9mIHRoaW5ncyB0byBmaXg6DQo+ICAqIF9fcGFja2VkDQo+ICAqIEVOVEVSL0xFQVZF
IG11c3QgZ28NCj4gICogZW51bSBtd2lmaWV4X3N0YXR1cyBtdXN0IGdvIC0tIHVzZSBlcnJubw0K
PiAgKiBwcml2YXRlIGlvY3RscyB3ZXJlIGdyYW5kZmF0aGVyZWQgaW4sDQo+ICAgIGJ1dCBhcmVu
J3QgYWxsb3dlZCBpbiBuZXcgZHJpdmVycw0KPiAgKiBkbyB5b3UgcmVhbGx5IG5lZWQgeW91ciBv
d24gY3J5cHRvIG1vZGUgZGVmaW5pdGlvbnM/DQo+ICAqIHlvdXIgcHNldWRvLWtlcm5lbGRvYyBj
b21tZW50cyAiLyoqIiBkb24ndCBjb25mb3JtDQo+ICAgIHRvIHRoZSByaWdodCBmb3JtYXQNCj4g
ICogcHJpdmF0ZSBsb2NraW5nIHdyYXBwZXJzIGFyZSBub3QgYWxsb3dlZCAobXdpZmlleF9zcGlu
X2xvY2sgZXRjKQ0KPiAgKiBwcml2YXRlIGRlYnVnZ2luZyBsaWtlIFBSSU5UTSBpcyBub3QgYWxs
b3dlZA0KDQpJcyBpdCBPSyBpZiBJIGNoYW5nZSBQUklOVE0gKGRlYnVnZ2luZyBwcmludGspIHRv
IHNvbWV0aGluZyBsaWtlIElXTF9ERUJVR18/DQoNCjxkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3
aWZpL2l3bC1kZWJ1Zy5oPg0KLi4uLi4uDQojZGVmaW5lIElXTF9ERUJVR19JTkZPKHAsIGYsIGEu
Li4pICAgICAgSVdMX0RFQlVHKHAsIElXTF9ETF9JTkZPLCBmLCAjIyBhKQ0KI2RlZmluZSBJV0xf
REVCVUdfTUFDODAyMTEocCwgZiwgYS4uLikgIElXTF9ERUJVRyhwLCBJV0xfRExfTUFDODAyMTEs
IGYsICMjIGEpDQojZGVmaW5lIElXTF9ERUJVR19NQUNEVU1QKHAsIGYsIGEuLi4pICAgSVdMX0RF
QlVHKHAsIElXTF9ETF9NQUNEVU1QLCBmLCAjIyBhKQ0KI2RlZmluZSBJV0xfREVCVUdfVEVNUChw
LCBmLCBhLi4uKSAgICAgIElXTF9ERUJVRyhwLCBJV0xfRExfVEVNUCwgZiwgIyMgYSkNCiNkZWZp
bmUgSVdMX0RFQlVHX1NDQU4ocCwgZiwgYS4uLikgICAgICBJV0xfREVCVUcocCwgSVdMX0RMX1ND
QU4sIGYsICMjIGEpDQojZGVmaW5lIElXTF9ERUJVR19SWChwLCBmLCBhLi4uKSAgICAgICAgSVdM
X0RFQlVHKHAsIElXTF9ETF9SWCwgZiwgIyMgYSkNCiNkZWZpbmUgSVdMX0RFQlVHX1RYKHAsIGYs
IGEuLi4pICAgICAgICBJV0xfREVCVUcocCwgSVdMX0RMX1RYLCBmLCAjIyBhKQ0KI2RlZmluZSBJ
V0xfREVCVUdfSVNSKHAsIGYsIGEuLi4pICAgICAgIElXTF9ERUJVRyhwLCBJV0xfRExfSVNSLCBm
LCAjIyBhKQ0KLi4uLi4uDQoNCk9yLCB5b3Ugd2FudCBtZSB0byByZW1vdmUgUFJJTlRNIHN0dWZm
IGNvbXBsZXRlbHk/DQoNClRoYW5rcywNCg0KQmluZw0KDQo+ICAqIHRoZXJlJ3MgZXhhY3RseSBv
bmUgc3BhY2UgYWZ0ZXIgIiNpbmNsdWRlIg0KPiAgKiBzdHJ1Y3QgZXRoXzgwM19oZHI/IGFyZSB5
b3Ugc2VyaW91cz8gYW5kIHlvdSBldmVuIGhhdmUNCj4gICAgaXQgdHdpY2U6IHN0cnVjdCBldGhf
SUlfaGRyDQo+ICAqIGVudW0gaWVlZV90eXBlc19lbGVtZW50aWRfZSBtdXN0IGdvDQo+ICAqIHNp
bWlsYXJseSwgYWxtb3N0IGFsbCBvZiBpZWVlLmgNCj4gICogbm8gYml0ZmllbGRzIGFuZCBCSUdf
RU5ESUFOX0JJVEZJRUxEIGFsbG93ZWQNCj4gICogbm90IGFsbCBhbGxvY2F0aW9ucyBhcmUgR0ZQ
X0FUT01JQywgdXNlIHdpc2VseSBhbmQNCj4gICAgR0ZQX0tFUk5FTCBpbiBtb3N0IHBsYWNlcw0K
PiAgKiBhIHdpZmkgZHJpdmVyIHRoYXQncyBkb2luZyBzdHVmZiB3aXRoIHNvY2tldHMgKG5sX3Nr
LCBza19zb2NrZXQpPw0KPiAgICBleHBsYWluLCBpbiBNVUNIIGRldGFpbCAob3IgcHJlZmVyYWJs
eSBqdXN0IGdldCByaWQgb2YgaXQpDQo+ICAqIHRoZXJlJ3MgZGVidWdmc19yZW1vdmVfcmVjdXJz
aXZlDQo+ICAqIHNvbWUgZnVuY3Rpb25zIGxpa2UgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGli
bGUgbmVlZCB0byBiZSBicm9rZW4NCj4gICAgaW50byBzbWFsbGVyIG9uZXMgdG8gYXZvaWQgdGhl
IGNyYXAgaW5kZW50YXRpb24gdGhleSBoYXZlDQo+ICAqIG13aWZpZXhfdWFwX2FwX2NmZ19wYXJz
ZV9kYXRhLiBNdXN0IEkgc2F5IG1vcmU/DQo+ICAqIHN0cnVjdCBtd2lmaWV4X2J1ZmZlciAqbWJ1
Zj8gSXMgdGhpcyBhIEJTRCBkcml2ZXI/IFdlIGhhdmUgU0tCcywgZ2V0DQo+ICAgIHJpZCBvZiB0
aGlzLiAoT2ggYW5kIHNrYnMgaGF2ZSBhIENCKQ0KPiAgKiBtd2lmaWV4X2luaXRfbG9jay9td2lm
aWV4X2ZyZWVfbG9jayAtLSBJJ2QgbGF1Z2ggaW4geW91ciBnZW5lcmFsDQo+ICAgIGRpcmVjdGlv
biBpZiBpdCB3YXNuJ3Qgc28gc2FkDQo+ICAqIG13aWZpZXhfdXRpbF9wZWVrX2xpc3QgZXRjLjog
bGVhcm4gYWJvdXQgbGlzdC5oDQo+ICAqIG13aWZpZXhfaW5pdF90aW1lciAtLSBzdGlsbCBzYWQs
IGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgdGltZXJzPyBqdXN0DQo+ICAgIGxpa2Ugc3BpbmxvY2tz
LCB0aGV5IGNhbiBiZSBlbWJlZGRlZCBhbmQgbWFrZSB5b3VyIGNvZGUgc2ltcGxlcg0KPiANCj4g
T2sgZ29vZCBlbm91Z2gsIHRoYXQgc2hvdWxkIGtlZXAgeW91IGJ1c3kgZm9yIGEgd2hpbGUuLi4N
Cj4gDQo+IFRoZSBhYm92ZSBpcyBtaWdodCBiZSBhIGdvb2QgYmFzaXMgZm9yIGEgVE9ETyBmaWxl
IGZvciBzdGFnaW5nLi4uDQo+IA0KPiBqb2hhbm5lcw0KPiANCj4gLS0NCj4gVG8gdW5zdWJzY3Jp
YmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXdpcmVs
ZXNzIiBpbg0KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVs
Lm9yZw0KPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21h
am9yZG9tby1pbmZvLmh0bWwNCg==

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2011-02-23  3:37   ` Bing Zhao
@ 2011-02-23  8:23     ` Johannes Berg
  2011-02-23 19:26       ` Bing Zhao
  0 siblings, 1 reply; 23+ messages in thread
From: Johannes Berg @ 2011-02-23  8:23 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Frank Huang, Greg KH,
	David S. Miller

On Tue, 2011-02-22 at 19:37 -0800, Bing Zhao wrote:

> Is it OK if I change PRINTM (debugging printk) to something like IWL_DEBUG_?
> 
> <drivers/net/wireless/iwlwifi/iwl-debug.h>
> ......
> #define IWL_DEBUG_INFO(p, f, a...)      IWL_DEBUG(p, IWL_DL_INFO, f, ## a)
> #define IWL_DEBUG_MAC80211(p, f, a...)  IWL_DEBUG(p, IWL_DL_MAC80211, f, ## a)
> #define IWL_DEBUG_MACDUMP(p, f, a...)   IWL_DEBUG(p, IWL_DL_MACDUMP, f, ## a)
> #define IWL_DEBUG_TEMP(p, f, a...)      IWL_DEBUG(p, IWL_DL_TEMP, f, ## a)
> #define IWL_DEBUG_SCAN(p, f, a...)      IWL_DEBUG(p, IWL_DL_SCAN, f, ## a)
> #define IWL_DEBUG_RX(p, f, a...)        IWL_DEBUG(p, IWL_DL_RX, f, ## a)
> #define IWL_DEBUG_TX(p, f, a...)        IWL_DEBUG(p, IWL_DL_TX, f, ## a)
> #define IWL_DEBUG_ISR(p, f, a...)       IWL_DEBUG(p, IWL_DL_ISR, f, ## a)
> ......
> 
> Or, you want me to remove PRINTM stuff completely?

Yeah, I know that's there in iwlwifi too ... I don't like it, but I
couldn't yet get it removed or replaced by newer infrastructure (which
didn't exist when this was written). Can I convince you to at least look
at pr_debug based things?

johannes


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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2011-02-23  8:23     ` Johannes Berg
@ 2011-02-23 19:26       ` Bing Zhao
  0 siblings, 0 replies; 23+ messages in thread
From: Bing Zhao @ 2011-02-23 19:26 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Frank Huang, Greg KH,
	David S. Miller

SGkgSm9oYW5uZXMsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGlu
dXgtd2lyZWxlc3Mtb3duZXJAdmdlci5rZXJuZWwub3JnIFttYWlsdG86bGludXgtd2lyZWxlc3Mt
b3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YNCj4gSm9oYW5uZXMgQmVyZw0KPiBT
ZW50OiBXZWRuZXNkYXksIEZlYnJ1YXJ5IDIzLCAyMDExIDEyOjI0IEFNDQo+IFRvOiBCaW5nIFpo
YW8NCj4gQ2M6IGxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZzsgSm9obiBXLiBMaW52aWxs
ZTsgRGFuIFdpbGxpYW1zOyBEYXZpZCBXb29kaG91c2U7IEFtaXRrdW1hciBLYXJ3YXI7DQo+IEtp
cmFuIERpdmVrYXI7IEZyYW5rIEh1YW5nOyBHcmVnIEtIOyBEYXZpZCBTLiBNaWxsZXINCj4gU3Vi
amVjdDogUkU6IFtQQVRDSCAwMC8zMV0gd2lyZWxlc3M6IE1hcnZlbGwgbXdpZmlleCBkcml2ZXIg
Zm9yIFNEODc4Nw0KPiANCj4gT24gVHVlLCAyMDExLTAyLTIyIGF0IDE5OjM3IC0wODAwLCBCaW5n
IFpoYW8gd3JvdGU6DQo+IA0KPiA+IElzIGl0IE9LIGlmIEkgY2hhbmdlIFBSSU5UTSAoZGVidWdn
aW5nIHByaW50aykgdG8gc29tZXRoaW5nIGxpa2UgSVdMX0RFQlVHXz8NCj4gPg0KPiA+IDxkcml2
ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oPg0KPiA+IC4uLi4uLg0KPiA+ICNk
ZWZpbmUgSVdMX0RFQlVHX0lORk8ocCwgZiwgYS4uLikgICAgICBJV0xfREVCVUcocCwgSVdMX0RM
X0lORk8sIGYsICMjIGEpDQo+ID4gI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEocCwgZiwgYS4u
LikgIElXTF9ERUJVRyhwLCBJV0xfRExfTUFDODAyMTEsIGYsICMjIGEpDQo+ID4gI2RlZmluZSBJ
V0xfREVCVUdfTUFDRFVNUChwLCBmLCBhLi4uKSAgIElXTF9ERUJVRyhwLCBJV0xfRExfTUFDRFVN
UCwgZiwgIyMgYSkNCj4gPiAjZGVmaW5lIElXTF9ERUJVR19URU1QKHAsIGYsIGEuLi4pICAgICAg
SVdMX0RFQlVHKHAsIElXTF9ETF9URU1QLCBmLCAjIyBhKQ0KPiA+ICNkZWZpbmUgSVdMX0RFQlVH
X1NDQU4ocCwgZiwgYS4uLikgICAgICBJV0xfREVCVUcocCwgSVdMX0RMX1NDQU4sIGYsICMjIGEp
DQo+ID4gI2RlZmluZSBJV0xfREVCVUdfUlgocCwgZiwgYS4uLikgICAgICAgIElXTF9ERUJVRyhw
LCBJV0xfRExfUlgsIGYsICMjIGEpDQo+ID4gI2RlZmluZSBJV0xfREVCVUdfVFgocCwgZiwgYS4u
LikgICAgICAgIElXTF9ERUJVRyhwLCBJV0xfRExfVFgsIGYsICMjIGEpDQo+ID4gI2RlZmluZSBJ
V0xfREVCVUdfSVNSKHAsIGYsIGEuLi4pICAgICAgIElXTF9ERUJVRyhwLCBJV0xfRExfSVNSLCBm
LCAjIyBhKQ0KPiA+IC4uLi4uLg0KPiA+DQo+ID4gT3IsIHlvdSB3YW50IG1lIHRvIHJlbW92ZSBQ
UklOVE0gc3R1ZmYgY29tcGxldGVseT8NCj4gDQo+IFllYWgsIEkga25vdyB0aGF0J3MgdGhlcmUg
aW4gaXdsd2lmaSB0b28gLi4uIEkgZG9uJ3QgbGlrZSBpdCwgYnV0IEkNCj4gY291bGRuJ3QgeWV0
IGdldCBpdCByZW1vdmVkIG9yIHJlcGxhY2VkIGJ5IG5ld2VyIGluZnJhc3RydWN0dXJlICh3aGlj
aA0KPiBkaWRuJ3QgZXhpc3Qgd2hlbiB0aGlzIHdhcyB3cml0dGVuKS4gQ2FuIEkgY29udmluY2Ug
eW91IHRvIGF0IGxlYXN0IGxvb2sNCj4gYXQgcHJfZGVidWcgYmFzZWQgdGhpbmdzPw0KDQpUaGFu
a3MgZm9yIHlvdXIgc3VnZ2VzdGlvbi4NClllcywgSSB3aWxsIHVzZSBwcl9kZWJ1ZyBiYXNlZCBB
UEkuDQoNCkJpbmcNCg0KPiANCj4gam9oYW5uZXMNCj4gDQo+IC0tDQo+IFRvIHVuc3Vic2NyaWJl
IGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC13aXJlbGVz
cyIgaW4NCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5v
cmcNCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpv
cmRvbW8taW5mby5odG1sDQo=

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2010-12-03 12:53 ` Johannes Berg
                     ` (3 preceding siblings ...)
  2011-02-23  3:37   ` Bing Zhao
@ 2011-03-11  4:04   ` Bing Zhao
  2011-03-11  8:45     ` Johannes Berg
  4 siblings, 1 reply; 23+ messages in thread
From: Bing Zhao @ 2011-03-11  4:04 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Greg KH, David S. Miller

SGkgSm9oYW5uZXMsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGlu
dXgtd2lyZWxlc3Mtb3duZXJAdmdlci5rZXJuZWwub3JnIFttYWlsdG86bGludXgtd2lyZWxlc3Mt
b3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YNCj4gSm9oYW5uZXMgQmVyZw0KPiBT
ZW50OiBGcmlkYXksIERlY2VtYmVyIDAzLCAyMDEwIDQ6NTMgQU0NCj4gVG86IEJpbmcgWmhhbw0K
PiBDYzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnOyBKb2huIFcuIExpbnZpbGxlOyBE
YW4gV2lsbGlhbXM7IERhdmlkIFdvb2Rob3VzZTsgQW1pdGt1bWFyIEthcndhcjsNCj4gS2lyYW4g
RGl2ZWthcjsgR3JlZyBLSDsgRGF2aWQgUy4gTWlsbGVyDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
MDAvMzFdIHdpcmVsZXNzOiBNYXJ2ZWxsIG13aWZpZXggZHJpdmVyIGZvciBTRDg3ODcNCj4gDQo+
IE9uIFdlZCwgMjAxMC0xMi0wMSBhdCAxNzozMSAtMDgwMCwgQmluZyBaaGFvIHdyb3RlOg0KPiA+
IFRoZSBtd2lmaWV4IGRyaXZlciBmb3IgTWFydmVsbCA4MDIuMTFuIGNoaXBzZXQgU0Q4Nzg3IGlz
IGF2YWlsYWJsZSBhdA0KPiA+IGdpdDovL2dpdC5tYXJ2ZWxsLmNvbS9td2lmaWV4LmdpdC4gQm90
aCBTVEEgbW9kZSBhbmQgTW9iaWxlIGhvdHNwb3QNCj4gPiBtb2RlIGFyZSBzdXBwb3J0ZWQuDQo+
ID4NCj4gPiBnaXQgcHVsbCBnaXQ6Ly9naXQubWFydmVsbC5jb20vbXdpZmlleC5naXQgbWFzdGVy
DQo+IA0KPiBQbGVhc2UgcG9zdCBwYXRjaGVzLCBub3QgZ2l0IHRyZWVzLg0KPiANCj4gQnV0IHNp
bmNlIEpvaG4gaXMgaG9sZGluZyB1cyBzb21ld2hhdCBob3N0YWdlIGJ5IHNheWluZyBoZSdsbCBj
b25zaWRlcg0KPiBtZXJnaW5nIHRoaXMsIGFuZCBhcHBhcmVudGx5IHlvdSBkb24ndCBoYXZlIHRo
ZSB0YXN0ZSB0byBldmVuIGNvbnNpZGVyDQo+IHRoZSByZXZpZXcgY29tbWVudHMgeW91IGhhdmUg
Z290dGVuIGJlZm9yZSwgSSB0b29rIGEgYnJpZWYgbG9vayB0bw0KPiAqcHJvdmUqIHRoYXQgdGhp
cyBkcml2ZXIgY2Fubm90IGJlIG1lcmdlZCBhcyBpcy4NCj4gDQo+IA0KPiBIZXJlJ3MgYSBzaG9y
dCBsaXN0IG9mIHRoaW5ncyB0byBmaXg6DQo+ICAqIF9fcGFja2VkDQo+ICAqIEVOVEVSL0xFQVZF
IG11c3QgZ28NCj4gICogZW51bSBtd2lmaWV4X3N0YXR1cyBtdXN0IGdvIC0tIHVzZSBlcnJubw0K
PiAgKiBwcml2YXRlIGlvY3RscyB3ZXJlIGdyYW5kZmF0aGVyZWQgaW4sDQo+ICAgIGJ1dCBhcmVu
J3QgYWxsb3dlZCBpbiBuZXcgZHJpdmVycw0KPiAgKiBkbyB5b3UgcmVhbGx5IG5lZWQgeW91ciBv
d24gY3J5cHRvIG1vZGUgZGVmaW5pdGlvbnM/DQo+ICAqIHlvdXIgcHNldWRvLWtlcm5lbGRvYyBj
b21tZW50cyAiLyoqIiBkb24ndCBjb25mb3JtDQo+ICAgIHRvIHRoZSByaWdodCBmb3JtYXQNCj4g
ICogcHJpdmF0ZSBsb2NraW5nIHdyYXBwZXJzIGFyZSBub3QgYWxsb3dlZCAobXdpZmlleF9zcGlu
X2xvY2sgZXRjKQ0KPiAgKiBwcml2YXRlIGRlYnVnZ2luZyBsaWtlIFBSSU5UTSBpcyBub3QgYWxs
b3dlZA0KPiAgKiB0aGVyZSdzIGV4YWN0bHkgb25lIHNwYWNlIGFmdGVyICIjaW5jbHVkZSINCj4g
ICogc3RydWN0IGV0aF84MDNfaGRyPyBhcmUgeW91IHNlcmlvdXM/IGFuZCB5b3UgZXZlbiBoYXZl
DQo+ICAgIGl0IHR3aWNlOiBzdHJ1Y3QgZXRoX0lJX2hkcg0KPiAgKiBlbnVtIGllZWVfdHlwZXNf
ZWxlbWVudGlkX2UgbXVzdCBnbw0KPiAgKiBzaW1pbGFybHksIGFsbW9zdCBhbGwgb2YgaWVlZS5o
DQo+ICAqIG5vIGJpdGZpZWxkcyBhbmQgQklHX0VORElBTl9CSVRGSUVMRCBhbGxvd2VkDQo+ICAq
IG5vdCBhbGwgYWxsb2NhdGlvbnMgYXJlIEdGUF9BVE9NSUMsIHVzZSB3aXNlbHkgYW5kDQo+ICAg
IEdGUF9LRVJORUwgaW4gbW9zdCBwbGFjZXMNCj4gICogYSB3aWZpIGRyaXZlciB0aGF0J3MgZG9p
bmcgc3R1ZmYgd2l0aCBzb2NrZXRzIChubF9zaywgc2tfc29ja2V0KT8NCj4gICAgZXhwbGFpbiwg
aW4gTVVDSCBkZXRhaWwgKG9yIHByZWZlcmFibHkganVzdCBnZXQgcmlkIG9mIGl0KQ0KPiAgKiB0
aGVyZSdzIGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZQ0KPiAgKiBzb21lIGZ1bmN0aW9ucyBsaWtl
IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlIG5lZWQgdG8gYmUgYnJva2VuDQo+ICAgIGlu
dG8gc21hbGxlciBvbmVzIHRvIGF2b2lkIHRoZSBjcmFwIGluZGVudGF0aW9uIHRoZXkgaGF2ZQ0K
PiAgKiBtd2lmaWV4X3VhcF9hcF9jZmdfcGFyc2VfZGF0YS4gTXVzdCBJIHNheSBtb3JlPw0KPiAg
KiBzdHJ1Y3QgbXdpZmlleF9idWZmZXIgKm1idWY/IElzIHRoaXMgYSBCU0QgZHJpdmVyPyBXZSBo
YXZlIFNLQnMsIGdldA0KPiAgICByaWQgb2YgdGhpcy4gKE9oIGFuZCBza2JzIGhhdmUgYSBDQikN
Cj4gICogbXdpZmlleF9pbml0X2xvY2svbXdpZmlleF9mcmVlX2xvY2sgLS0gSSdkIGxhdWdoIGlu
IHlvdXIgZ2VuZXJhbA0KPiAgICBkaXJlY3Rpb24gaWYgaXQgd2Fzbid0IHNvIHNhZA0KPiAgKiBt
d2lmaWV4X3V0aWxfcGVla19saXN0IGV0Yy46IGxlYXJuIGFib3V0IGxpc3QuaA0KPiAgKiBtd2lm
aWV4X2luaXRfdGltZXIgLS0gc3RpbGwgc2FkLCBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHRpbWVy
cz8ganVzdA0KPiAgICBsaWtlIHNwaW5sb2NrcywgdGhleSBjYW4gYmUgZW1iZWRkZWQgYW5kIG1h
a2UgeW91ciBjb2RlIHNpbXBsZXINCg0KRHVyaW5nIHRoZSBwYXN0IDMgbW9udGhzLCB3ZSBoYXZl
IG1hZGUgNTYgbXdpZmlleCBwYXRjaGVzIChsaXN0ZWQgYmVsb3cpIHNpbmNlIHRoZSBpbml0aWFs
IG13aWZpZXggZHJpdmVyIHN1Ym1pc3Npb24uIE1vc3Qgb2YgdGhlc2UgcGF0Y2hlcyBhZGRyZXNz
IHRoZSBhYm92ZSBpc3N1ZXM7IGFuZCB0aGUgaW9jdGwgbXVsdGlwbGUgYWJzdHJhY3Rpb24gbGF5
ZXJzIGFuZCB0aGUgc3RhdGljIGZvcndhcmQgZGVjbGFyYXRpb25zIGFzIHlvdSBjb21tZW50ZWQg
aW4gYW5vdGhlciBlLW1haWwuIFNvbWUgb3RoZXIgcGF0Y2hlcyBhcmUgZm9yIGNvZGUgY2xlYW51
cHMsIG1haW5seSBjb2Rpbmcgc3R5bGUuDQoNCkFueSBjb21tZW50cyBmcm9tIHlvdSwgSm9obiwg
b3IgYW55b25lIGVsc2UsIGFyZSBhbHdheXMgd2VsY29tZS4NCg0KQWdhaW4sIHRoYW5rIHlvdSBh
bGwgZm9yIHlvdXIgaGVscHMgc28gdGhhdCBJIGNhbiBpbXByb3ZlIHRoZSBtd2lmaWV4IGRyaXZl
ciBhIGxvdCENCg0KQmVzdCByZWdhcmRzLA0KDQpCaW5nDQoNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCkFtaXRrdW1hciBLYXJ3YXIgKDIzKToN
CiAgbXdpZmlleDogcmVtb3ZlIHNvbWUgZWxlbWVudCBJRCdzIGRlZmluaXRpb25zDQogIG13aWZp
ZXg6IHJlbW92ZSBzdHJ1Y3QgaWVlZXR5cGVzX3N1Yl9iYW5kX3NldCBmcm9tIGllZWUuaA0KICBt
d2lmaWV4OiByZW1vdmUgYml0ZmllbGRzIGFuZCBfX0JJR19FTkRJQU5fQklURklFTEQNCiAgbXdp
ZmlleDogcmVtb3ZlIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBzcGluX2xvY2svc3Bpbl91bmxvY2sN
CiAgbXdpZmlleDogbW9kaWZ5IHNldF9kZWZhdWx0X2tleSgpIHByb3RvdHlwZQ0KICBtd2lmaWV4
OiB1c2UgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKCkNCiAgbXdpZmlleDogc29sdmUga2VybmVs
IGR1bXAgaXNzdWUgZm9yIGRlYnVnZnMgY29tbWFuZCAnZGVidWcnDQogIG13aWZpZXg6IHJlbW92
ZSBzZXQgb3BlcmF0aW9uIGZvciBkZWJ1Z2ZzIGNvbW1hbmQgJ2RlYnVnJw0KICBtd2lmaWV4OiBy
ZW1vdmUgc29tZSBjcnlwdG8gZGVmaW5pdGlvbnMNCiAgbXdpZmlleDogcmVtb3ZlIGxpbmtlZCBs
aXN0IGltcGxlbWVudGF0aW9uDQogIG13aWZpZXg6IHJlbW92ZSBkdXBsaWNhdGVkIE5VTEwgY2hl
Y2tzDQogIG13aWZpZXg6IHVzZSBtb2RpZmllZCBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVu
Y3koKSBBUEkNCiAgbXdpZmlleDogZml4IGxpc3RfZGVsIGNvcnJ1cHRpb24gd2hpbGUgdW5sb2Fk
aW5nIG1vZHVsZXMNCiAgbXdpZmlleDogY2xlYW51cCBjb21tYW5kIGlvY3RscyBhbmQgYWJzdHJh
Y3Rpb24gbGF5ZXJzDQogIG13aWZpZXg6IHJlbW92ZSBlbnVtIG13aWZpZXhfc3RhdHVzDQogIG13
aWZpZXg6IHJlbW92ZSBFTlRFUiBhbmQgTEVBVkUNCiAgbXdpZmlleDogcmVtb3ZlIHVudXNlZC91
bm5lY2Vzc2FyeSByZXQgdmFyaWFibGVzIGFuZCB1c2FnZSBvZiBnb3RvDQogIG13aWZpZXg6IHJl
cGxhY2UgcHNldWRvLWtlcm5lbGRvYyBjb21tZW50cy4NCiAgbXdpZmlleDogYnJlYWsgc29tZSBm
dW5jdGlvbnMgaW50byBzbWFsbGVyIG9uZXMNCiAgbXdpZmlleDogY29kZSBjbGVhbnVwOiBzYXZl
IHNvbWUgZXh0cmEgbGluZXMNCiAgbXdpZmlleDogcmVtb3ZlIHJlZHVuZGFudCB2YXJpYWJsZSB1
cGxkX2xlbg0KICBtd2lmaWV4OiByZW1vdmUgdW5uZWNlc3NvcnkgZXh0ZXJuYWwgZnVuY3Rpb24g
ZGVjbGFyYXRpb25zDQogIG13aWZpZXg6IHVzZSBkeW5hbWljIGFsbG9jYXRpb24gZm9yIGxhcmdl
IHNpemUgc3RydWN0dXJlDQoNCkJpbmcgWmhhbyAoMjApOg0KICBtd2lmaWV4OiByZXBsYWNlIHN0
cnVjdCBldGhfSUlfaGRyIHdpdGggZXRoaGRyDQogIG13aWZpZXg6IHJlcGxhY2Ugc3RydWN0IGV0
aF84MDNfaGRyIHdpdGggZXRoaGRyDQogIG13aWZpZXg6IHJlbW92ZSBzdHJ1Y3QgbXdpZmlleF9k
cnZfdGltZXIgYW5kIGFzc29jaWF0ZWQNCiAgbXdpZmlleDogcmVwbGFjZSBzdHJ1Y3QgaWVlZV9o
dGluZm8gd2l0aCBpZWVlODAyMTFfaHRfaW5mbw0KICBtd2lmaWV4OiByZW1vdmUgc3RydWN0IGll
ZWVfaHRjYXANCiAgbXdpZmlleDogcmVtb3ZlIHN0cnVjdCBpZWVlX3R5cGVzX2VycF9pbmZvDQog
IG13aWZpZXg6IHJlbW92ZSBzdHJ1Y3QgaWVlZV90eXBlc19odGluZm8NCiAgbXdpZmlleDogcmVt
b3ZlIHN0cnVjdCBpZWVlX3R5cGVzX2h0Y2FwDQogIG13aWZpZXg6IHJlbW92ZSBzdHJ1Y3QgaWVl
ZV9leHRjYXAgYW5kIGllZWVfdHlwZXNfZXh0Y2FwDQogIG13aWZpZXg6IHJlbW92ZSBzdGF0aWMg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMNCiAgbXdpZmlleDogbWFrZSBhIHNob3J0ZXIgbmFtZSBvZiBo
b3RwbHVnX2RldmljZQ0KICBtd2lmaWV4OiByZW1vdmUgUFJJTlRNL0hFWERVTVAgYW5kIGFzc29j
aWF0ZWQNCiAgbXdpZmlleDogcmVtb3ZlIHN0cnVjdCBpZWVlX2Jzc2NvXzIwNDANCiAgbXdpZmll
eDogcmVtb3ZlIHN0cnVjdCBpZWVlX3R5cGVzXzIwNDBic3Njbw0KICBtd2lmaWV4OiByZW1vdmUg
Q09VTlRSWV9DT0RFX0xFTg0KICBtd2lmaWV4OiByZW1vdmUgTVdJRklFWF9NQUNfQUREUl9MRU5H
VEgNCiAgbXdpZmlleDogdXNlIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4NCiAgbXdpZmlleDogcmVt
b3ZlIHVudXNlZCBtYWNyb3MNCiAgbXdpZmlleDogcmVtb3ZlIHVubmVjZXNzYXJ5IG13aWZpZXhf
Z2V0X2Fzc29jX3N0YXR1cygpDQogIG13aWZpZXg6IHJlbW92ZSB1bm5lY2Vzc2FyeSB0eXBlIGNh
c3RpbmcNCg0KSm9obiBXLiBMaW52aWxsZSAoMyk6DQogIG13aWZpZXg6IHJlbW92ZSB1QVAgZnVu
Y3Rpb25hbGl0eQ0KICBtd2lmaWV4OiByZW1vdmUgTkVUTElOS19NQVJWRUxMIGFuZCBhc3NvY2lh
dGUNCiAgbXdpZmlleDogcmVtb3ZlIHF1ZXN0aW9uYWJsZSB3aXJlbGVzc19zZW5kX2V2ZW50DQoN
CktpcmFuIERpdmVrYXIgKDYpOg0KICBtd2lmaWV4OiBjaGFuZ2UgaW5jb3JyZWN0IEdGUF9BVE9N
SUMgbWVtb3J5IGFsbG9jYXRpb24NCiAgbXdpZmlleDogcmVtb3ZlIHRpbWVyIHdyYXBwZXIgZnVu
Y3Rpb25zDQogIG13aWZpZXg6IGtlZXAgZXhhY3RseSBvbmUgc3BhY2UgYWZ0ZXIgI2luY2x1ZGUN
CiAgbXdpZmlleDogY29udmVydCB1c2VzIG9mIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB0byBf
X3BhY2tlZA0KICBtd2lmaWV4OiByZW1vdmUgdW4tbmVlZGVkIGZ1bmN0aW9ucw0KICBtd2lmaWV4
OiByZW1vdmUgcmVkdW5kYW50IGV2ZW50IGhhbmRsaW5nDQoNCk1hcmMgWWFuZyAoMSk6DQogIG13
aWZpZXg6IHJlbW92ZSBvciBhZGQgYnJhY2VzIHdoZXJlIGFwcGxpY2FibGUNCg0KWW9nZXNoIEFz
aG9rIFBvd2FyICgzKToNCiAgbXdpZmlleDogcmVtb3ZlIHN0cnVjdCBtd2lmaWV4X2J1ZmZlciBh
bmQgYXNzb2NpYXRlZA0KICBtd2lmaWV4OiByZWFycmFuZ2UgY29kZSBmb3IgYmV0dGVyIHJlYWRh
YmlsaXR5DQogIG13aWZpZXg6IHJlbW92ZSBpZWVlLmgNCg0KDQogZHJpdmVycy9uZXQvd2lyZWxl
c3MvbXdpZmlleC8xMW4uYyAgICAgICAgICAgfCAgOTg4ICsrLS0tDQogZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbXdpZmlleC8xMW4uaCAgICAgICAgICAgfCAgMTYyICstDQogZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbXdpZmlleC8xMW5fYWdnci5jICAgICAgfCAgMzk3ICstDQogZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbXdpZmlleC8xMW5fYWdnci5oICAgICAgfCAgIDExICstDQogZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMgfCAgNTYyICstLQ0KIGRyaXZlcnMvbmV0L3dp
cmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5oIHwgICA0NSArLQ0KIGRyaXZlcnMvbmV0L3dp
cmVsZXNzL213aWZpZXgvTWFrZWZpbGUgICAgICAgIHwgICAgNCAtDQogZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbXdpZmlleC9SRUFETUUgICAgICAgICAgfCAgIDkyIC0NCiBkcml2ZXJzL25ldC93aXJl
bGVzcy9td2lmaWV4L2NmZzgwMjExLmMgICAgICB8IDE0MTMgKysrLS0tLQ0KIGRyaXZlcnMvbmV0
L3dpcmVsZXNzL213aWZpZXgvY2ZnODAyMTEuaCAgICAgIHwgICAxMyArLQ0KIGRyaXZlcnMvbmV0
L3dpcmVsZXNzL213aWZpZXgvY2ZwLmMgICAgICAgICAgIHwgIDE0MyArLQ0KIGRyaXZlcnMvbmV0
L3dpcmVsZXNzL213aWZpZXgvY21kZXZ0LmMgICAgICAgIHwgMTM0NyArKystLS0tDQogZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMgICAgICAgfCAgNzk4ICstLS0NCiBkcml2
ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlY2wuaCAgICAgICAgICB8ICAxMjcgKy0NCiBkcml2
ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2Z3LmggICAgICAgICAgICB8ICA4MDEgKystLS0NCiBk
cml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2llZWUuaCAgICAgICAgICB8ICAzNzIgLS0NCiBk
cml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYyAgICAgICAgICB8ICA0NzcgKy0tDQog
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pb2N0bC5oICAgICAgICAgfCAgNDczICstLQ0K
IGRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvam9pbi5jICAgICAgICAgIHwgMTAyOSArKy0t
LQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jICAgICAgICAgIHwgIDg1MyAr
LS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmggICAgICAgICAgfCAgODQ0
ICsrLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zY2FuLmMgICAgICAgICAgfCAy
MjM0ICsrKysrLS0tLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmMgICAg
ICAgICAgfCAxMjc3ICsrKy0tLS0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8u
aCAgICAgICAgICB8ICAxODggKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9j
bWQuYyAgICAgICB8ICA4MTEgKystLS0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0
YV9jbWRyZXNwLmMgICB8IDExMTQgKystLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmll
eC9zdGFfZXZlbnQuYyAgICAgfCAgMjczICstDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmll
eC9zdGFfaW9jdGwuYyAgICAgfCA1ODEzICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tDQogZHJp
dmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfcnguYyAgICAgICAgfCAgMTg0ICstDQogZHJp
dmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfdHguYyAgICAgICAgfCAgMTYyICstDQogZHJp
dmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC90eHJ4LmMgICAgICAgICAgfCAgMTk0ICstDQogZHJp
dmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXAuYyAgICAgICAgICAgfCAgIDk5IC0NCiBkcml2
ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VhcC5oICAgICAgICAgICB8ICAxNjAgLQ0KIGRyaXZl
cnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdWFwX2NtZGV2ZW50LmMgIHwgMTU0NCAtLS0tLS0tDQog
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfaW9jdGwuYyAgICAgfCAgMzk3IC0tDQog
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfdHhyeC5jICAgICAgfCAgNDE2IC0tDQog
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmMgICAgICAgICAgfCAxNDA4ICstLS0t
LS0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuaCAgICAgICAgICB8ICAyMjYg
Ky0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5jICAgICAgICAgICB8ICA5ODIg
KystLS0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5oICAgICAgICAgICB8ICAg
NzMgKy0NCiA0MCBmaWxlcyBjaGFuZ2VkLCA4MTQ2IGluc2VydGlvbnMoKyksIDIwMzYwIGRlbGV0
aW9ucygtKQ0KIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4
L2llZWUuaA0KIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4
L3VhcC5jDQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgv
dWFwLmgNCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91
YXBfY21kZXZlbnQuYw0KIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9t
d2lmaWV4L3VhcF9pb2N0bC5jDQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVs
ZXNzL213aWZpZXgvdWFwX3R4cnguYw0KDQoNCg0KPiANCj4gT2sgZ29vZCBlbm91Z2gsIHRoYXQg
c2hvdWxkIGtlZXAgeW91IGJ1c3kgZm9yIGEgd2hpbGUuLi4NCj4gDQo+IFRoZSBhYm92ZSBpcyBt
aWdodCBiZSBhIGdvb2QgYmFzaXMgZm9yIGEgVE9ETyBmaWxlIGZvciBzdGFnaW5nLi4uDQo+IA0K
PiBqb2hhbm5lcw0KPiANCj4gLS0NCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNl
bmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXdpcmVsZXNzIiBpbg0KPiB0aGUgYm9keSBv
ZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZw0KPiBNb3JlIG1ham9yZG9t
byBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCg==

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2011-03-11  4:04   ` Bing Zhao
@ 2011-03-11  8:45     ` Johannes Berg
  2011-03-11 14:12       ` John W. Linville
  0 siblings, 1 reply; 23+ messages in thread
From: Johannes Berg @ 2011-03-11  8:45 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Greg KH, David S. Miller

Hi,

> During the past 3 months, we have made 56 mwifiex patches (listed
> below) since the initial mwifiex driver submission. Most of these
> patches address the above issues; and the ioctl multiple abstraction
> layers and the static forward declarations as you commented in another
> e-mail. Some other patches are for code cleanups, mainly coding style.

I've only loosely followed these patches, but I'm sure the driver is in
*much* better shape now. If you think you're done, it'd be worthwhile to
just resubmit the entire driver in its new version.

johannes


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

* Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2011-03-11  8:45     ` Johannes Berg
@ 2011-03-11 14:12       ` John W. Linville
  2011-03-11 18:31         ` Bing Zhao
  0 siblings, 1 reply; 23+ messages in thread
From: John W. Linville @ 2011-03-11 14:12 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Bing Zhao, linux-wireless, Dan Williams, David Woodhouse,
	Amitkumar Karwar, Kiran Divekar, Greg KH, David S. Miller

On Fri, Mar 11, 2011 at 09:45:15AM +0100, Johannes Berg wrote:
> Hi,
> 
> > During the past 3 months, we have made 56 mwifiex patches (listed
> > below) since the initial mwifiex driver submission. Most of these
> > patches address the above issues; and the ioctl multiple abstraction
> > layers and the static forward declarations as you commented in another
> > e-mail. Some other patches are for code cleanups, mainly coding style.
> 
> I've only loosely followed these patches, but I'm sure the driver is in
> *much* better shape now. If you think you're done, it'd be worthwhile to
> just resubmit the entire driver in its new version.
> 
> johannes

Agreed -- please resubmit the driver as either a single patch
for inclusion or possibly as a small series of patches grouped by
functionality for further review.

Thanks!

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

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

* RE: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
  2011-03-11 14:12       ` John W. Linville
@ 2011-03-11 18:31         ` Bing Zhao
  0 siblings, 0 replies; 23+ messages in thread
From: Bing Zhao @ 2011-03-11 18:31 UTC (permalink / raw)
  To: John W. Linville, Johannes Berg
  Cc: linux-wireless, Dan Williams, David Woodhouse, Amitkumar Karwar,
	Kiran Divekar, Greg KH, David S. Miller

Hi,

> -----Original Message-----
> From: John W. Linville [mailto:linville@tuxdriver.com]
> Sent: Friday, March 11, 2011 6:13 AM
> To: Johannes Berg
> Cc: Bing Zhao; linux-wireless@vger.kernel.org; Dan Williams; David Woodhouse; Amitkumar Karwar; Kiran
> Divekar; Greg KH; David S. Miller
> Subject: Re: [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787
> 
> On Fri, Mar 11, 2011 at 09:45:15AM +0100, Johannes Berg wrote:
> > Hi,
> >
> > > During the past 3 months, we have made 56 mwifiex patches (listed
> > > below) since the initial mwifiex driver submission. Most of these
> > > patches address the above issues; and the ioctl multiple abstraction
> > > layers and the static forward declarations as you commented in another
> > > e-mail. Some other patches are for code cleanups, mainly coding style.
> >
> > I've only loosely followed these patches, but I'm sure the driver is in
> > *much* better shape now. If you think you're done, it'd be worthwhile to
> > just resubmit the entire driver in its new version.
> >
> > johannes
> 
> Agreed -- please resubmit the driver as either a single patch
> for inclusion or possibly as a small series of patches grouped by
> functionality for further review.

Thanks to John and Johannes. I will prepare the patch and resend.

Bing

> 
> Thanks!
> 
> John
> --
> John W. Linville		Someday the world will need a hero, and you
> linville@tuxdriver.com			might be all we have.  Be ready.

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

end of thread, other threads:[~2011-03-11 18:32 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-02  1:31 [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
2010-12-02 19:33 ` John W. Linville
2010-12-02 19:58   ` Johannes Berg
2010-12-03 12:53 ` Johannes Berg
2010-12-03 15:06   ` Greg KH
     [not found]   ` <477F20668A386D41ADCC57781B1F704307D59F9D6D@SC-VEXCH1.marvell.com>
     [not found]     ` <77956EDC1B917843AC9B7965A3BD78B058FEF48E24@SC-VEXCH2.marvell.com>
2010-12-03 18:39       ` Johannes Berg
2010-12-03 19:11         ` John W. Linville
2010-12-03 21:17           ` [PATCH 0/3] mwifiex: remove some stuff John W. Linville
2010-12-03 22:22             ` Bing Zhao
2010-12-04  0:34               ` Bing Zhao
2010-12-06 19:14                 ` Bing Zhao
2010-12-03 21:17           ` [PATCH 1/3] mwifiex: remove uAP functionality John W. Linville
2010-12-03 21:17           ` [PATCH 2/3] mwifiex: remove NETLINK_MARVELL and associate madness John W. Linville
2010-12-03 21:17           ` [PATCH 3/3] mwifiex: remove questionable wireless_send_event stuff John W. Linville
2010-12-04  0:59         ` [PATCH 00/31] wireless: Marvell mwifiex driver for SD8787 Bing Zhao
2010-12-03 22:15   ` Bing Zhao
2011-02-23  3:37   ` Bing Zhao
2011-02-23  8:23     ` Johannes Berg
2011-02-23 19:26       ` Bing Zhao
2011-03-11  4:04   ` Bing Zhao
2011-03-11  8:45     ` Johannes Berg
2011-03-11 14:12       ` John W. Linville
2011-03-11 18:31         ` Bing Zhao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.