From owner-freebsd-mips@FreeBSD.ORG Mon Apr 30 11:07:36 2012 Return-Path: Delivered-To: freebsd-mips@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4C3D810656D1 for ; Mon, 30 Apr 2012 11:07:36 +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 D47518FC15 for ; Mon, 30 Apr 2012 11:07:35 +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 q3UB7Z9t053941 for ; Mon, 30 Apr 2012 11:07:35 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q3UB7ZUi053939 for freebsd-mips@FreeBSD.org; Mon, 30 Apr 2012 11:07:35 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 30 Apr 2012 11:07:35 GMT Message-Id: <201204301107.q3UB7ZUi053939@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-mips@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-mips@FreeBSD.org X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Apr 2012 11:07:36 -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 kern/165951 mips [ar913x] [ath] DDR flush isn't being done for the WMAC p kern/163670 mips [mips][arge] arge can't allocate ring buffer on multip 2 problems total. From owner-freebsd-mips@FreeBSD.ORG Wed May 2 21:37:10 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0E3DC1065672 for ; Wed, 2 May 2012 21:37:10 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pz0-f49.google.com (mail-pz0-f49.google.com [209.85.210.49]) by mx1.freebsd.org (Postfix) with ESMTP id D82808FC1B for ; Wed, 2 May 2012 21:37:09 +0000 (UTC) Received: by dadm1 with SMTP id m1so505288dad.8 for ; Wed, 02 May 2012 14:37:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=uQO2Py7oufjuU8OyDKSLypqlJbOj/oM49s0HCdgOV+I=; b=UJzwR2w/IjxgRU7kiomFIqxA/dpaAQXQMXOmlMywpirJv/44Pe/o4oWk3Bm9wn0BpH ujJtE2Ohuxn8bes4TS9p7ZWo4pUX3c1Abhs9S+AEylLjdSR22WKj+XYyEJzVjbWndtLb zljPB1LPp4l4oReCZChJheX/o8mLMhXatxtJjGWKvzQM0T9bCslsoQyPaXRkSe65gUUf LQOeaCkPqm5QmXCU3JjITxgwisdHBCptUFKl6ciUDHdEoPntis0iWR57MlDtWrnoq+k0 t2CW1x6YkLzAz6BxqjHw42iPHwf4kV0ezZaMq+gK9KeNEfVgdGptH/Qw2qr+yZvavsEl ahcg== MIME-Version: 1.0 Received: by 10.68.227.134 with SMTP id sa6mr1054817pbc.101.1335994629531; Wed, 02 May 2012 14:37:09 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.142.101.9 with HTTP; Wed, 2 May 2012 14:37:09 -0700 (PDT) Date: Wed, 2 May 2012 14:37:09 -0700 X-Google-Sender-Auth: RU2uHnv0RhmOk_2iVnoGfZYUxnY Message-ID: From: Adrian Chadd To: freebsd-mips@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Subject: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 May 2012 21:37:10 -0000 Hi, there's been a few ar71xx changes in the last few days. I'd appreciate it if it got decent testing. * The miibus/mdiobus (optional) split from Stefan Bethke as preparation for the switch API; * The MII clock speed is now set when the MAC PLL is programmed (based on the port speed) - this happens for the AR71xx and AR913x. The AR724x doesn't need this; * New hints are available to override the PLL settings from the hard programmed defaults (again based on port speed and chip); * Allowed both arge0 and arge1's MII busses to be accessible - gonzo's initial commit had both MACs use the MII bus on arge0 - which is fine for AR71xx and AR913x, but not fine for AR724x (two MII busses) and later AR93xx/AR94xx SoCs. * A new hint is available which allows for the MII type (MII, RMII, GMII,RGMII) to be forcibly set at attach time. I've only tested this on the AR71xx + AR8316 switch PHY board. I haven't yet tested it on any AR71xx + normal PHY (eg the Ubiquiti LS-SR71) just to ensure that it works, but I'll do that tonight. I'll also try it on the Routerstation board, just to make sure that still works. I would appreciate it if others using the AR71xx, AR724x or AR913x embedded boards could give this a whirl and make sure ethernet still works. TODO (in case someone else would like to finish off ar724x support): * Add the AR7242 PLL programming for arge0; * Go through the ar724x fifo and PLL code in Linux Openwrt (dev-eth.c) and ensure that our code (ar724x_chip.c and if_arge.c) does the "right" things; * When a forced speed/duplex is set via ifconfig, the MAC stops successfully handling frames. I'll do some tests to see if I or others broke this feature (I don't recall using anything except autoneg until I first tried this a couple days ago) but it initially seems as if the arge PLL isn't being programmed when a static speed/duplex is defined. Thanks, Adrian From owner-freebsd-mips@FreeBSD.ORG Fri May 4 15:31:49 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 635041065791; Fri, 4 May 2012 15:31:49 +0000 (UTC) (envelope-from pkelsey@gmail.com) Received: from mail-qc0-f182.google.com (mail-qc0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id 0822B8FC14; Fri, 4 May 2012 15:31:48 +0000 (UTC) Received: by qcsg15 with SMTP id g15so2456374qcs.13 for ; Fri, 04 May 2012 08:31:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=VJnGelBUu/HPf+3P2DQHcB511Q41PmdTKUrrp1UJ8mM=; b=dnwcRjTRMxTjTWQQckq05ire4u09WJRPABitkS08zlDdtMXSdAvi7e4l/CDJ69P2Os /8id/tkJCXBzj2jp1AVjjZBmfoFGL4Z4uriiEIbfqZNm/WmxfVr21s9CidAD0S60LSAt NfkOQ2namAU3ODUVAS6JXP0B7u4wuXz2MRM6ivFGTHzPZnOTINVlqvbU7/Qr2kqxT9rK Y4ws8Z8fOLKlQQVa7z9jUDvgLguvdRYixPw8hCuXcxtFXZuLZnw5ZRNz7999XLzCnHAI LXDCM/3ANn2TmR9t3fMtVam3TCiTV5yDW9e6YTp40PaMYxueLW5YbccKemz/Tde0mDga 3TcQ== MIME-Version: 1.0 Received: by 10.224.210.10 with SMTP id gi10mr10821048qab.47.1336145508143; Fri, 04 May 2012 08:31:48 -0700 (PDT) Sender: pkelsey@gmail.com Received: by 10.229.149.198 with HTTP; Fri, 4 May 2012 08:31:48 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 11:31:48 -0400 X-Google-Sender-Auth: ChYF2pfp0JpzltAX0_cnbGPjajc Message-ID: From: Patrick Kelsey To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: freebsd-mips@freebsd.org Subject: Re: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 15:31:49 -0000 On Wed, May 2, 2012 at 5:37 PM, Adrian Chadd wrote: > Hi, > > there's been a few ar71xx changes in the last few days. I'd appreciate > it if it got decent testing. > Hi Adrian, I've finally gotten back to doing a bit of testing with an RB450G (AR71XX + AR8316), and I found that I needed to use the following diff to get arg1 to initialize properly on that platform: Index: sys/mips/atheros/if_arge.c =================================================================== --- sys/mips/atheros/if_arge.c (revision 234999) +++ sys/mips/atheros/if_arge.c (working copy) @@ -600,7 +605,8 @@ &sc->arge_miibus, sc->arge_ifp, arge_ifmedia_upd, arge_ifmedia_sts, BMSR_DEFCAPMASK, i, MII_OFFSET_ANY, 0); - if (error != 0) { + if ((error != 0) && + (sc->arge_miibus != NULL)) { device_printf(sc->arge_dev, "unable to attach" " PHY %d: %d\n", i, error); goto fail; Without the above diff, things wind up at goto fail on arge1 (which has no miibus and a phymask of 0xf) instead of in the multiphy logic that follows. -Patrick From owner-freebsd-mips@FreeBSD.ORG Fri May 4 15:42:18 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 52AC71065674; Fri, 4 May 2012 15:42:18 +0000 (UTC) (envelope-from pkelsey@gmail.com) Received: from mail-qc0-f182.google.com (mail-qc0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id EB8DD8FC1A; Fri, 4 May 2012 15:42:17 +0000 (UTC) Received: by qcsg15 with SMTP id g15so2467919qcs.13 for ; Fri, 04 May 2012 08:42:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=lDmmboQTFLQeesrqqRMOVqBz3YlHLHelOf4+YkYW+7w=; b=GTC4NbL00qkqXWCdyMUfwT7U0yn1WN39f36EbZndi1t+qjQJASCziclO7zO4GRXhdS tCRyY/BgUz//pYuaVB8mDW9h0jzbmHu1O6blpSvHBiBXq7n5QlvkO8+e4LQy51iEDJnN eNqqq8A4A0ZBglHO4peDSsyried2Ayy0a4V8SptXItQ5bmBGQogaG4jFG7vsGzX+G7uk YAF3kCoM87uLYKwiLK5jziFie32xIyb1yAfATpdoEqeOO1gpyRL71WxxZazZZBluuBPB Ob5S+Y5PvgdjN/9K+dk0AwgodhTNH/HhjJt9AE6ET1AUo682x/wrOqrTh8npU9bz6UVO 09IA== MIME-Version: 1.0 Received: by 10.229.112.75 with SMTP id v11mr3102181qcp.144.1336146137534; Fri, 04 May 2012 08:42:17 -0700 (PDT) Sender: pkelsey@gmail.com Received: by 10.229.149.198 with HTTP; Fri, 4 May 2012 08:42:17 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 11:42:17 -0400 X-Google-Sender-Auth: xNk8VjPTC5pDfY4TE4s0tUttvlQ Message-ID: From: Patrick Kelsey To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: freebsd-mips@freebsd.org Subject: Re: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 15:42:18 -0000 On Fri, May 4, 2012 at 11:31 AM, Patrick Kelsey wrote: > > Without the above diff, things wind up at goto fail on arge1 (which has no > miibus and a phymask of 0xf) instead of in the multiphy logic that follows. > > Correction: arge1 on this platform has no miibus and a phymask of 0x10 -Patrick From owner-freebsd-mips@FreeBSD.ORG Fri May 4 16:23:07 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D0D851065670 for ; Fri, 4 May 2012 16:23:07 +0000 (UTC) (envelope-from pkelsey@gmail.com) Received: from mail-qc0-f182.google.com (mail-qc0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id 5F1B78FC15 for ; Fri, 4 May 2012 16:23:07 +0000 (UTC) Received: by qcsg15 with SMTP id g15so2511482qcs.13 for ; Fri, 04 May 2012 09:23:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type; bh=AFbZfjIN5qYss+HT7xh+ZcIITW9u8Dwu91x24AW9JoU=; b=w5AX9UawfndJbcHRun/xt4K9VJQjAYq/6bxTgfkoT4wnIrBZHboySk9yWr8QysEesh S2u2VOIomXThrQ1qZQPlQO/qYQsKamisnPJkj575xDTJH4QL9N9tJhCM0Cid5AffyWEw baXU9vcsp1QhWoFp7Nd+d2Y7uTUCngaiqnbAYphuy1psgxQptzBaFSgHH5z0SSFbynZp gdJjYXlbLR704stak0IHtUFDJPUdz/3AnCyHx0fenol16XeweXBb06fgkdKrPgnvfTW8 ZdSAMfmbUdYtBpQ8jBGr9pjTD+SR3zqbDt4mYIhYjaeMT/V9UaguW1N1TjavCJZrjfmS 67HQ== MIME-Version: 1.0 Received: by 10.229.111.74 with SMTP id r10mr3152957qcp.122.1336148586802; Fri, 04 May 2012 09:23:06 -0700 (PDT) Sender: pkelsey@gmail.com Received: by 10.229.149.198 with HTTP; Fri, 4 May 2012 09:23:06 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 12:23:06 -0400 X-Google-Sender-Auth: ms_08hy7G9fPp7z7vksAMjN5WRk Message-ID: From: Patrick Kelsey To: freebsd-mips@freebsd.org Content-Type: multipart/mixed; boundary=0023544706e0e22de504bf385516 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Re: [PATCH] MMC/SD SPI-mode driver X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 16:23:07 -0000 --0023544706e0e22de504bf385516 Content-Type: text/plain; charset=ISO-8859-1 On Sat, Mar 10, 2012 at 9:13 PM, Patrick Kelsey wrote: > There are two .diff files attached to this message. The first is an > MMC/SD SPI-mode driver (mmcspi) that implements the existing mmc/sd > bridge interface and talks to the spibus interface (the latter with a > few modifications). The second is the changes to the ar71xx_spi > driver that I made to support the mmcspi driver. I developed these > patches using a MikroTik RB450G and tested it with 31 different > microSD cards. > > Change details for mmcspi.diff: > > Existing mmc/sd stack: > - Added concept of bus type (bus_type_sd vs. bus_type_spi) > - Fixed some typos > - Fixed some math errors in csd decode > - Fixed bad lookup table > - Fixed bad arg to mmc_send_app_op_cond() during probe > - Added setting of block length on card > - Added detection (and skipping) of password-locked cards > - Avoid card select and bus timing commands when bus type is bus_type_spi > - Added new command flag MMC_CMD_IS_APP to annotate ACMD_x commands > > Existing spibus interface: > - Incorporated Luiz Otavio O Souza's acquire/release/write patch > - Added configuration methods > - Added flag to allow transactions with chip select high (needed for > proper sd card init) > > > Change details for ar71xx_spi.diff > - Incorporated Luiz Otavio O Souza's patch implementing his changes to > spibus_if > - Added configuration methods and clock setting support > > I updated the patches to apply cleanly against -HEAD (r234999) and removed a lookup table bug fix in mmc.c that has since been fixed separately. -Patrick --0023544706e0e22de504bf385516 Content-Type: application/octet-stream; name="mmcspi_r234999.diff" Content-Disposition: attachment; filename="mmcspi_r234999.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h1tgbboq2 SW5kZXg6IHN5cy9hcm0vYXQ5MS9hdDkxX21jaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXQ5 MS9hdDkxX21jaS5jCShyZXZpc2lvbiAyMzQ5OTkpCisrKyBzeXMvYXJtL2F0OTEvYXQ5MV9tY2ku Ywkod29ya2luZyBjb3B5KQpAQCAtNjk5LDYgKzY5OSw5IEBACiAJc3dpdGNoICh3aGljaCkgewog CWRlZmF1bHQ6CiAJCXJldHVybiAoRUlOVkFMKTsKKwljYXNlIE1NQ0JSX0lWQVJfQlVTX1RZUEU6 CisJCSooaW50ICopcmVzdWx0ID0gYnVzX3R5cGVfc2Q7CisJCWJyZWFrOwogCWNhc2UgTU1DQlJf SVZBUl9CVVNfTU9ERToKIAkJKihpbnQgKilyZXN1bHQgPSBzYy0+aG9zdC5pb3MuYnVzX21vZGU7 CiAJCWJyZWFrOwpAQCAtNzgyLDYgKzc4NSw3IEBACiAJCXNjLT5ob3N0Lmlvcy52ZGQgPSB2YWx1 ZTsKIAkJYnJlYWs7CiAJLyogVGhlc2UgYXJlIHJlYWQtb25seSAqLworCWNhc2UgTU1DQlJfSVZB Ul9CVVNfVFlQRToKIAljYXNlIE1NQ0JSX0lWQVJfQ0FQUzoKIAljYXNlIE1NQ0JSX0lWQVJfSE9T VF9PQ1I6CiAJY2FzZSBNTUNCUl9JVkFSX0ZfTUlOOgpJbmRleDogc3lzL2NvbmYvZmlsZXMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL2NvbmYvZmlsZXMJKHJldmlzaW9uIDIzNDk5OSkKKysrIHN5cy9jb25m L2ZpbGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDYgKzE2MDYsNyBAQAogZGV2L21tYy9tbWNi cl9pZi5tCQlzdGFuZGFyZAogZGV2L21tYy9tbWNidXNfaWYubQkJc3RhbmRhcmQKIGRldi9tbWMv bW1jc2QuYwkJCW9wdGlvbmFsIG1tY3NkCitkZXYvbW1jL21tY3NwaS5jCQlvcHRpb25hbCBtbWNz cGkKIGRldi9tbi9pZl9tbi5jCQkJb3B0aW9uYWwgbW4gcGNpCiBkZXYvbXBzL21wcy5jCQkJb3B0 aW9uYWwgbXBzCiBkZXYvbXBzL21wc19jb25maWcuYwkJb3B0aW9uYWwgbXBzCkluZGV4OiBzeXMv bW9kdWxlcy9tbWNzcGkvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21vZHVsZXMvbW1jc3Bp L01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgc3lzL21vZHVsZXMvbW1jc3BpL01ha2VmaWxlCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKworLlBBVEg6ICR7LkNVUkRJUn0vLi4vLi4vZGV2 L21tYworCitLTU9EPQltbWNzcGkKK1NSQ1M9CW1tY3NwaS5jIG1tY2JyX2lmLmggc3BpYnVzX2lm LmggZGV2aWNlX2lmLmggYnVzX2lmLmgKKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpJbmRleDog c3lzL2Rldi9tbWMvbW1jYnJ2YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L21tYy9tbWNicnZh ci5oCShyZXZpc2lvbiAyMzQ5OTkpCisrKyBzeXMvZGV2L21tYy9tbWNicnZhci5oCSh3b3JraW5n IGNvcHkpCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAibW1jYnJfaWYuaCIKIAogZW51bSBt bWNicl9kZXZpY2VfaXZhcnMgeworICAgIE1NQ0JSX0lWQVJfQlVTX1RZUEUsCiAgICAgTU1DQlJf SVZBUl9CVVNfTU9ERSwKICAgICBNTUNCUl9JVkFSX0JVU19XSURUSCwKICAgICBNTUNCUl9JVkFS X0NISVBfU0VMRUNULApAQCAtODIsNiArODMsNyBAQAogI2RlZmluZSBNTUNCUl9BQ0NFU1NPUih2 YXIsIGl2YXIsIHR5cGUpCQkJCQlcCiAJX19CVVNfQUNDRVNTT1IobW1jYnIsIHZhciwgTU1DQlIs IGl2YXIsIHR5cGUpCiAKK01NQ0JSX0FDQ0VTU09SKGJ1c190eXBlLCBCVVNfVFlQRSwgaW50KQog TU1DQlJfQUNDRVNTT1IoYnVzX21vZGUsIEJVU19NT0RFLCBpbnQpCiBNTUNCUl9BQ0NFU1NPUihi dXNfd2lkdGgsIEJVU19XSURUSCwgaW50KQogTU1DQlJfQUNDRVNTT1IoY2hpcF9zZWxlY3QsIENI SVBfU0VMRUNULCBpbnQpCkluZGV4OiBzeXMvZGV2L21tYy9tbWNyZWcuaAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBzeXMvZGV2L21tYy9tbWNyZWcuaAkocmV2aXNpb24gMjM0OTk5KQorKysgc3lzL2Rldi9tbWMv bW1jcmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUJTU1DX0NN RF9CQwkoMnVsIDw8IDUpCS8qIEJyb2FkY2FzdCBjb21tYW5kLCBubyByZXNwb25zZSAqLwogI2Rl ZmluZQlNTUNfQ01EX0JDUgkoM3VsIDw8IDUpCS8qIEJyb2FkY2FzdCBjb21tYW5kIHdpdGggcmVz cG9uc2UgKi8KICNkZWZpbmUJTU1DX0NNRF9NQVNLCSgzdWwgPDwgNSkKKyNkZWZpbmUJTU1DX0NN RF9JU19BUFAgICgxdWwgPDwgOCkJLyogQ29tbWFuZCBpcyBiZWluZyBzZW50IGFzIGFuIEFQUCBj b21tYW5kICovCiAKIC8qIFBvc3NpYmxlIHJlc3BvbnNlIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN0 YW5kYXJkOiAqLwogI2RlZmluZQlNTUNfUlNQX05PTkUJKDApCkluZGV4OiBzeXMvZGV2L21tYy9i cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L21tYy9icmlkZ2UuaAkocmV2aXNpb24gMjM0 OTk5KQorKysgc3lzL2Rldi9tbWMvYnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsx MDAsMTAgQEAKIAljc19kb250Y2FyZSA9IDAsIGNzX2hpZ2gsIGNzX2xvdwogfTsKIAorZW51bSBt bWNfYnVzX3R5cGUgeworCWJ1c190eXBlX3NkID0gMCwgYnVzX3R5cGVfc3BpCit9OworCiBlbnVt IG1tY19idXNfd2lkdGggewogCWJ1c193aWR0aF8xID0gMCwgYnVzX3dpZHRoXzQgPSAyLCBidXNf d2lkdGhfOCA9IDMKIH07CkBAIC0xMTEsNiArMTE1LDcgQEAKIHN0cnVjdCBtbWNfaW9zIHsKIAl1 aW50MzJfdAljbG9jazsJLyogU3BlZWQgb2YgdGhlIGNsb2NrIGluIEh6IHRvIG1vdmUgZGF0YSAq LwogCWVudW0gbW1jX3ZkZAl2ZGQ7CS8qIFZvbHRhZ2UgdG8gYXBwbHkgdG8gdGhlIHBvd2VyIHBp bnMvICovCisJZW51bSBtbWNfYnVzX3R5cGUgYnVzX3R5cGU7CiAJZW51bSBtbWNfYnVzX21vZGUg YnVzX21vZGU7CiAJZW51bSBtbWNfY2hpcF9zZWxlY3QgY2hpcF9zZWxlY3Q7CiAJZW51bSBtbWNf YnVzX3dpZHRoIGJ1c193aWR0aDsKSW5kZXg6IHN5cy9kZXYvbW1jL21tY3NwaS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy9kZXYvbW1jL21tY3NwaS5jCShyZXZpc2lvbiAwKQorKysgc3lzL2Rldi9tbWMv bW1jc3BpLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU1OSBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTIgUGF0cmljayBLZWxzZXkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBQb3J0aW9ucyBv ZiB0aGlzIHNvZnR3YXJlIG1heSBoYXZlIGJlZW4gZGV2ZWxvcGVkIHdpdGggcmVmZXJlbmNlIHRv CisgKiB0aGUgU0QgU2ltcGxpZmllZCBTcGVjaWZpY2F0aW9uLiAgVGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIG1heSBhcHBseToKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkg dG8gdGhlIHJlbGVhc2Ugb2YgdGhlIHNpbXBsaWZpZWQKKyAqIHNwZWNpZmljYXRpb24gKCJTaW1w bGlmaWVkIFNwZWNpZmljYXRpb24iKSBieSB0aGUgU0QgQ2FyZCBBc3NvY2lhdGlvbiBhbmQKKyAq IHRoZSBTRCBHcm91cC4gVGhlIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBpcyBhIHN1YnNldCBv ZiB0aGUgY29tcGxldGUgU0QKKyAqIFNwZWNpZmljYXRpb24gd2hpY2ggaXMgb3duZWQgYnkgdGhl IFNEIENhcmQgQXNzb2NpYXRpb24gYW5kIHRoZSBTRAorICogR3JvdXAuIFRoaXMgU2ltcGxpZmll ZCBTcGVjaWZpY2F0aW9uIGlzIHByb3ZpZGVkIG9uIGEgbm9uLWNvbmZpZGVudGlhbAorICogYmFz aXMgc3ViamVjdCB0byB0aGUgZGlzY2xhaW1lcnMgYmVsb3cuIEFueSBpbXBsZW1lbnRhdGlvbiBv ZiB0aGUKKyAqIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBtYXkgcmVxdWlyZSBhIGxpY2Vuc2Ug ZnJvbSB0aGUgU0QgQ2FyZAorICogQXNzb2NpYXRpb24sIFNEIEdyb3VwLCBTRC0zQyBMTEMgb3Ig b3RoZXIgdGhpcmQgcGFydGllcy4KKyAqCisgKiBEaXNjbGFpbWVyczoKKyAqCisgKiBUaGUgaW5m b3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBTaW1wbGlmaWVkIFNwZWNpZmljYXRpb24gaXMgcHJl c2VudGVkIG9ubHkKKyAqIGFzIGEgc3RhbmRhcmQgc3BlY2lmaWNhdGlvbiBmb3IgU0QgQ2FyZHMg YW5kIFNEIEhvc3QvQW5jaWxsYXJ5IHByb2R1Y3RzIGFuZAorICogaXMgcHJvdmlkZWQgIkFTLUlT IiB3aXRob3V0IGFueSByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkKKyAqIGtp bmQuIE5vIHJlc3BvbnNpYmlsaXR5IGlzIGFzc3VtZWQgYnkgdGhlIFNEIEdyb3VwLCBTRC0zQyBM TEMgb3IgdGhlIFNECisgKiBDYXJkIEFzc29jaWF0aW9uIGZvciBhbnkgZGFtYWdlcywgYW55IGlu ZnJpbmdlbWVudHMgb2YgcGF0ZW50cyBvciBvdGhlcgorICogcmlnaHQgb2YgdGhlIFNEIEdyb3Vw LCBTRC0zQyBMTEMsIHRoZSBTRCBDYXJkIEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZAorICogcGFy dGllcywgd2hpY2ggbWF5IHJlc3VsdCBmcm9tIGl0cyB1c2UuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRl ZCBieQorICogaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0 ZW50IG9yIG90aGVyIHJpZ2h0cyBvZiB0aGUKKyAqIFNEIEdyb3VwLCBTRC0zQyBMTEMsIHRoZSBT RCBDYXJkIEFzc29jaWF0aW9uIG9yIGFueSB0aGlyZCBwYXJ0eS4gTm90aGluZworICogaGVyZWlu IHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhbiBvYmxpZ2F0aW9uIGJ5IHRoZSBTRCBHcm91cCwgdGhl IFNELTNDIExMQworICogb3IgdGhlIFNEIENhcmQgQXNzb2NpYXRpb24gdG8gZGlzY2xvc2Ugb3Ig ZGlzdHJpYnV0ZSBhbnkgdGVjaG5pY2FsCisgKiBpbmZvcm1hdGlvbiwga25vdy1ob3cgb3Igb3Ro ZXIgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHRvIGFueSB0aGlyZCBwYXJ0eS4KKyAqCisgKgor ICogQ1JDIHJvdXRpbmVzIGFkYXB0ZWQgZnJvbSBwdWJsaWMgZG9tYWluIGNvZGUgd3JpdHRlbiBi eSBMYW1tZXJ0IEJpZXMuCisgKgorICogCisgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9m IG1tY2JyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggU0QvTU1DIGNhcmRzIGluCisgKiBTUEkgbW9k ZSB2aWEgc3BpYnVzX2lmLiAgSW4gb3JkZXIgdG8gbWluaW1pemUgY2hhbmdlcyB0byB0aGUgZXhp c3RpbmcKKyAqIE1NQy9TRCBzdGFjayAoYW5kIGFsbG93IGZvciBtYXhpbWFsIHJldXNlIG9mIHRo ZSBzYW1lKSwgdGhlIGJlaGF2aW9yIG9mCisgKiB0aGUgU0QtYnVzIGNvbW1hbmQgc2V0IGlzIGVt dWxhdGVkIGFzIG11Y2ggYXMgcG9zc2libGUsIHdoZXJlIHJlcXVpcmVkLgorICoKKyAqIFRoZSBT UEkgYnVzIG93bmVyc2hpcCBiZWhhdmlvciBpcyB0byBhY3F1aXJlIHRoZSBTUEkgYnVzIGZvciB0 aGUgZW50aXJlCisgKiBkdXJhdGlvbiB0aGF0IHRoZSBNTUMgaG9zdCBpcyBhY3F1aXJlZC4KKyAq CisgKiBDUkMgY2hlY2tpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgY2FuIGJlIGRpc2Fi bGVkIGF0IHJ1bnRpbWUKKyAqIHBlci1jYXJkIHZpYSBzeXNjdGwgKGUuZy4gc3lzY3RsIGRldi5t bWNzcGkuMC51c2VfY3JjPTApLgorICoKKyAqIENvbnNpZGVyZWQsIGJ1dCBub3QgaW1wbGVtZW50 ZWQ6CisgKiAgIC0gQ2FyZCBwcmVzZW5jZSBkZXRlY3Rpb24KKyAqICAgLSBDYXJkIHBvd2VyIGNv bnRyb2wKKyAqICAgLSBEZXRlY3Rpb24gb2YgbG9jayBzd2l0Y2ggc3RhdGUgb24gY2FyZHMgdGhh dCBoYXZlIHRoZW0KKyAqICAgLSBZaWVsZGluZyB0aGUgQ1BVIGR1cmluZyBsb25nIGNhcmQgYnVz eSBjeWNsZXMKKyAqCisgKiBPcmlnaW5hbGx5IGRldmVsb3BlZCBhbmQgdGVzdGVkIHVzaW5nIGEg TWljcm9UaWsgUm91dGVyQk9BUkQgUkI0NTBHIGFuZAorICogdGhlIDMxIG1pY3JvU0QgY2FyZHMg bGlzdGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2Rl ZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg PHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr Lmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2lu Y2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKworI2luY2x1 ZGUgPGRldi9tbWMvYnJpZGdlLmg+CisjaW5jbHVkZSA8ZGV2L21tYy9tbWNyZWcuaD4KKyNpbmNs dWRlIDxkZXYvbW1jL21tY2JydmFyLmg+CisjaW5jbHVkZSA8ZGV2L3NwaWJ1cy9zcGkuaD4KKwor CisjaW5jbHVkZSAibW1jYnJfaWYuaCIKKyNpbmNsdWRlICJzcGlidXNfaWYuaCIKKworI2RlZmlu ZSBNTUNTUElfUkVUUklFUyAzIC8qIG51bWJlciBvZiByZXRyaWVzIGZvciBpbnRlcm5hbGx5IG9y aWdpbmF0ZWQgY29tbWFuZHMgKi8KKyNkZWZpbmUgTU1DU1BJX1RJTUVPVVRfU0VDIDMKKworI2Rl ZmluZSBNTUNTUElfTUFYX1JTUF9MRU4gNSAgLyogbWF4IGxlbmd0aCBvZiBhbiBSbiByZXNwb25z ZSAqLworI2RlZmluZSBNTUNTUElfT0NSX0xFTiAgICAgNAorCisjZGVmaW5lIE1NQ1NQSV9EQVRB X0JMT0NLX0xFTiA1MTIKKyNkZWZpbmUgTU1DU1BJX0RBVEFfQ1JDX0xFTiAgIDIKKworI2RlZmlu ZSBNTUNTUElfUE9MTF9MRU4gOCAgLyogYW1vdW50IHRvIHJlYWQgd2hlbiBzZWFyY2hpbmcgKi8K KworI2RlZmluZSBNTUNTUElfUjFfTUFTSyAgMHg4MCAgLyogbWFzayB1c2VkIHRvIHNlYXJjaCBm b3IgUjEgdG9rZW5zICovCisjZGVmaW5lIE1NQ1NQSV9SMV9WQUxVRSAweDAwICAvKiB2YWx1ZSB1 c2VkIHRvIHNlYXJjaCBmb3IgUjEgdG9rZW5zICovCisjZGVmaW5lIE1NQ1NQSV9EUl9NQVNLICAw eDExICAvKiBtYXNrIHVzZWQgdG8gc2VhcmNoIGZvciBkYXRhIHJlc3BvbnNlIHRva2VucyAqLwor I2RlZmluZSBNTUNTUElfRFJfVkFMVUUgMHgwMSAgLyogdmFsdWUgdXNlZCB0byBzZWFyY2ggZm9y IGRhdGEgcmVzcG9uc2UgdG9rZW5zICovCisKKyNkZWZpbmUgTU1DU1BJX0RSX0VSUl9NQVNLICAw eDBlCisjZGVmaW5lIE1NQ1NQSV9EUl9FUlJfTk9ORSAgMHgwNAorI2RlZmluZSBNTUNTUElfRFJf RVJSX0NSQyAgIDB4MGEKKyNkZWZpbmUgTU1DU1BJX0RSX0VSUl9XUklURSAweDBjCisKKyNkZWZp bmUgTU1DU1BJX1RPS0VOX1NCICAgICAgMHhmZSAgLyogc3RhcnQgYmxvY2sgdG9rZW4gZm9yIHJl YWQgc2luZ2xlLAorCQkJCSAgICAgIHJlYWQgbXVsdGksIGFuZCB3cml0ZSBzaW5nbGUgKi8KKyNk ZWZpbmUgTU1DU1BJX1RPS0VOX1NCX1dNICAgMHhmYyAgLyogc3RhcnQgYmxvY2sgdG9rZW4gZm9y IHdyaXRlIG11bHRpICovCisjZGVmaW5lIE1NQ1NQSV9UT0tFTl9TVCAgICAgIDB4ZmQgIC8qIHN0 b3AgdHJhbnNtaXNzaW9uIHRva2VuICovCisjZGVmaW5lIE1NQ1NQSV9JU19ERV9UT0tFTih4KSAo MCA9PSAoKHgpICYgMHhmMCkpICAvKiBkZXRlY3RvciBmb3IgZGF0YSBlcnJvciB0b2tlbiAqLwor CisKKyNkZWZpbmUgTU1DU1BJX1IxX0lETEUgICAgICAweDAxCisjZGVmaW5lIE1NQ1NQSV9SMV9F UkFTRV9SU1QgMHgwMgorI2RlZmluZSBNTUNTUElfUjFfSUxMX0NNRCAgIDB4MDQKKyNkZWZpbmUg TU1DU1BJX1IxX0NSQ19FUlIgICAweDA4CisjZGVmaW5lIE1NQ1NQSV9SMV9FUkFTRV9FUlIgMHgx MAorI2RlZmluZSBNTUNTUElfUjFfQUREUl9FUlIgIDB4MjAKKyNkZWZpbmUgTU1DU1BJX1IxX1BB UkFNX0VSUiAweDQwCisKKyNkZWZpbmUgTU1DU1BJX1IxX0VSUl9NQVNLIChNTUNTUElfUjFfUEFS QU1fRVJSIHwgTU1DU1BJX1IxX0FERFJfRVJSIHwJXAorCQkJICAgIE1NQ1NQSV9SMV9FUkFTRV9F UlIgfCBNTUNTUElfUjFfQ1JDX0VSUiB8CVwKKwkJCSAgICBNTUNTUElfUjFfSUxMX0NNRCkKKwor I2RlZmluZSBNTUNTUElfUjJfTE9DS0VEICAgICAgMHgwMQorI2RlZmluZSBNTUNTUElfUjJfV1Bf RVJfTENLICAgMHgwMgorI2RlZmluZSBNTUNTUElfUjJfRVJSICAgICAgICAgMHgwNAorI2RlZmlu ZSBNTUNTUElfUjJfQ0NfRVJSICAgICAgMHgwOAorI2RlZmluZSBNTUNTUElfUjJfRUNDX0ZBSUwg ICAgMHgxMAorI2RlZmluZSBNTUNTUElfUjJfV1BfVklPTEFURSAgMHgyMAorI2RlZmluZSBNTUNT UElfUjJfRVJBU0VfUEFSQU0gMHg0MAorI2RlZmluZSBNTUNTUElfUjJfT09SX0NTRF9PVyAgMHg4 MAorCisvKiBjb21tYW5kcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIFNQSSBpbnRlcmZhY2UgKi8K KyNkZWZpbmUgTU1DU1BJX1JFQURfT0NSICAgNTgKKyNkZWZpbmUgTU1DU1BJX0NSQ19PTl9PRkYg NTkKKworCitzdHJ1Y3QgbW1jc3BpX2NvbW1hbmQgeworCXN0cnVjdCBtbWNfY29tbWFuZAkqbW1j X2NtZDsJLyogY29tbWFuZCBwYXNzZWQgZnJvbSBtbWMgbGF5ZXIgKi8KKwl1aW50MzJfdAkJb3Bj b2RlOwkJLyogcG9zc2libHkgdHJhbnNsYXRlZCBvcGNvZGUgKi8KKwl1aW50MzJfdAkJYXJnOwkJ LyogcG9zc2libHkgdHJhbnNsYXRlZCBhcmcgKi8KKwl1aW50MzJfdAkJZmxhZ3M7CQkvKiBwb3Nz aWJseSB0cmFuc2xhdGVkIGZsYWdzICovCisJdWludDMyX3QJCXJldHJpZXM7CS8qIHBvc3NpYmx5 IHRyYW5zbGF0ZWQgcmV0cnkgY291bnQgKi8KKwlzdHJ1Y3QgbW1jX2RhdGEJCSpkYXRhOwkJLyog cG9zc2libHkgcmVkaXJlY3RlZCBkYXRhIHNlZ21lbnQgKi8KKwl1bnNpZ25lZCBpbnQJCWVycm9y X21hc2s7CS8qIG1hc2sgdG8gdXNlIHdoZW4gY2hlY2tpbmcgZm9yIFIxIGVycm9ycyAqLworCXVu c2lnbmVkIGNoYXIJCXVzZV9jcmM7CS8qIGRvIGNyYyBjaGVja2luZyBmb3IgdGhpcyBjb21tYW5k ICovCisJdW5zaWduZWQgY2hhcgkJcnNwX3R5cGU7CS8qIHR5cGUgb2YgcmVzcG9uc2UgdG8gdGhp cyBjb21tYW5kICovCisjZGVmaW5lIE1NQ1NQSV9SU1BfUjEgICAgMAorI2RlZmluZSBNTUNTUElf UlNQX1IxQiAgIDEKKyNkZWZpbmUgTU1DU1BJX1JTUF9SMiAgICAyCisjZGVmaW5lIE1NQ1NQSV9S U1BfUjMgICAgMworI2RlZmluZSBNTUNTUElfUlNQX1I3ICAgIDQKKwl1bnNpZ25lZCBjaGFyCQly c3BfbGVuOwkvKiBsZW5ndGggb2YgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kICovCisJc3RydWN0 IG1tY19kYXRhCQlsZGF0YTsJCS8qIGxvY2FsIHJlYWQgZGF0YSAqLworfTsKKworc3RydWN0IG1t Y3NwaV9zbG90IHsKKwlzdHJ1Y3QgbW1jc3BpX3NvZnRjCSpzYzsJCS8qIGJhY2sgcG9pbnRlciB0 byBwYXJlbnQgYnJpZGdlICovCisJZGV2aWNlX3QJCWRldjsJCS8qIG1tYyBkZXZpY2UgZm9yIHNs b3QgKi8KKwlib29sZWFuX3QJCWJ1c19idXN5OyAgICAgICAvKiBpbmRpY2F0ZXMgd2hldGhlciBo b3N0IGhhcyBiZWVuIGFjcXVpcmVkICovCisJc3RydWN0IG1tY19ob3N0IAlob3N0OwkJLyogaG9z dCBwYXJhbWV0ZXJzICovCisJc3RydWN0IG10eAkJbXR4OwkJLyogc2xvdCBtdXRleCAqLworCXVp bnQ4X3QJCQlsYXN0X29jcltNTUNTUElfT0NSX0xFTl07IC8qIGxhc3Qgb2NyIHJldHJpZXZlZCBh ZnRlciBDTUQ4ICovCisJdWludDMyX3QJCWxhc3Rfb3Bjb2RlOwkvKiBsYXN0IG9wY29kZSByZXF1 ZXN0ZWQgYnkgbW1jIGxheWVyICovCisJdWludDMyX3QJCWxhc3RfZmxhZ3M7CS8qIGxhc3QgZmxh Z3MgcmVxdWVzdGVkIGJ5IG1tYyBsYXllciAqLworCXVuc2lnbmVkIGludAkJY3JjX2VuYWJsZWQ7 CS8qIHdoZXRoZXIgY3JjIGNoZWNraW5nIGlzIGVuYWJsZWQgb24gdGhlIGNhcmQgKi8KKwl1bnNp Z25lZCBpbnQJCWNyY19pbml0X2RvbmU7ICAvKiB3aGV0aGVyIHRoZSBpbml0aWFsIGNyYyBzZXR0 aW5nIGhhcworCQkJCQkJICAgYmVlbiBzZW50IHRvIHRoZSBjYXJkICovCisjZGVmaW5lIE1NQ1NQ SV9NQVhfTERBVEFfTEVOIDE2CisJdWludDhfdAkJCWxkYXRhX2J1ZltNTUNTUElfTUFYX0xEQVRB X0xFTl07Cit9OworCisKK3N0cnVjdCBtbWNzcGlfc29mdGMgeworCWRldmljZV90CQlkZXY7CQkv KiB0aGlzIG1tYyBicmlkZ2UgZGV2aWNlICovCisJZGV2aWNlX3QJCWJ1c2RldjsJCS8qIHNwaSBi dXMgZGV2aWNlIHRoaXMgYnJpZGdlIGlzIG9uICovCisJc3RydWN0IG1tY3NwaV9zbG90CXNsb3Q7 CQkvKiBzdGF0ZSBmb3IgdGhlIHNpbmdsZSBzdXBwb3J0ZWQgc2xvdCAqLworCXVuc2lnbmVkIGlu dAkJdXNlX2NyYzsJLyogd2hldGhlciB0byBlbmFibGUgY29tbWFuZCBDUkMgY2hlY2tpbmcgKi8K K307CisKKworLyogZGV2aWNlIGludGVyZmFjZSAqLworc3RhdGljIGludCBtbWNzcGlfcHJvYmUo ZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQgbW1jc3BpX2F0dGFjaChkZXZpY2VfdCBkZXYpOwor c3RhdGljIGludCBtbWNzcGlfZGV0YWNoKGRldmljZV90IGRldik7CitzdGF0aWMgaW50IG1tY3Nw aV9zdXNwZW5kKGRldmljZV90IGRldik7CitzdGF0aWMgaW50IG1tY3NwaV9yZXN1bWUoZGV2aWNl X3QgZGV2KTsKKworLyogYnVzIGludGVyZmFjZSAqLworc3RhdGljIGludCBtbWNzcGlfcmVhZF9p dmFyKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwKKwkJCSAgICB1aW50 cHRyX3QgKnJlc3VsdCk7CitzdGF0aWMgaW50IG1tY3NwaV93cml0ZV9pdmFyKGRldmljZV90IGJ1 cywgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwKKwkJCSAgICAgdWludHB0cl90IHZhbHVlKTsK KworLyogbW1jYnIgaW50ZXJmYWNlICovCitzdGF0aWMgaW50IG1tY3NwaV91cGRhdGVfaW9zKGRl dmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYpOworc3RhdGljIGludCBtbWNzcGlfcmVxdWVz dChkZXZpY2VfdCBicmRldiwgZGV2aWNlX3QgcmVxZGV2LAorCQkJICBzdHJ1Y3QgbW1jX3JlcXVl c3QgKnJlcSk7CitzdGF0aWMgaW50IG1tY3NwaV9nZXRfcm8oZGV2aWNlX3QgYnJkZXYsIGRldmlj ZV90IHJlcWRldik7CitzdGF0aWMgaW50IG1tY3NwaV9hY3F1aXJlX2hvc3QoZGV2aWNlX3QgYnJk ZXYsIGRldmljZV90IHJlcWRldik7CitzdGF0aWMgaW50IG1tY3NwaV9yZWxlYXNlX2hvc3QoZGV2 aWNlX3QgYnJkZXYsIGRldmljZV90IHJlcWRldik7CisKKy8qIHN1cHBvcnRpbmcgY2FzdCAqLwor c3RhdGljIHZvaWQgbW1jc3BpX3Nsb3RfaW5pdChkZXZpY2VfdCBicmRldiwgc3RydWN0IG1tY3Nw aV9zbG90ICpzbG90KTsKK3N0YXRpYyB2b2lkIG1tY3NwaV9zbG90X2ZpbmkoZGV2aWNlX3QgYnJk ZXYsIHN0cnVjdCBtbWNzcGlfc2xvdCAqc2xvdCk7CisKK3N0YXRpYyB2b2lkIG1tY3NwaV9jYXJk X2FkZChzdHJ1Y3QgbW1jc3BpX3Nsb3QgKnNsb3QpOworc3RhdGljIHZvaWQgbW1jc3BpX2NhcmRf ZGVsZXRlKHN0cnVjdCBtbWNzcGlfc2xvdCAqc2xvdCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg bW1jc3BpX2RvX3NwaV9yZWFkKGRldmljZV90IGRldiwgdWludDhfdCAqZGF0YSwKKwkJCQkgICAg ICAgdW5zaWduZWQgaW50IGxlbik7CitzdGF0aWMgdW5zaWduZWQgaW50IG1tY3NwaV9kb19zcGlf d3JpdGUoZGV2aWNlX3QgZGV2LCB1aW50OF90ICpjbWQsCisJCQkJCXVuc2lnbmVkIGludCBjbWRs ZW4sIHVpbnQ4X3QgKmRhdGEsCisJCQkJCXVuc2lnbmVkIGludCBkYXRhbGVuKTsKKworc3RhdGlj IHVuc2lnbmVkIGludCBtbWNzcGlfd2FpdF9mb3Jfbm90X2J1c3koZGV2aWNlX3QgZGV2KTsKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgbW1jc3BpX3NoaWZ0X2NvcHkodWludDhfdCAqZGVzdCwgdWludDhf dCAqc3JjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzcmNfbGVuLCB1bnNpZ25lZCBpbnQgc2hp ZnQpOworc3RhdGljIHVuc2lnbmVkIGludCBtbWNzcGlfZ2V0X3Jlc3BvbnNlX3Rva2VuKGRldmlj ZV90IGRldiwgdWludDhfdCBtYXNrLAorCQkJCQkgICAgICB1aW50OF90IHZhbHVlLCB1bnNpZ25l ZCBpbnQgbGVuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgaGFzX2J1c3ksCisJCQkJCSAgICAg IHVpbnQ4X3QgKnJzcGJ1Zik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW1jc3BpX3NldF91cF9j b21tYW5kKGRldmljZV90IGRldiwKKwkJCQkJICBzdHJ1Y3QgbW1jc3BpX2NvbW1hbmQgKm1tY3Nw aV9jbWQsCisJCQkJCSAgc3RydWN0IG1tY19jb21tYW5kICptbWNfY21kKTsKK3N0YXRpYyB1bnNp Z25lZCBpbnQgbW1jc3BpX3NlbmRfY21kKGRldmljZV90IGRldiwgc3RydWN0IG1tY3NwaV9jb21t YW5kICpjbWQsCisJCQkJICAgIHVpbnQ4X3QgKnJzcGJ1Zik7CisKK3N0YXRpYyB1bnNpZ25lZCBp bnQgbW1jc3BpX3JlYWRfYmxvY2soZGV2aWNlX3QgZGV2LCB1aW50OF90ICpkYXRhLAorCQkJCSAg ICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBjaGVja19jcmMxNiwKKwkJCQkgICAg ICB1bnNpZ25lZCBpbnQgY2hlY2tfY3JjNyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG1tY3NwaV9z ZW5kX3N0b3AoZGV2aWNlX3QgZGV2LCB1bnNpZ25lZCBpbnQgcmV0cmllcyk7CitzdGF0aWMgdW5z aWduZWQgaW50IG1tY3NwaV9yZWFkX3BoYXNlKGRldmljZV90IGRldiwgc3RydWN0IG1tY3NwaV9j b21tYW5kICpjbWQpOworc3RhdGljIHVuc2lnbmVkIGludCBtbWNzcGlfd3JpdGVfYmxvY2soZGV2 aWNlX3QgZGV2LCB1aW50OF90ICpkYXRhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaXNfbXVs dGksCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgdXNlX2NyYywgdWludDhfdCAqc3RhdHVzKTsK K3N0YXRpYyB1bnNpZ25lZCBpbnQgbW1jc3BpX3dyaXRlX3BoYXNlKGRldmljZV90IGRldiwgc3Ry dWN0IG1tY3NwaV9jb21tYW5kICpjbWQpOworc3RhdGljIHVuc2lnbmVkIGludCBtbWNzcGlfdHJh bnNsYXRlX3Jlc3BvbnNlKGRldmljZV90IGRldiwKKwkJCQkJICAgICAgc3RydWN0IG1tY3NwaV9j b21tYW5kICpjbWQsCisJCQkJCSAgICAgIHVpbnQ4X3QgKnJzcGJ1Zik7CitzdGF0aWMgdW5zaWdu ZWQgaW50IG1tY3NwaV9nZXRfb2NyKGRldmljZV90IGRldiwgdWludDhfdCAqb2NyYnVmKTsKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgbW1jc3BpX3NldF9jcmNfb25fb2ZmKGRldmljZV90IGRldiwgdW5z aWduZWQgaW50IGNyY19vbik7CitzdGF0aWMgdW5zaWduZWQgaW50IG1tY3NwaV91cGRhdGVfY3Jj X3NldHRpbmcoZGV2aWNlX3QgZGV2LCB1bnNpZ25lZCBpbnQgY3JjX29uKTsKKworc3RhdGljIHVp bnQ4X3QgdXBkYXRlX2NyYzcodWludDhfdCBjcmMsIHVpbnQ4X3QgKmJ1ZiwgdW5zaWduZWQgaW50 IGxlbik7CitzdGF0aWMgdWludDE2X3QgdXBkYXRlX2NyYzE2KHVpbnQxNl90IGNyYywgdWludDhf dCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIGluaXRfY3JjN3RhYih2b2lk KTsKK3N0YXRpYyB2b2lkIGluaXRfY3JjMTZ0YWIodm9pZCk7CisKK3N0YXRpYyBpbnQgbW1jc3Bp X21vZGV2ZW50X2hhbmRsZXIobW9kdWxlX3QgbW9kLCBpbnQgd2hhdCwgdm9pZCAqYXJnKTsKKwor I2lmIGRlZmluZWQoTU1DU1BJX0VOQUJMRV9ERUJVR19GVU5DUykKK3N0YXRpYyB2b2lkIG1tY3Nw aV9kdW1wX2RhdGEoZGV2aWNlX3QgZGV2LCBjb25zdCBjaGFyICpsYWJlbCwgdWludDhfdCAqZGF0 YSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGxlbik7CitzdGF0aWMgdm9pZCBtbWNzcGlfZHVtcF9z cGlfYnVzKGRldmljZV90IGRldiwgdW5zaWduZWQgaW50IGxlbik7CisjZW5kaWYKKworCisjZGVm aW5lIE1NQ1NQSV9MT0NLX1NMT1QoX3Nsb3QpCQkJbXR4X2xvY2soJihfc2xvdCktPm10eCkKKyNk ZWZpbmUJTU1DU1BJX1VOTE9DS19TTE9UKF9zbG90KQkJbXR4X3VubG9jaygmKF9zbG90KS0+bXR4 KQorI2RlZmluZSBNTUNTUElfU0xPVF9MT0NLX0lOSVQoX3Nsb3QpCQlcCisgIG10eF9pbml0KCYo X3Nsb3QpLT5tdHgsICJTRCBzbG90IG10eCIsICJtbWNzcGkiLCBNVFhfREVGKQorI2RlZmluZSBN TUNTUElfU0xPVF9MT0NLX0RFU1RST1koX3Nsb3QpCQltdHhfZGVzdHJveSgmKF9zbG90KS0+bXR4 KTsKKyNkZWZpbmUgTU1DU1BJX0FTU0VSVF9TTE9UX0xPQ0tFRChfc2xvdCkJbXR4X2Fzc2VydCgm KF9zbG90KS0+bXR4LCBNQV9PV05FRCk7CisjZGVmaW5lIE1NQ1NQSV9BU1NFUlRfU0xPVF9VTkxP Q0tFRChfc2xvdCkJbXR4X2Fzc2VydCgmKF9zbG90KS0+bXR4LCBNQV9OT1RPV05FRCk7CisKKwor I2RlZmluZSBUUkFDRV9aT05FX0VOQUJMRUQoem9uZSkgKHRyYWNlX3pvbmVfbWFzayAmIFRSQUNF X1pPTkVfIyN6b25lKQorCisjZGVmaW5lIFRSQUNFX0VOVEVSKGRldikJCQkJCVwKKwlpZiAoVFJB Q0VfWk9ORV9FTkFCTEVEKEVOVEVSKSkgewkJCVwKKwkJZGV2aWNlX3ByaW50ZihkZXYsICIlczog ZW50ZXJcbiIsIF9fZnVuY19fKTsJXAorCX0KKworI2RlZmluZSBUUkFDRV9FWElUKGRldikJCQkJ CQlcCisJaWYgKFRSQUNFX1pPTkVfRU5BQkxFRChFWElUKSkgewkJCQlcCisJCWRldmljZV9wcmlu dGYoZGV2LCAiJXM6IGV4aXRcbiIsIF9fZnVuY19fKTsJXAorCX0KKworI2RlZmluZSBUUkFDRShk ZXYsIHpvbmUsIC4uLikJCQkJXAorCWlmIChUUkFDRV9aT05FX0VOQUJMRUQoem9uZSkpIHsJCQlc CisJCWRldmljZV9wcmludGYoZGV2LCBfX1ZBX0FSR1NfXyk7CVwKKwl9CisKKworI2RlZmluZSBU UkFDRV9aT05FX0VOVEVSICAgKDF1bCA8PCAwKSAgLyogZnVuY3Rpb24gZW50cmFuY2UgKi8KKyNk ZWZpbmUgVFJBQ0VfWk9ORV9FWElUICAgICgxdWwgPDwgMSkgIC8qIGZ1bmN0aW9uIGV4aXQgKi8K KyNkZWZpbmUgVFJBQ0VfWk9ORV9BQ1RJT04gICgxdWwgPDwgMikgIC8qIGZvciBuYXJyYXRpbmcg bWFqb3IgYWN0aW9ucyB0YWtlbiAqLworI2RlZmluZSBUUkFDRV9aT05FX1JFU1VMVCAgKDF1bCA8 PCAzKSAgLyogZm9yIG5hcnJhdGluZyByZXN1bHRzIG9mIGFjdGlvbnMgKi8KKyNkZWZpbmUgVFJB Q0VfWk9ORV9FUlJPUiAgICgxdWwgPDwgNCkgIC8qIGZvciByZXBvcnRpbmcgZXJyb3JzICovCisj ZGVmaW5lIFRSQUNFX1pPTkVfREFUQSAgICAoMXVsIDw8IDUpICAvKiBmb3IgZHVtcGluZyBidXMg ZGF0YSAqLworI2RlZmluZSBUUkFDRV9aT05FX0RFVEFJTFMgKDF1bCA8PCA2KSAgLyogZm9yIG5h cnJhdGluZyBtaW5vciBhY3Rpb25zIGFuZCByZXN1bHRzICovCisKKyNkZWZpbmUgVFJBQ0VfWk9O RV9OT05FICAgIDAKKyNkZWZpbmUgVFJBQ0VfWk9ORV9BTEwgICAgIDB4ZmZmZmZmZmYKKworCisj ZGVmaW5lIENSQzdfSU5JVElBTCAweDAwCisjZGVmaW5lIENSQzE2X0lOSVRJQUwgMHgwMDAwCisK KworU1lTQ1RMX05PREUoX2h3LCBPSURfQVVUTywgbW1jc3BpLCBDVExGTEFHX1JELCAwLCAibW1j c3BpIGRyaXZlciIpOworCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHJhY2Vfem9uZV9tYXNrID0g VFJBQ0VfWk9ORV9FUlJPUjsKKworc3RhdGljIHVpbnQ4X3QgY3JjN3RhYlsyNTZdOworc3RhdGlj IHVpbnQxNl90IGNyYzE2dGFiWzI1Nl07CitzdGF0aWMgdWludDhfdCBvbmVzYnVmW01NQ1NQSV9E QVRBX0JMT0NLX0xFTl07ICAvKiBmb3IgZHJpdmluZyB0aGUgdHggbGluZQorCQkJCQkJICAgd2hl biByZWNlaXZpbmcgKi8KK3N0YXRpYyB1aW50OF90IGp1bmtidWZbTU1DU1BJX0RBVEFfQkxPQ0tf TEVOXTsgIC8qIGZvciByZWNlaXZpbmcgZGF0YSB3aGVuCisJCQkJCQkgICB0cmFuc21pdHRpbmcg Ki8KKworc3RhdGljIGludAorbW1jc3BpX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlUUkFDRV9F TlRFUihkZXYpOworCQorCWRldmljZV9zZXRfZGVzYyhkZXYsICJtbWMgc3BpLW1vZGUgYnJpZGdl Iik7CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgdm9p ZAorbW1jc3BpX3Nsb3RfaW5pdChkZXZpY2VfdCBicmRldiwgc3RydWN0IG1tY3NwaV9zbG90ICpz bG90KQoreworCVRSQUNFX0VOVEVSKGJyZGV2KTsKKworCXN0cnVjdCBtbWNzcGlfc29mdGMgKnNj ID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0IHNwaV9jb25maWcgY2ZnOworCisJ c2xvdC0+c2MgPSBzYzsKKwlzbG90LT5kZXYgPSBOVUxMOyAgLyogd2lsbCBnZXQgcmVhbCB2YWx1 ZSB3aGVuIGNhcmQgaXMgYWRkZWQgKi8KKwlzbG90LT5idXNfYnVzeSA9IGZhbHNlOworCXNsb3Qt Pmhvc3QuZl9taW4gPSAxMDAwMDA7IC8qIHRoaXMgc2hvdWxkIGJlIGFzIGxvdyBhcyB3ZSBuZWVk IHRvIGdvCisJCQkJICAgICAgZm9yIGFueSBjYXJkICovCisJc2xvdC0+aG9zdC5jYXBzID0gMDsK KworCVNQSUJVU19BQ1FVSVJFX0JVUyhzYy0+YnVzZGV2LCBzYy0+ZGV2KTsKKworCWNmZy5jbG9j a19oeiA9IDA7CisJU1BJQlVTX1NFVF9DT05GSUcoc2MtPmJ1c2RldiwgJmNmZyk7CisKKwlTUElC VVNfR0VUX0NPTkZJRyhzYy0+YnVzZGV2LCAmY2ZnKTsKKwlzbG90LT5ob3N0LmZfbWF4ID0gY2Zn LmNsb2NrX2h6OworCisJaWYgKHNsb3QtPmhvc3QuZl9tYXggPiAyNTAwMDAwMCkgeworCQlzbG90 LT5ob3N0LmNhcHMgfD0gTU1DX0NBUF9IU1BFRUQ7CisJfQorCisJU1BJQlVTX1JFTEVBU0VfQlVT KHNjLT5idXNkZXYsIHNjLT5kZXYpOworCisJLyogU1BJIG1vZGUgcmVxdWlyZXMgMy4zViBvcGVy YXRpb24gKi8KKwlzbG90LT5ob3N0Lmhvc3Rfb2NyID0gTU1DX09DUl8zMjBfMzMwIHwgTU1DX09D Ul8zMzBfMzQwOyAgCisKKwlNTUNTUElfU0xPVF9MT0NLX0lOSVQoc2xvdCk7CisKKwlUUkFDRV9F WElUKGJyZGV2KTsKK30KKworCitzdGF0aWMgdm9pZAorbW1jc3BpX3Nsb3RfZmluaShkZXZpY2Vf dCBicmRldiwgc3RydWN0IG1tY3NwaV9zbG90ICpzbG90KQoreworCVRSQUNFX0VOVEVSKGJyZGV2 KTsKKworCU1NQ1NQSV9TTE9UX0xPQ0tfREVTVFJPWShzbG90KTsKKworCVRSQUNFX0VYSVQoYnJk ZXYpOworfQorCisKK3N0YXRpYyB2b2lkCittbWNzcGlfY2FyZF9hZGQoc3RydWN0IG1tY3NwaV9z bG90ICpzbG90KQoreworCWRldmljZV90IGJyZGV2ID0gc2xvdC0+c2MtPmRldjsKKworCVRSQUNF X0VOVEVSKGJyZGV2KTsKKworCU1NQ1NQSV9MT0NLX1NMT1Qoc2xvdCk7CisJc2xvdC0+ZGV2ID0g ZGV2aWNlX2FkZF9jaGlsZChicmRldiwgIm1tYyIsIC0xKTsKKwlkZXZpY2Vfc2V0X2l2YXJzKHNs b3QtPmRldiwgc2xvdCk7CisJTU1DU1BJX1VOTE9DS19TTE9UKHNsb3QpOworCisJZGV2aWNlX3By b2JlX2FuZF9hdHRhY2goc2xvdC0+ZGV2KTsKKworCVRSQUNFX0VYSVQoYnJkZXYpOworfQorCisK K3N0YXRpYyB2b2lkCittbWNzcGlfY2FyZF9kZWxldGUoc3RydWN0IG1tY3NwaV9zbG90ICpzbG90 KQoreworCWRldmljZV90IGJyZGV2ID0gc2xvdC0+c2MtPmRldjsKKwlkZXZpY2VfdCBkZXY7CisK KwlUUkFDRV9FTlRFUihicmRldik7CisKKwlNTUNTUElfTE9DS19TTE9UKHNsb3QpOworCWRldiA9 IHNsb3QtPmRldjsKKwlzbG90LT5kZXYgPSBOVUxMOworCU1NQ1NQSV9VTkxPQ0tfU0xPVChzbG90 KTsKKwlkZXZpY2VfZGVsZXRlX2NoaWxkKGJyZGV2LCBkZXYpOworCisJVFJBQ0VfRVhJVChicmRl dik7Cit9CisKKworc3RhdGljIGludAorbW1jc3BpX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJ c3RydWN0IG1tY3NwaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0 IHN5c2N0bF9jdHhfbGlzdCAqY3R4ID0gZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7CisJc3Ry dWN0IHN5c2N0bF9vaWQgKnRyZWUgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJc3Ry dWN0IHN5c2N0bF9vaWRfbGlzdCAqY2hpbGQgPSBTWVNDVExfQ0hJTERSRU4odHJlZSk7CisKKwlU UkFDRV9FTlRFUihkZXYpOworCisJc2MtPmRldiA9IGRldjsKKwlzYy0+YnVzZGV2ID0gZGV2aWNl X2dldF9wYXJlbnQoZGV2KTsKKwlzYy0+dXNlX2NyYyA9IDE7CisKKwlTWVNDVExfQUREX1VJTlQo Y3R4LCBjaGlsZCwgT0lEX0FVVE8sCisJCQkidXNlX2NyYyIsIENUTEZMQUdfUlcsICZzYy0+dXNl X2NyYywgc2l6ZW9mKHNjLT51c2VfY3JjKSwKKwkJCSJFbmFibGUvZGlzYWJsZSBjcmMgY2hlY2tp bmciKTsKKworCVNZU0NUTF9BRERfVUlOVChjdHgsIGNoaWxkLCBPSURfQVVUTywKKwkJCSJ0cmFj ZV9tYXNrIiwgQ1RMRkxBR19SVywgJnRyYWNlX3pvbmVfbWFzaywKKwkJCXNpemVvZih0cmFjZV96 b25lX21hc2spLAorCQkJIkJpdG1hc2sgZm9yIGFkanVzdGluZyB0cmFjZSBtZXNzYWdlcyIpOwor CisJbW1jc3BpX3Nsb3RfaW5pdChkZXYsICZzYy0+c2xvdCk7CisJCisJLyogWFhYIHRyaWdnZXIg dGhpcyBmcm9tIGNhcmQgaW5zZXJ0IGRldGVjdGlvbiAqLworCW1tY3NwaV9jYXJkX2FkZCgmc2Mt PnNsb3QpOworCQorCVRSQUNFX0VYSVQoZGV2KTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRp YyBpbnQKK21tY3NwaV9kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCVRSQUNFX0VOVEVSKGRldik7 CisKKyAgCXN0cnVjdCBtbWNzcGlfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor CisJLyogWFhYIHRyaWdnZXIgdGhpcyBmcm9tIGNhcmQgcmVtb3ZhbCBkZXRlY3Rpb24gKi8KKwlt bWNzcGlfY2FyZF9kZWxldGUoJnNjLT5zbG90KTsKKworCW1tY3NwaV9zbG90X2ZpbmkoZGV2LCAm c2MtPnNsb3QpOworCisJVFJBQ0VfRVhJVChkZXYpOworCisJcmV0dXJuICgwKTsKK30KKworCitz dGF0aWMgaW50CittbWNzcGlfc3VzcGVuZChkZXZpY2VfdCBkZXYpCit7CisJaW50IGVycjsKKwlU UkFDRV9FTlRFUihkZXYpOworCisJZXJyID0gYnVzX2dlbmVyaWNfc3VzcGVuZChkZXYpOworCWlm IChlcnIpIHsKKwkJVFJBQ0VfRVhJVChkZXYpOworCQlyZXR1cm4gKGVycik7CisJfQorCisJVFJB Q0VfRVhJVChkZXYpOworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludAorbW1jc3BpX3Jl c3VtZShkZXZpY2VfdCBkZXYpCit7CisJaW50IGVycjsKKwlUUkFDRV9FTlRFUihkZXYpOworCisJ ZXJyID0gYnVzX2dlbmVyaWNfcmVzdW1lKGRldik7CisJaWYgKGVycikgeworCQlUUkFDRV9FWElU KGRldik7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJu ICgwKTsKK30KKworCitzdGF0aWMgaW50CittbWNzcGlfcmVhZF9pdmFyKGRldmljZV90IGJ1cywg ZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwgdWludHB0cl90ICpyZXN1bHQpCit7CisJVFJBQ0Vf RU5URVIoYnVzKTsKKworCXN0cnVjdCBtbWNzcGlfc2xvdCAqc2xvdCA9IGRldmljZV9nZXRfaXZh cnMoY2hpbGQpOworCisJc3dpdGNoICh3aGljaCkgeworCWNhc2UgTU1DQlJfSVZBUl9CVVNfVFlQ RToKKwkJKnJlc3VsdCA9IGJ1c190eXBlX3NwaTsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFS X0JVU19NT0RFOgorCQkqcmVzdWx0ID0gc2xvdC0+aG9zdC5pb3MuYnVzX21vZGU7CisJCWJyZWFr OworCWNhc2UgTU1DQlJfSVZBUl9CVVNfV0lEVEg6CisJCSpyZXN1bHQgPSBzbG90LT5ob3N0Lmlv cy5idXNfd2lkdGg7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9DSElQX1NFTEVDVDoKKwkJ KnJlc3VsdCA9IHNsb3QtPmhvc3QuaW9zLmNoaXBfc2VsZWN0OworCQlicmVhazsKKwljYXNlIE1N Q0JSX0lWQVJfQ0xPQ0s6CisJCSpyZXN1bHQgPSBzbG90LT5ob3N0Lmlvcy5jbG9jazsKKwkJYnJl YWs7CisJY2FzZSBNTUNCUl9JVkFSX0ZfTUlOOgorCQkqcmVzdWx0ID0gc2xvdC0+aG9zdC5mX21p bjsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX0ZfTUFYOgorCQkqcmVzdWx0ID0gc2xvdC0+ aG9zdC5mX21heDsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX0hPU1RfT0NSOgorCQkqcmVz dWx0ID0gc2xvdC0+aG9zdC5ob3N0X29jcjsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX01P REU6CisJCSpyZXN1bHQgPSBzbG90LT5ob3N0Lm1vZGU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJf SVZBUl9PQ1I6CisJCSpyZXN1bHQgPSBzbG90LT5ob3N0Lm9jcjsKKwkJYnJlYWs7CisJY2FzZSBN TUNCUl9JVkFSX1BPV0VSX01PREU6CisJCSpyZXN1bHQgPSBzbG90LT5ob3N0Lmlvcy5wb3dlcl9t b2RlOworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfVkREOgorCQkqcmVzdWx0ID0gc2xvdC0+ aG9zdC5pb3MudmRkOworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfQ0FQUzoKKwkJKnJlc3Vs dCA9IHNsb3QtPmhvc3QuY2FwczsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX1RJTUlORzoK KwkJKnJlc3VsdCA9IHNsb3QtPmhvc3QuaW9zLnRpbWluZzsKKwkJYnJlYWs7CisJY2FzZSBNTUNC Ul9JVkFSX01BWF9EQVRBOgorCQkqcmVzdWx0ID0gNjQqMTAyNDsgIC8qIHNlZW1zIHJlYXNvbmFi bGUsIG5vdCBkaWN0YXRlZCBieSBhbnl0aGluZyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZXR1cm4gKEVJTlZBTCk7CisJfQorCisJVFJBQ0VfRVhJVChidXMpOworCisJcmV0dXJuICgwKTsK K30KKworCitzdGF0aWMgaW50CittbWNzcGlfd3JpdGVfaXZhcihkZXZpY2VfdCBidXMsIGRldmlj ZV90IGNoaWxkLCBpbnQgd2hpY2gsIHVpbnRwdHJfdCB2YWx1ZSkKK3sKKwlUUkFDRV9FTlRFUihi dXMpOworCisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0gZGV2aWNlX2dldF9pdmFycyhjaGls ZCk7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChFSU5WQUwpOwor CWNhc2UgTU1DQlJfSVZBUl9CVVNfTU9ERToKKwkJc2xvdC0+aG9zdC5pb3MuYnVzX21vZGUgPSB2 YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBNTUNCUl9JVkFSX0JVU19XSURUSDoKKwkJc2xvdC0+aG9z dC5pb3MuYnVzX3dpZHRoID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9DTE9D SzoKKwkJc2xvdC0+aG9zdC5pb3MuY2xvY2sgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBNTUNC Ul9JVkFSX0NISVBfU0VMRUNUOgorCQlzbG90LT5ob3N0Lmlvcy5jaGlwX3NlbGVjdCA9IHZhbHVl OworCQlicmVhazsKKwljYXNlIE1NQ0JSX0lWQVJfTU9ERToKKwkJc2xvdC0+aG9zdC5tb2RlID0g dmFsdWU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9PQ1I6CisJCXNsb3QtPmhvc3Qub2Ny ID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZBUl9QT1dFUl9NT0RFOgorCQlzbG90 LT5ob3N0Lmlvcy5wb3dlcl9tb2RlID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTU1DQlJfSVZB Ul9WREQ6CisJCXNsb3QtPmhvc3QuaW9zLnZkZCA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIE1N Q0JSX0lWQVJfVElNSU5HOgorCQlzbG90LT5ob3N0Lmlvcy50aW1pbmcgPSB2YWx1ZTsKKwkJYnJl YWs7CisJY2FzZSBNTUNCUl9JVkFSX0JVU19UWVBFOgorCWNhc2UgTU1DQlJfSVZBUl9DQVBTOgor CWNhc2UgTU1DQlJfSVZBUl9IT1NUX09DUjoKKwljYXNlIE1NQ0JSX0lWQVJfRl9NSU46CisJY2Fz ZSBNTUNCUl9JVkFSX0ZfTUFYOgorCWNhc2UgTU1DQlJfSVZBUl9NQVhfREFUQToKKwkJcmV0dXJu IChFSU5WQUwpOworCX0KKwlUUkFDRV9FWElUKGJ1cyk7CisKKwlyZXR1cm4gKDApOworfQorCisK K3N0YXRpYyBpbnQKK21tY3NwaV91cGRhdGVfaW9zKGRldmljZV90IGJyZGV2LCBkZXZpY2VfdCBy ZXFkZXYpCit7CisJVFJBQ0VfRU5URVIoYnJkZXYpOworCXN0cnVjdCBtbWNzcGlfc29mdGMgKnNj ID0gZGV2aWNlX2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0g ZGV2aWNlX2dldF9pdmFycyhyZXFkZXYpOworCXN0cnVjdCBzcGlfY29uZmlnIGNmZzsKKwlzdHJ1 Y3Qgc3BpX2NvbW1hbmQgc3BpX2NtZDsKKworCWlmIChwb3dlcl91cCA9PSBzbG90LT5ob3N0Lmlv cy5wb3dlcl9tb2RlKSB7CisJCS8qCisJCSAqIFRoaXMgc2VxdWVuY2UgcHJvdmlkZXMgdGhlIGlu aXRpYWxpemF0aW9uIHN0ZXBzIHJlcXVpcmVkCisJCSAqIGJ5IHRoZSBzcGVjIGFmdGVyIGNhcmQg cG93ZXIgaXMgYXBwbGllZCwgYnV0IGJlZm9yZSBhbnkKKwkJICogY29tbWFuZHMgYXJlIGlzc3Vl ZC4gIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGhhcm1sZXNzIGlmCisJCSAqIGFwcGxpZWQgYXQgYW55 IG90aGVyIHRpbWUgKGFmdGVyIGEgd2FybSByZXNldCwgZm9yCisJCSAqIGV4YW1wbGUpLgorCQkg Ki8KKworCQkvKiAKKwkJICogWFhYIFBvd2VyLW9uIHBvcnRpb24gb2YgaW1wbGVtZW50YXRpb24g b2YgY2FyZCBwb3dlcgorCQkgKiBjb250cm9sIHNob3VsZCBnbyBoZXJlLiAgU2hvdWxkIHByb2Jh Ymx5IGluY2x1ZGUgYSBwb3dlcgorCQkgKiBvZmYgZmlyc3QgdG8gZW5zdXJlIGNhcmQgaXMgZnVs bHkgcmVzZXQgZnJvbSBhbnkgcHJldmlvdXMKKwkJICogc3RhdGUuCisJCSAqLworCisJCS8qIAor CQkgKiBNYWtlIHN1cmUgcG93ZXIgdG8gY2FyZCBoYXMgcmFtcGVkIHVwLiAgVGhlIHNwZWMgcmVx dWlyZXMKKwkJICogcG93ZXIgdG8gcmFtcCB1cCBpbiAzNW1zIG9yIGxlc3MuCisJCSAqLworCQlE RUxBWSgzNTAwMCk7CisKKwkJLyoKKwkJICogUHJvdmlkZSBhdCBsZWFzdCA3NCBjbG9ja3Mgd2l0 aCBDUyBhbmQgTU9TSSBoaWdoIHRoYXQgdGhlCisJCSAqIHNwZWMgcmVxdWlyZXMgYWZ0ZXIgY2Fy ZCBwb3dlciBzdGFiaWxpemVzLgorCQkgKi8KKworCQkvKiBVc2UgMTAwIGtIeiBmb3IgbWF4aW11 bSBjb21wYXRpYmlsaXR5LiAqLworCQljZmcuY2xvY2tfaHogPSAxMDAwMDA7CisJCVNQSUJVU19T RVRfQ09ORklHKHNjLT5idXNkZXYsICZjZmcpOworCQlTUElCVVNfR0VUX0NPTkZJRyhzYy0+YnVz ZGV2LCAmY2ZnKTsKKwkJc2xvdC0+aG9zdC5pb3MuY2xvY2sgPSBjZmcuY2xvY2tfaHo7CisKKwkJ c3BpX2NtZC50eF9jbWQgPSBvbmVzYnVmOworCQlzcGlfY21kLnJ4X2NtZCA9IGp1bmtidWY7CisJ CXNwaV9jbWQudHhfY21kX3N6ID0gc3BpX2NtZC5yeF9jbWRfc3ogPSAxMDsKKwkJc3BpX2NtZC50 eF9kYXRhID0gc3BpX2NtZC5yeF9kYXRhID0gTlVMTDsKKwkJc3BpX2NtZC50eF9kYXRhX3N6ID0g c3BpX2NtZC5yeF9kYXRhX3N6ID0gMDsKKwkJc3BpX2NtZC5mbGFncyA9IFNQSV9TS0lQX0NISVBf U0VMRUNUIHwgU1BJX0NISVBfU0VMRUNUX0hJR0g7CisKKwkJU1BJQlVTX1RSQU5TRkVSKHNjLT5i dXNkZXYsIHNjLT5kZXYsICZzcGlfY21kKTsKKworCQkvKiAKKwkJICogUGVyaGFwcyB0aGlzIHdh cyBhIHdhcm0gcmVzZXQgYW5kIHRoZSBjYXJkIGlzIGluIHRoZQorCQkgKiBtaWRkbGUgb2YgYSBs b25nIG9wZXJhdGlvbi4KKwkJICovCisJCW1tY3NwaV93YWl0X2Zvcl9ub3RfYnVzeShicmRldik7 CisKKwkJc2xvdC0+bGFzdF9vcGNvZGUgPSAweGZmZmZmZmZmOworCQlzbG90LT5sYXN0X2ZsYWdz ID0gMDsKKwkJbWVtc2V0KHNsb3QtPmxhc3Rfb2NyLCAwLCBNTUNTUElfT0NSX0xFTik7CisJCXNs b3QtPmNyY19lbmFibGVkID0gMDsKKwkJc2xvdC0+Y3JjX2luaXRfZG9uZSA9IDA7CisJfQorCQor CisJLyogCisJICogQSBjbG9jayB2YWx1ZSBvZiB6ZXJvIG1lYW5zIHNldCB0aGUgY2xvY2sgbGlu ZSBsb3csIHdoaWNoIGlzIHRoZQorCSAqIG5vcm1hbCBzcGkgaWRsZSBzdGF0ZS4KKwkgKi8KKwlp ZiAoc2xvdC0+aG9zdC5pb3MuY2xvY2sgPiAwKSB7CisJCWNmZy5jbG9ja19oeiA9IHNsb3QtPmhv c3QuaW9zLmNsb2NrOworCQlTUElCVVNfU0VUX0NPTkZJRyhzYy0+YnVzZGV2LCAmY2ZnKTsKKwkJ CQorCQkvKiByZXRyaWV2ZSB0aGUgcG9zc2libHkgYWRqdXN0ZWVkIGRvd253YXJkIHNldHRpbmcg Ki8KKwkJU1BJQlVTX0dFVF9DT05GSUcoc2MtPmJ1c2RldiwgJmNmZyk7CisJCXNsb3QtPmhvc3Qu aW9zLmNsb2NrID0gY2ZnLmNsb2NrX2h6OworCX0KKworCWlmIChwb3dlcl9vZmYgPT0gc2xvdC0+ aG9zdC5pb3MucG93ZXJfbW9kZSkgeworCQkvKgorCQkgKiBYWFggUG93ZXItb2ZmIHBvcnRpb24g b2YgaW1wbGVtZW50YXRpb24gb2YgY2FyZCBwb3dlcgorCQkgKiBjb250cm9sIHNob3VsZCBnbyBo ZXJlLgorCQkgKi8KKwl9CQorCisJVFJBQ0VfRVhJVChicmRldik7CisKKwlyZXR1cm4gKDApOwor fQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK21tY3NwaV9kb19zcGlfcmVhZChkZXZpY2VfdCBk ZXYsIHVpbnQ4X3QgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJVFJBQ0VfRU5URVIoZGV2 KTsKKwkKKwlzdHJ1Y3QgbW1jc3BpX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK KwlzdHJ1Y3Qgc3BpX2NvbW1hbmQgc3BpX2NtZDsKKwlpbnQgZXJyOworCisJc3BpX2NtZC50eF9j bWQgPSBvbmVzYnVmOworCXNwaV9jbWQucnhfY21kID0gZGF0YTsKKwlzcGlfY21kLnR4X2NtZF9z eiA9IHNwaV9jbWQucnhfY21kX3N6ID0gbGVuOworCXNwaV9jbWQudHhfZGF0YSA9IE5VTEw7CisJ c3BpX2NtZC5yeF9kYXRhID0gTlVMTDsKKwlzcGlfY21kLnR4X2RhdGFfc3ogPSBzcGlfY21kLnJ4 X2RhdGFfc3ogPSAwOworCXNwaV9jbWQuZmxhZ3MgPSBTUElfU0tJUF9DSElQX1NFTEVDVDsKKwor CWVyciA9IFNQSUJVU19UUkFOU0ZFUihzYy0+YnVzZGV2LCBzYy0+ZGV2LCAmc3BpX2NtZCk7CisK KwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJuIChlcnIgPyBNTUNfRVJSX0ZBSUxFRCA6IE1NQ19F UlJfTk9ORSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorbW1jc3BpX2RvX3NwaV93cml0 ZShkZXZpY2VfdCBkZXYsIHVpbnQ4X3QgKmNtZCwgdW5zaWduZWQgaW50IGNtZGxlbiwKKwkJICAg IHVpbnQ4X3QgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQoreworCVRSQUNFX0VOVEVSKGRl dik7CisJCisJc3RydWN0IG1tY3NwaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 CisJc3RydWN0IHNwaV9jb21tYW5kIHNwaV9jbWQ7CisJaW50IGVycjsKKworCXNwaV9jbWQudHhf Y21kID0gY21kOworCXNwaV9jbWQucnhfY21kID0ganVua2J1ZjsKKwlzcGlfY21kLnR4X2NtZF9z eiA9IHNwaV9jbWQucnhfY21kX3N6ID0gY21kbGVuOworCXNwaV9jbWQudHhfZGF0YSA9IGRhdGE7 CisJc3BpX2NtZC5yeF9kYXRhID0ganVua2J1ZjsKKwlzcGlfY21kLnR4X2RhdGFfc3ogPSBzcGlf Y21kLnJ4X2RhdGFfc3ogPSBkYXRhbGVuOworCXNwaV9jbWQuZmxhZ3MgPSBTUElfU0tJUF9DSElQ X1NFTEVDVDsKKworCWVyciA9IFNQSUJVU19UUkFOU0ZFUihzYy0+YnVzZGV2LCBzYy0+ZGV2LCAm c3BpX2NtZCk7CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJuIChlcnIgPyBNTUNfRVJSX0ZB SUxFRCA6IE1NQ19FUlJfTk9ORSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorbW1jc3Bp X3dhaXRfZm9yX25vdF9idXN5KGRldmljZV90IGRldikKK3sKKwlUUkFDRV9FTlRFUihkZXYpOwor CQorCWludCBpOworCXVuc2lnbmVkIGludCBlcnI7CisJdW5zaWduZWQgaW50IGJ1c3lfbGVuZ3Ro ID0gMDsKKwl1aW50OF90IHBvbGxidWZbTU1DU1BJX1BPTExfTEVOXTsKKwlzdHJ1Y3QgYmludGlt ZSBzdGFydCwgZWxhcHNlZDsKKworCVRSQUNFKGRldiwgQUNUSU9OLCAid2FpdGluZyBmb3Igbm90 IGJ1c3lcbiIpOworCisJZ2V0YmludGltZSgmc3RhcnQpOworCWRvIHsKKwkJVFJBQ0UoZGV2LCBE RVRBSUxTLCAibG9va2luZyBmb3IgZW5kIG9mIGJ1c3lcbiIpOworCQllcnIgPSBtbWNzcGlfZG9f c3BpX3JlYWQoZGV2LCBwb2xsYnVmLCBNTUNTUElfUE9MTF9MRU4pOworCQlpZiAoTU1DX0VSUl9O T05FICE9IGVycikgeworCQkJVFJBQ0UoZGV2LCBFUlJPUiwgInNwaSByZWFkIGZhaWxlZFxuIik7 CisJCQlUUkFDRV9FWElUKGRldik7CisJCQlyZXR1cm4gKGVycik7CisJCX0KKworCQlmb3IgKGkg PSAwOyBpIDwgTU1DU1BJX1BPTExfTEVOOyBpKyspIHsKKwkJCWlmIChwb2xsYnVmW2ldICE9IDB4 MDApIHsKKwkJCQlUUkFDRShkZXYsIERFVEFJTFMsCisJCQkJICAgICAgImVuZCBvZiBidXN5IGZv dW5kIGF0ICVkXG4iLCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJ1c3lfbGVuZ3RoKys7CisJ CX0KKworCQlnZXRiaW50aW1lKCZlbGFwc2VkKTsKKwkJYmludGltZV9zdWIoJmVsYXBzZWQsICZz dGFydCk7CisKKwkJaWYgKGVsYXBzZWQuc2VjID4gTU1DU1BJX1RJTUVPVVRfU0VDKSB7CisJCQlU UkFDRShkZXYsIEVSUk9SLCAiY2FyZCBidXN5IGZvciBsb25nZXIgdGhhbiB0aW1lb3V0XG4iKTsK KwkJCXJldHVybiAoTU1DX0VSUl9USU1FT1VUKTsKKwkJfQorCX0gd2hpbGUgKE1NQ1NQSV9QT0xM X0xFTiA9PSBpKTsKKworCVRSQUNFKGRldiwgUkVTVUxULCAiYnVzeSBmb3IgJXUgYnl0ZSBzbG90 c1xuIiwgYnVzeV9sZW5ndGgpOworCisJVFJBQ0VfRVhJVChkZXYpOworCXJldHVybiAoTU1DX0VS Ul9OT05FKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50CittbWNzcGlfc2hpZnRfY29weSh1 aW50OF90ICpkZXN0LCB1aW50OF90ICpzcmMsIHVuc2lnbmVkIGludCBkZXN0X2xlbiwKKwkJICB1 bnNpZ25lZCBpbnQgc2hpZnQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoMCA9PSBzaGlm dCkgeworCQltZW1jcHkoZGVzdCwgc3JjLCBkZXN0X2xlbik7CisJfSBlbHNlIHsKKwkJZm9yIChp ID0gMDsgaSA8IGRlc3RfbGVuOyBpKyspIHsKKwkJCWRlc3RbaV0gPQorCQkJICAgIChzcmNbaV0g PDwgc2hpZnQpIHwgCisJCQkgICAgKHNyY1tpICsgMV0gPj4gKDggLSBzaGlmdCkpOworCQl9CisJ fQorCisJcmV0dXJuIChkZXN0X2xlbik7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorbW1j c3BpX2dldF9yZXNwb25zZV90b2tlbihkZXZpY2VfdCBkZXYsIHVpbnQ4X3QgbWFzaywgdWludDhf dCB2YWx1ZSwKKwkJCSAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc19idXN5LAor CQkJICB1aW50OF90ICpyc3BidWYpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGVycjsKKwl1 bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBzaGlmdCA9IDA7CisJdW5zaWduZWQg aW50IHJlbWFpbmluZzsKKwlib29sZWFuX3QgZm91bmQ7CisJdWludDhfdCBwb2xsYnVmWzIgKiBN TUNTUElfTUFYX1JTUF9MRU5dOworCXN0cnVjdCBiaW50aW1lIHN0YXJ0LCBlbGFwc2VkOworCisJ VFJBQ0VfRU5URVIoZGV2KTsKKworCS8qCisJICogVGhpcyBsb29wIHNlYXJjaGVzIGRhdGEgY2xv Y2tlZCBvdXQgb2YgdGhlIGNhcmQgZm9yIGEgcmVzcG9uc2UKKwkgKiB0b2tlbiBtYXRjaGluZyB0 aGUgZ2l2ZW4gbWFzayBhbmQgdmFsdWUuICBJdCB3aWxsIGxvY2F0ZSB0b2tlbnMKKwkgKiB0aGF0 IGFyZSBub3QgYnl0ZS1hbGlnbmVkLCBhcyBzb21lIGNhcmRzIHNlbmQgbm9uLWJ5dGUtYWxpZ25l ZAorCSAqIHJlc3BvbnNlIHRva2VucyBpbiBzb21lIHNpdHVhdGlvbnMuICBGb3IgZXhhbXBsZSwg dGhlIGZvbGxvd2luZworCSAqIGNhcmQgY29uc2lzdGVudGx5IHNlbmRzIGFuIHVuYWxpZ25lZCBy ZXNwb25zZSB0b2tlbiB0byB0aGUgc3RvcAorCSAqIGNvbW1hbmQgdXNlZCB0byB0ZXJtaW5hdGUg bXVsdGktYmxvY2sgcmVhZHM6CisJICoKKwkgKiBUcmFuc2NlbmQgMkdCIFNEU0MgY2FyZCwgY2lk OgorCSAqIG1pZD0weDFiIG9pZD0weDUzNGQgcG5tPSIwMDAwMCIgcHJ2PTEuMCBtZHQ9MDAuMjAw MAorCSAqLworCisJb2Zmc2V0ID0gMDsKKwlmb3VuZCA9IGZhbHNlOworCWdldGJpbnRpbWUoJnN0 YXJ0KTsKKwlkbyB7CisJCVRSQUNFKGRldiwgREVUQUlMUywKKwkJICAgICAgImxvb2tpbmcgZm9y IHJlc3BvbnNlIHRva2VuIHdpdGggbWFzayAweCUwMngsIHZhbHVlIDB4JTAyeFxuIiwKKwkJICAg ICAgbWFzaywgdmFsdWUpOworCQllcnIgPSBtbWNzcGlfZG9fc3BpX3JlYWQoZGV2LCAmcG9sbGJ1 ZltvZmZzZXRdLCBsZW4pOworCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJVFJBQ0Uo ZGV2LCBFUlJPUiwgInNwaSByZWFkIG9mIHJlc3BvbnNlIHRva2VuIGZhaWxlZFxuIik7CisJCQlU UkFDRV9FWElUKGRldik7CisJCQlyZXR1cm4gKGVycik7CisJCX0KKworCisJCWZvciAoaSA9IDA7 IGkgPCBsZW4gKyBvZmZzZXQ7IGkrKykgeworCQkJaWYgKChwb2xsYnVmW2ldICYgbWFzaykgPT0g dmFsdWUpIHsKKwkJCQlUUkFDRShkZXYsIERFVEFJTFMsCisJCQkJICAgICAgInJlc3BvbnNlIHRv a2VuIGZvdW5kIGF0ICVkICgweCUwMngpXG4iLAorCQkJCSAgICAgIGksIHBvbGxidWZbaV0pOwor CQkJCXNoaWZ0ID0gMDsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IGVsc2Ug aWYgKGkgPCBsZW4gKyBvZmZzZXQgLSAxKSB7CisJCQkJLyogCisJCQkJICogTm90IHRoZSBsYXN0 IGJ5dGUgaW4gdGhlIGJ1ZmZlciwgc28gY2hlY2sKKwkJCQkgKiBmb3IgYSBub24tYWxpZ25lZCBy ZXNwb25zZS4KKwkJCQkgKi8KKwkJCQl1aW50MTZfdCBzZWFyY2hfc3BhY2UgPQorCQkJCSAgICAo KHVpbnQxNl90KXBvbGxidWZbaV0gPDwgOCkgfCBwb2xsYnVmW2kgKyAxXTsKKwkJCQl1aW50MTZf dCBzZWFyY2hfbWFzayA9ICh1aW50MTZfdCltYXNrIDw8IDg7CisJCQkJdWludDE2X3Qgc2VhcmNo X3ZhbHVlID0gKHVpbnQxNl90KXZhbHVlIDw8IDg7CisKKwkJCQlUUkFDRShkZXYsIERFVEFJTFMs CisJCQkJICAgICAgInNlYXJjaDogc3BhY2U9MHglMDR4IG1hc2s9MHglMDR4IHZhbD0weCUwNHhc biIsIAorCQkJCSAgICAgIHNlYXJjaF9zcGFjZSwgc2VhcmNoX21hc2ssIHNlYXJjaF92YWx1ZSk7 CisKKwkJCQlmb3IgKHNoaWZ0ID0gMTsgc2hpZnQgPCA4OyBzaGlmdCsrKSB7CisJCQkJCXNlYXJj aF9zcGFjZSA8PD0gMTsKKwkJCQkJaWYgKChzZWFyY2hfc3BhY2UgJiBzZWFyY2hfbWFzaykgPT0K KwkJCQkJICAgIHNlYXJjaF92YWx1ZSkgeworCQkJCQkJZm91bmQgPSB0cnVlOworCQkJCQkJVFJB Q0UoZGV2LCBERVRBSUxTLAorCQkJCQkJICAgICAgIkZvdW5kIG1hdGNoIGF0IHNoaWZ0ICV1XG4i LAorCQkJCQkJICAgICAgc2hpZnQpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJ CQlpZiAoc2hpZnQgPCA4KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ LyogCisJCQkJICogTW92ZSB0aGUgbGFzdCBieXRlIHRvIHRoZSBmaXJzdCBwb3NpdGlvbgorCQkJ CSAqIGFuZCBnbyAncm91bmQgYWdhaW4uCisJCQkJICovCisJCQkJcG9sbGJ1ZlswXSA9IHBvbGxi dWZbaV07CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKSB7CisJCQlvZmZzZXQgPSAxOworCisJ CQlnZXRiaW50aW1lKCZlbGFwc2VkKTsKKwkJCWJpbnRpbWVfc3ViKCZlbGFwc2VkLCAmc3RhcnQp OworCisJCQlpZiAoZWxhcHNlZC5zZWMgPiBNTUNTUElfVElNRU9VVF9TRUMpIHsKKwkJCQlUUkFD RShkZXYsIEVSUk9SLAorCQkJCSAgICAgICJ0aW1lb3V0IHdoaWxlIGxvb2tpbmcgZm9yIHJlcG9u c2UgdG9rZW5cbiIpOworCQkJCXJldHVybiAoTU1DX0VSUl9USU1FT1VUKTsKKwkJCX0KKwkJfQor CX0gd2hpbGUgKCFmb3VuZCk7CisKKwkvKiAKKwkgKiBOb3RlIHRoYXQgaWYgaSA9PSAwIGFuZCBv ZmZzZXQgPT0gMSwgc2hpZnQgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbgorCSAqIHplcm8uCisJICov CisJcmVtYWluaW5nID0gaSAtIG9mZnNldCArIChzaGlmdCA/IDEgOiAwKTsKKworCVRSQUNFKGRl diwgREVUQUlMUywgImxlbj0ldSBpPSV1IHJlbT0ldSBzaGlmdD0ldVxuIiwKKwkgICAgICBsZW4s IGksIHJlbWFpbmluZywgc2hpZnQpOworCisJaWYgKHJlbWFpbmluZykgeworCQllcnIgPSBtbWNz cGlfZG9fc3BpX3JlYWQoZGV2LCAmcG9sbGJ1ZltsZW4gKyBvZmZzZXRdLCByZW1haW5pbmcpOwor CQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJVFJBQ0UoZGV2LCBFUlJPUiwKKwkJCSAg ICAgICJzcGkgcmVhZCBvZiByZW1haW5kZXIgb2YgcmVzcG9uc2UgdG9rZW4gZmFpbGVkXG4iKTsK KwkJCVRSQUNFX0VYSVQoZGV2KTsKKwkJCXJldHVybiAoZXJyKTsKKwkJfQorCX0KKworCW1tY3Nw aV9zaGlmdF9jb3B5KHJzcGJ1ZiwgJnBvbGxidWZbaV0sIGxlbiwgc2hpZnQpOworCisJaWYgKFRS QUNFX1pPTkVfRU5BQkxFRChSRVNVTFQpKSB7CisJCVRSQUNFKGRldiwgUkVTVUxULCAicmVzcG9u c2UgPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCXByaW50ZigiIDB4JTAy eCIsIHJzcGJ1ZltpXSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWlmIChoYXNfYnVz eSkgeworCQllcnIgPSBtbWNzcGlfd2FpdF9mb3Jfbm90X2J1c3koZGV2KTsKKwkJaWYgKE1NQ19F UlJfTk9ORSAhPSBlcnIpIHsKKwkJCVRSQUNFX0VYSVQoZGV2KTsKKwkJCXJldHVybiAoZXJyKTsK KwkJfQorCX0KKwkKKwlUUkFDRV9FWElUKGRldik7CisKKwlyZXR1cm4gKE1NQ19FUlJfTk9ORSk7 Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorbW1jc3BpX3NldF91cF9jb21tYW5kKGRldmlj ZV90IGRldiwgc3RydWN0IG1tY3NwaV9jb21tYW5kICptbWNzcGlfY21kLAorCQkgICAgICBzdHJ1 Y3QgbW1jX2NvbW1hbmQgKm1tY19jbWQpCit7CisJc3RydWN0IG1tY3NwaV9zb2Z0YyAqc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0gJnNjLT5z bG90OworCXVpbnQzMl90IG9wY29kZSA9IG1tY19jbWQtPm9wY29kZTsKKwl1aW50MzJfdCBhcmcg PSBtbWNfY21kLT5hcmc7CisJdWludDMyX3QgZmxhZ3MgPSBtbWNfY21kLT5mbGFnczsKKwl1aW50 MzJfdCByZXRyaWVzID0gbW1jX2NtZC0+cmV0cmllczsKKwl1bnNpZ25lZCBjaGFyIHJzcF90eXBl OworCXVuc2lnbmVkIGNoYXIgcnNwX2xlbjsKKwl1bnNpZ25lZCBpbnQgbGRhdGFfbGVuID0gMDsK Kwl1bnNpZ25lZCBpbnQgdXNlX2NyYyA9IHNsb3QtPmNyY19lbmFibGVkOworCisJaWYgKGZsYWdz ICYgTU1DX0NNRF9JU19BUFApIHsKKwkJc3dpdGNoIChvcGNvZGUpIHsKKwkJY2FzZSBBQ01EX1NE X1NUQVRVUzoKKwkJCXJzcF90eXBlID0gTU1DU1BJX1JTUF9SMjsKKwkJCWJyZWFrOworCQljYXNl IEFDTURfU0VORF9OVU1fV1JfQkxPQ0tTOgorCQljYXNlIEFDTURfU0VUX1dSX0JMS19FUkFTRV9D T1VOVDoKKwkJY2FzZSBBQ01EX1NFVF9DTFJfQ0FSRF9ERVRFQ1Q6CisJCWNhc2UgQUNNRF9TRU5E X1NDUjoKKwkJCXJzcF90eXBlID0gTU1DU1BJX1JTUF9SMTsKKwkJCWJyZWFrOworCQljYXNlIEFD TURfU0RfU0VORF9PUF9DT05EOgorCQkJLyogb25seSBIQ1MgYml0IGlzIHZhbGlkIGluIHNwaSBt b2RlICovCisJCQlhcmcgJj0gMHg0MDAwMDAwMDsKKwkJCXJzcF90eXBlID0gTU1DU1BJX1JTUF9S MTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJVFJBQ0UoZGV2LCBFUlJPUiwgIkludmFsaWQg YXBwIGNvbW1hbmQgb3Bjb2RlICV1XG4iLAorCQkJICAgICAgb3Bjb2RlKTsKKwkJCXJldHVybiAo TU1DX0VSUl9JTlZBTElEKTsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAob3Bjb2RlKSB7CisJ CWNhc2UgTU1DX0dPX0lETEVfU1RBVEU6CisJCQl1c2VfY3JjID0gMTsKKwkJCXJzcF90eXBlID0g TU1DU1BJX1JTUF9SMTsKKwkJCWJyZWFrOworCisJCWNhc2UgTU1DX1NFTkRfT1BfQ09ORDoKKwkJ Y2FzZSBNTUNfU1dJVENIX0ZVTkM6ICAvKiBhbHNvIFNEX1NXSVRDSF9GVU5DICovCisJCWNhc2Ug TU1DX1NFVF9CTE9DS0xFTjoKKwkJY2FzZSBNTUNfUkVBRF9TSU5HTEVfQkxPQ0s6CisJCWNhc2Ug TU1DX1JFQURfTVVMVElQTEVfQkxPQ0s6CisJCWNhc2UgTU1DX1dSSVRFX0JMT0NLOgorCQljYXNl IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSzoKKwkJY2FzZSBNTUNfUFJPR1JBTV9DU0Q6CisJCWNh c2UgTU1DX1NFTkRfV1JJVEVfUFJPVDoKKwkJY2FzZSBTRF9FUkFTRV9XUl9CTEtfU1RBUlQ6CisJ CWNhc2UgU0RfRVJBU0VfV1JfQkxLX0VORDoKKwkJY2FzZSBNTUNfTE9DS19VTkxPQ0s6CisJCWNh c2UgTU1DX0dFTl9DTUQ6CisJCWNhc2UgTU1DU1BJX0NSQ19PTl9PRkY6CisJCQlyc3BfdHlwZSA9 IE1NQ1NQSV9SU1BfUjE7CisJCQlicmVhazsKKworCQljYXNlIE1NQ19TRU5EX0NTRDoKKwkJY2Fz ZSBNTUNfU0VORF9DSUQ6CisJCQlhcmcgPSAwOyAvKiBubyByY2EgaW4gc3BpIG1vZGUgKi8KKwkJ CXJzcF90eXBlID0gTU1DU1BJX1JTUF9SMTsKKwkJCWxkYXRhX2xlbiA9IDE2OworCQkJYnJlYWs7 CisKKwkJY2FzZSBNTUNfQVBQX0NNRDoKKwkJCWFyZyA9IDA7IC8qIG5vIHJjYSBpbiBzcGkgbW9k ZSAqLworCQkJcnNwX3R5cGUgPSBNTUNTUElfUlNQX1IxOworCQkJYnJlYWs7CisKKwkJY2FzZSBN TUNfU1RPUF9UUkFOU01JU1NJT046CisJCWNhc2UgTU1DX1NFVF9XUklURV9QUk9UOgorCQljYXNl IE1NQ19DTFJfV1JJVEVfUFJPVDoKKwkJY2FzZSBNTUNfRVJBU0U6CisJCQlyc3BfdHlwZSA9IE1N Q1NQSV9SU1BfUjFCOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTUNfQUxMX1NFTkRfQ0lEOgorCQkJ LyogaGFuZGxlIE1NQ19BTExfU0VORF9DSUQgYXMgTU1DX1NFTkRfQ0lEICovCisJCQlvcGNvZGUg PSBNTUNfU0VORF9DSUQ7CisJCQlyc3BfdHlwZSA9IE1NQ1NQSV9SU1BfUjE7CisJCQlsZGF0YV9s ZW4gPSAxNjsKKwkJCWJyZWFrOworCisJCWNhc2UgTU1DX1NFTkRfU1RBVFVTOgorCQkJYXJnID0g MDsgLyogbm8gcmNhIGluIHNwaSBtb2RlICovCisJCQlyc3BfdHlwZSA9IE1NQ1NQSV9SU1BfUjI7 CisJCQlicmVhazsKKworCisJCWNhc2UgTU1DU1BJX1JFQURfT0NSOgorCQkJcnNwX3R5cGUgPSBN TUNTUElfUlNQX1IzOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRF9TRU5EX1JFTEFUSVZFX0FERFI6 CisJCQkvKiAKKwkJCSAqIEhhbmRsZSBTRF9TRU5EX1JFTEFUSVZFX0FERFIgYXMgTU1DX1NFTkRf U1RBVFVTIC0KKwkJCSAqIHRoZSByY2EgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB3aWxsIGFsd2F5 cyBiZSAwLgorCQkJICovCisJCQlvcGNvZGUgPSBNTUNfU0VORF9TVEFUVVM7CisJCQlyc3BfdHlw ZSA9IE1NQ1NQSV9SU1BfUjI7CisJCQlicmVhazsKKworCQljYXNlIFNEX1NFTkRfSUZfQ09ORDoK KwkJCXVzZV9jcmMgPSAxOworCQkJcnNwX3R5cGUgPSBNTUNTUElfUlNQX1I3OworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCVRSQUNFKGRldiwgRVJST1IsICJJbnZhbGlkIGNvbW1hbmQgb3Bj b2RlICV1XG4iLCBvcGNvZGUpOworCQkJcmV0dXJuIChNTUNfRVJSX0lOVkFMSUQpOworCQl9CQkK Kwl9CisKKwlzd2l0Y2ggKHJzcF90eXBlKSB7CisJY2FzZSBNTUNTUElfUlNQX1IxOgorCWNhc2Ug TU1DU1BJX1JTUF9SMUI6IHJzcF9sZW4gPSAxOyBicmVhazsgCisKKwljYXNlIE1NQ1NQSV9SU1Bf UjI6ICByc3BfbGVuID0gMjsgYnJlYWs7IAorCisJY2FzZSBNTUNTUElfUlNQX1IzOgorCWNhc2Ug TU1DU1BJX1JTUF9SNzogIHJzcF9sZW4gPSA1OyBicmVhazsKKworCWRlZmF1bHQ6CisJCVRSQUNF KGRldiwgRVJST1IsICJVbmtub3duIHJlc3BvbnNlIHR5cGUgJXVcbiIsIHJzcF90eXBlKTsKKwkJ cmV0dXJuIChNTUNfRVJSX0lOVkFMSUQpOworCX0KKworCW1tY3NwaV9jbWQtPm1tY19jbWQgPSBt bWNfY21kOworCisJbW1jc3BpX2NtZC0+b3Bjb2RlID0gb3Bjb2RlOworCW1tY3NwaV9jbWQtPmFy ZyA9IGFyZzsKKwltbWNzcGlfY21kLT5mbGFncyA9IGZsYWdzOworCW1tY3NwaV9jbWQtPnJldHJp ZXMgPSByZXRyaWVzOworCW1tY3NwaV9jbWQtPnVzZV9jcmMgPSB1c2VfY3JjOworCW1tY3NwaV9j bWQtPmVycm9yX21hc2sgPSBNTUNTUElfUjFfRVJSX01BU0s7CisJaWYgKG1tY3NwaV9jbWQtPnVz ZV9jcmMpIHsKKwkJbW1jc3BpX2NtZC0+ZXJyb3JfbWFzayAmPSB+TU1DU1BJX1IxX0NSQ19FUlI7 CisJfQorCW1tY3NwaV9jbWQtPnJzcF90eXBlID0gcnNwX3R5cGU7CisJbW1jc3BpX2NtZC0+cnNw X2xlbiA9IHJzcF9sZW47CisKKwltZW1zZXQoJm1tY3NwaV9jbWQtPmxkYXRhLCAwLCBzaXplb2Yo c3RydWN0IG1tY19kYXRhKSk7CisJbW1jc3BpX2NtZC0+bGRhdGEubGVuID0gbGRhdGFfbGVuOwor CWlmIChsZGF0YV9sZW4pIHsKKwkJbW1jc3BpX2NtZC0+bGRhdGEuZGF0YSA9IHNjLT5zbG90Lmxk YXRhX2J1ZjsKKwkJbW1jc3BpX2NtZC0+bGRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOworCQkK KwkJbW1jc3BpX2NtZC0+ZGF0YSA9ICZtbWNzcGlfY21kLT5sZGF0YTsKKwl9IGVsc2UgeworCQlt bWNzcGlfY21kLT5kYXRhID0gbW1jX2NtZC0+ZGF0YTsKKwl9CisKKwlyZXR1cm4gKE1NQ19FUlJf Tk9ORSk7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludAorbW1jc3BpX3NlbmRfY21kKGRldmlj ZV90IGRldiwgc3RydWN0IG1tY3NwaV9jb21tYW5kICpjbWQsIHVpbnQ4X3QgKnJzcGJ1ZikKK3sK KwlUUkFDRV9FTlRFUihkZXYpOworCisJdW5zaWduZWQgaW50IGVycjsKKwl1aW50MzJfdCBvcGNv ZGUgPSBjbWQtPm9wY29kZTsKKwl1aW50MzJfdCBhcmcgPSBjbWQtPmFyZzsKKwl1aW50OF90IHR4 YnVmWzhdOworCXVpbnQ4X3QgY3JjOworCisJVFJBQ0UoZGV2LCBBQ1RJT04sICJzZW5kaW5nICVz TUQldSgweCUwOHgpXG4iLAorCSAgICAgIGNtZC0+ZmxhZ3MgJiBNTUNfQ01EX0lTX0FQUCA/ICJB QyI6ICJDIiwgb3Bjb2RlLCBhcmcpOworCisJLyoKKwkgKiBTZW5kaW5nIHRoaXMgYnl0ZSBhaGVh ZCBvZiBlYWNoIGNvbW1hbmQgcHJldmVudHMgc29tZSBjYXJkcyBmcm9tCisJICogcmVzcG9uZGlu ZyB3aXRoIHVuYWxpZ25lZCBkYXRhLCBhbmQgZG9lc24ndCBib3RoZXIgdGhlIG90aGVycy4KKwkg KiBFeGFtcGxlczoKKwkgKgorCSAqIFNhbmRpc2sgMzJHQiBTREhDIGNhcmQsIGNpZDoKKwkgKiBt aWQ9MHgwMyBvaWQ9MHg1MzQ0IHBubT0iU1UzMkciIHBydj04LjAgbWR0PTAwLjIwMDAKKwkgKi8K Kwl0eGJ1ZlswXSA9IDB4ZmY7CisKKwl0eGJ1ZlsxXSA9IDB4NDAgfCAob3Bjb2RlICYgMHgzZik7 CisJdHhidWZbMl0gPSBhcmcgPj4gMjQ7CisJdHhidWZbM10gPSAoYXJnID4+IDE2KSAmIDB4ZmY7 CisJdHhidWZbNF0gPSAoYXJnID4+IDgpICYgMHhmZjsKKwl0eGJ1Zls1XSA9IGFyZyAmIDB4ZmY7 CisKKwlpZiAoY21kLT51c2VfY3JjKSB7CisJCWNyYyA9IHVwZGF0ZV9jcmM3KENSQzdfSU5JVElB TCwgJnR4YnVmWzFdLCA1KTsKKwl9IGVsc2UgeworCQljcmMgPSAwOworCX0KKwkKKwl0eGJ1Zls2 XSA9IChjcmMgPDwgMSkgfCAweDAxOworCisJIC8qCisJICAqIFNvbWUgY2FyZHMgaGF2ZSBnYXJi YWdlIG9uIHRoZSBidXMgaW4gdGhlIGZpcnN0IGJ5dGUgc2xvdCBhZnRlcgorCSAgKiB0aGUgbGFz dCBjb21tYW5kIGJ5dGUuICBUaGlzIHNlZW1zIHRvIGJlIGNvbW1vbiB3aXRoIHRoZSBzdG9wCisJ ICAqIGNvbW1hbmQuICBDbG9ja2luZyBvdXQgYW4gZXh0cmEgYnl0ZSB3aXRoIHRoZSBjb21tYW5k IHdpbGwKKwkgICogcmVzdWx0IGluIHRoYXQgZGF0YSBub3QgYmVpbmcgc2VhcmNoZWQgZm9yIHRo ZSByZXNwb25zZSB0b2tlbiwKKwkgICogd2hpY2ggaXMgb2ssIGJlY2F1c2Ugbm8gY2FyZHMgcmVz cG9uZCB0aGF0IGZhc3QuCisJICAqLworCXR4YnVmWzddID0gMHhmZjsKKworCWVyciA9IG1tY3Nw aV9kb19zcGlfd3JpdGUoZGV2LCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSwgTlVMTCwgMCk7CisJaWYg KE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJVFJBQ0UoZGV2LCBFUlJPUiwgInNwaSB3cml0ZSBv ZiBjb21tYW5kIGZhaWxlZFxuIik7CisJCVRSQUNFX0VYSVQoZGV2KTsKKwkJcmV0dXJuIChlcnIp OworCX0KKworCVRSQUNFKGRldiwgREVUQUlMUywKKwkgICAgICAicnggY21kIGJ5dGVzIDB4JTAy eCAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCSAgICAgIGp1bmtidWZb MF0sIGp1bmtidWZbMV0sIGp1bmtidWZbMl0sIGp1bmtidWZbM10sIGp1bmtidWZbNF0sCisJICAg ICAganVua2J1Zls1XSApOworCVRSQUNFKGRldiwgREVUQUlMUywgInNraXBwZWQgcmVzcG9uc2Ug Ynl0ZSBpcyAweCUwMnhcbiIsIGp1bmtidWZbNl0pOworCisJZXJyID0gbW1jc3BpX2dldF9yZXNw b25zZV90b2tlbihkZXYsIE1NQ1NQSV9SMV9NQVNLLCBNTUNTUElfUjFfVkFMVUUsCisJCQkJCWNt ZC0+cnNwX2xlbiwKKwkJCQkJTU1DU1BJX1JTUF9SMUIgPT0gY21kLT5yc3BfdHlwZSwgcnNwYnVm KTsKKworCWlmIChNTUNfRVJSX05PTkUgPT0gZXJyKSB7CisJCWlmIChyc3BidWZbMF0gJiBjbWQt PmVycm9yX21hc2sgJiBNTUNTUElfUjFfQ1JDX0VSUikgeworCQkJZXJyID0gTU1DX0VSUl9CQURD UkM7CisJCX0gZWxzZSBpZiAocnNwYnVmWzBdICYgY21kLT5lcnJvcl9tYXNrKSB7CisJCQllcnIg PSBNTUNfRVJSX0lOVkFMSUQ7CisJCX0KKwl9CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJu IChlcnIpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK21tY3NwaV9yZWFkX2Jsb2NrKGRl dmljZV90IGRldiwgdWludDhfdCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwKKwkJICB1bnNpZ25l ZCBpbnQgY2hlY2tfY3JjMTYsIHVuc2lnbmVkIGludCBjaGVja19jcmM3KQoreworCVRSQUNFX0VO VEVSKGRldik7CisJCisJaW50IGk7CisJdW5zaWduZWQgaW50IGVycjsKKwl1bnNpZ25lZCBpbnQg bm9uX3Rva2VuX2J5dGVzOworCXVuc2lnbmVkIGludCBkYXRhX2NhcHR1cmVkOworCXVuc2lnbmVk IGludCBjcmNfY2FwdHVyZWQ7CisJdW5zaWduZWQgaW50IHBvbGxidWZwb3M7CisJdW5zaWduZWQg aW50IGNyYzE2X21pc21hdGNoID0gMDsKKwl1aW50MTZfdCBjcmMxNiwgY29tcHV0ZWRfY3JjMTY7 CisJdWludDhfdCBjcmM3LCBjb21wdXRlZF9jcmM3OworCXVpbnQ4X3QgcG9sbGJ1ZltNTUNTUElf UE9MTF9MRU5dOworCXVpbnQ4X3QgY3JjYnVmW01NQ1NQSV9EQVRBX0NSQ19MRU5dOworCXN0cnVj dCBiaW50aW1lIHN0YXJ0OworCXN0cnVjdCBiaW50aW1lIGVsYXBzZWQ7CisKKwlUUkFDRShkZXYs IEFDVElPTiwgInJlYWQgYmxvY2soJXUpXG4iLCBsZW4pOworCisJLyogCisJICogV2l0aCB0aGlz IGFwcHJvYWNoLCB3ZSBjb3VsZCBwb2ludGxlc3NseSByZWFkIHVwIHRvCisJICogKE1NQ1NQSV9Q T0xMX0xFTiAtIDMgLSBsZW4pIGJ5dGVzIGZyb20gdGhlIHNwaSBidXMsIGJ1dCBvbmx5IGluCisJ ICogdGhlIG9kZCBzaXR1YXRpb24gd2hlcmUgTU1DU1BJX1BPTExfTEVOIGlzIGdyZWF0ZXIgdGhh biBsZW4gKyAzLgorCSAqLworCWdldGJpbnRpbWUoJnN0YXJ0KTsKKwlkbyB7CisJCVRSQUNFKGRl diwgREVUQUlMUywgImxvb2tpbmcgZm9yIHJlYWQgdG9rZW5cbiIpOworCQllcnIgPSBtbWNzcGlf ZG9fc3BpX3JlYWQoZGV2LCBwb2xsYnVmLCBNTUNTUElfUE9MTF9MRU4pOworCQlpZiAoTU1DX0VS Ul9OT05FICE9IGVycikgeworCQkJVFJBQ0UoZGV2LCBFUlJPUiwgInRva2VuIHJlYWQgb24gc3Bp IGZhaWxlZFxuIik7CisJCQlUUkFDRV9FWElUKGRldik7CisJCQlyZXR1cm4gKGVycik7CisJCX0K KwkgIAorCQlmb3IgKGkgPSAwOyBpIDwgTU1DU1BJX1BPTExfTEVOOyBpKyspIHsKKwkJCWlmIChN TUNTUElfVE9LRU5fU0IgPT0gcG9sbGJ1ZltpXSkgeworCQkJCVRSQUNFKGRldiwgUkVTVUxULAor CQkJCSAgICAgICJmb3VuZCBzdGFydCBibG9jayB0b2tlbiBhdCAlZFxuIiwgaSk7CisJCQkJYnJl YWs7CisJCQl9IGVsc2UgaWYgKE1NQ1NQSV9JU19ERV9UT0tFTihwb2xsYnVmW2ldKSkgeyAKKwkJ CQlUUkFDRShkZXYsIEVSUk9SLAorCQkJCSAgICAgICJmb3VuZCBkYXRhIGVycm9yIHRva2VuIGF0 ICVkXG4iLCBpKTsKKwkJCQlUUkFDRV9FWElUKGRldik7CisJCQkJcmV0dXJuIChNTUNfRVJSX0ZB SUxFRCk7CisJCQl9CisJCX0KKworCQlnZXRiaW50aW1lKCZlbGFwc2VkKTsKKwkJYmludGltZV9z dWIoJmVsYXBzZWQsICZzdGFydCk7CisKKwkJaWYgKGVsYXBzZWQuc2VjID4gTU1DU1BJX1RJTUVP VVRfU0VDKSB7CisJCQlUUkFDRShkZXYsIEVSUk9SLAorCQkJICAgICAgInRpbWVvdXQgd2hpbGUg bG9va2luZyBmb3IgcmVhZCB0b2tlblxuIik7CisJCQlyZXR1cm4gKE1NQ19FUlJfVElNRU9VVCk7 CisJCX0KKwl9IHdoaWxlIChNTUNTUElfUE9MTF9MRU4gPT0gaSk7CisJCisJLyogY29weSBhbnkg ZGF0YSBjYXB0dXJlZCBpbiB0YWlsIG9mIHBvbGwgYnVmIHRvIGRhdGEgYnVmICovCisJbm9uX3Rv a2VuX2J5dGVzID0gTU1DU1BJX1BPTExfTEVOIC0gaSAtIDE7CisJZGF0YV9jYXB0dXJlZCA9IG1p bihub25fdG9rZW5fYnl0ZXMsIGxlbik7CisJY3JjX2NhcHR1cmVkID0gbm9uX3Rva2VuX2J5dGVz IC0gZGF0YV9jYXB0dXJlZDsKKwlwb2xsYnVmcG9zID0gaSArIDE7CisKKwlUUkFDRShkZXYsIERF VEFJTFMsICJkYXRhIGJ5dGVzIGNhcHR1cmVkIGluIHBvbGxidWYgPSAldVxuIiwKKwkgICAgICBk YXRhX2NhcHR1cmVkKTsKKworCW1lbWNweShkYXRhLCAmcG9sbGJ1Zltwb2xsYnVmcG9zXSwgZGF0 YV9jYXB0dXJlZCk7CisJcG9sbGJ1ZnBvcyArPSBkYXRhX2NhcHR1cmVkOworCisJVFJBQ0UoZGV2 LCBERVRBSUxTLCAiZGF0YSBieXRlcyB0byByZWFkID0gJXUsIGNyY19jYXB0dXJlZCA9ICV1XG4i LAorCSAgICAgIGxlbiAtIGRhdGFfY2FwdHVyZWQsIGNyY19jYXB0dXJlZCk7CisKKwkvKiBnZXQg YW55IHJlbWFpbmluZyBkYXRhIGZyb20gdGhlIHNwaSBidXMgKi8KKwlpZiAoZGF0YV9jYXB0dXJl ZCA8IGxlbikgeworCQllcnIgPSBtbWNzcGlfZG9fc3BpX3JlYWQoZGV2LCAmZGF0YVtkYXRhX2Nh cHR1cmVkXSwKKwkJCQkJIGxlbiAtIGRhdGFfY2FwdHVyZWQpOworCQlpZiAoTU1DX0VSUl9OT05F ICE9IGVycikgeworCQkJVFJBQ0UoZGV2LCBFUlJPUiwKKwkJCSAgICAgICJzcGkgcmVhZCBvZiBy ZW1haW5kZXIgb2YgYmxvY2sgZmFpbGVkXG4iKTsKKwkJCVRSQUNFX0VYSVQoZGV2KTsKKwkJCXJl dHVybiAoZXJyKTsKKwkJfQorCisJfQorCisJLyogY29weSBhbnkgY3JjIGNhcHR1cmVkIGluIHRo ZSBwb2xsIGJ1ZiB0byB0aGUgY3JjIGJ1ZiAqLworCW1lbWNweShjcmNidWYsICZwb2xsYnVmW3Bv bGxidWZwb3NdLCBjcmNfY2FwdHVyZWQpOworCisJLyogZ2V0IGFueSByZW1haW5pbmcgY3JjICov CisJaWYgKGNyY19jYXB0dXJlZCA8IE1NQ1NQSV9EQVRBX0NSQ19MRU4pIHsKKwkJVFJBQ0UoZGV2 LCBERVRBSUxTLCAiY3JjIGJ5dGVzIHRvIHJlYWQgPSAldVxuIiwKKwkJICAgICAgTU1DU1BJX0RB VEFfQ1JDX0xFTiAtIGNyY19jYXB0dXJlZCk7CisKKwkJZXJyID0gbW1jc3BpX2RvX3NwaV9yZWFk KGRldiwgJmNyY2J1ZltjcmNfY2FwdHVyZWRdLAorCQkJCQkgTU1DU1BJX0RBVEFfQ1JDX0xFTiAt IGNyY19jYXB0dXJlZCk7CisJCWlmIChNTUNfRVJSX05PTkUgIT0gZXJyKSB7CisJCQlUUkFDRShk ZXYsIEVSUk9SLCAic3BpIHJlYWQgb2YgY3JjIGZhaWxlZFxuIik7CisJCQlUUkFDRV9FWElUKGRl dik7CisJCQlyZXR1cm4gKGVycik7CisJCX0KKwl9CisKKworCS8qIAorCSAqIFRoZSBmb2xsb3dp bmcgY3JjIGNoZWNraW5nIGNvZGUgaXMgZGVsaWJlcmF0ZWx5IHN0cnVjdHVyZWQgdG8KKwkgKiBi b3RoIHJlcXVpcmUgYSBwYXNzaW5nIGNyYy03IGNoZWNrIGFuZCBhbGxvdyBhIHBhc3NpbmcgY3Jj LTcKKwkgKiBjaGVjayB0byBvdmVycmlkZSBhIGZhaWxpbmcgY3JjLTE2IGNoZWNrIHdoZW4gY3Jj LTcgY2hlY2tpbmcgaXMKKwkgKiBlbmFibGVkLgorCSAqLworCWlmIChjaGVja19jcmMxNikgewor CQljcmMxNiA9ICgodWludDE2X3QpY3JjYnVmWzBdIDw8IDgpIHwgY3JjYnVmWzFdOworCQljb21w dXRlZF9jcmMxNiA9IHVwZGF0ZV9jcmMxNihDUkMxNl9JTklUSUFMLCBkYXRhLCBsZW4pOworCQlU UkFDRShkZXYsIFJFU1VMVCwgInNlbnRfY3JjMTY9MHglMDR4IGNvbXB1dGVkX2NyYzE2PTB4JTA0 eFxuIiwKKwkJICAgICAgY3JjMTYsIGNvbXB1dGVkX2NyYzE2KTsKKworCQlpZiAoY29tcHV0ZWRf Y3JjMTYgIT0gY3JjMTYpIHsKKwkJCWNyYzE2X21pc21hdGNoID0gMTsKKworCQkJVFJBQ0UoZGV2 LCBFUlJPUiwKKwkJCSAgICAgICJjcmMxNiBtaXNtYXRjaCwgc2hvdWxkIGJlIDB4JTA0eCwgaXMg MHglMDR4XG4iLAorCQkJICAgICAgY3JjMTYsIGNvbXB1dGVkX2NyYzE2KTsKKwkJCQorCQkJaWYg KCFjaGVja19jcmM3KSB7CisJCQkJVFJBQ0VfRVhJVChkZXYpOworCQkJCXJldHVybiAoTU1DX0VS Ul9CQURDUkMpOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoZWNrX2NyYzcpIHsKKwkJaWYgKGNy YzE2X21pc21hdGNoKSB7CisJCQkvKgorCQkJICogTGV0IHRoZSB1c2VyIGtub3cgc29tZXRoaW5n IGVsc2UgaXMgYmVpbmcgY2hlY2tlZAorCQkJICogYWZ0ZXIgYW5ub3VuY2luZyBhbiBlcnJvciBh Ym92ZS4KKwkJCSAqLworCQkJVFJBQ0UoZGV2LCBFUlJPUiwgImNoZWNraW5nIGNyYzdcbiIpOwor CQl9CisKKwkJY3JjNyA9IGRhdGFbbGVuIC0gMV0gPj4gMTsKKwkJY29tcHV0ZWRfY3JjNyA9IHVw ZGF0ZV9jcmM3KENSQzdfSU5JVElBTCwgZGF0YSwgbGVuIC0gMSk7CisJCVRSQUNFKGRldiwgUkVT VUxULCAic2VudF9jcmM3PTB4JTAyeCBjb21wdXRlZF9jcmM3PTB4JTAyeFxuIiwKKwkJICAgICAg Y3JjNywgY29tcHV0ZWRfY3JjNyk7CisKKwkJaWYgKGNvbXB1dGVkX2NyYzcgIT0gY3JjNykgewor CQkJVFJBQ0UoZGV2LCBFUlJPUiwKKwkJCSAgICAgICJjcmM3IG1pc21hdGNoLCBzaG91bGQgYmUg MHglMDJ4LCBpcyAweCUwMnhcbiIsCisJCQkgICAgICBjcmM3LCBjb21wdXRlZF9jcmM3KTsKKwkJ CQorCQkJVFJBQ0VfRVhJVChkZXYpOworCQkJcmV0dXJuIChNTUNfRVJSX0JBRENSQyk7CisJCX0K Kwl9CisJCisJVFJBQ0VfRVhJVChkZXYpOworCisJcmV0dXJuIChNTUNfRVJSX05PTkUpOworfQor CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK21tY3NwaV9zZW5kX3N0b3AoZGV2aWNlX3QgZGV2LCB1 bnNpZ25lZCBpbnQgcmV0cmllcykKK3sKKwlUUkFDRV9FTlRFUihkZXYpOworCWludCBpOworCXVu c2lnbmVkIGludCBlcnI7CisJc3RydWN0IG1tY3NwaV9jb21tYW5kIHN0b3A7CisJc3RydWN0IG1t Y19jb21tYW5kIG1tY19zdG9wOworCXVpbnQ4X3Qgc3RvcF9yZXNwb25zZTsKKworCW1lbXNldCgm bW1jX3N0b3AsIDAsIHNpemVvZihtbWNfc3RvcCkpOworCW1tY19zdG9wLm9wY29kZSA9IE1NQ19T VE9QX1RSQU5TTUlTU0lPTjsKKwltbWNfc3RvcC5mbGFncyA9IE1NQ19SU1BfUjFCIHwgTU1DX0NN RF9BQzsKKworCWVyciA9IG1tY3NwaV9zZXRfdXBfY29tbWFuZChkZXYsICZzdG9wLCAmbW1jX3N0 b3ApOworCWlmIChNTUNfRVJSX05PTkUgIT0gZXJyKSB7CisJCVRSQUNFX0VYSVQoZGV2KTsKKwkJ cmV0dXJuIChlcnIpOworCX0KKworCS8qIAorCSAqIFJldHJ5IHN0b3AgY29tbWFuZHMgdGhhdCBm YWlsIGR1ZSB0byBiYWQgY3JjIGhlcmUgYmVjYXVzZSBoYXZpbmcKKwkgKiB0aGUgY2FsbGVyIHJl dHJ5IHRoZSBlbnRpcmUgcmVhZC93cml0ZSBjb21tYW5kIGR1ZSB0byBzdWNoIGEKKwkgKiBmYWls dXJlIGlzIHBvaW50bGVzc2x5IGV4cGVuc2l2ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IHJl dHJpZXM7IGkrKykgeworCQlUUkFDRShkZXYsIEFDVElPTiwgInNlbmRpbmcgc3RvcCBtZXNzYWdl XG4iKTsKKworCQllcnIgPSBtbWNzcGlfc2VuZF9jbWQoZGV2LCAmc3RvcCwgJnN0b3BfcmVzcG9u c2UpOworCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJVFJBQ0VfRVhJVChkZXYpOwor CQkJcmV0dXJuIChlcnIpOworCQl9CisKKwkJVFJBQ0UoZGV2LCBSRVNVTFQsICJzdG9wIHJlc3Bv bnNlPTB4JTAyeFxuIiwgc3RvcF9yZXNwb25zZSk7CisKKwkJLyogcmV0cnkgb24gY3JjIGVycm9y ICovCisJCWlmIChzdG9wX3Jlc3BvbnNlICYgc3RvcC5lcnJvcl9tYXNrICYgTU1DU1BJX1IxX0NS Q19FUlIpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaWYgKHN0b3BfcmVzcG9uc2UgJiBz dG9wLmVycm9yX21hc2spIHsKKwkJVFJBQ0VfRVhJVChkZXYpOworCisJCS8qIAorCQkgKiBEb24n dCByZXR1cm4gTU1DX0VSUl9CQURDUkMgaGVyZSwgZXZlbiBpZgorCQkgKiBNTUNTUElfUjFfQ1JD X0VSUiBpcyBzZXQsIGJlY2F1c2UgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoZQorCQkgKiBjYWxsZXIn cyByZXRyeS1vbi1jcmMtZXJyb3IgbWVjaGFuaXNtLCBlZmZlY3RpdmVseQorCQkgKiBzcXVhcmlu ZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBvZiB0aGUgc3RvcAorCQkgKiBjb21tYW5k LgorCQkgKi8KKwkJcmV0dXJuIChNTUNfRVJSX0ZBSUxFRCk7CisJfQorCVRSQUNFX0VYSVQoZGV2 KTsKKworCXJldHVybiAoTU1DX0VSUl9OT05FKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50 CittbWNzcGlfcmVhZF9waGFzZShkZXZpY2VfdCBkZXYsIHN0cnVjdCBtbWNzcGlfY29tbWFuZCAq Y21kKQoreworCVRSQUNFX0VOVEVSKGRldik7CisKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBj bWQtPmRhdGE7CisJdWludDhfdCAqZGF0YTg7CisJdW5zaWduZWQgaW50IGRhdGFfb2Zmc2V0Owor CXVuc2lnbmVkIGludCBudW1fYmxvY2tzOworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQg aW50IGVycjsKKwlpbnQgaTsKKworCWRhdGE4ID0gKHVpbnQ4X3QgKilkYXRhLT5kYXRhOworCWRh dGFfb2Zmc2V0ID0gMDsKKworCWlmIChkYXRhLT5sZW4gPCBNTUNTUElfREFUQV9CTE9DS19MRU4p IHsKKwkJbnVtX2Jsb2NrcyA9IDE7CisJCWxlbiA9IGRhdGEtPmxlbjsKKwl9IGVsc2UgeworCQlu dW1fYmxvY2tzID0gZGF0YS0+bGVuIC8gTU1DU1BJX0RBVEFfQkxPQ0tfTEVOOworCQlsZW4gPSBN TUNTUElfREFUQV9CTE9DS19MRU47CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9ibG9ja3M7 IGkrKykgeworCQkKKwkJLyoKKwkJICogVGhlIENJRCBhbmQgQ1NEIGRhdGEgYmxvY2tzIGNvbnRh aW4gYm90aCBhIHRyYWlsaW5nIGNyYy03CisJCSAqIGluc2lkZSB0aGUgZGF0YSBibG9jayBhbmQg dGhlIHN0YW5kYXJkIGNyYy0xNiBmb2xsb3dpbmcKKwkJICogdGhlIGRhdGEgYmxvY2ssIHNvIGJv dGggYXJlIGNoZWNrZWQgd2hlbiB1c2VfY3JjIGlzIHRydWUuCisJCSAqCisJCSAqIFdoZW4gY3Jj IGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQgdmlhIENNRDU5LCBzb21lIGNhcmRzCisJCSAqIHNl bmQgQ0lEIGFuZCBDU0QgZGF0YSBibG9ja3Mgd2l0aCBjb3JyZWN0IGNyYy03IHZhbHVlcworCQkg KiBidXQgaW5jb3JyZWN0IGNyYy0xNiB2YWx1ZXMuICByZWFkX2Jsb2NrIHdpbGwgYWNjZXB0CisJ CSAqIHRob3NlIHJlc3BvbnNlcyBhcyB2YWxpZCBhcyBsb25nIGFzIHRoZSBjcmMtNyBpcyBjb3Jy ZWN0LgorCQkgKgorCQkgKiBFeGFtcGxlczoKKwkJICoKKwkJICogU3VwZXIgVGFsZW50IDFHQiBT RFNDIGNhcmQsIGNpZDoKKwkJICogbWlkPTB4MWIgb2lkPTB4NTM0ZCBwbm09IjAwMDAwIiBwcnY9 MS4wIG1kdD0wMi4yMDEwCisJCSAqLworCQllcnIgPSBtbWNzcGlfcmVhZF9ibG9jayhkZXYsICZk YXRhOFtkYXRhX29mZnNldF0sIGxlbiwKKwkJCQkJY21kLT51c2VfY3JjLAorCQkJCQljbWQtPnVz ZV9jcmMgJiYKKwkJCQkJKChNTUNfU0VORF9DSUQgPT0gY21kLT5vcGNvZGUpIHx8CisJCQkJCSAo TU1DX1NFTkRfQ1NEID09IGNtZC0+b3Bjb2RlKSkpOworCisJCWlmIChNTUNfRVJSX05PTkUgIT0g ZXJyKSB7CisJCQlUUkFDRV9FWElUKGRldik7CisJCQlyZXR1cm4gKGVycik7CisJCX0KKwkJCQkJ CisJCWRhdGFfb2Zmc2V0ICs9IE1NQ1NQSV9EQVRBX0JMT0NLX0xFTjsKKwl9CisKKwkvKiBtdWx0 aS1ibG9jayByZWFkIGNvbW1hbmRzIHJlcXVpcmUgYSBzdG9wICovCisJaWYgKG51bV9ibG9ja3Mg PiAxKSB7CisJCWVyciA9IG1tY3NwaV9zZW5kX3N0b3AoZGV2LCBjbWQtPnJldHJpZXMpOworCQlp ZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJVFJBQ0VfRVhJVChkZXYpOworCQkJcmV0dXJu IChlcnIpOworCQl9CisJfQorCisJVFJBQ0VfRVhJVChkZXYpOworCisJcmV0dXJuIChNTUNfRVJS X05PTkUpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK21tY3NwaV93cml0ZV9ibG9jayhk ZXZpY2VfdCBkZXYsIHVpbnQ4X3QgKmRhdGEsIHVuc2lnbmVkIGludCBpc19tdWx0aSwKKwkJICAg dW5zaWduZWQgY2hhciB1c2VfY3JjLCB1aW50OF90ICpzdGF0dXMpCit7CisJVFJBQ0VfRU5URVIo ZGV2KTsKKwkKKwl1bnNpZ25lZCBpbnQgZXJyOworCXVpbnQxNl90IGNyYzsKKwl1aW50OF90IHJl c3BvbnNlX3Rva2VuOworCXVpbnQ4X3QgdHhidWZbbWF4KE1NQ1NQSV9QT0xMX0xFTiwgMildOwor CisJaWYgKHVzZV9jcmMpIHsKKwkJY3JjID0gdXBkYXRlX2NyYzE2KENSQzE2X0lOSVRJQUwsIGRh dGEsIE1NQ1NQSV9EQVRBX0JMT0NLX0xFTik7CisJfSBlbHNlIHsKKwkJY3JjID0gMDsKKwl9CisK KwlUUkFDRShkZXYsIEFDVElPTiwgIndyaXRlIGJsb2NrKDUxMikgY3JjPTB4JTA0eFxuIiwgY3Jj KTsKKworCXR4YnVmWzBdID0gaXNfbXVsdGkgPyBNTUNTUElfVE9LRU5fU0JfV00gOiBNTUNTUElf VE9LRU5fU0I7CisJZXJyID0gbW1jc3BpX2RvX3NwaV93cml0ZShkZXYsIHR4YnVmLCAxLCBkYXRh LCBNTUNTUElfREFUQV9CTE9DS19MRU4pOworCWlmIChNTUNfRVJSX05PTkUgIT0gZXJyKSB7CisJ CVRSQUNFX0VYSVQoZGV2KTsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXR4YnVmWzBdID0gY3Jj ID4+IDg7CisJdHhidWZbMV0gPSBjcmMgJiAweGZmOworCWVyciA9IG1tY3NwaV9kb19zcGlfd3Jp dGUoZGV2LCB0eGJ1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsK KwkJVFJBQ0VfRVhJVChkZXYpOworCQlyZXR1cm4gKGVycik7CisJfQorCisJZXJyID0gbW1jc3Bp X2dldF9yZXNwb25zZV90b2tlbihkZXYsIE1NQ1NQSV9EUl9NQVNLLCBNTUNTUElfRFJfVkFMVUUs IAorCQkJCQkxLCAxLCAmcmVzcG9uc2VfdG9rZW4pOworCWlmIChNTUNfRVJSX05PTkUgIT0gZXJy KSB7CisJCVRSQUNFX0VYSVQoZGV2KTsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCSpzdGF0dXMg PSByZXNwb25zZV90b2tlbiAmIE1NQ1NQSV9EUl9FUlJfTUFTSzsKKworCVRSQUNFX0VYSVQoZGV2 KTsKKworCXJldHVybiAoTU1DX0VSUl9OT05FKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50 CittbWNzcGlfd3JpdGVfcGhhc2UoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgbW1jc3BpX2NvbW1hbmQg KmNtZCkKK3sKKwlUUkFDRV9FTlRFUihkZXYpOworCisJc3RydWN0IG1tY19kYXRhICpkYXRhID0g Y21kLT5kYXRhOworCXVpbnQ4X3QgKmRhdGE4OworCXVuc2lnbmVkIGludCBkYXRhX29mZnNldDsK Kwl1bnNpZ25lZCBpbnQgbnVtX2Jsb2NrczsKKwl1bnNpZ25lZCBpbnQgZXJyOworCWludCBpOwor CXVpbnQ4X3QgdG9rZW5bMl07CisJdWludDhfdCBzdGF0dXM7CisKKwlkYXRhOCA9ICh1aW50OF90 ICopZGF0YS0+ZGF0YTsKKwlkYXRhX29mZnNldCA9IDA7CisJbnVtX2Jsb2NrcyA9IGRhdGEtPmxl biAvIE1NQ1NQSV9EQVRBX0JMT0NLX0xFTjsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jsb2Nrczsg aSsrKSB7CisJCWVyciA9IG1tY3NwaV93cml0ZV9ibG9jayhkZXYsICZkYXRhOFtkYXRhX29mZnNl dF0sCisJCQkJCSBudW1fYmxvY2tzID4gMSwgY21kLT51c2VfY3JjLCAmc3RhdHVzKTsKKworCQlp ZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJVFJBQ0VfRVhJVChkZXYpOworCQkJcmV0dXJu IChlcnIpOworCQl9CisKKwkJaWYgKE1NQ1NQSV9EUl9FUlJfTk9ORSAhPSBzdGF0dXMpIHsKKwkJ CWlmIChudW1fYmxvY2tzID4gMSkgeworCQkJCS8qCisJCQkJICogSWdub3JlIGFueSBmYWlsdXJl IHJlcG9ydGVkIGZvciB0aGUgc3RvcAorCQkJCSAqIGNvbW1hbmQsIGFzIHRoZSByZXR1cm4gc3Rh dHVzIGZvciB0aGUKKwkJCQkgKiB3cml0ZSBwaGFzZSB3aWxsIGJlIHdoYXRldmVyIGVycm9yIHdh cworCQkJCSAqIGluZGljYXRlZCBpbiB0aGUgZGF0YSByZXNwb25lIHRva2VuLgorCQkJCSAqLwor CQkJCW1tY3NwaV9zZW5kX3N0b3AoZGV2LCBjbWQtPnJldHJpZXMpOworCQkJfQorCisJCQkvKiAK KwkJCSAqIEEgQ1JDIGVycm9yIGNhbid0IGJlIGlnbm9yZWQgaGVyZSwgZXZlbiBpZiBjcmMKKwkJ CSAqIHVzZSBpcyBkaXNhYmxlZCwgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHNpbXBseQorCQkJICog Y2Fycnkgb24gd2hlbiBhIGRhdGEgZXJyb3IgdG9rZW4gaGFzIGJlZW4gc2VudC4KKwkJCSAqLwor CQkJaWYgKE1NQ1NQSV9EUl9FUlJfQ1JDID09IHN0YXR1cykgeworCQkJCVRSQUNFX0VYSVQoZGV2 KTsKKwkJCQlyZXR1cm4gKE1NQ19FUlJfQkFEQ1JDKTsKKwkJCX0gZWxzZSB7CisJCQkJVFJBQ0Vf RVhJVChkZXYpOworCQkJCXJldHVybiAoTU1DX0VSUl9GQUlMRUQpOworCQkJfQorCQl9CisJCQkJ CQorCQlkYXRhX29mZnNldCArPSBNTUNTUElfREFUQV9CTE9DS19MRU47CisJfQorCisJLyogc3Vj Y2Vzc2Z1bCBtdWx0aS1ibG9jayB3cml0ZSBjb21tYW5kcyByZXF1aXJlIGEgc3RvcCB0b2tlbiAq LworCWlmIChudW1fYmxvY2tzID4gMSkgeworCQlUUkFDRShkZXYsIEFDVElPTiwgIlNlbmRpbmcg c3RvcCB0b2tlblxuIik7CisKKwkJLyogCisJCSAqIE1vc3QvYWxsIGNhcmRzIGFyZSBhIGJpdCBz bHVnZ2lzaCBpbiBhc3NzZXJ0aW5nIGJ1c3kKKwkJICogYWZ0ZXIgcmVjZWlwdCBvZiB0aGUgU1RP UF9UUkFOIHRva2VuLiBDbG9ja2luZyBvdXQgYW4KKwkJICogZXh0cmEgYnl0ZSBoZXJlIHByb3Zp ZGVzIGEgYnl0ZSBvZiBkZWFkIHRpbWUgYmVmb3JlCisJCSAqIGxvb2tpbmcgZm9yIG5vdCBidXN5 LCBhdm9pZGluZyBhIHByZW1hdHVyZSBub3QtYnVzeQorCQkgKiBkZXRlcm1pbmF0aW9uIHdpdGgg c3VjaCBjYXJkcy4KKwkJICovCisJCXRva2VuWzBdID0gTU1DU1BJX1RPS0VOX1NUOworCQl0b2tl blsxXSA9IDB4ZmY7CisKKwkJZXJyID0gbW1jc3BpX2RvX3NwaV93cml0ZShkZXYsIHRva2VuLCBz aXplb2YodG9rZW4pLCBOVUxMLCAwKTsKKwkJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJ CVRSQUNFX0VYSVQoZGV2KTsKKwkJCXJldHVybiAoZXJyKTsKKwkJfQorCisJCWVyciA9IG1tY3Nw aV93YWl0X2Zvcl9ub3RfYnVzeShkZXYpOworCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgewor CQkJVFJBQ0VfRVhJVChkZXYpOworCQkJcmV0dXJuIChlcnIpOworCQl9CisJfQorCisJVFJBQ0Vf RVhJVChkZXYpOworCisJcmV0dXJuIChNTUNfRVJSX05PTkUpOworfQorCisKK3N0YXRpYyB1bnNp Z25lZCBpbnQKK21tY3NwaV90cmFuc2xhdGVfcmVzcG9uc2UoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qg bW1jc3BpX2NvbW1hbmQgKmNtZCwgCisJCQkgIHVpbnQ4X3QgKnJzcGJ1ZikKK3sKKwlUUkFDRV9F TlRFUihkZXYpOworCisJc3RydWN0IG1tY19jb21tYW5kICptbWNfY21kID0gY21kLT5tbWNfY21k OworCXVpbnQzMl90IG1tY19yc3BfdHlwZSA9IE1NQ19SU1AoY21kLT5mbGFncyk7CisJdWludDhf dCAqbGRhdGEgPSBjbWQtPmxkYXRhLmRhdGE7CisKKwlUUkFDRShkZXYsIEFDVElPTiwgInRyYW5z bGF0aW5nIFNQSSByc3AgJXUgdG8gU0QgcnNwICV1XG4iLAorCSAgICAgIGNtZC0+cnNwX3R5cGUs IG1tY19yc3BfdHlwZSk7CisKKwlpZiAoKE1NQ19SU1BfUjEgPT0gbW1jX3JzcF90eXBlKSB8fAor CSAgICAoTU1DX1JTUF9SMUIgPT0gbW1jX3JzcF90eXBlKSkgeworCisJCVRSQUNFKGRldiwgQUNU SU9OLCAidHJhbnNsYXRpbmcgU1BJLVIxLzIgdG8gU0QtUjFcbiIpOworCisJCWlmICgoTU1DU1BJ X1JTUF9SMSA9PSBjbWQtPnJzcF90eXBlKSB8fAorCQkgICAgKE1NQ1NQSV9SU1BfUjFCID09IGNt ZC0+cnNwX3R5cGUpIHx8CisJCSAgICAoTU1DU1BJX1JTUF9SMiA9PSBjbWQtPnJzcF90eXBlKSkg eworCQkJbW1jX2NtZC0+cmVzcFswXSA9IDA7CisKKwkJCWlmIChyc3BidWZbMF0gJiBNTUNTUElf UjFfUEFSQU1fRVJSKQorCQkJCW1tY19jbWQtPnJlc3BbMF0gfD0gUjFfT1VUX09GX1JBTkdFOwor CisJCQlpZiAocnNwYnVmWzBdICYgTU1DU1BJX1IxX0FERFJfRVJSKQorCQkJCW1tY19jbWQtPnJl c3BbMF0gfD0gUjFfQUREUkVTU19FUlJPUjsKKworCQkJaWYgKHJzcGJ1ZlswXSAmIE1NQ1NQSV9S MV9FUkFTRV9FUlIpCisJCQkJbW1jX2NtZC0+cmVzcFswXSB8PSBSMV9FUkFTRV9TRVFfRVJST1I7 CisKKwkJCWlmIChyc3BidWZbMF0gJiBNTUNTUElfUjFfQ1JDX0VSUikKKwkJCQltbWNfY21kLT5y ZXNwWzBdIHw9IFIxX0NPTV9DUkNfRVJST1I7CisKKwkJCWlmIChyc3BidWZbMF0gJiBNTUNTUElf UjFfSUxMX0NNRCkKKwkJCQltbWNfY21kLT5yZXNwWzBdIHw9IFIxX0lMTEVHQUxfQ09NTUFORDsK KworCQkJaWYgKHJzcGJ1ZlswXSAmIE1NQ1NQSV9SMV9FUkFTRV9SU1QpCisJCQkJbW1jX2NtZC0+ cmVzcFswXSB8PSBSMV9FUkFTRV9SRVNFVDsKKworCQkJaWYgKHJzcGJ1ZlswXSAmIE1NQ1NQSV9S MV9JRExFKSB7CisJCQkJbW1jX2NtZC0+cmVzcFswXSB8PSAodWludDMyX3QpUjFfU1RBVEVfSURM RSA8PCA5OworCQkJfSBlbHNlIHsKKwkJCQltbWNfY21kLT5yZXNwWzBdIHw9ICh1aW50MzJfdClS MV9TVEFURV9SRUFEWSA8PCA5OworCQkJfQorCisJCQkvKiBXaGVuIE1NQ19DTURfSVNfQVBQIGlz IHNlbnQsIGVtdWxhdGUgUjFfQVBQX0NNRAorCQkJICAgU0QtYnVzIHN0YXR1cyBiaXQuICovCisJ CQlpZiAoIShjbWQtPmZsYWdzICYgTU1DX0NNRF9JU19BUFApICYmCisJCQkgICAgKE1NQ19BUFBf Q01EID09IGNtZC0+b3Bjb2RlKSkgeworCQkJCW1tY19jbWQtPnJlc3BbMF0gfD0gUjFfQVBQX0NN RDsKKwkJCX0KKworCQkJaWYgKE1NQ1NQSV9SU1BfUjIgPT0gY21kLT5yc3BfdHlwZSkgeworCQkJ CWlmIChyc3BidWZbMV0gJiBNTUNTUElfUjJfT09SX0NTRF9PVykKKwkJCQkJbW1jX2NtZC0+cmVz cFswXSB8PQorCQkJCQkgICAgUjFfT1VUX09GX1JBTkdFIHwKKwkJCQkJICAgIFIxX0NTRF9PVkVS V1JJVEU7CisKKwkJCQlpZiAocnNwYnVmWzFdICYgTU1DU1BJX1IyX0VSQVNFX1BBUkFNKQorCQkJ CQltbWNfY21kLT5yZXNwWzBdIHw9IFIxX0VSQVNFX1BBUkFNOworCisJCQkJaWYgKHJzcGJ1Zlsx XSAmIE1NQ1NQSV9SMl9XUF9WSU9MQVRFKQorCQkJCQltbWNfY21kLT5yZXNwWzBdIHw9IFIxX1dQ X1ZJT0xBVElPTjsKKworCQkJCWlmIChyc3BidWZbMV0gJiBNTUNTUElfUjJfRUNDX0ZBSUwpCisJ CQkJCW1tY19jbWQtPnJlc3BbMF0gfD0gUjFfQ0FSRF9FQ0NfRkFJTEVEOworCisJCQkJaWYgKHJz cGJ1ZlsxXSAmIE1NQ1NQSV9SMl9DQ19FUlIpCisJCQkJCW1tY19jbWQtPnJlc3BbMF0gfD0gUjFf Q0NfRVJST1I7CisKKwkJCQlpZiAocnNwYnVmWzFdICYgTU1DU1BJX1IyX0VSUikKKwkJCQkJbW1j X2NtZC0+cmVzcFswXSB8PSBSMV9FUlJPUjsKKworCQkJCWlmIChyc3BidWZbMV0gJiBNTUNTUElf UjJfV1BfRVJfTENLKQorCQkJCQltbWNfY21kLT5yZXNwWzBdIHw9CisJCQkJCSAgICBSMV9MT0NL X1VOTE9DS19GQUlMRUQgfAorCQkJCQkgICAgUjFfV1BfRVJBU0VfU0tJUDsKKworCQkJCWlmIChy c3BidWZbMV0gJiBNTUNTUElfUjJfTE9DS0VEKQorCQkJCQltbWNfY21kLT5yZXNwWzBdIHw9IFIx X0NBUkRfSVNfTE9DS0VEOworCisJCQl9CisJCisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKE1NQ19F UlJfSU5WQUxJRCk7CisJCX0KKworCX0gZWxzZSBpZiAoTU1DX1JTUF9SMiA9PSBtbWNfcnNwX3R5 cGUpIHsKKworCQlpZiAoMTYgPT0gY21kLT5sZGF0YS5sZW4pIHsKKworCQkJVFJBQ0UoZGV2LCBB Q1RJT04sICJ0cmFuc2xhdGluZyBTUEktUjEvbGRhdGEoMTYpIHRvIFNELVIyXG4iKTsKKworCQkJ LyogbGRhdGEgY29udGFpbnMgYml0cyAxMjc6MCBvZiB0aGUgc3BpIHJlc3BvbnNlICovCisKKwkJ CW1tY19jbWQtPnJlc3BbMF0gPQorCQkJICAgICh1aW50MzJfdClsZGF0YVswXSA8PCAyNCB8CisJ CQkgICAgKHVpbnQzMl90KWxkYXRhWzFdIDw8IDE2IHwKKwkJCSAgICAodWludDMyX3QpbGRhdGFb Ml0gPDwgOCAgfAorCQkJICAgICh1aW50MzJfdClsZGF0YVszXTsKKworCQkJbW1jX2NtZC0+cmVz cFsxXSA9CisJCQkgICAgKHVpbnQzMl90KWxkYXRhWzRdIDw8IDI0IHwKKwkJCSAgICAodWludDMy X3QpbGRhdGFbNV0gPDwgMTYgfAorCQkJICAgICh1aW50MzJfdClsZGF0YVs2XSA8PCA4ICB8CisJ CQkgICAgKHVpbnQzMl90KWxkYXRhWzddOworCisJCQltbWNfY21kLT5yZXNwWzJdID0KKwkJCSAg ICAodWludDMyX3QpbGRhdGFbOF0gPDwgMjQgfAorCQkJICAgICh1aW50MzJfdClsZGF0YVs5XSA8 PCAxNiB8CisJCQkgICAgKHVpbnQzMl90KWxkYXRhWzEwXSA8PCA4ICB8CisJCQkgICAgKHVpbnQz Ml90KWxkYXRhWzExXTsKKworCQkJbW1jX2NtZC0+cmVzcFszXSA9CisJCQkgICAgKHVpbnQzMl90 KWxkYXRhWzEyXSA8PCAyNCB8CisJCQkgICAgKHVpbnQzMl90KWxkYXRhWzEzXSA8PCAxNiB8CisJ CQkgICAgKHVpbnQzMl90KWxkYXRhWzE0XSA8PCAgODsKKworCQl9IGVsc2UgeworCQkJcmV0dXJu IChNTUNfRVJSX0lOVkFMSUQpOworCQl9CisKKwl9IGVsc2UgaWYgKE1NQ19SU1BfUjMgPT0gbW1j X3JzcF90eXBlKSB7CisKKwkJaWYgKE1NQ1NQSV9SU1BfUjMgPT0gY21kLT5yc3BfdHlwZSkgewor CisJCQlUUkFDRShkZXYsIEFDVElPTiwgInRyYW5zbGF0aW5nIFNQSS1SMyB0byBTRC1SM1xuIik7 CisJCQkKKwkJCS8qIHJzcGJ1ZiBjb250YWlucyBhIDQwLWJpdCBzcGktUjMgZnJvbSB0aGUKKwkJ CSAgIE1NQ1NQSV9SRUFEX09DUiByZXNwb25zZSwgb2Ygd2hpY2ggYml0cyAzMTowIGFyZQorCQkJ ICAgdGhlIE9DUiB2YWx1ZSAqLworCisJCQkvKiBzcGkgIHJlc3BvbnNlIGJpdHMgMzE6MCBtYXBw ZWQgdG8KKwkJCSAgIHNkaGMgcmVnaXN0ZXIgYml0cyAzMTowICovCisJCQltbWNfY21kLT5yZXNw WzBdID0KKwkJCSAgICAodWludDMyX3QpcnNwYnVmWzFdIDw8IDI0IHwKKwkJCSAgICAodWludDMy X3QpcnNwYnVmWzJdIDw8IDE2IHwKKwkJCSAgICAodWludDMyX3QpcnNwYnVmWzNdIDw8IDggIHwK KwkJCSAgICAodWludDMyX3QpcnNwYnVmWzRdOworCisJCQkvKiBDbGVhciBjYXJkIGJ1c3kgYml0 IChpbmRpY2F0aW5nIGJ1c3kpIGlmIHRoZQorCQkJICAgU1BJLVIxIGlkbGUgYml0IGlzIHNldC4g Ki8KKwkJCWlmIChyc3BidWZbMF0gJiBNTUNTUElfUjFfSURMRSkgeworCQkJCW1tY19jbWQtPnJl c3BbMF0gJj0gfk1NQ19PQ1JfQ0FSRF9CVVNZOworCQkJfSBlbHNlIHsKKwkJCQltbWNfY21kLT5y ZXNwWzBdIHw9IE1NQ19PQ1JfQ0FSRF9CVVNZOworCQkJfQorCisJCQlUUkFDRShkZXYsIERFVEFJ TFMsICJvY3I9MHglMDh4XG4iLCBtbWNfY21kLT5yZXNwWzBdKTsKKwkJfSBlbHNlIHsKKwkJCXJl dHVybiAoTU1DX0VSUl9JTlZBTElEKTsKKwkJfQorCisJfSBlbHNlIGlmIChNTUNfUlNQX1I3ID09 IG1tY19yc3BfdHlwZSkgeworCQkvKiBOb3RlIE1NQ19SU1BfUjYgYW5kIE1NQ19SU1BfUjcgYXJl IG51bWVyaWNhbGx5IGVxdWFsLCBzbworCQkgICB0aGlzIGhhbmRsZXMgYm90aCBjYXNlcy4gKi8K KworCQlpZiAoTU1DU1BJX1JTUF9SMiA9PSBjbWQtPnJzcF90eXBlKSB7CisKKwkJCVRSQUNFKGRl diwgQUNUSU9OLCAidHJhbnNsYXRpbmcgU1BJLVIyIHRvIFNELVI2XG4iKTsKKworCQkJLyogcmNh IHJldHVybmVkIHdpbGwgYWx3YXlzIGJlIHplcm8gKi8KKwkJCW1tY19jbWQtPnJlc3BbMF0gPSAw OworCisJCQlpZiAocnNwYnVmWzBdICYgTU1DU1BJX1IxX0NSQ19FUlIpCisJCQkJbW1jX2NtZC0+ cmVzcFswXSB8PSAweDgwMDA7CisKKwkJCWlmIChyc3BidWZbMF0gJiBNTUNTUElfUjFfSUxMX0NN RCkKKwkJCQltbWNfY21kLT5yZXNwWzBdIHw9IDB4NDAwMDsKKwkJCQorCQkJaWYgKHJzcGJ1Zlsx XSAmIE1NQ1NQSV9SMl9FUlIpCisJCQkJbW1jX2NtZC0+cmVzcFswXSB8PSAweDIwMDA7CisKKwkJ CWlmIChyc3BidWZbMF0gJiBNTUNTUElfUjFfSURMRSkgeworCQkJCW1tY19jbWQtPnJlc3BbMF0g fD0gKHVpbnQzMl90KVIxX1NUQVRFX0lETEUgPDwgOTsKKwkJCX0gZWxzZSB7CisJCQkJbW1jX2Nt ZC0+cmVzcFswXSB8PSAodWludDMyX3QpUjFfU1RBVEVfUkVBRFkgPDwgOTsKKwkJCX0KKworCQl9 IGVsc2UgaWYgKE1NQ1NQSV9SU1BfUjcgPT0gY21kLT5yc3BfdHlwZSkgeworCisJCQlUUkFDRShk ZXYsIEFDVElPTiwgInRyYW5zbGF0aW5nIFNQSS1SNyB0byBTRC1SN1xuIik7CisKKwkJCS8qIHJz cCBidWYgY29udGFpbnMgYSA0MC1iaXQgc3BpLVI3LCBvZiB3aGljaCBiaXRzCisJCQkgICAxMTow IG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgKi8KKwkJCQorCQkJLyogc3BpICByZXNwb25zZSBiaXRz IDExOjAgbWFwcGVkIHRvCisJCQkgICBzZGhjIHJlZ2lzdGVyIGJpdHMgMTE6MCAqLworCQkJbW1j X2NtZC0+cmVzcFswXSA9CisJCQkgICAgKHVpbnQzMl90KShyc3BidWZbM10gJiAweGYpIDw8IDgg fAorCQkJICAgICh1aW50MzJfdClyc3BidWZbNF07CisKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAo TU1DX0VSUl9JTlZBTElEKTsKKwkJfQorCisJfSBlbHNlIGlmIChNTUNfUlNQX05PTkUgIT0gbW1j X3JzcF90eXBlKSB7CisJCXJldHVybiAoTU1DX0VSUl9JTlZBTElEKTsKKwl9CisKKwlUUkFDRV9F WElUKGRldik7CisKKwlyZXR1cm4gKE1NQ19FUlJfTk9ORSk7Cit9CisKKworc3RhdGljIHVuc2ln bmVkIGludAorbW1jc3BpX2dldF9vY3IoZGV2aWNlX3QgZGV2LCB1aW50OF90ICpvY3JidWYpCit7 CisJVFJBQ0VfRU5URVIoZGV2KTsKKworCXN0cnVjdCBtbWNfY29tbWFuZCBtbWNfY21kOworCXN0 cnVjdCBtbWNzcGlfY29tbWFuZCBjbWQ7CisJdW5zaWduZWQgaW50IGVycjsKKwl1aW50OF90IHIx X3N0YXR1czsKKwl1aW50OF90IHJzcGJ1ZltNTUNTUElfTUFYX1JTUF9MRU5dOworCisJbWVtc2V0 KCZtbWNfY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisJbW1jX2NtZC5vcGNv ZGUgPSBNTUNTUElfUkVBRF9PQ1I7CisJbW1jX2NtZC5mbGFncyA9IE1NQ19SU1BfUjMgfCBNTUNf Q01EX0FDOworCisJZXJyID0gbW1jc3BpX3NldF91cF9jb21tYW5kKGRldiwgJmNtZCwgJm1tY19j bWQpOworCWlmIChNTUNfRVJSX05PTkUgIT0gZXJyKSB7CisJCVRSQUNFX0VYSVQoZGV2KTsKKwkJ cmV0dXJuIChlcnIpOworCX0KKwkJCQorCWVyciA9IG1tY3NwaV9zZW5kX2NtZChkZXYsICZjbWQs IHJzcGJ1Zik7CisJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJVFJBQ0VfRVhJVChkZXYp OworCQlyZXR1cm4gKGVycik7CisJfQorCQkKKwlyMV9zdGF0dXMgPSByc3BidWZbMF0gJiBjbWQu ZXJyb3JfbWFzazsKKwlpZiAocjFfc3RhdHVzKSB7CisJCWlmIChyMV9zdGF0dXMgJiBNTUNTUElf UjFfQ1JDX0VSUikgeworCQkJZXJyID0gTU1DX0VSUl9CQURDUkM7CisJCX0gZWxzZSB7CisJCQll cnIgPSBNTUNfRVJSX0lOVkFMSUQ7CisJCX0KKwkJCisJCVRSQUNFX0VYSVQoZGV2KTsKKwkJcmV0 dXJuIChlcnIpOworCX0KKworCW1lbWNweShvY3JidWYsICZyc3BidWZbMV0sIE1NQ1NQSV9PQ1Jf TEVOKTsKKworCVRSQUNFX0VYSVQoZGV2KTsKKworCXJldHVybiAoTU1DX0VSUl9OT05FKTsKK30K KworCitzdGF0aWMgdW5zaWduZWQgaW50CittbWNzcGlfc2V0X2NyY19vbl9vZmYoZGV2aWNlX3Qg ZGV2LCB1bnNpZ25lZCBpbnQgY3JjX29uKQoreworCXN0cnVjdCBtbWNfY29tbWFuZCBtbWNfY21k OworCXN0cnVjdCBtbWNzcGlfY29tbWFuZCBjbWQ7CisJdW5zaWduZWQgaW50IGVycjsKKwl1aW50 OF90IHIxX3N0YXR1czsKKwl1aW50OF90IHJzcGJ1ZltNTUNTUElfTUFYX1JTUF9MRU5dOworCisJ VFJBQ0VfRU5URVIoZGV2KTsKKworCW1lbXNldCgmbW1jX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCBt bWNfY29tbWFuZCkpOworCW1tY19jbWQub3Bjb2RlID0gTU1DU1BJX0NSQ19PTl9PRkY7CisJbW1j X2NtZC5hcmcgPSBjcmNfb24gPyAxIDogMDsKKwltbWNfY21kLmZsYWdzID0gTU1DX1JTUF9OT05F IHwgTU1DX0NNRF9BQzsKKworCWVyciA9IG1tY3NwaV9zZXRfdXBfY29tbWFuZChkZXYsICZjbWQs ICZtbWNfY21kKTsKKwlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQlUUkFDRV9FWElUKGRl dik7CisJCXJldHVybiAoZXJyKTsKKwl9CisJCQkKKwllcnIgPSBtbWNzcGlfc2VuZF9jbWQoZGV2 LCAmY21kLCByc3BidWYpOworCWlmIChNTUNfRVJSX05PTkUgIT0gZXJyKSB7CisJCVRSQUNFX0VY SVQoZGV2KTsKKwkJcmV0dXJuIChlcnIpOworCX0KKwkJCisJcjFfc3RhdHVzID0gcnNwYnVmWzBd ICYgY21kLmVycm9yX21hc2s7CisJaWYgKHIxX3N0YXR1cykgeworCQlpZiAocjFfc3RhdHVzICYg TU1DU1BJX1IxX0NSQ19FUlIpIHsKKwkJCWVyciA9IE1NQ19FUlJfQkFEQ1JDOworCQl9IGVsc2Ug eworCQkJZXJyID0gTU1DX0VSUl9JTlZBTElEOworCQl9CisJCQorCQlUUkFDRV9FWElUKGRldik7 CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0dXJuIChNTUNf RVJSX05PTkUpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK21tY3NwaV91cGRhdGVfY3Jj X3NldHRpbmcoZGV2aWNlX3QgZGV2LCB1bnNpZ25lZCBpbnQgY3JjX29uKQoreworCVRSQUNFX0VO VEVSKGRldik7CisJc3RydWN0IG1tY3NwaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0gJnNjLT5zbG90OworCXVuc2lnbmVkIGlu dCBlcnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IE1NQ1NQSV9SRVRSSUVTOyBpKysp IHsKKwkJZXJyID0gbW1jc3BpX3NldF9jcmNfb25fb2ZmKGRldiwgY3JjX29uKTsKKwkJaWYgKE1N Q19FUlJfQkFEQ1JDICE9IGVycikgeworCQkJYnJlYWs7CisJCX0KKwl9CisJCisJaWYgKE1NQ19F UlJfTk9ORSAhPSBlcnIpIHsKKwkJVFJBQ0VfRVhJVChkZXYpOworCQlyZXR1cm4gKGVycik7CisJ fQorCQorCWlmIChjcmNfb24pIHsKKwkJc2xvdC0+Y3JjX2VuYWJsZWQgPSAxOworCX0gZWxzZSB7 CisJCXNsb3QtPmNyY19lbmFibGVkID0gMDsKKwl9CisKKwlUUkFDRV9FWElUKGRldik7CisJcmV0 dXJuIChNTUNfRVJSX05PTkUpOworfQorCisKK3N0YXRpYyBpbnQKK21tY3NwaV9yZXF1ZXN0KGRl dmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQor eworCVRSQUNFX0VOVEVSKGJyZGV2KTsKKworCXN0cnVjdCBtbWNzcGlfc29mdGMgKnNjID0gZGV2 aWNlX2dldF9zb2Z0YyhicmRldik7CisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0gJnNjLT5z bG90OworCXN0cnVjdCBtbWNzcGlfY29tbWFuZCBjbWQ7CisJc3RydWN0IG1tY19jb21tYW5kICpt bWNfY21kID0gcmVxLT5jbWQ7CisJc3RydWN0IG1tY19kYXRhICpkYXRhOworCXVuc2lnbmVkIGlu dCBlcnI7CisJdW5zaWduZWQgaW50IHVzZV9jcmNfc2FtcGxlOworCWludCBpLCBqOworCXVpbnQz Ml90IG9wY29kZTsKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCBsYXN0X29wY29kZTsKKwl1 aW50MzJfdCBsYXN0X2ZsYWdzOworCXVpbnQ4X3QgcnNwYnVmW01NQ1NQSV9NQVhfUlNQX0xFTl07 CisKKyNkZWZpbmUgSVNfQ01EKGNvZGUsIGNtZCwgZmxhZ3MpICghKChmbGFncykgJiBNTUNfQ01E X0lTX0FQUCkgJiYgKChjb2RlKSA9PSAoY21kKSkpCisjZGVmaW5lIElTX0FDTUQoY29kZSwgY21k LCBmbGFncykgKCgoZmxhZ3MpICYgTU1DX0NNRF9JU19BUFApICYmICgoY29kZSkgPT0gKGNtZCkp KQorCisJaWYgKHBvd2VyX29uICE9IHNsb3QtPmhvc3QuaW9zLnBvd2VyX21vZGUpIHsKKwkJcmV0 dXJuIChNTUNfRVJSX0lOVkFMSUQpOworCX0KKworCS8qIAorCSAqIFNhbXBsZSB1c2VfY3JjIHN5 c2N0bCBhbmQgYWRqdXN0IGNhcmQgc2V0dGluZyBpZiByZXF1aXJlZCBhbmQKKwkgKiBhcHByb3By aWF0ZS4KKwkgKi8KKwl1c2VfY3JjX3NhbXBsZSA9IHNjLT51c2VfY3JjOworCWlmIChzbG90LT5j cmNfaW5pdF9kb25lICYmCisJICAgICh1c2VfY3JjX3NhbXBsZSAhPSBzbG90LT5jcmNfZW5hYmxl ZCkpIHsKKwkJZXJyID0gbW1jc3BpX3VwZGF0ZV9jcmNfc2V0dGluZyhicmRldiwgdXNlX2NyY19z YW1wbGUpOworCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJZ290byBvdXQ7CisJCX0K KwkJc2xvdC0+Y3JjX2luaXRfZG9uZSA9IDE7CisJfQorCisJZXJyID0gbW1jc3BpX3NldF91cF9j b21tYW5kKGJyZGV2LCAmY21kLCBtbWNfY21kKTsKKwlpZiAoTU1DX0VSUl9OT05FICE9IGVycikg eworCQlnb3RvIG91dDsKKwl9CisKKwlvcGNvZGUgPSBjbWQub3Bjb2RlOworCWZsYWdzID0gY21k LmZsYWdzOworCWRhdGEgPSBjbWQuZGF0YTsKKworCWxhc3Rfb3Bjb2RlID0gc2xvdC0+bGFzdF9v cGNvZGU7CisJbGFzdF9mbGFncyA9IHNsb3QtPmxhc3RfZmxhZ3M7CisKKwkvKiBlbmZvcmNlIHJl c3RyaWN0aW9ucyBvbiByZXF1ZXN0IHBhcmFtZXRlcnMgKi8KKwlpZiAoZGF0YSkgeworCisJCS8q IAorCQkgKiBBbGwgd3JpdGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgbGVuZ3Ro LiBBbGwKKwkJICogcmVhZHMgZ3JlYXRlciB0aGFuIHRoZSBibG9jayBsZW5ndGggbXVzdCBiZSBh IG11bHRpcGxlIG9mCisJCSAqIHRoZSBibG9jayBsZW5ndGguCisJCSAqLworCQlpZiAoKGRhdGEt PmxlbiAlIE1NQ1NQSV9EQVRBX0JMT0NLX0xFTikgJiYKKwkJICAgICEoKGRhdGEtPmZsYWdzICYg TU1DX0RBVEFfUkVBRCkgJiYKKwkJICAgICAgKGRhdGEtPmxlbiA8IE1NQ1NQSV9EQVRBX0JMT0NL X0xFTikpKSB7CisJCQlUUkFDRShicmRldiwgRVJST1IsCisJCQkgICAgICAicmVxdWVzdGVkIGRh dGEgcGhhc2Ugbm90IGEgbXVsdGlwbGUgb2YgJXVcbiIsCisJCQkgICAgICBNTUNTUElfREFUQV9C TE9DS19MRU4pOworCQkJZXJyID0gTU1DX0VSUl9JTlZBTElEOworCQkJZ290byBvdXQ7CisJCX0K KworCQlpZiAoKChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpICYmCisJCSAgICAgKGRhdGEt PmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpKSB8fAorCQkgICAgKGRhdGEtPmZsYWdzICYgTU1DX0RB VEFfU1RSRUFNKSkgeworCQkJVFJBQ0UoYnJkZXYsIEVSUk9SLCAiaWxsZWdhbCBkYXRhIHBoYXNl IGZsYWdzIDB4JTAyeFxuIiwKKwkJCSAgICAgIGRhdGEtPmZsYWdzKTsKKwkJCWVyciA9IE1NQ19F UlJfSU5WQUxJRDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8PSBj bWQucmV0cmllczsgaSsrKSB7CisJCS8qIAorCQkgKiBPbiB0aGUgbmV4dCBjb21tYW5kIGZvbGxv d2luZyBhIENNRDgsIGNvbGxlY3QgdGhlIE9DUiBhbmQKKwkJICogc2F2ZSBpdCBvZmYgZm9yIHVz ZSBpbiB0aGUgbmV4dCBBQ01ENDEuCisJCSAqLworCQlpZiAoSVNfQ01EKFNEX1NFTkRfSUZfQ09O RCwgbGFzdF9vcGNvZGUsIGxhc3RfZmxhZ3MpKSB7CisJCQllcnIgPSBtbWNzcGlfZ2V0X29jcihi cmRldiwgc2xvdC0+bGFzdF9vY3IpOworCQkJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJ CQlpZiAoTU1DX0VSUl9CQURDUkMgPT0gZXJyKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ CQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCWVyciA9IG1tY3NwaV9zZW5kX2NtZChicmRldiwg JmNtZCwgcnNwYnVmKTsKKwkJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJCWlmIChNTUNf RVJSX0JBRENSQyA9PSBlcnIpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvdG8gb3V0Owor CQl9CisKKwkJaWYgKGRhdGEpIHsKKwkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQp IHsKKwkJCQllcnIgPSBtbWNzcGlfcmVhZF9waGFzZShicmRldiwgJmNtZCk7CisJCQl9IGVsc2Ug eyAgLyogTU1DX0RBVEFfV1JJVEUgKi8KKwkJCQllcnIgPSBtbWNzcGlfd3JpdGVfcGhhc2UoYnJk ZXYsICZjbWQpOworCQkJfQorCisJCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJCWlm IChNTUNfRVJSX0JBRENSQyA9PSBlcnIpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWdv dG8gb3V0OworCQkJfQorCQl9IAorCisJCWJyZWFrOworCX0KKworCWlmIChNTUNfRVJSX05PTkUg IT0gZXJyKSB7CisJCWdvdG8gb3V0OworCX0KKworCisJLyogCisJICogSWYgdGhpcyB3YXMgYW4g QUNNRF9TRF9TRU5EX09QX0NPTkQgb3IgTU1DX1NFTkRfT1BfQ09ORCwgd2UgbmVlZAorCSAqIHRv IHJldHVybiBhbiBPQ1IgdmFsdWUgaW4gdGhlIHJlc3VsdC4gIElmIHRoZSByZXNwb25zZSBmcm9t IHRoZQorCSAqIGNhcmQgaW5kaWNhdGVzIGl0IGlzIHN0aWxsIGluIHRoZSBJRExFIHN0YXRlLCBz dXBwbHkgdGhlIE9DUgorCSAqIHZhbHVlIG9idGFpbmVkIGFmdGVyIHRoZSBsYXN0IENNRDgsIG90 aGVyd2lzZSBpc3N1ZSBhbgorCSAqIE1NQ1NQSV9SRUFEX09DUiB0byBnZXQgdGhlIGN1cnJlbnQg dmFsdWUsIHdoaWNoIHdpbGwgaGF2ZSBhIHZhbGlkCisJICogQ0NTIGJpdC4KKwkgKgorCSAqIFRo aXMgZGFuY2UgaXMgcmVxdWlyZWQgdW5kZXIgdGhpcyBlbXVsYXRpb24gYXBwcm9hY2ggYmVjYXVz ZSB0aGUKKwkgKiBzcGVjIHN0aXB1bGF0ZXMgdGhhdCBubyBvdGhlciBjb21tYW5kcyBzaG91bGQg YmUgc2VudCB3aGlsZQorCSAqIEFDTURfU0RfU0VORF9PUF9DT05EIGlzIGJlaW5nIHVzZWQgdG8g cG9sbCBmb3IgdGhlIGVuZCBvZiB0aGUKKwkgKiBJRExFIHN0YXRlLCBhbmQgc29tZSBjYXJkcyBk byBlbmZvcmNlIHRoYXQgcmVxdWlyZW1lbnQuCisJICovCisJaWYgKElTX0FDTUQoQUNNRF9TRF9T RU5EX09QX0NPTkQsIG9wY29kZSwgZmxhZ3MpIHx8CisJICAgIElTX0NNRChNTUNfU0VORF9PUF9D T05ELCBvcGNvZGUsIGZsYWdzKSkgeworCisJCWlmIChyc3BidWZbMF0gJiBNTUNTUElfUjFfSURM RSkgeworCQkJbWVtY3B5KCZyc3BidWZbMV0sIHNsb3QtPmxhc3Rfb2NyLCBNTUNTUElfT0NSX0xF Tik7CisJCX0gZWxzZSB7CisKKwkJCS8qCisJCQkgKiBTb21lIGNhcmRzIHdvbid0IGFjY2VwdCB0 aGUgTU1DU1BJX0NSQ19PTl9PRkYKKwkJCSAqIGNvbW1hbmQgdW50aWwgaW5pdGlhbGl6YXRpb24g aXMgY29tcGxldGUuCisJCQkgKgorCQkJICogRXhhbXBsZXM6CisJCQkgKgorCQkJICogU3VwZXIg VGFsZW50IDFHQiBTRFNDIGNhcmQsIGNpZDoKKwkJCSAqIG1pZD0weDFiIG9pZD0weDUzNGQgcG5t PSIwMDAwMCIgcHJ2PTEuMCBtZHQ9MDIuMjAxMAorCQkJICovCisJCQlpZiAoIXNsb3QtPmNyY19p bml0X2RvbmUpIHsKKwkJCQllcnIgPSBtbWNzcGlfdXBkYXRlX2NyY19zZXR0aW5nKGJyZGV2LAor CQkJCQkJCQlzYy0+dXNlX2NyYyk7CisJCQkJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJ CQkJZ290byBvdXQ7CisJCQkJfQorCQkJCXNsb3QtPmNyY19pbml0X2RvbmUgPSAxOworCQkJfQor CisJCQlmb3IgKGogPSAwOyBqIDw9IGNtZC5yZXRyaWVzOyBqKyspIHsKKwkJCQkvKiAKKwkJCQkg KiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCB3ZSBwYXNzIG9uIHRoZSBSMQorCQkJCSAqIGZyb20g UkVBRF9PQ1IuCisJCQkJICovCisJCQkJZXJyID0gbW1jc3BpX2dldF9vY3IoYnJkZXYsIHJzcGJ1 Zik7CisJCQkJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJCQkJaWYgKE1NQ19FUlJfQkFE Q1JDID09IGVycikgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJCisJCQkJCWdvdG8g b3V0OworCQkJCX0KKworCQkJfQorCisJCQlpZiAoTU1DX0VSUl9OT05FICE9IGVycikgeworCQkJ CWdvdG8gb3V0OworCQkJfQorCisJCX0KKworCQkvKiBhZGp1c3QgdGhlIFNQSSByZXNwb25zZSB0 eXBlIHRvIGluY2x1ZGUgdGhlIE9DUiAqLworCQljbWQucnNwX3R5cGUgPSBNTUNTUElfUlNQX1Iz OworCX0KKworCWVyciA9IG1tY3NwaV90cmFuc2xhdGVfcmVzcG9uc2UoYnJkZXYsICZjbWQsIHJz cGJ1Zik7CisJaWYgKE1NQ19FUlJfTk9ORSAhPSBlcnIpIHsKKwkJZ290byBvdXQ7CisJfQorCisg b3V0OgorCXNsb3QtPmxhc3Rfb3Bjb2RlID0gbW1jX2NtZC0+b3Bjb2RlOworCXNsb3QtPmxhc3Rf ZmxhZ3MgPSBtbWNfY21kLT5mbGFnczsKKworCW1tY19jbWQtPmVycm9yID0gZXJyOworCisJaWYg KHJlcS0+ZG9uZSkgeworCQlyZXEtPmRvbmUocmVxKTsKKwl9CisJCisJVFJBQ0VfRVhJVChicmRl dik7CisKKwlyZXR1cm4gKGVycik7Cit9CisKKworc3RhdGljIGludAorbW1jc3BpX2dldF9ybyhk ZXZpY2VfdCBicmRldiwgZGV2aWNlX3QgcmVxZGV2KQoreworCVRSQUNFX0VOVEVSKGJyZGV2KTsK KwlUUkFDRV9FWElUKGJyZGV2KTsKKworCS8qIFhYWCBubyBzdXBwb3J0IGZvciB0aGlzIGN1cnJl bnRseSAqLworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludAorbW1jc3BpX2FjcXVpcmVf aG9zdChkZXZpY2VfdCBicmRldiwgZGV2aWNlX3QgcmVxZGV2KQoreworCVRSQUNFX0VOVEVSKGJy ZGV2KTsKKworCXN0cnVjdCBtbWNzcGlfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhicmRl dik7CisJc3RydWN0IG1tY3NwaV9zbG90ICpzbG90ID0gZGV2aWNlX2dldF9pdmFycyhyZXFkZXYp OworCXN0cnVjdCBzcGlfY29uZmlnIGNmZzsKKwlpbnQgZXJyID0gMDsKKworCU1NQ1NQSV9MT0NL X1NMT1Qoc2xvdCk7CisJd2hpbGUgKHNsb3QtPmJ1c19idXN5KSB7CisJCW10eF9zbGVlcChzbG90 LCAmc2xvdC0+bXR4LCAwLCAibW1jc3BpYWgiLCAwKTsKKwl9CisJc2xvdC0+YnVzX2J1c3krKzsK KwlNTUNTUElfVU5MT0NLX1NMT1Qoc2xvdCk7CisKKwlTUElCVVNfQUNRVUlSRV9CVVMoc2MtPmJ1 c2Rldiwgc2MtPmRldik7CisKKwkvKiBSZXN0b3JlIHRoZSBjbG9jayB0byB0aGUgbGFzdCBzZXR0 aW5nLCBhcyBpdCBtYXkgaGF2ZSBiZWVuCisJICAgY2hhbmdlZCBieSBhbm90aGVyIHNwaWJ1cyBk ZXZpY2UuICovCisJY2ZnLmNsb2NrX2h6ID0gc2xvdC0+aG9zdC5pb3MuY2xvY2s7CisJU1BJQlVT X1NFVF9DT05GSUcoc2xvdC0+c2MtPmJ1c2RldiwgJmNmZyk7CisKKwlUUkFDRV9FWElUKGJyZGV2 KTsKKworCXJldHVybiAoZXJyKTsKK30KKworCitzdGF0aWMgaW50CittbWNzcGlfcmVsZWFzZV9o b3N0KGRldmljZV90IGJyZGV2LCBkZXZpY2VfdCByZXFkZXYpCit7CisJVFJBQ0VfRU5URVIoYnJk ZXYpOworCisJc3RydWN0IG1tY3NwaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJyZGV2 KTsKKwlzdHJ1Y3QgbW1jc3BpX3Nsb3QgKnNsb3QgPSBkZXZpY2VfZ2V0X2l2YXJzKHJlcWRldik7 CisKKwlTUElCVVNfUkVMRUFTRV9CVVMoc2MtPmJ1c2Rldiwgc2MtPmRldik7CisKKwlNTUNTUElf TE9DS19TTE9UKHNsb3QpOworCXNsb3QtPmJ1c19idXN5LS07CisJTU1DU1BJX1VOTE9DS19TTE9U KHNsb3QpOworCisJd2FrZXVwKHNsb3QpOworCisJVFJBQ0VfRVhJVChicmRldik7CisKKwlyZXR1 cm4gKDApOworfQorCisKK3N0YXRpYyB1aW50OF90Cit1cGRhdGVfY3JjNyh1aW50OF90IGNyYywg dWludDhfdCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBpOworCXVpbnQ4X3QgdG1w OworCQorCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJCXRtcCA9IChjcmMgPDwgMSkgXiBidWZb aV07CisJCWNyYyA9IGNyYzd0YWJbdG1wXTsKKwl9CisJCisJcmV0dXJuIGNyYzsKK30KKworCitz dGF0aWMgdWludDE2X3QKK3VwZGF0ZV9jcmMxNih1aW50MTZfdCBjcmMsIHVpbnQ4X3QgKmJ1Ziwg dW5zaWduZWQgaW50IGxlbikKK3sKKworCWludCBpOworCXVpbnQxNl90IHRtcCwgYzE2OworCisJ Zm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwkJYzE2ICA9IDB4MDBmZiAmICh1aW50MTZfdClidWZb aV07CisKKwkJdG1wID0gKGNyYyA+PiA4KSBeIGMxNjsKKwkJY3JjID0gKGNyYyA8PCA4KSBeIGNy YzE2dGFiW3RtcF07CisJfQorCisJcmV0dXJuIGNyYzsKK30KKworCitzdGF0aWMgdm9pZAoraW5p dF9jcmM3dGFiKHZvaWQpCit7CisjZGVmaW5lIFBfQ1JDNyAweDg5CisKKwlpbnQgaSwgajsKKwl1 aW50OF90IGNyYywgYzsKKyAgICAKKwlmb3IgKGk9MDsgaTwyNTY7IGkrKykgeworCSAgICAKKwkJ YyA9ICh1aW50OF90KWk7CisJCWNyYyA9IChjICYgMHg4MCkgPyBjIF4gUF9DUkM3IDogYzsKKwor CQlmb3IgKGo9MTsgajw4OyBqKyspIHsKKwkJCWNyYyA9IGNyYyA8PCAxOworCisJCQlpZiAoY3Jj ICYgMHg4MCkgeworCQkJCWNyYyA9IGNyYyBeIFBfQ1JDNzsKKwkJCX0KKwkJfQorCisJCWNyYzd0 YWJbaV0gPSBjcmM7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitpbml0X2NyYzE2dGFiKHZvaWQp Cit7CisjZGVmaW5lIFBfQ0NJVFQgMHgxMDIxCisKKwlpbnQgaSwgajsKKwl1aW50MTZfdCBjcmMs IGM7CisKKwlmb3IgKGk9MDsgaTwyNTY7IGkrKykgeworCisJCWNyYyA9IDA7CisJCWMgICA9ICgo dWludDE2X3QpIGkpIDw8IDg7CisKKwkJZm9yIChqPTA7IGo8ODsgaisrKSB7CisKKwkJCWlmICgo Y3JjIF4gYykgJiAweDgwMDApIGNyYyA9ICggY3JjIDw8IDEgKSBeIFBfQ0NJVFQ7CisJCQllbHNl ICAgICAgICAgICAgICAgICAgICBjcmMgPSAgIGNyYyA8PCAxOworCisJCQljID0gYyA8PCAxOwor CQl9CisKKwkJY3JjMTZ0YWJbaV0gPSBjcmM7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK21tY3Nw aV9tb2RldmVudF9oYW5kbGVyKG1vZHVsZV90IG1vZCwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sK Kwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1PRF9MT0FEOgorCQlpbml0X2NyYzd0YWIoKTsKKwkJ aW5pdF9jcmMxNnRhYigpOworCQltZW1zZXQob25lc2J1ZiwgMHhmZiwgc2l6ZW9mKG9uZXNidWYp KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKKwl9CisKKwly ZXR1cm4gKDApOworfQorCisgCisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgbW1jc3BpX21ldGhv ZHNbXSA9IHsKKwkvKiBkZXZpY2VfaWYgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCBtbWNz cGlfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBtbWNzcGlfYXR0YWNoKSwKKwlE RVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgbW1jc3BpX2RldGFjaCksCisJREVWTUVUSE9EKGRldmlj ZV9zdXNwZW5kLCBtbWNzcGlfc3VzcGVuZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsIG1t Y3NwaV9yZXN1bWUpLAorCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChidXNfcmVh ZF9pdmFyLAltbWNzcGlfcmVhZF9pdmFyKSwKKwlERVZNRVRIT0QoYnVzX3dyaXRlX2l2YXIsCW1t Y3NwaV93cml0ZV9pdmFyKSwKKworCS8qIG1tY2JyX2lmICovCisJREVWTUVUSE9EKG1tY2JyX3Vw ZGF0ZV9pb3MsIG1tY3NwaV91cGRhdGVfaW9zKSwKKwlERVZNRVRIT0QobW1jYnJfcmVxdWVzdCwg bW1jc3BpX3JlcXVlc3QpLAorCURFVk1FVEhPRChtbWNicl9nZXRfcm8sIG1tY3NwaV9nZXRfcm8p LAorCURFVk1FVEhPRChtbWNicl9hY3F1aXJlX2hvc3QsIG1tY3NwaV9hY3F1aXJlX2hvc3QpLAor CURFVk1FVEhPRChtbWNicl9yZWxlYXNlX2hvc3QsIG1tY3NwaV9yZWxlYXNlX2hvc3QpLAorCisJ ezAsIDB9LAorfTsKKworCitzdGF0aWMgZHJpdmVyX3QgbW1jc3BpX2RyaXZlciA9IHsKKwkibW1j c3BpIiwKKwltbWNzcGlfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IG1tY3NwaV9zb2Z0YyksCit9 Oworc3RhdGljIGRldmNsYXNzX3QgbW1jc3BpX2RldmNsYXNzOworCisKK0RSSVZFUl9NT0RVTEUo bW1jc3BpLCBzcGlidXMsIG1tY3NwaV9kcml2ZXIsIG1tY3NwaV9kZXZjbGFzcywgbW1jc3BpX21v ZGV2ZW50X2hhbmRsZXIsIDApOworCisKKworCisjaWYgZGVmaW5lZChNTUNTUElfRU5BQkxFX0RF QlVHX0ZVTkNTKQorc3RhdGljIHZvaWQKK21tY3NwaV9kdW1wX2RhdGEoZGV2aWNlX3QgZGV2LCBj b25zdCBjaGFyICpsYWJlbCwgdWludDhfdCAqZGF0YSwKKwkJIHVuc2lnbmVkIGludCBsZW4pCit7 CisJVFJBQ0VfRU5URVIoZGV2KTsKKworCXVuc2lnbmVkIGludCBpLCBqOworCXVuc2lnbmVkIGlu dCBudW1fbGluZXM7CisJdW5zaWduZWQgaW50IHJlc2lkdWFsOworCisJbnVtX2xpbmVzID0gbGVu IC8gMTY7CisJcmVzaWR1YWwgPSBsZW4gLSAxNiAqIG51bV9saW5lczsKKworCWZvcihpID0gMDsg aSA8IG51bV9saW5lczsgaSsrKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiJXM6IiwgbGFiZWwp OworCQlmb3IoaiA9IDA7IGogPCAxNjsgaisrKSB7CisJCQlwcmludGYoIiAlMDJ4IiwgZGF0YVtp ICogMTYgKyBqXSk7IAorCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlpZiAocmVzaWR1YWwp IHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICIlczoiLCBsYWJlbCk7CisJCWZvcihqID0gMDsgaiA8 IHJlc2lkdWFsOyBqKyspIHsKKwkJCXByaW50ZigiICUwMngiLCBkYXRhW251bV9saW5lcyAqIDE2 ICsgal0pOyAKKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorCisJVFJBQ0VfRVhJVChkZXYpOwor fQorCisKK3N0YXRpYyB2b2lkCittbWNzcGlfZHVtcF9zcGlfYnVzKGRldmljZV90IGRldiwgdW5z aWduZWQgaW50IGxlbikKK3sKKwlUUkFDRV9FTlRFUihkZXYpOworCisJdW5zaWduZWQgaW50IG51 bV9ibG9ja3MgPSBsZW4gLyBNTUNTUElfREFUQV9CTE9DS19MRU47CisJdW5zaWduZWQgaW50IHJl c2lkdWFsID0gbGVuIC0gbnVtX2Jsb2NrcyAqIE1NQ1NQSV9EQVRBX0JMT0NLX0xFTjsKKwl1bnNp Z25lZCBpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IG51bV9ibG9ja3M7IGkrKykgeworCQlpZiAo TU1DX0VSUl9OT05FICE9CisJCSAgICBtbWNzcGlfZG9fc3BpX3JlYWQoZGV2LCBqdW5rYnVmLCBN TUNTUElfREFUQV9CTE9DS19MRU4pKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgInNwaSByZWFk IGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQltbWNzcGlfZHVtcF9kYXRhKGRldiwg ImJ1c19kYXRhIiwganVua2J1ZiwKKwkJCQkgTU1DU1BJX0RBVEFfQkxPQ0tfTEVOKTsKKwl9CisK KwlpZiAocmVzaWR1YWwpIHsKKwkJaWYgKE1NQ19FUlJfTk9ORSAhPQorCQkgICAgbW1jc3BpX2Rv X3NwaV9yZWFkKGRldiwganVua2J1ZiwgcmVzaWR1YWwpKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRl diwgInNwaSByZWFkIGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQltbWNzcGlfZHVt cF9kYXRhKGRldiwgImJ1c19kYXRhIiwganVua2J1ZiwgcmVzaWR1YWwpOworCX0KKwkKKworCVRS QUNFX0VYSVQoZGV2KTsKK30KKyNlbmRpZgorCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGNhcmRz IHRoaXMgY29kZSB3YXMgdGVzdGVkIHdpdGggKGluaXRpYWxpemF0aW9uLAorICogaWRlbnRpZmlj YXRpb24sIGFuZCBzaW5nbGUgYW5kIG11bHRpIGJsb2NrIHJlYWQgYW5kIHdyaXRlIHdpdGggY3Jj CisgKiBjaGVja2luZyBkaXNhYmxlZCBhbmQgZW5hYmxlZCksIHNvcnRlZCBieSBDSUQ6CisgKgor ICogRGVsa2luIERldmljZXMgICAgMkdCIG1pZD0weDAyIG9pZD0weDU0NGQgcG5tPSJTQTAyRyIg cHJ2PTAuNCBtZHQ9MDUuMjAxMAorICogY2lkPTAyNTQ0ZDUzNDEzMDMyNDcwNDljMTAwMTJlMDBh NTAwIGNzZD0wMDJlMDAzMjViNWFhM2E5ZmZmZmZmODAwYTgwMDAwMAorICoKKyAqIEtpbmdzdG9u ICAgICAgICAgIDRHQiBtaWQ9MHgwMiBvaWQ9MHg1NDRkIHBubT0iU0EwNEciIHBydj0wLjkgbWR0 PTEyLjIwMTEKKyAqIGNpZD0wMjU0NGQ1MzQxMzAzNDQ3MDkyN2ZlYzJlMDAwYmMwMCBjc2Q9NDAw ZTAwMzI1YjU5MDAwMDFkYTc3ZjgwMGE0MDAwMDAKKyAqCisgKiBQTlkgICAgICAgICAgICAgICA4 R0IgbWlkPTB4MDIgb2lkPTB4NTQ0ZCBwbm09IlNBMDhHIiBwcnY9MC42IG1kdD0wOC4yMDExCisg KiBjaWQ9MDI1NDRkNTM0MTMwMzg0NzA2MTVhNjNmZjUwMGI4MDAgY3NkPTQwMGUwMDMyNWI1OTAw MDAzYjRmN2Y4MDBhNDAwMDAwCisgKgorICogRHVyYWNlbGwgICAgICAgICAgMkdCIG1pZD0weDAz IG9pZD0weDUzNDQgcG5tPSJTVTAyRyIgcHJ2PTguMCBtZHQ9MDEuMjAxMQorICogY2lkPTAzNTM0 NDUzNTUzMDMyNDc4MDBjOGE2NzE4MDBiMTAwIGNzZD0wMDI2MDAzMjVmNWE4M2FlZmVmYmNmZmY5 MjgwNDAwMAorICoKKyAqIEFEQVRBICAgICAgICAgICAgIDRHQiBtaWQ9MHgwMyBvaWQ9MHg1MzQ0 IHBubT0iU1UwNEciIHBydj04LjAgbWR0PTA4LjIwMTEKKyAqIGNpZD0wMzUzNDQ1MzU1MzAzNDQ3 ODAwMmJjMWVhZTAwYjgwMCBjc2Q9NDAwZTAwMzI1YjU5MDAwMDFkOGE3ZjgwMGE0MDQwMDAKKyAq CisgKiBTYW5kaXNrICAgICAgICAgICA0R0IgbWlkPTB4MDMgb2lkPTB4NTM0NCBwbm09IlNVMDRH IiBwcnY9OC4wIG1kdD0xMC4yMDEwCisgKiBjaWQ9MDM1MzQ0NTM1NTMwMzQ0NzgwMGFjY2JhOWUw MGFhMDAgY3NkPTQwMGUwMDMyNWI1OTAwMDAxZDhhN2Y4MDBhNDA0MDAwCisgKgorICogUFFJICAg ICAgICAgICAgICAgNEdCIG1pZD0weDAzIG9pZD0weDUzNDQgcG5tPSJTVTA0RyIgcHJ2PTguMCBt ZHQ9MDEuMjAxMQorICogY2lkPTAzNTM0NDUzNTUzMDM0NDc4MDBjOTgxZjdmMDBiMTAwIGNzZD00 MDBlMDAzMjViNTkwMDAwMWQ4YTdmODAwYTQwNDAwMAorICoKKyAqIFNpbGljb24gUG93ZXIgICAg IDRHQiBtaWQ9MHgwMyBvaWQ9MHg1MzQ0IHBubT0iU1UwNEciIHBydj04LjAgbWR0PTExLjIwMTEK KyAqIGNpZD0wMzUzNDQ1MzU1MzAzNDQ3ODAxMzZmMzlhODAwYmIwMCBjc2Q9NDAwZTAwMzI1YjU5 MDAwMDFkOGE3ZjgwMGE0MDQwMDAKKyAqCisgKiBUZWFtIEdyb3VwICAgICAgICA0R0IgbWlkPTB4 MDMgb2lkPTB4NTM0NCBwbm09IlNVMDRHIiBwcnY9OC4wIG1kdD0xMi4yMDExCisgKiBjaWQ9MDM1 MzQ0NTM1NTMwMzQ0NzgwMTQ1ZDZlNDUwMGJjMDAgY3NkPTQwMGUwMDMyNWI1OTAwMDAxZDhhN2Y4 MDBhNDA0MDAwCisgKgorICogRnVqaWZpbG0gICAgICAgICAgNEdCIG1pZD0weDAzIG9pZD0weDUz NDQgcG5tPSJTVTA0RyIgcHJ2PTguMCBtZHQ9MDMuMjAxMQorICogY2lkPTAzNTM0NDUzNTUzMDM0 NDc4MDIxNGE3OTA1MDBiMzAwIGNzZD00MDBlMDAzMjViNTkwMDAwMWQ4YTdmODAwYTQwNDAwMAor ICoKKyAqIFBhdHJpb3QgTWVtb3J5ICAgIDRHQiBtaWQ9MHgwMyBvaWQ9MHg1MzQ0IHBubT0iU1Uw NEciIHBydj04LjAgbWR0PTA1LjIwMTEKKyAqIGNpZD0wMzUzNDQ1MzU1MzAzNDQ3ODA4MDg1Mzlj MDAwYjUwMCBjc2Q9NDAwZTAwMzI1YjU5MDAwMDFkOGE3ZjgwMGE0MDQwMDAKKyAqCisgKiBTYW5k aXNrICAgICAgICAgIDMyR0IgbWlkPTB4MDMgb2lkPTB4NTM0NCBwbm09IlNVMzJHIiBwcnY9OC4w IG1kdD0wMC4yMDAwCisgKiBjaWQ9MDM1MzQ0NTM1NTMzMzI0NzgwNjFiYmZkNjUwMGJiMDAgY3Nk PTQwMGUwMDMyNWI1OTAwMDBlZGM4N2Y4MDBhNDA0MDAwCisgKgorICogU2FuZGlzayAgICAgICAg ICA2NEdCIG1pZD0weDAzIG9pZD0weDUzNDQgcG5tPSJTVTY0RyIgcHJ2PTguMCBtZHQ9MTIuMjAx MQorICogY2lkPTAzNTM0NDUzNTUzNjM0NDc4MDcxOGZjMWE0MDBiYzAwIGNzZD00MDBlMDAzMjVi NTkwMDAxZGJkMzdmODAwYTQwNDAwMAorICoKKyAqIERhbmUtRWxlYyAgICAgICAgIDRHQiBtaWQ9 MHgxMiBvaWQ9MHgzNDU2IHBubT0iU01JICAiIHBydj0xLjAgbWR0PTEwLjIwMTEKKyAqIGNpZD0x MjM0NTY1MzRkNDkyMDIwMTA0MjAyMGFiZDAwYmEwMCBjc2Q9NDAwZTAwMzI1YjU5MDAwMDFkNmY3 ZjgwMGE0MDAwMDAKKyAqCisgKiBHLlNLSUxMICAgICAgICAgICA0R0IgbWlkPTB4MWIgb2lkPTB4 NTM0ZCBwbm09IjAwMDAwIiBwcnY9MS4wIG1kdD0wMC4yMDAwCisgKiBjaWQ9MWI1MzRkMzAzMDMw MzAzMDEwMDgxMDFmNDEwMGJjMDAgY3NkPTQwMGUwMDMyNWI1OTAwMDAxZDliN2Y4MDBhNDAwMDAw CisgKgorICogVHJhbnNjZW5kICAgICAgICAgMkdCIG1pZD0weDFiIG9pZD0weDUzNGQgcG5tPSIw MDAwMCIgcHJ2PTEuMCBtZHQ9MDAuMjAwMAorICogY2lkPTFiNTM0ZDMwMzAzMDMwMzAxMDA4ZDFm NjY5MDBiMzAwIGNzZD0wMDdmZmYzMjViNWE4M2JhZjZkYmRmZmYwZTgwMDAwMAorICoKKyAqIFNh bXN1bmcgICAgICAgICAgIDJHQiBtaWQ9MHgxYiBvaWQ9MHg1MzRkIHBubT0iMDAwMDAiIHBydj0x LjAgbWR0PTEwLjIwMTEKKyAqIGNpZD0xYjUzNGQzMDMwMzAzMDMwMTAxZjljYTk2NzAwYmEwMCBj c2Q9MDA3ZmZmMzI1YjVhODNiYWY2ZGJkZmZmMGU4MDAwMDAKKyAqCisgKiBUcmFuc2NlbmQgICAg ICAgICAyR0IgbWlkPTB4MWIgb2lkPTB4NTM0ZCBwbm09IjAwMDAwIiBwcnY9MS4wIG1kdD0wMC4y MDAwCisgKiBjaWQ9MWI1MzRkMzAzMDMwMzAzMDEwMjllZjFjMjEwMGIzMDAgY3NkPTAwN2ZmZjMy NWI1YTgzYmFmNmRiZGZmZjBlODAwMDAwCisgKgorICogU3VwZXIgVGFsZW50ICAgICAgMUdCIG1p ZD0weDFiIG9pZD0weDUzNGQgcG5tPSIwMDAwMCIgcHJ2PTEuMCBtZHQ9MDIuMjAxMAorICogY2lk PTFiNTM0ZDMwMzAzMDMwMzAxMGIxYzY4ZTIxMDBhMjAwIGNzZD0wMDdmZmYzMjVmNTk4M2NiNzZk YmRmZmY5NjQwMDAwMAorICoKKyAqIFRyaWJlY2EgICAgICAgICAgIDFHQiBtaWQ9MHgxYiBvaWQ9 MHg1MzRkIHBubT0iVUQgICAiIHBydj0xLjAgbWR0PTA5LjIwMDcKKyAqIGNpZD0xYjUzNGQ1NTQ0 MjAyMDIwMTBkMzkwNTcwNDAwNzkwMCBjc2Q9MDAyZjAwMzI1ZjU5ODNjYTZkYjdmZjlmOTY0MDAw MDAKKyAqCisgKiBWZXJiYXRpbSAgICAgICAgICAyR0IgbWlkPTB4Mjcgb2lkPTB4NTA0OCBwbm09 IlNEMDJHIiBwcnY9My4wIG1kdD0wOC4yMDExCisgKiBjaWQ9Mjc1MDQ4NTM0NDMwMzI0NzMwOWQw NzNhOGYwMGI4MDAgY3NkPTAwNWUwMDMyNWI1YWEzYTlmZmZmZmY4MDBhODAwMDAwCisgKgorICog TWF4ZWxsICAgICAgICAgICAgNEdCIG1pZD0weDI3IG9pZD0weDUwNDggcG5tPSJTRDA0RyIgcHJ2 PTMuMCBtZHQ9MTAuMjAxMQorICogY2lkPTI3NTA0ODUzNDQzMDM0NDczMDdjMTlhMmYxMDBiYTAw IGNzZD00MDBlMDAzMjViNTkwMDAwMWRhNzdmODAwYTQwMDAwMAorICoKKyAqIE11c2hraW4gICAg ICAgICAgIDRHQiBtaWQ9MHgyNyBvaWQ9MHg1MDQ4IHBubT0iU0QwNEciIHBydj0zLjAgbWR0PTA4 LjIwMTEKKyAqIGNpZD0yNzUwNDg1MzQ0MzAzNDQ3MzA3Y2RhNDBlODAwYjgwMCBjc2Q9NDAwZTAw MzI1YjU5MDAwMDFkNmY3ZjgwMGE0MDAwMDAKKyAqCisgKiBTb255ICAgICAgICAgICAgICA0R0Ig bWlkPTB4Mjcgb2lkPTB4NTA0OCBwbm09IlNEMDRHIiBwcnY9My4wIG1kdD0wOS4yMDExCisgKiBj aWQ9Mjc1MDQ4NTM0NDMwMzQ0NzMwN2NlYWRkNGMwMGI5MDAgY3NkPTQwMGUwMDMyNWI1OTAwMDAx ZDZmN2Y4MDBhNDAwMDAwCisgKgorICogV2ludGVjICAgICAgICAgICAxNkdCIG1pZD0weDI3IG9p ZD0weDUwNDggcG5tPSJTRDE2RyIgcHJ2PTMuMCBtZHQ9MTAuMjAxMQorICogY2lkPTI3NTA0ODUz NDQzMTM2NDczMDdjMmY4YzljMDBiYTAwIGNzZD00MDBlMDAzMjViNTkwMDAwNzczZjdmODAwYTQw MDAwMAorICoKKyAqIExleGFyICAgICAgICAgICAgIDRHQiBtaWQ9MHgyOCBvaWQ9MHg0MjQ1IHBu bT0iTEVYQVIiIHBydj0xLjAgbWR0PTEwLjIwMTEKKyAqIGNpZD0yODQyNDU0YzQ1NTg0MTUyMTBi ZTAzZDQ4MTAwYmEwMCBjc2Q9NDAwZTAwMzI1YjU5MDAwMDFkZGQ3ZjgwMGE0MDAwMDAKKyAqCisg KiBIUCAgICAgICAgICAgICAgICAyR0IgbWlkPTB4Mjggb2lkPTB4NDI0NSBwbm09IlNEVTJHIiBw cnY9MC4wIG1kdD0wNy4yMDExCisgKiBjaWQ9Mjg0MjQ1NTM0NDU1MzI0NzAwMDAwMDE0NGYwMGI3 MDAgY3NkPTAwMmYwMDMyNWI1YTgzODU2ZGI3ZmZiZjE2ODAwMDAwCisgKgorICogRVAgTWVtb3J5 ICAgICAgICAgNEdCIG1pZD0weDM2IG9pZD0weDQxNGYgcG5tPSJNU0QgICIgcHJ2PTEuMCBtZHQ9 MDcuMjAxMAorICogY2lkPTM2NDE0ZjRkNTM0NDIwMjAxMDAwMDA4NWI3MDBhNzAwIGNzZD00MDBl MDAzMjViNTkwMDAwMWRmZjdmODAwYTQwMDAwMAorICoKKyAqIFJpREFUQSAgICAgICAgICAgIDRH QiBtaWQ9MHg3MyBvaWQ9MHg0MjQ3IHBubT0iTkNhcmQiIHBydj0wLjAgbWR0PTEyLjIwMTEKKyAq IGNpZD03MzQyNDc0ZTQzNjE3MjY0MDAwMDAwMDM1MjAwYmMwMCBjc2Q9NDAwZTAwMzI1YjU5MDAw MDFkOTk3ZjgwMGE0MDAwMDAKKyAqCisgKiBQcmV0ZWMgICAgICAgICAgICA4R0IgbWlkPTB4NzMg b2lkPTB4NDI0NyBwbm09Ik5DYXJkIiBwcnY9MS4wIG1kdD0xMi4yMDExCisgKiBjaWQ9NzM0MjQ3 NGU0MzYxNzI2NDEwMjYwMDE0NjQwMGJjMDAgY3NkPTQwMGUwMDMyNWI1OTAwMDAzYmRkN2Y4MDBh NDAwMDAwCisgKgorICogVHJhbnNjZW5kICAgICAgICAgOEdCIG1pZD0weDc0IG9pZD0weDRhNDUg cG5tPSJVU0QgICIgcHJ2PTEuMCBtZHQ9MDAuMjAwMAorICogY2lkPTc0NGE0NTU1NTM0NDIwMjAx MDA1MTAwNGE5MDBiYjAwIGNzZD00MDBlMDAzMjViNTkwMDAwM2JiZDdmODAwYTQwMDAwMAorICoK KyAqLwpJbmRleDogc3lzL2Rldi9tbWMvbW1jLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9tbWMv bW1jLmMJKHJldmlzaW9uIDIzNDk5OSkKKysrIHN5cy9kZXYvbW1jL21tYy5jCSh3b3JraW5nIGNv cHkpCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlzYyA9IGRldmljZV9nZXRfc29mdGMoYnVzZGV2KTsK IAlNTUNfTE9DSyhzYyk7CiAJaWYgKHNjLT5vd25lcikKLQkJcGFuaWMoIm1tYzogaG9zdCBicmlk Z2UgZGlkbid0IHNlcmFsaXplIHVzLiIpOworCQlwYW5pYygibW1jOiBob3N0IGJyaWRnZSBkaWRu J3Qgc2VyaWFsaXplIHVzLiIpOwogCXNjLT5vd25lciA9IGRldjsKIAlNTUNfVU5MT0NLKHNjKTsK IApAQCAtMzY5LDYgKzM2OSw4IEBACiAJc3RydWN0IG1tY19jb21tYW5kIGFwcGNtZDsKIAlpbnQg ZXJyID0gTU1DX0VSUl9OT05FLCBpOwogCisJY21kLT5mbGFncyB8PSBNTUNfQ01EX0lTX0FQUDsK KwogCWZvciAoaSA9IDA7IGkgPD0gcmV0cmllczsgaSsrKSB7CiAJCWFwcGNtZC5vcGNvZGUgPSBN TUNfQVBQX0NNRDsKIAkJYXBwY21kLmFyZyA9IHJjYSA8PCAxNjsKQEAgLTU0OSw5ICs1NTEsMTQg QEAKIHsKIAlpbnQgZmxhZ3M7CiAKLQlmbGFncyA9IChyY2EgPyBNTUNfUlNQX1IxQiA6IE1NQ19S U1BfTk9ORSkgfCBNTUNfQ01EX0FDOwotCXJldHVybiAobW1jX3dhaXRfZm9yX2NvbW1hbmQoc2Ms IE1NQ19TRUxFQ1RfQ0FSRCwgKHVpbnQzMl90KXJjYSA8PCAxNiwKLQkgICAgZmxhZ3MsIE5VTEws IENNRF9SRVRSSUVTKSk7CisJaWYgKGJ1c190eXBlX3NwaSA9PSBtbWNicl9nZXRfYnVzX3R5cGUo c2MtPmRldikpIHsKKwkJLyogY2FyZCBzZWxlY3Rpb24gaXNuJ3QgcmVxdWlyZWQgKi8KKwkJcmV0 dXJuIChNTUNfRVJSX05PTkUpOworCX0gZWxzZSB7CisJCWZsYWdzID0gKHJjYSA/IE1NQ19SU1Bf UjFCIDogTU1DX1JTUF9OT05FKSB8IE1NQ19DTURfQUM7CisJCXJldHVybiAobW1jX3dhaXRfZm9y X2NvbW1hbmQoc2MsIE1NQ19TRUxFQ1RfQ0FSRCwgKHVpbnQzMl90KXJjYSA8PCAxNiwKKwkJICAg IGZsYWdzLCBOVUxMLCBDTURfUkVUUklFUykpOworCX0KIH0KIAogc3RhdGljIGludApAQCAtNjU1 LDYgKzY2MiwxMSBAQAogCXVpbnQ4X3QJdmFsdWU7CiAJdV9jaGFyIHN3aXRjaF9yZXNbNjRdOwog CisJaWYgKGJ1c190eXBlX3NwaSA9PSBtbWNicl9nZXRfYnVzX3R5cGUoc2MtPmRldikpIHsKKwkJ LyogYnVzIHRpbWluZyBjYW4ndCBiZSBzZXQgb24gdGhlIGNhcmQgaW4gc3BpIG1vZGUgKi8KKwkJ cmV0dXJuIChNTUNfRVJSX05PTkUpOworCX0KKwogCXN3aXRjaCAodGltaW5nKSB7CiAJY2FzZSBi dXNfdGltaW5nX25vcm1hbDoKIAkJdmFsdWUgPSAwOwpAQCAtODU5LDcgKzg3MSw3IEBACiAJaWYg KHYgPT0gMCkgewogCQltID0gbW1jX2dldF9iaXRzKHJhd19jc2QsIDEyOCwgMTE1LCA0KTsKIAkJ ZSA9IG1tY19nZXRfYml0cyhyYXdfY3NkLCAxMjgsIDExMiwgMyk7Ci0JCWNzZC0+dGFjYyA9IGV4 cFtlXSAqIG1hbnRbbV0gKyA5IC8gMTA7CisJCWNzZC0+dGFjYyA9IChleHBbZV0gKiBtYW50W21d ICsgOSkgLyAxMDsKIAkJY3NkLT5uc2FjID0gbW1jX2dldF9iaXRzKHJhd19jc2QsIDEyOCwgMTA0 LCA4KSAqIDEwMDsKIAkJbSA9IG1tY19nZXRfYml0cyhyYXdfY3NkLCAxMjgsIDk5LCA0KTsKIAkJ ZSA9IG1tY19nZXRfYml0cyhyYXdfY3NkLCAxMjgsIDk2LCAzKTsKQEAgLTg4Nyw3ICs4OTksNyBA QAogCX0gZWxzZSBpZiAodiA9PSAxKSB7CiAJCW0gPSBtbWNfZ2V0X2JpdHMocmF3X2NzZCwgMTI4 LCAxMTUsIDQpOwogCQllID0gbW1jX2dldF9iaXRzKHJhd19jc2QsIDEyOCwgMTEyLCAzKTsKLQkJ Y3NkLT50YWNjID0gZXhwW2VdICogbWFudFttXSArIDkgLyAxMDsKKwkJY3NkLT50YWNjID0gKGV4 cFtlXSAqIG1hbnRbbV0gKyA5KSAvIDEwOwogCQljc2QtPm5zYWMgPSBtbWNfZ2V0X2JpdHMocmF3 X2NzZCwgMTI4LCAxMDQsIDgpICogMTAwOwogCQltID0gbW1jX2dldF9iaXRzKHJhd19jc2QsIDEy OCwgOTksIDQpOwogCQllID0gbW1jX2dldF9iaXRzKHJhd19jc2QsIDEyOCwgOTYsIDMpOwpAQCAt MTAwMiw3ICsxMDE0LDcgQEAKIH0KIAogc3RhdGljIGludAotbW1jX3NlbmRfY3NkKHN0cnVjdCBt bWNfc29mdGMgKnNjLCB1aW50MTZfdCByY2EsIHVpbnQzMl90ICpyYXdjaWQpCittbWNfc2VuZF9j c2Qoc3RydWN0IG1tY19zb2Z0YyAqc2MsIHVpbnQxNl90IHJjYSwgdWludDMyX3QgKnJhd2NzZCkK IHsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOwogCWludCBlcnI7CkBAIC0xMDEyLDcgKzEwMjQs NyBAQAogCWNtZC5mbGFncyA9IE1NQ19SU1BfUjIgfCBNTUNfQ01EX0JDUjsKIAljbWQuZGF0YSA9 IE5VTEw7CiAJZXJyID0gbW1jX3dhaXRfZm9yX2NtZChzYywgJmNtZCwgMCk7Ci0JbWVtY3B5KHJh d2NpZCwgY21kLnJlc3AsIDQgKiBzaXplb2YodWludDMyX3QpKTsKKwltZW1jcHkocmF3Y3NkLCBj bWQucmVzcCwgNCAqIHNpemVvZih1aW50MzJfdCkpOwogCXJldHVybiAoZXJyKTsKIH0KIApAQCAt MTEyMSw2ICsxMTMzLDM2IEBACiAJcmV0dXJuIChlcnIpOwogfQogCitzdGF0aWMgaW50CittbWNf c2VuZF9zdGF0dXMoc3RydWN0IG1tY19zb2Z0YyAqc2MsIHVpbnQxNl90IHJjYSwgdWludDMyX3Qg KnN0YXR1cykKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCWludCBlcnI7CisKKwljbWQu b3Bjb2RlID0gTU1DX1NFTkRfU1RBVFVTOworCWNtZC5hcmcgPSByY2EgPDwgMTY7CisJY21kLmZs YWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7CisJY21kLmRhdGEgPSBOVUxMOworCWVyciA9 IG1tY193YWl0X2Zvcl9jbWQoc2MsICZjbWQsIDApOworCSpzdGF0dXMgPSBjbWQucmVzcFswXTsK KwlyZXR1cm4gKGVycik7Cit9CisKK3N0YXRpYyBpbnQKK21tY19zZXRfYmxvY2tsZW4oc3RydWN0 IG1tY19zb2Z0YyAqc2MsIHVpbnQzMl90IGxlbikKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21k OworCWludCBlcnI7CisKKwljbWQub3Bjb2RlID0gTU1DX1NFVF9CTE9DS0xFTjsKKwljbWQuYXJn ID0gbGVuOworCWNtZC5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOworCWNtZC5kYXRh ID0gTlVMTDsKKwllcnIgPSBtbWNfd2FpdF9mb3JfY21kKHNjLCAmY21kLCAwKTsKKwlyZXR1cm4g KGVycik7Cit9CisKKwogc3RhdGljIHZvaWQKIG1tY19sb2dfY2FyZChkZXZpY2VfdCBkZXYsIHN0 cnVjdCBtbWNfaXZhcnMgKml2YXIsIGludCBuZXdjYXJkKQogewpAQCAtMTE0NCw2ICsxMTg2LDcg QEAKIAlzdHJ1Y3QgbW1jX2l2YXJzICppdmFyID0gTlVMTDsKIAlkZXZpY2VfdCAqZGV2bGlzdDsK IAlpbnQgZXJyLCBpLCBkZXZjb3VudCwgbmV3Y2FyZDsKKwl1aW50MzJfdCBzdGF0dXM7CiAJdWlu dDMyX3QgcmF3X2NpZFs0XTsKIAl1aW50MzJfdCByZXNwLCBzZWNfY291bnQ7CiAJZGV2aWNlX3Qg Y2hpbGQ7CkBAIC0xMTk0LDYgKzEyMzcsMTEgQEAKIAkJCWl2YXItPnJjYSA9IHJlc3AgPj4gMTY7 CiAJCQkvKiBHZXQgY2FyZCBDU0QuICovCiAJCQltbWNfc2VuZF9jc2Qoc2MsIGl2YXItPnJjYSwg aXZhci0+cmF3X2NzZCk7CisJCQlpZiAoYm9vdHZlcmJvc2UgfHwgbW1jX2RlYnVnKSB7CisJCQkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiJXNhcmQgZGV0ZWN0ZWQgKENTRCAlMDh4JTA4eCUwOHgl MDh4KVxuIiwKKwkJCQkJICAgICAgbmV3Y2FyZCA/ICJOZXcgYyIgOiAiQyIsCisJCQkJCSAgICAg IGl2YXItPnJhd19jc2RbMF0sIGl2YXItPnJhd19jc2RbMV0sIGl2YXItPnJhd19jc2RbMl0sIGl2 YXItPnJhd19jc2RbM10pOworCQkJfQogCQkJbW1jX2RlY29kZV9jc2Rfc2QoaXZhci0+cmF3X2Nz ZCwgJml2YXItPmNzZCk7CiAJCQlpdmFyLT5zZWNfY291bnQgPSBpdmFyLT5jc2QuY2FwYWNpdHkg LyBNTUNfU0VDVE9SX1NJWkU7CiAJCQlpZiAoaXZhci0+Y3NkLmNzZF9zdHJ1Y3R1cmUgPiAwKQpA QCAtMTIwMSw2ICsxMjQ5LDE3IEBACiAJCQlpdmFyLT50cmFuX3NwZWVkID0gaXZhci0+Y3NkLnRy YW5fc3BlZWQ7CiAJCQlpdmFyLT5lcmFzZV9zZWN0b3IgPSBpdmFyLT5jc2QuZXJhc2Vfc2VjdG9y ICogCiAJCQkgICAgaXZhci0+Y3NkLndyaXRlX2JsX2xlbiAvIE1NQ19TRUNUT1JfU0laRTsKKwkJ CQorCQkJZXJyID0gbW1jX3NlbmRfc3RhdHVzKHNjLCBpdmFyLT5yY2EsICZzdGF0dXMpOworCQkJ aWYgKGVyciAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJF cnJvciByZWFkaW5nIGNhcmQgc3RhdHVzICVkXG4iLCBlcnIpOworCQkJCWJyZWFrOworCQkJfQor CQkJaWYgKHN0YXR1cyAmIFIxX0NBUkRfSVNfTE9DS0VEKSB7CisJCQkJZGV2aWNlX3ByaW50Zihz Yy0+ZGV2LCAiQ2FyZCBpcyBwYXNzd29yZCBwcm90ZWN0ZWQsIHNraXBwaW5nLlxuIik7CisJCQkJ YnJlYWs7CisJCQl9CisKIAkJCS8qIEdldCBjYXJkIFNDUi4gQ2FyZCBtdXN0IGJlIHNlbGVjdGVk IHRvIGZldGNoIGl0LiAqLwogCQkJbW1jX3NlbGVjdF9jYXJkKHNjLCBpdmFyLT5yY2EpOwogCQkJ bW1jX2FwcF9zZW5kX3NjcihzYywgaXZhci0+cmNhLCBpdmFyLT5yYXdfc2NyKTsKQEAgLTEyMjgs NyArMTI4NywyMyBAQAogCQkJaWYgKChtbWNicl9nZXRfY2FwcyhzYy0+ZGV2KSAmIE1NQ19DQVBf NF9CSVRfREFUQSkgJiYKIAkJCSAgICAoaXZhci0+c2NyLmJ1c193aWR0aHMgJiBTRF9TQ1JfQlVT X1dJRFRIXzQpKQogCQkJCWl2YXItPmJ1c193aWR0aCA9IGJ1c193aWR0aF80OworCisJCQkvKiAK KwkJCSAqIFNvbWUgY2FyZHMgdGhhdCByZXBvcnQgbWF4aW11bSBJL08gYmxvY2sgc2l6ZXMKKwkJ CSAqIGdyZWF0ZXIgdGhhbiA1MTIgcmVxdWlyZSB0aGUgYmxvY2sgbGVuZ3RoIHRvIGJlCisJCQkg KiBzZXQgdG8gNTEyLCBldmVuIHRob3VnaCB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlCisJCQkgKiB0 aGUgZGVmYXVsdC4gIEV4YW1wbGVzOgorCQkJICoKKwkJCSAqIFRyYW5zY2VuZCAyR0IgU0RTQyBj YXJkLCBjaWQ6CisJCQkgKiBtaWQ9MHgxYiBvaWQ9MHg1MzRkIHBubT0iMDAwMDAiIHBydj0xLjAg bWR0PTAwLjIwMDAKKwkJCSAqLworCQkJaWYgKChNTUNfU0VDVE9SX1NJWkUgIT0gaXZhci0+Y3Nk LnJlYWRfYmxfbGVuKSB8fAorCQkJICAgIChNTUNfU0VDVE9SX1NJWkUgIT0gaXZhci0+Y3NkLndy aXRlX2JsX2xlbikpIHsKKwkJCQltbWNfc2V0X2Jsb2NrbGVuKHNjLCBNTUNfU0VDVE9SX1NJWkUp OyAKKwkJCX0KKwogCQkJbW1jX2Zvcm1hdF9jYXJkX2lkX3N0cmluZyhpdmFyKTsKKwogCQkJaWYg KGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykKIAkJCQltbWNfbG9nX2NhcmQoc2MtPmRldiwgaXZh ciwgbmV3Y2FyZCk7CiAJCQlpZiAobmV3Y2FyZCkgewpAQCAtMTI0MywxMSArMTMxOCwyOCBAQAog CQltbWNfc2V0X3JlbGF0aXZlX2FkZHIoc2MsIGl2YXItPnJjYSk7CiAJCS8qIEdldCBjYXJkIENT RC4gKi8KIAkJbW1jX3NlbmRfY3NkKHNjLCBpdmFyLT5yY2EsIGl2YXItPnJhd19jc2QpOworCQlp ZiAoYm9vdHZlcmJvc2UgfHwgbW1jX2RlYnVnKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYs ICIlc2FyZCBkZXRlY3RlZCAoQ1NEICUwOHglMDh4JTA4eCUwOHgpXG4iLAorCQkJICAgIG5ld2Nh cmQgPyAiTmV3IGMiIDogIkMiLAorCQkJICAgIGl2YXItPnJhd19jc2RbMF0sIGl2YXItPnJhd19j c2RbMV0sIGl2YXItPnJhd19jc2RbMl0sIGl2YXItPnJhd19jc2RbM10pOworCQl9CisKIAkJbW1j X2RlY29kZV9jc2RfbW1jKGl2YXItPnJhd19jc2QsICZpdmFyLT5jc2QpOwogCQlpdmFyLT5zZWNf Y291bnQgPSBpdmFyLT5jc2QuY2FwYWNpdHkgLyBNTUNfU0VDVE9SX1NJWkU7CiAJCWl2YXItPnRy YW5fc3BlZWQgPSBpdmFyLT5jc2QudHJhbl9zcGVlZDsKIAkJaXZhci0+ZXJhc2Vfc2VjdG9yID0g aXZhci0+Y3NkLmVyYXNlX3NlY3RvciAqIAogCQkgICAgaXZhci0+Y3NkLndyaXRlX2JsX2xlbiAv IE1NQ19TRUNUT1JfU0laRTsKKworCQllcnIgPSBtbWNfc2VuZF9zdGF0dXMoc2MsIGl2YXItPnJj YSwgJnN0YXR1cyk7CisJCWlmIChlcnIgIT0gTU1DX0VSUl9OT05FKSB7CisJCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJFcnJvciByZWFkaW5nIGNhcmQgc3RhdHVzICVkXG4iLCBlcnIpOworCQkJ YnJlYWs7CisJCX0KKwkJaWYgKHN0YXR1cyAmIFIxX0NBUkRfSVNfTE9DS0VEKSB7CisJCQlkZXZp Y2VfcHJpbnRmKHNjLT5kZXYsICJDYXJkIGlzIHBhc3N3b3JkIHByb3RlY3RlZCwgc2tpcHBpbmcu XG4iKTsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogT25seSBNTUMgPj0gNC54IGNhcmRzIHN1cHBv cnQgRVhUX0NTRC4gKi8KIAkJaWYgKGl2YXItPmNzZC5zcGVjX3ZlcnMgPj0gNCkgewogCQkJLyog Q2FyZCBtdXN0IGJlIHNlbGVjdGVkIHRvIGZldGNoIEVYVF9DU0QuICovCkBAIC0xMjg2LDcgKzEz NzgsMjIgQEAKIAkJCWl2YXItPmJ1c193aWR0aCA9IGJ1c193aWR0aF8xOwogCQkJaXZhci0+dGlt aW5nID0gYnVzX3RpbWluZ19ub3JtYWw7CiAJCX0KKworCQkvKgorCQkgKiBTb21lIGNhcmRzIHRo YXQgcmVwb3J0IG1heGltdW0gSS9PIGJsb2NrIHNpemVzIGdyZWF0ZXIKKwkJICogdGhhbiA1MTIg cmVxdWlyZSB0aGUgYmxvY2sgbGVuZ3RoIHRvIGJlIHNldCB0byA1MTIsIGV2ZW4KKwkJICogdGhv dWdoIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIGRlZmF1bHQuICBFeGFtcGxlczoKKwkJICoK KwkJICogVHJhbnNjZW5kIDJHQiBTRFNDIGNhcmQsIGNpZDoKKwkJICogbWlkPTB4MWIgb2lkPTB4 NTM0ZCBwbm09IjAwMDAwIiBwcnY9MS4wIG1kdD0wMC4yMDAwCisJCSAqLworCQlpZiAoKE1NQ19T RUNUT1JfU0laRSAhPSBpdmFyLT5jc2QucmVhZF9ibF9sZW4pIHx8CisJCSAgICAoTU1DX1NFQ1RP Ul9TSVpFICE9IGl2YXItPmNzZC53cml0ZV9ibF9sZW4pKSB7CisJCQltbWNfc2V0X2Jsb2NrbGVu KHNjLCBNTUNfU0VDVE9SX1NJWkUpOyAKKwkJfQorCiAJCW1tY19mb3JtYXRfY2FyZF9pZF9zdHJp bmcoaXZhcik7CisKIAkJaWYgKGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykKIAkJCW1tY19sb2df Y2FyZChzYy0+ZGV2LCBpdmFyLCBuZXdjYXJkKTsKIAkJaWYgKG5ld2NhcmQpIHsKQEAgLTEzNjIs NyArMTQ2OSw3IEBACiAJCWVyciA9IG1tY19zZW5kX2lmX2NvbmQoc2MsIDEpOwogCQlpZiAoKGJv b3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykgJiYgZXJyID09IDApCiAJCQlkZXZpY2VfcHJpbnRmKHNj LT5kZXYsICJTRCAyLjAgaW50ZXJmYWNlIGNvbmRpdGlvbnM6IE9LXG4iKTsKLQkJaWYgKG1tY19z ZW5kX2FwcF9vcF9jb25kKHNjLCBlcnIgPyAwIDogTU1DX09DUl9DQ1MsICZvY3IpICE9CisJCWlm IChtbWNfc2VuZF9hcHBfb3BfY29uZChzYywgMCwgJm9jcikgIT0KIAkJICAgIE1NQ19FUlJfTk9O RSkgewogCQkJaWYgKGJvb3R2ZXJib3NlIHx8IG1tY19kZWJ1ZykKIAkJCQlkZXZpY2VfcHJpbnRm KHNjLT5kZXYsICJTRCBwcm9iZTogZmFpbGVkXG4iKTsKQEAgLTE1ODQsMyArMTY5MSw0IEBACiAK IERSSVZFUl9NT0RVTEUobW1jLCBhdDkxX21jaSwgbW1jX2RyaXZlciwgbW1jX2RldmNsYXNzLCBO VUxMLCBOVUxMKTsKIERSSVZFUl9NT0RVTEUobW1jLCBzZGhjaSwgbW1jX2RyaXZlciwgbW1jX2Rl dmNsYXNzLCBOVUxMLCBOVUxMKTsKK0RSSVZFUl9NT0RVTEUobW1jLCBtbWNzcGksIG1tY19kcml2 ZXIsIG1tY19kZXZjbGFzcywgTlVMTCwgTlVMTCk7CkluZGV4OiBzeXMvZGV2L3NkaGNpL3NkaGNp LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9zZGhjaS9zZGhjaS5jCShyZXZpc2lvbiAyMzQ5OTkp CisrKyBzeXMvZGV2L3NkaGNpL3NkaGNpLmMJKHdvcmtpbmcgY29weSkKQEAgLTE0NjcsNiArMTQ2 Nyw5IEBACiAJc3dpdGNoICh3aGljaCkgewogCWRlZmF1bHQ6CiAJCXJldHVybiAoRUlOVkFMKTsK KwljYXNlIE1NQ0JSX0lWQVJfQlVTX1RZUEU6CisJCSpyZXN1bHQgPSBidXNfdHlwZV9zZDsKKwkJ YnJlYWs7CiAJY2FzZSBNTUNCUl9JVkFSX0JVU19NT0RFOgogCQkqcmVzdWx0ID0gc2xvdC0+aG9z dC5pb3MuYnVzX21vZGU7CiAJCWJyZWFrOwpAQCAtMTU1OSw2ICsxNTYyLDcgQEAKIAljYXNlIE1N Q0JSX0lWQVJfVElNSU5HOgogCQlzbG90LT5ob3N0Lmlvcy50aW1pbmcgPSB2YWx1ZTsKIAkJYnJl YWs7CisJY2FzZSBNTUNCUl9JVkFSX0JVU19UWVBFOgogCWNhc2UgTU1DQlJfSVZBUl9DQVBTOgog CWNhc2UgTU1DQlJfSVZBUl9IT1NUX09DUjoKIAljYXNlIE1NQ0JSX0lWQVJfRl9NSU46CkluZGV4 OiBzeXMvZGV2L3NwaWJ1cy9zcGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3NwaWJ1cy9zcGku aAkocmV2aXNpb24gMjM0OTk5KQorKysgc3lzL2Rldi9zcGlidXMvc3BpLmgJKHdvcmtpbmcgY29w eSkKQEAgLTEsNSArMSw5IEBACiAvKiAkRnJlZUJTRCQgKi8KIAorI2RlZmluZQlTUElfU0tJUF9D SElQX1NFTEVDVAkJMHgwMDAxIC8qIGJ1cyBpcyBhbHJlYWR5IGFjcXVpcmVkICovCisjZGVmaW5l CVNQSV9DSElQX1NFTEVDVF9ISUdICQkweDAwMDIgLyogc2V0IGNoaXAgc2VsZWN0IGhpZ2ggZm9y CisJCQkJCQkgIGR1cmF0aW9uIG9mIHRyYW5zZmVyICovCisKIHN0cnVjdCBzcGlfY29tbWFuZCB7 CiAJdm9pZAkqdHhfY21kOwogCXVpbnQzMl90IHR4X2NtZF9zejsKQEAgLTksNCArMTMsMTEgQEAK IAl1aW50MzJfdCB0eF9kYXRhX3N6OwogCXZvaWQJKnJ4X2RhdGE7CiAJdWludDMyX3QgcnhfZGF0 YV9zejsKKwl1aW50MTZfdCBmbGFnczsKIH07CisKK3N0cnVjdCBzcGlfY29uZmlnIHsKKwl1bnNp Z25lZCBpbnQgY2xvY2tfaHo7ICAvKiBzZW5kaW5nIGEgMCB0byBzcGlidXNfc2V0X2NvbmZpZwor CQkJCSAgIHJlcXVlc3RzIHRoZSBtYXhpbXVtIHBvc3NpYmxlCisJCQkJICAgZnJlcXVlbmN5ICov Cit9OwpJbmRleDogc3lzL2Rldi9zcGlidXMvc3BpYnVzLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rl di9zcGlidXMvc3BpYnVzLmMJKHJldmlzaW9uIDIzNDk5OSkKKysrIHN5cy9kZXYvc3BpYnVzL3Nw aWJ1cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiBzdGF0aWMgaW50CiBzcGli dXNfcHJvYmUoZGV2aWNlX3QgZGV2KQogeworCiAJZGV2aWNlX3NldF9kZXNjKGRldiwgInNwaWJ1 cyBidXMiKTsKIAlyZXR1cm4gKDApOwogfQpAQCAtNjAsNiArNjEsNyBAQAogc3RhdGljIGludAog c3BpYnVzX3N1c3BlbmQoZGV2aWNlX3QgZGV2KQogeworCiAJcmV0dXJuIChidXNfZ2VuZXJpY19z dXNwZW5kKGRldikpOwogfQogCkBAIC02Nyw2ICs2OSw3IEBACiBpbnQKIHNwaWJ1c19yZXN1bWUo ZGV2aWNlX3QgZGV2KQogeworCiAJcmV0dXJuIChidXNfZ2VuZXJpY19yZXN1bWUoZGV2KSk7CiB9 CiAKQEAgLTEwNyw2ICsxMTAsNyBAQAogc3BpYnVzX2NoaWxkX3BucGluZm9fc3RyKGRldmljZV90 IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGNoYXIgKmJ1ZiwKICAgICBzaXplX3QgYnVmbGVuKQogewor CiAJKmJ1ZiA9ICdcMCc7CiAJcmV0dXJuICgwKTsKIH0KQEAgLTE1NSwxMiArMTU5LDQ4IEBACiAJ cmVzb3VyY2VfaW50X3ZhbHVlKGRuYW1lLCBkdW5pdCwgImNzIiwgJmRldmktPmNzKTsKIH0KIAor c3RhdGljIHZvaWQKK3NwaWJ1c19hY3F1aXJlX2J1c19pbXBsKGRldmljZV90IGRldiwgZGV2aWNl X3QgY2hpbGQpCit7CisKKwlTUElCVVNfQUNRVUlSRV9CVVMoZGV2aWNlX2dldF9wYXJlbnQoZGV2 KSwgY2hpbGQpOworfQorCitzdGF0aWMgdm9pZAorc3BpYnVzX3JlbGVhc2VfYnVzX2ltcGwoZGV2 aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKworCVNQSUJVU19SRUxFQVNFX0JVUyhkZXZp Y2VfZ2V0X3BhcmVudChkZXYpLCBjaGlsZCk7Cit9CisKIHN0YXRpYyBpbnQKIHNwaWJ1c190cmFu c2Zlcl9pbXBsKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHN0cnVjdCBzcGlfY29tbWFu ZCAqY21kKQogeworCiAJcmV0dXJuIChTUElCVVNfVFJBTlNGRVIoZGV2aWNlX2dldF9wYXJlbnQo ZGV2KSwgY2hpbGQsIGNtZCkpOwogfQogCitzdGF0aWMgaW50CitzcGlidXNfd3JpdGVfaW1wbChk ZXZpY2VfdCBkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgZGF0YSkKK3sKKworCXJldHVybiAo U1BJQlVTX1dSSVRFKGRldmljZV9nZXRfcGFyZW50KGRldiksIHJlZywgZGF0YSkpOworfQorCitz dGF0aWMgaW50CitzcGlidXNfZ2V0X2NvbmZpZ19pbXBsKGRldmljZV90IGRldiwgc3RydWN0IHNw aV9jb25maWcgKmNmZykKK3sKKworCXJldHVybiAoU1BJQlVTX0dFVF9DT05GSUcoZGV2aWNlX2dl dF9wYXJlbnQoZGV2KSwgY2ZnKSk7Cit9CisKK3N0YXRpYyBpbnQKK3NwaWJ1c19zZXRfY29uZmln X2ltcGwoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qgc3BpX2NvbmZpZyAqY2ZnKQoreworCisJcmV0dXJu IChTUElCVVNfU0VUX0NPTkZJRyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpLCBjZmcpKTsKK30KKwog c3RhdGljIGRldmljZV9tZXRob2RfdCBzcGlidXNfbWV0aG9kc1tdID0gewogCS8qIERldmljZSBp bnRlcmZhY2UgKi8KIAlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJc3BpYnVzX3Byb2JlKSwKQEAg LTE4MCw3ICsyMjAsMTIgQEAKIAlERVZNRVRIT0QoYnVzX2hpbnRlZF9jaGlsZCwJc3BpYnVzX2hp bnRlZF9jaGlsZCksCiAKIAkvKiBzcGlidXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHNwaWJ1 c19hY3F1aXJlX2J1cywJc3BpYnVzX2FjcXVpcmVfYnVzX2ltcGwpLAorCURFVk1FVEhPRChzcGli dXNfcmVsZWFzZV9idXMsCXNwaWJ1c19yZWxlYXNlX2J1c19pbXBsKSwKIAlERVZNRVRIT0Qoc3Bp YnVzX3RyYW5zZmVyLAlzcGlidXNfdHJhbnNmZXJfaW1wbCksCisJREVWTUVUSE9EKHNwaWJ1c193 cml0ZSwJCXNwaWJ1c193cml0ZV9pbXBsKSwKKwlERVZNRVRIT0Qoc3BpYnVzX2dldF9jb25maWcs CXNwaWJ1c19nZXRfY29uZmlnX2ltcGwpLAorCURFVk1FVEhPRChzcGlidXNfc2V0X2NvbmZpZywJ c3BpYnVzX3NldF9jb25maWdfaW1wbCksCiAKIAlERVZNRVRIT0RfRU5ECiB9OwpJbmRleDogc3lz L2Rldi9zcGlidXMvc3BpYnVzX2lmLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9zcGlidXMvc3Bp YnVzX2lmLm0JKHJldmlzaW9uIDIzNDk5OSkKKysrIHN5cy9kZXYvc3BpYnVzL3NwaWJ1c19pZi5t CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwyMiBAQAogSU5URVJGQUNFIHNwaWJ1czsKIAog IworIyBBY3F1aXJlIGJ1cyBhbmQgc2VsZWN0IHRoZSBkZXZpY2UKKyMKK01FVEhPRCB2b2lkIGFj cXVpcmVfYnVzIHsKKwlkZXZpY2VfdCBkZXY7CisJZGV2aWNlX3QgY2hpbGQ7Cit9OworCisjCisj IFJlbGVhc2UgYnVzIGFuZCBkZXNlbGVjdCB0aGUgZGV2aWNlCisjCitNRVRIT0Qgdm9pZCByZWxl YXNlX2J1cyB7CisJZGV2aWNlX3QgZGV2OworCWRldmljZV90IGNoaWxkOworfTsKKworIwogIyBE byBhIHNwaSBjb21tYW5kCiAjCiBNRVRIT0QgaW50IHRyYW5zZmVyIHsKQEAgLTM5LDMgKzU1LDI4 IEBACiAJZGV2aWNlX3QgY2hpbGQ7CiAJc3RydWN0IHNwaV9jb21tYW5kICpjbWQ7CiB9OworCisj CisjIFdyaXRlIGEgY29tbWFuZCB0byBzcGlidXMKKyMKK01FVEhPRCBpbnQgd3JpdGUgeworCWRl dmljZV90IGRldjsKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3QgZGF0YTsKK307CisKKyMKKyMg R2V0IHNwaWJ1cyBjb25maWd1cmF0aW9uCisjCitNRVRIT0QgaW50IGdldF9jb25maWcgeworCWRl dmljZV90IGRldjsKKwlzdHJ1Y3Qgc3BpX2NvbmZpZyAqY2ZnOworfTsKKworIworIyBTZXQgc3Bp YnVzIGNvbmZpZ3VyYXRpb24KKyMKK01FVEhPRCBpbnQgc2V0X2NvbmZpZyB7CisJZGV2aWNlX3Qg ZGV2OworCXN0cnVjdCBzcGlfY29uZmlnICpjZmc7Cit9Owo= --0023544706e0e22de504bf385516 Content-Type: application/octet-stream; name="ar71xx_spi_r234999.diff" Content-Disposition: attachment; filename="ar71xx_spi_r234999.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h1tgbi423 SW5kZXg6IHN5cy9taXBzL2F0aGVyb3MvYXI3MXh4X3NwaS5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9t aXBzL2F0aGVyb3MvYXI3MXh4X3NwaS5jCShyZXZpc2lvbiAyMzQ5OTkpCisrKyBzeXMvbWlwcy9h dGhlcm9zL2FyNzF4eF9zcGkuYwkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOSBAQAogI2lu Y2x1ZGUgPHN5cy9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVk ZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAjaW5jbHVkZSA8c3lzL21v ZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgogI2luY2x1ZGUgPHN5cy9ybWFuLmg+CiAK ICNpbmNsdWRlIDx2bS92bS5oPgpAQCAtNTEsNiArNTMsNyBAQAogI2luY2x1ZGUgInNwaWJ1c19p Zi5oIgogCiAjaW5jbHVkZSA8bWlwcy9hdGhlcm9zL2FyNzF4eHJlZy5oPgorI2luY2x1ZGUgPG1p cHMvYXRoZXJvcy9hcjcxeHhfY3B1ZGVmLmg+CiAKICN1bmRlZiBBUjcxWFhfU1BJX0RFQlVHCiAj aWZkZWYgQVI3MVhYX1NQSV9ERUJVRwpAQCAtNTksNiArNjIsNyBAQAogI2RlZmluZSBkcHJpbnRm KHgsIGFyZy4uLikKICNlbmRpZgogCisKIC8qCiAgKiByZWdpc3RlciBzcGFjZSBhY2Nlc3MgbWFj cm9zCiAgKi8KQEAgLTc2LDE4ICs4MCwxMjUgQEAKIAogc3RydWN0IGFyNzF4eF9zcGlfc29mdGMg ewogCWRldmljZV90CQlzY19kZXY7CisJZGV2aWNlX3QJCXNjX293bmVyOworCXN0cnVjdCBtdHgJ CXNjX210eDsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpzY19tZW1fcmVzOwogCXVpbnQzMl90CQlzY19y ZWdfY3RybDsKKwlzdHJ1Y3Qgc3BpX2NvbmZpZwlzY19jb25maWc7CisJaW50CQkJc2NfcHJlX2Rl bGF5OworCWludAkJCXNjX3Bvc3RfZGVsYXk7CiB9OwogCisjZGVmaW5lCUFSNzFYWF9TUElfTE9D Syhfc2MpIG10eF9sb2NrKCYoX3NjKS0+c2NfbXR4KQorI2RlZmluZQlBUjcxWFhfU1BJX1VOTE9D Syhfc2MpIG10eF91bmxvY2soJihfc2MpLT5zY19tdHgpCisjZGVmaW5lCUFSNzFYWF9TUElfTE9D S19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eCwgZGV2aWNlX2dldF9uYW1ldW5p dChfc2MtPnNjX2RldiksIFwKKwkgICAgImFyNzF4eF9zcGkiLCBNVFhfREVGKQorI2RlZmluZQlB UjcxWFhfU1BJX0xPQ0tfREVTVFJPWShfc2MpIG10eF9kZXN0cm95KCZfc2MtPnNjX210eCk7Cisj ZGVmaW5lCUFSNzFYWF9TUElfQVNTRVJUX0xPQ0tFRChfc2MpIG10eF9hc3NlcnQoJl9zYy0+c2Nf bXR4LCBNQV9PV05FRCk7CisjZGVmaW5lCUFSNzFYWF9TUElfQVNTRVJUX1VOTE9DS0VEKF9zYykg bXR4X2Fzc2VydCgmX3NjLT5zY19tdHgsIE1BX05PVE9XTkVEKTsKKwogc3RhdGljIGludAogYXI3 MXh4X3NwaV9wcm9iZShkZXZpY2VfdCBkZXYpCiB7CisKIAlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAi QVI3MVhYIFNQSSIpOwogCXJldHVybiAoMCk7CiB9CiAKKworLyogCisgKiBDb25maWd1cmUgdGhl IGhhcmR3YXJlIGNsb2NrIHRvIGFjaGlldmUgdGhlIHJlcXVlc3RlZCBmcmVxdWVuY3kgd2l0aG91 dAorICogZ29pbmcgb3Zlci4gIElmIHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGlzIGxlc3MgdGhh biB0aGUgbWluaW11bSBwb3NzaWJsZQorICogaGFyZHdhcmUgZnJlcXVlbmN5LCBzb2Z0d2FyZSBk ZWxheXMgd2lsbCBiZSB1c2VkIHRvIG1lZXQgdGhlIHRhcmdldC4KKyAqLwogc3RhdGljIGludAor YXI3MXh4X3NwaV9zZXRfY2xvY2soc3RydWN0IGFyNzF4eF9zcGlfc29mdGMgKnNjLCB1bnNpZ25l ZCBpbnQgaHopCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgYWN0dWFsX2Rp dmlzb3I7CisJdW5zaWduZWQgaW50IGFjdHVhbF9oejsKKwl1bnNpZ25lZCBpbnQgYWRkbF9wZXJp b2RfdXM7CisJdWludDY0X3QgdGVtcDY0OworCisJaWYgKDAgPT0gaHopIHsKKwkJLyogbWF4aW11 bSBmcmVxdWVuY3kgcG9zc2libGUgKi8KKwkJZGl2ID0gMDsKKwl9IGVsc2UgeworCQkvKiAKKwkJ ICogRmlndXJlIHRoZSBkaXZpZGVyIHZhbHVlIHRoYXQgd291bGQgYWNoaWV2ZSB0aGUgY2xvc2Vz dAorCQkgKiBmcmVxdWVuY3kgdG8gdGhhdCByZXF1ZXN0ZWQgd2l0aG91dCBnb2luZyBvdmVyLgor CQkgKi8KKwkJZGl2ID0gKGFyNzF4eF9haGJfZnJlcSgpIC0gMSkgLyAoMiAqIGh6KTsKKwl9CisK KwkKKwkvKiBBdm9pZCBjaGlwIGJ1ZyBhdCAwID09IGRpdiAqLworCWlmICgwID09IGRpdikgewor CQlkaXYgPSAxOworCX0KKworCWlmIChkaXYgPiBTUElfQ1RSTF9DTE9DS19ESVZJREVSX01BWCkg eworCQlkaXYgPSBTUElfQ1RSTF9DTE9DS19ESVZJREVSX01BWDsKKwl9CisKKwlhY3R1YWxfZGl2 aXNvciA9IDIgKiAoZGl2ICsgMSk7CisKKwkvKiBXaGF0IHRoZSBoYXJkd2FyZSB3aWxsIGdlbmVy YXRlLCByb3VuZGVkIHVwLiAqLworCWFjdHVhbF9oeiA9IChhcjcxeHhfYWhiX2ZyZXEoKSArIGFj dHVhbF9kaXZpc29yIC0gMSkgLyBhY3R1YWxfZGl2aXNvcjsKKwkKKwlpZiAoMCA9PSBoeikgewor CQloeiA9IGFjdHVhbF9oejsKKwl9CisKKwkvKiAKKwkgKiBBdCByZXF1ZXN0ZWQgY2xvY2sgcmF0 ZXMgYmVsb3cgdGhlIGhhcmR3YXJlIG1pbmltdW0sIGZpZ3VyZSBvdXQKKwkgKiB3aGF0IGRlbGF5 cyBuZWVkIHRvIGJlIGluc2VydGVkIHdoZW4gZmVlZGluZyBiaXRzIHRvIHRoZSBoYXJkd2FyZQor CSAqIGluIG9yZGVyIHRvIHN0YXkgdW5kZXIgdGhlIHRhcmdldC4KKwkgKi8KKwlpZiAoYWN0dWFs X2h6ID4gaHopIHsKKworCQkvKiAKKwkJICogQ29tcHV0ZSB0aGUgYWRkaXRpb25hbCBudW1iZXIg b2YgbWljcm9zZWNvbmRzIHdlIG5lZWQgaW4KKwkJICogdGhlIGNsb2NrIHBlcmlvZC4gIEluIHRo ZSBzcGlyaXQgb2Ygbm90IGV4Y2VlZGluZyB0aGUKKwkJICogdGFyZ2V0IGZyZXF1ZW5jeSwgcm91 bmQgd2hhdCB3ZSBuZWVkIHVwLCByb3VuZCB3aGF0IHRoZQorCQkgKiBoYXJkd2FyZSBnaXZlcyB1 cyBkb3duLgorCQkgKi8KKwkJYWRkbF9wZXJpb2RfdXMgPSAoMTAwMDAwMCArIGh6IC0gMSkgLyBo eiArIDEwMDAwMDAgLyBhY3R1YWxfaHo7CisKKwkJc2MtPnNjX3ByZV9kZWxheSA9IGFkZGxfcGVy aW9kX3VzIC8gMjsKKwkJc2MtPnNjX3Bvc3RfZGVsYXkgPSBhZGRsX3BlcmlvZF91cyAtIHNjLT5z Y19wcmVfZGVsYXk7CisKKwkJLyogCisJCSAqIEEgaGlnaCByZXNvbHV0aW9uLCByb3VuZGVkIHVw IGludmVyc2lvbiBvZiBzdW0gb2YKKwkJICogaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHBlcmlvZCBj b21wb25lbnRzLCBzbyBvbmUgY2FuIGJlCisJCSAqIGNvbmZpZGVudCBhIHJlcXVlc3RlZCBoYXJk d2FyZSBtYXhpbXVtIGNsb2NrIHJhdGUgaXMgbm90CisJCSAqIGJlaW5nIGV4Y2VlZGVkLgorCQkg Ki8KKwkJdGVtcDY0ID0gMTAwMDAwMHVsbCAqIGFjdHVhbF9kaXZpc29yICArIAorCQkgICAgKHVp bnQ2NF90KWFkZGxfcGVyaW9kX3VzICogKHVpbnQ2NF90KWFyNzF4eF9haGJfZnJlcSgpOworCisJ CXNjLT5zY19jb25maWcuY2xvY2tfaHogPSAKKwkJICAgICgxMDAwMDAwdWxsICogKHVpbnQ2NF90 KWFyNzF4eF9haGJfZnJlcSgpICsgdGVtcDY0IC0gMSkgLworCQkgICAgdGVtcDY0OworCX0gZWxz ZSB7CisJCXNjLT5zY19wcmVfZGVsYXkgPSAwOworCQlzYy0+c2NfcG9zdF9kZWxheSA9IDA7CisJ CXNjLT5zY19jb25maWcuY2xvY2tfaHogPSBhcjcxeHhfYWhiX2ZyZXEoKSAvIGFjdHVhbF9kaXZp c29yOworCX0KKworI2lmIDAKKwlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJSZXF1ZXN0ZWQg aHo9JXUgcmVnPTB4JTAyeCBwcmU9JXUgcG9zdD0ldVxuIiwKKwkJICAgICAgaHosIGRpdiwKKwkJ ICAgICAgc2MtPnNjX3ByZV9kZWxheSwgc2MtPnNjX3Bvc3RfZGVsYXkpOworI2VuZGlmCisKKwlT UElfV1JJVEUoc2MsIEFSNzFYWF9TUElfQ1RSTCwgU1BJX0NUUkxfUkVNQVBfRElTQUJMRSB8IGRp dik7CQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAogYXI3MXh4X3NwaV9hdHRhY2go ZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBhcjcxeHhfc3BpX3NvZnRjICpzYyA9IGRldmljZV9n ZXRfc29mdGMoZGV2KTsKQEAgLTEwMiwxMiArMjEzLDIwIEBACiAJCXJldHVybiAoRU5YSU8pOwog CX0KIAorCUFSNzFYWF9TUElfTE9DS19JTklUKHNjKTsKIAogCVNQSV9XUklURShzYywgQVI3MVhY X1NQSV9GUywgMSk7Ci0Jc2MtPnNjX3JlZ19jdHJsICA9IFNQSV9SRUFEKHNjLCBBUjcxWFhfU1BJ X0NUUkwpOwotCVNQSV9XUklURShzYywgQVI3MVhYX1NQSV9DVFJMLCAweDQzKTsKLQlTUElfV1JJ VEUoc2MsIEFSNzFYWF9TUElfSU9fQ1RSTCwgU1BJX0lPX0NUUkxfQ1NNQVNLKTsKKwlzYy0+c2Nf cmVnX2N0cmwgPSBTUElfUkVBRChzYywgQVI3MVhYX1NQSV9DVFJMKTsKKwkKKwkvKgorCSAqIFRo ZSBmb2xsb3dpbmcgaXMgZXF1aXZhbGVudCB0byBBUjcxWFhfU1BJX0NUUkwgPSAweDQzLCB3aGlj aCBoYXMKKwkgKiBiZWVuIHRoZSBoaXN0b3JpY2FsIGRlZmF1bHQuCisJICovCisJYXI3MXh4X3Nw aV9zZXRfY2xvY2soc2MsIChhcjcxeHhfYWhiX2ZyZXEoKSAtIDEpIC8gNik7CiAKKwlTUElfV1JJ VEUoc2MsIEFSNzFYWF9TUElfSU9fQ1RSTCwgU1BJX0lPX0NUUkxfQ1MoMCkpOworCisJZGV2aWNl X3ByaW50ZihkZXYsICJhdHRhY2hpbmcgYXQgc3BpYnVzMFxuIik7CiAJZGV2aWNlX2FkZF9jaGls ZChkZXYsICJzcGlidXMiLCAwKTsKIAlyZXR1cm4gKGJ1c19nZW5lcmljX2F0dGFjaChkZXYpKTsK IH0KQEAgLTExNSw0OSArMjM0LDk3IEBACiBzdGF0aWMgdm9pZAogYXI3MXh4X3NwaV9jaGlwX2Fj dGl2YXRlKHN0cnVjdCBhcjcxeHhfc3BpX3NvZnRjICpzYywgaW50IGNzKQogewotCXVpbnQzMl90 IGlvY3RybCA9IFNQSV9JT19DVFJMX0NTTUFTSzsKKwogCS8qCi0JICogUHV0IHJlc3BlY3RpdmUg Q1N4IHRvIGxvdworCSAqIEFjdGl2YXRlIHRoZSByZXNwZWN0aXZlIGRldmljZSAod2UgaGF2ZSB0 aHJlZSBDUyBwaW5zIGFsbG93aW5nCisJICogNyBtdXhlZCBkZXZpY2VzIG9uIGJ1cykuCisJICog QXQgYW55IGdpdmVuIG1vbWVudCBvbmx5IG9uZSBkZXZpY2Ugc2hvdWxkIGJlIHNlbGVjdGVkIG9u IGJ1cy4gCisJICogaWYgY3MgaXMgc2V0IHRvIDAgaXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBTUElf SU9fQ1RSTF9DU01BU0sKKwkgKiAoMHg3IC0gYWxsIHBpbnMgaGlnaCAtIG5vIGRldmljZSBzZWxl Y3RlZCkuCiAJICovCi0JaW9jdHJsICY9IH4oU1BJX0lPX0NUUkxfQ1MwIDw8IGNzKTsKLQotCVNQ SV9XUklURShzYywgQVI3MVhYX1NQSV9JT19DVFJMLCBpb2N0cmwpOworCVNQSV9XUklURShzYywg QVI3MVhYX1NQSV9JT19DVFJMLCBTUElfSU9fQ1RSTF9DUyhjcykpOwogfQogCiBzdGF0aWMgdm9p ZAogYXI3MXh4X3NwaV9jaGlwX2RlYWN0aXZhdGUoc3RydWN0IGFyNzF4eF9zcGlfc29mdGMgKnNj LCBpbnQgY3MpCiB7CisKIAkvKgotCSAqIFB1dCBhbGwgQ1N4IHRvIGhpZ2gKKwkgKiBEZWFjdGl2 YXRlIGFsbCBkZXZpY2VzLCBwdXQgYWxsIENTeCB0byBoaWdoCiAJICovCi0JU1BJX1dSSVRFKHNj LCBBUjcxWFhfU1BJX0lPX0NUUkwsIFNQSV9JT19DVFJMX0NTTUFTSyk7CisJU1BJX1dSSVRFKHNj LCBBUjcxWFhfU1BJX0lPX0NUUkwsIFNQSV9JT19DVFJMX0NTKDApKTsKIH0KIAorc3RhdGljIHZv aWQKK2FyNzF4eF9zcGlfYWNxdWlyZV9idXMoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkK K3sKKwlzdHJ1Y3Qgc3BpYnVzX2l2YXIgKmRldmkgPSBTUElCVVNfSVZBUihjaGlsZCk7CisJc3Ry dWN0IGFyNzF4eF9zcGlfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 CisJQVI3MVhYX1NQSV9BU1NFUlRfVU5MT0NLRUQoc2MpOworCisJQVI3MVhYX1NQSV9MT0NLKHNj KTsKKwlpZiAoc2MtPnNjX293bmVyKQorCQlwYW5pYygiYXI3MXh4X3NwaTogY2Fubm90IHNlcmlh bGl6ZSB0aGUgYWNjZXNzIHRvIGRldmljZS4iKTsKKworCXNjLT5zY19vd25lciA9IGNoaWxkOwor CWFyNzF4eF9zcGlfY2hpcF9hY3RpdmF0ZShzYywgZGV2aS0+Y3MpOworfQorCitzdGF0aWMgdm9p ZAorYXI3MXh4X3NwaV9yZWxlYXNlX2J1cyhkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQor eworCXN0cnVjdCBzcGlidXNfaXZhciAqZGV2aSA9IFNQSUJVU19JVkFSKGNoaWxkKTsKKwlzdHJ1 Y3QgYXI3MXh4X3NwaV9zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK KwlBUjcxWFhfU1BJX0FTU0VSVF9MT0NLRUQoc2MpOworCisJaWYgKCFzYy0+c2Nfb3duZXIpCisJ CXBhbmljKCJhcjcxeHhfc3BpOiByZWxlYXNpbmcgdW5vd25lZCBidXMuIik7CisJaWYgKHNjLT5z Y19vd25lciAhPSBjaGlsZCkKKwkJcGFuaWMoImFyNzF4eF9zcGk6IHlvdSBkb24ndCBvd24gdGhl IGJ1cy4gZ2FtZSBvdmVyLiIpOworCisJYXI3MXh4X3NwaV9jaGlwX2RlYWN0aXZhdGUoc2MsIGRl dmktPmNzKTsKKwlzYy0+c2Nfb3duZXIgPSBOVUxMOworCUFSNzFYWF9TUElfVU5MT0NLKHNjKTsK K30KKwogc3RhdGljIHVpbnQ4X3QKIGFyNzF4eF9zcGlfdHhyeChzdHJ1Y3QgYXI3MXh4X3NwaV9z b2Z0YyAqc2MsIGludCBjcywgdWludDhfdCBkYXRhKQogewogCWludCBiaXQ7Ci0JLyogQ1MwICov Ci0JdWludDMyX3QgaW9jdHJsID0gU1BJX0lPX0NUUkxfQ1NNQVNLOworCXVpbnQzMl90IGlvY3Ry bDsKKworCUFSNzFYWF9TUElfQVNTRVJUX0xPQ0tFRChzYyk7CisKIAkvKgotCSAqIGxvdy1sZXZl bCBmb3Igc2VsZWN0ZWQgQ1MKKwkgKiBhY3RpdmF0ZSB0aGUgc2VsZWN0ZWQgQ1MKIAkgKi8KLQlp b2N0cmwgJj0gfihTUElfSU9fQ1RSTF9DUzAgPDwgY3MpOworCWlvY3RybCA9IFNQSV9JT19DVFJM X0NTKGNzKTsKIAotCXVpbnQzMl90IGlvZCwgcmRzOworCXVpbnQzMl90IGlvZCA9IDAsIHJkczsK IAlmb3IgKGJpdCA9IDc7IGJpdCA+PTA7IGJpdC0tKSB7CiAJCWlmIChkYXRhICYgKDEgPDwgYml0 KSkKIAkJCWlvZCA9IGlvY3RybCB8IFNQSV9JT19DVFJMX0RPOwogCQllbHNlCiAJCQlpb2QgPSBp b2N0cmwgJiB+U1BJX0lPX0NUUkxfRE87CisKIAkJU1BJX1dSSVRFKHNjLCBBUjcxWFhfU1BJX0lP X0NUUkwsIGlvZCk7CisJCWlmIChzYy0+c2NfcHJlX2RlbGF5KSB7CisJCQlERUxBWShzYy0+c2Nf cHJlX2RlbGF5KTsKKwkJfQogCQlTUElfV1JJVEUoc2MsIEFSNzFYWF9TUElfSU9fQ1RSTCwgaW9k IHwgU1BJX0lPX0NUUkxfQ0xLKTsKKwkJaWYgKHNjLT5zY19wb3N0X2RlbGF5KSB7CisJCQlERUxB WShzYy0+c2NfcG9zdF9kZWxheSk7CisJCX0KIAl9CiAKIAkvKgogCSAqIFByb3ZpZGUgZmFsbGlu ZyBlZGdlIGZvciBjb25uZWN0ZWQgZGV2aWNlIGJ5IGNsZWFyIGNsb2NrIGJpdC4KIAkgKi8KLQlT UElfV1JJVEUoc2MsIEFSNzFYWF9TUElfSU9fQ1RSTCwgaW9kKTsKKwlTUElfV1JJVEUoc2MsIEFS NzFYWF9TUElfSU9fQ1RSTCwgaW9kKTsJCiAJcmRzID0gU1BJX1JFQUQoc2MsIEFSNzFYWF9TUElf UkRTKTsKIAogCXJldHVybiAocmRzICYgMHhmZik7CkBAIC0xNjksMTIgKzMzNiwxOSBAQAogCXN0 cnVjdCBhcjcxeHhfc3BpX3NvZnRjICpzYzsKIAl1aW50OF90ICpidWZfaW4sICpidWZfb3V0Owog CXN0cnVjdCBzcGlidXNfaXZhciAqZGV2aSA9IFNQSUJVU19JVkFSKGNoaWxkKTsKKwlpbnQgY3Mg PSBkZXZpLT5jczsKIAlpbnQgaTsKIAogCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0J YXI3MXh4X3NwaV9jaGlwX2FjdGl2YXRlKHNjLCBkZXZpLT5jcyk7CisJaWYgKChjbWQtPmZsYWdz ICYgU1BJX1NLSVBfQ0hJUF9TRUxFQ1QpID09IDApCisJCWFyNzF4eF9zcGlfYWNxdWlyZV9idXMo ZGV2LCBjaGlsZCk7CiAKKwlpZiAoY21kLT5mbGFncyAmIFNQSV9DSElQX1NFTEVDVF9ISUdIKSB7 CisJCWFyNzF4eF9zcGlfY2hpcF9kZWFjdGl2YXRlKHNjLCBkZXZpLT5jcyk7CisJCWNzID0gMDsK Kwl9CisKIAlLQVNTRVJUKGNtZC0+dHhfY21kX3N6ID09IGNtZC0+cnhfY21kX3N6LCAKIAkgICAg KCJUWC9SWCBjb21tYW5kIHNpemVzIHNob3VsZCBiZSBlcXVhbCIpKTsKIAlLQVNTRVJUKGNtZC0+ dHhfZGF0YV9zeiA9PSBjbWQtPnJ4X2RhdGFfc3osIApAQCAtMTg2LDcgKzM2MCw3IEBACiAJYnVm X291dCA9ICh1aW50OF90ICopY21kLT50eF9jbWQ7CiAJYnVmX2luID0gKHVpbnQ4X3QgKiljbWQt PnJ4X2NtZDsKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT50eF9jbWRfc3o7IGkrKykKLQkJYnVmX2lu W2ldID0gYXI3MXh4X3NwaV90eHJ4KHNjLCBkZXZpLT5jcywgYnVmX291dFtpXSk7CisJCWJ1Zl9p bltpXSA9IGFyNzF4eF9zcGlfdHhyeChzYywgY3MsIGJ1Zl9vdXRbaV0pOwogCiAJLyoKIAkgKiBS ZWNlaXZlL3RyYW5zbWl0IGRhdGEgKGRlcGVuZHMgb24gIGNvbW1hbmQpCkBAIC0xOTQsMTQgKzM2 OCw1MyBAQAogCWJ1Zl9vdXQgPSAodWludDhfdCAqKWNtZC0+dHhfZGF0YTsKIAlidWZfaW4gPSAo dWludDhfdCAqKWNtZC0+cnhfZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT50eF9kYXRhX3N6 OyBpKyspCi0JCWJ1Zl9pbltpXSA9IGFyNzF4eF9zcGlfdHhyeChzYywgZGV2aS0+Y3MsIGJ1Zl9v dXRbaV0pOworCQlidWZfaW5baV0gPSBhcjcxeHhfc3BpX3R4cngoc2MsIGNzLCBidWZfb3V0W2ld KTsKIAotCWFyNzF4eF9zcGlfY2hpcF9kZWFjdGl2YXRlKHNjLCBkZXZpLT5jcyk7CisJaWYgKChj bWQtPmZsYWdzICYgU1BJX1NLSVBfQ0hJUF9TRUxFQ1QpID09IDApIHsKKwkJYXI3MXh4X3NwaV9y ZWxlYXNlX2J1cyhkZXYsIGNoaWxkKTsKKwl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBTUElfQ0hJ UF9TRUxFQ1RfSElHSCkgeworCQlhcjcxeHhfc3BpX2NoaXBfYWN0aXZhdGUoc2MsIGRldmktPmNz KTsKKwl9CiAKIAlyZXR1cm4gKDApOwogfQogCiBzdGF0aWMgaW50CithcjcxeHhfc3BpX3dyaXRl KGRldmljZV90IGRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBkYXRhKQoreworCXN0cnVjdCBh cjcxeHhfc3BpX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCUFSNzFYWF9T UElfQVNTRVJUX0xPQ0tFRChzYyk7CisJU1BJX1dSSVRFKHNjLCByZWcsIGRhdGEpOworCXJldHVy biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FyNzF4eF9zcGlfc2V0X2NvbmZpZyhkZXZpY2VfdCBk ZXYsIHN0cnVjdCBzcGlfY29uZmlnICpjZmcpCit7CisJc3RydWN0IGFyNzF4eF9zcGlfc29mdGMg KnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJQVI3MVhYX1NQSV9BU1NFUlRfTE9DS0VE KHNjKTsKKwlpZiAoYXI3MXh4X3NwaV9zZXRfY2xvY2soc2MsIGNmZy0+Y2xvY2tfaHopKSB7CisJ CXJldHVybiAoRU5YSU8pOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Fy NzF4eF9zcGlfZ2V0X2NvbmZpZyhkZXZpY2VfdCBkZXYsIHN0cnVjdCBzcGlfY29uZmlnICpjZmcp Cit7CisJc3RydWN0IGFyNzF4eF9zcGlfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworCisJQVI3MVhYX1NQSV9BU1NFUlRfTE9DS0VEKHNjKTsKKworCSpjZmcgPSBzYy0+c2NfY29u ZmlnOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAogYXI3MXh4X3NwaV9kZXRhY2go ZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBhcjcxeHhfc3BpX3NvZnRjICpzYyA9IGRldmljZV9n ZXRfc29mdGMoZGV2KTsKQEAgLTIwOSw2ICs0MjIsOCBAQAogCVNQSV9XUklURShzYywgQVI3MVhY X1NQSV9DVFJMLCBzYy0+c2NfcmVnX2N0cmwpOwogCVNQSV9XUklURShzYywgQVI3MVhYX1NQSV9G UywgMCk7CiAKKwlBUjcxWFhfU1BJX0xPQ0tfREVTVFJPWShzYyk7CisKIAlpZiAoc2MtPnNjX21l bV9yZXMpCiAJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIDAsIHNj LT5zY19tZW1fcmVzKTsKIApAQCAtMjIxLDcgKzQzNiwxMiBAQAogCURFVk1FVEhPRChkZXZpY2Vf YXR0YWNoLAlhcjcxeHhfc3BpX2F0dGFjaCksCiAJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWFy NzF4eF9zcGlfZGV0YWNoKSwKIAorCURFVk1FVEhPRChzcGlidXNfYWNxdWlyZV9idXMsCWFyNzF4 eF9zcGlfYWNxdWlyZV9idXMpLAorCURFVk1FVEhPRChzcGlidXNfcmVsZWFzZV9idXMsCWFyNzF4 eF9zcGlfcmVsZWFzZV9idXMpLAogCURFVk1FVEhPRChzcGlidXNfdHJhbnNmZXIsCWFyNzF4eF9z cGlfdHJhbnNmZXIpLAorCURFVk1FVEhPRChzcGlidXNfd3JpdGUsCQlhcjcxeHhfc3BpX3dyaXRl KSwKKwlERVZNRVRIT0Qoc3BpYnVzX2dldF9jb25maWcsCWFyNzF4eF9zcGlfZ2V0X2NvbmZpZyks CisJREVWTUVUSE9EKHNwaWJ1c19zZXRfY29uZmlnLAlhcjcxeHhfc3BpX3NldF9jb25maWcpLAog CiAJezAsIDB9CiB9OwpJbmRleDogc3lzL21pcHMvYXRoZXJvcy9hcjcxeHhyZWcuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzeXMvbWlwcy9hdGhlcm9zL2FyNzF4eHJlZy5oCShyZXZpc2lvbiAyMzQ5OTkpCisr KyBzeXMvbWlwcy9hdGhlcm9zL2FyNzF4eHJlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiAr Mjk5LDEzIEBACiAvKgogICogR2lnRSBhZGFwdGVycyByZWdpb24KICAqLworI2RlZmluZSBBUjcx WFhfTUlJMF9DVFJMCTB4MTgwNzAwMDAKKyNkZWZpbmUgQVI3MVhYX01JSTFfQ1RSTAkweDE4MDcw MDA0CisjZGVmaW5lCQlNSUlfQ1RSTF9TUEVFRF9TSElGVAk0CisjZGVmaW5lCQlNSUlfQ1RSTF9T UEVFRF9NQVNLCTMKKyNkZWZpbmUJCU1JSV9DVFJMX1NQRUVEXzEwCTAKKyNkZWZpbmUJCU1JSV9D VFJMX1NQRUVEXzEwMAkxCisjZGVmaW5lCQlNSUlfQ1RSTF9TUEVFRF8xMDAwCTIKICNkZWZpbmUg QVI3MVhYX01BQzBfQkFTRQkweDE5MDAwMDAwCiAjZGVmaW5lIEFSNzFYWF9NQUMxX0JBU0UJMHgx QTAwMDAwMAogCkBAIC01MDEsMTEgKzUwOCwxMiBAQAogI2RlZmluZQkJQVI3MVhYX1NQSV9DVFJM CQkweDA0CiAjZGVmaW5lCQkJU1BJX0NUUkxfUkVNQVBfRElTQUJMRQkJKDEgPDwgNikKICNkZWZp bmUJCQlTUElfQ1RSTF9DTE9DS19ESVZJREVSX01BU0sJKCgxIDw8IDYpIC0gMSkKKyNkZWZpbmUg IAkJU1BJX0NUUkxfQ0xPQ0tfRElWSURFUl9NQVgJU1BJX0NUUkxfQ0xPQ0tfRElWSURFUl9NQVNL CiAjZGVmaW5lCQlBUjcxWFhfU1BJX0lPX0NUUkwJMHgwOAogI2RlZmluZQkJCVNQSV9JT19DVFJM X0NTMgkJCSgxIDw8IDE4KQogI2RlZmluZQkJCVNQSV9JT19DVFJMX0NTMQkJCSgxIDw8IDE3KQog I2RlZmluZQkJCVNQSV9JT19DVFJMX0NTMAkJCSgxIDw8IDE2KQotI2RlZmluZQkJCVNQSV9JT19D VFJMX0NTTUFTSwkJKDcgPDwgMTYpCisjZGVmaW5lCQkJU1BJX0lPX0NUUkxfQ1MoY3MpCQkoKDcg LSBjcykgPDwgMTYpCiAjZGVmaW5lCQkJU1BJX0lPX0NUUkxfQ0xLCQkJKDEgPDwgOCkKICNkZWZp bmUJCQlTUElfSU9fQ1RSTF9ETwkJCTEKICNkZWZpbmUJCUFSNzFYWF9TUElfUkRTCQkweDBDCg== --0023544706e0e22de504bf385516-- From owner-freebsd-mips@FreeBSD.ORG Fri May 4 17:45:32 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F2E4C1065670 for ; Fri, 4 May 2012 17:45:32 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pz0-f48.google.com (mail-pz0-f48.google.com [209.85.210.48]) by mx1.freebsd.org (Postfix) with ESMTP id C43B88FC14 for ; Fri, 4 May 2012 17:45:32 +0000 (UTC) Received: by dadz8 with SMTP id z8so220669dad.7 for ; Fri, 04 May 2012 10:45:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=YVYIWKZFLEFnlldXdKrCJ7oFTcDsIiIUttB1gdiZMHw=; b=ViKXBb6ZUSyjyzfbRqIQXT/O9JOoWEe4JAhGl9Xrk6ifjO7QjDdyMskRcRb733hlc8 L4nCungxvG3fPHVkrdzth1kk0ruU1OvQOvumUobn5r2gcAhQtjnvdlcZRIa4YaVjO8Ue F7+gWTcBu9oiN6WXVgkIl6kv98jB7Cw44qdSYKOMiqndXqSz9Uf/tHJLMfEIU62yDLYS /IsuItTJfYtepAgIfYZLjfeGPZAWNOn+3cmnKyXr9g5iqZ3YGLqYm83E9X04HkP1eyo6 3LmEJBrsAlC/OIfkBPEWV81ymlP2uNRnqdYR3f2brZ8LLpuAdGSImIXVmaixBqA4pHDQ VH5Q== MIME-Version: 1.0 Received: by 10.68.130.67 with SMTP id oc3mr21110340pbb.68.1336153532325; Fri, 04 May 2012 10:45:32 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.142.101.9 with HTTP; Fri, 4 May 2012 10:45:32 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 10:45:32 -0700 X-Google-Sender-Auth: 0_8k1miLznuQ2Fy8lUbBphZ0fVY Message-ID: From: Adrian Chadd To: Patrick Kelsey Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-mips@freebsd.org Subject: Re: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 17:45:33 -0000 Hi, Is this with the switch PHY driver of yours, or just stand-alone? What's the PHY that arge1 is attached to? adrian From owner-freebsd-mips@FreeBSD.ORG Fri May 4 18:30:38 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D15C81065687; Fri, 4 May 2012 18:30:38 +0000 (UTC) (envelope-from pkelsey@gmail.com) Received: from mail-qc0-f182.google.com (mail-qc0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id 75A2A8FC12; Fri, 4 May 2012 18:30:38 +0000 (UTC) Received: by qcsg15 with SMTP id g15so2607569qcs.13 for ; Fri, 04 May 2012 11:30:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=0JXQVPhfr7bdpEGv/02uDPrLahO0v4mxRBbhs44seY0=; b=0ak7JhLuQB+Yhn6yVlMVuKlHVL9jF0Z/8zOfTnZMpSUfCok8salJqXq3Z3lV7I0yaf hWFMKvvzCL7ojE2xN/P6EUFkNPi3qATkblhElwV019MqdoBrLvOA2kyLc4w6T2jKwaTY spuB9DGdSlFKW/HHb3zqpe8DzAHhFD3fhL0LnSp/FVIGaZM3I3StRZbROpQJsFdRg63V 5Mx++3eHpwzAZBUk9C3ojV285c5cT2Df6Z+18UZGtdJkElfNOWi7ukmJAQSu9xSPAhls tT6A4qU+WzxvbUOhQ+TXOCJ1lh6fjY3qCSbK78FM6JCTgD+uLRQL/plLVXQnOQXSauw0 rHig== MIME-Version: 1.0 Received: by 10.224.100.71 with SMTP id x7mr11625038qan.92.1336156237699; Fri, 04 May 2012 11:30:37 -0700 (PDT) Sender: pkelsey@gmail.com Received: by 10.229.149.198 with HTTP; Fri, 4 May 2012 11:30:37 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 14:30:37 -0400 X-Google-Sender-Auth: J1SgSKY7eDhqsU57WGsFe08wZpc Message-ID: From: Patrick Kelsey To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-mips@freebsd.org Subject: Re: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 18:30:38 -0000 On Fri, May 4, 2012 at 1:45 PM, Adrian Chadd wrote: > Hi, > > Is this with the switch PHY driver of yours, or just stand-alone? > What's the PHY that arge1 is attached to? Hmmm. On the RB450G, arge1 is connected to port 5 on the AR8316 switch, and port 5 on the AR8316 is configured by the boot loader to bypass the switch complex and connect directly to an internal PHY. The MDIO bus on the AR8316 is wired to arge0. arge0 is connected to the cpu port on the AR8316, with no real PHY. That hack diff I sent is making less and less overall sense (although it does let me limp along for the moment). What I really want is for arge0 to initialize to whatever fixed rate is hinted (or defaulted when no hint is given), and I want arge1 to see its PHY on the MDIO bus attached to arge0. Perhaps I should have ARGE_MDIO defined whereas I currently do not? -Patrick From owner-freebsd-mips@FreeBSD.ORG Fri May 4 22:12:56 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 89442106566B for ; Fri, 4 May 2012 22:12:56 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by mx1.freebsd.org (Postfix) with ESMTP id 56CE78FC0C for ; Fri, 4 May 2012 22:12:56 +0000 (UTC) Received: by pbbro2 with SMTP id ro2so4785671pbb.13 for ; Fri, 04 May 2012 15:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=YMYZOZMOf9vMKGVdjwUyJe81+fyF1WAHmnSgT0/XKzM=; b=e5f8KAJVj7jf2QIGPJQG4M3MztFvaxvyiqwx8uq046IbDaBpZxGCfTerT28hH+mddp K3W+dQRlW72ubIM+DsIjgdmxGEqNfH8cih9GXnB9sT/4rRLJUlVtw7hmM4NCNQks2ORA ovTtbmunyeTeE52rGS0DXBZTvoZyqXRoeUTkII2ob7Jj6cHDFKH0G3j3SHvqBG/B7hgD ZTMyXwPtgPwS3waKuS2AyZEsBZ/ONXp2y8Z9Dqu/cD8Q1rXlO1S+vaWyFvLugOHyUhR9 K7B8D/KTX8sxkvlDAPjDInlZbflsc5ZqA7riovF/6lD91+3hX3lfZUFjobATs13IwoJ4 gsuw== MIME-Version: 1.0 Received: by 10.68.224.167 with SMTP id rd7mr22779794pbc.129.1336169575815; Fri, 04 May 2012 15:12:55 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.142.101.9 with HTTP; Fri, 4 May 2012 15:12:55 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 15:12:55 -0700 X-Google-Sender-Auth: Gq1NQ6SALdrwrTXmL7bwMck2eSQ Message-ID: From: Adrian Chadd To: Patrick Kelsey Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: freebsd-mips@freebsd.org Subject: Re: heads up - ar71xx changes X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 22:12:56 -0000 On 4 May 2012 11:30, Patrick Kelsey wrote: > Hmmm. =A0On the RB450G, arge1 is connected to port 5 on the AR8316 > switch, and port 5 on the AR8316 is configured by the boot loader to > bypass the switch complex and connect directly to an internal PHY. > The MDIO bus on the AR8316 is wired to arge0. =A0arge0 is connected to > the cpu port on the AR8316, with no real PHY. =A0That hack diff I sent > is making less and less overall sense (although it does let me limp > along for the moment). > > What I really want is for arge0 to initialize to whatever fixed rate > is hinted (or defaulted when no hint is given), and I want arge1 to > see its PHY on the MDIO bus attached to arge0. =A0Perhaps I should have > ARGE_MDIO defined whereas I currently do not? Right. this is very much like what my AP96 reference board has. The previous code had a hack which was only valid for AR71xx/AR913x, where it assumed arge0 and arge1 miibus were the same - it just used the arge0 MDIO lines. There was no "arge1 MDIO" interface. The AR724x and later SoCs can have 2 MDIO busses. I've "solved" this by using the arge mdio/mii bus split code from stefan, which is in -HEAD. It's a bit of a round about way of specifying mdio and mii busses, but it lets you (later) do weird and wonderful things, like hang an MII bus off of something internal to a switch, so you can hang ukphy or whatever other PHYs off of it. You could look at the AP96 and AP96.hints files in sys/mips/conf/ and see if my arge0/arge1 hints work for you. What _I_ should do is grab that switch driver and see if it works for me. If it does, I may just commit it to -HEAD as a starting point for the switch API that ray@ has been working on, and then bring over his switch API. That at least lets me get AR71xx + AR8316 support for the AP96 and Routerstation Pro boards, and gives me a starting point to do further testing/development with. Thanks! Adrian From owner-freebsd-mips@FreeBSD.ORG Fri May 4 22:46:29 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 89F64106564A for ; Fri, 4 May 2012 22:46:29 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by mx1.freebsd.org (Postfix) with ESMTP id 5C4B88FC08 for ; Fri, 4 May 2012 22:46:29 +0000 (UTC) Received: by pbbro2 with SMTP id ro2so4811350pbb.13 for ; Fri, 04 May 2012 15:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=sBFpWPVqFb/9/KE/YtunyzwDJcnNO7lJzEx+aa77x5w=; b=ldUqqxR1Iycocjc4tboKR+AfBpnc/OgnRB5fSSDeeVxydHMQA0oU3EMngNdGIkI2YZ 4dOxM8sSKCOwb+kWefmgZZcL/EJgZZZdYNe6K3mqylurH51rWhGhtuehLcrdP+c3NMuH 1tRXaDq/KRAWLob7+fNm1Inje9C3MA1lj0FYh3Fkt8zypPOo0pD2TtKl+0NogzndHZtp 0sJrRAEI4fY06RjZT+Hg9e3Nr3sA9kf5+crG4Wyz8u2bqtJHOulkR+KEglLvHlJ3/8hY YEEgxWMokKNpDIW1HZ5cYF6vwqkz6uyqrUyksjqgca9psr1sv7526wUErUZWluAGSACz RU9Q== MIME-Version: 1.0 Received: by 10.68.224.167 with SMTP id rd7mr22972757pbc.129.1336171583417; Fri, 04 May 2012 15:46:23 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.142.101.9 with HTTP; Fri, 4 May 2012 15:46:23 -0700 (PDT) In-Reply-To: References: Date: Fri, 4 May 2012 15:46:23 -0700 X-Google-Sender-Auth: rLor317pyQ90oGTqn3nJOaTidlo Message-ID: From: Adrian Chadd To: Patrick Kelsey Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-mips@freebsd.org Subject: Re: [PATCH] MMC/SD SPI-mode driver X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 22:46:29 -0000 Hi! I'll first take a stab at the ar71xx SPI code. You've introduced bus grab/release routines, do other consumers of the SPI API need to be 'fixed' ? (eg mx25l) ? I'd like to get at least this update into the tree so you can do your variable speed SPI device IO for supporting MMC devices. Thanks! Adrian From owner-freebsd-mips@FreeBSD.ORG Fri May 4 23:12:12 2012 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6FA57106566B; Fri, 4 May 2012 23:12:12 +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 266898FC12; Fri, 4 May 2012 23:12:12 +0000 (UTC) Received: from [10.30.101.53] ([209.117.142.2]) (authenticated bits=0) by harmony.bsdimp.com (8.14.4/8.14.3) with ESMTP id q44N9B9j035012 (version=TLSv1/SSLv3 cipher=DHE-DSS-AES128-SHA bits=128 verify=NO); Fri, 4 May 2012 17:09:15 -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: Date: Fri, 4 May 2012 17:09:05 -0600 Content-Transfer-Encoding: quoted-printable Message-Id: <5F95C99B-4D6D-417A-8B17-CA7C64010408@bsdimp.com> References: To: Adrian Chadd 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]); Fri, 04 May 2012 17:09:17 -0600 (MDT) Cc: freebsd-mips@freebsd.org Subject: Re: [PATCH] MMC/SD SPI-mode driver X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2012 23:12:12 -0000 On May 4, 2012, at 4:46 PM, Adrian Chadd wrote: > Hi! >=20 > I'll first take a stab at the ar71xx SPI code. >=20 > You've introduced bus grab/release routines, do other consumers of the > SPI API need to be 'fixed' ? > (eg mx25l) ? >=20 > I'd like to get at least this update into the tree so you can do your > variable speed SPI device IO for supporting MMC devices. I think so. The at45 driver likely needs tweaking, as well as the = at91_spi code for grab/release semantics. I'll have to take a look at = those patches just to make sure though. Warner