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 73D10C43331 for ; Mon, 11 Nov 2019 13:55:47 +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 363BC2190F for ; Mon, 11 Nov 2019 13:55:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="dD9kj3Rc"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="vzIpfJh+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 363BC2190F 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=MH7tA941Z+3t75Inb5pIMeJybYHFeMU7qyZ6Iaffl2k=; b=dD9kj3RccQOu4y BY7caYCPXgr+ZrZcQsQ/8KbI27pBUxZG9Gz6Urzb1f4c4jzLmN95Jfy5xlm/g3aA8HBL7BIdZ6b0G rjut99GWtdzaBHZvTgnuGVFpt06ckbWJUGwDnsqQV3BqHwHXNcTQ6e30Qe40r+GT7Uf/4idZt5J8S dJlpfP0roCv0rmwppkztQgLVNkL9YAUseL3V6Tml53tEEqCv5fWOpPzGEbdOMkxn3f/s1upXHNMfO wSOPZ5sTQrPU7wvAv/nSuUYp0rlSHGbWKODrmSRhVX8gSDtZS1YzKr7f9MCVXOGqfir4+FznOlIQu V7qZqPGUP5IS4M7Nf8gA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUAAU-0004jN-1y; Mon, 11 Nov 2019 13:55:46 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUA7m-0000rr-8f for linux-arm-kernel@lists.infradead.org; Mon, 11 Nov 2019 13:53:10 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id xABDqrq8090584; Mon, 11 Nov 2019 07:52:53 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1573480373; bh=O5F2/jG0sp68RtwldmNopChyyhPqrXHD0bCs+VbtDBk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=vzIpfJh+4UN16VYzmW6W3ZL7jE4VyVZwi9N+XKFNQtwrRTQDFIEFFqz3CPZzdOAVZ XXGKlp5CeYjXsZXfbj711DFRikzpD0IrHVMAWKx5jqKJGcAj1pl0CnNMemSKwtLIc2 r2G2AM++T6Y8QfV88or8FYGWgB40nb8iem4k5cpg= Received: from DLEE105.ent.ti.com (dlee105.ent.ti.com [157.170.170.35]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xABDqr9n080116 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 11 Nov 2019 07:52:53 -0600 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE105.ent.ti.com (157.170.170.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 11 Nov 2019 07:52:34 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 11 Nov 2019 07:52:34 -0600 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id xABDqE8u097668; Mon, 11 Nov 2019 07:52:48 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v5 09/15] dmaengine: ti: New driver for K3 UDMA - split#1: defines, structs, io func Date: Mon, 11 Nov 2019 15:53:24 +0200 Message-ID: <20191111135330.8235-10-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111135330.8235-1-peter.ujfalusi@ti.com> References: <20191111135330.8235-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-20191111_055258_648938_72D2E7FB X-CRM114-Status: GOOD ( 20.24 ) 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 U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOiBkZWZpbmVzLCBzdHJ1Y3RzLCBpbyBh bmQgbG93IGxldmVsCmZ1bmN0aW9ucyBhbmQgaW50ZXJydXB0IGNhbGxiYWNrcy4KCkRNQSBkcml2 ZXIgZm9yClRleGFzIEluc3RydW1lbnRzIEszIE5BVlNTIFVuaWZpZWQgRE1BIOKAkyBQZXJpcGhl cmFsIFJvb3QgQ29tcGxleCAoVURNQS1QKQoKVGhlIFVETUEtUCBpcyBpbnRlbmRlZCB0byBwZXJm b3JtIHNpbWlsYXIgKGJ1dCBzaWduaWZpY2FudGx5IHVwZ3JhZGVkKSBmdW5jdGlvbnMKYXMgdGhl IHBhY2tldC1vcmllbnRlZCBETUEgdXNlZCBvbiBwcmV2aW91cyBTb0MgZGV2aWNlcy4gVGhlIFVE TUEtUCBtb2R1bGUKc3VwcG9ydHMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIG9mIHZh cmlvdXMgcGFja2V0IHR5cGVzLiBUaGUgVURNQS1QIGlzCmFyY2hpdGVjdGVkIHRvIGZhY2lsaXRh dGUgdGhlIHNlZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvZiBTb0MgRE1BIGRhdGEKc3RydWN0 dXJlIGNvbXBsaWFudCBwYWNrZXRzIHRvL2Zyb20gc21hbGxlciBkYXRhIGJsb2NrcyB0aGF0IGFy ZSBuYXRpdmVseQpjb21wYXRpYmxlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBvZiBl YWNoIGNvbm5lY3RlZCBwZXJpcGhlcmFsLiBNdWx0aXBsZQpUeCBhbmQgUnggY2hhbm5lbHMgYXJl IHByb3ZpZGVkIHdpdGhpbiB0aGUgRE1BIHdoaWNoIGFsbG93IG11bHRpcGxlIHNlZ21lbnRhdGlv bgpvciByZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgb25nb2luZy4gVGhlIERNQSBjb250cm9s bGVyIG1haW50YWlucyBzdGF0ZQppbmZvcm1hdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hhbm5lbHMg d2hpY2ggYWxsb3dzIHBhY2tldCBzZWdtZW50YXRpb24gYW5kCnJlYXNzZW1ibHkgb3BlcmF0aW9u cyB0byBiZSB0aW1lIGRpdmlzaW9uIG11bHRpcGxleGVkIGJldHdlZW4gY2hhbm5lbHMgaW4gb3Jk ZXIKdG8gc2hhcmUgdGhlIHVuZGVybHlpbmcgRE1BIGhhcmR3YXJlLiBBbiBleHRlcm5hbCBETUEg c2NoZWR1bGVyIGlzIHVzZWQgdG8KY29udHJvbCB0aGUgb3JkZXJpbmcgYW5kIHJhdGUgYXQgd2hp Y2ggdGhpcyBtdWx0aXBsZXhpbmcgb2NjdXJzIGZvciBUcmFuc21pdApvcGVyYXRpb25zLiBUaGUg b3JkZXJpbmcgYW5kIHJhdGUgb2YgUmVjZWl2ZSBvcGVyYXRpb25zIGlzIGluZGlyZWN0bHkgY29u dHJvbGxlZApieSB0aGUgb3JkZXIgaW4gd2hpY2ggYmxvY2tzIGFyZSBwdXNoZWQgaW50byB0aGUg RE1BIG9uIHRoZSBSeCBQU0ktTCBpbnRlcmZhY2UuCgpUaGUgVURNQS1QIGFsc28gc3VwcG9ydHMg YWN0aW5nIGFzIGJvdGggYSBVVEMgYW5kIFVETUEtQyBmb3IgaXRzIGludGVybmFsCmNoYW5uZWxz LiBDaGFubmVscyBpbiB0aGUgVURNQS1QIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGVpdGhlciBQ YWNrZXQtQmFzZWQgb3IKVGhpcmQtUGFydHkgY2hhbm5lbHMgb24gYSBjaGFubmVsIGJ5IGNoYW5u ZWwgYmFzaXMuCgpUaGUgaW5pdGlhbCBkcml2ZXIgc3VwcG9ydHM6Ci0gTUVNX1RPX01FTSAoVFIg bW9kZSkKLSBERVZfVE9fTUVNIChQYWNrZXQgLyBUUiBtb2RlKQotIE1FTV9UT19ERVYgKFBhY2tl dCAvIFRSIG1vZGUpCi0gQ3ljbGljIChQYWNrZXQgLyBUUiBtb2RlKQotIE1ldGFkYXRhIGZvciBk ZXNjcmlwdG9ycwoKU2lnbmVkLW9mZi1ieTogUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNp QHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCAxMDQ3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggfCAg MTIwICsrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDExNjcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hL3RpL2szLXVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVk bWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmM2Zjk0ZDc5Mzg4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hL3RpL2szLXVkbWEuYwpAQCAtMCwwICsxLDEwNDcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogIENvcHlyaWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVt ZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICogIEF1dGhvcjogUGV0ZXIg VWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGlu dXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkv azMtcmluZ2FjYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJvdG9jb2wuaD4K KyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX2ludGFfbXNpLmg+CisjaW5jbHVkZSA8bGlu dXgvZG1hL3RpLWNwcGk1Lmg+CisKKyNpbmNsdWRlICIuLi92aXJ0LWRtYS5oIgorI2luY2x1ZGUg ImszLXVkbWEuaCIKKyNpbmNsdWRlICJrMy1wc2lsLXByaXYuaCIKKworc3RydWN0IHVkbWFfc3Rh dGljX3RyIHsKKwl1OCBlbHNpemU7IC8qIFJQU1RSMCAqLworCXUxNiBlbGNudDsgLyogUlBTVFIw ICovCisJdTE2IGJzdGNudDsgLyogUlBTVFIxICovCit9OworCisjZGVmaW5lIEszX1VETUFfTUFY X1JGTE9XUwkJMTAyNAorI2RlZmluZSBLM19VRE1BX0RFRkFVTFRfUklOR19TSVpFCTE2CisKKy8q IEhvdyBTUkMvRFNUIHRhZyBzaG91bGQgYmUgdXBkYXRlZCBieSBVRE1BIGluIHRoZSBkZXNjcmlw dG9yJ3MgV29yZCAzICovCisjZGVmaW5lIFVETUFfUkZMT1dfU1JDVEFHX05PTkUJCTAKKyNkZWZp bmUgVURNQV9SRkxPV19TUkNUQUdfQ0ZHX1RBRwkxCisjZGVmaW5lIFVETUFfUkZMT1dfU1JDVEFH X0ZMT1dfSUQJMgorI2RlZmluZSBVRE1BX1JGTE9XX1NSQ1RBR19TUkNfVEFHCTQKKworI2RlZmlu ZSBVRE1BX1JGTE9XX0RTVFRBR19OT05FCQkwCisjZGVmaW5lIFVETUFfUkZMT1dfRFNUVEFHX0NG R19UQUcJMQorI2RlZmluZSBVRE1BX1JGTE9XX0RTVFRBR19GTE9XX0lECTIKKyNkZWZpbmUgVURN QV9SRkxPV19EU1RUQUdfRFNUX1RBR19MTwk0CisjZGVmaW5lIFVETUFfUkZMT1dfRFNUVEFHX0RT VF9UQUdfSEkJNQorCitzdHJ1Y3QgdWRtYV9jaGFuOworCitlbnVtIHVkbWFfbW1yIHsKKwlNTVJf R0NGRyA9IDAsCisJTU1SX1JDSEFOUlQsCisJTU1SX1RDSEFOUlQsCisJTU1SX0xBU1QsCit9Owor CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1tcl9uYW1lc1tdID0geyAiZ2NmZyIsICJyY2hh bnJ0IiwgInRjaGFucnQiIH07CisKK3N0cnVjdCB1ZG1hX3RjaGFuIHsKKwl2b2lkIF9faW9tZW0g KnJlZ19ydDsKKworCWludCBpZDsKKwlzdHJ1Y3QgazNfcmluZyAqdF9yaW5nOyAvKiBUcmFuc21p dCByaW5nICovCisJc3RydWN0IGszX3JpbmcgKnRjX3Jpbmc7IC8qIFRyYW5zbWl0IENvbXBsZXRp b24gcmluZyAqLworfTsKKworc3RydWN0IHVkbWFfcmZsb3cgeworCWludCBpZDsKKwlzdHJ1Y3Qg azNfcmluZyAqZmRfcmluZzsgLyogRnJlZSBEZXNjcmlwdG9yIHJpbmcgKi8KKwlzdHJ1Y3QgazNf cmluZyAqcl9yaW5nOyAvKiBSZWNlaXZlIHJpbmcgKi8KK307CisKK3N0cnVjdCB1ZG1hX3JjaGFu IHsKKwl2b2lkIF9faW9tZW0gKnJlZ19ydDsKKworCWludCBpZDsKK307CisKK3N0cnVjdCB1ZG1h X21hdGNoX2RhdGEgeworCXUzMiBwc2lsX2Jhc2U7CisJYm9vbCBlbmFibGVfbWVtY3B5X3N1cHBv cnQ7CisJYm9vbCBoYXZlX2FjYzMyOworCWJvb2wgaGF2ZV9idXJzdDsKKwl1MzIgc3RhdGljdHJf el9tYXNrOworCXUzMiByY2hhbl9vZXNfb2Zmc2V0OworCisJdTggdHBsX2xldmVsczsKKwl1MzIg bGV2ZWxfc3RhcnRfaWR4W107Cit9OworCitzdHJ1Y3QgdWRtYV9kZXYgeworCXN0cnVjdCBkbWFf ZGV2aWNlIGRkZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqbW1yc1tN TVJfTEFTVF07CisJY29uc3Qgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YTsKKwor CXNpemVfdCBkZXNjX2FsaWduOyAvKiBhbGlnbm1lbnQgdG8gdXNlIGZvciBkZXNjcmlwdG9ycyAq LworCisJc3RydWN0IHVkbWFfdGlzY2lfcm0gdGlzY2lfcm07CisKKwlzdHJ1Y3QgazNfcmluZ2Fj YyAqcmluZ2FjYzsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3JrOworCXN0cnVjdCBs aXN0X2hlYWQgZGVzY190b19wdXJnZTsKKwlzcGlubG9ja190IGxvY2s7CisKKwlpbnQgdGNoYW5f Y250OworCWludCBlY2hhbl9jbnQ7CisJaW50IHJjaGFuX2NudDsKKwlpbnQgcmZsb3dfY250Owor CXVuc2lnbmVkIGxvbmcgKnRjaGFuX21hcDsKKwl1bnNpZ25lZCBsb25nICpyY2hhbl9tYXA7CisJ dW5zaWduZWQgbG9uZyAqcmZsb3dfZ3BfbWFwOworCXVuc2lnbmVkIGxvbmcgKnJmbG93X2dwX21h cF9hbGxvY2F0ZWQ7CisJdW5zaWduZWQgbG9uZyAqcmZsb3dfaW5fdXNlOworCisJc3RydWN0IHVk bWFfdGNoYW4gKnRjaGFuczsKKwlzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW5zOworCXN0cnVjdCB1 ZG1hX3JmbG93ICpyZmxvd3M7CisKKwlzdHJ1Y3QgdWRtYV9jaGFuICpjaGFubmVsczsKKwl1MzIg cHNpbF9iYXNlOworfTsKKworc3RydWN0IHVkbWFfaHdkZXNjIHsKKwlzaXplX3QgY3BwaTVfZGVz Y19zaXplOworCXZvaWQgKmNwcGk1X2Rlc2NfdmFkZHI7CisJZG1hX2FkZHJfdCBjcHBpNV9kZXNj X3BhZGRyOworCisJLyogVFIgZGVzY3JpcHRvciBpbnRlcm5hbCBwb2ludGVycyAqLworCXZvaWQg KnRyX3JlcV9iYXNlOworCXN0cnVjdCBjcHBpNV90cl9yZXNwX3QgKnRyX3Jlc3BfYmFzZTsKK307 CisKK3N0cnVjdCB1ZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjIHZkOworCisJYm9v bCB0ZXJtaW5hdGVkOworCisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcjsKKworCXN0 cnVjdCB1ZG1hX3N0YXRpY190ciBzdGF0aWNfdHI7CisJdTMyIHJlc2lkdWU7CisKKwl1bnNpZ25l ZCBpbnQgc2dsZW47CisJdW5zaWduZWQgaW50IGRlc2NfaWR4OyAvKiBPbmx5IHVzZWQgZm9yIGN5 Y2xpYyBpbiBwYWNrZXQgbW9kZSAqLworCXVuc2lnbmVkIGludCB0cl9pZHg7CisKKwl1MzIgbWV0 YWRhdGFfc2l6ZTsKKwl2b2lkICptZXRhZGF0YTsgLyogcG9pbnRlciB0byBwcm92aWRlZCBtZXRh ZGF0YSBidWZmZXIgKEVQSVAsIFBTZGF0YSkgKi8KKworCXVuc2lnbmVkIGludCBod2Rlc2NfY291 bnQ7CisJc3RydWN0IHVkbWFfaHdkZXNjIGh3ZGVzY1swXTsKK307CisKK2VudW0gdWRtYV9jaGFu X3N0YXRlIHsKKwlVRE1BX0NIQU5fSVNfSURMRSA9IDAsIC8qIG5vdCBhY3RpdmUsIG5vIHRlYXJk b3duIGlzIGluIHByb2dyZXNzICovCisJVURNQV9DSEFOX0lTX0FDVElWRSwgLyogTm9ybWFsIG9w ZXJhdGlvbiAqLworCVVETUFfQ0hBTl9JU19BQ1RJVkVfRkxVU0gsIC8qIEZsdXNoaW5nIGZvciBk ZWxheWVkIHR4ICovCisJVURNQV9DSEFOX0lTX1RFUk1JTkFUSU5HLCAvKiBjaGFubmVsIGlzIGJl aW5nIHRlcm1pbmF0ZWQgKi8KK307CisKK3N0cnVjdCB1ZG1hX2NoYW4geworCXN0cnVjdCB2aXJ0 X2RtYV9jaGFuIHZjOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnCWNmZzsKKwlzdHJ1Y3QgdWRt YV9kZXYgKnVkOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmRlc2M7CisJc3RydWN0IHVkbWFfZGVzYyAq dGVybWluYXRlZF9kZXNjOworCXN0cnVjdCB1ZG1hX3N0YXRpY190ciBzdGF0aWNfdHI7CisJY2hh ciAqbmFtZTsKKworCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbjsKKwlzdHJ1Y3QgdWRtYV9yY2hh biAqcmNoYW47CisJc3RydWN0IHVkbWFfcmZsb3cgKnJmbG93OworCisJYm9vbCBwc2lsX3BhaXJl ZDsKKworCWludCBpcnFfbnVtX3Jpbmc7CisJaW50IGlycV9udW1fdWRtYTsKKworCWJvb2wgY3lj bGljOworCWJvb2wgcGF1c2VkOworCisJZW51bSB1ZG1hX2NoYW5fc3RhdGUgc3RhdGU7CisJc3Ry dWN0IGNvbXBsZXRpb24gdGVhcmRvd25fY29tcGxldGVkOworCisJdTMyIGJjbnQ7IC8qIG51bWJl ciBvZiBieXRlcyBjb21wbGV0ZWQgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBjaGFubmVsICovCisJ dTMyIGluX3JpbmdfY250OyAvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gZmxpZ2h0ICovCisK Kwlib29sIHBrdF9tb2RlOyAvKiBUUiBvciBwYWNrZXQgKi8KKwlib29sIG5lZWRzX2VwaWI7IC8q IEVQSUIgaXMgbmVlZGVkIGZvciB0aGUgY29tbXVuaWNhdGlvbiBvciBub3QgKi8KKwl1MzIgcHNk X3NpemU7IC8qIHNpemUgb2YgUHJvdG9jb2wgU3BlY2lmaWMgRGF0YSAqLworCXUzMiBtZXRhZGF0 YV9zaXplOyAvKiAobmVlZHNfZXBpYiA/IDE2OjApICsgcHNkX3NpemUgKi8KKwl1MzIgaGRlc2Nf c2l6ZTsgLyogU2l6ZSBvZiBhIHBhY2tldCBkZXNjcmlwdG9yIGluIHBhY2tldCBtb2RlICovCisJ Ym9vbCBub3RkcGt0OyAvKiBTdXBwcmVzcyBzZW5kaW5nIFREQyBwYWNrZXQgKi8KKwlpbnQgcmVt b3RlX3RocmVhZF9pZDsKKwl1MzIgc3JjX3RocmVhZDsKKwl1MzIgZHN0X3RocmVhZDsKKwllbnVt IHBzaWxfZW5kcG9pbnRfdHlwZSBlcF90eXBlOworCWJvb2wgZW5hYmxlX2FjYzMyOworCWJvb2wg ZW5hYmxlX2J1cnN0OworCWVudW0gdWRtYV90cF9sZXZlbCBjaGFubmVsX3RwbDsgLyogQ2hhbm5l bCBUaHJvdWdocHV0IExldmVsICovCisKKwkvKiBkbWFwb29sIGZvciBwYWNrZXQgbW9kZSBkZXNj cmlwdG9ycyAqLworCWJvb2wgdXNlX2RtYV9wb29sOworCXN0cnVjdCBkbWFfcG9vbCAqaGRlc2Nf cG9vbDsKKworCXUzMiBpZDsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyOworfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9kZXYgKnRvX3VkbWFfZGV2KHN0cnVjdCBkbWFf ZGV2aWNlICpkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IHVkbWFfZGV2LCBk ZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9jaGFuICp0b191ZG1hX2NoYW4o c3RydWN0IGRtYV9jaGFuICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IHVk bWFfY2hhbiwgdmMuY2hhbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVkbWFfZGVzYyAq dG9fdWRtYV9kZXNjKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdCkKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKHQsIHN0cnVjdCB1ZG1hX2Rlc2MsIHZkLnR4KTsKK30KKworLyogR2Vu ZXJpYyByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHUzMiB1ZG1h X3JlYWQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbChiYXNl ICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkbWFfd3JpdGUodm9pZCBfX2lvbWVt ICpiYXNlLCBpbnQgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGJhc2UgKyByZWcpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV91cGRhdGVfYml0cyh2b2lkIF9faW9tZW0gKmJh c2UsIGludCByZWcsCisJCQkJICAgIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCXUzMiB0bXAsIG9y aWc7CisKKwlvcmlnID0gcmVhZGwoYmFzZSArIHJlZyk7CisJdG1wID0gb3JpZyAmIH5tYXNrOwor CXRtcCB8PSAodmFsICYgbWFzayk7CisKKwlpZiAodG1wICE9IG9yaWcpCisJCXdyaXRlbCh0bXAs IGJhc2UgKyByZWcpOworfQorCisvKiBUQ0hBTlJUICovCitzdGF0aWMgaW5saW5lIHUzMiB1ZG1h X3RjaGFucnRfcmVhZChzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4sIGludCByZWcpCit7CisJaWYg KCF0Y2hhbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHVkbWFfcmVhZCh0Y2hhbi0+cmVnX3J0LCBy ZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV90Y2hhbnJ0X3dyaXRlKHN0cnVjdCB1 ZG1hX3RjaGFuICp0Y2hhbiwgaW50IHJlZywKKwkJCQkgICAgICB1MzIgdmFsKQoreworCWlmICgh dGNoYW4pCisJCXJldHVybjsKKwl1ZG1hX3dyaXRlKHRjaGFuLT5yZWdfcnQsIHJlZywgdmFsKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHVkbWFfdGNoYW5ydF91cGRhdGVfYml0cyhzdHJ1Y3Qg dWRtYV90Y2hhbiAqdGNoYW4sIGludCByZWcsCisJCQkJCSAgICB1MzIgbWFzaywgdTMyIHZhbCkK K3sKKwlpZiAoIXRjaGFuKQorCQlyZXR1cm47CisJdWRtYV91cGRhdGVfYml0cyh0Y2hhbi0+cmVn X3J0LCByZWcsIG1hc2ssIHZhbCk7Cit9CisKKy8qIFJDSEFOUlQgKi8KK3N0YXRpYyBpbmxpbmUg dTMyIHVkbWFfcmNoYW5ydF9yZWFkKHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiwgaW50IHJlZykK K3sKKwlpZiAoIXJjaGFuKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdWRtYV9yZWFkKHJjaGFuLT5y ZWdfcnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZG1hX3JjaGFucnRfd3JpdGUo c3RydWN0IHVkbWFfcmNoYW4gKnJjaGFuLCBpbnQgcmVnLAorCQkJCSAgICAgIHUzMiB2YWwpCit7 CisJaWYgKCFyY2hhbikKKwkJcmV0dXJuOworCXVkbWFfd3JpdGUocmNoYW4tPnJlZ19ydCwgcmVn LCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9yY2hhbnJ0X3VwZGF0ZV9iaXRz KHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiwgaW50IHJlZywKKwkJCQkJICAgIHUzMiBtYXNrLCB1 MzIgdmFsKQoreworCWlmICghcmNoYW4pCisJCXJldHVybjsKKwl1ZG1hX3VwZGF0ZV9iaXRzKHJj aGFuLT5yZWdfcnQsIHJlZywgbWFzaywgdmFsKTsKK30KKworc3RhdGljIGludCBuYXZzc19wc2ls X3BhaXIoc3RydWN0IHVkbWFfZGV2ICp1ZCwgdTMyIHNyY190aHJlYWQsIHUzMiBkc3RfdGhyZWFk KQoreworCXN0cnVjdCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisK Kwlkc3RfdGhyZWFkIHw9IEszX1BTSUxfRFNUX1RIUkVBRF9JRF9PRkZTRVQ7CisJcmV0dXJuIHRp c2NpX3JtLT50aXNjaV9wc2lsX29wcy0+cGFpcih0aXNjaV9ybS0+dGlzY2ksCisJCQkJCSAgICAg IHRpc2NpX3JtLT50aXNjaV9uYXZzc19kZXZfaWQsCisJCQkJCSAgICAgIHNyY190aHJlYWQsIGRz dF90aHJlYWQpOworfQorCitzdGF0aWMgaW50IG5hdnNzX3BzaWxfdW5wYWlyKHN0cnVjdCB1ZG1h X2RldiAqdWQsIHUzMiBzcmNfdGhyZWFkLAorCQkJICAgICB1MzIgZHN0X3RocmVhZCkKK3sKKwlz dHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCisJZHN0X3Ro cmVhZCB8PSBLM19QU0lMX0RTVF9USFJFQURfSURfT0ZGU0VUOworCXJldHVybiB0aXNjaV9ybS0+ dGlzY2lfcHNpbF9vcHMtPnVucGFpcih0aXNjaV9ybS0+dGlzY2ksCisJCQkJCQl0aXNjaV9ybS0+ dGlzY2lfbmF2c3NfZGV2X2lkLAorCQkJCQkJc3JjX3RocmVhZCwgZHN0X3RocmVhZCk7Cit9CisK K3N0YXRpYyBjaGFyICp1ZG1hX2dldF9kaXJfdGV4dChlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rp b24gZGlyKQoreworCXN3aXRjaCAoZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJcmV0 dXJuICJERVZfVE9fTUVNIjsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQlyZXR1cm4gIk1FTV9U T19ERVYiOworCWNhc2UgRE1BX01FTV9UT19NRU06CisJCXJldHVybiAiTUVNX1RPX01FTSI7CisJ Y2FzZSBETUFfREVWX1RPX0RFVjoKKwkJcmV0dXJuICJERVZfVE9fREVWIjsKKwlkZWZhdWx0Ogor CQlicmVhazsKKwl9CisKKwlyZXR1cm4gImludmFsaWQiOworfQorCitzdGF0aWMgdm9pZCB1ZG1h X3Jlc2V0X3VjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXVjLT5zdGF0ZSA9IFVETUFf Q0hBTl9JU19JRExFOworCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJdWMtPmRpciA9IERN QV9NRU1fVE9fTUVNOworCXVjLT5wa3RfbW9kZSA9IGZhbHNlOworCXVjLT5lcF90eXBlID0gUFNJ TF9FUF9OQVRJVkU7CisJdWMtPmVuYWJsZV9hY2MzMiA9IDA7CisJdWMtPmVuYWJsZV9idXJzdCA9 IDA7CisJdWMtPmNoYW5uZWxfdHBsID0gMDsKKwl1Yy0+cHNkX3NpemUgPSAwOworCXVjLT5tZXRh ZGF0YV9zaXplID0gMDsKKwl1Yy0+aGRlc2Nfc2l6ZSA9IDA7CisJdWMtPm5vdGRwa3QgPSAwOwor fQorCitzdGF0aWMgdm9pZCB1ZG1hX2R1bXBfY2hhbl9zdGRhdGEoc3RydWN0IHVkbWFfY2hhbiAq dWMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdWMtPnVkLT5kZXY7CisJdTMyIG9mZnNldDsK KwlpbnQgaTsKKworCWlmICh1Yy0+ZGlyID09IERNQV9NRU1fVE9fREVWIHx8IHVjLT5kaXIgPT0g RE1BX01FTV9UT19NRU0pIHsKKwkJZGV2X2RiZyhkZXYsICJUQ0hBTiBTdGF0ZSBkYXRhOlxuIik7 CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQlvZmZzZXQgPSBVRE1BX1RDSEFOX1JU X1NUREFUQV9SRUcgKyBpICogNDsKKwkJCWRldl9kYmcoZGV2LCAiVFJUX1NUREFUQVslMDJkXTog MHglMDh4XG4iLCBpLAorCQkJCXVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgb2Zmc2V0KSk7 CisJCX0KKwl9CisKKwlpZiAodWMtPmRpciA9PSBETUFfREVWX1RPX01FTSB8fCB1Yy0+ZGlyID09 IERNQV9NRU1fVE9fTUVNKSB7CisJCWRldl9kYmcoZGV2LCAiUkNIQU4gU3RhdGUgZGF0YTpcbiIp OworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJb2Zmc2V0ID0gVURNQV9SQ0hBTl9S VF9TVERBVEFfUkVHICsgaSAqIDQ7CisJCQlkZXZfZGJnKGRldiwgIlJSVF9TVERBVEFbJTAyZF06 IDB4JTA4eFxuIiwgaSwKKwkJCQl1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4sIG9mZnNldCkp OworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgdWRtYV9jdXJyX2NwcGk1 X2Rlc2NfcGFkZHIoc3RydWN0IHVkbWFfZGVzYyAqZCwKKwkJCQkJCSAgICBpbnQgaWR4KQorewor CXJldHVybiBkLT5od2Rlc2NbaWR4XS5jcHBpNV9kZXNjX3BhZGRyOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgKnVkbWFfY3Vycl9jcHBpNV9kZXNjX3ZhZGRyKHN0cnVjdCB1ZG1hX2Rlc2MgKmQs IGludCBpZHgpCit7CisJcmV0dXJuIGQtPmh3ZGVzY1tpZHhdLmNwcGk1X2Rlc2NfdmFkZHI7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9kZXNjICp1ZG1hX3VkbWFfZGVzY19mcm9tX3BhZGRyKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjLAorCQkJCQkJICAgZG1hX2FkZHJfdCBwYWRkcikKK3sKKwlzdHJ1 Y3QgdWRtYV9kZXNjICpkID0gdWMtPnRlcm1pbmF0ZWRfZGVzYzsKKworCWlmIChkKSB7CisJCWRt YV9hZGRyX3QgZGVzY19wYWRkciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKGQsCisJCQkJ CQkJCSAgIGQtPmRlc2NfaWR4KTsKKworCQlpZiAoZGVzY19wYWRkciAhPSBwYWRkcikKKwkJCWQg PSBOVUxMOworCX0KKworCWlmICghZCkgeworCQlkID0gdWMtPmRlc2M7CisJCWlmIChkKSB7CisJ CQlkbWFfYWRkcl90IGRlc2NfcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcihkLAor CQkJCQkJCQlkLT5kZXNjX2lkeCk7CisKKwkJCWlmIChkZXNjX3BhZGRyICE9IHBhZGRyKQorCQkJ CWQgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIGQ7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFf ZnJlZV9od2Rlc2Moc3RydWN0IHVkbWFfY2hhbiAqdWMsIHN0cnVjdCB1ZG1hX2Rlc2MgKmQpCit7 CisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8 IGQtPmh3ZGVzY19jb3VudDsgaSsrKSB7CisJCQlpZiAoIWQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNj X3ZhZGRyKQorCQkJCWNvbnRpbnVlOworCisJCQlkbWFfcG9vbF9mcmVlKHVjLT5oZGVzY19wb29s LAorCQkJCSAgICAgIGQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3ZhZGRyLAorCQkJCSAgICAgIGQt Pmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3BhZGRyKTsKKworCQkJZC0+aHdkZXNjW2ldLmNwcGk1X2Rl c2NfdmFkZHIgPSBOVUxMOworCQl9CisJfSBlbHNlIGlmIChkLT5od2Rlc2NbMF0uY3BwaTVfZGVz Y192YWRkcikgeworCQlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOworCisJCWRtYV9mcmVl X2NvaGVyZW50KHVkLT5kZXYsIGQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3NpemUsCisJCQkJICBk LT5od2Rlc2NbMF0uY3BwaTVfZGVzY192YWRkciwKKwkJCQkgIGQtPmh3ZGVzY1swXS5jcHBpNV9k ZXNjX3BhZGRyKTsKKworCQlkLT5od2Rlc2NbMF0uY3BwaTVfZGVzY192YWRkciA9IE5VTEw7CisJ fQorfQorCitzdGF0aWMgdm9pZCB1ZG1hX3B1cmdlX2Rlc2Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0 eXBlb2YoKnVkKSwgcHVyZ2Vfd29yayk7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkLCAqX3Zk OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJnVkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZ1ZC0+ ZGVzY190b19wdXJnZSwgJmhlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkLT5sb2Nr LCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmQsIF92ZCwgJmhlYWQsIG5v ZGUpIHsKKwkJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1hX2NoYW4odmQtPnR4LmNoYW4p OworCQlzdHJ1Y3QgdWRtYV9kZXNjICpkID0gdG9fdWRtYV9kZXNjKCZ2ZC0+dHgpOworCisJCXVk bWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQlsaXN0X2RlbCgmdmQtPm5vZGUpOworCQlrZnJlZShk KTsKKwl9CisKKwkvKiBJZiBtb3JlIHRvIHB1cmdlLCBzY2hlZHVsZSB0aGUgd29yayBhZ2FpbiAq LworCWlmICghbGlzdF9lbXB0eSgmdWQtPmRlc2NfdG9fcHVyZ2UpKQorCQlzY2hlZHVsZV93b3Jr KCZ1ZC0+cHVyZ2Vfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfZGVzY19mcmVlKHN0cnVj dCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdG9fdWRtYV9k ZXYodmQtPnR4LmNoYW4tPmRldmljZSk7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1h X2NoYW4odmQtPnR4LmNoYW4pOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQgPSB0b191ZG1hX2Rlc2Mo JnZkLT50eCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1Yy0+dGVybWluYXRlZF9k ZXNjID09IGQpCisJCXVjLT50ZXJtaW5hdGVkX2Rlc2MgPSBOVUxMOworCisJaWYgKHVjLT51c2Vf ZG1hX3Bvb2wpIHsKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1YywgZCk7CisJCWtmcmVlKGQpOworCQly ZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkLT5sb2NrLCBmbGFncyk7CisJbGlz dF9hZGRfdGFpbCgmdmQtPm5vZGUsICZ1ZC0+ZGVzY190b19wdXJnZSk7CisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmdWQtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJnVkLT5wdXJn ZV93b3JrKTsKK30KKworc3RhdGljIGJvb2wgdWRtYV9pc19jaGFuX3J1bm5pbmcoc3RydWN0IHVk bWFfY2hhbiAqdWMpCit7CisJdTMyIHRydF9jdGwgPSAwOworCXUzMiBycnRfY3RsID0gMDsKKwor CWlmICh1Yy0+dGNoYW4pCisJCXRydF9jdGwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4s IFVETUFfVENIQU5fUlRfQ1RMX1JFRyk7CisJaWYgKHVjLT5yY2hhbikKKwkJcnJ0X2N0bCA9IHVk bWFfcmNoYW5ydF9yZWFkKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExfUkVHKTsKKworCWlm ICh0cnRfY3RsICYgKFVETUFfQ0hBTl9SVF9DVExfRU4gfHwgcnJ0X2N0bCAmIFVETUFfQ0hBTl9S VF9DVExfRU4pKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGlj IHZvaWQgdWRtYV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IHVkbWFfY2hhbiAqdWMsIGludCBpZHgp Cit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHVjLT5kZXNjOworCisJaWYgKHVjLT5jeWNsaWMg JiYgdWMtPnBrdF9tb2RlKSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVjLT51ZC0+ ZGV2LAorCQkJCQkgICBkLT5od2Rlc2NbaWR4XS5jcHBpNV9kZXNjX3BhZGRyLAorCQkJCQkgICBk LT5od2Rlc2NbaWR4XS5jcHBpNV9kZXNjX3NpemUsCisJCQkJCSAgIERNQV9UT19ERVZJQ0UpOwor CX0gZWxzZSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBkLT5od2Rlc2NfY291bnQ7 IGkrKykgeworCQkJaWYgKCFkLT5od2Rlc2NbaV0uY3BwaTVfZGVzY192YWRkcikKKwkJCQljb250 aW51ZTsKKworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodWMtPnVkLT5kZXYsCisJCQkJ CQlkLT5od2Rlc2NbaV0uY3BwaTVfZGVzY19wYWRkciwKKwkJCQkJCWQtPmh3ZGVzY1tpXS5jcHBp NV9kZXNjX3NpemUsCisJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJfQorCX0KK30KKworc3RhdGlj IGludCB1ZG1hX3B1c2hfdG9fcmluZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgaW50IGlkeCkKK3sK KwlzdHJ1Y3QgdWRtYV9kZXNjICpkID0gdWMtPmRlc2M7CisKKwlzdHJ1Y3QgazNfcmluZyAqcmlu ZyA9IE5VTEw7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwlj YXNlIERNQV9ERVZfVE9fTUVNOgorCQlyaW5nID0gdWMtPnJmbG93LT5mZF9yaW5nOworCQlicmVh azsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCWNhc2UgRE1BX01FTV9UT19NRU06CisJCXJpbmcg PSB1Yy0+dGNoYW4tPnRfcmluZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor CisJaWYgKHJpbmcpIHsKKwkJZG1hX2FkZHJfdCBkZXNjX2FkZHIgPSB1ZG1hX2N1cnJfY3BwaTVf ZGVzY19wYWRkcihkLCBpZHgpOworCisJCXdtYigpOyAvKiBFbnN1cmUgdGhhdCB3cml0ZXMgYXJl IG5vdCBtb3ZlZCBvdmVyIHRoaXMgcG9pbnQgKi8KKwkJdWRtYV9zeW5jX2Zvcl9kZXZpY2UodWMs IGlkeCk7CisJCXJldCA9IGszX3JpbmdhY2NfcmluZ19wdXNoKHJpbmcsICZkZXNjX2FkZHIpOwor CQl1Yy0+aW5fcmluZ19jbnQrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHVkbWFfcG9wX2Zyb21fcmluZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgZG1hX2FkZHJfdCAqYWRk cikKK3sKKwlzdHJ1Y3QgazNfcmluZyAqcmluZyA9IE5VTEw7CisJaW50IHJldCA9IC1FTk9FTlQ7 CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlyaW5nID0g dWMtPnJmbG93LT5yX3Jpbmc7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJY2Fz ZSBETUFfTUVNX1RPX01FTToKKwkJcmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJpbmcgJiYgazNfcmluZ2FjY19yaW5n X2dldF9vY2MocmluZykpIHsKKwkJc3RydWN0IHVkbWFfZGVzYyAqZCA9IE5VTEw7CisKKwkJcmV0 ID0gazNfcmluZ2FjY19yaW5nX3BvcChyaW5nLCBhZGRyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisKKwkJLyogVGVhcmRvd24gY29tcGxldGlvbiAqLworCQlpZiAoY3BwaTVfZGVzY19p c190ZGNtKCphZGRyKSkKKwkJCXJldHVybiByZXQ7CisKKwkJZCA9IHVkbWFfdWRtYV9kZXNjX2Zy b21fcGFkZHIodWMsICphZGRyKTsKKworCQlpZiAoZCkKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3Jf Y3B1KHVjLT51ZC0+ZGV2LCAqYWRkciwKKwkJCQkJCWQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3Np emUsCisJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlybWIoKTsgLyogRW5zdXJlIHRoYXQgcmVh ZHMgYXJlIG5vdCBtb3ZlZCBiZWZvcmUgdGhpcyBwb2ludCAqLworCisJCWlmICghcmV0KQorCQkJ dWMtPmluX3JpbmdfY250LS07CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg dWRtYV9yZXNldF9yaW5ncyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgazNfcmlu ZyAqcmluZzEgPSBOVUxMOworCXN0cnVjdCBrM19yaW5nICpyaW5nMiA9IE5VTEw7CisKKwlzd2l0 Y2ggKHVjLT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlpZiAodWMtPnJjaGFuKSB7 CisJCQlyaW5nMSA9IHVjLT5yZmxvdy0+ZmRfcmluZzsKKwkJCXJpbmcyID0gdWMtPnJmbG93LT5y X3Jpbmc7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwljYXNlIERNQV9N RU1fVE9fTUVNOgorCQlpZiAodWMtPnRjaGFuKSB7CisJCQlyaW5nMSA9IHVjLT50Y2hhbi0+dF9y aW5nOworCQkJcmluZzIgPSB1Yy0+dGNoYW4tPnRjX3Jpbmc7CisJCX0KKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJpbmcxKQorCQlrM19yaW5nYWNjX3JpbmdfcmVz ZXRfZG1hKHJpbmcxLAorCQkJCQkgIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcxKSk7CisJ aWYgKHJpbmcyKQorCQlrM19yaW5nYWNjX3JpbmdfcmVzZXQocmluZzIpOworCisJLyogbWFrZSBz dXJlIHdlIGFyZSBub3QgbGVha2luZyBtZW1vcnkgYnkgc3RhbGxlZCBkZXNjcmlwdG9yICovCisJ aWYgKHVjLT50ZXJtaW5hdGVkX2Rlc2MpIHsKKwkJdWRtYV9kZXNjX2ZyZWUoJnVjLT50ZXJtaW5h dGVkX2Rlc2MtPnZkKTsKKwkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJfQorCisJdWMt PmluX3JpbmdfY250ID0gMDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9yZXNldF9jb3VudGVycyhz dHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwl1MzIgdmFsOworCisJaWYgKHVjLT50Y2hhbikgewor CQl2YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQkNOVF9S RUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0JDTlRf UkVHLCB2YWwpOworCisJCXZhbCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9U Q0hBTl9SVF9TQkNOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1B X1RDSEFOX1JUX1NCQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1 Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUENOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUo dWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHLCB2YWwpOworCisJCXZhbCA9IHVkbWFf dGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVHKTsKKwkJ dWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVH LCB2YWwpOworCX0KKworCWlmICh1Yy0+cmNoYW4pIHsKKwkJdmFsID0gdWRtYV9yY2hhbnJ0X3Jl YWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0JDTlRfUkVHKTsKKwkJdWRtYV9yY2hhbnJ0X3dy aXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9CQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1 ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfU0JDTlRfUkVHKTsKKwkJ dWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9TQkNOVF9SRUcsIHZh bCk7CisKKwkJdmFsID0gdWRtYV9yY2hhbnJ0X3JlYWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JU X1BDTlRfUkVHKTsKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9S VF9QQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4s IFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRyk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+ cmNoYW4sIFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRywgdmFsKTsKKwl9CisKKwl1Yy0+YmNu dCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9yZXNldF9jaGFuKHN0cnVjdCB1ZG1hX2NoYW4g KnVjLCBib29sIGhhcmQpCit7CisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFfREVWX1RP X01FTToKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9QRUVS X1JUX0VOX1JFRywgMCk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNI QU5fUlRfQ1RMX1JFRywgMCk7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJCXVk bWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywgMCk7CisJ CXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVFUl9SVF9FTl9S RUcsIDApOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRf d3JpdGUodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsIDApOworCQl1ZG1hX3RjaGFu cnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsIDApOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXNldCBhbGwgY291bnRl cnMgKi8KKwl1ZG1hX3Jlc2V0X2NvdW50ZXJzKHVjKTsKKworCS8qIEhhcmQgcmVzZXQ6IHJlLWlu aXRpYWxpemUgdGhlIGNoYW5uZWwgdG8gcmVzZXQgKi8KKwlpZiAoaGFyZCkgeworCQlzdHJ1Y3Qg dWRtYV9jaGFuIHVjX2JhY2t1cCA9ICp1YzsKKwkJaW50IHJldDsKKworCQl1Yy0+dWQtPmRkZXYu ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMoJnVjLT52Yy5jaGFuKTsKKwkJLyogcmVzdG9yZSB0 aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJCXVjLT5kaXIgPSB1Y19iYWNrdXAuZGlyOwor CQl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9IHVjX2JhY2t1cC5yZW1vdGVfdGhyZWFkX2lkOworCQl1 Yy0+cGt0X21vZGUgPSB1Y19iYWNrdXAucGt0X21vZGU7CisJCXVjLT5lcF90eXBlID0gdWNfYmFj a3VwLmVwX3R5cGU7CisJCXVjLT5lbmFibGVfYWNjMzIgPSB1Y19iYWNrdXAuZW5hYmxlX2FjYzMy OworCQl1Yy0+ZW5hYmxlX2J1cnN0ID0gdWNfYmFja3VwLmVuYWJsZV9idXJzdDsKKwkJdWMtPmNo YW5uZWxfdHBsID0gdWNfYmFja3VwLmNoYW5uZWxfdHBsOworCQl1Yy0+cHNkX3NpemUgPSB1Y19i YWNrdXAucHNkX3NpemU7CisJCXVjLT5tZXRhZGF0YV9zaXplID0gdWNfYmFja3VwLm1ldGFkYXRh X3NpemU7CisJCXVjLT5oZGVzY19zaXplID0gdWNfYmFja3VwLmhkZXNjX3NpemU7CisJCXVjLT5u b3RkcGt0ID0gdWNfYmFja3VwLm5vdGRwa3Q7CisKKwkJcmV0ID0gdWMtPnVkLT5kZGV2LmRldmlj ZV9hbGxvY19jaGFuX3Jlc291cmNlcygmdWMtPnZjLmNoYW4pOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKwl9CisJdWMtPnN0YXRlID0gVURNQV9DSEFOX0lTX0lETEU7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9zdGFydF9kZXNjKHN0cnVjdCB1ZG1hX2NoYW4gKnVj KQoreworCWlmICh1Yy0+cGt0X21vZGUgJiYgKHVjLT5jeWNsaWMgfHwgdWMtPmRpciA9PSBETUFf REVWX1RPX01FTSkpIHsKKwkJaW50IGk7CisKKwkJLyogUHVzaCBhbGwgZGVzY3JpcHRvcnMgdG8g cmluZyBmb3IgcGFja2V0IG1vZGUgY3ljbGljIG9yIFJYICovCisJCWZvciAoaSA9IDA7IGkgPCB1 Yy0+ZGVzYy0+c2dsZW47IGkrKykKKwkJCXVkbWFfcHVzaF90b19yaW5nKHVjLCBpKTsKKwl9IGVs c2UgeworCQl1ZG1hX3B1c2hfdG9fcmluZyh1YywgMCk7CisJfQorfQorCitzdGF0aWMgYm9vbCB1 ZG1hX2NoYW5fbmVlZHNfcmVjb25maWd1cmF0aW9uKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQorewor CS8qIE9ubHkgUERNQXMgaGF2ZSBzdGF0aWNUUiAqLworCWlmICh1Yy0+ZXBfdHlwZSA9PSBQU0lM X0VQX05BVElWRSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRpY1RS IGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgZm9yIFRYICovCisJaWYgKG1lbWNtcCgmdWMtPnN0 YXRpY190ciwgJnVjLT5kZXNjLT5zdGF0aWNfdHIsIHNpemVvZih1Yy0+c3RhdGljX3RyKSkpCisJ CXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHVkbWFfc3Rh cnQoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkID0g dmNoYW5fbmV4dF9kZXNjKCZ1Yy0+dmMpOworCisJaWYgKCF2ZCkgeworCQl1Yy0+ZGVzYyA9IE5V TEw7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWxpc3RfZGVsKCZ2ZC0+bm9kZSk7CisKKwl1 Yy0+ZGVzYyA9IHRvX3VkbWFfZGVzYygmdmQtPnR4KTsKKworCS8qIENoYW5uZWwgaXMgYWxyZWFk eSBydW5uaW5nIGFuZCBkb2VzIG5vdCBuZWVkIHJlY29uZmlndXJhdGlvbiAqLworCWlmICh1ZG1h X2lzX2NoYW5fcnVubmluZyh1YykgJiYgIXVkbWFfY2hhbl9uZWVkc19yZWNvbmZpZ3VyYXRpb24o dWMpKSB7CisJCXVkbWFfc3RhcnRfZGVzYyh1Yyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE1h a2Ugc3VyZSB0aGF0IHdlIGNsZWFyIHRoZSB0ZWFyZG93biBiaXQsIGlmIGl0IGlzIHNldCAqLwor CXVkbWFfcmVzZXRfY2hhbih1YywgZmFsc2UpOworCisJLyogUHVzaCBkZXNjcmlwdG9ycyBiZWZv cmUgd2Ugc3RhcnQgdGhlIGNoYW5uZWwgKi8KKwl1ZG1hX3N0YXJ0X2Rlc2ModWMpOworCisJc3dp dGNoICh1Yy0+ZGVzYy0+ZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJLyogQ29uZmln IHJlbW90ZSBUUiAqLworCQlpZiAodWMtPmVwX3R5cGUgPT0gUFNJTF9FUF9QRE1BX1hZKSB7CisJ CQl1MzIgdmFsID0gUERNQV9TVEFUSUNfVFJfWSh1Yy0+ZGVzYy0+c3RhdGljX3RyLmVsY250KSB8 CisJCQkJICBQRE1BX1NUQVRJQ19UUl9YKHVjLT5kZXNjLT5zdGF0aWNfdHIuZWxzaXplKTsKKwkJ CWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEgPQorCQkJCQkJCXVjLT51 ZC0+bWF0Y2hfZGF0YTsKKworCQkJaWYgKHVjLT5lbmFibGVfYWNjMzIpCisJCQkJdmFsIHw9IFBE TUFfU1RBVElDX1RSX1hZX0FDQzMyOworCQkJaWYgKHVjLT5lbmFibGVfYnVyc3QpCisJCQkJdmFs IHw9IFBETUFfU1RBVElDX1RSX1hZX0JVUlNUOworCisJCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMt PnJjaGFuLAorCQkJCVVETUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHLCB2YWwpOwor CisJCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLAorCQkJCVVETUFfUkNIQU5fUlRfUEVF Ul9TVEFUSUNfVFJfWl9SRUcsCisJCQkJUERNQV9TVEFUSUNfVFJfWih1Yy0+ZGVzYy0+c3RhdGlj X3RyLmJzdGNudCwKKwkJCQkJCSBtYXRjaF9kYXRhLT5zdGF0aWN0cl96X21hc2spKTsKKworCQkJ Lyogc2F2ZSB0aGUgY3VycmVudCBzdGF0aWNUUiBjb25maWd1cmF0aW9uICovCisJCQltZW1jcHko JnVjLT5zdGF0aWNfdHIsICZ1Yy0+ZGVzYy0+c3RhdGljX3RyLAorCQkJICAgICAgIHNpemVvZih1 Yy0+c3RhdGljX3RyKSk7CisJCX0KKworCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLCBV RE1BX1JDSEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTik7CisKKwkJ LyogRW5hYmxlIHJlbW90ZSAqLworCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLCBVRE1B X1JDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUp OworCisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJCS8qIENvbmZpZyByZW1vdGUg VFIgKi8KKwkJaWYgKHVjLT5lcF90eXBlID09IFBTSUxfRVBfUERNQV9YWSkgeworCQkJdTMyIHZh bCA9IFBETUFfU1RBVElDX1RSX1kodWMtPmRlc2MtPnN0YXRpY190ci5lbGNudCkgfAorCQkJCSAg UERNQV9TVEFUSUNfVFJfWCh1Yy0+ZGVzYy0+c3RhdGljX3RyLmVsc2l6ZSk7CisKKwkJCWlmICh1 Yy0+ZW5hYmxlX2FjYzMyKQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9BQ0MzMjsKKwkJ CWlmICh1Yy0+ZW5hYmxlX2J1cnN0KQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9CVVJT VDsKKworCQkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwKKwkJCQlVRE1BX1RDSEFOX1JU X1BFRVJfU1RBVElDX1RSX1hZX1JFRywgdmFsKTsKKworCQkJLyogc2F2ZSB0aGUgY3VycmVudCBz dGF0aWNUUiBjb25maWd1cmF0aW9uICovCisJCQltZW1jcHkoJnVjLT5zdGF0aWNfdHIsICZ1Yy0+ ZGVzYy0+c3RhdGljX3RyLAorCQkJICAgICAgIHNpemVvZih1Yy0+c3RhdGljX3RyKSk7CisJCX0K KworCQkvKiBFbmFibGUgcmVtb3RlICovCisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4s IFVETUFfVENIQU5fUlRfUEVFUl9SVF9FTl9SRUcsCisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0VO QUJMRSk7CisKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9D VExfUkVHLAorCQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfRU4pOworCisJCWJyZWFrOworCWNhc2Ug RE1BX01FTV9UT19NRU06CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNI QU5fUlRfQ1RMX1JFRywKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKwkJdWRtYV90Y2hh bnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFf Q0hBTl9SVF9DVExfRU4pOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19BQ1RJVkU7CitvdXQ6CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB1ZG1hX3N0b3Aoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7 CisJZW51bSB1ZG1hX2NoYW5fc3RhdGUgb2xkX3N0YXRlID0gdWMtPnN0YXRlOworCisJdWMtPnN0 YXRlID0gVURNQV9DSEFOX0lTX1RFUk1JTkFUSU5HOworCXJlaW5pdF9jb21wbGV0aW9uKCZ1Yy0+ dGVhcmRvd25fY29tcGxldGVkKTsKKworCXN3aXRjaCAodWMtPmRpcikgeworCWNhc2UgRE1BX0RF Vl9UT19NRU06CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRf UEVFUl9SVF9FTl9SRUcsCisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0VOQUJMRSB8CisJCQkJICAg VURNQV9QRUVSX1JUX0VOX1RFQVJET1dOKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RF VjoKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX1JU X0VOX1JFRywKKwkJCQkgICBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFIHwKKwkJCQkgICBVRE1BX1BF RVJfUlRfRU5fRkxVU0gpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RD SEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTiB8CisJCQkJICAgVURN QV9DSEFOX1JUX0NUTF9URE9XTik7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19NRU06CisJ CXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywKKwkJ CQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOIHwKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX1RET1dO KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdWMtPnN0YXRlID0gb2xkX3N0YXRlOworCQljb21w bGV0ZV9hbGwoJnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9jeWNsaWNfcGFja2V0X2VsYXBz ZWQoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHVjLT5k ZXNjOworCXN0cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCAqaF9kZXNjOworCisJaF9kZXNjID0gZC0+ aHdkZXNjW2QtPmRlc2NfaWR4XS5jcHBpNV9kZXNjX3ZhZGRyOworCWNwcGk1X2hkZXNjX3Jlc2V0 X3RvX29yaWdpbmFsKGhfZGVzYyk7CisJdWRtYV9wdXNoX3RvX3JpbmcodWMsIGQtPmRlc2NfaWR4 KTsKKwlkLT5kZXNjX2lkeCA9IChkLT5kZXNjX2lkeCArIDEpICUgZC0+c2dsZW47Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCB1ZG1hX2ZldGNoX2VwaWIoc3RydWN0IHVkbWFfY2hhbiAqdWMsIHN0 cnVjdCB1ZG1hX2Rlc2MgKmQpCit7CisJc3RydWN0IGNwcGk1X2hvc3RfZGVzY190ICpoX2Rlc2Mg PSBkLT5od2Rlc2NbMF0uY3BwaTVfZGVzY192YWRkcjsKKworCW1lbWNweShkLT5tZXRhZGF0YSwg aF9kZXNjLT5lcGliLCBkLT5tZXRhZGF0YV9zaXplKTsKK30KKworc3RhdGljIGJvb2wgdWRtYV9p c19kZXNjX3JlYWxseV9kb25lKHN0cnVjdCB1ZG1hX2NoYW4gKnVjLCBzdHJ1Y3QgdWRtYV9kZXNj ICpkKQoreworCXUzMiBwZWVyX2JjbnQsIGJjbnQ7CisKKwkvKiBPbmx5IFRYIHRvd2FyZHMgUERN QSBpcyBhZmZlY3RlZCAqLworCWlmICh1Yy0+ZXBfdHlwZSA9PSBQU0lMX0VQX05BVElWRSB8fCB1 Yy0+ZGlyICE9IERNQV9NRU1fVE9fREVWKQorCQlyZXR1cm4gdHJ1ZTsKKworCXBlZXJfYmNudCA9 IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVH KTsKKwliY250ID0gdWRtYV90Y2hhbnJ0X3JlYWQodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0JD TlRfUkVHKTsKKworCWlmIChwZWVyX2JjbnQgPCBiY250KQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdWRtYV9mbHVzaF90eChzdHJ1Y3QgdWRtYV9j aGFuICp1YykKK3sKKwlpZiAodWMtPmRpciAhPSBETUFfTUVNX1RPX0RFVikKKwkJcmV0dXJuOwor CisJdWMtPnN0YXRlID0gVURNQV9DSEFOX0lTX0FDVElWRV9GTFVTSDsKKworCXVkbWFfdGNoYW5y dF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywKKwkJCSAgIFVETUFfQ0hB Tl9SVF9DVExfRU4gfAorCQkJICAgVURNQV9DSEFOX1JUX0NUTF9URE9XTik7Cit9CisKK3N0YXRp YyBpcnFyZXR1cm5fdCB1ZG1hX3JpbmdfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IGRhdGE7CisJc3RydWN0IHVkbWFfZGVzYyAqZDsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9hZGRyX3QgcGFkZHIgPSAwOworCisJaWYgKHVk bWFfcG9wX2Zyb21fcmluZyh1YywgJnBhZGRyKSB8fCAhcGFkZHIpCisJCXJldHVybiBJUlFfSEFO RExFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworCisJLyog VGVhcmRvd24gY29tcGxldGlvbiBtZXNzYWdlICovCisJaWYgKGNwcGk1X2Rlc2NfaXNfdGRjbShw YWRkcikpIHsKKwkJLyogQ29tcGVuc2F0ZSBvdXIgaW50ZXJuYWwgcG9wL3B1c2ggY291bnRlciAq LworCQl1Yy0+aW5fcmluZ19jbnQrKzsKKworCQljb21wbGV0ZV9hbGwoJnVjLT50ZWFyZG93bl9j b21wbGV0ZWQpOworCisJCWlmICh1Yy0+dGVybWluYXRlZF9kZXNjKSB7CisJCQl1ZG1hX2Rlc2Nf ZnJlZSgmdWMtPnRlcm1pbmF0ZWRfZGVzYy0+dmQpOworCQkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9 IE5VTEw7CisJCX0KKworCQlpZiAoIXVjLT5kZXNjKQorCQkJdWRtYV9zdGFydCh1Yyk7CisKKwkJ aWYgKHVjLT5zdGF0ZSAhPSBVRE1BX0NIQU5fSVNfQUNUSVZFX0ZMVVNIKQorCQkJZ290byBvdXQ7 CisJCWVsc2UgaWYgKHVjLT5kZXNjKQorCQkJcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19w YWRkcih1Yy0+ZGVzYywKKwkJCQkJCQkgICB1Yy0+ZGVzYy0+ZGVzY19pZHgpOworCX0KKworCWQg PSB1ZG1hX3VkbWFfZGVzY19mcm9tX3BhZGRyKHVjLCBwYWRkcik7CisKKwlpZiAoZCkgeworCQlk bWFfYWRkcl90IGRlc2NfcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcihkLAorCQkJ CQkJCQkgICBkLT5kZXNjX2lkeCk7CisJCWlmIChkZXNjX3BhZGRyICE9IHBhZGRyKSB7CisJCQlk ZXZfZXJyKHVjLT51ZC0+ZGV2LCAibm90IG1hdGNoaW5nIGRlc2NyaXB0b3JzIVxuIik7CisJCQln b3RvIG91dDsKKwkJfQorCisJCWlmICh1Yy0+Y3ljbGljKSB7CisJCQkvKiBwdXNoIHRoZSBkZXNj cmlwdG9yIGJhY2sgdG8gdGhlIHJpbmcgKi8KKwkJCWlmIChkID09IHVjLT5kZXNjKSB7CisJCQkJ dWRtYV9jeWNsaWNfcGFja2V0X2VsYXBzZWQodWMpOworCQkJCXZjaGFuX2N5Y2xpY19jYWxsYmFj aygmZC0+dmQpOworCQkJfQorCQl9IGVsc2UgeworCQkJYm9vbCBkZXNjX2RvbmUgPSB0cnVlOwor CisJCQlpZiAoZCA9PSB1Yy0+ZGVzYykgeworCQkJCWRlc2NfZG9uZSA9IHVkbWFfaXNfZGVzY19y ZWFsbHlfZG9uZSh1YywgZCk7CisKKwkJCQlpZiAoZGVzY19kb25lKSB7CisJCQkJCXVjLT5iY250 ICs9IGQtPnJlc2lkdWU7CisJCQkJCXVkbWFfc3RhcnQodWMpOworCQkJCX0gZWxzZSB7CisJCQkJ CXVkbWFfZmx1c2hfdHgodWMpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZCA9PSB1Yy0+dGVybWlu YXRlZF9kZXNjKSB7CisJCQkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJCQl9CisKKwkJ CWlmIChkZXNjX2RvbmUpCisJCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7CisJCX0K Kwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWMtPnZjLmxvY2ssIGZsYWdzKTsK KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHVkbWFfdWRt YV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1ZG1hX2NoYW4g KnVjID0gZGF0YTsKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWMtPnZjLmxvY2ssIGZsYWdzKTsKKwlkID0gdWMtPmRl c2M7CisJaWYgKGQpIHsKKwkJZC0+dHJfaWR4ID0gKGQtPnRyX2lkeCArIDEpICUgZC0+c2dsZW47 CisKKwkJaWYgKHVjLT5jeWNsaWMpIHsKKwkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygmZC0+dmQp OworCQl9IGVsc2UgeworCQkJLyogVE9ETzogZmlndXJlIG91dCB0aGUgcmVhbCBhbW91bnQgb2Yg ZGF0YSAqLworCQkJdWMtPmJjbnQgKz0gZC0+cmVzaWR1ZTsKKwkJCXVkbWFfc3RhcnQodWMpOwor CQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5oIGIvZHJpdmVycy9kbWEv dGkvazMtdWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmY0 MjhmODIzZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5oCkBA IC0wLDAgKzEsMTIwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVk IC0gaHR0cDovL3d3dy50aS5jb20KKyAqLworCisjaWZuZGVmIEszX1VETUFfSF8KKyNkZWZpbmUg SzNfVURNQV9IXworCisjaW5jbHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9wcm90b2NvbC5oPgor CisvKiBHbG9iYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVETUFfUkVWX1JFRwkJCTB4MAorI2Rl ZmluZSBVRE1BX1BFUkZfQ1RMX1JFRwkJMHg0CisjZGVmaW5lIFVETUFfRU1VX0NUTF9SRUcJCTB4 OAorI2RlZmluZSBVRE1BX1BTSUxfVE9fUkVHCQkweDEwCisjZGVmaW5lIFVETUFfVVRDX0NUTF9S RUcJCTB4MWMKKyNkZWZpbmUgVURNQV9DQVBfUkVHKGkpCQkJKDB4MjAgKyAoKGkpICogNCkpCisj ZGVmaW5lIFVETUFfUlhfRkxPV19JRF9GV19PRVNfUkVHCTB4ODAKKyNkZWZpbmUgVURNQV9SWF9G TE9XX0lEX0ZXX1NUQVRVU19SRUcJMHg4OAorCisvKiBUWCBjaGFuIFJUIHJlZ3MgKi8KKyNkZWZp bmUgVURNQV9UQ0hBTl9SVF9DVExfUkVHCQkweDAKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9TV1RS SUdfUkVHCTB4OAorI2RlZmluZSBVRE1BX1RDSEFOX1JUX1NUREFUQV9SRUcJMHg4MAorCisjZGVm aW5lIFVETUFfVENIQU5fUlRfUEVFUl9SRUcoaSkJKDB4MjAwICsgKChpKSAqIDB4NCkpCisjZGVm aW5lIFVETUFfVENIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHCVwKKwlVRE1BX1RDSEFOX1JU X1BFRVJfUkVHKDApCS8qIFBTSS1MOiAweDQwMCAqLworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BF RVJfU1RBVElDX1RSX1pfUkVHCVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJfUkVHKDEpCS8qIFBTSS1M OiAweDQwMSAqLworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BFRVJfQkNOVF9SRUcJCVwKKwlVRE1B X1RDSEFOX1JUX1BFRVJfUkVHKDQpCS8qIFBTSS1MOiAweDQwNCAqLworI2RlZmluZSBVRE1BX1RD SEFOX1JUX1BFRVJfUlRfRU5fUkVHCQlcCisJVURNQV9UQ0hBTl9SVF9QRUVSX1JFRyg4KQkvKiBQ U0ktTDogMHg0MDggKi8KKworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHCQkweDQwMAor I2RlZmluZSBVRE1BX1RDSEFOX1JUX0JDTlRfUkVHCQkweDQwOAorI2RlZmluZSBVRE1BX1RDSEFO X1JUX1NCQ05UX1JFRwkJMHg0MTAKKworLyogUlggY2hhbiBSVCByZWdzICovCisjZGVmaW5lIFVE TUFfUkNIQU5fUlRfQ1RMX1JFRwkJMHgwCisjZGVmaW5lIFVETUFfUkNIQU5fUlRfU1dUUklHX1JF RwkweDgKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9TVERBVEFfUkVHCTB4ODAKKworI2RlZmluZSBV RE1BX1JDSEFOX1JUX1BFRVJfUkVHKGkpCSgweDIwMCArICgoaSkgKiAweDQpKQorI2RlZmluZSBV RE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1hZX1JFRwlcCisJVURNQV9SQ0hBTl9SVF9QRUVS X1JFRygwKQkvKiBQU0ktTDogMHg0MDAgKi8KKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSX1NU QVRJQ19UUl9aX1JFRwlcCisJVURNQV9SQ0hBTl9SVF9QRUVSX1JFRygxKQkvKiBQU0ktTDogMHg0 MDEgKi8KKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSX0JDTlRfUkVHCQlcCisJVURNQV9SQ0hB Tl9SVF9QRUVSX1JFRyg0KQkvKiBQU0ktTDogMHg0MDQgKi8KKyNkZWZpbmUgVURNQV9SQ0hBTl9S VF9QRUVSX1JUX0VOX1JFRwkJXAorCVVETUFfUkNIQU5fUlRfUEVFUl9SRUcoOCkJLyogUFNJLUw6 IDB4NDA4ICovCisKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QQ05UX1JFRwkJMHg0MDAKKyNkZWZp bmUgVURNQV9SQ0hBTl9SVF9CQ05UX1JFRwkJMHg0MDgKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9T QkNOVF9SRUcJCTB4NDEwCisKKy8qIFVETUFfVENIQU5fUlRfQ1RMX1JFRy9VRE1BX1JDSEFOX1JU X0NUTF9SRUcgKi8KKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FTgkJQklUKDMxKQorI2RlZmlu ZSBVRE1BX0NIQU5fUlRfQ1RMX1RET1dOCQlCSVQoMzApCisjZGVmaW5lIFVETUFfQ0hBTl9SVF9D VExfUEFVU0UJCUJJVCgyOSkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9GVERPV04JCUJJVCgy OCkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FUlJPUgkJQklUKDApCisKKy8qIFVETUFfVENI QU5fUlRfUEVFUl9SVF9FTl9SRUcvVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRyAoUFNJLUw6 IDB4NDA4KSAqLworI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFCQlCSVQoMzEpCisjZGVm aW5lIFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTglCSVQoMzApCisjZGVmaW5lIFVETUFfUEVFUl9S VF9FTl9QQVVTRQkJQklUKDI5KQorI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRkxVU0gJCUJJVCgy OCkKKyNkZWZpbmUgVURNQV9QRUVSX1JUX0VOX0lETEUJCUJJVCgxKQorCisvKgorICogVURNQV9U Q0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcgLworICogVURNQV9SQ0hBTl9SVF9QRUVSX1NU QVRJQ19UUl9YWV9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX01BU0sJCUdFTk1B U0soMjYsIDI0KQorI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX1NISUZUCQkoMjQpCisjZGVmaW5l IFBETUFfU1RBVElDX1RSX1lfTUFTSwkJR0VOTUFTSygxMSwgMCkKKyNkZWZpbmUgUERNQV9TVEFU SUNfVFJfWV9TSElGVAkJKDApCisKKyNkZWZpbmUgUERNQV9TVEFUSUNfVFJfWSh4KQlcCisJKCgo eCkgPDwgUERNQV9TVEFUSUNfVFJfWV9TSElGVCkgJiBQRE1BX1NUQVRJQ19UUl9ZX01BU0spCisj ZGVmaW5lIFBETUFfU1RBVElDX1RSX1goeCkJXAorCSgoKHgpIDw8IFBETUFfU1RBVElDX1RSX1hf U0hJRlQpICYgUERNQV9TVEFUSUNfVFJfWF9NQVNLKQorCisjZGVmaW5lIFBETUFfU1RBVElDX1RS X1hZX0FDQzMyCQlCSVQoMzApCisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1hZX0JVUlNUCQlCSVQo MzEpCisKKy8qCisgKiBVRE1BX1RDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHIC8KKyAqIFVE TUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWl9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NUQVRJ Q19UUl9aKHgsIG1hc2spCSgoeCkgJiAobWFzaykpCisKK3N0cnVjdCB1ZG1hX2RldjsKK3N0cnVj dCB1ZG1hX3RjaGFuOworc3RydWN0IHVkbWFfcmNoYW47CitzdHJ1Y3QgdWRtYV9yZmxvdzsKKwor ZW51bSB1ZG1hX3JtX3JhbmdlIHsKKwlSTV9SQU5HRV9UQ0hBTiA9IDAsCisJUk1fUkFOR0VfUkNI QU4sCisJUk1fUkFOR0VfUkZMT1csCisJUk1fUkFOR0VfTEFTVCwKK307CisKK3N0cnVjdCB1ZG1h X3Rpc2NpX3JtIHsKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7CisJY29uc3Qg c3RydWN0IHRpX3NjaV9ybV91ZG1hcF9vcHMgKnRpc2NpX3VkbWFwX29wczsKKwl1MzIgIHRpc2Np X2Rldl9pZDsKKworCS8qIHRpc2NpIGluZm9ybWF0aW9uIGZvciBQU0ktTCB0aHJlYWQgcGFpcmlu Zy91bnBhaXJpbmcgKi8KKwljb25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3BzaWxfb3BzICp0aXNjaV9w c2lsX29wczsKKwl1MzIgIHRpc2NpX25hdnNzX2Rldl9pZDsKKworCXN0cnVjdCB0aV9zY2lfcmVz b3VyY2UgKnJtX3Jhbmdlc1tSTV9SQU5HRV9MQVNUXTsKK307CisKKyNlbmRpZiAvKiBLM19VRE1B X0hfICovCi0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFu a2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQu IEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=