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=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 3EBDCC388F3 for ; Tue, 1 Oct 2019 06:17:26 +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 E8179215EA for ; Tue, 1 Oct 2019 06:17:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="mFesppqm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="O0v/uemz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E8179215EA Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gb/3yynU9UGEed9TaD8qcHL2k2Bvj83sm6k0JWjVIbo=; b=mFesppqmzyvEVZ k3PYT5HQyLE7d+kXNbe69dJBixhwRbE602u4Ygm/bPKfmmJE1zOPWfPpod2lChtydq8OC84drPyJA biSkSpGfKTjsmdK4zqhF5D8z4VhVnUFopIsVQDmPv8LiBk6B12CW2tN5dZg1HWzfrogBgxzyDkBhB m+/HiDgpJdZYHVVp4/rpDtsGJkNPXGc58bVnRuq6AP0Juub76hA2JvQYz3hT4hyT5Q8yJJjwMLtzs xOQXOWuWIFenwp2DtCmpdfr53qXYxzPB+mQZAlcXdZRvcMf2ua1GvQmwlWaDmfZyYIRmjAW3a9vuj wAiQDq/PQw7Zr1ecoUtg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBTQ-0000yl-Cz; Tue, 01 Oct 2019 06:17:24 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBSi-0008LJ-B1 for linux-arm-kernel@lists.infradead.org; Tue, 01 Oct 2019 06:16:46 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id x916GSPY009169; Tue, 1 Oct 2019 01:16:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1569910588; bh=m5KL+oiWVrJFdXabgRKd41x2LyJT7V1wiUff8CPw/bo=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=O0v/uemzTvIknOH1u9qmGkc//ic33ta+eLUg/CCvRf42CDdFq++uHsjqwheR7B7/n TwZY9618miciksAMjpyf92G9l3QsAeSIdy8w1B47GCRK0RGpKnQRxpSH4CrCddyBK/ rK7rHK7HS/HacFDbhHy799FJF7SMeTgc86HsZQCg= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x916GR1i115121 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 1 Oct 2019 01:16:28 -0500 Received: from DFLE111.ent.ti.com (10.64.6.32) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 1 Oct 2019 01:16:27 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Tue, 1 Oct 2019 01:16:27 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x916GGX7090310; Tue, 1 Oct 2019 01:16:23 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v3 02/14] soc: ti: k3: add navss ringacc driver Date: Tue, 1 Oct 2019 09:16:52 +0300 Message-ID: <20191001061704.2399-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191001061704.2399-1-peter.ujfalusi@ti.com> References: <20191001061704.2399-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190930_231640_513046_640CF3BA X-CRM114-Status: GOOD ( 25.40 ) 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: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KClRoZSBS aW5nIEFjY2VsZXJhdG9yIChSSU5HQUNDIG9yIFJBKSBwcm92aWRlcyBoYXJkd2FyZSBhY2NlbGVy YXRpb24gdG8KZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBh IHByb2R1Y2VyIGFuZCBhIGNvbnN1bWVyLgpUaGVyZSBpcyBvbmUgUklOR0FDQyBtb2R1bGUgcGVy IE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MuCgpUaGUgUklOR0FDQyBjb252ZXJ0cyBjb25zdGFudC1h ZGRyZXNzIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvIGVxdWl2YWxlbnQKcmVhZCBvciB3cml0 ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGluIG1lbW9yeS4gVGhlIFJJ TkdBQ0MKZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFjaCBETUEgY29udHJvbGxlciB3aGljaCBu ZWVkcyB0byBhY2Nlc3MgcmluZwplbGVtZW50cyBmcm9tIGhhdmluZyB0byBrbm93IHRoZSBjdXJy ZW50IHN0YXRlIG9mIHRoZSByaW5nIChiYXNlIGFkZHJlc3MsCmN1cnJlbnQgb2Zmc2V0KS4gVGhl IERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8gYQpzcGVj aWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBtYXBzIHRvIHRoZSBzb3VyY2UgaW50ZXJmYWNlIG9u IHRoZSBSSU5HQUNDKQphbmQgdGhlIFJJTkdBQ0MgcmVwbGFjZXMgdGhlIGFkZHJlc3MgZm9yIHRo ZSB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3IGFkZHJlc3MKd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhl IGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRoZSByaW5nIChoZWFkIGZvciByZWFkcywKdGFpbCBm b3Igd3JpdGVzKS4gU2luY2UgdGhlIFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlw bGUgRE1BCmNvbnRyb2xsZXJzIG9yIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvaGVyZW50bHkg c2hhcmUgdGhlIHNhbWUgcmluZ3MgYXMKYXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0 byBwbGFjZSBkYXRhIHdoaWNoIGlzIGRlc3RpbmVkIHRvd2FyZHMKc29mdHdhcmUgaW50byBjYWNo ZWQgbWVtb3J5IGRpcmVjdGx5LgoKU3VwcG9ydGVkIHJpbmcgbW9kZXM6Ci0gUmluZyBNb2RlCi0g TWVzc2FnaW5nIE1vZGUKLSBDcmVkZW50aWFscyBNb2RlCi0gUXVldWUgTWFuYWdlciBNb2RlCgpU SS1TQ0kgaW50ZWdyYXRpb246CgpUZXhhcyBJbnN0cnVtZW50J3MgU3lzdGVtIENvbnRyb2wgSW50 ZXJmYWNlIChUSS1TQ0kpIE1lc3NhZ2UgUHJvdG9jb2wgbm93CmhhcyBjb250cm9sIG92ZXIgUmlu Z2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBhbmQgUmluZ3MKY29uZmlndXJh dGlvbi4KClRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgb2YgVEktU0NJIFJpbmdhY2MgbW9kdWxl IFJNIHByb3RvY29sCmludHJvZHVjZWQgYXMgb3B0aW9uIHRocm91Z2ggRFQgcGFyYW1ldGVyczoK LSB0aSxzY2k6IHBoYW5kbGUgb24gVEktU0NJIGZpcm13YXJlIGNvbnRyb2xsZXIgRFQgbm9kZQot IHRpLHNjaS1kZXYtaWQ6IFRJLVNDSSBkZXZpY2UgaWRlbnRpZmllciBhcyBwZXIgVEktU0NJIGZp cm13YXJlIHNwZWMKCmlmIGJvdGggcGFyYW1ldGVycyBwcmVzZW50IC0gUmluZ2FjYyBkcml2ZXIg d2lsbCBjb25maWd1cmUvZnJlZS9yZXNldCBSaW5ncwp1c2luZyBUSS1TQ0kgTWVzc2FnZSBSaW5n YWNjIFJNIFByb3RvY29sLgoKVGhlIFJpbmdhY2MgZHJpdmVyIG1hbmFnZXMgUmluZ3MgYWxsb2Nh dGlvbiBieSBpdHNlbGYgbm93IGFuZCByZXF1ZXN0cwpUSS1TQ0kgZmlybXdhcmUgdG8gYWxsb2Nh dGUgYW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBvbmx5LiBJdCdzIGRvbmUKdGhpcyB3YXkg YmVjYXVzZSwgTGludXggZHJpdmVyIGltcGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRp b24gYW5kCmNvbmZpZ3VyYXRpb24gKGFsbG9jYXRlIHJpbmcgYW5kIGNvbmZpZ3VyZSByaW5nKSB3 aGlsZSBJLVNDSSBNZXNzYWdlClByb3RvY29sIHN1cHBvcnRzIG9ubHkgb25lIGNvbWJpbmVkIG9w ZXJhdGlvbiAoYWxsb2NhdGUrY29uZmlndXJlKS4KClNpZ25lZC1vZmYtYnk6IEdyeWdvcmlpIFN0 cmFzaGtvIDxncnlnb3JpaS5zdHJhc2hrb0B0aS5jb20+ClNpZ25lZC1vZmYtYnk6IFBldGVyIFVq ZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Ci0tLQogZHJpdmVycy9zb2MvdGkvS2NvbmZp ZyAgICAgICAgICAgIHwgICAxMiArCiBkcml2ZXJzL3NvYy90aS9NYWtlZmlsZSAgICAgICAgICAg fCAgICAxICsKIGRyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYyAgICAgICB8IDExNjUgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2Mu aCB8ICAyNDUgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE0MjMgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2MuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc29jL3RpL0tjb25maWcgYi9kcml2ZXJzL3NvYy90aS9LY29uZmlnCmluZGV4IGNmNTQ1 ZjQyOGQwMy4uODc3MjJkMzMzMzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy90aS9LY29uZmln CisrKyBiL2RyaXZlcnMvc29jL3RpL0tjb25maWcKQEAgLTgwLDYgKzgwLDE4IEBAIGNvbmZpZyBU SV9TQ0lfUE1fRE9NQUlOUwogCSAgY2FsbGVkIHRpX3NjaV9wbV9kb21haW5zLiBOb3RlIHRoaXMg aXMgbmVlZGVkIGVhcmx5IGluIGJvb3QgYmVmb3JlCiAJICByb290ZnMgbWF5IGJlIGF2YWlsYWJs ZS4KIAorY29uZmlnIFRJX0szX1JJTkdBQ0MKKwl0cmlzdGF0ZSAiSzMgUmluZyBhY2NlbGVyYXRv ciBTdWIgU3lzdGVtIgorCWRlcGVuZHMgb24gQVJDSF9LMyB8fCBDT01QSUxFX1RFU1QKKwlkZXBl bmRzIG9uIFRJX1NDSV9JTlRBX0lSUUNISVAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgeSBo ZXJlIHRvIHN1cHBvcnQgdGhlIEszIFJpbmcgYWNjZWxlcmF0b3IgbW9kdWxlLgorCSAgVGhlIFJp bmcgQWNjZWxlcmF0b3IgKFJJTkdBQ0Mgb3IgUkEpICBwcm92aWRlcyBoYXJkd2FyZSBhY2NlbGVy YXRpb24KKwkgIHRvIGVuYWJsZSBzdHJhaWdodGZvcndhcmQgcGFzc2luZyBvZiB3b3JrIGJldHdl ZW4gYSBwcm9kdWNlcgorCSAgYW5kIGEgY29uc3VtZXIuIFRoZXJlIGlzIG9uZSBSSU5HQUNDIG1v ZHVsZSBwZXIgTkFWU1Mgb24gVEkgQU02NXggU29DcworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwog ZW5kaWYgIyBTT0NfVEkKIAogY29uZmlnIFRJX1NDSV9JTlRBX01TSV9ET01BSU4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlIGIvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKaW5k ZXggYjM4NjhkMzkyZDRmLi5jYzRiYzhiMDhiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3Rp L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCkBAIC05LDMgKzksNCBAQCBv YmotJChDT05GSUdfQU1YM19QTSkJCQkrPSBwbTMzeHgubwogb2JqLSQoQ09ORklHX1dLVVBfTTNf SVBDKQkJKz0gd2t1cF9tM19pcGMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9QTV9ET01BSU5TKQkJ Kz0gdGlfc2NpX3BtX2RvbWFpbnMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9JTlRBX01TSV9ET01B SU4pCSs9IHRpX3NjaV9pbnRhX21zaS5vCitvYmotJChDT05GSUdfVElfSzNfUklOR0FDQykJCSs9 IGszLXJpbmdhY2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jIGIv ZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNDcyOGE3OWZkMmMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2Mv dGkvazMtcmluZ2FjYy5jCkBAIC0wLDAgKzEsMTE2NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBUSSBLMyBOQVZTUyBSaW5nIEFjY2VsZXJhdG9yIHN1YnN5 c3RlbSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMg SW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3NvYy90aS9rMy1yaW5nYWNjLmg+CisjaW5jbHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9wcm90 b2NvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfaW50YV9tc2kuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKworc3Rh dGljIExJU1RfSEVBRChrM19yaW5nYWNjX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChrM19y aW5nYWNjX2xpc3RfbG9jayk7CisKKyNkZWZpbmUgSzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VM Q05UX01BU0sJCUdFTk1BU0soMTksIDApCisKKy8qKgorICogc3RydWN0IGszX3JpbmdfcnRfcmVn cyAtICBUaGUgUkEgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzIHJlZ2lvbgorICovCitzdHJ1Y3Qg azNfcmluZ19ydF9yZWdzIHsKKwl1MzIJcmVzdl8xNls0XTsKKwl1MzIJZGI7CQkvKiBSVCBSaW5n IE4gRG9vcmJlbGwgUmVnaXN0ZXIgKi8KKwl1MzIJcmVzdl80WzFdOworCXUzMglvY2M7CQkvKiBS VCBSaW5nIE4gT2NjdXBhbmN5IFJlZ2lzdGVyICovCisJdTMyCWluZHg7CQkvKiBSVCBSaW5nIE4g Q3VycmVudCBJbmRleCBSZWdpc3RlciAqLworCXUzMglod29jYzsJCS8qIFJUIFJpbmcgTiBIYXJk d2FyZSBPY2N1cGFuY3kgUmVnaXN0ZXIgKi8KKwl1MzIJaHdpbmR4OwkJLyogUlQgUmluZyBOIEN1 cnJlbnQgSW5kZXggUmVnaXN0ZXIgKi8KK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19SVF9SRUdT X1NURVAJMHgxMDAwCisKKy8qKgorICogc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIC0gIFRoZSBS aW5nIEFjY2VsZXJhdG9yIFF1ZXVlcyBSZWdpc3RlcnMgcmVnaW9uCisgKi8KK3N0cnVjdCBrM19y aW5nX2ZpZm9fcmVncyB7CisJdTMyCWhlYWRfZGF0YVsxMjhdOwkJLyogUmluZyBIZWFkIEVudHJ5 IERhdGEgUmVnaXN0ZXJzICovCisJdTMyCXRhaWxfZGF0YVsxMjhdOwkJLyogUmluZyBUYWlsIEVu dHJ5IERhdGEgUmVnaXN0ZXJzICovCisJdTMyCXBlZWtfaGVhZF9kYXRhWzEyOF07CS8qIFJpbmcg UGVlayBIZWFkIEVudHJ5IERhdGEgUmVncyAqLworCXUzMglwZWVrX3RhaWxfZGF0YVsxMjhdOwkv KiBSaW5nIFBlZWsgVGFpbCBFbnRyeSBEYXRhIFJlZ3MgKi8KK307CisKKy8qKgorICogc3RydWN0 IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdzIC0gUkEgUHJveHkgR2xvYmFsIENvbmZpZyBNTUlP IFJlZ2lvbgorICovCitzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgeworCXUzMgly ZXZpc2lvbjsJLyogUmV2aXNpb24gUmVnaXN0ZXIgKi8KKwl1MzIJY29uZmlnOwkJLyogQ29uZmln IFJlZ2lzdGVyICovCit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfQ0ZHX1RIUkVBRFNf TUFTSwkJR0VOTUFTSygxNSwgMCkKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV90 YXJnZXRfcmVncyAtICBQcm94eSBEYXRhcGF0aCBNTUlPIFJlZ2lvbgorICovCitzdHJ1Y3QgazNf cmluZ2FjY19wcm94eV90YXJnZXRfcmVncyB7CisJdTMyCWNvbnRyb2w7CS8qIFByb3h5IENvbnRy b2wgUmVnaXN0ZXIgKi8KKwl1MzIJc3RhdHVzOwkJLyogUHJveHkgU3RhdHVzIFJlZ2lzdGVyICov CisJdTgJcmVzdl81MTJbNTA0XTsKKwl1MzIJZGF0YVsxMjhdOwkvKiBQcm94eSBEYXRhIFJlZ2lz dGVyICovCit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVAJMHgxMDAw CisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQJKC0xKQorCitlbnVtIGszX3Jpbmdh Y2NfcHJveHlfYWNjZXNzX21vZGUgeworCVBST1hZX0FDQ0VTU19NT0RFX0hFQUQgPSAwLAorCVBS T1hZX0FDQ0VTU19NT0RFX1RBSUwgPSAxLAorCVBST1hZX0FDQ0VTU19NT0RFX1BFRUtfSEVBRCA9 IDIsCisJUFJPWFlfQUNDRVNTX01PREVfUEVFS19UQUlMID0gMywKK307CisKKyNkZWZpbmUgSzNf UklOR0FDQ19GSUZPX1dJTkRPV19TSVpFX0JZVEVTICAoNTEyVSkKKyNkZWZpbmUgSzNfUklOR0FD Q19GSUZPX1JFR1NfU1RFUAkweDEwMDAKKyNkZWZpbmUgSzNfUklOR0FDQ19NQVhfREJfUklOR19D TlQgICAgKDEyN1UpCisKKy8qKgorICogc3RydWN0IGszX3Jpbmdfb3BzIC0gIFJpbmcgb3BlcmF0 aW9ucworICovCitzdHJ1Y3QgazNfcmluZ19vcHMgeworCWludCAoKnB1c2hfdGFpbCkoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcHVzaF9oZWFkKShzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxtKTsKKwlpbnQgKCpwb3BfdGFpbCkoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcG9wX2hlYWQpKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbG0pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZyAtIFJBIFJpbmcgZGVz Y3JpcHRvcgorICoKKyAqIEBydCAtIFJpbmcgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzCisgKiBA Zmlmb3MgLSBSaW5nIHF1ZXVlcyByZWdpc3RlcnMKKyAqIEBwcm94eSAtIFJpbmcgUHJveHkgRGF0 YXBhdGggcmVnaXN0ZXJzCisgKiBAcmluZ19tZW1fZG1hIC0gUmluZyBidWZmZXIgZG1hIGFkZHJl c3MKKyAqIEByaW5nX21lbV92aXJ0IC0gUmluZyBidWZmZXIgdmlydCBhZGRyZXNzCisgKiBAb3Bz IC0gUmluZyBvcGVyYXRpb25zCisgKiBAc2l6ZSAtIFJpbmcgc2l6ZSBpbiBlbGVtZW50cworICog QGVsbV9zaXplIC0gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50CisgKiBAbW9kZSAtIFJpbmcgbW9k ZQorICogQGZsYWdzIC0gZmxhZ3MKKyAqIEBmcmVlIC0gTnVtYmVyIG9mIGZyZWUgZWxlbWVudHMK KyAqIEBvY2MgLSBSaW5nIG9jY3VwYW5jeQorICogQHdpbmRleCAtIFdyaXRlIGluZGV4IChvbmx5 IGZvciBASzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKyAqIEByaW5kZXggLSBSZWFkIGluZGV4 IChvbmx5IGZvciBASzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKyAqIEByaW5nX2lkIC0gUmlu ZyBJZAorICogQHBhcmVudCAtIFBvaW50ZXIgb24gc3RydWN0IEBrM19yaW5nYWNjCisgKiBAdXNl X2NvdW50IC0gVXNlIGNvdW50IGZvciBzaGFyZWQgcmluZ3MKKyAqIEBwcm94eV9pZCAtIFJBIFJp bmcgUHJveHkgSWQgKG9ubHkgaWYgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCisgKi8KK3N0 cnVjdCBrM19yaW5nIHsKKwlzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIF9faW9tZW0gKnJ0OworCXN0 cnVjdCBrM19yaW5nX2ZpZm9fcmVncyBfX2lvbWVtICpmaWZvczsKKwlzdHJ1Y3QgazNfcmluZ2Fj Y19wcm94eV90YXJnZXRfcmVncyAgX19pb21lbSAqcHJveHk7CisJZG1hX2FkZHJfdAlyaW5nX21l bV9kbWE7CisJdm9pZAkJKnJpbmdfbWVtX3ZpcnQ7CisJc3RydWN0IGszX3Jpbmdfb3BzICpvcHM7 CisJdTMyCQlzaXplOworCWVudW0gazNfcmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmlu Z19tb2RlIG1vZGU7CisJdTMyCQlmbGFnczsKKyNkZWZpbmUgSzNfUklOR19GTEFHX0JVU1kJQklU KDEpCisjZGVmaW5lIEszX1JJTkdfRkxBR19TSEFSRUQJQklUKDIpCisJdTMyCQlmcmVlOworCXUz MgkJb2NjOworCXUzMgkJd2luZGV4OworCXUzMgkJcmluZGV4OworCXUzMgkJcmluZ19pZDsKKwlz dHJ1Y3QgazNfcmluZ2FjYwkqcGFyZW50OworCXUzMgkJdXNlX2NvdW50OworCWludAkJcHJveHlf aWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBrM19yaW5nYWNjIC0gUmluZ3MgYWNjZWxlcmF0b3Ig ZGVzY3JpcHRvcgorICoKKyAqIEBkZXYgLSBwb2ludGVyIG9uIFJBIGRldmljZQorICogQHByb3h5 X2djZmcgLSBSQSBwcm94eSBnbG9iYWwgY29uZmlnIHJlZ2lzdGVycworICogQHByb3h5X3Rhcmdl dF9iYXNlIC0gUkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCisgKiBAbnVtX3JpbmdzIC0gbnVtYmVy IG9mIHJpbmcgaW4gUkEKKyAqIEByaW5nc19pbnVzZSAtIGJpdGZpZWxkIGZvciByaW5nIHVzYWdl IHRyYWNraW5nCisgKiBAcm1fZ3BfcmFuZ2UgLSBnZW5lcmFsIHB1cnBvc2UgcmluZ3MgcmFuZ2Ug ZnJvbSB0aXNjaQorICogQGRtYV9yaW5nX3Jlc2V0X3F1aXJrIC0gRE1BIHJlc2V0IHcvYSBlbmFi bGUKKyAqIEBudW1fcHJveGllcyAtIG51bWJlciBvZiBSQSBwcm94aWVzCisgKiBAcHJveHlfaW51 c2UgLSBiaXRmaWVsZCBmb3IgcHJveHkgdXNhZ2UgdHJhY2tpbmcKKyAqIEByaW5ncyAtIGFycmF5 IG9mIHJpbmdzIGRlc2NyaXB0b3JzIChzdHJ1Y3QgQGszX3JpbmcpCisgKiBAbGlzdCAtIGxpc3Qg b2YgUkFzIGluIHRoZSBzeXN0ZW0KKyAqIEB0aXNjaSAtIHBvaW50ZXIgdGktc2NpIGhhbmRsZQor ICogQHRpc2NpX3Jpbmdfb3BzIC0gdGktc2NpIHJpbmdzIG9wcworICogQHRpc2NpX2Rldl9pZCAt IHRpLXNjaSBkZXZpY2UgaWQKKyAqLworc3RydWN0IGszX3JpbmdhY2MgeworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgX19pb21lbSAqcHJv eHlfZ2NmZzsKKwl2b2lkIF9faW9tZW0gKnByb3h5X3RhcmdldF9iYXNlOworCXUzMiBudW1fcmlu Z3M7IC8qIG51bWJlciBvZiByaW5ncyBpbiBSaW5nYWNjIG1vZHVsZSAqLworCXVuc2lnbmVkIGxv bmcgKnJpbmdzX2ludXNlOworCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX2dwX3JhbmdlOwor CisJYm9vbCBkbWFfcmluZ19yZXNldF9xdWlyazsKKwl1MzIgbnVtX3Byb3hpZXM7CisJdW5zaWdu ZWQgbG9uZyAqcHJveHlfaW51c2U7CisKKwlzdHJ1Y3QgazNfcmluZyAqcmluZ3M7CisJc3RydWN0 IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtdXRleCByZXFfbG9jazsgLyogcHJvdGVjdCByaW5n cyBhbGxvY2F0aW9uICovCisKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7CisJ Y29uc3Qgc3RydWN0IHRpX3NjaV9ybV9yaW5nYWNjX29wcyAqdGlzY2lfcmluZ19vcHM7CisJdTMy ICB0aXNjaV9kZXZfaWQ7Cit9OworCitzdGF0aWMgbG9uZyBrM19yaW5nYWNjX3JpbmdfZ2V0X2Zp Zm9fcG9zKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXJldHVybiBLM19SSU5HQUNDX0ZJRk9f V0lORE9XX1NJWkVfQllURVMgLQorCSAgICAgICAoNCA8PCByaW5nLT5lbG1fc2l6ZSk7Cit9CisK K3N0YXRpYyB2b2lkICprM19yaW5nYWNjX2dldF9lbG1fYWRkcihzdHJ1Y3QgazNfcmluZyAqcmlu ZywgdTMyIGlkeCkKK3sKKwlyZXR1cm4gKHJpbmctPnJpbmdfbWVtX3ZpcnQgKyBpZHggKiAoNCA8 PCByaW5nLT5lbG1fc2l6ZSkpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wb3BfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKwor c3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcmluZ19vcHMgPSB7CisJCS5w dXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9tZW0sCisJCS5wb3BfaGVhZCA9IGszX3Jp bmdhY2NfcmluZ19wb3BfbWVtLAorfTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVz aF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworc3RhdGljIHN0cnVjdCBrM19yaW5n X29wcyBrM19yaW5nX21vZGVfbXNnX29wcyA9IHsKKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2Nf cmluZ19wdXNoX2lvLAorCQkucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9p bywKKwkJLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvLAorCQkucG9wX2hl YWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX2lvLAorfTsKKworc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcHVzaF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK K3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaGVh ZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGsz X3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAq ZWxlbSk7CisKK3N0YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX3Byb3h5X29w cyA9IHsKKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHksCisJ CS5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5LAorCQkucG9wX3Rh aWwgPSBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHksCisJCS5wb3BfaGVhZCA9IGszX3Jp bmdhY2NfcmluZ19wb3BfaGVhZF9wcm94eSwKK307CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2Nf cmluZ19kdW1wKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 IHJpbmctPnBhcmVudC0+ZGV2OworCisJZGV2X2RiZyhkZXYsICJkdW1wIHJpbmc6ICVkXG4iLCBy aW5nLT5yaW5nX2lkKTsKKwlkZXZfZGJnKGRldiwgImR1bXAgbWVtIHZpcnQgJXAsIGRtYSAlcGFk XG4iLCByaW5nLT5yaW5nX21lbV92aXJ0LAorCQkmcmluZy0+cmluZ19tZW1fZG1hKTsKKwlkZXZf ZGJnKGRldiwgImR1bXAgZWxtc2l6ZSAlZCwgc2l6ZSAlZCwgbW9kZSAlZCwgcHJveHlfaWQgJWRc biIsCisJCXJpbmctPmVsbV9zaXplLCByaW5nLT5zaXplLCByaW5nLT5tb2RlLCByaW5nLT5wcm94 eV9pZCk7CisKKwlkZXZfZGJnKGRldiwgImR1bXAgcmluZ19ydF9yZWdzOiBkYiUwOHhcbiIsIHJl YWRsKCZyaW5nLT5ydC0+ZGIpKTsKKwlkZXZfZGJnKGRldiwgImR1bXAgb2NjJTA4eFxuIiwgcmVh ZGwoJnJpbmctPnJ0LT5vY2MpKTsKKwlkZXZfZGJnKGRldiwgImR1bXAgaW5keCUwOHhcbiIsIHJl YWRsKCZyaW5nLT5ydC0+aW5keCkpOworCWRldl9kYmcoZGV2LCAiZHVtcCBod29jYyUwOHhcbiIs IHJlYWRsKCZyaW5nLT5ydC0+aHdvY2MpKTsKKwlkZXZfZGJnKGRldiwgImR1bXAgaHdpbmR4JTA4 eFxuIiwgcmVhZGwoJnJpbmctPnJ0LT5od2luZHgpKTsKKworCWlmIChyaW5nLT5yaW5nX21lbV92 aXJ0KQorCQlwcmludF9oZXhfZHVtcF9kZWJ1ZygiZHVtcCByaW5nX21lbV92aXJ0ICIsIERVTVBf UFJFRklYX05PTkUsCisJCQkJICAgICAxNiwgMSwgcmluZy0+cmluZ19tZW1fdmlydCwgMTYgKiA4 LCBmYWxzZSk7Cit9CisKK3N0cnVjdCBrM19yaW5nICprM19yaW5nYWNjX3JlcXVlc3RfcmluZyhz dHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYywKKwkJCQkJaW50IGlkLCB1MzIgZmxhZ3MpCit7CisJ aW50IHByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKworCW11dGV4X2xvY2so JnJpbmdhY2MtPnJlcV9sb2NrKTsKKworCWlmIChpZCA9PSBLM19SSU5HQUNDX1JJTkdfSURfQU5Z KSB7CisJCS8qIFJlcXVlc3QgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZyAqLworCQlzdHJ1 Y3QgdGlfc2NpX3Jlc291cmNlX2Rlc2MgKmdwX3JpbmdzID0KKwkJCQkJCSZyaW5nYWNjLT5ybV9n cF9yYW5nZS0+ZGVzY1swXTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCXNpemUgPSBncF9y aW5ncy0+c3RhcnQgKyBncF9yaW5ncy0+bnVtOworCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChy aW5nYWNjLT5yaW5nc19pbnVzZSwgc2l6ZSwKKwkJCQkJZ3BfcmluZ3MtPnN0YXJ0KTsKKwkJaWYg KGlkID09IHNpemUpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSBpZiAoaWQgPCAwKSB7CisJCWdv dG8gZXJyb3I7CisJfQorCisJaWYgKHRlc3RfYml0KGlkLCByaW5nYWNjLT5yaW5nc19pbnVzZSkg JiYKKwkgICAgIShyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVE KSkKKwkJZ290byBlcnJvcjsKKwllbHNlIGlmIChyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBL M19SSU5HX0ZMQUdfU0hBUkVEKQorCQlnb3RvIG91dDsKKworCWlmIChmbGFncyAmIEszX1JJTkdB Q0NfUklOR19VU0VfUFJPWFkpIHsKKwkJcHJveHlfaWQgPSBmaW5kX25leHRfemVyb19iaXQocmlu Z2FjYy0+cHJveHlfaW51c2UsCisJCQkJCSAgICAgIHJpbmdhY2MtPm51bV9wcm94aWVzLCAwKTsK KwkJaWYgKHByb3h5X2lkID09IHJpbmdhY2MtPm51bV9wcm94aWVzKQorCQkJZ290byBlcnJvcjsK Kwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcikp CisJCWdvdG8gZXJyb3I7CisKKwlpZiAocHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1Rf VVNFRCkgeworCQlzZXRfYml0KHByb3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVzZSk7CisJCXJp bmdhY2MtPnJpbmdzW2lkXS5wcm94eV9pZCA9IHByb3h5X2lkOworCQlkZXZfZGJnKHJpbmdhY2Mt PmRldiwgIkdpdmluZyByaW5nIyVkIHByb3h5IyVkXG4iLCBpZCwKKwkJCXByb3h5X2lkKTsKKwl9 IGVsc2UgeworCQlkZXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkXG4iLCBpZCk7 CisJfQorCisJc2V0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOworb3V0OgorCXJpbmdh Y2MtPnJpbmdzW2lkXS51c2VfY291bnQrKzsKKwltdXRleF91bmxvY2soJnJpbmdhY2MtPnJlcV9s b2NrKTsKKwlyZXR1cm4gJnJpbmdhY2MtPnJpbmdzW2lkXTsKKworZXJyb3I6CisJbXV0ZXhfdW5s b2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrM19yaW5nYWNjX3JlcXVlc3RfcmluZyk7CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2Nf cmluZ19yZXNldF9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3Jpbmdh Y2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJpbmdhY2Mt PnRpc2NpX3Jpbmdfb3BzLT5jb25maWcoCisJCQlyaW5nYWNjLT50aXNjaSwKKwkJCVRJX1NDSV9N U0dfVkFMVUVfUk1fUklOR19DT1VOVF9WQUxJRCwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwK KwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCXJpbmctPnNpemUsCisJCQkwLAor CQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kg cmVzZXQgcmluZyBmYWlsICglZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQsIHJpbmctPnJpbmdf aWQpOworfQorCit2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmluZyAqcmlu ZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkK KwkJcmV0dXJuOworCisJcmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5y aW5kZXggPSAwOworCXJpbmctPndpbmRleCA9IDA7CisKKwlrM19yaW5nYWNjX3JpbmdfcmVzZXRf c2NpKHJpbmcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0KTsK Kworc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaShzdHJ1Y3Qg azNfcmluZyAqcmluZywKKwkJCQkJICAgICAgIGVudW0gazNfcmluZ19tb2RlIG1vZGUpCit7CisJ c3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldDsKKwor CXJldCA9IHJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5jb25maWcoCisJCQlyaW5nYWNjLT50aXNj aSwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fUklOR19NT0RFX1ZBTElELAorCQkJcmluZ2FjYy0+ dGlzY2lfZGV2X2lkLAorCQkJcmluZy0+cmluZ19pZCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJ CW1vZGUsCisJCQkwLAorCQkJMCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYs ICJUSVNDSSByZWNvbmYgcW1vZGUgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCBy aW5nLT5yaW5nX2lkKTsKK30KKwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKHN0cnVj dCBrM19yaW5nICpyaW5nLCB1MzIgb2NjKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdz ICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm47CisKKwlpZiAoIXJpbmctPnBhcmVudC0+ ZG1hX3JpbmdfcmVzZXRfcXVpcmspCisJCWdvdG8gcmVzZXQ7CisKKwlpZiAoIW9jYykKKwkJb2Nj ID0gcmVhZGwoJnJpbmctPnJ0LT5vY2MpOworCisJaWYgKG9jYykgeworCQl1MzIgZGJfcmluZ19j bnQsIGRiX3JpbmdfY250X2N1cjsKKworCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiJXMg JXUgb2NjOiAldVxuIiwgX19mdW5jX18sCisJCQlyaW5nLT5yaW5nX2lkLCBvY2MpOworCQkvKiBU SS1TQ0kgcmluZyByZXNldCAqLworCQlrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHJpbmcpOwor CisJCS8qCisJCSAqIFNldHVwIHRoZSByaW5nIGluIHJpbmcvZG9vcmJlbGwgbW9kZSAoaWYgbm90 IGFscmVhZHkgaW4gdGhpcworCQkgKiBtb2RlKQorCQkgKi8KKwkJaWYgKHJpbmctPm1vZGUgIT0g SzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKwkJCWszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19x bW9kZV9zY2koCisJCQkJCXJpbmcsIEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpOworCQkvKgor CQkgKiBSaW5nIHRoZSBkb29yYmVsbCAyKioyMiDigJMgcmluZ09jYyB0aW1lcy4KKwkJICogVGhp cyB3aWxsIHdyYXAgdGhlIGludGVybmFsIFVETUFQIHJpbmcgc3RhdGUgb2NjdXBhbmN5CisJCSAq IGNvdW50ZXIgKHdoaWNoIGlzIDIxLWJpdHMgd2lkZSkgdG8gMC4KKwkJICovCisJCWRiX3Jpbmdf Y250ID0gKDFVIDw8IDIyKSAtIG9jYzsKKworCQl3aGlsZSAoZGJfcmluZ19jbnQgIT0gMCkgewor CQkJLyoKKwkJCSAqIFJpbmcgdGhlIGRvb3JiZWxsIHdpdGggdGhlIG1heGltdW0gY291bnQgZWFj aAorCQkJICogaXRlcmF0aW9uIGlmIHBvc3NpYmxlIHRvIG1pbmltaXplIHRoZSB0b3RhbAorCQkJ ICogb2Ygd3JpdGVzCisJCQkgKi8KKwkJCWlmIChkYl9yaW5nX2NudCA+IEszX1JJTkdBQ0NfTUFY X0RCX1JJTkdfQ05UKQorCQkJCWRiX3JpbmdfY250X2N1ciA9IEszX1JJTkdBQ0NfTUFYX0RCX1JJ TkdfQ05UOworCQkJZWxzZQorCQkJCWRiX3JpbmdfY250X2N1ciA9IGRiX3JpbmdfY250OworCisJ CQl3cml0ZWwoZGJfcmluZ19jbnRfY3VyLCAmcmluZy0+cnQtPmRiKTsKKwkJCWRiX3JpbmdfY250 IC09IGRiX3JpbmdfY250X2N1cjsKKwkJfQorCisJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJp bmcgbW9kZSAoaWYgbm90IHJpbmcgbW9kZSkgKi8KKwkJaWYgKHJpbmctPm1vZGUgIT0gSzNfUklO R0FDQ19SSU5HX01PREVfUklORykKKwkJCWszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9z Y2kocmluZywgcmluZy0+bW9kZSk7CisJfQorCityZXNldDoKKwkvKiBSZXNldCB0aGUgcmluZyAq LworCWszX3JpbmdhY2NfcmluZ19yZXNldChyaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGsz X3JpbmdhY2NfcmluZ19yZXNldF9kbWEpOworCitzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3Jpbmdf ZnJlZV9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3JpbmdhY2MgKnJp bmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJpbmdhY2MtPnRpc2Np X3Jpbmdfb3BzLT5jb25maWcoCisJCQlyaW5nYWNjLT50aXNjaSwKKwkJCVRJX1NDSV9NU0dfVkFM VUVfUk1fQUxMX05PX09SREVSLAorCQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAorCQkJcmluZy0+ cmluZ19pZCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCk7CisJaWYg KHJldCkKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVNDSSByaW5nIGZyZWUgZmFpbCAoJWQp IHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsKK30KKworaW50IGszX3Jp bmdhY2NfcmluZ19mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5n YWNjICpyaW5nYWNjOworCisJaWYgKCFyaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJpbmdh Y2MgPSByaW5nLT5wYXJlbnQ7CisKKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiZmxhZ3M6 IDB4JTA4eFxuIiwgcmluZy0+ZmxhZ3MpOworCisJaWYgKCF0ZXN0X2JpdChyaW5nLT5yaW5nX2lk LCByaW5nYWNjLT5yaW5nc19pbnVzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9j aygmcmluZ2FjYy0+cmVxX2xvY2spOworCisJaWYgKC0tcmluZy0+dXNlX2NvdW50KQorCQlnb3Rv IG91dDsKKworCWlmICghKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlnb3Rv IG5vX2luaXQ7CisKKwlrM19yaW5nYWNjX3JpbmdfZnJlZV9zY2kocmluZyk7CisKKwlkbWFfZnJl ZV9jb2hlcmVudChyaW5nYWNjLT5kZXYsCisJCQkgIHJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5l bG1fc2l6ZSksCisJCQkgIHJpbmctPnJpbmdfbWVtX3ZpcnQsIHJpbmctPnJpbmdfbWVtX2RtYSk7 CisJcmluZy0+ZmxhZ3MgPSAwOworCXJpbmctPm9wcyA9IE5VTEw7CisJaWYgKHJpbmctPnByb3h5 X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsKKwkJY2xlYXJfYml0KHJpbmctPnBy b3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVzZSk7CisJCXJpbmctPnByb3h5ID0gTlVMTDsKKwkJ cmluZy0+cHJveHlfaWQgPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEOworCX0KKworbm9faW5p dDoKKwljbGVhcl9iaXQocmluZy0+cmluZ19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOworCisJ bW9kdWxlX3B1dChyaW5nYWNjLT5kZXYtPmRyaXZlci0+b3duZXIpOworCitvdXQ6CisJbXV0ZXhf dW5sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrM19yaW5nYWNjX3JpbmdfZnJlZSk7CisKK3UzMiBrM19yaW5nYWNjX2dldF9yaW5nX2lk KHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlyZXR1cm4gcmluZy0+cmluZ19pZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3Jpbmdh Y2NfZ2V0X3JpbmdfaWQpOworCit1MzIgazNfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKHN0cnVj dCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwly ZXR1cm4gcmluZy0+cGFyZW50LT50aXNjaV9kZXZfaWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChr M19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQpOworCitpbnQgazNfcmluZ2FjY19nZXRfcmluZ19p cnFfbnVtKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWludCBpcnFfbnVtOworCisJaWYgKCFy aW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlycV9udW0gPSB0aV9zY2lfaW50YV9tc2lfZ2V0 X3ZpcnEocmluZy0+cGFyZW50LT5kZXYsIHJpbmctPnJpbmdfaWQpOworCWlmIChpcnFfbnVtIDw9 IDApCisJCWlycV9udW0gPSAtRUlOVkFMOworCXJldHVybiBpcnFfbnVtOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfcmluZ2FjY19nZXRfcmluZ19pcnFfbnVtKTsKKworc3RhdGljIGludCBrM19y aW5nYWNjX3JpbmdfY2ZnX3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNf cmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwl1MzIgcmluZ19pZHg7CisJaW50IHJl dDsKKworCWlmICghcmluZ2FjYy0+dGlzY2kpCisJCXJldHVybiAtRUlOVkFMOworCisJcmluZ19p ZHggPSByaW5nLT5yaW5nX2lkOworCXJldCA9IHJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5jb25m aWcoCisJCQlyaW5nYWNjLT50aXNjaSwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fQUxMX05PX09S REVSLAorCQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAorCQkJcmluZ19pZHgsCisJCQlsb3dlcl8z Ml9iaXRzKHJpbmctPnJpbmdfbWVtX2RtYSksCisJCQl1cHBlcl8zMl9iaXRzKHJpbmctPnJpbmdf bWVtX2RtYSksCisJCQlyaW5nLT5zaXplLAorCQkJcmluZy0+bW9kZSwKKwkJCXJpbmctPmVsbV9z aXplLAorCQkJMCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVNDSSBj b25maWcgcmluZyBmYWlsICglZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQsIHJpbmdfaWR4KTsK KworCXJldHVybiByZXQ7Cit9CisKK2ludCBrM19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBrM19y aW5nICpyaW5nLCBzdHJ1Y3QgazNfcmluZ19jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgazNfcmluZ2Fj YyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcmluZyB8 fCAhY2ZnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2ZnLT5lbG1fc2l6ZSA+IEszX1JJTkdB Q0NfUklOR19FTFNJWkVfMjU2IHx8CisJICAgIGNmZy0+bW9kZSA+PSBLM19SSU5HQUNDX1JJTkdf TU9ERV9JTlZBTElEIHx8CisJICAgIGNmZy0+c2l6ZSAmIH5LM19SSU5HQUNDX0NGR19SSU5HX1NJ WkVfRUxDTlRfTUFTSyB8fAorCSAgICAhdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2FjYy0+ cmluZ3NfaW51c2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSW4gY2FzZSBvZiBz aGFyZWQgcmluZyBvbmx5IHRoZSBmaXJzdCB1c2VyIChtYXN0ZXIgdXNlcikgY2FuCisJICogY29u ZmlndXJlIHRoZSByaW5nLiBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGJ5IHRoZSBjbGllbnQ6CisJ ICogcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJpbmdhY2MsIHJpbmdfaWQsIDApOyAj IG1hc3RlciB1c2VyCisJICogazNfcmluZ2FjY19yaW5nX2NmZyhyaW5nLCBjZmcpOyAjIG1hc3Rl ciBjb25maWd1cmF0aW9uCisJICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcocmluZ2FjYywgcmlu Z19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICogazNfcmluZ2FjY19yZXF1ZXN0X3Jpbmco cmluZ2FjYywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICovCisJaWYgKHJpbmct PnVzZV9jb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCXJpbmctPnNpemUgPSBjZmctPnNpemU7 CisJcmluZy0+ZWxtX3NpemUgPSBjZmctPmVsbV9zaXplOworCXJpbmctPm1vZGUgPSBjZmctPm1v ZGU7CisJcmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5yaW5kZXggPSAw OworCXJpbmctPndpbmRleCA9IDA7CisKKwlpZiAocmluZy0+cHJveHlfaWQgIT0gSzNfUklOR0FD Q19QUk9YWV9OT1RfVVNFRCkKKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90YXJnZXRf YmFzZSArCisJCQkgICAgICByaW5nLT5wcm94eV9pZCAqIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VU X1NURVA7CisKKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfUklOR19N T0RFX1JJTkc6CisJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcmluZ19vcHM7CisJCWJyZWFr OworCWNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRToKKwkJaWYgKHJpbmctPnByb3h5 KQorCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9vcHM7CisJCWVsc2UKKwkJCXJp bmctPm9wcyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ cmluZy0+b3BzID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9wcm94 eTsKKwl9OworCisJcmluZy0+cmluZ19tZW1fdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChyaW5n YWNjLT5kZXYsCisJCQkJCXJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSksCisJCQkJ CSZyaW5nLT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+cmluZ19tZW1f dmlydCkgeworCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIkZhaWxlZCB0byBhbGxvYyByaW5nIG1l bVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfb3BzOworCX0KKworCXJl dCA9IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHJpbmcpOworCisJaWYgKHJldCkKKwkJZ290byBl cnJfZnJlZV9tZW07CisKKwlyaW5nLT5mbGFncyB8PSBLM19SSU5HX0ZMQUdfQlVTWTsKKwlyaW5n LT5mbGFncyB8PSAoY2ZnLT5mbGFncyAmIEszX1JJTkdBQ0NfUklOR19TSEFSRUQpID8KKwkJCUsz X1JJTkdfRkxBR19TSEFSRUQgOiAwOworCisJazNfcmluZ2FjY19yaW5nX2R1bXAocmluZyk7CisK KwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfbWVtOgorCWRtYV9mcmVlX2NvaGVyZW50KHJpbmdhY2Mt PmRldiwKKwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKKwkJCSAgcmlu Zy0+cmluZ19tZW1fdmlydCwKKwkJCSAgcmluZy0+cmluZ19tZW1fZG1hKTsKK2Vycl9mcmVlX29w czoKKwlyaW5nLT5vcHMgPSBOVUxMOworZXJyX2ZyZWVfcHJveHk6CisJcmluZy0+cHJveHkgPSBO VUxMOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3Jpbmdf Y2ZnKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmlu ZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmluZy0+c2l6ZTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZSk7CisKK3UzMiBrM19yaW5nYWNjX3Jpbmdf Z2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEocmluZy0+ ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFy aW5nLT5mcmVlKQorCQlyaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIHJlYWRsKCZyaW5nLT5ydC0+ b2NjKTsKKworCXJldHVybiByaW5nLT5mcmVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmlu Z2FjY19yaW5nX2dldF9mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHN0cnVj dCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklO R19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWFkbCgmcmluZy0+ cnQtPm9jYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyk7 CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sK KwlyZXR1cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShyaW5nKTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKTsKKworZW51bSBrM19yaW5nYWNjX2FjY2Vz c19tb2RlIHsKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRCwKKwlLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BPUF9IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlM LAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUwsCisJSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QRUVLX0hFQUQsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX1RBSUwsCit9Owor CisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfTU9ERSh4KQkoKCh4KSAmIDB4MykgPDwgMTYpCisj ZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywK KwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSBtb2RlKQoreworCXUz MiB2YWw7CisKKwl2YWwgPSByaW5nLT5yaW5nX2lkOworCXZhbCB8PSBLM19SSU5HQUNDX1BST1hZ X01PREUobW9kZSk7CisJdmFsIHw9IEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHJpbmctPmVsbV9z aXplKTsKKwl3cml0ZWwodmFsLCAmcmluZy0+cHJveHktPmNvbnRyb2wpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkoc3RydWN0IGszX3Jp bmcgKnJpbmcsIHZvaWQgKmVsZW0sCisJCQkJCWVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBh Y2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCXB0ciA9ICh2b2lkIF9faW9t ZW0gKikmcmluZy0+cHJveHktPmRhdGE7CisKKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7CisJY2Fz ZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKKwljYXNlIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX0hFQUQ6CisJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmluZywgUFJP WFlfQUNDRVNTX01PREVfSEVBRCk7CisJCWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgor CQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VTU19NT0RFX1RBSUwp OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdHIgKz0g azNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAoYWNjZXNzX21v ZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJY2FzZSBLM19S SU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2 LAorCQkJInByb3h5Om1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLCBw dHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8PCBy aW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5H QUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJInByb3h5Om1lbWNw eV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNzX21vZGUp OworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJCXJp bmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBmcmVlJWQgb2NjJWRcbiIsIHJp bmctPmZyZWUsCisJCXJpbmctPm9jYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNf cmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAq ZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVt LAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQpOworfQorCitzdGF0 aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3RydWN0IGszX3JpbmcgKnJp bmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHko cmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMKTsK K30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nl c3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9Q X0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eShz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19y aW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QT1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2FjY2Vzc19p byhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwKKwkJCQkgICAgIGVudW0gazNfcmlu Z2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKwor CXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9IRUFEOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKKwkJcHRyID0g KHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+aGVhZF9kYXRhOworCQlicmVhazsKKwljYXNl IEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NF U1NfTU9ERV9QT1BfVEFJTDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+ dGFpbF9kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAo YWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJ Y2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJpbmctPnBh cmVudC0+ZGV2LAorCQkJIm1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4i LCBwdHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8 PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBLM19S SU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJIm1lbWNweV90 b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNzX21vZGUpOwor CQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJCXJpbmct PmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ ZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZyZWUlZCBpbmRleCVkIG9jYyVkIGluZGV4JWRc biIsIHJpbmctPmZyZWUsCisJCXJpbmctPndpbmRleCwgcmluZy0+b2NjLCByaW5nLT5yaW5kZXgp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRf aW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3Jpbmdh Y2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUFVTSF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbyhz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19y aW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q VVNIX1RBSUwpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaW8oc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19h Y2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hF QUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbyhzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2Fj Y2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVB RCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVjdCBrM19y aW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXZvaWQgKmVsZW1fcHRyOworCisJZWxlbV9wdHIg PSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT53aW5kZXgpOworCisJbWVtY3B5 KGVsZW1fcHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCisJcmluZy0+d2luZGV4 ID0gKHJpbmctPndpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKKwlyaW5nLT5mcmVlLS07CisJd3Jp dGVsKDEsICZyaW5nLT5ydC0+ZGIpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJp bmdfcHVzaF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAorCQlyaW5nLT5mcmVlLCByaW5nLT53aW5k ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9t ZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJdm9pZCAqZWxlbV9wdHI7 CisKKwllbGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmctPnJpbmRl eCk7CisKKwltZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisK KwlyaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5nLT5zaXplOworCXJpbmct Pm9jYy0tOworCXdyaXRlbCgtMSwgJnJpbmctPnJ0LT5kYik7CisKKwlkZXZfZGJnKHJpbmctPnBh cmVudC0+ZGV2LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBvc19wdHIlcFxuIiwKKwkJ cmluZy0+b2NjLCByaW5nLT5yaW5kZXgsIGVsZW1fcHRyKTsKKwlyZXR1cm4gMDsKK30KKworaW50 IGszX3JpbmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQor eworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdz ICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9kYmcocmlu Zy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLCByaW5nLT5mcmVl LAorCQlyaW5nLT53aW5kZXgpOworCisJaWYgKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHJpbmcp KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wdXNo X3RhaWwpCisJCXJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcsIGVsZW0pOworCisJcmV0 dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wdXNoKTsKKwor aW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQg KmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFyaW5nIHx8ICEocmlu Zy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2 X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVzaF9oZWFkOiBmcmVlJWQgaW5kZXglZFxu IiwKKwkJcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChrM19yaW5nYWNjX3Jpbmdf aXNfZnVsbChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmluZy0+b3BzICYmIHJp bmctPm9wcy0+cHVzaF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfaGVhZChyaW5nLCBl bGVtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3Jp bmdfcHVzaF9oZWFkKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFy aW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJpbmctPm9jYyA9IGszX3JpbmdhY2NfcmluZ19n ZXRfb2NjKHJpbmcpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wOiBv Y2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlpZiAoIXJp bmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5v cHMtPnBvcF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFkKHJpbmcsIGVsZW0pOwor CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3Ap OworCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAh KHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmICghcmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhy aW5nKTsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3BvcF90YWlsOiBvY2Ml ZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlpZiAoIXJpbmct Pm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMt PnBvcF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF90YWlsKHJpbmcsIGVsZW0pOworCisJ cmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3BfdGFp bCk7CisKK3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKnJpbmdhY2NfbnA7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdh Y2MgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXN0cnVjdCBrM19yaW5nYWNjICplbnRyeTsK KworCXJpbmdhY2NfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBwcm9wZXJ0eSwgMCk7CisJaWYg KCFyaW5nYWNjX25wKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCW11dGV4X2xvY2so JmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmazNf cmluZ2FjY19saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmRldi0+b2Zfbm9kZSA9PSByaW5nYWNj X25wKSB7CisJCQlyaW5nYWNjID0gZW50cnk7CisJCQlicmVhazsKKwkJfQorCW11dGV4X3VubG9j aygmazNfcmluZ2FjY19saXN0X2xvY2spOworCW9mX25vZGVfcHV0KHJpbmdhY2NfbnApOworCisJ cmV0dXJuIHJpbmdhY2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9rM19yaW5nYWNjX2dldF9i eV9waGFuZGxlKTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3Byb2JlX2R0KHN0cnVjdCBrM19y aW5nYWNjICpyaW5nYWNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHJpbmdhY2Mt PmRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nYWNjLT5kZXY7CisJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWlu dCByZXQ7CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2UgdHJlZSBpbmZv IHVuYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgInRpLG51bS1yaW5ncyIsICZyaW5nYWNjLT5udW1fcmluZ3Mp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxudW0tcmluZ3MgcmVhZCBmYWlsdXJl ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJpbmdhY2MtPmRtYV9yaW5nX3Jl c2V0X3F1aXJrID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAidGksZG1hLXJpbmct cmVzZXQtcXVpcmsiKTsKKworCXJpbmdhY2MtPnRpc2NpID0gdGlfc2NpX2dldF9ieV9waGFuZGxl KG5vZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnRpc2NpKSkgeworCQlyZXQg PSBQVFJfRVJSKHJpbmdhY2MtPnRpc2NpKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQor CQkJZGV2X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4iLCByZXQpOworCQlyaW5nYWNj LT50aXNjaSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZyaW5nYWNjLT50aXNjaV9k ZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxzY2ktZGV2LWlkIHJlYWQg ZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwZGV2LT5pZCA9IHJpbmdh Y2MtPnRpc2NpX2Rldl9pZDsKKworCXJpbmdhY2MtPnJtX2dwX3JhbmdlID0gZGV2bV90aV9zY2lf Z2V0X29mX3Jlc291cmNlKHJpbmdhY2MtPnRpc2NpLCBkZXYsCisJCQkJCQlyaW5nYWNjLT50aXNj aV9kZXZfaWQsCisJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJpbmdzIik7CisJaWYgKElTX0VS UihyaW5nYWNjLT5ybV9ncF9yYW5nZSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxs b2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyaW5nYWNjLT5ybV9n cF9yYW5nZSk7CisJfQorCisJcmV0dXJuIHRpX3NjaV9pbnRhX21zaV9kb21haW5fYWxsb2NfaXJx cyhyaW5nYWNjLT5kZXYsCisJCQkJCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UpOworfQorCitzdGF0 aWMgaW50IGszX3JpbmdhY2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKwl2b2lkIF9faW9tZW0gKmJhc2VfZmlmbywg KmJhc2VfcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpOworCisJcmluZ2FjYyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOworCWlmICghcmluZ2FjYykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyaW5nYWNjLT5kZXYgPSBkZXY7CisJbXV0ZXhfaW5pdCgmcmluZ2FjYy0+ cmVxX2xvY2spOworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dldF9kb21haW4oZGV2LCBk ZXYtPm9mX25vZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9JTlRBX01TSSk7CisJaWYg KCFkZXYtPm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1TSSBk b21haW5cbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXQgPSBrM19yaW5n YWNjX3Byb2JlX2R0KHJpbmdhY2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicnQi KTsKKwliYXNlX3J0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNf RVJSKGJhc2VfcnQpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX3J0KTsKKworCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJmaWZvcyIpOwor CWJhc2VfZmlmbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VS UihiYXNlX2ZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX2ZpZm8pOworCisJcmVzID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByb3h5X2dj ZmciKTsKKwlyaW5nYWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQorCQlyZXR1cm4gUFRSX0VS UihyaW5nYWNjLT5wcm94eV9nY2ZnKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9i eW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJwcm94eV90YXJnZXQiKTsKKwly aW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7CisJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSkpCisJCXJldHVybiBQ VFJfRVJSKHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlKTsKKworCXJpbmdhY2MtPm51bV9wcm94 aWVzID0gcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPmNvbmZpZykgJgorCQkJCSAgICAgSzNf UklOR0FDQ19QUk9YWV9DRkdfVEhSRUFEU19NQVNLOworCisJcmluZ2FjYy0+cmluZ3MgPSBkZXZt X2t6YWxsb2MoZGV2LAorCQkJCSAgICAgIHNpemVvZigqcmluZ2FjYy0+cmluZ3MpICoKKwkJCQkg ICAgICByaW5nYWNjLT5udW1fcmluZ3MsCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJcmluZ2Fj Yy0+cmluZ3NfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkgICAgQklUU19UT19MT05H UyhyaW5nYWNjLT5udW1fcmluZ3MpLAorCQkJCQkgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBH RlBfS0VSTkVMKTsKKwlyaW5nYWNjLT5wcm94eV9pbnVzZSA9IGRldm1fa2NhbGxvYyhkZXYsCisJ CQkJCSAgICBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9wcm94aWVzKSwKKwkJCQkJICAgIHNp emVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJpbmdhY2MtPnJpbmdz IHx8ICFyaW5nYWNjLT5yaW5nc19pbnVzZSB8fCAhcmluZ2FjYy0+cHJveHlfaW51c2UpCisJCXJl dHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJpbmdhY2MtPm51bV9yaW5nczsgaSsr KSB7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnJ0ID0gYmFzZV9ydCArCisJCQkJICAgICAgIEszX1JJ TkdBQ0NfUlRfUkVHU19TVEVQICogaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0uZmlmb3MgPSBiYXNl X2ZpZm8gKworCQkJCQkgIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAgKiBpOworCQlyaW5nYWNj LT5yaW5nc1tpXS5wYXJlbnQgPSByaW5nYWNjOworCQlyaW5nYWNjLT5yaW5nc1tpXS5yaW5nX2lk ID0gaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlfaWQgPSBLM19SSU5HQUNDX1BST1hZX05P VF9VU0VEOworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCByaW5nYWNjKTsKKworCXJpbmdhY2Mt PnRpc2NpX3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1fcmluZ19vcHM7CisKKwlw bV9ydW50aW1lX2VuYWJsZShkZXYpOworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsK KwlpZiAocmV0IDwgMCkgeworCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBtICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9 CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgm cmluZ2FjYy0+bGlzdCwgJmszX3JpbmdhY2NfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrM19yaW5n YWNjX2xpc3RfbG9jayk7CisKKwlkZXZfaW5mbyhkZXYsICJSaW5nIEFjY2VsZXJhdG9yIHByb2Jl ZCByaW5nczoldSwgZ3AtcmluZ3NbJXUsJXVdIHNjaS1kZXYtaWQ6JXVcbiIsCisJCSByaW5nYWNj LT5udW1fcmluZ3MsCisJCSByaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5zdGFydCwKKwkJ IHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLm51bSwKKwkJIHJpbmdhY2MtPnRpc2NpX2Rl dl9pZCk7CisJZGV2X2luZm8oZGV2LCAiZG1hLXJpbmctcmVzZXQtcXVpcms6ICVzXG4iLAorCQkg cmluZ2FjYy0+ZG1hX3JpbmdfcmVzZXRfcXVpcmsgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsK KwlkZXZfaW5mbyhkZXYsICJSQSBQcm94eSByZXYuICUwOHgsIG51bV9wcm94aWVzOiV1XG4iLAor CQkgcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwgcmluZ2FjYy0+bnVtX3By b3hpZXMpOworCXJldHVybiAwOworCitlcnI6CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gZGV2 X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwltdXRleF9sb2NrKCZr M19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJnJpbmdhY2MtPmxpc3QpOworCW11dGV4 X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCXJldHVybiAwOworfQorCisvKiBNYXRj aCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgazNfcmluZ2FjY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAi dGksYW02NTQtbmF2c3MtcmluZ2FjYyIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgazNfcmluZ2FjY19vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIGszX3JpbmdhY2NfZHJpdmVyID0geworCS5wcm9iZQkJPSBrM19yaW5nYWNjX3Byb2JlLAor CS5yZW1vdmUJCT0gazNfcmluZ2FjY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0g ImszLXJpbmdhY2MiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBrM19yaW5nYWNjX29mX21hdGNoLAor CX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrM19yaW5nYWNjX2RyaXZlcik7CisKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgUmluZ2FjYyBk cml2ZXIgZm9yIEszIFNPQ3MiKTsKK01PRFVMRV9BVVRIT1IoIkdyeWdvcmlpIFN0cmFzaGtvIDxn cnlnb3JpaS5zdHJhc2hrb0B0aS5jb20+Iik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Nv Yy90aS9rMy1yaW5nYWNjLmggYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MjZiMmUzOGZjY2UKLS0tIC9k ZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKQEAgLTAsMCAr MSwyNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICog SzMgUmluZyBBY2NlbGVyYXRvciAoUkEpIHN1YnN5c3RlbSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3 dy50aS5jb20KKyAqLworCisjaWZuZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCisjZGVm aW5lIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o PgorCitzdHJ1Y3QgZGV2aWNlX25vZGU7CisKKy8qKgorICogZW51bSBrM19yaW5nX21vZGUgLSAm c3RydWN0IGszX3JpbmdfY2ZnIG1vZGUKKyAqCisgKiBSQSByaW5nIG9wZXJhdGlvbmFsIG1vZGVz CisgKgorICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkc6IEV4cG9zZWQgUmluZyBtb2RlIGZv ciBTVyBkaXJlY3QgYWNjZXNzCisgKiBASzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTogTWVz c2FnaW5nIG1vZGUuIE1lc3NhZ2luZyBtb2RlIHJlcXVpcmVzCisgKgl0aGF0IGFsbCBhY2Nlc3Nl cyB0byB0aGUgcXVldWUgbXVzdCBnbyB0aHJvdWdoIHRoaXMgSVAgc28gdGhhdCBhbGwKKyAqCWFj Y2Vzc2VzIHRvIHRoZSBtZW1vcnkgYXJlIGNvbnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAg dGhlbgorICoJY29udHJvbHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcXVldWUsIGFuZCBTVyBo YXMgbm8gZGlyZWN0bHkgY29udHJvbCwKKyAqCXN1Y2ggYXMgdGhyb3VnaCBkb29yYmVsbHMgYW5k IGNhbm5vdCBhY2Nlc3MgdGhlIHN0b3JhZ2UgbWVtb3J5IGRpcmVjdGx5LgorICoJVGhpcyBpcyBw YXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gbW9yZSB0aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkgY2Fu IGJlCisgKgl0aGUgcHJvZHVjZXIgYW5kL29yIGNvbnN1bWVyIGF0IHRoZSBzYW1lIHRpbWUKKyAq IEBLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5USUFMUzogQ3JlZGVudGlhbHMgbW9kZSBpcyBt ZXNzYWdlIG1vZGUgcGx1cworICoJc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdl LCByZXF1aXJpbmcgdGhlIGVsZW1lbnQgc2l6ZSB0byBiZQorICoJZG91YmxlZCB0byBmaXQgdGhl IGNyZWRlbnRpYWxzLiBBbnkgZXhwb3NlZCBtZW1vcnkgc2hvdWxkIGJlIHByb3RlY3RlZAorICoJ YnkgYSBmaXJld2FsbCBmcm9tIHVud2FudGVkIGFjY2VzcworICovCitlbnVtIGszX3JpbmdfbW9k ZSB7CisJSzNfUklOR0FDQ19SSU5HX01PREVfUklORyA9IDAsCisJSzNfUklOR0FDQ19SSU5HX01P REVfTUVTU0FHRSwKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5USUFMUywKKwlLM19SSU5H QUNDX1JJTkdfTU9ERV9JTlZBTElECit9OworCisvKioKKyAqIGVudW0gazNfcmluZ19zaXplIC0g JnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZQorICoKKyAqIFJBIHJpbmcgZWxlbWVudCdzIHNp emVzIGluIGJ5dGVzLgorICovCitlbnVtIGszX3Jpbmdfc2l6ZSB7CisJSzNfUklOR0FDQ19SSU5H X0VMU0laRV80ID0gMCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzgsCisJSzNfUklOR0FDQ19S SU5HX0VMU0laRV8xNiwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzMyLAorCUszX1JJTkdBQ0Nf UklOR19FTFNJWkVfNjQsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xMjgsCisJSzNfUklOR0FD Q19SSU5HX0VMU0laRV8yNTYsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECit9Owor CitzdHJ1Y3QgazNfcmluZ2FjYzsKK3N0cnVjdCBrM19yaW5nOworCisvKioKKyAqIGVudW0gazNf cmluZ19jZmcgLSBSQSByaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICogQHNpemU6 IFJpbmcgc2l6ZSwgbnVtYmVyIG9mIGVsZW1lbnRzCisgKiBAZWxtX3NpemU6IFJpbmcgZWxlbWVu dCBzaXplCisgKiBAbW9kZTogUmluZyBvcGVyYXRpb25hbCBtb2RlCisgKiBAZmxhZ3M6IFJpbmcg Y29uZmlndXJhdGlvbiBmbGFncy4gUG9zc2libGUgdmFsdWVzOgorICoJIEBLM19SSU5HQUNDX1JJ TkdfU0hBUkVEOiB3aGVuIHNldCBhbGxvd3MgdG8gcmVxdWVzdCB0aGUgc2FtZSByaW5nCisgKgkg ZmV3IHRpbWVzLiBJdCdzIHVzYWJsZSB3aGVuIHRoZSBzYW1lIHJpbmcgaXMgdXNlZCBhcyBGcmVl IEhvc3QgUEQgcmluZworICoJIGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxlLgorICoJ IE5vdGU6IExvY2tpbmcgc2hvdWxkIGJlIGRvbmUgYnkgY29uc3VtZXIgaWYgcmVxdWlyZWQKKyAq Lworc3RydWN0IGszX3JpbmdfY2ZnIHsKKwl1MzIgc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6ZSBl bG1fc2l6ZTsKKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOworI2RlZmluZSBLM19SSU5HQUNDX1JJ TkdfU0hBUkVEIEJJVCgxKQorCXUzMiBmbGFnczsKK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19S SU5HX0lEX0FOWSAoLTEpCisKKy8qKgorICogb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSAt IGZpbmQgYSBSQSBieSBwaGFuZGxlIHByb3BlcnR5CisgKiBAbnA6IGRldmljZSBub2RlCisgKiBA cHJvcG5hbWU6IHByb3BlcnR5IG5hbWUgY29udGFpbmluZyBwaGFuZGxlIG9uIFJBIG5vZGUKKyAq CisgKiBSZXR1cm5zIHBvaW50ZXIgb24gdGhlIFJBIC0gc3RydWN0IGszX3JpbmdhY2MKKyAqIG9y IC1FTk9ERVYgaWYgbm90IGZvdW5kLAorICogb3IgLUVQUk9CRV9ERUZFUiBpZiBub3QgeWV0IHJl Z2lzdGVyZWQKKyAqLworc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3Bo YW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5 KTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZIEJJVCgxKQorCisvKioKKyAq IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nIC0gcmVxdWVzdCByaW5nIGZyb20gcmluZ2FjYworICog QHJpbmdhY2M6IHBvaW50ZXIgb24gcmluZ2FjYworICogQGlkOiByaW5nIGlkIG9yIEszX1JJTkdB Q0NfUklOR19JRF9BTlkgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZworICogQGZsYWdzOgor ICoJQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFk6IGlmIHNldCAtIHByb3h5IHdpbGwgYmUgYWxs b2NhdGVkIGFuZAorICoJCXVzZWQgdG8gYWNjZXNzIHJpbmcgbWVtb3J5LiBTb3Bwb3J0ZWQgb25s eSBmb3IgcmluZ3MgaW4KKyAqCQlNZXNzYWdlL0NyZWRlbnRpYWxzL1F1ZXVlIG1vZGUuCisgKgor ICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSaW5nIC0gc3RydWN0IGszX3JpbmcKKyAqIG9yIE5V TEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19y ZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMy IGZsYWdzKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0Cisg KiBAcmluZzogcG9pbnRlciBvbiBSaW5nCisgKgorICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3Rh dGUgKChodylvY2MsIChodylpZHgpLgorICogVE9ET19HUzogPyBSaW5nIGNhbiBiZSByZXVzZWQg d2l0aG91dCByZWNvbmZpZ3VyYXRpb24KKyAqLwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQo c3RydWN0IGszX3JpbmcgKnJpbmcpOworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSBy aW5nIHJlc2V0IGZvciBETUEgcmluZ3MKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisg KiBSZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuIFNob3VsZCBi ZSB1c2VkIGZvciByaW5ncworICogd2hpY2ggYXJlIHJlYWQgYnkgSzMgVURNQSwgbGlrZSBUWCBv ciBGcmVlIEhvc3QgUEQgcmluZ3MuCisgKi8KK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2Rt YShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYyk7CisKKy8qKgorICogazNfcmluZ2FjY19y aW5nX2ZyZWUgLSByaW5nIGZyZWUKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBS ZXNldHMgcmluZyBhbmQgZnJlZSBhbGwgYWxvY2F0ZWQgcmVzb3VyY2VzLgorICovCitpbnQgazNf cmluZ2FjY19yaW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3Jp bmdhY2NfZ2V0X3JpbmdfaWQgLSBHZXQgdGhlIFJpbmcgSUQKKyAqIEByaW5nOiBwb2ludGVyIG9u IHJpbmcKKyAqCisgKiBSZXR1cm5zIHRoZSBSaW5nIElECisgKi8KK3UzMiBrM19yaW5nYWNjX2dl dF9yaW5nX2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX2dl dF9yaW5nX2lycV9udW0gLSBHZXQgdGhlIGlycSBudW1iZXIgZm9yIHRoZSByaW5nCisgKiBAcmlu ZzogcG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0aGUgaW50ZXJydXB0IG51bWJlciB3 aGljaCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQKKyAqLworaW50IGszX3Jp bmdhY2NfZ2V0X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICog azNfcmluZ2FjY19yaW5nX2NmZyAtIHJpbmcgY29uZmlndXJlCisgKiBAcmluZzogcG9pbnRlciBv biByaW5nCisgKiBAY2ZnOiBSaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoc2VlICZzdHJ1 Y3QgazNfcmluZ19jZmcpCisgKgorICogQ29uZmlndXJlcyByaW5nLCBpbmNsdWRpbmcgcmluZyBt ZW1vcnkgYWxsb2NhdGlvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndp c2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBrM19yaW5nICpyaW5nLCBz dHJ1Y3QgazNfcmluZ19jZmcgKmNmZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX2dldF9z aXplIC0gZ2V0IHJpbmcgc2l6ZQorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJl dHVybnMgcmluZyBzaXplIGluIG51bWJlciBvZiBlbGVtZW50cy4KKyAqLwordTMyIGszX3Jpbmdh Y2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmlu Z2FjY19yaW5nX2dldF9mcmVlIC0gZ2V0IGZyZWUgZWxlbWVudHMKKyAqIEByaW5nOiBwb2ludGVy IG9uIHJpbmcKKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmcmVlIGVsZW1lbnRzIGluIHRoZSBy aW5nLgorICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpy aW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyAtIGdldCByaW5nIG9jY3Vw YW5jeQorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdG90YWwgbnVt YmVyIG9mIHZhbGlkIGVudHJpZXMgb24gdGhlIHJpbmcKKyAqLwordTMyIGszX3JpbmdhY2Nfcmlu Z19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3Jp bmdfaXNfZnVsbCAtIGNoZWNrcyBpZiByaW5nIGlzIGZ1bGwKKyAqIEByaW5nOiBwb2ludGVyIG9u IHJpbmcKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJpbmcgaXMgZnVsbAorICovCit1MzIg azNfcmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAq IGszX3JpbmdhY2NfcmluZ19wdXNoIC0gcHVzaCBlbGVtZW50IHRvIHRoZSByaW5nIHRhaWwKKyAq IEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVu dCBidWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbC4g U2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmln dXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBv biBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfcHVz aChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2Fj Y19yaW5nX3BvcCAtIHBvcCBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBv aW50ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgor ICoKKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQuIFNpemUgb2Yg dGhlIHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24g JnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nl c3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19w dXNoX2hlYWQgLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBvaW50 ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoK KyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyBoZWFkLiBTaXplIG9mIHRoZSBy aW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1 Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVy cm5vIG90aGVyd2lzZS4KKyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FD Q19SSU5HX01PREVfUklORworICovCitpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5n X3BvcF90YWlsIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsCisgKiBAcmluZzogcG9p bnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisg KgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgdGFpbC4gU2l6ZSBvZiB0 aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAm c3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCBlcnJubyBvdGhlcndpc2UuCisgKiBOb3QgU3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEszX1JJ TkdBQ0NfUklOR19NT0RFX1JJTkcKKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3UzMiBrM19yaW5nYWNjX2dldF90 aXNjaV9kZXZfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisjZW5kaWYgLyogX19TT0NfVElf SzNfUklOR0FDQ19BUElfSF8gKi8KLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5k IE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3Mg SUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==