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=-17.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 68B85C4338F for ; Tue, 3 Aug 2021 16:30:04 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 2F89960F94 for ; Tue, 3 Aug 2021 16:30:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2F89960F94 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yeZX/Z7xgMHtxqTc+yq9/8AAhxPuBBHuKJCcDHtIBpw=; b=A9y7EbXOndeBby UOA9Zntx8k/sBkvqGRViM0UMs1KQjpejcPqkr4MlupMLR87SntC0nJHUmvdaGfsahpqW/V2pDvZw8 4HAFa2KCRdVzxCjYtEJAeLkxaMtJup7HQM2tjsuEMWvj7ZEYsxsVpz5prkYc0hx0AOhi4FGxacWou FQrAj3gX31UF2VyFQFvy7AKKKVyLXkmzjzR8Fg+HhAjbLOpBg4I1WhbW9w/csKVIT4uLyuc5HsZp2 MwihLSxBiE6F/JCm8pDyhqPrRp1VjfO4Rl4S0hfO7jO4pxip/UWRZTirxc6Qyijql8Yk3F7MNA/id TVcLuIB8QXX2Wnwc9Fkw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAxGP-003bqS-5n; Tue, 03 Aug 2021 16:27:33 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAxG7-003bmP-PM for linux-arm-kernel@lists.infradead.org; Tue, 03 Aug 2021 16:27:19 +0000 Received: from localhost.localdomain (unknown [IPv6:2804:14c:1a9:2434:b693:c9:5cb6:b688]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: nfraprado) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 927FA1F42404; Tue, 3 Aug 2021 17:27:09 +0100 (BST) From: =?UTF-8?q?N=C3=ADcolas=20F=2E=20R=2E=20A=2E=20Prado?= To: Pavel Machek , Dan Murphy , Bjorn Andersson , Andy Gross , Rob Herring , Jacek Anaszewski Cc: linux-leds@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Brian Masney , Luca Weiss , Russell King , Georgi Djakov , linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, ~lkcamp/patches@lists.sr.ht, =?UTF-8?q?Andr=C3=A9=20Almeida?= , kernel@collabora.com Subject: [PATCH v3 2/5] leds: Add driver for QCOM SPMI Flash LEDs Date: Tue, 3 Aug 2021 13:26:38 -0300 Message-Id: <20210803162641.1525980-3-nfraprado@collabora.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210803162641.1525980-1-nfraprado@collabora.com> References: <20210803162641.1525980-1-nfraprado@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210803_092716_184386_E654AD0D X-CRM114-Status: GOOD ( 29.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 QWRkIGRyaXZlciBmb3IgUXVhbGNvbW0ncyBTUE1JIEZsYXNoIExFRHMuIFRoZXNlIGFyZSBjb250 cm9sbGVkCnRocm91Z2ggYW4gU1BNSSBidXMgYW5kIGFyZSBwYXJ0IG9mIHRoZSBQTTg5NDEgUE1J Qy4gVGhlcmUgYXJlIHR3byBMRURzCnByZXNlbnQgb24gdGhlIGNoaXAsIHdoaWNoIGNhbiBiZSB1 c2VkIGluZGVwZW5kZW50bHkgYXMgY2FtZXJhIGZsYXNoIG9yLAp3aGVuIGluIHRvcmNoIG1vZGUs IGFzIGEgbGFudGVybi4KClNpZ25lZC1vZmYtYnk6IE7DrWNvbGFzIEYuIFIuIEEuIFByYWRvIDxu ZnJhcHJhZG9AY29sbGFib3JhLmNvbT4KLS0tCgpDaGFuZ2VzIGluIHYzOgotIFRoZSB0d28gTEVE cyBjYW4gbm93IGJlIG9wZXJhdGVkIGluZGVwZW5kZW50bHkgZXZlbiB3aGVuIGluIHRvcmNoIG1v ZGUKLSBUaGUgZmxhc2hlcyBjYW4gbm93IHN0cm9iZSBjb25zZWN1dGl2ZSB0aW1lcyB3aXRob3V0 IG5lZWRpbmcgdG8gbWFudWFsbHkKICBkaXNhYmxlIHRoZW0gYmV0d2VlbiBzdHJvYmVzCi0gSW1w bGVtZW50ZWQgc3Ryb2JlX2dldCgpCi0gTW92ZWQgZHQgcGFyc2luZyB0byBhIHNlcGFyYXRlIGZ1 bmN0aW9uCi0gU3BsaXQgbXVsdGlwbGV4ZWQgdG9yY2gvZmxhc2ggb24vb2ZmIGFuZCB0b3JjaC9m bGFzaCByZWd1bGF0b3Igb24vb2ZmCiAgZnVuY3Rpb25zCi0gU2V0IGN1cnJlbnQgb24gYnJpZ2h0 bmVzcyBjYWxsYmFjayBhbmQgdGltZW91dCBvbiB0aW1lb3V0IGNhbGxiYWNrLCBpbnN0ZWFkIG9m CiAgc2V0dGluZyBldmVyeXRoaW5nIGV2ZXJ5IHRpbWUgd2hlbiBzdHJvYmluZy90dXJuaW5nIHRv cmNoIG9uCi0gQW5kIGEgd2hvbGUgbG90IG9mIG90aGVyIG1pbm9yIGNoYW5nZXMKCkNoYW5nZXMg aW4gdjI6Ci0gVGhhbmtzIHRvIEphY2VrOgogIC0gSW1wbGVtZW50ZWQgZmxhc2ggTEVEIGNsYXNz IGZyYW1ld29yawotIFRoYW5rcyB0byBCam9ybjoKICAtIFJlbmFtZWQgZHJpdmVyIHRvICJxY29t IHNwbWkgZmxhc2giCi0gUmVmYWN0b3JlZCBjb2RlCi0gQWRkZWQgbWlzc2luZyBjb3B5cmlnaHQK CiBkcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgIDggKwogZHJp dmVycy9sZWRzL2ZsYXNoL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv bGVkcy9mbGFzaC9sZWRzLXFjb20tc3BtaS1mbGFzaC5jIHwgMTI1MSArKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTI2MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9sZWRzL2ZsYXNoL2xlZHMtcWNvbS1zcG1pLWZsYXNoLmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9mbGFzaC9LY29u ZmlnCmluZGV4IDNmNDlmM2VkYmZmYi4uNzJmNjEzMjNjZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJz L2xlZHMvZmxhc2gvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwpAQCAt MjQsNCArMjQsMTIgQEAgY29uZmlnIExFRFNfUlQ4NTE1CiAJICBUbyBjb21waWxlIHRoaXMgZHJp dmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNh bGxlZCBsZWRzLXJ0ODUxNS4KIAorY29uZmlnIExFRFNfUUNPTV9TUE1JX0ZMQVNICisJdHJpc3Rh dGUgIlN1cHBvcnQgZm9yIFFDT00gU1BNSSBGbGFzaCBMRURzIgorCWRlcGVuZHMgb24gUkVHTUFQ X1NQTUkKKwlkZXBlbmRzIG9uIE9GCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBw b3J0IGZvciB0aGUgZmxhc2gvdG9yY2ggTEVEcyBwcmVzZW50IGluCisJICBRdWFsY29tbSdzIFBN ODk0MSBQTUlDLgorCiBlbmRpZiAjIExFRFNfQ0xBU1NfRkxBU0gKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbGVkcy9mbGFzaC9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9mbGFzaC9NYWtlZmlsZQppbmRl eCAwOWFlZTU2MWY3NjkuLmMxNDFkMjc3ZTliNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2Zs YXNoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9mbGFzaC9NYWtlZmlsZQpAQCAtMiwzICsy LDQgQEAKIAogb2JqLSQoQ09ORklHX0xFRFNfUlQ0NTA1KQkrPSBsZWRzLXJ0NDUwNS5vCiBvYmot JChDT05GSUdfTEVEU19SVDg1MTUpCSs9IGxlZHMtcnQ4NTE1Lm8KK29iai0kKENPTkZJR19MRURT X1FDT01fU1BNSV9GTEFTSCkJKz0gbGVkcy1xY29tLXNwbWktZmxhc2gubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9sZWRzL2ZsYXNoL2xlZHMtcWNvbS1zcG1pLWZsYXNoLmMgYi9kcml2ZXJzL2xlZHMv Zmxhc2gvbGVkcy1xY29tLXNwbWktZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjk3NjM3MDdiYjk4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVk cy9mbGFzaC9sZWRzLXFjb20tc3BtaS1mbGFzaC5jCkBAIC0wLDAgKzEsMTI1MSBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIFF1YWxjb21tIFNQTUkg Rmxhc2ggTEVEcyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAtMjAyMSwgTsOtY29s YXMgRi4gUi4gQS4gUHJhZG8gPG5AbmZyYXByYWRvLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAy MSwgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiBRUE5QIExFRHMgZHJpdmVyIGZyb20g ZG93bnN0cmVhbSBNU00ga2VybmVsIHNvdXJjZXMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAx MywgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGVkLWNsYXNzLWZsYXNoLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNs dWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcG1pLmg+ CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9QRVJJUEhF UkFMX1NVQlRZUEUJMHgwNQorI2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfU1RBVFVTCQkJMHgxMAor I2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfU0FGRVRZX1RJTUVSCQkweDQwCisjZGVmaW5lIFFDT01f RkxBU0hfQUREUl9NQVhfQ1VSUgkJMHg0MQorI2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfQ1VSUl9M RUQwCQkweDQyCisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9DVVJSX0xFRDEJCTB4NDMKKyNkZWZp bmUgUUNPTV9GTEFTSF9BRERSX0NMQU1QX0NVUlIJCTB4NDQKKyNkZWZpbmUgUUNPTV9GTEFTSF9B RERSX0VOQUJMRV9DT05UUk9MCQkweDQ2CisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9MRURfU1RS T0JFX0NUUkwJCTB4NDcKKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX0xFRF9UTVJfQ1RSTAkJMHg0 OAorI2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfSEVBRFJPT00JCTB4NEEKKyNkZWZpbmUgUUNPTV9G TEFTSF9BRERSX1NUQVJUVVBfREVMQVkJCTB4NEIKKyNkZWZpbmUgUUNPTV9GTEFTSF9BRERSX01B U0tfRU5BQkxFCQkweDRDCisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9WUkVHX09LX0ZPUkNFCQkw eDRGCisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9MRURfVU5MT0NLX1NFQ1VSRQkweEQwCisjZGVm aW5lIFFDT01fRkxBU0hfQUREUl9MRURfVE9SQ0gJCTB4RTQKKyNkZWZpbmUgUUNPTV9GTEFTSF9B RERSX0ZBVUxUX0RFVEVDVAkJMHg1MQorI2RlZmluZSBRQ09NX0ZMQVNIX0FERFJfUkFNUF9SQVRF CQkweDU0CisjZGVmaW5lIFFDT01fRkxBU0hfQUREUl9WUEhfUFdSX0RST09QCQkweDVBCisKKyNk ZWZpbmUgUUNPTV9GTEFTSF9NQVhfTEVWRUwJCTB4NEYKKyNkZWZpbmUgUUNPTV9GTEFTSF9UT1JD SF9NQVhfTEVWRUwJMHgwRgorI2RlZmluZQlRQ09NX0ZMQVNIX05PX01BU0sJCTB4MDAKKworI2Rl ZmluZSBRQ09NX0ZMQVNIX01BU0tfMQkJMHgyMAorI2RlZmluZSBRQ09NX0ZMQVNIX01BU0tfUkVH X01BU0sJMHhFMAorI2RlZmluZSBRQ09NX0ZMQVNIX0hFQURST09NX01BU0sJMHgwMworI2RlZmlu ZSBRQ09NX0ZMQVNIX1NBRkVUWV9USU1FUl9NQVNLCTB4N0YKKyNkZWZpbmUgUUNPTV9GTEFTSF9D VVJSRU5UX01BU0sJCTB4RkYKKyNkZWZpbmUgUUNPTV9GTEFTSF9NQVhfQ1VSUkVOVF9NQVNLCTB4 N0YKKyNkZWZpbmUgUUNPTV9GTEFTSF9UTVJfTUFTSwkJMHgwMworI2RlZmluZSBRQ09NX0ZMQVNI X1RNUl9XQVRDSERPRwkJMHgwMworI2RlZmluZSBRQ09NX0ZMQVNIX1RNUl9TQUZFVFkJCTB4MDAK KyNkZWZpbmUgUUNPTV9GTEFTSF9GQVVMVF9ERVRFQ1RfTUFTSwkweDgwCisjZGVmaW5lIFFDT01f RkxBU0hfSFdfVlJFR19PSwkJMHg0MAorI2RlZmluZSBRQ09NX0ZMQVNIX1ZSRUdfTUFTSwkJMHhD MAorI2RlZmluZSBRQ09NX0ZMQVNIX1NUQVJUVVBfRExZX01BU0sJMHgwMgorI2RlZmluZSBRQ09N X0ZMQVNIX1JBTVBfUkFURV9NQVNLCTB4QkYKKyNkZWZpbmUgUUNPTV9GTEFTSF9WUEhfUFdSX0RS T09QX01BU0sJMHhGMworCisjZGVmaW5lIFFDT01fRkxBU0hfRU5BQkxFX0FMTAkJMHhFMAorI2Rl ZmluZSBRQ09NX0ZMQVNIX0VOQUJMRV9NT0RVTEUJMHg4MAorI2RlZmluZSBRQ09NX0ZMQVNIX0VO QUJMRV9NT0RVTEVfTUFTSwkweDgwCisjZGVmaW5lIFFDT01fRkxBU0hfRElTQUJMRV9BTEwJCTB4 MDAKKyNkZWZpbmUgUUNPTV9GTEFTSF9FTkFCTEVfTUFTSwkJMHhFMAorI2RlZmluZSBRQ09NX0ZM QVNIX0VOQUJMRV9MRUQwCQkweEMwCisjZGVmaW5lIFFDT01fRkxBU0hfRU5BQkxFX0xFRDEJCTB4 QTAKKyNkZWZpbmUgUUNPTV9GTEFTSF9JTklUX01BU0sJCTB4RTAKKyNkZWZpbmUgUUNPTV9GTEFT SF9TRUxGQ0hFQ0tfRU5BQkxFCTB4ODAKKyNkZWZpbmUgUUNPTV9GTEFTSF9TRUxGQ0hFQ0tfRElT QUJMRQkweDAwCisKKyNkZWZpbmUgUUNPTV9GTEFTSF9TVFJPQkVfU1cJCTB4QzAKKyNkZWZpbmUg UUNPTV9GTEFTSF9TVFJPQkVfSFcJCTB4MDQKKyNkZWZpbmUgUUNPTV9GTEFTSF9TVFJPQkVfTUFT SwkJMHhDNworI2RlZmluZSBRQ09NX0ZMQVNIX1NUUk9CRV9MRUQwCQkweDgwCisjZGVmaW5lIFFD T01fRkxBU0hfU1RST0JFX0xFRDEJCTB4NDAKKworI2RlZmluZSBRQ09NX0ZMQVNIX1RPUkNIX01B U0sJCTB4MDMKKyNkZWZpbmUgUUNPTV9GTEFTSF9MRURfVE9SQ0hfRU5BQkxFCTB4MDAKKyNkZWZp bmUgUUNPTV9GTEFTSF9MRURfVE9SQ0hfRElTQUJMRQkweDAzCisjZGVmaW5lIFFDT01fRkxBU0hf VU5MT0NLX1NFQ1VSRQkweEE1CisjZGVmaW5lIFFDT01fRkxBU0hfU0VDVVJFX01BU0sJCTB4RkYK KworI2RlZmluZSBRQ09NX0ZMQVNIX1NVQlRZUEVfRFVBTAkJMHgwMQorI2RlZmluZSBRQ09NX0ZM QVNIX1NVQlRZUEVfU0lOR0xFCTB4MDIKKworI2RlZmluZSBRQ09NX0ZMQVNIX0RVUkFUSU9OX1NU RVAJMTAwMDAKKyNkZWZpbmUgUUNPTV9GTEFTSF9EVVJBVElPTl9NSU4JCTEwMDAwCisjZGVmaW5l IFFDT01fRkxBU0hfRFVSQVRJT05fREVGQVVMVAkyMDAwMDAKKworI2RlZmluZSBRQ09NX0ZMQVNI X0NVUlJFTlRfU1RFUAkJMTI1MDAKKyNkZWZpbmUgUUNPTV9GTEFTSF9DVVJSRU5UX01JTgkJMTI1 MDAKKworI2RlZmluZSBRQ09NX0ZMQVNIX0RFRkFVTFRfQ0xBTVAJMjAwMDAwCisKKyNkZWZpbmUg UUNPTV9GTEFTSF9NQVNLX09OX0xFRDAJCTB4OAorI2RlZmluZSBRQ09NX0ZMQVNIX01BU0tfT05f TEVEMQkJMHgyCisjZGVmaW5lIFFDT01fRkxBU0hfTUFTS19TVEFUVVNfVElNRURPVVQJMHg1CisK K2VudW0gcWNvbV9mbGFzaF9oZWFkcm9vbSB7CisJUUNPTV9GTEFTSF9IRUFEUk9PTV8yNTBNViwK KwlRQ09NX0ZMQVNIX0hFQURST09NXzMwME1WLAorCVFDT01fRkxBU0hfSEVBRFJPT01fNDAwTVYs CisJUUNPTV9GTEFTSF9IRUFEUk9PTV81MDBNViwKK307CisKK2VudW0gcWNvbV9mbGFzaF9zdGFy dHVwX2RseSB7CisJUUNPTV9GTEFTSF9TVEFSVFVQX0RMWV8xMFVTLAorCVFDT01fRkxBU0hfU1RB UlRVUF9ETFlfMzJVUywKKwlRQ09NX0ZMQVNIX1NUQVJUVVBfRExZXzY0VVMsCisJUUNPTV9GTEFT SF9TVEFSVFVQX0RMWV8xMjhVUywKK307CisKK2VudW0gcWNvbV9mbGFzaF9pZHMgeworCVFDT01f RkxBU0hfSURfTEVEMCwKKwlRQ09NX0ZMQVNIX0lEX0xFRDEsCit9OworCisvKioKKyAqIHN0cnVj dCBxY29tX2ZsYXNoX2xlZCAtIFJlcHJlc2VudHMgZWFjaCBpbmRpdmlkdWFsIGZsYXNoIExFRAor ICogQGZsZWRfY2RldjogZmxhc2ggTEVEIGNsYXNzZGV2CisgKiBAaWQ6IExFRCBJRCBhcyBnaXZl biBieSBlbnVtIHFjb21fZmxhc2hfaWRzCisgKiBAZGVmYXVsdF9vbjogZGVmYXVsdCBzdGF0ZSBm b3IgdGhlIExFRAorICogQGZsYXNoX2VuYWJsZV9jbWQ6IGVuYWJsZSBjb21tYW5kIGZvciBwYXJ0 aWN1bGFyIGZsYXNoCisgKiBAZmxhc2hfc3Ryb2JlX2NtZDogc3Ryb2JlIGNvbW1hbmQgZm9yIHBh cnRpY3VsYXIgZmxhc2gKKyAqIEBjdXJyZW50X2FkZHI6IGFkZHJlc3MgdG8gd3JpdGUgZm9yIGN1 cnJlbnQKKyAqIEBtYXNrX2xlZF9vbjogYml0bWFzayBmb3IgU1RBVFVTIHJlZ2lzdGVyIHRoYXQg c2hvd3MgaWYgTEVEIGlzIG9uCisgKiBAZmxhc2hfY3VycmVudF9pbnZhbGlkYXRlZDogd2hldGhl ciB0aGUgZmxhc2ggY3VycmVudCBpbiB0aGUgY3VycmVudCByZWdpc3RlcgorICoJd2FzIGludmFs aWRhdGVkIGJ5IHRvcmNoIHVzYWdlCisgKi8KK3N0cnVjdCBxY29tX2ZsYXNoX2xlZCB7CisJc3Ry dWN0IGxlZF9jbGFzc2Rldl9mbGFzaCBmbGVkX2NkZXY7CisJZW51bSBxY29tX2ZsYXNoX2lkcyBp ZDsKKwlib29sIGRlZmF1bHRfb247CisJdTggZmxhc2hfZW5hYmxlX2NtZDsKKwl1OCBmbGFzaF9z dHJvYmVfY21kOworCXUxNiBjdXJyZW50X2FkZHI7CisJdTggbWFza19sZWRfb247CisJYm9vbCBm bGFzaF9jdXJyZW50X2ludmFsaWRhdGVkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgcWNvbV9mbGFz aF9kZXZpY2UgLSBRQ09NIFNQTUkgRmxhc2ggZGV2aWNlLCBjb250YWlucyAyIGZsYXNoIExFRHMK KyAqIEByZWdtYXA6IHJlZ21hcCB1c2VkIHRvIGFjY2VzcyBMRUQgcmVnaXN0ZXJzIG92ZXIgU1BN SQorICogQGJhc2U6IGJhc2UgcmVnaXN0ZXIgZ2l2ZW4gaW4gZGV2aWNlIHRyZWUKKyAqIEBkZXY6 IGRldmljZSBmcm9tIGRldmljZXRyZWUKKyAqIEBmbGFzaF9zdXBwbHk6IHZvbHRhZ2UgcmVndWxh dG9yIHRvIHN1cHBseSB0aGUgZmxhc2hlcworICogQHRvcmNoX3N1cHBseTogdm9sdGFnZSByZWd1 bGF0b3IgdG8gc3VwcGx5IHRvcmNoIG1vZGUKKyAqIEBsZWRzOiBmbGFzaCBMRURzCisgKiBAbnVt X2xlZHM6IG51bWJlciBvZiBMRURzIHJlZ2lzdGVyZWQgKGJldHdlZW4gMCBhbmQgMikKKyAqIEBs b2NrOiBsb2NrIHRvIHByb3RlY3QgU1BNSSB0cmFuc2FjdGlvbnMKKyAqIEB0b3JjaF9lbmFibGVf Y21kOiBlbmFibGUgZmxhc2ggTEVEIHRvcmNoIG1vZGUKKyAqIEBwZXJpcGhlcmFsX3N1YnR5cGU6 IG1vZHVsZSBwZXJpcGhlcmFsIHN1YnR5cGUKKyAqIEBmbGFzaF9yZWd1bGF0b3Jfb246IGZsYXNo IHJlZ3VsYXRvciBzdGF0dXMKKyAqIEB0b3JjaF9yZWd1bGF0b3Jfb246IHRvcmNoIHJlZ3VsYXRv ciBzdGF0dXMKKyAqIEB0b3JjaF9lbmFibGVkOiB3aGV0aGVyIHRvcmNoIG1vZGUgaXMgZW5hYmxl ZAorICovCitzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgeworCXN0cnVjdCByZWdtYXAgKnJlZ21h cDsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJl Z3VsYXRvciAqZmxhc2hfc3VwcGx5OworCXN0cnVjdCByZWd1bGF0b3IgKnRvcmNoX3N1cHBseTsK KwlzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgbGVkc1syXTsKKwl1OCBudW1fbGVkczsKKwlzdHJ1Y3Qg bXV0ZXggbG9jazsKKwl1OCB0b3JjaF9lbmFibGVfY21kOworCXVuc2lnbmVkIGludCBwZXJpcGhl cmFsX3N1YnR5cGU7CisJYm9vbCBmbGFzaF9yZWd1bGF0b3Jfb247CisJYm9vbCB0b3JjaF9yZWd1 bGF0b3Jfb247CisJYm9vbCB0b3JjaF9lbmFibGVkOworfTsKKworc3RydWN0IHFjb21fZmxhc2hf Y29uZmlnIHsKKwl1bnNpZ25lZCBpbnQgYmFzZTsKKwlzdHJ1Y3QgcmVndWxhdG9yICpmbGFzaF9z dXBwbHk7CisJc3RydWN0IHJlZ3VsYXRvciAqdG9yY2hfc3VwcGx5OworCXVuc2lnbmVkIGludCBu dW1fbGVkczsKKworCWVudW0gcWNvbV9mbGFzaF9pZHMgaWRbMl07CisJYm9vbCBkZWZhdWx0X29u WzJdOworCXUzMiBsZWRfbWF4X2JyaWdodG5lc3NbMl07CisJdTMyIGZsYXNoX21heF9icmlnaHRu ZXNzWzJdOworCXUzMiBmbGFzaF9tYXhfdGltZW91dFsyXTsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IHFjb21fZmxhc2hfbGVkICpmbGNkZXZfdG9fbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXZf Zmxhc2ggKmZsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZsZWRfY2Rldiwgc3Ry dWN0IHFjb21fZmxhc2hfbGVkLCBmbGVkX2NkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj dCBxY29tX2ZsYXNoX2RldmljZSAqbGVkX3RvX2xlZHNfZGV2KHN0cnVjdCBxY29tX2ZsYXNoX2xl ZCAqbGVkKQoreworCXJldHVybiBjb250YWluZXJfb2YobGVkLCBzdHJ1Y3QgcWNvbV9mbGFzaF9k ZXZpY2UsIGxlZHNbbGVkLT5pZF0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBxY29tX2ZsYXNo X3JlYWRfcmVnKHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYsCisJCQkJICAgICAg dW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWwpCit7CisJcmV0dXJuIHJlZ21hcF9y ZWFkKGxlZHNfZGV2LT5yZWdtYXAsIGxlZHNfZGV2LT5iYXNlICsgcmVnLCB2YWwpOworfQorCitz dGF0aWMgaW5saW5lIGludCBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShzdHJ1Y3QgcWNvbV9mbGFz aF9kZXZpY2UgKmxlZHNfZGV2LAorCQkJCQkgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGlu dCBtYXNrLAorCQkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIHJlZ21hcF91cGRh dGVfYml0cyhsZWRzX2Rldi0+cmVnbWFwLCBsZWRzX2Rldi0+YmFzZSArIHJlZywgbWFzaywKKwkJ CQkgIHZhbCk7Cit9CisKK3N0YXRpYyB1OCBxY29tX2ZsYXNoX2R1cmF0aW9uX3RvX3JlZyh1MzIg dXMpCit7CisJaWYgKHVzIDwgUUNPTV9GTEFTSF9EVVJBVElPTl9NSU4pCisJCXVzID0gUUNPTV9G TEFTSF9EVVJBVElPTl9NSU47CisJcmV0dXJuICh1cyAtIFFDT01fRkxBU0hfRFVSQVRJT05fTUlO KSAvIFFDT01fRkxBU0hfRFVSQVRJT05fU1RFUDsKK30KKworc3RhdGljIHU4IHFjb21fZmxhc2hf Y3VycmVudF90b19yZWcodTMyIHVhKQoreworCWlmICh1YSA8IFFDT01fRkxBU0hfQ1VSUkVOVF9N SU4pCisJCXVhID0gUUNPTV9GTEFTSF9DVVJSRU5UX01JTjsKKwlyZXR1cm4gKHVhIC0gUUNPTV9G TEFTSF9DVVJSRU5UX01JTikgLyBRQ09NX0ZMQVNIX0NVUlJFTlRfU1RFUDsKK30KKworc3RhdGlj IHZvaWQgY2xhbXBfYWxpZ24odTMyICp2LCB1MzIgbWluLCB1MzIgbWF4LCB1MzIgc3RlcCkKK3sK KwkqdiA9IGNsYW1wX3ZhbCgqdiwgbWluLCBtYXgpOworCWlmIChzdGVwID4gMSkKKwkJKnYgPSAo KnYgLSBtaW4pIC8gc3RlcCAqIHN0ZXAgKyBtaW47Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFz aF9zdGF0dXNfZ2V0KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkKQoreworCXN0cnVjdCBxY29t X2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYobGVkKTsKKwl1bnNpZ25l ZCBpbnQgc3RhdHVzOworCWludCByYzsKKworCXJjID0gcWNvbV9mbGFzaF9yZWFkX3JlZyhsZWRz X2RldiwgUUNPTV9GTEFTSF9BRERSX1NUQVRVUywgJnN0YXR1cyk7CisJaWYgKHJjKSB7CisJCWRl dl9lcnIobGVkc19kZXYtPmRldiwgIkZhaWx1cmUgcmVhZGluZyBzdGF0dXMsIHJjID0gICVkXG4i LAorCQkJcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIHN0YXR1cyAmIGxlZC0+bWFz a19sZWRfb247Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zdGF0dXNfY2xlYXIoc3RydWN0 IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldikKK3sKKwl1bnNpZ25lZCBpbnQgZW5hYmxlX3Zh bDsKKwlpbnQgcmM7CisKKwlyYyA9IHFjb21fZmxhc2hfcmVhZF9yZWcobGVkc19kZXYsIFFDT01f RkxBU0hfQUREUl9FTkFCTEVfQ09OVFJPTCwKKwkJCQkgJmVuYWJsZV92YWwpOworCWlmIChyYykg eworCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJFbmFibGUgcmVnIHJlYWQgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX0VOQUJMRV9DT05UUk9MLAorCQkJCSAgICAgUUNP TV9GTEFTSF9FTkFCTEVfTUFTSywgUUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7CisJaWYgKHJjKSB7 CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX0VOQUJMRV9DT05UUk9MLAorCQkJCSAgICAgUUNP TV9GTEFTSF9FTkFCTEVfTUFTSywgZW5hYmxlX3ZhbCk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIo bGVkc19kZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQly ZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9j aGVja190aW1lZG91dChzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2KQoreworCXVu c2lnbmVkIGludCBzdGF0dXM7CisJaW50IHJjOworCisJcmMgPSBxY29tX2ZsYXNoX3JlYWRfcmVn KGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAocmMpIHsK KwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiRmFpbHVyZSByZWFkaW5nIHN0YXR1cywgcmMgPSAg JWRcbiIsCisJCQlyYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gc3RhdHVzICYgUUNP TV9GTEFTSF9NQVNLX1NUQVRVU19USU1FRE9VVDsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNo X3RvcmNoX3JlZ19lbmFibGUoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKKwkJ CQkgICAgICAgYm9vbCBzdGF0ZSkKK3sKKwlpbnQgcmM7CisKKwlpZiAobGVkc19kZXYtPnRvcmNo X2VuYWJsZWQgPT0gc3RhdGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGb3IgdGhlIFRPUkNI IHJlZ2lzdGVyICgweEU0KSB0byBiZWNvbWUgd3JpdGFibGUsIHRoZSBVTkxPQ0tfU0VDVVJFCisJ ICogcmVnaXN0ZXIgKDB4RDApIG5lZWRzIHRvIGJlIHdyaXR0ZW4gd2l0aCB0aGUgVU5MT0NLX1NF Q1VSRSB2YWx1ZQorCSAqICgweEE1KSBmaXJzdC4KKwkgKiBJdCBnZXRzIHJlLWxvY2tlZCBhZnRl ciBhbnkgcmVnaXN0ZXIgd3JpdGUuCisJICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwKKwkJCQkgICAgIFFDT01fRkxBU0hfQUREUl9MRURfVU5MT0NLX1NFQ1VSRSwK KwkJCQkgICAgIFFDT01fRkxBU0hfU0VDVVJFX01BU0ssCisJCQkJICAgICBRQ09NX0ZMQVNIX1VO TE9DS19TRUNVUkUpOworCWlmIChyYykgeworCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJTZWN1 cmUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJj ID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9MRURf VE9SQ0gsCisJCQkJICAgICBRQ09NX0ZMQVNIX1RPUkNIX01BU0ssCisJCQkJICAgICBzdGF0ZSA/ IFFDT01fRkxBU0hfTEVEX1RPUkNIX0VOQUJMRSA6CisJCQkJCSAgICAgUUNPTV9GTEFTSF9MRURf VE9SQ0hfRElTQUJMRSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlRv cmNoIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX21heF9icmlnaHRuZXNzX3NldChz dHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCwKKwkJCQkJIHVuc2lnbmVkIGludCBicmlnaHRuZXNz KQoreworCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19k ZXYobGVkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBsZWRzX2Rldi0+ZGV2OworCWludCByYzsK KworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQURE Ul9NQVhfQ1VSUiwKKwkJCQkgICAgIFFDT01fRkxBU0hfQ1VSUkVOVF9NQVNLLCBicmlnaHRuZXNz KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihkZXYsICJNYXggY3VycmVudCByZWcgd3JpdGUgZmFp bGVkKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcWNvbV9mbGFzaF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg KmxlZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBxY29t X2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYobGVkKTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBsZWRzX2Rldi0+ZGV2OworCWludCByYzsKKworCXJjID0gcWNvbV9mbGFz aF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIGxlZC0+Y3VycmVudF9hZGRyLAorCQkJCSAgICAgUUNP TV9GTEFTSF9DVVJSRU5UX01BU0ssIGJyaWdodG5lc3MpOworCWlmIChyYykgeworCQlkZXZfZXJy KGRldiwgIkN1cnJlbnQgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJj OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9yZWd1 bGF0b3Jfb24oc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldikKK3sKKwlpbnQgcmM7 CisKKwlpZiAobGVkc19kZXYtPmZsYXNoX3JlZ3VsYXRvcl9vbikKKwkJcmV0dXJuIDA7CisKKwly YyA9IHJlZ3VsYXRvcl9lbmFibGUobGVkc19kZXYtPmZsYXNoX3N1cHBseSk7CisJaWYgKHJjKSB7 CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlJlZ3VsYXRvciBlbmFibGUgZmFpbGVkKCVkKVxu IiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJbGVkc19kZXYtPmZsYXNoX3JlZ3VsYXRvcl9v biA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsZWRf cmVndWxhdG9yX29mZihzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2KQoreworCXVu c2lnbmVkIGludCBpOworCXU4IGVuYWJsZSA9IDA7CisJaW50IHJjOworCisJaWYgKCFsZWRzX2Rl di0+Zmxhc2hfcmVndWxhdG9yX29uKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBs ZWRzX2Rldi0+bnVtX2xlZHM7IGkrKykgeworCQlyYyA9IHFjb21fZmxhc2hfc3RhdHVzX2dldCgm bGVkc19kZXYtPmxlZHNbaV0pOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWlm ICghcmMpCisJCQljb250aW51ZTsKKworCQllbmFibGUgfD0gbGVkc19kZXYtPmxlZHNbaV0uZmxh c2hfZW5hYmxlX2NtZDsKKwl9CisKKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNf ZGV2LCBRQ09NX0ZMQVNIX0FERFJfRU5BQkxFX0NPTlRST0wsCisJCQkJICAgICBRQ09NX0ZMQVNI X0VOQUJMRV9NQVNLLCBlbmFibGUpOworCWlmIChyYykKKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2 LCAiRW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisKKwlpZiAoZW5hYmxlKQor CQlyZXR1cm4gMDsKKworCXJjID0gcmVndWxhdG9yX2Rpc2FibGUobGVkc19kZXYtPmZsYXNoX3N1 cHBseSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIlJlZ3VsYXRvciBk aXNhYmxlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWxlZHNfZGV2 LT5mbGFzaF9yZWd1bGF0b3Jfb24gPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29uKHN0cnVjdCBxY29tX2ZsYXNoX2Rldmlj ZSAqbGVkc19kZXYpCit7CisJaW50IHJjOworCisJaWYgKGxlZHNfZGV2LT50b3JjaF9yZWd1bGF0 b3Jfb24pCisJCXJldHVybiAwOworCisJcmMgPSByZWd1bGF0b3JfZW5hYmxlKGxlZHNfZGV2LT50 b3JjaF9zdXBwbHkpOworCWlmIChyYykgeworCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJSZWd1 bGF0b3IgZW5hYmxlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWxl ZHNfZGV2LT50b3JjaF9yZWd1bGF0b3Jfb24gPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcWNvbV9mbGFzaF90b3JjaF9yZWd1bGF0b3Jfb2ZmKHN0cnVjdCBxY29tX2ZsYXNo X2RldmljZSAqbGVkc19kZXYpCit7CisJaW50IHJjOworCisJaWYgKCFsZWRzX2Rldi0+dG9yY2hf cmVndWxhdG9yX29uKQorCQlyZXR1cm4gMDsKKworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3Jp dGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9FTkFCTEVfQ09OVFJPTCwKKwkJCQkgICAgIFFD T01fRkxBU0hfRU5BQkxFX01PRFVMRV9NQVNLLAorCQkJCSAgICAgUUNPTV9GTEFTSF9ESVNBQkxF X0FMTCk7CisJaWYgKHJjKQorCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJFbmFibGUgcmVnIHdy aXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKworCXJjID0gcmVndWxhdG9yX2Rpc2FibGUobGVkc19k ZXYtPnRvcmNoX3N1cHBseSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwg IlJlZ3VsYXRvciBkaXNhYmxlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0K KworCWxlZHNfZGV2LT50b3JjaF9yZWd1bGF0b3Jfb24gPSBmYWxzZTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9vbihzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg KmxlZCkKK3sKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2ID0gbGVkX3RvX2xl ZHNfZGV2KGxlZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbGVkc19kZXYtPmRldjsKKwlpbnQg cmMsIGVycm9yOworCisJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29uKGxlZHNfZGV2 KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCisJcmMgPSBxY29tX2ZsYXNo X21hc2tlZF93cml0ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX0VOQUJMRV9DT05UUk9MLAor CQkJCSAgICAgbGVkLT5mbGFzaF9lbmFibGVfY21kLAorCQkJCSAgICAgbGVkLT5mbGFzaF9lbmFi bGVfY21kKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihkZXYsICJFbmFibGUgcmVnIHdyaXRlIGZh aWxlZCglZClcbiIsIHJjKTsKKwkJZ290byBlcnJvcl9mbGFzaF9zZXQ7CisJfQorCisJLyoKKwkg KiBUT0RPIFRoZSBkb3duc3RyZWFtIGRyaXZlciBhbHNvIGFsbG93ZWQgSFcgc3Ryb2JlLiBBZGQg c3VwcG9ydCBmb3IgaXQKKwkgKiBhZnRlciB2NGwyIHN1cHBvcnQgaXMgYWRkZWQgYW5kIElTUCBj YW4gYmUgdXNlZAorCSAqLworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYs IFFDT01fRkxBU0hfQUREUl9MRURfU1RST0JFX0NUUkwsCisJCQkJICAgICBsZWQtPmZsYXNoX3N0 cm9iZV9jbWQsCisJCQkJICAgICBsZWQtPmZsYXNoX3N0cm9iZV9jbWQpOworCWlmIChyYykgewor CQlkZXZfZXJyKGRldiwgIkxFRCAlZCBzdHJvYmUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIGxl ZC0+aWQsCisJCQlyYyk7CisJCWdvdG8gZXJyb3JfZmxhc2hfc2V0OworCX0KKworCXJldHVybiAw OworCitlcnJvcl9mbGFzaF9zZXQ6CisJZXJyb3IgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9y X29mZihsZWRzX2Rldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJj OworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9vZmYoc3RydWN0IHFjb21fZmxhc2hf bGVkICpsZWQpCit7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90 b19sZWRzX2RldihsZWQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZHNfZGV2LT5kZXY7CisJ aW50IHJjLCBlcnJvcjsKKworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYs IFFDT01fRkxBU0hfQUREUl9MRURfU1RST0JFX0NUUkwsCisJCQkJICAgICBsZWQtPmZsYXNoX3N0 cm9iZV9jbWQsCisJCQkJICAgICBRQ09NX0ZMQVNIX0RJU0FCTEVfQUxMKTsKKwlpZiAocmMpCisJ CWRldl9lcnIoZGV2LCAiTEVEICVkIGZsYXNoIHdyaXRlIGZhaWxlZCglZClcbiIsIGxlZC0+aWQs IHJjKTsKKworCWVycm9yID0gcWNvbV9mbGFzaF9mbGVkX3JlZ3VsYXRvcl9vZmYobGVkc19kZXYp OworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCXJldHVybiByYzsKK30KKworc3RhdGlj IGludCBxY29tX2ZsYXNoX3RvcmNoX29uKHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkKQorewor CWludCByYywgZXJyb3I7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxl ZF90b19sZWRzX2RldihsZWQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZHNfZGV2LT5kZXY7 CisKKwlpZiAobGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSA9PSBRQ09NX0ZMQVNIX1NVQlRZ UEVfRFVBTCkgeworCQlyYyA9IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29uKGxlZHNfZGV2 KTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJvcl9yZWdfd3JpdGU7CisJfSBlbHNlIGlmIChsZWRz X2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IFFDT01fRkxBU0hfU1VCVFlQRV9TSU5HTEUpIHsK KwkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29uKGxlZHNfZGV2KTsKKwkJaWYgKHJj KQorCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7CisKKwkJLyoKKwkJICogV3JpdGUgMHg4MCB0byBN T0RVTEVfRU5BQkxFIGJlZm9yZSB3cml0aW5nCisJCSAqIDB4RTAgaW4gb3JkZXIgdG8gYXZvaWQg YSBoYXJkd2FyZSBidWcgY2F1c2VkCisJCSAqIGJ5IHJlZ2lzdGVyIHZhbHVlIGdvaW5nIGZyb20g MHgwMCB0byAweEUwLgorCQkgKi8KKwkJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRz X2RldiwKKwkJCQkJICAgICBRQ09NX0ZMQVNIX0FERFJfRU5BQkxFX0NPTlRST0wsCisJCQkJCSAg ICAgUUNPTV9GTEFTSF9FTkFCTEVfTU9EVUxFX01BU0ssCisJCQkJCSAgICAgUUNPTV9GTEFTSF9F TkFCTEVfTU9EVUxFKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKGRldiwgIkVuYWJsZSByZWcg d3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7CisJCX0K Kwl9CisKKwlyYyA9IHFjb21fZmxhc2hfdG9yY2hfcmVnX2VuYWJsZShsZWRzX2RldiwgdHJ1ZSk7 CisJaWYgKHJjKQorCQlnb3RvIGVycm9yX3JlZ193cml0ZTsKKworCXJjID0gcWNvbV9mbGFzaF9t YXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9FTkFCTEVfQ09OVFJPTCwKKwkJ CQkgICAgIFFDT01fRkxBU0hfRU5BQkxFX01BU0ssCisJCQkJICAgICBsZWRzX2Rldi0+dG9yY2hf ZW5hYmxlX2NtZCk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoZGV2LCAiRW5hYmxlIHJlZyB3cml0 ZSBmYWlsZWQoJWQpXG4iLCByYyk7CisJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOworCX0KKworCXJj ID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9MRURf U1RST0JFX0NUUkwsCisJCQkJICAgICBsZWQtPmZsYXNoX3N0cm9iZV9jbWQsCisJCQkJICAgICBs ZWQtPmZsYXNoX3N0cm9iZV9jbWQpOworCWlmIChyYykgeworCQlkZXZfZXJyKGRldiwgIkxFRCAl ZCBzdHJvYmUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIGxlZC0+aWQsCisJCQlyYyk7CisJCWdv dG8gZXJyb3JfcmVnX3dyaXRlOworCX0KKworCWxlZHNfZGV2LT50b3JjaF9lbmFibGVkID0gdHJ1 ZTsKKworCXJldHVybiAwOworCitlcnJvcl9yZWdfd3JpdGU6CisJaWYgKGxlZHNfZGV2LT5wZXJp cGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9GTEFTSF9TVUJUWVBFX1NJTkdMRSkKKwkJZ290byBlcnJv cl9mbGFzaF9zZXQ7CisKKwllcnJvciA9IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29mZihs ZWRzX2Rldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJjOworCitl cnJvcl9mbGFzaF9zZXQ6CisJZXJyb3IgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29mZihs ZWRzX2Rldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IHFjb21fZmxhc2hfdG9yY2hfb2ZmKHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAq bGVkKQoreworCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVk c19kZXYobGVkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBsZWRzX2Rldi0+ZGV2OworCWludCBy YywgZXJyb3I7CisJdW5zaWduZWQgaW50IGk7CisKKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dy aXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfTEVEX1NUUk9CRV9DVFJMLAorCQkJCSAgICAg bGVkLT5mbGFzaF9zdHJvYmVfY21kLCBRQ09NX0ZMQVNIX0RJU0FCTEVfQUxMKTsKKwlpZiAocmMp IHsKKwkJZGV2X2VycihkZXYsICJMRUQgJWQgZmxhc2ggd3JpdGUgZmFpbGVkKCVkKVxuIiwgbGVk LT5pZCwgcmMpOworCQlnb3RvIGVycm9yX3RvcmNoX3NldDsKKwl9CisKKwkvKiBLZWVwIHRvcmNo IG9uIGlmIHRoZSBvdGhlciBMRUQgaXMgc3RpbGwgb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVk c19kZXYtPm51bV9sZWRzOyBpKyspCisJCWlmIChsZWRzX2Rldi0+bGVkc1tpXS5mbGVkX2NkZXYu bGVkX2NkZXYuYnJpZ2h0bmVzcykKKwkJCXJldHVybiAwOworCisJcmMgPSBxY29tX2ZsYXNoX3Rv cmNoX3JlZ19lbmFibGUobGVkc19kZXYsIGZhbHNlKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyb3Jf dG9yY2hfc2V0OworCisJaWYgKGxlZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0gUUNPTV9G TEFTSF9TVUJUWVBFX0RVQUwpIHsKKwkJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX3JlZ3VsYXRvcl9v ZmYobGVkc19kZXYpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfSBlbHNlIGlmIChsZWRz X2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IFFDT01fRkxBU0hfU1VCVFlQRV9TSU5HTEUpIHsK KwkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29mZihsZWRzX2Rldik7CisJCWlmIChy YykKKwkJCXJldHVybiByYzsKKwl9CisKKwlsZWRzX2Rldi0+dG9yY2hfZW5hYmxlZCA9IGZhbHNl OworCisJcmV0dXJuIDA7CisKK2Vycm9yX3RvcmNoX3NldDoKKwllcnJvciA9IHFjb21fZmxhc2hf dG9yY2hfcmVndWxhdG9yX29mZihsZWRzX2Rldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJy b3I7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfbGVkY2Rldl9icmln aHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCQkJICAgICBlbnVt IGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZs ZWRfY2RldiA9IGxjZGV2X3RvX2ZsY2RldihsZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hf bGVkICpsZWQgPSBmbGNkZXZfdG9fbGVkKGZsZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hf ZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19sZWRzX2RldihsZWQpOworCXVuc2lnbmVkIGludCBt YXhfYnJpZ2h0bmVzczsKKwlpbnQgcmM7CisKKwlpZiAodmFsdWUgPiBsZWRfY2Rldi0+bWF4X2Jy aWdodG5lc3MpIHsKKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiSW52YWxpZCBicmlnaHRuZXNz IHZhbHVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmbGVkc19k ZXYtPmxvY2spOworCWlmICghdmFsdWUpIHsKKwkJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX29mZihs ZWQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBtaW5pbXVtIG9uIHZhbHVlIGZvciB0aGUg YnJpZ2h0bmVzcyByZWdpc3RlciBpcyAwLCBidXQgZm9yCisJCSAqIGxlZF9jbGFzc2RldiBpcyAx LCBhcyAwIHRoZXJlIG1lYW5zIG9mZi4KKwkJICovCisJCXJjID0gcWNvbV9mbGFzaF9icmlnaHRu ZXNzX3NldChsZWQsIGxlZF9jZGV2LT5icmlnaHRuZXNzIC0gMSk7CisJCWlmIChyYykKKwkJCWdv dG8gdW5sb2NrOworCisJCWxlZC0+Zmxhc2hfY3VycmVudF9pbnZhbGlkYXRlZCA9IHRydWU7CisK KwkJaWYgKGxlZHNfZGV2LT50b3JjaF9lbmFibGVkKSB7CisJCQkvKiBDbGVhciBzdGF0dXMgdG8g dXBkYXRlIGJyaWdodG5lc3MgKi8KKwkJCXJjID0gcWNvbV9mbGFzaF9zdGF0dXNfY2xlYXIobGVk c19kZXYpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gdW5sb2NrOworCQl9IGVsc2UgeworCQkJLyoK KwkJCSAqIENsZWFyIHN0YXR1cyBmcm9tIHByZXZpb3VzIGZsYXNoIHN0cm9iZSBzbyB0aGUgTEVE CisJCQkgKiBjYW4gdHVybiBvbgorCQkJICovCisJCQlyYyA9IHFjb21fZmxhc2hfY2hlY2tfdGlt ZWRvdXQobGVkc19kZXYpOworCQkJaWYgKHJjID4gMCkKKwkJCQlyYyA9IHFjb21fZmxhc2hfc3Rh dHVzX2NsZWFyKGxlZHNfZGV2KTsKKwkJCWVsc2UgaWYgKHJjIDwgMCkKKwkJCQlnb3RvIHVubG9j azsKKworCQkJbWF4X2JyaWdodG5lc3MgPSBsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MgLSAxOwor CQkJcmMgPSBxY29tX2ZsYXNoX21heF9icmlnaHRuZXNzX3NldChsZWQsIG1heF9icmlnaHRuZXNz KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIHVubG9jazsKKwkJfQorCQlyYyA9IHFjb21fZmxhc2hf dG9yY2hfb24obGVkKTsKKwl9CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmxlZHNfZGV2LT5s b2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGNkZXZfYnJp Z2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9jZGV2LAorCQkJCQkg ICAgdTMyIGJyaWdodG5lc3MpCit7CisJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNk ZXZfdG9fbGVkKGZsZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2Rl diA9IGxlZF90b19sZWRzX2RldihsZWQpOworCXVuc2lnbmVkIGludCBicmlnaHQ7CisJaW50IHJj OworCisJLyogQ2FuJ3Qgb3BlcmF0ZSBvbiBmbGFzaCBpZiB0b3JjaCBpcyBvbiAqLworCWlmIChs ZWRzX2Rldi0+dG9yY2hfZW5hYmxlZCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWNsYW1wX2FsaWdu KCZicmlnaHRuZXNzLCBRQ09NX0ZMQVNIX0NVUlJFTlRfTUlOLAorCQkgICAgZmxlZF9jZGV2LT5i cmlnaHRuZXNzLm1heCwgUUNPTV9GTEFTSF9DVVJSRU5UX1NURVApOworCWZsZWRfY2Rldi0+YnJp Z2h0bmVzcy52YWwgPSBicmlnaHRuZXNzOworCisJYnJpZ2h0ID0gcWNvbV9mbGFzaF9jdXJyZW50 X3RvX3JlZyhicmlnaHRuZXNzKTsKKworCW11dGV4X2xvY2soJmxlZHNfZGV2LT5sb2NrKTsKKwly YyA9IHFjb21fZmxhc2hfYnJpZ2h0bmVzc19zZXQobGVkLCBicmlnaHQpOworCWlmIChyYykKKwkJ Z290byB1bmxvY2s7CisKKwlpZiAobGVkLT5mbGFzaF9jdXJyZW50X2ludmFsaWRhdGVkKSB7CisJ CWJyaWdodCA9IHFjb21fZmxhc2hfY3VycmVudF90b19yZWcoZmxlZF9jZGV2LT5icmlnaHRuZXNz Lm1heCk7CisJCXJjID0gcWNvbV9mbGFzaF9tYXhfYnJpZ2h0bmVzc19zZXQobGVkLCBicmlnaHQp OworCQlpZiAocmMpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlsZWQtPmZsYXNoX2N1cnJlbnRf aW52YWxpZGF0ZWQgPSBmYWxzZTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmbGVkc19kZXYt PmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsY2Rldl9z dHJvYmVfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiwKKwkJCQkJYm9v bCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGZsY2Rldl90b19sZWQo ZmxlZF9jZGV2KTsKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2ID0gbGVkX3Rv X2xlZHNfZGV2KGxlZCk7CisJdW5zaWduZWQgaW50IGJyaWdodDsKKwl1bnNpZ25lZCBpbnQgaTsK KwlpbnQgcmM7CisKKwkvKiBDYW4ndCBvcGVyYXRlIG9uIGZsYXNoIGlmIHRvcmNoIGlzIG9uICov CisJaWYgKGxlZHNfZGV2LT50b3JjaF9lbmFibGVkKQorCQlyZXR1cm4gLUVCVVNZOworCisJbXV0 ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOworCWlmICghc3RhdGUpIHsKKwkJcmMgPSBxY29tX2Zs YXNoX2ZsZWRfb2ZmKGxlZCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVHVybiBvZmYgZmxhc2gg TEVEcyBmcm9tIHByZXZpb3VzIHN0cm9iZQorCQkgKi8KKwkJcmMgPSBxY29tX2ZsYXNoX2NoZWNr X3RpbWVkb3V0KGxlZHNfZGV2KTsKKwkJaWYgKHJjID4gMCkgeworCQkJZm9yIChpID0gMDsgaSA8 IGxlZHNfZGV2LT5udW1fbGVkczsgaSsrKSB7CisJCQkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfb2Zm KCZsZWRzX2Rldi0+bGVkc1tpXSk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIHVubG9jazsKKwkJ CX0KKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisKKwkJaWYg KGxlZC0+Zmxhc2hfY3VycmVudF9pbnZhbGlkYXRlZCkgeworCQkJYnJpZ2h0ID0gcWNvbV9mbGFz aF9jdXJyZW50X3RvX3JlZyhmbGVkX2NkZXYtPmJyaWdodG5lc3MudmFsKTsKKwkJCXJjID0gcWNv bV9mbGFzaF9icmlnaHRuZXNzX3NldChsZWQsIGJyaWdodCk7CisJCQlpZiAocmMpCisJCQkJZ290 byB1bmxvY2s7CisKKwkJCWJyaWdodCA9IHFjb21fZmxhc2hfY3VycmVudF90b19yZWcoZmxlZF9j ZGV2LT5icmlnaHRuZXNzLm1heCk7CisJCQlyYyA9IHFjb21fZmxhc2hfbWF4X2JyaWdodG5lc3Nf c2V0KGxlZCwgYnJpZ2h0KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIHVubG9jazsKKworCQkJbGVk LT5mbGFzaF9jdXJyZW50X2ludmFsaWRhdGVkID0gZmFsc2U7CisJCX0KKworCQlyYyA9IHFjb21f Zmxhc2hfZmxlZF9vbihsZWQpOworCX0KKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmbGVkc19k ZXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsY2Rl dl9zdHJvYmVfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiwKKwkJCQkJ Ym9vbCAqc3RhdGUpCit7CisJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBmbGNkZXZfdG9f bGVkKGZsZWRfY2Rldik7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxl ZF90b19sZWRzX2RldihsZWQpOworCWludCBzdGF0dXM7CisKKwltdXRleF9sb2NrKCZsZWRzX2Rl di0+bG9jayk7CisJc3RhdHVzID0gcWNvbV9mbGFzaF9zdGF0dXNfZ2V0KGxlZCk7CisJbXV0ZXhf dW5sb2NrKCZsZWRzX2Rldi0+bG9jayk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0 dXM7CisKKwkqc3RhdGUgPSBzdGF0dXMgJiYgIWxlZHNfZGV2LT50b3JjaF9lbmFibGVkOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxjZGV2X3RpbWVvdXRfc2V0KHN0 cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRfY2RldiwKKwkJCQkJIHUzMiB0aW1lb3V0KQor eworCXN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0gZmxjZGV2X3RvX2xlZChmbGVkX2NkZXYp OworCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBsZWRfdG9fbGVkc19kZXYo bGVkKTsKKwl1bnNpZ25lZCBpbnQgdGltZSwgaTsKKwlpbnQgcmM7CisKKwljbGFtcF9hbGlnbigm dGltZW91dCwgUUNPTV9GTEFTSF9EVVJBVElPTl9NSU4sIGZsZWRfY2Rldi0+dGltZW91dC5tYXgs CisJCSAgICBRQ09NX0ZMQVNIX0RVUkFUSU9OX1NURVApOworCisJLyogU2luY2UgdGhlIHRpbWVv dXQgcmVnaXN0ZXIgaXMgc2hhcmVkIGJldHdlZW4gTEVEcywgdXBkYXRlIGZvciBhbGwgKi8KKwlm b3IgKGkgPSAwOyBpIDwgbGVkc19kZXYtPm51bV9sZWRzOyBpKyspCisJCWxlZHNfZGV2LT5sZWRz W2ldLmZsZWRfY2Rldi50aW1lb3V0LnZhbCA9IHRpbWVvdXQ7CisKKwl0aW1lID0gcWNvbV9mbGFz aF9kdXJhdGlvbl90b19yZWcoZmxlZF9jZGV2LT50aW1lb3V0LnZhbCk7CisKKwltdXRleF9sb2Nr KCZsZWRzX2Rldi0+bG9jayk7CisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2Rl diwgUUNPTV9GTEFTSF9BRERSX1NBRkVUWV9USU1FUiwKKwkJCQkgICAgIFFDT01fRkxBU0hfU0FG RVRZX1RJTUVSX01BU0ssIHRpbWUpOworCWlmIChyYykKKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2 LCAiU2FmZXR5IHRpbWVyIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAorCQkJcmMpOworCW11dGV4 X3VubG9jaygmbGVkc19kZXYtPmxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50 IHFjb21fZmxhc2hfZmxjZGV2X2ZhdWx0X2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpm bGVkX2NkZXYsCisJCQkJICAgICAgIHUzMiAqZmF1bHQpCit7CisJLyoKKwkgKiBUT0RPIEFkZCBm YXVsdCBkZXRlY3Rpb24gd2hlbiB3ZSBmaW5kIG91dCBob3cgdG8uIE5vIGNsdWUgZnJvbQorCSAq IGluc3BlY3RpbmcgdGhlIFNQTUkgcmVnaXN0ZXJzCisJICovCisJKmZhdWx0ID0gMDsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBsZWRfZmxhc2hfb3BzIGZsYXNoX29wcyA9 IHsKKwkuZmxhc2hfYnJpZ2h0bmVzc19zZXQJPSBxY29tX2ZsYXNoX2ZsY2Rldl9icmlnaHRuZXNz X3NldCwKKwkuc3Ryb2JlX3NldAkJPSBxY29tX2ZsYXNoX2ZsY2Rldl9zdHJvYmVfc2V0LAorCS5z dHJvYmVfZ2V0CQk9IHFjb21fZmxhc2hfZmxjZGV2X3N0cm9iZV9nZXQsCisJLnRpbWVvdXRfc2V0 CQk9IHFjb21fZmxhc2hfZmxjZGV2X3RpbWVvdXRfc2V0LAorCS5mYXVsdF9nZXQJCT0gcWNvbV9m bGFzaF9mbGNkZXZfZmF1bHRfZ2V0LAorfTsKKworc3RhdGljIGludCBxY29tX2ZsYXNoX3NldHVw X2ZsY2RldihzdHJ1Y3QgcWNvbV9mbGFzaF9jb25maWcgKmNmZywKKwkJCQkgICBzdHJ1Y3QgcWNv bV9mbGFzaF9sZWQgKmxlZCwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJ aW50IHJjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZF90b19sZWRzX2RldihsZWQpLT5kZXY7 CisJc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxlZF9jZGV2ID0gJmxlZC0+ZmxlZF9jZGV2 OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gJmZsZWRfY2Rldi0+bGVkX2NkZXY7 CisJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhID0ge307CisJc3RydWN0IGxlZF9mbGFz aF9zZXR0aW5nICpzZXR0aW5nOworCisJaW5pdF9kYXRhLmZ3bm9kZSA9IG9mX2Z3bm9kZV9oYW5k bGUobm9kZSk7CisKKwlsZWRfY2Rldi0+YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBxY29tX2Zs YXNoX2xlZGNkZXZfYnJpZ2h0bmVzc19zZXQ7CisKKwlsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3Mg PSBjZmctPmxlZF9tYXhfYnJpZ2h0bmVzc1tsZWQtPmlkXTsKKwlsZWRfY2Rldi0+bWF4X2JyaWdo dG5lc3MgLz0gUUNPTV9GTEFTSF9DVVJSRU5UX1NURVA7CisKKwlzZXR0aW5nID0gJmZsZWRfY2Rl di0+YnJpZ2h0bmVzczsKKwlzZXR0aW5nLT5tYXggPSBjZmctPmZsYXNoX21heF9icmlnaHRuZXNz W2xlZC0+aWRdOworCXNldHRpbmctPm1pbiA9IFFDT01fRkxBU0hfQ1VSUkVOVF9NSU47CisJc2V0 dGluZy0+c3RlcCA9IFFDT01fRkxBU0hfQ1VSUkVOVF9TVEVQOworCXNldHRpbmctPnZhbCA9IHNl dHRpbmctPm1pbjsKKworCXNldHRpbmcgPSAmZmxlZF9jZGV2LT50aW1lb3V0OworCXNldHRpbmct Pm1heCA9IGNmZy0+Zmxhc2hfbWF4X3RpbWVvdXRbbGVkLT5pZF07CisJc2V0dGluZy0+bWluID0g UUNPTV9GTEFTSF9EVVJBVElPTl9NSU47CisJc2V0dGluZy0+c3RlcCA9IFFDT01fRkxBU0hfRFVS QVRJT05fU1RFUDsKKwlzZXR0aW5nLT52YWwgPSBRQ09NX0ZMQVNIX0RVUkFUSU9OX0RFRkFVTFQ7 CisKKwlmbGVkX2NkZXYtPm9wcyA9ICZmbGFzaF9vcHM7CisJbGVkX2NkZXYtPmZsYWdzIHw9IExF RF9ERVZfQ0FQX0ZMQVNIOworCisJcmMgPSBkZXZtX2xlZF9jbGFzc2Rldl9mbGFzaF9yZWdpc3Rl cl9leHQoZGV2LCBmbGVkX2NkZXYsICZpbml0X2RhdGEpOworCWlmIChyYykKKwkJZGV2X2Vycihk ZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgbGVkICVkLHJjPSVkXG4iLCBsZWQtPmlkLCByYyk7CisK KwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zZXR1cF9mbGVkKHN0cnVj dCBxY29tX2ZsYXNoX2NvbmZpZyAqY2ZnLAorCQkJCSBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxl ZCwKKwkJCQkgZW51bSBxY29tX2ZsYXNoX2lkcyBpZCkKK3sKKwlsZWQtPmlkID0gY2ZnLT5pZFtp ZF07CisJbGVkLT5kZWZhdWx0X29uID0gY2ZnLT5kZWZhdWx0X29uW2lkXTsKKwlsZWQtPmZsYXNo X2N1cnJlbnRfaW52YWxpZGF0ZWQgPSB0cnVlOworCisJaWYgKGxlZC0+aWQgPT0gUUNPTV9GTEFT SF9JRF9MRUQwKSB7CisJCWxlZC0+Zmxhc2hfZW5hYmxlX2NtZCA9IFFDT01fRkxBU0hfRU5BQkxF X0xFRDA7CisJCWxlZC0+Zmxhc2hfc3Ryb2JlX2NtZCA9IFFDT01fRkxBU0hfU1RST0JFX0xFRDA7 CisJCWxlZC0+Y3VycmVudF9hZGRyID0gUUNPTV9GTEFTSF9BRERSX0NVUlJfTEVEMDsKKwkJbGVk LT5tYXNrX2xlZF9vbiA9IFFDT01fRkxBU0hfTUFTS19PTl9MRUQwOworCX0gZWxzZSB7CisJCWxl ZC0+Zmxhc2hfZW5hYmxlX2NtZCA9IFFDT01fRkxBU0hfRU5BQkxFX0xFRDE7CisJCWxlZC0+Zmxh c2hfc3Ryb2JlX2NtZCA9IFFDT01fRkxBU0hfU1RST0JFX0xFRDE7CisJCWxlZC0+Y3VycmVudF9h ZGRyID0gUUNPTV9GTEFTSF9BRERSX0NVUlJfTEVEMTsKKwkJbGVkLT5tYXNrX2xlZF9vbiA9IFFD T01fRkxBU0hfTUFTS19PTl9MRUQxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHFjb21fZmxhc2hfc2V0dXBfcmVncyhzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2 KQoreworCWludCByYzsKKworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYs IFFDT01fRkxBU0hfQUREUl9MRURfU1RST0JFX0NUUkwsCisJCQkJICAgICBRQ09NX0ZMQVNIX1NU Uk9CRV9NQVNLLAorCQkJCSAgICAgUUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7CisJaWYgKHJjKSB7 CisJCWRldl9lcnIobGVkc19kZXYtPmRldiwgIkxFRCBmbGFzaCB3cml0ZSBmYWlsZWQoJWQpXG4i LCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBEaXNhYmxlIGZsYXNoIExFRCBtb2R1bGUg Ki8KKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FE RFJfRU5BQkxFX0NPTlRST0wsCisJCQkJICAgICBRQ09NX0ZMQVNIX0VOQUJMRV9NQVNLLAorCQkJ CSAgICAgUUNPTV9GTEFTSF9ESVNBQkxFX0FMTCk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIobGVk c19kZXYtPmRldiwgIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQlyZXR1 cm4gcmM7CisJfQorCisJLyogU2V0IFZyZWcgZm9yY2UgKi8KKwlyYyA9IHFjb21fZmxhc2hfbWFz a2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfVlJFR19PS19GT1JDRSwKKwkJCQkg ICAgIFFDT01fRkxBU0hfVlJFR19NQVNLLAorCQkJCSAgICAgUUNPTV9GTEFTSF9IV19WUkVHX09L KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiVnJlZyBPSyByZWcgd3Jp dGUgZmFpbGVkKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogU2V0IHNlbGYg ZmF1bHQgY2hlY2sgKi8KKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBR Q09NX0ZMQVNIX0FERFJfRkFVTFRfREVURUNULAorCQkJCSAgICAgUUNPTV9GTEFTSF9GQVVMVF9E RVRFQ1RfTUFTSywKKwkJCQkgICAgIFFDT01fRkxBU0hfU0VMRkNIRUNLX0RJU0FCTEUpOworCWlm IChyYykgeworCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJGYXVsdCBkZXRlY3QgcmVnIHdyaXRl IGZhaWxlZCglZClcbiIsCisJCQlyYyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBTZXQgbWFz ayBlbmFibGUgKi8KKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09N X0ZMQVNIX0FERFJfTUFTS19FTkFCTEUsCisJCQkJICAgICBRQ09NX0ZMQVNIX01BU0tfUkVHX01B U0ssCisJCQkJICAgICBRQ09NX0ZMQVNIX01BU0tfMSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIo bGVkc19kZXYtPmRldiwgIk1hc2sgZW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAorCQkJ cmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogU2V0IHJhbXAgcmF0ZSAqLworCXJjID0gcWNv bV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9SQU1QX1JBVEUs CisJCQkJICAgICBRQ09NX0ZMQVNIX1JBTVBfUkFURV9NQVNLLCAweEJGKTsKKwlpZiAocmMpIHsK KwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAiUmFtcCByYXRlIHJlZyB3cml0ZSBmYWlsZWQoJWQp XG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBFbmFibGUgVlBIX1BXUl9EUk9PUCBh bmQgc2V0IHRocmVzaG9sZCB0byAyLjlWICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX1ZQSF9QV1JfRFJPT1AsCisJCQkJICAgICBRQ09N X0ZMQVNIX1ZQSF9QV1JfRFJPT1BfTUFTSywgMHhDMik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIo bGVkc19kZXYtPmRldiwgIlZQSF9QV1JfRFJPT1AgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCisJ CQlyYyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBTZXQgaGVhZHJvb20gKi8KKwlyYyA9IHFj b21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfSEVBRFJPT00s CisJCQkJICAgICBRQ09NX0ZMQVNIX0hFQURST09NX01BU0ssCisJCQkJICAgICBRQ09NX0ZMQVNI X0hFQURST09NXzUwME1WKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihsZWRzX2Rldi0+ZGV2LCAi SGVhZHJvb20gcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0K KworCS8qIFNldCBzdGFydHVwIGRlbGF5ICovCisJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0 ZShsZWRzX2RldiwgUUNPTV9GTEFTSF9BRERSX1NUQVJUVVBfREVMQVksCisJCQkJICAgICBRQ09N X0ZMQVNIX1NUQVJUVVBfRExZX01BU0ssCisJCQkJICAgICBRQ09NX0ZMQVNIX1NUQVJUVVBfRExZ XzEwVVMpOworCWlmIChyYykgeworCQlkZXZfZXJyKGxlZHNfZGV2LT5kZXYsICJTdGFydHVwIGRl bGF5IHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAorCQkJcmMpOworCQlyZXR1cm4gcmM7CisJfQor CisJLyoKKwkgKiBUT0RPIFRoZSBkb3duc3RyZWFtIGRyaXZlciBhbHNvIHN1cHBvcnRlZCB3YXRj aGRvZyBtb2RlLiBOb3Qgc3VyZQorCSAqIGFib3V0IHRoZSBkaWZmZXJlbmNlLCBzbyBvbmx5IHN1 cHBvcnQgc2FmZXR5IHRpbWVyIGZvciBub3cKKwkgKi8KKwkvKiBTZXQgdGltZXIgY29udHJvbCAq LworCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQURE Ul9MRURfVE1SX0NUUkwsCisJCQkJICAgICBRQ09NX0ZMQVNIX1RNUl9NQVNLLAorCQkJCSAgICAg UUNPTV9GTEFTSF9UTVJfU0FGRVRZKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihsZWRzX2Rldi0+ ZGV2LCAiTEVEIHRpbWVyIGN0cmwgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCisJCQlyYyk7CisJ CXJldHVybiByYzsKKwl9CisKKwkvKiBTZXQgY2xhbXAgY3VycmVudCAqLworCXJjID0gcWNvbV9m bGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIFFDT01fRkxBU0hfQUREUl9DTEFNUF9DVVJSLAor CQkJCSAgICAgUUNPTV9GTEFTSF9DVVJSRU5UX01BU0ssCisJCQkJICAgICBxY29tX2ZsYXNoX2N1 cnJlbnRfdG9fcmVnKFFDT01fRkxBU0hfREVGQVVMVF9DTEFNUCkpOworCWlmIChyYykKKwkJZGV2 X2VycihsZWRzX2Rldi0+ZGV2LCAiQ2xhbXAgY3VycmVudCByZWcgd3JpdGUgZmFpbGVkKCVkKVxu IiwKKwkJCXJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxY29tX2ZsYXNoX3Nl dHVwX2xlZChzdHJ1Y3QgcWNvbV9mbGFzaF9jb25maWcgKmNmZywKKwkJCQlzdHJ1Y3QgcWNvbV9m bGFzaF9sZWQgKmxlZCwKKwkJCQllbnVtIHFjb21fZmxhc2hfaWRzIGlkLAorCQkJCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2 ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYg PSAmbGVkLT5mbGVkX2NkZXYubGVkX2NkZXY7CisJaW50IHJjOworCisJcmMgPSBxY29tX2ZsYXNo X3NldHVwX2ZsZWQoY2ZnLCBsZWQsIGlkKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJj ID0gcWNvbV9mbGFzaF9zZXR1cF9mbGNkZXYoY2ZnLCBsZWQsIG5vZGUpOworCWlmIChyYykKKwkJ cmV0dXJuIHJjOworCisJLyogY29uZmlndXJlIGRlZmF1bHQgc3RhdGUgKi8KKwlpZiAoIWxlZC0+ ZGVmYXVsdF9vbikgeworCQlsZWRfY2Rldi0+YnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJfSBlbHNl IHsKKwkJbGVkX2NkZXYtPmJyaWdodG5lc3MgPSBsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3M7CisJ CW11dGV4X2xvY2soJmxlZHNfZGV2LT5sb2NrKTsKKwkJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX29u KGxlZCk7CisJCW11dGV4X3VubG9jaygmbGVkc19kZXYtPmxvY2spOworCQlpZiAocmMpCisJCQly ZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9z ZXR1cF9sZWRzX2RldmljZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2LAorCQkJ CQlzdHJ1Y3QgcWNvbV9mbGFzaF9jb25maWcgKmNmZywKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2 KQoreworCWludCByYzsKKworCWxlZHNfZGV2LT5kZXYgPSBkZXY7CisKKwlsZWRzX2Rldi0+YmFz ZSA9IGNmZy0+YmFzZTsKKwlsZWRzX2Rldi0+bnVtX2xlZHMgPSBjZmctPm51bV9sZWRzOworCisJ bGVkc19kZXYtPnJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKGRldi0+cGFyZW50LCBOVUxMKTsKKwlp ZiAoIWxlZHNfZGV2LT5yZWdtYXApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsdXJlIGdldHRpbmcg cmVnbWFwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmMgPSBxY29tX2ZsYXNoX3Nl dHVwX3JlZ3MobGVkc19kZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBxY29t X2ZsYXNoX3JlYWRfcmVnKGxlZHNfZGV2LCBRQ09NX0ZMQVNIX0FERFJfUEVSSVBIRVJBTF9TVUJU WVBFLAorCQkJCSAmbGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSk7CisJaWYgKHJjKSB7CisJ CWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlYWQgZnJvbSBhZGRyPSV4LCByYyglZClcbiIsCisJ CQlRQ09NX0ZMQVNIX0FERFJfUEVSSVBIRVJBTF9TVUJUWVBFLCByYyk7CisJCXJldHVybiByYzsK Kwl9CisKKwlsZWRzX2Rldi0+Zmxhc2hfc3VwcGx5ID0gY2ZnLT5mbGFzaF9zdXBwbHk7CisKKwlp ZiAobGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSA9PSBRQ09NX0ZMQVNIX1NVQlRZUEVfRFVB TCkgeworCQlsZWRzX2Rldi0+dG9yY2hfc3VwcGx5ID0gY2ZnLT50b3JjaF9zdXBwbHk7CisJCWxl ZHNfZGV2LT50b3JjaF9lbmFibGVfY21kID0gUUNPTV9GTEFTSF9FTkFCTEVfTU9EVUxFOworCX0g ZWxzZSB7CisJCWxlZHNfZGV2LT50b3JjaF9lbmFibGVfY21kID0gUUNPTV9GTEFTSF9FTkFCTEVf QUxMOworCX0KKworCW11dGV4X2luaXQoJmxlZHNfZGV2LT5sb2NrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LAor CQkJICAgICAgIHN0cnVjdCBxY29tX2ZsYXNoX2NvbmZpZyAqY2ZnLAorCQkJICAgICAgIHN0cnVj dCBkZXZpY2Vfbm9kZSAqc3ViX25vZGVzW10pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2Rl ID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGRfbm9kZTsKKwljb25z dCBjaGFyICp0ZW1wX3N0cmluZzsKKwlpbnQgcmMsIHBhcnNlZF9sZWRzID0gMDsKKwl1MzIgdmFs OworCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicmVnIiwgJnZhbCk7CisJaWYg KHJjIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWx1cmUgcmVhZGluZyByZWcsIHJjID0gJWRc biIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwljZmctPmJhc2UgPSB2YWw7CisKKwljZmctPmZs YXNoX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJmbGFzaC1ib29zdCIpOworCWNm Zy0+dG9yY2hfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInRvcmNoLWJvb3N0Iik7 CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShub2RlLCBjaGlsZF9ub2RlKSB7 CisJCS8qIExFRCBwcm9wZXJ0aWVzICovCisKKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihj aGlsZF9ub2RlLCAicmVnIiwKKwkJCQkJICAmY2ZnLT5pZFtwYXJzZWRfbGVkc10pOworCQlpZiAo cmMpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbHVyZSByZWFkaW5nIGxlZCBpZCwgcmMgPSAgJWRc biIsIHJjKTsKKwkJCW9mX25vZGVfcHV0KGNoaWxkX25vZGUpOworCQkJcmV0dXJuIHJjOworCQl9 CisKKwkJLyogQXNzdW1lIExFRCBJRHMgYXJlIG9yZGVyZWQgaW4gRFQgZm9yIHNpbXBsaWNpdHkg Ki8KKwkJaWYgKGNmZy0+aWRbcGFyc2VkX2xlZHNdICE9IHBhcnNlZF9sZWRzKSB7CisJCQlkZXZf ZXJyKGRldiwgIlVub3JkZXJlZCBMRUQgbm9kZXMgaW4gRFRcbiIpOworCQkJb2Zfbm9kZV9wdXQo Y2hpbGRfbm9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN1Yl9ub2Rlc1twYXJz ZWRfbGVkc10gPSBjaGlsZF9ub2RlOworCisJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmco Y2hpbGRfbm9kZSwgImRlZmF1bHQtc3RhdGUiLAorCQkJCQkgICAgICZ0ZW1wX3N0cmluZyk7CisJ CWlmICghcmMpIHsKKwkJCWlmIChzdHJuY21wKHRlbXBfc3RyaW5nLCAib24iLCBzaXplb2YoIm9u IikpID09IDApCisJCQkJY2ZnLT5kZWZhdWx0X29uW3BhcnNlZF9sZWRzXSA9IHRydWU7CisJCX0g ZWxzZSBpZiAocmMgIT0gLUVJTlZBTCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkZhaWx1cmUg cmVhZGluZyBkZWZhdWx0LXN0YXRlLCByYyA9ICAlZFxuIiwKKwkJCQlyYyk7CisJCQlvZl9ub2Rl X3B1dChjaGlsZF9ub2RlKTsKKwkJCXJldHVybiByYzsKKwkJfQorCisJCS8qIEZMRUQgcHJvcGVy dGllcyAqLworCisJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGRfbm9kZSwgImxlZC1t YXgtbWljcm9hbXAiLAorCQkJCQkgICZjZmctPmxlZF9tYXhfYnJpZ2h0bmVzc1twYXJzZWRfbGVk c10pOworCQlpZiAocmMgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWx1cmUgcmVhZGluZyBt YXhfY3VycmVudCwgcmMgPSAgJWRcbiIsCisJCQkJcmMpOworCQkJb2Zfbm9kZV9wdXQoY2hpbGRf bm9kZSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKworCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KGNoaWxkX25vZGUsICJmbGFzaC1tYXgtbWljcm9hbXAiLAorCQkJCQkgICZjZmctPmZsYXNoX21h eF9icmlnaHRuZXNzW3BhcnNlZF9sZWRzXSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWRldl9lcnIo ZGV2LCAiRmFpbHVyZSByZWFkaW5nIG1heF9jdXJyZW50LCByYyA9ICAlZFxuIiwKKwkJCQlyYyk7 CisJCQlvZl9ub2RlX3B1dChjaGlsZF9ub2RlKTsKKwkJCXJldHVybiByYzsKKwkJfQorCisJCXJj ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGRfbm9kZSwgImZsYXNoLW1heC10aW1lb3V0LXVz IiwKKwkJCQkJICAmY2ZnLT5mbGFzaF9tYXhfdGltZW91dFtwYXJzZWRfbGVkc10pOworCQlpZiAo cmMgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWx1cmUgcmVhZGluZyBtYXhfdGltZW91dCwg cmMgPSAgJWRcbiIsCisJCQkJcmMpOworCQkJb2Zfbm9kZV9wdXQoY2hpbGRfbm9kZSk7CisJCQly ZXR1cm4gcmM7CisJCX0KKworCQlwYXJzZWRfbGVkcysrOworCQlpZiAocGFyc2VkX2xlZHMgPj0g MikgeworCQkJb2Zfbm9kZV9wdXQoY2hpbGRfbm9kZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlj ZmctPm51bV9sZWRzID0gcGFyc2VkX2xlZHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBxY29tX2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2Ug KmxlZHNfZGV2OworCXN0cnVjdCBxY29tX2ZsYXNoX2NvbmZpZyBjZmcgPSB7IDAgfTsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKnN1Yl9ub2Rlc1syXTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmM7 CisKKwlsZWRzX2RldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkc19kZXYpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWxlZHNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gcWNv bV9mbGFzaF9wYXJzZV9kdChkZXYsICZjZmcsIHN1Yl9ub2Rlcyk7CisJaWYgKHJjKQorCQlyZXR1 cm4gcmM7CisKKwlyYyA9IHFjb21fZmxhc2hfc2V0dXBfbGVkc19kZXZpY2UobGVkc19kZXYsICZj ZmcsIGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVk c19kZXYtPm51bV9sZWRzOyBpKyspIHsKKwkJcmMgPSBxY29tX2ZsYXNoX3NldHVwX2xlZCgmY2Zn LCAmbGVkc19kZXYtPmxlZHNbaV0sIGksCisJCQkJCSAgc3ViX25vZGVzW2ldKTsKKwkJaWYgKHJj KQorCQkJcmV0dXJuIHJjOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxlZHNf ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFjb21fZmxhc2hfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHFjb21fZmxhc2hfZGV2aWNl ICpsZWRzX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXV0ZXhfZGVzdHJv eSgmbGVkc19kZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHFjb21fZmxhc2hfc3BtaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBh dGlibGUgPSAicWNvbSxzcG1pLWZsYXNoLWxlZHMiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgcWNvbV9mbGFzaF9zcG1pX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgcWNvbV9mbGFzaF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5u YW1lCT0gInFjb20sc3BtaS1mbGFzaC1sZWRzIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcWNvbV9m bGFzaF9zcG1pX29mX21hdGNoLAorCX0sCisJLnByb2JlCQk9IHFjb21fZmxhc2hfcHJvYmUsCisJ LnJlbW92ZQkJPSBxY29tX2ZsYXNoX3JlbW92ZSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVy KHFjb21fZmxhc2hfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJRdWFsY29tbSBTUE1J IEZsYXNoIExFRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9B VVRIT1IoIk7DrWNvbGFzIEYuIFIuIEEuIFByYWRvIDxuQG5mcmFwcmFkby5uZXQ+Iik7Ci0tIAoy LjMyLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==