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 X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1C153C433DB for ; Tue, 26 Jan 2021 14:08:14 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A1F8322B51 for ; Tue, 26 Jan 2021 14:08:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A1F8322B51 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:Reply-To:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID: Subject:From:To:Date:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=SxZfkz3KfsqLc28G8GqyYQN5YtEMlGnBgpSj0CFNXB0=; b=FOkJ6ijusuigws0bm5O8qaWTli iKFGYXPLJ+Fq7gpBoaBQgcnA5sP3BAau5k0+V68lhOp3ed8myCzD0YaM2JJH+qgznr+q+oMfzghK+ c3hqG32ZXJ7ZmzS7lki6gifWvTMIMFsD/ewnyfe1qcNQNHOtcgucyt2wpAJvkszEjhTjU2EEJftb3 MyHayR9A0XoIhVu8LwYWynVtVEaItFv0AL7ORx9Eya+qC5VMG8DCK3Xsyxu2GdWZq7ISg7nKN1dwN SBv/k06tw/Ok15f7llq28aMLrnHOWpCmlM3nONntpZYJQxQMkP2Bevyt48Hm2wxXRqmkAY1FYa+DH 3AUa0fLA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4Oyt-0007UQ-IT; Tue, 26 Jan 2021 14:06:07 +0000 Received: from mail2.protonmail.ch ([185.70.40.22]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4Oyq-0007Ss-1y for linux-arm-kernel@lists.infradead.org; Tue, 26 Jan 2021 14:06:06 +0000 Date: Tue, 26 Jan 2021 14:05:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1611669958; bh=1C99cDDTQ+SZKHo4y3ZuqDc9cOo98aFRzT/bhvsGMbc=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=vYrb8rcSN3UG0+AI1EW0yIuwjSq2k0guMoKO/1AKzLa9F9/r+uRcZTL+FjqPwiBXa agSwjxM0kdpQCZMVqv9nYNSIrKLh5yuM9KdgUmshxVwD7qpPofLRRrpfDWqnZCT/cv 38oUN8i4LgyHyjHHl02i+BUnd4m6LJ5q/KRsWzIM= To: Pavel Machek , Dan Murphy , Bjorn Andersson , Andy Gross , Rob Herring From: =?utf-8?Q?N=C3=ADcolas_F=2E_R=2E_A=2E_Prado?= Subject: [PATCH v2 2/4] leds: Add driver for QCOM SPMI Flash LEDs Message-ID: <20210126140240.1517044-3-nfraprado@protonmail.com> In-Reply-To: <20210126140240.1517044-1-nfraprado@protonmail.com> References: <20210126140240.1517044-1-nfraprado@protonmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210126_090604_458237_D9977608 X-CRM114-Status: GOOD ( 17.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: =?utf-8?Q?N=C3=ADcolas_F=2E_R=2E_A=2E_Prado?= Cc: devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Russell King , linux-kernel@vger.kernel.org, Luca Weiss , lkcamp@lists.libreplanetbr.org, linux-leds@vger.kernel.org, andrealmeid@collabora.com, Georgi Djakov , linux-arm-kernel@lists.infradead.org, Brian Masney Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIFNQTUkgRmxhc2ggTEVEcy4gVGhlc2UgYXJlIGNv bnRyb2xsZWQKdGhyb3VnaCBhbiBTUE1JIGJ1cyBhbmQgYXJlIHBhcnQgb2YgdGhlIFBNODk0MSBQ TUlDLiBUaGVyZSBhcmUgdHdvIExFRHMKcHJlc2VudCBpbiB0aGUgY2hpcCwgYW5kIGNhbiBiZSB1 c2VkIGluZGVwZW5kZW50bHkgYXMgY2FtZXJhIGZsYXNoIG9yCnRvZ2V0aGVyIGluIHRvcmNoIG1v ZGUgdG8gYWN0IGFzIGEgbGFudGVybi4KClNpZ25lZC1vZmYtYnk6IE7DrWNvbGFzIEYuIFIuIEEu IFByYWRvIDxuZnJhcHJhZG9AcHJvdG9ubWFpbC5jb20+Ci0tLQpDaGFuZ2VzIGluIHYyOgotIFRo YW5rcyB0byBKYWNlazoKICAtIEltcGxlbWVudGVkIGZsYXNoIExFRCBjbGFzcyBmcmFtZXdvcmsK LSBUaGFua3MgdG8gQmpvcm46CiAgLSBSZW5hbWVkIGRyaXZlciB0byAicWNvbSBzcG1pIGZsYXNo IgotIFJlZmFjdG9yZWQgY29kZQotIEFkZGVkIG1pc3NpbmcgY29weXJpZ2h0CgogZHJpdmVycy9s ZWRzL0tjb25maWcgICAgICAgICAgICAgICAgfCAgICA4ICsKIGRyaXZlcnMvbGVkcy9NYWtlZmls ZSAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2xlZHMvbGVkcy1xY29tLXNwbWktZmxh c2guYyB8IDExNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs IDExNjIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9sZWRz LXFjb20tc3BtaS1mbGFzaC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9k cml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA4NDlkM2M1ZjkwOGUuLmFkMWM3ODQ2ZjliMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcK QEAgLTkyOCw2ICs5MjgsMTQgQEAgY29uZmlnIExFRFNfQUNFUl9BNTAwCiAJICBUaGlzIG9wdGlv biBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQb3dlciBCdXR0b24gTEVEIG9mCiAJICBBY2VyIElj b25pYSBUYWIgQTUwMC4KIAorY29uZmlnIExFRFNfUUNPTV9TUE1JX0ZMQVNICisJdHJpc3RhdGUg IlN1cHBvcnQgZm9yIFFDT00gU1BNSSBGbGFzaCBMRURzIgorCWRlcGVuZHMgb24gU1BNSQorCWRl cGVuZHMgb24gTEVEU19DTEFTU19GTEFTSAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRz IHRoZSBGbGFzaC9Ub3JjaCBMRUQgcHJlc2VudCBpbiBRdWFsY29tbSdzIFBNODk0MQorCSAgUE1J Qy4KKwogY29tbWVudCAiTEVEIFRyaWdnZXJzIgogc291cmNlICJkcml2ZXJzL2xlZHMvdHJpZ2dl ci9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJz L2xlZHMvTWFrZWZpbGUKaW5kZXggNzNlNjAzZTE3MjdlLi5lODZiY2ZiYTAxNmIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKQEAg LTkzLDYgKzkzLDcgQEAgb2JqLSQoQ09ORklHX0xFRFNfVFVSUklTX09NTklBKQkJKz0gbGVkcy10 dXJyaXMtb21uaWEubwogb2JqLSQoQ09ORklHX0xFRFNfV004MzFYX1NUQVRVUykJKz0gbGVkcy13 bTgzMXgtc3RhdHVzLm8KIG9iai0kKENPTkZJR19MRURTX1dNODM1MCkJCSs9IGxlZHMtd204MzUw Lm8KIG9iai0kKENPTkZJR19MRURTX1dSQVApCQkJKz0gbGVkcy13cmFwLm8KK29iai0kKENPTkZJ R19MRURTX1FDT01fU1BNSV9GTEFTSCkJKz0gbGVkcy1xY29tLXNwbWktZmxhc2gubwogCiAjIExF RCBTUEkgRHJpdmVycwogb2JqLSQoQ09ORklHX0xFRFNfQ1IwMDE0MTE0KQkJKz0gbGVkcy1jcjAw MTQxMTQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtcWNvbS1zcG1pLWZsYXNoLmMg Yi9kcml2ZXJzL2xlZHMvbGVkcy1xY29tLXNwbWktZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyM2ZjMTA3YWJjZQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvbGVkcy9sZWRzLXFjb20tc3BtaS1mbGFzaC5jCkBAIC0wLDAgKzEsMTE1MyBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIFF1YWxjb21tIFNQ TUkgRmxhc2ggRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIwLCBOw61jb2xhcyBGLiBS LiBBLiBQcmFkbyA8bmZyYXByYWRvQHByb3Rvbm1haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIFFQ TlAgTEVEcyBkcml2ZXIgZnJvbSBkb3duc3RyZWFtIE1TTSBrZXJuZWwgc291cmNlcy4KKyAqIENv cHlyaWdodCAoYykgMjAxMi0yMDEzLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BtaS5oPgorI2luY2x1ZGUgPGxpbnV4L29m X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXgu aD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZC1jbGFzcy1m bGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8ZHQt YmluZGluZ3MvbGVkcy9sZWRzLXFjb20tc3BtaS1mbGFzaC5oPgorCisjZGVmaW5lIEZMQVNIX1NB RkVUWV9USU1FUgkJMHg0MAorI2RlZmluZSBGTEFTSF9NQVhfQ1VSUgkJCTB4NDEKKyNkZWZpbmUg RkxBU0hfTEVEXzBfQ1VSUgkJMHg0MgorI2RlZmluZSBGTEFTSF9MRURfMV9DVVJSCQkweDQzCisj ZGVmaW5lIEZMQVNIX0NMQU1QX0NVUlIJCTB4NDQKKyNkZWZpbmUgRkxBU0hfTEVEX1RNUl9DVFJM CQkweDQ4CisjZGVmaW5lIEZMQVNIX0hFQURST09NCQkJMHg0QQorI2RlZmluZSBGTEFTSF9TVEFS VFVQX0RFTEFZCQkweDRCCisjZGVmaW5lIEZMQVNIX01BU0tfRU5BQkxFCQkweDRDCisjZGVmaW5l IEZMQVNIX1ZSRUdfT0tfRk9SQ0UJCTB4NEYKKyNkZWZpbmUgRkxBU0hfRU5BQkxFX0NPTlRST0wJ CTB4NDYKKyNkZWZpbmUgRkxBU0hfTEVEX1NUUk9CRV9DVFJMCQkweDQ3CisjZGVmaW5lIEZMQVNI X0xFRF9VTkxPQ0tfU0VDVVJFCQkweEQwCisjZGVmaW5lIEZMQVNIX0xFRF9UT1JDSAkJCTB4RTQK KyNkZWZpbmUgRkxBU0hfRkFVTFRfREVURUNUCQkweDUxCisjZGVmaW5lIEZMQVNIX1JBTVBfUkFU RQkJCTB4NTQKKyNkZWZpbmUgRkxBU0hfUEVSSVBIRVJBTF9TVUJUWVBFCTB4MDUKKyNkZWZpbmUg RkxBU0hfVlBIX1BXUl9EUk9PUAkJMHg1QQorCisjZGVmaW5lIEZMQVNIX01BWF9MRVZFTAkJCTB4 NEYKKyNkZWZpbmUgVE9SQ0hfTUFYX0xFVkVMCQkJMHgwRgorI2RlZmluZQlGTEFTSF9OT19NQVNL CQkJMHgwMAorCisjZGVmaW5lIEZMQVNIX01BU0tfMQkJCTB4MjAKKyNkZWZpbmUgRkxBU0hfTUFT S19SRUdfTUFTSwkJMHhFMAorI2RlZmluZSBGTEFTSF9IRUFEUk9PTV9NQVNLCQkweDAzCisjZGVm aW5lIEZMQVNIX1NBRkVUWV9USU1FUl9NQVNLCQkweDdGCisjZGVmaW5lIEZMQVNIX0NVUlJFTlRf TUFTSwkJMHhGRgorI2RlZmluZSBGTEFTSF9NQVhfQ1VSUkVOVF9NQVNLCQkweDdGCisjZGVmaW5l IEZMQVNIX1RNUl9NQVNLCQkJMHgwMworI2RlZmluZSBGTEFTSF9UTVJfV0FUQ0hET0cJCTB4MDMK KyNkZWZpbmUgRkxBU0hfVE1SX1NBRkVUWQkJMHgwMAorI2RlZmluZSBGTEFTSF9GQVVMVF9ERVRF Q1RfTUFTSwkJMFg4MAorI2RlZmluZSBGTEFTSF9IV19WUkVHX09LCQkweDQwCisjZGVmaW5lIEZM QVNIX1ZSRUdfTUFTSwkJCTB4QzAKKyNkZWZpbmUgRkxBU0hfU1RBUlRVUF9ETFlfTUFTSwkJMHgw MgorI2RlZmluZSBGTEFTSF9SQU1QX1JBVEVfTUFTSwkJMHhCRgorI2RlZmluZSBGTEFTSF9WUEhf UFdSX0RST09QX01BU0sJMHhGMworCisjZGVmaW5lIEZMQVNIX0VOQUJMRV9BTEwJCTB4RTAKKyNk ZWZpbmUgRkxBU0hfRU5BQkxFX01PRFVMRQkJMHg4MAorI2RlZmluZSBGTEFTSF9FTkFCTEVfTU9E VUxFX01BU0sJMHg4MAorI2RlZmluZSBGTEFTSF9ESVNBQkxFX0FMTAkJMHgwMAorI2RlZmluZSBG TEFTSF9FTkFCTEVfTUFTSwkJMHhFMAorI2RlZmluZSBGTEFTSF9FTkFCTEVfTEVEXzAJCTB4QzAK KyNkZWZpbmUgRkxBU0hfRU5BQkxFX0xFRF8xCQkweEEwCisjZGVmaW5lIEZMQVNIX0lOSVRfTUFT SwkJCTB4RTAKKyNkZWZpbmUgRkxBU0hfU0VMRkNIRUNLX0VOQUJMRQkJMHg4MAorI2RlZmluZSBG TEFTSF9TRUxGQ0hFQ0tfRElTQUJMRQkJMHgwMAorCisjZGVmaW5lIEZMQVNIX1NUUk9CRV9TVwkJ CTB4QzAKKyNkZWZpbmUgRkxBU0hfU1RST0JFX0hXCQkJMHgwNAorI2RlZmluZSBGTEFTSF9TVFJP QkVfTUFTSwkJMHhDNworI2RlZmluZSBGTEFTSF9MRURfMF9PVVRQVVQJCTB4ODAKKyNkZWZpbmUg RkxBU0hfTEVEXzFfT1VUUFVUCQkweDQwCisKKyNkZWZpbmUgRkxBU0hfVE9SQ0hfTUFTSwkJMHgw MworI2RlZmluZSBGTEFTSF9MRURfVE9SQ0hfRU5BQkxFCQkweDAwCisjZGVmaW5lIEZMQVNIX0xF RF9UT1JDSF9ESVNBQkxFCQkweDAzCisjZGVmaW5lIEZMQVNIX1VOTE9DS19TRUNVUkUJCTB4QTUK KyNkZWZpbmUgRkxBU0hfU0VDVVJFX01BU0sJCTB4RkYKKworI2RlZmluZSBGTEFTSF9TVUJUWVBF X0RVQUwJCTB4MDEKKyNkZWZpbmUgRkxBU0hfU1VCVFlQRV9TSU5HTEUJCTB4MDIKKworI2RlZmlu ZSBGTEFTSF9EVVJBVElPTl9TVEVQCQkxMDAwMAorI2RlZmluZSBGTEFTSF9EVVJBVElPTl9NSU4J CTEwMDAwCisjZGVmaW5lIEZMQVNIX0RVUkFUSU9OX01BWAkJMTI4MDAwMCAvL1RPRE86IGZpbmQg cmVhbCB2YWx1ZQorCisjZGVmaW5lIEZMQVNIX0NVUlJFTlRfU1RFUAkJMTI1MDAKKyNkZWZpbmUg RkxBU0hfQ1VSUkVOVF9NSU4JCTEyNTAwCisjZGVmaW5lIEZMQVNIX0NVUlJFTlRfTUFYCQkxMDAw MDAwCisjZGVmaW5lIEZMQVNIX1RPUkNIX0NVUlJFTlRfTUFYCQkyMDAwMDAKKworI2RlZmluZSBG TEFTSF9ERUZBVUxUX0NMQU1QCQkyMDAwMDAKKworZW51bSBxY29tX2ZsYXNoX2lkcyB7CisJUUNP TV9GTEFTSF9JRF9MRUQwLAorCVFDT01fRkxBU0hfSURfTEVEMSwKK307CisKK3N0YXRpYyB1OCBm bGFzaF9kZWJ1Z19yZWdzW10gPSB7CisJMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0 OCwgMHg0OSwgMHg0YiwgMHg0YywKKwkweDRmLCAweDQ2LCAweDQ3LAorfTsKKworLyoqCisgKiBz dHJ1Y3QgcWNvbV9mbGFzaF9sZWQgLSBSZXByZXNlbnRzIGVhY2ggaW5kaXZpZHVhbCBmbGFzaCBM RUQKKyAqIEBjZGV2OiBmbGFzaCBMRUQgY2xhc3NkZXYKKyAqIEBpZDogbGVkIElEIGFzIGdpdmVu IGJ5IGVudW0gcWNvbV9mbGFzaF9pZHMKKyAqIEBkZWZhdWx0X29uOiBkZWZhdWx0IHN0YXRlIGZv ciB0aGUgTEVECisgKiBAdHVybl9vZmZfZGVsYXlfbXM6IG51bWJlciBvZiBtc2VjIGJlZm9yZSB0 dXJuaW5nIG9mZiB0aGUgTEVECisgKiBAY2xhbXBfY3VycjogQ2xhbXAgY3VycmVudCB0byB1c2UK KyAqIEBoZWFkcm9vbTogSGVhZHJvb20gdmFsdWUgdG8gdXNlLCBhcyBnaXZlbiBieSBsZWRzLXFj b20tc3BtaS1mbGFzaC5oCisgKiBAZW5hYmxlX21vZHVsZTogZW5hYmxlIGFkZHJlc3MgZm9yIHBh cnRpY3VsYXIgZmxhc2gKKyAqIEB0cmlnZ2VyX2ZsYXNoOiB0cmlnZ2VyIGZsYXNoCisgKiBAc3Rh cnR1cF9kbHk6IHN0YXJ0dXAgZGVsYXkgZm9yIGZsYXNoLCBhcyBnaXZlbiBieSBsZWRzLXFjb20t c3BtaS1mbGFzaC5oCisgKiBAc3Ryb2JlX3R5cGU6IHNlbGVjdCBiZXR3ZWVuIHN3IGFuZCBodyBz dHJvYmUKKyAqIEBjdXJyZW50X2FkZHI6IGFkZHJlc3MgdG8gd3JpdGUgZm9yIGN1cnJlbnQKKyAq IEBzZWNvbmRfYWRkcjogYWRkcmVzcyBvZiBzZWNvbmRhcnkgZmxhc2ggdG8gYmUgd3JpdHRlbgor ICogQHNhZmV0eV90aW1lcjogZW5hYmxlIHNhZmV0eSB0aW1lciBvciB3YXRjaGRvZyB0aW1lcgor ICogQHRvcmNoX2VuYWJsZTogd2hldGhlciB0b3JjaCBtb2RlIGlzIGVuYWJsZWQgb3IgaW5kaXZp ZHVhbCBmbGFzaCBMRUQKKyAqLworc3RydWN0IHFjb21fZmxhc2hfbGVkIHsKKwlzdHJ1Y3QgbGVk X2NsYXNzZGV2X2ZsYXNoIGNkZXY7CisJaW50IGlkOworCWJvb2wgZGVmYXVsdF9vbjsKKwlpbnQg dHVybl9vZmZfZGVsYXlfbXM7CisJdTMyIGNsYW1wX2N1cnI7CisJdTggaGVhZHJvb207CisJdTgg ZW5hYmxlX21vZHVsZTsKKwl1OCB0cmlnZ2VyX2ZsYXNoOworCXU4IHN0YXJ0dXBfZGx5OworCXU4 IHN0cm9iZV90eXBlOworCXUxNiBjdXJyZW50X2FkZHI7CisJdTE2IHNlY29uZF9hZGRyOworCWJv b2wgc2FmZXR5X3RpbWVyOworCWJvb2wgdG9yY2hfZW5hYmxlOworfTsKKworLyoqCisgKiBzdHJ1 Y3QgcWNvbV9mbGFzaF9kZXZpY2UgLSBRQ09NIFNQTUkgRmxhc2ggZGV2aWNlLCBjb250YWlucyAy IGZsYXNoIExFRHMKKyAqIEByZWdtYXA6IHJlZ21hcCB1c2VkIHRvIGFjY2VzcyBMRUQgcmVnaXN0 ZXJzIG92ZXIgU1BNSQorICogQGJhc2U6IGJhc2UgcmVnaXN0ZXIgZ2l2ZW4gaW4gZGV2aWNlIHRy ZWUKKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgZnJvbSBkZXZpY2V0cmVlCisgKiBAZmxhc2hf Ym9vc3RfcmVnOiB2b2x0YWdlIHJlZ3VsYXRvciB0byBzdXBwbHkgdGhlIGZsYXNoZXMKKyAqIEB0 b3JjaF9ib29zdF9yZWc6IHZvbHRhZ2UgcmVndWxhdG9yIHRvIHN1cHBseSB0b3JjaCBtb2RlCisg KiBAbGVkczogZmxhc2ggTEVEcworICogQG51bV9sZWRzOiBudW1iZXIgb2YgTEVEcyByZWdpc3Rl cmVkIChiZXR3ZWVuIDAgYW5kIDIpCisgKiBAbG9jazogbG9jayB0byBwcm90ZWN0IFNQTUkgdHJh bnNhY3Rpb25zCisgKiBAdG9yY2hfZW5hYmxlOiBlbmFibGUgZmxhc2ggTEVEIHRvcmNoIG1vZGUK KyAqIEBwZXJpcGhlcmFsX3N1YnR5cGU6IG1vZHVsZSBwZXJpcGhlcmFsIHN1YnR5cGUKKyAqIEBm bGFzaF9yZWd1bGF0b3Jfb246IGZsYXNoIHJlZ3VsYXRvciBzdGF0dXMKKyAqIEB0b3JjaF9yZWd1 bGF0b3Jfb246IHRvcmNoIHJlZ3VsYXRvciBzdGF0dXMKKyAqLworc3RydWN0IHFjb21fZmxhc2hf ZGV2aWNlIHsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJdTE2IGJhc2U7CisJc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVndWxhdG9yICpmbGFzaF9ib29zdF9yZWc7 CisJc3RydWN0IHJlZ3VsYXRvciAqdG9yY2hfYm9vc3RfcmVnOworCXN0cnVjdCBxY29tX2ZsYXNo X2xlZCBsZWRzWzJdOworCXU4IG51bV9sZWRzOworCXN0cnVjdCBtdXRleCBsb2NrOworCXU4IHRv cmNoX2VuYWJsZTsKKwl1OCBwZXJpcGhlcmFsX3N1YnR5cGU7CisJYm9vbCBmbGFzaF9yZWd1bGF0 b3Jfb247CisJYm9vbCB0b3JjaF9yZWd1bGF0b3Jfb247Cit9OworCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqZmxjZGV2X3RvX2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2Zs YXNoICpmbGVkX2NkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsIHN0cnVj dCBxY29tX2ZsYXNoX2xlZCwgY2Rldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFjb21f Zmxhc2hfZGV2aWNlICpsZWRfdG9fbGVkc19kZXYoc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihsZWQsIHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSwg bGVkc1tsZWQtPmlkXSk7Cit9CisKK3N0YXRpYyBpbnQgbGVkX3JlYWRfcmVnKHN0cnVjdCBxY29t X2ZsYXNoX2RldmljZSAqbGVkc19kZXYsIHUxNiBvZmZzZXQsIHU4ICpkYXRhKQoreworCXVuc2ln bmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGxlZHNfZGV2LT5y ZWdtYXAsIGxlZHNfZGV2LT5iYXNlICsgb2Zmc2V0LCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJ cmV0dXJuIHJldDsKKworCSpkYXRhID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGxlZF93cml0ZV9yZWcoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwgdTE2IG9m ZnNldCwgdTggZGF0YSkKK3sKKwlyZXR1cm4gcmVnbWFwX3dyaXRlKGxlZHNfZGV2LT5yZWdtYXAs IGxlZHNfZGV2LT5iYXNlICsgb2Zmc2V0LCBkYXRhKTsKK30KKworc3RhdGljIGludCBxY29tX2Zs YXNoX21hc2tlZF93cml0ZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2LAorCQkJ CSAgIHUxNiBhZGRyLAorCQkJCSAgIHU4IG1hc2ssCisJCQkJICAgdTggdmFsKQoreworCWludCBy YzsKKwl1OCByZWc7CisKKwlyYyA9IGxlZF9yZWFkX3JlZyhsZWRzX2RldiwgYWRkciwgJnJlZyk7 CisJaWYgKHJjKQorCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LAorCQkJIlVuYWJsZSB0 byByZWFkIGZyb20gYWRkcj0leCwgcmMoJWQpXG4iLCBhZGRyLCByYyk7CisKKwlyZWcgJj0gfm1h c2s7CisJcmVnIHw9IHZhbDsKKworCXJjID0gbGVkX3dyaXRlX3JlZyhsZWRzX2RldiwgYWRkciwg cmVnKTsKKwlpZiAocmMpCisJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsCisJCQkiVW5h YmxlIHRvIHdyaXRlIHRvIGFkZHI9JXgsIHJjKCVkKVxuIiwgYWRkciwgcmMpOworCXJldHVybiBy YzsKK30KKworc3RhdGljIHZvaWQgcWNvbV9mbGFzaF9kdW1wX3JlZ3Moc3RydWN0IHFjb21fZmxh c2hfZGV2aWNlICpsZWRzX2RldiwKKwkJCQkgdTggcmVnc1tdLAorCQkJCSB1OCBhcnJheV9zaXpl KQoreworCWludCBpOworCXU4IHZhbDsKKworCXByX2RlYnVnKCI9PT09PSBMRUQgcmVnaXN0ZXIg ZHVtcCBzdGFydCA9PT09PVxuIik7CisJZm9yIChpID0gMDsgaSA8IGFycmF5X3NpemU7IGkrKykg eworCQlsZWRfcmVhZF9yZWcobGVkc19kZXYsIHJlZ3NbaV0sICZ2YWwpOworCQlwcl9kZWJ1Zygi MHgleCA9IDB4JXhcbiIsIGxlZHNfZGV2LT5iYXNlICsgcmVnc1tpXSwgdmFsKTsKKwl9CisJcHJf ZGVidWcoIj09PT09IExFRCByZWdpc3RlciBkdW1wIGVuZCA9PT09PVxuIik7Cit9CisKK3N0YXRp YyB1OCBxY29tX2ZsYXNoX2R1cmF0aW9uX3RvX3JlZyh1MzIgdXMpCit7CisJaWYgKHVzIDwgRkxB U0hfRFVSQVRJT05fTUlOKQorCQl1cyA9IEZMQVNIX0RVUkFUSU9OX01JTjsKKwlyZXR1cm4gKHVz IC0gRkxBU0hfRFVSQVRJT05fTUlOKSAvIEZMQVNIX0RVUkFUSU9OX1NURVA7Cit9CisKK3N0YXRp YyB1OCBxY29tX2ZsYXNoX2N1cnJlbnRfdG9fcmVnKHUzMiB1YSkKK3sKKwlpZiAodWEgPCBGTEFT SF9DVVJSRU5UX01JTikKKwkJdWEgPSBGTEFTSF9DVVJSRU5UX01JTjsKKwlyZXR1cm4gKHVhIC0g RkxBU0hfQ1VSUkVOVF9NSU4pIC8gRkxBU0hfQ1VSUkVOVF9TVEVQOworfQorCitzdGF0aWMgdm9p ZCBjbGFtcF9hbGlnbih1MzIgKnYsIHUzMiBtaW4sIHUzMiBtYXgsIHUzMiBzdGVwKQoreworCSp2 ID0gY2xhbXBfdmFsKCp2LCBtaW4sIG1heCk7CisJaWYgKHN0ZXAgPiAxKQorCQkqdiA9ICgqdiAt IG1pbikgLyBzdGVwICogc3RlcCArIG1pbjsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2Zs ZWRfcmVndWxhdG9yX29wZXJhdGUoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwK KwkJCQkJICAgICBib29sIG9uKQoreworCWludCByYzsKKworCWlmICghb24pCisJCWdvdG8gcmVn dWxhdG9yX3R1cm5fb2ZmOworCisJaWYgKCFsZWRzX2Rldi0+Zmxhc2hfcmVndWxhdG9yX29uKSB7 CisJCWlmIChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKSB7CisJCQlyYyA9IHJlZ3VsYXRvcl9l bmFibGUobGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZyk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZf ZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LAorCQkJCQkiUmVndWxhdG9yIGVuYWJsZSBmYWlsZWQo JWQpXG4iLCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQkJbGVkc19kZXYtPmZsYXNoX3Jl Z3VsYXRvcl9vbiA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworcmVndWxhdG9yX3R1 cm5fb2ZmOgorCWlmIChsZWRzX2Rldi0+Zmxhc2hfcmVndWxhdG9yX29uKSB7CisJCWlmIChsZWRz X2Rldi0+Zmxhc2hfYm9vc3RfcmVnKSB7CisJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRl KGxlZHNfZGV2LAorCQkJCUZMQVNIX0VOQUJMRV9DT05UUk9MLAorCQkJCUZMQVNIX0VOQUJMRV9N QVNLLAorCQkJCUZMQVNIX0RJU0FCTEVfQUxMKTsKKwkJCWlmIChyYykKKwkJCQlkZXZfZXJyKCZs ZWRzX2Rldi0+cGRldi0+ZGV2LAorCQkJCQkiRW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4i LCByYyk7CisKKwkJCXJjID0gcmVndWxhdG9yX2Rpc2FibGUobGVkc19kZXYtPmZsYXNoX2Jvb3N0 X3JlZyk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LAor CQkJCQkiUmVndWxhdG9yIGRpc2FibGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJCXJldHVybiBy YzsKKwkJCX0KKwkJCWxlZHNfZGV2LT5mbGFzaF9yZWd1bGF0b3Jfb24gPSBmYWxzZTsKKwkJfQor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfdG9yY2hfcmVndWxh dG9yX29wZXJhdGUoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKKwkJCQkJICAg ICAgYm9vbCBvbikKK3sKKwlpbnQgcmM7CisKKwlpZiAoIW9uKQorCQlnb3RvIHJlZ3VsYXRvcl90 dXJuX29mZjsKKworCWlmICghbGVkc19kZXYtPnRvcmNoX3JlZ3VsYXRvcl9vbikgeworCQlyYyA9 IHJlZ3VsYXRvcl9lbmFibGUobGVkc19kZXYtPnRvcmNoX2Jvb3N0X3JlZyk7CisJCWlmIChyYykg eworCQkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwKKwkJCQkiUmVndWxhdG9yIGVuYWJs ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJbGVkc19kZXYtPnRv cmNoX3JlZ3VsYXRvcl9vbiA9IHRydWU7CisJfQorCXJldHVybiAwOworCityZWd1bGF0b3JfdHVy bl9vZmY6CisJaWYgKGxlZHNfZGV2LT50b3JjaF9yZWd1bGF0b3Jfb24pIHsKKwkJcmMgPSBxY29t X2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwgRkxBU0hfRU5BQkxFX0NPTlRST0wsCisJCQkJ RkxBU0hfRU5BQkxFX01PRFVMRV9NQVNLLCBGTEFTSF9ESVNBQkxFX0FMTCk7CisJCWlmIChyYykK KwkJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsCisJCQkJIkVuYWJsZSByZWcgd3JpdGUg ZmFpbGVkKCVkKVxuIiwgcmMpOworCisJCXJjID0gcmVndWxhdG9yX2Rpc2FibGUobGVkc19kZXYt PnRvcmNoX2Jvb3N0X3JlZyk7CisJCWlmIChyYykgeworCQkJZGV2X2VycigmbGVkc19kZXYtPnBk ZXYtPmRldiwKKwkJCQkiUmVndWxhdG9yIGRpc2FibGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJ cmV0dXJuIHJjOworCQl9CisJCWxlZHNfZGV2LT50b3JjaF9yZWd1bGF0b3Jfb24gPSBmYWxzZTsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGVkX3NldChzdHJ1 Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCwgYm9vbCBvbikKK3sKKwlpbnQgcmMsIGVycm9yOworCXU4 IGN1cnI7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19sZWRz X2RldihsZWQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZsZWRzX2Rldi0+cGRldi0+ZGV2Owor CisJLyogZHVtcCBmbGFzaCByZWdpc3RlcnMgKi8KKwlwcl9kZWJ1ZygiUmVnZHVtcCBiZWZvcmVc biIpOworCXFjb21fZmxhc2hfZHVtcF9yZWdzKGxlZHNfZGV2LCBmbGFzaF9kZWJ1Z19yZWdzLAor CQkJICAgICBBUlJBWV9TSVpFKGZsYXNoX2RlYnVnX3JlZ3MpKTsKKworCS8qIFNldCBsZWQgY3Vy cmVudCAqLworCWlmIChvbikgeworCQlpZiAobGVkLT50b3JjaF9lbmFibGUpCisJCQljdXJyID0g cWNvbV9mbGFzaF9jdXJyZW50X3RvX3JlZyhsZWQtPmNkZXYubGVkX2NkZXYuYnJpZ2h0bmVzcyk7 CisJCWVsc2UKKwkJCWN1cnIgPSBxY29tX2ZsYXNoX2N1cnJlbnRfdG9fcmVnKGxlZC0+Y2Rldi5i cmlnaHRuZXNzLnZhbCk7CisKKwkJaWYgKGxlZC0+dG9yY2hfZW5hYmxlKSB7CisJCQlpZiAobGVk c19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSA9PSBGTEFTSF9TVUJUWVBFX0RVQUwpIHsKKwkJCQly YyA9IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYsIHRydWUpOwor CQkJCWlmIChyYykgeworCQkJCQlkZXZfZXJyKGRldiwKKwkJCQkJIlRvcmNoIHJlZ3VsYXRvciBv cGVyYXRlIGZhaWxlZCglZClcbiIsCisJCQkJCXJjKTsKKwkJCQkJcmV0dXJuIHJjOworCQkJCX0K KwkJCX0gZWxzZSBpZiAobGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSA9PSBGTEFTSF9TVUJU WVBFX1NJTkdMRSkgeworCQkJCXJjID0gcWNvbV9mbGFzaF9mbGVkX3JlZ3VsYXRvcl9vcGVyYXRl KGxlZHNfZGV2LCB0cnVlKTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJ CSJGbGFzaCByZWd1bGF0b3Igb3BlcmF0ZSBmYWlsZWQoJWQpXG4iLAorCQkJCQlyYyk7CisJCQkJ CWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCQkJCX0KKworCQkJCS8qCisJCQkJICogV3JpdGUgMHg4 MCB0byBNT0RVTEVfRU5BQkxFIGJlZm9yZSB3cml0aW5nCisJCQkJICogMHhFMCBpbiBvcmRlciB0 byBhdm9pZCBhIGhhcmR3YXJlIGJ1ZyBjYXVzZWQKKwkJCQkgKiBieSByZWdpc3RlciB2YWx1ZSBn b2luZyBmcm9tIDB4MDAgdG8gMHhFMC4KKwkJCQkgKi8KKwkJCQlyYyA9IHFjb21fZmxhc2hfbWFz a2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCQlGTEFTSF9FTkFCTEVfQ09OVFJPTCwKKwkJCQkJRkxB U0hfRU5BQkxFX01PRFVMRV9NQVNLLAorCQkJCQlGTEFTSF9FTkFCTEVfTU9EVUxFKTsKKwkJCQlp ZiAocmMpIHsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJCQkiRW5hYmxlIHJlZyB3cml0ZSBmYWls ZWQoJWQpXG4iLAorCQkJCQkJcmMpOworCQkJCQlyZXR1cm4gcmM7CisJCQkJfQorCQkJfQorCisJ CQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCUZMQVNIX0xFRF9V TkxPQ0tfU0VDVVJFLAorCQkJCUZMQVNIX1NFQ1VSRV9NQVNLLCBGTEFTSF9VTkxPQ0tfU0VDVVJF KTsKKwkJCWlmIChyYykgeworCQkJCWRldl9lcnIoZGV2LCAiU2VjdXJlIHJlZyB3cml0ZSBmYWls ZWQoJWQpXG4iLCByYyk7CisJCQkJZ290byBlcnJvcl9yZWdfd3JpdGU7CisJCQl9CisKKwkJCXJj ID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCisJCQkJRkxBU0hfTEVEX1RPUkNI LAorCQkJCUZMQVNIX1RPUkNIX01BU0ssIEZMQVNIX0xFRF9UT1JDSF9FTkFCTEUpOworCQkJaWYg KHJjKSB7CisJCQkJZGV2X2VycihkZXYsICJUb3JjaCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwg cmMpOworCQkJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOworCQkJfQorCisJCQlyYyA9IHFjb21fZmxh c2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCWxlZC0+Y3VycmVudF9hZGRyLAorCQkJCUZM QVNIX0NVUlJFTlRfTUFTSywKKwkJCQljdXJyKTsKKwkJCWlmIChyYykgeworCQkJCWRldl9lcnIo ZGV2LCAiQ3VycmVudCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJCWdvdG8gZXJy b3JfcmVnX3dyaXRlOworCQkJfQorCisJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxl ZHNfZGV2LAorCQkJCWxlZC0+c2Vjb25kX2FkZHIsCisJCQkJRkxBU0hfQ1VSUkVOVF9NQVNLLAor CQkJCWN1cnIpOworCQkJaWYgKHJjKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSIybmQgQ3Vy cmVudCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwKKwkJCQkJcmMpOworCQkJCWdvdG8gZXJyb3Jf cmVnX3dyaXRlOworCQkJfQorCisJCQlxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2Rldiwg RkxBU0hfTUFYX0NVUlIsCisJCQkJRkxBU0hfQ1VSUkVOVF9NQVNLLAorCQkJCVRPUkNIX01BWF9M RVZFTCk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJIk1heCBjdXJyZW50 IHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAorCQkJCQlyYyk7CisJCQkJZ290byBlcnJvcl9yZWdf d3JpdGU7CisJCQl9CisKKwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYs CisJCQkJRkxBU0hfRU5BQkxFX0NPTlRST0wsCisJCQkJRkxBU0hfRU5BQkxFX01BU0ssCisJCQkJ bGVkc19kZXYtPnRvcmNoX2VuYWJsZSk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfZXJyKGRldiwg IkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJCWdvdG8gZXJyb3JfcmVn X3dyaXRlOworCQkJfQorCisJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2 LAorCQkJCUZMQVNIX0xFRF9TVFJPQkVfQ1RSTCwKKwkJCQlGTEFTSF9TVFJPQkVfU1csCisJCQkJ RkxBU0hfU1RST0JFX1NXKTsKKwkJCWlmIChyYykgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQki TEVEICVkIHN0cm9iZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwKKwkJCQkJbGVkLT5pZCwgcmMp OworCQkJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOworCQkJfQorCQl9IGVsc2UgeworCQkJcmMgPSBx Y29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYsIHRydWUpOworCQkJaWYg KHJjKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJGbGFzaCByZWd1bGF0b3Igb3BlcmF0ZSBm YWlsZWQoJWQpXG4iLAorCQkJCQlyYyk7CisJCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7CisJCQl9 CisKKwkJCS8qIFNldCBmbGFzaCBzYWZldHkgdGltZXIgKi8KKwkJCXJjID0gcWNvbV9mbGFzaF9t YXNrZWRfd3JpdGUobGVkc19kZXYsCisJCQkJRkxBU0hfU0FGRVRZX1RJTUVSLAorCQkJCUZMQVNI X1NBRkVUWV9USU1FUl9NQVNLLAorCQkJCXFjb21fZmxhc2hfZHVyYXRpb25fdG9fcmVnKGxlZC0+ Y2Rldi50aW1lb3V0LnZhbCkpOworCQkJaWYgKHJjKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJ CSJTYWZldHkgdGltZXIgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCisJCQkJCXJjKTsKKwkJCQln b3RvIGVycm9yX2ZsYXNoX3NldDsKKwkJCX0KKworCQkJLyogU2V0IG1heCBjdXJyZW50ICovCisJ CQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCUZMQVNIX01BWF9D VVJSLCBGTEFTSF9DVVJSRU5UX01BU0ssCisJCQkJRkxBU0hfTUFYX0xFVkVMKTsKKwkJCWlmIChy YykgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkiTWF4IGN1cnJlbnQgcmVnIHdyaXRlIGZhaWxl ZCglZClcbiIsCisJCQkJCXJjKTsKKwkJCQlnb3RvIGVycm9yX2ZsYXNoX3NldDsKKwkJCX0KKwor CQkJLyogU2V0IGNsYW1wIGN1cnJlbnQgKi8KKwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3Jp dGUobGVkc19kZXYsCisJCQkJRkxBU0hfQ0xBTVBfQ1VSUiwKKwkJCQlGTEFTSF9DVVJSRU5UX01B U0ssCisJCQkJcWNvbV9mbGFzaF9jdXJyZW50X3RvX3JlZyhsZWQtPmNsYW1wX2N1cnIpKTsKKwkJ CWlmIChyYykgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkiQ2xhbXAgY3VycmVudCByZWcgd3Jp dGUgZmFpbGVkKCVkKVxuIiwKKwkJCQkJcmMpOworCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0Owor CQkJfQorCisJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCWxl ZC0+Y3VycmVudF9hZGRyLAorCQkJCUZMQVNIX0NVUlJFTlRfTUFTSywKKwkJCQljdXJyKTsKKwkJ CWlmIChyYykgeworCQkJCWRldl9lcnIoZGV2LCAiQ3VycmVudCByZWcgd3JpdGUgZmFpbGVkKCVk KVxuIiwgcmMpOworCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCQkJfQorCisJCQlyYyA9IHFj b21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCUZMQVNIX0VOQUJMRV9DT05UUk9M LAorCQkJCWxlZC0+ZW5hYmxlX21vZHVsZSwKKwkJCQlsZWQtPmVuYWJsZV9tb2R1bGUpOworCQkJ aWYgKHJjKSB7CisJCQkJZGV2X2VycihkZXYsICJFbmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClc biIsIHJjKTsKKwkJCQlnb3RvIGVycm9yX2ZsYXNoX3NldDsKKwkJCX0KKworCQkJLyogVE9ETyB0 cnkgdG8gbm90IGJ1c3kgd2FpdCovCisJCQltZGVsYXkoMSk7CisKKwkJCWlmICghbGVkLT5zdHJv YmVfdHlwZSkgeworCQkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCisJ CQkJCUZMQVNIX0xFRF9TVFJPQkVfQ1RSTCwKKwkJCQkJbGVkLT50cmlnZ2VyX2ZsYXNoLAorCQkJ CQlsZWQtPnRyaWdnZXJfZmxhc2gpOworCQkJCWlmIChyYykgeworCQkJCQlkZXZfZXJyKGRldiwK KwkJCQkJIkxFRCAlZCBzdHJvYmUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCisJCQkJCWxlZC0+ aWQsIHJjKTsKKwkJCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7CisJCQkJfQorCQkJfSBlbHNlIHsK KwkJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJCQlGTEFTSF9M RURfU1RST0JFX0NUUkwsCisJCQkJCShsZWQtPnRyaWdnZXJfZmxhc2ggfCBGTEFTSF9TVFJPQkVf SFcpLAorCQkJCQkobGVkLT50cmlnZ2VyX2ZsYXNoIHwgRkxBU0hfU1RST0JFX0hXKSk7CisJCQkJ aWYgKHJjKSB7CisJCQkJCWRldl9lcnIoZGV2LAorCQkJCQkiTEVEICVkIHN0cm9iZSByZWcgd3Jp dGUgZmFpbGVkKCVkKVxuIiwKKwkJCQkJbGVkLT5pZCwgcmMpOworCQkJCQlnb3RvIGVycm9yX2Zs YXNoX3NldDsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlyYyA9IHFjb21fZmxhc2hf bWFza2VkX3dyaXRlKGxlZHNfZGV2LAorCQkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAorCQkJbGVk LT50cmlnZ2VyX2ZsYXNoLAorCQkJRkxBU0hfRElTQUJMRV9BTEwpOworCQlpZiAocmMpIHsKKwkJ CWRldl9lcnIoZGV2LAorCQkJCSJMRUQgJWQgZmxhc2ggd3JpdGUgZmFpbGVkKCVkKVxuIiwgbGVk LT5pZCwgcmMpOworCQkJaWYgKGxlZC0+dG9yY2hfZW5hYmxlKQorCQkJCWdvdG8gZXJyb3JfdG9y Y2hfc2V0OworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCQl9CisKKwkJLyog VE9ETyB0cnkgdG8gbm90IGJ1c3kgd2FpdCovCisJCW1kZWxheSgyKTsKKwkJdWRlbGF5KDE2MCk7 CisKKwkJaWYgKGxlZC0+dG9yY2hfZW5hYmxlKSB7CisJCQlyYyA9IHFjb21fZmxhc2hfbWFza2Vk X3dyaXRlKGxlZHNfZGV2LAorCQkJCUZMQVNIX0xFRF9VTkxPQ0tfU0VDVVJFLAorCQkJCUZMQVNI X1NFQ1VSRV9NQVNLLCBGTEFTSF9VTkxPQ0tfU0VDVVJFKTsKKwkJCWlmIChyYykgeworCQkJCWRl dl9lcnIoZGV2LCAiU2VjdXJlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCQkJZ290 byBlcnJvcl90b3JjaF9zZXQ7CisJCQl9CisKKwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3Jp dGUobGVkc19kZXYsCisJCQkJCUZMQVNIX0xFRF9UT1JDSCwKKwkJCQkJRkxBU0hfVE9SQ0hfTUFT SywKKwkJCQkJRkxBU0hfTEVEX1RPUkNIX0RJU0FCTEUpOworCQkJaWYgKHJjKSB7CisJCQkJZGV2 X2VycihkZXYsICJUb3JjaCByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJCWdvdG8g ZXJyb3JfdG9yY2hfc2V0OworCQkJfQorCisJCQlpZiAobGVkc19kZXYtPnBlcmlwaGVyYWxfc3Vi dHlwZSA9PSBGTEFTSF9TVUJUWVBFX0RVQUwpIHsKKwkJCQlyYyA9IHFjb21fZmxhc2hfdG9yY2hf cmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYsZmFsc2UpOworCQkJCWlmIChyYykgeworCQkJCQlk ZXZfZXJyKGRldiwKKwkJCQkJCSJUb3JjaCByZWd1bGF0b3Igb3BlcmF0ZSBmYWlsZWQoJWQpXG4i LAorCQkJCQkJcmMpOworCQkJCQlyZXR1cm4gcmM7CisJCQkJfQorCQkJfSBlbHNlIGlmIChsZWRz X2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IEZMQVNIX1NVQlRZUEVfU0lOR0xFKSB7CisJCQkJ cmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYsIGZhbHNlKTsK KwkJCQlpZiAocmMpIHsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJCQkiRmxhc2ggcmVndWxhdG9y IG9wZXJhdGUgZmFpbGVkKCVkKVxuIiwKKwkJCQkJCXJjKTsKKwkJCQkJcmV0dXJuIHJjOworCQkJ CX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVk c19kZXYsCisJCQkJRkxBU0hfRU5BQkxFX0NPTlRST0wsCisJCQkJbGVkLT5lbmFibGVfbW9kdWxl ICYKKwkJCQl+RkxBU0hfRU5BQkxFX01PRFVMRV9NQVNLLAorCQkJCUZMQVNIX0RJU0FCTEVfQUxM KTsKKwkJCWlmIChyYykgeworCQkJCWRldl9lcnIoZGV2LCAiRW5hYmxlIHJlZyB3cml0ZSBmYWls ZWQoJWQpXG4iLCByYyk7CisJCQkJaWYgKGxlZC0+dG9yY2hfZW5hYmxlKQorCQkJCQlnb3RvIGVy cm9yX3RvcmNoX3NldDsKKwkJCQllbHNlCisJCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCQkJ fQorCisJCQlyYyA9IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb3BlcmF0ZShsZWRzX2Rldiwg ZmFsc2UpOworCQkJaWYgKHJjKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJGbGFzaCByZWd1 bGF0b3Igb3BlcmF0ZSBmYWlsZWQoJWQpXG4iLAorCQkJCQlyYyk7CisJCQkJcmV0dXJuIHJjOwor CQkJfQorCQl9CisJfQorCisJcHJfZGVidWcoIlJlZ2R1bXAgYWZ0ZXJcbiIpOworCXFjb21fZmxh c2hfZHVtcF9yZWdzKGxlZHNfZGV2LCBmbGFzaF9kZWJ1Z19yZWdzLCBBUlJBWV9TSVpFKGZsYXNo X2RlYnVnX3JlZ3MpKTsKKworCXJldHVybiAwOworCitlcnJvcl9yZWdfd3JpdGU6CisJaWYgKGxl ZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gRkxBU0hfU1VCVFlQRV9TSU5HTEUpCisJCWdv dG8gZXJyb3JfZmxhc2hfc2V0OworCitlcnJvcl90b3JjaF9zZXQ6CisJZXJyb3IgPSBxY29tX2Zs YXNoX3RvcmNoX3JlZ3VsYXRvcl9vcGVyYXRlKGxlZHNfZGV2LCBmYWxzZSk7CisJaWYgKGVycm9y KSB7CisJCWRldl9lcnIoZGV2LCAiVG9yY2ggcmVndWxhdG9yIG9wZXJhdGUgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCXJldHVybiByYzsKKworZXJyb3JfZmxhc2hf c2V0OgorCWVycm9yID0gcWNvbV9mbGFzaF9mbGVkX3JlZ3VsYXRvcl9vcGVyYXRlKGxlZHNfZGV2 LCBmYWxzZSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiRmxhc2ggcmVndWxhdG9y IG9wZXJhdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCXJldHVy biByYzsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFz c2RldiAqbGVkX2NkZXYsCisJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQorewor CXN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiA9IGxjZGV2X3RvX2ZsY2Rldihs ZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNkZXZfdG9fbGVkKGZs ZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19s ZWRzX2RldihsZWQpOworCXUzMiB2YWwgPSB2YWx1ZTsKKwlpbnQgcmM7CisJYm9vbCBvbjsKKwor CWlmICh2YWwgPiBsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MpIHsKKwkJZGV2X2VycigmbGVkc19k ZXYtPnBkZXYtPmRldiwgIkludmFsaWQgYnJpZ2h0bmVzcyB2YWx1ZVxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmICh2YWwpIHsKKwkJb24gPSB0cnVlOworCQljbGFtcF9hbGlnbigm dmFsLCBGTEFTSF9DVVJSRU5UX01JTiwgbGVkX2NkZXYtPm1heF9icmlnaHRuZXNzLAorCQkJICAg IEZMQVNIX0NVUlJFTlRfU1RFUCk7CisJCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gdmFsOworCQls ZWQtPnRvcmNoX2VuYWJsZSA9IHRydWU7CisJfSBlbHNlIHsKKwkJb24gPSBmYWxzZTsKKwl9CisK KwltdXRleF9sb2NrKCZsZWRzX2Rldi0+bG9jayk7CisJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfc2V0 KGxlZCwgb24pOworCWlmIChyYyA8IDApCisJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYs ICJGTEFTSCBzZXQgYnJpZ2h0bmVzcyBmYWlsZWQgKCVkKVxuIiwgcmMpOworCW11dGV4X3VubG9j aygmbGVkc19kZXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxY29tX2Zs YXNoX2ZsZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9j ZGV2LAorCQkJCQkgIHUzMiBicmlnaHRuZXNzKQoreworCWNsYW1wX2FsaWduKCZicmlnaHRuZXNz LCBGTEFTSF9DVVJSRU5UX01JTiwgZmxlZF9jZGV2LT5icmlnaHRuZXNzLm1heCwKKwkJICAgIEZM QVNIX0NVUlJFTlRfU1RFUCk7CisJZmxlZF9jZGV2LT5icmlnaHRuZXNzLnZhbCA9IGJyaWdodG5l c3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGVkX3N0cm9iZV9z ZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9jZGV2LAorCQkJCSAgICAgIGJvb2wg c3RhdGUpCit7CisJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNkZXZfdG9fbGVkKGZs ZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19s ZWRzX2RldihsZWQpOworCWludCByYzsKKworCWxlZC0+dG9yY2hfZW5hYmxlID0gZmFsc2U7CisK KwltdXRleF9sb2NrKCZsZWRzX2Rldi0+bG9jayk7CisJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfc2V0 KGxlZCwgc3RhdGUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwltdXRleF91bmxvY2so JmxlZHNfZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxh c2hfZmxlZF9zdHJvYmVfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiwK KwkJCQkgICAgICBib29sICpzdGF0ZSkKK3sKKwkvL1RPRE8KKwkqc3RhdGUgPSAwOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF90aW1lb3V0X3NldChzdHJ1Y3Qg bGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYsCisJCQkJICAgICAgIHUzMiB0aW1lb3V0KQor eworCWZsZWRfY2Rldi0+dGltZW91dC52YWwgPSB0aW1lb3V0OworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9mYXVsdF9nZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9m bGFzaCAqZmxlZF9jZGV2LAorCQkJCSAgICAgdTMyICpmYXVsdCkKK3sKKwkvL1RPRE8KKwkqZmF1 bHQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxlZF9mbGFzaF9v cHMgZmxhc2hfb3BzID0geworCS5mbGFzaF9icmlnaHRuZXNzX3NldAk9IHFjb21fZmxhc2hfZmxl ZF9icmlnaHRuZXNzX3NldCwKKwkuc3Ryb2JlX3NldAkJPSBxY29tX2ZsYXNoX2ZsZWRfc3Ryb2Jl X3NldCwKKwkuc3Ryb2JlX2dldAkJPSBxY29tX2ZsYXNoX2ZsZWRfc3Ryb2JlX2dldCwKKwkudGlt ZW91dF9zZXQJCT0gcWNvbV9mbGFzaF9mbGVkX3RpbWVvdXRfc2V0LAorCS5mYXVsdF9nZXQJCT0g cWNvbV9mbGFzaF9mbGVkX2ZhdWx0X2dldCwKK307CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9m bGNkZXZfc2V0dXAoc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQsCisJCQkJICAgc3RydWN0IGRl dmljZV9ub2RlICpub2RlKQoreworCWludCByYzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCktPnBkZXY7CisJc3RydWN0IGxlZF9pbml0X2RhdGEg aW5pdF9kYXRhID0ge307CisKKwlpbml0X2RhdGEuZndub2RlID0gb2ZfZndub2RlX2hhbmRsZShu b2RlKTsKKwlpbml0X2RhdGEuZGV2aWNlbmFtZSA9ICJxY29tLXNwbWktZmxhc2giOworCWluaXRf ZGF0YS5kZWZhdWx0X2xhYmVsID0gImZsYXNoIjsKKworCWxlZC0+Y2Rldi5sZWRfY2Rldi5icmln aHRuZXNzX3NldF9ibG9ja2luZyAgICA9IHFjb21fZmxhc2hfbGVkX3NldDsKKworCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIobm9kZSwgImxlZC1tYXgtbWljcm9hbXAiLAorCQkJCSAgJmxlZC0+ Y2Rldi5sZWRfY2Rldi5tYXhfYnJpZ2h0bmVzcyk7CisJaWYgKHJjIDwgMCkgeworCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJGYWlsdXJlIHJlYWRpbmcgbWF4X2N1cnJlbnQsIHJjID0gICVkXG4iLCBy Yyk7CisJCXJldHVybiByYzsKKwl9CisJbGVkLT5jZGV2LmxlZF9jZGV2Lm1heF9icmlnaHRuZXNz ID0gbWluKCh1MzIpIGxlZC0+Y2Rldi5sZWRfY2Rldi5tYXhfYnJpZ2h0bmVzcywKKwkJCQkJCSh1 MzIpIEZMQVNIX1RPUkNIX0NVUlJFTlRfTUFYKTsKKworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIobm9kZSwgImZsYXNoLW1heC1taWNyb2FtcCIsICZsZWQtPmNkZXYuYnJpZ2h0bmVzcy5tYXgp OworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbHVyZSByZWFkaW5n IG1heF9jdXJyZW50LCByYyA9ICAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWxlZC0+ Y2Rldi5icmlnaHRuZXNzLm1heCA9IG1pbigodTMyKSBsZWQtPmNkZXYuYnJpZ2h0bmVzcy5tYXgs CisJCQkJKHUzMikgRkxBU0hfQ1VSUkVOVF9NQVgpOworCWxlZC0+Y2Rldi5icmlnaHRuZXNzLm1p biA9IEZMQVNIX0NVUlJFTlRfTUlOOworCWxlZC0+Y2Rldi5icmlnaHRuZXNzLnN0ZXAgPSBGTEFT SF9DVVJSRU5UX1NURVA7CisJbGVkLT5jZGV2LmJyaWdodG5lc3MudmFsID0gbGVkLT5jZGV2LmJy aWdodG5lc3MubWF4OworCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAiZmxhc2gt bWF4LXRpbWVvdXQtdXMiLCAmbGVkLT5jZGV2LnRpbWVvdXQubWF4KTsKKwlpZiAocmMgPCAwKSB7 CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWx1cmUgcmVhZGluZyBtYXhfdGltZW91dCwgcmMg PSAgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlsZWQtPmNkZXYudGltZW91dC5tYXgg PSBtaW4oKHUzMikgbGVkLT5jZGV2LnRpbWVvdXQubWF4LAorCQkJCSAgICAodTMyKSBGTEFTSF9E VVJBVElPTl9NQVgpOworCWxlZC0+Y2Rldi50aW1lb3V0Lm1pbiA9IEZMQVNIX0RVUkFUSU9OX01J TjsKKwlsZWQtPmNkZXYudGltZW91dC5zdGVwID0gRkxBU0hfRFVSQVRJT05fU1RFUDsKKwlsZWQt PmNkZXYudGltZW91dC52YWwgPSBsZWQtPmNkZXYudGltZW91dC5tYXg7CisKKwlsZWQtPmNkZXYu b3BzID0gJmZsYXNoX29wczsKKwlsZWQtPmNkZXYubGVkX2NkZXYuZmxhZ3MgfD0gTEVEX0RFVl9D QVBfRkxBU0g7CisKKwlyYyA9IGxlZF9jbGFzc2Rldl9mbGFzaF9yZWdpc3Rlcl9leHQoJnBkZXYt PmRldiwgJmxlZC0+Y2RldiwgJmluaXRfZGF0YSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBsZWQgJWQscmM9JWRcbiIsIGxlZC0+aWQsIHJj KTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21f Zmxhc2hfc2V0dXBfZmxhc2hfcmVncyhzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCkKK3sKKwlp bnQgcmM7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19sZWRz X2RldihsZWQpOworCisJLyogU2V0IGhlYWRyb29tICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tl ZF93cml0ZShsZWRzX2RldiwgRkxBU0hfSEVBRFJPT00sCisJCUZMQVNIX0hFQURST09NX01BU0ss IGxlZC0+aGVhZHJvb20pOworCWlmIChyYykgeworCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ ZGV2LCAiSGVhZHJvb20gcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJj OworCX0KKworCS8qIFNldCBzdGFydHVwIGRlbGF5ICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tl ZF93cml0ZShsZWRzX2RldiwKKwkJRkxBU0hfU1RBUlRVUF9ERUxBWSwgRkxBU0hfU1RBUlRVUF9E TFlfTUFTSywKKwkJbGVkLT5zdGFydHVwX2RseSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmxl ZHNfZGV2LT5wZGV2LT5kZXYsCisJCQkiU3RhcnR1cCBkZWxheSByZWcgd3JpdGUgZmFpbGVkKCVk KVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogU2V0IHRpbWVyIGNvbnRyb2wgLSBz YWZldHkgb3Igd2F0Y2hkb2cgKi8KKwlpZiAobGVkLT5zYWZldHlfdGltZXIpIHsKKwkJcmMgPSBx Y29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKKwkJCUZMQVNIX0xFRF9UTVJfQ1RSTCwK KwkJCUZMQVNIX1RNUl9NQVNLLCBGTEFTSF9UTVJfU0FGRVRZKTsKKwkJaWYgKHJjKSB7CisJCQlk ZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LAorCQkJCSJMRUQgdGltZXIgY3RybCByZWcgd3Jp dGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJLyogZHVt cCBmbGFzaCByZWdpc3RlcnMgKi8KKwlxY29tX2ZsYXNoX2R1bXBfcmVncyhsZWRzX2RldiwgZmxh c2hfZGVidWdfcmVncywgQVJSQVlfU0laRShmbGFzaF9kZWJ1Z19yZWdzKSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2dldF9jb25maWdfZmxhc2goc3RydWN0IHFj b21fZmxhc2hfbGVkICpsZWQsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkK K3sKKwlpbnQgcmM7CisJdTMyIHZhbDsKKwljb25zdCBjaGFyICp0ZW1wX3N0cmluZzsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmbGVkX3RvX2xlZHNfZGV2KGxlZCktPnBkZXYtPmRldjsKKworCXJj ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImxlZC1zb3VyY2VzIiwgJmxlZC0+aWQpOwor CWlmIChyYyA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsdXJlIHJlYWRpbmcgbGVkIGlkLCBy YyA9ICAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJbGVkLT5kZWZhdWx0X29uID0g ZmFsc2U7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAiZGVmYXVsdC1zdGF0 ZSIsICZ0ZW1wX3N0cmluZyk7CisJaWYgKCFyYykgeworCQlpZiAoc3RybmNtcCh0ZW1wX3N0cmlu ZywgIm9uIiwgc2l6ZW9mKCJvbiIpKSA9PSAwKQorCQkJbGVkLT5kZWZhdWx0X29uID0gdHJ1ZTsK Kwl9IGVsc2UgaWYgKHJjICE9IC1FSU5WQUwpCisJCXJldHVybiByYzsKKworCWxlZC0+dHVybl9v ZmZfZGVsYXlfbXMgPSAwOworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20s dHVybi1vZmYtZGVsYXktbXMiLCAmdmFsKTsKKwlpZiAoIXJjKQorCQlsZWQtPnR1cm5fb2ZmX2Rl bGF5X21zID0gdmFsOworCWVsc2UgaWYgKHJjICE9IC1FSU5WQUwpCisJCXJldHVybiByYzsKKwor CWlmIChsZWQtPmlkID09IFFDT01fRkxBU0hfSURfTEVEMCkgeworCQlsZWQtPmVuYWJsZV9tb2R1 bGUgPSBGTEFTSF9FTkFCTEVfTEVEXzA7CisJCWxlZC0+Y3VycmVudF9hZGRyID0gRkxBU0hfTEVE XzBfQ1VSUjsKKwkJbGVkLT50cmlnZ2VyX2ZsYXNoID0gRkxBU0hfTEVEXzBfT1VUUFVUOworCisJ CWxlZC0+c2Vjb25kX2FkZHIgPSBGTEFTSF9MRURfMV9DVVJSOworCX0gZWxzZSBpZiAobGVkLT5p ZCA9PSBRQ09NX0ZMQVNIX0lEX0xFRDEpIHsKKwkJbGVkLT5lbmFibGVfbW9kdWxlID0gRkxBU0hf RU5BQkxFX0xFRF8xOworCQlsZWQtPmN1cnJlbnRfYWRkciA9IEZMQVNIX0xFRF8xX0NVUlI7CisJ CWxlZC0+dHJpZ2dlcl9mbGFzaCA9IEZMQVNIX0xFRF8xX09VVFBVVDsKKworCQlsZWQtPnNlY29u ZF9hZGRyID0gRkxBU0hfTEVEXzBfQ1VSUjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIlVu a25vd24gZmxhc2ggTEVEIG5hbWUgZ2l2ZW5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLGhlYWRyb29tIiwgJnZhbCk7 CisJaWYgKCFyYykKKwkJbGVkLT5oZWFkcm9vbSA9ICh1OCkgdmFsOworCWVsc2UgaWYgKHJjID09 IC1FSU5WQUwpCisJCWxlZC0+aGVhZHJvb20gPSBRQ09NX1NQTUlfRkxBU0hfSEVBRFJPT01fNTAw TVY7CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLGNsYW1wLWN1cnIi LCAmdmFsKTsKKwlpZiAoIXJjKQorCQlsZWQtPmNsYW1wX2N1cnIgPSB2YWw7CisJZWxzZSBpZiAo cmMgPT0gLUVJTlZBTCkKKwkJbGVkLT5jbGFtcF9jdXJyID0gRkxBU0hfREVGQVVMVF9DTEFNUDsK KworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3RhcnR1cC1kbHkiLCAm dmFsKTsKKwlpZiAoIXJjKQorCQlsZWQtPnN0YXJ0dXBfZGx5ID0gKHU4KSB2YWw7CisJZWxzZSBp ZiAocmMgPT0gLUVJTlZBTCkKKwkJbGVkLT5zdGFydHVwX2RseSA9IFFDT01fU1BNSV9GTEFTSF9T VEFSVFVQX0RMWV8xMjhVUzsKKworCWxlZC0+c2FmZXR5X3RpbWVyID0gb2ZfcHJvcGVydHlfcmVh ZF9ib29sKG5vZGUsICJxY29tLHNhZmV0eS10aW1lciIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcWNvbV9mbGFzaF9zZXR1cF9yZWdzKHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAq bGVkc19kZXYpCit7CisJaW50IHJjOworCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShs ZWRzX2RldiwKKwkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAorCQlGTEFTSF9TVFJPQkVfTUFTSywg RkxBU0hfRElTQUJMRV9BTEwpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRl di0+ZGV2LCAiTEVEIGZsYXNoIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJj OworCX0KKworCS8qIERpc2FibGUgZmxhc2ggTEVEIG1vZHVsZSAqLworCXJjID0gcWNvbV9mbGFz aF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIEZMQVNIX0VOQUJMRV9DT05UUk9MLAorCQlGTEFTSF9F TkFCTEVfTU9EVUxFX01BU0ssIEZMQVNIX0RJU0FCTEVfQUxMKTsKKwlpZiAocmMpIHsKKwkJZGV2 X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogU2V0IFZyZWcgZm9yY2UgKi8KKwlyYyA9 IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9WUkVHX09LX0ZPUkNFLAor CQlGTEFTSF9WUkVHX01BU0ssIEZMQVNIX0hXX1ZSRUdfT0spOworCWlmIChyYykgeworCQlkZXZf ZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LCAiVnJlZyBPSyByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogU2V0IHNlbGYgZmF1bHQgY2hlY2sgKi8K KwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9GQVVMVF9ERVRF Q1QsCisJCUZMQVNIX0ZBVUxUX0RFVEVDVF9NQVNLLCBGTEFTSF9TRUxGQ0hFQ0tfRElTQUJMRSk7 CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsCisJCQkiRmF1bHQg ZGV0ZWN0IHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisK KwkvKiBTZXQgbWFzayBlbmFibGUgKi8KKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxl ZHNfZGV2LCBGTEFTSF9NQVNLX0VOQUJMRSwKKwkJRkxBU0hfTUFTS19SRUdfTUFTSywgRkxBU0hf TUFTS18xKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwgIk1h c2sgZW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9 CisKKwkvKiBTZXQgcmFtcCByYXRlICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShs ZWRzX2RldiwgRkxBU0hfUkFNUF9SQVRFLAorCQlGTEFTSF9SQU1QX1JBVEVfTUFTSywgMHhCRik7 CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsICJSYW1wIHJhdGUg cmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIEVu YWJsZSBWUEhfUFdSX0RST09QIGFuZCBzZXQgdGhyZXNob2xkIHRvIDIuOVYgKi8KKwlyYyA9IHFj b21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9WUEhfUFdSX0RST09QLAorCQkJ CQlGTEFTSF9WUEhfUFdSX0RST09QX01BU0ssIDB4QzIpOworCWlmIChyYykgeworCQlkZXZfZXJy KCZsZWRzX2Rldi0+cGRldi0+ZGV2LAorCQkJIkZMQVNIX1ZQSF9QV1JfRFJPT1AgcmVnIHdyaXRl IGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHFjb21fZmxhc2hfc2V0dXBfbGVkKHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAq bGVkLAorCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9 IHFjb21fZmxhc2hfZ2V0X2NvbmZpZ19mbGFzaChsZWQsIG5vZGUpOworCWlmIChyYyA8IDApIHsK KwkJZGV2X2VycigmbGVkX3RvX2xlZHNfZGV2KGxlZCktPnBkZXYtPmRldiwKKwkJCSJVbmFibGUg dG8gcmVhZCBmbGFzaCBjb25maWcgZGF0YVxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9 IHFjb21fZmxhc2hfc2V0dXBfZmxhc2hfcmVncyhsZWQpOworCWlmIChyYykgeworCQlkZXZfZXJy KCZsZWRfdG9fbGVkc19kZXYobGVkKS0+cGRldi0+ZGV2LAorCQkJIkZMQVNIIGluaXRpYWxpemUg ZmFpbGVkKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBxY29tX2ZsYXNo X2ZsY2Rldl9zZXR1cChsZWQsIG5vZGUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwor CS8qIGNvbmZpZ3VyZSBkZWZhdWx0IHN0YXRlICovCisJaWYgKGxlZC0+ZGVmYXVsdF9vbikgewor CQlsZWQtPmNkZXYubGVkX2NkZXYuYnJpZ2h0bmVzcyA9IGxlZC0+Y2Rldi5sZWRfY2Rldi5tYXhf YnJpZ2h0bmVzczsKKwkJbGVkLT50b3JjaF9lbmFibGUgPSB0cnVlOworCQltdXRleF9sb2NrKCZs ZWRfdG9fbGVkc19kZXYobGVkKS0+bG9jayk7CisJCXJjID0gcWNvbV9mbGFzaF9mbGVkX3NldChs ZWQsIHRydWUpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQltdXRleF91bmxvY2so JmxlZF90b19sZWRzX2RldihsZWQpLT5sb2NrKTsKKwl9IGVsc2UgeworCQlsZWQtPmNkZXYubGVk X2NkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgcWNvbV9mbGFzaF9zZXR1cF9sZWRzX2RldmljZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZp Y2UgKmxlZHNfZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIHJlZzsKKwlpbnQgcmM7CisKKwlsZWRz X2Rldi0+cGRldiA9IHBkZXY7CisKKwlsZWRzX2Rldi0+cmVnbWFwID0gZGV2X2dldF9yZWdtYXAo cGRldi0+ZGV2LnBhcmVudCwgTlVMTCk7CisJaWYgKCFsZWRzX2Rldi0+cmVnbWFwKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInJlZyIsICZy ZWcpOworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbHVyZSByZWFk aW5nIHJlZywgcmMgPSAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWxlZHNfZGV2LT5i YXNlID0gcmVnOworCisJcWNvbV9mbGFzaF9zZXR1cF9yZWdzKGxlZHNfZGV2KTsKKworCWlmIChv Zl9maW5kX3Byb3BlcnR5KG5vZGUsICJmbGFzaC1ib29zdC1zdXBwbHkiLCBOVUxMKSkgeworCQls ZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAiZmxh c2gtYm9vc3QiKTsKKwkJaWYgKElTX0VSUihsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKSkgewor CQkJcmMgPSBQVFJfRVJSKGxlZHNfZGV2LT5mbGFzaF9ib29zdF9yZWcpOworCQkJZGV2X2Vycigm cGRldi0+ZGV2LCAiUmVndWxhdG9yIGdldCBmYWlsZWQoJWQpXG4iLCByYyk7CisJCQlyZWd1bGF0 b3JfcHV0KGxlZHNfZGV2LT5mbGFzaF9ib29zdF9yZWcpOworCQkJbGVkc19kZXYtPmZsYXNoX2Jv b3N0X3JlZyA9IE5VTEw7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlpZiAob2ZfZmluZF9w cm9wZXJ0eShub2RlLCAidG9yY2gtYm9vc3Qtc3VwcGx5IiwgTlVMTCkpIHsKKwkJbGVkc19kZXYt PnRvcmNoX2Jvb3N0X3JlZyA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInRvcmNoLWJvb3N0 Iik7CisJCWlmIChJU19FUlIobGVkc19kZXYtPnRvcmNoX2Jvb3N0X3JlZykpIHsKKwkJCXJjID0g UFRSX0VSUihsZWRzX2Rldi0+dG9yY2hfYm9vc3RfcmVnKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRl diwgIlRvcmNoIHJlZ3VsYXRvciBnZXQgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJcmVndWxhdG9y X3B1dChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKTsKKwkJCXJlZ3VsYXRvcl9wdXQobGVkc19k ZXYtPnRvcmNoX2Jvb3N0X3JlZyk7CisJCQlsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnID0gTlVM TDsKKwkJCWxlZHNfZGV2LT50b3JjaF9ib29zdF9yZWcgPSBOVUxMOworCQkJcmV0dXJuIHJjOwor CQl9CisJCWxlZHNfZGV2LT50b3JjaF9lbmFibGUgPSBGTEFTSF9FTkFCTEVfTU9EVUxFOworCX0g ZWxzZSB7CisJCWxlZHNfZGV2LT50b3JjaF9lbmFibGUgPSBGTEFTSF9FTkFCTEVfQUxMOworCX0K KworCXJjID0gbGVkX3JlYWRfcmVnKGxlZHNfZGV2LCBGTEFTSF9QRVJJUEhFUkFMX1NVQlRZUEUs CisJCQkgICZsZWRzX2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlKTsKKwlpZiAocmMpIHsKKwkJZGV2 X2VycigmcGRldi0+ZGV2LAorCQkJIlVuYWJsZSB0byByZWFkIGZyb20gYWRkcj0leCwgcmMoJWQp XG4iLAorCQkJRkxBU0hfUEVSSVBIRVJBTF9TVUJUWVBFLCByYyk7CisJfQorCisJbXV0ZXhfaW5p dCgmbGVkc19kZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9m bGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2Rl djsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHFj b21fZmxhc2hfbGVkICpsZWQ7CisJc3RydWN0IGRldmljZV9ub2RlICp0ZW1wOworCWludCByYywg aSwgcGFyc2VkX2xlZHMgPSAwOworCisJbGVkc19kZXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2Yoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRzX2Rl dikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IHFjb21fZmxhc2hfc2V0dXBfbGVkc19kZXZp Y2UobGVkc19kZXYsIG5vZGUsIHBkZXYpOworCWlmIChyYykgeworCQlwcl9kZWJ1ZygiUHJvYmUg ZmFpbGVkIHNldHRpbmcgdXAgYmFzZSAoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWRzX2Rldik7CisKKwlmb3JfZWFjaF9jaGls ZF9vZl9ub2RlKG5vZGUsIHRlbXApIHsKKwkJbGVkID0gJmxlZHNfZGV2LT5sZWRzW3BhcnNlZF9s ZWRzXTsKKworCQlyYyA9IHFjb21fZmxhc2hfc2V0dXBfbGVkKGxlZCwgdGVtcCk7CisJCWlmIChy YykgeworCQkJZm9yIChpID0gMDsgaSA8IHBhcnNlZF9sZWRzOyBpKyspCisJCQkJbGVkX2NsYXNz ZGV2X2ZsYXNoX3VucmVnaXN0ZXIoJmxlZHNfZGV2LT5sZWRzW2ldLmNkZXYpOworCQkJcHJfZGVi dWcoIlByb2JlIGZhaWxlZCBzZXR0aW5nIHVwIGxlZHMgKCVkKVxuIiwgcmMpOworCQkJcmV0dXJu IHJjOworCQl9CisKKwkJcGFyc2VkX2xlZHMrKzsKKwl9CisJbGVkc19kZXYtPm51bV9sZWRzID0g cGFyc2VkX2xlZHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9k ZXZpY2UgKmxlZHNfZGV2ICA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpLCBw YXJzZWRfbGVkcyA9IGxlZHNfZGV2LT5udW1fbGVkczsKKworCW11dGV4X2Rlc3Ryb3koJmxlZHNf ZGV2LT5sb2NrKTsKKwlpZiAobGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZykKKwkJcmVndWxhdG9y X3B1dChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKTsKKwlpZiAobGVkc19kZXYtPnRvcmNoX2Jv b3N0X3JlZykKKwkJcmVndWxhdG9yX3B1dChsZWRzX2Rldi0+dG9yY2hfYm9vc3RfcmVnKTsKKwlm b3IgKGkgPSAwOyBpIDwgcGFyc2VkX2xlZHM7IGkrKykKKwkJbGVkX2NsYXNzZGV2X2ZsYXNoX3Vu cmVnaXN0ZXIoJmxlZHNfZGV2LT5sZWRzW2ldLmNkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFjb21fZmxhc2hfc3BtaV9vZl9tYXRjaFtd ID0geworCXsgLmNvbXBhdGlibGUgPSAicWNvbSxzcG1pLWZsYXNoIiB9LAorCXt9LAorfTsKK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIHFjb21fZmxhc2hfc3BtaV9vZl9tYXRjaCk7CisKK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHFjb21fZmxhc2hfZHJpdmVyID0geworCS5kcml2ZXIJ CT0geworCQkubmFtZQk9ICJxY29tLHNwbWktZmxhc2giLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBv Zl9tYXRjaF9wdHIocWNvbV9mbGFzaF9zcG1pX29mX21hdGNoKSwKKwl9LAorCS5wcm9iZQkJPSBx Y29tX2ZsYXNoX3Byb2JlLAorCS5yZW1vdmUJCT0gcWNvbV9mbGFzaF9yZW1vdmUsCit9OworbW9k dWxlX3BsYXRmb3JtX2RyaXZlcihxY29tX2ZsYXNoX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQ VElPTigiUXVhbGNvbW0gU1BNSSBGbGFzaCBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJOw61jb2xhcyBGLiBSLiBBLiBQcmFkbyA8bmZyYXBy YWRvQHByb3Rvbm1haWwuY29tPiIpOwotLSAKMi4zMC4wCgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK