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,URIBL_BLOCKED,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 AD620CA9ECF for ; Fri, 1 Nov 2019 08:46:16 +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 6E643208E3 for ; Fri, 1 Nov 2019 08:46:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SbNEQjK8"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="UB2uZIXC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6E643208E3 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=pgq4hQjf/H8KojAKienxbAABlLLO6wyrSfIhoNiSFfk=; b=SbNEQjK87CjURN PfOommEJIvLvRzeVELAhJ7aZbKl7KRSA6DncsTXGjAnD8qDkJuxiCYpZQIAAGMKEx+Jd0YxT20icv /LlCFsOoB033p0pEjuq92n+gK5HNSbByqZqz7p4rxQa0e7gRiWXVR7MAQGCN4dmpOZpRohnDbOgP9 ClRiZ0DBfyVDJx0+EcMuvpRiDvA0CxeOPbyL/w/Vev4C40H2YAkzxyGkh1134rS5hpuh8lDQtVX6a u5MR0s77aeDuNHo7Lpm2YVsWRD+5Z7sjhCVcGcveJe4zCvqFgQdNh8DpnP/OjjhRXTNBtzgw8e+OQ gThCRZGehzZ48lCeFIHw==; 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 1iQSZT-00062U-Dv; Fri, 01 Nov 2019 08:46:15 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iQSUX-0000Un-2Q for linux-arm-kernel@lists.infradead.org; Fri, 01 Nov 2019 08:41:19 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA18f4bM130140; Fri, 1 Nov 2019 03:41:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572597664; bh=j5U1rghYdGo5PuemNPmonbqzpAre7hWaPaRgT7t4o3I=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=UB2uZIXCNtFs3z7IEqU8nIyWwA7w9QpPf7pnWb6trHv8Df+p7gn9f3hyAZZbqWMwz ZecJHeb5KLv6j0w2dBc/ac0PGjbBconAGLKGP+GH1XF/O/cZEytbsMcoE5yvDkv5/S 8RzrzCxe+MULgwu702W54xkd/itP36200js+MueM= Received: from DLEE102.ent.ti.com (dlee102.ent.ti.com [157.170.170.32]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA18f4Na122463; Fri, 1 Nov 2019 03:41:04 -0500 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 1 Nov 2019 03:40:50 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE113.ent.ti.com (157.170.170.24) 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; Fri, 1 Nov 2019 03:40:50 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA18eP8i036903; Fri, 1 Nov 2019 03:41:00 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v4 09/15] dmaengine: ti: New driver for K3 UDMA - split#1: defines, structs, io func Date: Fri, 1 Nov 2019 10:41:29 +0200 Message-ID: <20191101084135.14811-10-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191101084135.14811-1-peter.ujfalusi@ti.com> References: <20191101084135.14811-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-20191101_014109_260475_BE262395 X-CRM114-Status: GOOD ( 19.48 ) 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 QHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCAxMDUxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggfCAg MTIwICsrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDExNzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hL3RpL2szLXVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVk bWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjVlZjcxNWNhNzNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hL3RpL2szLXVkbWEuYwpAQCAtMCwwICsxLDEwNTEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu 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 X1JGTE9XUwkJMTAyNAorI2RlZmluZSBLM19VRE1BX0RFRkFVTFRfUklOR19TSVpFCTE2CisKK3N0 cnVjdCB1ZG1hX2NoYW47CisKK2VudW0gdWRtYV9tbXIgeworCU1NUl9HQ0ZHID0gMCwKKwlNTVJf UkNIQU5SVCwKKwlNTVJfVENIQU5SVCwKKwlNTVJfTEFTVCwKK307CisKK3N0YXRpYyBjb25zdCBj aGFyICogY29uc3QgbW1yX25hbWVzW10gPSB7ICJnY2ZnIiwgInJjaGFucnQiLCAidGNoYW5ydCIg fTsKKworc3RydWN0IHVkbWFfdGNoYW4geworCXZvaWQgX19pb21lbSAqcmVnX3J0OworCisJaW50 IGlkOworCXN0cnVjdCBrM19yaW5nICp0X3Jpbmc7IC8qIFRyYW5zbWl0IHJpbmcgKi8KKwlzdHJ1 Y3QgazNfcmluZyAqdGNfcmluZzsgLyogVHJhbnNtaXQgQ29tcGxldGlvbiByaW5nICovCit9Owor CitzdHJ1Y3QgdWRtYV9yY2hhbiB7CisJdm9pZCBfX2lvbWVtICpyZWdfcnQ7CisKKwlpbnQgaWQ7 CisJc3RydWN0IGszX3JpbmcgKmZkX3Jpbmc7IC8qIEZyZWUgRGVzY3JpcHRvciByaW5nICovCisJ c3RydWN0IGszX3JpbmcgKnJfcmluZzsgLyogUmVjZWl2ZSByaW5nKi8KK307CisKK3N0cnVjdCB1 ZG1hX3JmbG93IHsKKwl2b2lkIF9faW9tZW0gKnJlZ19yZmxvdzsKKworCWludCBpZDsKK307CisK K3N0cnVjdCB1ZG1hX21hdGNoX2RhdGEgeworCXUzMiBwc2lsX2Jhc2U7CisJYm9vbCBlbmFibGVf bWVtY3B5X3N1cHBvcnQ7CisJYm9vbCBoYXZlX2FjYzMyOworCWJvb2wgaGF2ZV9idXJzdDsKKwl1 MzIgc3RhdGljdHJfel9tYXNrOworCXUzMiByY2hhbl9vZXNfb2Zmc2V0OworCisJdTggdHBsX2xl dmVsczsKKwl1MzIgbGV2ZWxfc3RhcnRfaWR4W107Cit9OworCitzdHJ1Y3QgdWRtYV9kZXYgewor CXN0cnVjdCBkbWFfZGV2aWNlIGRkZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19p b21lbSAqbW1yc1tNTVJfTEFTVF07CisJY29uc3Qgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSAqbWF0 Y2hfZGF0YTsKKworCXNpemVfdCBkZXNjX2FsaWduOyAvKiBhbGlnbm1lbnQgdG8gdXNlIGZvciBk ZXNjcmlwdG9ycyAqLworCisJc3RydWN0IHVkbWFfdGlzY2lfcm0gdGlzY2lfcm07CisKKwlzdHJ1 Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3Jr OworCXN0cnVjdCBsaXN0X2hlYWQgZGVzY190b19wdXJnZTsKKwlzcGlubG9ja190IGxvY2s7CisK KwlpbnQgdGNoYW5fY250OworCWludCBlY2hhbl9jbnQ7CisJaW50IHJjaGFuX2NudDsKKwlpbnQg cmZsb3dfY250OworCXVuc2lnbmVkIGxvbmcgKnRjaGFuX21hcDsKKwl1bnNpZ25lZCBsb25nICpy Y2hhbl9tYXA7CisJdW5zaWduZWQgbG9uZyAqcmZsb3dfZ3BfbWFwOworCXVuc2lnbmVkIGxvbmcg KnJmbG93X2dwX21hcF9hbGxvY2F0ZWQ7CisJdW5zaWduZWQgbG9uZyAqcmZsb3dfaW5fdXNlOwor CisJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuczsKKwlzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW5z OworCXN0cnVjdCB1ZG1hX3JmbG93ICpyZmxvd3M7CisKKwlzdHJ1Y3QgdWRtYV9jaGFuICpjaGFu bmVsczsKKwl1MzIgcHNpbF9iYXNlOworfTsKKworc3RydWN0IHVkbWFfaHdkZXNjIHsKKwlzaXpl X3QgY3BwaTVfZGVzY19zaXplOworCXZvaWQgKmNwcGk1X2Rlc2NfdmFkZHI7CisJZG1hX2FkZHJf dCBjcHBpNV9kZXNjX3BhZGRyOworCisJLyogVFIgZGVzY3JpcHRvciBpbnRlcm5hbCBwb2ludGVy cyAqLworCXZvaWQgKnRyX3JlcV9iYXNlOworCXN0cnVjdCBjcHBpNV90cl9yZXNwX3QgKnRyX3Jl c3BfYmFzZTsKK307CisKK3N0cnVjdCB1ZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0X2RtYV9kZXNj IHZkOworCisJYm9vbCB0ZXJtaW5hdGVkOworCisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9u IGRpcjsKKworCXN0cnVjdCB1ZG1hX3N0YXRpY190ciBzdGF0aWNfdHI7CisJdTMyIHJlc2lkdWU7 CisKKwl1bnNpZ25lZCBpbnQgc2dsZW47CisJdW5zaWduZWQgaW50IGRlc2NfaWR4OyAvKiBPbmx5 IHVzZWQgZm9yIGN5Y2xpYyBpbiBwYWNrZXQgbW9kZSAqLworCXVuc2lnbmVkIGludCB0cl9pZHg7 CisKKwl1MzIgbWV0YWRhdGFfc2l6ZTsKKwl2b2lkICptZXRhZGF0YTsgLyogcG9pbnRlciB0byBw cm92aWRlZCBtZXRhZGF0YSBidWZmZXIgKEVQSVAsIFBTZGF0YSkgKi8KKworCXVuc2lnbmVkIGlu dCBod2Rlc2NfY291bnQ7CisJc3RydWN0IHVkbWFfaHdkZXNjIGh3ZGVzY1swXTsKK307CisKK2Vu dW0gdWRtYV9jaGFuX3N0YXRlIHsKKwlVRE1BX0NIQU5fSVNfSURMRSA9IDAsIC8qIG5vdCBhY3Rp dmUsIG5vIHRlYXJkb3duIGlzIGluIHByb2dyZXNzICovCisJVURNQV9DSEFOX0lTX0FDVElWRSwg LyogTm9ybWFsIG9wZXJhdGlvbiAqLworCVVETUFfQ0hBTl9JU19BQ1RJVkVfRkxVU0gsIC8qIEZs dXNoaW5nIGZvciBkZWxheWVkIHR4ICovCisJVURNQV9DSEFOX0lTX1RFUk1JTkFUSU5HLCAvKiBj aGFubmVsIGlzIGJlaW5nIHRlcm1pbmF0ZWQgKi8KK307CisKK3N0cnVjdCB1ZG1hX2NoYW4gewor CXN0cnVjdCB2aXJ0X2RtYV9jaGFuIHZjOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnCWNmZzsK KwlzdHJ1Y3QgdWRtYV9kZXYgKnVkOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmRlc2M7CisJc3RydWN0 IHVkbWFfZGVzYyAqdGVybWluYXRlZF9kZXNjOworCXN0cnVjdCB1ZG1hX3N0YXRpY190ciBzdGF0 aWNfdHI7CisJY2hhciAqbmFtZTsKKworCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbjsKKwlzdHJ1 Y3QgdWRtYV9yY2hhbiAqcmNoYW47CisJc3RydWN0IHVkbWFfcmZsb3cgKnJmbG93OworCisJYm9v bCBwc2lsX3BhaXJlZDsKKworCWludCBpcnFfbnVtX3Jpbmc7CisJaW50IGlycV9udW1fdWRtYTsK KworCWJvb2wgY3ljbGljOworCWJvb2wgcGF1c2VkOworCisJZW51bSB1ZG1hX2NoYW5fc3RhdGUg c3RhdGU7CisJc3RydWN0IGNvbXBsZXRpb24gdGVhcmRvd25fY29tcGxldGVkOworCisJdTMyIGJj bnQ7IC8qIG51bWJlciBvZiBieXRlcyBjb21wbGV0ZWQgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBj aGFubmVsICovCisJdTMyIGluX3JpbmdfY250OyAvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4g ZmxpZ2h0ICovCisKKwlib29sIHBrdF9tb2RlOyAvKiBUUiBvciBwYWNrZXQgKi8KKwlib29sIG5l ZWRzX2VwaWI7IC8qIEVQSUIgaXMgbmVlZGVkIGZvciB0aGUgY29tbXVuaWNhdGlvbiBvciBub3Qg Ki8KKwl1MzIgcHNkX3NpemU7IC8qIHNpemUgb2YgUHJvdG9jb2wgU3BlY2lmaWMgRGF0YSAqLwor CXUzMiBtZXRhZGF0YV9zaXplOyAvKiAobmVlZHNfZXBpYiA/IDE2OjApICsgcHNkX3NpemUgKi8K Kwl1MzIgaGRlc2Nfc2l6ZTsgLyogU2l6ZSBvZiBhIHBhY2tldCBkZXNjcmlwdG9yIGluIHBhY2tl dCBtb2RlICovCisJYm9vbCBub3RkcGt0OyAvKiBTdXBwcmVzcyBzZW5kaW5nIFREQyBwYWNrZXQg Ki8KKwlpbnQgcmVtb3RlX3RocmVhZF9pZDsKKwl1MzIgc3JjX3RocmVhZDsKKwl1MzIgZHN0X3Ro cmVhZDsKKwllbnVtIHBzaWxfZW5kcG9pbnRfdHlwZSBlcF90eXBlOworCWJvb2wgZW5hYmxlX2Fj YzMyOworCWJvb2wgZW5hYmxlX2J1cnN0OworCWVudW0gdWRtYV90cF9sZXZlbCBjaGFubmVsX3Rw bDsgLyogQ2hhbm5lbCBUaHJvdWdocHV0IExldmVsICovCisKKwkvKiBkbWFwb29sIGZvciBwYWNr ZXQgbW9kZSBkZXNjcmlwdG9ycyAqLworCWJvb2wgdXNlX2RtYV9wb29sOworCXN0cnVjdCBkbWFf cG9vbCAqaGRlc2NfcG9vbDsKKworCXUzMiBpZDsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rp b24gZGlyOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9kZXYgKnRvX3VkbWFfZGV2 KHN0cnVjdCBkbWFfZGV2aWNlICpkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0 IHVkbWFfZGV2LCBkZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9jaGFuICp0 b191ZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjKQoreworCXJldHVybiBjb250YWluZXJfb2Yo Yywgc3RydWN0IHVkbWFfY2hhbiwgdmMuY2hhbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IHVkbWFfZGVzYyAqdG9fdWRtYV9kZXNjKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHQsIHN0cnVjdCB1ZG1hX2Rlc2MsIHZkLnR4KTsK K30KKworLyogR2VuZXJpYyByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCitzdGF0aWMgaW5s aW5lIHUzMiB1ZG1hX3JlYWQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVnKQoreworCXJldHVy biByZWFkbChiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkbWFfd3JpdGUo dm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGJh c2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV91cGRhdGVfYml0cyh2b2lk IF9faW9tZW0gKmJhc2UsIGludCByZWcsCisJCQkJICAgIHUzMiBtYXNrLCB1MzIgdmFsKQorewor CXUzMiB0bXAsIG9yaWc7CisKKwlvcmlnID0gcmVhZGwoYmFzZSArIHJlZyk7CisJdG1wID0gb3Jp ZyAmIH5tYXNrOworCXRtcCB8PSAodmFsICYgbWFzayk7CisKKwlpZiAodG1wICE9IG9yaWcpCisJ CXdyaXRlbCh0bXAsIGJhc2UgKyByZWcpOworfQorCisvKiBUQ0hBTlJUICovCitzdGF0aWMgaW5s aW5lIHUzMiB1ZG1hX3RjaGFucnRfcmVhZChzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4sIGludCBy ZWcpCit7CisJaWYgKCF0Y2hhbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHVkbWFfcmVhZCh0Y2hh bi0+cmVnX3J0LCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV90Y2hhbnJ0X3dy aXRlKHN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbiwgaW50IHJlZywKKwkJCQkgICAgICB1MzIgdmFs KQoreworCWlmICghdGNoYW4pCisJCXJldHVybjsKKwl1ZG1hX3dyaXRlKHRjaGFuLT5yZWdfcnQs IHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkbWFfdGNoYW5ydF91cGRhdGVf Yml0cyhzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4sIGludCByZWcsCisJCQkJCSAgICB1MzIgbWFz aywgdTMyIHZhbCkKK3sKKwlpZiAoIXRjaGFuKQorCQlyZXR1cm47CisJdWRtYV91cGRhdGVfYml0 cyh0Y2hhbi0+cmVnX3J0LCByZWcsIG1hc2ssIHZhbCk7Cit9CisKKy8qIFJDSEFOUlQgKi8KK3N0 YXRpYyBpbmxpbmUgdTMyIHVkbWFfcmNoYW5ydF9yZWFkKHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hh biwgaW50IHJlZykKK3sKKwlpZiAoIXJjaGFuKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdWRtYV9y ZWFkKHJjaGFuLT5yZWdfcnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZG1hX3Jj aGFucnRfd3JpdGUoc3RydWN0IHVkbWFfcmNoYW4gKnJjaGFuLCBpbnQgcmVnLAorCQkJCSAgICAg IHUzMiB2YWwpCit7CisJaWYgKCFyY2hhbikKKwkJcmV0dXJuOworCXVkbWFfd3JpdGUocmNoYW4t PnJlZ19ydCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9yY2hhbnJ0 X3VwZGF0ZV9iaXRzKHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiwgaW50IHJlZywKKwkJCQkJICAg IHUzMiBtYXNrLCB1MzIgdmFsKQoreworCWlmICghcmNoYW4pCisJCXJldHVybjsKKwl1ZG1hX3Vw ZGF0ZV9iaXRzKHJjaGFuLT5yZWdfcnQsIHJlZywgbWFzaywgdmFsKTsKK30KKworc3RhdGljIGlu dCBuYXZzc19wc2lsX3BhaXIoc3RydWN0IHVkbWFfZGV2ICp1ZCwgdTMyIHNyY190aHJlYWQsIHUz MiBkc3RfdGhyZWFkKQoreworCXN0cnVjdCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+ dGlzY2lfcm07CisKKwlkc3RfdGhyZWFkIHw9IEszX1BTSUxfRFNUX1RIUkVBRF9JRF9PRkZTRVQ7 CisJcmV0dXJuIHRpc2NpX3JtLT50aXNjaV9wc2lsX29wcy0+cGFpcih0aXNjaV9ybS0+dGlzY2ks CisJCQkJCSAgICAgIHRpc2NpX3JtLT50aXNjaV9uYXZzc19kZXZfaWQsCisJCQkJCSAgICAgIHNy Y190aHJlYWQsIGRzdF90aHJlYWQpOworfQorCitzdGF0aWMgaW50IG5hdnNzX3BzaWxfdW5wYWly KHN0cnVjdCB1ZG1hX2RldiAqdWQsIHUzMiBzcmNfdGhyZWFkLAorCQkJICAgICB1MzIgZHN0X3Ro cmVhZCkKK3sKKwlzdHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3Jt OworCisJZHN0X3RocmVhZCB8PSBLM19QU0lMX0RTVF9USFJFQURfSURfT0ZGU0VUOworCXJldHVy biB0aXNjaV9ybS0+dGlzY2lfcHNpbF9vcHMtPnVucGFpcih0aXNjaV9ybS0+dGlzY2ksCisJCQkJ CQl0aXNjaV9ybS0+dGlzY2lfbmF2c3NfZGV2X2lkLAorCQkJCQkJc3JjX3RocmVhZCwgZHN0X3Ro cmVhZCk7Cit9CisKK3N0YXRpYyBjaGFyICp1ZG1hX2dldF9kaXJfdGV4dChlbnVtIGRtYV90cmFu c2Zlcl9kaXJlY3Rpb24gZGlyKQoreworCXN3aXRjaCAoZGlyKSB7CisJY2FzZSBETUFfREVWX1RP X01FTToKKwkJcmV0dXJuICJERVZfVE9fTUVNIjsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQly ZXR1cm4gIk1FTV9UT19ERVYiOworCWNhc2UgRE1BX01FTV9UT19NRU06CisJCXJldHVybiAiTUVN X1RPX01FTSI7CisJY2FzZSBETUFfREVWX1RPX0RFVjoKKwkJcmV0dXJuICJERVZfVE9fREVWIjsK KwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gImludmFsaWQiOworfQorCitzdGF0 aWMgdm9pZCB1ZG1hX3Jlc2V0X3VjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXVjLT5z dGF0ZSA9IFVETUFfQ0hBTl9JU19JRExFOworCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJ dWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCXVjLT5wa3RfbW9kZSA9IGZhbHNlOworCXVjLT5l cF90eXBlID0gUFNJTF9FUF9OQVRJVkU7CisJdWMtPmVuYWJsZV9hY2MzMiA9IDA7CisJdWMtPmVu YWJsZV9idXJzdCA9IDA7CisJdWMtPmNoYW5uZWxfdHBsID0gMDsKKwl1Yy0+cHNkX3NpemUgPSAw OworCXVjLT5tZXRhZGF0YV9zaXplID0gMDsKKwl1Yy0+aGRlc2Nfc2l6ZSA9IDA7CisJdWMtPm5v dGRwa3QgPSAwOworfQorCitzdGF0aWMgdm9pZCB1ZG1hX2R1bXBfY2hhbl9zdGRhdGEoc3RydWN0 IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdWMtPnVkLT5kZXY7CisJ dTMyIG9mZnNldDsKKwlpbnQgaTsKKworCWlmICh1Yy0+ZGlyID09IERNQV9NRU1fVE9fREVWIHx8 IHVjLT5kaXIgPT0gRE1BX01FTV9UT19NRU0pIHsKKwkJZGV2X2RiZyhkZXYsICJUQ0hBTiBTdGF0 ZSBkYXRhOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQlvZmZzZXQgPSBV RE1BX1RDSEFOX1JUX1NUREFUQV9SRUcgKyBpICogNDsKKwkJCWRldl9kYmcoZGV2LCAiVFJUX1NU REFUQVslMDJkXTogMHglMDh4XG4iLCBpLAorCQkJCXVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hh biwgb2Zmc2V0KSk7CisJCX0KKwl9CisKKwlpZiAodWMtPmRpciA9PSBETUFfREVWX1RPX01FTSB8 fCB1Yy0+ZGlyID09IERNQV9NRU1fVE9fTUVNKSB7CisJCWRldl9kYmcoZGV2LCAiUkNIQU4gU3Rh dGUgZGF0YTpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJb2Zmc2V0ID0g VURNQV9SQ0hBTl9SVF9TVERBVEFfUkVHICsgaSAqIDQ7CisJCQlkZXZfZGJnKGRldiwgIlJSVF9T VERBVEFbJTAyZF06IDB4JTA4eFxuIiwgaSwKKwkJCQl1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNo YW4sIG9mZnNldCkpOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgdWRt YV9jdXJyX2NwcGk1X2Rlc2NfcGFkZHIoc3RydWN0IHVkbWFfZGVzYyAqZCwKKwkJCQkJCSAgICBp bnQgaWR4KQoreworCXJldHVybiBkLT5od2Rlc2NbaWR4XS5jcHBpNV9kZXNjX3BhZGRyOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgKnVkbWFfY3Vycl9jcHBpNV9kZXNjX3ZhZGRyKHN0cnVjdCB1 ZG1hX2Rlc2MgKmQsIGludCBpZHgpCit7CisJcmV0dXJuIGQtPmh3ZGVzY1tpZHhdLmNwcGk1X2Rl c2NfdmFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9kZXNjICp1ZG1hX3VkbWFfZGVzY19m cm9tX3BhZGRyKHN0cnVjdCB1ZG1hX2NoYW4gKnVjLAorCQkJCQkJICAgZG1hX2FkZHJfdCBwYWRk cikKK3sKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkID0gdWMtPnRlcm1pbmF0ZWRfZGVzYzsKKworCWlm IChkKSB7CisJCWRtYV9hZGRyX3QgZGVzY19wYWRkciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3Bh ZGRyKGQsCisJCQkJCQkJCSAgIGQtPmRlc2NfaWR4KTsKKworCQlpZiAoZGVzY19wYWRkciAhPSBw YWRkcikKKwkJCWQgPSBOVUxMOworCX0KKworCWlmICghZCkgeworCQlkID0gdWMtPmRlc2M7CisJ CWlmIChkKSB7CisJCQlkbWFfYWRkcl90IGRlc2NfcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVz Y19wYWRkcihkLAorCQkJCQkJCQlkLT5kZXNjX2lkeCk7CisKKwkJCWlmIChkZXNjX3BhZGRyICE9 IHBhZGRyKQorCQkJCWQgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIGQ7Cit9CisKK3N0YXRp YyB2b2lkIHVkbWFfZnJlZV9od2Rlc2Moc3RydWN0IHVkbWFfY2hhbiAqdWMsIHN0cnVjdCB1ZG1h X2Rlc2MgKmQpCit7CisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJaW50IGk7CisKKwkJZm9y IChpID0gMDsgaSA8IGQtPmh3ZGVzY19jb3VudDsgaSsrKSB7CisJCQlpZiAoIWQtPmh3ZGVzY1tp XS5jcHBpNV9kZXNjX3ZhZGRyKQorCQkJCWNvbnRpbnVlOworCisJCQlkbWFfcG9vbF9mcmVlKHVj LT5oZGVzY19wb29sLAorCQkJCSAgICAgIGQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3ZhZGRyLAor CQkJCSAgICAgIGQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3BhZGRyKTsKKworCQkJZC0+aHdkZXNj W2ldLmNwcGk1X2Rlc2NfdmFkZHIgPSBOVUxMOworCQl9CisJfSBlbHNlIGlmIChkLT5od2Rlc2Nb MF0uY3BwaTVfZGVzY192YWRkcikgeworCQlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOwor CisJCWRtYV9mcmVlX2NvaGVyZW50KHVkLT5kZXYsIGQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3Np emUsCisJCQkJICBkLT5od2Rlc2NbMF0uY3BwaTVfZGVzY192YWRkciwKKwkJCQkgIGQtPmh3ZGVz Y1swXS5jcHBpNV9kZXNjX3BhZGRyKTsKKworCQlkLT5od2Rlc2NbMF0uY3BwaTVfZGVzY192YWRk ciA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZG1hX3B1cmdlX2Rlc2Nfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IGNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKnVkKSwgcHVyZ2Vfd29yayk7CisJc3RydWN0IHZpcnRfZG1hX2Rl c2MgKnZkLCAqX3ZkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfdGFp bF9pbml0KCZ1ZC0+ZGVzY190b19wdXJnZSwgJmhlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnVkLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmQsIF92 ZCwgJmhlYWQsIG5vZGUpIHsKKwkJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1hX2NoYW4o dmQtPnR4LmNoYW4pOworCQlzdHJ1Y3QgdWRtYV9kZXNjICpkID0gdG9fdWRtYV9kZXNjKCZ2ZC0+ dHgpOworCisJCXVkbWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQlsaXN0X2RlbCgmdmQtPm5vZGUp OworCQlrZnJlZShkKTsKKwl9CisKKwkvKiBJZiBtb3JlIHRvIHB1cmdlLCBzY2hlZHVsZSB0aGUg d29yayBhZ2FpbiAqLworCWlmICghbGlzdF9lbXB0eSgmdWQtPmRlc2NfdG9fcHVyZ2UpKQorCQlz Y2hlZHVsZV93b3JrKCZ1ZC0+cHVyZ2Vfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfZGVz Y19mcmVlKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVk ID0gdG9fdWRtYV9kZXYodmQtPnR4LmNoYW4tPmRldmljZSk7CisJc3RydWN0IHVkbWFfY2hhbiAq dWMgPSB0b191ZG1hX2NoYW4odmQtPnR4LmNoYW4pOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQgPSB0 b191ZG1hX2Rlc2MoJnZkLT50eCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1Yy0+ dGVybWluYXRlZF9kZXNjID09IGQpCisJCXVjLT50ZXJtaW5hdGVkX2Rlc2MgPSBOVUxMOworCisJ aWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1YywgZCk7CisJCWtm cmVlKGQpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkLT5sb2NrLCBm bGFncyk7CisJbGlzdF9hZGRfdGFpbCgmdmQtPm5vZGUsICZ1ZC0+ZGVzY190b19wdXJnZSk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWQtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dv cmsoJnVkLT5wdXJnZV93b3JrKTsKK30KKworc3RhdGljIGJvb2wgdWRtYV9pc19jaGFuX3J1bm5p bmcoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJdTMyIHRydF9jdGwgPSAwOworCXUzMiBycnRf Y3RsID0gMDsKKworCWlmICh1Yy0+dGNoYW4pCisJCXRydF9jdGwgPSB1ZG1hX3RjaGFucnRfcmVh ZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRyk7CisJaWYgKHVjLT5yY2hhbikKKwkJ cnJ0X2N0bCA9IHVkbWFfcmNoYW5ydF9yZWFkKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExf UkVHKTsKKworCWlmICh0cnRfY3RsICYgVURNQV9DSEFOX1JUX0NUTF9FTiB8fCBycnRfY3RsICYg VURNQV9DSEFOX1JUX0NUTF9FTikKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKK3N0YXRpYyB2b2lkIHVkbWFfc3luY19mb3JfZGV2aWNlKHN0cnVjdCB1ZG1hX2NoYW4gKnVj LCBpbnQgaWR4KQoreworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQgPSB1Yy0+ZGVzYzsKKworCWlmICh1 Yy0+Y3ljbGljICYmIHVjLT5wa3RfbW9kZSkgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2Rldmlj ZSh1Yy0+dWQtPmRldiwKKwkJCQkJICAgZC0+aHdkZXNjW2lkeF0uY3BwaTVfZGVzY19wYWRkciwK KwkJCQkJICAgZC0+aHdkZXNjW2lkeF0uY3BwaTVfZGVzY19zaXplLAorCQkJCQkgICBETUFfVE9f REVWSUNFKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZC0+aHdk ZXNjX2NvdW50OyBpKyspIHsKKwkJCWlmICghZC0+aHdkZXNjW2ldLmNwcGk1X2Rlc2NfdmFkZHIp CisJCQkJY29udGludWU7CisKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVjLT51ZC0+ ZGV2LAorCQkJCQkJZC0+aHdkZXNjW2ldLmNwcGk1X2Rlc2NfcGFkZHIsCisJCQkJCQlkLT5od2Rl c2NbaV0uY3BwaTVfZGVzY19zaXplLAorCQkJCQkJRE1BX1RPX0RFVklDRSk7CisJCX0KKwl9Cit9 CisKK3N0YXRpYyBpbnQgdWRtYV9wdXNoX3RvX3Jpbmcoc3RydWN0IHVkbWFfY2hhbiAqdWMsIGlu dCBpZHgpCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHVjLT5kZXNjOworCisJc3RydWN0IGsz X3JpbmcgKnJpbmcgPSBOVUxMOworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoICh1Yy0+ ZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJcmluZyA9IHVjLT5yY2hhbi0+ZmRfcmlu ZzsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwljYXNlIERNQV9NRU1fVE9fTUVN OgorCQlyaW5nID0gdWMtPnRjaGFuLT50X3Jpbmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJy ZWFrOworCX0KKworCWlmIChyaW5nKSB7CisJCWRtYV9hZGRyX3QgZGVzY19hZGRyID0gdWRtYV9j dXJyX2NwcGk1X2Rlc2NfcGFkZHIoZCwgaWR4KTsKKworCQl3bWIoKTsgLyogRW5zdXJlIHRoYXQg d3JpdGVzIGFyZSBub3QgbW92ZWQgb3ZlciB0aGlzIHBvaW50ICovCisJCXVkbWFfc3luY19mb3Jf ZGV2aWNlKHVjLCBpZHgpOworCQlyZXQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaChyaW5nLCAmZGVz Y19hZGRyKTsKKwkJdWMtPmluX3JpbmdfY250Kys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB1ZG1hX3BvcF9mcm9tX3Jpbmcoc3RydWN0IHVkbWFfY2hhbiAqdWMsIGRtYV9h ZGRyX3QgKmFkZHIpCit7CisJc3RydWN0IGszX3JpbmcgKnJpbmcgPSBOVUxMOworCWludCByZXQg PSAtRU5PRU5UOworCisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToK KwkJcmluZyA9IHVjLT5yY2hhbi0+cl9yaW5nOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9f REVWOgorCWNhc2UgRE1BX01FTV9UT19NRU06CisJCXJpbmcgPSB1Yy0+dGNoYW4tPnRjX3Jpbmc7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChyaW5nICYmIGszX3Jp bmdhY2NfcmluZ19nZXRfb2NjKHJpbmcpKSB7CisJCXN0cnVjdCB1ZG1hX2Rlc2MgKmQgPSBOVUxM OworCisJCXJldCA9IGszX3JpbmdhY2NfcmluZ19wb3AocmluZywgYWRkcik7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCisJCS8qIFRlYXJkb3duIGNvbXBsZXRpb24gKi8KKwkJaWYgKGNw cGk1X2Rlc2NfaXNfdGRjbSgqYWRkcikpCisJCQlyZXR1cm4gcmV0OworCisJCWQgPSB1ZG1hX3Vk bWFfZGVzY19mcm9tX3BhZGRyKHVjLCAqYWRkcik7CisKKwkJaWYgKGQpCisJCQlkbWFfc3luY19z aW5nbGVfZm9yX2NwdSh1Yy0+dWQtPmRldiwgKmFkZHIsCisJCQkJCQlkLT5od2Rlc2NbMF0uY3Bw aTVfZGVzY19zaXplLAorCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcm1iKCk7IC8qIEVuc3Vy ZSB0aGF0IHJlYWRzIGFyZSBub3QgbW92ZWQgYmVmb3JlIHRoaXMgcG9pbnQgKi8KKworCQlpZiAo IXJldCkKKwkJCXVjLT5pbl9yaW5nX2NudC0tOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIHVkbWFfcmVzZXRfcmluZ3Moc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3Ry dWN0IGszX3JpbmcgKnJpbmcxID0gTlVMTDsKKwlzdHJ1Y3QgazNfcmluZyAqcmluZzIgPSBOVUxM OworCisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJaWYgKHVj LT5yY2hhbikgeworCQkJcmluZzEgPSB1Yy0+cmNoYW4tPmZkX3Jpbmc7CisJCQlyaW5nMiA9IHVj LT5yY2hhbi0+cl9yaW5nOworCQl9CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJ Y2FzZSBETUFfTUVNX1RPX01FTToKKwkJaWYgKHVjLT50Y2hhbikgeworCQkJcmluZzEgPSB1Yy0+ dGNoYW4tPnRfcmluZzsKKwkJCXJpbmcyID0gdWMtPnRjaGFuLT50Y19yaW5nOworCQl9CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChyaW5nMSkKKwkJazNfcmluZ2Fj Y19yaW5nX3Jlc2V0X2RtYShyaW5nMSwKKwkJCQkJICBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhy aW5nMSkpOworCWlmIChyaW5nMikKKwkJazNfcmluZ2FjY19yaW5nX3Jlc2V0KHJpbmcyKTsKKwor CS8qIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IGxlYWtpbmcgbWVtb3J5IGJ5IHN0YWxsZWQgZGVzY3Jp cHRvciAqLworCWlmICh1Yy0+dGVybWluYXRlZF9kZXNjKSB7CisJCXVkbWFfZGVzY19mcmVlKCZ1 Yy0+dGVybWluYXRlZF9kZXNjLT52ZCk7CisJCXVjLT50ZXJtaW5hdGVkX2Rlc2MgPSBOVUxMOwor CX0KKworCXVjLT5pbl9yaW5nX2NudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfcmVzZXRf Y291bnRlcnMoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJdTMyIHZhbDsKKworCWlmICh1Yy0+ dGNoYW4pIHsKKwkJdmFsID0gdWRtYV90Y2hhbnJ0X3JlYWQodWMtPnRjaGFuLCBVRE1BX1RDSEFO X1JUX0JDTlRfUkVHKTsKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hB Tl9SVF9CQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNo YW4sIFVETUFfVENIQU5fUlRfU0JDTlRfUkVHKTsKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50 Y2hhbiwgVURNQV9UQ0hBTl9SVF9TQkNOVF9SRUcsIHZhbCk7CisKKwkJdmFsID0gdWRtYV90Y2hh bnJ0X3JlYWQodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHKTsKKwkJdWRtYV90Y2hh bnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QQ05UX1JFRywgdmFsKTsKKworCQl2 YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVFUl9CQ05U X1JFRyk7CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVF Ul9CQ05UX1JFRywgdmFsKTsKKwl9CisKKwlpZiAodWMtPnJjaGFuKSB7CisJCXZhbCA9IHVkbWFf cmNoYW5ydF9yZWFkKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9CQ05UX1JFRyk7CisJCXVkbWFf cmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfQkNOVF9SRUcsIHZhbCk7CisK KwkJdmFsID0gdWRtYV9yY2hhbnJ0X3JlYWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX1NCQ05U X1JFRyk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfU0JD TlRfUkVHLCB2YWwpOworCisJCXZhbCA9IHVkbWFfcmNoYW5ydF9yZWFkKHVjLT5yY2hhbiwgVURN QV9SQ0hBTl9SVF9QQ05UX1JFRyk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVE TUFfUkNIQU5fUlRfUENOVF9SRUcsIHZhbCk7CisKKwkJdmFsID0gdWRtYV9yY2hhbnJ0X3JlYWQo dWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX1BFRVJfQkNOVF9SRUcpOworCQl1ZG1hX3JjaGFucnRf d3JpdGUodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX1BFRVJfQkNOVF9SRUcsIHZhbCk7CisJfQor CisJdWMtPmJjbnQgPSAwOworfQorCitzdGF0aWMgaW50IHVkbWFfcmVzZXRfY2hhbihzdHJ1Y3Qg dWRtYV9jaGFuICp1YywgYm9vbCBoYXJkKQoreworCXN3aXRjaCAodWMtPmRpcikgeworCWNhc2Ug RE1BX0RFVl9UT19NRU06CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNI QU5fUlRfUEVFUl9SVF9FTl9SRUcsIDApOworCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFu LCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsIDApOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9f REVWOgorCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9S RUcsIDApOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BF RVJfUlRfRU5fUkVHLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX01FTToKKwkJdWRt YV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExfUkVHLCAwKTsKKwkJ dWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9DVExfUkVHLCAwKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVzZXQg YWxsIGNvdW50ZXJzICovCisJdWRtYV9yZXNldF9jb3VudGVycyh1Yyk7CisKKwkvKiBIYXJkIHJl c2V0OiByZS1pbml0aWFsaXplIHRoZSBjaGFubmVsIHRvIHJlc2V0ICovCisJaWYgKGhhcmQpIHsK KwkJc3RydWN0IHVkbWFfY2hhbiB1Y19iYWNrdXAgPSAqdWM7CisJCWludCByZXQ7CisKKwkJdWMt PnVkLT5kZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzKCZ1Yy0+dmMuY2hhbik7CisJCS8q IHJlc3RvcmUgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCQl1Yy0+ZGlyID0gdWNfYmFj a3VwLmRpcjsKKwkJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSB1Y19iYWNrdXAucmVtb3RlX3RocmVh ZF9pZDsKKwkJdWMtPnBrdF9tb2RlID0gdWNfYmFja3VwLnBrdF9tb2RlOworCQl1Yy0+ZXBfdHlw ZSA9IHVjX2JhY2t1cC5lcF90eXBlOworCQl1Yy0+ZW5hYmxlX2FjYzMyID0gdWNfYmFja3VwLmVu YWJsZV9hY2MzMjsKKwkJdWMtPmVuYWJsZV9idXJzdCA9IHVjX2JhY2t1cC5lbmFibGVfYnVyc3Q7 CisJCXVjLT5jaGFubmVsX3RwbCA9IHVjX2JhY2t1cC5jaGFubmVsX3RwbDsKKwkJdWMtPnBzZF9z aXplID0gdWNfYmFja3VwLnBzZF9zaXplOworCQl1Yy0+bWV0YWRhdGFfc2l6ZSA9IHVjX2JhY2t1 cC5tZXRhZGF0YV9zaXplOworCQl1Yy0+aGRlc2Nfc2l6ZSA9IHVjX2JhY2t1cC5oZGVzY19zaXpl OworCQl1Yy0+bm90ZHBrdCA9IHVjX2JhY2t1cC5ub3RkcGt0OworCisJCXJldCA9IHVjLT51ZC0+ ZGRldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMoJnVjLT52Yy5jaGFuKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJfQorCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19JRExFOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfc3RhcnRfZGVzYyhzdHJ1Y3QgdWRt YV9jaGFuICp1YykKK3sKKwlpZiAodWMtPnBrdF9tb2RlICYmICh1Yy0+Y3ljbGljIHx8IHVjLT5k aXIgPT0gRE1BX0RFVl9UT19NRU0pKSB7CisJCWludCBpOworCisJCS8qIFB1c2ggYWxsIGRlc2Ny aXB0b3JzIHRvIHJpbmcgZm9yIHBhY2tldCBtb2RlIGN5Y2xpYyBvciBSWCAqLworCQlmb3IgKGkg PSAwOyBpIDwgdWMtPmRlc2MtPnNnbGVuOyBpKyspCisJCQl1ZG1hX3B1c2hfdG9fcmluZyh1Yywg aSk7CisJfSBlbHNlIHsKKwkJdWRtYV9wdXNoX3RvX3JpbmcodWMsIDApOworCX0KK30KKworc3Rh dGljIGJvb2wgdWRtYV9jaGFuX25lZWRzX3JlY29uZmlndXJhdGlvbihzdHJ1Y3QgdWRtYV9jaGFu ICp1YykKK3sKKwkvKiBPbmx5IFBETUFzIGhhdmUgc3RhdGljVFIgKi8KKwlpZiAodWMtPmVwX3R5 cGUgPT0gUFNJTF9FUF9OQVRJVkUpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENoZWNrIGlmIHRo ZSBzdGF0aWNUUiBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIGZvciBUWCAqLworCWlmIChtZW1j bXAoJnVjLT5zdGF0aWNfdHIsICZ1Yy0+ZGVzYy0+c3RhdGljX3RyLCBzaXplb2YodWMtPnN0YXRp Y190cikpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu dCB1ZG1hX3N0YXJ0KHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB2aXJ0X2RtYV9k ZXNjICp2ZCA9IHZjaGFuX25leHRfZGVzYygmdWMtPnZjKTsKKworCWlmICghdmQpIHsKKwkJdWMt PmRlc2MgPSBOVUxMOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlsaXN0X2RlbCgmdmQtPm5v ZGUpOworCisJdWMtPmRlc2MgPSB0b191ZG1hX2Rlc2MoJnZkLT50eCk7CisKKwkvKiBDaGFubmVs IGlzIGFscmVhZHkgcnVubmluZyBhbmQgZG9lcyBub3QgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi8K KwlpZiAodWRtYV9pc19jaGFuX3J1bm5pbmcodWMpICYmICF1ZG1hX2NoYW5fbmVlZHNfcmVjb25m aWd1cmF0aW9uKHVjKSkgeworCQl1ZG1hX3N0YXJ0X2Rlc2ModWMpOworCQlnb3RvIG91dDsKKwl9 CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBjbGVhciB0aGUgdGVhcmRvd24gYml0LCBpZiBpdCBp cyBzZXQgKi8KKwl1ZG1hX3Jlc2V0X2NoYW4odWMsIGZhbHNlKTsKKworCS8qIFB1c2ggZGVzY3Jp cHRvcnMgYmVmb3JlIHdlIHN0YXJ0IHRoZSBjaGFubmVsICovCisJdWRtYV9zdGFydF9kZXNjKHVj KTsKKworCXN3aXRjaCAodWMtPmRlc2MtPmRpcikgeworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJ CS8qIENvbmZpZyByZW1vdGUgVFIgKi8KKwkJaWYgKHVjLT5lcF90eXBlID09IFBTSUxfRVBfUERN QV9YWSkgeworCQkJdTMyIHZhbCA9IFBETUFfU1RBVElDX1RSX1kodWMtPmRlc2MtPnN0YXRpY190 ci5lbGNudCkgfAorCQkJCSAgUERNQV9TVEFUSUNfVFJfWCh1Yy0+ZGVzYy0+c3RhdGljX3RyLmVs c2l6ZSk7CisJCQljb25zdCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9kYXRhID0KKwkJ CQkJCQl1Yy0+dWQtPm1hdGNoX2RhdGE7CisKKwkJCWlmICh1Yy0+ZW5hYmxlX2FjYzMyKQorCQkJ CXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9BQ0MzMjsKKwkJCWlmICh1Yy0+ZW5hYmxlX2J1cnN0 KQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9CVVJTVDsKKworCQkJdWRtYV9yY2hhbnJ0 X3dyaXRlKHVjLT5yY2hhbiwKKwkJCQlVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1hZX1JF RywgdmFsKTsKKworCQkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwKKwkJCQlVRE1BX1JD SEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHLAorCQkJCVBETUFfU1RBVElDX1RSX1oodWMtPmRl c2MtPnN0YXRpY190ci5ic3RjbnQsCisJCQkJCQkgbWF0Y2hfZGF0YS0+c3RhdGljdHJfel9tYXNr KSk7CisKKwkJCS8qIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGljVFIgY29uZmlndXJhdGlvbiAqLwor CQkJbWVtY3B5KCZ1Yy0+c3RhdGljX3RyLCAmdWMtPmRlc2MtPnN0YXRpY190ciwKKwkJCSAgICAg ICBzaXplb2YodWMtPnN0YXRpY190cikpOworCQl9CisKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVj LT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFfQ0hBTl9SVF9DVExf RU4pOworCisJCS8qIEVuYWJsZSByZW1vdGUgKi8KKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5y Y2hhbiwgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRywKKwkJCQkgICBVRE1BX1BFRVJfUlRf RU5fRU5BQkxFKTsKKworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQkvKiBDb25m aWcgcmVtb3RlIFRSICovCisJCWlmICh1Yy0+ZXBfdHlwZSA9PSBQU0lMX0VQX1BETUFfWFkpIHsK KwkJCXUzMiB2YWwgPSBQRE1BX1NUQVRJQ19UUl9ZKHVjLT5kZXNjLT5zdGF0aWNfdHIuZWxjbnQp IHwKKwkJCQkgIFBETUFfU1RBVElDX1RSX1godWMtPmRlc2MtPnN0YXRpY190ci5lbHNpemUpOwor CisJCQlpZiAodWMtPmVuYWJsZV9hY2MzMikKKwkJCQl2YWwgfD0gUERNQV9TVEFUSUNfVFJfWFlf QUNDMzI7CisJCQlpZiAodWMtPmVuYWJsZV9idXJzdCkKKwkJCQl2YWwgfD0gUERNQV9TVEFUSUNf VFJfWFlfQlVSU1Q7CisKKwkJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sCisJCQkJVURN QV9UQ0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcsIHZhbCk7CisKKwkJCS8qIHNhdmUgdGhl IGN1cnJlbnQgc3RhdGljVFIgY29uZmlndXJhdGlvbiAqLworCQkJbWVtY3B5KCZ1Yy0+c3RhdGlj X3RyLCAmdWMtPmRlc2MtPnN0YXRpY190ciwKKwkJCSAgICAgICBzaXplb2YodWMtPnN0YXRpY190 cikpOworCQl9CisKKwkJLyogRW5hYmxlIHJlbW90ZSAqLworCQl1ZG1hX3RjaGFucnRfd3JpdGUo dWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVF Ul9SVF9FTl9FTkFCTEUpOworCisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFf VENIQU5fUlRfQ1RMX1JFRywKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKworCQlicmVh azsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFu LCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTik7CisJ CXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywKKwkJ CQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwl1Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfQUNUSVZFOworb3V0 OgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9zdG9wKHN0cnVjdCB1ZG1hX2No YW4gKnVjKQoreworCWVudW0gdWRtYV9jaGFuX3N0YXRlIG9sZF9zdGF0ZSA9IHVjLT5zdGF0ZTsK KworCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19URVJNSU5BVElORzsKKwlyZWluaXRfY29tcGxl dGlvbigmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwlj YXNlIERNQV9ERVZfVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLCBVRE1B X1JDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUg fAorCQkJCSAgIFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTik7CisJCWJyZWFrOworCWNhc2UgRE1B X01FTV9UT19ERVY6CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5f UlRfUEVFUl9SVF9FTl9SRUcsCisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0VOQUJMRSB8CisJCQkJ ICAgVURNQV9QRUVSX1JUX0VOX0ZMVVNIKTsKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hh biwgVURNQV9UQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfRU4gfAor CQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfVERPV04pOworCQlicmVhazsKKwljYXNlIERNQV9NRU1f VE9fTUVNOgorCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NU TF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTiB8CisJCQkJICAgVURNQV9DSEFOX1JU X0NUTF9URE9XTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVjLT5zdGF0ZSA9IG9sZF9zdGF0 ZTsKKwkJY29tcGxldGVfYWxsKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfY3ljbGljX3Bh Y2tldF9lbGFwc2VkKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2Rlc2Mg KmQgPSB1Yy0+ZGVzYzsKKwlzdHJ1Y3QgY3BwaTVfaG9zdF9kZXNjX3QgKmhfZGVzYzsKKworCWhf ZGVzYyA9IGQtPmh3ZGVzY1tkLT5kZXNjX2lkeF0uY3BwaTVfZGVzY192YWRkcjsKKwljcHBpNV9o ZGVzY19yZXNldF90b19vcmlnaW5hbChoX2Rlc2MpOworCXVkbWFfcHVzaF90b19yaW5nKHVjLCBk LT5kZXNjX2lkeCk7CisJZC0+ZGVzY19pZHggPSAoZC0+ZGVzY19pZHggKyAxKSAlIGQtPnNnbGVu OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9mZXRjaF9lcGliKHN0cnVjdCB1ZG1hX2No YW4gKnVjLCBzdHJ1Y3QgdWRtYV9kZXNjICpkKQoreworCXN0cnVjdCBjcHBpNV9ob3N0X2Rlc2Nf dCAqaF9kZXNjID0gZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHI7CisKKwltZW1jcHkoZC0+ bWV0YWRhdGEsIGhfZGVzYy0+ZXBpYiwgZC0+bWV0YWRhdGFfc2l6ZSk7Cit9CisKK3N0YXRpYyBi b29sIHVkbWFfaXNfZGVzY19yZWFsbHlfZG9uZShzdHJ1Y3QgdWRtYV9jaGFuICp1YywKKwkJCQkJ ICAgIHN0cnVjdCB1ZG1hX2Rlc2MgKmQpCit7CisJdTMyIHBlZXJfYmNudCwgYmNudDsKKworCS8q IE9ubHkgVFggdG93YXJkcyBQRE1BIGlzIGFmZmVjdGVkICovCisJaWYgKHVjLT5lcF90eXBlID09 IFBTSUxfRVBfTkFUSVZFIHx8IHVjLT5kaXIgIT0gRE1BX01FTV9UT19ERVYpCisJCXJldHVybiB0 cnVlOworCisJcGVlcl9iY250ID0gdWRtYV90Y2hhbnJ0X3JlYWQodWMtPnRjaGFuLCBVRE1BX1RD SEFOX1JUX1BFRVJfQkNOVF9SRUcpOworCWJjbnQgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNo YW4sIFVETUFfVENIQU5fUlRfQkNOVF9SRUcpOworCisJaWYgKHBlZXJfYmNudCA8IGJjbnQpCisJ CXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB1ZG1hX2Zs dXNoX3R4KHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCWlmICh1Yy0+ZGlyICE9IERNQV9NRU1f VE9fREVWKQorCQlyZXR1cm47CisKKwl1Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfQUNUSVZFX0ZM VVNIOworCisJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9DVExf UkVHLAorCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTiB8CisJCQkgICBVRE1BX0NIQU5fUlRfQ1RM X1RET1dOKTsKK30KKworc3RhdGljIHZvaWQgdWRtYV9yaW5nX2NhbGxiYWNrKHN0cnVjdCB1ZG1h X2NoYW4gKnVjLCBkbWFfYWRkcl90IHBhZGRyKQoreworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQ7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcGFkZHIpCisJCXJldHVybjsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworCisJLyogVGVhcmRvd24gY29tcGxl dGlvbiBtZXNzYWdlICovCisJaWYgKGNwcGk1X2Rlc2NfaXNfdGRjbShwYWRkcikpIHsKKwkJLyog Q29tcGVuc2F0ZSBvdXIgaW50ZXJuYWwgcG9wL3B1c2ggY291bnRlciAqLworCQl1Yy0+aW5fcmlu Z19jbnQrKzsKKworCQljb21wbGV0ZV9hbGwoJnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCisJ CWlmICh1Yy0+dGVybWluYXRlZF9kZXNjKSB7CisJCQl1ZG1hX2Rlc2NfZnJlZSgmdWMtPnRlcm1p bmF0ZWRfZGVzYy0+dmQpOworCQkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJCX0KKwor CQlpZiAoIXVjLT5kZXNjKQorCQkJdWRtYV9zdGFydCh1Yyk7CisKKwkJaWYgKHVjLT5zdGF0ZSAh PSBVRE1BX0NIQU5fSVNfQUNUSVZFX0ZMVVNIKQorCQkJZ290byBvdXQ7CisJCWVsc2UgaWYgKHVj LT5kZXNjKQorCQkJcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcih1Yy0+ZGVzYywK KwkJCQkJCQkgICB1Yy0+ZGVzYy0+ZGVzY19pZHgpOworCX0KKworCWQgPSB1ZG1hX3VkbWFfZGVz Y19mcm9tX3BhZGRyKHVjLCBwYWRkcik7CisKKwlpZiAoZCkgeworCQlkbWFfYWRkcl90IGRlc2Nf cGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcihkLAorCQkJCQkJCQkgICBkLT5kZXNj X2lkeCk7CisJCWlmIChkZXNjX3BhZGRyICE9IHBhZGRyKSB7CisJCQlkZXZfZXJyKHVjLT51ZC0+ ZGV2LCAibm90IG1hdGNoaW5nIGRlc2NyaXB0b3JzIVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQor CisJCWlmICh1Yy0+Y3ljbGljKSB7CisJCQkvKiBwdXNoIHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8g dGhlIHJpbmcgKi8KKwkJCWlmIChkID09IHVjLT5kZXNjKSB7CisJCQkJdWRtYV9jeWNsaWNfcGFj a2V0X2VsYXBzZWQodWMpOworCQkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygmZC0+dmQpOworCQkJ fQorCQl9IGVsc2UgeworCQkJYm9vbCBkZXNjX2RvbmUgPSB0cnVlOworCisJCQlpZiAoZCA9PSB1 Yy0+ZGVzYykgeworCQkJCWRlc2NfZG9uZSA9IHVkbWFfaXNfZGVzY19yZWFsbHlfZG9uZSh1Yywg ZCk7CisKKwkJCQlpZiAoZGVzY19kb25lKSB7CisJCQkJCXVjLT5iY250ICs9IGQtPnJlc2lkdWU7 CisJCQkJCXVkbWFfc3RhcnQodWMpOworCQkJCX0gZWxzZSB7CisJCQkJCXVkbWFfZmx1c2hfdHgo dWMpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZCA9PSB1Yy0+dGVybWluYXRlZF9kZXNjKSB7CisJ CQkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJCQl9CisKKwkJCWlmIChkZXNjX2RvbmUp CisJCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7CisJCX0KKwl9CitvdXQ6CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdWMtPnZjLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZv aWQgdWRtYV90cl9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1 Y3QgdWRtYV9kZXNjICpkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmdWMtPnZjLmxvY2ssIGZsYWdzKTsKKwlkID0gdWMtPmRlc2M7CisJaWYgKGQpIHsKKwkJ ZC0+dHJfaWR4ID0gKGQtPnRyX2lkeCArIDEpICUgZC0+c2dsZW47CisKKwkJaWYgKHVjLT5jeWNs aWMpIHsKKwkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygmZC0+dmQpOworCQl9IGVsc2UgeworCQkJ LyogVE9ETzogZmlndXJlIG91dCB0aGUgcmVhbCBhbW91bnQgb2YgZGF0YSAqLworCQkJdWMtPmJj bnQgKz0gZC0+cmVzaWR1ZTsKKwkJCXVkbWFfc3RhcnQodWMpOworCQkJdmNoYW5fY29va2llX2Nv bXBsZXRlKCZkLT52ZCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Yy0+ dmMubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdWRtYV9yaW5nX2lycV9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSBk YXRhOworCWRtYV9hZGRyX3QgcGFkZHIgPSAwOworCisJaWYgKCF1ZG1hX3BvcF9mcm9tX3Jpbmco dWMsICZwYWRkcikpCisJCXVkbWFfcmluZ19jYWxsYmFjayh1YywgcGFkZHIpOworCisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdWRtYV91ZG1hX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSBkYXRh OworCisJdWRtYV90cl9ldmVudF9jYWxsYmFjayh1Yyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggYi9kcml2ZXJzL2RtYS90 aS9rMy11ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40OTc4 MGQ5MjI3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmgKQEAg LTAsMCArMSwxMjAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisv KgorICogIENvcHlyaWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQg LSBodHRwOi8vd3d3LnRpLmNvbQorICovCisKKyNpZm5kZWYgSzNfVURNQV9IXworI2RlZmluZSBL M19VRE1BX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX3Byb3RvY29sLmg+CisK Ky8qIEdsb2JhbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVURNQV9SRVZfUkVHCQkJMHgwCisjZGVm aW5lIFVETUFfUEVSRl9DVExfUkVHCQkweDQKKyNkZWZpbmUgVURNQV9FTVVfQ1RMX1JFRwkJMHg4 CisjZGVmaW5lIFVETUFfUFNJTF9UT19SRUcJCTB4MTAKKyNkZWZpbmUgVURNQV9VVENfQ1RMX1JF RwkJMHgxYworI2RlZmluZSBVRE1BX0NBUF9SRUcoaSkJCQkoMHgyMCArIChpICogNCkpCisjZGVm aW5lIFVETUFfUlhfRkxPV19JRF9GV19PRVNfUkVHCTB4ODAKKyNkZWZpbmUgVURNQV9SWF9GTE9X X0lEX0ZXX1NUQVRVU19SRUcJMHg4OAorCisvKiBUWCBjaGFuIFJUIHJlZ3MgKi8KKyNkZWZpbmUg VURNQV9UQ0hBTl9SVF9DVExfUkVHCQkweDAKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9TV1RSSUdf UkVHCTB4OAorI2RlZmluZSBVRE1BX1RDSEFOX1JUX1NUREFUQV9SRUcJMHg4MAorCisjZGVmaW5l IFVETUFfVENIQU5fUlRfUEVFUm5fUkVHKGkpCSgweDIwMCArIChpICogMHg0KSkKKyNkZWZpbmUg VURNQV9UQ0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcJXAorCVVETUFfVENIQU5fUlRfUEVF Um5fUkVHKDApCS8qIFBTSS1MOiAweDQwMCAqLworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BFRVJf U1RBVElDX1RSX1pfUkVHCVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRygxKQkvKiBQU0ktTDog MHg0MDEgKi8KKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVHCQlcCisJVURNQV9U Q0hBTl9SVF9QRUVSbl9SRUcoNCkJLyogUFNJLUw6IDB4NDA0ICovCisjZGVmaW5lIFVETUFfVENI QU5fUlRfUEVFUl9SVF9FTl9SRUcJCVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRyg4KQkvKiBQ U0ktTDogMHg0MDggKi8KKworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHCQkweDQwMAor I2RlZmluZSBVRE1BX1RDSEFOX1JUX0JDTlRfUkVHCQkweDQwOAorI2RlZmluZSBVRE1BX1RDSEFO X1JUX1NCQ05UX1JFRwkJMHg0MTAKKworLyogUlggY2hhbiBSVCByZWdzICovCisjZGVmaW5lIFVE TUFfUkNIQU5fUlRfQ1RMX1JFRwkJMHgwCisjZGVmaW5lIFVETUFfUkNIQU5fUlRfU1dUUklHX1JF RwkweDgKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9TVERBVEFfUkVHCTB4ODAKKworI2RlZmluZSBV RE1BX1JDSEFOX1JUX1BFRVJuX1JFRyhpKQkoMHgyMDAgKyAoaSAqIDB4NCkpCisjZGVmaW5lIFVE TUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHCVwKKwlVRE1BX1JDSEFOX1JUX1BFRVJu X1JFRygwKQkvKiBQU0ktTDogMHg0MDAgKi8KKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSX1NU QVRJQ19UUl9aX1JFRwlcCisJVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoMSkJLyogUFNJLUw6IDB4 NDAxICovCisjZGVmaW5lIFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRwkJXAorCVVETUFfUkNI QU5fUlRfUEVFUm5fUkVHKDQpCS8qIFBTSS1MOiAweDQwNCAqLworI2RlZmluZSBVRE1BX1JDSEFO X1JUX1BFRVJfUlRfRU5fUkVHCQlcCisJVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoOCkJLyogUFNJ LUw6IDB4NDA4ICovCisKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QQ05UX1JFRwkJMHg0MDAKKyNk ZWZpbmUgVURNQV9SQ0hBTl9SVF9CQ05UX1JFRwkJMHg0MDgKKyNkZWZpbmUgVURNQV9SQ0hBTl9S VF9TQkNOVF9SRUcJCTB4NDEwCisKKy8qIFVETUFfVENIQU5fUlRfQ1RMX1JFRy9VRE1BX1JDSEFO X1JUX0NUTF9SRUcgKi8KKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FTgkJQklUKDMxKQorI2Rl ZmluZSBVRE1BX0NIQU5fUlRfQ1RMX1RET1dOCQlCSVQoMzApCisjZGVmaW5lIFVETUFfQ0hBTl9S VF9DVExfUEFVU0UJCUJJVCgyOSkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9GVERPV04JCUJJ VCgyOCkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FUlJPUgkJQklUKDApCisKKy8qIFVETUFf VENIQU5fUlRfUEVFUl9SVF9FTl9SRUcvVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRyAoUFNJ LUw6IDB4NDA4KSAqLworI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFCQlCSVQoMzEpCisj ZGVmaW5lIFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTglCSVQoMzApCisjZGVmaW5lIFVETUFfUEVF Ul9SVF9FTl9QQVVTRQkJQklUKDI5KQorI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRkxVU0gJCUJJ VCgyOCkKKyNkZWZpbmUgVURNQV9QRUVSX1JUX0VOX0lETEUJCUJJVCgxKQorCisvKgorICogVURN QV9UQ0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcgLworICogVURNQV9SQ0hBTl9SVF9QRUVS X1NUQVRJQ19UUl9YWV9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX01BU0sJCUdF Tk1BU0soMjYsIDI0KQorI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX1NISUZUCQkoMjQpCisjZGVm aW5lIFBETUFfU1RBVElDX1RSX1lfTUFTSwkJR0VOTUFTSygxMSwgMCkKKyNkZWZpbmUgUERNQV9T VEFUSUNfVFJfWV9TSElGVAkJKDApCisKKyNkZWZpbmUgUERNQV9TVEFUSUNfVFJfWSh4KQlcCisJ KCgoeCkgPDwgUERNQV9TVEFUSUNfVFJfWV9TSElGVCkgJiBQRE1BX1NUQVRJQ19UUl9ZX01BU0sp CisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1goeCkJXAorCSgoKHgpIDw8IFBETUFfU1RBVElDX1RS X1hfU0hJRlQpICYgUERNQV9TVEFUSUNfVFJfWF9NQVNLKQorCisjZGVmaW5lIFBETUFfU1RBVElD X1RSX1hZX0FDQzMyCQlCSVQoMzApCisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1hZX0JVUlNUCQlC SVQoMzEpCisKKy8qCisgKiBVRE1BX1RDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHIC8KKyAq IFVETUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWl9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NU QVRJQ19UUl9aKHgsIG1hc2spCSgoeCkgJiAobWFzaykpCisKK3N0cnVjdCB1ZG1hX2RldjsKK3N0 cnVjdCB1ZG1hX3RjaGFuOworc3RydWN0IHVkbWFfcmNoYW47CitzdHJ1Y3QgdWRtYV9yZmxvdzsK KworZW51bSB1ZG1hX3JtX3JhbmdlIHsKKwlSTV9SQU5HRV9UQ0hBTiA9IDAsCisJUk1fUkFOR0Vf UkNIQU4sCisJUk1fUkFOR0VfUkZMT1csCisJUk1fUkFOR0VfTEFTVCwKK307CisKK3N0cnVjdCB1 ZG1hX3Rpc2NpX3JtIHsKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7CisJY29u c3Qgc3RydWN0IHRpX3NjaV9ybV91ZG1hcF9vcHMgKnRpc2NpX3VkbWFwX29wczsKKwl1MzIgIHRp c2NpX2Rldl9pZDsKKworCS8qIHRpc2NpIGluZm9ybWF0aW9uIGZvciBQU0ktTCB0aHJlYWQgcGFp cmluZy91bnBhaXJpbmcgKi8KKwljb25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3BzaWxfb3BzICp0aXNj aV9wc2lsX29wczsKKwl1MzIgIHRpc2NpX25hdnNzX2Rldl9pZDsKKworCXN0cnVjdCB0aV9zY2lf cmVzb3VyY2UgKnJtX3Jhbmdlc1tSTV9SQU5HRV9MQVNUXTsKK307CisKKyNlbmRpZiAvKiBLM19V RE1BX0hfICovCi0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2th bGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIx LTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=