From owner-freebsd-arm@FreeBSD.ORG Mon May 28 11:07:23 2012 Return-Path: Delivered-To: freebsd-arm@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7ED7D1065672 for ; Mon, 28 May 2012 11:07:23 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 6A0A78FC1F for ; Mon, 28 May 2012 11:07:23 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q4SB7NUv063287 for ; Mon, 28 May 2012 11:07:23 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q4SB7MkV063285 for freebsd-arm@FreeBSD.org; Mon, 28 May 2012 11:07:22 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 28 May 2012 11:07:22 GMT Message-Id: <201205281107.q4SB7MkV063285@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-arm@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-arm@FreeBSD.org X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 May 2012 11:07:23 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o arm/166256 arm build fail in pmap.c o arm/162159 arm [panic] USB errors leading to panic on DockStar 9.0-RC o arm/161110 arm /usr/src/sys/arm/include/signal.h is bad o arm/161044 arm devel/icu does not build on arm o arm/158950 arm arm/sheevaplug fails fsx when mmap operations are enab o arm/156814 arm OpenRD Ultimate does not boot on DB-88F6XXX or SHEEVAP o arm/155894 arm [patch] Enable at91 booting from SDHC (high capacity) o arm/155214 arm [patch] MMC/SD IO slow on Atmel ARM with modern large o arm/154227 arm [geli] using GELI leads to panic on ARM o arm/153380 arm Panic / translation fault with wlan on ARM o arm/150581 arm [irq] Unknown error generates IRQ address decoding err o arm/149288 arm mail/dovecot causes panic during configure on Sheevapl o arm/134368 arm [patch] nslu2_led driver for the LEDs on the NSLU2 p arm/134338 arm [patch] Lock GPIO accesses on ixp425 14 problems total. From owner-freebsd-arm@FreeBSD.ORG Tue May 29 16:03:33 2012 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 37DA61065674 for ; Tue, 29 May 2012 16:03:33 +0000 (UTC) (envelope-from gber@freebsd.org) Received: from smtp.semihalf.com (smtp.semihalf.com [213.17.239.109]) by mx1.freebsd.org (Postfix) with ESMTP id DE9978FC0C for ; Tue, 29 May 2012 16:03:32 +0000 (UTC) Received: from localhost (unknown [213.17.239.109]) by smtp.semihalf.com (Postfix) with ESMTP id 7EE17C3845 for ; Tue, 29 May 2012 18:03:15 +0200 (CEST) X-Virus-Scanned: by amavisd-new at semihalf.com Received: from smtp.semihalf.com ([213.17.239.109]) by localhost (smtp.semihalf.com [213.17.239.109]) (amavisd-new, port 10024) with ESMTP id aALYQsnRqRyf for ; Tue, 29 May 2012 18:03:15 +0200 (CEST) Received: from [10.0.0.93] (cardhu.semihalf.com [213.17.239.108]) by smtp.semihalf.com (Postfix) with ESMTPSA id EE56FC3838 for ; Tue, 29 May 2012 18:03:14 +0200 (CEST) Message-ID: <4FC50F17.6000809@freebsd.org> Date: Tue, 29 May 2012 20:01:59 +0200 From: Grzegorz Bernacki User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20120127 Thunderbird/3.1.16 MIME-Version: 1.0 To: freebsd-arm@freebsd.org References: <4FBCFD6C.3080209@freebsd.org> In-Reply-To: <4FBCFD6C.3080209@freebsd.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [RFC] ARM patches. X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 May 2012 16:03:33 -0000 On 05/23/12 17:08, Grzegorz Bernacki wrote: > Hi, > > I was going trough our arm git repository and I've found a lot of > changes which in my opinion should be applied into head. I am going to > post all patches in few series. First one is at: > http://people.freebsd.org/~gber/arm/ > > Please let me know if you have any comments or objections. Hi all, I put next two patches at the same place: http://people.freebsd.org/~gber/arm/ Please let me know what do you think about those changes. regards, grzesiek From owner-freebsd-arm@FreeBSD.ORG Wed May 30 04:45:27 2012 Return-Path: Delivered-To: freebsd-arm@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EBAE9106564A; Wed, 30 May 2012 04:45:27 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id A49E98FC08; Wed, 30 May 2012 04:45:27 +0000 (UTC) Received: from 63.imp.bsdimp.com (63.imp.bsdimp.com [10.0.0.63]) (authenticated bits=0) by harmony.bsdimp.com (8.14.4/8.14.3) with ESMTP id q4U4fDf4031642 (version=TLSv1/SSLv3 cipher=DHE-DSS-AES128-SHA bits=128 verify=NO); Tue, 29 May 2012 22:41:14 -0600 (MDT) (envelope-from imp@bsdimp.com) Mime-Version: 1.0 (Apple Message framework v1084) Content-Type: text/plain; charset=us-ascii From: Warner Losh In-Reply-To: <4FC50F17.6000809@freebsd.org> Date: Tue, 29 May 2012 22:41:13 -0600 Content-Transfer-Encoding: 7bit Message-Id: <6C768D74-B6E2-46FE-8EA3-DA193A0615EB@bsdimp.com> References: <4FBCFD6C.3080209@freebsd.org> <4FC50F17.6000809@freebsd.org> To: Grzegorz Bernacki X-Mailer: Apple Mail (2.1084) X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.0.1 (harmony.bsdimp.com [10.0.0.6]); Tue, 29 May 2012 22:41:14 -0600 (MDT) Cc: freebsd-arm@FreeBSD.org Subject: Re: [RFC] ARM patches. X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 May 2012 04:45:28 -0000 On May 29, 2012, at 12:01 PM, Grzegorz Bernacki wrote: > On 05/23/12 17:08, Grzegorz Bernacki wrote: >> Hi, >> >> I was going trough our arm git repository and I've found a lot of >> changes which in my opinion should be applied into head. I am going to >> post all patches in few series. First one is at: >> http://people.freebsd.org/~gber/arm/ >> >> Please let me know if you have any comments or objections. > > Hi all, > > I put next two patches at the same place: > http://people.freebsd.org/~gber/arm/ > > Please let me know what do you think about those changes. These both look good. Warner From owner-freebsd-arm@FreeBSD.ORG Fri Jun 1 13:31:01 2012 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 881F61065672 for ; Fri, 1 Jun 2012 13:31:01 +0000 (UTC) (envelope-from gber@freebsd.org) Received: from smtp.semihalf.com (smtp.semihalf.com [213.17.239.109]) by mx1.freebsd.org (Postfix) with ESMTP id 39A848FC1A for ; Fri, 1 Jun 2012 13:31:01 +0000 (UTC) Received: from localhost (unknown [213.17.239.109]) by smtp.semihalf.com (Postfix) with ESMTP id CB1B1C3845 for ; Fri, 1 Jun 2012 15:30:49 +0200 (CEST) X-Virus-Scanned: by amavisd-new at semihalf.com Received: from smtp.semihalf.com ([213.17.239.109]) by localhost (smtp.semihalf.com [213.17.239.109]) (amavisd-new, port 10024) with ESMTP id FWf8O2xeNCGo for ; Fri, 1 Jun 2012 15:30:49 +0200 (CEST) Received: from [10.0.0.93] (cardhu.semihalf.com [213.17.239.108]) by smtp.semihalf.com (Postfix) with ESMTPSA id 322C8C3842 for ; Fri, 1 Jun 2012 15:30:49 +0200 (CEST) Message-ID: <4FC8DFDA.80001@freebsd.org> Date: Fri, 01 Jun 2012 17:29:30 +0200 From: Grzegorz Bernacki User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20120127 Thunderbird/3.1.16 MIME-Version: 1.0 To: freebsd-arm@freebsd.org Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Cache in write-back problem for armv6 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Jun 2012 13:31:01 -0000 Hi, I've investigated problem which we have on our target when we switch cache to write-back mode. I've find out that the page tables were corrupted by some data. Those data turned out to be slab pointers. So my theory is that after slab has been allocated for page table we still have some dirty cache lines for this slab (at the begining of the slab we keep list pointers, which are updated on allocation/free) and we need to write-back/invalidate it before we downgrade this page to WT mode. Please see patch below and let me know if it helps you (it works for me, but maybe as a side effect) regards, grzesiek diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c index 0aa0f10..9518658 100644 --- a/sys/arm/arm/pmap-v6.c +++ b/sys/arm/arm/pmap-v6.c @@ -809,6 +809,12 @@ pmap_l2ptp_ctor(void *mem, int size, void *arg, int flags) ptep = &l2b->l2b_kva[l2pte_index(va)]; pte = *ptep; + cpu_idcache_wbinv_range(va, PAGE_SIZE); +#ifdef ARM_L2_PIPT + cpu_l2cache_wbinv_range(pte & L2_S_FRAME, PAGE_SIZE); +#else + cpu_l2cache_wbinv_range(va, PAGE_SIZE); +#endif if ((pte & L2_S_CACHE_MASK) != pte_l2_s_cache_mode_pt) { /* * Page tables must have the cache-mode set to From owner-freebsd-arm@FreeBSD.ORG Fri Jun 1 20:14:18 2012 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 26E0D10656D4 for ; Fri, 1 Jun 2012 20:14:18 +0000 (UTC) (envelope-from ben.r.gray@gmail.com) Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by mx1.freebsd.org (Postfix) with ESMTP id 535A78FC15 for ; Fri, 1 Jun 2012 20:14:17 +0000 (UTC) Received: by wgbds11 with SMTP id ds11so2281137wgb.31 for ; Fri, 01 Jun 2012 13:14:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=8i+KyyvMunzvP0H3aMcCer+kGxVh1KHYJHvK4cTDgfE=; b=kycm8+1I2GTiSLIATJMnYlDibvX691zD1TaZtWvKVUntRM4gCYZR1gl9ZH26JSwT7F Eclqz15L69eZ4AQukbX9QT1JpYVY5p5ehG53yz9PkW6HbMxBqyJEMWwp+/kSji0n9/cv 37xVED1YDMdD/yZhXVgvEjAN4JnJz4TFRFEEzuxMO7P573fqe98X8stdYIKv4MN620Vo 7avMIyci36bvZpF7ueHtBdcIDWVjrCJQobUaEpZQnfrPqLwE/KQiPLhfLU90uL4GYYzJ /Ik9zBJKkm8vFnxVzoc/QV8P6TAueUyExQJmScjsaUhqQ9bUzn26vgCIuKgGHZixL58O bkRA== Received: by 10.216.196.147 with SMTP id r19mr3032663wen.87.1338581656238; Fri, 01 Jun 2012 13:14:16 -0700 (PDT) Received: from Bens-MBP.local (93-97-50-127.zone5.bethere.co.uk. [93.97.50.127]) by mx.google.com with ESMTPS id hv7sm10779935wib.0.2012.06.01.13.13.54 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 01 Jun 2012 13:14:14 -0700 (PDT) Message-ID: <4FC92281.9010200@gmail.com> Date: Fri, 01 Jun 2012 21:13:53 +0100 From: Ben Gray User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 To: Warner Losh References: <4FBE93A7.7050502@gmail.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------020001090707090709020601" Cc: freebsd-arm@freebsd.org Subject: Re: SDIO driver X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Jun 2012 20:14:18 -0000 This is a multi-part message in MIME format. --------------020001090707090709020601 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Warner, Thanks very much for your reply and sorry for my rather tardy reply. > > On May 24, 2012, at 2:01 PM, Ben Gray wrote: > >> Hi all, >> >> I've being doing some work on hacking SDIO support into the kernel. My changes build on top of the current MMC/MMCBR module. Expanding the diagram from Warner Losh's pdf (http://www.bsdcan.org/2007/schedule/attachments/23-freebsd-sd-warner-losh.pdf), my hacks have the following logic layout >> >> >> +------------+ +------------+ >> | ti_mmchs0 | | ti_mmchs1 | >> +------------+ +------------+ >> | | >> | | >> +--------+ +--------+ >> | mmc0 | | mmc1 | >> +--------+ +--------+ >> | | >> +------+-----+ | >> | | | >> +---------+ +---------+ +---------+ >> | mmcsd0 | | mmcsd1 | | sdio0 | >> +---------+ +---------+ +---------+ >> | >> | >> +------+-------+------- .... -----+ >> | | | >> function#1 function#2 function#7 >> +----------+ +-----------+ +----------+ >> | wifi | | bluetooth | .... | whatever | >> +----------+ +-----------+ +----------+ >> >> >> So my sdio module sits at the same level as the current mmcsd module and uses the same interface to talk to the mmc0 module (notably MMCBUS_WAIT_FOR_REQUEST). The sdio part does the card setup and CIS scanning, then enables any child functions and probes for a suitable child driver. > > I think this is one layer too low in the tree. This is bus code, and should be in the mmc bus. sdio drivers can then attach, and multiple functions can attach multiple drivers more easily. I tended to agree, the issue was I didn't want to change too much at the mmc level. IMO there are some advantages by having an SDIO layer; it's a place to put the sdio specific stuff (CIS parsing, etc) and it means child devices are based off 'sdio' rather than 'mmc' which seems to make more sense to me. It also means the sdio layer can expose functions/interfaces for reading/writing data blocks, something that would be used commonly across all child sdio devices. However I take your point and I guess it's probably best to do it properly rather than just tack something on. So I might go back to the drawing board and see how to cleanly integrate the sdio code. > > >> The problem with this approach is that currently a driver can target only one logic function on the card - I don't know if any driver will ever need to span more than one function. But perhaps a bigger problem is that it doesn't support 'combo cards' (cards with both I/O and standard SD memory). However supporting combo cards, I think, would require a lot more changes to the current mmc/mmcsd drivers which I'm reluctant to do. > > Yes. That's one of many problems, since SD I/O cards also need some additional stuff in the enumeration, which may be tricky to reliably do in the lower layers like you've done. In addition, there would need to be some bus/bridge interfaces because some mmc/sd controllers can't do SD I/O transactions. > >> Anyway I'm interested in whether anyone thinks this is useful in it's current form? or whether the above limitations are too much of a problem? If others are happy and would like it in the tree then perhaps I can commit it to the armv6 branch for review? > > I'd be interested in taking a look. Once again sorry I've been a bit slow to respond, but I've now attached a patch for my code in it's current state. I apologise in advance, it's a bit messy and there parts of the standard missing (interrupts for one), but it does work well enough to detect an sdio card and probe a child driver. The patch doesn't include my wifi driver, because that's even more of a mess. Oh and the patch is based off the armv6 project branch, my version may be a month or so old. > > >> Lastly the code is not quite complete as there are still corner cases that need to be fixed, however in it's current form it works with a basic wifi driver I've written for the Pandaboard (can load f/w, read registers, etc). > > Which wifi card? It's not actually a card rather a solder-on-module that supports wifi, bt and (on the newer devices) gps. It's made by TI, called wilink (http://www.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12859&contentId=67453). It comes on all Pandaboards. > > > Warner Cheers, Ben. --------------020001090707090709020601 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="armv6-mmc-sdio.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="armv6-mmc-sdio.diff" SW5kZXg6IG1tY3JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1tY3JlZy5oCShyZXZpc2lvbiAy MzQzOTQpCisrKyBtbWNyZWcuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsOCBAQAog I2RlZmluZQlNTUNfUlNQX1IxQgkoTU1DX1JTUF9QUkVTRU5UIHwgTU1DX1JTUF9DUkMgfCBN TUNfUlNQX09QQ09ERSB8IE1NQ19SU1BfQlVTWSkKICNkZWZpbmUJTU1DX1JTUF9SMgkoTU1D X1JTUF9QUkVTRU5UIHwgTU1DX1JTUF8xMzYgfCBNTUNfUlNQX0NSQykKICNkZWZpbmUJTU1D X1JTUF9SMwkoTU1DX1JTUF9QUkVTRU5UKQorI2RlZmluZQlNTUNfUlNQX1I0CShNTUNfUlNQ X1BSRVNFTlQpCisjZGVmaW5lCU1NQ19SU1BfUjUJKE1NQ19SU1BfUFJFU0VOVCB8IE1NQ19S U1BfQ1JDIHwgTU1DX1JTUF9PUENPREUpCiAjZGVmaW5lCU1NQ19SU1BfUjYJKE1NQ19SU1Bf UFJFU0VOVCB8IE1NQ19SU1BfQ1JDKQogI2RlZmluZQlNTUNfUlNQX1I3CShNTUNfUlNQX1BS RVNFTlQgfCBNTUNfUlNQX0NSQykKICNkZWZpbmUJTU1DX1JTUCh4KQkoKHgpICYgTU1DX1JT UF9NQVNLKQpAQCAtMTUxLDYgKzE1MywzMSBAQAogI2RlZmluZQlSMV9TVEFURV9QUkcJNwog I2RlZmluZQlSMV9TVEFURV9ESVMJOAogCisvKgorICogUjUgcmVzcG9uc2VzCisgKgorICog VHlwZXMgKHBlciBTRCAyLjAgc3RhbmRhcmQpCisgKgllIDogZXJyb3IgYml0CisgKglzIDog c3RhdHVzIGJpdAorICoJciA6IGRldGVjdGVkIGFuZCBzZXQgZm9yIHRoZSBhY3R1YWwgY29t bWFuZCByZXNwb25zZQorICoJeCA6IERldGVjdGVkIGFuZCBzZXQgZHVyaW5nIGNvbW1hbmQg ZXhlY3V0aW9uLiAgVGhlIGhvc3QgY2FuIGdldAorICoJICAgIHRoZSBzdGF0dXMgYnkgaXNz dWluZyBhIGNvbW1hbmQgd2l0aCBSMSByZXNwb25zZS4KKyAqCisgKiBDbGVhciBDb25kaXRp b24gKHBlciBTRCAyLjAgc3RhbmRhcmQpCisgKglhIDogYWNjb3JkaW5nIHRvIHRoZSBjYXJk IGN1cnJlbnQgc3RhdGUuCisgKgliIDogYWx3YXlzIHJlbGF0ZWQgdG8gdGhlIHByZXZpb3Vz IGNvbW1hbmQuICByZWNlcHRpb24gb2YgYSB2YWxpZAorICoJICAgIGNvbW1hbmQgd2lsbCBj bGVhciBpdCAod2l0aCBhIGRlbGF5IG9mIG9uZSBjb21tYW5kKS4KKyAqCWMgOiBjbGVhciBi eSByZWFkCisgKi8KKyNkZWZpbmUJUjVfQ09NX0NSQ19FUlJPUiAoMXUgPDwgMTUpCQkvKiBl ciwgYiAqLworI2RlZmluZQlSNV9JTExFR0FMX0NPTU1BTkQgKDF1IDw8IDE0KQkJLyogZXIs IGIgKi8KKyNkZWZpbmUJUjVfSU9fQ1VSUkVOVF9TVEFURV9NQVNLICgzdSA8PCAxMikJCS8q IHMsIGIgKi8KKyNkZWZpbmUJUjVfSU9fQ1VSUkVOVF9TVEFURSh4KSAoKCh4KSAmIFI1X0lP X0NVUlJFTlRfU1RBVEVfTUFTSykgPj4gMTIpCisjZGVmaW5lCVI1X0VSUk9SICgxdSA8PCAx MSkJCS8qIGVyeCwgYyAqLworI2RlZmluZQlSNV9GVU5DVElPTl9OVU1CRVIgKDF1IDw8IDkp CQkvKiBlciwgYyAqLworI2RlZmluZQlSNV9PVVRfT0ZfUkFOR0UgKDF1IDw8IDgpCQkvKiBl ciwgYyAqLworCisKIHN0cnVjdCBtbWNfZGF0YSB7CiAJc2l6ZV90IGxlbjsJCS8qIHNpemUg b2YgdGhlIGRhdGEgKi8KIAlzaXplX3QgeGZlcl9sZW47CkBAIC0xODEsNyArMjA4LDcgQEAK ICNkZWZpbmUJTU1DX1NFVF9SRUxBVElWRV9BRERSCTMKICNkZWZpbmUJU0RfU0VORF9SRUxB VElWRV9BRERSCTMKICNkZWZpbmUJTU1DX1NFVF9EU1IJCTQKLQkJCS8qIHJlc2VydmVkOiA1 ICovCisjZGVmaW5lIFNEX0lPX1NFTkRfT1BfQ09ORAk1CiAjZGVmaW5lCU1NQ19TV0lUQ0hf RlVOQwkJNgogI2RlZmluZQkgTU1DX1NXSVRDSF9GVU5DX0NNRFMJIDAKICNkZWZpbmUJIE1N Q19TV0lUQ0hfRlVOQ19TRVQJIDEKQEAgLTMzMiw2ICszNTksMjIgQEAKIAogI2RlZmluZQlT RF9NQVhfSFMJCTUwMDAwMDAwCiAKKy8qCisgKiBTRElPIERpcmVjdCAmIEV4dGVuZGVkIEkv TworICovCisjZGVmaW5lIFNEX0lPX1JXX1dSCQkoMXUgPDwgMzEpCisjZGVmaW5lIFNEX0lP X1JXX0ZVTkMoeCkJKCgoeCkgJiAweDcpIDw8IDI4KQorI2RlZmluZSBTRF9JT19SV19SQVcJ KDF1IDw8IDI3KQorI2RlZmluZSBTRF9JT19SV19JTkNSCQkoMXUgPDwgMjYpCisjZGVmaW5l IFNEX0lPX1JXX0FEUih4KQkoKCh4KSAmIDB4MUZGRkYpIDw8IDkpCisjZGVmaW5lIFNEX0lP X1JXX0RBVCh4KQkoKCh4KSAmIDB4RkYpIDw8IDApCisjZGVmaW5lIFNEX0lPX1JXX0xFTih4 KQkoKCh4KSAmIDB4RkYpIDw8IDApCisKKyNkZWZpbmUgU0RfSU9FX1JXX0xFTih4KQkoKCh4 KSAmIDB4MUZGKSA8PCAwKQorI2RlZmluZSBTRF9JT0VfUldfQkxLCSgxdSA8PCAyNykKKwor CisKIC8qIE9DUiBiaXRzICovCiAKIC8qCkluZGV4OiBicmlkZ2UuaAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBicmlkZ2UuaAkocmV2aXNpb24gMjM0Mzk0KQorKysgYnJpZGdlLmgJKHdvcmtpbmcg Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQAogfTsKIAogZW51bSBtbWNfYnVzX3RpbWluZyB7 Ci0JYnVzX3RpbWluZ19ub3JtYWwgPSAwLCBidXNfdGltaW5nX2hzCisJYnVzX3RpbWluZ19s cyA9IDAsIGJ1c190aW1pbmdfbm9ybWFsLCBidXNfdGltaW5nX2hzCiB9OwogCiBzdHJ1Y3Qg bW1jX2lvcyB7CkBAIC0xMTksNyArMTE5LDcgQEAKIH07CiAKIGVudW0gbW1jX2NhcmRfbW9k ZSB7Ci0JbW9kZV9tbWMsIG1vZGVfc2QKKwltb2RlX21tYywgbW9kZV9zZCwgbW9kZV9zZGlv CiB9OwogCiBzdHJ1Y3QgbW1jX2hvc3QgewpJbmRleDogbW1jdmFyLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gbW1jdmFyLmgJKHJldmlzaW9uIDIzNDM5NCkKKysrIG1tY3Zhci5oCSh3b3JraW5n IGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAgICAgTU1DX0lWQVJfQlVTX1dJRFRILAogICAg IE1NQ19JVkFSX0VSQVNFX1NFQ1RPUiwKICAgICBNTUNfSVZBUl9NQVhfREFUQSwKKyAgICBN TUNfSVZBUl9JT19GVU5DVElPTlMsCiAvLyAgICBNTUNfSVZBUl8sCiB9OwogCkBAIC04OSw1 ICs5MCw2IEBACiBNTUNfQUNDRVNTT1IoYnVzX3dpZHRoLCBCVVNfV0lEVEgsIGludCkKIE1N Q19BQ0NFU1NPUihlcmFzZV9zZWN0b3IsIEVSQVNFX1NFQ1RPUiwgaW50KQogTU1DX0FDQ0VT U09SKG1heF9kYXRhLCBNQVhfREFUQSwgaW50KQorTU1DX0FDQ0VTU09SKGlvX2Z1bmN0aW9u cywgSU9fRlVOQ1RJT05TLCBpbnQpCiAKICNlbmRpZiAvKiBERVZfTU1DX01NQ1ZBUl9IICov CkluZGV4OiBtbWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtbWMuYwkocmV2aXNpb24gMjM0Mzk0 KQorKysgbW1jLmMJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDExIEBACiAjaW5jbHVk ZSAibW1jYnJfaWYuaCIKICNpbmNsdWRlICJtbWNidXNfaWYuaCIKIAorI2RlZmluZSBNTUNf U0RJT19TVVBQT1JUCisjaWYgZGVmaW5lZChNTUNfU0RJT19TVVBQT1JUKQorI2luY2x1ZGUg PGRldi9tbWMvbW1jaW9yZWcuaD4KKyNlbmRpZgorCiBzdHJ1Y3QgbW1jX3NvZnRjIHsKIAlk ZXZpY2VfdCBkZXY7CiAJc3RydWN0IG10eCBzY19tdHg7CkBAIC0xMDAsNyArMTA1LDkgQEAK IAl1aW50MzJfdCBzZWNfY291bnQ7CS8qIENhcmQgY2FwYWNpdHkgaW4gNTEyYnl0ZSBibG9j a3MgKi8KIAl1aW50MzJfdCB0cmFuX3NwZWVkOwkvKiBNYXggc3BlZWQgaW4gbm9ybWFsIG1v ZGUgKi8KIAl1aW50MzJfdCBoc190cmFuX3NwZWVkOwkvKiBNYXggc3BlZWQgaW4gaGlnaCBz cGVlZCBtb2RlICovCisJdWludDMyX3QgbHNfdHJhbl9zcGVlZDsJLyogTWF4IHNwZWVkIGlu IGxvdyBzcGVlZCBtb2RlIChTRElPIG9ubHkpICovCiAJdWludDMyX3QgZXJhc2Vfc2VjdG9y OwkvKiBDYXJkIG5hdGl2ZSBlcmFzZSBzZWN0b3Igc2l6ZSAqLworCXVpbnQzMl90IGlvX2Z1 bmN0aW9uczsJLyogTnVtYmVyIG9mIElPIGZ1bmN0aW9ucyBzdXBwb3J0ZWQgKFNESU8gb25s eSkgKi8KIH07CiAKICNkZWZpbmUgQ01EX1JFVFJJRVMJMwpAQCAtNTA2LDYgKzUxMyw4NiBA QAogCXJldHVybiAoZXJyKTsKIH0KIAorLyogW0JSR10gLSBBZGRlZCBmb3IgU0RJTyAqLwor I2lmIGRlZmluZWQoTU1DX1NESU9fU1VQUE9SVCkKKworc3RhdGljIGludAorbW1jX3NlbmRf aW9fb3BfY29uZChzdHJ1Y3QgbW1jX3NvZnRjICpzYywgdWludDMyX3Qgb2NyLCB1aW50MzJf dCAqcm9jciwKKyAgICB1aW50MzJfdCAqcmZucywgdWludDMyX3QgKnJtZW0pCit7CisJc3Ry dWN0IG1tY19jb21tYW5kIGNtZDsKKwlpbnQgZXJyOworCWludCBpOworCQorCW1lbXNldCgm Y21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLm9wY29kZSA9IFNEX0lPX1NFTkRfT1BfQ09O RDsKKwljbWQuYXJnID0gb2NyOworCWNtZC5mbGFncyA9IE1NQ19SU1BfUjQgfCBNTUNfQ01E X0JDUjsKKwljbWQuZGF0YSA9IE5VTEw7CisKKwlwcmludGYoIltCUkddIG1tY19zZW5kX2lv X29wX2NvbmQgOiBjbWQub3Bjb2RlID0gMHglMDh4IDogY21kLmFyZyA9IDB4JTA4eFxuIiwg Y21kLm9wY29kZSwgY21kLmFyZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7 CisJCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoc2MsICZjbWQsIENNRF9SRVRSSUVTKTsKKwkJ aWYgKGVyciAhPSBNTUNfRVJSX05PTkUpCisJCQlicmVhazsKKwkJaWYgKChjbWQucmVzcFsw XSAmIE1NQ19PQ1JfQ0FSRF9CVVNZKSB8fAorCQkgICAgKG9jciAmIE1NQ19PQ1JfVk9MVEFH RSkgPT0gMCkKKwkJCWJyZWFrOworCQllcnIgPSBNTUNfRVJSX1RJTUVPVVQ7CisJCW1tY19t c19kZWxheSgxMCk7CisJfQorCQorCXByaW50ZigiW0JSR10gbW1jX3NlbmRfaW9fb3BfY29u ZCA6IGNtZC5yZXNwWzBdID0gMHglMDh4IChlcnIgJWQpXG4iLCBjbWQucmVzcFswXSwgZXJy KTsKKwkKKwlpZiAoZXJyID09IE1NQ19FUlJfTk9ORSkgeworCQlpZiAocm9jcikKKwkJCSpy b2NyID0gKGNtZC5yZXNwWzBdICYgMHgwMGZmZmZmZik7CisJCWlmIChyZm5zKQorCQkJKnJm bnMgPSAoY21kLnJlc3BbMF0gPj4gMjgpICYgMHg3OworCQlpZiAocm1lbSkKKwkJCSpybWVt ID0gKGNtZC5yZXNwWzBdID4+IDI3KSAmIDB4MTsKKwl9CisJcmV0dXJuIChlcnIpOworfQor CisvKiBbQlJHXSAtIEFkZGVkIGZvciBTRElPICovCitzdGF0aWMgaW50CittbWNfaW9fcndf ZGlyZWN0KHN0cnVjdCBtbWNfc29mdGMgKnNjLCBpbnQgd3IsIHVpbnQzMl90IGZuLCB1aW50 MzJfdCBhZHIsCisgICAgdWludDhfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQg Y21kOworCWludCBlcnI7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNt ZC5vcGNvZGUgPSBTRF9JT19SV19ESVJFQ1Q7CisJY21kLmFyZyA9IFNEX0lPX1JXX0ZVTkMo Zm4pIHwgU0RfSU9fUldfQURSKGFkcik7CisJaWYgKHdyKQorCQljbWQuYXJnIHw9IFNEX0lP X1JXX1dSIHwgU0RfSU9fUldfUkFXIHwgU0RfSU9fUldfREFUKCpkYXRhKTsKKwljbWQuZmxh Z3MgPSBNTUNfUlNQX1I1IHwgTU1DX0NNRF9BQzsKKwljbWQuZGF0YSA9IE5VTEw7CisKKwlw cmludGYoIltCUkddIG1tY19pb19yd19kaXJlY3QgOiBjbWQub3Bjb2RlID0gMHglMDh4IDog Y21kLmFyZyA9IDB4JTA4eFxuIiwgY21kLm9wY29kZSwgY21kLmFyZyk7CisKKwllcnIgPSBt bWNfd2FpdF9mb3JfY21kKHNjLCAmY21kLCBDTURfUkVUUklFUyk7CisJaWYgKGVycikKKwkJ cmV0dXJuIChlcnIpOworCWlmIChjbWQuZXJyb3IpCisJCXJldHVybiAoY21kLmVycm9yKTsK KworCWlmIChjbWQucmVzcFswXSAmIFI1X0NPTV9DUkNfRVJST1IpCisJCXJldHVybiAoTU1D X0VSUl9CQURDUkMpOworCWlmIChjbWQucmVzcFswXSAmIChSNV9JTExFR0FMX0NPTU1BTkQg fCBSNV9GVU5DVElPTl9OVU1CRVIpKQorCQlyZXR1cm4gKE1NQ19FUlJfSU5WQUxJRCk7CisJ aWYgKGNtZC5yZXNwWzBdICYgUjVfT1VUX09GX1JBTkdFKQorCQlyZXR1cm4gKE1NQ19FUlJf RkFJTEVEKTsKKwkKKwkqZGF0YSA9ICh1aW50OF90KSAoY21kLnJlc3BbMF0gJiAweGZmKTsK KwlyZXR1cm4gKE1NQ19FUlJfTk9ORSk7Cit9CisKKyNlbmRpZiAvKiBNTUNfU0RJT19TVVBQ T1JUICovCisKIHN0YXRpYyB2b2lkCiBtbWNfcG93ZXJfdXAoc3RydWN0IG1tY19zb2Z0YyAq c2MpCiB7CkBAIC01OTcsMTQgKzY4NCw2OCBAQAogCXJldHVybiAoZXJyKTsKIH0KIAorI2lm IGRlZmluZWQoTU1DX1NESU9fU1VQUE9SVCkKIHN0YXRpYyBpbnQKK21tY19zZGlvX3NldF90 aW1pbmcoc3RydWN0IG1tY19zb2Z0YyAqc2MsIGludCB0aW1pbmcpCit7CisJaW50IGVycjsK Kwl1aW50OF90IHJlZzsKKworCWVyciA9IG1tY19pb19yd19kaXJlY3Qoc2MsIDAsIDAsIFNE X0lPX0NDQ1JfSElHSF9TUEVFRCwgJnJlZyk7CisJaWYgKGVycikgeworCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBTRF9JT19DQ0NSX0hJR0hfU1BFRUQgcmVn aXN0ZXJcbiIpOworCQlyZXR1cm4gKGVycik7CisJfQorCisJaWYgKHRpbWluZyA9PSBidXNf dGltaW5nX2hzKSB7CisJCWlmICghKHJlZyAmIENDQ1JfSElHSF9TUEVFRF9TSFMpKQorCQkJ cmV0dXJuIChNTUNfRVJSX0lOVkFMSUQpOworCQlyZWcgfD0gQ0NDUl9ISUdIX1NQRUVEX0VI UzsKKwl9IGVsc2UgeworCQlyZWcgJj0gfkNDQ1JfSElHSF9TUEVFRF9FSFM7CisJfQorCQkK KwllcnIgPSBtbWNfaW9fcndfZGlyZWN0KHNjLCAxLCAwLCBTRF9JT19DQ0NSX0hJR0hfU1BF RUQsICZyZWcpOworCWlmIChlcnIpCisJCXJldHVybiAoZXJyKTsKKwkKKwlpZiAoKHRpbWlu ZyA9PSBidXNfdGltaW5nX2hzKSAmJgorCSAgICAoKHJlZyAmIENDQ1JfSElHSF9TUEVFRF9F SFMpICE9IENDQ1JfSElHSF9TUEVFRF9FSFMpKSB7CisJCXJldHVybiAoTU1DX0VSUl9GQUlM RUQpOworCX0KKworCXJldHVybiAoTU1DX0VSUl9OT05FKTsKK30KKyNlbmRpZiAvKiBNTUNf U0RJT19TVVBQT1JUICovCisKK3N0YXRpYyBpbnQKIG1tY19zZXRfY2FyZF9idXNfd2lkdGgo c3RydWN0IG1tY19zb2Z0YyAqc2MsIHVpbnQxNl90IHJjYSwgaW50IHdpZHRoKQogewogCXN0 cnVjdCBtbWNfY29tbWFuZCBjbWQ7CiAJaW50IGVycjsKIAl1aW50OF90CXZhbHVlOworCWlu dCBtb2RlID0gbW1jYnJfZ2V0X21vZGUoc2MtPmRldik7CiAKLQlpZiAobW1jYnJfZ2V0X21v ZGUoc2MtPmRldikgPT0gbW9kZV9zZCkgeworI2lmIGRlZmluZWQoTU1DX1NESU9fU1VQUE9S VCkKKwlpZiAobW9kZSA9PSBtb2RlX3NkaW8pIHsKKwkJZXJyID0gbW1jX2lvX3J3X2RpcmVj dChzYywgMCwgMCwgU0RfSU9fQ0NDUl9CVVNfV0lEVEgsICZ2YWx1ZSk7CisJCWlmIChlcnIg PT0gMCkgeworCQkJdmFsdWUgJj0gfkNDQ1JfQlVTX1dJRFRIX01BU0s7CisJCQlzd2l0Y2gg KHdpZHRoKSB7CisJCQljYXNlIGJ1c193aWR0aF8xOgorCQkJCXZhbHVlIHw9IENDQ1JfQlVT X1dJRFRIXzE7CisJCQkJYnJlYWs7CisJCQljYXNlIGJ1c193aWR0aF80OgorCQkJCXZhbHVl IHw9IENDQ1JfQlVTX1dJRFRIXzQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJl dHVybiAoTU1DX0VSUl9JTlZBTElEKTsKKwkJCX0KKwkJCWVyciA9IG1tY19pb19yd19kaXJl Y3Qoc2MsIDEsIDAsIFNEX0lPX0NDQ1JfQlVTX1dJRFRILCAmdmFsdWUpOworCQl9CisJfSBl bHNlCisjZW5kaWYgLyogTU1DX1NESU9fU1VQUE9SVCAqLwkKKwlpZiAobW9kZSA9PSBtb2Rl X3NkKSB7CiAJCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7 CiAJCWNtZC5vcGNvZGUgPSBBQ01EX1NFVF9CVVNfV0lEVEg7CiAJCWNtZC5mbGFncyA9IE1N Q19SU1BfUjEgfCBNTUNfQ01EX0FDOwpAQCAtNjU2LDEyICs3OTcsMjQgQEAKIAlkZWZhdWx0 OgogCQlyZXR1cm4gKE1NQ19FUlJfSU5WQUxJRCk7CiAJfQotCWlmIChtbWNicl9nZXRfbW9k ZShzYy0+ZGV2KSA9PSBtb2RlX3NkKQorCQorCXN3aXRjaCAobW1jYnJfZ2V0X21vZGUoc2Mt PmRldikpIHsKKyNpZiBkZWZpbmVkKE1NQ19TRElPX1NVUFBPUlQpCisJY2FzZSBtb2RlX3Nk aW86CisJCWVyciA9IG1tY19zZGlvX3NldF90aW1pbmcoc2MsIHRpbWluZyk7CisJCWJyZWFr OworI2VuZGlmCisJY2FzZSBtb2RlX3NkOgogCQllcnIgPSBtbWNfc2Rfc3dpdGNoKHNjLCBT RF9TV0lUQ0hfTU9ERV9TRVQsIFNEX1NXSVRDSF9HUk9VUDEsCiAJCSAgICB2YWx1ZSwgc3dp dGNoX3Jlcyk7Ci0JZWxzZQorCQlicmVhazsKKwljYXNlIG1vZGVfbW1jOgorCWRlZmF1bHQ6 CiAJCWVyciA9IG1tY19zd2l0Y2goc2MsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCiAJCSAg ICBFWFRfQ1NEX0hTX1RJTUlORywgdmFsdWUpOworCQlicmVhazsKKwl9CisJCiAJcmV0dXJu IChlcnIpOwogfQogCkBAIC0xMDgyLDcgKzEyMzUsNyBAQAogCSAgICBpdmFyLT5yY2EsIG5l d2NhcmQgPyAiIGFkZGVkIiA6ICIiKTsKIAlkZXZpY2VfcHJpbnRmKGRldiwgIiBjYXJkOiAl cyVzICgweCV4LzB4JXgvXCIlc1wiIHJldiAlZC4lZCAiCiAJICAgICJtL2QgJTAyZC4lMDRk IHMvbiAlMDh4KVxuIiwKLQkgICAgaXZhci0+bW9kZSA9PSBtb2RlX3NkID8gIlNEIiA6ICJN TUMiLAorCSAgICBpdmFyLT5tb2RlID09IG1vZGVfc2RpbyA/ICJTRElPIiA6IGl2YXItPm1v ZGUgPT0gbW9kZV9zZCA/ICJTRCIgOiAiTU1DIiwKIAkgICAgaXZhci0+aGlnaF9jYXAgPyAi IEhpZ2ggQ2FwYWNpdHkiIDogIiIsIAogCSAgICBpdmFyLT5jaWQubWlkLCBpdmFyLT5jaWQu b2lkLAogCSAgICBpdmFyLT5jaWQucG5tLCBpdmFyLT5jaWQucHJ2ID4+IDQsIGl2YXItPmNp ZC5wcnYgJiAweDBmLApAQCAtMTA5OCw3ICsxMjUxLDEzNiBAQAogCSAgICBpdmFyLT5yZWFk X29ubHkgPyAiLCByZWFkLW9ubHkiIDogIiIpOwogfQogCisjaWYgZGVmaW5lZChNTUNfU0RJ T19TVVBQT1JUKQorLyoqCisgKgltbWNfaW9fZGlzY292ZXJfY2FyZHMgLSBmb3VuZCBhbiBT RElPIGNhcmQgb24gdGhlIGJ1cyBzbyBkbyBkaXNjb3ZlcgorICoJQHNjOiBkZXZpY2Ugc29m dCBjb250ZXh0CisgKgkKKyAqCVdoYXQgaGFzIGJlZW4gZG9uZToKKyAqCS0gQ01ENSAoSU9f U0VORF9PUF9DT05EKSBoYXMgYmVlbiBzZW50IGFuZCBhIHZhbGlkIHJlc3BvbnNlIHJlY2Vp dmVkCisgKgktIHZvbHRhZ2Ugb24gdGhlIGJ1cyBoYXMgYmVlbiBzZXQgdG8gbWF0Y2ggdGhl IHJldHVybmVkIE9DIHZhbHVlcworICoJCisgKglXaGF0IGhhc24ndCBiZWVuIGRvbmUKKyAq CS0gCisgKi8KIHN0YXRpYyB2b2lkCittbWNfaW9fZGlzY292ZXJfY2FyZHMoc3RydWN0IG1t Y19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsKKwl1aW50MzJfdCByZXNwOworCXVpbnQzMl90 IGZuczsKKwl1aW50MzJfdCBtZW07CisJdWludDE2X3QgcmNhOworCXVpbnQ4X3QgcmVnOwor CXN0cnVjdCBtbWNfaXZhcnMgKml2YXIgPSBOVUxMOworCWludCBpLCBkZXZjb3VudCwgbmV3 Y2FyZCA9IDE7CisJZGV2aWNlX3QgKmRldmxpc3Q7CisJZGV2aWNlX3QgY2hpbGQ7CisJCisJ aWYgKGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2 LCAiUHJvYmluZyBTRElPIGNhcmRzXG4iKTsKKworCisJLyogSXNzdWUgKGFub3RoZXIpIENN RDUgdG8gZ2V0IHRoZSBudW1iZXIgb2YgZnVuY3Rpb25zICovCisJZXJyID0gbW1jX3NlbmRf aW9fb3BfY29uZChzYywgTU1DX09DUl9DQ1MsIE5VTEwsICZmbnMsICZtZW0pOworCWlmIChl cnIpIHsKKwkJcHJpbnRmKCJtbWNfc2VuZF9pb19vcF9jb25kIGZhaWxlZFxuIik7CisJCXJl dHVybjsKKwl9CisJCisJLyogV2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgU0RJTyBjYXJk cyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIEkvTyAqLworCWlmIChtZW0pIHsKKwkJZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LCAiU0RJTyBkcml2ZXIgZG9lc24ndCBjdXJyZW50bHkgc3Vw cG9ydCBtaXhlZCBtZW1vcnkgYW5kIEkvTyBjYXJkc1xuIik7CisJCXJldHVybjsKKwl9CQor CisKKwkvKiBTZW5kIGEgQ01EMyB3aGljaCBtb3ZlcyB0aGUgY2FyZCBzdGF0ZSBtYWNoaW5l IGZyb20gJ2luaXQnIHRvICdzdGFuZGJ5JyAqLworCWVyciA9IG1tY19zZW5kX3JlbGF0aXZl X2FkZHIoc2MsICZyZXNwKTsKKwlyY2EgPSByZXNwID4+IDE2OworCQorCS8qIFZlcmlmeSB0 aGF0IHRoZSBSQ0EgaGFzIGJlZW4gc2V0IGJ5IHNlbGVjdGluZyB0aGUgY2FyZC4gKi8KKwll cnIgPSBtbWNfc2VsZWN0X2NhcmQoc2MsIHJjYSk7CisJaWYgKGVycikgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5kZXYsICJjb3VsZG4ndCBzZWxlY3QgSS9PIFJDQSAlZFxuIiwgcmNhKTsK KwkJcmV0dXJuOworCX0KKwkKKwkKKwkvKgorCSAqIE5vdyB0aGluZ3MgZ2V0IGEgYml0IGhh Y2t5IC4uLiB0aGUgb3JpZ2luYWwgZHJpdmVyIHVzZXMgaXZhcnMgc3RvcmVkIGluCisJICog dGhlIGNoaWxkIGRldmljZSAobW1jc2QgbWVtb3J5IGNhcmQpIHRvIGNhbGN1bGF0ZSB0aGlu Z3MgbGlrZSB0aGUgYnVzCisJICogd2lkdGgsIHRpbWluZyByZXF1aXJlbWVudHMsIGV0Yy4g IEl0J3MgYWxsIGJhc2VkIG9uIHRoZSB1bmlxdWUgY2FyZCBpZCwKKwkgKiBob3dldmVyIHRo aXMgaXMgbm90IHJlbGV2YW50IHRvIFNESU8gY2FyZHMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUK KwkgKiBzYW1lIGJ1cyBzY2FuIHByb2NlZHVyZSBhbmQgZG9uJ3Qgc3VwcG9ydCB0aGUgY2Fy ZCBpZCBjbWQgKENJRCkuCisJICoKKwkgKiBSZWdhcmRsZXNzIChmb3IgdGhlIG1vbWVudCkg SSd2ZSB0cmllZCB0byBwcm92aWRlIHRoZSBzYW1lIGl2YXJzIGZvcgorCSAqIFNESU8gY2Fy ZHMgdGhhdCB3b3VsZCBiZSBmb3IgU0QvTU1DIG1lbW9yeSBjYXJkcy4KKwkgKi8KKwlpZiAo KGVyciA9IGRldmljZV9nZXRfY2hpbGRyZW4oc2MtPmRldiwgJmRldmxpc3QsICZkZXZjb3Vu dCkpICE9IDApCisJCXJldHVybjsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgZGV2Y291bnQ7IGkr KykgeworCQlpdmFyID0gZGV2aWNlX2dldF9pdmFycyhkZXZsaXN0W2ldKTsKKwkJaWYgKGl2 YXItPm1vZGUgPT0gbW9kZV9zZGlvKSB7CisJCQluZXdjYXJkID0gMDsKKwkJCWJyZWFrOwor CQl9CisJfQorCWZyZWUoZGV2bGlzdCwgTV9URU1QKTsKKwkKKwlpZiAoYm9vdHZlcmJvc2Ug fHwgbW1jX2RlYnVnKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVzU0RJTyBjYXJk IGRldGVjdGVkXG4iLCBuZXdjYXJkID8gIk5ldyAiIDogIiIpOworCX0KKworCWlmIChuZXdj YXJkKSB7CisJCWl2YXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNfaXZhcnMpLCBNX0RF VkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOworCQlpZiAoIWl2YXIpCisJCQlyZXR1cm47CisJ fQorCQorCWl2YXItPnJjYSA9IHJjYTsKKwlpdmFyLT5yZWFkX29ubHkgPSAwOworCWl2YXIt PnRpbWluZyA9IGJ1c190aW1pbmdfbm9ybWFsOworCWl2YXItPm1vZGUgPSBtbWNicl9nZXRf bW9kZShzYy0+ZGV2KTsKKwlpdmFyLT5pb19mdW5jdGlvbnMgPSBmbnM7CisKKwkvKiBGaW5k IG1heCBzdXBwb3J0ZWQgYnVzIHdpZHRoLiAqLworCW1tY19pb19yd19kaXJlY3Qoc2MsIDAs IDAsIFNEX0lPX0NDQ1JfQ0FQQUJJTElUWSwgJnJlZyk7CisJaWYgKChtbWNicl9nZXRfY2Fw cyhzYy0+ZGV2KSAmIE1NQ19DQVBfNF9CSVRfREFUQSkgJiYKKwkgICAgKCEocmVnICYgQ0ND Ul9DQVBTX0xTQykgfHwgKHJlZyAmIENDQ1JfQ0FQU180QkxTKSkpIHsKKwkJaXZhci0+YnVz X3dpZHRoID0gYnVzX3dpZHRoXzQ7CisJfQorCisJLyogRm9yIFNESU8gc2V0IHRoZSBtYXhp bXVtIHNwZWVkcyBpbiBlaXRoZXIgbG93IG9yIGZ1bGwgc3BlZWQgbW9kZXMgKi8KKwlpdmFy LT50cmFuX3NwZWVkID0gMjUgKiAxMDAwICogMTAwMDsKKwlpdmFyLT5oc190cmFuX3NwZWVk ID0gNTAgKiAxMDAwICogMTAwMDsKKwlpdmFyLT5sc190cmFuX3NwZWVkID0gNDAwICogMTAw MDsKKwlpZiAocmVnICYgQ0NDUl9DQVBTX0xTQykKKwkJaXZhci0+dGltaW5nID0gYnVzX3Rp bWluZ19sczsKKwllbHNlIHsKKwkJbW1jX2lvX3J3X2RpcmVjdChzYywgMCwgMCwgU0RfSU9f Q0NDUl9ISUdIX1NQRUVELCAmcmVnKTsKKwkJaWYgKHJlZyAmIENDQ1JfSElHSF9TUEVFRF9T SFMpCisJCQlpdmFyLT50aW1pbmcgPSBidXNfdGltaW5nX2hzOworCQllbHNlCisJCQlpdmFy LT50aW1pbmcgPSBidXNfdGltaW5nX25vcm1hbDsKKwl9CisJCQorCisJaWYgKGJvb3R2ZXJi b3NlIHx8IG1tY19kZWJ1ZykKKwkJbW1jX2xvZ19jYXJkKHNjLT5kZXYsIGl2YXIsIG5ld2Nh cmQpOworCisKKwkvKiBBZGQgZGV2aWNlLiAqLworCWNoaWxkID0gZGV2aWNlX2FkZF9jaGls ZChzYy0+ZGV2LCAic2RpbyIsIC0xKTsKKwlkZXZpY2Vfc2V0X2l2YXJzKGNoaWxkLCBpdmFy KTsKKworCXJldHVybjsKKwkKK30KKyNlbmRpZiAvKiBNTUNfU0RJT19TVVBQT1JUICovCisK K3N0YXRpYyB2b2lkCiBtbWNfZGlzY292ZXJfY2FyZHMoc3RydWN0IG1tY19zb2Z0YyAqc2Mp CiB7CiAJc3RydWN0IG1tY19pdmFycyAqaXZhciA9IE5VTEw7CkBAIC0xMTkyLDcgKzE0NzQs NyBAQAogCQkJCW1tY19sb2dfY2FyZChzYy0+ZGV2LCBpdmFyLCBuZXdjYXJkKTsKIAkJCWlm IChuZXdjYXJkKSB7CiAJCQkJLyogQWRkIGRldmljZS4gKi8KLQkJCQljaGlsZCA9IGRldmlj ZV9hZGRfY2hpbGQoc2MtPmRldiwgTlVMTCwgLTEpOworCQkJCWNoaWxkID0gZGV2aWNlX2Fk ZF9jaGlsZChzYy0+ZGV2LCAibW1jc2QiLCAtMSk7CiAJCQkJZGV2aWNlX3NldF9pdmFycyhj aGlsZCwgaXZhcik7CiAJCQl9CiAJCQlyZXR1cm47CkBAIC0xMjQ5LDcgKzE1MzEsNyBAQAog CQkJbW1jX2xvZ19jYXJkKHNjLT5kZXYsIGl2YXIsIG5ld2NhcmQpOwogCQlpZiAobmV3Y2Fy ZCkgewogCQkJLyogQWRkIGRldmljZS4gKi8KLQkJCWNoaWxkID0gZGV2aWNlX2FkZF9jaGls ZChzYy0+ZGV2LCBOVUxMLCAtMSk7CisJCQljaGlsZCA9IGRldmljZV9hZGRfY2hpbGQoc2Mt PmRldiwgIm1tY3NkIiwgLTEpOwogCQkJZGV2aWNlX3NldF9pdmFycyhjaGlsZCwgaXZhcik7 CiAJCX0KIAl9CkBAIC0xMzA4LDM2ICsxNTkwLDU1IEBACiAKIAlkZXYgPSBzYy0+ZGV2Owog CWlmIChtbWNicl9nZXRfcG93ZXJfbW9kZShkZXYpICE9IHBvd2VyX29uKSB7CisKKyNpZiBk ZWZpbmVkKE1NQ19TRElPX1NVUFBPUlQpCisvL21tY19kZWJ1ZyA9IDEwOworCiAJCS8qCi0J CSAqIEZpcnN0LCB0cnkgU0QgbW9kZXMKKwkJICogRmlyc3QsIHRyeSBTRElPIG1vZGUKIAkJ ICovCi0JCW1tY2JyX3NldF9tb2RlKGRldiwgbW9kZV9zZCk7CisJCW1tY2JyX3NldF9tb2Rl KGRldiwgbW9kZV9zZGlvKTsKIAkJbW1jX3Bvd2VyX3VwKHNjKTsKIAkJbW1jYnJfc2V0X2J1 c19tb2RlKGRldiwgcHVzaHB1bGwpOwogCQlpZiAoYm9vdHZlcmJvc2UgfHwgbW1jX2RlYnVn KQogCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiUHJvYmluZyBidXNcbiIpOwogCQltbWNf aWRsZV9jYXJkcyhzYyk7Ci0JCWVyciA9IG1tY19zZW5kX2lmX2NvbmQoc2MsIDEpOwotCQlp ZiAoKGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykgJiYgZXJyID09IDApCi0JCQlkZXZpY2Vf cHJpbnRmKHNjLT5kZXYsICJTRCAyLjAgaW50ZXJmYWNlIGNvbmRpdGlvbnM6IE9LXG4iKTsK LQkJaWYgKG1tY19zZW5kX2FwcF9vcF9jb25kKHNjLCBlcnIgPyAwIDogTU1DX09DUl9DQ1Ms ICZvY3IpICE9Ci0JCSAgICBNTUNfRVJSX05PTkUpIHsKLQkJCWlmIChib290dmVyYm9zZSB8 fCBtbWNfZGVidWcpCi0JCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiU0QgcHJvYmU6IGZh aWxlZFxuIik7CisJCQorCQllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKHNjLCAwLCAmb2Ny LCBOVUxMLCBOVUxMKTsKKwkJaWYgKGVyciA9PSBNTUNfRVJSX05PTkUpIHsKKwkJCWlmIChi b290dmVyYm9zZSB8fCBtbWNfZGVidWcpIHsKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYs ICJTRElPIDIuMCBpbnRlcmZhY2UgY29uZGl0aW9uczogT0tcbiIpOworCQkJCWRldmljZV9w cmludGYoc2MtPmRldiwgIlNESU8gcHJvYmU6IE9LIChPQ1I6IDB4JTA4eClcbiIsIG9jcik7 CisJCQl9CisJCX0gZWxzZSAKKyNlbmRpZiAvKiBNTUNfU0RJT19TVVBQT1JUICovCisJCXsK IAkJCS8qCi0JCQkgKiBGYWlsZWQsIHRyeSBNTUMKKwkJCSAqIE5leHQsIHRyeSBTRCBtb2Rl cwogCQkJICovCi0JCQltbWNicl9zZXRfbW9kZShkZXYsIG1vZGVfbW1jKTsKLQkJCWlmICht bWNfc2VuZF9vcF9jb25kKHNjLCAwLCAmb2NyKSAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCW1t Y2JyX3NldF9tb2RlKGRldiwgbW9kZV9zZCk7CisJCQllcnIgPSBtbWNfc2VuZF9pZl9jb25k KHNjLCAxKTsKKwkJCWlmICgoYm9vdHZlcmJvc2UgfHwgbW1jX2RlYnVnKSAmJiBlcnIgPT0g MCkKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJTRCAyLjAgaW50ZXJmYWNlIGNvbmRp dGlvbnM6IE9LXG4iKTsKKwkJCWlmIChtbWNfc2VuZF9hcHBfb3BfY29uZChzYywgZXJyID8g MCA6IE1NQ19PQ1JfQ0NTLCAmb2NyKSAhPQorCQkJCU1NQ19FUlJfTk9ORSkgewogCQkJCWlm IChib290dmVyYm9zZSB8fCBtbWNfZGVidWcpCi0JCQkJCWRldmljZV9wcmludGYoc2MtPmRl diwgIk1NQyBwcm9iZTogZmFpbGVkXG4iKTsKLQkJCQlvY3IgPSAwOyAvKiBGYWlsZWQgYm90 aCwgcG93ZXJkb3duLiAqLworCQkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJTRCBwcm9i ZTogZmFpbGVkXG4iKTsKKwkJCQkvKgorCQkJCSAqIEZhaWxlZCwgdHJ5IE1NQworCQkJCSAq LworCQkJCW1tY2JyX3NldF9tb2RlKGRldiwgbW9kZV9tbWMpOworCQkJCWlmIChtbWNfc2Vu ZF9vcF9jb25kKHNjLCAwLCAmb2NyKSAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCQkJaWYgKGJv b3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykKKwkJCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwg Ik1NQyBwcm9iZTogZmFpbGVkXG4iKTsKKwkJCQkJb2NyID0gMDsgLyogRmFpbGVkIGJvdGgs IHBvd2VyZG93bi4gKi8KKwkJCQl9IGVsc2UgaWYgKGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1 ZykKKwkJCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCQkJIk1NQyBwcm9iZTogT0sg KE9DUjogMHglMDh4KVxuIiwgb2NyKTsKIAkJCX0gZWxzZSBpZiAoYm9vdHZlcmJvc2UgfHwg bW1jX2RlYnVnKQotCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwKLQkJCQkgICAgIk1NQyBw cm9iZTogT0sgKE9DUjogMHglMDh4KVxuIiwgb2NyKTsKLQkJfSBlbHNlIGlmIChib290dmVy Ym9zZSB8fCBtbWNfZGVidWcpCi0JCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJTRCBwcm9i ZTogT0sgKE9DUjogMHglMDh4KVxuIiwgb2NyKTsKLQorCQkJCWRldmljZV9wcmludGYoc2Mt PmRldiwgIlNEIHByb2JlOiBPSyAoT0NSOiAweCUwOHgpXG4iLCBvY3IpOworCQl9CisJCQog CQltbWNicl9zZXRfb2NyKGRldiwgbW1jX3NlbGVjdF92ZGQoc2MsIG9jcikpOwogCQlpZiAo bW1jYnJfZ2V0X29jcihkZXYpICE9IDApCiAJCQltbWNfaWRsZV9jYXJkcyhzYyk7CkBAIC0x MzU4LDcgKzE2NTksMTYgQEAKIAkJbW1jX3Bvd2VyX2Rvd24oc2MpOwogCQlyZXR1cm47CiAJ fQorI2lmIGRlZmluZWQoTU1DX1NESU9fU1VQUE9SVCkKIAkvKgorCSAqIElmIFNESU8gY2Fy ZCBpbiB0aGUgc2xvdCBwZXJmb3JtIFNESU8gaW5pdCBvbmx5CisJICovCisJaWYgKG1tY2Jy X2dldF9tb2RlKGRldikgPT0gbW9kZV9zZGlvKSB7CisJCW1tY19pb19kaXNjb3Zlcl9jYXJk cyhzYyk7CisJCQkKKwl9IGVsc2UgeworI2VuZGlmCisJLyoKIAkgKiBSZXNlbGVjdCB0aGUg Y2FyZHMgYWZ0ZXIgd2UndmUgaWRsZWQgdGhlbSBhYm92ZS4KIAkgKi8KIAlpZiAobW1jYnJf Z2V0X21vZGUoZGV2KSA9PSBtb2RlX3NkKSB7CkBAIC0xMzY5LDE4ICsxNjc5LDQ2IEBACiAJ CW1tY19zZW5kX29wX2NvbmQoc2MsIG1tY2JyX2dldF9vY3IoZGV2KSwgTlVMTCk7CiAJbW1j X2Rpc2NvdmVyX2NhcmRzKHNjKTsKIAltbWNfcmVzY2FuX2NhcmRzKHNjKTsKLQorI2lmIGRl ZmluZWQoTU1DX1NESU9fU1VQUE9SVCkKKwl9CisjZW5kaWYKKwkKIAltbWNicl9zZXRfYnVz X21vZGUoZGV2LCBwdXNocHVsbCk7CiAJbW1jYnJfdXBkYXRlX2lvcyhkZXYpOwogCW1tY19j YWxjdWxhdGVfY2xvY2soc2MpOworI2lmICFkZWZpbmVkKE1NQ19TRElPX1NVUFBPUlQpCiAJ YnVzX2dlbmVyaWNfYXR0YWNoKGRldik7CisjZWxzZQorCS8qIFRoZSBTRElPIGRyaXZlciBh dHRlbXB0cyB0byBzY2FuIHRoZSBmdW5jdGlvbnMgb24gdGhlIGNhcmQgaW4KKwkgKiBkZXZp Y2VfYXR0YWNoLCB0aGVyZWZvcmUgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUg Y2FyZAorCSAqIGFuZCBpdCBzaG91bGQgYmUgc2VsZWN0ZWQuCisJICoKKwkgKiBTbyByZXBs YWNlIHRoZSBnZW5lcmljIGJ1c19hdHRhY2ggd2l0aCBhIGxvb3AgdGhhdCBzZWxlY3RzIHRo ZQorCSAqIGNhcmQgYmVmb3JlIGNhbGxpbmcgdGhlIHByb2JpbmcgYW5kIGF0dGFjaGluZyB0 aGUgY2hpbGQgZHJpdmVycy4KKwkgKi8KKwl7CisJCWludCBua2lkLCBpOworCQlkZXZpY2Vf dCAqa2lkczsKKwkJc3RydWN0IG1tY19pdmFycyAqaXZhcjsKKworCQlpZiAoKGVyciA9IGRl dmljZV9nZXRfY2hpbGRyZW4oc2MtPmRldiwgJmtpZHMsICZua2lkKSkgIT0gMCkKKwkJCXJl dHVybjsKKwkJZm9yIChpID0gMDsgaSA8IG5raWQ7IGkrKykgeworCQkJaXZhciA9IGRldmlj ZV9nZXRfaXZhcnMoa2lkc1tpXSk7CisJCQltbWNfc2VsZWN0X2NhcmQoc2MsIGl2YXItPnJj YSk7CisJCQlkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChraWRzW2ldKTsKKwkJfQorCQltbWNf c2VsZWN0X2NhcmQoc2MsIDApOworCX0KKyNlbmRpZgorCiAvKgltbWNfdXBkYXRlX2NoaWxk cmVuX3N5c2N0bChkZXYpOyovCiB9CiAKIHN0YXRpYyBpbnQKIG1tY19jYWxjdWxhdGVfY2xv Y2soc3RydWN0IG1tY19zb2Z0YyAqc2MpCiB7Ci0JaW50IG1heF9kdHIsIG1heF9oc19kdHIs IG1heF90aW1pbmc7CisJaW50IG1heF9sc19kdHIsIG1heF9kdHIsIG1heF9oc19kdHIsIG1h eF90aW1pbmc7CiAJaW50IG5raWQsIGksIGZfbWluLCBmX21heDsKIAlkZXZpY2VfdCAqa2lk czsKIAlzdHJ1Y3QgbW1jX2l2YXJzICppdmFyOwpAQCAtMTM5OCw2ICsxNzM2LDggQEAKIAkJ aXZhciA9IGRldmljZV9nZXRfaXZhcnMoa2lkc1tpXSk7CiAJCWlmIChpdmFyLT50aW1pbmcg PCBtYXhfdGltaW5nKQogCQkJbWF4X3RpbWluZyA9IGl2YXItPnRpbWluZzsKKwkJaWYgKGl2 YXItPmxzX3RyYW5fc3BlZWQgPCBtYXhfbHNfZHRyKQorCQkJbWF4X2xzX2R0ciA9IGl2YXIt PmxzX3RyYW5fc3BlZWQ7CiAJCWlmIChpdmFyLT50cmFuX3NwZWVkIDwgbWF4X2R0cikKIAkJ CW1heF9kdHIgPSBpdmFyLT50cmFuX3NwZWVkOwogCQlpZiAoaXZhci0+aHNfdHJhbl9zcGVl ZCA8IG1heF9oc19kdHIpCkBAIC0xNDA1LDcgKzE3NDUsNyBAQAogCX0KIAlmb3IgKGkgPSAw OyBpIDwgbmtpZDsgaSsrKSB7CiAJCWl2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKGtpZHNbaV0p OwotCQlpZiAoaXZhci0+dGltaW5nID09IGJ1c190aW1pbmdfbm9ybWFsKQorCQlpZiAoaXZh ci0+dGltaW5nID09IG1heF90aW1pbmcpCiAJCQljb250aW51ZTsKIAkJbW1jX3NlbGVjdF9j YXJkKHNjLCBpdmFyLT5yY2EpOwogCQltbWNfc2V0X3RpbWluZyhzYywgbWF4X3RpbWluZyk7 CkBAIC0xNDE0LDYgKzE3NTQsOCBAQAogCWZyZWUoa2lkcywgTV9URU1QKTsKIAlpZiAobWF4 X3RpbWluZyA9PSBidXNfdGltaW5nX2hzKQogCQltYXhfZHRyID0gbWF4X2hzX2R0cjsKKwll bHNlIGlmIChtYXhfdGltaW5nID09IGJ1c190aW1pbmdfbHMpCisJCW1heF9kdHIgPSBtYXhf bHNfZHRyOwogCWlmIChib290dmVyYm9zZSB8fCBtbWNfZGVidWcpIHsKIAkJZGV2aWNlX3By aW50ZihzYy0+ZGV2LAogCQkgICAgInNldHRpbmcgdHJhbnNmZXIgcmF0ZSB0byAlZC4lMDNk TUh6JXNcbiIsCkBAIC0xNDc3LDYgKzE4MTksOSBAQAogCWNhc2UgTU1DX0lWQVJfTUFYX0RB VEE6CiAJCSpyZXN1bHQgPSBtbWNicl9nZXRfbWF4X2RhdGEoYnVzKTsKIAkJYnJlYWs7CisJ Y2FzZSBNTUNfSVZBUl9JT19GVU5DVElPTlM6CisJCSpyZXN1bHQgPSBpdmFyLT5pb19mdW5j dGlvbnM7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gKDApOwogfQotLS0gL2Rldi9udWxsCTIw MTItMDYtMDEgMTY6NTg6MzQuMDAwMDAwMDAwICswMTAwCisrKyBzZGlvLmMJMjAxMi0wNi0w MSAxNzoyODowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5MTAgQEAKKy8qLQorICog Q29weXJpZ2h0IChjKSAyMDExIEJlbiBHcmF5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP UgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0 d2FyZSBtYXkgaGF2ZSBiZWVuIGRldmVsb3BlZCB3aXRoIHJlZmVyZW5jZSB0bworICogdGhl IFNESU8gU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uLiAgVGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIG1heSBhcHBseToKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkg dG8gdGhlIHJlbGVhc2Ugb2YgdGhlIFNEIHNpbXBsaWZpZWQKKyAqIHNwZWNpZmljYXRpb24g KCJTaW1wbGlmaWVkIFNwZWNpZmljYXRpb24iKSBieSB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlv bi4KKyAqIFRoZSBTaW1wbGlmaWVkIFNwZWNpZmljYXRpb24gaXMgYSBzdWJzZXQgb2YgdGhl IGNvbXBsZXRlIFNEIFNwZWNpZmljYXRpb24KKyAqIHdoaWNoIGlzIG93bmVkIGJ5IHRoZSBT RCBDYXJkIEFzc29jaWF0aW9uLgorICoKKyAqIERpc2NsYWltZXJzOgorICoKKyAqIFRoZSBp bmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBp cyBwcmVzZW50ZWQKKyAqIG9ubHkgYXMgYSBzdGFuZGFyZCBzcGVjaWZpY2F0aW9uIGZvciBT RCBDYXJkcyBhbmQgU0QgSG9zdC9BbmNpbGxhcnkgcHJvZHVjdHMKKyAqIGFuZCBpcyBwcm92 aWRlZCAiQVMtSVMiIHdpdGhvdXQgYW55IHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVz IG9mIGFueQorICoga2luZC4gTm8gcmVzcG9uc2liaWxpdHkgaXMgYXNzdW1lZCBieSB0aGUg U0QgQ2FyZCBBc3NvY2lhdGlvbiBmb3IgYW55CisgKiBkYW1hZ2VzLCBhbnkgaW5mcmluZ2Vt ZW50cyBvZiBwYXRlbnRzIG9yIG90aGVyIHJpZ2h0IG9mIHRoZSBTRCBDYXJkCisgKiBBc3Nv Y2lhdGlvbiBvciBhbnkgdGhpcmQgcGFydGllcywgd2hpY2ggbWF5IHJlc3VsdCBmcm9tIGl0 cyB1c2UuIE5vCisgKiBsaWNlbnNlIGlzIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9w cGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50CisgKiBvciBvdGhlciByaWdodHMg b2YgdGhlIFNEIENhcmQgQXNzb2NpYXRpb24gb3IgYW55IHRoaXJkIHBhcnR5LiBOb3RoaW5n CisgKiBoZXJlaW4gc2hhbGwgYmUgY29uc3RydWVkIGFzIGFuIG9ibGlnYXRpb24gYnkgdGhl IFNEIENhcmQgQXNzb2NpYXRpb24gdG8KKyAqIGRpc2Nsb3NlIG9yIGRpc3RyaWJ1dGUgYW55 IHRlY2huaWNhbCBpbmZvcm1hdGlvbiwga25vdy1ob3cgb3Igb3RoZXIKKyAqIGNvbmZpZGVu dGlhbCBpbmZvcm1hdGlvbiB0byBhbnkgdGhpcmQgcGFydHkuCisgKi8KKworI2luY2x1ZGUg PHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lz L3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2Jpby5o PgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1 ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RocmVhZC5oPgorI2luY2x1ZGUg PHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9t b2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9tbWMv bW1jdmFyLmg+CisjaW5jbHVkZSA8ZGV2L21tYy9tbWNyZWcuaD4KKyNpbmNsdWRlIDxkZXYv bW1jL21tY2lvcmVnLmg+CisjaW5jbHVkZSA8ZGV2L21tYy9zZGlvLmg+CisjaW5jbHVkZSA8 ZGV2L21tYy9zZGlvdmFyLmg+CisKKyNpbmNsdWRlICJtbWNidXNfaWYuaCIKKyNpbmNsdWRl ICJzZGlvX2lmLmgiCisKKworI2RlZmluZSBTRElPX0ZMQUdfU1VQUE9SVF9NVUxUSV9CTE9D SyAgICgweDFVTCA8PCAwKQorCisKKworc3RydWN0IHNkaW9fc29mdGMgeworCWRldmljZV90 IGRldjsKKwlzdHJ1Y3QgbXR4IHNjX210eDsKKwlpbnQgbnVtX2Z1bmNzOworCisJdW5zaWdu ZWQgaW50IGZsYWdzOworCXVpbnQ4X3QgY2Njcl9yZXY7CisJdWludDhfdCBzZGlvX3JldjsK KworCXVpbnQxNl90IHZlbmRvcl9pZDsKKwl1aW50MTZfdCBwcm9kdWN0X2lkOworfTsKKwor LyogYnVzIGVudHJ5IHBvaW50cyAqLworc3RhdGljIGludCBzZGlvX3Byb2JlKGRldmljZV90 IGRldik7CitzdGF0aWMgaW50IHNkaW9fYXR0YWNoKGRldmljZV90IGRldik7CitzdGF0aWMg aW50IHNkaW9fZGV0YWNoKGRldmljZV90IGRldik7CisKKy8qCisgKiBQZXItZnVuY3Rpb24g ZGF0YQorICovCitzdHJ1Y3Qgc2Rpb19pdmFycyB7CisJdV9pbnQgZm47CQkJLyogRnVuY3Rp b24gbnVtYmVyICovCisJdV9zaG9ydCBibGtfc3o7Cit9OworCisKKyNkZWZpbmUgU0RJT19M T0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4KQorI2RlZmluZQlTRElPX1VOTE9D Syhfc2MpCW10eF91bmxvY2soJihfc2MpLT5zY19tdHgpCisjZGVmaW5lIFNESU9fTE9DS19J TklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eCwgZGV2aWNlX2dldF9uYW1ldW5p dChfc2MtPmRldiksIFwKKwkgICAgInNkaW8iLCBNVFhfREVGKQorI2RlZmluZSBTRElPX0xP Q0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5lIFNE SU9fQVNTRVJUX0xPQ0tFRChfc2MpIG10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05F RCk7CisjZGVmaW5lIFNESU9fQVNTRVJUX1VOTE9DS0VEKF9zYykgbXR4X2Fzc2VydCgmX3Nj LT5zY19tdHgsIE1BX05PVE9XTkVEKTsKKworCisvKioKKyAqCXNkaW9fcndfZGlyZWN0IC0g cmVhZHMgb3Igd3JpdGVzIGEgc2luZ2xlIGJ5dGUKKyAqCUBzYzogaTJjIGRyaXZlciBjb250 ZXh0CisgKglAZmxhZ3M6IHRoZSBldmVudChzKSB0byB3YWl0IG9uLCB0aGlzIGlzIGEgYml0 bWFzayBvZiB0aGUgSTJDX1NUQVRfPz8/IGZsYWdzCisgKglAc3RhdHA6IGlmIG5vdCBudWxs IHdpbGwgY29udGFpbiB0aGUgc3RhdHVzIGZsYWdzIHVwb24gcmV0dXJuCisgKglAdGltbzog dGhlIG51bWJlciBvZiB0aWNrcyB0byB3YWl0CisgKgorICoJCisgKgorICoJTE9DS0lORzoK KyAqCVRoZSBkcml2ZXIgY29udGV4dCBtdXN0IGJlIGxvY2tlZCBiZWZvcmUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLiBJbnRlcm5hbGx5CisgKgl0aGUgZnVuY3Rpb24gc2xlZXBzLCByZWxl YXNpbmcgdGhlIGxvY2sgYXMgaXQgZG9lcyBzbywgaG93ZXZlciB0aGUgbG9jayBpcworICoJ YWx3YXlzIHJldGFrZW4gYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqCisgKglS RVRVUk5TOgorICoJMCBpZiB0aGUgZXZlbnQocykgd2VyZSB0cmlwcGVkIHdpdGhpbiB0aW1l b3V0IHBlcmlvZAorICoJLUVCVVNZIGlmIHRpbWVkb3V0IHdhaXRpbmcgZm9yIHRoZSBldmVu dHMKKyAqCS1FTlhJTyBpZiBhIE5BQ0sgZXZlbnQgd2FzIHJlY2VpdmVkCisgKi8KK2ludAor c2Rpb19yd19kaXJlY3Qoc3RydWN0IHNkaW9fc29mdGMgKnNjLCBpbnQgd3IsIHVpbnQzMl90 IGZuLCB1aW50MzJfdCBhZHIsCisgICAgdWludDhfdCAqZGF0YSkKK3sKKwlkZXZpY2VfdCBk ZXYgPSBzYy0+ZGV2OworCXN0cnVjdCBtbWNfcmVxdWVzdCByZXE7CisJc3RydWN0IG1tY19j b21tYW5kIGNtZDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJbWVtc2V0 KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlyZXEuY21kID0gJmNtZDsKKwljbWQub3Bjb2Rl ID0gU0RfSU9fUldfRElSRUNUOworCWNtZC5hcmcgPSBTRF9JT19SV19GVU5DKGZuKSB8IFNE X0lPX1JXX0FEUihhZHIpOworCWlmICh3cikKKwkJY21kLmFyZyB8PSBTRF9JT19SV19XUiB8 IFNEX0lPX1JXX1JBVyB8IFNEX0lPX1JXX0RBVCgqZGF0YSk7CisJY21kLmZsYWdzID0gTU1D X1JTUF9SNSB8IE1NQ19DTURfQUM7CisJY21kLmRhdGEgPSBOVUxMOworCisJTU1DQlVTX1dB SVRfRk9SX1JFUVVFU1QoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgZGV2LCAmcmVxKTsKKwlp ZiAocmVxLmNtZC0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKQorCQlyZXR1cm4gKHJlcS5jbWQt PmVycm9yKTsKKworCWlmIChjbWQucmVzcFswXSAmIFI1X0NPTV9DUkNfRVJST1IpCisJCXJl dHVybiAoTU1DX0VSUl9CQURDUkMpOworCWlmIChjbWQucmVzcFswXSAmIChSNV9JTExFR0FM X0NPTU1BTkQgfCBSNV9GVU5DVElPTl9OVU1CRVIpKQorCQlyZXR1cm4gKE1NQ19FUlJfSU5W QUxJRCk7CisJaWYgKGNtZC5yZXNwWzBdICYgUjVfT1VUX09GX1JBTkdFKQorCQlyZXR1cm4g KE1NQ19FUlJfRkFJTEVEKTsKKwkKKwkqZGF0YSA9ICh1aW50OF90KSAoY21kLnJlc3BbMF0g JiAweGZmKTsKKwlyZXR1cm4gKE1NQ19FUlJfTk9ORSk7Cit9CisKKworLyoqCisgKglzZGlv X3J3X2V4dGVuZGVkIC0gcmVhZHMgb3Igd3JpdGVzIG11bHRpcGxlIGJ5dGVzCisgKglAc2M6 IGkyYyBkcml2ZXIgY29udGV4dAorICoJQGZsYWdzOiB0aGUgZXZlbnQocykgdG8gd2FpdCBv biwgdGhpcyBpcyBhIGJpdG1hc2sgb2YgdGhlIEkyQ19TVEFUXz8/PyBmbGFncworICoJQHN0 YXRwOiBpZiBub3QgbnVsbCB3aWxsIGNvbnRhaW4gdGhlIHN0YXR1cyBmbGFncyB1cG9uIHJl dHVybgorICoJQHRpbW86IHRoZSBudW1iZXIgb2YgdGlja3MgdG8gd2FpdAorICoKKyAqCQor ICoKKyAqCVJFVFVSTlM6CisgKglNTUNfRVJSX05PTkUgaWYgc3VjY2Vzc2lmdWwKKyAqLwor aW50CitzZGlvX3J3X2V4dGVuZGVkKHN0cnVjdCBzZGlvX3NvZnRjICpzYywgaW50IHdyLCBp bnQgaW5jciwgdWludDMyX3QgZm4sCisgICAgdWludDMyX3QgYWRyLCB1aW50OF90ICpkYXRh cCwgc2l6ZV90IGRhdGFsZW4sIHVuc2lnbmVkIGJsa3MpCit7CisJZGV2aWNlX3QgZGV2ID0g c2MtPmRldjsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgcmVxOworCXN0cnVjdCBtbWNfY29tbWFu ZCBjbWQ7CisJc3RydWN0IG1tY19kYXRhIGRhdGE7CisJCisjaWYgMAorCS8qIFRPRE86IGJs b2NrIG1vZGUgbm90IHlldCBzdXBwb3J0ZWQgKi8KKwlpZiAobGVuID4gNTEyKSB7CisJCWRl dmljZV9wcmludGYoc2MtPmRldiwgIndhcm5pbmcgLSBibG9jayBtb2RlIG5vdCB5ZXQgc3Vw cG9ydGVkXG4iKTsKKwkJcmV0dXJuIE1NQ19FUlJfTUFYOworCX0KKyNlbmRpZgorCQorCW1l bXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihj bWQpKTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJcmVxLmNtZCA9ICZj bWQ7CisKKwljbWQub3Bjb2RlID0gU0RfSU9fUldfRVhURU5ERUQ7CisJY21kLmFyZyA9IFNE X0lPX1JXX0ZVTkMoZm4pOworCWNtZC5hcmcgfD0gU0RfSU9fUldfQURSKGFkcik7CisJaWYg KGJsa3MpCisJCWNtZC5hcmcgfD0gU0RfSU9FX1JXX0JMSyB8IFNEX0lPRV9SV19MRU4oYmxr cyk7CisJZWxzZQorCQljbWQuYXJnIHw9IFNEX0lPRV9SV19MRU4oZGF0YWxlbik7CisJaWYg KHdyKQorCQljbWQuYXJnIHw9IFNEX0lPX1JXX1dSOworCWlmIChpbmNyKQorCQljbWQuYXJn IHw9IFNEX0lPX1JXX0lOQ1I7CisJY21kLmZsYWdzID0gTU1DX1JTUF9SNSB8IE1NQ19DTURf QUM7CisJY21kLmRhdGEgPSAmZGF0YTsKKworCWRhdGEuZGF0YSA9IGRhdGFwOworCWRhdGEu bGVuID0gZGF0YWxlbjsKKwlkYXRhLmZsYWdzID0gd3IgPyBNTUNfREFUQV9XUklURSA6IE1N Q19EQVRBX1JFQUQ7CisKKwkvLyBwcmludGYoIltCUkddIHNkaW9fcndfZXh0ZW5kZWQgOiBj bWQub3Bjb2RlID0gMHglMDh4IDogY21kLmFyZyA9IDB4JTA4eCA6IGRhdGEubGVuID0gJXVc biIsIGNtZC5vcGNvZGUsIGNtZC5hcmcsIGRhdGEubGVuKTsKKy8vc2MtPmZsYWdzIHw9IFNE SU9fRkxBR19TVVBQT1JUX01VTFRJX0JMT0NLCisKKwlNTUNCVVNfV0FJVF9GT1JfUkVRVUVT VChkZXZpY2VfZ2V0X3BhcmVudChkZXYpLCBkZXYsICZyZXEpOworCWlmIChyZXEuY21kLT5l cnJvciAhPSBNTUNfRVJSX05PTkUpCisJCXJldHVybiAocmVxLmNtZC0+ZXJyb3IpOworCisJ cmV0dXJuIChNTUNfRVJSX05PTkUpOworfQorCisKKy8qKgorICoJc2Rpb19yd19leHRlbmRl ZF9leCAtIHJlYWRzIG9yIHdyaXRlcyBtdWx0aXBsZSBieXRlcworICoJQHNjOiBpMmMgZHJp dmVyIGNvbnRleHQKKyAqCUBmbGFnczogdGhlIGV2ZW50KHMpIHRvIHdhaXQgb24sIHRoaXMg aXMgYSBiaXRtYXNrIG9mIHRoZSBJMkNfU1RBVF8/Pz8gZmxhZ3MKKyAqCUBzdGF0cDogaWYg bm90IG51bGwgd2lsbCBjb250YWluIHRoZSBzdGF0dXMgZmxhZ3MgdXBvbiByZXR1cm4KKyAq CUB0aW1vOiB0aGUgbnVtYmVyIG9mIHRpY2tzIHRvIHdhaXQKKyAqCisgKgkKKyAqCisgKglS RVRVUk5TOgorICoJTU1DX0VSUl9OT05FIGlmIHN1Y2Nlc3NpZnVsCisgKi8KK3N0YXRpYyBp bnQKK3NkaW9fcndfZXh0ZW5kZWRfZXgoc3RydWN0IHNkaW9fc29mdGMgKnNjLCBpbnQgd3Is IGludCBpbmNyLAorCXN0cnVjdCBzZGlvX2l2YXJzICppdmFyLCB1aW50MzJfdCBhZHIsIHVp bnQ4X3QgKmRhdGFwLCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJc2l6ZV90IG5ibGtz OworCXNpemVfdCBuYnl0ZXM7CisKKwkvKiBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGJsb2Nr IHRyYW5zZmVycyBhbmQgdGhlIHNpemUgaXMgbGFyZ2VyIHRoYW4KKwkgKiB0aGUgYmxvY2sg c2l6ZSB0aGVuIGRvIHRoZSBpbnRpYWwgdHJhbnNmZXIgYXMgYSBibG9jay4KKwkgKi8KKwlp ZiAoKHNjLT5mbGFncyAmIFNESU9fRkxBR19TVVBQT1JUX01VTFRJX0JMT0NLKSAmJgorCSAg ICAoaXZhci0+YmxrX3N6ID4gMCkgJiYgKGxlbiA+IGl2YXItPmJsa19zeikpIHsKKwkKKwkJ d2hpbGUgKGxlbiA+IGl2YXItPmJsa19zeikgeworCQkKKwkJCS8qIFRoZSBtYXhpbXVtIG51 bWJlciBvZiBibG9ja3MgdGhhdCBjYW4gYmUgdHJhbnNmZXJyZWQgYWNjb3JkaW5nCisJCQkg KiB0byB0aGUgc3BlYyBpZiA1MTEuCisJCQkgKi8KKwkJCW5ibGtzID0gKGxlbiAvIGl2YXIt PmJsa19zeik7CisJCQlpZiAobmJsa3MgPiA1MTEpCisJCQkJbmJsa3MgPSA1MTE7CisJCQkJ CisJCQluYnl0ZXMgPSAobmJsa3MgKiBpdmFyLT5ibGtfc3opOworCQkJCisJCQkvKiBXcml0 ZSB0aGUgZGF0YSBhcyBibG9ja3MgKi8KKwkJCXJldCA9IHNkaW9fcndfZXh0ZW5kZWQoc2Ms IHdyLCBpbmNyLCBpdmFyLT5mbiwgYWRyLCBkYXRhcCwgbmJ5dGVzLCBuYmxrcyk7CisJCQlp ZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIChyZXQpOworCisJCQlsZW4gLT0gbmJ5dGVzOwor CQkJZGF0YXAgKz0gbmJ5dGVzOworCQkJaWYgKGluY3IpCisJCQkJYWRyICs9IG5ieXRlczsK KwkJfQorCX0KKwkKKwkvKiBJZiB0aGVyZSBpcyBhbnkgZGF0YSByZW1haW5pbmcgdXNlIHN0 YW5kYXJkIGJ5dGUgdHJhbnNmZXJzICovCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJCisJCW5i eXRlcyA9IG1pbihsZW4sIDUxMik7CisJCQorCQkvKiBEbyB0aGUgd3JpdGUgaW4gYnl0ZSBt b2RlICovCisJCXJldCA9IHNkaW9fcndfZXh0ZW5kZWQoc2MsIHdyLCBpbmNyLCBpdmFyLT5m biwgYWRyLCBkYXRhcCwgbmJ5dGVzLCAwKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJu IChyZXQpOworCisJCWxlbiAtPSBuYnl0ZXM7CisJCWRhdGFwICs9IG5ieXRlczsKKwkJaWYg KGluY3IpCisJCQlhZHIgKz0gbmJ5dGVzOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworCisv KioKKyAqCXNkaW9fcmVhZGIgLSByZWFkcyBhIHNpbmdsZSBieXRlCisgKglzZGlvX3JlYWRz IC0gcmVhZHMgYSAxNi1iaXQgdmFsdWUKKyAqCXNkaW9fcmVhZGwgLSByZWFkcyBhIDMyLWJp dCB2YWx1ZQorICoJQHNjOiBpMmMgZHJpdmVyIGNvbnRleHQKKyAqCUBmbGFnczogdGhlIGV2 ZW50KHMpIHRvIHdhaXQgb24sIHRoaXMgaXMgYSBiaXRtYXNrIG9mIHRoZSBJMkNfU1RBVF8/ Pz8gZmxhZ3MKKyAqCUBzdGF0cDogaWYgbm90IG51bGwgd2lsbCBjb250YWluIHRoZSBzdGF0 dXMgZmxhZ3MgdXBvbiByZXR1cm4KKyAqCUB0aW1vOiB0aGUgbnVtYmVyIG9mIHRpY2tzIHRv IHdhaXQKKyAqCisgKgkKKyAqCisgKglSRVRVUk5TOgorICoJTU1DX0VSUl9OT05FIGlmIHN1 Y2Nlc3NpZnVsCisgKi8KK3N0YXRpYyBpbnQKK3NkaW9fZjBfcmVhZGIoZGV2aWNlX3QgYnJk ZXYsIHVfaW50IHJlZywgdWludDhfdCAqdmFsKQoreworCXN0cnVjdCBzZGlvX3NvZnRjICpz YyA9IGRldmljZV9nZXRfc29mdGMoYnJkZXYpOworCXJldHVybiBzZGlvX3J3X2RpcmVjdChz YywgMCwgMCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50CitzZGlvX3JlYWRiKGRldmlj ZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYsIHVfaW50IHJlZywgdWludDhfdCAqdmFsKQor eworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoYnJkZXYpOwor CXN0cnVjdCBzZGlvX2l2YXJzICppdmFyID0gZGV2aWNlX2dldF9pdmFycyhyZXFkZXYpOwor CisJcmV0dXJuIHNkaW9fcndfZGlyZWN0KHNjLCAwLCBpdmFyLT5mbiwgcmVnLCB2YWwpOwor fQorCitzdGF0aWMgaW50CitzZGlvX3JlYWRzKGRldmljZV90IGJyZGV2LCBkZXZpY2VfdCBy ZXFkZXYsIHVfaW50IHJlZywgdWludDE2X3QgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2Rpb19zb2Z0 YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2KTsKKwlzdHJ1Y3Qgc2Rpb19pdmFycyAq aXZhciA9IGRldmljZV9nZXRfaXZhcnMocmVxZGV2KTsKKworCXJldHVybiBzZGlvX3J3X2V4 dGVuZGVkKHNjLCAwLCAxLCBpdmFyLT5mbiwgcmVnLCAodWludDhfdCopdmFsLCAyLCAwKTsK K30KKworc3RhdGljIGludAorc2Rpb19yZWFkbChkZXZpY2VfdCBicmRldiwgZGV2aWNlX3Qg cmVxZGV2LCB1X2ludCByZWcsIHVpbnQzMl90ICp2YWwpCit7CisJc3RydWN0IHNkaW9fc29m dGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0IHNkaW9faXZhcnMg Kml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKHJlcWRldik7CisKKwlyZXR1cm4gc2Rpb19yd19l eHRlbmRlZChzYywgMCwgMSwgaXZhci0+Zm4sIHJlZywgKHVpbnQ4X3QqKXZhbCwgNCwgMCk7 Cit9CisKKworLyoqCisgKglzZGlvX3dyaXRlYiAtIHdyaXRlcyBhIHNpbmdsZSBieXRlCisg KglzZGlvX3dyaXRlcyAtIHdyaXRlcyBhIDE2LWJpdCB2YWx1ZQorICoJc2Rpb193cml0ZWwg LSB3cml0ZXMgYSAzMi1iaXQgdmFsdWUKKyAqCUBzYzogaTJjIGRyaXZlciBjb250ZXh0Cisg KglAZmxhZ3M6IHRoZSBldmVudChzKSB0byB3YWl0IG9uLCB0aGlzIGlzIGEgYml0bWFzayBv ZiB0aGUgSTJDX1NUQVRfPz8/IGZsYWdzCisgKglAc3RhdHA6IGlmIG5vdCBudWxsIHdpbGwg Y29udGFpbiB0aGUgc3RhdHVzIGZsYWdzIHVwb24gcmV0dXJuCisgKglAdGltbzogdGhlIG51 bWJlciBvZiB0aWNrcyB0byB3YWl0CisgKgorICoJCisgKgorICoJUkVUVVJOUzoKKyAqCU1N Q19FUlJfTk9ORSBpZiBzdWNjZXNzaWZ1bAorICovCitzdGF0aWMgaW50CitzZGlvX2YwX3dy aXRlYihkZXZpY2VfdCBicmRldiwgdV9pbnQgcmVnLCB1aW50OF90IHZhbCkKK3sKKwlzdHJ1 Y3Qgc2Rpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2KTsKKwlyZXR1cm4g c2Rpb19yd19kaXJlY3Qoc2MsIDEsIDAsIHJlZywgJnZhbCk7Cit9CisKK3N0YXRpYyBpbnQK K3NkaW9fd3JpdGViKGRldmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYsIHVfaW50IHJl ZywgdWludDhfdCB2YWwpCit7CisJc3RydWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNlX2dl dF9zb2Z0YyhicmRldik7CisJc3RydWN0IHNkaW9faXZhcnMgKml2YXIgPSBkZXZpY2VfZ2V0 X2l2YXJzKHJlcWRldik7CisKKwlyZXR1cm4gc2Rpb19yd19kaXJlY3Qoc2MsIDEsIGl2YXIt PmZuLCByZWcsICZ2YWwpOworfQorCitzdGF0aWMgaW50CitzZGlvX3dyaXRlcyhkZXZpY2Vf dCBicmRldiwgZGV2aWNlX3QgcmVxZGV2LCB1X2ludCByZWcsIHVpbnQxNl90IHZhbCkKK3sK KwlzdHJ1Y3Qgc2Rpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2KTsKKwlz dHJ1Y3Qgc2Rpb19pdmFycyAqaXZhciA9IGRldmljZV9nZXRfaXZhcnMocmVxZGV2KTsKKwor CXJldHVybiBzZGlvX3J3X2V4dGVuZGVkKHNjLCAxLCAxLCBpdmFyLT5mbiwgcmVnLCAodWlu dDhfdCopJnZhbCwgMiwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3NkaW9fd3JpdGVsKGRldmlj ZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYsIHVfaW50IHJlZywgdWludDMyX3QgdmFsKQor eworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoYnJkZXYpOwor CXN0cnVjdCBzZGlvX2l2YXJzICppdmFyID0gZGV2aWNlX2dldF9pdmFycyhyZXFkZXYpOwor CisJcmV0dXJuIHNkaW9fcndfZXh0ZW5kZWQoc2MsIDEsIDEsIGl2YXItPmZuLCByZWcsICh1 aW50OF90KikmdmFsLCA0LCAwKTsKK30KKworCisKKy8qKgorICoJc2Rpb19tZW1jcHlfZnJv bSAtIHdyaXRlcyBhIHNpbmdsZSBieXRlCisgKglzZGlvX21lbWNweV90byAtIHdyaXRlcyBh IDE2LWJpdCB2YWx1ZQorICoJQHNjOiBpMmMgZHJpdmVyIGNvbnRleHQKKyAqCUBmbGFnczog dGhlIGV2ZW50KHMpIHRvIHdhaXQgb24sIHRoaXMgaXMgYSBiaXRtYXNrIG9mIHRoZSBJMkNf U1RBVF8/Pz8gZmxhZ3MKKyAqCUBzdGF0cDogaWYgbm90IG51bGwgd2lsbCBjb250YWluIHRo ZSBzdGF0dXMgZmxhZ3MgdXBvbiByZXR1cm4KKyAqCUB0aW1vOiB0aGUgbnVtYmVyIG9mIHRp Y2tzIHRvIHdhaXQKKyAqCisgKgkKKyAqCisgKglSRVRVUk5TOgorICoJTU1DX0VSUl9OT05F IGlmIHN1Y2Nlc3NpZnVsCisgKi8KK3N0YXRpYyBpbnQKK3NkaW9fbWVtY3B5X2Zyb20oZGV2 aWNlX3QgYnJkZXYsIGRldmljZV90IHJlcWRldiwgdV9pbnQgcmVnLCB1X2NoYXIgKmRhdGFw LAorICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzZGlvX3NvZnRj ICpzYyA9IGRldmljZV9nZXRfc29mdGMoYnJkZXYpOworCXN0cnVjdCBzZGlvX2l2YXJzICpp dmFyID0gZGV2aWNlX2dldF9pdmFycyhyZXFkZXYpOworCisJcmV0dXJuIHNkaW9fcndfZXh0 ZW5kZWRfZXgoc2MsIDAsIDEsIGl2YXIsIHJlZywgZGF0YXAsIGxlbik7Cit9CisKK3N0YXRp YyBpbnQKK3NkaW9fbWVtY3B5X3RvKGRldmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYs IHVfaW50IHJlZywgdV9jaGFyICpkYXRhcCwKKyAgICAgICAgICAgICAgIHNpemVfdCBsZW4p Cit7CisJc3RydWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7 CisJc3RydWN0IHNkaW9faXZhcnMgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKHJlcWRldik7 CisKKwlyZXR1cm4gc2Rpb19yd19leHRlbmRlZF9leChzYywgMSwgMSwgaXZhciwgcmVnLCBk YXRhcCwgbGVuKTsKK30KKworLyoqCisgKglzZGlvX3N0cmVhbV9mcm9tIC0gd3JpdGVzIGEg c2luZ2xlIGJ5dGUKKyAqCXNkaW9fc3RyZWFtX3RvIC0gd3JpdGVzIGEgMTYtYml0IHZhbHVl CisgKglAc2M6IGkyYyBkcml2ZXIgY29udGV4dAorICoJQGZsYWdzOiB0aGUgZXZlbnQocykg dG8gd2FpdCBvbiwgdGhpcyBpcyBhIGJpdG1hc2sgb2YgdGhlIEkyQ19TVEFUXz8/PyBmbGFn cworICoJQHN0YXRwOiBpZiBub3QgbnVsbCB3aWxsIGNvbnRhaW4gdGhlIHN0YXR1cyBmbGFn cyB1cG9uIHJldHVybgorICoJQHRpbW86IHRoZSBudW1iZXIgb2YgdGlja3MgdG8gd2FpdAor ICoKKyAqCQorICoKKyAqCVJFVFVSTlM6CisgKglNTUNfRVJSX05PTkUgaWYgc3VjY2Vzc2lm dWwKKyAqLworc3RhdGljIGludAorc2Rpb19zdHJlYW1fZnJvbShkZXZpY2VfdCBicmRldiwg ZGV2aWNlX3QgcmVxZGV2LCB1X2ludCByZWcsIHVfY2hhciAqZGF0YXAsCisgICAgICAgICAg ICAgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNl X2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0IHNkaW9faXZhcnMgKml2YXIgPSBkZXZpY2Vf Z2V0X2l2YXJzKHJlcWRldik7CisKKwlyZXR1cm4gc2Rpb19yd19leHRlbmRlZF9leChzYywg MCwgMCwgaXZhciwgcmVnLCBkYXRhcCwgbGVuKTsKK30KKworc3RhdGljIGludAorc2Rpb19z dHJlYW1fdG8oZGV2aWNlX3QgYnJkZXYsIGRldmljZV90IHJlcWRldiwgdV9pbnQgcmVnLCB1 X2NoYXIgKmRhdGFwLAorICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qg c2Rpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2KTsKKwlzdHJ1Y3Qgc2Rp b19pdmFycyAqaXZhciA9IGRldmljZV9nZXRfaXZhcnMocmVxZGV2KTsKKworCXJldHVybiBz ZGlvX3J3X2V4dGVuZGVkX2V4KHNjLCAxLCAwLCBpdmFyLCByZWcsIGRhdGFwLCBsZW4pOwor fQorCisKKy8qKgorICoJc2Rpb19zZXRfYmxrX3N6IC0gc2V0cyB0aGUgYmxvY2sgc2l6ZSBm b3IgdGhlIGZ1bmN0aW9uCisgKglAc2M6IGkyYyBkcml2ZXIgY29udGV4dAorICoJQGZsYWdz OiB0aGUgZXZlbnQocykgdG8gd2FpdCBvbiwgdGhpcyBpcyBhIGJpdG1hc2sgb2YgdGhlIEky Q19TVEFUXz8/PyBmbGFncworICoJQHN0YXRwOiBpZiBub3QgbnVsbCB3aWxsIGNvbnRhaW4g dGhlIHN0YXR1cyBmbGFncyB1cG9uIHJldHVybgorICoJQHRpbW86IHRoZSBudW1iZXIgb2Yg dGlja3MgdG8gd2FpdAorICoKKyAqCQorICoKKyAqCVJFVFVSTlM6CisgKglNTUNfRVJSX05P TkUgaWYgc3VjY2Vzc2lmdWwKKyAqLworc3RhdGljIGludAorc2Rpb19zZXRfYmxrX3N6KGRl dmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYsIHVpbnQxNl90IHNpemUpCit7CisJc3Ry dWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0 IHNkaW9faXZhcnMgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKHJlcWRldik7CisJaW50IGVy cjsKKwl1aW50MzJfdCBjY2NyX2FkcjsKKwl1aW50OF90IGRhdGFbMl07CisJCisJLyogYmxv Y2sgc2l6ZSBpcyAxNi1iaXQgaW4gbGl0dGxlIGVuZGlhbiBvcmRlciAqLworCWRhdGFbMF0g PSAoc2l6ZSAmIDB4ZmYpOworCWRhdGFbMV0gPSAoKHNpemUgPj4gOCkgJiAweGZmKTsKKwkK KwljY2NyX2FkciA9IChpdmFyLT5mbiAqIDB4MTAwKSArIFNEX0lPX0NDQ1JfRk4wX0JMS1NJ WjsKKworCWVyciA9IHNkaW9fcndfZGlyZWN0KHNjLCAxLCAwLCBjY2NyX2FkciwgJmRhdGFb MF0pOworCWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKQorCQlyZXR1cm4gKGVycik7CisJCisJ ZXJyID0gc2Rpb19yd19kaXJlY3Qoc2MsIDEsIDAsIGNjY3JfYWRyICsgMSwgJmRhdGFbMV0p OworCWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKQorCQlyZXR1cm4gKGVycik7CisJCisJaXZh ci0+YmxrX3N6ID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbW1jX2lv X2R1bXBfY2NjcihzdHJ1Y3Qgc2Rpb19zb2Z0YyAqc2MpCit7CisJdWludDhfdCBidWZbMTAy NF07CisJdWludDhfdCAqY2NjcjsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBpLCBqOwor CQorCQorCWNjY3IgPSAodWludDhfdCopICgoKHVuc2lnbmVkIGludCkmYnVmWzBdICsgNTEy KSAmIH4weGZmKTsKKworCWZvciAoaiA9IDA7IGogPCA3OyBqKyspIHsKKwkJZXJyID0gc2Rp b19yd19leHRlbmRlZChzYywgMCwgMSwgMCwgKDB4MTAwICogaiksIGNjY3IsIDUxMiwgMCk7 CisJCWlmIChlcnIgPT0gTU1DX0VSUl9OT05FKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMzI7 IGkrKykgeworCQkJCXByaW50ZigiW0NDQ1JdIDB4JTAyeCA6ICVkJWQlZCVkJWQlZCVkJWRc biIsICgoMHgxMDAgKiBqKSArIGkpLAorCQkJCQkgICAoY2NjcltpXSA+PiA3KSAmIDB4MSwK KwkJCQkJICAgKGNjY3JbaV0gPj4gNikgJiAweDEsCisJCQkJCSAgIChjY2NyW2ldID4+IDUp ICYgMHgxLAorCQkJCQkgICAoY2NjcltpXSA+PiA0KSAmIDB4MSwKKwkJCQkJICAgKGNjY3Jb aV0gPj4gMykgJiAweDEsCisJCQkJCSAgIChjY2NyW2ldID4+IDIpICYgMHgxLAorCQkJCQkg ICAoY2NjcltpXSA+PiAxKSAmIDB4MSwKKwkJCQkJICAgKGNjY3JbaV0gPj4gMCkgJiAweDEp OworCQkJfQorCQl9CisJfQorCQorCXJldHVybiAoZXJyKTsKK30KKworCisKKy8qKgorICoJ c2Rpb19mdW5jdGlvbl9kaXNhYmxlIC0gZW5hYmxlcyBhIGdpdmVuIGZ1bmN0aW9uIAorICoJ QHNjOiBpMmMgZHJpdmVyIGNvbnRleHQKKyAqCUBmbGFnczogdGhlIGV2ZW50KHMpIHRvIHdh aXQgb24sIHRoaXMgaXMgYSBiaXRtYXNrIG9mIHRoZSBJMkNfU1RBVF8/Pz8gZmxhZ3MKKyAq CUBzdGF0cDogaWYgbm90IG51bGwgd2lsbCBjb250YWluIHRoZSBzdGF0dXMgZmxhZ3MgdXBv biByZXR1cm4KKyAqCUB0aW1vOiB0aGUgbnVtYmVyIG9mIHRpY2tzIHRvIHdhaXQKKyAqCisg KglTY2FucyB0aGUgU0RJTyBjYXJkIGFuZCBnZXRzIHRoZSBmdW5jdGlvbnMgLi4uCisgKgor ICoJUkVUVVJOUzoKKyAqCU1NQ19FUlJfTk9ORSBpZiBzdWNjZXNzaWZ1bAorICovCitzdGF0 aWMgaW50CitzZGlvX2Z1bmN0aW9uX2Rpc2FibGUoZGV2aWNlX3QgZGV2LCBpbnQgZm4pCit7 CisJc3RydWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlu dCBlcnI7CisJdWludDhfdCBpb2U7CisKKwllcnIgPSBzZGlvX3J3X2RpcmVjdChzYywgMCwg MCwgU0RfSU9fQ0NDUl9GTl9FTkFCTEUsICZpb2UpOworCWlmIChlcnIgIT0gTU1DX0VSUl9O T05FKQorCQlyZXR1cm4gKGVycik7CisJCisJaW9lICY9IH4oMHgxIDw8IGZuKTsKKwkKKwll cnIgPSBzZGlvX3J3X2RpcmVjdChzYywgMSwgMCwgU0RfSU9fQ0NDUl9GTl9FTkFCTEUsICZp b2UpOworCWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKQorCQlyZXR1cm4gKGVycik7CisKKwly ZXR1cm4gKDApOworfQorCisvKioKKyAqCXNkaW9fZnVuY3Rpb25fZW5hYmxlIC0gZW5hYmxl cyBhIGdpdmVuIGZ1bmN0aW9uIAorICoJQHNjOiBpMmMgZHJpdmVyIGNvbnRleHQKKyAqCUBm bGFnczogdGhlIGV2ZW50KHMpIHRvIHdhaXQgb24sIHRoaXMgaXMgYSBiaXRtYXNrIG9mIHRo ZSBJMkNfU1RBVF8/Pz8gZmxhZ3MKKyAqCUBzdGF0cDogaWYgbm90IG51bGwgd2lsbCBjb250 YWluIHRoZSBzdGF0dXMgZmxhZ3MgdXBvbiByZXR1cm4KKyAqCUB0aW1vOiB0aGUgbnVtYmVy IG9mIHRpY2tzIHRvIHdhaXQKKyAqCisgKglTY2FucyB0aGUgU0RJTyBjYXJkIGFuZCBnZXRz IHRoZSBmdW5jdGlvbnMgLi4uCisgKgorICoJUkVUVVJOUzoKKyAqCU1NQ19FUlJfTk9ORSBp ZiBzdWNjZXNzaWZ1bAorICovCitzdGF0aWMgaW50CitzZGlvX2Z1bmN0aW9uX2VuYWJsZShk ZXZpY2VfdCBkZXYsIGludCBmbiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQoreworCWlu dCBlcnI7CisJc3RydWN0IHNkaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworCXVuc2lnbmVkIGxvbmcgZWxhcHNlZF9tczsKKwl1bnNpZ25lZCBpbnQgdGlja3NfMTBt czsKKwl1aW50OF90IGlvZTsKKwl1aW50OF90IGlvcjsKKworZGV2aWNlX3ByaW50ZihkZXYs ICJzZGlvX2Z1bmN0aW9uX2VuYWJsZSA6IGZuICVkIDogdGltZW91dF9tcyA9ICVsdVxuIiwg Zm4sIHRpbWVvdXRfbXMpOworCS8qIHNldCB0aGUgZW5hYmxlIGJpdCAqLworCWVyciA9IHNk aW9fcndfZGlyZWN0KHNjLCAwLCAwLCBTRF9JT19DQ0NSX0ZOX0VOQUJMRSwgJmlvZSk7CisJ aWYgKGVyciAhPSBNTUNfRVJSX05PTkUpCisJCXJldHVybiAoZXJyKTsKKwkKKwlpb2UgfD0g KDB4MSA8PCBmbik7CisJCisJZXJyID0gc2Rpb19yd19kaXJlY3Qoc2MsIDEsIDAsIFNEX0lP X0NDQ1JfRk5fRU5BQkxFLCAmaW9lKTsKKwlpZiAoZXJyICE9IE1NQ19FUlJfTk9ORSkKKwkJ cmV0dXJuIChlcnIpOworCQorCXRpY2tzXzEwbXMgPSAoaHogLyAxMDApOworCWlmICghdGlj a3NfMTBtcykKKwkJdGlja3NfMTBtcyA9IDE7CisJCisJLyogcG9sbCBvbiB0aGUgcmVhZHkg Yml0ICovCisJZWxhcHNlZF9tcyA9IDA7CisJZG8geworCQlwYXVzZSgic2Rpb19mbl9lbiIs IHRpY2tzXzEwbXMpOworCQllbGFwc2VkX21zICs9IDEwOworCQorCQllcnIgPSBzZGlvX3J3 X2RpcmVjdChzYywgMCwgMCwgU0RfSU9fQ0NDUl9GTl9JT1JFQURZLCAmaW9yKTsKK2Rldmlj ZV9wcmludGYoZGV2LCAic2Rpb19mdW5jdGlvbl9lbmFibGUgOiBlcnIgPSAlZCA6IGVsYXBz ZWRfbXMgPSAlbHUgOiBpb3IgMHglMDJ4XG4iLCBlcnIsIGVsYXBzZWRfbXMsIGlvcik7CisJ CWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKQorCQkJcmV0dXJuIChlcnIpOworCisJfSB3aGls ZSAoIShpb3IgJiAoMHgxIDw8IGZuKSkgJiYgKGVsYXBzZWRfbXMgPCB0aW1lb3V0X21zKSk7 CisJCisJaWYgKCEoaW9yICYgKDB4MSA8PCBmbikpKQorCQlyZXR1cm4gKE1NQ19FUlJfVElN RU9VVCk7CisJCQorCXJldHVybiAoMCk7Cit9CisKKworLyoqCisgKglzZGlvX3Byb2JlX2Fu ZF9hdHRhY2hfY2hpbGQgLSBsb29wcyBvdmVyIHRoZSAKKyAqCUBzYzogaTJjIGRyaXZlciBj b250ZXh0CisgKglAZmxhZ3M6IHRoZSBldmVudChzKSB0byB3YWl0IG9uLCB0aGlzIGlzIGEg Yml0bWFzayBvZiB0aGUgSTJDX1NUQVRfPz8/IGZsYWdzCisgKglAc3RhdHA6IGlmIG5vdCBu dWxsIHdpbGwgY29udGFpbiB0aGUgc3RhdHVzIGZsYWdzIHVwb24gcmV0dXJuCisgKglAdGlt bzogdGhlIG51bWJlciBvZiB0aWNrcyB0byB3YWl0CisgKgorICoJU2NhbnMgdGhlIFNESU8g Y2FyZCBhbmQgZ2V0cyB0aGUgZnVuY3Rpb25zIC4uLgorICoKKyAqCVJFVFVSTlM6CisgKglN TUNfRVJSX05PTkUgaWYgc3VjY2Vzc2lmdWwKKyAqLworc3RhdGljIGludAorc2Rpb19wcm9i ZV9hbmRfYXR0YWNoX2NoaWxkKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBm biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2Rpb19jaXMg KmNpcykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9IGRldmljZV9n ZXRfc29mdGMoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXM7CisKKworCWVyciA9 IGRldmljZV9wcm9iZShjaGlsZCk7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIG91dDsKKwkK Kwl0aW1lb3V0X21zID0gY2lzLT5mdW5jZS5mbnMuc3RhcnR1cF90aW1lb3V0X21zOworCWlm ICh0aW1lb3V0X21zIDwgMTAwKQorCQl0aW1lb3V0X21zID0gMTAwMDsKKworCWlmIChzZGlv X2Z1bmN0aW9uX2VuYWJsZShkZXYsIGZuLCB0aW1lb3V0X21zKSA9PSAwICYmCisJICAgIGRl dmljZV9hdHRhY2goY2hpbGQpID09IDApIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJmdW5j dGlvbiAlZCBcbiIsIGZuKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJZXJyID0gRU5YSU87CisK K291dDo7CisJc2Rpb19mdW5jdGlvbl9kaXNhYmxlKGRldiwgZm4pOworCXJldHVybiBlcnI7 Cit9CisKKworLyoqCisgKglzZGlvX3NjYW5fZnVuY3MgLSBsb29wcyBvdmVyIHRoZSAKKyAq CUBzYzogaTJjIGRyaXZlciBjb250ZXh0CisgKglAZmxhZ3M6IHRoZSBldmVudChzKSB0byB3 YWl0IG9uLCB0aGlzIGlzIGEgYml0bWFzayBvZiB0aGUgSTJDX1NUQVRfPz8/IGZsYWdzCisg KglAc3RhdHA6IGlmIG5vdCBudWxsIHdpbGwgY29udGFpbiB0aGUgc3RhdHVzIGZsYWdzIHVw b24gcmV0dXJuCisgKglAdGltbzogdGhlIG51bWJlciBvZiB0aWNrcyB0byB3YWl0CisgKgor ICoJU2NhbnMgdGhlIFNESU8gY2FyZCBhbmQgZ2V0cyB0aGUgZnVuY3Rpb25zIC4uLgorICoK KyAqCVJFVFVSTlM6CisgKglNTUNfRVJSX05PTkUgaWYgc3VjY2Vzc2lmdWwKKyAqLworc3Rh dGljIGludAorc2Rpb19zY2FuX2Z1bmNzKHN0cnVjdCBzZGlvX3NvZnRjICpzYykKK3sKKwlk ZXZpY2VfdCBkZXYgPSBzYy0+ZGV2OworCWludCBlcnI7CisJaW50IGZuOworCXVpbnQ4X3Qg dmFsWzRdOworCXVpbnQzMl90IGNpc3B0cjsKKwlzdHJ1Y3Qgc2Rpb19jaXMgY2lzOworCXN0 cnVjdCBzZGlvX2l2YXJzICppdmFyID0gTlVMTDsKKwlkZXZpY2VfdCBjaGlsZDsKKworCS8q IFJlYWQgdGhlIENDQ1IgcmVnaXN0ZXJzICovCisJZXJyID0gc2Rpb19yd19kaXJlY3Qoc2Ms IDAsIDAsIFNEX0lPX0NDQ1JfQ0NDUl9TRElPX1JFViwgdmFsKTsKKwlpZiAoZXJyICE9IE1N Q19FUlJfTk9ORSkKKwkJZ290byBkb25lOworCXNjLT5jY2NyX3JldiA9IHZhbFswXSAmIDB4 ZjsKKwlzYy0+c2Rpb19yZXYgPSAodmFsWzBdID4+IDQpICYgMHhmOworCQorCQorCS8qIFJl YWQgdGhlIGNhcmQncyBjYXBhYmxpdGllcyAqLworCWVyciA9IHNkaW9fcndfZGlyZWN0KHNj LCAwLCAwLCBTRF9JT19DQ0NSX0NBUEFCSUxJVFksIHZhbCk7CisJaWYgKGVyciAhPSBNTUNf RVJSX05PTkUpCisJCWdvdG8gZG9uZTsKKwlpZiAodmFsWzBdICYgQ0NDUl9DQVBTX1NNQikK KwkJc2MtPmZsYWdzIHw9IFNESU9fRkxBR19TVVBQT1JUX01VTFRJX0JMT0NLOworCQorCQor CQorCS8qIEZpcnN0IG9mZiByZWFkIHRoZSBjb21tb24gQ0lTIGFyZWEgKi8KKwllcnIgPSBz ZGlvX3J3X2V4dGVuZGVkKHNjLCAwLCAxLCAwLCBTRF9JT19DQ0NSX0NJU1BUUiwgdmFsLCA0 LCAwKTsKKwlpZiAoZXJyICE9IE1NQ19FUlJfTk9ORSkKKwkJZ290byBkb25lOworCWNpc3B0 ciA9IHZhbFswXSB8ICgodWludDMyX3QpdmFsWzFdIDw8IDgpIHwgKCh1aW50MzJfdCl2YWxb Ml0gPDwgOCk7CisKKwlzZGlvX2Npc19yZWFkKGRldiwgY2lzcHRyLCAmY2lzKTsKKwlzZGlv X2Npc19wcmludChkZXYsICZjaXMpOworCisJc2MtPnZlbmRvcl9pZCA9IGNpcy5tYW51ZmFj dHVyZXI7CisJc2MtPnByb2R1Y3RfaWQgPSBjaXMucHJvZHVjdDsKKwkKKworCS8qIE5leHQg dGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zICovCisJZm9yIChmbiA9IDE7IGZuIDw9IHNjLT5u dW1fZnVuY3M7IGZuKyspIHsKKwkJLyogUmVhZCB0aGUgZnVuY3Rpb24gYmFzaWMgcmVnaXN0 ZXJzIHRvIGdldCB0aGUgQ0lTIHBvaW50ZXIgKi8KKwkJZXJyID0gc2Rpb19yd19leHRlbmRl ZChzYywgMCwgMSwgMCwKKwkJCSgoU0RfSU9fRkJSX1NJWkUgKiBmbikgKyBTRF9JT19DQ0NS X0NJU1BUUiksIHZhbCwgNCwgMCk7CisJCWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKQorCQkJ Y29udGludWU7CisJCQorCQljaXNwdHIgPSB2YWxbMF0gfCAoKHVpbnQzMl90KXZhbFsxXSA8 PCA4KSB8ICgodWludDMyX3QpdmFsWzJdIDw8IDgpOworCisJCXNkaW9fY2lzX3JlYWQoZGV2 LCBjaXNwdHIsICZjaXMpOworCQlzZGlvX2Npc19wcmludChkZXYsICZjaXMpOworCQkKKwkJ aXZhciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNkaW9faXZhcnMpLCBNX0RFVkJVRiwgTV9X QUlUT0sgfCBNX1pFUk8pOworCQlpdmFyLT5mbiA9IGZuOworCQlpdmFyLT5ibGtfc3ogPSAw OworCisJCS8qIEFkZCBkZXZpY2UuICovCisJCWNoaWxkID0gZGV2aWNlX2FkZF9jaGlsZChk ZXYsIE5VTEwsIC0xKTsKKwkJZGV2aWNlX3NldF9pdmFycyhjaGlsZCwgaXZhcik7CisJCXNk aW9fcHJvYmVfYW5kX2F0dGFjaF9jaGlsZChkZXYsIGNoaWxkLCBmbiwgJmNpcyk7CisJfQor CQorZG9uZToKKwlyZXR1cm4gKGVycik7Cit9CisKKworCitzdGF0aWMgaW50CitzZGlvX3By b2JlKGRldmljZV90IGRldikKK3sKKworLy8JZGV2aWNlX3F1aWV0KGRldik7CisJZGV2aWNl X3NldF9kZXNjKGRldiwgIlNESU8gQ2FyZCIpOworCXJldHVybiAoMCk7Cit9CisKKy8qKgor ICoJc2Rpb19hdHRhY2ggLSByZWFkcyBvciB3cml0ZXMgbXVsdGlwbGUgYnl0ZXMKKyAqCUBz YzogaTJjIGRyaXZlciBjb250ZXh0CisgKglAZmxhZ3M6IHRoZSBldmVudChzKSB0byB3YWl0 IG9uLCB0aGlzIGlzIGEgYml0bWFzayBvZiB0aGUgSTJDX1NUQVRfPz8/IGZsYWdzCisgKglA c3RhdHA6IGlmIG5vdCBudWxsIHdpbGwgY29udGFpbiB0aGUgc3RhdHVzIGZsYWdzIHVwb24g cmV0dXJuCisgKglAdGltbzogdGhlIG51bWJlciBvZiB0aWNrcyB0byB3YWl0CisgKgorICoJ CisgKgorICoJUkVUVVJOUzoKKyAqCU1NQ19FUlJfTk9ORSBpZiBzdWNjZXNzaWZ1bAorICov CitzdGF0aWMgaW50CitzZGlvX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHNk aW9fc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmRl diA9IGRldjsKKwlTRElPX0xPQ0tfSU5JVChzYyk7CisKKwlkZXZpY2VfcHJpbnRmKGRldiwg IlNESU8gQ2FyZCB3aXRoICVkIEZ1bmN0aW9ucyBhdCAlcyAlZE1Iei8lZGJpdFxuIiwKKwkg ICAgICAgICAgICAgIG1tY19nZXRfaW9fZnVuY3Rpb25zKGRldiksCisJICAgICAgICAgICAg ICBkZXZpY2VfZ2V0X25hbWV1bml0KGRldmljZV9nZXRfcGFyZW50KGRldikpLAorCSAgICAg ICAgICAgICAgbW1jX2dldF90cmFuX3NwZWVkKGRldikgLyAxMDAwMDAwLAorCSAgICAgICAg ICAgICAgKG1tY19nZXRfYnVzX3dpZHRoKGRldikgPT0gYnVzX3dpZHRoXzEpID8gMSA6IDQp OworCisJc2MtPm51bV9mdW5jcyA9IG1tY19nZXRfaW9fZnVuY3Rpb25zKGRldik7CisKKwlz ZGlvX3NjYW5fZnVuY3Moc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor c2Rpb19kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCVNESU9fTE9DSyhzYyk7CisjaWYgMAorCXNj LT5zdXNwZW5kID0gMDsKKwlpZiAoc2MtPnJ1bm5pbmcgPiAwKSB7CisJCS8qIGtpbGwgdGhy ZWFkICovCisJCXNjLT5ydW5uaW5nID0gMDsKKwkJd2FrZXVwKHNjKTsKKwkJLyogd2FpdCBm b3IgdGhyZWFkIHRvIGZpbmlzaC4gKi8KKwkJd2hpbGUgKHNjLT5ydW5uaW5nICE9IC0xKQor CQkJbXNsZWVwKHNjLCAmc2MtPnNjX210eCwgMCwgImRldGFjaCIsIDApOworCX0KKyNlbmRp ZgorCVNESU9fVU5MT0NLKHNjKTsKKworCisJU0RJT19MT0NLX0RFU1RST1koc2MpOworCisJ cmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgaW50CitzZGlvX2FjcXVpcmVfYnVzKGRldmlj ZV90IGNhcmRkZXYsIGRldmljZV90IHJlcWRldikKK3sKKwlNTUNCVVNfQUNRVUlSRV9CVVMo ZGV2aWNlX2dldF9wYXJlbnQoY2FyZGRldiksIGNhcmRkZXYpOworCXJldHVybiAoMCk7Cit9 CisKK3N0YXRpYyBpbnQKK3NkaW9fcmVsZWFzZV9idXMoZGV2aWNlX3QgY2FyZGRldiwgZGV2 aWNlX3QgcmVxZGV2KQoreworCU1NQ0JVU19SRUxFQVNFX0JVUyhkZXZpY2VfZ2V0X3BhcmVu dChjYXJkZGV2KSwgY2FyZGRldik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor c2Rpb19yZWFkX2l2YXIoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHdoaWNo LCB1aW50cHRyX3QgKnJlc3VsdCkKK3sKKwlzdHJ1Y3Qgc2Rpb19pdmFycyAqaXZhciA9IGRl dmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9IGRldmlj ZV9nZXRfc29mdGMoYnVzKTsKKworCXN3aXRjaCAod2hpY2gpIHsKKwlkZWZhdWx0OgorCQly ZXR1cm4gKEVJTlZBTCk7CisJY2FzZSBTRElPX0lWQVJfVkVORE9SOgorCQkqKHVuc2lnbmVk IGludCAqKXJlc3VsdCA9IHNjLT52ZW5kb3JfaWQ7CisJCWJyZWFrOworCWNhc2UgU0RJT19J VkFSX1BST0RVQ1Q6CisJCSoodW5zaWduZWQgaW50ICopcmVzdWx0ID0gc2MtPnByb2R1Y3Rf aWQ7CisJCWJyZWFrOworCWNhc2UgU0RJT19JVkFSX0ZVTkNUSU9OX05VTUJFUjoKKwkJKih1 bnNpZ25lZCBpbnQgKilyZXN1bHQgPSBpdmFyLT5mbjsKKwkJYnJlYWs7CisJY2FzZSBTRElP X0lWQVJfQkxPQ0tfU0laRToKKwkJKih1bnNpZ25lZCBpbnQgKilyZXN1bHQgPSBpdmFyLT5i bGtfc3o7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Citz ZGlvX3dyaXRlX2l2YXIoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHdoaWNo LCB1aW50cHRyX3QgdmFsdWUpCit7CisJLyoKKwkgKiBOb25lIGFyZSB3cml0YWJsZSBBVE0K KwkgKi8KKwlyZXR1cm4gKEVJTlZBTCk7Cit9CisKKworCitzdGF0aWMgZGV2aWNlX21ldGhv ZF90IHNkaW9fbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIHNkaW9f cHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBzZGlvX2F0dGFjaCksCisJREVW TUVUSE9EKGRldmljZV9kZXRhY2gsIHNkaW9fZGV0YWNoKSwKKworCS8qIEJ1cyBpbnRlcmZh Y2UgKi8KKwlERVZNRVRIT0QoYnVzX3JlYWRfaXZhciwgc2Rpb19yZWFkX2l2YXIpLAorCURF Vk1FVEhPRChidXNfd3JpdGVfaXZhciwgc2Rpb193cml0ZV9pdmFyKSwKKworCS8qIFNESU8g aW50ZXJmYWNlICovCisJREVWTUVUSE9EKHNkaW9fYWNxdWlyZV9jYXJkLCBzZGlvX2FjcXVp cmVfYnVzKSwKKwlERVZNRVRIT0Qoc2Rpb19yZWxlYXNlX2NhcmQsIHNkaW9fcmVsZWFzZV9i dXMpLAorCURFVk1FVEhPRChzZGlvX3NldF9ibG9ja19zaXplLCBzZGlvX3NldF9ibGtfc3op LAorCisJREVWTUVUSE9EKHNkaW9fZnVuYzBfcmVhZF8xLCBzZGlvX2YwX3JlYWRiKSwKKwlE RVZNRVRIT0Qoc2Rpb19mdW5jMF93cml0ZV8xLCBzZGlvX2YwX3dyaXRlYiksCisJREVWTUVU SE9EKHNkaW9fcmVhZF8xLCBzZGlvX3JlYWRiKSwKKwlERVZNRVRIT0Qoc2Rpb19yZWFkXzIs IHNkaW9fcmVhZHMpLAorCURFVk1FVEhPRChzZGlvX3JlYWRfNCwgc2Rpb19yZWFkbCksCisJ REVWTUVUSE9EKHNkaW9fd3JpdGVfMSwgc2Rpb193cml0ZWIpLAorCURFVk1FVEhPRChzZGlv X3dyaXRlXzIsIHNkaW9fd3JpdGVzKSwKKwlERVZNRVRIT0Qoc2Rpb193cml0ZV80LCBzZGlv X3dyaXRlbCksCisJREVWTUVUSE9EKHNkaW9fcmVhZF9tdWx0aSwgc2Rpb19tZW1jcHlfZnJv bSksCisJREVWTUVUSE9EKHNkaW9fcmVhZF9zdHJlYW1fbXVsdGksIHNkaW9fc3RyZWFtX2Zy b20pLAorCURFVk1FVEhPRChzZGlvX3dyaXRlX211bHRpLCBzZGlvX21lbWNweV90byksCisJ REVWTUVUSE9EKHNkaW9fd3JpdGVfc3RyZWFtX211bHRpLCBzZGlvX3N0cmVhbV90byksCisJ CisvLwlERVZNRVRIT0Qoc2Rpb19zZXR1cF9pbnRyLCBtbWNfc2Rpb19zZXR1cF9pbnRyKSwK Ky8vCURFVk1FVEhPRChzZGlvX3RlYXJkb3duX2ludHIsIG1tY19zZGlvX3RlYXJkb3duX2lu dHIpLAorCisJezAsIDB9LAorfTsKKworc3RhdGljIGRyaXZlcl90IHNkaW9fZHJpdmVyID0g eworCSJzZGlvIiwKKwlzZGlvX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBzZGlvX3NvZnRj KSwKK307CitzdGF0aWMgZGV2Y2xhc3NfdCBzZGlvX2RldmNsYXNzOworCitEUklWRVJfTU9E VUxFKHNkaW8sIG1tYywgc2Rpb19kcml2ZXIsIHNkaW9fZGV2Y2xhc3MsIDAsIDApOwotLS0g L2Rldi9udWxsCTIwMTItMDYtMDEgMTY6NTg6MzQuMDAwMDAwMDAwICswMTAwCisrKyBzZGlv LmgJMjAxMi0wNi0wMSAxNzoyODo0MC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMTEg QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIEJlbiBHcmF5LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogUG9ydGlvbnMg b2YgdGhpcyBzb2Z0d2FyZSBtYXkgaGF2ZSBiZWVuIGRldmVsb3BlZCB3aXRoIHJlZmVyZW5j ZSB0bworICogdGhlIFNEIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbi4gIFRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBtYXkgYXBwbHk6CisgKgorICogVGhlIGZvbGxvd2luZyBjb25kaXRp b25zIGFwcGx5IHRvIHRoZSByZWxlYXNlIG9mIHRoZSBzaW1wbGlmaWVkCisgKiBzcGVjaWZp Y2F0aW9uICgiU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uIikgYnkgdGhlIFNEIENhcmQgQXNz b2NpYXRpb24gYW5kCisgKiB0aGUgU0QgR3JvdXAuIFRoZSBTaW1wbGlmaWVkIFNwZWNpZmlj YXRpb24gaXMgYSBzdWJzZXQgb2YgdGhlIGNvbXBsZXRlIFNECisgKiBTcGVjaWZpY2F0aW9u IHdoaWNoIGlzIG93bmVkIGJ5IHRoZSBTRCBDYXJkIEFzc29jaWF0aW9uIGFuZCB0aGUgU0QK KyAqIEdyb3VwLiBUaGlzIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBpcyBwcm92aWRlZCBv biBhIG5vbi1jb25maWRlbnRpYWwKKyAqIGJhc2lzIHN1YmplY3QgdG8gdGhlIGRpc2NsYWlt ZXJzIGJlbG93LiBBbnkgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBTaW1wbGlmaWVkIFNw ZWNpZmljYXRpb24gbWF5IHJlcXVpcmUgYSBsaWNlbnNlIGZyb20gdGhlIFNEIENhcmQKKyAq IEFzc29jaWF0aW9uLCBTRCBHcm91cCwgU0QtM0MgTExDIG9yIG90aGVyIHRoaXJkIHBhcnRp ZXMuCisgKgorICogRGlzY2xhaW1lcnM6CisgKgorICogVGhlIGluZm9ybWF0aW9uIGNvbnRh aW5lZCBpbiB0aGUgU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uIGlzIHByZXNlbnRlZCBvbmx5 CisgKiBhcyBhIHN0YW5kYXJkIHNwZWNpZmljYXRpb24gZm9yIFNEIENhcmRzIGFuZCBTRCBI b3N0L0FuY2lsbGFyeSBwcm9kdWN0cyBhbmQKKyAqIGlzIHByb3ZpZGVkICJBUy1JUyIgd2l0 aG91dCBhbnkgcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMgb2YgYW55CisgKiBraW5k LiBObyByZXNwb25zaWJpbGl0eSBpcyBhc3N1bWVkIGJ5IHRoZSBTRCBHcm91cCwgU0QtM0Mg TExDIG9yIHRoZSBTRAorICogQ2FyZCBBc3NvY2lhdGlvbiBmb3IgYW55IGRhbWFnZXMsIGFu eSBpbmZyaW5nZW1lbnRzIG9mIHBhdGVudHMgb3Igb3RoZXIKKyAqIHJpZ2h0IG9mIHRoZSBT RCBHcm91cCwgU0QtM0MgTExDLCB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlvbiBvciBhbnkgdGhp cmQKKyAqIHBhcnRpZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSBpdHMgdXNlLiBObyBsaWNl bnNlIGlzIGdyYW50ZWQgYnkKKyAqIGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndp c2UgdW5kZXIgYW55IHBhdGVudCBvciBvdGhlciByaWdodHMgb2YgdGhlCisgKiBTRCBHcm91 cCwgU0QtM0MgTExDLCB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlvbiBvciBhbnkgdGhpcmQgcGFy dHkuIE5vdGhpbmcKKyAqIGhlcmVpbiBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYW4gb2JsaWdh dGlvbiBieSB0aGUgU0QgR3JvdXAsIHRoZSBTRC0zQyBMTEMKKyAqIG9yIHRoZSBTRCBDYXJk IEFzc29jaWF0aW9uIHRvIGRpc2Nsb3NlIG9yIGRpc3RyaWJ1dGUgYW55IHRlY2huaWNhbAor ICogaW5mb3JtYXRpb24sIGtub3ctaG93IG9yIG90aGVyIGNvbmZpZGVudGlhbCBpbmZvcm1h dGlvbiB0byBhbnkgdGhpcmQgcGFydHkuCisgKgorICogIiRGcmVlQlNEJCIKKyAqLworCisj aWZuZGVmIERFVl9NTUNfU0RJT19ICisjZGVmaW5lIERFVl9NTUNfU0RJT19ICisKKworc3Ry dWN0IHNkaW9fc29mdGM7CisKKworaW50CitzZGlvX3J3X2RpcmVjdChzdHJ1Y3Qgc2Rpb19z b2Z0YyAqc2MsIGludCB3ciwgdWludDMyX3QgZm4sIHVpbnQzMl90IGFkciwKKyAgICB1aW50 OF90ICpkYXRhKTsKK2ludAorc2Rpb19yd19leHRlbmRlZChzdHJ1Y3Qgc2Rpb19zb2Z0YyAq c2MsIGludCB3ciwgaW50IGluY3IsIHVpbnQzMl90IGZuLAorICAgIHVpbnQzMl90IGFkciwg dWludDhfdCAqZGF0YXAsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGJsa3MpOworCisKKworCisv KgorICogRGVjb2RlZCBQQyBDYXJkIDE2IGJhc2VkIENhcmQgSW5mb3JtYXRpb24gU3RydWN0 dXJlIChDSVMpLAorICogcGVyIGNhcmQgKGZ1bmN0aW9uIDApIGFuZCBwZXIgZnVuY3Rpb24g KDEgYW5kIGdyZWF0ZXIpLgorICovCitzdHJ1Y3Qgc2Rpb19jaXMgeworCXVpbnQxNl90CSBt YW51ZmFjdHVyZXI7CisjZGVmaW5lIFNESU9fVkVORE9SX0lOVkFMSUQJIDB4ZmZmZgorCXVp bnQxNl90CSBwcm9kdWN0OworI2RlZmluZSBTRElPX1BST0RVQ1RfSU5WQUxJRCAweGZmZmYK KworCXVfY2hhcgkJIGNpczFfbWFqb3I7CisJdV9jaGFyCQkgY2lzMV9taW5vcjsKKworCXVu aW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQxNl90IGJsa19zejsKKwkJCXVpbnQzMl90IG1h eF9zcGQ7CisJCQorCQl9IGZuMDsKKwkKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IHNlcmlh bF9udW07CisJCQl1aW50MTZfdCBtYXhfYmxrX3N6OworCQkJdWludDMyX3Qgc3RhcnR1cF90 aW1lb3V0X21zOworCQkJCisJCQl1aW50MzJfdCBvcF9taW5fcHdyLCBvcF9hdmdfcHdyLCBv cF9tYXhfcHdyOworCQkJdWludDMyX3Qgc2JfbWluX3B3ciwgc2JfYXZnX3B3ciwgc2JfbWF4 X3B3cjsKKwkJCXVpbnQzMl90IGhwX2F2Z19wd3IsIGhwX21heF9wd3I7CisJCQl1aW50MzJf dCBscF9hdmdfcHdyLCBscF9tYXhfcHdyOworCQl9IGZuczsKKwl9IGZ1bmNlOworfTsKKwor aW50CitzZGlvX2Npc19yZWFkKGRldmljZV90IGRldiwgdWludDMyX3QgY2lzcHRyLCBzdHJ1 Y3Qgc2Rpb19jaXMgKmNpcyk7Cit2b2lkCitzZGlvX2Npc19wcmludChkZXZpY2VfdCBkZXYs IHN0cnVjdCBzZGlvX2NpcyAqY2lzKTsKKworCisKKyNlbmRpZgotLS0gL2Rldi9udWxsCTIw MTItMDYtMDEgMTY6NTg6MzQuMDAwMDAwMDAwICswMTAwCisrKyBtbWNpb3JlZy5oCTIwMTIt MDEtMTYgMTE6NDg6MzYuMDAwMDAwMDAwICswMDAwCkBAIC0wLDAgKzEsMTM2IEBACisvKgkk TmV0QlNEOiBzZG1tY19pb3JlZy5oLHYgMS4yIDIwMTAvMTAvMDcgMTI6NDA6MzQga2l5b2hh cmEgRXhwICQJKi8KKy8qCSRPcGVuQlNEOiBzZG1tY19pb3JlZy5oLHYgMS40IDIwMDcvMDYv MDIgMDE6NDg6MzcgdXdlIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYg VXdlIFN0dWVobGVyIDx1d2VAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55 CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwg V0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcg QUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFO WSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg T1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBV U0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRS QUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQg T0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9G IFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZglERVZfTU1DSU9SRUdfSAorI2RlZmlu ZQlERVZfTU1DSU9SRUdfSAorCisvKiBTRElPIGNvbW1hbmRzICovCQkJCS8qIHJlc3BvbnNl IHR5cGUgKi8KKyNkZWZpbmUgU0RfSU9fU0VORF9PUF9DT05ECQk1CS8qIFI0ICovCisjZGVm aW5lIFNEX0lPX1JXX0RJUkVDVAkJCTUyCS8qIFI1ICovCisjZGVmaW5lIFNEX0lPX1JXX0VY VEVOREVECQk1MwkvKiBSNT8gKi8KKworLyogQ01ENTIgYXJndW1lbnRzICovCisjZGVmaW5l IFNEX0FSR19DTUQ1Ml9SRUFECQkoMDw8MzEpCisjZGVmaW5lIFNEX0FSR19DTUQ1Ml9XUklU RQkJKDE8PDMxKQorI2RlZmluZSBTRF9BUkdfQ01ENTJfRlVOQ19TSElGVAkJMjgKKyNkZWZp bmUgU0RfQVJHX0NNRDUyX0ZVTkNfTUFTSwkJMHg3CisjZGVmaW5lIFNEX0FSR19DTUQ1Ml9F WENIQU5HRQkJKDE8PDI3KQorI2RlZmluZSBTRF9BUkdfQ01ENTJfUkVHX1NISUZUCQk5Cisj ZGVmaW5lIFNEX0FSR19DTUQ1Ml9SRUdfTUFTSwkJMHgxZmZmZgorI2RlZmluZSBTRF9BUkdf Q01ENTJfREFUQV9TSElGVAkJMAorI2RlZmluZSBTRF9BUkdfQ01ENTJfREFUQV9NQVNLCQkw eGZmCisjZGVmaW5lIFNEX1I1X0RBVEEocmVzcCkJCSgocmVzcClbMF0gJiAweGZmKQorCisv KiBDTUQ1MyBhcmd1bWVudHMgKi8KKyNkZWZpbmUgU0RfQVJHX0NNRDUzX1JFQUQJCSgwPDwz MSkKKyNkZWZpbmUgU0RfQVJHX0NNRDUzX1dSSVRFCQkoMTw8MzEpCisjZGVmaW5lIFNEX0FS R19DTUQ1M19GVU5DX1NISUZUCQkyOAorI2RlZmluZSBTRF9BUkdfQ01ENTNfRlVOQ19NQVNL CQkweDcKKyNkZWZpbmUgU0RfQVJHX0NNRDUzX0JMT0NLX01PREUJCSgxPDwyNykKKyNkZWZp bmUgU0RfQVJHX0NNRDUzX0lOQ1JFTUVOVAkJKDE8PDI2KQorI2RlZmluZSBTRF9BUkdfQ01E NTNfUkVHX1NISUZUCQk5CisjZGVmaW5lIFNEX0FSR19DTUQ1M19SRUdfTUFTSwkJMHgxZmZm ZgorI2RlZmluZSBTRF9BUkdfQ01ENTNfTEVOR1RIX1NISUZUCTAKKyNkZWZpbmUgU0RfQVJH X0NNRDUzX0xFTkdUSF9NQVNLCTB4MWZmCisjZGVmaW5lIFNEX0FSR19DTUQ1M19MRU5HVEhf TUFYCQk2NCAvKiBYWFggc2hvdWxkIGJlIDUxMT8gKi8KKworLyogNDgtYml0IHJlc3BvbnNl IGRlY29kaW5nICgzMiBiaXRzIHcvbyBDUkMpICovCisjZGVmaW5lIE1NQ19SNChyZXNwKQkJ CSgocmVzcClbMF0pCisjZGVmaW5lIE1NQ19SNShyZXNwKQkJCSgocmVzcClbMF0pCisKKy8q IFNEIFI0IHJlc3BvbnNlIChJTyBPQ1IpICovCisjZGVmaW5lIFNEX0lPX09DUl9NRU1fUkVB RFkJCSgxPDwzMSkKKyNkZWZpbmUgU0RfSU9fT0NSX05VTV9GVU5DVElPTlMob2NyKQkoKChv Y3IpID4+IDI4KSAmIDB4NykKKyNkZWZpbmUgU0RfSU9fT0NSX01FTV9QUkVTRU5UCQkoMTw8 MjcpCisjZGVmaW5lIFNEX0lPX09DUl9NQVNLCQkJMHgwMGZmZmZmMAorCisvKiBDYXJkIENv bW1vbiBDb250cm9sIFJlZ2lzdGVycyAoQ0NDUikgKi8KKyNkZWZpbmUgU0RfSU9fQ0NDUl9T VEFSVAkJMHgwMDAwMAorI2RlZmluZSBTRF9JT19DQ0NSX1NJWkUJCQkweDEwMAorI2RlZmlu ZSBTRF9JT19DQ0NSX0NDQ1JfU0RJT19SRVYJMHgwMAorI2RlZmluZSBTRF9JT19DQ0NSX0ND Q1JfUkVWKHIpCQkoKHIpICYgMHhmKQorI2RlZmluZSAgQ0NDUl9DQ0NSX1JFVl8xXzAwCQkw CisjZGVmaW5lICBDQ0NSX0NDQ1JfUkVWXzFfMTAJCTEKKyNkZWZpbmUgIENDQ1JfQ0NDUl9S RVZfMV8yMAkJMgorI2RlZmluZSBTRF9JT19DQ0NSX1NESU9fUkVWKHIpCQkoKChyKSA+PiA0 KSAmIDB4ZikKKyNkZWZpbmUgIENDQ1JfU0RJT19SRVZfMV8wMAkJMAorI2RlZmluZSAgQ0ND Ul9TRElPX1JFVl8xXzEwCQkxCisjZGVmaW5lICBDQ0NSX1NESU9fUkVWXzFfMjAJCTIJLyog KHVucmVsZWFzZWQpICovCisjZGVmaW5lICBDQ0NSX1NESU9fUkVWXzJfMDAJCTMKKyNkZWZp bmUgU0RfSU9fQ0NDUl9TUEVDX1JFVgkJMHgwMQorI2RlZmluZSBTRF9JT19DQ0NSX1NEX1BI WVNfU1BFQ19WRVIocikJKChyKSAmIDB4ZikKKyNkZWZpbmUgIENDQ1JfU0RfUEhZU19TUEVD X1ZFUl8xXzAxCTAKKyNkZWZpbmUgIENDQ1JfU0RfUEhZU19TUEVDX1ZFUl8xXzEwCTEKKyNk ZWZpbmUgIENDQ1JfU0RfUEhZU19TUEVDX1ZFUl8yXzAwCTIKKyNkZWZpbmUgU0RfSU9fQ0ND Ul9GTl9FTkFCTEUJCTB4MDIKKyNkZWZpbmUgU0RfSU9fQ0NDUl9GTl9JT1JFQURZCQkweDAz CisjZGVmaW5lIFNEX0lPX0NDQ1JfRk5fSU5URU4JCTB4MDQKKyNkZWZpbmUgIENDQ1JfSU5U RU5fSU5UTQkJKDE8PDApCisjZGVmaW5lIFNEX0lPX0NDQ1JfRk5fSU5UUEVORElORwkweDA1 CisjZGVmaW5lIFNEX0lPX0NDQ1JfQ1RMCQkJMHgwNgorI2RlZmluZSAgQ0NDUl9DVExfUkVT CQkJKDE8PDMpCisjZGVmaW5lIFNEX0lPX0NDQ1JfQlVTX1dJRFRICQkweDA3CisjZGVmaW5l ICBDQ0NSX0JVU19XSURUSF80CQkoMjw8MCkKKyNkZWZpbmUgIENDQ1JfQlVTX1dJRFRIXzEJ CSgwPDwwKQorI2RlZmluZSAgQ0NDUl9CVVNfV0lEVEhfTUFTSwkoMzw8MCkKKyNkZWZpbmUg U0RfSU9fQ0NDUl9DQVBBQklMSVRZCQkweDA4CisjZGVmaW5lICBDQ0NSX0NBUFNfU0RDCQkJ KDE8PDApCisjZGVmaW5lICBDQ0NSX0NBUFNfU01CCQkJKDE8PDEpIC8qIE11bHRpLUJsb2Nr IHN1cHBvcnQgKi8KKyNkZWZpbmUgIENDQ1JfQ0FQU19TUkIJCQkoMTw8MikgLyogUmVhZCBX YWl0IHN1cHBvcnQgKi8KKyNkZWZpbmUgIENDQ1JfQ0FQU19TQlMJCQkoMTw8MykgLyogU3Vz cGVuZC9SZXN1bWUgc3VwcG9ydCAqLworI2RlZmluZSAgQ0NDUl9DQVBTX1M0TUkJCQkoMTw8 NCkgLyogaW50ciBzdXBwb3J0IGluIDQtYml0IG1vZGUgKi8KKyNkZWZpbmUgIENDQ1JfQ0FQ U19FNE1JCQkJKDE8PDUpIC8qIGVuYWJsZSBpbnRyIGluIDQtYml0IG1vZGUgKi8KKyNkZWZp bmUgIENDQ1JfQ0FQU19MU0MJCQkoMTw8NikgLyogTG93IHNwZWVkIGNhcmQgKi8KKyNkZWZp bmUgIENDQ1JfQ0FQU180QkxTCQkJKDE8PDcpIC8qIDQtYml0IHN1cHBvcnQgZm9yIGxvdyBz cGVlZCAqLworI2RlZmluZSBTRF9JT19DQ0NSX0NJU1BUUgkJMHgwOSAvKiBYWFggOS0xMCwg MTAtMTEsIG9yIDktMTIgKi8KKyNkZWZpbmUgU0RfSU9fQ0NDUl9CVVNfU1VTUEVORAkJMHgw YworI2RlZmluZSBTRF9JT19DQ0NSX0ZVTkNfU0VMRUNUCQkweDBkCisjZGVmaW5lICBDQ0NS X0ZVTkNfRlMocikJCSgocikgJiAweGYpCisjZGVmaW5lICBDQ0NSX0ZVTkNfRlNfRk4oZm4p CQkoKGZuKSAmIDB4NykKKyNkZWZpbmUgIENDQ1JfRlVOQ19GU19NRU0JCTgKKyNkZWZpbmUg U0RfSU9fQ0NDUl9GTl9FWEVDX0ZMRwkJMHgwZQorI2RlZmluZSBTRF9JT19DQ0NSX0ZOX1JF QURZX0ZMRwkJMHgwZgorI2RlZmluZSBTRF9JT19DQ0NSX0ZOMF9CTEtTSVoJCTB4MTAgLyog MHgxMC0weDExICovCisjZGVmaW5lIFNEX0lPX0NDQ1JfUE9XRVJfQ1RMCQkweDEyCisjZGVm aW5lIFNEX0lPX0NDQ1JfSElHSF9TUEVFRAkJMHgxMworI2RlZmluZSAgQ0NDUl9ISUdIX1NQ RUVEX1NIUwkJKDE8PDApIC8qIFN1cHBvcnQgSGlnaC1TcGVlZCAqLworI2RlZmluZSAgQ0ND Ul9ISUdIX1NQRUVEX0VIUwkJKDE8PDEpIC8qIEVuYWJsZSBIaWdoLVNwZWVkICovCisKKy8q IEZ1bmN0aW9uIEJhc2ljIFJlZ2lzdGVycyAoRkJSKSAqLworI2RlZmluZSBTRF9JT19GQlJf U1RBUlQJCQkweDAwMTAwCisjZGVmaW5lIFNEX0lPX0ZCUl9TSVpFCQkJMHgxMDAKKyNkZWZp bmUgU0RfSU9fRkJSKGZ1bmMpCSgoKChmdW5jKSAtIDEpICogU0RfSU9fRkJSX1NJWkUpICsg U0RfSU9fRkJSX1NUQVJUKQorI2RlZmluZSAgRkJSX1NURF9GVU5DX0lGX0NPREUodikJKCh2 KSAmIDB4MGYpCisKKy8qIENhcmQgSW5mb3JtYXRpb24gU3RydWN0dXJlIChDSVMpICovCisj ZGVmaW5lIFNEX0lPX0NJU19TVEFSVAkJCTB4MDEwMDAKKyNkZWZpbmUgU0RfSU9fQ0lTX1NJ WkUJCQkweDE3MDAwCisKKy8qIFNESU8gU3RhbmRhcmQgRnVuY3Rpb24gSW50ZXJmYWNlIGNv ZGUgKi8KKyNkZWZpbmUgU0RfSU9fU0ZJQ19OT19TVEFOREFSRAkJMHgwCisjZGVmaW5lIFNE X0lPX1NGSUNfVUFSVAkJCTB4MQorI2RlZmluZSBTRF9JT19TRklDX1RZUEVBX0JMVUVUT09U SAkweDIJLyogVHlwZS1BIEJsdWV0b290aCAqLworI2RlZmluZSBTRF9JT19TRklDX1RZUEVC X0JMVUVUT09USAkweDMJLyogVHlwZS1CIEJsdWV0b290aCAqLworI2RlZmluZSBTRF9JT19T RklDX0dQUwkJCTB4NAorI2RlZmluZSBTRF9JT19TRklDX0NBTUVSQQkJMHg1CisjZGVmaW5l IFNEX0lPX1NGSUNfUEhTCQkJMHg2CisjZGVmaW5lIFNEX0lPX1NGSUNfV0xBTgkJCTB4Nwor I2RlZmluZSBTRF9JT19TRklDX0FUQQkJCTB4OAkvKiBFbWJlZGRlZCBTRElPLUFUQSAqLwor CisjZW5kaWYJLyogREVWX01NQ1JFR19IICovCi0tLSAvZGV2L251bGwJMjAxMi0wNi0wMSAx Njo1ODozNC4wMDAwMDAwMDAgKzAxMDAKKysrIHNkaW92YXIuaAkyMDEyLTA2LTAxIDE3OjI4 OjI5LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzNiBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTEgQmVuIEdyYXkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIG1h eSBoYXZlIGJlZW4gZGV2ZWxvcGVkIHdpdGggcmVmZXJlbmNlIHRvCisgKiB0aGUgU0QgU2lt cGxpZmllZCBTcGVjaWZpY2F0aW9uLiAgVGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIG1heSBh cHBseToKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkgdG8gdGhlIHJl bGVhc2Ugb2YgdGhlIHNpbXBsaWZpZWQKKyAqIHNwZWNpZmljYXRpb24gKCJTaW1wbGlmaWVk IFNwZWNpZmljYXRpb24iKSBieSB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlvbiBhbmQKKyAqIHRo ZSBTRCBHcm91cC4gVGhlIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBpcyBhIHN1YnNldCBv ZiB0aGUgY29tcGxldGUgU0QKKyAqIFNwZWNpZmljYXRpb24gd2hpY2ggaXMgb3duZWQgYnkg dGhlIFNEIENhcmQgQXNzb2NpYXRpb24gYW5kIHRoZSBTRAorICogR3JvdXAuIFRoaXMgU2lt cGxpZmllZCBTcGVjaWZpY2F0aW9uIGlzIHByb3ZpZGVkIG9uIGEgbm9uLWNvbmZpZGVudGlh bAorICogYmFzaXMgc3ViamVjdCB0byB0aGUgZGlzY2xhaW1lcnMgYmVsb3cuIEFueSBpbXBs ZW1lbnRhdGlvbiBvZiB0aGUKKyAqIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBtYXkgcmVx dWlyZSBhIGxpY2Vuc2UgZnJvbSB0aGUgU0QgQ2FyZAorICogQXNzb2NpYXRpb24sIFNEIEdy b3VwLCBTRC0zQyBMTEMgb3Igb3RoZXIgdGhpcmQgcGFydGllcy4KKyAqCisgKiBEaXNjbGFp bWVyczoKKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBTaW1wbGlm aWVkIFNwZWNpZmljYXRpb24gaXMgcHJlc2VudGVkIG9ubHkKKyAqIGFzIGEgc3RhbmRhcmQg c3BlY2lmaWNhdGlvbiBmb3IgU0QgQ2FyZHMgYW5kIFNEIEhvc3QvQW5jaWxsYXJ5IHByb2R1 Y3RzIGFuZAorICogaXMgcHJvdmlkZWQgIkFTLUlTIiB3aXRob3V0IGFueSByZXByZXNlbnRh dGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkKKyAqIGtpbmQuIE5vIHJlc3BvbnNpYmlsaXR5 IGlzIGFzc3VtZWQgYnkgdGhlIFNEIEdyb3VwLCBTRC0zQyBMTEMgb3IgdGhlIFNECisgKiBD YXJkIEFzc29jaWF0aW9uIGZvciBhbnkgZGFtYWdlcywgYW55IGluZnJpbmdlbWVudHMgb2Yg cGF0ZW50cyBvciBvdGhlcgorICogcmlnaHQgb2YgdGhlIFNEIEdyb3VwLCBTRC0zQyBMTEMs IHRoZSBTRCBDYXJkIEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZAorICogcGFydGllcywgd2hp Y2ggbWF5IHJlc3VsdCBmcm9tIGl0cyB1c2UuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCBieQor ICogaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50 IG9yIG90aGVyIHJpZ2h0cyBvZiB0aGUKKyAqIFNEIEdyb3VwLCBTRC0zQyBMTEMsIHRoZSBT RCBDYXJkIEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZCBwYXJ0eS4gTm90aGluZworICogaGVy ZWluIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhbiBvYmxpZ2F0aW9uIGJ5IHRoZSBTRCBHcm91 cCwgdGhlIFNELTNDIExMQworICogb3IgdGhlIFNEIENhcmQgQXNzb2NpYXRpb24gdG8gZGlz Y2xvc2Ugb3IgZGlzdHJpYnV0ZSBhbnkgdGVjaG5pY2FsCisgKiBpbmZvcm1hdGlvbiwga25v dy1ob3cgb3Igb3RoZXIgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHRvIGFueSB0aGlyZCBw YXJ0eS4KKyAqCisgKiAiJEZyZWVCU0QkIgorICovCisKKyNpZm5kZWYgREVWX01NQ19TRElP VkFSX0gKKyNkZWZpbmUgREVWX01NQ19TRElPVkFSX0gKKworI2luY2x1ZGUgPGRldi9tbWMv YnJpZGdlLmg+CisKK2VudW0gc2Rpb19jYXJkX2l2YXJzIHsKKwlTRElPX0lWQVJfVkVORE9S LAorCVNESU9fSVZBUl9QUk9EVUNULAorCVNESU9fSVZBUl9GVU5DVElPTl9OVU1CRVIsCisJ U0RJT19JVkFSX0JMT0NLX1NJWkUsCisvLyAgICBTRElPX0lWQVJfLAorfTsKKworLyoKKyAq IFNpbXBsaWZpZWQgYWNjZXNzb3JzIGZvciBwY2kgZGV2aWNlcworICovCisjZGVmaW5lIFNE SU9fQUNDRVNTT1IodmFyLCBpdmFyLCB0eXBlKQlcCisJX19CVVNfQUNDRVNTT1Ioc2Rpbywg dmFyLCBTRElPLCBpdmFyLCB0eXBlKQorCitTRElPX0FDQ0VTU09SKHZlbmRvciwgVkVORE9S LCB1bnNpZ25lZCBpbnQpCitTRElPX0FDQ0VTU09SKHByb2R1Y3QsIFBST0RVQ1QsIHVuc2ln bmVkIGludCkKK1NESU9fQUNDRVNTT1IoZnVuY3Rpb25fbnVtYmVyLCBGVU5DVElPTl9OVU1C RVIsIHVuc2lnbmVkIGludCkKK1NESU9fQUNDRVNTT1IoYmxvY2tfc2l6ZSwgQkxPQ0tfU0la RSwgdW5zaWduZWQgaW50KQorCisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMKKyAq LworI2luY2x1ZGUgInNkaW9faWYuaCIKKworc3RhdGljIGlubGluZSBpbnQKK3NkaW9fcmVh ZF8xKGRldmljZV90IGRldiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50OF90ICp2YWwpCit7CisJ cmV0dXJuIChTRElPX1JFQURfTVVMVEkoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgZGV2LCBv ZmZzZXQsIHZhbCwgMSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2Rpb193cml0ZV8x KGRldmljZV90IGRldiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50OF90IHZhbCkKK3sKKwlyZXR1 cm4gKFNESU9fV1JJVEVfTVVMVEkoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgZGV2LCBvZmZz ZXQsICZ2YWwsIDEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3NkaW9fcmVhZF8yKGRl dmljZV90IGRldiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MTZfdCAqdmFsKQoreworCXJldHVy biAoU0RJT19SRUFEX01VTFRJKGRldmljZV9nZXRfcGFyZW50KGRldiksIGRldiwgb2Zmc2V0 LCAodWludDhfdCopdmFsLCAyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzZGlvX3dy aXRlXzIoZGV2aWNlX3QgZGV2LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQxNl90IHZhbCkKK3sK KwlyZXR1cm4gKFNESU9fV1JJVEVfTVVMVEkoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgZGV2 LCBvZmZzZXQsICh1aW50OF90KikmdmFsLCAyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 CitzZGlvX3JlYWRfNChkZXZpY2VfdCBkZXYsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg KnZhbCkKK3sKKwlyZXR1cm4gKFNESU9fUkVBRF9NVUxUSShkZXZpY2VfZ2V0X3BhcmVudChk ZXYpLCBkZXYsIG9mZnNldCwgKHVpbnQ4X3QqKXZhbCwgNCkpOworfQorCitzdGF0aWMgaW5s aW5lIGludAorc2Rpb193cml0ZV80KGRldmljZV90IGRldiwgdWludDMyX3Qgb2Zmc2V0LCB1 aW50MzJfdCB2YWwpCit7CisJcmV0dXJuIChTRElPX1dSSVRFX01VTFRJKGRldmljZV9nZXRf cGFyZW50KGRldiksIGRldiwgb2Zmc2V0LCAodWludDhfdCopJnZhbCwgNCkpOworfQorCisK K3N0YXRpYyBpbmxpbmUgaW50CitzZGlvX2Z1bmMwX3JlYWRfMShkZXZpY2VfdCBkZXYsIHVp bnQzMl90IG9mZnNldCwgdWludDhfdCAqdmFsKQoreworCXJldHVybiAoU0RJT19GVU5DMF9S RUFEXzEoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgb2Zmc2V0LCB2YWwpKTsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK3NkaW9fZnVuYzBfd3JpdGVfMShkZXZpY2VfdCBkZXYsIHVpbnQz Ml90IG9mZnNldCwgdWludDhfdCB2YWwpCit7CisJcmV0dXJuIChTRElPX0ZVTkMwX1dSSVRF XzEoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgb2Zmc2V0LCB2YWwpKTsKK30KKworCisKKwor I2VuZGlmIC8qIERFVl9NTUNfTU1DVkFSX0ggKi8KLS0tIC9kZXYvbnVsbAkyMDEyLTA2LTAx IDE2OjU4OjM0LjAwMDAwMDAwMCArMDEwMAorKysgc2Rpb19pZi5tCTIwMTItMDUtMDcgMjI6 Mjc6MzIuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjMyIEBACisjLQorIyBDb3B5cmln aHQgKGMpIDIwMTIgQmVuIEdyYXkKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKyMgUG9ydGlvbnMgb2Yg dGhpcyBzb2Z0d2FyZSBtYXkgaGF2ZSBiZWVuIGRldmVsb3BlZCB3aXRoIHJlZmVyZW5jZSB0 bworIyB0aGUgU0QgU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uLiAgVGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIG1heSBhcHBseToKKyMKKyMgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFw cGx5IHRvIHRoZSByZWxlYXNlIG9mIHRoZSBzaW1wbGlmaWVkCisjIHNwZWNpZmljYXRpb24g KCJTaW1wbGlmaWVkIFNwZWNpZmljYXRpb24iKSBieSB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlv biBhbmQKKyMgdGhlIFNEIEdyb3VwLiBUaGUgU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uIGlz IGEgc3Vic2V0IG9mIHRoZSBjb21wbGV0ZSBTRAorIyBTcGVjaWZpY2F0aW9uIHdoaWNoIGlz IG93bmVkIGJ5IHRoZSBTRCBDYXJkIEFzc29jaWF0aW9uIGFuZCB0aGUgU0QKKyMgR3JvdXAu IFRoaXMgU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uIGlzIHByb3ZpZGVkIG9uIGEgbm9uLWNv bmZpZGVudGlhbAorIyBiYXNpcyBzdWJqZWN0IHRvIHRoZSBkaXNjbGFpbWVycyBiZWxvdy4g QW55IGltcGxlbWVudGF0aW9uIG9mIHRoZQorIyBTaW1wbGlmaWVkIFNwZWNpZmljYXRpb24g bWF5IHJlcXVpcmUgYSBsaWNlbnNlIGZyb20gdGhlIFNEIENhcmQKKyMgQXNzb2NpYXRpb24s IFNEIEdyb3VwLCBTRC0zQyBMTEMgb3Igb3RoZXIgdGhpcmQgcGFydGllcy4KKyMKKyMgRGlz Y2xhaW1lcnM6CisjCisjIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIFNpbXBs aWZpZWQgU3BlY2lmaWNhdGlvbiBpcyBwcmVzZW50ZWQgb25seQorIyBhcyBhIHN0YW5kYXJk IHNwZWNpZmljYXRpb24gZm9yIFNEIENhcmRzIGFuZCBTRCBIb3N0L0FuY2lsbGFyeSBwcm9k dWN0cyBhbmQKKyMgaXMgcHJvdmlkZWQgIkFTLUlTIiB3aXRob3V0IGFueSByZXByZXNlbnRh dGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkKKyMga2luZC4gTm8gcmVzcG9uc2liaWxpdHkg aXMgYXNzdW1lZCBieSB0aGUgU0QgR3JvdXAsIFNELTNDIExMQyBvciB0aGUgU0QKKyMgQ2Fy ZCBBc3NvY2lhdGlvbiBmb3IgYW55IGRhbWFnZXMsIGFueSBpbmZyaW5nZW1lbnRzIG9mIHBh dGVudHMgb3Igb3RoZXIKKyMgcmlnaHQgb2YgdGhlIFNEIEdyb3VwLCBTRC0zQyBMTEMsIHRo ZSBTRCBDYXJkIEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZAorIyBwYXJ0aWVzLCB3aGljaCBt YXkgcmVzdWx0IGZyb20gaXRzIHVzZS4gTm8gbGljZW5zZSBpcyBncmFudGVkIGJ5CisjIGlt cGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudCBvciBv dGhlciByaWdodHMgb2YgdGhlCisjIFNEIEdyb3VwLCBTRC0zQyBMTEMsIHRoZSBTRCBDYXJk IEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZCBwYXJ0eS4gTm90aGluZworIyBoZXJlaW4gc2hh bGwgYmUgY29uc3RydWVkIGFzIGFuIG9ibGlnYXRpb24gYnkgdGhlIFNEIEdyb3VwLCB0aGUg U0QtM0MgTExDCisjIG9yIHRoZSBTRCBDYXJkIEFzc29jaWF0aW9uIHRvIGRpc2Nsb3NlIG9y IGRpc3RyaWJ1dGUgYW55IHRlY2huaWNhbAorIyBpbmZvcm1hdGlvbiwga25vdy1ob3cgb3Ig b3RoZXIgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHRvIGFueSB0aGlyZCBwYXJ0eS4KKyMK KyMgJEZyZWVCU0QkCisjCisKKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8ZGV2 L21tYy9tbWNyZWcuaD4KKyNpbmNsdWRlIDxkZXYvbW1jL2JyaWRnZS5oPgorCisjCisjIFRo aXMgaXMgdGhlIHNldCBvZiBjYWxsYmFja3MgdGhhdCBzZGlvIGNhcmQgZHJpdmVycyBjYWxs IHRvIG1ha2UgcmVxdWVzdHMuCisjCisKK0lOVEVSRkFDRSBzZGlvOworCisjCisjIENsYWlt IHRoZSBjdXJyZW50IGNhcmQsIGJsb2NraW5nIHRoZSBjdXJyZW50IHRocmVhZCB1bnRpbCB0 aGUgaG9zdAorIyBpcyBubyBsb25nZXIgYnVzeS4KKyMKK01FVEhPRCBpbnQgYWNxdWlyZV9j YXJkIHsKKwlkZXZpY2VfdAljYXJkZGV2OworCWRldmljZV90CXJlcWRldjsKK30KKworIwor IyBSZWxlYXNlIHRoZSBjdXJyZW50IGNhcmQuCisjCitNRVRIT0QgaW50IHJlbGVhc2VfY2Fy ZCB7CisJZGV2aWNlX3QJY2FyZGRldjsKKwlkZXZpY2VfdAlyZXFkZXY7Cit9CisKKworIwor IyBSZWxlYXNlIHRoZSBjdXJyZW50IGNhcmQuCisjCitNRVRIT0QgaW50IHNldF9ibG9ja19z aXplIHsKKwlkZXZpY2VfdAljYXJkZGV2OworCWRldmljZV90CXJlcWRldjsKKwl1aW50MTZf dAlzaXplOworfQorCisKKyMKKyMgUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gYSByZWdpc3Rl ciBpbiBmdW5jdGlvbiAwIGFyZWEgb24gdGhlIFNESU8gY2FyZC4KKyMKK01FVEhPRCBpbnQg ZnVuYzBfcmVhZF8xIHsKKwlkZXZpY2VfdAlicmRldjsKKwl1X2ludAkJcmVnOworCXVpbnQ4 X3QJCSp2YWw7Cit9OworCisjCisjIFdyaXRlIGEgc2luZ2xlIGJ5dGUgdG8gYSByZWdpc3Rl ciBpbiBmdW5jdGlvbiAwIGFyZWEgb24gdGhlIFNESU8gY2FyZC4KKyMKK01FVEhPRCBpbnQg ZnVuYzBfd3JpdGVfMSB7CisJZGV2aWNlX3QJYnJkZXY7CisJdV9pbnQJCXJlZzsKKwl1aW50 OF90CQl2YWw7Cit9OworCisKKworCisjCisjIFJlYWQgYSBzaW5nbGUgYnl0ZSBmcm9tIGEg cmVnaXN0ZXIgb24gdGhlIFNESU8gY2FyZC4KKyMKK01FVEhPRCBpbnQgcmVhZF8xIHsKKwlk ZXZpY2VfdAlicmRldjsKKwlkZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJCXJlZzsKKwl1aW50 OF90CQkqdmFsOworfTsKKworTUVUSE9EIGludCByZWFkXzIgeworCWRldmljZV90CWJyZGV2 OworCWRldmljZV90CXJlcWRldjsKKwl1X2ludAkJcmVnOworCXVpbnQxNl90CSp2YWw7Cit9 OworCitNRVRIT0QgaW50IHJlYWRfNCB7CisJZGV2aWNlX3QJYnJkZXY7CisJZGV2aWNlX3QJ cmVxZGV2OworCXVfaW50CQlyZWc7CisJdWludDMyX3QJKnZhbDsKK307CisKKyMKKyMgV3Jp dGUgYSBzaW5nbGUgYnl0ZSBmcm9tIGEgcmVnaXN0ZXIgb24gdGhlIFNESU8gY2FyZC4KKyMK K01FVEhPRCBpbnQgd3JpdGVfMSB7CisJZGV2aWNlX3QJYnJkZXY7CisJZGV2aWNlX3QJcmVx ZGV2OworCXVfaW50CQlyZWc7CisJdWludDhfdAkJdmFsOworfTsKKworTUVUSE9EIGludCB3 cml0ZV8yIHsKKwlkZXZpY2VfdAlicmRldjsKKwlkZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJ CXJlZzsKKwl1aW50MTZfdAkJdmFsOworfTsKKworTUVUSE9EIGludCB3cml0ZV80IHsKKwlk ZXZpY2VfdAlicmRldjsKKwlkZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJCXJlZzsKKwl1aW50 MzJfdAl2YWw7Cit9OworCisKKworIworIyBSZWFkIG11bHRpcGxlIGJ5dGVzIGZyb20gdGhl IFNESU8gY2FyZCdzIHJlZ2lzdGVycworIworTUVUSE9EIGludCByZWFkX211bHRpIHsKKwlk ZXZpY2VfdAlicmRldjsKKwlkZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJCXJlZzsKKwl1X2No YXIJCSpkYXRhcDsKKwlzaXplX3QJCWxlbjsKK307CisKKyMKKyMgUmVhZHMgb25lIG9yIG1v cmUgYnl0ZXMgZnJvbSBhIGZpZm8gdHlwZSBkZXZpY2UgKGRvZXNuJ3QgaW5jcmVtZW50Cisj IHRoZSBhZGRyZXNzIG9uIHJlYWQpCisjCitNRVRIT0QgaW50IHJlYWRfc3RyZWFtX211bHRp IHsKKwlkZXZpY2VfdAlicmRldjsKKwlkZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJCXJlZzsK Kwl1X2NoYXIJCSpkYXRhcDsKKwlzaXplX3QJCWxlbjsKK307CisKKyMKKyMgV3JpdGUgbXVs dGlwbGUgYnl0ZXMgdG8gdGhlIFNESU8gY2FyZCdzIHJlZ2lzdGVycworIworTUVUSE9EIGlu dCB3cml0ZV9tdWx0aSB7CisJZGV2aWNlX3QJYnJkZXY7CisJZGV2aWNlX3QJcmVxZGV2Owor CXVfaW50CQlyZWc7CisJdV9jaGFyCQkqZGF0YXA7CisJc2l6ZV90CQlsZW47Cit9OworCisj CisjIFdyaXRlcyBvbmUgb3IgbW9yZSBieXRlcyBpbnRvIGEgZmlmbyB0eXBlIGRldmljZSAo ZG9lc24ndCBpbmNyZW1lbnQKKyMgdGhlIGFkZHJlc3MgYWZ0ZXIgZWFjaCB3cml0ZSkKKyMK K01FVEhPRCBpbnQgd3JpdGVfc3RyZWFtX211bHRpIHsKKwlkZXZpY2VfdAlicmRldjsKKwlk ZXZpY2VfdAlyZXFkZXY7CisJdV9pbnQJCXJlZzsKKwl1X2NoYXIJCSpkYXRhcDsKKwlzaXpl X3QJCWxlbjsKK307CisKKworCisjCisjIEFjdGl2YXRlIGFuZCBpbnN0YWxsIGFuIGludGVy cnVwdCBoYW5kbGVyCisjCitNRVRIT0QgaW50IHNldHVwX2ludHIgeworCWRldmljZV90CWJy ZGV2OworCWRldmljZV90CXJlcWRldjsKKwlkcml2ZXJfaW50cl90CWZ1bjsKK307CisKKyMK KyMgQWN0aXZhdGUgYW5kIGluc3RhbGwgYW4gaW50ZXJydXB0IGhhbmRsZXIKKyMKK01FVEhP RCBpbnQgdGVhcmRvd25faW50ciB7CisJZGV2aWNlX3QJYnJkZXY7CisJZGV2aWNlX3QJcmVx ZGV2OworfTsKKworCisKKwotLS0gL2Rldi9udWxsCTIwMTItMDYtMDEgMTY6NTg6MzQuMDAw MDAwMDAwICswMTAwCisrKyBzZGlvX2Npcy5jCTIwMTItMDEtMjYgMTc6MzU6MjQuMDAwMDAw MDAwICswMDAwCkBAIC0wLDAgKzEsMjcxIEBACisvKiAkRnJlZUJTRCQgKi8KKy8qCSROZXRC U0Q6IHNkbW1jX2Npcy5jLHYgMS4zIDIwMTAvMTAvMDcgMTY6MjY6Mzcga2l5b2hhcmEgRXhw ICQJKi8KKy8qCSRPcGVuQlNEOiBzZG1tY19jaXMuYyx2IDEuMSAyMDA2LzA2LzAxIDIxOjUz OjQxIHV3ZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFV3ZSBTdHVl aGxlciA8dXdlQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVy cG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0 aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJ RVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBM SUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lB TCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBE QU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRB IE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNP RlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl ZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0 bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2lu Y2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUg PHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lz L211dGV4Lmg+CisKKyNpbmNsdWRlIDxkZXYvcGNjYXJkL3BjY2FyZF9jaXMuaD4KKyNpbmNs dWRlIDxkZXYvbW1jL21tY3JlZy5oPgorI2luY2x1ZGUgPGRldi9tbWMvbW1jaW9yZWcuaD4K KyNpbmNsdWRlIDxkZXYvbW1jL3NkaW8uaD4KKworCisKKyNkZWZpbmUgU0RNTUNDSVNERUJV RworCisjaWZkZWYgU0RNTUNDSVNERUJVRworI2RlZmluZSBEUFJJTlRGKHMpCXByaW50ZiBz CisjZWxzZQorI2RlZmluZSBEUFJJTlRGKHMpCS8qKi8KKyNlbmRpZgorCisKKworc3RhdGlj IHVpbnQ4X3QKK3NkaW9fY2lzX3JlYWRiKGRldmljZV90IGRldiwgdWludDMyX3QgYWRyKQor eworCXN0cnVjdCBzZGlvX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1 aW50OF90IHZhbDsKKworCWlmIChzZGlvX3J3X2RpcmVjdChzYywgMCwgMCwgYWRyLCAmdmFs KSAhPSBNTUNfRVJSX05PTkUpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTRElPIHJlYWQg ZmFpbGVkIVxuIik7CisJCXJldHVybiAweGZmOworCX0KKwkKKwlyZXR1cm4gdmFsOworfQor CisKK3N0YXRpYyB2b2lkCitkZWNvZGVfZnVuY2VfY29tbW9uKGRldmljZV90IGRldiwgc3Ry dWN0IHNkaW9fY2lzICpjaXMsIGludCB0cGxsZW4sCisgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IHJlZykKK3sKKwlzdGF0aWMgY29uc3QgaW50IHNwZWVkX3ZhbFtdID0KKwkgICAg eyAwLCAxMCwgMTIsIDEzLCAxNSwgMjAsIDI1LCAzMCwgMzUsIDQwLCA0NSwgNTAsIDU1LCA2 MCwgNzAsIDgwIH07CisJc3RhdGljIGNvbnN0IGludCBzcGVlZF91bml0W10gPSB7IDEwLCAx MDAsIDEwMDAsIDEwMDAwLCB9OworCXVpbnQ4X3QgbWF4X3RyYW5fc3BlZWQ7CisKKwlpZiAo dHBsbGVuIDwgNCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNJU1RQTF9GVU5DRShjb21t b24pIHRvbyBzaG9ydFxuIik7CisJCXJldHVybjsKKwl9CisKKwljaXMtPmZ1bmNlLmZuMC5i bGtfc3ogPSBzZGlvX2Npc19yZWFkYihkZXYsIHJlZysrKTsKKwljaXMtPmZ1bmNlLmZuMC5i bGtfc3ogfD0gc2Rpb19jaXNfcmVhZGIoZGV2LCByZWcrKykgPDwgODsKKwltYXhfdHJhbl9z cGVlZCA9IHNkaW9fY2lzX3JlYWRiKGRldiwgcmVnKyspOworCWNpcy0+ZnVuY2UuZm4wLm1h eF9zcGQgPQorCSAgICBzcGVlZF92YWxbbWF4X3RyYW5fc3BlZWQgPj4gM10gKiBzcGVlZF91 bml0W21heF90cmFuX3NwZWVkICYgN107CisKKwlEUFJJTlRGKAorCSAgICAoIkNJU1RQTF9G VU5DRTogRk4wX0JMS19TSVpFPTB4JXgsIE1BWF9UUkFOX1NQRUVEPTB4JXgoJWRrSHopXG4i LAorCSAgICBjaXMtPmZ1bmNlLmZuMC5ibGtfc3osIG1heF90cmFuX3NwZWVkLCBjaXMtPmZ1 bmNlLmZuMC5tYXhfc3BkKSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWNvZGVfZnVuY2VfZnVu Y3Rpb24oZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qgc2Rpb19jaXMgKmNpcywKKwkJICAgICAgaW50 IHRwbGxlbiwgdWludDMyX3QgcmVnKQoreworCWludCBzZGlveF9jY2NyeCwgc2Rpb3g7CisK KwlzZGlveF9jY2NyeCA9IHNkaW9fY2lzX3JlYWRiKGRldiwgU0RfSU9fQ0NDUl9DQ0NSX1NE SU9fUkVWKTsKKwlzZGlveCA9IFNEX0lPX0NDQ1JfU0RJT19SRVYoc2Rpb3hfY2NjcngpOwor CisJaWYgKHNkaW94ID09IENDQ1JfU0RJT19SRVZfMV8wMCAmJiB0cGxsZW4gPCAweDFjKSB7 CisJCWRldmljZV9wcmludGYoZGV2LAorCQkgICAgIkNJU1RQTF9GVU5DRShmdW5jdGlvbikg dG9vIHNob3J0ICh2MS4wMClcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChzZGlveCAh PSBDQ0NSX1NESU9fUkVWXzFfMDAgJiYgdHBsbGVuIDwgMHgyYSkgeworCQlkZXZpY2VfcHJp bnRmKGRldiwgIkNJU1RQTF9GVU5DRShmdW5jdGlvbikgdG9vIHNob3J0XG4iKTsKKwkJcmV0 dXJuOworCX0KKworCWNpcy0+ZnVuY2UuZm5zLnNlcmlhbF9udW0gPSBzZGlvX2Npc19yZWFk YihkZXYsIHJlZyArIDIpOworCWNpcy0+ZnVuY2UuZm5zLnNlcmlhbF9udW0gfD0gc2Rpb19j aXNfcmVhZGIoZGV2LCByZWcgKyAzKSA8PCA4OworCWNpcy0+ZnVuY2UuZm5zLnNlcmlhbF9u dW0gfD0gc2Rpb19jaXNfcmVhZGIoZGV2LCByZWcgKyA0KSA8PCAxNjsKKwljaXMtPmZ1bmNl LmZucy5zZXJpYWxfbnVtIHw9IHNkaW9fY2lzX3JlYWRiKGRldiwgcmVnICsgNSkgPDwgMjQ7 CisKKwljaXMtPmZ1bmNlLmZucy5tYXhfYmxrX3N6ID0gc2Rpb19jaXNfcmVhZGIoZGV2LCBy ZWcgKyAxMSk7CisJY2lzLT5mdW5jZS5mbnMubWF4X2Jsa19zeiB8PSBzZGlvX2Npc19yZWFk YihkZXYsIHJlZyArIDEyKSA8PCA4OworCisJY2lzLT5mdW5jZS5mbnMuc3RhcnR1cF90aW1l b3V0X21zIHw9IHNkaW9fY2lzX3JlYWRiKGRldiwgcmVnICsgMjcpOworCWNpcy0+ZnVuY2Uu Zm5zLnN0YXJ0dXBfdGltZW91dF9tcyB8PSBzZGlvX2Npc19yZWFkYihkZXYsIHJlZyArIDI4 KSA8PCA4OworCWNpcy0+ZnVuY2UuZm5zLnN0YXJ0dXBfdGltZW91dF9tcyAqPSAxMDsKKwkJ CQorCWNpcy0+ZnVuY2UuZm5zLm9wX21pbl9wd3IgPSBzZGlvX2Npc19yZWFkYihkZXYsIHJl ZyArIDE3KTsKKwljaXMtPmZ1bmNlLmZucy5vcF9hdmdfcHdyID0gc2Rpb19jaXNfcmVhZGIo ZGV2LCByZWcgKyAxOCk7CisJY2lzLT5mdW5jZS5mbnMub3BfbWF4X3B3ciA9IHNkaW9fY2lz X3JlYWRiKGRldiwgcmVnICsgMTkpOworCWNpcy0+ZnVuY2UuZm5zLnNiX21pbl9wd3IgPSBz ZGlvX2Npc19yZWFkYihkZXYsIHJlZyArIDIwKTsKKwljaXMtPmZ1bmNlLmZucy5zYl9hdmdf cHdyID0gc2Rpb19jaXNfcmVhZGIoZGV2LCByZWcgKyAyMSk7CisJY2lzLT5mdW5jZS5mbnMu c2JfbWF4X3B3ciA9IHNkaW9fY2lzX3JlYWRiKGRldiwgcmVnICsgMjIpOworCQorCWNpcy0+ ZnVuY2UuZm5zLmhwX2F2Z19wd3IgPSBzZGlvX2Npc19yZWFkYihkZXYsIHJlZyArIDMzKTsK KwljaXMtPmZ1bmNlLmZucy5ocF9tYXhfcHdyIHw9IHNkaW9fY2lzX3JlYWRiKGRldiwgcmVn ICsgMzQpIDw8IDg7CisJY2lzLT5mdW5jZS5mbnMubHBfYXZnX3B3ciA9IHNkaW9fY2lzX3Jl YWRiKGRldiwgcmVnICsgMzUpOworCWNpcy0+ZnVuY2UuZm5zLmxwX21heF9wd3IgfD0gc2Rp b19jaXNfcmVhZGIoZGV2LCByZWcgKyAzNikgPDwgODsKKworCURQUklOVEYoKCJDSVNUUExf RlVOQ0U6IE1BWF9CTEtfU0laRT0weCV4XG4iLCBjaXMtPmZ1bmNlLmZucy5tYXhfYmxrX3N6 KSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWNvZGVfdmVyc18xKGRldmljZV90IGRldiwgc3Ry dWN0IHNkaW9fY2lzICpjaXMsIGludCB0cGxsZW4sCisJICAgICAgdWludDMyX3QgcmVnKQor eworCWlmICh0cGxsZW4gPCAyKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiQ0lTVFBMX1ZF UlNfMSB0b28gc2hvcnRcbiIpOworCQlyZXR1cm47CisJfQorCisJY2lzLT5jaXMxX21ham9y ID0gc2Rpb19jaXNfcmVhZGIoZGV2LCByZWcrKyk7CisJY2lzLT5jaXMxX21pbm9yID0gc2Rp b19jaXNfcmVhZGIoZGV2LCByZWcrKyk7CisKKwlEUFJJTlRGKCgiQ0lTVFBMX1ZFUlNfMVxu IikpOworfQorCitpbnQKK3NkaW9fY2lzX3JlYWQoZGV2aWNlX3QgZGV2LCB1aW50MzJfdCBj aXNwdHIsIHN0cnVjdCBzZGlvX2NpcyAqY2lzKQoreworCXVpbnQzMl90IHJlZzsKKwl1aW50 OF90IHRwbGNvZGUsIHRwbGxlbjsKKworCW1lbXNldChjaXMsIDAsIHNpemVvZihzdHJ1Y3Qg c2Rpb19jaXMpKTsKKwljaXMtPm1hbnVmYWN0dXJlciA9IFNESU9fVkVORE9SX0lOVkFMSUQ7 CisJY2lzLT5wcm9kdWN0ID0gU0RJT19QUk9EVUNUX0lOVkFMSUQ7CisKKwlyZWcgPSBjaXNw dHI7CisJaWYgKChyZWcgPCBTRF9JT19DSVNfU1RBUlQpIHx8CisJICAgIChyZWcgPj0gKFNE X0lPX0NJU19TVEFSVCArIFNEX0lPX0NJU19TSVpFIC0gMTYpKSkgeworCQlkZXZpY2VfcHJp bnRmKGRldiwgImJhZCBDSVMgcHRyICUjeFxuIiwgcmVnKTsKKwkJcmV0dXJuIDE7CisJfQor CisJRFBSSU5URigoIlJFQURJTkcgQ0lTVFBMIEFUIDB4JTA2eFxuIiwgcmVnKSk7CisJCisJ Zm9yICg7OykgeworCQl0cGxjb2RlID0gc2Rpb19jaXNfcmVhZGIoZGV2LCByZWcrKyk7CisK KwkJaWYgKHRwbGNvZGUgPT0gQ0lTVFBMX05VTEwpIHsKKwkJCURQUklOVEYoKCIgMDBcbkNJ U1RQTF9OT05FXG4iKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXRwbGxlbiA9IHNkaW9f Y2lzX3JlYWRiKGRldiwgcmVnKyspOworCQlpZiAodHBsY29kZSA9PSBDSVNUUExfRU5EIHx8 IHRwbGxlbiA9PSAwKSB7CisJCQlpZiAodHBsY29kZSAhPSAweGZmKQorCQkJCWRldmljZV9w cmludGYoZGV2LCAiQ0lTIHBhcnNlIGVycm9yIGF0ICVkLCAiCisJCQkJICAgICJ0dXBsZSBj b2RlICUjeCwgbGVuZ3RoICVkXG4iLAorCQkJCSAgICByZWcsIHRwbGNvZGUsIHRwbGxlbik7 CisJCQllbHNlIHsKKwkJCQlEUFJJTlRGKCgiIGZmXG5DSVNUUExfRU5EXG4iKSk7CisJCQl9 CisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgU0RNTUNDSVNERUJVRworCQl7IAorCQkJaW50 IGk7CisKKwkJCS8qIHByaW50IHRoZSB0dXBsZSAqLworCQkJRFBSSU5URigoIiAlMDJ4ICUw MngiLCB0cGxjb2RlLCB0cGxsZW4pKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHRwbGxlbjsg aSsrKSB7CisJCQkJRFBSSU5URigoIiAlMDJ4IiwKKwkJCQkgICAgc2Rpb19jaXNfcmVhZGIo ZGV2LCByZWcgKyBpKSkpOworCQkJCWlmICgoaSAlIDE2KSA9PSAxMykKKwkJCQkJRFBSSU5U RigoIlxuIikpOworCQkJfQorCQkJaWYgKChpICUgMTYpICE9IDE0KQorCQkJCURQUklOVEYo KCJcbiIpKTsKKwkJfQorI2VuZGlmCisKKwkJc3dpdGNoICh0cGxjb2RlKSB7CisJCWNhc2Ug Q0lTVFBMX0ZVTkNFOgorCQkJaWYgKHNkaW9fY2lzX3JlYWRiKGRldiwgcmVnKyspID09IDAp CisJCQkJZGVjb2RlX2Z1bmNlX2NvbW1vbihkZXYsIGNpcywgdHBsbGVuLCByZWcpOworCQkJ ZWxzZQorCQkJCWRlY29kZV9mdW5jZV9mdW5jdGlvbihkZXYsIGNpcywgdHBsbGVuLCByZWcp OworCQkJcmVnICs9ICh0cGxsZW4gLSAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0lTVFBM X0ZVTkNJRDoKKwkJCWlmICh0cGxsZW4gPCAyKSB7CisJCQkJZGV2aWNlX3ByaW50ZihkZXYs CisJCQkJICAgICJiYWQgQ0lTVFBMX0ZVTkNJRCBsZW5ndGhcbiIpOworCQkJCXJlZyArPSB0 cGxsZW47CisJCQkJYnJlYWs7CisJCQl9CisJCQlEUFJJTlRGKCgiQ0lTVFBMX0ZVTkNJRFxu IikpOworCQkJcmVnICs9IHRwbGxlbjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0lTVFBMX01B TkZJRDoKKwkJCWlmICh0cGxsZW4gPCA0KSB7CisJCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJ CQkJICAgICJiYWQgQ0lTVFBMX01BTkZJRCBsZW5ndGhcbiIpOworCQkJCXJlZyArPSB0cGxs ZW47CisJCQkJYnJlYWs7CisJCQl9CisJCQljaXMtPm1hbnVmYWN0dXJlciA9IHNkaW9fY2lz X3JlYWRiKGRldiwgcmVnKyspOworCQkJY2lzLT5tYW51ZmFjdHVyZXIgfD0gc2Rpb19jaXNf cmVhZGIoZGV2LCByZWcrKykgPDwgODsKKwkJCWNpcy0+cHJvZHVjdCA9IHNkaW9fY2lzX3Jl YWRiKGRldiwgcmVnKyspOworCQkJY2lzLT5wcm9kdWN0IHw9IHNkaW9fY2lzX3JlYWRiKGRl diwgcmVnKyspIDw8IDg7CisJCQlEUFJJTlRGKCgiQ0lTVFBMX01BTkZJRFxuIikpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBDSVNUUExfVkVSU18xOgorCQkJZGVjb2RlX3ZlcnNfMShkZXYs IGNpcywgdHBsbGVuLCByZWcpOworCQkJcmVnICs9IHRwbGxlbjsKKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAidW5rbm93biB0dXBs ZSBjb2RlICUjeCwgbGVuZ3RoICVkXG4iLAorCQkJICAgIHRwbGNvZGUsIHRwbGxlbik7CisJ CQlyZWcgKz0gdHBsbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30K Kwordm9pZAorc2Rpb19jaXNfcHJpbnQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qgc2Rpb19jaXMg KmNpcykKK3sKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkNJUyB2ZXJzaW9uICV1LiV1XG4iLCBj aXMtPmNpczFfbWFqb3IsCisJICAgIGNpcy0+Y2lzMV9taW5vcik7CisKKwlkZXZpY2VfcHJp bnRmKGRldiwgIk1hbnVmYWN0dXJlciBjb2RlIDB4JXgsIHByb2R1Y3QgMHgleFxuIiwKKwkg ICAgY2lzLT5tYW51ZmFjdHVyZXIsIGNpcy0+cHJvZHVjdCk7CisKKwlwcmludGYoIlxuIik7 Cit9CisKKwoK --------------020001090707090709020601--