From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ADA67EB64DA for ; Thu, 20 Jul 2023 11:09:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230041AbjGTLJd (ORCPT ); Thu, 20 Jul 2023 07:09:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229614AbjGTLJb (ORCPT ); Thu, 20 Jul 2023 07:09:31 -0400 Received: from mail-oa1-x2b.google.com (mail-oa1-x2b.google.com [IPv6:2001:4860:4864:20::2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01A79BE; Thu, 20 Jul 2023 04:09:26 -0700 (PDT) Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-1b038d7a5faso518412fac.1; Thu, 20 Jul 2023 04:09:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689851365; x=1690456165; h=content-language:to:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=6P++tfLi83PAi9C0kB5IVM91BHZMPURqMogUnYLROt8=; b=pfyPnnDWQKLZUTUlaoZQ/VzgE7bsnYjT2iHvph2fYP3KiyL4OJDxeSZ4DlID7h1Pc5 0eRd9viNY92voyf+NkOR9fFOlUNhq6o5S9bodltI+H9JUSRAiYldpr7AR6DfKOSTSaLQ L6TRvhgLkCjDIcBGJvsX1JswM901HtlBT9rcTHe2dtWtlA/VAqXKkDemYm84jBBUkJbh fcEDNixgeWoHLtJbdErtUzRA3AQBYhz5mK1IDsPX/zaln1a5PNrplqhg9v+iVuNfBMfu J3jYi+0y+l+D4HOfv+1c21aHBex4cLmA1RsKIEwqEDmtOgI6KI4ljUI9nj5h0V6PRXsz b++g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689851365; x=1690456165; h=content-language:to:subject:from:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6P++tfLi83PAi9C0kB5IVM91BHZMPURqMogUnYLROt8=; b=RPvrQ2u7apqn+2x5Lf+vQlUZwcwbcfZI7gDzvz+GGs+OjDk/eKopWMz5B6d2zZnnwe +A23C0XNMgXD/EzcsCqsFtFIiTs/xM5IZlxgFiCmwmVZJfav+uLBjdSavi9Imd2jHbFR wGsO7nplDyiZQmR2zmngP9rR71S9pzhLtlC2JY09N67Ij5+9jrxIeZrvz57tK8PJ2CLz GNtpRT4Le9DqcJlfBGNRwyv3KfBFJxdN8EcFUjLDY+0lXkoly0rXpyyKwNVBFuezcUW2 Xw0RX521THgFIb25/23nwp6YSTY0wf2MBKVBR7AnhBPhIM+wIKIhvNjG3KKqKl0oO9QJ R3zA== X-Gm-Message-State: ABy/qLa/m0TnKl20r2f3IHibKYviQ7grSeVnEjVx3yhh6LWwj2jadUh6 QJbHaq72E9S/xVEfcn70vcGGAm/9/5M= X-Google-Smtp-Source: APBJJlGB8Vt4OauQA06FQvYVsii3+evGwtRA2Vk4ATbKy0FdaQZlWcerMKFfsdGnyNoq0Te6cAmRRw== X-Received: by 2002:a05:6870:e74c:b0:1ba:629a:e34a with SMTP id t12-20020a056870e74c00b001ba629ae34amr1520161oak.12.1689851364946; Thu, 20 Jul 2023 04:09:24 -0700 (PDT) Received: from [192.168.1.196] (cpe-70-122-13-216.austin.res.rr.com. [70.122.13.216]) by smtp.gmail.com with ESMTPSA id x16-20020a056830115000b006b9cc67386fsm306360otq.66.2023.07.20.04.09.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 20 Jul 2023 04:09:24 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------1FqwzupmO0yCH4jSSYKvoYBe" Message-ID: Date: Thu, 20 Jul 2023 06:09:22 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 From: Thomas R Subject: Driver for Nuvoton NCT6687D eSIO chip To: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------1FqwzupmO0yCH4jSSYKvoYBe Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit To whom it may concern, I am trying to submit a patch for driver Driver for Nuvoton NCT6687D eSIO chip under drivers/hwmon. This driver is confirmed to be working for motherboards series B550 and B650. Credits for creating this driver should go to Frederic BOLTZ https://github.com/Fred78290/nct6687d Attached is my patch --------------1FqwzupmO0yCH4jSSYKvoYBe Content-Type: text/x-patch; charset=UTF-8; name="driver_nct6687.patch" Content-Disposition: attachment; filename="driver_nct6687.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2Nv bmZpZwppbmRleCA1YjNiNzY0NzdiMGUuLjQ3YTFiY2MzNjVmMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTUx OCw2ICsxNTE4LDE2IEBAIGNvbmZpZyBTRU5TT1JTX05DVDY2ODMKIAkgIFRoaXMgZHJpdmVy IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAg d2lsbCBiZSBjYWxsZWQgbmN0NjY4My4KIAorY29uZmlnIFNFTlNPUlNfTkNUNjY4NworCXRy aXN0YXRlICJOdXZvdG9uIE5DVDY2ODdEIgorCWRlcGVuZHMgb24gIVBQQworCWhlbHAKKwkg IElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUg bW9uaXRvcmluZworCSAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgTnV2b3RvbiBOQ1Q2Njg3RCBl U0lPIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9k dWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbmN0NjY4Ny4KKwog Y29uZmlnIFNFTlNPUlNfTkNUNjc3NV9DT1JFCiAJdHJpc3RhdGUKIAlzZWxlY3QgUkVHTUFQ CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9N YWtlZmlsZQppbmRleCA4ODcxMmI1MDMxYzguLmZiMDhlMDBkYzkzMSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBA IC0xNTgsNiArMTU4LDcgQEAgb2JqLSQoQ09ORklHX1NFTlNPUlNfTUxYUkVHX0ZBTikgKz0g bWx4cmVnLWZhbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19NRU5GMjFCTUNfSFdNT04pICs9 IG1lbmYyMWJtY19od21vbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19NUjc1MjAzKQkrPSBt cjc1MjAzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY2ODMpCSs9IG5jdDY2ODMubwor b2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNjY4NykJKz0gbmN0NjY4Ny5vCiBvYmotJChDT05G SUdfU0VOU09SU19OQ1Q2Nzc1X0NPUkUpICs9IG5jdDY3NzUtY29yZS5vCiBuY3Q2Nzc1LW9i anMJCQk6PSBuY3Q2Nzc1LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY3 NzUpCSs9IG5jdDY3NzUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9uY3Q2Njg3LmMg Yi9kcml2ZXJzL2h3bW9uL25jdDY2ODcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmZlZDJjODY4ZmVjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv aHdtb24vbmN0NjY4Ny5jCkBAIC0wLDAgKzEsMTI3MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKy8qCisgKiBuY3Q2Njg3IC0gRHJpdmVyIGZv ciB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5IG9mCisgKgkgICAgICAg TnV2b3RvbiBOQ1Q2Njg3IFN1cGVyLUkvTyBjaGlwcworICoKKyAqIENvcHlyaWdodCAoQykg MjAyMCAgRnJlZGVyaWMgQm9sdHogPGZyZWRlcmljLmJvbHR6QGdtYWlsLmNvbT4KKyAqCisg KiBEZXJpdmVkIGZyb20gbmN0NjY4MyBkcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMyAg R3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICogCisgKiBJbnNwaXJlZCBv ZiBMaWJyZUhhcmR3YXJlTW9uaXRvcgorICogaHR0cHM6Ly9naXRodWIuY29tL0xpYnJlSGFy ZHdhcmVNb25pdG9yL0xpYnJlSGFyZHdhcmVNb25pdG9yCisgKiAKKyAqIFN1cHBvcnRzIHRo ZSBmb2xsb3dpbmcgY2hpcHM6CisgKgorICogQ2hpcCAgICAgICAjdm9sdGFnZSAgICNmYW4g ICAgI3B3bSAgICAjdGVtcCAgY2hpcCBJRAorICogbmN0NjY4MyAgICAxNCgxKSAgICAgIDgg ICAgICAgOCAgICAgICA3ICAgICAgMHhjNzMyICAocGFydGlhbCBzdXBwb3J0KQorICogbmN0 NjY4NmQgICAyMSgxKSAgICAgIDE2ICAgICAgOCAgICAgICAzMigxKSAgMHhkNDQwCisgKiBu Y3Q2Njg3ICAgIDE0KDEpICAgICAgOCAgICAgICA4ICAgICAgIDcgICAgICAweGQ1OTIKKyAq CisgKiBOb3RlczoKKyAqCSgxKSBUb3RhbCBudW1iZXIgb2Ygdm9sdGFnZSBhbmQgOSBkaXNw bGF5ZWQuCisgKi8KKy8vICNkZWZpbmUgREVCVUcgMQorI2RlZmluZSBwcl9mbXQoZm10KSBL QlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVk ZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGlu dXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBNSU4oYSxiKSAoKChhKTwoYikp PyhhKTooYikpCisjZGVmaW5lIE1BWChhLGIpICgoKGEpPihiKSk/KGEpOihiKSkKKworZW51 bSBraW5kcworeworCW5jdDY2ODMsCisJbmN0NjY4NiwKKwluY3Q2Njg3Cit9OworCitzdGF0 aWMgYm9vbCBmb3JjZTsKK3N0YXRpYyBib29sIG1hbnVhbDsKKworbW9kdWxlX3BhcmFtKGZv cmNlLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJTZXQgdG8gb25lIHRv IGVuYWJsZSBzdXBwb3J0IGZvciB1bmtub3duIHZlbmRvcnMiKTsKKworbW9kdWxlX3BhcmFt KG1hbnVhbCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1hbnVhbCwgIlNldCB2b2x0 YWdlIGlucHV0IGFuZCB2b2x0YWdlIGxhYmVsIGNvbmZpZ3VyZWQgd2l0aCBleHRlcm5hbCBz ZW5zb3JzIGZpbGUiKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5jdDY2ODdfZGV2 aWNlX25hbWVzW10gPSB7CisJIm5jdDY2ODMiLAorCSJuY3Q2Njg2IiwKKwkibmN0NjY4NyIs Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmN0NjY4N19jaGlwX25hbWVzW10g PSB7CisJIk5DVDY2ODNEIiwKKwkiTkNUNjY4NkQiLAorCSJOQ1Q2Njg3RCIsCit9OworCisj ZGVmaW5lIERSVk5BTUUgIm5jdDY2ODciCisKKy8qCisgKiBTdXBlci1JL08gY29uc3RhbnRz IGFuZCBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIE5DVDY2ODdfTERfQUNQSSAweDBhCisj ZGVmaW5lIE5DVDY2ODdfTERfSFdNIDB4MGIKKyNkZWZpbmUgTkNUNjY4N19MRF9WSUQgMHgw ZAorCisjZGVmaW5lIFNJT19SRUdfTERTRUwgMHgwNwkJIC8qIExvZ2ljYWwgZGV2aWNlIHNl bGVjdCAqLworI2RlZmluZSBTSU9fUkVHX0RFVklEIDB4MjAJCSAvKiBEZXZpY2UgSUQgKDIg Ynl0ZXMpICovCisjZGVmaW5lIFNJT19SRUdfREVWUkVWSVNJT04gMHgyMSAvKiBEZXZpY2Ug SUQgKDIgYnl0ZXMpICovCisjZGVmaW5lIFNJT19SRUdfRU5BQkxFIDB4MzAJCSAvKiBMb2dp Y2FsIGRldmljZSBlbmFibGUgKi8KKyNkZWZpbmUgU0lPX1JFR19BRERSIDB4NjAJCSAvKiBM b2dpY2FsIGRldmljZSBhZGRyZXNzICgyIGJ5dGVzKSAqLworCisjZGVmaW5lIFNJT19OQ1Q2 NjgzRF9JRCAweGM3MzIKKyNkZWZpbmUgU0lPX05DVDY2ODZfSUQgMHhkNDQwCisjZGVmaW5l IFNJT19OQ1Q2Njg2RF9JRCAweGQ0NDEKKyNkZWZpbmUgU0lPX05DVDY2ODdfSUQgMHhkNDUx IC8vIDB4ZDU5MgorI2RlZmluZSBTSU9fTkNUNjY4N0RfSUQgMHhkNTkyCisKK3N0YXRpYyBp bmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IGlvcmVnLCBpbnQgcmVnLCBpbnQgdmFsKQor eworCW91dGIocmVnLCBpb3JlZyk7CisJb3V0Yih2YWwsIGlvcmVnICsgMSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IHN1cGVyaW9faW5iKGludCBpb3JlZywgaW50IHJlZykKK3sKKwlv dXRiKHJlZywgaW9yZWcpOworCisJcmV0dXJuIGluYihpb3JlZyArIDEpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgc3VwZXJpb19zZWxlY3QoaW50IGlvcmVnLCBpbnQgbGQpCit7CisJ b3V0YihTSU9fUkVHX0xEU0VMLCBpb3JlZyk7CisJb3V0YihsZCwgaW9yZWcgKyAxKTsKK30K Kworc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19lbnRlcihpbnQgaW9yZWcpCit7CisJLyoK KwkgKiBUcnkgdG8gcmVzZXJ2ZSA8aW9yZWc+IGFuZCA8aW9yZWcgKyAxPiBmb3IgZXhjbHVz aXZlIGFjY2Vzcy4KKwkgKi8KKwlpZiAoIXJlcXVlc3RfbXV4ZWRfcmVnaW9uKGlvcmVnLCAy LCBEUlZOQU1FKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW91dGIoMHg4NywgaW9yZWcpOwor CW91dGIoMHg4NywgaW9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBzdXBlcmlvX2V4aXQoaW50IGlvcmVnKQoreworCW91dGIoMHhhYSwgaW9yZWcpOwor CW91dGIoMHgwMiwgaW9yZWcpOworCW91dGIoMHgwMiwgaW9yZWcgKyAxKTsKKworCXJlbGVh c2VfcmVnaW9uKGlvcmVnLCAyKTsKK30KKworLyoKKyAqIElTQSBjb25zdGFudHMKKyAqLwor CisjZGVmaW5lIElPUkVHSU9OX09GRlNFVCAwIC8qIFVzZSBFQyBwb3J0IDEgKi8KKyNkZWZp bmUgSU9SRUdJT05fTEVOR1RIIDQKKworLyogQ29tbW9uIGFuZCBOQ1Q2Njg3IHNwZWNpZmlj IGRhdGEgKi8KKworI2RlZmluZSBOQ1Q2Njg3X05VTV9SRUdfVk9MVEFHRSAoc2l6ZW9mKG5j dDY2ODdfdm9sdGFnZV9kZWZpbml0aW9uKSAvIHNpemVvZihzdHJ1Y3Qgdm9sdGFnZV9yZWcp KQorI2RlZmluZSBOQ1Q2Njg3X05VTV9SRUdfVEVNUCA3CisjZGVmaW5lIE5DVDY2ODdfTlVN X1JFR19GQU4gOAorI2RlZmluZSBOQ1Q2Njg3X05VTV9SRUdfUFdNIDgKKworI2RlZmluZSBO Q1Q2Njg3X1JFR19URU1QKHgpICgweDEwMCArICh4KSoyKQorI2RlZmluZSBOQ1Q2Njg3X1JF R19WT0xUQUdFKHgpICgweDEyMCArICh4KSoyKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19GQU5f UlBNKHgpICgweDE0MCArICh4KSoyKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19QV00oeCkgKDB4 MTYwICsgKHgpKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19QV01fV1JJVEUoeCkgKDB4YTI4ICsg KHgpKQorCisjZGVmaW5lIE5DVDY2ODdfSFdNX0NGRyAweDE4MAorCisjZGVmaW5lIE5DVDY2 ODdfUkVHX01PTl9DRkcoeCkgKDB4MWEwICsgKHgpKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19G QU5JTl9DRkcoeCkgKDB4QTAwICsgKHgpKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19GQU5PVVRf Q0ZHKHgpICgweDFkMCArICh4KSkKKworI2RlZmluZSBOQ1Q2Njg3X1JFR19URU1QX0hZU1Qo eCkgKDB4MzMwICsgKHgpKQkvKiA4IGJpdCAqLworI2RlZmluZSBOQ1Q2Njg3X1JFR19URU1Q X01BWCh4KSAoMHgzNTAgKyAoeCkpCS8qIDggYml0ICovCisjZGVmaW5lIE5DVDY2ODdfUkVH X01PTl9ISUdIKHgpICgweDM3MCArICh4KSoyKSAvKiA4IGJpdCAqLworI2RlZmluZSBOQ1Q2 Njg3X1JFR19NT05fTE9XKHgpICgweDM3MSArICh4KSoyKQkvKiA4IGJpdCAqLworCisjZGVm aW5lIE5DVDY2ODdfUkVHX0ZBTl9NSU4oeCkgKDB4M2I4ICsgKHgpKjIpIC8qIDE2IGJpdCAq LworCisjZGVmaW5lIE5DVDY2ODdfUkVHX0ZBTl9DVFJMX01PREUoeCkgMHhBMDAKKyNkZWZp bmUgTkNUNjY4N19SRUdfRkFOX1BXTV9DT01NQU5EKHgpIDB4QTAxCisjZGVmaW5lIE5DVDY2 ODdfRkFOX0NGR19SRVEgMHg4MAorI2RlZmluZSBOQ1Q2Njg3X0ZBTl9DRkdfRE9ORSAweDQw CisKKyNkZWZpbmUgTkNUNjY4N19SRUdfQlVJTERfWUVBUiAweDYwNAorI2RlZmluZSBOQ1Q2 Njg3X1JFR19CVUlMRF9NT05USCAweDYwNQorI2RlZmluZSBOQ1Q2Njg3X1JFR19CVUlMRF9E QVkgMHg2MDYKKyNkZWZpbmUgTkNUNjY4N19SRUdfU0VSSUFMIDB4NjA3CisjZGVmaW5lIE5D VDY2ODdfUkVHX1ZFUlNJT05fSEkgMHg2MDgKKyNkZWZpbmUgTkNUNjY4N19SRUdfVkVSU0lP Tl9MTyAweDYwOQorCisjZGVmaW5lIE5DVDY2ODdfUkVHX0NSX0NBU0VPUEVOIDB4ZTgKKyNk ZWZpbmUgTkNUNjY4N19DUl9DQVNFT1BFTl9NQVNLICgxIDw8IDcpCisKKyNkZWZpbmUgTkNU NjY4N19SRUdfQ1JfQkVFUCAweGUwCisjZGVmaW5lIE5DVDY2ODdfQ1JfQkVFUF9NQVNLICgx IDw8IDYpCisKKyNkZWZpbmUgRUNfU1BBQ0VfUEFHRV9SRUdJU1RFUl9PRkZTRVQgMHgwNAor I2RlZmluZSBFQ19TUEFDRV9JTkRFWF9SRUdJU1RFUl9PRkZTRVQgMHgwNQorI2RlZmluZSBF Q19TUEFDRV9EQVRBX1JFR0lTVEVSX09GRlNFVCAweDA2CisjZGVmaW5lIEVDX1NQQUNFX1BB R0VfU0VMRUNUIDB4RkYKKworc3RydWN0IHZvbHRhZ2VfcmVnCit7CisJdTE2IHJlZzsKKwl1 MTYgbXVsdGlwbGllcjsKKwljb25zdCBjaGFyICpsYWJlbDsKK307CisKK3N0YXRpYyBzdHJ1 Y3Qgdm9sdGFnZV9yZWcgbmN0NjY4N192b2x0YWdlX2RlZmluaXRpb25bXSA9IHsKKwkvLyAr MTJWCisJeworCQkucmVnID0gMCwKKwkJLm11bHRpcGxpZXIgPSAxMiwKKwkJLmxhYmVsID0g IisxMlYiLAorCX0sCisJLy8gKyA1VgorCXsKKwkJLnJlZyA9IDEsCisJCS5tdWx0aXBsaWVy ID0gNSwKKwkJLmxhYmVsID0gIis1ViIsCisJfSwKKwkvLyArMy4zVgorCXsKKwkJLnJlZyA9 IDExLAorCQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICIrMy4zViIsCisJfSwKKwkv LyBDUFUgU09DCisJeworCQkucmVnID0gMiwKKwkJLm11bHRpcGxpZXIgPSAxLAorCQkubGFi ZWwgPSAiQ1BVIFNvYyIsCisJfSwKKwkvLyBDUFUgVmNvcmUKKwl7CisJCS5yZWcgPSA0LAor CQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICJDUFUgVmNvcmUiLAorCX0sCisJLy8g Q1BVIDFQOAorCXsKKwkJLnJlZyA9IDksCisJCS5tdWx0aXBsaWVyID0gMSwKKwkJLmxhYmVs ID0gIkNQVSAxUDgiLAorCX0sCisJLy8gQ1BVIFZERFAKKwl7CisJCS5yZWcgPSAxMCwKKwkJ Lm11bHRpcGxpZXIgPSAxLAorCQkubGFiZWwgPSAiQ1BVIFZERFAiLAorCX0sCisJLy8gRFJB TQorCXsKKwkJLnJlZyA9IDMsCisJCS5tdWx0aXBsaWVyID0gMiwKKwkJLmxhYmVsID0gIkRS QU0iLAorCX0sCisJLy8gQ2hpcHNldAorCXsKKwkJLnJlZyA9IDUsCisJCS5tdWx0aXBsaWVy ID0gMSwKKwkJLmxhYmVsID0gIkNoaXBzZXQiLAorCX0sCisKKwkvLyBDUFUgU0EKKwl7CisJ CS5yZWcgPSA2LAorCQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICJDUFUgU0EiLAor CX0sCisJLy8gVm9sdGFnZSAjMgorCXsKKwkJLnJlZyA9IDcsCisJCS5tdWx0aXBsaWVyID0g MSwKKwkJLmxhYmVsID0gIlZvbHRhZ2UgIzIiLAorCX0sCisJLy8gQVZDQzMKKwl7CisJCS5y ZWcgPSA4LAorCQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICJBVkNDMyIsCisJfSwK KwkvLyBBVlNCCisJeworCQkucmVnID0gMTIsCisJCS5tdWx0aXBsaWVyID0gMSwKKwkJLmxh YmVsID0gIkFWU0IiLAorCX0sCisJLy8gVkJBVAorCXsKKwkJLnJlZyA9IDEzLAorCQkubXVs dGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICJWQmF0IiwKKwl9LAorCit9OworCitzdGF0aWMg Y29uc3QgY2hhciAqY29uc3QgbmN0NjY4N190ZW1wX2xhYmVsW10gPSB7CisJIkNQVSIsCisJ IlN5c3RlbSIsCisJIlZSTSBNT1MiLAorCSJQQ0giLAorCSJDUFUgU29ja2V0IiwKKwkiUENJ ZSB4MSIsCisJIk0yXzEiLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29u c3QgbmN0NjY4N19mYW5fbGFiZWxbXSA9IHsKKwkiQ1BVIEZhbiIsCisJIlB1bXAgRmFuIiwK KwkiU3lzdGVtIEZhbiAjMSIsCisJIlN5c3RlbSBGYW4gIzIiLAorCSJTeXN0ZW0gRmFuICMz IiwKKwkiU3lzdGVtIEZhbiAjNCIsCisJIlN5c3RlbSBGYW4gIzUiLAorCSJTeXN0ZW0gRmFu ICM2IiwKKwlOVUxMLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IG5jdDY2ODdfZGF0YQorewor CWludCBhZGRyOwkvKiBJTyBiYXNlIG9mIEVDIHNwYWNlICovCisJaW50IHNpb3JlZzsgLyog U0lPIHJlZ2lzdGVyICovCisJZW51bSBraW5kcyBraW5kOworCisJc3RydWN0IGRldmljZSAq aHdtb25fZGV2OworCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3Vwc1s2XTsK KworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsJLyogdXNlZCB0byBwcm90ZWN0IHNlbnNv ciB1cGRhdGVzICovCisJYm9vbCB2YWxpZDsJCQkJCS8qIHRydWUgaWYgZm9sbG93aW5nIGZp ZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogSW4g amlmZmllcyAqLworCisJLyogVm9sdGFnZSB2YWx1ZXMgKi8KKwlzMTYgdm9sdGFnZVszXVtO Q1Q2Njg3X05VTV9SRUdfVk9MVEFHRV07IC8vIDAgPSBjdXJyZW50IDEgPSBtaW4gMiA9IG1h eAorCisJLyogVGVtcGVyYXR1cmUgdmFsdWVzICovCisJczMyIHRlbXBlcmF0dXJlWzNdW05D VDY2ODdfTlVNX1JFR19URU1QXTsgLy8gMCA9IGN1cnJlbnQgMSA9IG1pbiAyID0gbWF4CisK KwkvKiBGYW4gYXR0cmlidXRlIHZhbHVlcyAqLworCXUxNiBycG1bM11bTkNUNjY4N19OVU1f UkVHX0ZBTl07IC8vIDAgPSBjdXJyZW50IDEgPSBtaW4gMiA9IG1heAorCXU4IF9pbml0aWFs RmFuQ29udHJvbE1vZGVbTkNUNjY4N19OVU1fUkVHX0ZBTl07CisJdTggX2luaXRpYWxGYW5Q d21Db21tYW5kW05DVDY2ODdfTlVNX1JFR19GQU5dOworCWJvb2wgX3Jlc3RvcmVEZWZhdWx0 RmFuQ29udHJvbFJlcXVpcmVkW05DVDY2ODdfTlVNX1JFR19GQU5dOworCisJdTggcHdtW05D VDY2ODdfTlVNX1JFR19QV01dOworCisJLyogUmVtZW1iZXIgZXh0cmEgcmVnaXN0ZXIgdmFs dWVzIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KKwl1OCBod21fY2ZnOworfTsKKworc3RydWN0 IG5jdDY2ODdfc2lvX2RhdGEKK3sKKwlpbnQgc2lvcmVnOworCWVudW0ga2luZHMga2luZDsK K307CisKK3N0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlCit7CisJc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CisJdW5pb24KKwl7CisJCXN0cnVjdAorCQl7CisJCQl1 OCBucjsKKwkJCXU4IGluZGV4OworCQl9IHM7CisJCWludCBpbmRleDsKKwl9IHU7CisJYm9v bCBzMjsgLyogdHJ1ZSBpZiBib3RoIGluZGV4IGFuZCBuciBhcmUgdXNlZCAqLworfTsKKwor c3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cl91Cit7CisJdW5pb24KKwl7CisJCXN0cnVjdCBz ZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhMTsKKwkJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0 cmlidXRlXzIgYTI7CisJfSB1OworCWNoYXIgbmFtZVszMl07Cit9OworCisjZGVmaW5lIF9f VEVNUExBVEVfQVRUUihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSBcCisJeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ CS5hdHRyID0gey5uYW1lID0gX3RlbXBsYXRlLCAubW9kZSA9IF9tb2RlfSwgICAgICBcCisJ CS5zaG93ID0gX3Nob3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ CS5zdG9yZSA9IF9zdG9yZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ fQorCisjZGVmaW5lIFNFTlNPUl9ERVZJQ0VfVEVNUExBVEUoX3RlbXBsYXRlLCBfbW9kZSwg X3Nob3csIF9zdG9yZSwgX2luZGV4KSBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5kZXZfYXR0 ciA9IF9fVEVNUExBVEVfQVRUUihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSwg ICBcCisJCS51LmluZGV4ID0gX2luZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisJCS5zMiA9IGZhbHNlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfQorCisjZGVmaW5lIFNFTlNP Ul9ERVZJQ0VfVEVNUExBVEVfMihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCAg ICAgXAorCQkJCQkJCQkgX25yLCBfaW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgIFwK Kwl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJCS5kZXZfYXR0ciA9IF9fVEVNUExBVEVfQVRUUihfdGVtcGxh dGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSwgXAorCQkudS5zLmluZGV4ID0gX2luZGV4LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnUucy5uciA9 IF9uciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisJCS5zMiA9IHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorCX0KKworI2RlZmluZSBTRU5TT1JfVEVNUExBVEUoX25hbWUsIF90 ZW1wbGF0ZSwgX21vZGUsIF9zaG93LCBfc3RvcmUsIF9pbmRleCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdGF0aWMgc3Ry dWN0IHNlbnNvcl9kZXZpY2VfdGVtcGxhdGUgc2Vuc29yX2Rldl90ZW1wbGF0ZV8jI19uYW1l ID0gU0VOU09SX0RFVklDRV9URU1QTEFURShfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0 b3JlLCBcCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgX2luZGV4KQorCisjZGVmaW5lIFNF TlNPUl9URU1QTEFURV8yKF9uYW1lLCBfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3Jl LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisJCQkJCQkgIF9uciwgX2luZGV4KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisJc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBs YXRlIHNlbnNvcl9kZXZfdGVtcGxhdGVfIyNfbmFtZSA9IFNFTlNPUl9ERVZJQ0VfVEVNUExB VEVfMihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCBcCisJCQkJCQkJCQkJCQkJ CQkJCQkJCQkJCQlfbnIsIF9pbmRleCkKKworc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91 cAoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICoqdGVtcGxhdGVzOworCXVt b2RlX3QgKCppc192aXNpYmxlKShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRl ICosIGludCk7CisJaW50IGJhc2U7Cit9OworCitzdGF0aWMgdm9pZCBuY3Q2Njg3X3NhdmVf ZmFuX2NvbnRyb2woc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSwgaW50IGluZGV4KTsKKwor c3RhdGljIGNvbnN0IGNoYXIqIG5jdDY2ODdfdm9sdGFnZV9sYWJlbChjaGFyKiBidWYsIGlu dCBpbmRleCkKK3sKKwlpZiAobWFudWFsKQorCQlzcHJpbnRmKGJ1ZiwgImluJWQiLCBpbmRl eCk7CisJZWxzZQorCQlzdHJjcHkoYnVmLCBuY3Q2Njg3X3ZvbHRhZ2VfZGVmaW5pdGlvbltp bmRleF0ubGFiZWwpOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgKm5jdDY2ODdfY3JlYXRlX2F0dHJfZ3JvdXAoc3RydWN0IGRldmljZSAq ZGV2LCBjb25zdCBzdHJ1Y3Qgc2Vuc29yX3RlbXBsYXRlX2dyb3VwICp0ZywgaW50IHJlcGVh dCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYTI7CisJc3RydWN0 IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX3Rl bXBsYXRlICoqdDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyX3UgKnN1OworCXN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyczsK KwlpbnQgaSwgaiwgY291bnQ7CisKKwlpZiAocmVwZWF0IDw9IDApCisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCisJdCA9IHRnLT50ZW1wbGF0ZXM7CisJZm9yIChjb3VudCA9IDA7 ICp0OyB0KyssIGNvdW50KyspCisJCTsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKworCWdyb3VwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpncm91cCksIEdGUF9LRVJORUwpOworCWlmIChncm91cCA9PSBOVUxMKQorCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKworCWF0dHJzID0gZGV2bV9rY2FsbG9jKGRldiwgcmVwZWF0 ICogY291bnQgKyAxLCBzaXplb2YoKmF0dHJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGF0dHJz ID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3UgPSBkZXZtX2t6 YWxsb2MoZGV2LCBhcnJheTNfc2l6ZShyZXBlYXQsIGNvdW50LCBzaXplb2YoKnN1KSksIEdG UF9LRVJORUwpOworCWlmIChzdSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKKworCWdyb3VwLT5hdHRycyA9IGF0dHJzOworCWdyb3VwLT5pc192aXNpYmxlID0gdGct PmlzX3Zpc2libGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVwZWF0OyBpKyspCisJeworCQl0 ID0gdGctPnRlbXBsYXRlczsKKworCQlmb3IgKGogPSAwOyAqdCAhPSBOVUxMOyBqKyspCisJ CXsKKwkJCXNucHJpbnRmKHN1LT5uYW1lLCBzaXplb2Yoc3UtPm5hbWUpLCAoKnQpLT5kZXZf YXR0ci5hdHRyLm5hbWUsIHRnLT5iYXNlICsgaSk7CisKKwkJCWlmICgoKnQpLT5zMikKKwkJ CXsKKwkJCQlhMiA9ICZzdS0+dS5hMjsKKwkJCQlzeXNmc19hdHRyX2luaXQoJmEyLT5kZXZf YXR0ci5hdHRyKTsKKwkJCQlhMi0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gc3UtPm5hbWU7CisJ CQkJYTItPm5yID0gKCp0KS0+dS5zLm5yICsgaTsKKwkJCQlhMi0+aW5kZXggPSAoKnQpLT51 LnMuaW5kZXg7CisJCQkJYTItPmRldl9hdHRyLmF0dHIubW9kZSA9ICgqdCktPmRldl9hdHRy LmF0dHIubW9kZTsKKwkJCQlhMi0+ZGV2X2F0dHIuc2hvdyA9ICgqdCktPmRldl9hdHRyLnNo b3c7CisJCQkJYTItPmRldl9hdHRyLnN0b3JlID0gKCp0KS0+ZGV2X2F0dHIuc3RvcmU7CisJ CQkJKmF0dHJzID0gJmEyLT5kZXZfYXR0ci5hdHRyOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCWEgPSAmc3UtPnUuYTE7CisJCQkJc3lzZnNfYXR0cl9pbml0KCZhLT5kZXZfYXR0ci5h dHRyKTsKKwkJCQlhLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBzdS0+bmFtZTsKKwkJCQlhLT5p bmRleCA9ICgqdCktPnUuaW5kZXggKyBpOworCQkJCWEtPmRldl9hdHRyLmF0dHIubW9kZSA9 ICgqdCktPmRldl9hdHRyLmF0dHIubW9kZTsKKwkJCQlhLT5kZXZfYXR0ci5zaG93ID0gKCp0 KS0+ZGV2X2F0dHIuc2hvdzsKKwkJCQlhLT5kZXZfYXR0ci5zdG9yZSA9ICgqdCktPmRldl9h dHRyLnN0b3JlOworCQkJCSphdHRycyA9ICZhLT5kZXZfYXR0ci5hdHRyOworCQkJfQorCQkJ YXR0cnMrKzsKKwkJCXN1Kys7CisJCQl0Kys7CisJCX0KKwl9CisKKwlyZXR1cm4gZ3JvdXA7 Cit9CisKK3N0YXRpYyB1MTYgbmN0NjY4N19yZWFkKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRh dGEsIHUxNiBhZGRyZXNzKQoreworCXU4IHBhZ2UgPSAodTgpKGFkZHJlc3MgPj4gOCk7CisJ dTggaW5kZXggPSAodTgpKGFkZHJlc3MgJiAweEZGKTsKKwlpbnQgcmVzOworCisJb3V0Yl9w KEVDX1NQQUNFX1BBR0VfU0VMRUNULCBkYXRhLT5hZGRyICsgRUNfU1BBQ0VfUEFHRV9SRUdJ U1RFUl9PRkZTRVQpOworCW91dGJfcChwYWdlLCBkYXRhLT5hZGRyICsgRUNfU1BBQ0VfUEFH RV9SRUdJU1RFUl9PRkZTRVQpOworCW91dGJfcChpbmRleCwgZGF0YS0+YWRkciArIEVDX1NQ QUNFX0lOREVYX1JFR0lTVEVSX09GRlNFVCk7CisKKwlyZXMgPSBpbmJfcChkYXRhLT5hZGRy ICsgRUNfU1BBQ0VfREFUQV9SRUdJU1RFUl9PRkZTRVQpOworCisJcmV0dXJuIHJlczsKK30K Kworc3RhdGljIHUxNiBuY3Q2Njg3X3JlYWQxNihzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRh LCB1MTYgcmVnKQoreworCXJldHVybiAobmN0NjY4N19yZWFkKGRhdGEsIHJlZykgPDwgOCkg fCBuY3Q2Njg3X3JlYWQoZGF0YSwgcmVnICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2 ODdfd3JpdGUoc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSwgdTE2IGFkZHJlc3MsIHUxNiB2 YWx1ZSkKK3sKKwl1OCBwYWdlID0gKHU4KShhZGRyZXNzID4+IDgpOworCXU4IGluZGV4ID0g KHU4KShhZGRyZXNzICYgMHhGRik7CisKKwlvdXRiX3AoRUNfU1BBQ0VfUEFHRV9TRUxFQ1Qs IGRhdGEtPmFkZHIgKyBFQ19TUEFDRV9QQUdFX1JFR0lTVEVSX09GRlNFVCk7CisJb3V0Yl9w KHBhZ2UsIGRhdGEtPmFkZHIgKyBFQ19TUEFDRV9QQUdFX1JFR0lTVEVSX09GRlNFVCk7CisJ b3V0Yl9wKGluZGV4LCBkYXRhLT5hZGRyICsgRUNfU1BBQ0VfSU5ERVhfUkVHSVNURVJfT0ZG U0VUKTsKKwlvdXRiX3AodmFsdWUsIGRhdGEtPmFkZHIgKyBFQ19TUEFDRV9EQVRBX1JFR0lT VEVSX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2ODdfdXBkYXRlX3RlbXBlcmF0 dXJlcyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQoreworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19URU1QOyBpKyspCisJeworCQlzMzIgdmFsdWUg PSAoY2hhciluY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfVEVNUChpKSk7CisJCXMz MiBoYWxmID0gKG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19URU1QKGkpICsgMSkg Pj4gNykgJiAweDE7CisJCXMzMiB0ZW1wZXJhdHVyZSA9ICh2YWx1ZSAqIDEwMDApICsgKDUw MCAqIGhhbGYpOworCisJCWRhdGEtPnRlbXBlcmF0dXJlWzBdW2ldID0gdGVtcGVyYXR1cmU7 CisJCWRhdGEtPnRlbXBlcmF0dXJlWzFdW2ldID0gTUlOKHRlbXBlcmF0dXJlLCBkYXRhLT50 ZW1wZXJhdHVyZVsxXVtpXSk7CisJCWRhdGEtPnRlbXBlcmF0dXJlWzJdW2ldID0gTUFYKHRl bXBlcmF0dXJlLCBkYXRhLT50ZW1wZXJhdHVyZVsyXVtpXSk7CisKKwkJcHJfZGVidWcoIm5j dDY2ODdfdXBkYXRlX3RlbXBlcmF0dXJlc1slZF1dLCBhZGRyPSUwNFgsIHZhbHVlPSVkLCBo YWxmPSVkLCB0ZW1wZXJhdHVyZT0lZFxuIiwgaSwgTkNUNjY4N19SRUdfVEVNUChpKSwgdmFs dWUsIGhhbGYsIHRlbXBlcmF0dXJlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2ODdf dXBkYXRlX3ZvbHRhZ2Uoc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaW5k ZXg7CisJY2hhciBidWZbMTI4XTsKKworCS8qIE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1p dHMgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOQ1Q2Njg3X05VTV9SRUdfVk9MVEFH RTsgaW5kZXgrKykKKwl7CisJCXMxNiByZWcgPSBtYW51YWwgPyBpbmRleCA6IG5jdDY2ODdf dm9sdGFnZV9kZWZpbml0aW9uW2luZGV4XS5yZWc7CisJCXMxNiBoaWdoID0gbmN0NjY4N19y ZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1ZPTFRBR0UocmVnKSkgKiAxNjsKKwkJczE2IGxvdyA9 ICgodTE2KW5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19WT0xUQUdFKHJlZykgKyAx KSkgPj4gNDsKKwkJczE2IHZhbHVlID0gbG93ICsgaGlnaDsKKwkJczE2IHZvbHRhZ2UgPSBt YW51YWwgPyB2YWx1ZSA6IHZhbHVlICogbmN0NjY4N192b2x0YWdlX2RlZmluaXRpb25baW5k ZXhdLm11bHRpcGxpZXI7CisKKwkJZGF0YS0+dm9sdGFnZVswXVtpbmRleF0gPSB2b2x0YWdl OworCQlkYXRhLT52b2x0YWdlWzFdW2luZGV4XSA9IE1JTih2b2x0YWdlLCBkYXRhLT52b2x0 YWdlWzFdW2luZGV4XSk7CisJCWRhdGEtPnZvbHRhZ2VbMl1baW5kZXhdID0gTUFYKHZvbHRh Z2UsIGRhdGEtPnZvbHRhZ2VbMl1baW5kZXhdKTsKKworCQlwcl9kZWJ1ZygibmN0NjY4N191 cGRhdGVfdm9sdGFnZVslZF0sICVzLCByZWc9JWQsIGFkZHI9MHglMDR4LCB2YWx1ZT0lZCwg dm9sdGFnZT0lZFxuIiwgaW5kZXgsIG5jdDY2ODdfdm9sdGFnZV9sYWJlbChidWYsIGluZGV4 KSwgcmVnLCBOQ1Q2Njg3X1JFR19WT0xUQUdFKGluZGV4KSwgdmFsdWUsIHZvbHRhZ2UpOwor CX0KKworCXByX2RlYnVnKCJuY3Q2Njg3X3VwZGF0ZV92b2x0YWdlXG4iKTsKK30KKworc3Rh dGljIHZvaWQgbmN0NjY4N191cGRhdGVfZmFucyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRh KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19GQU47 IGkrKykKKwl7CisJCXMxNiBybXAgPSBuY3Q2Njg3X3JlYWQxNihkYXRhLCBOQ1Q2Njg3X1JF R19GQU5fUlBNKGkpKTsKKworCQlkYXRhLT5ycG1bMF1baV0gPSBybXA7CisJCWRhdGEtPnJw bVsxXVtpXSA9IE1JTihybXAsIGRhdGEtPnJwbVsxXVtpXSk7CisJCWRhdGEtPnJwbVsyXVtp XSA9IE1BWChybXAsIGRhdGEtPnJwbVsyXVtpXSk7CisKKwkJcHJfZGVidWcoIm5jdDY2ODdf dXBkYXRlX2ZhbnNbJWRdLCBycG09JWQgbWluPSVkLCBtYXg9JWQiLCBpLCBybXAsIGRhdGEt PnJwbVsxXVtpXSwgZGF0YS0+cnBtWzJdW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg TkNUNjY4N19OVU1fUkVHX1BXTTsgaSsrKQorCXsKKwkJZGF0YS0+cHdtW2ldID0gbmN0NjY4 N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1BXTShpKSk7CisKKwkJcHJfZGVidWcoIm5jdDY2 ODdfdXBkYXRlX2ZhbnNbJWRdLCBwd209JWQiLCBpLCBkYXRhLT5wd21baV0pOworCX0KK30K Kworc3RhdGljIHN0cnVjdCBuY3Q2Njg3X2RhdGEgKm5jdDY2ODdfdXBkYXRlX2RldmljZShz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2sp OworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFop IHx8ICFkYXRhLT52YWxpZCkKKwl7CisJCS8qIE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1p dHMgKi8KKwkJbmN0NjY4N191cGRhdGVfdm9sdGFnZShkYXRhKTsKKworCQkvKiBNZWFzdXJl ZCB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cyAqLworCQluY3Q2Njg3X3VwZGF0ZV90ZW1wZXJh dHVyZXMoZGF0YSk7CisKKwkJLyogTWVhc3VyZWQgZmFuIHNwZWVkcyBhbmQgbGltaXRzICov CisJCW5jdDY2ODdfdXBkYXRlX2ZhbnMoZGF0YSk7CisKKwkJZGF0YS0+bGFzdF91cGRhdGVk ID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSB0cnVlOworCX0KKworCW11dGV4X3VubG9j aygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBT eXNmcyBjYWxsYmFjayBmdW5jdGlvbnMKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd192b2x0 YWdlX2xhYmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUg KnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCisJaWYgKG1hbnVhbCkKKwkJ cmV0dXJuIHNwcmludGYoYnVmLCAiaW4lZFxuIiwgc2F0dHItPmluZGV4KTsKKwllbHNlCisJ CXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuY3Q2Njg3X3ZvbHRhZ2VfZGVmaW5pdGlv bltzYXR0ci0+aW5kZXhdLmxhYmVsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd192b2x0 YWdlX3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVf MiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4 N19kYXRhICpkYXRhID0gbmN0NjY4N191cGRhdGVfZGV2aWNlKGRldik7CisKKwlyZXR1cm4g c3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dm9sdGFnZVtzYXR0ci0+aW5kZXhdW3NhdHRy LT5ucl0pOworfQorCitzdGF0aWMgdW1vZGVfdCBuY3Q2Njg3X3ZvbHRhZ2VfaXNfdmlzaWJs ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGlu ZGV4KQoreworCXByX2RlYnVnKCJuY3Q2Njg3X3ZvbHRhZ2VfaXNfdmlzaWJsZVslZF0sIGF0 dHI9MHglMDRYXG4iLCBpbmRleCwgYXR0ci0+bW9kZSk7CisJcmV0dXJuIGF0dHItPm1vZGU7 Cit9CisKK1NFTlNPUl9URU1QTEFURSh2b2x0YWdlX2xhYmVsLCAiaW4lZF9sYWJlbCIsIFNf SVJVR08sIHNob3dfdm9sdGFnZV9sYWJlbCwgTlVMTCwgMCk7CitTRU5TT1JfVEVNUExBVEVf Mih2b2x0YWdlX2lucHV0LCAiaW4lZF9pbnB1dCIsIFNfSVJVR08sIHNob3dfdm9sdGFnZV92 YWx1ZSwgTlVMTCwgMCwgMCk7CitTRU5TT1JfVEVNUExBVEVfMih2b2x0YWdlX21pbiwgImlu JWRfbWluIiwgU19JUlVHTywgc2hvd192b2x0YWdlX3ZhbHVlLCBOVUxMLCAwLCAxKTsKK1NF TlNPUl9URU1QTEFURV8yKHZvbHRhZ2VfbWF4LCAiaW4lZF9tYXgiLCBTX0lSVUdPLCBzaG93 X3ZvbHRhZ2VfdmFsdWUsIE5VTEwsIDAsIDIpOworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9k ZXZpY2VfdGVtcGxhdGUgKm5jdDY2ODdfYXR0cmlidXRlc192b2x0YWdlX3RlbXBsYXRlW10g PSB7CisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfdm9sdGFnZV9sYWJlbCwKKwkmc2Vuc29yX2Rl dl90ZW1wbGF0ZV92b2x0YWdlX2lucHV0LAorCSZzZW5zb3JfZGV2X3RlbXBsYXRlX3ZvbHRh Z2VfbWluLAorCSZzZW5zb3JfZGV2X3RlbXBsYXRlX3ZvbHRhZ2VfbWF4LAorCU5VTEwsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2Njg3 X3ZvbHRhZ2VfdGVtcGxhdGVfZ3JvdXAgPSB7CisJLnRlbXBsYXRlcyA9IG5jdDY2ODdfYXR0 cmlidXRlc192b2x0YWdlX3RlbXBsYXRlLAorCS5pc192aXNpYmxlID0gbmN0NjY4N192b2x0 YWdlX2lzX3Zpc2libGUsCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9sYWJlbChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRv X3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4i LCBuY3Q2Njg3X2Zhbl9sYWJlbFtzYXR0ci0+aW5kZXhdKTsKK30KKworc3RhdGljIHNzaXpl X3Qgc2hvd19mYW5fdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0 dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVj dCBuY3Q2Njg3X2RhdGEgKmRhdGEgPSBuY3Q2Njg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwor CXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5ycG1bc2F0dHItPmluZGV4XVtz YXR0ci0+bnJdKTsKK30KKworc3RhdGljIHVtb2RlX3QgbmN0NjY4N19mYW5faXNfdmlzaWJs ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGlu ZGV4KQoreworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitTRU5TT1JfVEVNUExBVEUoZmFu X2xhYmVsLCAiZmFuJWRfbGFiZWwiLCBTX0lSVUdPLCBzaG93X2Zhbl9sYWJlbCwgTlVMTCwg MCk7CitTRU5TT1JfVEVNUExBVEVfMihmYW5faW5wdXQsICJmYW4lZF9pbnB1dCIsIFNfSVJV R08sIHNob3dfZmFuX3ZhbHVlLCBOVUxMLCAwLCAwKTsKK1NFTlNPUl9URU1QTEFURV8yKGZh bl9taW4sICJmYW4lZF9taW4iLCBTX0lSVUdPLCBzaG93X2Zhbl92YWx1ZSwgTlVMTCwgMCwg MSk7CitTRU5TT1JfVEVNUExBVEVfMihmYW5fbWF4LCAiZmFuJWRfbWF4IiwgU19JUlVHTywg c2hvd19mYW5fdmFsdWUsIE5VTEwsIDAsIDIpOworCisvKgorICogbmN0NjY4N19mYW5faXNf dmlzaWJsZSB1c2VzIHRoZSBpbmRleCBpbnRvIHRoZSBmb2xsb3dpbmcgYXJyYXkKKyAqIHRv IGRldGVybWluZSBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBjcmVhdGVkIG9yIG5vdC4KKyAq IEFueSBjaGFuZ2UgaW4gb3JkZXIgb3IgY29udGVudCBtdXN0IGJlIG1hdGNoZWQuCisgKi8K K3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV90ZW1wbGF0ZSAqbmN0NjY4N19hdHRyaWJ1 dGVzX2Zhbl90ZW1wbGF0ZVtdID0geworCSZzZW5zb3JfZGV2X3RlbXBsYXRlX2Zhbl9sYWJl bCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9mYW5faW5wdXQsCisJJnNlbnNvcl9kZXZfdGVt cGxhdGVfZmFuX21pbiwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9mYW5fbWF4LAorCU5VTEws Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2 Njg3X2Zhbl90ZW1wbGF0ZV9ncm91cCA9IHsKKwkudGVtcGxhdGVzID0gbmN0NjY4N19hdHRy aWJ1dGVzX2Zhbl90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODdfZmFuX2lzX3Zp c2libGUsCisJLmJhc2UgPSAxLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wZXJh dHVyZV9sYWJlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRl ICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKworCXJldHVybiBzcHJpbnRm KGJ1ZiwgIiVzXG4iLCBuY3Q2Njg3X3RlbXBfbGFiZWxbc2F0dHItPmluZGV4XSk7Cit9CisK K3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmVfdmFsdWUoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0 cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZf YXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEgPSBuY3Q2Njg3X3Vw ZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRh LT50ZW1wZXJhdHVyZVtzYXR0ci0+aW5kZXhdW3NhdHRyLT5ucl0pOworfQorCitzdGF0aWMg dW1vZGVfdCBuY3Q2Njg3X3RlbXBfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwg c3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXJldHVybiBhdHRyLT5t b2RlOworfQorCitTRU5TT1JfVEVNUExBVEUodGVtcF9sYWJlbCwgInRlbXAlZF9sYWJlbCIs IFNfSVJVR08sIHNob3dfdGVtcGVyYXR1cmVfbGFiZWwsIE5VTEwsIDApOworU0VOU09SX1RF TVBMQVRFXzIodGVtcF9pbnB1dCwgInRlbXAlZF9pbnB1dCIsIFNfSVJVR08sIHNob3dfdGVt cGVyYXR1cmVfdmFsdWUsIE5VTEwsIDAsIDApOworU0VOU09SX1RFTVBMQVRFXzIodGVtcF9t aW4sICJ0ZW1wJWRfbWluIiwgU19JUlVHTywgc2hvd190ZW1wZXJhdHVyZV92YWx1ZSwgTlVM TCwgMCwgMSk7CitTRU5TT1JfVEVNUExBVEVfMih0ZW1wX21heCwgInRlbXAlZF9tYXgiLCBT X0lSVUdPLCBzaG93X3RlbXBlcmF0dXJlX3ZhbHVlLCBOVUxMLCAwLCAyKTsKKworLyoKKyAq IG5jdDY2ODdfdGVtcF9pc192aXNpYmxlIHVzZXMgdGhlIGluZGV4IGludG8gdGhlIGZvbGxv d2luZyBhcnJheQorICogdG8gZGV0ZXJtaW5lIGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGNy ZWF0ZWQgb3Igbm90LgorICogQW55IGNoYW5nZSBpbiBvcmRlciBvciBjb250ZW50IG11c3Qg YmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRl ICpuY3Q2Njg3X2F0dHJpYnV0ZXNfdGVtcF90ZW1wbGF0ZVtdID0geworCSZzZW5zb3JfZGV2 X3RlbXBsYXRlX3RlbXBfaW5wdXQsCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfdGVtcF9sYWJl bCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV90ZW1wX21pbiwKKwkmc2Vuc29yX2Rldl90ZW1w bGF0ZV90ZW1wX21heCwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5z b3JfdGVtcGxhdGVfZ3JvdXAgbmN0NjY4N190ZW1wX3RlbXBsYXRlX2dyb3VwID0geworCS50 ZW1wbGF0ZXMgPSBuY3Q2Njg3X2F0dHJpYnV0ZXNfdGVtcF90ZW1wbGF0ZSwKKwkuaXNfdmlz aWJsZSA9IG5jdDY2ODdfdGVtcF9pc192aXNpYmxlLAorCS5iYXNlID0gMSwKK307CisKK3N0 YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmN0NjY4N19kYXRh ICpkYXRhID0gbmN0NjY4N191cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9k ZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7 CisJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAi JWRcbiIsIGRhdGEtPnB3bVtpbmRleF0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9w d20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwg Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZp Y2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJ c3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlu dCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1MTYgbW9k ZTsKKwl1OCBiaXRNYXNrOworCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIHx8IHZh bCA+IDI1NSB8fCBpbmRleCA+PSBOQ1Q2Njg3X05VTV9SRUdfRkFOKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCW5jdDY2ODdf c2F2ZV9mYW5fY29udHJvbChkYXRhLCBpbmRleCk7CisKKwltb2RlID0gbmN0NjY4N19yZWFk KGRhdGEsIE5DVDY2ODdfUkVHX0ZBTl9DVFJMX01PREUoaW5kZXgpKTsKKwliaXRNYXNrID0g KHU4KSgweDAxIDw8IGluZGV4KTsKKworCW1vZGUgPSAodTgpKG1vZGUgfCBiaXRNYXNrKTsK KwluY3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2ODdfUkVHX0ZBTl9DVFJMX01PREUoaW5kZXgp LCBtb2RlKTsKKworCW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19SRUdfRkFOX1BXTV9D T01NQU5EKGluZGV4KSwgTkNUNjY4N19GQU5fQ0ZHX1JFUSk7CisJbXNsZWVwKDUwKTsKKwlu Y3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2ODdfUkVHX1BXTV9XUklURShpbmRleCksIHZhbCk7 CisJbmN0NjY4N193cml0ZShkYXRhLCBOQ1Q2Njg3X1JFR19GQU5fUFdNX0NPTU1BTkQoaW5k ZXgpLCBOQ1Q2Njg3X0ZBTl9DRkdfRE9ORSk7CisJbXNsZWVwKDUwKTsKKworCW11dGV4X3Vu bG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitTRU5T T1JfVEVNUExBVEUocHdtLCAicHdtJWQiLCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdt LCAwKTsKKworc3RhdGljIHZvaWQgbmN0NjY4N19zYXZlX2Zhbl9jb250cm9sKHN0cnVjdCBu Y3Q2Njg3X2RhdGEgKmRhdGEsIGludCBpbmRleCkKK3sKKwlpZiAoZGF0YS0+X3Jlc3RvcmVE ZWZhdWx0RmFuQ29udHJvbFJlcXVpcmVkW2luZGV4XSA9PSBmYWxzZSkKKwl7CisJCXUxNiBy ZWcgPSBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfRkFOX0NUUkxfTU9ERShpbmRl eCkpOworCQl1MTYgYml0TWFzayA9IDB4MDEgPDwgaW5kZXg7CisJCXU4IHB3bSA9IG5jdDY2 ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19GQU5fUFdNX0NPTU1BTkQoaW5kZXgpKTsKKwor CQlkYXRhLT5faW5pdGlhbEZhbkNvbnRyb2xNb2RlW2luZGV4XSA9ICh1OCkocmVnICYgYml0 TWFzayk7CisJCWRhdGEtPl9pbml0aWFsRmFuUHdtQ29tbWFuZFtpbmRleF0gPSBwd207CisK KwkJZGF0YS0+X3Jlc3RvcmVEZWZhdWx0RmFuQ29udHJvbFJlcXVpcmVkW2luZGV4XSA9IHRy dWU7CisJfQorfQorCitzdGF0aWMgdm9pZCBuY3Q2Njg3X3Jlc3RvcmVfZmFuX2NvbnRyb2wo c3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSwgaW50IGluZGV4KQoreworCWlmIChkYXRhLT5f cmVzdG9yZURlZmF1bHRGYW5Db250cm9sUmVxdWlyZWRbaW5kZXhdKQorCXsKKwkJdTggbW9k ZSA9IG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19GQU5fQ1RSTF9NT0RFKGluZGV4 KSk7CisJCW1vZGUgPSAodTgpKG1vZGUgJiB+ZGF0YS0+X2luaXRpYWxGYW5Db250cm9sTW9k ZVtpbmRleF0pOworCisJCW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19SRUdfRkFOX0NU UkxfTU9ERShpbmRleCksIG1vZGUpOworCisJCW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4 N19SRUdfRkFOX1BXTV9DT01NQU5EKGluZGV4KSwgTkNUNjY4N19GQU5fQ0ZHX1JFUSk7CisJ CW1zbGVlcCg1MCk7CisJCW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19SRUdfUFdNX1dS SVRFKGluZGV4KSwgZGF0YS0+X2luaXRpYWxGYW5Qd21Db21tYW5kW2luZGV4XSk7CisJCW5j dDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19SRUdfRkFOX1BXTV9DT01NQU5EKGluZGV4KSwg TkNUNjY4N19GQU5fQ0ZHX0RPTkUpOworCQltc2xlZXAoNTApOworCisJCWRhdGEtPl9yZXN0 b3JlRGVmYXVsdEZhbkNvbnRyb2xSZXF1aXJlZFtpbmRleF0gPSBmYWxzZTsKKworCQlwcl9k ZWJ1ZygibmN0NjY4N19yZXN0b3JlX2Zhbl9jb250cm9sWyVkXSwgYWRkcj0lMDRYLCBjdHJs PSUwNFgsIF9pbml0aWFsRmFuUHdtQ29tbWFuZD0lZFxuIiwgaW5kZXgsIE5DVDY2ODdfUkVH X0ZBTl9QV01fQ09NTUFORChpbmRleCksIE5DVDY2ODdfUkVHX1BXTV9XUklURShpbmRleCks IGRhdGEtPl9pbml0aWFsRmFuUHdtQ29tbWFuZFtpbmRleF0pOworCX0KK30KKworc3RhdGlj IHVtb2RlX3QgbmN0NjY4N19wd21faXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwg c3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXJldHVybiBhdHRyLT5t b2RlIHwgU19JV1VTUjsKK30KKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBs YXRlICpuY3Q2Njg3X2F0dHJpYnV0ZXNfcHdtX3RlbXBsYXRlW10gPSB7CisJJnNlbnNvcl9k ZXZfdGVtcGxhdGVfcHdtLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNl bnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2Njg3X3B3bV90ZW1wbGF0ZV9ncm91cCA9IHsKKwku dGVtcGxhdGVzID0gbmN0NjY4N19hdHRyaWJ1dGVzX3B3bV90ZW1wbGF0ZSwKKwkuaXNfdmlz aWJsZSA9IG5jdDY2ODdfcHdtX2lzX3Zpc2libGUsCisJLmJhc2UgPSAxLAorfTsKKworLyog R2V0IHRoZSBtb25pdG9yaW5nIGZ1bmN0aW9ucyBzdGFydGVkICovCitzdGF0aWMgaW5saW5l IHZvaWQgbmN0NjY4N19pbml0X2RldmljZShzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQor eworCXU4IHRtcDsKKworCXByX2RlYnVnKCJuY3Q2Njg3X2luaXRfZGV2aWNlXG4iKTsKKwor CS8qIFN0YXJ0IGhhcmR3YXJlIG1vbml0b3JpbmcgaWYgbmVlZGVkICovCisJdG1wID0gbmN0 NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfSFdNX0NGRyk7CisJaWYgKCEodG1wICYgMHg4MCkp CisJeworCQlwcl9kZWJ1ZygibmN0NjY4N19pbml0X2RldmljZTogMHglMDR4XG4iLCB0bXAp OworCQluY3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2ODdfSFdNX0NGRywgdG1wIHwgMHg4MCk7 CisJfQorCisJLy8gZW5hYmxlIFNJTyB2b2x0YWdlCisJbmN0NjY4N193cml0ZShkYXRhLCAw eDFCQiwgMHg2MSk7CisJbmN0NjY4N193cml0ZShkYXRhLCAweDFCQywgMHg2Mik7CisJbmN0 NjY4N193cml0ZShkYXRhLCAweDFCRCwgMHg2Myk7CisJbmN0NjY4N193cml0ZShkYXRhLCAw eDFCRSwgMHg2NCk7CisJbmN0NjY4N193cml0ZShkYXRhLCAweDFCRiwgMHg2NSk7Cit9CisK Ky8qCisgKiBUaGVyZSBhcmUgYSB0b3RhbCBvZiA4IGZhbiBpbnB1dHMuCisgKi8KK3N0YXRp YyB2b2lkIG5jdDY2ODdfc2V0dXBfZmFucyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19GQU47IGkr KykKKwl7CisJCXUxNiByZWcgPSBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfRkFO X0NUUkxfTU9ERShpKSk7CisJCXUxNiBiaXRNYXNrID0gMHgwMSA8PCBpOworCQl1MTYgcnBt ID0gbmN0NjY4N19yZWFkMTYoZGF0YSwgTkNUNjY4N19SRUdfRkFOX1JQTShpKSk7CisKKwkJ ZGF0YS0+cnBtWzBdW2ldID0gcnBtOworCQlkYXRhLT5ycG1bMV1baV0gPSBycG07CisJCWRh dGEtPnJwbVsyXVtpXSA9IHJwbTsKKwkJZGF0YS0+X2luaXRpYWxGYW5Db250cm9sTW9kZVtp XSA9ICh1OCkocmVnICYgYml0TWFzayk7CisJCWRhdGEtPl9yZXN0b3JlRGVmYXVsdEZhbkNv bnRyb2xSZXF1aXJlZFtpXSA9IGZhbHNlOworCisJCXByX2RlYnVnKCJuY3Q2Njg3X3NldHVw X2ZhbnNbJWRdLCAlcyAtIGFkZHI9JTA0WCwgY3RybD0lMDRYLCBycG09JWQsIF9pbml0aWFs RmFuQ29udHJvbE1vZGU9JWRcbiIsIGksIG5jdDY2ODdfZmFuX2xhYmVsW2ldLCBOQ1Q2Njg3 X1JFR19GQU5fQ1RSTF9NT0RFKGkpLCByZWcsIHJwbSwgZGF0YS0+X2luaXRpYWxGYW5Db250 cm9sTW9kZVtpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuY3Q2Njg3X3NldHVwX3ZvbHRh Z2VzKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEpCit7CisJaW50IGluZGV4OworCWNoYXIg YnVmWzY0XTsKKworCS8qIE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1pdHMgKi8KKwlmb3Ig KGluZGV4ID0gMDsgaW5kZXggPCBOQ1Q2Njg3X05VTV9SRUdfVk9MVEFHRTsgaW5kZXgrKykK Kwl7CisJCXMxNiByZWcgPSBtYW51YWwgPyBpbmRleCA6IG5jdDY2ODdfdm9sdGFnZV9kZWZp bml0aW9uW2luZGV4XS5yZWc7CisJCXMxNiBoaWdoID0gbmN0NjY4N19yZWFkKGRhdGEsIE5D VDY2ODdfUkVHX1ZPTFRBR0UocmVnKSkgKiAxNjsKKwkJczE2IGxvdyA9ICgodTE2KW5jdDY2 ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19WT0xUQUdFKHJlZykgKyAxKSkgPj4gNDsKKwkJ czE2IHZhbHVlID0gbG93ICsgaGlnaDsKKwkJczE2IHZvbHRhZ2UgPSBtYW51YWwgPyB2YWx1 ZSA6IHZhbHVlICogbmN0NjY4N192b2x0YWdlX2RlZmluaXRpb25baW5kZXhdLm11bHRpcGxp ZXI7CisKKwkJZGF0YS0+dm9sdGFnZVswXVtpbmRleF0gPSB2b2x0YWdlOworCQlkYXRhLT52 b2x0YWdlWzFdW2luZGV4XSA9IHZvbHRhZ2U7CisJCWRhdGEtPnZvbHRhZ2VbMl1baW5kZXhd ID0gdm9sdGFnZTsKKworCQlwcl9kZWJ1ZygibmN0NjY4N19zZXR1cF92b2x0YWdlc1slZF0s ICVzLCBhZGRyPTB4JTA0eCwgdmFsdWU9JWQsIHZvbHRhZ2U9JWRcbiIsIGluZGV4LCBuY3Q2 Njg3X3ZvbHRhZ2VfbGFiZWwoYnVmLCBpbmRleCksIE5DVDY2ODdfUkVHX1ZPTFRBR0UoaW5k ZXgpLCB2YWx1ZSwgdm9sdGFnZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuY3Q2Njg3X3Nl dHVwX3RlbXBlcmF0dXJlcyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQoreworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19URU1QOyBpKyspCisJewor CQlzMzIgdmFsdWUgPSAoY2hhciluY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfVEVN UChpKSk7CisJCXMzMiBoYWxmID0gKG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19U RU1QKGkpICsgMSkgPj4gNykgJiAweDE7CisJCXMzMiB0ZW1wZXJhdHVyZSA9ICh2YWx1ZSAq IDEwMDApICsgKDUgKiBoYWxmKTsKKworCQlkYXRhLT50ZW1wZXJhdHVyZVswXVtpXSA9IHRl bXBlcmF0dXJlOworCQlkYXRhLT50ZW1wZXJhdHVyZVsxXVtpXSA9IHRlbXBlcmF0dXJlOwor CQlkYXRhLT50ZW1wZXJhdHVyZVsyXVtpXSA9IHRlbXBlcmF0dXJlOworCisJCXByX2RlYnVn KCJuY3Q2Njg3X3NldHVwX3RlbXBlcmF0dXJlc1slZF1dLCBhZGRyPSUwNFgsIHZhbHVlPSVk LCBoYWxmPSVkLCB0ZW1wZXJhdHVyZT0lZFxuIiwgaSwgTkNUNjY4N19SRUdfVEVNUChpKSwg dmFsdWUsIGhhbGYsIHRlbXBlcmF0dXJlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2 ODdfc2V0dXBfcHdtKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTkNUNjY4N19OVU1fUkVHX1BXTTsgaSsrKQorCXsKKwkJZGF0 YS0+X2luaXRpYWxGYW5Qd21Db21tYW5kW2ldID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2 ODdfUkVHX0ZBTl9QV01fQ09NTUFORChpKSk7CisJCWRhdGEtPnB3bVtpXSA9IG5jdDY2ODdf cmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19QV00oaSkpOworCisJCXByX2RlYnVnKCJuY3Q2Njg3 X3NldHVwX3B3bVslZF0sIGFkZHI9JTA0WCwgcHdtPSVkLCBfaW5pdGlhbEZhblB3bUNvbW1h bmQ9JWRcbiIsIGksIE5DVDY2ODdfUkVHX0ZBTl9QV01fQ09NTUFORChpKSwgZGF0YS0+cHdt W2ldLCBkYXRhLT5faW5pdGlhbEZhblB3bUNvbW1hbmRbaV0pOworCX0KK30KKworc3RhdGlj IGludCBuY3Q2Njg3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG5jdDY2ODdfZGF0 YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJbXV0ZXhfbG9j aygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVN X1JFR19GQU47IGkrKykKKwl7CisJCW5jdDY2ODdfcmVzdG9yZV9mYW5fY29udHJvbChkYXRh LCBpKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG5jdDY2ODdfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor CXN0cnVjdCBuY3Q2Njg3X3Npb19kYXRhICpzaW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0 YTsKKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgbmN0NjY4N19k YXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwlpbnQgZ3JvdXBzID0gMDsKKwljaGFyIGJ1aWxkWzE2XTsKKworCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAo IWRldm1fcmVxdWVzdF9yZWdpb24oZGV2LCByZXMtPnN0YXJ0LCBJT1JFR0lPTl9MRU5HVEgs IERSVk5BTUUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGF0YSA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZihzdHJ1Y3QgbmN0NjY4N19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk YXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmtpbmQgPSBzaW9fZGF0YS0+a2lu ZDsKKwlkYXRhLT5zaW9yZWcgPSBzaW9fZGF0YS0+c2lvcmVnOworCWRhdGEtPmFkZHIgPSBy ZXMtPnN0YXJ0OworCisJcHJfZGVidWcoIm5jdDY2ODdfcHJvYmUgYWRkcj0weCUwNFgsIHNp b3JlZz0weCUwNFhcbiIsIGRhdGEtPmFkZHIsIGRhdGEtPnNpb3JlZyk7CisKKwltdXRleF9p bml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBkYXRhKTsKKworCW5jdDY2ODdfaW5pdF9kZXZpY2UoZGF0YSk7CisJbmN0NjY4N19zZXR1 cF9mYW5zKGRhdGEpOworCW5jdDY2ODdfc2V0dXBfcHdtKGRhdGEpOworCW5jdDY2ODdfc2V0 dXBfdGVtcGVyYXR1cmVzKGRhdGEpOworCW5jdDY2ODdfc2V0dXBfdm9sdGFnZXMoZGF0YSk7 CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCisJZ3JvdXAgPSBuY3Q2Njg3X2Ny ZWF0ZV9hdHRyX2dyb3VwKGRldiwgJm5jdDY2ODdfcHdtX3RlbXBsYXRlX2dyb3VwLCBOQ1Q2 Njg3X05VTV9SRUdfRkFOKTsKKworCWlmIChJU19FUlIoZ3JvdXApKQorCQlyZXR1cm4gUFRS X0VSUihncm91cCk7CisKKwlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gZ3JvdXA7CisKKwln cm91cCA9IG5jdDY2ODdfY3JlYXRlX2F0dHJfZ3JvdXAoZGV2LCAmbmN0NjY4N192b2x0YWdl X3RlbXBsYXRlX2dyb3VwLCBOQ1Q2Njg3X05VTV9SRUdfVk9MVEFHRSk7CisKKwlpZiAoSVNf RVJSKGdyb3VwKSkKKwkJcmV0dXJuIFBUUl9FUlIoZ3JvdXApOworCisJZGF0YS0+Z3JvdXBz W2dyb3VwcysrXSA9IGdyb3VwOworCisJZ3JvdXAgPSBuY3Q2Njg3X2NyZWF0ZV9hdHRyX2dy b3VwKGRldiwgJm5jdDY2ODdfZmFuX3RlbXBsYXRlX2dyb3VwLCBOQ1Q2Njg3X05VTV9SRUdf RkFOKTsKKworCWlmIChJU19FUlIoZ3JvdXApKQorCQlyZXR1cm4gUFRSX0VSUihncm91cCk7 CisKKwlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gZ3JvdXA7CisKKwlncm91cCA9IG5jdDY2 ODdfY3JlYXRlX2F0dHJfZ3JvdXAoZGV2LCAmbmN0NjY4N190ZW1wX3RlbXBsYXRlX2dyb3Vw LCBOQ1Q2Njg3X05VTV9SRUdfVEVNUCk7CisKKwlpZiAoSVNfRVJSKGdyb3VwKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZ3JvdXApOworCisJZGF0YS0+Z3JvdXBzW2dyb3VwcysrXSA9IGdyb3Vw OworCisJc2NucHJpbnRmKGJ1aWxkLCBzaXplb2YoYnVpbGQpLCAiJTAyZC8lMDJkLyUwMmQi LCBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfQlVJTERfTU9OVEgpLCBuY3Q2Njg3 X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfQlVJTERfREFZKSwgbmN0NjY4N19yZWFkKGRhdGEs IE5DVDY2ODdfUkVHX0JVSUxEX1lFQVIpKTsKKworCWRldl9pbmZvKGRldiwgIiVzIEVDIGZp cm13YXJlIHZlcnNpb24gJWQuJWQgYnVpbGQgJXNcbiIsIG5jdDY2ODdfY2hpcF9uYW1lc1tk YXRhLT5raW5kXSwgbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1ZFUlNJT05fSEkp LCBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfVkVSU0lPTl9MTyksIGJ1aWxkKTsK KworCWh3bW9uX2RldiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBz KGRldiwgbmN0NjY4N19kZXZpY2VfbmFtZXNbZGF0YS0+a2luZF0sIGRhdGEsIGRhdGEtPmdy b3Vwcyk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0 YXRpYyBpbnQgbmN0NjY4N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs IHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhID0g bmN0NjY4N191cGRhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOworCisJbXV0ZXhfbG9jaygmZGF0 YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmh3bV9jZmcgPSBuY3Q2Njg3X3JlYWQoZGF0YSwg TkNUNjY4N19IV01fQ0ZHKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5jdDY2ODdfcmVzdW1lKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwluY3Q2Njg3X3dy aXRlKGRhdGEsIE5DVDY2ODdfSFdNX0NGRywgZGF0YS0+aHdtX2NmZyk7CisKKwkvKiBGb3Jj ZSByZS1yZWFkaW5nIGFsbCB2YWx1ZXMgKi8KKwlkYXRhLT52YWxpZCA9IGZhbHNlOworCW11 dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8v IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBuY3Q2Njg3X2Rldl9wbV9vcHMgPSB7 CisvLyAJLnN1c3BlbmQgPSBuY3Q2Njg3X3N1c3BlbmQsCisvLyAJLnJlc3VtZSA9IG5jdDY2 ODdfcmVzdW1lLAorLy8gCS5mcmVlemUgPSBuY3Q2Njg3X3N1c3BlbmQsCisvLyAJLnJlc3Rv cmUgPSBuY3Q2Njg3X3Jlc3VtZSwKKy8vIH07CisKKyNkZWZpbmUgTkNUNjY4N19ERVZfUE1f T1BTIE5VTEwKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmN0NjY4N19kcml2 ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZOQU1FLAorCQkucG0gPSBOQ1Q2 Njg3X0RFVl9QTV9PUFMsCisJfSwKKwkucHJvYmUgPSBuY3Q2Njg3X3Byb2JlLAorCS5yZW1v dmUgPSBuY3Q2Njg3X3JlbW92ZSwKKwkuc3VzcGVuZCA9IG5jdDY2ODdfc3VzcGVuZCwKKwku cmVzdW1lID0gbmN0NjY4N19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuY3Q2 Njg3X2ZpbmQoaW50IHNpb2FkZHIsIHN0cnVjdCBuY3Q2Njg3X3Npb19kYXRhICpzaW9fZGF0 YSkKK3sKKwl1MTYgYWRkcmVzczsKKwl1MTYgdmVyaWZ5OworCXUxNiB2YWw7CisJaW50IGVy cjsKKworCWVyciA9IHN1cGVyaW9fZW50ZXIoc2lvYWRkcik7CisJaWYgKGVycikKKwkJcmV0 dXJuIGVycjsKKworCXZhbCA9IChzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9fUkVHX0RFVklE KSA8PCA4KSB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfREVWUkVWSVNJT04pOwor CisJcHJfZGVidWcoImZvdW5kIGNoaXAgSUQ6IDB4JTA0eFxuIiwgdmFsKTsKKworCWlmICh2 YWwgPT0gU0lPX05DVDY2ODNEX0lEKSB7CisJCXNpb19kYXRhLT5raW5kID0gbmN0NjY4MzsK Kwl9IGVsc2UgaWYgKHZhbCA9PSBTSU9fTkNUNjY4Nl9JRCB8fCB2YWwgPT0gU0lPX05DVDY2 ODZEX0lEKSB7CisJCXNpb19kYXRhLT5raW5kID0gbmN0NjY4NjsKKwl9IGVsc2UgaWYgKHZh bCA9PSBTSU9fTkNUNjY4N19JRCB8fCB2YWwgPT0gU0lPX05DVDY2ODdEX0lEIHx8IGZvcmNl KQorCXsKKwkJc2lvX2RhdGEtPmtpbmQgPSBuY3Q2Njg3OworCX0KKwllbHNlCisJeworCQlp ZiAodmFsICE9IDB4ZmZmZikKKwkJCXByX2RlYnVnKCJ1bnN1cHBvcnRlZCBjaGlwIElEOiAw eCUwNHhcbiIsIHZhbCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBXZSBoYXZlIGEga25v d24gY2hpcCwgZmluZCB0aGUgSFdNIEkvTyBhZGRyZXNzICovCisJc3VwZXJpb19zZWxlY3Qo c2lvYWRkciwgTkNUNjY4N19MRF9IV00pOworCWFkZHJlc3MgPSAoc3VwZXJpb19pbmIoc2lv YWRkciwgU0lPX1JFR19BRERSKSA8PCA4KSB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19S RUdfQUREUiArIDEpOworCXNzbGVlcCgxKTsKKwl2ZXJpZnkgPSAoc3VwZXJpb19pbmIoc2lv YWRkciwgU0lPX1JFR19BRERSKSA8PCA4KSB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19S RUdfQUREUiArIDEpOworCisJaWYgKGFkZHJlc3MgPT0gMCB8fCBhZGRyZXNzICE9IHZlcmlm eSkKKwl7CisJCXByX2VycigiRUMgYmFzZSBJL08gcG9ydCB1bmNvbmZpZ3VyZWRcbiIpOwor CQlnb3RvIGZhaWw7CisJfQorCisJaWYgKChhZGRyZXNzICYgMHgwNykgPT0gMHgwNSkKKwkJ YWRkcmVzcyAmPSAweEZGRjg7CisKKwlpZiAoYWRkcmVzcyA8IDB4MTAwIHx8IChhZGRyZXNz ICYgMHhGMDA3KSAhPSAwKQorCXsKKwkJcHJfZXJyKCJFQyBJbnZhbGlkIGFkZHJlc3M6IDB4 JTA0WFxuIiwgYWRkcmVzcyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBY3RpdmF0ZSBs b2dpY2FsIGRldmljZSBpZiBuZWVkZWQgKi8KKwl2YWwgPSBzdXBlcmlvX2luYihzaW9hZGRy LCBTSU9fUkVHX0VOQUJMRSk7CisJaWYgKCEodmFsICYgMHgwMSkpCisJeworCQlwcl93YXJu KCJGb3JjaWJseSBlbmFibGluZyBFQyBhY2Nlc3MuIERhdGEgbWF5IGJlIHVudXNhYmxlLlxu Iik7CisJCXN1cGVyaW9fb3V0YihzaW9hZGRyLCBTSU9fUkVHX0VOQUJMRSwgdmFsIHwgMHgw MSk7CisJfQorCisJc3VwZXJpb19leGl0KHNpb2FkZHIpOworCXByX2luZm8oIkZvdW5kICVz IG9yIGNvbXBhdGlibGUgY2hpcCBhdCAweCUwNHg6MHglMDR4XG4iLCBuY3Q2Njg3X2NoaXBf bmFtZXNbc2lvX2RhdGEtPmtpbmRdLCBzaW9hZGRyLCBhZGRyZXNzKTsKKwlzaW9fZGF0YS0+ c2lvcmVnID0gc2lvYWRkcjsKKworCXJldHVybiBhZGRyZXNzOworCitmYWlsOgorCXN1cGVy aW9fZXhpdChzaW9hZGRyKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKKyAqIHdoZW4g U3VwZXItSS9PIGZ1bmN0aW9ucyBtb3ZlIHRvIGEgc2VwYXJhdGUgZmlsZSwgdGhlIFN1cGVy LUkvTworICogYnVzIHdpbGwgbWFuYWdlIHRoZSBsaWZldGltZSBvZiB0aGUgZGV2aWNlIGFu ZCB0aGlzIG1vZHVsZSB3aWxsIG9ubHkga2VlcAorICogdHJhY2sgb2YgdGhlIG5jdDY2ODcg ZHJpdmVyLiBCdXQgc2luY2Ugd2UgdXNlIHBsYXRmb3JtX2RldmljZV9hbGxvYygpLCB3ZQor ICogbXVzdCBrZWVwIHRyYWNrIG9mIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXZbMl07CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNf bmN0NjY4N19pbml0KHZvaWQpCit7CisJc3RydWN0IG5jdDY2ODdfc2lvX2RhdGEgc2lvX2Rh dGE7CisJaW50IHNpb2FkZHJbMl0gPSB7MHgyZSwgMHg0ZX07CisJc3RydWN0IHJlc291cmNl IHJlczsKKwlib29sIGZvdW5kID0gZmFsc2U7CisJaW50IGFkZHJlc3M7CisJaW50IGksIGVy cjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbmN0NjY4N19kcml2ZXIp OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIGluaXRpYWxpemUgc2lv X2RhdGEtPmtpbmQgYW5kIHNpb19kYXRhLT5zaW9yZWcuCisJICoKKwkgKiB3aGVuIFN1cGVy LUkvTyBmdW5jdGlvbnMgbW92ZSB0byBhIHNlcGFyYXRlIGZpbGUsIHRoZSBTdXBlci1JL08K KwkgKiBkcml2ZXIgd2lsbCBwcm9iZSAweDJlIGFuZCAweDRlIGFuZCBhdXRvLWRldGVjdCB0 aGUgcHJlc2VuY2Ugb2YgYQorCSAqIG5jdDY2ODcgaGFyZHdhcmUgbW9uaXRvciwgYW5kIGNh bGwgcHJvYmUoKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkZXYpOyBp KyspCisJeworCQlhZGRyZXNzID0gbmN0NjY4N19maW5kKHNpb2FkZHJbaV0sICZzaW9fZGF0 YSk7CisJCWlmIChhZGRyZXNzIDw9IDApCisJCQljb250aW51ZTsKKworCQlmb3VuZCA9IHRy dWU7CisKKwkJcGRldltpXSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBhZGRy ZXNzKTsKKwkJaWYgKCFwZGV2W2ldKQorCQl7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290 byBleGl0X2RldmljZV91bnJlZ2lzdGVyOworCQl9CisKKwkJZXJyID0gcGxhdGZvcm1fZGV2 aWNlX2FkZF9kYXRhKHBkZXZbaV0sICZzaW9fZGF0YSwgc2l6ZW9mKHN0cnVjdCBuY3Q2Njg3 X3Npb19kYXRhKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwor CQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworCisJCXJlcy5uYW1lID0gRFJWTkFN RTsKKwkJcmVzLnN0YXJ0ID0gYWRkcmVzcyArIElPUkVHSU9OX09GRlNFVDsKKwkJcmVzLmVu ZCA9IGFkZHJlc3MgKyBJT1JFR0lPTl9PRkZTRVQgKyBJT1JFR0lPTl9MRU5HVEggLSAxOwor CQlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJCWVyciA9IGFjcGlfY2hlY2tfcmVz b3VyY2VfY29uZmxpY3QoJnJlcyk7CisJCWlmIChlcnIpCisJCXsKKwkJCXBsYXRmb3JtX2Rl dmljZV9wdXQocGRldltpXSk7CisJCQlwZGV2W2ldID0gTlVMTDsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldltpXSwg JnJlcywgMSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKworCQkv KiBwbGF0Zm9ybV9kZXZpY2VfYWRkIGNhbGxzIHByb2JlKCkgKi8KKwkJZXJyID0gcGxhdGZv cm1fZGV2aWNlX2FkZChwZGV2W2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZp Y2VfcHV0OworCX0KKworCWlmICghZm91bmQpCisJeworCQllcnIgPSAtRU5PREVWOworCQln b3RvIGV4aXRfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2Vf cHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldltpXSk7CisKK2V4aXRfZGV2aWNlX3Vu cmVnaXN0ZXI6CisJd2hpbGUgKC0taSA+PSAwKQorCXsKKwkJaWYgKHBkZXZbaV0pCisJCQlw bGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2W2ldKTsKKwl9CisKK2V4aXRfdW5yZWdp c3RlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbmN0NjY4N19kcml2ZXIpOwor CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlbnNvcnNfbmN0NjY4 N19leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShwZGV2KTsgaSsrKQorCXsKKwkJaWYgKHBkZXZbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2Vf dW5yZWdpc3RlcihwZGV2W2ldKTsKKwl9CisKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rl cigmbmN0NjY4N19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJGcmVkZXJpYyBCb2x0 eiA8ZnJlZGVyaWMuYm9sdHpAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJE cml2ZXIgZm9yIE5DVDY2ODdEIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVs ZV9pbml0KHNlbnNvcnNfbmN0NjY4N19pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfbmN0 NjY4N19leGl0KTsK --------------1FqwzupmO0yCH4jSSYKvoYBe Content-Type: text/x-patch; charset=UTF-8; name="0001-Adding-driver-for-NCT6687D-Kernel-module.patch" Content-Disposition: attachment; filename="0001-Adding-driver-for-NCT6687D-Kernel-module.patch" Content-Transfer-Encoding: base64 RnJvbSA4YzQ5YWUzODZkNzZlYmRmNmNhOTkxMDJlYWE1MGZjOWVhYmE4NGExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgUmFpbmVzIDxzZWF0b21teWJveUBnbWFp bC5jb20+CkRhdGU6IFN1biwgMTYgSnVsIDIwMjMgMDc6NTM6MzAgLTA1MDAKU3ViamVjdDog W1BBVENIXSBBZGRpbmcgZHJpdmVyIGZvciBOQ1Q2Njg3RCBLZXJuZWwgbW9kdWxlLiBPcmln aW5hbCBhdXRob3IgaXMKIEZyZWRlcmljIEJPTFRaIGh0dHBzOi8vZ2l0aHViLmNvbS9GcmVk NzgyOTAvbmN0NjY4N2QuCgotLS0KIGRyaXZlcnMvaHdtb24vS2NvbmZpZyAgIHwgICAxMCAr CiBkcml2ZXJzL2h3bW9uL01ha2VmaWxlICB8ICAgIDEgKwogZHJpdmVycy9od21vbi9uY3Q2 Njg3LmMgfCAxMjcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MyBmaWxlcyBjaGFuZ2VkLCAxMjgzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2h3bW9uL25jdDY2ODcuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24v S2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCBmYzY0MDIwMWEyZGUuLjJl NWEwYjMwYjVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2Ry aXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTUxOCw2ICsxNTE4LDE2IEBAIGNvbmZpZyBTRU5T T1JTX05DVDY2ODMKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9k dWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbmN0NjY4My4KIAor Y29uZmlnIFNFTlNPUlNfTkNUNjY4NworCXRyaXN0YXRlICJOdXZvdG9uIE5DVDY2ODdEIgor CWRlcGVuZHMgb24gIVBQQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdl dCBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZworCSAgZnVuY3Rpb25hbGl0 eSBvZiB0aGUgTnV2b3RvbiBOQ1Q2Njg3RCBlU0lPIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVy IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAg d2lsbCBiZSBjYWxsZWQgbmN0NjY4Ny4KKwogY29uZmlnIFNFTlNPUlNfTkNUNjc3NV9DT1JF CiAJdHJpc3RhdGUKIAlzZWxlY3QgUkVHTUFQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9u L01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCBjZDhjNTY4YzgwYTku LmRmYzNiYmU5NjJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC0xNTgsNiArMTU4LDcgQEAgb2JqLSQoQ09O RklHX1NFTlNPUlNfTUxYUkVHX0ZBTikgKz0gbWx4cmVnLWZhbi5vCiBvYmotJChDT05GSUdf U0VOU09SU19NRU5GMjFCTUNfSFdNT04pICs9IG1lbmYyMWJtY19od21vbi5vCiBvYmotJChD T05GSUdfU0VOU09SU19NUjc1MjAzKQkrPSBtcjc1MjAzLm8KIG9iai0kKENPTkZJR19TRU5T T1JTX05DVDY2ODMpCSs9IG5jdDY2ODMubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNjY4 NykJKz0gbmN0NjY4Ny5vCiBvYmotJChDT05GSUdfU0VOU09SU19OQ1Q2Nzc1X0NPUkUpICs9 IG5jdDY3NzUtY29yZS5vCiBuY3Q2Nzc1LW9ianMJCQk6PSBuY3Q2Nzc1LXBsYXRmb3JtLm8K IG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY3NzUpCSs9IG5jdDY3NzUubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9od21vbi9uY3Q2Njg3LmMgYi9kcml2ZXJzL2h3bW9uL25jdDY2ODcuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZlZDJjODY4ZmVjNwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbmN0NjY4Ny5jCkBAIC0wLDAgKzEs MTI3MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIK Ky8qCisgKiBuY3Q2Njg3IC0gRHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyBm dW5jdGlvbmFsaXR5IG9mCisgKgkgICAgICAgTnV2b3RvbiBOQ1Q2Njg3IFN1cGVyLUkvTyBj aGlwcworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCAgRnJlZGVyaWMgQm9sdHogPGZyZWRl cmljLmJvbHR6QGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmN0NjY4MyBkcml2 ZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMyAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2st dXMubmV0PgorICogCisgKiBJbnNwaXJlZCBvZiBMaWJyZUhhcmR3YXJlTW9uaXRvcgorICog aHR0cHM6Ly9naXRodWIuY29tL0xpYnJlSGFyZHdhcmVNb25pdG9yL0xpYnJlSGFyZHdhcmVN b25pdG9yCisgKiAKKyAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgY2hpcHM6CisgKgorICog Q2hpcCAgICAgICAjdm9sdGFnZSAgICNmYW4gICAgI3B3bSAgICAjdGVtcCAgY2hpcCBJRAor ICogbmN0NjY4MyAgICAxNCgxKSAgICAgIDggICAgICAgOCAgICAgICA3ICAgICAgMHhjNzMy ICAocGFydGlhbCBzdXBwb3J0KQorICogbmN0NjY4NmQgICAyMSgxKSAgICAgIDE2ICAgICAg OCAgICAgICAzMigxKSAgMHhkNDQwCisgKiBuY3Q2Njg3ICAgIDE0KDEpICAgICAgOCAgICAg ICA4ICAgICAgIDcgICAgICAweGQ1OTIKKyAqCisgKiBOb3RlczoKKyAqCSgxKSBUb3RhbCBu dW1iZXIgb2Ygdm9sdGFnZSBhbmQgOSBkaXNwbGF5ZWQuCisgKi8KKy8vICNkZWZpbmUgREVC VUcgMQorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisj aW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUg PGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxp bnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKwor I2RlZmluZSBNSU4oYSxiKSAoKChhKTwoYikpPyhhKTooYikpCisjZGVmaW5lIE1BWChhLGIp ICgoKGEpPihiKSk/KGEpOihiKSkKKworZW51bSBraW5kcworeworCW5jdDY2ODMsCisJbmN0 NjY4NiwKKwluY3Q2Njg3Cit9OworCitzdGF0aWMgYm9vbCBmb3JjZTsKK3N0YXRpYyBib29s IG1hbnVhbDsKKworbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKK01PRFVMRV9QQVJN X0RFU0MoZm9yY2UsICJTZXQgdG8gb25lIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB1bmtub3du IHZlbmRvcnMiKTsKKworbW9kdWxlX3BhcmFtKG1hbnVhbCwgYm9vbCwgMCk7CitNT0RVTEVf UEFSTV9ERVNDKG1hbnVhbCwgIlNldCB2b2x0YWdlIGlucHV0IGFuZCB2b2x0YWdlIGxhYmVs IGNvbmZpZ3VyZWQgd2l0aCBleHRlcm5hbCBzZW5zb3JzIGZpbGUiKTsKKworc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IG5jdDY2ODdfZGV2aWNlX25hbWVzW10gPSB7CisJIm5jdDY2ODMi LAorCSJuY3Q2Njg2IiwKKwkibmN0NjY4NyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAq Y29uc3QgbmN0NjY4N19jaGlwX25hbWVzW10gPSB7CisJIk5DVDY2ODNEIiwKKwkiTkNUNjY4 NkQiLAorCSJOQ1Q2Njg3RCIsCit9OworCisjZGVmaW5lIERSVk5BTUUgIm5jdDY2ODciCisK Ky8qCisgKiBTdXBlci1JL08gY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMKKyAqLworCisjZGVm aW5lIE5DVDY2ODdfTERfQUNQSSAweDBhCisjZGVmaW5lIE5DVDY2ODdfTERfSFdNIDB4MGIK KyNkZWZpbmUgTkNUNjY4N19MRF9WSUQgMHgwZAorCisjZGVmaW5lIFNJT19SRUdfTERTRUwg MHgwNwkJIC8qIExvZ2ljYWwgZGV2aWNlIHNlbGVjdCAqLworI2RlZmluZSBTSU9fUkVHX0RF VklEIDB4MjAJCSAvKiBEZXZpY2UgSUQgKDIgYnl0ZXMpICovCisjZGVmaW5lIFNJT19SRUdf REVWUkVWSVNJT04gMHgyMSAvKiBEZXZpY2UgSUQgKDIgYnl0ZXMpICovCisjZGVmaW5lIFNJ T19SRUdfRU5BQkxFIDB4MzAJCSAvKiBMb2dpY2FsIGRldmljZSBlbmFibGUgKi8KKyNkZWZp bmUgU0lPX1JFR19BRERSIDB4NjAJCSAvKiBMb2dpY2FsIGRldmljZSBhZGRyZXNzICgyIGJ5 dGVzKSAqLworCisjZGVmaW5lIFNJT19OQ1Q2NjgzRF9JRCAweGM3MzIKKyNkZWZpbmUgU0lP X05DVDY2ODZfSUQgMHhkNDQwCisjZGVmaW5lIFNJT19OQ1Q2Njg2RF9JRCAweGQ0NDEKKyNk ZWZpbmUgU0lPX05DVDY2ODdfSUQgMHhkNDUxIC8vIDB4ZDU5MgorI2RlZmluZSBTSU9fTkNU NjY4N0RfSUQgMHhkNTkyCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50 IGlvcmVnLCBpbnQgcmVnLCBpbnQgdmFsKQoreworCW91dGIocmVnLCBpb3JlZyk7CisJb3V0 Yih2YWwsIGlvcmVnICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN1cGVyaW9faW5i KGludCBpb3JlZywgaW50IHJlZykKK3sKKwlvdXRiKHJlZywgaW9yZWcpOworCisJcmV0dXJu IGluYihpb3JlZyArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19zZWxl Y3QoaW50IGlvcmVnLCBpbnQgbGQpCit7CisJb3V0YihTSU9fUkVHX0xEU0VMLCBpb3JlZyk7 CisJb3V0YihsZCwgaW9yZWcgKyAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3VwZXJp b19lbnRlcihpbnQgaW9yZWcpCit7CisJLyoKKwkgKiBUcnkgdG8gcmVzZXJ2ZSA8aW9yZWc+ IGFuZCA8aW9yZWcgKyAxPiBmb3IgZXhjbHVzaXZlIGFjY2Vzcy4KKwkgKi8KKwlpZiAoIXJl cXVlc3RfbXV4ZWRfcmVnaW9uKGlvcmVnLCAyLCBEUlZOQU1FKSkKKwkJcmV0dXJuIC1FQlVT WTsKKworCW91dGIoMHg4NywgaW9yZWcpOworCW91dGIoMHg4NywgaW9yZWcpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX2V4aXQoaW50IGlvcmVn KQoreworCW91dGIoMHhhYSwgaW9yZWcpOworCW91dGIoMHgwMiwgaW9yZWcpOworCW91dGIo MHgwMiwgaW9yZWcgKyAxKTsKKworCXJlbGVhc2VfcmVnaW9uKGlvcmVnLCAyKTsKK30KKwor LyoKKyAqIElTQSBjb25zdGFudHMKKyAqLworCisjZGVmaW5lIElPUkVHSU9OX09GRlNFVCAw IC8qIFVzZSBFQyBwb3J0IDEgKi8KKyNkZWZpbmUgSU9SRUdJT05fTEVOR1RIIDQKKworLyog Q29tbW9uIGFuZCBOQ1Q2Njg3IHNwZWNpZmljIGRhdGEgKi8KKworI2RlZmluZSBOQ1Q2Njg3 X05VTV9SRUdfVk9MVEFHRSAoc2l6ZW9mKG5jdDY2ODdfdm9sdGFnZV9kZWZpbml0aW9uKSAv IHNpemVvZihzdHJ1Y3Qgdm9sdGFnZV9yZWcpKQorI2RlZmluZSBOQ1Q2Njg3X05VTV9SRUdf VEVNUCA3CisjZGVmaW5lIE5DVDY2ODdfTlVNX1JFR19GQU4gOAorI2RlZmluZSBOQ1Q2Njg3 X05VTV9SRUdfUFdNIDgKKworI2RlZmluZSBOQ1Q2Njg3X1JFR19URU1QKHgpICgweDEwMCAr ICh4KSoyKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19WT0xUQUdFKHgpICgweDEyMCArICh4KSoy KQorI2RlZmluZSBOQ1Q2Njg3X1JFR19GQU5fUlBNKHgpICgweDE0MCArICh4KSoyKQorI2Rl ZmluZSBOQ1Q2Njg3X1JFR19QV00oeCkgKDB4MTYwICsgKHgpKQorI2RlZmluZSBOQ1Q2Njg3 X1JFR19QV01fV1JJVEUoeCkgKDB4YTI4ICsgKHgpKQorCisjZGVmaW5lIE5DVDY2ODdfSFdN X0NGRyAweDE4MAorCisjZGVmaW5lIE5DVDY2ODdfUkVHX01PTl9DRkcoeCkgKDB4MWEwICsg KHgpKQorI2RlZmluZSBOQ1Q2Njg3X1JFR19GQU5JTl9DRkcoeCkgKDB4QTAwICsgKHgpKQor I2RlZmluZSBOQ1Q2Njg3X1JFR19GQU5PVVRfQ0ZHKHgpICgweDFkMCArICh4KSkKKworI2Rl ZmluZSBOQ1Q2Njg3X1JFR19URU1QX0hZU1QoeCkgKDB4MzMwICsgKHgpKQkvKiA4IGJpdCAq LworI2RlZmluZSBOQ1Q2Njg3X1JFR19URU1QX01BWCh4KSAoMHgzNTAgKyAoeCkpCS8qIDgg Yml0ICovCisjZGVmaW5lIE5DVDY2ODdfUkVHX01PTl9ISUdIKHgpICgweDM3MCArICh4KSoy KSAvKiA4IGJpdCAqLworI2RlZmluZSBOQ1Q2Njg3X1JFR19NT05fTE9XKHgpICgweDM3MSAr ICh4KSoyKQkvKiA4IGJpdCAqLworCisjZGVmaW5lIE5DVDY2ODdfUkVHX0ZBTl9NSU4oeCkg KDB4M2I4ICsgKHgpKjIpIC8qIDE2IGJpdCAqLworCisjZGVmaW5lIE5DVDY2ODdfUkVHX0ZB Tl9DVFJMX01PREUoeCkgMHhBMDAKKyNkZWZpbmUgTkNUNjY4N19SRUdfRkFOX1BXTV9DT01N QU5EKHgpIDB4QTAxCisjZGVmaW5lIE5DVDY2ODdfRkFOX0NGR19SRVEgMHg4MAorI2RlZmlu ZSBOQ1Q2Njg3X0ZBTl9DRkdfRE9ORSAweDQwCisKKyNkZWZpbmUgTkNUNjY4N19SRUdfQlVJ TERfWUVBUiAweDYwNAorI2RlZmluZSBOQ1Q2Njg3X1JFR19CVUlMRF9NT05USCAweDYwNQor I2RlZmluZSBOQ1Q2Njg3X1JFR19CVUlMRF9EQVkgMHg2MDYKKyNkZWZpbmUgTkNUNjY4N19S RUdfU0VSSUFMIDB4NjA3CisjZGVmaW5lIE5DVDY2ODdfUkVHX1ZFUlNJT05fSEkgMHg2MDgK KyNkZWZpbmUgTkNUNjY4N19SRUdfVkVSU0lPTl9MTyAweDYwOQorCisjZGVmaW5lIE5DVDY2 ODdfUkVHX0NSX0NBU0VPUEVOIDB4ZTgKKyNkZWZpbmUgTkNUNjY4N19DUl9DQVNFT1BFTl9N QVNLICgxIDw8IDcpCisKKyNkZWZpbmUgTkNUNjY4N19SRUdfQ1JfQkVFUCAweGUwCisjZGVm aW5lIE5DVDY2ODdfQ1JfQkVFUF9NQVNLICgxIDw8IDYpCisKKyNkZWZpbmUgRUNfU1BBQ0Vf UEFHRV9SRUdJU1RFUl9PRkZTRVQgMHgwNAorI2RlZmluZSBFQ19TUEFDRV9JTkRFWF9SRUdJ U1RFUl9PRkZTRVQgMHgwNQorI2RlZmluZSBFQ19TUEFDRV9EQVRBX1JFR0lTVEVSX09GRlNF VCAweDA2CisjZGVmaW5lIEVDX1NQQUNFX1BBR0VfU0VMRUNUIDB4RkYKKworc3RydWN0IHZv bHRhZ2VfcmVnCit7CisJdTE2IHJlZzsKKwl1MTYgbXVsdGlwbGllcjsKKwljb25zdCBjaGFy ICpsYWJlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgdm9sdGFnZV9yZWcgbmN0NjY4N192b2x0 YWdlX2RlZmluaXRpb25bXSA9IHsKKwkvLyArMTJWCisJeworCQkucmVnID0gMCwKKwkJLm11 bHRpcGxpZXIgPSAxMiwKKwkJLmxhYmVsID0gIisxMlYiLAorCX0sCisJLy8gKyA1VgorCXsK KwkJLnJlZyA9IDEsCisJCS5tdWx0aXBsaWVyID0gNSwKKwkJLmxhYmVsID0gIis1ViIsCisJ fSwKKwkvLyArMy4zVgorCXsKKwkJLnJlZyA9IDExLAorCQkubXVsdGlwbGllciA9IDEsCisJ CS5sYWJlbCA9ICIrMy4zViIsCisJfSwKKwkvLyBDUFUgU09DCisJeworCQkucmVnID0gMiwK KwkJLm11bHRpcGxpZXIgPSAxLAorCQkubGFiZWwgPSAiQ1BVIFNvYyIsCisJfSwKKwkvLyBD UFUgVmNvcmUKKwl7CisJCS5yZWcgPSA0LAorCQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJl bCA9ICJDUFUgVmNvcmUiLAorCX0sCisJLy8gQ1BVIDFQOAorCXsKKwkJLnJlZyA9IDksCisJ CS5tdWx0aXBsaWVyID0gMSwKKwkJLmxhYmVsID0gIkNQVSAxUDgiLAorCX0sCisJLy8gQ1BV IFZERFAKKwl7CisJCS5yZWcgPSAxMCwKKwkJLm11bHRpcGxpZXIgPSAxLAorCQkubGFiZWwg PSAiQ1BVIFZERFAiLAorCX0sCisJLy8gRFJBTQorCXsKKwkJLnJlZyA9IDMsCisJCS5tdWx0 aXBsaWVyID0gMiwKKwkJLmxhYmVsID0gIkRSQU0iLAorCX0sCisJLy8gQ2hpcHNldAorCXsK KwkJLnJlZyA9IDUsCisJCS5tdWx0aXBsaWVyID0gMSwKKwkJLmxhYmVsID0gIkNoaXBzZXQi LAorCX0sCisKKwkvLyBDUFUgU0EKKwl7CisJCS5yZWcgPSA2LAorCQkubXVsdGlwbGllciA9 IDEsCisJCS5sYWJlbCA9ICJDUFUgU0EiLAorCX0sCisJLy8gVm9sdGFnZSAjMgorCXsKKwkJ LnJlZyA9IDcsCisJCS5tdWx0aXBsaWVyID0gMSwKKwkJLmxhYmVsID0gIlZvbHRhZ2UgIzIi LAorCX0sCisJLy8gQVZDQzMKKwl7CisJCS5yZWcgPSA4LAorCQkubXVsdGlwbGllciA9IDEs CisJCS5sYWJlbCA9ICJBVkNDMyIsCisJfSwKKwkvLyBBVlNCCisJeworCQkucmVnID0gMTIs CisJCS5tdWx0aXBsaWVyID0gMSwKKwkJLmxhYmVsID0gIkFWU0IiLAorCX0sCisJLy8gVkJB VAorCXsKKwkJLnJlZyA9IDEzLAorCQkubXVsdGlwbGllciA9IDEsCisJCS5sYWJlbCA9ICJW QmF0IiwKKwl9LAorCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmN0NjY4N190 ZW1wX2xhYmVsW10gPSB7CisJIkNQVSIsCisJIlN5c3RlbSIsCisJIlZSTSBNT1MiLAorCSJQ Q0giLAorCSJDUFUgU29ja2V0IiwKKwkiUENJZSB4MSIsCisJIk0yXzEiLAorCU5VTEwsCit9 OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmN0NjY4N19mYW5fbGFiZWxbXSA9IHsK KwkiQ1BVIEZhbiIsCisJIlB1bXAgRmFuIiwKKwkiU3lzdGVtIEZhbiAjMSIsCisJIlN5c3Rl bSBGYW4gIzIiLAorCSJTeXN0ZW0gRmFuICMzIiwKKwkiU3lzdGVtIEZhbiAjNCIsCisJIlN5 c3RlbSBGYW4gIzUiLAorCSJTeXN0ZW0gRmFuICM2IiwKKwlOVUxMLAorfTsKKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq Lworc3RydWN0IG5jdDY2ODdfZGF0YQoreworCWludCBhZGRyOwkvKiBJTyBiYXNlIG9mIEVD IHNwYWNlICovCisJaW50IHNpb3JlZzsgLyogU0lPIHJlZ2lzdGVyICovCisJZW51bSBraW5k cyBraW5kOworCisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCWNvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgKmdyb3Vwc1s2XTsKKworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9j azsJLyogdXNlZCB0byBwcm90ZWN0IHNlbnNvciB1cGRhdGVzICovCisJYm9vbCB2YWxpZDsJ CQkJCS8qIHRydWUgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25l ZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogSW4gamlmZmllcyAqLworCisJLyogVm9sdGFnZSB2 YWx1ZXMgKi8KKwlzMTYgdm9sdGFnZVszXVtOQ1Q2Njg3X05VTV9SRUdfVk9MVEFHRV07IC8v IDAgPSBjdXJyZW50IDEgPSBtaW4gMiA9IG1heAorCisJLyogVGVtcGVyYXR1cmUgdmFsdWVz ICovCisJczMyIHRlbXBlcmF0dXJlWzNdW05DVDY2ODdfTlVNX1JFR19URU1QXTsgLy8gMCA9 IGN1cnJlbnQgMSA9IG1pbiAyID0gbWF4CisKKwkvKiBGYW4gYXR0cmlidXRlIHZhbHVlcyAq LworCXUxNiBycG1bM11bTkNUNjY4N19OVU1fUkVHX0ZBTl07IC8vIDAgPSBjdXJyZW50IDEg PSBtaW4gMiA9IG1heAorCXU4IF9pbml0aWFsRmFuQ29udHJvbE1vZGVbTkNUNjY4N19OVU1f UkVHX0ZBTl07CisJdTggX2luaXRpYWxGYW5Qd21Db21tYW5kW05DVDY2ODdfTlVNX1JFR19G QU5dOworCWJvb2wgX3Jlc3RvcmVEZWZhdWx0RmFuQ29udHJvbFJlcXVpcmVkW05DVDY2ODdf TlVNX1JFR19GQU5dOworCisJdTggcHdtW05DVDY2ODdfTlVNX1JFR19QV01dOworCisJLyog UmVtZW1iZXIgZXh0cmEgcmVnaXN0ZXIgdmFsdWVzIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8K Kwl1OCBod21fY2ZnOworfTsKKworc3RydWN0IG5jdDY2ODdfc2lvX2RhdGEKK3sKKwlpbnQg c2lvcmVnOworCWVudW0ga2luZHMga2luZDsKK307CisKK3N0cnVjdCBzZW5zb3JfZGV2aWNl X3RlbXBsYXRlCit7CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CisJdW5p b24KKwl7CisJCXN0cnVjdAorCQl7CisJCQl1OCBucjsKKwkJCXU4IGluZGV4OworCQl9IHM7 CisJCWludCBpbmRleDsKKwl9IHU7CisJYm9vbCBzMjsgLyogdHJ1ZSBpZiBib3RoIGluZGV4 IGFuZCBuciBhcmUgdXNlZCAqLworfTsKKworc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cl91 Cit7CisJdW5pb24KKwl7CisJCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhMTsK KwkJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgYTI7CisJfSB1OworCWNoYXIg bmFtZVszMl07Cit9OworCisjZGVmaW5lIF9fVEVNUExBVEVfQVRUUihfdGVtcGxhdGUsIF9t b2RlLCBfc2hvdywgX3N0b3JlKSBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5hdHRyID0gey5uYW1lID0gX3RlbXBsYXRl LCAubW9kZSA9IF9tb2RlfSwgICAgICBcCisJCS5zaG93ID0gX3Nob3csICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zdG9yZSA9IF9zdG9yZSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisJfQorCisjZGVmaW5lIFNFTlNPUl9ERVZJQ0Vf VEVNUExBVEUoX3RlbXBsYXRlLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwgX2luZGV4KSBcCisJ eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJCS5kZXZfYXR0ciA9IF9fVEVNUExBVEVfQVRUUihfdGVtcGxh dGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSwgICBcCisJCS51LmluZGV4ID0gX2luZGV4LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zMiA9 IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisJfQorCisjZGVmaW5lIFNFTlNPUl9ERVZJQ0VfVEVNUExBVEVfMihfdGVtcGxh dGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCAgICAgXAorCQkJCQkJCQkgX25yLCBfaW5kZXgp ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5kZXZfYXR0 ciA9IF9fVEVNUExBVEVfQVRUUihfdGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSwg XAorCQkudS5zLmluZGV4ID0gX2luZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKwkJLnUucy5uciA9IF9uciwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCS5zMiA9IHRydWUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0KKworI2RlZmlu ZSBTRU5TT1JfVEVNUExBVEUoX25hbWUsIF90ZW1wbGF0ZSwgX21vZGUsIF9zaG93LCBfc3Rv cmUsIF9pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKwlzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfdGVtcGxhdGUg c2Vuc29yX2Rldl90ZW1wbGF0ZV8jI19uYW1lID0gU0VOU09SX0RFVklDRV9URU1QTEFURShf dGVtcGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCBcCisJCQkJCQkJCQkJCQkJCQkJCQkJ CQkJCSAgX2luZGV4KQorCisjZGVmaW5lIFNFTlNPUl9URU1QTEFURV8yKF9uYW1lLCBfdGVt cGxhdGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkgIF9uciwg X2luZGV4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJc3RhdGlj IHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlIHNlbnNvcl9kZXZfdGVtcGxhdGVfIyNf bmFtZSA9IFNFTlNPUl9ERVZJQ0VfVEVNUExBVEVfMihfdGVtcGxhdGUsIF9tb2RlLCBfc2hv dywgX3N0b3JlLCBcCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlfbnIsIF9pbmRleCkKKwor c3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cAoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNl X3RlbXBsYXRlICoqdGVtcGxhdGVzOworCXVtb2RlX3QgKCppc192aXNpYmxlKShzdHJ1Y3Qg a29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosIGludCk7CisJaW50IGJhc2U7Cit9Owor CitzdGF0aWMgdm9pZCBuY3Q2Njg3X3NhdmVfZmFuX2NvbnRyb2woc3RydWN0IG5jdDY2ODdf ZGF0YSAqZGF0YSwgaW50IGluZGV4KTsKKworc3RhdGljIGNvbnN0IGNoYXIqIG5jdDY2ODdf dm9sdGFnZV9sYWJlbChjaGFyKiBidWYsIGludCBpbmRleCkKK3sKKwlpZiAobWFudWFsKQor CQlzcHJpbnRmKGJ1ZiwgImluJWQiLCBpbmRleCk7CisJZWxzZQorCQlzdHJjcHkoYnVmLCBu Y3Q2Njg3X3ZvbHRhZ2VfZGVmaW5pdGlvbltpbmRleF0ubGFiZWwpOworCisJcmV0dXJuIGJ1 ZjsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5jdDY2ODdfY3JlYXRl X2F0dHJfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2Vuc29yX3Rl bXBsYXRlX2dyb3VwICp0ZywgaW50IHJlcGVhdCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2Rldmlj ZV9hdHRyaWJ1dGVfMiAqYTI7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICph OworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICoqdDsKKwlzdHJ1Y3Qgc2Vuc29y X2RldmljZV9hdHRyX3UgKnN1OworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3VwOwor CXN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyczsKKwlpbnQgaSwgaiwgY291bnQ7CisKKwlpZiAo cmVwZWF0IDw9IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJdCA9IHRnLT50 ZW1wbGF0ZXM7CisJZm9yIChjb3VudCA9IDA7ICp0OyB0KyssIGNvdW50KyspCisJCTsKKwor CWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdyb3Vw ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpncm91cCksIEdGUF9LRVJORUwpOworCWlm IChncm91cCA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWF0dHJz ID0gZGV2bV9rY2FsbG9jKGRldiwgcmVwZWF0ICogY291bnQgKyAxLCBzaXplb2YoKmF0dHJz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGF0dHJzID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOworCisJc3UgPSBkZXZtX2t6YWxsb2MoZGV2LCBhcnJheTNfc2l6ZShyZXBl YXQsIGNvdW50LCBzaXplb2YoKnN1KSksIEdGUF9LRVJORUwpOworCWlmIChzdSA9PSBOVUxM KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWdyb3VwLT5hdHRycyA9IGF0dHJz OworCWdyb3VwLT5pc192aXNpYmxlID0gdGctPmlzX3Zpc2libGU7CisKKwlmb3IgKGkgPSAw OyBpIDwgcmVwZWF0OyBpKyspCisJeworCQl0ID0gdGctPnRlbXBsYXRlczsKKworCQlmb3Ig KGogPSAwOyAqdCAhPSBOVUxMOyBqKyspCisJCXsKKwkJCXNucHJpbnRmKHN1LT5uYW1lLCBz aXplb2Yoc3UtPm5hbWUpLCAoKnQpLT5kZXZfYXR0ci5hdHRyLm5hbWUsIHRnLT5iYXNlICsg aSk7CisKKwkJCWlmICgoKnQpLT5zMikKKwkJCXsKKwkJCQlhMiA9ICZzdS0+dS5hMjsKKwkJ CQlzeXNmc19hdHRyX2luaXQoJmEyLT5kZXZfYXR0ci5hdHRyKTsKKwkJCQlhMi0+ZGV2X2F0 dHIuYXR0ci5uYW1lID0gc3UtPm5hbWU7CisJCQkJYTItPm5yID0gKCp0KS0+dS5zLm5yICsg aTsKKwkJCQlhMi0+aW5kZXggPSAoKnQpLT51LnMuaW5kZXg7CisJCQkJYTItPmRldl9hdHRy LmF0dHIubW9kZSA9ICgqdCktPmRldl9hdHRyLmF0dHIubW9kZTsKKwkJCQlhMi0+ZGV2X2F0 dHIuc2hvdyA9ICgqdCktPmRldl9hdHRyLnNob3c7CisJCQkJYTItPmRldl9hdHRyLnN0b3Jl ID0gKCp0KS0+ZGV2X2F0dHIuc3RvcmU7CisJCQkJKmF0dHJzID0gJmEyLT5kZXZfYXR0ci5h dHRyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWEgPSAmc3UtPnUuYTE7CisJCQkJc3lz ZnNfYXR0cl9pbml0KCZhLT5kZXZfYXR0ci5hdHRyKTsKKwkJCQlhLT5kZXZfYXR0ci5hdHRy Lm5hbWUgPSBzdS0+bmFtZTsKKwkJCQlhLT5pbmRleCA9ICgqdCktPnUuaW5kZXggKyBpOwor CQkJCWEtPmRldl9hdHRyLmF0dHIubW9kZSA9ICgqdCktPmRldl9hdHRyLmF0dHIubW9kZTsK KwkJCQlhLT5kZXZfYXR0ci5zaG93ID0gKCp0KS0+ZGV2X2F0dHIuc2hvdzsKKwkJCQlhLT5k ZXZfYXR0ci5zdG9yZSA9ICgqdCktPmRldl9hdHRyLnN0b3JlOworCQkJCSphdHRycyA9ICZh LT5kZXZfYXR0ci5hdHRyOworCQkJfQorCQkJYXR0cnMrKzsKKwkJCXN1Kys7CisJCQl0Kys7 CisJCX0KKwl9CisKKwlyZXR1cm4gZ3JvdXA7Cit9CisKK3N0YXRpYyB1MTYgbmN0NjY4N19y ZWFkKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEsIHUxNiBhZGRyZXNzKQoreworCXU4IHBh Z2UgPSAodTgpKGFkZHJlc3MgPj4gOCk7CisJdTggaW5kZXggPSAodTgpKGFkZHJlc3MgJiAw eEZGKTsKKwlpbnQgcmVzOworCisJb3V0Yl9wKEVDX1NQQUNFX1BBR0VfU0VMRUNULCBkYXRh LT5hZGRyICsgRUNfU1BBQ0VfUEFHRV9SRUdJU1RFUl9PRkZTRVQpOworCW91dGJfcChwYWdl LCBkYXRhLT5hZGRyICsgRUNfU1BBQ0VfUEFHRV9SRUdJU1RFUl9PRkZTRVQpOworCW91dGJf cChpbmRleCwgZGF0YS0+YWRkciArIEVDX1NQQUNFX0lOREVYX1JFR0lTVEVSX09GRlNFVCk7 CisKKwlyZXMgPSBpbmJfcChkYXRhLT5hZGRyICsgRUNfU1BBQ0VfREFUQV9SRUdJU1RFUl9P RkZTRVQpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHUxNiBuY3Q2Njg3X3JlYWQx NihzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCXJldHVybiAobmN0 NjY4N19yZWFkKGRhdGEsIHJlZykgPDwgOCkgfCBuY3Q2Njg3X3JlYWQoZGF0YSwgcmVnICsg MSk7Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2ODdfd3JpdGUoc3RydWN0IG5jdDY2ODdfZGF0 YSAqZGF0YSwgdTE2IGFkZHJlc3MsIHUxNiB2YWx1ZSkKK3sKKwl1OCBwYWdlID0gKHU4KShh ZGRyZXNzID4+IDgpOworCXU4IGluZGV4ID0gKHU4KShhZGRyZXNzICYgMHhGRik7CisKKwlv dXRiX3AoRUNfU1BBQ0VfUEFHRV9TRUxFQ1QsIGRhdGEtPmFkZHIgKyBFQ19TUEFDRV9QQUdF X1JFR0lTVEVSX09GRlNFVCk7CisJb3V0Yl9wKHBhZ2UsIGRhdGEtPmFkZHIgKyBFQ19TUEFD RV9QQUdFX1JFR0lTVEVSX09GRlNFVCk7CisJb3V0Yl9wKGluZGV4LCBkYXRhLT5hZGRyICsg RUNfU1BBQ0VfSU5ERVhfUkVHSVNURVJfT0ZGU0VUKTsKKwlvdXRiX3AodmFsdWUsIGRhdGEt PmFkZHIgKyBFQ19TUEFDRV9EQVRBX1JFR0lTVEVSX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2 b2lkIG5jdDY2ODdfdXBkYXRlX3RlbXBlcmF0dXJlcyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpk YXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19U RU1QOyBpKyspCisJeworCQlzMzIgdmFsdWUgPSAoY2hhciluY3Q2Njg3X3JlYWQoZGF0YSwg TkNUNjY4N19SRUdfVEVNUChpKSk7CisJCXMzMiBoYWxmID0gKG5jdDY2ODdfcmVhZChkYXRh LCBOQ1Q2Njg3X1JFR19URU1QKGkpICsgMSkgPj4gNykgJiAweDE7CisJCXMzMiB0ZW1wZXJh dHVyZSA9ICh2YWx1ZSAqIDEwMDApICsgKDUwMCAqIGhhbGYpOworCisJCWRhdGEtPnRlbXBl cmF0dXJlWzBdW2ldID0gdGVtcGVyYXR1cmU7CisJCWRhdGEtPnRlbXBlcmF0dXJlWzFdW2ld ID0gTUlOKHRlbXBlcmF0dXJlLCBkYXRhLT50ZW1wZXJhdHVyZVsxXVtpXSk7CisJCWRhdGEt PnRlbXBlcmF0dXJlWzJdW2ldID0gTUFYKHRlbXBlcmF0dXJlLCBkYXRhLT50ZW1wZXJhdHVy ZVsyXVtpXSk7CisKKwkJcHJfZGVidWcoIm5jdDY2ODdfdXBkYXRlX3RlbXBlcmF0dXJlc1sl ZF1dLCBhZGRyPSUwNFgsIHZhbHVlPSVkLCBoYWxmPSVkLCB0ZW1wZXJhdHVyZT0lZFxuIiwg aSwgTkNUNjY4N19SRUdfVEVNUChpKSwgdmFsdWUsIGhhbGYsIHRlbXBlcmF0dXJlKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2ODdfdXBkYXRlX3ZvbHRhZ2Uoc3RydWN0IG5jdDY2 ODdfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaW5kZXg7CisJY2hhciBidWZbMTI4XTsKKworCS8q IE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1pdHMgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBOQ1Q2Njg3X05VTV9SRUdfVk9MVEFHRTsgaW5kZXgrKykKKwl7CisJCXMxNiByZWcg PSBtYW51YWwgPyBpbmRleCA6IG5jdDY2ODdfdm9sdGFnZV9kZWZpbml0aW9uW2luZGV4XS5y ZWc7CisJCXMxNiBoaWdoID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1ZPTFRB R0UocmVnKSkgKiAxNjsKKwkJczE2IGxvdyA9ICgodTE2KW5jdDY2ODdfcmVhZChkYXRhLCBO Q1Q2Njg3X1JFR19WT0xUQUdFKHJlZykgKyAxKSkgPj4gNDsKKwkJczE2IHZhbHVlID0gbG93 ICsgaGlnaDsKKwkJczE2IHZvbHRhZ2UgPSBtYW51YWwgPyB2YWx1ZSA6IHZhbHVlICogbmN0 NjY4N192b2x0YWdlX2RlZmluaXRpb25baW5kZXhdLm11bHRpcGxpZXI7CisKKwkJZGF0YS0+ dm9sdGFnZVswXVtpbmRleF0gPSB2b2x0YWdlOworCQlkYXRhLT52b2x0YWdlWzFdW2luZGV4 XSA9IE1JTih2b2x0YWdlLCBkYXRhLT52b2x0YWdlWzFdW2luZGV4XSk7CisJCWRhdGEtPnZv bHRhZ2VbMl1baW5kZXhdID0gTUFYKHZvbHRhZ2UsIGRhdGEtPnZvbHRhZ2VbMl1baW5kZXhd KTsKKworCQlwcl9kZWJ1ZygibmN0NjY4N191cGRhdGVfdm9sdGFnZVslZF0sICVzLCByZWc9 JWQsIGFkZHI9MHglMDR4LCB2YWx1ZT0lZCwgdm9sdGFnZT0lZFxuIiwgaW5kZXgsIG5jdDY2 ODdfdm9sdGFnZV9sYWJlbChidWYsIGluZGV4KSwgcmVnLCBOQ1Q2Njg3X1JFR19WT0xUQUdF KGluZGV4KSwgdmFsdWUsIHZvbHRhZ2UpOworCX0KKworCXByX2RlYnVnKCJuY3Q2Njg3X3Vw ZGF0ZV92b2x0YWdlXG4iKTsKK30KKworc3RhdGljIHZvaWQgbmN0NjY4N191cGRhdGVfZmFu cyhzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IE5DVDY2ODdfTlVNX1JFR19GQU47IGkrKykKKwl7CisJCXMxNiBybXAgPSBuY3Q2 Njg3X3JlYWQxNihkYXRhLCBOQ1Q2Njg3X1JFR19GQU5fUlBNKGkpKTsKKworCQlkYXRhLT5y cG1bMF1baV0gPSBybXA7CisJCWRhdGEtPnJwbVsxXVtpXSA9IE1JTihybXAsIGRhdGEtPnJw bVsxXVtpXSk7CisJCWRhdGEtPnJwbVsyXVtpXSA9IE1BWChybXAsIGRhdGEtPnJwbVsyXVtp XSk7CisKKwkJcHJfZGVidWcoIm5jdDY2ODdfdXBkYXRlX2ZhbnNbJWRdLCBycG09JWQgbWlu PSVkLCBtYXg9JWQiLCBpLCBybXAsIGRhdGEtPnJwbVsxXVtpXSwgZGF0YS0+cnBtWzJdW2ld KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUNjY4N19OVU1fUkVHX1BXTTsgaSsrKQor CXsKKwkJZGF0YS0+cHdtW2ldID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1BX TShpKSk7CisKKwkJcHJfZGVidWcoIm5jdDY2ODdfdXBkYXRlX2ZhbnNbJWRdLCBwd209JWQi LCBpLCBkYXRhLT5wd21baV0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBuY3Q2Njg3X2Rh dGEgKm5jdDY2ODdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IG5jdDY2ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXV0 ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmll cywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkKKwl7CisJCS8q IE1lYXN1cmVkIHZvbHRhZ2VzIGFuZCBsaW1pdHMgKi8KKwkJbmN0NjY4N191cGRhdGVfdm9s dGFnZShkYXRhKTsKKworCQkvKiBNZWFzdXJlZCB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cyAq LworCQluY3Q2Njg3X3VwZGF0ZV90ZW1wZXJhdHVyZXMoZGF0YSk7CisKKwkJLyogTWVhc3Vy ZWQgZmFuIHNwZWVkcyBhbmQgbGltaXRzICovCisJCW5jdDY2ODdfdXBkYXRlX2ZhbnMoZGF0 YSk7CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQg PSB0cnVlOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJ cmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBTeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMKKyAq Lworc3RhdGljIHNzaXplX3Qgc2hvd192b2x0YWdlX2xhYmVsKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1 Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRy KGF0dHIpOworCisJaWYgKG1hbnVhbCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiaW4lZFxu Iiwgc2F0dHItPmluZGV4KTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4i LCBuY3Q2Njg3X3ZvbHRhZ2VfZGVmaW5pdGlvbltzYXR0ci0+aW5kZXhdLmxhYmVsKTsKK30K Kworc3RhdGljIHNzaXplX3Qgc2hvd192b2x0YWdlX3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1 Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0 dHJfMihhdHRyKTsKKwlzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhID0gbmN0NjY4N191cGRh dGVfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+ dm9sdGFnZVtzYXR0ci0+aW5kZXhdW3NhdHRyLT5ucl0pOworfQorCitzdGF0aWMgdW1vZGVf dCBuY3Q2Njg3X3ZvbHRhZ2VfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3Ry dWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXByX2RlYnVnKCJuY3Q2Njg3 X3ZvbHRhZ2VfaXNfdmlzaWJsZVslZF0sIGF0dHI9MHglMDRYXG4iLCBpbmRleCwgYXR0ci0+ bW9kZSk7CisJcmV0dXJuIGF0dHItPm1vZGU7Cit9CisKK1NFTlNPUl9URU1QTEFURSh2b2x0 YWdlX2xhYmVsLCAiaW4lZF9sYWJlbCIsIFNfSVJVR08sIHNob3dfdm9sdGFnZV9sYWJlbCwg TlVMTCwgMCk7CitTRU5TT1JfVEVNUExBVEVfMih2b2x0YWdlX2lucHV0LCAiaW4lZF9pbnB1 dCIsIFNfSVJVR08sIHNob3dfdm9sdGFnZV92YWx1ZSwgTlVMTCwgMCwgMCk7CitTRU5TT1Jf VEVNUExBVEVfMih2b2x0YWdlX21pbiwgImluJWRfbWluIiwgU19JUlVHTywgc2hvd192b2x0 YWdlX3ZhbHVlLCBOVUxMLCAwLCAxKTsKK1NFTlNPUl9URU1QTEFURV8yKHZvbHRhZ2VfbWF4 LCAiaW4lZF9tYXgiLCBTX0lSVUdPLCBzaG93X3ZvbHRhZ2VfdmFsdWUsIE5VTEwsIDAsIDIp OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfdGVtcGxhdGUgKm5jdDY2ODdfYXR0 cmlidXRlc192b2x0YWdlX3RlbXBsYXRlW10gPSB7CisJJnNlbnNvcl9kZXZfdGVtcGxhdGVf dm9sdGFnZV9sYWJlbCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV92b2x0YWdlX2lucHV0LAor CSZzZW5zb3JfZGV2X3RlbXBsYXRlX3ZvbHRhZ2VfbWluLAorCSZzZW5zb3JfZGV2X3RlbXBs YXRlX3ZvbHRhZ2VfbWF4LAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNl bnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2Njg3X3ZvbHRhZ2VfdGVtcGxhdGVfZ3JvdXAgPSB7 CisJLnRlbXBsYXRlcyA9IG5jdDY2ODdfYXR0cmlidXRlc192b2x0YWdlX3RlbXBsYXRlLAor CS5pc192aXNpYmxlID0gbmN0NjY4N192b2x0YWdlX2lzX3Zpc2libGUsCit9OworCitzdGF0 aWMgc3NpemVfdCBzaG93X2Zhbl9sYWJlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9k ZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwor CXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuY3Q2Njg3X2Zhbl9sYWJlbFtzYXR0ci0+ aW5kZXhdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fdmFsdWUoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQor eworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNv cl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEgPSBuY3Q2 Njg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4i LCBkYXRhLT5ycG1bc2F0dHItPmluZGV4XVtzYXR0ci0+bnJdKTsKK30KKworc3RhdGljIHVt b2RlX3QgbmN0NjY4N19mYW5faXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3Ry dWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXJldHVybiBhdHRyLT5tb2Rl OworfQorCitTRU5TT1JfVEVNUExBVEUoZmFuX2xhYmVsLCAiZmFuJWRfbGFiZWwiLCBTX0lS VUdPLCBzaG93X2Zhbl9sYWJlbCwgTlVMTCwgMCk7CitTRU5TT1JfVEVNUExBVEVfMihmYW5f aW5wdXQsICJmYW4lZF9pbnB1dCIsIFNfSVJVR08sIHNob3dfZmFuX3ZhbHVlLCBOVUxMLCAw LCAwKTsKK1NFTlNPUl9URU1QTEFURV8yKGZhbl9taW4sICJmYW4lZF9taW4iLCBTX0lSVUdP LCBzaG93X2Zhbl92YWx1ZSwgTlVMTCwgMCwgMSk7CitTRU5TT1JfVEVNUExBVEVfMihmYW5f bWF4LCAiZmFuJWRfbWF4IiwgU19JUlVHTywgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDAsIDIp OworCisvKgorICogbmN0NjY4N19mYW5faXNfdmlzaWJsZSB1c2VzIHRoZSBpbmRleCBpbnRv IHRoZSBmb2xsb3dpbmcgYXJyYXkKKyAqIHRvIGRldGVybWluZSBpZiBhdHRyaWJ1dGVzIHNo b3VsZCBiZSBjcmVhdGVkIG9yIG5vdC4KKyAqIEFueSBjaGFuZ2UgaW4gb3JkZXIgb3IgY29u dGVudCBtdXN0IGJlIG1hdGNoZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2Rldmlj ZV90ZW1wbGF0ZSAqbmN0NjY4N19hdHRyaWJ1dGVzX2Zhbl90ZW1wbGF0ZVtdID0geworCSZz ZW5zb3JfZGV2X3RlbXBsYXRlX2Zhbl9sYWJlbCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV9m YW5faW5wdXQsCisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfZmFuX21pbiwKKwkmc2Vuc29yX2Rl dl90ZW1wbGF0ZV9mYW5fbWF4LAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2Njg3X2Zhbl90ZW1wbGF0ZV9ncm91cCA9IHsK KwkudGVtcGxhdGVzID0gbmN0NjY4N19hdHRyaWJ1dGVzX2Zhbl90ZW1wbGF0ZSwKKwkuaXNf dmlzaWJsZSA9IG5jdDY2ODdfZmFuX2lzX3Zpc2libGUsCisJLmJhc2UgPSAxLAorfTsKKwor c3RhdGljIHNzaXplX3Qgc2hvd190ZW1wZXJhdHVyZV9sYWJlbChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3Ry dWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0 cihhdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuY3Q2Njg3X3RlbXBf bGFiZWxbc2F0dHItPmluZGV4XSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVy YXR1cmVfdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0 ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q2 Njg3X2RhdGEgKmRhdGEgPSBuY3Q2Njg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wZXJhdHVyZVtzYXR0ci0+aW5kZXhd W3NhdHRyLT5ucl0pOworfQorCitzdGF0aWMgdW1vZGVfdCBuY3Q2Njg3X3RlbXBfaXNfdmlz aWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50 IGluZGV4KQoreworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitTRU5TT1JfVEVNUExBVEUo dGVtcF9sYWJlbCwgInRlbXAlZF9sYWJlbCIsIFNfSVJVR08sIHNob3dfdGVtcGVyYXR1cmVf bGFiZWwsIE5VTEwsIDApOworU0VOU09SX1RFTVBMQVRFXzIodGVtcF9pbnB1dCwgInRlbXAl ZF9pbnB1dCIsIFNfSVJVR08sIHNob3dfdGVtcGVyYXR1cmVfdmFsdWUsIE5VTEwsIDAsIDAp OworU0VOU09SX1RFTVBMQVRFXzIodGVtcF9taW4sICJ0ZW1wJWRfbWluIiwgU19JUlVHTywg c2hvd190ZW1wZXJhdHVyZV92YWx1ZSwgTlVMTCwgMCwgMSk7CitTRU5TT1JfVEVNUExBVEVf Mih0ZW1wX21heCwgInRlbXAlZF9tYXgiLCBTX0lSVUdPLCBzaG93X3RlbXBlcmF0dXJlX3Zh bHVlLCBOVUxMLCAwLCAyKTsKKworLyoKKyAqIG5jdDY2ODdfdGVtcF9pc192aXNpYmxlIHVz ZXMgdGhlIGluZGV4IGludG8gdGhlIGZvbGxvd2luZyBhcnJheQorICogdG8gZGV0ZXJtaW5l IGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGNyZWF0ZWQgb3Igbm90LgorICogQW55IGNoYW5n ZSBpbiBvcmRlciBvciBjb250ZW50IG11c3QgYmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHN0 cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICpuY3Q2Njg3X2F0dHJpYnV0ZXNfdGVtcF90 ZW1wbGF0ZVtdID0geworCSZzZW5zb3JfZGV2X3RlbXBsYXRlX3RlbXBfaW5wdXQsCisJJnNl bnNvcl9kZXZfdGVtcGxhdGVfdGVtcF9sYWJlbCwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV90 ZW1wX21pbiwKKwkmc2Vuc29yX2Rldl90ZW1wbGF0ZV90ZW1wX21heCwKKwlOVUxMLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfdGVtcGxhdGVfZ3JvdXAgbmN0NjY4N190 ZW1wX3RlbXBsYXRlX2dyb3VwID0geworCS50ZW1wbGF0ZXMgPSBuY3Q2Njg3X2F0dHJpYnV0 ZXNfdGVtcF90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODdfdGVtcF9pc192aXNp YmxlLAorCS5iYXNlID0gMSwKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1 ZikKK3sKKwlzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhID0gbmN0NjY4N191cGRhdGVfZGV2 aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0g dG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IGluZGV4ID0gc2F0dHItPmluZGV4 OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnB3bVtpbmRleF0pOwor fQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9f c2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwl1 bnNpZ25lZCBsb25nIHZhbDsKKwl1MTYgbW9kZTsKKwl1OCBiaXRNYXNrOworCisJaWYgKGtz dHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIHx8IHZhbCA+IDI1NSB8fCBpbmRleCA+PSBOQ1Q2Njg3 X05VTV9SRUdfRkFOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEt PnVwZGF0ZV9sb2NrKTsKKworCW5jdDY2ODdfc2F2ZV9mYW5fY29udHJvbChkYXRhLCBpbmRl eCk7CisKKwltb2RlID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX0ZBTl9DVFJM X01PREUoaW5kZXgpKTsKKwliaXRNYXNrID0gKHU4KSgweDAxIDw8IGluZGV4KTsKKworCW1v ZGUgPSAodTgpKG1vZGUgfCBiaXRNYXNrKTsKKwluY3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2 ODdfUkVHX0ZBTl9DVFJMX01PREUoaW5kZXgpLCBtb2RlKTsKKworCW5jdDY2ODdfd3JpdGUo ZGF0YSwgTkNUNjY4N19SRUdfRkFOX1BXTV9DT01NQU5EKGluZGV4KSwgTkNUNjY4N19GQU5f Q0ZHX1JFUSk7CisJbXNsZWVwKDUwKTsKKwluY3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2ODdf UkVHX1BXTV9XUklURShpbmRleCksIHZhbCk7CisJbmN0NjY4N193cml0ZShkYXRhLCBOQ1Q2 Njg3X1JFR19GQU5fUFdNX0NPTU1BTkQoaW5kZXgpLCBOQ1Q2Njg3X0ZBTl9DRkdfRE9ORSk7 CisJbXNsZWVwKDUwKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwor CisJcmV0dXJuIGNvdW50OworfQorCitTRU5TT1JfVEVNUExBVEUocHdtLCAicHdtJWQiLCBT X0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAwKTsKKworc3RhdGljIHZvaWQgbmN0NjY4 N19zYXZlX2Zhbl9jb250cm9sKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRhdGEsIGludCBpbmRl eCkKK3sKKwlpZiAoZGF0YS0+X3Jlc3RvcmVEZWZhdWx0RmFuQ29udHJvbFJlcXVpcmVkW2lu ZGV4XSA9PSBmYWxzZSkKKwl7CisJCXUxNiByZWcgPSBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNU NjY4N19SRUdfRkFOX0NUUkxfTU9ERShpbmRleCkpOworCQl1MTYgYml0TWFzayA9IDB4MDEg PDwgaW5kZXg7CisJCXU4IHB3bSA9IG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19G QU5fUFdNX0NPTU1BTkQoaW5kZXgpKTsKKworCQlkYXRhLT5faW5pdGlhbEZhbkNvbnRyb2xN b2RlW2luZGV4XSA9ICh1OCkocmVnICYgYml0TWFzayk7CisJCWRhdGEtPl9pbml0aWFsRmFu UHdtQ29tbWFuZFtpbmRleF0gPSBwd207CisKKwkJZGF0YS0+X3Jlc3RvcmVEZWZhdWx0RmFu Q29udHJvbFJlcXVpcmVkW2luZGV4XSA9IHRydWU7CisJfQorfQorCitzdGF0aWMgdm9pZCBu Y3Q2Njg3X3Jlc3RvcmVfZmFuX2NvbnRyb2woc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSwg aW50IGluZGV4KQoreworCWlmIChkYXRhLT5fcmVzdG9yZURlZmF1bHRGYW5Db250cm9sUmVx dWlyZWRbaW5kZXhdKQorCXsKKwkJdTggbW9kZSA9IG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2 Njg3X1JFR19GQU5fQ1RSTF9NT0RFKGluZGV4KSk7CisJCW1vZGUgPSAodTgpKG1vZGUgJiB+ ZGF0YS0+X2luaXRpYWxGYW5Db250cm9sTW9kZVtpbmRleF0pOworCisJCW5jdDY2ODdfd3Jp dGUoZGF0YSwgTkNUNjY4N19SRUdfRkFOX0NUUkxfTU9ERShpbmRleCksIG1vZGUpOworCisJ CW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19SRUdfRkFOX1BXTV9DT01NQU5EKGluZGV4 KSwgTkNUNjY4N19GQU5fQ0ZHX1JFUSk7CisJCW1zbGVlcCg1MCk7CisJCW5jdDY2ODdfd3Jp dGUoZGF0YSwgTkNUNjY4N19SRUdfUFdNX1dSSVRFKGluZGV4KSwgZGF0YS0+X2luaXRpYWxG YW5Qd21Db21tYW5kW2luZGV4XSk7CisJCW5jdDY2ODdfd3JpdGUoZGF0YSwgTkNUNjY4N19S RUdfRkFOX1BXTV9DT01NQU5EKGluZGV4KSwgTkNUNjY4N19GQU5fQ0ZHX0RPTkUpOworCQlt c2xlZXAoNTApOworCisJCWRhdGEtPl9yZXN0b3JlRGVmYXVsdEZhbkNvbnRyb2xSZXF1aXJl ZFtpbmRleF0gPSBmYWxzZTsKKworCQlwcl9kZWJ1ZygibmN0NjY4N19yZXN0b3JlX2Zhbl9j b250cm9sWyVkXSwgYWRkcj0lMDRYLCBjdHJsPSUwNFgsIF9pbml0aWFsRmFuUHdtQ29tbWFu ZD0lZFxuIiwgaW5kZXgsIE5DVDY2ODdfUkVHX0ZBTl9QV01fQ09NTUFORChpbmRleCksIE5D VDY2ODdfUkVHX1BXTV9XUklURShpbmRleCksIGRhdGEtPl9pbml0aWFsRmFuUHdtQ29tbWFu ZFtpbmRleF0pOworCX0KK30KKworc3RhdGljIHVtb2RlX3QgbmN0NjY4N19wd21faXNfdmlz aWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50 IGluZGV4KQoreworCXJldHVybiBhdHRyLT5tb2RlIHwgU19JV1VTUjsKK30KKworc3RhdGlj IHN0cnVjdCBzZW5zb3JfZGV2aWNlX3RlbXBsYXRlICpuY3Q2Njg3X2F0dHJpYnV0ZXNfcHdt X3RlbXBsYXRlW10gPSB7CisJJnNlbnNvcl9kZXZfdGVtcGxhdGVfcHdtLAorCU5VTEwsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl90ZW1wbGF0ZV9ncm91cCBuY3Q2Njg3 X3B3bV90ZW1wbGF0ZV9ncm91cCA9IHsKKwkudGVtcGxhdGVzID0gbmN0NjY4N19hdHRyaWJ1 dGVzX3B3bV90ZW1wbGF0ZSwKKwkuaXNfdmlzaWJsZSA9IG5jdDY2ODdfcHdtX2lzX3Zpc2li bGUsCisJLmJhc2UgPSAxLAorfTsKKworLyogR2V0IHRoZSBtb25pdG9yaW5nIGZ1bmN0aW9u cyBzdGFydGVkICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmN0NjY4N19pbml0X2RldmljZShz dHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQoreworCXU4IHRtcDsKKworCXByX2RlYnVnKCJu Y3Q2Njg3X2luaXRfZGV2aWNlXG4iKTsKKworCS8qIFN0YXJ0IGhhcmR3YXJlIG1vbml0b3Jp bmcgaWYgbmVlZGVkICovCisJdG1wID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfSFdN X0NGRyk7CisJaWYgKCEodG1wICYgMHg4MCkpCisJeworCQlwcl9kZWJ1ZygibmN0NjY4N19p bml0X2RldmljZTogMHglMDR4XG4iLCB0bXApOworCQluY3Q2Njg3X3dyaXRlKGRhdGEsIE5D VDY2ODdfSFdNX0NGRywgdG1wIHwgMHg4MCk7CisJfQorCisJLy8gZW5hYmxlIFNJTyB2b2x0 YWdlCisJbmN0NjY4N193cml0ZShkYXRhLCAweDFCQiwgMHg2MSk7CisJbmN0NjY4N193cml0 ZShkYXRhLCAweDFCQywgMHg2Mik7CisJbmN0NjY4N193cml0ZShkYXRhLCAweDFCRCwgMHg2 Myk7CisJbmN0NjY4N193cml0ZShkYXRhLCAweDFCRSwgMHg2NCk7CisJbmN0NjY4N193cml0 ZShkYXRhLCAweDFCRiwgMHg2NSk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgYSB0b3RhbCBv ZiA4IGZhbiBpbnB1dHMuCisgKi8KK3N0YXRpYyB2b2lkIG5jdDY2ODdfc2V0dXBfZmFucyhz dHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsg aSA8IE5DVDY2ODdfTlVNX1JFR19GQU47IGkrKykKKwl7CisJCXUxNiByZWcgPSBuY3Q2Njg3 X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfRkFOX0NUUkxfTU9ERShpKSk7CisJCXUxNiBiaXRN YXNrID0gMHgwMSA8PCBpOworCQl1MTYgcnBtID0gbmN0NjY4N19yZWFkMTYoZGF0YSwgTkNU NjY4N19SRUdfRkFOX1JQTShpKSk7CisKKwkJZGF0YS0+cnBtWzBdW2ldID0gcnBtOworCQlk YXRhLT5ycG1bMV1baV0gPSBycG07CisJCWRhdGEtPnJwbVsyXVtpXSA9IHJwbTsKKwkJZGF0 YS0+X2luaXRpYWxGYW5Db250cm9sTW9kZVtpXSA9ICh1OCkocmVnICYgYml0TWFzayk7CisJ CWRhdGEtPl9yZXN0b3JlRGVmYXVsdEZhbkNvbnRyb2xSZXF1aXJlZFtpXSA9IGZhbHNlOwor CisJCXByX2RlYnVnKCJuY3Q2Njg3X3NldHVwX2ZhbnNbJWRdLCAlcyAtIGFkZHI9JTA0WCwg Y3RybD0lMDRYLCBycG09JWQsIF9pbml0aWFsRmFuQ29udHJvbE1vZGU9JWRcbiIsIGksIG5j dDY2ODdfZmFuX2xhYmVsW2ldLCBOQ1Q2Njg3X1JFR19GQU5fQ1RSTF9NT0RFKGkpLCByZWcs IHJwbSwgZGF0YS0+X2luaXRpYWxGYW5Db250cm9sTW9kZVtpXSk7CisJfQorfQorCitzdGF0 aWMgdm9pZCBuY3Q2Njg3X3NldHVwX3ZvbHRhZ2VzKHN0cnVjdCBuY3Q2Njg3X2RhdGEgKmRh dGEpCit7CisJaW50IGluZGV4OworCWNoYXIgYnVmWzY0XTsKKworCS8qIE1lYXN1cmVkIHZv bHRhZ2VzIGFuZCBsaW1pdHMgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOQ1Q2Njg3 X05VTV9SRUdfVk9MVEFHRTsgaW5kZXgrKykKKwl7CisJCXMxNiByZWcgPSBtYW51YWwgPyBp bmRleCA6IG5jdDY2ODdfdm9sdGFnZV9kZWZpbml0aW9uW2luZGV4XS5yZWc7CisJCXMxNiBo aWdoID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX1ZPTFRBR0UocmVnKSkgKiAx NjsKKwkJczE2IGxvdyA9ICgodTE2KW5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19W T0xUQUdFKHJlZykgKyAxKSkgPj4gNDsKKwkJczE2IHZhbHVlID0gbG93ICsgaGlnaDsKKwkJ czE2IHZvbHRhZ2UgPSBtYW51YWwgPyB2YWx1ZSA6IHZhbHVlICogbmN0NjY4N192b2x0YWdl X2RlZmluaXRpb25baW5kZXhdLm11bHRpcGxpZXI7CisKKwkJZGF0YS0+dm9sdGFnZVswXVtp bmRleF0gPSB2b2x0YWdlOworCQlkYXRhLT52b2x0YWdlWzFdW2luZGV4XSA9IHZvbHRhZ2U7 CisJCWRhdGEtPnZvbHRhZ2VbMl1baW5kZXhdID0gdm9sdGFnZTsKKworCQlwcl9kZWJ1Zygi bmN0NjY4N19zZXR1cF92b2x0YWdlc1slZF0sICVzLCBhZGRyPTB4JTA0eCwgdmFsdWU9JWQs IHZvbHRhZ2U9JWRcbiIsIGluZGV4LCBuY3Q2Njg3X3ZvbHRhZ2VfbGFiZWwoYnVmLCBpbmRl eCksIE5DVDY2ODdfUkVHX1ZPTFRBR0UoaW5kZXgpLCB2YWx1ZSwgdm9sdGFnZSk7CisJfQor fQorCitzdGF0aWMgdm9pZCBuY3Q2Njg3X3NldHVwX3RlbXBlcmF0dXJlcyhzdHJ1Y3QgbmN0 NjY4N19kYXRhICpkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5DVDY2 ODdfTlVNX1JFR19URU1QOyBpKyspCisJeworCQlzMzIgdmFsdWUgPSAoY2hhciluY3Q2Njg3 X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfVEVNUChpKSk7CisJCXMzMiBoYWxmID0gKG5jdDY2 ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19URU1QKGkpICsgMSkgPj4gNykgJiAweDE7CisJ CXMzMiB0ZW1wZXJhdHVyZSA9ICh2YWx1ZSAqIDEwMDApICsgKDUgKiBoYWxmKTsKKworCQlk YXRhLT50ZW1wZXJhdHVyZVswXVtpXSA9IHRlbXBlcmF0dXJlOworCQlkYXRhLT50ZW1wZXJh dHVyZVsxXVtpXSA9IHRlbXBlcmF0dXJlOworCQlkYXRhLT50ZW1wZXJhdHVyZVsyXVtpXSA9 IHRlbXBlcmF0dXJlOworCisJCXByX2RlYnVnKCJuY3Q2Njg3X3NldHVwX3RlbXBlcmF0dXJl c1slZF1dLCBhZGRyPSUwNFgsIHZhbHVlPSVkLCBoYWxmPSVkLCB0ZW1wZXJhdHVyZT0lZFxu IiwgaSwgTkNUNjY4N19SRUdfVEVNUChpKSwgdmFsdWUsIGhhbGYsIHRlbXBlcmF0dXJlKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIG5jdDY2ODdfc2V0dXBfcHdtKHN0cnVjdCBuY3Q2Njg3 X2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUNjY4N19O VU1fUkVHX1BXTTsgaSsrKQorCXsKKwkJZGF0YS0+X2luaXRpYWxGYW5Qd21Db21tYW5kW2ld ID0gbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX0ZBTl9QV01fQ09NTUFORChpKSk7 CisJCWRhdGEtPnB3bVtpXSA9IG5jdDY2ODdfcmVhZChkYXRhLCBOQ1Q2Njg3X1JFR19QV00o aSkpOworCisJCXByX2RlYnVnKCJuY3Q2Njg3X3NldHVwX3B3bVslZF0sIGFkZHI9JTA0WCwg cHdtPSVkLCBfaW5pdGlhbEZhblB3bUNvbW1hbmQ9JWRcbiIsIGksIE5DVDY2ODdfUkVHX0ZB Tl9QV01fQ09NTUFORChpKSwgZGF0YS0+cHdtW2ldLCBkYXRhLT5faW5pdGlhbEZhblB3bUNv bW1hbmRbaV0pOworCX0KK30KKworc3RhdGljIGludCBuY3Q2Njg3X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CisJc3RydWN0IG5jdDY2ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJ Zm9yIChpID0gMDsgaSA8IE5DVDY2ODdfTlVNX1JFR19GQU47IGkrKykKKwl7CisJCW5jdDY2 ODdfcmVzdG9yZV9mYW5fY29udHJvbChkYXRhLCBpKTsKKwl9CisKKwltdXRleF91bmxvY2so JmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5j dDY2ODdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBuY3Q2Njg3X3Npb19kYXRhICpz aW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3Vw ICpncm91cDsKKwlzdHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2Ug Kmh3bW9uX2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZ3JvdXBzID0gMDsK KwljaGFyIGJ1aWxkWzE2XTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIWRldm1fcmVxdWVzdF9yZWdpb24oZGV2LCBy ZXMtPnN0YXJ0LCBJT1JFR0lPTl9MRU5HVEgsIERSVk5BTUUpKQorCQlyZXR1cm4gLUVCVVNZ OworCisJZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbmN0NjY4N19k YXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRhdGEtPmtpbmQgPSBzaW9fZGF0YS0+a2luZDsKKwlkYXRhLT5zaW9yZWcgPSBzaW9fZGF0 YS0+c2lvcmVnOworCWRhdGEtPmFkZHIgPSByZXMtPnN0YXJ0OworCisJcHJfZGVidWcoIm5j dDY2ODdfcHJvYmUgYWRkcj0weCUwNFgsIHNpb3JlZz0weCUwNFhcbiIsIGRhdGEtPmFkZHIs IGRhdGEtPnNpb3JlZyk7CisKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCW5jdDY2ODdfaW5pdF9k ZXZpY2UoZGF0YSk7CisJbmN0NjY4N19zZXR1cF9mYW5zKGRhdGEpOworCW5jdDY2ODdfc2V0 dXBfcHdtKGRhdGEpOworCW5jdDY2ODdfc2V0dXBfdGVtcGVyYXR1cmVzKGRhdGEpOworCW5j dDY2ODdfc2V0dXBfdm9sdGFnZXMoZGF0YSk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29r cyAqLworCisJZ3JvdXAgPSBuY3Q2Njg3X2NyZWF0ZV9hdHRyX2dyb3VwKGRldiwgJm5jdDY2 ODdfcHdtX3RlbXBsYXRlX2dyb3VwLCBOQ1Q2Njg3X05VTV9SRUdfRkFOKTsKKworCWlmIChJ U19FUlIoZ3JvdXApKQorCQlyZXR1cm4gUFRSX0VSUihncm91cCk7CisKKwlkYXRhLT5ncm91 cHNbZ3JvdXBzKytdID0gZ3JvdXA7CisKKwlncm91cCA9IG5jdDY2ODdfY3JlYXRlX2F0dHJf Z3JvdXAoZGV2LCAmbmN0NjY4N192b2x0YWdlX3RlbXBsYXRlX2dyb3VwLCBOQ1Q2Njg3X05V TV9SRUdfVk9MVEFHRSk7CisKKwlpZiAoSVNfRVJSKGdyb3VwKSkKKwkJcmV0dXJuIFBUUl9F UlIoZ3JvdXApOworCisJZGF0YS0+Z3JvdXBzW2dyb3VwcysrXSA9IGdyb3VwOworCisJZ3Jv dXAgPSBuY3Q2Njg3X2NyZWF0ZV9hdHRyX2dyb3VwKGRldiwgJm5jdDY2ODdfZmFuX3RlbXBs YXRlX2dyb3VwLCBOQ1Q2Njg3X05VTV9SRUdfRkFOKTsKKworCWlmIChJU19FUlIoZ3JvdXAp KQorCQlyZXR1cm4gUFRSX0VSUihncm91cCk7CisKKwlkYXRhLT5ncm91cHNbZ3JvdXBzKytd ID0gZ3JvdXA7CisKKwlncm91cCA9IG5jdDY2ODdfY3JlYXRlX2F0dHJfZ3JvdXAoZGV2LCAm bmN0NjY4N190ZW1wX3RlbXBsYXRlX2dyb3VwLCBOQ1Q2Njg3X05VTV9SRUdfVEVNUCk7CisK KwlpZiAoSVNfRVJSKGdyb3VwKSkKKwkJcmV0dXJuIFBUUl9FUlIoZ3JvdXApOworCisJZGF0 YS0+Z3JvdXBzW2dyb3VwcysrXSA9IGdyb3VwOworCisJc2NucHJpbnRmKGJ1aWxkLCBzaXpl b2YoYnVpbGQpLCAiJTAyZC8lMDJkLyUwMmQiLCBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4 N19SRUdfQlVJTERfTU9OVEgpLCBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19SRUdfQlVJ TERfREFZKSwgbmN0NjY4N19yZWFkKGRhdGEsIE5DVDY2ODdfUkVHX0JVSUxEX1lFQVIpKTsK KworCWRldl9pbmZvKGRldiwgIiVzIEVDIGZpcm13YXJlIHZlcnNpb24gJWQuJWQgYnVpbGQg JXNcbiIsIG5jdDY2ODdfY2hpcF9uYW1lc1tkYXRhLT5raW5kXSwgbmN0NjY4N19yZWFkKGRh dGEsIE5DVDY2ODdfUkVHX1ZFUlNJT05fSEkpLCBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4 N19SRUdfVkVSU0lPTl9MTyksIGJ1aWxkKTsKKworCWh3bW9uX2RldiA9IGRldm1faHdtb25f ZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKGRldiwgbmN0NjY4N19kZXZpY2VfbmFtZXNb ZGF0YS0+a2luZF0sIGRhdGEsIGRhdGEtPmdyb3Vwcyk7CisKKwlyZXR1cm4gUFRSX0VSUl9P Ul9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgbmN0NjY4N19zdXNwZW5kKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlz dHJ1Y3QgbmN0NjY4N19kYXRhICpkYXRhID0gbmN0NjY4N191cGRhdGVfZGV2aWNlKCZwZGV2 LT5kZXYpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmh3 bV9jZmcgPSBuY3Q2Njg3X3JlYWQoZGF0YSwgTkNUNjY4N19IV01fQ0ZHKTsKKwltdXRleF91 bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG5jdDY2ODdfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbmN0NjY4N19kYXRh ICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdXRleF9sb2NrKCZkYXRhLT51 cGRhdGVfbG9jayk7CisKKwluY3Q2Njg3X3dyaXRlKGRhdGEsIE5DVDY2ODdfSFdNX0NGRywg ZGF0YS0+aHdtX2NmZyk7CisKKwkvKiBGb3JjZSByZS1yZWFkaW5nIGFsbCB2YWx1ZXMgKi8K KwlkYXRhLT52YWxpZCA9IGZhbHNlOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xv Y2spOworCisJcmV0dXJuIDA7Cit9CisKKy8vIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3Bt X29wcyBuY3Q2Njg3X2Rldl9wbV9vcHMgPSB7CisvLyAJLnN1c3BlbmQgPSBuY3Q2Njg3X3N1 c3BlbmQsCisvLyAJLnJlc3VtZSA9IG5jdDY2ODdfcmVzdW1lLAorLy8gCS5mcmVlemUgPSBu Y3Q2Njg3X3N1c3BlbmQsCisvLyAJLnJlc3RvcmUgPSBuY3Q2Njg3X3Jlc3VtZSwKKy8vIH07 CisKKyNkZWZpbmUgTkNUNjY4N19ERVZfUE1fT1BTIE5VTEwKKworc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbmN0NjY4N19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5h bWUgPSBEUlZOQU1FLAorCQkucG0gPSBOQ1Q2Njg3X0RFVl9QTV9PUFMsCisJfSwKKwkucHJv YmUgPSBuY3Q2Njg3X3Byb2JlLAorCS5yZW1vdmUgPSBuY3Q2Njg3X3JlbW92ZSwKKwkuc3Vz cGVuZCA9IG5jdDY2ODdfc3VzcGVuZCwKKwkucmVzdW1lID0gbmN0NjY4N19yZXN1bWUsCit9 OworCitzdGF0aWMgaW50IF9faW5pdCBuY3Q2Njg3X2ZpbmQoaW50IHNpb2FkZHIsIHN0cnVj dCBuY3Q2Njg3X3Npb19kYXRhICpzaW9fZGF0YSkKK3sKKwl1MTYgYWRkcmVzczsKKwl1MTYg dmVyaWZ5OworCXUxNiB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHN1cGVyaW9fZW50ZXIo c2lvYWRkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZhbCA9IChzdXBlcmlv X2luYihzaW9hZGRyLCBTSU9fUkVHX0RFVklEKSA8PCA4KSB8IHN1cGVyaW9faW5iKHNpb2Fk ZHIsIFNJT19SRUdfREVWUkVWSVNJT04pOworCisJcHJfZGVidWcoImZvdW5kIGNoaXAgSUQ6 IDB4JTA0eFxuIiwgdmFsKTsKKworCWlmICh2YWwgPT0gU0lPX05DVDY2ODNEX0lEKSB7CisJ CXNpb19kYXRhLT5raW5kID0gbmN0NjY4MzsKKwl9IGVsc2UgaWYgKHZhbCA9PSBTSU9fTkNU NjY4Nl9JRCB8fCB2YWwgPT0gU0lPX05DVDY2ODZEX0lEKSB7CisJCXNpb19kYXRhLT5raW5k ID0gbmN0NjY4NjsKKwl9IGVsc2UgaWYgKHZhbCA9PSBTSU9fTkNUNjY4N19JRCB8fCB2YWwg PT0gU0lPX05DVDY2ODdEX0lEIHx8IGZvcmNlKQorCXsKKwkJc2lvX2RhdGEtPmtpbmQgPSBu Y3Q2Njg3OworCX0KKwllbHNlCisJeworCQlpZiAodmFsICE9IDB4ZmZmZikKKwkJCXByX2Rl YnVnKCJ1bnN1cHBvcnRlZCBjaGlwIElEOiAweCUwNHhcbiIsIHZhbCk7CisJCWdvdG8gZmFp bDsKKwl9CisKKwkvKiBXZSBoYXZlIGEga25vd24gY2hpcCwgZmluZCB0aGUgSFdNIEkvTyBh ZGRyZXNzICovCisJc3VwZXJpb19zZWxlY3Qoc2lvYWRkciwgTkNUNjY4N19MRF9IV00pOwor CWFkZHJlc3MgPSAoc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19BRERSKSA8PCA4KSB8 IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfQUREUiArIDEpOworCXNzbGVlcCgxKTsK Kwl2ZXJpZnkgPSAoc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19BRERSKSA8PCA4KSB8 IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfQUREUiArIDEpOworCisJaWYgKGFkZHJl c3MgPT0gMCB8fCBhZGRyZXNzICE9IHZlcmlmeSkKKwl7CisJCXByX2VycigiRUMgYmFzZSBJ L08gcG9ydCB1bmNvbmZpZ3VyZWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKChh ZGRyZXNzICYgMHgwNykgPT0gMHgwNSkKKwkJYWRkcmVzcyAmPSAweEZGRjg7CisKKwlpZiAo YWRkcmVzcyA8IDB4MTAwIHx8IChhZGRyZXNzICYgMHhGMDA3KSAhPSAwKQorCXsKKwkJcHJf ZXJyKCJFQyBJbnZhbGlkIGFkZHJlc3M6IDB4JTA0WFxuIiwgYWRkcmVzcyk7CisJCWdvdG8g ZmFpbDsKKwl9CisKKwkvKiBBY3RpdmF0ZSBsb2dpY2FsIGRldmljZSBpZiBuZWVkZWQgKi8K Kwl2YWwgPSBzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9fUkVHX0VOQUJMRSk7CisJaWYgKCEo dmFsICYgMHgwMSkpCisJeworCQlwcl93YXJuKCJGb3JjaWJseSBlbmFibGluZyBFQyBhY2Nl c3MuIERhdGEgbWF5IGJlIHVudXNhYmxlLlxuIik7CisJCXN1cGVyaW9fb3V0YihzaW9hZGRy LCBTSU9fUkVHX0VOQUJMRSwgdmFsIHwgMHgwMSk7CisJfQorCisJc3VwZXJpb19leGl0KHNp b2FkZHIpOworCXByX2luZm8oIkZvdW5kICVzIG9yIGNvbXBhdGlibGUgY2hpcCBhdCAweCUw NHg6MHglMDR4XG4iLCBuY3Q2Njg3X2NoaXBfbmFtZXNbc2lvX2RhdGEtPmtpbmRdLCBzaW9h ZGRyLCBhZGRyZXNzKTsKKwlzaW9fZGF0YS0+c2lvcmVnID0gc2lvYWRkcjsKKworCXJldHVy biBhZGRyZXNzOworCitmYWlsOgorCXN1cGVyaW9fZXhpdChzaW9hZGRyKTsKKwlyZXR1cm4g LUVOT0RFVjsKK30KKworLyoKKyAqIHdoZW4gU3VwZXItSS9PIGZ1bmN0aW9ucyBtb3ZlIHRv IGEgc2VwYXJhdGUgZmlsZSwgdGhlIFN1cGVyLUkvTworICogYnVzIHdpbGwgbWFuYWdlIHRo ZSBsaWZldGltZSBvZiB0aGUgZGV2aWNlIGFuZCB0aGlzIG1vZHVsZSB3aWxsIG9ubHkga2Vl cAorICogdHJhY2sgb2YgdGhlIG5jdDY2ODcgZHJpdmVyLiBCdXQgc2luY2Ugd2UgdXNlIHBs YXRmb3JtX2RldmljZV9hbGxvYygpLCB3ZQorICogbXVzdCBrZWVwIHRyYWNrIG9mIHRoZSBk ZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZbMl07CisK K3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfbmN0NjY4N19pbml0KHZvaWQpCit7CisJc3Ry dWN0IG5jdDY2ODdfc2lvX2RhdGEgc2lvX2RhdGE7CisJaW50IHNpb2FkZHJbMl0gPSB7MHgy ZSwgMHg0ZX07CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlib29sIGZvdW5kID0gZmFsc2U7 CisJaW50IGFkZHJlc3M7CisJaW50IGksIGVycjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZl cl9yZWdpc3RlcigmbmN0NjY4N19kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7 CisKKwkvKgorCSAqIGluaXRpYWxpemUgc2lvX2RhdGEtPmtpbmQgYW5kIHNpb19kYXRhLT5z aW9yZWcuCisJICoKKwkgKiB3aGVuIFN1cGVyLUkvTyBmdW5jdGlvbnMgbW92ZSB0byBhIHNl cGFyYXRlIGZpbGUsIHRoZSBTdXBlci1JL08KKwkgKiBkcml2ZXIgd2lsbCBwcm9iZSAweDJl IGFuZCAweDRlIGFuZCBhdXRvLWRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYQorCSAqIG5jdDY2 ODcgaGFyZHdhcmUgbW9uaXRvciwgYW5kIGNhbGwgcHJvYmUoKQorCSAqLworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKHBkZXYpOyBpKyspCisJeworCQlhZGRyZXNzID0gbmN0NjY4 N19maW5kKHNpb2FkZHJbaV0sICZzaW9fZGF0YSk7CisJCWlmIChhZGRyZXNzIDw9IDApCisJ CQljb250aW51ZTsKKworCQlmb3VuZCA9IHRydWU7CisKKwkJcGRldltpXSA9IHBsYXRmb3Jt X2RldmljZV9hbGxvYyhEUlZOQU1FLCBhZGRyZXNzKTsKKwkJaWYgKCFwZGV2W2ldKQorCQl7 CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0X2RldmljZV91bnJlZ2lzdGVyOwor CQl9CisKKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXZbaV0sICZzaW9f ZGF0YSwgc2l6ZW9mKHN0cnVjdCBuY3Q2Njg3X3Npb19kYXRhKSk7CisJCWlmIChlcnIpCisJ CQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKworCQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJl cykpOworCisJCXJlcy5uYW1lID0gRFJWTkFNRTsKKwkJcmVzLnN0YXJ0ID0gYWRkcmVzcyAr IElPUkVHSU9OX09GRlNFVDsKKwkJcmVzLmVuZCA9IGFkZHJlc3MgKyBJT1JFR0lPTl9PRkZT RVQgKyBJT1JFR0lPTl9MRU5HVEggLSAxOworCQlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX0lP OworCisJCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CisJCWlm IChlcnIpCisJCXsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldltpXSk7CisJCQlwZGV2 W2ldID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gcGxhdGZvcm1fZGV2 aWNlX2FkZF9yZXNvdXJjZXMocGRldltpXSwgJnJlcywgMSk7CisJCWlmIChlcnIpCisJCQln b3RvIGV4aXRfZGV2aWNlX3B1dDsKKworCQkvKiBwbGF0Zm9ybV9kZXZpY2VfYWRkIGNhbGxz IHByb2JlKCkgKi8KKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2W2ldKTsKKwkJ aWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWlmICghZm91bmQp CisJeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfdW5yZWdpc3RlcjsKKwl9CisK KwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQo cGRldltpXSk7CisKK2V4aXRfZGV2aWNlX3VucmVnaXN0ZXI6CisJd2hpbGUgKC0taSA+PSAw KQorCXsKKwkJaWYgKHBkZXZbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihw ZGV2W2ldKTsKKwl9CisKK2V4aXRfdW5yZWdpc3RlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5y ZWdpc3RlcigmbmN0NjY4N19kcml2ZXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IHZvaWQgX19leGl0IHNlbnNvcnNfbmN0NjY4N19leGl0KHZvaWQpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGV2KTsgaSsrKQorCXsKKwkJaWYgKHBk ZXZbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2W2ldKTsKKwl9CisK KwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbmN0NjY4N19kcml2ZXIpOworfQorCitN T0RVTEVfQVVUSE9SKCJGcmVkZXJpYyBCb2x0eiA8ZnJlZGVyaWMuYm9sdHpAZ21haWwuY29t PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE5DVDY2ODdEIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfbmN0NjY4N19pbml0 KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfbmN0NjY4N19leGl0KTsKLS0gCjIuMzQuMQoK --------------1FqwzupmO0yCH4jSSYKvoYBe--