Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH] libertas: separate libertas' Kconfig in it's own file
From: Holger Schurig @ 2009-10-06 14:31 UTC (permalink / raw)
  To: linux-wireless; +Cc: John W Linville, Dan Williams

Also sorts all "source" lines in the wireless/Kconfig.

Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>

Index: linux-wl/drivers/net/wireless/Kconfig
===================================================================
--- linux-wl.orig/drivers/net/wireless/Kconfig	2009-10-06 07:55:26.000000000 +0200
+++ linux-wl/drivers/net/wireless/Kconfig	2009-10-06 07:58:05.000000000 +0200
@@ -139,47 +139,6 @@ config PCMCIA_RAYCS
 	  To compile this driver as a module, choose M here: the module will be
 	  called ray_cs.  If unsure, say N.
 
-config LIBERTAS
-	tristate "Marvell 8xxx Libertas WLAN driver support"
-	depends on WLAN_80211
-	select WIRELESS_EXT
-	select WEXT_SPY
-	select LIB80211
-	select FW_LOADER
-	---help---
-	  A library for Marvell Libertas 8xxx devices.
-
-config LIBERTAS_USB
-	tristate "Marvell Libertas 8388 USB 802.11b/g cards"
-	depends on LIBERTAS && USB
-	---help---
-	  A driver for Marvell Libertas 8388 USB devices.
-
-config LIBERTAS_CS
-	tristate "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
-	depends on LIBERTAS && PCMCIA
-	select FW_LOADER
-	---help---
-	  A driver for Marvell Libertas 8385 CompactFlash devices.
-
-config LIBERTAS_SDIO
-	tristate "Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cards"
-	depends on LIBERTAS && MMC
-	---help---
-	  A driver for Marvell Libertas 8385/8686/8688 SDIO devices.
-
-config LIBERTAS_SPI
-	tristate "Marvell Libertas 8686 SPI 802.11b/g cards"
-	depends on LIBERTAS && SPI
-	---help---
-	  A driver for Marvell Libertas 8686 SPI devices.
-
-config LIBERTAS_DEBUG
-	bool "Enable full debugging output in the Libertas module."
-	depends on LIBERTAS
-	---help---
-	  Debugging support.
-
 config LIBERTAS_THINFIRM
 	tristate "Marvell 8xxx Libertas WLAN driver support with thin firmware"
 	depends on WLAN_80211 && MAC80211
@@ -491,17 +450,18 @@ config MWL8K
 	  To compile this driver as a module, choose M here: the module
 	  will be called mwl8k.  If unsure, say N.
 
-source "drivers/net/wireless/p54/Kconfig"
 source "drivers/net/wireless/ath/Kconfig"
-source "drivers/net/wireless/ipw2x00/Kconfig"
-source "drivers/net/wireless/iwlwifi/Kconfig"
-source "drivers/net/wireless/hostap/Kconfig"
 source "drivers/net/wireless/b43/Kconfig"
 source "drivers/net/wireless/b43legacy/Kconfig"
-source "drivers/net/wireless/zd1211rw/Kconfig"
-source "drivers/net/wireless/rt2x00/Kconfig"
+source "drivers/net/wireless/hostap/Kconfig"
+source "drivers/net/wireless/ipw2x00/Kconfig"
+source "drivers/net/wireless/iwlwifi/Kconfig"
+source "drivers/net/wireless/iwmc3200wifi/Kconfig"
+source "drivers/net/wireless/libertas/Kconfig"
 source "drivers/net/wireless/orinoco/Kconfig"
+source "drivers/net/wireless/p54/Kconfig"
+source "drivers/net/wireless/rt2x00/Kconfig"
 source "drivers/net/wireless/wl12xx/Kconfig"
-source "drivers/net/wireless/iwmc3200wifi/Kconfig"
+source "drivers/net/wireless/zd1211rw/Kconfig"
 
 endif # WLAN
Index: linux-wl/drivers/net/wireless/libertas/Makefile
===================================================================
--- linux-wl.orig/drivers/net/wireless/libertas/Makefile	2009-10-06 07:55:26.000000000 +0200
+++ linux-wl/drivers/net/wireless/libertas/Makefile	2009-10-06 07:58:25.000000000 +0200
@@ -1,5 +1,15 @@
-libertas-objs := main.o wext.o rx.o tx.o cmd.o cmdresp.o scan.o 11d.o	\
-		 debugfs.o persistcfg.o ethtool.o assoc.o
+libertas-y += 11d.o
+libertas-y += assoc.o
+libertas-y += cmd.o
+libertas-y += cmdresp.o
+libertas-y += debugfs.o
+libertas-y += ethtool.o
+libertas-y += main.o
+libertas-y += persistcfg.o
+libertas-y += rx.o
+libertas-y += scan.o
+libertas-y += tx.o
+libertas-y += wext.o
 
 usb8xxx-objs += if_usb.o
 libertas_cs-objs += if_cs.o
Index: linux-wl/drivers/net/wireless/libertas/Kconfig
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-wl/drivers/net/wireless/libertas/Kconfig	2009-10-06 07:58:15.000000000 +0200
@@ -0,0 +1,40 @@
+config LIBERTAS
+	tristate "Marvell 8xxx Libertas WLAN driver support"
+	depends on WLAN_80211
+	select WIRELESS_EXT
+	select WEXT_SPY
+	select LIB80211
+	select FW_LOADER
+	---help---
+	  A library for Marvell Libertas 8xxx devices.
+
+config LIBERTAS_USB
+	tristate "Marvell Libertas 8388 USB 802.11b/g cards"
+	depends on LIBERTAS && USB
+	---help---
+	  A driver for Marvell Libertas 8388 USB devices.
+
+config LIBERTAS_CS
+	tristate "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
+	depends on LIBERTAS && PCMCIA
+	select FW_LOADER
+	---help---
+	  A driver for Marvell Libertas 8385 CompactFlash devices.
+
+config LIBERTAS_SDIO
+	tristate "Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cards"
+	depends on LIBERTAS && MMC
+	---help---
+	  A driver for Marvell Libertas 8385/8686/8688 SDIO devices.
+
+config LIBERTAS_SPI
+	tristate "Marvell Libertas 8686 SPI 802.11b/g cards"
+	depends on LIBERTAS && SPI
+	---help---
+	  A driver for Marvell Libertas 8686 SPI devices.
+
+config LIBERTAS_DEBUG
+	bool "Enable full debugging output in the Libertas module."
+	depends on LIBERTAS
+	---help---
+	  Debugging support.

-- 
http://www.holgerschurig.de

^ permalink raw reply

* Re: [PATCH] mac80211: use kfree_skb() to free struct sk_buff pointers
From: Johannes Berg @ 2009-10-06 13:46 UTC (permalink / raw)
  To: Roel Kluin; +Cc: linux-wireless, Andrew Morton
In-Reply-To: <4ACB4BA3.9090406@gmail.com>

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

On Tue, 2009-10-06 at 15:52 +0200, Roel Kluin wrote:
> kfree_skb() should be used to free struct sk_buff pointers.
> 
> Signed-off-by: Roel Kluin <roel.kluin@gmail.com>

Indeed, thanks.

Acked-by: Johannes Berg <johannes@sipsolutions.net>

> ---
> diff --git a/net/mac80211/util.c b/net/mac80211/util.c
> index dd65643..aeb65b3 100644
> --- a/net/mac80211/util.c
> +++ b/net/mac80211/util.c
> @@ -339,7 +339,7 @@ void ieee80211_add_pending_skb(struct ieee80211_local *local,
>  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
>  
>  	if (WARN_ON(!info->control.vif)) {
> -		kfree(skb);
> +		kfree_skb(skb);
>  		return;
>  	}
>  
> @@ -367,7 +367,7 @@ int ieee80211_add_pending_skbs(struct ieee80211_local *local,
>  		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
>  
>  		if (WARN_ON(!info->control.vif)) {
> -			kfree(skb);
> +			kfree_skb(skb);
>  			continue;
>  		}
>  
> 


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

^ permalink raw reply

* [PATCH] mac80211: use kfree_skb() to free struct sk_buff pointers
From: Roel Kluin @ 2009-10-06 13:52 UTC (permalink / raw)
  To: Johannes Berg, linux-wireless, Andrew Morton

kfree_skb() should be used to free struct sk_buff pointers.

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
---
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index dd65643..aeb65b3 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -339,7 +339,7 @@ void ieee80211_add_pending_skb(struct ieee80211_local *local,
 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 
 	if (WARN_ON(!info->control.vif)) {
-		kfree(skb);
+		kfree_skb(skb);
 		return;
 	}
 
@@ -367,7 +367,7 @@ int ieee80211_add_pending_skbs(struct ieee80211_local *local,
 		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 
 		if (WARN_ON(!info->control.vif)) {
-			kfree(skb);
+			kfree_skb(skb);
 			continue;
 		}
 

^ permalink raw reply related

* Re: Linux wifi development board
From: David Acker @ 2009-10-06 13:14 UTC (permalink / raw)
  To: Ahmed A; +Cc: linux-wireless
In-Reply-To: <175271.7461.qm@web32506.mail.mud.yahoo.com>

Ahmed A wrote:
> Hello,
> 
> I have been looking online for a Linux wifi development board.  I have come across a few from small companies (reasonably priced), but most of those companies seem to be out of business.  I would appreciate suggestions from anyone that may have used one recently, or suggest a link where I can more info some popular ones.
> 
> I am mostly interested in doing some software development, prototyping on the "application processor", not on the "baseband processor" (radio part).
> 
> If there is an alternate mailing list I can post my question, I would appreciate that also.

I have had good luck with boards from Gateworks, 
http://www.gateworks.com/ and radios from Ubiquiti, http://ubnt.com/ . 
All of it is supported by OpenWRT, although I believe that the gw2348-4 
(avila) has mainline support.
-ack

^ permalink raw reply

* [PATCH] mac80211: fix ADM8211_SYNCTL_RFtype define
From: Roel Kluin @ 2009-10-06 12:33 UTC (permalink / raw)
  To: John W. Linville, linux-wireless, Andrew Morton

A logical of shifts to the left doesn't make sense.

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
---
I think this was intended? ADM8211_SYNCTL_RFtype is not used anywhere.

diff --git a/drivers/net/wireless/adm8211.h b/drivers/net/wireless/adm8211.h
index 4f6ab13..b07e4d3 100644
--- a/drivers/net/wireless/adm8211.h
+++ b/drivers/net/wireless/adm8211.h
@@ -266,7 +266,7 @@ do {								\
 #define ADM8211_SYNCTL_CS1	(1 << 28)
 #define ADM8211_SYNCTL_CAL	(1 << 27)
 #define ADM8211_SYNCTL_SELCAL	(1 << 26)
-#define ADM8211_SYNCTL_RFtype	((1 << 24) || (1 << 23) || (1 << 22))
+#define ADM8211_SYNCTL_RFtype	((1 << 24) | (1 << 23) | (1 << 22))
 #define ADM8211_SYNCTL_RFMD	(1 << 22)
 #define ADM8211_SYNCTL_GENERAL	(0x7 << 22)
 /* SYNCTL 21:0 Data (Si4126: 18-bit data, 4-bit address) */

^ permalink raw reply related

* question about cfg80211_inform_bss()
From: Holger Schurig @ 2009-10-06 12:18 UTC (permalink / raw)
  To: linux-wireless

Hi !

I did implement the cfg80211 scan command in libertas. Now I'm 
about to submit the results back to cfg80211. AFAIK I have to 
use cfg80211_inform_bss() for this.

There's just one subtle problem here:

I tell the firmware of libertas card to scan on some channels, 
e.g. on 4 channels at a time. The firmware does this, and then 
sends me back a scan response. This scan response may contain 
any number of APs, from different channels. I don't know which 
BSS entry belongs to which channel --- unless I parse the 
also-supplied IE.

However, cfg80211_inform_bss() want's a channel. And it wants the 
IEs as well. A presume it scans those IEs, too. So do we need to 
parse the IEs twice?

-- 
http://www.holgerschurig.de

^ permalink raw reply

* Linux wifi development board
From: Ahmed A @ 2009-10-06  8:12 UTC (permalink / raw)
  To: linux-wireless

Hello,

I have been looking online for a Linux wifi development board.  I have come across a few from small companies (reasonably priced), but most of those companies seem to be out of business.  I would appreciate suggestions from anyone that may have used one recently, or suggest a link where I can more info some popular ones.

I am mostly interested in doing some software development, prototyping on the "application processor", not on the "baseband processor" (radio part).

If there is an alternate mailing list I can post my question, I would appreciate that also.

Thank you,
Ahmed A.


      

^ permalink raw reply

* Re: [RFT 0/4] ath9k: fix oops during driver unload
From: Vasanthakumar Thiagarajan @ 2009-10-06  5:52 UTC (permalink / raw)
  To: Luis Rodriguez
  Cc: Vasanth Thiagarajan, linux-wireless@vger.kernel.org,
	ath9k-devel@lists.ath9k.org, Luis Rodriguez
In-Reply-To: <1254801201-15893-1-git-send-email-lrodriguez@atheros.com>

On Tue, Oct 06, 2009 at 09:23:17AM +0530, Luis Rodriguez wrote:
> This should fix an oops reported by Vasanth.
> Vasanth my rc3 poos out, can you let me know if this
> fixes the issue you saw?
> 
> Luis R. Rodriguez (4):
>   ath9k: move common->debug_mask setting to ath_init_softc()
>   ath9k: fix oops during unload -- initialize hw prior to debugfs
>   ath9k: add helper to un-init the hw properly
>   ath9k: rename ath_beaconq_setup() to ath9k_hw_beaconq_setup()
> 
>  drivers/net/wireless/ath/ath.h          |    6 ++++
>  drivers/net/wireless/ath/ath9k/ath9k.h  |    1 -
>  drivers/net/wireless/ath/ath9k/beacon.c |   12 -------
>  drivers/net/wireless/ath/ath9k/debug.c  |    5 ---
>  drivers/net/wireless/ath/ath9k/hw.c     |   11 ++++++-
>  drivers/net/wireless/ath/ath9k/mac.c    |   13 ++++++++
>  drivers/net/wireless/ath/ath9k/mac.h    |    1 +
>  drivers/net/wireless/ath/ath9k/main.c   |   50 ++++++++++++++++++------------
>  8 files changed, 60 insertions(+), 39 deletions(-)
> 

The issue is not fixed completely, ah->common is used after ah is
freed in ath_cleanup() which makes rmmod ath9k stuck in the middle.

Vasanth

^ permalink raw reply

* [RFT 1/4] ath9k: move common->debug_mask setting to ath_init_softc()
From: Luis R. Rodriguez @ 2009-10-06  3:53 UTC (permalink / raw)
  To: vasanth, linux-wireless; +Cc: ath9k-devel, Luis R. Rodriguez
In-Reply-To: <1254801201-15893-1-git-send-email-lrodriguez@atheros.com>

What this means is we can enable now debug prints without
requiring CONFIG_ATH9K_DEBUG.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 drivers/net/wireless/ath/ath9k/debug.c |    5 -----
 drivers/net/wireless/ath/ath9k/main.c  |    5 +++++
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c
index 25ae88e..84f4426 100644
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
@@ -23,9 +23,6 @@
 #define REG_READ_D(_ah, _reg) \
 	ath9k_hw_common(_ah)->ops->read((_ah), (_reg))
 
-static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
-module_param_named(debug, ath9k_debug, uint, 0);
-
 static struct dentry *ath9k_debugfs_root;
 
 static int ath9k_debugfs_open(struct inode *inode, struct file *file)
@@ -565,8 +562,6 @@ int ath9k_init_debug(struct ath_hw *ah)
 	struct ath_common *common = ath9k_hw_common(ah);
 	struct ath_softc *sc = (struct ath_softc *) common->priv;
 
-	common->debug_mask = ath9k_debug;
-
 	if (!ath9k_debugfs_root)
 		return -ENOENT;
 
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 86374ad..7f90cb8 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -29,6 +29,10 @@ static int modparam_nohwcrypt;
 module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
 
+static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
+module_param_named(debug, ath9k_debug, uint, 0);
+MODULE_PARM_DESC(ath9k_debug, "Debugging mask");
+
 /* We use the hw_value as an index into our private channel structure */
 
 #define CHAN2G(_freq, _idx)  { \
@@ -1637,6 +1641,7 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
 	common->ah = ah;
 	common->hw = sc->hw;
 	common->priv = sc;
+	common->debug_mask = ath9k_debug;
 
 	/*
 	 * Cache line size is used to size and align various
-- 
1.6.0.4


^ permalink raw reply related

* [RFT 0/4] ath9k: fix oops during driver unload
From: Luis R. Rodriguez @ 2009-10-06  3:53 UTC (permalink / raw)
  To: vasanth, linux-wireless; +Cc: ath9k-devel, Luis R. Rodriguez

This should fix an oops reported by Vasanth.
Vasanth my rc3 poos out, can you let me know if this
fixes the issue you saw?

Luis R. Rodriguez (4):
  ath9k: move common->debug_mask setting to ath_init_softc()
  ath9k: fix oops during unload -- initialize hw prior to debugfs
  ath9k: add helper to un-init the hw properly
  ath9k: rename ath_beaconq_setup() to ath9k_hw_beaconq_setup()

 drivers/net/wireless/ath/ath.h          |    6 ++++
 drivers/net/wireless/ath/ath9k/ath9k.h  |    1 -
 drivers/net/wireless/ath/ath9k/beacon.c |   12 -------
 drivers/net/wireless/ath/ath9k/debug.c  |    5 ---
 drivers/net/wireless/ath/ath9k/hw.c     |   11 ++++++-
 drivers/net/wireless/ath/ath9k/mac.c    |   13 ++++++++
 drivers/net/wireless/ath/ath9k/mac.h    |    1 +
 drivers/net/wireless/ath/ath9k/main.c   |   50 ++++++++++++++++++------------
 8 files changed, 60 insertions(+), 39 deletions(-)


^ permalink raw reply

* [RFT 2/4] ath9k: fix oops during unload -- initialize hw prior to debugfs
From: Luis R. Rodriguez @ 2009-10-06  3:53 UTC (permalink / raw)
  To: vasanth, linux-wireless; +Cc: ath9k-devel, Luis R. Rodriguez
In-Reply-To: <1254801201-15893-1-git-send-email-lrodriguez@atheros.com>

debugfs uses the hardware for several debugfs files as such the
hardware must be initialized and available prior to its usage. The
same applies to when we free the hw structs -- free debufs file
entries prior to free'ing the hardware.

This should fix the oops which occurs during module unload
due to the dereferencig of ah upon debugfs exit.

IP: [<46412d6b>] 0x46412d6b
*pde = 00000000
Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
last sysfs file: /sys/class/power_supply/BAT0/energy_full
Modules linked in: ath9k(-) ath9k_hw mac80211 ath cfg80211 <bleh>

Pid: 3112, comm: rmmod Not tainted (2.6.32-rc2-wl #101) 9461DUU
EIP: 0060:[<46412d6b>] EFLAGS: 00010246 CPU: 0
EIP is at 0x46412d6b
EAX: f5870004 EBX: f6700d94 ECX: 00000000 EDX: c14313a7
ESI: f5870000 EDI: fb58ce70 EBP: f6661eb4 ESP: f6661ea8
 DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
Process rmmod (pid: 3112, ti=f6660000 task=f6579380 task.ti=f6660000)
Stack:
 fb57e5e5 f5ca5d50 fb58ce70 f6661ebc fb58629a f6661ec8 c11b715e f5ca5da8
<0> f6661ed8 c1223d98 f5ca5da8 f5ca5ddc f6661eec c1223e6f fb58ce70 fb58ce70
<0> c14958a0 f6661f00 c1222edb fb58ce70 fb58ce70 fb58cebc f6661f1c c12243c9
Call Trace:
 [<fb57e5e5>] ? ath_cleanup+0x35/0x50 [ath9k]
 [<fb58629a>] ? ath_pci_remove+0x1a/0x20 [ath9k]
 [<c11b715e>] ? pci_device_remove+0x1e/0x40
 [<c1223d98>] ? __device_release_driver+0x58/0xa0
 [<c1223e6f>] ? driver_detach+0x8f/0xa0
 [<c1222edb>] ? bus_remove_driver+0x7b/0xb0
 [<c12243c9>] ? driver_unregister+0x49/0x80
 [<c1158cf2>] ? sysfs_remove_file+0x12/0x20
 [<c11b73b5>] ? pci_unregister_driver+0x35/0x90
 [<fb586172>] ? ath_pci_exit+0x12/0x20 [ath9k]
 [<fb5883ec>] ? ath9k_exit+0x10/0x3d [ath9k]
 [<c131971d>] ? mutex_unlock+0xd/0x10
 [<c1088c0f>] ? sys_delete_module+0x16f/0x220
 [<c10e3d5d>] ? do_munmap+0x23d/0x290
 [<c11a629c>] ? trace_hardirqs_off_thunk+0xc/0x10
 [<c11a628c>] ? trace_hardirqs_on_thunk+0xc/0x10
 [<c1003b41>] ? sysenter_exit+0xf/0x1a
 [<c1003b08>] ? sysenter_do_call+0x12/0x3c
Code:  Bad EIP value.
EIP: [<46412d6b>] 0x46412d6b SS:ESP 0068:f6661ea8
CR2: 0000000046412d6b
---[ end trace 847f3b05ff3dcb19 ]---

Reported-by: Vasanthakumar Thiagarajan" <vasanth@atheros.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 drivers/net/wireless/ath/ath.h        |    6 ++++++
 drivers/net/wireless/ath/ath9k/hw.c   |   11 ++++++++++-
 drivers/net/wireless/ath/ath9k/main.c |   28 ++++++++++++++--------------
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/ath/ath.h b/drivers/net/wireless/ath/ath.h
index b6cd752..5e19a73 100644
--- a/drivers/net/wireless/ath/ath.h
+++ b/drivers/net/wireless/ath/ath.h
@@ -23,6 +23,11 @@
 
 static const u8 ath_bcast_mac[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
+enum ath_device_state {
+	ATH_HW_UNAVAILABLE,
+	ATH_HW_INITIALIZED,
+};
+
 struct reg_dmn_pair_mapping {
 	u16 regDmnEnum;
 	u16 reg_5ghz_ctl;
@@ -59,6 +64,7 @@ struct ath_common {
 	void *priv;
 	struct ieee80211_hw *hw;
 	int debug_mask;
+	enum ath_device_state state;
 
 	u16 cachelsz;
 	u16 curaid;
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 692fd1d..cab17c6 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -999,6 +999,8 @@ int ath9k_hw_init(struct ath_hw *ah)
 
 	ath9k_init_nfcal_hist_buffer(ah);
 
+	common->state = ATH_HW_INITIALIZED;
+
 	return 0;
 }
 
@@ -1239,11 +1241,18 @@ const char *ath9k_hw_probe(u16 vendorid, u16 devid)
 
 void ath9k_hw_detach(struct ath_hw *ah)
 {
+	struct ath_common *common = ath9k_hw_common(ah);
+
+	if (common->state <= ATH_HW_INITIALIZED)
+		goto free_hw;
+
 	if (!AR_SREV_9100(ah))
 		ath9k_hw_ani_disable(ah);
 
-	ath9k_hw_rf_free(ah);
 	ath9k_hw_setpower(ah, ATH9K_PM_FULL_SLEEP);
+
+free_hw:
+	ath9k_hw_rf_free(ah);
 	kfree(ah);
 	ah = NULL;
 }
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 7f90cb8..0fe915a 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1365,8 +1365,8 @@ void ath_detach(struct ath_softc *sc)
 	    ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
 		ath_gen_timer_free(ah, sc->btcoex.no_stomp_timer);
 
-	ath9k_hw_detach(ah);
 	ath9k_exit_debug(ah);
+	ath9k_hw_detach(ah);
 	sc->sc_ah = NULL;
 }
 
@@ -1626,10 +1626,8 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
 		     (unsigned long)sc);
 
 	ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
-	if (!ah) {
-		r = -ENOMEM;
-		goto bad_no_ah;
-	}
+	if (!ah)
+		return -ENOMEM;
 
 	ah->hw_version.devid = devid;
 	ah->hw_version.subsysid = subsysid;
@@ -1651,15 +1649,18 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
 	/* XXX assert csz is non-zero */
 	common->cachelsz = csz << 2;	/* convert to bytes */
 
-	if (ath9k_init_debug(ah) < 0)
-		dev_err(sc->dev, "Unable to create debugfs files\n");
-
 	r = ath9k_hw_init(ah);
 	if (r) {
 		ath_print(common, ATH_DBG_FATAL,
 			  "Unable to initialize hardware; "
 			  "initialization status: %d\n", r);
-		goto bad;
+		goto bad_free_hw;
+	}
+
+	if (ath9k_init_debug(ah) < 0) {
+		ath_print(common, ATH_DBG_FATAL,
+			  "Unable to create debugfs files\n");
+		goto bad_free_hw;
 	}
 
 	/* Get the hardware key cache size. */
@@ -1848,12 +1849,11 @@ bad2:
 	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
 		if (ATH_TXQ_SETUP(sc, i))
 			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
-bad:
+
+	ath9k_exit_debug(ah);
+bad_free_hw:
 	ath9k_hw_detach(ah);
-bad_no_ah:
-	ath9k_exit_debug(sc->sc_ah);
 	sc->sc_ah = NULL;
-
 	return r;
 }
 
@@ -1966,8 +1966,8 @@ error_attach:
 		if (ATH_TXQ_SETUP(sc, i))
 			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
 
-	ath9k_hw_detach(ah);
 	ath9k_exit_debug(ah);
+	ath9k_hw_detach(ah);
 	sc->sc_ah = NULL;
 
 	return error;
-- 
1.6.0.4


^ permalink raw reply related

* [RFT 4/4] ath9k: rename ath_beaconq_setup() to ath9k_hw_beaconq_setup()
From: Luis R. Rodriguez @ 2009-10-06  3:53 UTC (permalink / raw)
  To: vasanth, linux-wireless; +Cc: ath9k-devel, Luis R. Rodriguez
In-Reply-To: <1254801201-15893-1-git-send-email-lrodriguez@atheros.com>

And move it to hw code on mac.c where it belongs.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 drivers/net/wireless/ath/ath9k/ath9k.h  |    1 -
 drivers/net/wireless/ath/ath9k/beacon.c |   12 ------------
 drivers/net/wireless/ath/ath9k/mac.c    |   13 +++++++++++++
 drivers/net/wireless/ath/ath9k/mac.h    |    1 +
 drivers/net/wireless/ath/ath9k/main.c   |    2 +-
 5 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index 14ff38d..13dd020 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -421,7 +421,6 @@ struct ath_beacon {
 
 void ath_beacon_tasklet(unsigned long data);
 void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
-int ath_beaconq_setup(struct ath_hw *ah);
 int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif);
 void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp);
 
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index 54be876..b10c884 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -242,18 +242,6 @@ static void ath_beacon_start_adhoc(struct ath_softc *sc,
 		  sc->beacon.beaconq, ito64(bf->bf_daddr), bf->bf_desc);
 }
 
-int ath_beaconq_setup(struct ath_hw *ah)
-{
-	struct ath9k_tx_queue_info qi;
-
-	memset(&qi, 0, sizeof(qi));
-	qi.tqi_aifs = 1;
-	qi.tqi_cwmin = 0;
-	qi.tqi_cwmax = 0;
-	/* NB: don't enable any interrupts */
-	return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
-}
-
 int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
 {
 	struct ath_softc *sc = aphy->sc;
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index e2c1ba3..46466ff 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -1018,3 +1018,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah)
 #undef AH_RX_STOP_DMA_TIMEOUT
 }
 EXPORT_SYMBOL(ath9k_hw_stopdmarecv);
+
+int ath9k_hw_beaconq_setup(struct ath_hw *ah)
+{
+	struct ath9k_tx_queue_info qi;
+
+	memset(&qi, 0, sizeof(qi));
+	qi.tqi_aifs = 1;
+	qi.tqi_cwmin = 0;
+	qi.tqi_cwmax = 0;
+	/* NB: don't enable any interrupts */
+	return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
+}
+EXPORT_SYMBOL(ath9k_hw_beaconq_setup);
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h
index 9ab3431..fefb65d 100644
--- a/drivers/net/wireless/ath/ath9k/mac.h
+++ b/drivers/net/wireless/ath/ath9k/mac.h
@@ -667,5 +667,6 @@ void ath9k_hw_rxena(struct ath_hw *ah);
 void ath9k_hw_startpcureceive(struct ath_hw *ah);
 void ath9k_hw_stoppcurecv(struct ath_hw *ah);
 bool ath9k_hw_stopdmarecv(struct ath_hw *ah);
+int ath9k_hw_beaconq_setup(struct ath_hw *ah);
 
 #endif /* MAC_H */
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index e6842dd..8325c91 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1703,7 +1703,7 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
 	 * priority.  Note that the hal handles reseting
 	 * these queues at the needed time.
 	 */
-	sc->beacon.beaconq = ath_beaconq_setup(ah);
+	sc->beacon.beaconq = ath9k_hw_beaconq_setup(ah);
 	if (sc->beacon.beaconq == -1) {
 		ath_print(common, ATH_DBG_FATAL,
 			  "Unable to setup a beacon xmit queue\n");
-- 
1.6.0.4


^ permalink raw reply related

* [RFT 3/4] ath9k: add helper to un-init the hw properly
From: Luis R. Rodriguez @ 2009-10-06  3:53 UTC (permalink / raw)
  To: vasanth, linux-wireless; +Cc: ath9k-devel, Luis R. Rodriguez
In-Reply-To: <1254801201-15893-1-git-send-email-lrodriguez@atheros.com>

This is used in several places, ensure we do it right in all
callers by using a helper.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 drivers/net/wireless/ath/ath9k/main.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 0fe915a..e6842dd 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1325,6 +1325,17 @@ void ath_cleanup(struct ath_softc *sc)
 	ieee80211_free_hw(sc->hw);
 }
 
+static void ath9k_uninit_hw(struct ath_softc *sc)
+{
+	struct ath_hw *ah = sc->sc_ah;
+
+	BUG_ON(!ah);
+
+	ath9k_exit_debug(ah);
+	ath9k_hw_detach(ah);
+	sc->sc_ah = NULL;
+}
+
 void ath_detach(struct ath_softc *sc)
 {
 	struct ieee80211_hw *hw = sc->hw;
@@ -1365,9 +1376,7 @@ void ath_detach(struct ath_softc *sc)
 	    ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
 		ath_gen_timer_free(ah, sc->btcoex.no_stomp_timer);
 
-	ath9k_exit_debug(ah);
-	ath9k_hw_detach(ah);
-	sc->sc_ah = NULL;
+	ath9k_uninit_hw(sc);
 }
 
 static int ath9k_reg_notifier(struct wiphy *wiphy,
@@ -1850,10 +1859,8 @@ bad2:
 		if (ATH_TXQ_SETUP(sc, i))
 			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
 
-	ath9k_exit_debug(ah);
 bad_free_hw:
-	ath9k_hw_detach(ah);
-	sc->sc_ah = NULL;
+	ath9k_uninit_hw(sc);
 	return r;
 }
 
@@ -1966,9 +1973,7 @@ error_attach:
 		if (ATH_TXQ_SETUP(sc, i))
 			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
 
-	ath9k_exit_debug(ah);
-	ath9k_hw_detach(ah);
-	sc->sc_ah = NULL;
+	ath9k_uninit_hw(sc);
 
 	return error;
 }
