From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 488E7C4332F for ; Mon, 7 Nov 2022 05:34:23 +0000 (UTC) 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=776qX8KlPuUKyOObC99rMvIwLDeJLJNqODdVLKlRAmU=; b=tOiEnOJ7DWOTr9 Z9LDqan2objNMDm3PKpwuvQQa+yY5b+eLBBrGxQkDroeECZfFbdvuEENrV3Q/Yh1sFTiOx5yWbzFs Lf8pRIdFnZGU3fMcQC/09exhor6Wsi11nPT4zltKGPke1Mjd5HNYvtFb6+xjwDI6EqEvsmnHlOTYo gEgDRMMWABNkFdnqSt9ULCKZEM6Mye6aBnaduAmnohRez0xQrBURdEl6JWCxgi8idg7GKQENIBLmN 9gWS2vWF69CXKG8k5T/AHG7ueHMyMtKMBfFlJ78L+Q7f/gEddbpNVFClgctWlj2kxPjr9Kxsc8S7r i+cWhQ5DynkNGqJgE9Ew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1orul4-00BlIm-22; Mon, 07 Nov 2022 05:33:18 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1orukd-00Bkte-Cc for linux-arm-kernel@lists.infradead.org; Mon, 07 Nov 2022 05:32:54 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id C75835C009A; Mon, 7 Nov 2022 00:32:50 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 07 Nov 2022 00:32:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= cc:cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm1; t=1667799170; x= 1667885570; bh=RL9ANq1RleS8NLm3MosMiWmbO3sk2Nh2RvN+mH4yZ6k=; b=m T8YtReJWoxf5sahWXBeFfRMuuorSx75lQFw09ke5wbRuUekMigOBc71ya9pKuhHT vNP+plMGqkbQtU0t2FopqHrJ3haOUqvQ9YBaw1ZfIAUYtSe3jF5WRe7yi7o/zhWS 3LwC3O/NOjY4LknlDulrMgKhlKyRQjNLZ278Vrpx0I7wf6nESYlDnhMoiKgIyz8t dpdrbCZk46E6xBWb1LFJMNoz8gqz1GDKt7GwM4KkpcZ17TdmzpAEZwbhBP/4h71K P7G9YOKZXgjw2o6eTDxNyGqENZcUkjOwgIJ38Y1qejqLRvqJpBZfwg1peuUfzOLD TIw0kU/V3GJUJzdZvqKEw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1667799170; x= 1667885570; bh=RL9ANq1RleS8NLm3MosMiWmbO3sk2Nh2RvN+mH4yZ6k=; b=G BP9yFvXBxbPSj14n3Mn3cTluAXgwSvZ0X4vJUs0cukmNOjd4vjhznZvAL7nuOmGp rsN24SgPUu73eVuAnBKJbG7N2D9LnLGg+t+roQ2GBjLVZQOUYfeRWDG2lcwFLSBg 7iArsyPEimrI7SdvtH40UxqXhn+L93Ug7RQw0MAgoU8RNGh3NZjcqr6M39BodurG RuVM1Nh1yOkXBQIAnLSDAk6AOLJubfk8foEOpQbucapuqhyvhGv6m/RqrajCtJA0 1Jf8owi66gbqYIc/dod7dF2KAO5VJDJdd/0vXbGASGxxAJdWuqC9h8dRRzrSDIwS LWQ7Ne1T83pwcYblGHxCw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvgedrvdejgdekgecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvfevufffkffojghfgggtgfesthekredtredtjeenucfhrhhomhepufgrmhhu vghlucfjohhllhgrnhguuceoshgrmhhuvghlsehshhholhhlrghnugdrohhrgheqnecugg ftrfgrthhtvghrnhepfeeuveeufeefleehlefhleeglefggfeikeffveetfeevjeeuieet uefgfeeiheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrh homhepshgrmhhuvghlsehshhholhhlrghnugdrohhrgh X-ME-Proxy: Feedback-ID: i0ad843c9:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 7 Nov 2022 00:32:50 -0500 (EST) From: Samuel Holland To: Pavel Machek , linux-leds@vger.kernel.org, Chen-Yu Tsai , Jernej Skrabec Cc: devicetree@vger.kernel.org, linux-sunxi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Samuel Holland Subject: [PATCH v6 2/5] leds: sun50i-a100: New driver for the A100 LED controller Date: Sun, 6 Nov 2022 23:32:43 -0600 Message-Id: <20221107053247.1180-3-samuel@sholland.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221107053247.1180-1-samuel@sholland.org> References: <20221107053247.1180-1-samuel@sholland.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221106_213251_597240_F82CBE38 X-CRM114-Status: GOOD ( 27.00 ) 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 U29tZSBBbGx3aW5uZXIgc3VueGkgU29Dcywgc3RhcnRpbmcgd2l0aCB0aGUgQTEwMCwgY29udGFp biBhbiBMRUQKY29udHJvbGxlciBkZXNpZ25lZCB0byBkcml2ZSBSR0IgTEVEIHBpeGVscy4gQWRk IGEgZHJpdmVyIGZvciBpdCB1c2luZwp0aGUgbXVsdGljb2xvciBMRUQgZnJhbWV3b3JrLCBhbmQg d2l0aCBMRURzIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLgoKU2lnbmVkLW9mZi1ieTogU2Ft dWVsIEhvbGxhbmQgPHNhbXVlbEBzaG9sbGFuZC5vcmc+Ci0tLQoKKG5vIGNoYW5nZXMgc2luY2Ug djUpCgpDaGFuZ2VzIGluIHY1OgogLSBSZW5hbWUgdGhlIGRyaXZlciBSMzI5IC0+IEExMDAsIHNp bmNlIHRoYXQgaXMgdGhlIGFjdHVhbCBvcmlnaW5hbAogICBpbXBsZW1lbnRhdGlvbgoKQ2hhbmdl cyBpbiB2NDoKIC0gRGVwZW5kIG9uIExFRFNfQ0xBU1NfTVVMVElDT0xPUgoKQ2hhbmdlcyBpbiB2 MzoKIC0gQWRkZWQgdmVuZG9yIHByZWZpeCB0byB0aW1pbmcvZm9ybWF0IHByb3BlcnRpZXMKIC0g UmVuYW1lZCAiZm9ybWF0IiBwcm9wZXJ0eSB0byAicGl4ZWwtZm9ybWF0IiBmb3IgY2xhcml0eQog LSBEcm9wcGVkICJ2bGVkLXN1cHBseSIgYXMgaXQgaXMgdW5yZWxhdGVkIHRvIHRoZSBjb250cm9s bGVyIGhhcmR3YXJlCiAtIENoYW5nZWQgIndyaXRlc2wiIHRvICJpb3dyaXRlMzJfcmVwIiBzbyB0 aGUgZHJpdmVyIGJ1aWxkcyBvbiBocHBhCgpDaGFuZ2VzIGluIHYyOgogLSBSZW5hbWVkIGZyb20g c3VueGktbGVkYyB0byBzdW41MGktcjMyOS1sZWRjCiAtIEFkZGVkIG1pc3NpbmcgInN0YXRpYyIg dG8gZnVuY3Rpb25zL2dsb2JhbHMgYXMgcmVwb3J0ZWQgYnkgMGRheSBib3QKCiBkcml2ZXJzL2xl ZHMvS2NvbmZpZyAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvbGVkcy9NYWtlZmlsZSAgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9sZWRzL2xlZHMtc3VuNTBpLWExMDAuYyB8IDU1NCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1NjQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9sZWRzLXN1bjUwaS1hMTAw LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29u ZmlnCmluZGV4IDQ5OWQwZjIxNWE4Yi4uNGY0YzUxNWVkN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjgxLDYgKzI4MSwx NSBAQCBjb25maWcgTEVEU19DT0JBTFRfUkFRCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxl cyBzdXBwb3J0IGZvciB0aGUgQ29iYWx0IFJhcSBzZXJpZXMgTEVEcy4KIAorY29uZmlnIExFRFNf U1VONTBJX0ExMDAKKwl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIEFsbHdpbm5lciBBMTAwIFJH QiBMRUQgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1NfTVVMVElDT0xPUiAmJiBP RgorCWRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QKKwloZWxwCisJICBUaGlz IG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBSR0IgTEVEIGNvbnRyb2xsZXIgZm91bmQK KwkgIGluIHNvbWUgQWxsd2lubmVyIHN1bnhpIFNvQ3MsIGluY2x1ZGVpbmcgQTEwMCwgUjMyOSwg YW5kIEQxLgorCSAgSXQgdXNlcyBhIG9uZS13aXJlIGludGVyZmFjZSB0byBjb250cm9sIHVwIHRv IDEwMjQgTEVEcy4KKwogY29uZmlnIExFRFNfU1VORklSRQogCXRyaXN0YXRlICJMRUQgc3VwcG9y dCBmb3IgU3VuRmlyZSBzZXJ2ZXJzLiIKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA0 ZmQyZjkyY2QxOTguLmE2ZWUzZjVjZjdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQCBvYmotJChD T05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubwogb2JqLSQoQ09ORklHX0xFRFNfUkVHVUxB VE9SKQkJKz0gbGVkcy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX0xFRFNfUzNDMjRYWCkJCSs9 IGxlZHMtczNjMjR4eC5vCiBvYmotJChDT05GSUdfTEVEU19TQzI3WFhfQkxUQykJCSs9IGxlZHMt c2MyN3h4LWJsdGMubworb2JqLSQoQ09ORklHX0xFRFNfU1VONTBJX0ExMDApCQkrPSBsZWRzLXN1 bjUwaS1hMTAwLm8KIG9iai0kKENPTkZJR19MRURTX1NVTkZJUkUpCQkrPSBsZWRzLXN1bmZpcmUu bwogb2JqLSQoQ09ORklHX0xFRFNfU1lTQ09OKQkJKz0gbGVkcy1zeXNjb24ubwogb2JqLSQoQ09O RklHX0xFRFNfVENBNjUwNykJCSs9IGxlZHMtdGNhNjUwNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2xlZHMvbGVkcy1zdW41MGktYTEwMC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtc3VuNTBpLWExMDAu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIzODYyNjI4ODU0Nwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXN1bjUwaS1hMTAwLmMKQEAgLTAs MCArMSw1NTQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvLworLy8g Q29weXJpZ2h0IChjKSAyMDIxLTIwMjIgU2FtdWVsIEhvbGxhbmQgPHNhbXVlbEBzaG9sbGFuZC5v cmc+CisvLworLy8gUGFydGx5IGJhc2VkIG9uIGRyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5p YS5jLCB3aGljaCBpczoKKy8vICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgYnkgTWFyZWsgQmVow7pu IDxrYWJlbEBrZXJuZWwub3JnPgorLy8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9sZWQtY2xhc3MtbXVsdGljb2xvci5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+Cisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisj ZGVmaW5lIExFRENfQ1RSTF9SRUcJCQkweDAwMDAKKyNkZWZpbmUgTEVEQ19DVFJMX1JFR19EQVRB X0xFTkdUSAkJKDB4MWZmZiA8PCAxNikKKyNkZWZpbmUgTEVEQ19DVFJMX1JFR19SR0JfTU9ERQkJ CSgweDcgPDwgNikKKyNkZWZpbmUgTEVEQ19DVFJMX1JFR19MRURDX0VOCQkJQklUKDApCisjZGVm aW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFRwkweDAwMDQKKyNkZWZpbmUgTEVEQ19UMDFfVElN SU5HX0NUUkxfUkVHX1QxSAkJKDB4M2YgPDwgMjEpCisjZGVmaW5lIExFRENfVDAxX1RJTUlOR19D VFJMX1JFR19UMUwJCSgweDFmIDw8IDE2KQorI2RlZmluZSBMRURDX1QwMV9USU1JTkdfQ1RSTF9S RUdfVDBICQkoMHgxZiA8PCA2KQorI2RlZmluZSBMRURDX1QwMV9USU1JTkdfQ1RSTF9SRUdfVDBM CQkoMHgzZiA8PCAwKQorI2RlZmluZSBMRURDX1JFU0VUX1RJTUlOR19DVFJMX1JFRwkweDAwMGMK KyNkZWZpbmUgTEVEQ19SRVNFVF9USU1JTkdfQ1RSTF9SRUdfTEVEX05VTQkoMHgzZmYgPDwgMCkK KyNkZWZpbmUgTEVEQ19EQVRBX1JFRwkJCTB4MDAxNAorI2RlZmluZSBMRURDX0RNQV9DVFJMX1JF RwkJMHgwMDE4CisjZGVmaW5lIExFRENfRE1BX0NUUkxfUkVHX0ZJRk9fVFJJR19MRVZFTAkoMHgx ZiA8PCAwKQorI2RlZmluZSBMRURDX0lOVF9DVFJMX1JFRwkJMHgwMDFjCisjZGVmaW5lIExFRENf SU5UX0NUUkxfUkVHX0dMT0JBTF9JTlRfRU4JCUJJVCg1KQorI2RlZmluZSBMRURDX0lOVF9DVFJM X1JFR19GSUZPX0NQVVJFUV9JTlRfRU4JQklUKDEpCisjZGVmaW5lIExFRENfSU5UX0NUUkxfUkVH X1RSQU5TX0ZJTklTSF9JTlRfRU4JQklUKDApCisjZGVmaW5lIExFRENfSU5UX1NUU19SRUcJCTB4 MDAyMAorI2RlZmluZSBMRURDX0lOVF9TVFNfUkVHX0ZJRk9fQ1BVUkVRX0lOVAlCSVQoMSkKKyNk ZWZpbmUgTEVEQ19JTlRfU1RTX1JFR19UUkFOU19GSU5JU0hfSU5UCUJJVCgwKQorCisjZGVmaW5l IExFRENfRklGT19ERVBUSAkJCTMyCisjZGVmaW5lIExFRENfTUFYX0xFRFMJCQkxMDI0CisKKyNk ZWZpbmUgTEVEU19UT19CWVRFUyhuKQkJKChuKSAqIHNpemVvZih1MzIpKQorCitzdHJ1Y3Qgc3Vu NTBpX2ExMDBfbGVkY19sZWQgeworCXN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgbWNfY2RldjsKKwlz dHJ1Y3QgbWNfc3VibGVkIHN1YmxlZF9pbmZvWzNdOworfTsKKworI2RlZmluZSB0b19sZWRjX2xl ZChtYykgY29udGFpbmVyX29mKG1jLCBzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY19sZWQsIG1jX2Nk ZXYpCisKK3N0cnVjdCBzdW41MGlfYTEwMF9sZWRjX3RpbWluZyB7CisJdTMyIHQwaF9uczsKKwl1 MzIgdDBsX25zOworCXUzMiB0MWhfbnM7CisJdTMyIHQxbF9uczsKKwl1MzIgdHJlc2V0X25zOwor fTsKKworc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2 b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGNsayAqYnVzX2NsazsKKwlzdHJ1Y3QgY2xrICpt b2RfY2xrOworCXN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDsKKworCXUzMiAqYnVmZmVyOwor CXN0cnVjdCBkbWFfY2hhbiAqZG1hX2NoYW47CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWlu dCBwaW9fbGVuZ3RoOworCWludCBwaW9fb2Zmc2V0OworCisJc3BpbmxvY2tfdCBsb2NrOworCWlu dCBuZXh0X2xlbmd0aDsKKwlib29sIHhmZXJfYWN0aXZlOworCisJdTMyIGZvcm1hdDsKKwlzdHJ1 Y3Qgc3VuNTBpX2ExMDBfbGVkY190aW1pbmcgdGltaW5nOworCisJaW50IG51bV9sZWRzOworCXN0 cnVjdCBzdW41MGlfYTEwMF9sZWRjX2xlZCBsZWRzW107Cit9OworCitzdGF0aWMgaW50IHN1bjUw aV9hMTAwX2xlZGNfZG1hX3hmZXIoc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYsIGludCBs ZW5ndGgpCit7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCWRtYV9j b29raWVfdCBjb29raWU7CisKKwlkZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlKHBy aXYtPmRtYV9jaGFuLCBwcml2LT5kbWFfaGFuZGxlLAorCQkJCQkgICBMRURTX1RPX0JZVEVTKGxl bmd0aCksCisJCQkJCSAgIERNQV9NRU1fVE9fREVWLCAwKTsKKwlpZiAoIWRlc2MpCisJCXJldHVy biAtRU5PTUVNOworCisJY29va2llID0gZG1hZW5naW5lX3N1Ym1pdChkZXNjKTsKKwlpZiAoZG1h X3N1Ym1pdF9lcnJvcihjb29raWUpKQorCQlyZXR1cm4gLUVJTzsKKworCWRtYV9hc3luY19pc3N1 ZV9wZW5kaW5nKHByaXYtPmRtYV9jaGFuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBzdW41MGlfYTEwMF9sZWRjX3Bpb194ZmVyKHN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2 LCBpbnQgbGVuZ3RoKQoreworCXUzMiBidXJzdCwgb2Zmc2V0LCB2YWw7CisKKwlpZiAobGVuZ3Ro KSB7CisJCS8qIE5ldyB0cmFuc2ZlciAoRklGTyBpcyBlbXB0eSkuICovCisJCW9mZnNldCA9IDA7 CisJCWJ1cnN0ICA9IG1pbihsZW5ndGgsIExFRENfRklGT19ERVBUSCk7CisJfSBlbHNlIHsKKwkJ LyogRXhpc3RpbmcgdHJhbnNmZXIgKEZJRk8gaXMgaGFsZi1mdWxsKS4gKi8KKwkJbGVuZ3RoID0g cHJpdi0+cGlvX2xlbmd0aDsKKwkJb2Zmc2V0ID0gcHJpdi0+cGlvX29mZnNldDsKKwkJYnVyc3Qg ID0gbWluKGxlbmd0aCwgTEVEQ19GSUZPX0RFUFRIIC8gMik7CisJfQorCisJaW93cml0ZTMyX3Jl cChwcml2LT5iYXNlICsgTEVEQ19EQVRBX1JFRywgcHJpdi0+YnVmZmVyICsgb2Zmc2V0LCBidXJz dCk7CisKKwlpZiAoYnVyc3QgPCBsZW5ndGgpIHsKKwkJcHJpdi0+cGlvX2xlbmd0aCA9IGxlbmd0 aCAtIGJ1cnN0OworCQlwcml2LT5waW9fb2Zmc2V0ID0gb2Zmc2V0ICsgYnVyc3Q7CisKKwkJaWYg KCFvZmZzZXQpIHsKKwkJCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBMRURDX0lOVF9DVFJMX1JF Ryk7CisJCQl2YWwgfD0gTEVEQ19JTlRfQ1RSTF9SRUdfRklGT19DUFVSRVFfSU5UX0VOOworCQkJ d3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5UX0NUUkxfUkVHKTsKKwkJfQorCX0gZWxz ZSB7CisJCS8qIERpc2FibGUgdGhlIHJlcXVlc3QgSVJRIG9uY2UgYWxsIGRhdGEgaXMgd3JpdHRl bi4gKi8KKwkJdmFsID0gcmVhZGwocHJpdi0+YmFzZSArIExFRENfSU5UX0NUUkxfUkVHKTsKKwkJ dmFsICY9IH5MRURDX0lOVF9DVFJMX1JFR19GSUZPX0NQVVJFUV9JTlRfRU47CisJCXdyaXRlbCh2 YWwsIHByaXYtPmJhc2UgKyBMRURDX0lOVF9DVFJMX1JFRyk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBzdW41MGlfYTEwMF9sZWRjX3N0YXJ0X3hmZXIoc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnBy aXYsCisJCQkJCWludCBsZW5ndGgpCit7CisJdTMyIHZhbDsKKworCWRldl9kYmcocHJpdi0+ZGV2 LCAiVXBkYXRpbmcgJWQgTEVEc1xuIiwgbGVuZ3RoKTsKKworCXZhbCA9IHJlYWRsKHByaXYtPmJh c2UgKyBMRURDX0NUUkxfUkVHKTsKKwl2YWwgJj0gfkxFRENfQ1RSTF9SRUdfREFUQV9MRU5HVEg7 CisJdmFsIHw9IGxlbmd0aCA8PCAxNiB8IExFRENfQ1RSTF9SRUdfTEVEQ19FTjsKKwl3cml0ZWwo dmFsLCBwcml2LT5iYXNlICsgTEVEQ19DVFJMX1JFRyk7CisKKwlpZiAobGVuZ3RoID4gTEVEQ19G SUZPX0RFUFRIKSB7CisJCWludCByZXQgPSBzdW41MGlfYTEwMF9sZWRjX2RtYV94ZmVyKHByaXYs IGxlbmd0aCk7CisKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm47CisKKwkJZGV2X3dhcm4ocHJpdi0+ ZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBETUE6ICVkXG4iLCByZXQpOworCX0KKworCXN1bjUwaV9h MTAwX2xlZGNfcGlvX3hmZXIocHJpdiwgbGVuZ3RoKTsKK30KKworc3RhdGljIGlycXJldHVybl90 IHN1bjUwaV9hMTAwX2xlZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qg c3VuNTBpX2ExMDBfbGVkYyAqcHJpdiA9IGRldl9pZDsKKwl1MzIgdmFsOworCisJdmFsID0gcmVh ZGwocHJpdi0+YmFzZSArIExFRENfSU5UX1NUU19SRUcpOworCisJaWYgKHZhbCAmIExFRENfSU5U X1NUU19SRUdfVFJBTlNfRklOSVNIX0lOVCkgeworCQlpbnQgbmV4dF9sZW5ndGg7CisKKwkJLyog U3RhcnQgdGhlIG5leHQgdHJhbnNmZXIgaWYgbmVlZGVkLiAqLworCQlzcGluX2xvY2soJnByaXYt PmxvY2spOworCQluZXh0X2xlbmd0aCA9IHByaXYtPm5leHRfbGVuZ3RoOworCQlpZiAobmV4dF9s ZW5ndGgpCisJCQlwcml2LT5uZXh0X2xlbmd0aCA9IDA7CisJCWVsc2UKKwkJCXByaXYtPnhmZXJf YWN0aXZlID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCQlpZiAobmV4 dF9sZW5ndGgpCisJCQlzdW41MGlfYTEwMF9sZWRjX3N0YXJ0X3hmZXIocHJpdiwgbmV4dF9sZW5n dGgpOworCX0gZWxzZSBpZiAodmFsICYgTEVEQ19JTlRfU1RTX1JFR19GSUZPX0NQVVJFUV9JTlQp IHsKKwkJLyogQ29udGludWUgdGhlIGN1cnJlbnQgdHJhbnNmZXIuICovCisJCXN1bjUwaV9hMTAw X2xlZGNfcGlvX3hmZXIocHJpdiwgMCk7CisJfQorCisJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSAr IExFRENfSU5UX1NUU19SRUcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg dm9pZCBzdW41MGlfYTEwMF9sZWRjX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYg KmNkZXYsCisJCQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3Ry dWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY2Rldi0+ZGV2LT5w YXJlbnQpOworCXN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgKm1jX2NkZXYgPSBsY2Rldl90b19tY2Nk ZXYoY2Rldik7CisJc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfbGVkICpsZWQgPSB0b19sZWRjX2xl ZChtY19jZGV2KTsKKwlpbnQgYWRkciA9IGxlZCAtIHByaXYtPmxlZHM7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwlib29sIHhmZXJfYWN0aXZlOworCWludCBuZXh0X2xlbmd0aDsKKworCWxlZF9t Y19jYWxjX2NvbG9yX2NvbXBvbmVudHMobWNfY2RldiwgYnJpZ2h0bmVzcyk7CisKKwlwcml2LT5i dWZmZXJbYWRkcl0gPSBsZWQtPnN1YmxlZF9pbmZvWzBdLmJyaWdodG5lc3MgPDwgMTYgfAorCQkJ ICAgICBsZWQtPnN1YmxlZF9pbmZvWzFdLmJyaWdodG5lc3MgPDwgIDggfAorCQkJICAgICBsZWQt PnN1YmxlZF9pbmZvWzJdLmJyaWdodG5lc3M7CisKKwlkZXZfZGJnKHByaXYtPmRldiwgIkxFRCAl ZCAtPiAjJTA2eFxuIiwgYWRkciwgcHJpdi0+YnVmZmVyW2FkZHJdKTsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbmV4dF9sZW5ndGggPSBtYXgocHJpdi0+bmV4 dF9sZW5ndGgsIGFkZHIgKyAxKTsKKwl4ZmVyX2FjdGl2ZSA9IHByaXYtPnhmZXJfYWN0aXZlOwor CWlmICh4ZmVyX2FjdGl2ZSkKKwkJcHJpdi0+bmV4dF9sZW5ndGggPSBuZXh0X2xlbmd0aDsKKwll bHNlCisJCXByaXYtPnhmZXJfYWN0aXZlID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXhmZXJfYWN0aXZlKQorCQlzdW41MGlfYTEw MF9sZWRjX3N0YXJ0X3hmZXIocHJpdiwgbmV4dF9sZW5ndGgpOworfQorCitzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3Qgc3VuNTBpX2ExMDBfbGVkY19mb3JtYXRzW10gPSB7CisJInJnYiIsCisJInJi ZyIsCisJImdyYiIsCisJImdiciIsCisJImJyZyIsCisJImJnciIsCit9OworCitzdGF0aWMgaW50 IHN1bjUwaV9hMTAwX2xlZGNfcGFyc2VfZm9ybWF0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAsCisJCQkJCSBzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkYyAqcHJpdikKK3sKKwljb25zdCBjaGFy ICpmb3JtYXQgPSAiZ3JiIjsKKwl1MzIgaTsKKworCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5w LCAiYWxsd2lubmVyLHBpeGVsLWZvcm1hdCIsICZmb3JtYXQpOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoc3VuNTBpX2ExMDBfbGVkY19mb3JtYXRzKTsgKytpKSB7CisJCWlmICghc3Ry Y21wKGZvcm1hdCwgc3VuNTBpX2ExMDBfbGVkY19mb3JtYXRzW2ldKSkgeworCQkJcHJpdi0+Zm9y bWF0ID0gaTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZGV2X2Vycihwcml2LT5kZXYsICJC YWQgcGl4ZWwgZm9ybWF0ICclcydcbiIsIGZvcm1hdCk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30K Kworc3RhdGljIHZvaWQgc3VuNTBpX2ExMDBfbGVkY19zZXRfZm9ybWF0KHN0cnVjdCBzdW41MGlf YTEwMF9sZWRjICpwcml2KQoreworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChwcml2LT5iYXNl ICsgTEVEQ19DVFJMX1JFRyk7CisJdmFsICY9IH5MRURDX0NUUkxfUkVHX1JHQl9NT0RFOworCXZh bCB8PSBwcml2LT5mb3JtYXQgPDwgNjsKKwl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19D VFJMX1JFRyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY190aW1p bmcgc3VuNTBpX2ExMDBfbGVkY19kZWZhdWx0X3RpbWluZyA9IHsKKwkudDBoX25zID0gMzM2LAor CS50MGxfbnMgPSA4NDAsCisJLnQxaF9ucyA9IDg4MiwKKwkudDFsX25zID0gMjk0LAorCS50cmVz ZXRfbnMgPSAzMDAwMDAsCit9OworCitzdGF0aWMgaW50IHN1bjUwaV9hMTAwX2xlZGNfcGFyc2Vf dGltaW5nKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSBzdHJ1Y3Qgc3VuNTBp X2ExMDBfbGVkYyAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY190aW1pbmcgKnRp bWluZyA9ICZwcml2LT50aW1pbmc7CisKKwkqdGltaW5nID0gc3VuNTBpX2ExMDBfbGVkY19kZWZh dWx0X3RpbWluZzsKKworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWxsd2lubmVyLHQwaC1u cyIsICZ0aW1pbmctPnQwaF9ucyk7CisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhbGx3aW5u ZXIsdDBsLW5zIiwgJnRpbWluZy0+dDBsX25zKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwg ImFsbHdpbm5lcix0MWgtbnMiLCAmdGltaW5nLT50MWhfbnMpOworCW9mX3Byb3BlcnR5X3JlYWRf dTMyKG5wLCAiYWxsd2lubmVyLHQxbC1ucyIsICZ0aW1pbmctPnQxbF9ucyk7CisJb2ZfcHJvcGVy dHlfcmVhZF91MzIobnAsICJhbGx3aW5uZXIsdHJlc2V0LW5zIiwgJnRpbWluZy0+dHJlc2V0X25z KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW41MGlfYTEwMF9sZWRjX3NldF90 aW1pbmcoc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IHN1 bjUwaV9hMTAwX2xlZGNfdGltaW5nICp0aW1pbmcgPSAmcHJpdi0+dGltaW5nOworCXVuc2lnbmVk IGxvbmcgbW9kX2ZyZXEgPSBjbGtfZ2V0X3JhdGUocHJpdi0+bW9kX2Nsayk7CisJdTMyIGN5Y2xl X25zID0gTlNFQ19QRVJfU0VDIC8gbW9kX2ZyZXE7CisJdTMyIHZhbDsKKworCXZhbCA9ICh0aW1p bmctPnQxaF9ucyAvIGN5Y2xlX25zKSA8PCAyMSB8CisJICAgICAgKHRpbWluZy0+dDFsX25zIC8g Y3ljbGVfbnMpIDw8IDE2IHwKKwkgICAgICAodGltaW5nLT50MGhfbnMgLyBjeWNsZV9ucykgPDwg IDYgfAorCSAgICAgICh0aW1pbmctPnQwbF9ucyAvIGN5Y2xlX25zKTsKKwl3cml0ZWwodmFsLCBw cml2LT5iYXNlICsgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHKTsKKworCXZhbCA9ICh0aW1pbmct PnRyZXNldF9ucyAvIGN5Y2xlX25zKSA8PCAxNiB8CisJICAgICAgKHByaXYtPm51bV9sZWRzIC0g MSk7CisJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfUkVTRVRfVElNSU5HX0NUUkxfUkVH KTsKK30KKworc3RhdGljIGludCBzdW41MGlfYTEwMF9sZWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZXNldF9jb250cm9sX2Rl YXNzZXJ0KHByaXYtPnJlc2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmJ1c19jbGspOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2Fzc2VydF9yZXNldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5tb2RfY2xr KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kaXNhYmxlX2J1c19jbGs7CisKKwlzdW41MGlfYTEw MF9sZWRjX3NldF9mb3JtYXQocHJpdik7CisJc3VuNTBpX2ExMDBfbGVkY19zZXRfdGltaW5nKHBy aXYpOworCisJLyogVGhlIHRyaWdnZXIgbGV2ZWwgbXVzdCBiZSBhdCBsZWFzdCB0aGUgYnVyc3Qg bGVuZ3RoLiAqLworCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBMRURDX0RNQV9DVFJMX1JFRyk7 CisJdmFsICY9IH5MRURDX0RNQV9DVFJMX1JFR19GSUZPX1RSSUdfTEVWRUw7CisJdmFsIHw9IExF RENfRklGT19ERVBUSCAvIDI7CisJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfRE1BX0NU UkxfUkVHKTsKKworCXZhbCA9IExFRENfSU5UX0NUUkxfUkVHX0dMT0JBTF9JTlRfRU4gfAorCSAg ICAgIExFRENfSU5UX0NUUkxfUkVHX1RSQU5TX0ZJTklTSF9JTlRfRU47CisJd3JpdGVsKHZhbCwg cHJpdi0+YmFzZSArIExFRENfSU5UX0NUUkxfUkVHKTsKKworCXJldHVybiAwOworCitlcnJfZGlz YWJsZV9idXNfY2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5idXNfY2xrKTsKK2Vy cl9hc3NlcnRfcmVzZXQ6CisJcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cmVzZXQpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdW41MGlfYTEwMF9sZWRjX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+bW9kX2Ns ayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmJ1c19jbGspOworCXJlc2V0X2NvbnRy b2xfYXNzZXJ0KHByaXYtPnJlc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBz dW41MGlfYTEwMF9sZWRjX2RtYV9jbGVhbnVwKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN1bjUw aV9hMTAwX2xlZGMgKnByaXYgPSBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBkbWFl bmdpbmVfZ2V0X2RtYV9kZXZpY2UocHJpdi0+ZG1hX2NoYW4pOworCisJaWYgKHByaXYtPmJ1ZmZl cikKKwkJZG1hX2ZyZWVfd2MoZG1hX2RldiwgTEVEU19UT19CWVRFUyhwcml2LT5udW1fbGVkcyks CisJCQkgICAgcHJpdi0+YnVmZmVyLCBwcml2LT5kbWFfaGFuZGxlKTsKKwlkbWFfcmVsZWFzZV9j aGFubmVsKHByaXYtPmRtYV9jaGFuKTsKK30KKworc3RhdGljIGludCBzdW41MGlfYTEwMF9sZWRj X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IGRl dmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkbWFfc2xhdmVfY29u ZmlnIGRtYV9jZmcgPSB7fTsKKwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGEgPSB7fTsK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq Y2hpbGQ7CisJc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXY7CisJc3RydWN0IHJlc291cmNl ICptZW07CisJaW50IGNvdW50LCBpcnEsIHJldDsKKworCWNvdW50ID0gb2ZfZ2V0X2F2YWlsYWJs ZV9jaGlsZF9jb3VudChucCk7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYg KGNvdW50ID4gTEVEQ19NQVhfTEVEUykgeworCQlkZXZfZXJyKGRldiwgIlRvbyBtYW55IExFRHMh IChtYXggaXMgJWQpXG4iLCBMRURDX01BWF9MRURTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHN0cnVjdF9zaXplKHByaXYsIGxlZHMsIGNvdW50 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYt PmRldiA9IGRldjsKKwlwcml2LT5udW1fbGVkcyA9IGNvdW50OworCXNwaW5fbG9ja19pbml0KCZw cml2LT5sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKworCXJldCA9IHN1bjUw aV9hMTAwX2xlZGNfcGFyc2VfZm9ybWF0KG5wLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gc3VuNTBpX2ExMDBfbGVkY19wYXJzZV90aW1pbmcobnAsIHByaXYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcml2LT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9n ZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgJm1lbSk7CisJaWYgKElTX0VSUihwcml2 LT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7CisKKwlwcml2LT5idXNfY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgImJ1cyIpOworCWlmIChJU19FUlIocHJpdi0+YnVzX2Nsaykp CisJCXJldHVybiBQVFJfRVJSKHByaXYtPmJ1c19jbGspOworCisJcHJpdi0+bW9kX2NsayA9IGRl dm1fY2xrX2dldChkZXYsICJtb2QiKTsKKwlpZiAoSVNfRVJSKHByaXYtPm1vZF9jbGspKQorCQly ZXR1cm4gUFRSX0VSUihwcml2LT5tb2RfY2xrKTsKKworCXByaXYtPnJlc2V0ID0gZGV2bV9yZXNl dF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJl c2V0KSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cmVzZXQpOworCisJcHJpdi0+ZG1hX2NoYW4g PSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgInR4Iik7CisJaWYgKElTX0VSUihwcml2LT5kbWFfY2hh bikpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmRtYV9jaGFuKTsKKworCXJldCA9IGRldm1fYWRk X2FjdGlvbl9vcl9yZXNldChkZXYsIHN1bjUwaV9hMTAwX2xlZGNfZG1hX2NsZWFudXAsIHByaXYp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkbWFfY2ZnLmRzdF9hZGRyCT0gbWVtLT5z dGFydCArIExFRENfREFUQV9SRUc7CisJZG1hX2NmZy5kc3RfYWRkcl93aWR0aAk9IERNQV9TTEFW RV9CVVNXSURUSF80X0JZVEVTOworCWRtYV9jZmcuZHN0X21heGJ1cnN0CT0gTEVEQ19GSUZPX0RF UFRIIC8gMjsKKwlyZXQgPSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKHByaXYtPmRtYV9jaGFuLCAm ZG1hX2NmZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaXYtPmJ1ZmZlciA9IGRt YV9hbGxvY193YyhkbWFlbmdpbmVfZ2V0X2RtYV9kZXZpY2UocHJpdi0+ZG1hX2NoYW4pLAorCQkJ CSAgICBMRURTX1RPX0JZVEVTKHByaXYtPm51bV9sZWRzKSwKKwkJCQkgICAgJnByaXYtPmRtYV9o YW5kbGUsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YnVmZmVyKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJ CXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBzdW41MGlf YTEwMF9sZWRjX2lycSwKKwkJCSAgICAgICAwLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3VuNTBpX2ExMDBfbGVkY19yZXN1bWUoZGV2 KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxk X29mX25vZGUobnAsIGNoaWxkKSB7CisJCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjX2xlZCAqbGVk OworCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2OworCQl1MzIgYWRkciwgY29sb3I7CisKKwkJ cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJyZWciLCAmYWRkcik7CisJCWlmIChy ZXQgfHwgYWRkciA+PSBjb3VudCkgeworCQkJZGV2X2VycihkZXYsICJMRUQgJ3JlZycgdmFsdWVz IG11c3QgYmUgZnJvbSAwIHRvICVkXG4iLAorCQkJCXByaXYtPm51bV9sZWRzIC0gMSk7CisJCQly ZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfcHV0X2NoaWxkOworCQl9CisKKwkJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJjb2xvciIsICZjb2xvcik7CisJCWlmIChyZXQgfHwg Y29sb3IgIT0gTEVEX0NPTE9SX0lEX1JHQikgeworCQkJZGV2X2VycihkZXYsICJMRUQgJ2NvbG9y JyBtdXN0IGJlIExFRF9DT0xPUl9JRF9SR0JcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdv dG8gZXJyX3B1dF9jaGlsZDsKKwkJfQorCisJCWxlZCA9ICZwcml2LT5sZWRzW2FkZHJdOworCisJ CWxlZC0+c3VibGVkX2luZm9bMF0uY29sb3JfaW5kZXggPSBMRURfQ09MT1JfSURfUkVEOworCQls ZWQtPnN1YmxlZF9pbmZvWzBdLmNoYW5uZWwgPSAwOworCQlsZWQtPnN1YmxlZF9pbmZvWzFdLmNv bG9yX2luZGV4ID0gTEVEX0NPTE9SX0lEX0dSRUVOOworCQlsZWQtPnN1YmxlZF9pbmZvWzFdLmNo YW5uZWwgPSAxOworCQlsZWQtPnN1YmxlZF9pbmZvWzJdLmNvbG9yX2luZGV4ID0gTEVEX0NPTE9S X0lEX0JMVUU7CisJCWxlZC0+c3VibGVkX2luZm9bMl0uY2hhbm5lbCA9IDI7CisKKwkJbGVkLT5t Y19jZGV2Lm51bV9jb2xvcnMgPSBBUlJBWV9TSVpFKGxlZC0+c3VibGVkX2luZm8pOworCQlsZWQt Pm1jX2NkZXYuc3VibGVkX2luZm8gPSBsZWQtPnN1YmxlZF9pbmZvOworCisJCWNkZXYgPSAmbGVk LT5tY19jZGV2LmxlZF9jZGV2OworCQljZGV2LT5tYXhfYnJpZ2h0bmVzcyA9IFU4X01BWDsKKwkJ Y2Rldi0+YnJpZ2h0bmVzc19zZXQgPSBzdW41MGlfYTEwMF9sZWRjX2JyaWdodG5lc3Nfc2V0Owor CisJCWluaXRfZGF0YS5md25vZGUgPSBvZl9md25vZGVfaGFuZGxlKGNoaWxkKTsKKworCQlyZXQg PSBkZXZtX2xlZF9jbGFzc2Rldl9tdWx0aWNvbG9yX3JlZ2lzdGVyX2V4dChkZXYsCisJCQkJCQkJ CSZsZWQtPm1jX2NkZXYsCisJCQkJCQkJCSZpbml0X2RhdGEpOworCQlpZiAocmV0KSB7CisJCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBMRUQgJXU6ICVkXG4iLAorCQkJCWFkZHIs IHJldCk7CisJCQlnb3RvIGVycl9wdXRfY2hpbGQ7CisJCX0KKwl9CisKKwlkZXZfaW5mbyhkZXYs ICJSZWdpc3RlcmVkICVkIExFRHNcbiIsIHByaXYtPm51bV9sZWRzKTsKKworCXJldHVybiAwOwor CitlcnJfcHV0X2NoaWxkOgorCW9mX25vZGVfcHV0KGNoaWxkKTsKKwlzdW41MGlfYTEwMF9sZWRj X3N1c3BlbmQoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN1 bjUwaV9hMTAwX2xlZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3VuNTBpX2ExMDBfbGVkY19zdXNwZW5kKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHN1bjUwaV9hMTAwX2xlZGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdW41MGlfYTEwMF9sZWRjX3N1c3BlbmQoJnBkZXYtPmRldik7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjUwaV9hMTAwX2xlZGNfb2Zf bWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41MGktYTEwMC1sZWRj IiB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3VuNTBpX2ExMDBfbGVkY19v Zl9tYXRjaCk7CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhzdW41MGlfYTEwMF9sZWRjX3Bt LAorCQkJIHN1bjUwaV9hMTAwX2xlZGNfc3VzcGVuZCwgc3VuNTBpX2ExMDBfbGVkY19yZXN1bWUp OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW41MGlfYTEwMF9sZWRjX2RyaXZl ciA9IHsKKwkucHJvYmUJCT0gc3VuNTBpX2ExMDBfbGVkY19wcm9iZSwKKwkucmVtb3ZlCQk9IHN1 bjUwaV9hMTAwX2xlZGNfcmVtb3ZlLAorCS5zaHV0ZG93bgk9IHN1bjUwaV9hMTAwX2xlZGNfc2h1 dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJzdW41MGktYTEwMC1sZWRjIiwKKwkJ Lm9mX21hdGNoX3RhYmxlCT0gc3VuNTBpX2ExMDBfbGVkY19vZl9tYXRjaCwKKwkJLnBtCQk9IHBt X3B0cigmc3VuNTBpX2ExMDBfbGVkY19wbSksCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJp dmVyKHN1bjUwaV9hMTAwX2xlZGNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiU2FtdWVsIEhv bGxhbmQgPHNhbXVlbEBzaG9sbGFuZC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdp bm5lciBBMTAwIExFRCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIp OwotLSAKMi4zNy4zCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=