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 60693ECDFB6 for ; Tue, 1 Oct 2019 06:19:12 +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 2CB6321783 for ; Tue, 1 Oct 2019 06:19:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IuDo1DbI"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="DPFhFT2j" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2CB6321783 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=hdl0YXHib5jhBXjkExrkicCV6Aq68DBb0mL9iTNSQ+E=; b=IuDo1DbIpKzcsx iG9TSFvX7NEELGLFu6I+5sAt/N5izlhWiNEE+ynXEVDYGJkqfXdQPrhe1vYRKozsjp8cJxEFXR866 U7BaTKg9FhiuX0foT9tzq89tqttTfQ0e7HMLc5dqfwyxJfB7xMO089p14w28oasPdh84o1gPPuuCU /VkRsFf2/2d8WunIBW+wNiCvgSBgEoMRNV1pyh0OL6ZtMylBwEixUF4ZX/I6WC8dBEeCtEc0zwn27 ysn94UOn3WsJFUXWRYo3L5RP3DXIVHDjL5qL/j2HgJ5tNMGFOBvQciLYRTtHMoII2z7tLOoge58P+ 0zh3Odq7K7Lk/YD5fVCA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBV8-0002he-TU; Tue, 01 Oct 2019 06:19:11 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBSv-0000SV-LM for linux-arm-kernel@lists.infradead.org; Tue, 01 Oct 2019 06:16:58 +0000 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id x916GnwT009398; Tue, 1 Oct 2019 01:16:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1569910609; bh=D90kOrjITU0bbX9sSJ2/SJOJyxVC7HacPRDNXfpjUYo=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=DPFhFT2jS7lQzQqaHZ2ESpJgq8v5dqJm3ZOegQR2GH44P+x01wKTDlmJH+gvNtf3r nOjC19Z7gC/e/CWVnfFic64SnKSq3zMBF3fYKgYZFVmk+t4HtLM2rMhwqDUxA0q4wK MHNfwT56HTlKIZ6eZ9GP704vYrWfJUvkLrIqk6Ao= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x916Gnw3018391 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 1 Oct 2019 01:16:49 -0500 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 1 Oct 2019 01:16:39 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Tue, 1 Oct 2019 01:16:49 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x916GGXD090310; Tue, 1 Oct 2019 01:16:45 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v3 08/14] dmaengine: ti: New driver for K3 UDMA - split#1: defines, structs, io func Date: Tue, 1 Oct 2019 09:16:58 +0300 Message-ID: <20191001061704.2399-9-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191001061704.2399-1-peter.ujfalusi@ti.com> References: <20191001061704.2399-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190930_231654_006517_985D6889 X-CRM114-Status: GOOD ( 21.34 ) 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 QHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCAxMDU5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggfCAg MTMwICsrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDExODkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hL3RpL2szLXVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVk bWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjYyODEyMGZmZmEyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hL3RpL2szLXVkbWEuYwpAQCAtMCwwICsxLDEwNTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogIENvcHlyaWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVt ZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICogIEF1dGhvcjogUGV0ZXIg VWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFl bmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9k bWEvazMtdWRtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmg+CisjaW5j bHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9wcm90b2NvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Nv Yy90aS90aV9zY2lfaW50YV9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEvdGktY3BwaTUuaD4K KworI2luY2x1ZGUgIi4uL3ZpcnQtZG1hLmgiCisjaW5jbHVkZSAiazMtdWRtYS5oIgorCitzdHJ1 Y3QgdWRtYV9zdGF0aWNfdHIgeworCXU4IGVsc2l6ZTsgLyogUlBTVFIwICovCisJdTE2IGVsY250 OyAvKiBSUFNUUjAgKi8KKwl1MTYgYnN0Y250OyAvKiBSUFNUUjEgKi8KK307CisKKyNkZWZpbmUg SzNfVURNQV9NQVhfUkZMT1dTCQkxMDI0CisjZGVmaW5lIEszX1VETUFfREVGQVVMVF9SSU5HX1NJ WkUJMTYKKworc3RydWN0IHVkbWFfY2hhbjsKKworZW51bSB1ZG1hX21tciB7CisJTU1SX0dDRkcg PSAwLAorCU1NUl9SQ0hBTlJULAorCU1NUl9UQ0hBTlJULAorCU1NUl9MQVNULAorfTsKKworc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCBtbXJfbmFtZXNbXSA9IHsgImdjZmciLCAicmNoYW5ydCIs ICJ0Y2hhbnJ0IiB9OworCitzdHJ1Y3QgdWRtYV90Y2hhbiB7CisJdm9pZCBfX2lvbWVtICpyZWdf cnQ7CisKKwlpbnQgaWQ7CisJc3RydWN0IGszX3JpbmcgKnRfcmluZzsgLyogVHJhbnNtaXQgcmlu ZyAqLworCXN0cnVjdCBrM19yaW5nICp0Y19yaW5nOyAvKiBUcmFuc21pdCBDb21wbGV0aW9uIHJp bmcgKi8KK307CisKK3N0cnVjdCB1ZG1hX3JjaGFuIHsKKwl2b2lkIF9faW9tZW0gKnJlZ19ydDsK KworCWludCBpZDsKKwlzdHJ1Y3QgazNfcmluZyAqZmRfcmluZzsgLyogRnJlZSBEZXNjcmlwdG9y IHJpbmcgKi8KKwlzdHJ1Y3QgazNfcmluZyAqcl9yaW5nOyAvKiBSZWNlaXZlIHJpbmcqLworfTsK Kworc3RydWN0IHVkbWFfcmZsb3cgeworCXZvaWQgX19pb21lbSAqcmVnX3JmbG93OworCisJaW50 IGlkOworfTsKKworc3RydWN0IHVkbWFfdHJfdGhyZWFkX3JhbmdlcyB7CisJaW50IHN0YXJ0Owor CWludCBjb3VudDsKK307CisKK3N0cnVjdCB1ZG1hX21hdGNoX2RhdGEgeworCWJvb2wgZW5hYmxl X21lbWNweV9zdXBwb3J0OworCWJvb2wgaGF2ZV9hY2MzMjsKKwlib29sIGhhdmVfYnVyc3Q7CisJ dTMyIHN0YXRpY3RyX3pfbWFzazsKKwl1MzIgcmNoYW5fb2VzX29mZnNldDsKKworCXN0cnVjdCB1 ZG1hX3RyX3RocmVhZF9yYW5nZXMgKnRyX3RocmVhZHM7CisKKwl1OCB0cGxfbGV2ZWxzOworCXUz MiBsZXZlbF9zdGFydF9pZHhbXTsKK307CisKK3N0cnVjdCB1ZG1hX2RldiB7CisJc3RydWN0IGRt YV9kZXZpY2UgZGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICptbXJz W01NUl9MQVNUXTsKKwljb25zdCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9kYXRhOwor CisJc2l6ZV90IGRlc2NfYWxpZ247IC8qIGFsaWdubWVudCB0byB1c2UgZm9yIGRlc2NyaXB0b3Jz ICovCisKKwlzdHJ1Y3QgdWRtYV90aXNjaV9ybSB0aXNjaV9ybTsKKworCXN0cnVjdCBrM19yaW5n YWNjICpyaW5nYWNjOworCisJc3RydWN0IHdvcmtfc3RydWN0IHB1cmdlX3dvcms7CisJc3RydWN0 IGxpc3RfaGVhZCBkZXNjX3RvX3B1cmdlOworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCB0Y2hh bl9jbnQ7CisJaW50IGVjaGFuX2NudDsKKwlpbnQgcmNoYW5fY250OworCWludCByZmxvd19jbnQ7 CisJdW5zaWduZWQgbG9uZyAqdGNoYW5fbWFwOworCXVuc2lnbmVkIGxvbmcgKnJjaGFuX21hcDsK Kwl1bnNpZ25lZCBsb25nICpyZmxvd19ncF9tYXA7CisJdW5zaWduZWQgbG9uZyAqcmZsb3dfZ3Bf bWFwX2FsbG9jYXRlZDsKKwl1bnNpZ25lZCBsb25nICpyZmxvd19pbl91c2U7CisKKwlzdHJ1Y3Qg dWRtYV90Y2hhbiAqdGNoYW5zOworCXN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbnM7CisJc3RydWN0 IHVkbWFfcmZsb3cgKnJmbG93czsKKworCXN0cnVjdCB1ZG1hX2NoYW4gKmNoYW5uZWxzOworCXUz MiBwc2lsX2Jhc2U7Cit9OworCitzdHJ1Y3QgdWRtYV9od2Rlc2MgeworCXNpemVfdCBjcHBpNV9k ZXNjX3NpemU7CisJdm9pZCAqY3BwaTVfZGVzY192YWRkcjsKKwlkbWFfYWRkcl90IGNwcGk1X2Rl c2NfcGFkZHI7CisKKwkvKiBUUiBkZXNjcmlwdG9yIGludGVybmFsIHBvaW50ZXJzICovCisJdm9p ZCAqdHJfcmVxX2Jhc2U7CisJc3RydWN0IGNwcGk1X3RyX3Jlc3BfdCAqdHJfcmVzcF9iYXNlOwor fTsKKworc3RydWN0IHVkbWFfZGVzYyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmQ7CisKKwli b29sIHRlcm1pbmF0ZWQ7CisKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyOworCisJ c3RydWN0IHVkbWFfc3RhdGljX3RyIHN0YXRpY190cjsKKwl1MzIgcmVzaWR1ZTsKKworCXVuc2ln bmVkIGludCBzZ2xlbjsKKwl1bnNpZ25lZCBpbnQgZGVzY19pZHg7IC8qIE9ubHkgdXNlZCBmb3Ig Y3ljbGljIGluIHBhY2tldCBtb2RlICovCisJdW5zaWduZWQgaW50IHRyX2lkeDsKKworCXUzMiBt ZXRhZGF0YV9zaXplOworCXZvaWQgKm1ldGFkYXRhOyAvKiBwb2ludGVyIHRvIHByb3ZpZGVkIG1l dGFkYXRhIGJ1ZmZlciAoRVBJUCwgUFNkYXRhKSAqLworCisJdW5zaWduZWQgaW50IGh3ZGVzY19j b3VudDsKKwlzdHJ1Y3QgdWRtYV9od2Rlc2MgaHdkZXNjWzBdOworfTsKKworZW51bSB1ZG1hX2No YW5fc3RhdGUgeworCVVETUFfQ0hBTl9JU19JRExFID0gMCwgLyogbm90IGFjdGl2ZSwgbm8gdGVh cmRvd24gaXMgaW4gcHJvZ3Jlc3MgKi8KKwlVRE1BX0NIQU5fSVNfQUNUSVZFLCAvKiBOb3JtYWwg b3BlcmF0aW9uICovCisJVURNQV9DSEFOX0lTX0FDVElWRV9GTFVTSCwgLyogRmx1c2hpbmcgZm9y IGRlbGF5ZWQgdHggKi8KKwlVRE1BX0NIQU5fSVNfVEVSTUlOQVRJTkcsIC8qIGNoYW5uZWwgaXMg YmVpbmcgdGVybWluYXRlZCAqLworfTsKKworc3RydWN0IHVkbWFfY2hhbiB7CisJc3RydWN0IHZp cnRfZG1hX2NoYW4gdmM7CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcJY2ZnOworCXN0cnVjdCB1 ZG1hX2RldiAqdWQ7CisJc3RydWN0IHVkbWFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgdWRtYV9kZXNj ICp0ZXJtaW5hdGVkX2Rlc2M7CisJc3RydWN0IHVkbWFfc3RhdGljX3RyIHN0YXRpY190cjsKKwlj aGFyICpuYW1lOworCisJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuOworCXN0cnVjdCB1ZG1hX3Jj aGFuICpyY2hhbjsKKwlzdHJ1Y3QgdWRtYV9yZmxvdyAqcmZsb3c7CisKKwlib29sIHBzaWxfcGFp cmVkOworCisJaW50IGlycV9udW1fcmluZzsKKwlpbnQgaXJxX251bV91ZG1hOworCisJYm9vbCBj eWNsaWM7CisJYm9vbCBwYXVzZWQ7CisKKwllbnVtIHVkbWFfY2hhbl9zdGF0ZSBzdGF0ZTsKKwlz dHJ1Y3QgY29tcGxldGlvbiB0ZWFyZG93bl9jb21wbGV0ZWQ7CisKKwl1MzIgYmNudDsgLyogbnVt YmVyIG9mIGJ5dGVzIGNvbXBsZXRlZCBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIGNoYW5uZWwgKi8K Kwl1MzIgaW5fcmluZ19jbnQ7IC8qIG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiBmbGlnaHQgKi8K KworCWJvb2wgcGt0X21vZGU7IC8qIFRSIG9yIHBhY2tldCAqLworCWJvb2wgbmVlZHNfZXBpYjsg LyogRVBJQiBpcyBuZWVkZWQgZm9yIHRoZSBjb21tdW5pY2F0aW9uIG9yIG5vdCAqLworCXUzMiBw c2Rfc2l6ZTsgLyogc2l6ZSBvZiBQcm90b2NvbCBTcGVjaWZpYyBEYXRhICovCisJdTMyIG1ldGFk YXRhX3NpemU7IC8qIChuZWVkc19lcGliID8gMTY6MCkgKyBwc2Rfc2l6ZSAqLworCXUzMiBoZGVz Y19zaXplOyAvKiBTaXplIG9mIGEgcGFja2V0IGRlc2NyaXB0b3IgaW4gcGFja2V0IG1vZGUgKi8K Kwlib29sIG5vdGRwa3Q7IC8qIFN1cHByZXNzIHNlbmRpbmcgVERDIHBhY2tldCAqLworCWludCBy ZW1vdGVfdGhyZWFkX2lkOworCXUzMiBzcmNfdGhyZWFkOworCXUzMiBkc3RfdGhyZWFkOworCXUz MiBzdGF0aWNfdHJfdHlwZTsKKwlib29sIGVuYWJsZV9hY2MzMjsKKwlib29sIGVuYWJsZV9idXJz dDsKKwllbnVtIHVkbWFfdHBfbGV2ZWwgY2hhbm5lbF90cGw7IC8qIENoYW5uZWwgVGhyb3VnaHB1 dCBMZXZlbCAqLworCisJLyogZG1hcG9vbCBmb3IgcGFja2V0IG1vZGUgZGVzY3JpcHRvcnMgKi8K Kwlib29sIHVzZV9kbWFfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmhkZXNjX3Bvb2w7CisKKwl1 MzIgaWQ7CisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcjsKK307CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IHVkbWFfZGV2ICp0b191ZG1hX2RldihzdHJ1Y3QgZG1hX2RldmljZSAqZCkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCB1ZG1hX2RldiwgZGRldik7Cit9CisK K3N0YXRpYyBpbmxpbmUgc3RydWN0IHVkbWFfY2hhbiAqdG9fdWRtYV9jaGFuKHN0cnVjdCBkbWFf Y2hhbiAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCB1ZG1hX2NoYW4sIHZj LmNoYW4pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZG1hX2Rlc2MgKnRvX3VkbWFfZGVz YyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnQpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZih0LCBzdHJ1Y3QgdWRtYV9kZXNjLCB2ZC50eCk7Cit9CisKKy8qIEdlbmVyaWMgcmVnaXN0 ZXIgYWNjZXNzIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSB1MzIgdWRtYV9yZWFkKHZvaWQg X19pb21lbSAqYmFzZSwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoYmFzZSArIHJlZyk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZG1hX3dyaXRlKHZvaWQgX19pb21lbSAqYmFzZSwgaW50 IHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBiYXNlICsgcmVnKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIHVkbWFfdXBkYXRlX2JpdHModm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVn LAorCQkJCSAgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl1MzIgdG1wLCBvcmlnOworCisJb3Jp ZyA9IHJlYWRsKGJhc2UgKyByZWcpOworCXRtcCA9IG9yaWcgJiB+bWFzazsKKwl0bXAgfD0gKHZh bCAmIG1hc2spOworCisJaWYgKHRtcCAhPSBvcmlnKQorCQl3cml0ZWwodG1wLCBiYXNlICsgcmVn KTsKK30KKworLyogVENIQU5SVCAqLworc3RhdGljIGlubGluZSB1MzIgdWRtYV90Y2hhbnJ0X3Jl YWQoc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuLCBpbnQgcmVnKQoreworCWlmICghdGNoYW4pCisJ CXJldHVybiAwOworCXJldHVybiB1ZG1hX3JlYWQodGNoYW4tPnJlZ19ydCwgcmVnKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHVkbWFfdGNoYW5ydF93cml0ZShzdHJ1Y3QgdWRtYV90Y2hhbiAq dGNoYW4sIGludCByZWcsCisJCQkJICAgICAgdTMyIHZhbCkKK3sKKwlpZiAoIXRjaGFuKQorCQly ZXR1cm47CisJdWRtYV93cml0ZSh0Y2hhbi0+cmVnX3J0LCByZWcsIHZhbCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCB1ZG1hX3RjaGFucnRfdXBkYXRlX2JpdHMoc3RydWN0IHVkbWFfdGNoYW4g KnRjaGFuLCBpbnQgcmVnLAorCQkJCQkgICAgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJaWYgKCF0 Y2hhbikKKwkJcmV0dXJuOworCXVkbWFfdXBkYXRlX2JpdHModGNoYW4tPnJlZ19ydCwgcmVnLCBt YXNrLCB2YWwpOworfQorCisvKiBSQ0hBTlJUICovCitzdGF0aWMgaW5saW5lIHUzMiB1ZG1hX3Jj aGFucnRfcmVhZChzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW4sIGludCByZWcpCit7CisJaWYgKCFy Y2hhbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHVkbWFfcmVhZChyY2hhbi0+cmVnX3J0LCByZWcp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9yY2hhbnJ0X3dyaXRlKHN0cnVjdCB1ZG1h X3JjaGFuICpyY2hhbiwgaW50IHJlZywKKwkJCQkgICAgICB1MzIgdmFsKQoreworCWlmICghcmNo YW4pCisJCXJldHVybjsKKwl1ZG1hX3dyaXRlKHJjaGFuLT5yZWdfcnQsIHJlZywgdmFsKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIHVkbWFfcmNoYW5ydF91cGRhdGVfYml0cyhzdHJ1Y3QgdWRt YV9yY2hhbiAqcmNoYW4sIGludCByZWcsCisJCQkJCSAgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sK KwlpZiAoIXJjaGFuKQorCQlyZXR1cm47CisJdWRtYV91cGRhdGVfYml0cyhyY2hhbi0+cmVnX3J0 LCByZWcsIG1hc2ssIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbmF2c3NfcHNpbF9wYWlyKHN0cnVj dCB1ZG1hX2RldiAqdWQsIHUzMiBzcmNfdGhyZWFkLCB1MzIgZHN0X3RocmVhZCkKK3sKKwlzdHJ1 Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCisJZHN0X3RocmVh ZCB8PSBVRE1BX1BTSUxfRFNUX1RIUkVBRF9JRF9PRkZTRVQ7CisJcmV0dXJuIHRpc2NpX3JtLT50 aXNjaV9wc2lsX29wcy0+cGFpcih0aXNjaV9ybS0+dGlzY2ksCisJCQkJCSAgICAgIHRpc2NpX3Jt LT50aXNjaV9uYXZzc19kZXZfaWQsCisJCQkJCSAgICAgIHNyY190aHJlYWQsIGRzdF90aHJlYWQp OworfQorCitzdGF0aWMgaW50IG5hdnNzX3BzaWxfdW5wYWlyKHN0cnVjdCB1ZG1hX2RldiAqdWQs IHUzMiBzcmNfdGhyZWFkLAorCQkJICAgICB1MzIgZHN0X3RocmVhZCkKK3sKKwlzdHJ1Y3QgdWRt YV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCisJZHN0X3RocmVhZCB8PSBV RE1BX1BTSUxfRFNUX1RIUkVBRF9JRF9PRkZTRVQ7CisJcmV0dXJuIHRpc2NpX3JtLT50aXNjaV9w c2lsX29wcy0+dW5wYWlyKHRpc2NpX3JtLT50aXNjaSwKKwkJCQkJCXRpc2NpX3JtLT50aXNjaV9u YXZzc19kZXZfaWQsCisJCQkJCQlzcmNfdGhyZWFkLCBkc3RfdGhyZWFkKTsKK30KKworc3RhdGlj IGNoYXIgKnVkbWFfZ2V0X2Rpcl90ZXh0KGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXIp Cit7CisJc3dpdGNoIChkaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlyZXR1cm4gIkRF Vl9UT19NRU0iOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJCXJldHVybiAiTUVNX1RPX0RFViI7 CisJY2FzZSBETUFfTUVNX1RPX01FTToKKwkJcmV0dXJuICJNRU1fVE9fTUVNIjsKKwljYXNlIERN QV9ERVZfVE9fREVWOgorCQlyZXR1cm4gIkRFVl9UT19ERVYiOworCWRlZmF1bHQ6CisJCWJyZWFr OworCX0KKworCXJldHVybiAiaW52YWxpZCI7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfcmVzZXRf dWNoYW4oc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJdWMtPnN0YXRlID0gVURNQV9DSEFOX0lT X0lETEU7CisJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSAtMTsKKwl1Yy0+ZGlyID0gRE1BX01FTV9U T19NRU07CisJdWMtPnBrdF9tb2RlID0gZmFsc2U7CisJdWMtPnN0YXRpY190cl90eXBlID0gMDsK Kwl1Yy0+ZW5hYmxlX2FjYzMyID0gMDsKKwl1Yy0+ZW5hYmxlX2J1cnN0ID0gMDsKKwl1Yy0+Y2hh bm5lbF90cGwgPSAwOworCXVjLT5wc2Rfc2l6ZSA9IDA7CisJdWMtPm1ldGFkYXRhX3NpemUgPSAw OworCXVjLT5oZGVzY19zaXplID0gMDsKKwl1Yy0+bm90ZHBrdCA9IDA7Cit9CisKK3N0YXRpYyB2 b2lkIHVkbWFfZHVtcF9jaGFuX3N0ZGF0YShzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSB1Yy0+dWQtPmRldjsKKwl1MzIgb2Zmc2V0OworCWludCBpOworCisJ aWYgKHVjLT5kaXIgPT0gRE1BX01FTV9UT19ERVYgfHwgdWMtPmRpciA9PSBETUFfTUVNX1RPX01F TSkgeworCQlkZXZfZGJnKGRldiwgIlRDSEFOIFN0YXRlIGRhdGE6XG4iKTsKKwkJZm9yIChpID0g MDsgaSA8IDMyOyBpKyspIHsKKwkJCW9mZnNldCA9IFVETUFfVENIQU5fUlRfU1REQVRBX1JFRyAr IGkgKiA0OworCQkJZGV2X2RiZyhkZXYsICJUUlRfU1REQVRBWyUwMmRdOiAweCUwOHhcbiIsIGks CisJCQkJdWRtYV90Y2hhbnJ0X3JlYWQodWMtPnRjaGFuLCBvZmZzZXQpKTsKKwkJfQorCX0KKwor CWlmICh1Yy0+ZGlyID09IERNQV9ERVZfVE9fTUVNIHx8IHVjLT5kaXIgPT0gRE1BX01FTV9UT19N RU0pIHsKKwkJZGV2X2RiZyhkZXYsICJSQ0hBTiBTdGF0ZSBkYXRhOlxuIik7CisJCWZvciAoaSA9 IDA7IGkgPCAzMjsgaSsrKSB7CisJCQlvZmZzZXQgPSBVRE1BX1JDSEFOX1JUX1NUREFUQV9SRUcg KyBpICogNDsKKwkJCWRldl9kYmcoZGV2LCAiUlJUX1NUREFUQVslMDJkXTogMHglMDh4XG4iLCBp LAorCQkJCXVkbWFfcmNoYW5ydF9yZWFkKHVjLT5yY2hhbiwgb2Zmc2V0KSk7CisJCX0KKwl9Cit9 CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcihz dHJ1Y3QgdWRtYV9kZXNjICpkLAorCQkJCQkJICAgIGludCBpZHgpCit7CisJcmV0dXJuIGQtPmh3 ZGVzY1tpZHhdLmNwcGk1X2Rlc2NfcGFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqdWRt YV9jdXJyX2NwcGk1X2Rlc2NfdmFkZHIoc3RydWN0IHVkbWFfZGVzYyAqZCwgaW50IGlkeCkKK3sK KwlyZXR1cm4gZC0+aHdkZXNjW2lkeF0uY3BwaTVfZGVzY192YWRkcjsKK30KKworc3RhdGljIHN0 cnVjdCB1ZG1hX2Rlc2MgKnVkbWFfdWRtYV9kZXNjX2Zyb21fcGFkZHIoc3RydWN0IHVkbWFfY2hh biAqdWMsCisJCQkJCQkgICBkbWFfYWRkcl90IHBhZGRyKQoreworCXN0cnVjdCB1ZG1hX2Rlc2Mg KmQgPSB1Yy0+dGVybWluYXRlZF9kZXNjOworCisJaWYgKGQpIHsKKwkJZG1hX2FkZHJfdCBkZXNj X3BhZGRyID0gdWRtYV9jdXJyX2NwcGk1X2Rlc2NfcGFkZHIoZCwKKwkJCQkJCQkJICAgZC0+ZGVz Y19pZHgpOworCisJCWlmIChkZXNjX3BhZGRyICE9IHBhZGRyKQorCQkJZCA9IE5VTEw7CisJfQor CisJaWYgKCFkKSB7CisJCWQgPSB1Yy0+ZGVzYzsKKwkJaWYgKGQpIHsKKwkJCWRtYV9hZGRyX3Qg ZGVzY19wYWRkciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKGQsCisJCQkJCQkJCWQtPmRl c2NfaWR4KTsKKworCQkJaWYgKGRlc2NfcGFkZHIgIT0gcGFkZHIpCisJCQkJZCA9IE5VTEw7CisJ CX0KKwl9CisKKwlyZXR1cm4gZDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9mcmVlX2h3ZGVzYyhz dHJ1Y3QgdWRtYV9jaGFuICp1Yywgc3RydWN0IHVkbWFfZGVzYyAqZCkKK3sKKwlpZiAodWMtPnVz ZV9kbWFfcG9vbCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZC0+aHdkZXNjX2Nv dW50OyBpKyspIHsKKwkJCWlmICghZC0+aHdkZXNjW2ldLmNwcGk1X2Rlc2NfdmFkZHIpCisJCQkJ Y29udGludWU7CisKKwkJCWRtYV9wb29sX2ZyZWUodWMtPmhkZXNjX3Bvb2wsCisJCQkJICAgICAg ZC0+aHdkZXNjW2ldLmNwcGk1X2Rlc2NfdmFkZHIsCisJCQkJICAgICAgZC0+aHdkZXNjW2ldLmNw cGk1X2Rlc2NfcGFkZHIpOworCisJCQlkLT5od2Rlc2NbaV0uY3BwaTVfZGVzY192YWRkciA9IE5V TEw7CisJCX0KKwl9IGVsc2UgaWYgKGQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyKSB7CisJ CXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisKKwkJZG1hX2ZyZWVfY29oZXJlbnQodWQt PmRldiwgZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2Nfc2l6ZSwKKwkJCQkgIGQtPmh3ZGVzY1swXS5j cHBpNV9kZXNjX3ZhZGRyLAorCQkJCSAgZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfcGFkZHIpOwor CisJCWQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyID0gTlVMTDsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIHVkbWFfcHVyZ2VfZGVzY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sK KwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdWQpLCBw dXJnZV93b3JrKTsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQsICpfdmQ7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWQt PmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJnVkLT5kZXNjX3RvX3B1cmdl LCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWQtPmxvY2ssIGZsYWdzKTsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2ZCwgX3ZkLCAmaGVhZCwgbm9kZSkgeworCQlzdHJ1 Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbih2ZC0+dHguY2hhbik7CisJCXN0cnVjdCB1 ZG1hX2Rlc2MgKmQgPSB0b191ZG1hX2Rlc2MoJnZkLT50eCk7CisKKwkJdWRtYV9mcmVlX2h3ZGVz Yyh1YywgZCk7CisJCWxpc3RfZGVsKCZ2ZC0+bm9kZSk7CisJCWtmcmVlKGQpOworCX0KKworCS8q IElmIG1vcmUgdG8gcHVyZ2UsIHNjaGVkdWxlIHRoZSB3b3JrIGFnYWluICovCisJaWYgKCFsaXN0 X2VtcHR5KCZ1ZC0+ZGVzY190b19wdXJnZSkpCisJCXNjaGVkdWxlX3dvcmsoJnVkLT5wdXJnZV93 b3JrKTsKK30KKworc3RhdGljIHZvaWQgdWRtYV9kZXNjX2ZyZWUoc3RydWN0IHZpcnRfZG1hX2Rl c2MgKnZkKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB0b191ZG1hX2Rldih2ZC0+dHguY2hh bi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbih2ZC0+dHgu Y2hhbik7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYygmdmQtPnR4KTsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVjLT50ZXJtaW5hdGVkX2Rlc2MgPT0gZCkKKwkJ dWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisKKwlpZiAodWMtPnVzZV9kbWFfcG9vbCkgewor CQl1ZG1hX2ZyZWVfaHdkZXNjKHVjLCBkKTsKKwkJa2ZyZWUoZCk7CisJCXJldHVybjsKKwl9CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmdWQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZ2 ZC0+bm9kZSwgJnVkLT5kZXNjX3RvX3B1cmdlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1 ZC0+bG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmdWQtPnB1cmdlX3dvcmspOworfQor CitzdGF0aWMgYm9vbCB1ZG1hX2lzX2NoYW5fcnVubmluZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykK K3sKKwl1MzIgdHJ0X2N0bCA9IDA7CisJdTMyIHJydF9jdGwgPSAwOworCisJaWYgKHVjLT50Y2hh bikKKwkJdHJ0X2N0bCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9S VF9DVExfUkVHKTsKKwlpZiAodWMtPnJjaGFuKQorCQlycnRfY3RsID0gdWRtYV9yY2hhbnJ0X3Jl YWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcpOworCisJaWYgKHRydF9jdGwgJiBV RE1BX0NIQU5fUlRfQ1RMX0VOIHx8IHJydF9jdGwgJiBVRE1BX0NIQU5fUlRfQ1RMX0VOKQorCQly ZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgdWRtYV9zeW5j X2Zvcl9kZXZpY2Uoc3RydWN0IHVkbWFfY2hhbiAqdWMsIGludCBpZHgpCit7CisJc3RydWN0IHVk bWFfZGVzYyAqZCA9IHVjLT5kZXNjOworCisJaWYgKHVjLT5jeWNsaWMgJiYgdWMtPnBrdF9tb2Rl KSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVjLT51ZC0+ZGV2LAorCQkJCQkgICBk LT5od2Rlc2NbaWR4XS5jcHBpNV9kZXNjX3BhZGRyLAorCQkJCQkgICBkLT5od2Rlc2NbaWR4XS5j cHBpNV9kZXNjX3NpemUsCisJCQkJCSAgIERNQV9UT19ERVZJQ0UpOworCX0gZWxzZSB7CisJCWlu dCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBkLT5od2Rlc2NfY291bnQ7IGkrKykgeworCQkJaWYg KCFkLT5od2Rlc2NbaV0uY3BwaTVfZGVzY192YWRkcikKKwkJCQljb250aW51ZTsKKworCQkJZG1h X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodWMtPnVkLT5kZXYsCisJCQkJCQlkLT5od2Rlc2NbaV0u Y3BwaTVfZGVzY19wYWRkciwKKwkJCQkJCWQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3NpemUsCisJ CQkJCQlETUFfVE9fREVWSUNFKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB1ZG1hX3B1c2hf dG9fcmluZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgdWRtYV9k ZXNjICpkID0gdWMtPmRlc2M7CisKKwlzdHJ1Y3QgazNfcmluZyAqcmluZyA9IE5VTEw7CisJaW50 IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9f TUVNOgorCQlyaW5nID0gdWMtPnJjaGFuLT5mZF9yaW5nOworCQlicmVhazsKKwljYXNlIERNQV9N RU1fVE9fREVWOgorCWNhc2UgRE1BX01FTV9UT19NRU06CisJCXJpbmcgPSB1Yy0+dGNoYW4tPnRf cmluZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJpbmcpIHsK KwkJZG1hX2FkZHJfdCBkZXNjX2FkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVzY19wYWRkcihkLCBp ZHgpOworCisJCXdtYigpOyAvKiBFbnN1cmUgdGhhdCB3cml0ZXMgYXJlIG5vdCBtb3ZlZCBvdmVy IHRoaXMgcG9pbnQgKi8KKwkJdWRtYV9zeW5jX2Zvcl9kZXZpY2UodWMsIGlkeCk7CisJCXJldCA9 IGszX3JpbmdhY2NfcmluZ19wdXNoKHJpbmcsICZkZXNjX2FkZHIpOworCQl1Yy0+aW5fcmluZ19j bnQrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfcG9wX2Zyb21f cmluZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgZG1hX2FkZHJfdCAqYWRkcikKK3sKKwlzdHJ1Y3Qg azNfcmluZyAqcmluZyA9IE5VTEw7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwlzd2l0Y2ggKHVj LT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlyaW5nID0gdWMtPnJjaGFuLT5yX3Jp bmc7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJY2FzZSBETUFfTUVNX1RPX01F TToKKwkJcmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YnJlYWs7CisJfQorCisJaWYgKHJpbmcgJiYgazNfcmluZ2FjY19yaW5nX2dldF9vY2MocmluZykp IHsKKwkJc3RydWN0IHVkbWFfZGVzYyAqZCA9IE5VTEw7CisKKwkJcmV0ID0gazNfcmluZ2FjY19y aW5nX3BvcChyaW5nLCBhZGRyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyog VGVhcmRvd24gY29tcGxldGlvbiAqLworCQlpZiAoY3BwaTVfZGVzY19pc190ZGNtKCphZGRyKSkK KwkJCXJldHVybiByZXQ7CisKKwkJZCA9IHVkbWFfdWRtYV9kZXNjX2Zyb21fcGFkZHIodWMsICph ZGRyKTsKKworCQlpZiAoZCkKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVjLT51ZC0+ZGV2 LCAqYWRkciwKKwkJCQkJCWQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3NpemUsCisJCQkJCQlETUFf RlJPTV9ERVZJQ0UpOworCQlybWIoKTsgLyogRW5zdXJlIHRoYXQgcmVhZHMgYXJlIG5vdCBtb3Zl ZCBiZWZvcmUgdGhpcyBwb2ludCAqLworCisJCWlmICghcmV0KQorCQkJdWMtPmluX3JpbmdfY250 LS07CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9yZXNldF9yaW5n cyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgazNfcmluZyAqcmluZzEgPSBOVUxM OworCXN0cnVjdCBrM19yaW5nICpyaW5nMiA9IE5VTEw7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsK KwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlpZiAodWMtPnJjaGFuKSB7CisJCQlyaW5nMSA9IHVj LT5yY2hhbi0+ZmRfcmluZzsKKwkJCXJpbmcyID0gdWMtPnJjaGFuLT5yX3Jpbmc7CisJCX0KKwkJ YnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQlp ZiAodWMtPnRjaGFuKSB7CisJCQlyaW5nMSA9IHVjLT50Y2hhbi0+dF9yaW5nOworCQkJcmluZzIg PSB1Yy0+dGNoYW4tPnRjX3Jpbmc7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7 CisJfQorCisJaWYgKHJpbmcxKQorCQlrM19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKHJpbmcxLAor CQkJCQkgIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcxKSk7CisJaWYgKHJpbmcyKQorCQlr M19yaW5nYWNjX3JpbmdfcmVzZXQocmluZzIpOworCisJLyogbWFrZSBzdXJlIHdlIGFyZSBub3Qg bGVha2luZyBtZW1vcnkgYnkgc3RhbGxlZCBkZXNjcmlwdG9yICovCisJaWYgKHVjLT50ZXJtaW5h dGVkX2Rlc2MpIHsKKwkJdWRtYV9kZXNjX2ZyZWUoJnVjLT50ZXJtaW5hdGVkX2Rlc2MtPnZkKTsK KwkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJfQorCisJdWMtPmluX3JpbmdfY250ID0g MDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9yZXNldF9jb3VudGVycyhzdHJ1Y3QgdWRtYV9jaGFu ICp1YykKK3sKKwl1MzIgdmFsOworCisJaWYgKHVjLT50Y2hhbikgeworCQl2YWwgPSB1ZG1hX3Rj aGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQkNOVF9SRUcpOworCQl1ZG1hX3Rj aGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0JDTlRfUkVHLCB2YWwpOworCisJ CXZhbCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9TQkNOVF9S RUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1NCQ05U X1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFf VENIQU5fUlRfUENOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1B X1RDSEFOX1JUX1BDTlRfUkVHLCB2YWwpOworCisJCXZhbCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVj LT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVHKTsKKwkJdWRtYV90Y2hhbnJ0X3dy aXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVHLCB2YWwpOworCX0KKwor CWlmICh1Yy0+cmNoYW4pIHsKKwkJdmFsID0gdWRtYV9yY2hhbnJ0X3JlYWQodWMtPnJjaGFuLCBV RE1BX1JDSEFOX1JUX0JDTlRfUkVHKTsKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwg VURNQV9SQ0hBTl9SVF9CQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3JjaGFucnRfcmVh ZCh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfU0JDTlRfUkVHKTsKKwkJdWRtYV9yY2hhbnJ0X3dy aXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9TQkNOVF9SRUcsIHZhbCk7CisKKwkJdmFsID0g dWRtYV9yY2hhbnJ0X3JlYWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX1BDTlRfUkVHKTsKKwkJ dWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9QQ05UX1JFRywgdmFs KTsKKworCQl2YWwgPSB1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRf UEVFUl9CQ05UX1JFRyk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNI QU5fUlRfUEVFUl9CQ05UX1JFRywgdmFsKTsKKwl9CisKKwl1Yy0+YmNudCA9IDA7Cit9CisKK3N0 YXRpYyBpbnQgdWRtYV9yZXNldF9jaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjLCBib29sIGhhcmQp Cit7CisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJdWRtYV9y Y2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRywgMCk7 CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfQ1RMX1JFRywg MCk7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJCXVkbWFfdGNoYW5ydF93cml0 ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywgMCk7CisJCXVkbWFfdGNoYW5ydF93 cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVFUl9SVF9FTl9SRUcsIDApOworCQlicmVh azsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFu LCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsIDApOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRj aGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXNldCBhbGwgY291bnRlcnMgKi8KKwl1ZG1hX3Jl c2V0X2NvdW50ZXJzKHVjKTsKKworCS8qIEhhcmQgcmVzZXQ6IHJlLWluaXRpYWxpemUgdGhlIGNo YW5uZWwgdG8gcmVzZXQgKi8KKwlpZiAoaGFyZCkgeworCQlzdHJ1Y3QgdWRtYV9jaGFuIHVjX2Jh Y2t1cCA9ICp1YzsKKwkJaW50IHJldDsKKworCQl1Yy0+dWQtPmRkZXYuZGV2aWNlX2ZyZWVfY2hh bl9yZXNvdXJjZXMoJnVjLT52Yy5jaGFuKTsKKwkJLyogcmVzdG9yZSB0aGUgY2hhbm5lbCBjb25m aWd1cmF0aW9uICovCisJCXVjLT5kaXIgPSB1Y19iYWNrdXAuZGlyOworCQl1Yy0+cmVtb3RlX3Ro cmVhZF9pZCA9IHVjX2JhY2t1cC5yZW1vdGVfdGhyZWFkX2lkOworCQl1Yy0+cGt0X21vZGUgPSB1 Y19iYWNrdXAucGt0X21vZGU7CisJCXVjLT5zdGF0aWNfdHJfdHlwZSA9IHVjX2JhY2t1cC5zdGF0 aWNfdHJfdHlwZTsKKwkJdWMtPmVuYWJsZV9hY2MzMiA9IHVjX2JhY2t1cC5lbmFibGVfYWNjMzI7 CisJCXVjLT5lbmFibGVfYnVyc3QgPSB1Y19iYWNrdXAuZW5hYmxlX2J1cnN0OworCQl1Yy0+Y2hh bm5lbF90cGwgPSB1Y19iYWNrdXAuY2hhbm5lbF90cGw7CisJCXVjLT5wc2Rfc2l6ZSA9IHVjX2Jh Y2t1cC5wc2Rfc2l6ZTsKKwkJdWMtPm1ldGFkYXRhX3NpemUgPSB1Y19iYWNrdXAubWV0YWRhdGFf c2l6ZTsKKwkJdWMtPmhkZXNjX3NpemUgPSB1Y19iYWNrdXAuaGRlc2Nfc2l6ZTsKKwkJdWMtPm5v dGRwa3QgPSB1Y19iYWNrdXAubm90ZHBrdDsKKworCQlyZXQgPSB1Yy0+dWQtPmRkZXYuZGV2aWNl X2FsbG9jX2NoYW5fcmVzb3VyY2VzKCZ1Yy0+dmMuY2hhbik7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCX0KKwl1Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfSURMRTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCB1ZG1hX3N0YXJ0X2Rlc2Moc3RydWN0IHVkbWFfY2hhbiAqdWMp Cit7CisJaWYgKHVjLT5wa3RfbW9kZSAmJiAodWMtPmN5Y2xpYyB8fCB1Yy0+ZGlyID09IERNQV9E RVZfVE9fTUVNKSkgeworCQlpbnQgaTsKKworCQkvKiBQdXNoIGFsbCBkZXNjcmlwdG9ycyB0byBy aW5nIGZvciBwYWNrZXQgbW9kZSBjeWNsaWMgb3IgUlggKi8KKwkJZm9yIChpID0gMDsgaSA8IHVj LT5kZXNjLT5zZ2xlbjsgaSsrKQorCQkJdWRtYV9wdXNoX3RvX3JpbmcodWMsIGkpOworCX0gZWxz ZSB7CisJCXVkbWFfcHVzaF90b19yaW5nKHVjLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHVk bWFfY2hhbl9uZWVkc19yZWNvbmZpZ3VyYXRpb24oc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJ LyogT25seSBQRE1BcyBoYXZlIHN0YXRpY1RSICovCisJaWYgKCF1Yy0+c3RhdGljX3RyX3R5cGUp CisJCXJldHVybiBmYWxzZTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0aWNUUiBjb25maWd1cmF0 aW9uIGhhcyBjaGFuZ2VkIGZvciBUWCAqLworCWlmIChtZW1jbXAoJnVjLT5zdGF0aWNfdHIsICZ1 Yy0+ZGVzYy0+c3RhdGljX3RyLCBzaXplb2YodWMtPnN0YXRpY190cikpKQorCQlyZXR1cm4gdHJ1 ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCB1ZG1hX3N0YXJ0KHN0cnVjdCB1 ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCA9IHZjaGFuX25leHRf ZGVzYygmdWMtPnZjKTsKKworCWlmICghdmQpIHsKKwkJdWMtPmRlc2MgPSBOVUxMOworCQlyZXR1 cm4gLUVOT0VOVDsKKwl9CisKKwlsaXN0X2RlbCgmdmQtPm5vZGUpOworCisJdWMtPmRlc2MgPSB0 b191ZG1hX2Rlc2MoJnZkLT50eCk7CisKKwkvKiBDaGFubmVsIGlzIGFscmVhZHkgcnVubmluZyBh bmQgZG9lcyBub3QgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi8KKwlpZiAodWRtYV9pc19jaGFuX3J1 bm5pbmcodWMpICYmICF1ZG1hX2NoYW5fbmVlZHNfcmVjb25maWd1cmF0aW9uKHVjKSkgeworCQl1 ZG1hX3N0YXJ0X2Rlc2ModWMpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhh dCB3ZSBjbGVhciB0aGUgdGVhcmRvd24gYml0LCBpZiBpdCBpcyBzZXQgKi8KKwl1ZG1hX3Jlc2V0 X2NoYW4odWMsIGZhbHNlKTsKKworCS8qIFB1c2ggZGVzY3JpcHRvcnMgYmVmb3JlIHdlIHN0YXJ0 IHRoZSBjaGFubmVsICovCisJdWRtYV9zdGFydF9kZXNjKHVjKTsKKworCXN3aXRjaCAodWMtPmRl c2MtPmRpcikgeworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJCS8qIENvbmZpZyByZW1vdGUgVFIg Ki8KKwkJaWYgKHVjLT5zdGF0aWNfdHJfdHlwZSkgeworCQkJdTMyIHZhbCA9IFBETUFfU1RBVElD X1RSX1kodWMtPmRlc2MtPnN0YXRpY190ci5lbGNudCkgfAorCQkJCSAgUERNQV9TVEFUSUNfVFJf WCh1Yy0+ZGVzYy0+c3RhdGljX3RyLmVsc2l6ZSk7CisJCQljb25zdCBzdHJ1Y3QgdWRtYV9tYXRj aF9kYXRhICptYXRjaF9kYXRhID0KKwkJCQkJCQl1Yy0+dWQtPm1hdGNoX2RhdGE7CisKKwkJCWlm ICh1Yy0+ZW5hYmxlX2FjYzMyKQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9BQ0MzMjsK KwkJCWlmICh1Yy0+ZW5hYmxlX2J1cnN0KQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9C VVJTVDsKKworCQkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwKKwkJCQlVRE1BX1JDSEFO X1JUX1BFRVJfU1RBVElDX1RSX1hZX1JFRywgdmFsKTsKKworCQkJdWRtYV9yY2hhbnJ0X3dyaXRl KHVjLT5yY2hhbiwKKwkJCQlVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHLAorCQkJ CVBETUFfU1RBVElDX1RSX1oodWMtPmRlc2MtPnN0YXRpY190ci5ic3RjbnQsCisJCQkJCQkgbWF0 Y2hfZGF0YS0+c3RhdGljdHJfel9tYXNrKSk7CisKKwkJCS8qIHNhdmUgdGhlIGN1cnJlbnQgc3Rh dGljVFIgY29uZmlndXJhdGlvbiAqLworCQkJbWVtY3B5KCZ1Yy0+c3RhdGljX3RyLCAmdWMtPmRl c2MtPnN0YXRpY190ciwKKwkJCSAgICAgICBzaXplb2YodWMtPnN0YXRpY190cikpOworCQl9CisK KwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExfUkVHLAor CQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfRU4pOworCisJCS8qIEVuYWJsZSByZW1vdGUgKi8KKwkJ dWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JF RywKKwkJCQkgICBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFKTsKKworCQlicmVhazsKKwljYXNlIERN QV9NRU1fVE9fREVWOgorCQkvKiBDb25maWcgcmVtb3RlIFRSICovCisJCWlmICh1Yy0+c3RhdGlj X3RyX3R5cGUpIHsKKwkJCXUzMiB2YWwgPSBQRE1BX1NUQVRJQ19UUl9ZKHVjLT5kZXNjLT5zdGF0 aWNfdHIuZWxjbnQpIHwKKwkJCQkgIFBETUFfU1RBVElDX1RSX1godWMtPmRlc2MtPnN0YXRpY190 ci5lbHNpemUpOworCisJCQlpZiAodWMtPmVuYWJsZV9hY2MzMikKKwkJCQl2YWwgfD0gUERNQV9T VEFUSUNfVFJfWFlfQUNDMzI7CisJCQlpZiAodWMtPmVuYWJsZV9idXJzdCkKKwkJCQl2YWwgfD0g UERNQV9TVEFUSUNfVFJfWFlfQlVSU1Q7CisKKwkJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNo YW4sCisJCQkJVURNQV9UQ0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcsIHZhbCk7CisKKwkJ CS8qIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGljVFIgY29uZmlndXJhdGlvbiAqLworCQkJbWVtY3B5 KCZ1Yy0+c3RhdGljX3RyLCAmdWMtPmRlc2MtPnN0YXRpY190ciwKKwkJCSAgICAgICBzaXplb2Yo dWMtPnN0YXRpY190cikpOworCQl9CisKKwkJLyogRW5hYmxlIHJlbW90ZSAqLworCQl1ZG1hX3Rj aGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJ CSAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUpOworCisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+ dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VO KTsKKworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3Jp dGUodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JU X0NUTF9FTik7CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRf Q1RMX1JFRywKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNf QUNUSVZFOworb3V0OgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9zdG9wKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCWVudW0gdWRtYV9jaGFuX3N0YXRlIG9sZF9zdGF0ZSA9 IHVjLT5zdGF0ZTsKKworCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19URVJNSU5BVElORzsKKwly ZWluaXRfY29tcGxldGlvbigmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisKKwlzd2l0Y2ggKHVj LT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMt PnJjaGFuLCBVRE1BX1JDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVFUl9S VF9FTl9FTkFCTEUgfAorCQkJCSAgIFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTik7CisJCWJyZWFr OworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4s IFVETUFfVENIQU5fUlRfUEVFUl9SVF9FTl9SRUcsCisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0VO QUJMRSB8CisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0ZMVVNIKTsKKwkJdWRtYV90Y2hhbnJ0X3dy aXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFfQ0hBTl9S VF9DVExfRU4gfAorCQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfVERPV04pOworCQlicmVhazsKKwlj YXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1B X1RDSEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTiB8CisJCQkJICAg VURNQV9DSEFOX1JUX0NUTF9URE9XTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVjLT5zdGF0 ZSA9IG9sZF9zdGF0ZTsKKwkJY29tcGxldGVfYWxsKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVk bWFfY3ljbGljX3BhY2tldF9lbGFwc2VkKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVj dCB1ZG1hX2Rlc2MgKmQgPSB1Yy0+ZGVzYzsKKwlzdHJ1Y3QgY3BwaTVfaG9zdF9kZXNjX3QgKmhf ZGVzYzsKKworCWhfZGVzYyA9IGQtPmh3ZGVzY1tkLT5kZXNjX2lkeF0uY3BwaTVfZGVzY192YWRk cjsKKwljcHBpNV9oZGVzY19yZXNldF90b19vcmlnaW5hbChoX2Rlc2MpOworCXVkbWFfcHVzaF90 b19yaW5nKHVjLCBkLT5kZXNjX2lkeCk7CisJZC0+ZGVzY19pZHggPSAoZC0+ZGVzY19pZHggKyAx KSAlIGQtPnNnbGVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9mZXRjaF9lcGliKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjLCBzdHJ1Y3QgdWRtYV9kZXNjICpkKQoreworCXN0cnVjdCBjcHBp NV9ob3N0X2Rlc2NfdCAqaF9kZXNjID0gZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHI7CisK KwltZW1jcHkoZC0+bWV0YWRhdGEsIGhfZGVzYy0+ZXBpYiwgZC0+bWV0YWRhdGFfc2l6ZSk7Cit9 CisKK3N0YXRpYyBib29sIHVkbWFfaXNfZGVzY19yZWFsbHlfZG9uZShzdHJ1Y3QgdWRtYV9jaGFu ICp1YywKKwkJCQkJICAgIHN0cnVjdCB1ZG1hX2Rlc2MgKmQpCit7CisJdTMyIHBlZXJfYmNudCwg YmNudDsKKworCS8qIE9ubHkgVFggdG93YXJkcyBQRE1BIGlzIGFmZmVjdGVkICovCisJaWYgKCF1 Yy0+c3RhdGljX3RyX3R5cGUgfHwgdWMtPmRpciAhPSBETUFfTUVNX1RPX0RFVikKKwkJcmV0dXJu IHRydWU7CisKKwlwZWVyX2JjbnQgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFf VENIQU5fUlRfUEVFUl9CQ05UX1JFRyk7CisJYmNudCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50 Y2hhbiwgVURNQV9UQ0hBTl9SVF9CQ05UX1JFRyk7CisKKwlpZiAocGVlcl9iY250IDwgYmNudCkK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFf Zmx1c2hfdHgoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJaWYgKHVjLT5kaXIgIT0gRE1BX01F TV9UT19ERVYpCisJCXJldHVybjsKKworCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19BQ1RJVkVf RkxVU0g7CisKKwl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NU TF9SRUcsCisJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOIHwKKwkJCSAgIFVETUFfQ0hBTl9SVF9D VExfVERPV04pOworfQorCitzdGF0aWMgdm9pZCB1ZG1hX3JpbmdfY2FsbGJhY2soc3RydWN0IHVk bWFfY2hhbiAqdWMsIGRtYV9hZGRyX3QgcGFkZHIpCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZDsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwYWRkcikKKwkJcmV0dXJuOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJnVjLT52Yy5sb2NrLCBmbGFncyk7CisKKwkvKiBUZWFyZG93biBjb21w bGV0aW9uIG1lc3NhZ2UgKi8KKwlpZiAoY3BwaTVfZGVzY19pc190ZGNtKHBhZGRyKSkgeworCQkv KiBDb21wZW5zYXRlIG91ciBpbnRlcm5hbCBwb3AvcHVzaCBjb3VudGVyICovCisJCXVjLT5pbl9y aW5nX2NudCsrOworCisJCWNvbXBsZXRlX2FsbCgmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisK KwkJaWYgKHVjLT50ZXJtaW5hdGVkX2Rlc2MpIHsKKwkJCXVkbWFfZGVzY19mcmVlKCZ1Yy0+dGVy bWluYXRlZF9kZXNjLT52ZCk7CisJCQl1Yy0+dGVybWluYXRlZF9kZXNjID0gTlVMTDsKKwkJfQor CisJCWlmICghdWMtPmRlc2MpCisJCQl1ZG1hX3N0YXJ0KHVjKTsKKworCQlpZiAodWMtPnN0YXRl ICE9IFVETUFfQ0hBTl9JU19BQ1RJVkVfRkxVU0gpCisJCQlnb3RvIG91dDsKKwkJZWxzZSBpZiAo dWMtPmRlc2MpCisJCQlwYWRkciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKHVjLT5kZXNj LAorCQkJCQkJCSAgIHVjLT5kZXNjLT5kZXNjX2lkeCk7CisJfQorCisJZCA9IHVkbWFfdWRtYV9k ZXNjX2Zyb21fcGFkZHIodWMsIHBhZGRyKTsKKworCWlmIChkKSB7CisJCWRtYV9hZGRyX3QgZGVz Y19wYWRkciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKGQsCisJCQkJCQkJCSAgIGQtPmRl c2NfaWR4KTsKKwkJaWYgKGRlc2NfcGFkZHIgIT0gcGFkZHIpIHsKKwkJCWRldl9lcnIodWMtPnVk LT5kZXYsICJub3QgbWF0Y2hpbmcgZGVzY3JpcHRvcnMhXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9 CisKKwkJaWYgKHVjLT5jeWNsaWMpIHsKKwkJCS8qIHB1c2ggdGhlIGRlc2NyaXB0b3IgYmFjayB0 byB0aGUgcmluZyAqLworCQkJaWYgKGQgPT0gdWMtPmRlc2MpIHsKKwkJCQl1ZG1hX2N5Y2xpY19w YWNrZXRfZWxhcHNlZCh1Yyk7CisJCQkJdmNoYW5fY3ljbGljX2NhbGxiYWNrKCZkLT52ZCk7CisJ CQl9CisJCX0gZWxzZSB7CisJCQlib29sIGRlc2NfZG9uZSA9IHRydWU7CisKKwkJCWlmIChkID09 IHVjLT5kZXNjKSB7CisJCQkJZGVzY19kb25lID0gdWRtYV9pc19kZXNjX3JlYWxseV9kb25lKHVj LCBkKTsKKworCQkJCWlmIChkZXNjX2RvbmUpIHsKKwkJCQkJdWMtPmJjbnQgKz0gZC0+cmVzaWR1 ZTsKKwkJCQkJdWRtYV9zdGFydCh1Yyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdWRtYV9mbHVzaF90 eCh1Yyk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChkID09IHVjLT50ZXJtaW5hdGVkX2Rlc2MpIHsK KwkJCQl1Yy0+dGVybWluYXRlZF9kZXNjID0gTlVMTDsKKwkJCX0KKworCQkJaWYgKGRlc2NfZG9u ZSkKKwkJCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJmQtPnZkKTsKKwkJfQorCX0KK291dDoKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMg dm9pZCB1ZG1hX3RyX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0 cnVjdCB1ZG1hX2Rlc2MgKmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworCWQgPSB1Yy0+ZGVzYzsKKwlpZiAoZCkgewor CQlkLT50cl9pZHggPSAoZC0+dHJfaWR4ICsgMSkgJSBkLT5zZ2xlbjsKKworCQlpZiAodWMtPmN5 Y2xpYykgeworCQkJdmNoYW5fY3ljbGljX2NhbGxiYWNrKCZkLT52ZCk7CisJCX0gZWxzZSB7CisJ CQkvKiBUT0RPOiBmaWd1cmUgb3V0IHRoZSByZWFsIGFtb3VudCBvZiBkYXRhICovCisJCQl1Yy0+ YmNudCArPSBkLT5yZXNpZHVlOworCQkJdWRtYV9zdGFydCh1Yyk7CisJCQl2Y2hhbl9jb29raWVf Y29tcGxldGUoJmQtPnZkKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVj LT52Yy5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1ZG1hX3JpbmdfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9 IGRhdGE7CisJZG1hX2FkZHJfdCBwYWRkciA9IDA7CisKKwlpZiAoIXVkbWFfcG9wX2Zyb21fcmlu Zyh1YywgJnBhZGRyKSkKKwkJdWRtYV9yaW5nX2NhbGxiYWNrKHVjLCBwYWRkcik7CisKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1ZG1hX3VkbWFfaXJxX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IGRh dGE7CisKKwl1ZG1hX3RyX2V2ZW50X2NhbGxiYWNrKHVjKTsKKworCXJldHVybiBJUlFfSEFORExF RDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuaCBiL2RyaXZlcnMvZG1h L3RpL2szLXVkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE2 MTUzZGViNzkxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuaApA QCAtMCwwICsxLDEzMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRl ZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKi8KKworI2lmbmRlZiBLM19VRE1BX0hfCisjZGVmaW5l IEszX1VETUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJvdG9jb2wuaD4K KworI2RlZmluZSBVRE1BX1BTSUxfRFNUX1RIUkVBRF9JRF9PRkZTRVQgMHg4MDAwCisKKy8qIEds b2JhbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVURNQV9SRVZfUkVHCQkJMHgwCisjZGVmaW5lIFVE TUFfUEVSRl9DVExfUkVHCQkweDQKKyNkZWZpbmUgVURNQV9FTVVfQ1RMX1JFRwkJMHg4CisjZGVm aW5lIFVETUFfUFNJTF9UT19SRUcJCTB4MTAKKyNkZWZpbmUgVURNQV9VVENfQ1RMX1JFRwkJMHgx YworI2RlZmluZSBVRE1BX0NBUF9SRUcoaSkJCQkoMHgyMCArIChpICogNCkpCisjZGVmaW5lIFVE TUFfUlhfRkxPV19JRF9GV19PRVNfUkVHCTB4ODAKKyNkZWZpbmUgVURNQV9SWF9GTE9XX0lEX0ZX X1NUQVRVU19SRUcJMHg4OAorCisvKiBUWCBjaGFuIFJUIHJlZ3MgKi8KKyNkZWZpbmUgVURNQV9U Q0hBTl9SVF9DVExfUkVHCQkweDAKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9TV1RSSUdfUkVHCTB4 OAorI2RlZmluZSBVRE1BX1RDSEFOX1JUX1NUREFUQV9SRUcJMHg4MAorCisjZGVmaW5lIFVETUFf VENIQU5fUlRfUEVFUm5fUkVHKGkpCSgweDIwMCArIChpICogMHg0KSkKKyNkZWZpbmUgVURNQV9U Q0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcJXAorCVVETUFfVENIQU5fUlRfUEVFUm5fUkVH KDApCS8qIFBTSS1MOiAweDQwMCAqLworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BFRVJfU1RBVElD X1RSX1pfUkVHCVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRygxKQkvKiBQU0ktTDogMHg0MDEg Ki8KKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVHCQlcCisJVURNQV9UQ0hBTl9S VF9QRUVSbl9SRUcoNCkJLyogUFNJLUw6IDB4NDA0ICovCisjZGVmaW5lIFVETUFfVENIQU5fUlRf UEVFUl9SVF9FTl9SRUcJCVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRyg4KQkvKiBQU0ktTDog MHg0MDggKi8KKworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHCQkweDQwMAorI2RlZmlu ZSBVRE1BX1RDSEFOX1JUX0JDTlRfUkVHCQkweDQwOAorI2RlZmluZSBVRE1BX1RDSEFOX1JUX1NC Q05UX1JFRwkJMHg0MTAKKworLyogUlggY2hhbiBSVCByZWdzICovCisjZGVmaW5lIFVETUFfUkNI QU5fUlRfQ1RMX1JFRwkJMHgwCisjZGVmaW5lIFVETUFfUkNIQU5fUlRfU1dUUklHX1JFRwkweDgK KyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9TVERBVEFfUkVHCTB4ODAKKworI2RlZmluZSBVRE1BX1JD SEFOX1JUX1BFRVJuX1JFRyhpKQkoMHgyMDAgKyAoaSAqIDB4NCkpCisjZGVmaW5lIFVETUFfUkNI QU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHCVwKKwlVRE1BX1JDSEFOX1JUX1BFRVJuX1JFRygw KQkvKiBQU0ktTDogMHg0MDAgKi8KKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSX1NUQVRJQ19U Ul9aX1JFRwlcCisJVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoMSkJLyogUFNJLUw6IDB4NDAxICov CisjZGVmaW5lIFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRwkJXAorCVVETUFfUkNIQU5fUlRf UEVFUm5fUkVHKDQpCS8qIFBTSS1MOiAweDQwNCAqLworI2RlZmluZSBVRE1BX1JDSEFOX1JUX1BF RVJfUlRfRU5fUkVHCQlcCisJVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoOCkJLyogUFNJLUw6IDB4 NDA4ICovCisKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QQ05UX1JFRwkJMHg0MDAKKyNkZWZpbmUg VURNQV9SQ0hBTl9SVF9CQ05UX1JFRwkJMHg0MDgKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9TQkNO VF9SRUcJCTB4NDEwCisKKy8qIFVETUFfVENIQU5fUlRfQ1RMX1JFRy9VRE1BX1JDSEFOX1JUX0NU TF9SRUcgKi8KKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FTgkJQklUKDMxKQorI2RlZmluZSBV RE1BX0NIQU5fUlRfQ1RMX1RET1dOCQlCSVQoMzApCisjZGVmaW5lIFVETUFfQ0hBTl9SVF9DVExf UEFVU0UJCUJJVCgyOSkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9GVERPV04JCUJJVCgyOCkK KyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9FUlJPUgkJQklUKDApCisKKy8qIFVETUFfVENIQU5f UlRfUEVFUl9SVF9FTl9SRUcvVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRyAoUFNJLUw6IDB4 NDA4KSAqLworI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFCQlCSVQoMzEpCisjZGVmaW5l IFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTglCSVQoMzApCisjZGVmaW5lIFVETUFfUEVFUl9SVF9F Tl9QQVVTRQkJQklUKDI5KQorI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fRkxVU0gJCUJJVCgyOCkK KyNkZWZpbmUgVURNQV9QRUVSX1JUX0VOX0lETEUJCUJJVCgxKQorCisvKgorICogVURNQV9UQ0hB Tl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcgLworICogVURNQV9SQ0hBTl9SVF9QRUVSX1NUQVRJ Q19UUl9YWV9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX01BU0sJCUdFTk1BU0so MjYsIDI0KQorI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YX1NISUZUCQkoMjQpCisjZGVmaW5lIFBE TUFfU1RBVElDX1RSX1lfTUFTSwkJR0VOTUFTSygxMSwgMCkKKyNkZWZpbmUgUERNQV9TVEFUSUNf VFJfWV9TSElGVAkJKDApCisKKyNkZWZpbmUgUERNQV9TVEFUSUNfVFJfWSh4KQlcCisJKCgoeCkg PDwgUERNQV9TVEFUSUNfVFJfWV9TSElGVCkgJiBQRE1BX1NUQVRJQ19UUl9ZX01BU0spCisjZGVm aW5lIFBETUFfU1RBVElDX1RSX1goeCkJXAorCSgoKHgpIDw8IFBETUFfU1RBVElDX1RSX1hfU0hJ RlQpICYgUERNQV9TVEFUSUNfVFJfWF9NQVNLKQorCisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1hZ X0FDQzMyCQlCSVQoMzApCisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1hZX0JVUlNUCQlCSVQoMzEp CisKKy8qCisgKiBVRE1BX1RDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHIC8KKyAqIFVETUFf UkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWl9SRUcKKyAqLworI2RlZmluZSBQRE1BX1NUQVRJQ19U Ul9aKHgsIG1hc2spCSgoeCkgJiAobWFzaykpCisKK3N0cnVjdCB1ZG1hX2RldjsKK3N0cnVjdCB1 ZG1hX3RjaGFuOworc3RydWN0IHVkbWFfcmNoYW47CitzdHJ1Y3QgdWRtYV9yZmxvdzsKKworZW51 bSB1ZG1hX3JtX3JhbmdlIHsKKwlSTV9SQU5HRV9UQ0hBTiA9IDAsCisJUk1fUkFOR0VfUkNIQU4s CisJUk1fUkFOR0VfUkZMT1csCisJUk1fUkFOR0VfTEFTVCwKK307CisKKy8qIENoYW5uZWwgVGhy b3VnaHB1dCBMZXZlbHMgKi8KK2VudW0gdWRtYV90cF9sZXZlbCB7CisJVURNQV9UUF9OT1JNQUwg PSAwLAorCVVETUFfVFBfSElHSCA9IDEsCisJVURNQV9UUF9VTFRSQUhJR0ggPSAyLAorCVVETUFf VFBfTEFTVCwKK307CisKK3N0cnVjdCB1ZG1hX3Rpc2NpX3JtIHsKKwljb25zdCBzdHJ1Y3QgdGlf c2NpX2hhbmRsZSAqdGlzY2k7CisJY29uc3Qgc3RydWN0IHRpX3NjaV9ybV91ZG1hcF9vcHMgKnRp c2NpX3VkbWFwX29wczsKKwl1MzIgIHRpc2NpX2Rldl9pZDsKKworCS8qIHRpc2NpIGluZm9ybWF0 aW9uIGZvciBQU0ktTCB0aHJlYWQgcGFpcmluZy91bnBhaXJpbmcgKi8KKwljb25zdCBzdHJ1Y3Qg dGlfc2NpX3JtX3BzaWxfb3BzICp0aXNjaV9wc2lsX29wczsKKwl1MzIgIHRpc2NpX25hdnNzX2Rl dl9pZDsKKworCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX3Jhbmdlc1tSTV9SQU5HRV9MQVNU XTsKK307CisKKyNlbmRpZiAvKiBLM19VRE1BX0hfICovCi0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1 bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVu bnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtp CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=