-- 
1.6.0.4


^ permalink raw reply related

* Re: [PATCH] Wireless / ath5k: Simplify suspend and resume callbacks
From: Rafael J. Wysocki @ 2009-10-05 19:40 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: netdev, ath5k-devel, John W. Linville, linux-wireless,
	Bob Copeland, LKML, pm list
In-Reply-To: <43e72e890910050921q7f516c67ofe17603d6d873c4@mail.gmail.com>

On Monday 05 October 2009, Luis R. Rodriguez wrote:
> On Sun, Oct 4, 2009 at 10:52 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > From: Rafael J. Wysocki <rjw@sisk.pl>
> >
> > Simplify the suspend and resume callbacks of ath5k by converting the
> > driver to struct dev_pm_ops and allowing the PCI PM core to do the
> > PCI-specific suspend/resume handling.
> >
> > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
> 
> Do you happen to know if the new dev_pm_ops thing handle WOL / WoW [1]?
> 
> [1] http://wireless.kernel.org/en/users/Documentation/WoW

It does enable wake-up at the PCI level if so configured, so in principle it
should handle it.  However, for WoL to work there are some things that the
drivers is reponsible for, so I guess it will be analogous for WoW.

Anyway, the PCI-specific mechanics is there.

> >  #ifdef CONFIG_PM
> > -static int
> > -ath5k_pci_suspend(struct pci_dev *pdev, pm_message_t state)
> > +static int ath5k_pci_suspend(struct device *dev)
> >  {
> > -       struct ieee80211_hw *hw = pci_get_drvdata(pdev);
> > +       struct ieee80211_hw *hw = pci_get_drvdata(to_pci_dev(dev));
> >        struct ath5k_softc *sc = hw->priv;
> >
> >        ath5k_led_off(sc);
> > -
> > -       pci_save_state(pdev);
> > -       pci_disable_device(pdev);
> 
> For WoW right here we'd do
> 
> pci_prepare_to_sleep(pdev) and bail out.
> 
> > -       pci_set_power_state(pdev, PCI_D3hot);
> 
> And here we'd call something like this:
> 
> pci_wake_from_d3(pdev, !!sc->wow_triggers_enabled);

All of this is unnecessary, the PCI PM core should take care of this just
fine.  In case it doesn't, it has to be fixed.

> > -
> >        return 0;
> >  }
> 
> Are all drivers being converted?

Generally, yes, but that's not a priority work for me.  I've just happened to
have the patch ready, so here it goes.

They should be converted, though, to be able to support PCI run-time PM.

> It'll be a while before we get WoW enabled on ath5k but it is
> technically possible, the work was tested for ath9k back in July [2]
> but I never submitted this to be merged due to some inconsistent
> issues I was noticing with the hardware.
> 
> [2] http://kernel.org/pub/linux/kernel/people/mcgrof/patches/wow-07-21.patch

Thanks,
Rafael

^ permalink raw reply

* RE: [PATCH v2] libertas: Add auto deep sleep support for SD8385/SD8686/SD8688
From: Dan Williams @ 2009-10-05 18:59 UTC (permalink / raw)
  To: Bing Zhao
  Cc: libertas-dev@lists.infradead.org, Amitkumar Karwar,
	linux-wireless@vger.kernel.org
In-Reply-To: <477F20668A386D41ADCC57781B1F704306DDD5BE9B@SC-VEXCH1.marvell.com>

On Mon, 2009-10-05 at 11:47 -0700, Bing Zhao wrote:
> Hi Dan,
> 
> > -----Original Message-----
> > From: Dan Williams [mailto:dcbw@redhat.com]
> > Sent: Thursday, October 01, 2009 11:27 AM
> > To: Bing Zhao
> > Cc: libertas-dev@lists.infradead.org; Amitkumar Karwar; linux-wireless@vger.kernel.org
> > Subject: Re: [PATCH v2] libertas: Add auto deep sleep support for SD8385/SD8686/SD8688
> >
> > On Wed, 2009-09-30 at 20:04 -0700, Bing Zhao wrote:
> > > From: Amitkumar Karwar <akarwar@marvell.com>
> > >
> > > Add timer based auto deep sleep feature in libertas driver which can be
> > > configured using iwconfig command. This is tested on SD8688, SD8686 cards
> > > with firmware versions 10.38.1.p25, 9.70.4.p0 respectively on 32-bit and 64-bit
> > > platforms. Tests have been done for USB/CS cards to make sure that the patch
> > > won't break USB/CS code. We didn't test the if_spi driver.
> > >
> > > Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
> > > Signed-off-by: Bing Zhao <bzhao@marvell.com>
> >
> > Acked-by: Dan Williams <dcbw@redhat.com>
> >
> > Though I wonder if we could just put the lbs_is_cmd_allowed() check into
> > the actual command handling routines instead of sprinkling it around.
> 
> Yes, we can do that.
> 
> > We did move away from the 'one-huge-switch' command submission model,
> > which makes it a bit harder to gate commands based on device state, but
> > I can't think of anything off the top of my head that would hurt by
> > doing it like that.
> >
> > i.e. would putting the check in both __lbs_cmd_async() and
> > lbs_prepare_and_send_command() around where the priv->surprise_removed
> > check is work too?
> 
> We will submit a new patch for this.

John may have already applied, so I think it's OK to base the new patch
on top of this one.

Dan

> Regards,
> 
> Bing
> 
> >
> > Dan
> >
> > > ---
> > >  drivers/net/wireless/libertas/README    |   26 ++++-
> > >  drivers/net/wireless/libertas/cmd.c     |   72 ++++++++++++-
> > >  drivers/net/wireless/libertas/cmdresp.c |   12 ++
> > >  drivers/net/wireless/libertas/debugfs.c |   46 ++++++++
> > >  drivers/net/wireless/libertas/decl.h    |    4 +
> > >  drivers/net/wireless/libertas/dev.h     |   18 +++
> > >  drivers/net/wireless/libertas/host.h    |    1 +
> > >  drivers/net/wireless/libertas/if_cs.c   |    3 +
> > >  drivers/net/wireless/libertas/if_sdio.c |   56 +++++++++
> > >  drivers/net/wireless/libertas/if_sdio.h |    3 +-
> > >  drivers/net/wireless/libertas/if_spi.c  |    3 +
> > >  drivers/net/wireless/libertas/if_usb.c  |    3 +
> > >  drivers/net/wireless/libertas/main.c    |  111 ++++++++++++++++---
> > >  drivers/net/wireless/libertas/scan.c    |   11 ++
> > >  drivers/net/wireless/libertas/wext.c    |  185 ++++++++++++++++++++++++++++++-
> > >  15 files changed, 533 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/drivers/net/wireless/libertas/README b/drivers/net/wireless/libertas/README
> > > index ab6a2d5..635002d 100644
> > > --- a/drivers/net/wireless/libertas/README
> > > +++ b/drivers/net/wireless/libertas/README
> > > @@ -1,5 +1,5 @@
> > >  ================================================================================
> > > -                   README for USB8388
> > > +                   README for Libertas
> > >
> > >   (c) Copyright © 2003-2006, Marvell International Ltd.
> > >   All Rights Reserved
> > > @@ -226,4 +226,28 @@ setuserscan
> > >      All entries in the scan table (not just the new scan data when keep=1)
> > >      will be displayed upon completion by use of the getscantable ioctl.
> > >
> > > +========================
> > > +IWCONFIG COMMANDS
> > > +========================
> > > +power period
> > > +
> > > +   This command is used to configure the station in deep sleep mode /
> > > +   auto deep sleep mode.
> > > +
> > > +   The timer is implemented to monitor the activities (command, event,
> > > +   etc.). When an activity is detected station will exit from deep
> > > +   sleep mode automatically and restart the timer. At timer expiry
> > > +   (no activity for defined time period) the deep sleep mode is entered
> > > +   automatically.
> > > +
> > > +   Note: this command is for SDIO interface only.
> > > +
> > > +   Usage:
> > > +   To enable deep sleep mode do:
> > > +           iwconfig wlan0 power period 0
> > > +   To enable auto deep sleep mode with idle time period 5 seconds do:
> > > +           iwconfig wlan0 power period 5
> > > +   To disable deep sleep/auto deep sleep mode do:
> > > +           iwconfig wlan0 power period -1
> > > +
> > >  ==============================================================================
> > > diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
> > > index 6850981..3a3e894 100644
> > > --- a/drivers/net/wireless/libertas/cmd.c
> > > +++ b/drivers/net/wireless/libertas/cmd.c
> > > @@ -17,7 +17,6 @@
> > >
> > >  static struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv);
> > >
> > > -
> > >  /**
> > >   *  @brief Simple callback that copies response back into command
> > >   *
> > > @@ -319,6 +318,60 @@ int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action,
> > >     return 0;
> > >  }
> > >
> > > +static int lbs_wait_for_ds_awake(struct lbs_private *priv)
> > > +{
> > > +   int ret = 0;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_CMD);
> > > +
> > > +   if (priv->is_deep_sleep) {
> > > +           if (!wait_event_interruptible_timeout(priv->ds_awake_q,
> > > +                                   !priv->is_deep_sleep, (10 * HZ))) {
> > > +                   lbs_pr_err("ds_awake_q: timer expired\n");
> > > +                   ret = -1;
> > > +           }
> > > +   }
> > > +
> > > +   lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
> > > +   return ret;
> > > +}
> > > +
> > > +int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep)
> > > +{
> > > +   int ret =  0;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_CMD);
> > > +
> > > +   if (deep_sleep) {
> > > +           if (priv->is_deep_sleep != 1) {
> > > +                   lbs_deb_cmd("deep sleep: sleep\n");
> > > +                   BUG_ON(!priv->enter_deep_sleep);
> > > +                   ret = priv->enter_deep_sleep(priv);
> > > +                   if (!ret) {
> > > +                           netif_stop_queue(priv->dev);
> > > +                           netif_carrier_off(priv->dev);
> > > +                   }
> > > +           } else {
> > > +                   lbs_pr_err("deep sleep: already enabled\n");
> > > +           }
> > > +   } else {
> > > +           if (priv->is_deep_sleep) {
> > > +                   lbs_deb_cmd("deep sleep: wakeup\n");
> > > +                   BUG_ON(!priv->exit_deep_sleep);
> > > +                   ret = priv->exit_deep_sleep(priv);
> > > +                   if (!ret) {
> > > +                           ret = lbs_wait_for_ds_awake(priv);
> > > +                           if (ret)
> > > +                                   lbs_pr_err("deep sleep: wakeup"
> > > +                                                   "failed\n");
> > > +                   }
> > > +           }
> > > +   }
> > > +
> > > +   lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
> > > +   return ret;
> > > +}
> > > +
> > >  int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action,
> > >                        struct assoc_request *assoc)
> > >  {
> > > @@ -1242,8 +1295,17 @@ static void lbs_submit_command(struct lbs_private *priv,
> > >             timeo = HZ/4;
> > >     }
> > >
> > > -   /* Setup the timer after transmit command */
> > > -   mod_timer(&priv->command_timer, jiffies + timeo);
> > > +   if (command == CMD_802_11_DEEP_SLEEP) {
> > > +           if (priv->is_auto_deep_sleep_enabled) {
> > > +                   priv->wakeup_dev_required = 1;
> > > +                   priv->dnld_sent = 0;
> > > +           }
> > > +           priv->is_deep_sleep = 1;
> > > +           lbs_complete_command(priv, cmdnode, 0);
> > > +   } else {
> > > +           /* Setup the timer after transmit command */
> > > +           mod_timer(&priv->command_timer, jiffies + timeo);
> > > +   }
> > >
> > >     lbs_deb_leave(LBS_DEB_HOST);
> > >  }
> > > @@ -1505,6 +1567,10 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
> > >     case CMD_802_11_BEACON_CTRL:
> > >             ret = lbs_cmd_bcn_ctrl(priv, cmdptr, cmd_action);
> > >             break;
> > > +   case CMD_802_11_DEEP_SLEEP:
> > > +           cmdptr->command = cpu_to_le16(CMD_802_11_DEEP_SLEEP);
> > > +           cmdptr->size = cpu_to_le16(S_DS_GEN);
> > > +           break;
> > >     default:
> > >             lbs_pr_err("PREP_CMD: unknown command 0x%04x\n", cmd_no);
> > >             ret = -1;
> > > diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c
> > > index c42d3fa..47d2b19 100644
> > > --- a/drivers/net/wireless/libertas/cmdresp.c
> > > +++ b/drivers/net/wireless/libertas/cmdresp.c
> > > @@ -504,9 +504,21 @@ int lbs_process_event(struct lbs_private *priv, u32 event)
> > >
> > >     case MACREG_INT_CODE_HOST_AWAKE:
> > >             lbs_deb_cmd("EVENT: host awake\n");
> > > +           if (priv->reset_deep_sleep_wakeup)
> > > +                   priv->reset_deep_sleep_wakeup(priv);
> > > +           priv->is_deep_sleep = 0;
> > >             lbs_send_confirmwake(priv);
> > >             break;
> > >
> > > +   case MACREG_INT_CODE_DEEP_SLEEP_AWAKE:
> > > +           if (priv->reset_deep_sleep_wakeup)
> > > +                   priv->reset_deep_sleep_wakeup(priv);
> > > +           lbs_deb_cmd("EVENT: ds awake\n");
> > > +           priv->is_deep_sleep = 0;
> > > +           priv->wakeup_dev_required = 0;
> > > +           wake_up_interruptible(&priv->ds_awake_q);
> > > +           break;
> > > +
> > >     case MACREG_INT_CODE_PS_AWAKE:
> > >             lbs_deb_cmd("EVENT: ps awake\n");
> > >             /* handle unexpected PS AWAKE event */
> > > diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c
> > > index 893a55c..8a7e931 100644
> > > --- a/drivers/net/wireless/libertas/debugfs.c
> > > +++ b/drivers/net/wireless/libertas/debugfs.c
> > > @@ -117,6 +117,11 @@ static ssize_t lbs_sleepparams_write(struct file *file,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out_unlock;
> > > +   }
> > > +
> > >     buf_size = min(count, len - 1);
> > >     if (copy_from_user(buf, user_buf, buf_size)) {
> > >             ret = -EFAULT;
> > > @@ -157,6 +162,11 @@ static ssize_t lbs_sleepparams_read(struct file *file, char __user *userbuf,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out_unlock;
> > > +   }
> > > +
> > >     ret = lbs_cmd_802_11_sleep_params(priv, CMD_ACT_GET, &sp);
> > >     if (ret)
> > >             goto out_unlock;
> > > @@ -223,6 +233,9 @@ static ssize_t lbs_threshold_read(uint16_t tlv_type, uint16_t event_mask,
> > >     u8 freq;
> > >     int events = 0;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv))
> > > +           return -EBUSY;
> > > +
> > >     buf = (char *)get_zeroed_page(GFP_KERNEL);
> > >     if (!buf)
> > >             return -ENOMEM;
> > > @@ -275,6 +288,9 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
> > >     char *buf;
> > >     int ret;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv))
> > > +           return -EBUSY;
> > > +
> > >     buf = (char *)get_zeroed_page(GFP_KERNEL);
> > >     if (!buf)
> > >             return -ENOMEM;
> > > @@ -444,6 +460,11 @@ static ssize_t lbs_rdmac_read(struct file *file, char __user *userbuf,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           free_page(addr);
> > > +           return -EBUSY;
> > > +   }
> > > +
> > >     offval.offset = priv->mac_offset;
> > >     offval.value = 0;
> > >
> > > @@ -496,6 +517,11 @@ static ssize_t lbs_wrmac_write(struct file *file,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           res = -EBUSY;
> > > +           goto out_unlock;
> > > +   }
> > > +
> > >     buf_size = min(count, len - 1);
> > >     if (copy_from_user(buf, userbuf, buf_size)) {
> > >             res = -EFAULT;
> > > @@ -532,6 +558,11 @@ static ssize_t lbs_rdbbp_read(struct file *file, char __user *userbuf,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           free_page(addr);
> > > +           return -EBUSY;
> > > +   }
> > > +
> > >     offval.offset = priv->bbp_offset;
> > >     offval.value = 0;
> > >
> > > @@ -585,6 +616,11 @@ static ssize_t lbs_wrbbp_write(struct file *file,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           res = -EBUSY;
> > > +           goto out_unlock;
> > > +   }
> > > +
> > >     buf_size = min(count, len - 1);
> > >     if (copy_from_user(buf, userbuf, buf_size)) {
> > >             res = -EFAULT;
> > > @@ -621,6 +657,11 @@ static ssize_t lbs_rdrf_read(struct file *file, char __user *userbuf,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           free_page(addr);
> > > +           return -EBUSY;
> > > +   }
> > > +
> > >     offval.offset = priv->rf_offset;
> > >     offval.value = 0;
> > >
> > > @@ -674,6 +715,11 @@ static ssize_t lbs_wrrf_write(struct file *file,
> > >     if (!buf)
> > >             return -ENOMEM;
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           res = -EBUSY;
> > > +           goto out_unlock;
> > > +   }
> > > +
> > >     buf_size = min(count, len - 1);
> > >     if (copy_from_user(buf, userbuf, buf_size)) {
> > >             res = -EFAULT;
> > > diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h
> > > index 0b84bdc..34b475f 100644
> > > --- a/drivers/net/wireless/libertas/decl.h
> > > +++ b/drivers/net/wireless/libertas/decl.h
> > > @@ -33,6 +33,10 @@ int lbs_execute_next_command(struct lbs_private *priv);
> > >  int lbs_process_event(struct lbs_private *priv, u32 event);
> > >  void lbs_queue_event(struct lbs_private *priv, u32 event);
> > >  void lbs_notify_command_response(struct lbs_private *priv, u8 resp_idx);
> > > +int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep);
> > > +int lbs_is_cmd_allowed(struct lbs_private *priv);
> > > +int lbs_enter_auto_deep_sleep(struct lbs_private *priv);
> > > +int lbs_exit_auto_deep_sleep(struct lbs_private *priv);
> > >
> > >  u32 lbs_fw_index_to_data_rate(u8 index);
> > >  u8 lbs_data_rate_to_fw_index(u32 rate);
> > > diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
> > > index 578c697..e2b4ef2 100644
> > > --- a/drivers/net/wireless/libertas/dev.h
> > > +++ b/drivers/net/wireless/libertas/dev.h
> > > @@ -129,6 +129,20 @@ struct lbs_private {
> > >     u32 bbp_offset;
> > >     u32 rf_offset;
> > >
> > > +   /** Deep sleep flag */
> > > +   int is_deep_sleep;
> > > +   /** Auto deep sleep enabled flag */
> > > +   int is_auto_deep_sleep_enabled;
> > > +   /** Device wakeup required flag */
> > > +   int wakeup_dev_required;
> > > +   /** Auto deep sleep flag*/
> > > +   int is_activity_detected;
> > > +   /** Auto deep sleep timeout (in miliseconds) */
> > > +   int auto_deep_sleep_timeout;
> > > +
> > > +   /** Deep sleep wait queue */
> > > +   wait_queue_head_t       ds_awake_q;
> > > +
> > >     /* Download sent:
> > >        bit0 1/0=data_sent/data_tx_done,
> > >        bit1 1/0=cmd_sent/cmd_tx_done,
> > > @@ -154,6 +168,9 @@ struct lbs_private {
> > >     /** Hardware access */
> > >     int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb);
> > >     void (*reset_card) (struct lbs_private *priv);
> > > +   int (*enter_deep_sleep) (struct lbs_private *priv);
> > > +   int (*exit_deep_sleep) (struct lbs_private *priv);
> > > +   int (*reset_deep_sleep_wakeup) (struct lbs_private *priv);
> > >
> > >     /* Wake On LAN */
> > >     uint32_t wol_criteria;
> > > @@ -204,6 +221,7 @@ struct lbs_private {
> > >
> > >     /** Timers */
> > >     struct timer_list command_timer;
> > > +   struct timer_list auto_deepsleep_timer;
> > >     int nr_retries;
> > >     int cmd_timed_out;
> > >
> > > diff --git a/drivers/net/wireless/libertas/host.h b/drivers/net/wireless/libertas/host.h
> > > index fe8f0cb..c055daa 100644
> > > --- a/drivers/net/wireless/libertas/host.h
> > > +++ b/drivers/net/wireless/libertas/host.h
> > > @@ -57,6 +57,7 @@
> > >  #define CMD_802_11_ENABLE_RSN                      0x002f
> > >  #define CMD_802_11_SET_AFC                 0x003c
> > >  #define CMD_802_11_GET_AFC                 0x003d
> > > +#define CMD_802_11_DEEP_SLEEP                  0x003e
> > >  #define CMD_802_11_AD_HOC_STOP                     0x0040
> > >  #define CMD_802_11_HOST_SLEEP_CFG          0x0043
> > >  #define CMD_802_11_WAKEUP_CONFIRM          0x0044
> > > diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
> > > index 6238176..465742f 100644
> > > --- a/drivers/net/wireless/libertas/if_cs.c
> > > +++ b/drivers/net/wireless/libertas/if_cs.c
> > > @@ -946,6 +946,9 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
> > >     card->priv = priv;
> > >     priv->card = card;
> > >     priv->hw_host_to_card = if_cs_host_to_card;
> > > +   priv->enter_deep_sleep = NULL;
> > > +   priv->exit_deep_sleep = NULL;
> > > +   priv->reset_deep_sleep_wakeup = NULL;
> > >     priv->fw_ready = 1;
> > >
> > >     /* Now actually get the IRQ */
> > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
> > > index 485a8d4..9716728 100644
> > > --- a/drivers/net/wireless/libertas/if_sdio.c
> > > +++ b/drivers/net/wireless/libertas/if_sdio.c
> > > @@ -831,6 +831,58 @@ out:
> > >     return ret;
> > >  }
> > >
> > > +static int if_sdio_enter_deep_sleep(struct lbs_private *priv)
> > > +{
> > > +   int ret = -1;
> > > +   struct cmd_header cmd;
> > > +
> > > +   memset(&cmd, 0, sizeof(cmd));
> > > +
> > > +   lbs_deb_sdio("send DEEP_SLEEP command\n");
> > > +   ret = __lbs_cmd(priv, CMD_802_11_DEEP_SLEEP, &cmd, sizeof(cmd),
> > > +                   lbs_cmd_copyback, (unsigned long) &cmd);
> > > +   if (ret)
> > > +           lbs_pr_err("DEEP_SLEEP cmd failed\n");
> > > +
> > > +   mdelay(200);
> > > +   return ret;
> > > +}
> > > +
> > > +static int if_sdio_exit_deep_sleep(struct lbs_private *priv)
> > > +{
> > > +   struct if_sdio_card *card = priv->card;
> > > +   int ret = -1;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_SDIO);
> > > +   sdio_claim_host(card->func);
> > > +
> > > +   sdio_writeb(card->func, HOST_POWER_UP, CONFIGURATION_REG, &ret);
> > > +   if (ret)
> > > +           lbs_pr_err("sdio_writeb failed!\n");
> > > +
> > > +   sdio_release_host(card->func);
> > > +   lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret);
> > > +   return ret;
> > > +}
> > > +
> > > +static int if_sdio_reset_deep_sleep_wakeup(struct lbs_private *priv)
> > > +{
> > > +   struct if_sdio_card *card = priv->card;
> > > +   int ret = -1;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_SDIO);
> > > +   sdio_claim_host(card->func);
> > > +
> > > +   sdio_writeb(card->func, 0, CONFIGURATION_REG, &ret);
> > > +   if (ret)
> > > +           lbs_pr_err("sdio_writeb failed!\n");
> > > +
> > > +   sdio_release_host(card->func);
> > > +   lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret);
> > > +   return ret;
> > > +
> > > +}
> > > +
> > >  /*******************************************************************/
> > >  /* SDIO callbacks                                                  */
> > >  /*******************************************************************/
> > > @@ -859,6 +911,7 @@ static void if_sdio_interrupt(struct sdio_func *func)
> > >      * Ignore the define name, this really means the card has
> > >      * successfully received the command.
> > >      */
> > > +   card->priv->is_activity_detected = 1;
> > >     if (cause & IF_SDIO_H_INT_DNLD)
> > >             lbs_host_to_card_done(card->priv);
> > >
> > > @@ -998,6 +1051,9 @@ static int if_sdio_probe(struct sdio_func *func,
> > >
> > >     priv->card = card;
> > >     priv->hw_host_to_card = if_sdio_host_to_card;
> > > +   priv->enter_deep_sleep = if_sdio_enter_deep_sleep;
> > > +   priv->exit_deep_sleep = if_sdio_exit_deep_sleep;
> > > +   priv->reset_deep_sleep_wakeup = if_sdio_reset_deep_sleep_wakeup;
> > >
> > >     priv->fw_ready = 1;
> > >
> > > diff --git a/drivers/net/wireless/libertas/if_sdio.h b/drivers/net/wireless/libertas/if_sdio.h
> > > index 60c9b2f..12179c1 100644
> > > --- a/drivers/net/wireless/libertas/if_sdio.h
> > > +++ b/drivers/net/wireless/libertas/if_sdio.h
> > > @@ -51,5 +51,6 @@
> > >  #define IF_SDIO_EVENT           0x80fc
> > >
> > >  #define IF_SDIO_BLOCK_SIZE 256
> > > -
> > > +#define CONFIGURATION_REG               0x03
> > > +#define HOST_POWER_UP                   (0x1U << 1)
> > >  #endif
> > > diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c
> > > index 446e327..e2fa657 100644
> > > --- a/drivers/net/wireless/libertas/if_spi.c
> > > +++ b/drivers/net/wireless/libertas/if_spi.c
> > > @@ -1117,6 +1117,9 @@ static int __devinit if_spi_probe(struct spi_device *spi)
> > >     card->priv = priv;
> > >     priv->card = card;
> > >     priv->hw_host_to_card = if_spi_host_to_card;
> > > +   priv->enter_deep_sleep = NULL;
> > > +   priv->exit_deep_sleep = NULL;
> > > +   priv->reset_deep_sleep_wakeup = NULL;
> > >     priv->fw_ready = 1;
> > >
> > >     /* Initialize interrupt handling stuff. */
> > > diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
> > > index 92bc8c5..a8262de 100644
> > > --- a/drivers/net/wireless/libertas/if_usb.c
> > > +++ b/drivers/net/wireless/libertas/if_usb.c
> > > @@ -300,6 +300,9 @@ static int if_usb_probe(struct usb_interface *intf,
> > >     cardp->priv->fw_ready = 1;
> > >
> > >     priv->hw_host_to_card = if_usb_host_to_card;
> > > +   priv->enter_deep_sleep = NULL;
> > > +   priv->exit_deep_sleep = NULL;
> > > +   priv->reset_deep_sleep_wakeup = NULL;
> > >  #ifdef CONFIG_OLPC
> > >     if (machine_is_olpc())
> > >             priv->reset_card = if_usb_reset_olpc_card;
> > > diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
> > > index 8df1cfd..3b14fcc 100644
> > > --- a/drivers/net/wireless/libertas/main.c
> > > +++ b/drivers/net/wireless/libertas/main.c
> > > @@ -574,8 +574,10 @@ void lbs_host_to_card_done(struct lbs_private *priv)
> > >     priv->dnld_sent = DNLD_RES_RECEIVED;
> > >
> > >     /* Wake main thread if commands are pending */
> > > -   if (!priv->cur_cmd || priv->tx_pending_len > 0)
> > > -           wake_up_interruptible(&priv->waitq);
> > > +   if (!priv->cur_cmd || priv->tx_pending_len > 0) {
> > > +           if (!priv->wakeup_dev_required)
> > > +                   wake_up_interruptible(&priv->waitq);
> > > +   }
> > >
> > >     spin_unlock_irqrestore(&priv->driver_lock, flags);
> > >     lbs_deb_leave(LBS_DEB_THREAD);
> > > @@ -770,7 +772,8 @@ static int lbs_thread(void *data)
> > >                     shouldsleep = 0;        /* We have a command response */
> > >             else if (priv->cur_cmd)
> > >                     shouldsleep = 1;        /* Can't send a command; one already running */
> > > -           else if (!list_empty(&priv->cmdpendingq))
> > > +           else if (!list_empty(&priv->cmdpendingq) &&
> > > +                                   !(priv->wakeup_dev_required))
> > >                     shouldsleep = 0;        /* We have a command to send */
> > >             else if (__kfifo_len(priv->event_fifo))
> > >                     shouldsleep = 0;        /* We have an event to process */
> > > @@ -822,6 +825,26 @@ static int lbs_thread(void *data)
> > >             }
> > >             spin_unlock_irq(&priv->driver_lock);
> > >
> > > +           /* Process hardware events, e.g. card removed, link lost */
> > > +           spin_lock_irq(&priv->driver_lock);
> > > +           while (__kfifo_len(priv->event_fifo)) {
> > > +                   u32 event;
> > > +                   __kfifo_get(priv->event_fifo, (unsigned char *) &event,
> > > +                           sizeof(event));
> > > +                   spin_unlock_irq(&priv->driver_lock);
> > > +                   lbs_process_event(priv, event);
> > > +                   spin_lock_irq(&priv->driver_lock);
> > > +           }
> > > +           spin_unlock_irq(&priv->driver_lock);
> > > +
> > > +           if (priv->wakeup_dev_required) {
> > > +                   lbs_deb_thread("Waking up device...\n");
> > > +                   /* Wake up device */
> > > +                   if (priv->exit_deep_sleep(priv))
> > > +                           lbs_deb_thread("Wakeup device failed\n");
> > > +                   continue;
> > > +           }
> > > +
> > >             /* command timeout stuff */
> > >             if (priv->cmd_timed_out && priv->cur_cmd) {
> > >                     struct cmd_ctrl_node *cmdnode = priv->cur_cmd;
> > > @@ -849,18 +872,7 @@ static int lbs_thread(void *data)
> > >             }
> > >             priv->cmd_timed_out = 0;
> > >
> > > -           /* Process hardware events, e.g. card removed, link lost */
> > > -           spin_lock_irq(&priv->driver_lock);
> > > -           while (__kfifo_len(priv->event_fifo)) {
> > > -                   u32 event;
> > >
> > > -                   __kfifo_get(priv->event_fifo, (unsigned char *) &event,
> > > -                           sizeof(event));
> > > -                   spin_unlock_irq(&priv->driver_lock);
> > > -                   lbs_process_event(priv, event);
> > > -                   spin_lock_irq(&priv->driver_lock);
> > > -           }
> > > -           spin_unlock_irq(&priv->driver_lock);
> > >
> > >             if (!priv->fw_ready)
> > >                     continue;
> > > @@ -894,6 +906,9 @@ static int lbs_thread(void *data)
> > >                 (priv->psstate == PS_STATE_PRE_SLEEP))
> > >                     continue;
> > >
> > > +           if (priv->is_deep_sleep)
> > > +                   continue;
> > > +
> > >             /* Execute the next command */
> > >             if (!priv->dnld_sent && !priv->cur_cmd)
> > >                     lbs_execute_next_command(priv);
> > > @@ -928,6 +943,7 @@ static int lbs_thread(void *data)
> > >     }
> > >
> > >     del_timer(&priv->command_timer);
> > > +   del_timer(&priv->auto_deepsleep_timer);
> > >     wake_up_all(&priv->cmd_pending);
> > >
> > >     lbs_deb_leave(LBS_DEB_THREAD);
> > > @@ -1050,6 +1066,60 @@ out:
> > >     lbs_deb_leave(LBS_DEB_CMD);
> > >  }
> > >
> > > +/**
> > > + *  This function put the device back to deep sleep mode when timer expires
> > > + *  and no activity (command, event, data etc.) is detected.
> > > + */
> > > +static void auto_deepsleep_timer_fn(unsigned long data)
> > > +{
> > > +   struct lbs_private *priv = (struct lbs_private *)data;
> > > +   int ret;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_CMD);
> > > +
> > > +   if (priv->is_activity_detected) {
> > > +           priv->is_activity_detected = 0;
> > > +   } else {
> > > +           if (priv->is_auto_deep_sleep_enabled &&
> > > +                           (!priv->wakeup_dev_required) &&
> > > +                           (priv->connect_status != LBS_CONNECTED)) {
> > > +                   lbs_deb_main("Entering auto deep sleep mode...\n");
> > > +                   ret = lbs_prepare_and_send_command(priv,
> > > +                                   CMD_802_11_DEEP_SLEEP, 0,
> > > +                                   0, 0, NULL);
> > > +           }
> > > +   }
> > > +   mod_timer(&priv->auto_deepsleep_timer , jiffies +
> > > +                           (priv->auto_deep_sleep_timeout * HZ)/1000);
> > > +   lbs_deb_leave(LBS_DEB_CMD);
> > > +}
> > > +
> > > +int lbs_enter_auto_deep_sleep(struct lbs_private *priv)
> > > +{
> > > +   lbs_deb_enter(LBS_DEB_SDIO);
> > > +
> > > +   priv->is_auto_deep_sleep_enabled = 1;
> > > +   if (priv->is_deep_sleep)
> > > +           priv->wakeup_dev_required = 1;
> > > +   mod_timer(&priv->auto_deepsleep_timer ,
> > > +                   jiffies + (priv->auto_deep_sleep_timeout * HZ)/1000);
> > > +
> > > +   lbs_deb_leave(LBS_DEB_SDIO);
> > > +   return 0;
> > > +}
> > > +
> > > +int lbs_exit_auto_deep_sleep(struct lbs_private *priv)
> > > +{
> > > +   lbs_deb_enter(LBS_DEB_SDIO);
> > > +
> > > +   priv->is_auto_deep_sleep_enabled = 0;
> > > +   priv->auto_deep_sleep_timeout = 0;
> > > +   del_timer(&priv->auto_deepsleep_timer);
> > > +
> > > +   lbs_deb_leave(LBS_DEB_SDIO);
> > > +   return 0;
> > > +}
> > > +
> > >  static void lbs_sync_channel_worker(struct work_struct *work)
> > >  {
> > >     struct lbs_private *priv = container_of(work, struct lbs_private,
> > > @@ -1099,11 +1169,17 @@ static int lbs_init_adapter(struct lbs_private *priv)
> > >     priv->capability = WLAN_CAPABILITY_SHORT_PREAMBLE;
> > >     priv->psmode = LBS802_11POWERMODECAM;
> > >     priv->psstate = PS_STATE_FULL_POWER;
> > > +   priv->is_deep_sleep = 0;
> > > +   priv->is_auto_deep_sleep_enabled = 0;
> > > +   priv->wakeup_dev_required = 0;
> > > +   init_waitqueue_head(&priv->ds_awake_q);
> > >
> > >     mutex_init(&priv->lock);
> > >
> > >     setup_timer(&priv->command_timer, command_timer_fn,
> > >             (unsigned long)priv);
> > > +   setup_timer(&priv->auto_deepsleep_timer, auto_deepsleep_timer_fn,
> > > +                   (unsigned long)priv);
> > >
> > >     INIT_LIST_HEAD(&priv->cmdfreeq);
> > >     INIT_LIST_HEAD(&priv->cmdpendingq);
> > > @@ -1142,6 +1218,7 @@ static void lbs_free_adapter(struct lbs_private *priv)
> > >     if (priv->event_fifo)
> > >             kfifo_free(priv->event_fifo);
> > >     del_timer(&priv->command_timer);
> > > +   del_timer(&priv->auto_deepsleep_timer);
> > >     kfree(priv->networks);
> > >     priv->networks = NULL;
> > >
> > > @@ -1272,6 +1349,11 @@ void lbs_remove_card(struct lbs_private *priv)
> > >     wrqu.ap_addr.sa_family = ARPHRD_ETHER;
> > >     wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL);
> > >
> > > +   if (priv->is_deep_sleep) {
> > > +           priv->is_deep_sleep = 0;
> > > +           wake_up_interruptible(&priv->ds_awake_q);
> > > +   }
> > > +
> > >     /* Stop the thread servicing the interrupts */
> > >     priv->surpriseremoved = 1;
> > >     kthread_stop(priv->main_thread);
> > > @@ -1392,6 +1474,7 @@ void lbs_stop_card(struct lbs_private *priv)
> > >
> > >     /* Delete the timeout of the currently processing command */
> > >     del_timer_sync(&priv->command_timer);
> > > +   del_timer_sync(&priv->auto_deepsleep_timer);
> > >
> > >     /* Flush pending command nodes */
> > >     spin_lock_irqsave(&priv->driver_lock, flags);
> > > diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
> > > index 6c95af3..e468e15 100644
> > > --- a/drivers/net/wireless/libertas/scan.c
> > > +++ b/drivers/net/wireless/libertas/scan.c
> > > @@ -950,6 +950,11 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     if (!priv->radio_on) {
> > >             ret = -EINVAL;
> > >             goto out;
> > > @@ -1017,6 +1022,12 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           err = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", err);
> > > +           return err;
> > > +   }
> > > +
> > >     /* iwlist should wait until the current scan is finished */
> > >     if (priv->scan_channel)
> > >             return -EAGAIN;
> > > diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
> > > index be837a0..38a451e 100644
> > > --- a/drivers/net/wireless/libertas/wext.c
> > > +++ b/drivers/net/wireless/libertas/wext.c
> > > @@ -45,6 +45,31 @@ static inline void lbs_cancel_association_work(struct lbs_private *priv)
> > >     priv->pending_assoc_req = NULL;
> > >  }
> > >
> > > +/**
> > > + *  @brief This function checks if the command is allowed.
> > > + *
> > > + *  @param priv         A pointer to lbs_private structure
> > > + *  @return             allowed or not allowed.
> > > + */
> > > +
> > > +int lbs_is_cmd_allowed(struct lbs_private *priv)
> > > +{
> > > +   int         ret = 1;
> > > +
> > > +   lbs_deb_enter(LBS_DEB_WEXT);
> > > +
> > > +   if (!priv->is_auto_deep_sleep_enabled) {
> > > +           if (priv->is_deep_sleep) {
> > > +                   lbs_deb_wext("IOCTLS called when station"
> > > +                                   "is in deep sleep\n");
> > > +                   ret = 0;
> > > +           }
> > > +   }
> > > +
> > > +   lbs_deb_leave(LBS_DEB_WEXT);
> > > +   return ret;
> > > +}
> > > +
> > >
> > >  /**
> > >   *  @brief Find the channel frequency power info with specific channel
> > > @@ -168,6 +193,11 @@ static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           lbs_deb_leave(LBS_DEB_WEXT);
> > > +           return -EBUSY;
> > > +   }
> > > +
> > >     cfp = lbs_find_cfp_by_band_and_channel(priv, 0,
> > >                                        priv->curbssparams.channel);
> > >
> > > @@ -278,6 +308,12 @@ static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     if (vwrq->disabled)
> > >             val = MRVDRV_RTS_MAX_VALUE;
> > >
> > > @@ -299,6 +335,11 @@ static int lbs_get_rts(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     ret = lbs_get_snmp_mib(priv, SNMP_MIB_OID_RTS_THRESHOLD, &val);
> > >     if (ret)
> > >             goto out;
> > > @@ -321,6 +362,12 @@ static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     if (vwrq->disabled)
> > >             val = MRVDRV_FRAG_MAX_VALUE;
> > >
> > > @@ -342,6 +389,11 @@ static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     ret = lbs_get_snmp_mib(priv, SNMP_MIB_OID_FRAG_THRESHOLD, &val);
> > >     if (ret)
> > >             goto out;
> > > @@ -391,6 +443,11 @@ static int lbs_get_txpow(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     if (!priv->radio_on) {
> > >             lbs_deb_wext("tx power off\n");
> > >             vwrq->value = 0;
> > > @@ -424,6 +481,11 @@ static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >          if ((vwrq->flags & IW_RETRY_TYPE) != IW_RETRY_LIMIT)
> > >                  return -EOPNOTSUPP;
> > >
> > > @@ -472,6 +534,11 @@ static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     vwrq->disabled = 0;
> > >
> > >     if (vwrq->flags & IW_RETRY_LONG) {
> > > @@ -709,6 +776,7 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info,
> > >                       struct iw_param *vwrq, char *extra)
> > >  {
> > >     struct lbs_private *priv = dev->ml_priv;
> > > +   int ret = 0;
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > @@ -737,8 +805,54 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info,
> > >                    "setting power timeout is not supported\n");
> > >             return -EINVAL;
> > >     } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) {
> > > -           lbs_deb_wext("setting power period not supported\n");
> > > -           return -EINVAL;
> > > +           vwrq->value = vwrq->value / 1000;
> > > +           if (!priv->enter_deep_sleep) {
> > > +                   lbs_pr_err("deep sleep feature is not implemented "
> > > +                                   "for this interface driver\n");
> > > +                   return -EINVAL;
> > > +           }
> > > +
> > > +           if (priv->connect_status == LBS_CONNECTED) {
> > > +                   if ((priv->is_auto_deep_sleep_enabled) &&
> > > +                                           (vwrq->value == -1000)) {
> > > +                           lbs_exit_auto_deep_sleep(priv);
> > > +                           return 0;
> > > +                   } else {
> > > +                           lbs_pr_err("can't use deep sleep cmd in "
> > > +                                           "connected state\n");
> > > +                           return -EINVAL;
> > > +                   }
> > > +           }
> > > +
> > > +           if ((vwrq->value < 0) && (vwrq->value != -1000)) {
> > > +                   lbs_pr_err("unknown option\n");
> > > +                   return -EINVAL;
> > > +           }
> > > +
> > > +           if (vwrq->value > 0) {
> > > +                   if (!priv->is_auto_deep_sleep_enabled) {
> > > +                           priv->is_activity_detected = 0;
> > > +                           priv->auto_deep_sleep_timeout = vwrq->value;
> > > +                           lbs_enter_auto_deep_sleep(priv);
> > > +                   } else {
> > > +                           priv->auto_deep_sleep_timeout = vwrq->value;
> > > +                           lbs_deb_debugfs("auto deep sleep: "
> > > +                                           "already enabled\n");
> > > +                   }
> > > +                   return 0;
> > > +           } else {
> > > +                   if (priv->is_auto_deep_sleep_enabled) {
> > > +                           lbs_exit_auto_deep_sleep(priv);
> > > +                           /* Try to exit deep sleep if auto */
> > > +                           /*deep sleep disabled */
> > > +                           ret = lbs_set_deep_sleep(priv, 0);
> > > +                   }
> > > +                   if (vwrq->value == 0)
> > > +                           ret = lbs_set_deep_sleep(priv, 1);
> > > +                   else if (vwrq->value == -1000)
> > > +                           ret = lbs_set_deep_sleep(priv, 0);
> > > +                   return ret;
> > > +           }
> > >     }
> > >
> > >     if (priv->psmode != LBS802_11POWERMODECAM) {
> > > @@ -752,6 +866,7 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info,
> > >     }
> > >
> > >     lbs_deb_leave(LBS_DEB_WEXT);
> > > +
> > >     return 0;
> > >  }
> > >
> > > @@ -792,6 +907,9 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev)
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv))
> > > +           return NULL;
> > > +
> > >     priv->wstats.status = priv->mode;
> > >
> > >     /* If we're not associated, all quality values are meaningless */
> > > @@ -892,6 +1010,12 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     mutex_lock(&priv->lock);
> > >     assoc_req = lbs_get_association_request(priv);
> > >     if (!assoc_req) {
> > > @@ -1000,6 +1124,12 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info,
> > >     u8 rates[MAX_RATES + 1];
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > > +
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     lbs_deb_wext("vwrq->value %d\n", vwrq->value);
> > >     lbs_deb_wext("vwrq->fixed %d\n", vwrq->fixed);
> > >
> > > @@ -1058,6 +1188,11 @@ static int lbs_get_rate(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           lbs_deb_leave(LBS_DEB_WEXT);
> > > +           return -EBUSY;
> > > +   }
> > > +
> > >     if (priv->connect_status == LBS_CONNECTED) {
> > >             vwrq->value = priv->cur_rate * 500000;
> > >
> > > @@ -1084,6 +1219,11 @@ static int lbs_set_mode(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     if (   (*uwrq != IW_MODE_ADHOC)
> > >         && (*uwrq != IW_MODE_INFRA)
> > >         && (*uwrq != IW_MODE_AUTO)) {
> > > @@ -1325,6 +1465,12 @@ static int lbs_set_encode(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     mutex_lock(&priv->lock);
> > >     assoc_req = lbs_get_association_request(priv);
> > >     if (!assoc_req) {
> > > @@ -1508,6 +1654,12 @@ static int lbs_set_encodeext(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     mutex_lock(&priv->lock);
> > >     assoc_req = lbs_get_association_request(priv);
> > >     if (!assoc_req) {
> > > @@ -1720,6 +1872,12 @@ static int lbs_set_auth(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     mutex_lock(&priv->lock);
> > >     assoc_req = lbs_get_association_request(priv);
> > >     if (!assoc_req) {
> > > @@ -1822,6 +1980,12 @@ static int lbs_get_auth(struct net_device *dev,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     switch (dwrq->flags & IW_AUTH_INDEX) {
> > >     case IW_AUTH_KEY_MGMT:
> > >             dwrq->value = priv->secinfo.key_mgmt;
> > > @@ -1864,6 +2028,11 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info
> > *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           goto out;
> > > +   }
> > > +
> > >     if (vwrq->disabled) {
> > >             lbs_set_radio(priv, RADIO_PREAMBLE_AUTO, 0);
> > >             goto out;
> > > @@ -1983,6 +2152,12 @@ static int lbs_set_essid(struct net_device *dev, struct iw_request_info
> > *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     if (!priv->radio_on) {
> > >             ret = -EINVAL;
> > >             goto out;
> > > @@ -2110,6 +2285,12 @@ static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info,
> > >
> > >     lbs_deb_enter(LBS_DEB_WEXT);
> > >
> > > +   if (!lbs_is_cmd_allowed(priv)) {
> > > +           ret = -EBUSY;
> > > +           lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
> > > +           return ret;
> > > +   }
> > > +
> > >     if (!priv->radio_on)
> > >             return -EINVAL;
> > >
> > > _______________________________________________
> > > libertas-dev mailing list
> > > libertas-dev@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/libertas-dev
> 
> NrybXǧv^)޺{.n+{*ޕ,{ay\x1dʇڙ,j\afhz\x1ew\fj:+vwjm\azZ+ݢj"!


^ permalink raw reply

* RE: [PATCH v2] libertas: Add auto deep sleep support for SD8385/SD8686/SD8688
From: Bing Zhao @ 2009-10-05 18:47 UTC (permalink / raw)
  To: Dan Williams
  Cc: libertas-dev@lists.infradead.org, Amitkumar Karwar,
	linux-wireless@vger.kernel.org
In-Reply-To: <1254421642.9657.60.camel@localhost.localdomain>

SGkgRGFuLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IERhbiBXaWxs
aWFtcyBbbWFpbHRvOmRjYndAcmVkaGF0LmNvbV0NCj4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIg
MDEsIDIwMDkgMTE6MjcgQU0NCj4gVG86IEJpbmcgWmhhbw0KPiBDYzogbGliZXJ0YXMtZGV2QGxp
c3RzLmluZnJhZGVhZC5vcmc7IEFtaXRrdW1hciBLYXJ3YXI7IGxpbnV4LXdpcmVsZXNzQHZnZXIu
a2VybmVsLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyXSBsaWJlcnRhczogQWRkIGF1dG8g
ZGVlcCBzbGVlcCBzdXBwb3J0IGZvciBTRDgzODUvU0Q4Njg2L1NEODY4OA0KPg0KPiBPbiBXZWQs
IDIwMDktMDktMzAgYXQgMjA6MDQgLTA3MDAsIEJpbmcgWmhhbyB3cm90ZToNCj4gPiBGcm9tOiBB
bWl0a3VtYXIgS2Fyd2FyIDxha2Fyd2FyQG1hcnZlbGwuY29tPg0KPiA+DQo+ID4gQWRkIHRpbWVy
IGJhc2VkIGF1dG8gZGVlcCBzbGVlcCBmZWF0dXJlIGluIGxpYmVydGFzIGRyaXZlciB3aGljaCBj
YW4gYmUNCj4gPiBjb25maWd1cmVkIHVzaW5nIGl3Y29uZmlnIGNvbW1hbmQuIFRoaXMgaXMgdGVz
dGVkIG9uIFNEODY4OCwgU0Q4Njg2IGNhcmRzDQo+ID4gd2l0aCBmaXJtd2FyZSB2ZXJzaW9ucyAx
MC4zOC4xLnAyNSwgOS43MC40LnAwIHJlc3BlY3RpdmVseSBvbiAzMi1iaXQgYW5kIDY0LWJpdA0K
PiA+IHBsYXRmb3Jtcy4gVGVzdHMgaGF2ZSBiZWVuIGRvbmUgZm9yIFVTQi9DUyBjYXJkcyB0byBt
YWtlIHN1cmUgdGhhdCB0aGUgcGF0Y2gNCj4gPiB3b24ndCBicmVhayBVU0IvQ1MgY29kZS4gV2Ug
ZGlkbid0IHRlc3QgdGhlIGlmX3NwaSBkcml2ZXIuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBB
bWl0a3VtYXIgS2Fyd2FyIDxha2Fyd2FyQG1hcnZlbGwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6
IEJpbmcgWmhhbyA8YnpoYW9AbWFydmVsbC5jb20+DQo+DQo+IEFja2VkLWJ5OiBEYW4gV2lsbGlh
bXMgPGRjYndAcmVkaGF0LmNvbT4NCj4NCj4gVGhvdWdoIEkgd29uZGVyIGlmIHdlIGNvdWxkIGp1
c3QgcHV0IHRoZSBsYnNfaXNfY21kX2FsbG93ZWQoKSBjaGVjayBpbnRvDQo+IHRoZSBhY3R1YWwg
Y29tbWFuZCBoYW5kbGluZyByb3V0aW5lcyBpbnN0ZWFkIG9mIHNwcmlua2xpbmcgaXQgYXJvdW5k
Lg0KDQpZZXMsIHdlIGNhbiBkbyB0aGF0Lg0KDQo+IFdlIGRpZCBtb3ZlIGF3YXkgZnJvbSB0aGUg
J29uZS1odWdlLXN3aXRjaCcgY29tbWFuZCBzdWJtaXNzaW9uIG1vZGVsLA0KPiB3aGljaCBtYWtl
cyBpdCBhIGJpdCBoYXJkZXIgdG8gZ2F0ZSBjb21tYW5kcyBiYXNlZCBvbiBkZXZpY2Ugc3RhdGUs
IGJ1dA0KPiBJIGNhbid0IHRoaW5rIG9mIGFueXRoaW5nIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQg
dGhhdCB3b3VsZCBodXJ0IGJ5DQo+IGRvaW5nIGl0IGxpa2UgdGhhdC4NCj4NCj4gaS5lLiB3b3Vs
ZCBwdXR0aW5nIHRoZSBjaGVjayBpbiBib3RoIF9fbGJzX2NtZF9hc3luYygpIGFuZA0KPiBsYnNf
cHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKCkgYXJvdW5kIHdoZXJlIHRoZSBwcml2LT5zdXJwcmlz
ZV9yZW1vdmVkDQo+IGNoZWNrIGlzIHdvcmsgdG9vPw0KDQpXZSB3aWxsIHN1Ym1pdCBhIG5ldyBw
YXRjaCBmb3IgdGhpcy4NCg0KUmVnYXJkcywNCg0KQmluZw0KDQo+DQo+IERhbg0KPg0KPiA+IC0t
LQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUgICAgfCAgIDI2ICsr
KystDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jICAgICB8ICAgNzIg
KysrKysrKysrKysrLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNw
LmMgfCAgIDEyICsrDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMu
YyB8ICAgNDYgKysrKysrKysNCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVj
bC5oICAgIHwgICAgNCArDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5o
ICAgICB8ICAgMTggKysrDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3Qu
aCAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5j
ICAgfCAgICAzICsNCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5j
IHwgICA1NiArKysrKysrKysNCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZf
c2Rpby5oIHwgICAgMyArLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9z
cGkuYyAgfCAgICAzICsNCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNi
LmMgIHwgICAgMyArDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyAg
ICB8ICAxMTEgKysrKysrKysrKysrKysrKy0tLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9s
aWJlcnRhcy9zY2FuLmMgICAgfCAgIDExICsrDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xp
YmVydGFzL3dleHQuYyAgICB8ICAxODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0K
PiA+ICAxNSBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0p
DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVB
RE1FIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FDQo+ID4gaW5kZXggYWI2
YTJkNS4uNjM1MDAyZCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJl
cnRhcy9SRUFETUUNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFE
TUUNCj4gPiBAQCAtMSw1ICsxLDUgQEANCj4gPiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4g
PiAtICAgICAgICAgICAgICAgICAgIFJFQURNRSBmb3IgVVNCODM4OA0KPiA+ICsgICAgICAgICAg
ICAgICAgICAgUkVBRE1FIGZvciBMaWJlcnRhcw0KPiA+DQo+ID4gICAoYykgQ29weXJpZ2h0IMKp
IDIwMDMtMjAwNiwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gPiAgIEFsbCBSaWdodHMg
UmVzZXJ2ZWQNCj4gPiBAQCAtMjI2LDQgKzIyNiwyOCBAQCBzZXR1c2Vyc2Nhbg0KPiA+ICAgICAg
QWxsIGVudHJpZXMgaW4gdGhlIHNjYW4gdGFibGUgKG5vdCBqdXN0IHRoZSBuZXcgc2NhbiBkYXRh
IHdoZW4ga2VlcD0xKQ0KPiA+ICAgICAgd2lsbCBiZSBkaXNwbGF5ZWQgdXBvbiBjb21wbGV0aW9u
IGJ5IHVzZSBvZiB0aGUgZ2V0c2NhbnRhYmxlIGlvY3RsLg0KPiA+DQo+ID4gKz09PT09PT09PT09
PT09PT09PT09PT09PQ0KPiA+ICtJV0NPTkZJRyBDT01NQU5EUw0KPiA+ICs9PT09PT09PT09PT09
PT09PT09PT09PT0NCj4gPiArcG93ZXIgcGVyaW9kDQo+ID4gKw0KPiA+ICsgICBUaGlzIGNvbW1h
bmQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIHN0YXRpb24gaW4gZGVlcCBzbGVlcCBtb2RlIC8N
Cj4gPiArICAgYXV0byBkZWVwIHNsZWVwIG1vZGUuDQo+ID4gKw0KPiA+ICsgICBUaGUgdGltZXIg
aXMgaW1wbGVtZW50ZWQgdG8gbW9uaXRvciB0aGUgYWN0aXZpdGllcyAoY29tbWFuZCwgZXZlbnQs
DQo+ID4gKyAgIGV0Yy4pLiBXaGVuIGFuIGFjdGl2aXR5IGlzIGRldGVjdGVkIHN0YXRpb24gd2ls
bCBleGl0IGZyb20gZGVlcA0KPiA+ICsgICBzbGVlcCBtb2RlIGF1dG9tYXRpY2FsbHkgYW5kIHJl
c3RhcnQgdGhlIHRpbWVyLiBBdCB0aW1lciBleHBpcnkNCj4gPiArICAgKG5vIGFjdGl2aXR5IGZv
ciBkZWZpbmVkIHRpbWUgcGVyaW9kKSB0aGUgZGVlcCBzbGVlcCBtb2RlIGlzIGVudGVyZWQNCj4g
PiArICAgYXV0b21hdGljYWxseS4NCj4gPiArDQo+ID4gKyAgIE5vdGU6IHRoaXMgY29tbWFuZCBp
cyBmb3IgU0RJTyBpbnRlcmZhY2Ugb25seS4NCj4gPiArDQo+ID4gKyAgIFVzYWdlOg0KPiA+ICsg
ICBUbyBlbmFibGUgZGVlcCBzbGVlcCBtb2RlIGRvOg0KPiA+ICsgICAgICAgICAgIGl3Y29uZmln
IHdsYW4wIHBvd2VyIHBlcmlvZCAwDQo+ID4gKyAgIFRvIGVuYWJsZSBhdXRvIGRlZXAgc2xlZXAg
bW9kZSB3aXRoIGlkbGUgdGltZSBwZXJpb2QgNSBzZWNvbmRzIGRvOg0KPiA+ICsgICAgICAgICAg
IGl3Y29uZmlnIHdsYW4wIHBvd2VyIHBlcmlvZCA1DQo+ID4gKyAgIFRvIGRpc2FibGUgZGVlcCBz
bGVlcC9hdXRvIGRlZXAgc2xlZXAgbW9kZSBkbzoNCj4gPiArICAgICAgICAgICBpd2NvbmZpZyB3
bGFuMCBwb3dlciBwZXJpb2QgLTENCj4gPiArDQo+ID4gID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2Ry
aXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jDQo+ID4gaW5kZXggNjg1MDk4MS4uM2Ez
ZTg5NCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQu
Yw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jDQo+ID4gQEAg
LTE3LDcgKzE3LDYgQEANCj4gPg0KPiA+ICBzdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKmxi
c19nZXRfY21kX2N0cmxfbm9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOw0KPiA+DQo+ID4g
LQ0KPiA+ICAvKioNCj4gPiAgICogIEBicmllZiBTaW1wbGUgY2FsbGJhY2sgdGhhdCBjb3BpZXMg
cmVzcG9uc2UgYmFjayBpbnRvIGNvbW1hbmQNCj4gPiAgICoNCj4gPiBAQCAtMzE5LDYgKzMxOCw2
MCBAQCBpbnQgbGJzX2NtZF84MDJfMTFfc2xlZXBfcGFyYW1zKHN0cnVjdCBsYnNfcHJpdmF0ZSAq
cHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwNCj4gPiAgICAgcmV0dXJuIDA7DQo+ID4gIH0NCj4g
Pg0KPiA+ICtzdGF0aWMgaW50IGxic193YWl0X2Zvcl9kc19hd2FrZShzdHJ1Y3QgbGJzX3ByaXZh
dGUgKnByaXYpDQo+ID4gK3sNCj4gPiArICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICBs
YnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsNCj4gPiArDQo+ID4gKyAgIGlmIChwcml2LT5pc19k
ZWVwX3NsZWVwKSB7DQo+ID4gKyAgICAgICAgICAgaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGli
bGVfdGltZW91dChwcml2LT5kc19hd2FrZV9xLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICFwcml2LT5pc19kZWVwX3NsZWVwLCAoMTAgKiBIWikpKSB7DQo+ID4gKyAg
ICAgICAgICAgICAgICAgICBsYnNfcHJfZXJyKCJkc19hd2FrZV9xOiB0aW1lciBleHBpcmVkXG4i
KTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOw0KPiA+ICsgICAgICAgICAgIH0N
Cj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01E
LCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g
PiAraW50IGxic19zZXRfZGVlcF9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCBk
ZWVwX3NsZWVwKQ0KPiA+ICt7DQo+ID4gKyAgIGludCByZXQgPSAgMDsNCj4gPiArDQo+ID4gKyAg
IGxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOw0KPiA+ICsNCj4gPiArICAgaWYgKGRlZXBfc2xl
ZXApIHsNCj4gPiArICAgICAgICAgICBpZiAocHJpdi0+aXNfZGVlcF9zbGVlcCAhPSAxKSB7DQo+
ID4gKyAgICAgICAgICAgICAgICAgICBsYnNfZGViX2NtZCgiZGVlcCBzbGVlcDogc2xlZXBcbiIp
Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgQlVHX09OKCFwcml2LT5lbnRlcl9kZWVwX3NsZWVw
KTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJldCA9IHByaXYtPmVudGVyX2RlZXBfc2xlZXAo
cHJpdik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgew0KPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7DQo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPmRldik7DQo+
ID4gKyAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgfSBlbHNlIHsNCj4gPiAr
ICAgICAgICAgICAgICAgICAgIGxic19wcl9lcnIoImRlZXAgc2xlZXA6IGFscmVhZHkgZW5hYmxl
ZFxuIik7DQo+ID4gKyAgICAgICAgICAgfQ0KPiA+ICsgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg
ICAgIGlmIChwcml2LT5pc19kZWVwX3NsZWVwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBs
YnNfZGViX2NtZCgiZGVlcCBzbGVlcDogd2FrZXVwXG4iKTsNCj4gPiArICAgICAgICAgICAgICAg
ICAgIEJVR19PTighcHJpdi0+ZXhpdF9kZWVwX3NsZWVwKTsNCj4gPiArICAgICAgICAgICAgICAg
ICAgIHJldCA9IHByaXYtPmV4aXRfZGVlcF9zbGVlcChwcml2KTsNCj4gPiArICAgICAgICAgICAg
ICAgICAgIGlmICghcmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGxic193YWl0X2Zvcl9kc19hd2FrZShwcml2KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YnNfcHJfZXJyKCJkZWVwIHNsZWVwOiB3YWtldXAiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWRcbiIpOw0KPiA+ICsgICAgICAg
ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgIH0NCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAr
ICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsNCj4gPiAr
ICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgaW50IGxic19jbWRfODAyXzExX3Nl
dF93ZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLA0KPiA+
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jKQ0KPiA+
ICB7DQo+ID4gQEAgLTEyNDIsOCArMTI5NSwxNyBAQCBzdGF0aWMgdm9pZCBsYnNfc3VibWl0X2Nv
bW1hbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LA0KPiA+ICAgICAgICAgICAgIHRpbWVvID0g
SFovNDsNCj4gPiAgICAgfQ0KPiA+DQo+ID4gLSAgIC8qIFNldHVwIHRoZSB0aW1lciBhZnRlciB0
cmFuc21pdCBjb21tYW5kICovDQo+ID4gLSAgIG1vZF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1l
ciwgamlmZmllcyArIHRpbWVvKTsNCj4gPiArICAgaWYgKGNvbW1hbmQgPT0gQ01EXzgwMl8xMV9E
RUVQX1NMRUVQKSB7DQo+ID4gKyAgICAgICAgICAgaWYgKHByaXYtPmlzX2F1dG9fZGVlcF9zbGVl
cF9lbmFibGVkKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2LT53YWtldXBfZGV2X3Jl
cXVpcmVkID0gMTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHByaXYtPmRubGRfc2VudCA9IDA7
DQo+ID4gKyAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgIHByaXYtPmlzX2RlZXBfc2xlZXAg
PSAxOw0KPiA+ICsgICAgICAgICAgIGxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUs
IDApOw0KPiA+ICsgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgIC8qIFNldHVwIHRoZSB0aW1l
ciBhZnRlciB0cmFuc21pdCBjb21tYW5kICovDQo+ID4gKyAgICAgICAgICAgbW9kX3RpbWVyKCZw
cml2LT5jb21tYW5kX3RpbWVyLCBqaWZmaWVzICsgdGltZW8pOw0KPiA+ICsgICB9DQo+ID4NCj4g
PiAgICAgbGJzX2RlYl9sZWF2ZShMQlNfREVCX0hPU1QpOw0KPiA+ICB9DQo+ID4gQEAgLTE1MDUs
NiArMTU2NywxMCBAQCBpbnQgbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChzdHJ1Y3QgbGJz
X3ByaXZhdGUgKnByaXYsDQo+ID4gICAgIGNhc2UgQ01EXzgwMl8xMV9CRUFDT05fQ1RSTDoNCj4g
PiAgICAgICAgICAgICByZXQgPSBsYnNfY21kX2Jjbl9jdHJsKHByaXYsIGNtZHB0ciwgY21kX2Fj
dGlvbik7DQo+ID4gICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgIGNhc2UgQ01EXzgwMl8xMV9E
RUVQX1NMRUVQOg0KPiA+ICsgICAgICAgICAgIGNtZHB0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2
KENNRF84MDJfMTFfREVFUF9TTEVFUCk7DQo+ID4gKyAgICAgICAgICAgY21kcHRyLT5zaXplID0g
Y3B1X3RvX2xlMTYoU19EU19HRU4pOw0KPiA+ICsgICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICBk
ZWZhdWx0Og0KPiA+ICAgICAgICAgICAgIGxic19wcl9lcnIoIlBSRVBfQ01EOiB1bmtub3duIGNv
bW1hbmQgMHglMDR4XG4iLCBjbWRfbm8pOw0KPiA+ICAgICAgICAgICAgIHJldCA9IC0xOw0KPiA+
IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMgYi9k
cml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMNCj4gPiBpbmRleCBjNDJkM2Zh
Li40N2QyYjE5IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFz
L2NtZHJlc3AuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJl
c3AuYw0KPiA+IEBAIC01MDQsOSArNTA0LDIxIEBAIGludCBsYnNfcHJvY2Vzc19ldmVudChzdHJ1
Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBldmVudCkNCj4gPg0KPiA+ICAgICBjYXNlIE1BQ1JF
R19JTlRfQ09ERV9IT1NUX0FXQUtFOg0KPiA+ICAgICAgICAgICAgIGxic19kZWJfY21kKCJFVkVO
VDogaG9zdCBhd2FrZVxuIik7DQo+ID4gKyAgICAgICAgICAgaWYgKHByaXYtPnJlc2V0X2RlZXBf
c2xlZXBfd2FrZXVwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+cmVzZXRfZGVlcF9z
bGVlcF93YWtldXAocHJpdik7DQo+ID4gKyAgICAgICAgICAgcHJpdi0+aXNfZGVlcF9zbGVlcCA9
IDA7DQo+ID4gICAgICAgICAgICAgbGJzX3NlbmRfY29uZmlybXdha2UocHJpdik7DQo+ID4gICAg
ICAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiArICAgY2FzZSBNQUNSRUdfSU5UX0NPREVfREVFUF9T
TEVFUF9BV0FLRToNCj4gPiArICAgICAgICAgICBpZiAocHJpdi0+cmVzZXRfZGVlcF9zbGVlcF93
YWtldXApDQo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2LT5yZXNldF9kZWVwX3NsZWVwX3dh
a2V1cChwcml2KTsNCj4gPiArICAgICAgICAgICBsYnNfZGViX2NtZCgiRVZFTlQ6IGRzIGF3YWtl
XG4iKTsNCj4gPiArICAgICAgICAgICBwcml2LT5pc19kZWVwX3NsZWVwID0gMDsNCj4gPiArICAg
ICAgICAgICBwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkID0gMDsNCj4gPiArICAgICAgICAgICB3
YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRzX2F3YWtlX3EpOw0KPiA+ICsgICAgICAgICAg
IGJyZWFrOw0KPiA+ICsNCj4gPiAgICAgY2FzZSBNQUNSRUdfSU5UX0NPREVfUFNfQVdBS0U6DQo+
ID4gICAgICAgICAgICAgbGJzX2RlYl9jbWQoIkVWRU5UOiBwcyBhd2FrZVxuIik7DQo+ID4gICAg
ICAgICAgICAgLyogaGFuZGxlIHVuZXhwZWN0ZWQgUFMgQVdBS0UgZXZlbnQgKi8NCj4gPiBkaWZm
IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jIGIvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jDQo+ID4gaW5kZXggODkzYTU1Yy4uOGE3
ZTkzMSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1
Z2ZzLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMN
Cj4gPiBAQCAtMTE3LDYgKzExNywxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfc2xlZXBwYXJhbXNf
d3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAg
ICAgIHJldHVybiAtRU5PTUVNOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2Vk
KHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAg
IGdvdG8gb3V0X3VubG9jazsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBt
aW4oY291bnQsIGxlbiAtIDEpOw0KPiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2Vy
X2J1ZiwgYnVmX3NpemUpKSB7DQo+ID4gICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiBA
QCAtMTU3LDYgKzE2MiwxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfc2xlZXBwYXJhbXNfcmVhZChz
dHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsDQo+ID4gICAgIGlmICghYnVm
KQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+DQo+ID4gKyAgIGlmICghbGJz
X2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0K
PiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAg
ICAgcmV0ID0gbGJzX2NtZF84MDJfMTFfc2xlZXBfcGFyYW1zKHByaXYsIENNRF9BQ1RfR0VULCAm
c3ApOw0KPiA+ICAgICBpZiAocmV0KQ0KPiA+ICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsN
Cj4gPiBAQCAtMjIzLDYgKzIzMyw5IEBAIHN0YXRpYyBzc2l6ZV90IGxic190aHJlc2hvbGRfcmVh
ZCh1aW50MTZfdCB0bHZfdHlwZSwgdWludDE2X3QgZXZlbnRfbWFzaywNCj4gPiAgICAgdTggZnJl
cTsNCj4gPiAgICAgaW50IGV2ZW50cyA9IDA7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21k
X2FsbG93ZWQocHJpdikpDQo+ID4gKyAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsNCj4gPiArDQo+
ID4gICAgIGJ1ZiA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KPiA+ICAg
ICBpZiAoIWJ1ZikNCj4gPiAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiBAQCAtMjc1
LDYgKzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90IGxic190aHJlc2hvbGRfd3JpdGUodWludDE2X3Qg
dGx2X3R5cGUsIHVpbnQxNl90IGV2ZW50X21hc2ssDQo+ID4gICAgIGNoYXIgKmJ1ZjsNCj4gPiAg
ICAgaW50IHJldDsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkN
Cj4gPiArICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4gPiAgICAgYnVmID0gKGNo
YXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7DQo+ID4gICAgIGlmICghYnVmKQ0KPiA+
ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+IEBAIC00NDQsNiArNDYwLDExIEBAIHN0
YXRpYyBzc2l6ZV90IGxic19yZG1hY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNl
ciAqdXNlcmJ1ZiwNCj4gPiAgICAgaWYgKCFidWYpDQo+ID4gICAgICAgICAgICAgcmV0dXJuIC1F
Tk9NRU07DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4g
PiArICAgICAgICAgICBmcmVlX3BhZ2UoYWRkcik7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIC1F
QlVTWTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgb2ZmdmFsLm9mZnNldCA9IHByaXYtPm1h
Y19vZmZzZXQ7DQo+ID4gICAgIG9mZnZhbC52YWx1ZSA9IDA7DQo+ID4NCj4gPiBAQCAtNDk2LDYg
KzUxNywxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfd3JtYWNfd3JpdGUoc3RydWN0IGZpbGUgKmZp
bGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0K
PiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAg
ICAgICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsNCj4g
PiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxlbiAtIDEpOw0K
PiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsNCj4g
PiAgICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IEBAIC01MzIsNiArNTU4LDExIEBAIHN0
YXRpYyBzc2l6ZV90IGxic19yZGJicF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNl
ciAqdXNlcmJ1ZiwNCj4gPiAgICAgaWYgKCFidWYpDQo+ID4gICAgICAgICAgICAgcmV0dXJuIC1F
Tk9NRU07DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4g
PiArICAgICAgICAgICBmcmVlX3BhZ2UoYWRkcik7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIC1F
QlVTWTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgb2ZmdmFsLm9mZnNldCA9IHByaXYtPmJi
cF9vZmZzZXQ7DQo+ID4gICAgIG9mZnZhbC52YWx1ZSA9IDA7DQo+ID4NCj4gPiBAQCAtNTg1LDYg
KzYxNiwxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfd3JiYnBfd3JpdGUoc3RydWN0IGZpbGUgKmZp
bGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0K
PiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAg
ICAgICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsNCj4g
PiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxlbiAtIDEpOw0K
PiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsNCj4g
PiAgICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IEBAIC02MjEsNiArNjU3LDExIEBAIHN0
YXRpYyBzc2l6ZV90IGxic19yZHJmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2Vy
ICp1c2VyYnVmLA0KPiA+ICAgICBpZiAoIWJ1ZikNCj4gPiAgICAgICAgICAgICByZXR1cm4gLUVO
T01FTTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+
ICsgICAgICAgICAgIGZyZWVfcGFnZShhZGRyKTsNCj4gPiArICAgICAgICAgICByZXR1cm4gLUVC
VVNZOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBvZmZ2YWwub2Zmc2V0ID0gcHJpdi0+cmZf
b2Zmc2V0Ow0KPiA+ICAgICBvZmZ2YWwudmFsdWUgPSAwOw0KPiA+DQo+ID4gQEAgLTY3NCw2ICs3
MTUsMTEgQEAgc3RhdGljIHNzaXplX3QgbGJzX3dycmZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUs
DQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+
DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAg
ICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsNCj4gPiAr
ICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxlbiAtIDEpOw0KPiA+
ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsNCj4gPiAg
ICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93
aXJlbGVzcy9saWJlcnRhcy9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9k
ZWNsLmgNCj4gPiBpbmRleCAwYjg0YmRjLi4zNGI0NzVmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl
cnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dp
cmVsZXNzL2xpYmVydGFzL2RlY2wuaA0KPiA+IEBAIC0zMyw2ICszMywxMCBAQCBpbnQgbGJzX2V4
ZWN1dGVfbmV4dF9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7DQo+ID4gIGludCBs
YnNfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBldmVudCk7DQo+
ID4gIHZvaWQgbGJzX3F1ZXVlX2V2ZW50KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIGV2
ZW50KTsNCj4gPiAgdm9pZCBsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGxic19w
cml2YXRlICpwcml2LCB1OCByZXNwX2lkeCk7DQo+ID4gK2ludCBsYnNfc2V0X2RlZXBfc2xlZXAo
c3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZGVlcF9zbGVlcCk7DQo+ID4gK2ludCBsYnNf
aXNfY21kX2FsbG93ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsNCj4gPiAraW50IGxic19l
bnRlcl9hdXRvX2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsNCj4gPiAraW50
IGxic19leGl0X2F1dG9fZGVlcF9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOw0KPiA+
DQo+ID4gIHUzMiBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlKHU4IGluZGV4KTsNCj4gPiAgdTgg
bGJzX2RhdGFfcmF0ZV90b19md19pbmRleCh1MzIgcmF0ZSk7DQo+ID4gZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mv
bGliZXJ0YXMvZGV2LmgNCj4gPiBpbmRleCA1NzhjNjk3Li5lMmI0ZWYyIDEwMDY0NA0KPiA+IC0t
LSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oDQo+ID4gKysrIGIvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgNCj4gPiBAQCAtMTI5LDYgKzEyOSwyMCBAQCBz
dHJ1Y3QgbGJzX3ByaXZhdGUgew0KPiA+ICAgICB1MzIgYmJwX29mZnNldDsNCj4gPiAgICAgdTMy
IHJmX29mZnNldDsNCj4gPg0KPiA+ICsgICAvKiogRGVlcCBzbGVlcCBmbGFnICovDQo+ID4gKyAg
IGludCBpc19kZWVwX3NsZWVwOw0KPiA+ICsgICAvKiogQXV0byBkZWVwIHNsZWVwIGVuYWJsZWQg
ZmxhZyAqLw0KPiA+ICsgICBpbnQgaXNfYXV0b19kZWVwX3NsZWVwX2VuYWJsZWQ7DQo+ID4gKyAg
IC8qKiBEZXZpY2Ugd2FrZXVwIHJlcXVpcmVkIGZsYWcgKi8NCj4gPiArICAgaW50IHdha2V1cF9k
ZXZfcmVxdWlyZWQ7DQo+ID4gKyAgIC8qKiBBdXRvIGRlZXAgc2xlZXAgZmxhZyovDQo+ID4gKyAg
IGludCBpc19hY3Rpdml0eV9kZXRlY3RlZDsNCj4gPiArICAgLyoqIEF1dG8gZGVlcCBzbGVlcCB0
aW1lb3V0IChpbiBtaWxpc2Vjb25kcykgKi8NCj4gPiArICAgaW50IGF1dG9fZGVlcF9zbGVlcF90
aW1lb3V0Ow0KPiA+ICsNCj4gPiArICAgLyoqIERlZXAgc2xlZXAgd2FpdCBxdWV1ZSAqLw0KPiA+
ICsgICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBkc19hd2FrZV9xOw0KPiA+ICsNCj4gPiAgICAg
LyogRG93bmxvYWQgc2VudDoNCj4gPiAgICAgICAgYml0MCAxLzA9ZGF0YV9zZW50L2RhdGFfdHhf
ZG9uZSwNCj4gPiAgICAgICAgYml0MSAxLzA9Y21kX3NlbnQvY21kX3R4X2RvbmUsDQo+ID4gQEAg
LTE1NCw2ICsxNjgsOSBAQCBzdHJ1Y3QgbGJzX3ByaXZhdGUgew0KPiA+ICAgICAvKiogSGFyZHdh
cmUgYWNjZXNzICovDQo+ID4gICAgIGludCAoKmh3X2hvc3RfdG9fY2FyZCkgKHN0cnVjdCBsYnNf
cHJpdmF0ZSAqcHJpdiwgdTggdHlwZSwgdTggKnBheWxvYWQsIHUxNiBuYik7DQo+ID4gICAgIHZv
aWQgKCpyZXNldF9jYXJkKSAoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsNCj4gPiArICAgaW50
ICgqZW50ZXJfZGVlcF9zbGVlcCkgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7DQo+ID4gKyAg
IGludCAoKmV4aXRfZGVlcF9zbGVlcCkgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7DQo+ID4g
KyAgIGludCAoKnJlc2V0X2RlZXBfc2xlZXBfd2FrZXVwKSAoc3RydWN0IGxic19wcml2YXRlICpw
cml2KTsNCj4gPg0KPiA+ICAgICAvKiBXYWtlIE9uIExBTiAqLw0KPiA+ICAgICB1aW50MzJfdCB3
b2xfY3JpdGVyaWE7DQo+ID4gQEAgLTIwNCw2ICsyMjEsNyBAQCBzdHJ1Y3QgbGJzX3ByaXZhdGUg
ew0KPiA+DQo+ID4gICAgIC8qKiBUaW1lcnMgKi8NCj4gPiAgICAgc3RydWN0IHRpbWVyX2xpc3Qg
Y29tbWFuZF90aW1lcjsNCj4gPiArICAgc3RydWN0IHRpbWVyX2xpc3QgYXV0b19kZWVwc2xlZXBf
dGltZXI7DQo+ID4gICAgIGludCBucl9yZXRyaWVzOw0KPiA+ICAgICBpbnQgY21kX3RpbWVkX291
dDsNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9o
b3N0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgNCj4gPiBpbmRleCBm
ZThmMGNiLi5jMDU1ZGFhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xp
YmVydGFzL2hvc3QuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hv
c3QuaA0KPiA+IEBAIC01Nyw2ICs1Nyw3IEBADQo+ID4gICNkZWZpbmUgQ01EXzgwMl8xMV9FTkFC
TEVfUlNOICAgICAgICAgICAgICAgICAgICAgIDB4MDAyZg0KPiA+ICAjZGVmaW5lIENNRF84MDJf
MTFfU0VUX0FGQyAgICAgICAgICAgICAgICAgMHgwMDNjDQo+ID4gICNkZWZpbmUgQ01EXzgwMl8x
MV9HRVRfQUZDICAgICAgICAgICAgICAgICAweDAwM2QNCj4gPiArI2RlZmluZSBDTURfODAyXzEx
X0RFRVBfU0xFRVAgICAgICAgICAgICAgICAgICAweDAwM2UNCj4gPiAgI2RlZmluZSBDTURfODAy
XzExX0FEX0hPQ19TVE9QICAgICAgICAgICAgICAgICAgICAgMHgwMDQwDQo+ID4gICNkZWZpbmUg
Q01EXzgwMl8xMV9IT1NUX1NMRUVQX0NGRyAgICAgICAgICAweDAwNDMNCj4gPiAgI2RlZmluZSBD
TURfODAyXzExX1dBS0VVUF9DT05GSVJNICAgICAgICAgIDB4MDA0NA0KPiA+IGRpZmYgLS1naXQg
YS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbGliZXJ0YXMvaWZfY3MuYw0KPiA+IGluZGV4IDYyMzgxNzYuLjQ2NTc0MmYgMTAwNjQ0
DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYw0KPiA+ICsr
KyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMNCj4gPiBAQCAtOTQ2LDYg
Kzk0Niw5IEBAIHN0YXRpYyBpbnQgaWZfY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBf
ZGV2KQ0KPiA+ICAgICBjYXJkLT5wcml2ID0gcHJpdjsNCj4gPiAgICAgcHJpdi0+Y2FyZCA9IGNh
cmQ7DQo+ID4gICAgIHByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX2NzX2hvc3RfdG9fY2FyZDsN
Cj4gPiArICAgcHJpdi0+ZW50ZXJfZGVlcF9zbGVlcCA9IE5VTEw7DQo+ID4gKyAgIHByaXYtPmV4
aXRfZGVlcF9zbGVlcCA9IE5VTEw7DQo+ID4gKyAgIHByaXYtPnJlc2V0X2RlZXBfc2xlZXBfd2Fr
ZXVwID0gTlVMTDsNCj4gPiAgICAgcHJpdi0+ZndfcmVhZHkgPSAxOw0KPiA+DQo+ID4gICAgIC8q
IE5vdyBhY3R1YWxseSBnZXQgdGhlIElSUSAqLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l
dC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJl
cnRhcy9pZl9zZGlvLmMNCj4gPiBpbmRleCA0ODVhOGQ0Li45NzE2NzI4IDEwMDY0NA0KPiA+IC0t
LSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYw0KPiA+ICsrKyBiL2Ry
aXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYw0KPiA+IEBAIC04MzEsNiArODMx
LDU4IEBAIG91dDoNCj4gPiAgICAgcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0YXRp
YyBpbnQgaWZfc2Rpb19lbnRlcl9kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikN
Cj4gPiArew0KPiA+ICsgICBpbnQgcmV0ID0gLTE7DQo+ID4gKyAgIHN0cnVjdCBjbWRfaGVhZGVy
IGNtZDsNCj4gPiArDQo+ID4gKyAgIG1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7DQo+ID4g
Kw0KPiA+ICsgICBsYnNfZGViX3NkaW8oInNlbmQgREVFUF9TTEVFUCBjb21tYW5kXG4iKTsNCj4g
PiArICAgcmV0ID0gX19sYnNfY21kKHByaXYsIENNRF84MDJfMTFfREVFUF9TTEVFUCwgJmNtZCwg
c2l6ZW9mKGNtZCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICBsYnNfY21kX2NvcHliYWNrLCAo
dW5zaWduZWQgbG9uZykgJmNtZCk7DQo+ID4gKyAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAg
bGJzX3ByX2VycigiREVFUF9TTEVFUCBjbWQgZmFpbGVkXG4iKTsNCj4gPiArDQo+ID4gKyAgIG1k
ZWxheSgyMDApOw0KPiA+ICsgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0
aWMgaW50IGlmX3NkaW9fZXhpdF9kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikN
Cj4gPiArew0KPiA+ICsgICBzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsN
Cj4gPiArICAgaW50IHJldCA9IC0xOw0KPiA+ICsNCj4gPiArICAgbGJzX2RlYl9lbnRlcihMQlNf
REVCX1NESU8pOw0KPiA+ICsgICBzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7DQo+ID4gKw0K
PiA+ICsgICBzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBIT1NUX1BPV0VSX1VQLCBDT05GSUdVUkFU
SU9OX1JFRywgJnJldCk7DQo+ID4gKyAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgbGJzX3By
X2Vycigic2Rpb193cml0ZWIgZmFpbGVkIVxuIik7DQo+ID4gKw0KPiA+ICsgICBzZGlvX3JlbGVh
c2VfaG9zdChjYXJkLT5mdW5jKTsNCj4gPiArICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJf
U0RJTywgInJldCAlZCIsIHJldCk7DQo+ID4gKyAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyBpbnQgaWZfc2Rpb19yZXNldF9kZWVwX3NsZWVwX3dha2V1cChzdHJ1Y3Qg
bGJzX3ByaXZhdGUgKnByaXYpDQo+ID4gK3sNCj4gPiArICAgc3RydWN0IGlmX3NkaW9fY2FyZCAq
Y2FyZCA9IHByaXYtPmNhcmQ7DQo+ID4gKyAgIGludCByZXQgPSAtMTsNCj4gPiArDQo+ID4gKyAg
IGxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsNCj4gPiArICAgc2Rpb19jbGFpbV9ob3N0KGNh
cmQtPmZ1bmMpOw0KPiA+ICsNCj4gPiArICAgc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgMCwgQ09O
RklHVVJBVElPTl9SRUcsICZyZXQpOw0KPiA+ICsgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAg
IGxic19wcl9lcnIoInNkaW9fd3JpdGViIGZhaWxlZCFcbiIpOw0KPiA+ICsNCj4gPiArICAgc2Rp
b19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7DQo+ID4gKyAgIGxic19kZWJfbGVhdmVfYXJncyhM
QlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOw0KPiA+ICsgICByZXR1cm4gcmV0Ow0KPiA+ICsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQo+ID4gIC8qIFNESU8gY2FsbGJhY2tz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiA+
ICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCj4gPiBAQCAtODU5LDYgKzkxMSw3IEBAIHN0YXRpYyB2b2lkIGlmX3Nk
aW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpDQo+ID4gICAgICAqIElnbm9yZSB0
aGUgZGVmaW5lIG5hbWUsIHRoaXMgcmVhbGx5IG1lYW5zIHRoZSBjYXJkIGhhcw0KPiA+ICAgICAg
KiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgdGhlIGNvbW1hbmQuDQo+ID4gICAgICAqLw0KPiA+ICsg
ICBjYXJkLT5wcml2LT5pc19hY3Rpdml0eV9kZXRlY3RlZCA9IDE7DQo+ID4gICAgIGlmIChjYXVz
ZSAmIElGX1NESU9fSF9JTlRfRE5MRCkNCj4gPiAgICAgICAgICAgICBsYnNfaG9zdF90b19jYXJk
X2RvbmUoY2FyZC0+cHJpdik7DQo+ID4NCj4gPiBAQCAtOTk4LDYgKzEwNTEsOSBAQCBzdGF0aWMg
aW50IGlmX3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywNCj4gPg0KPiA+ICAgICBw
cml2LT5jYXJkID0gY2FyZDsNCj4gPiAgICAgcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc2Rp
b19ob3N0X3RvX2NhcmQ7DQo+ID4gKyAgIHByaXYtPmVudGVyX2RlZXBfc2xlZXAgPSBpZl9zZGlv
X2VudGVyX2RlZXBfc2xlZXA7DQo+ID4gKyAgIHByaXYtPmV4aXRfZGVlcF9zbGVlcCA9IGlmX3Nk
aW9fZXhpdF9kZWVwX3NsZWVwOw0KPiA+ICsgICBwcml2LT5yZXNldF9kZWVwX3NsZWVwX3dha2V1
cCA9IGlmX3NkaW9fcmVzZXRfZGVlcF9zbGVlcF93YWtldXA7DQo+ID4NCj4gPiAgICAgcHJpdi0+
ZndfcmVhZHkgPSAxOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz
L2xpYmVydGFzL2lmX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3Nk
aW8uaA0KPiA+IGluZGV4IDYwYzliMmYuLjEyMTc5YzEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5oDQo+ID4gKysrIGIvZHJpdmVycy9uZXQv
d2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5oDQo+ID4gQEAgLTUxLDUgKzUxLDYgQEANCj4gPiAg
I2RlZmluZSBJRl9TRElPX0VWRU5UICAgICAgICAgICAweDgwZmMNCj4gPg0KPiA+ICAjZGVmaW5l
IElGX1NESU9fQkxPQ0tfU0laRSAyNTYNCj4gPiAtDQo+ID4gKyNkZWZpbmUgQ09ORklHVVJBVElP
Tl9SRUcgICAgICAgICAgICAgICAweDAzDQo+ID4gKyNkZWZpbmUgSE9TVF9QT1dFUl9VUCAgICAg
ICAgICAgICAgICAgICAoMHgxVSA8PCAxKQ0KPiA+ICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJl
bGVzcy9saWJlcnRhcy9pZl9zcGkuYw0KPiA+IGluZGV4IDQ0NmUzMjcuLmUyZmE2NTcgMTAwNjQ0
DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMNCj4gPiAr
KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYw0KPiA+IEBAIC0xMTE3
LDYgKzExMTcsOSBAQCBzdGF0aWMgaW50IF9fZGV2aW5pdCBpZl9zcGlfcHJvYmUoc3RydWN0IHNw
aV9kZXZpY2UgKnNwaSkNCj4gPiAgICAgY2FyZC0+cHJpdiA9IHByaXY7DQo+ID4gICAgIHByaXYt
PmNhcmQgPSBjYXJkOw0KPiA+ICAgICBwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl9zcGlfaG9z
dF90b19jYXJkOw0KPiA+ICsgICBwcml2LT5lbnRlcl9kZWVwX3NsZWVwID0gTlVMTDsNCj4gPiAr
ICAgcHJpdi0+ZXhpdF9kZWVwX3NsZWVwID0gTlVMTDsNCj4gPiArICAgcHJpdi0+cmVzZXRfZGVl
cF9zbGVlcF93YWtldXAgPSBOVUxMOw0KPiA+ICAgICBwcml2LT5md19yZWFkeSA9IDE7DQo+ID4N
Cj4gPiAgICAgLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgaGFuZGxpbmcgc3R1ZmYuICovDQo+ID4g
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jIGIvZHJp
dmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMNCj4gPiBpbmRleCA5MmJjOGM1Li5h
ODI2MmRlIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lm
X3VzYi5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMN
Cj4gPiBAQCAtMzAwLDYgKzMwMCw5IEBAIHN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1
c2JfaW50ZXJmYWNlICppbnRmLA0KPiA+ICAgICBjYXJkcC0+cHJpdi0+ZndfcmVhZHkgPSAxOw0K
PiA+DQo+ID4gICAgIHByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX3VzYl9ob3N0X3RvX2NhcmQ7
DQo+ID4gKyAgIHByaXYtPmVudGVyX2RlZXBfc2xlZXAgPSBOVUxMOw0KPiA+ICsgICBwcml2LT5l
eGl0X2RlZXBfc2xlZXAgPSBOVUxMOw0KPiA+ICsgICBwcml2LT5yZXNldF9kZWVwX3NsZWVwX3dh
a2V1cCA9IE5VTEw7DQo+ID4gICNpZmRlZiBDT05GSUdfT0xQQw0KPiA+ICAgICBpZiAobWFjaGlu
ZV9pc19vbHBjKCkpDQo+ID4gICAgICAgICAgICAgcHJpdi0+cmVzZXRfY2FyZCA9IGlmX3VzYl9y
ZXNldF9vbHBjX2NhcmQ7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xp
YmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYw0KPiA+
IGluZGV4IDhkZjFjZmQuLjNiMTRmY2MgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbGliZXJ0YXMvbWFpbi5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGli
ZXJ0YXMvbWFpbi5jDQo+ID4gQEAgLTU3NCw4ICs1NzQsMTAgQEAgdm9pZCBsYnNfaG9zdF90b19j
YXJkX2RvbmUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICAgICBwcml2LT5kbmxkX3Nl
bnQgPSBETkxEX1JFU19SRUNFSVZFRDsNCj4gPg0KPiA+ICAgICAvKiBXYWtlIG1haW4gdGhyZWFk
IGlmIGNvbW1hbmRzIGFyZSBwZW5kaW5nICovDQo+ID4gLSAgIGlmICghcHJpdi0+Y3VyX2NtZCB8
fCBwcml2LT50eF9wZW5kaW5nX2xlbiA+IDApDQo+ID4gLSAgICAgICAgICAgd2FrZV91cF9pbnRl
cnJ1cHRpYmxlKCZwcml2LT53YWl0cSk7DQo+ID4gKyAgIGlmICghcHJpdi0+Y3VyX2NtZCB8fCBw
cml2LT50eF9wZW5kaW5nX2xlbiA+IDApIHsNCj4gPiArICAgICAgICAgICBpZiAoIXByaXYtPndh
a2V1cF9kZXZfcmVxdWlyZWQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICB3YWtlX3VwX2ludGVy
cnVwdGlibGUoJnByaXYtPndhaXRxKTsNCj4gPiArICAgfQ0KPiA+DQo+ID4gICAgIHNwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7DQo+ID4gICAgIGxic19k
ZWJfbGVhdmUoTEJTX0RFQl9USFJFQUQpOw0KPiA+IEBAIC03NzAsNyArNzcyLDggQEAgc3RhdGlj
IGludCBsYnNfdGhyZWFkKHZvaWQgKmRhdGEpDQo+ID4gICAgICAgICAgICAgICAgICAgICBzaG91
bGRzbGVlcCA9IDA7ICAgICAgICAvKiBXZSBoYXZlIGEgY29tbWFuZCByZXNwb25zZSAqLw0KPiA+
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaXYtPmN1cl9jbWQpDQo+ID4gICAgICAgICAgICAgICAg
ICAgICBzaG91bGRzbGVlcCA9IDE7ICAgICAgICAvKiBDYW4ndCBzZW5kIGEgY29tbWFuZDsgb25l
IGFscmVhZHkgcnVubmluZyAqLw0KPiA+IC0gICAgICAgICAgIGVsc2UgaWYgKCFsaXN0X2VtcHR5
KCZwcml2LT5jbWRwZW5kaW5ncSkpDQo+ID4gKyAgICAgICAgICAgZWxzZSBpZiAoIWxpc3RfZW1w
dHkoJnByaXYtPmNtZHBlbmRpbmdxKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICEocHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCkpDQo+ID4gICAgICAgICAgICAg
ICAgICAgICBzaG91bGRzbGVlcCA9IDA7ICAgICAgICAvKiBXZSBoYXZlIGEgY29tbWFuZCB0byBz
ZW5kICovDQo+ID4gICAgICAgICAgICAgZWxzZSBpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRf
ZmlmbykpDQo+ID4gICAgICAgICAgICAgICAgICAgICBzaG91bGRzbGVlcCA9IDA7ICAgICAgICAv
KiBXZSBoYXZlIGFuIGV2ZW50IHRvIHByb2Nlc3MgKi8NCj4gPiBAQCAtODIyLDYgKzgyNSwyNiBA
QCBzdGF0aWMgaW50IGxic190aHJlYWQodm9pZCAqZGF0YSkNCj4gPiAgICAgICAgICAgICB9DQo+
ID4gICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4N
Cj4gPiArICAgICAgICAgICAvKiBQcm9jZXNzIGhhcmR3YXJlIGV2ZW50cywgZS5nLiBjYXJkIHJl
bW92ZWQsIGxpbmsgbG9zdCAqLw0KPiA+ICsgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnByaXYt
PmRyaXZlcl9sb2NrKTsNCj4gPiArICAgICAgICAgICB3aGlsZSAoX19rZmlmb19sZW4ocHJpdi0+
ZXZlbnRfZmlmbykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgIHUzMiBldmVudDsNCj4gPiAr
ICAgICAgICAgICAgICAgICAgIF9fa2ZpZm9fZ2V0KHByaXYtPmV2ZW50X2ZpZm8sICh1bnNpZ25l
ZCBjaGFyICopICZldmVudCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KGV2ZW50KSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnByaXYt
PmRyaXZlcl9sb2NrKTsNCj4gPiArICAgICAgICAgICAgICAgICAgIGxic19wcm9jZXNzX2V2ZW50
KHByaXYsIGV2ZW50KTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBy
aXYtPmRyaXZlcl9sb2NrKTsNCj4gPiArICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgc3Bp
bl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg
IGlmIChwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg
ICBsYnNfZGViX3RocmVhZCgiV2FraW5nIHVwIGRldmljZS4uLlxuIik7DQo+ID4gKyAgICAgICAg
ICAgICAgICAgICAvKiBXYWtlIHVwIGRldmljZSAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAg
aWYgKHByaXYtPmV4aXRfZGVlcF9zbGVlcChwcml2KSkNCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGJzX2RlYl90aHJlYWQoIldha2V1cCBkZXZpY2UgZmFpbGVkXG4iKTsNCj4gPiAr
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgIH0NCj4gPiArDQo+
ID4gICAgICAgICAgICAgLyogY29tbWFuZCB0aW1lb3V0IHN0dWZmICovDQo+ID4gICAgICAgICAg
ICAgaWYgKHByaXYtPmNtZF90aW1lZF9vdXQgJiYgcHJpdi0+Y3VyX2NtZCkgew0KPiA+ICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZG5vZGUgPSBwcml2LT5jdXJf
Y21kOw0KPiA+IEBAIC04NDksMTggKzg3Miw3IEBAIHN0YXRpYyBpbnQgbGJzX3RocmVhZCh2b2lk
ICpkYXRhKQ0KPiA+ICAgICAgICAgICAgIH0NCj4gPiAgICAgICAgICAgICBwcml2LT5jbWRfdGlt
ZWRfb3V0ID0gMDsNCj4gPg0KPiA+IC0gICAgICAgICAgIC8qIFByb2Nlc3MgaGFyZHdhcmUgZXZl
bnRzLCBlLmcuIGNhcmQgcmVtb3ZlZCwgbGluayBsb3N0ICovDQo+ID4gLSAgICAgICAgICAgc3Bp
bl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOw0KPiA+IC0gICAgICAgICAgIHdoaWxlIChf
X2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSkgew0KPiA+IC0gICAgICAgICAgICAgICAgICAg
dTMyIGV2ZW50Ow0KPiA+DQo+ID4gLSAgICAgICAgICAgICAgICAgICBfX2tmaWZvX2dldChwcml2
LT5ldmVudF9maWZvLCAodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsDQo+ID4gLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihldmVudCkpOw0KPiA+IC0gICAgICAgICAgICAgICAgICAg
c3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gLSAgICAgICAgICAgICAg
ICAgICBsYnNfcHJvY2Vzc19ldmVudChwcml2LCBldmVudCk7DQo+ID4gLSAgICAgICAgICAgICAg
ICAgICBzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gLSAgICAgICAgICAg
fQ0KPiA+IC0gICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOw0K
PiA+DQo+ID4gICAgICAgICAgICAgaWYgKCFwcml2LT5md19yZWFkeSkNCj4gPiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+IEBAIC04OTQsNiArOTA2LDkgQEAgc3RhdGljIGludCBs
YnNfdGhyZWFkKHZvaWQgKmRhdGEpDQo+ID4gICAgICAgICAgICAgICAgIChwcml2LT5wc3N0YXRl
ID09IFBTX1NUQVRFX1BSRV9TTEVFUCkpDQo+ID4gICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsNCj4gPg0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5pc19kZWVwX3NsZWVwKQ0KPiA+ICsg
ICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICAgICAgICAgICAgIC8qIEV4
ZWN1dGUgdGhlIG5leHQgY29tbWFuZCAqLw0KPiA+ICAgICAgICAgICAgIGlmICghcHJpdi0+ZG5s
ZF9zZW50ICYmICFwcml2LT5jdXJfY21kKQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgbGJzX2V4
ZWN1dGVfbmV4dF9jb21tYW5kKHByaXYpOw0KPiA+IEBAIC05MjgsNiArOTQzLDcgQEAgc3RhdGlj
IGludCBsYnNfdGhyZWFkKHZvaWQgKmRhdGEpDQo+ID4gICAgIH0NCj4gPg0KPiA+ICAgICBkZWxf
dGltZXIoJnByaXYtPmNvbW1hbmRfdGltZXIpOw0KPiA+ICsgICBkZWxfdGltZXIoJnByaXYtPmF1
dG9fZGVlcHNsZWVwX3RpbWVyKTsNCj4gPiAgICAgd2FrZV91cF9hbGwoJnByaXYtPmNtZF9wZW5k
aW5nKTsNCj4gPg0KPiA+ICAgICBsYnNfZGViX2xlYXZlKExCU19ERUJfVEhSRUFEKTsNCj4gPiBA
QCAtMTA1MCw2ICsxMDY2LDYwIEBAIG91dDoNCj4gPiAgICAgbGJzX2RlYl9sZWF2ZShMQlNfREVC
X0NNRCk7DQo+ID4gIH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICogIFRoaXMgZnVuY3Rpb24gcHV0
IHRoZSBkZXZpY2UgYmFjayB0byBkZWVwIHNsZWVwIG1vZGUgd2hlbiB0aW1lciBleHBpcmVzDQo+
ID4gKyAqICBhbmQgbm8gYWN0aXZpdHkgKGNvbW1hbmQsIGV2ZW50LCBkYXRhIGV0Yy4pIGlzIGRl
dGVjdGVkLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgYXV0b19kZWVwc2xlZXBfdGltZXJf
Zm4odW5zaWduZWQgbG9uZyBkYXRhKQ0KPiA+ICt7DQo+ID4gKyAgIHN0cnVjdCBsYnNfcHJpdmF0
ZSAqcHJpdiA9IChzdHJ1Y3QgbGJzX3ByaXZhdGUgKilkYXRhOw0KPiA+ICsgICBpbnQgcmV0Ow0K
PiA+ICsNCj4gPiArICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7DQo+ID4gKw0KPiA+ICsg
ICBpZiAocHJpdi0+aXNfYWN0aXZpdHlfZGV0ZWN0ZWQpIHsNCj4gPiArICAgICAgICAgICBwcml2
LT5pc19hY3Rpdml0eV9kZXRlY3RlZCA9IDA7DQo+ID4gKyAgIH0gZWxzZSB7DQo+ID4gKyAgICAg
ICAgICAgaWYgKHByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkICYmDQo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICghcHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCkgJiYNCj4g
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPmNvbm5lY3Rfc3RhdHVzICE9IExC
U19DT05ORUNURUQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBsYnNfZGViX21haW4oIkVu
dGVyaW5nIGF1dG8gZGVlcCBzbGVlcCBtb2RlLi4uXG4iKTsNCj4gPiArICAgICAgICAgICAgICAg
ICAgIHJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwNCj4gPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTURfODAyXzExX0RFRVBfU0xFRVAsIDAsDQo+
ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTlVMTCk7DQo+ID4g
KyAgICAgICAgICAgfQ0KPiA+ICsgICB9DQo+ID4gKyAgIG1vZF90aW1lcigmcHJpdi0+YXV0b19k
ZWVwc2xlZXBfdGltZXIgLCBqaWZmaWVzICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHByaXYtPmF1dG9fZGVlcF9zbGVlcF90aW1lb3V0ICogSFopLzEwMDApOw0KPiA+ICsgICBs
YnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IGxic19l
bnRlcl9hdXRvX2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICt7DQo+
ID4gKyAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsNCj4gPiArDQo+ID4gKyAgIHByaXYt
PmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkID0gMTsNCj4gPiArICAgaWYgKHByaXYtPmlzX2Rl
ZXBfc2xlZXApDQo+ID4gKyAgICAgICAgICAgcHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCA9IDE7
DQo+ID4gKyAgIG1vZF90aW1lcigmcHJpdi0+YXV0b19kZWVwc2xlZXBfdGltZXIgLA0KPiA+ICsg
ICAgICAgICAgICAgICAgICAgamlmZmllcyArIChwcml2LT5hdXRvX2RlZXBfc2xlZXBfdGltZW91
dCAqIEhaKS8xMDAwKTsNCj4gPiArDQo+ID4gKyAgIGxic19kZWJfbGVhdmUoTEJTX0RFQl9TRElP
KTsNCj4gPiArICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBsYnNfZXhpdF9h
dXRvX2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICt7DQo+ID4gKyAg
IGxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsNCj4gPiArDQo+ID4gKyAgIHByaXYtPmlzX2F1
dG9fZGVlcF9zbGVlcF9lbmFibGVkID0gMDsNCj4gPiArICAgcHJpdi0+YXV0b19kZWVwX3NsZWVw
X3RpbWVvdXQgPSAwOw0KPiA+ICsgICBkZWxfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3Rp
bWVyKTsNCj4gPiArDQo+ID4gKyAgIGxic19kZWJfbGVhdmUoTEJTX0RFQl9TRElPKTsNCj4gPiAr
ICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gIHN0YXRpYyB2b2lkIGxic19zeW5jX2No
YW5uZWxfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gPiAgew0KPiA+ICAgICBz
dHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxic19w
cml2YXRlLA0KPiA+IEBAIC0xMDk5LDExICsxMTY5LDE3IEBAIHN0YXRpYyBpbnQgbGJzX2luaXRf
YWRhcHRlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpDQo+ID4gICAgIHByaXYtPmNhcGFiaWxp
dHkgPSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7DQo+ID4gICAgIHByaXYtPnBzbW9k
ZSA9IExCUzgwMl8xMVBPV0VSTU9ERUNBTTsNCj4gPiAgICAgcHJpdi0+cHNzdGF0ZSA9IFBTX1NU
QVRFX0ZVTExfUE9XRVI7DQo+ID4gKyAgIHByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOw0KPiA+ICsg
ICBwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCA9IDA7DQo+ID4gKyAgIHByaXYtPndh
a2V1cF9kZXZfcmVxdWlyZWQgPSAwOw0KPiA+ICsgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2
LT5kc19hd2FrZV9xKTsNCj4gPg0KPiA+ICAgICBtdXRleF9pbml0KCZwcml2LT5sb2NrKTsNCj4g
Pg0KPiA+ICAgICBzZXR1cF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lciwgY29tbWFuZF90aW1l
cl9mbiwNCj4gPiAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylwcml2KTsNCj4gPiArICAgc2V0
dXBfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyLCBhdXRvX2RlZXBzbGVlcF90aW1l
cl9mbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOw0KPiA+
DQo+ID4gICAgIElOSVRfTElTVF9IRUFEKCZwcml2LT5jbWRmcmVlcSk7DQo+ID4gICAgIElOSVRf
TElTVF9IRUFEKCZwcml2LT5jbWRwZW5kaW5ncSk7DQo+ID4gQEAgLTExNDIsNiArMTIxOCw3IEBA
IHN0YXRpYyB2b2lkIGxic19mcmVlX2FkYXB0ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0K
PiA+ICAgICBpZiAocHJpdi0+ZXZlbnRfZmlmbykNCj4gPiAgICAgICAgICAgICBrZmlmb19mcmVl
KHByaXYtPmV2ZW50X2ZpZm8pOw0KPiA+ICAgICBkZWxfdGltZXIoJnByaXYtPmNvbW1hbmRfdGlt
ZXIpOw0KPiA+ICsgICBkZWxfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyKTsNCj4g
PiAgICAga2ZyZWUocHJpdi0+bmV0d29ya3MpOw0KPiA+ICAgICBwcml2LT5uZXR3b3JrcyA9IE5V
TEw7DQo+ID4NCj4gPiBAQCAtMTI3Miw2ICsxMzQ5LDExIEBAIHZvaWQgbGJzX3JlbW92ZV9jYXJk
KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikNCj4gPiAgICAgd3JxdS5hcF9hZGRyLnNhX2ZhbWls
eSA9IEFSUEhSRF9FVEhFUjsNCj4gPiAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYs
IFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOw0KPiA+DQo+ID4gKyAgIGlmIChwcml2LT5pc19kZWVw
X3NsZWVwKSB7DQo+ID4gKyAgICAgICAgICAgcHJpdi0+aXNfZGVlcF9zbGVlcCA9IDA7DQo+ID4g
KyAgICAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kc19hd2FrZV9xKTsNCj4g
PiArICAgfQ0KPiA+ICsNCj4gPiAgICAgLyogU3RvcCB0aGUgdGhyZWFkIHNlcnZpY2luZyB0aGUg
aW50ZXJydXB0cyAqLw0KPiA+ICAgICBwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOw0KPiA+ICAg
ICBrdGhyZWFkX3N0b3AocHJpdi0+bWFpbl90aHJlYWQpOw0KPiA+IEBAIC0xMzkyLDYgKzE0NzQs
NyBAQCB2b2lkIGxic19zdG9wX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+DQo+
ID4gICAgIC8qIERlbGV0ZSB0aGUgdGltZW91dCBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3Npbmcg
Y29tbWFuZCAqLw0KPiA+ICAgICBkZWxfdGltZXJfc3luYygmcHJpdi0+Y29tbWFuZF90aW1lcik7
DQo+ID4gKyAgIGRlbF90aW1lcl9zeW5jKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lcik7DQo+
ID4NCj4gPiAgICAgLyogRmx1c2ggcGVuZGluZyBjb21tYW5kIG5vZGVzICovDQo+ID4gICAgIHNw
aW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOw0KPiA+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93
aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMNCj4gPiBpbmRleCA2Yzk1YWYzLi5lNDY4ZTE1IDEwMDY0
NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYw0KPiA+ICsr
KyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYw0KPiA+IEBAIC05NTAsNiAr
OTUwLDExIEBAIGludCBsYnNfc2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0
IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19E
RUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsN
Cj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7
DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGlmICghcHJpdi0+cmFkaW9fb24pIHsNCj4gPiAg
ICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+
IEBAIC0xMDE3LDYgKzEwMjIsMTIgQEAgaW50IGxic19nZXRfc2NhbihzdHJ1Y3QgbmV0X2Rldmlj
ZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19k
ZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxs
b3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIGVyciA9IC1FQlVTWTsNCj4gPiArICAgICAg
ICAgICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgZXJyKTsNCj4g
PiArICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICAvKiBp
d2xpc3Qgc2hvdWxkIHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgc2NhbiBpcyBmaW5pc2hlZCAqLw0K
PiA+ICAgICBpZiAocHJpdi0+c2Nhbl9jaGFubmVsKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAt
RUFHQUlOOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93
ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMNCj4gPiBpbmRleCBi
ZTgzN2EwLi4zOGE0NTFlIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xp
YmVydGFzL3dleHQuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dl
eHQuYw0KPiA+IEBAIC00NSw2ICs0NSwzMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGJzX2NhbmNl
bF9hc3NvY2lhdGlvbl93b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikNCj4gPiAgICAgcHJp
di0+cGVuZGluZ19hc3NvY19yZXEgPSBOVUxMOw0KPiA+ICB9DQo+ID4NCj4gPiArLyoqDQo+ID4g
KyAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGNvbW1hbmQgaXMgYWxsb3dl
ZC4NCj4gPiArICoNCj4gPiArICogIEBwYXJhbSBwcml2ICAgICAgICAgQSBwb2ludGVyIHRvIGxi
c19wcml2YXRlIHN0cnVjdHVyZQ0KPiA+ICsgKiAgQHJldHVybiAgICAgICAgICAgICBhbGxvd2Vk
IG9yIG5vdCBhbGxvd2VkLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gK2ludCBsYnNfaXNfY21kX2Fs
bG93ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICt7DQo+ID4gKyAgIGludCAgICAg
ICAgIHJldCA9IDE7DQo+ID4gKw0KPiA+ICsgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7
DQo+ID4gKw0KPiA+ICsgICBpZiAoIXByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkKSB7
DQo+ID4gKyAgICAgICAgICAgaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApIHsNCj4gPiArICAgICAg
ICAgICAgICAgICAgIGxic19kZWJfd2V4dCgiSU9DVExTIGNhbGxlZCB3aGVuIHN0YXRpb24iDQo+
ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGluIGRlZXAgc2xlZXBc
biIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsNCj4gPiArICAgICAgICAgICB9
DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIGxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsN
Cj4gPiArICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPg0KPiA+ICAvKioNCj4gPiAg
ICogIEBicmllZiBGaW5kIHRoZSBjaGFubmVsIGZyZXF1ZW5jeSBwb3dlciBpbmZvIHdpdGggc3Bl
Y2lmaWMgY2hhbm5lbA0KPiA+IEBAIC0xNjgsNiArMTkzLDExIEBAIHN0YXRpYyBpbnQgbGJzX2dl
dF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmlu
Zm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4g
KyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgbGJz
X2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiAtRUJVU1k7
DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGNmcCA9IGxic19maW5kX2NmcF9ieV9iYW5kX2Fu
ZF9jaGFubmVsKHByaXYsIDAsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpOw0KPiA+DQo+ID4gQEAgLTI3OCw2ICsz
MDgsMTIgQEAgc3RhdGljIGludCBsYnNfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBz
dHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIo
TEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2
KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBsYnNf
ZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAgICAg
ICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAodndycS0+ZGlz
YWJsZWQpDQo+ID4gICAgICAgICAgICAgdmFsID0gTVJWRFJWX1JUU19NQVhfVkFMVUU7DQo+ID4N
Cj4gPiBAQCAtMjk5LDYgKzMzNSwxMSBAQCBzdGF0aWMgaW50IGxic19nZXRfcnRzKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sDQo+ID4NCj4gPiAg
ICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lz
X2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+
ICsgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICByZXQgPSBs
YnNfZ2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09JRF9SVFNfVEhSRVNIT0xELCAmdmFsKTsN
Cj4gPiAgICAgaWYgKHJldCkNCj4gPiAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiBAQCAtMzIx
LDYgKzM2MiwxMiBAQCBzdGF0aWMgaW50IGxic19zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAq
ZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJf
ZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dl
ZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAg
ICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsNCj4gPiAr
ICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAodndy
cS0+ZGlzYWJsZWQpDQo+ID4gICAgICAgICAgICAgdmFsID0gTVJWRFJWX0ZSQUdfTUFYX1ZBTFVF
Ow0KPiA+DQo+ID4gQEAgLTM0Miw2ICszODksMTEgQEAgc3RhdGljIGludCBsYnNfZ2V0X2ZyYWco
c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4g
Pg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYg
KCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJV
U1k7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAg
IHJldCA9IGxic19nZXRfc25tcF9taWIocHJpdiwgU05NUF9NSUJfT0lEX0ZSQUdfVEhSRVNIT0xE
LCAmdmFsKTsNCj4gPiAgICAgaWYgKHJldCkNCj4gPiAgICAgICAgICAgICBnb3RvIG91dDsNCj4g
PiBAQCAtMzkxLDYgKzQ0MywxMSBAQCBzdGF0aWMgaW50IGxic19nZXRfdHhwb3coc3RydWN0IG5l
dF9kZXZpY2UgKmRldiwNCj4gPg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7
DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAg
ICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAg
IH0NCj4gPiArDQo+ID4gICAgIGlmICghcHJpdi0+cmFkaW9fb24pIHsNCj4gPiAgICAgICAgICAg
ICBsYnNfZGViX3dleHQoInR4IHBvd2VyIG9mZlxuIik7DQo+ID4gICAgICAgICAgICAgdndycS0+
dmFsdWUgPSAwOw0KPiA+IEBAIC00MjQsNiArNDgxLDExIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9y
ZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZv
LA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsg
ICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9
IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgfQ0KPiA+ICsNCj4g
PiAgICAgICAgICBpZiAoKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgIT0gSVdfUkVUUllf
TElNSVQpDQo+ID4gICAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4NCj4g
PiBAQCAtNDcyLDYgKzUzNCwxMSBAQCBzdGF0aWMgaW50IGxic19nZXRfcmV0cnkoc3RydWN0IG5l
dF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPg0KPiA+ICAg
ICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNf
Y21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4g
KyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIHZ3cnEtPmRp
c2FibGVkID0gMDsNCj4gPg0KPiA+ICAgICBpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05H
KSB7DQo+ID4gQEAgLTcwOSw2ICs3NzYsNyBAQCBzdGF0aWMgaW50IGxic19zZXRfcG93ZXIoc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPiAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkN
Cj4gPiAgew0KPiA+ICAgICBzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7
DQo+ID4gKyAgIGludCByZXQgPSAwOw0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RF
Ql9XRVhUKTsNCj4gPg0KPiA+IEBAIC03MzcsOCArODA1LDU0IEBAIHN0YXRpYyBpbnQgbGJzX3Nl
dF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICpp
bmZvLA0KPiA+ICAgICAgICAgICAgICAgICAgICAic2V0dGluZyBwb3dlciB0aW1lb3V0IGlzIG5v
dCBzdXBwb3J0ZWRcbiIpOw0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICAg
ICB9IGVsc2UgaWYgKCh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpID09IElXX1BPV0VSX1BF
UklPRCkgew0KPiA+IC0gICAgICAgICAgIGxic19kZWJfd2V4dCgic2V0dGluZyBwb3dlciBwZXJp
b2Qgbm90IHN1cHBvcnRlZFxuIik7DQo+ID4gLSAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+
ID4gKyAgICAgICAgICAgdndycS0+dmFsdWUgPSB2d3JxLT52YWx1ZSAvIDEwMDA7DQo+ID4gKyAg
ICAgICAgICAgaWYgKCFwcml2LT5lbnRlcl9kZWVwX3NsZWVwKSB7DQo+ID4gKyAgICAgICAgICAg
ICAgICAgICBsYnNfcHJfZXJyKCJkZWVwIHNsZWVwIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVk
ICINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIHRoaXMgaW50
ZXJmYWNlIGRyaXZlclxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB
TDsNCj4gPiArICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5j
b25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg
ICBpZiAoKHByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkKSAmJg0KPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ3cnEtPnZhbHVlID09IC0xMDAw
KSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBsYnNfZXhpdF9hdXRvX2RlZXBf
c2xlZXAocHJpdik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0K
PiA+ICsgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGJzX3ByX2VycigiY2FuJ3QgdXNlIGRlZXAgc2xlZXAgY21kIGluICINCj4gPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0ZWQgc3Rh
dGVcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN
Cj4gPiArICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICB9DQo+ID4gKw0KPiA+
ICsgICAgICAgICAgIGlmICgodndycS0+dmFsdWUgPCAwKSAmJiAodndycS0+dmFsdWUgIT0gLTEw
MDApKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBsYnNfcHJfZXJyKCJ1bmtub3duIG9wdGlv
blxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAg
ICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgIGlmICh2d3JxLT52YWx1ZSA+IDApIHsN
Cj4gPiArICAgICAgICAgICAgICAgICAgIGlmICghcHJpdi0+aXNfYXV0b19kZWVwX3NsZWVwX2Vu
YWJsZWQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+aXNfYWN0aXZp
dHlfZGV0ZWN0ZWQgPSAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5h
dXRvX2RlZXBfc2xlZXBfdGltZW91dCA9IHZ3cnEtPnZhbHVlOw0KPiA+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsYnNfZW50ZXJfYXV0b19kZWVwX3NsZWVwKHByaXYpOw0KPiA+ICsgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+YXV0b19kZWVwX3NsZWVwX3RpbWVvdXQgPSB2d3JxLT52YWx1ZTsNCj4gPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGJzX2RlYl9kZWJ1Z2ZzKCJhdXRvIGRlZXAgc2xlZXA6ICIN
Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHJlYWR5
IGVuYWJsZWRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAg
ICAgICAgICAgICAgIGlmIChwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCkgew0KPiA+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBsYnNfZXhpdF9hdXRvX2RlZXBfc2xlZXAocHJp
dik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBleGl0IGRlZXAg
c2xlZXAgaWYgYXV0byAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmRlZXAg
c2xlZXAgZGlzYWJsZWQgKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
bGJzX3NldF9kZWVwX3NsZWVwKHByaXYsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgfQ0K
PiA+ICsgICAgICAgICAgICAgICAgICAgaWYgKHZ3cnEtPnZhbHVlID09IDApDQo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGxic19zZXRfZGVlcF9zbGVlcChwcml2LCAxKTsN
Cj4gPiArICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZ3cnEtPnZhbHVlID09IC0xMDAwKQ0K
PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAo
cHJpdiwgMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAg
ICAgICAgIH0NCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAgIGlmIChwcml2LT5wc21vZGUgIT0gTEJT
ODAyXzExUE9XRVJNT0RFQ0FNKSB7DQo+ID4gQEAgLTc1Miw2ICs4NjYsNyBAQCBzdGF0aWMgaW50
IGxic19zZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3Rf
aW5mbyAqaW5mbywNCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAgIGxic19kZWJfbGVhdmUoTEJTX0RF
Ql9XRVhUKTsNCj4gPiArDQo+ID4gICAgIHJldHVybiAwOw0KPiA+ICB9DQo+ID4NCj4gPiBAQCAt
NzkyLDYgKzkwNyw5IEBAIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqbGJzX2dldF93aXJl
bGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+DQo+ID4gICAgIGxic19kZWJf
ZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dl
ZChwcml2KSkNCj4gPiArICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gICAgIHBy
aXYtPndzdGF0cy5zdGF0dXMgPSBwcml2LT5tb2RlOw0KPiA+DQo+ID4gICAgIC8qIElmIHdlJ3Jl
IG5vdCBhc3NvY2lhdGVkLCBhbGwgcXVhbGl0eSB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzICovDQo+
ID4gQEAgLTg5Miw2ICsxMDEwLDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9mcmVxKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sDQo+ID4NCj4gPiAg
ICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lz
X2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+
ICsgICAgICAgICAgIGxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCBy
ZXQpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4g
ICAgIG11dGV4X2xvY2soJnByaXYtPmxvY2spOw0KPiA+ICAgICBhc3NvY19yZXEgPSBsYnNfZ2V0
X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7DQo+ID4gICAgIGlmICghYXNzb2NfcmVxKSB7DQo+
ID4gQEAgLTEwMDAsNiArMTEyNCwxMiBAQCBzdGF0aWMgaW50IGxic19zZXRfcmF0ZShzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+ICAgICB1
OCByYXRlc1tNQVhfUkFURVMgKyAxXTsNCj4gPg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19E
RUJfV0VYVCk7DQo+ID4gKw0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkg
ew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBnb3RvIG91
dDsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgbGJzX2RlYl93ZXh0KCJ2d3JxLT52YWx1ZSAl
ZFxuIiwgdndycS0+dmFsdWUpOw0KPiA+ICAgICBsYnNfZGViX3dleHQoInZ3cnEtPmZpeGVkICVk
XG4iLCB2d3JxLT5maXhlZCk7DQo+ID4NCj4gPiBAQCAtMTA1OCw2ICsxMTg4LDExIEBAIHN0YXRp
YyBpbnQgbGJzX2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1
ZXN0X2luZm8gKmluZm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQp
Ow0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAg
ICAgICAgICAgbGJzX2RlYl9sZWF2ZShMQlNfREVCX1dFWFQpOw0KPiA+ICsgICAgICAgICAgIHJl
dHVybiAtRUJVU1k7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGlmIChwcml2LT5jb25uZWN0
X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7DQo+ID4gICAgICAgICAgICAgdndycS0+dmFsdWUg
PSBwcml2LT5jdXJfcmF0ZSAqIDUwMDAwMDsNCj4gPg0KPiA+IEBAIC0xMDg0LDYgKzEyMTksMTEg
QEAgc3RhdGljIGludCBsYnNfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gPg0K
PiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFs
YnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7
DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGlm
ICggICAoKnV3cnEgIT0gSVdfTU9ERV9BREhPQykNCj4gPiAgICAgICAgICYmICgqdXdycSAhPSBJ
V19NT0RFX0lORlJBKQ0KPiA+ICAgICAgICAgJiYgKCp1d3JxICE9IElXX01PREVfQVVUTykpIHsN
Cj4gPiBAQCAtMTMyNSw2ICsxNDY1LDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9lbmNvZGUoc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gPg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJf
V0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4g
PiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgbGJzX2RlYl9sZWF2
ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7DQo+ID4gKyAgICAgICAgICAgcmV0
dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgbXV0ZXhfbG9jaygmcHJpdi0+bG9j
ayk7DQo+ID4gICAgIGFzc29jX3JlcSA9IGxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2
KTsNCj4gPiAgICAgaWYgKCFhc3NvY19yZXEpIHsNCj4gPiBAQCAtMTUwOCw2ICsxNjU0LDEyIEBA
IHN0YXRpYyBpbnQgbGJzX3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4g
Pg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYg
KCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJV
U1k7DQo+ID4gKyAgICAgICAgICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJl
dCAlZCIsIHJldCk7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+
ICsNCj4gPiAgICAgbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7DQo+ID4gICAgIGFzc29jX3JlcSA9
IGxic19nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2KTsNCj4gPiAgICAgaWYgKCFhc3NvY19y
ZXEpIHsNCj4gPiBAQCAtMTcyMCw2ICsxODcyLDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9hdXRo
KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNf
REVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7
DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGxic19kZWJf
bGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOw0KPiA+ICsgICAgICAgICAg
IHJldHVybiByZXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIG11dGV4X2xvY2soJnByaXYt
PmxvY2spOw0KPiA+ICAgICBhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3Qo
cHJpdik7DQo+ID4gICAgIGlmICghYXNzb2NfcmVxKSB7DQo+ID4gQEAgLTE4MjIsNiArMTk4MCwx
MiBAQCBzdGF0aWMgaW50IGxic19nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KPiA+
DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAo
IWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVT
WTsNCj4gPiArICAgICAgICAgICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0
ICVkIiwgcmV0KTsNCj4gPiArICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9DQo+ID4g
Kw0KPiA+ICAgICBzd2l0Y2ggKGR3cnEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgew0KPiA+ICAg
ICBjYXNlIElXX0FVVEhfS0VZX01HTVQ6DQo+ID4gICAgICAgICAgICAgZHdycS0+dmFsdWUgPSBw
cml2LT5zZWNpbmZvLmtleV9tZ210Ow0KPiA+IEBAIC0xODY0LDYgKzIwMjgsMTEgQEAgc3RhdGlj
IGludCBsYnNfc2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1
ZXN0X2luZm8NCj4gKmluZm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dF
WFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4g
KyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+
ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAodndycS0+ZGlzYWJsZWQpIHsNCj4gPiAgICAgICAg
ICAgICBsYnNfc2V0X3JhZGlvKHByaXYsIFJBRElPX1BSRUFNQkxFX0FVVE8sIDApOw0KPiA+ICAg
ICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+IEBAIC0xOTgzLDYgKzIxNTIsMTIgQEAgc3RhdGljIGlu
dCBsYnNfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0
X2luZm8NCj4gKmluZm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQp
Ow0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAg
ICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGxic19kZWJfbGVhdmVfYXJn
cyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiBy
ZXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGlmICghcHJpdi0+cmFkaW9fb24pIHsNCj4g
PiAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICAgICAgICAgICAgIGdvdG8gb3V0Ow0K
PiA+IEBAIC0yMTEwLDYgKzIyODUsMTIgQEAgc3RhdGljIGludCBsYnNfc2V0X3dhcChzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4g
ICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19p
c19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4g
PiArICAgICAgICAgICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwg
cmV0KTsNCj4gPiArICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+
ICAgICBpZiAoIXByaXYtPnJhZGlvX29uKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM
Ow0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18NCj4gPiBsaWJlcnRhcy1kZXYgbWFpbGluZyBsaXN0DQo+ID4gbGliZXJ0YXMtZGV2QGxpc3Rz
LmluZnJhZGVhZC5vcmcNCj4gPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp
c3RpbmZvL2xpYmVydGFzLWRldg0KDQo=

^ permalink raw reply

* Re: [Ilw] [PATCH] iwlwifi: use %pM for formatted MAC addresses
From: reinette chatre @ 2009-10-05 17:54 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: ilw@linux.intel.com, linux-wireless@vger.kernel.org
In-Reply-To: <20091005173701.28350.85734.stgit@bob.kio>

On Mon, 2009-10-05 at 10:37 -0700, Bjorn Helgaas wrote:
> User-visible messages should use formatted MAC addresses ("00:01:...")
> rather than raw ("0001...") so they match other parts of the system.
> 
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
> CC: ilw@linux.intel.com
> CC: linux-wireless@vger.kernel.org
> ---

Acked-by: Reinette Chatre <reinette.chatre@intel.com>

Thank you

Reinette



^ permalink raw reply

* [PATCH] iwlwifi: use %pM for formatted MAC addresses
From: Bjorn Helgaas @ 2009-10-05 17:37 UTC (permalink / raw)
  Cc: ilw, linux-wireless

User-visible messages should use formatted MAC addresses ("00:01:...")
rather than raw ("0001...") so they match other parts of the system.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
CC: ilw@linux.intel.com
CC: linux-wireless@vger.kernel.org
---
 drivers/net/wireless/iwlwifi/iwl-3945-rs.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c
index a16bd41..cbb0585 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-rs.c
@@ -702,7 +702,7 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta,
 		u8 sta_id = iwl_find_station(priv, hdr->addr1);
 
 		if (sta_id == IWL_INVALID_STATION) {
-			IWL_DEBUG_RATE(priv, "LQ: ADD station %pm\n",
+			IWL_DEBUG_RATE(priv, "LQ: ADD station %pM\n",
 				       hdr->addr1);
 			sta_id = iwl_add_station(priv, hdr->addr1, false,
 				CMD_ASYNC, NULL);


^ permalink raw reply related

* Re: [PATCH] Wireless / ath5k: Simplify suspend and resume callbacks
From: Luis R. Rodriguez @ 2009-10-05 16:21 UTC (permalink / raw)
  To: Rafael J. Wysocki, netdev
  Cc: ath5k-devel, John W. Linville, linux-wireless, Bob Copeland, LKML,
	pm list
In-Reply-To: <200910050052.09085.rjw@sisk.pl>

On Sun, Oct 4, 2009 at 10:52 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> From: Rafael J. Wysocki <rjw@sisk.pl>
>
> Simplify the suspend and resume callbacks of ath5k by converting the
> driver to struct dev_pm_ops and allowing the PCI PM core to do the
> PCI-specific suspend/resume handling.
>
> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>

Do you happen to know if the new dev_pm_ops thing handle WOL / WoW [1]?

[1] http://wireless.kernel.org/en/users/Documentation/WoW

>  #ifdef CONFIG_PM
> -static int
> -ath5k_pci_suspend(struct pci_dev *pdev, pm_message_t state)
> +static int ath5k_pci_suspend(struct device *dev)
>  {
> -       struct ieee80211_hw *hw = pci_get_drvdata(pdev);
> +       struct ieee80211_hw *hw = pci_get_drvdata(to_pci_dev(dev));
>        struct ath5k_softc *sc = hw->priv;
>
>        ath5k_led_off(sc);
> -
> -       pci_save_state(pdev);
> -       pci_disable_device(pdev);

For WoW right here we'd do

pci_prepare_to_sleep(pdev) and bail out.

> -       pci_set_power_state(pdev, PCI_D3hot);

And here we'd call something like this:

pci_wake_from_d3(pdev, !!sc->wow_triggers_enabled);

> -
>        return 0;
>  }

Are all drivers being converted?

It'll be a while before we get WoW enabled on ath5k but it is
technically possible, the work was tested for ath9k back in July [2]
but I never submitted this to be merged due to some inconsistent
issues I was noticing with the hardware.

[2] http://kernel.org/pub/linux/kernel/people/mcgrof/patches/wow-07-21.patch

  Luis

^ permalink raw reply

* Re: [.32-rc3] scheduler: iwlagn consistently high in "waiting for CPU"
From: Arjan van de Ven @ 2009-10-05 14:24 UTC (permalink / raw)
  To: Frans Pop
  Cc: Linux Kernel Mailing List, Ingo Molnar, Peter Zijlstra,
	linux-wireless
In-Reply-To: <200910051613.32631.elendil@planet.nl>

On Mon, 5 Oct 2009 16:13:31 +0200
Frans Pop <elendil@planet.nl> wrote:

> On Monday 05 October 2009, Frans Pop wrote:
> > With .32-rc3 I'm getting occasional skips from amarok while playing
> > music from an NFS share (3 today so far), something I've not had in
> > a long time.
> >
> > The reason looks to be that latencytop consistently shows 'iwlagn'
> > as the top affected process with "Scheduler: waiting for CPU".
> > Values of 100-140 ms occur frequently, but I've also seen higher
> > values (180, 207). I don't remember seeing iwlagn high in the list
> > before, but I have not checked earlier kernels yet.
> >
> > Added to that 'phy0' also frequently shows high with values of
> > 25-75 ms.
> >
> > The system is otherwise essentially idle. Other processes typically
> > show a latency < 5 ms.
> 
> If I give the system some work to do (like compiling a kernel), the 
> latencies on iwlagn and phy0 disappear (values < 5 ms).
> Is this related to ondemand frequency scaling?

shouldn't be.... but

can you do a 5 second or so timechart recording of this?
That will capture all scheduler delays as well as the P states etc....

(to do a timechart recording, first make sure debugfs is mounted, and
then do in tools/perf 

./perf timechart record sleep 5

then you can turn it into an SVG with

./perf timechart

)


-- 
Arjan van de Ven 	Intel Open Source Technology Centre
For development, discussion and tips for power savings, 
visit http://www.lesswatts.org

^ permalink raw reply

* Re: [.32-rc3] scheduler: iwlagn consistently high in "waiting for CPU"
From: Frans Pop @ 2009-10-05 14:13 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Ingo Molnar, Peter Zijlstra, linux-wireless
In-Reply-To: <200910051500.55875.elendil@planet.nl>

On Monday 05 October 2009, Frans Pop wrote:
> With .32-rc3 I'm getting occasional skips from amarok while playing
> music from an NFS share (3 today so far), something I've not had in a
> long time.
>
> The reason looks to be that latencytop consistently shows 'iwlagn' as
> the top affected process with "Scheduler: waiting for CPU".
> Values of 100-140 ms occur frequently, but I've also seen higher values
> (180, 207). I don't remember seeing iwlagn high in the list before, but
> I have not checked earlier kernels yet.
>
> Added to that 'phy0' also frequently shows high with values of 25-75 ms.
>
> The system is otherwise essentially idle. Other processes typically show
> a latency < 5 ms.

If I give the system some work to do (like compiling a kernel), the 
latencies on iwlagn and phy0 disappear (values < 5 ms).
Is this related to ondemand frequency scaling?

^ permalink raw reply

* [.32-rc3] scheduler: iwlagn consistently high in "waiting for CPU"
From: Frans Pop @ 2009-10-05 13:00 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Ingo Molnar, Peter Zijlstra, linux-wireless

With .32-rc3 I'm getting occasional skips from amarok while playing music 
from an NFS share (3 today so far), something I've not had in a long time.

The reason looks to be that latencytop consistently shows 'iwlagn' as the 
top affected process with "Scheduler: waiting for CPU".
Values of 100-140 ms occur frequently, but I've also seen higher values 
(180, 207). I don't remember seeing iwlagn high in the list before, but I 
have not checked earlier kernels yet.

Added to that 'phy0' also frequently shows high with values of 25-75 ms.

The system is otherwise essentially idle. Other processes typically show a 
latency < 5 ms.

System: HP 2510p notebook, x86_64, Core2 Duo, Debian stable

Cheers,
FJP

^ permalink raw reply

* Re: [PATCH] wext: let get_wireless_stats() sleep
From: David Miller @ 2009-10-05  9:22 UTC (permalink / raw)
  To: johannes; +Cc: linville, miles.lane, linux-wireless, netdev
In-Reply-To: <1254734159.22426.6.camel@johannes.local>

From: Johannes Berg <johannes@sipsolutions.net>
Date: Mon, 05 Oct 2009 11:15:59 +0200

> A number of drivers (recently including cfg80211-based ones)
> assume that all wireless handlers, including statistics, can
> sleep and they often also implicitly assume that the rtnl is
> held around their invocation. This is almost always true now
> except when reading from sysfs:
 ...
> Fix this by using the rtnl instead of dev_base_lock.
> 
> Reported-by: Miles Lane <miles.lane@gmail.com>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

Fair enough, applied, thanks!

^ permalink raw reply

* [PATCH] wext: let get_wireless_stats() sleep
From: Johannes Berg @ 2009-10-05  9:15 UTC (permalink / raw)
  To: John Linville; +Cc: Miles Lane, linux-wireless, netdev

A number of drivers (recently including cfg80211-based ones)
assume that all wireless handlers, including statistics, can
sleep and they often also implicitly assume that the rtnl is
held around their invocation. This is almost always true now
except when reading from sysfs:

  BUG: sleeping function called from invalid context at kernel/mutex.c:280
  in_atomic(): 1, irqs_disabled(): 0, pid: 10450, name: head
  2 locks held by head/10450:
   #0:  (&buffer->mutex){+.+.+.}, at: [<c10ceb99>] sysfs_read_file+0x24/0xf4
   #1:  (dev_base_lock){++.?..}, at: [<c12844ee>] wireless_show+0x1a/0x4c
  Pid: 10450, comm: head Not tainted 2.6.32-rc3 #1
  Call Trace:
   [<c102301c>] __might_sleep+0xf0/0xf7
   [<c1324355>] mutex_lock_nested+0x1a/0x33
   [<f8cea53b>] wdev_lock+0xd/0xf [cfg80211]
   [<f8cea58f>] cfg80211_wireless_stats+0x45/0x12d [cfg80211]
   [<c13118d6>] get_wireless_stats+0x16/0x1c
   [<c12844fe>] wireless_show+0x2a/0x4c

Fix this by using the rtnl instead of dev_base_lock.

Reported-by: Miles Lane <miles.lane@gmail.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
 net/core/net-sysfs.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- wireless-testing.orig/net/core/net-sysfs.c	2009-10-05 11:09:56.000000000 +0200
+++ wireless-testing/net/core/net-sysfs.c	2009-10-05 11:10:52.000000000 +0200
@@ -366,13 +366,13 @@ static ssize_t wireless_show(struct devi
 	const struct iw_statistics *iw;
 	ssize_t ret = -EINVAL;
 
-	read_lock(&dev_base_lock);
+	rtnl_lock();
 	if (dev_isalive(dev)) {
 		iw = get_wireless_stats(dev);
 		if (iw)
 			ret = (*format)(iw, buf);
 	}
-	read_unlock(&dev_base_lock);
+	rtnl_unlock();
 
 	return ret;
 }



^ permalink raw reply

* 2.6.32-rc3 -- BUG: sleeping function called from invalid context at kernel/mutex.c:280 -- 2 locks held by head
From: Miles Lane @ 2009-10-05  3:39 UTC (permalink / raw)
  To: LKML, Johannes Berg, linux-wireless

I hit this running:  "find /sys -name "[a-z]*" | xargs cat"

[ 1035.928518] BUG: sleeping function called from invalid context at
kernel/mutex.c:280
[ 1035.928537] in_atomic(): 1, irqs_disabled(): 0, pid: 10450, name: head
[ 1035.928549] 2 locks held by head/10450:
[ 1035.928556]  #0:  (&buffer->mutex){+.+.+.}, at: [<c10ceb99>]
sysfs_read_file+0x24/0xf4
[ 1035.928590]  #1:  (dev_base_lock){++.?..}, at: [<c12844ee>]
wireless_show+0x1a/0x4c
[ 1035.928622] Pid: 10450, comm: head Not tainted 2.6.32-rc3 #1
[ 1035.928630] Call Trace:
[ 1035.928648]  [<c1049643>] ? __debug_show_held_locks+0x1e/0x20
[ 1035.928666]  [<c102301c>] __might_sleep+0xf0/0xf7
[ 1035.928682]  [<c1324355>] mutex_lock_nested+0x1a/0x33
[ 1035.928720]  [<f8cea53b>] wdev_lock+0xd/0xf [cfg80211]
[ 1035.928753]  [<f8cea58f>] cfg80211_wireless_stats+0x45/0x12d [cfg80211]
[ 1035.928769]  [<c128428f>] ? format_iw_status+0x0/0x14
[ 1035.928782]  [<c1324fd0>] ? _read_lock+0x2c/0x34
[ 1035.928796]  [<c128428f>] ? format_iw_status+0x0/0x14
[ 1035.928811]  [<c13118d6>] get_wireless_stats+0x16/0x1c
[ 1035.928824]  [<c12844fe>] wireless_show+0x2a/0x4c
[ 1035.928838]  [<c12845b9>] ? show_iw_status+0x0/0x11
[ 1035.928852]  [<c12845c8>] show_iw_status+0xf/0x11
[ 1035.928866]  [<c1214ba7>] dev_attr_show+0x19/0x36
[ 1035.928880]  [<c10cec03>] sysfs_read_file+0x8e/0xf4
[ 1035.928895]  [<c114be56>] ? security_file_permission+0xf/0x11
[ 1035.928909]  [<c10ceb75>] ? sysfs_read_file+0x0/0xf4
[ 1035.928924]  [<c108f881>] vfs_read+0x75/0xa9
[ 1035.928937]  [<c108f949>] sys_read+0x3b/0x5d
[ 1035.928952]  [<c1002acf>] sysenter_do_call+0x12/0x36

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32-rc3
# Sun Oct  4 22:14:11 2009
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
# CONFIG_X86_64 is not set
CONFIG_X86=y
CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_FAST_CMPXCHG_LOCAL=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ZONE_DMA32 is not set
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_X86_32_SMP=y
CONFIG_X86_HT=y
CONFIG_X86_TRAMPOLINE=y
CONFIG_KTIME_SCALAR=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_LZMA=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=18
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
# CONFIG_USER_SCHED is not set
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
# CONFIG_CGROUP_DEVICE is not set
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
# CONFIG_CGROUP_MEM_RES_CTLR is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set
# CONFIG_RELAY is not set
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_EXTRA_PASS=y
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_HAVE_PERF_EVENTS=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_DMA_API_DEBUG=y

#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
CONFIG_SLOW_WORK=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
# CONFIG_LBDAF is not set
CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=m
CONFIG_IOSCHED_DEADLINE=m
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_FREEZER=y

#
# Processor type and features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y
CONFIG_SPARSE_IRQ=y
CONFIG_X86_MPPARSE=y
# CONFIG_X86_BIGSMP is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
CONFIG_MATOM=y
# CONFIG_GENERIC_CPU is not set
# CONFIG_X86_GENERIC is not set
CONFIG_X86_CPU=y
CONFIG_X86_L1_CACHE_BYTES=64
CONFIG_X86_INTERNODE_CACHE_BYTES=64
CONFIG_X86_CMPXCHG=y
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_TSC=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=4
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_CYRIX_32=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y
# CONFIG_X86_DS is not set
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
# CONFIG_IOMMU_API is not set
CONFIG_NR_CPUS=2
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not set
CONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
# CONFIG_MICROCODE_AMD is not set
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
# CONFIG_X86_CPU_DEBUG is not set
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_HIGHMEM=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_NEED_NODE_MEMMAP_SIZE=y
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_STATIC=y

#
# Memory hotplug is currently incompatible with Software Suspend
#
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_HAVE_MLOCK=y
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_HIGHPTE=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW_64K=y
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
CONFIG_MTRR_SANITIZER=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_EFI=y
CONFIG_SECCOMP=y
CONFIG_CC_STACKPROTECTOR_ALL=y
CONFIG_CC_STACKPROTECTOR=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
CONFIG_HZ_300=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=300
CONFIG_SCHED_HRTICK=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x1000000
CONFIG_HOTPLUG_CPU=y
CONFIG_COMPAT_VDSO=y
# CONFIG_CMDLINE_BOOL is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

#
# Power management and ACPI options
#
CONFIG_PM=y
CONFIG_PM_DEBUG=y
# CONFIG_PM_VERBOSE is not set
CONFIG_CAN_PM_TRACE=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_HIBERNATION_NVS=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_RUNTIME=y
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS is not set
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_POWER_METER=m
CONFIG_ACPI_SYSFS_POWER=y
# CONFIG_ACPI_PROC_EVENT is not set
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_PCI_SLOT is not set
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
# CONFIG_ACPI_SBS is not set
CONFIG_SFI=y
# CONFIG_APM is not set

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_DEBUG=y
# CONFIG_CPU_FREQ_STAT is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set

#
# CPUFreq processor drivers
#
CONFIG_X86_ACPI_CPUFREQ=y
# CONFIG_X86_POWERNOW_K6 is not set
# CONFIG_X86_POWERNOW_K7 is not set
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_GX_SUSPMOD is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_SPEEDSTEP_ICH is not set
# CONFIG_X86_SPEEDSTEP_SMI is not set
# CONFIG_X86_P4_CLOCKMOD is not set
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
# CONFIG_X86_LONGRUN is not set
# CONFIG_X86_LONGHAUL is not set
# CONFIG_X86_E_POWERSAVER is not set

#
# shared options
#
# CONFIG_X86_SPEEDSTEP_LIB is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOOLPC is not set
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_DOMAINS=y
# CONFIG_DMAR is not set
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=m
CONFIG_PCIEAER=y
CONFIG_PCIE_ECRC=y
CONFIG_PCIEAER_INJECT=m
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEBUG=y
CONFIG_ARCH_SUPPORTS_MSI=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
CONFIG_PCI_IOV=y
CONFIG_ISA_DMA_API=y
# CONFIG_ISA is not set
# CONFIG_MCA is not set
# CONFIG_SCx200 is not set
# CONFIG_OLPC is not set
CONFIG_K8_NB=y
# CONFIG_PCCARD is not set
CONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_FAKE is not set
CONFIG_HOTPLUG_PCI_COMPAQ=m
CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
CONFIG_HOTPLUG_PCI_IBM=m
CONFIG_HOTPLUG_PCI_ACPI=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
CONFIG_HOTPLUG_PCI_SHPC=m

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_MISC=y
CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
CONFIG_INET_TUNNEL=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
CONFIG_INET_LRO=y
# CONFIG_INET_DIAG is not set
CONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
CONFIG_TCP_CONG_CUBIC=y
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not set
# CONFIG_TCP_CONG_HSTCP is not set
# CONFIG_TCP_CONG_HYBLA is not set
# CONFIG_TCP_CONG_VEGAS is not set
# CONFIG_TCP_CONG_SCALABLE is not set
# CONFIG_TCP_CONG_LP is not set
# CONFIG_TCP_CONG_VENO is not set
# CONFIG_TCP_CONG_YEAH is not set
# CONFIG_TCP_CONG_ILLINOIS is not set
# CONFIG_DEFAULT_BIC is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=y
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
CONFIG_INET6_XFRM_MODE_TRANSPORT=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y
CONFIG_INET6_XFRM_MODE_BEET=y
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
CONFIG_IPV6_SIT=y
CONFIG_IPV6_NDISC_NODETYPE=y
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
CONFIG_NETLABEL=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
# CONFIG_NETFILTER_ADVANCED is not set

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
# CONFIG_IP_VS is not set

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
# CONFIG_NF_NAT_TFTP is not set
# CONFIG_NF_NAT_AMANDA is not set
# CONFIG_NF_NAT_PPTP is not set
# CONFIG_NF_NAT_H323 is not set
CONFIG_NF_NAT_SIP=y
CONFIG_IP_NF_MANGLE=y

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_TARGET_LOG=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=y
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
CONFIG_LLC=m
# CONFIG_LLC2 is not set
CONFIG_IPX=m
# CONFIG_IPX_INTERN is not set
CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
CONFIG_IPDDP_DECAP=y
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
# CONFIG_NET_SCH_CBQ is not set
# CONFIG_NET_SCH_HTB is not set
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not set
# CONFIG_NET_SCH_TBF is not set
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
# CONFIG_NET_SCH_NETEM is not set
# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_INGRESS is not set

#
# Classification
#
CONFIG_NET_CLS=y
# CONFIG_NET_CLS_BASIC is not set
# CONFIG_NET_CLS_TCINDEX is not set
# CONFIG_NET_CLS_ROUTE4 is not set
# CONFIG_NET_CLS_FW is not set
# CONFIG_NET_CLS_U32 is not set
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not set
# CONFIG_NET_CLS_FLOW is not set
# CONFIG_NET_CLS_CGROUP is not set
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
# CONFIG_NET_EMATCH_CMP is not set
# CONFIG_NET_EMATCH_NBYTE is not set
# CONFIG_NET_EMATCH_U32 is not set
# CONFIG_NET_EMATCH_META is not set
# CONFIG_NET_EMATCH_TEXT is not set
CONFIG_NET_CLS_ACT=y
# CONFIG_NET_ACT_POLICE is not set
# CONFIG_NET_ACT_GACT is not set
# CONFIG_NET_ACT_MIRRED is not set
# CONFIG_NET_ACT_IPT is not set
# CONFIG_NET_ACT_NAT is not set
# CONFIG_NET_ACT_PEDIT is not set
# CONFIG_NET_ACT_SIMP is not set
# CONFIG_NET_ACT_SKBEDIT is not set
CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m

#
# Bluetooth device drivers
#
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIBCM203X=m
CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBFUSB=m
CONFIG_BT_HCIVHCI=m
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
# CONFIG_AF_RXRPC is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_CFG80211=m
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEFAULT_PS_VALUE=1
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_WIRELESS_OLD_REGULATORY is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_LIB80211 is not set
CONFIG_MAC80211=m
CONFIG_MAC80211_RC_MINSTREL=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
# CONFIG_WIMAX is not set
CONFIG_RFKILL=m
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
# CONFIG_NET_9P is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
# CONFIG_DEVTMPFS is not set
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
CONFIG_DEBUG_DEVRES=y
# CONFIG_SYS_HYPERVISOR is not set
CONFIG_CONNECTOR=m
CONFIG_MTD=m
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_CONCAT is not set
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_REDBOOT_PARTS=m
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
# CONFIG_MTD_AR7_PARTS is not set

#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
CONFIG_HAVE_MTD_OTP=y
CONFIG_MTD_BLKDEVS=m
# CONFIG_MTD_BLOCK is not set
# CONFIG_MTD_BLOCK_RO is not set
CONFIG_FTL=m
CONFIG_NFTL=m
# CONFIG_NFTL_RW is not set
CONFIG_INFTL=m
CONFIG_RFD_FTL=m
CONFIG_SSFDC=m
# CONFIG_MTD_OOPS is not set

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=m
CONFIG_MTD_JEDECPROBE=m
CONFIG_MTD_GEN_PROBE=m
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
CONFIG_MTD_CFI_INTELEXT=m
CONFIG_MTD_CFI_AMDSTD=m
CONFIG_MTD_CFI_STAA=m
CONFIG_MTD_CFI_UTIL=m
CONFIG_MTD_RAM=m
CONFIG_MTD_ROM=m
CONFIG_MTD_ABSENT=m

#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=m
# CONFIG_MTD_PHYSMAP_COMPAT is not set
CONFIG_MTD_NETSC520=m
CONFIG_MTD_TS5500=m
CONFIG_MTD_AMD76XROM=m
CONFIG_MTD_ICHXROM=m
CONFIG_MTD_ESB2ROM=m
CONFIG_MTD_CK804XROM=m
CONFIG_MTD_SCB2_FLASH=m
# CONFIG_MTD_NETtel is not set
CONFIG_MTD_L440GX=m
CONFIG_MTD_INTEL_VR_NOR=m
CONFIG_MTD_PLATRAM=m

#
# Self-contained MTD device drivers
#
CONFIG_MTD_PMC551=m
# CONFIG_MTD_PMC551_BUGFIX is not set
# CONFIG_MTD_PMC551_DEBUG is not set
CONFIG_MTD_SLRAM=m
CONFIG_MTD_PHRAM=m
CONFIG_MTD_MTDRAM=m
CONFIG_MTDRAM_TOTAL_SIZE=4096
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLOCK2MTD=m

#
# Disk-On-Chip Device Drivers
#
CONFIG_MTD_DOC2000=m
CONFIG_MTD_DOC2001=m
CONFIG_MTD_DOC2001PLUS=m
CONFIG_MTD_DOCPROBE=m
CONFIG_MTD_DOCECC=m
# CONFIG_MTD_DOCPROBE_ADVANCED is not set
CONFIG_MTD_DOCPROBE_ADDRESS=0
CONFIG_MTD_NAND=m
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
CONFIG_MTD_NAND_IDS=m
CONFIG_MTD_NAND_DISKONCHIP=m
# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
CONFIG_MTD_NAND_CAFE=m
CONFIG_MTD_NAND_CS553X=m
CONFIG_MTD_NAND_NANDSIM=m
CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_ALAUDA=m
CONFIG_MTD_ONENAND=m
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
# CONFIG_MTD_ONENAND_GENERIC is not set
CONFIG_MTD_ONENAND_OTP=y
CONFIG_MTD_ONENAND_2X_PROGRAM=y
# CONFIG_MTD_ONENAND_SIM is not set

#
# LPDDR flash memory drivers
#
CONFIG_MTD_LPDDR=m
CONFIG_MTD_QINFO_PROBE=m

#
# UBI - Unsorted block images
#
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_RESERVE=1
CONFIG_MTD_UBI_GLUEBI=m

#
# UBI debugging options
#
# CONFIG_MTD_UBI_DEBUG is not set
# CONFIG_PARPORT is not set
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_BLK_DEV_XIP is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_SGI_IOC4 is not set
CONFIG_TIFM_CORE=m
CONFIG_TIFM_7XX1=m
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
# CONFIG_ISL29003 is not set
CONFIG_C2PORT=m
# CONFIG_C2PORT_DURAMAR_2150 is not set

#
# EEPROM support
#
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_LEGACY=m
# CONFIG_EEPROM_MAX6875 is not set
CONFIG_EEPROM_93CX6=m
CONFIG_CB710_CORE=m
# CONFIG_CB710_DEBUG is not set
CONFIG_CB710_DEBUG_ASSUMPTIONS=y
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set

#
# SCSI device support
#
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_TGT=m
# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=y
# CONFIG_CHR_DEV_SCH is not set
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set
# CONFIG_SCSI_SCAN_ASYNC is not set
CONFIG_SCSI_WAIT_SCAN=m

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
# CONFIG_SCSI_LOWLEVEL is not set
# CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_VERBOSE_ERROR=y
# CONFIG_ATA_ACPI is not set
# CONFIG_SATA_PMP is not set
# CONFIG_SATA_AHCI is not set
# CONFIG_SATA_SIL24 is not set
CONFIG_ATA_SFF=y
# CONFIG_SATA_SVW is not set
CONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_PROMISE is not set
# CONFIG_SATA_SX4 is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ALI is not set
CONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CS5535 is not set
# CONFIG_PATA_CS5536 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
# CONFIG_ATA_GENERIC is not set
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RDC is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
# CONFIG_PATA_SCH is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
# CONFIG_MD_LINEAR is not set
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID456=m
# CONFIG_MULTICORE_RAID456 is not set
CONFIG_MD_RAID6_PQ=m
# CONFIG_ASYNC_RAID6_TEST is not set
CONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not set
CONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not set
# CONFIG_DM_CRYPT is not set
# CONFIG_DM_SNAPSHOT is not set
CONFIG_DM_MIRROR=m
# CONFIG_DM_LOG_USERSPACE is not set
CONFIG_DM_ZERO=m
# CONFIG_DM_MULTIPATH is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#

#
# You can enable one or both FireWire driver stacks.
#

#
# See the help texts for more information.
#
# CONFIG_FIREWIRE is not set
# CONFIG_IEEE1394 is not set
CONFIG_I2O=m
CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_CONFIG=m
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=m
CONFIG_I2O_BLOCK=m
CONFIG_I2O_SCSI=m
CONFIG_I2O_PROC=m
# CONFIG_MACINTOSH_DRIVERS is not set
CONFIG_NETDEVICES=y
# CONFIG_IFB is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_VETH is not set
# CONFIG_NET_SB1000 is not set
# CONFIG_ARCNET is not set
# CONFIG_NET_ETHERNET is not set
CONFIG_MII=m
CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
# CONFIG_E1000E is not set
# CONFIG_IP1000 is not set
# CONFIG_IGB is not set
# CONFIG_IGBVF is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
# CONFIG_CNIC is not set
# CONFIG_QLA3XXX is not set
CONFIG_ATL1=m
CONFIG_ATL1E=m
CONFIG_ATL1C=m
# CONFIG_JME is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
CONFIG_WLAN=y
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_LIBERTAS is not set
# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AIRO is not set
# CONFIG_ATMEL is not set
# CONFIG_AT76C50X_USB is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_NET_RNDIS_WLAN is not set
# CONFIG_RTL8180 is not set
# CONFIG_RTL8187 is not set
# CONFIG_ADM8211 is not set
# CONFIG_MAC80211_HWSIM is not set
# CONFIG_MWL8K is not set
# CONFIG_P54_COMMON is not set
CONFIG_ATH_COMMON=m
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
CONFIG_ATH9K=m
CONFIG_ATH9K_DEBUG=y
CONFIG_AR9170_USB=m
CONFIG_AR9170_LEDS=y
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_IWLWIFI is not set
# CONFIG_HOSTAP is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
# CONFIG_ZD1211RW is not set
CONFIG_RT2X00=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
CONFIG_RT2800USB=m
CONFIG_RT2X00_LIB_PCI=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_HT=y
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
CONFIG_RT2X00_DEBUG=y
# CONFIG_HERMES is not set
# CONFIG_WL12XX is not set
# CONFIG_IWM is not set

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#

#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_CDC_EEM=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_HSO=m
CONFIG_USB_NET_INT51X1=m
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
CONFIG_NETCONSOLE=y
# CONFIG_NETCONSOLE_DYNAMIC is not set
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_POLLDEV=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
CONFIG_MOUSE_PS2_ELANTECH=y
# CONFIG_MOUSE_PS2_SENTELIC is not set
CONFIG_MOUSE_PS2_TOUCHKIT=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
# CONFIG_MOUSE_VSXXXAA is not set
CONFIG_MOUSE_SYNAPTICS_I2C=m
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
CONFIG_TABLET_USB_AIPTEK=m
CONFIG_TABLET_USB_GTCO=m
CONFIG_TABLET_USB_KBTAB=m
CONFIG_TABLET_USB_WACOM=m
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_WISTRON_BTNS is not set
# CONFIG_INPUT_ATLAS_BTNS is not set
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_WINBOND_CIR=m

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NOZOMI is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_HW_RANDOM=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_GEODE is not set
# CONFIG_HW_RANDOM_VIA is not set
CONFIG_NVRAM=m
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set
# CONFIG_MWAVE is not set
# CONFIG_PC8736x_GPIO is not set
# CONFIG_NSC_GPIO is not set
# CONFIG_CS5535_GPIO is not set
# CONFIG_RAW_DRIVER is not set
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
CONFIG_HANGCHECK_TIMER=m
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS=m
CONFIG_TCG_NSC=m
CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
# CONFIG_TELCLOCK is not set
CONFIG_DEVPORT=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_ALGOBIT=y

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
CONFIG_I2C_I801=m
CONFIG_I2C_ISCH=m
CONFIG_I2C_PIIX4=m
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set

#
# ACPI drivers
#
# CONFIG_I2C_SCMI is not set

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_SIMTEC is not set

#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_TINY_USB is not set

#
# Graphics adapter I2C/DDC channel drivers
#
# CONFIG_I2C_VOODOO3 is not set

#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
# CONFIG_SCx200_ACB is not set

#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
# CONFIG_SPI is not set

#
# PPS support
#
# CONFIG_PPS is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
# CONFIG_BATTERY_DS2760 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ27x00 is not set
# CONFIG_BATTERY_MAX17040 is not set
CONFIG_HWMON=m
CONFIG_HWMON_VID=m
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Native drivers
#
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7473 is not set
# CONFIG_SENSORS_ADT7475 is not set
# CONFIG_SENSORS_K8TEMP is not set
CONFIG_SENSORS_ASB100=m
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_I5K_AMB is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_FSCHMD is not set
# CONFIG_SENSORS_G760A is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
CONFIG_SENSORS_CORETEMP=m
# CONFIG_SENSORS_IBMAEM is not set
# CONFIG_SENSORS_IBMPEX is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_SENSORS_HDAPS is not set
# CONFIG_SENSORS_APPLESMC is not set

#
# ACPI drivers
#
CONFIG_SENSORS_ATK0110=m
# CONFIG_SENSORS_LIS3LV02D is not set
CONFIG_THERMAL=y
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
CONFIG_SSB=m
CONFIG_SSB_SPROM=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
# CONFIG_SSB_B43_PCI_BRIDGE is not set
CONFIG_SSB_SDIOHOST_POSSIBLE=y
CONFIG_SSB_SDIOHOST=y
# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=m
CONFIG_MFD_SM501=m
CONFIG_HTC_PASIC3=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_AB3100_CORE is not set
CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
CONFIG_REGULATOR_BQ24022=m
CONFIG_REGULATOR_MAX1586=m
CONFIG_REGULATOR_LP3971=m
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not set
CONFIG_MEDIA_SUPPORT=m

#
# Multimedia core support
#
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L2_COMMON=m
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not set
CONFIG_VIDEO_MEDIA=m

#
# Multimedia drivers
#
CONFIG_VIDEO_SAA7146=m
CONFIG_VIDEO_SAA7146_VV=m
CONFIG_MEDIA_ATTACH=y
CONFIG_MEDIA_TUNER=m
# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
CONFIG_MEDIA_TUNER_SIMPLE=m
CONFIG_MEDIA_TUNER_TDA8290=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_XC2028=m
CONFIG_MEDIA_TUNER_XC5000=m
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEO_V4L1=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEO_BTCX=m
CONFIG_VIDEO_IR=m
CONFIG_VIDEO_TVEEPROM=m
CONFIG_VIDEO_TUNER=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
CONFIG_VIDEO_IR_I2C=m
CONFIG_VIDEO_TVAUDIO=m
CONFIG_VIDEO_TDA7432=m
CONFIG_VIDEO_TDA9840=m
CONFIG_VIDEO_TEA6415C=m
CONFIG_VIDEO_TEA6420=m
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_CS53L32A=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_WM8775=m
CONFIG_VIDEO_WM8739=m
CONFIG_VIDEO_VP27SMPX=m
CONFIG_VIDEO_SAA6588=m
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT856=m
CONFIG_VIDEO_BT866=m
CONFIG_VIDEO_KS0127=m
CONFIG_VIDEO_OV7670=m
CONFIG_VIDEO_MT9V011=m
CONFIG_VIDEO_SAA7110=m
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_SAA717X=m
CONFIG_VIDEO_TVP5150=m
CONFIG_VIDEO_VPX3220=m
CONFIG_VIDEO_CX25840=m
CONFIG_VIDEO_CX2341X=m
CONFIG_VIDEO_SAA7127=m
CONFIG_VIDEO_SAA7185=m
CONFIG_VIDEO_ADV7170=m
CONFIG_VIDEO_ADV7175=m
CONFIG_VIDEO_UPD64031A=m
CONFIG_VIDEO_UPD64083=m
CONFIG_VIDEO_VIVI=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_CPIA=m
CONFIG_VIDEO_CPIA_USB=m
CONFIG_VIDEO_CPIA2=m
CONFIG_VIDEO_SAA5246A=m
CONFIG_VIDEO_SAA5249=m
CONFIG_VIDEO_STRADIS=m
CONFIG_VIDEO_ZORAN=m
CONFIG_VIDEO_ZORAN_DC30=m
CONFIG_VIDEO_ZORAN_ZR36060=m
CONFIG_VIDEO_ZORAN_BUZ=m
CONFIG_VIDEO_ZORAN_DC10=m
CONFIG_VIDEO_ZORAN_LML33=m
CONFIG_VIDEO_ZORAN_LML33R10=m
CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_SAA7134=m
CONFIG_VIDEO_SAA7134_ALSA=m
CONFIG_VIDEO_MXB=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_CX88=m
CONFIG_VIDEO_CX88_ALSA=m
CONFIG_VIDEO_CX88_BLACKBIRD=m
CONFIG_VIDEO_CX88_MPEG=m
CONFIG_VIDEO_IVTV=m
CONFIG_VIDEO_FB_IVTV=m
CONFIG_VIDEO_CAFE_CCIC=m
CONFIG_SOC_CAMERA=m
CONFIG_SOC_CAMERA_MT9M001=m
CONFIG_SOC_CAMERA_MT9M111=m
CONFIG_SOC_CAMERA_MT9T031=m
CONFIG_SOC_CAMERA_MT9V022=m
CONFIG_SOC_CAMERA_TW9910=m
CONFIG_SOC_CAMERA_PLATFORM=m
CONFIG_SOC_CAMERA_OV772X=m
CONFIG_V4L_USB_DRIVERS=y
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
# CONFIG_USB_M5602 is not set
# CONFIG_USB_STV06XX is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GSPCA_CONEX is not set
# CONFIG_USB_GSPCA_ETOMS is not set
# CONFIG_USB_GSPCA_FINEPIX is not set
CONFIG_USB_GSPCA_JEILINJ=m
# CONFIG_USB_GSPCA_MARS is not set
# CONFIG_USB_GSPCA_MR97310A is not set
# CONFIG_USB_GSPCA_OV519 is not set
# CONFIG_USB_GSPCA_OV534 is not set
# CONFIG_USB_GSPCA_PAC207 is not set
# CONFIG_USB_GSPCA_PAC7311 is not set
# CONFIG_USB_GSPCA_SN9C20X is not set
# CONFIG_USB_GSPCA_SONIXB is not set
# CONFIG_USB_GSPCA_SONIXJ is not set
# CONFIG_USB_GSPCA_SPCA500 is not set
# CONFIG_USB_GSPCA_SPCA501 is not set
# CONFIG_USB_GSPCA_SPCA505 is not set
# CONFIG_USB_GSPCA_SPCA506 is not set
# CONFIG_USB_GSPCA_SPCA508 is not set
# CONFIG_USB_GSPCA_SPCA561 is not set
# CONFIG_USB_GSPCA_SQ905 is not set
# CONFIG_USB_GSPCA_SQ905C is not set
# CONFIG_USB_GSPCA_STK014 is not set
# CONFIG_USB_GSPCA_SUNPLUS is not set
# CONFIG_USB_GSPCA_T613 is not set
# CONFIG_USB_GSPCA_TV8532 is not set
# CONFIG_USB_GSPCA_VC032X is not set
# CONFIG_USB_GSPCA_ZC3XX is not set
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_ALSA=m
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_USBVIDEO=m
CONFIG_USB_VICAM=m
CONFIG_USB_IBMCAM=m
CONFIG_USB_KONICAWC=m
CONFIG_USB_QUICKCAM_MESSENGER=m
CONFIG_USB_ET61X251=m
CONFIG_VIDEO_OVCAMCHIP=m
CONFIG_USB_W9968CF=m
CONFIG_USB_OV511=m
CONFIG_USB_SE401=m
CONFIG_USB_SN9C102=m
CONFIG_USB_STV680=m
CONFIG_USB_ZC0301=m
CONFIG_USB_PWC=m
# CONFIG_USB_PWC_DEBUG is not set
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_ZR364XX=m
CONFIG_USB_STKWEBCAM=m
CONFIG_USB_S2255=m
# CONFIG_RADIO_ADAPTERS is not set
# CONFIG_DAB is not set

#
# Graphics support
#
CONFIG_AGP=y
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_ATI is not set
# CONFIG_AGP_AMD is not set
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
# CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_VIA is not set
# CONFIG_AGP_EFFICEON is not set
CONFIG_VGA_ARB=y
CONFIG_DRM=y
CONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
CONFIG_DRM_I915=y
CONFIG_DRM_I915_KMS=y
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_VGASTATE is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
# CONFIG_FB_SYS_FILLRECT is not set
# CONFIG_FB_SYS_COPYAREA is not set
# CONFIG_FB_SYS_IMAGEBLIT is not set
# CONFIG_FB_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_UVESA is not set
# CONFIG_FB_VESA is not set
CONFIG_FB_EFI=y
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_I810 is not set
# CONFIG_FB_LE80578 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_VIA is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VT8623 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_CARMINE is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_TMIO is not set
# CONFIG_FB_SM501 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_GENERIC=y
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
# CONFIG_BACKLIGHT_SAHARA is not set

#
# Display device support
#
# CONFIG_DISPLAY_SUPPORT is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
CONFIG_SND=y
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_JACK=y
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_HRTIMER=m
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
CONFIG_SND_DEBUG=y
# CONFIG_SND_DEBUG_VERBOSE is not set
CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_VMASTER=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_RAWMIDI_SEQ=m
# CONFIG_SND_OPL3_LIB_SEQ is not set
# CONFIG_SND_OPL4_LIB_SEQ is not set
# CONFIG_SND_SBAWE_SEQ is not set
# CONFIG_SND_EMU10K1_SEQ is not set
CONFIG_SND_MPU401_UART=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_DRIVERS=y
CONFIG_SND_PCSP=m
CONFIG_SND_DUMMY=m
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_MPU401=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
CONFIG_SND_PCI=y
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AW2 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_OXYGEN is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS5530 is not set
# CONFIG_SND_CS5535AUDIO is not set
# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_INDIGOIOX is not set
# CONFIG_SND_INDIGODJX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
CONFIG_SND_HDA_INTEL=m
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_JACK=y
# CONFIG_SND_HDA_PATCH_LOADER is not set
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_ATIHDMI=y
CONFIG_SND_HDA_CODEC_NVHDMI=y
CONFIG_SND_HDA_CODEC_INTELHDMI=y
CONFIG_SND_HDA_ELD=y
CONFIG_SND_HDA_CODEC_CIRRUS=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_HIFIER is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
CONFIG_SND_INTEL8X0=m
CONFIG_SND_INTEL8X0M=m
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_LX6464ES is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SIS7019 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VIRTUOSO is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_USX2Y=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=m
CONFIG_SND_SOC=m
CONFIG_SND_SOC_I2C_AND_SPI=m
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_WM_HUBS=m
CONFIG_SND_SOC_AD73311=m
CONFIG_SND_SOC_AK4535=m
CONFIG_SND_SOC_AK4642=m
CONFIG_SND_SOC_CS4270=m
CONFIG_SND_SOC_L3=m
CONFIG_SND_SOC_PCM3008=m
CONFIG_SND_SOC_SPDIF=m
CONFIG_SND_SOC_SSM2602=m
CONFIG_SND_SOC_TLV320AIC23=m
CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_UDA134X=m
CONFIG_SND_SOC_UDA1380=m
CONFIG_SND_SOC_WM8510=m
CONFIG_SND_SOC_WM8523=m
CONFIG_SND_SOC_WM8580=m
CONFIG_SND_SOC_WM8728=m
CONFIG_SND_SOC_WM8731=m
CONFIG_SND_SOC_WM8750=m
CONFIG_SND_SOC_WM8753=m
CONFIG_SND_SOC_WM8776=m
CONFIG_SND_SOC_WM8900=m
CONFIG_SND_SOC_WM8903=m
CONFIG_SND_SOC_WM8940=m
CONFIG_SND_SOC_WM8960=m
CONFIG_SND_SOC_WM8961=m
CONFIG_SND_SOC_WM8971=m
CONFIG_SND_SOC_WM8974=m
CONFIG_SND_SOC_WM8988=m
CONFIG_SND_SOC_WM8990=m
CONFIG_SND_SOC_WM8993=m
CONFIG_SND_SOC_WM9081=m
CONFIG_SND_SOC_MAX9877=m
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_HIDRAW=y

#
# USB Input Devices
#
CONFIG_USB_HID=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=m
CONFIG_HID_APPLE=m
CONFIG_HID_BELKIN=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=m
# CONFIG_DRAGONRISE_FF is not set
CONFIG_HID_EZKEY=m
CONFIG_HID_KYE=m
CONFIG_HID_GYRATION=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LOGITECH=m
# CONFIG_LOGITECH_FF is not set
# CONFIG_LOGIRUMBLEPAD2_FF is not set
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_NTRIG=m
CONFIG_HID_PANTHERLORD=m
# CONFIG_PANTHERLORD_FF is not set
CONFIG_HID_PETALYNX=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SONY=m
CONFIG_HID_SUNPLUS=m
CONFIG_HID_GREENASIA=m
# CONFIG_GREENASIA_FF is not set
CONFIG_HID_SMARTJOYPLUS=m
# CONFIG_SMARTJOYPLUS_FF is not set
CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
# CONFIG_THRUSTMASTER_FF is not set
CONFIG_HID_WACOM=m
CONFIG_HID_ZEROPLUS=m
# CONFIG_ZEROPLUS_FF is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=m
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
CONFIG_USB_MON=m
CONFIG_USB_WUSB=m
# CONFIG_USB_WUSB_CBAF is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_XHCI_HCD is not set
CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
# CONFIG_USB_ISP1362_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_HCD_SSB is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_U132_HCD is not set
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
CONFIG_USB_WHCI_HCD=m
# CONFIG_USB_HWA_HCD is not set

#
# Enable Host or Gadget support to see Inventra options
#

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_DATAFAB=m
CONFIG_USB_STORAGE_FREECOM=m
CONFIG_USB_STORAGE_ISD200=m
CONFIG_USB_STORAGE_USBAT=m
CONFIG_USB_STORAGE_SDDR09=m
CONFIG_USB_STORAGE_SDDR55=m
CONFIG_USB_STORAGE_JUMPSHOT=m
CONFIG_USB_STORAGE_ALAUDA=m
CONFIG_USB_STORAGE_ONETOUCH=m
CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
CONFIG_USB_LIBUSUAL=y

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set

#
# USB port drivers
#
# CONFIG_USB_SERIAL is not set

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
CONFIG_USB_ADUTUX=m
CONFIG_USB_SEVSEG=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_BERRY_CHARGE=m
CONFIG_USB_LED=m
CONFIG_USB_CYPRESS_CY7C63=m
CONFIG_USB_CYTHERM=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_FTDI_ELAN=m
CONFIG_USB_APPLEDISPLAY=m
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_VST is not set
# CONFIG_USB_GADGET is not set

#
# OTG and related infrastructure
#
# CONFIG_NOP_USB_XCEIV is not set
CONFIG_UWB=m
# CONFIG_UWB_HWA is not set
CONFIG_UWB_WHCI=m
# CONFIG_UWB_WLP is not set
CONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_SDIO_UART=m
CONFIG_MMC_TEST=m

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
# CONFIG_MMC_RICOH_MMC is not set
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_WBSD=m
# CONFIG_MMC_AT91 is not set
# CONFIG_MMC_ATMELMCI is not set
CONFIG_MMC_TIFM_SD=m
CONFIG_MMC_CB710=m
CONFIG_MMC_VIA_SDMMC=m
CONFIG_MEMSTICK=m
# CONFIG_MEMSTICK_DEBUG is not set

#
# MemoryStick drivers
#
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
CONFIG_MSPRO_BLOCK=m

#
# MemoryStick Host Controller Drivers
#
CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y

#
# LED drivers
#
CONFIG_LEDS_ALIX2=m
CONFIG_LEDS_PCA9532=m
CONFIG_LEDS_LP3944=m
CONFIG_LEDS_CLEVO_MAIL=m
CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_BD2802=m

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
# CONFIG_EDAC is not set
CONFIG_RTC_LIB=m
CONFIG_RTC_CLASS=m

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
# CONFIG_RTC_DRV_TEST is not set

#
# I2C RTC drivers
#
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1374 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
# CONFIG_RTC_DRV_RX8025 is not set

#
# SPI RTC drivers
#

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=m
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set

#
# on-CPU RTC drivers
#
CONFIG_DMADEVICES=y

#
# DMA Devices
#
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set

#
# TI VLYNQ
#
# CONFIG_STAGING is not set
CONFIG_X86_PLATFORM_DEVICES=y
# CONFIG_ACER_WMI is not set
CONFIG_ASUS_LAPTOP=m
# CONFIG_FUJITSU_LAPTOP is not set
# CONFIG_TC1100_WMI is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_PANASONIC_LAPTOP is not set
# CONFIG_COMPAL_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not set
# CONFIG_THINKPAD_ACPI is not set
# CONFIG_INTEL_MENLOW is not set
CONFIG_EEEPC_LAPTOP=m
# CONFIG_ACPI_WMI is not set
# CONFIG_ACPI_ASUS is not set
# CONFIG_TOPSTAR_LAPTOP is not set
# CONFIG_ACPI_TOSHIBA is not set

#
# Firmware Drivers
#
# CONFIG_EDD is not set
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_EFI_VARS=y
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
CONFIG_DMIID=y
# CONFIG_ISCSI_IBFT_FIND is not set

#
# File systems
#
# CONFIG_EXT2_FS is not set
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_JBD2=y
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
CONFIG_QUOTA_TREE=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=m
CONFIG_GENERIC_ACL=y

#
# Caches
#
# CONFIG_FSCACHE is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
# CONFIG_CONFIGFS_FS is not set
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_HFS_FS=m
CONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_UBIFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
# CONFIG_NFS_FS is not set
# CONFIG_NFSD is not set
# CONFIG_SMB_FS is not set
CONFIG_CIFS=y
# CONFIG_CIFS_STATS is not set
# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_UPCALL is not set
# CONFIG_CIFS_XATTR is not set
# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_DFS_UPCALL is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
# CONFIG_DLM is not set

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_SHIRQ=y
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_DETECT_HUNG_TASK=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHEDSTATS=y
CONFIG_TIMER_STATS=y
CONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_PREEMPT=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_PI_LIST=y
# CONFIG_RT_MUTEX_TESTER is not set
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
# CONFIG_LOCK_STAT is not set
CONFIG_DEBUG_LOCKDEP=y
CONFIG_TRACE_IRQFLAGS=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_HIGHMEM=y
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_CREDENTIALS=y
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_DETECTOR=y
CONFIG_BACKTRACE_SELF_TEST=m
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DYNAMIC_DEBUG is not set
CONFIG_DMA_API_DEBUG=y
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_HAVE_ARCH_KMEMCHECK=y
# CONFIG_STRICT_DEVMEM is not set
CONFIG_X86_VERBOSE_BOOTUP=y
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_PER_CPU_MAPS=y
# CONFIG_X86_PTDUMP is not set
CONFIG_DEBUG_RODATA=y
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_DEBUG_NX_TEST=m
CONFIG_4KSTACKS=y
CONFIG_DOUBLEFAULT=y
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IO_DELAY_TYPE_NONE=3
CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_DEFAULT_IO_DELAY_TYPE=0
CONFIG_DEBUG_BOOT_PARAMS=y
# CONFIG_CPA_DEBUG is not set
CONFIG_OPTIMIZE_INLINING=y

#
# Security options
#
CONFIG_KEYS=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
# CONFIG_SECURITY_PATH is not set
CONFIG_SECURITY_FILE_CAPABILITIES=y
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_IMA is not set
CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
CONFIG_ASYNC_XOR=m
CONFIG_ASYNC_PQ=m
CONFIG_ASYNC_RAID6_RECOV=m
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_AUTHENC=y
# CONFIG_CRYPTO_TEST is not set

#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
# CONFIG_CRYPTO_GCM is not set
# CONFIG_CRYPTO_SEQIV is not set

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
# CONFIG_CRYPTO_CTR is not set
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set

#
# Hash modes
#
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set

#
# Digest
#
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not set
CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set

#
# Ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_586=y
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_ARC4=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SALSA20_586 is not set
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_TWOFISH_586 is not set

#
# Compression
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_ZLIB is not set
# CONFIG_CRYPTO_LZO is not set

#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_PADLOCK is not set
# CONFIG_CRYPTO_DEV_GEODE is not set
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
CONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not set
# CONFIG_BINARY_PRINTF is not set

#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_REED_SOLOMON=m
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
# CONFIG_CPUMASK_OFFSTACK is not set
CONFIG_NLATTR=y

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox