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 E9C8DC0650F for ; Tue, 30 Jul 2019 09:38:39 +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 B1BED20679 for ; Tue, 30 Jul 2019 09:38:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="CwOJQJ2g"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="YzCwIxUA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B1BED20679 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=smQHVF+5K6hf5I7F4I6FrplcsGdu2tQ9qghY4XM4IPU=; b=CwOJQJ2gCd1Cmo 0vEUdt+03VZvC9GGh3+6h0EQskuem1deSEH6UW8w3g7ShIkz5y7yVqvsI570V4//YQ1kcta4Nbt4z 4kDq5SlJl0cifqLjkhvz+hn9dqFiatrz8Pb0f47ZoaErJC6eu1qrA9UKM2ovdlUtI1b2TLyoYG1wj KOADipsqYVkb3aAcZpB40tul8zBjc26yXicUZyVDYn6MPnoQ0U6ZInzXqqAYI8VuHsmD2QdDjtp84 9oOE7Swf21e5AT2WNRF7PFl4+pyAuY1+Hh0koxuUCtNM4GM8MpMhcFRgNYTfx5lO3a5IptX3JxJ8y y47nPA+njMhrxJw22P3A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hsOad-0000rT-4v; Tue, 30 Jul 2019 09:38:39 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsOXy-0007D5-5h for linux-arm-kernel@lists.infradead.org; Tue, 30 Jul 2019 09:35:58 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x6U9Zj9g060030; Tue, 30 Jul 2019 04:35:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1564479345; bh=hinEh5EsvF42cZ8U7Jx3dR2zWGejFoE1XRqKquWTdmQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=YzCwIxUAWEZ3tNwJ03uzE6TZCI3vLyET7+ARK66XvisC72bbJLFlp/XTg2ezYNCH4 21A7LqdIE5jnWXRk+UqTsXwdT+GuTULWi8w+MThV7QDHr+Li37Wl9WCKPsYIOpz6hn KQ5z1yRXzS3Qbc8jTfDFV0dqBLH1R6GPLV0r8oiQ= Received: from DLEE100.ent.ti.com (dlee100.ent.ti.com [157.170.170.30]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x6U9Zj0k059691 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jul 2019 04:35:45 -0500 Received: from DLEE111.ent.ti.com (157.170.170.22) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 30 Jul 2019 04:35:44 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE111.ent.ti.com (157.170.170.22) 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, 30 Jul 2019 04:35:44 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x6U9YkU5027547; Tue, 30 Jul 2019 04:35:21 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v2 08/14] dmaengine: ti: New driver for K3 UDMA - split#1: defines, structs, io func Date: Tue, 30 Jul 2019 12:34:44 +0300 Message-ID: <20190730093450.12664-9-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190730093450.12664-1-peter.ujfalusi@ti.com> References: <20190730093450.12664-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-20190730_023554_502001_7A11F7D7 X-CRM114-Status: GOOD ( 20.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 QHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCAxMDQwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggfCAg MTMwICsrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDExNzAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hL3RpL2szLXVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVk bWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmU2ZDJjNGIxNzJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hL3RpL2szLXVkbWEuYwpAQCAtMCwwICsxLDEwNDAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu 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 Kwl1bnNpZ25lZCBsb25nICpyZmxvd19tYXA7CisJdW5zaWduZWQgbG9uZyAqcmZsb3dfbWFwX3Jl c2VydmVkOworCisJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuczsKKwlzdHJ1Y3QgdWRtYV9yY2hh biAqcmNoYW5zOworCXN0cnVjdCB1ZG1hX3JmbG93ICpyZmxvd3M7CisKKwlzdHJ1Y3QgdWRtYV9j aGFuICpjaGFubmVsczsKKwl1MzIgcHNpbF9iYXNlOworfTsKKworc3RydWN0IHVkbWFfaHdkZXNj IHsKKwlzaXplX3QgY3BwaTVfZGVzY19zaXplOworCXZvaWQgKmNwcGk1X2Rlc2NfdmFkZHI7CisJ ZG1hX2FkZHJfdCBjcHBpNV9kZXNjX3BhZGRyOworCisJLyogVFIgZGVzY3JpcHRvciBpbnRlcm5h bCBwb2ludGVycyAqLworCXZvaWQgKnRyX3JlcV9iYXNlOworCXN0cnVjdCBjcHBpNV90cl9yZXNw X3QgKnRyX3Jlc3BfYmFzZTsKK307CisKK3N0cnVjdCB1ZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0 X2RtYV9kZXNjIHZkOworCisJYm9vbCB0ZXJtaW5hdGVkOworCisJZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpcjsKKworCXN0cnVjdCB1ZG1hX3N0YXRpY190ciBzdGF0aWNfdHI7CisJdTMy IHJlc2lkdWU7CisKKwl1bnNpZ25lZCBpbnQgc2dsZW47CisJdW5zaWduZWQgaW50IGRlc2NfaWR4 OyAvKiBPbmx5IHVzZWQgZm9yIGN5Y2xpYyBpbiBwYWNrZXQgbW9kZSAqLworCXVuc2lnbmVkIGlu dCB0cl9pZHg7CisKKwl1MzIgbWV0YWRhdGFfc2l6ZTsKKwl2b2lkICptZXRhZGF0YTsgLyogcG9p bnRlciB0byBwcm92aWRlZCBtZXRhZGF0YSBidWZmZXIgKEVQSVAsIFBTZGF0YSkgKi8KKworCXVu c2lnbmVkIGludCBod2Rlc2NfY291bnQ7CisJc3RydWN0IHVkbWFfaHdkZXNjIGh3ZGVzY1swXTsK K307CisKK2VudW0gdWRtYV9jaGFuX3N0YXRlIHsKKwlVRE1BX0NIQU5fSVNfSURMRSA9IDAsIC8q IG5vdCBhY3RpdmUsIG5vIHRlYXJkb3duIGlzIGluIHByb2dyZXNzICovCisJVURNQV9DSEFOX0lT X0FDVElWRSwgLyogTm9ybWFsIG9wZXJhdGlvbiAqLworCVVETUFfQ0hBTl9JU19BQ1RJVkVfRkxV U0gsIC8qIEZsdXNoaW5nIGZvciBkZWxheWVkIHR4ICovCisJVURNQV9DSEFOX0lTX1RFUk1JTkFU SU5HLCAvKiBjaGFubmVsIGlzIGJlaW5nIHRlcm1pbmF0ZWQgKi8KK307CisKK3N0cnVjdCB1ZG1h X2NoYW4geworCXN0cnVjdCB2aXJ0X2RtYV9jaGFuIHZjOworCXN0cnVjdCBkbWFfc2xhdmVfY29u ZmlnCWNmZzsKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmRlc2M7 CisJc3RydWN0IHVkbWFfZGVzYyAqdGVybWluYXRlZF9kZXNjOworCXN0cnVjdCB1ZG1hX3N0YXRp Y190ciBzdGF0aWNfdHI7CisJY2hhciAqbmFtZTsKKworCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hh bjsKKwlzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW47CisJc3RydWN0IHVkbWFfcmZsb3cgKnJmbG93 OworCisJYm9vbCBwc2lsX3BhaXJlZDsKKworCWludCBpcnFfbnVtX3Jpbmc7CisJaW50IGlycV9u dW1fdWRtYTsKKworCWJvb2wgY3ljbGljOworCWJvb2wgcGF1c2VkOworCisJZW51bSB1ZG1hX2No YW5fc3RhdGUgc3RhdGU7CisJc3RydWN0IGNvbXBsZXRpb24gdGVhcmRvd25fY29tcGxldGVkOwor CisJdTMyIGJjbnQ7IC8qIG51bWJlciBvZiBieXRlcyBjb21wbGV0ZWQgc2luY2UgdGhlIHN0YXJ0 IG9mIHRoZSBjaGFubmVsICovCisJdTMyIGluX3JpbmdfY250OyAvKiBudW1iZXIgb2YgZGVzY3Jp cHRvcnMgaW4gZmxpZ2h0ICovCisKKwlib29sIHBrdF9tb2RlOyAvKiBUUiBvciBwYWNrZXQgKi8K Kwlib29sIG5lZWRzX2VwaWI7IC8qIEVQSUIgaXMgbmVlZGVkIGZvciB0aGUgY29tbXVuaWNhdGlv biBvciBub3QgKi8KKwl1MzIgcHNkX3NpemU7IC8qIHNpemUgb2YgUHJvdG9jb2wgU3BlY2lmaWMg RGF0YSAqLworCXUzMiBtZXRhZGF0YV9zaXplOyAvKiAobmVlZHNfZXBpYiA/IDE2OjApICsgcHNk X3NpemUgKi8KKwl1MzIgaGRlc2Nfc2l6ZTsgLyogU2l6ZSBvZiBhIHBhY2tldCBkZXNjcmlwdG9y IGluIHBhY2tldCBtb2RlICovCisJaW50IHJlbW90ZV90aHJlYWRfaWQ7CisJdTMyIHNyY190aHJl YWQ7CisJdTMyIGRzdF90aHJlYWQ7CisJdTMyIHN0YXRpY190cl90eXBlOworCWJvb2wgZW5hYmxl X2FjYzMyOworCWJvb2wgZW5hYmxlX2J1cnN0OworCWVudW0gdWRtYV90cF9sZXZlbCBjaGFubmVs X3RwbDsgLyogQ2hhbm5lbCBUaHJvdWdocHV0IExldmVsICovCisKKwkvKiBkbWFwb29sIGZvciBw YWNrZXQgbW9kZSBkZXNjcmlwdG9ycyAqLworCWJvb2wgdXNlX2RtYV9wb29sOworCXN0cnVjdCBk bWFfcG9vbCAqaGRlc2NfcG9vbDsKKworCXUzMiBpZDsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJl Y3Rpb24gZGlyOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9kZXYgKnRvX3VkbWFf ZGV2KHN0cnVjdCBkbWFfZGV2aWNlICpkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3Ry dWN0IHVkbWFfZGV2LCBkZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRtYV9jaGFu ICp0b191ZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjKQoreworCXJldHVybiBjb250YWluZXJf b2YoYywgc3RydWN0IHVkbWFfY2hhbiwgdmMuY2hhbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHVkbWFfZGVzYyAqdG9fdWRtYV9kZXNjKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRv ciAqdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHQsIHN0cnVjdCB1ZG1hX2Rlc2MsIHZkLnR4 KTsKK30KKworLyogR2VuZXJpYyByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCitzdGF0aWMg aW5saW5lIHUzMiB1ZG1hX3JlYWQodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVnKQoreworCXJl dHVybiBfX3Jhd19yZWFkbChiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVk bWFfd3JpdGUodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgcmVnLCB1MzIgdmFsKQoreworCV9fcmF3 X3dyaXRlbCh2YWwsIGJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV91 cGRhdGVfYml0cyh2b2lkIF9faW9tZW0gKmJhc2UsIGludCByZWcsCisJCQkJICAgIHUzMiBtYXNr LCB1MzIgdmFsKQoreworCXUzMiB0bXAsIG9yaWc7CisKKwlvcmlnID0gX19yYXdfcmVhZGwoYmFz ZSArIHJlZyk7CisJdG1wID0gb3JpZyAmIH5tYXNrOworCXRtcCB8PSAodmFsICYgbWFzayk7CisK KwlpZiAodG1wICE9IG9yaWcpCisJCV9fcmF3X3dyaXRlbCh0bXAsIGJhc2UgKyByZWcpOworfQor CisvKiBUQ0hBTlJUICovCitzdGF0aWMgaW5saW5lIHUzMiB1ZG1hX3RjaGFucnRfcmVhZChzdHJ1 Y3QgdWRtYV90Y2hhbiAqdGNoYW4sIGludCByZWcpCit7CisJaWYgKCF0Y2hhbikKKwkJcmV0dXJu IDA7CisJcmV0dXJuIHVkbWFfcmVhZCh0Y2hhbi0+cmVnX3J0LCByZWcpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgdWRtYV90Y2hhbnJ0X3dyaXRlKHN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbiwg aW50IHJlZywKKwkJCQkgICAgICB1MzIgdmFsKQoreworCWlmICghdGNoYW4pCisJCXJldHVybjsK Kwl1ZG1hX3dyaXRlKHRjaGFuLT5yZWdfcnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIHVkbWFfdGNoYW5ydF91cGRhdGVfYml0cyhzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4s IGludCByZWcsCisJCQkJCSAgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlpZiAoIXRjaGFuKQor CQlyZXR1cm47CisJdWRtYV91cGRhdGVfYml0cyh0Y2hhbi0+cmVnX3J0LCByZWcsIG1hc2ssIHZh bCk7Cit9CisKKy8qIFJDSEFOUlQgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHVkbWFfcmNoYW5ydF9y ZWFkKHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiwgaW50IHJlZykKK3sKKwlpZiAoIXJjaGFuKQor CQlyZXR1cm4gMDsKKwlyZXR1cm4gdWRtYV9yZWFkKHJjaGFuLT5yZWdfcnQsIHJlZyk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCB1ZG1hX3JjaGFucnRfd3JpdGUoc3RydWN0IHVkbWFfcmNoYW4g KnJjaGFuLCBpbnQgcmVnLAorCQkJCSAgICAgIHUzMiB2YWwpCit7CisJaWYgKCFyY2hhbikKKwkJ cmV0dXJuOworCXVkbWFfd3JpdGUocmNoYW4tPnJlZ19ydCwgcmVnLCB2YWwpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgdWRtYV9yY2hhbnJ0X3VwZGF0ZV9iaXRzKHN0cnVjdCB1ZG1hX3JjaGFu ICpyY2hhbiwgaW50IHJlZywKKwkJCQkJICAgIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCWlmICgh cmNoYW4pCisJCXJldHVybjsKKwl1ZG1hX3VwZGF0ZV9iaXRzKHJjaGFuLT5yZWdfcnQsIHJlZywg bWFzaywgdmFsKTsKK30KKworc3RhdGljIGludCBuYXZzc19wc2lsX3BhaXIoc3RydWN0IHVkbWFf ZGV2ICp1ZCwgdTMyIHNyY190aHJlYWQsIHUzMiBkc3RfdGhyZWFkKQoreworCXN0cnVjdCB1ZG1h X3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisKKwlkc3RfdGhyZWFkIHw9IFVE TUFfUFNJTF9EU1RfVEhSRUFEX0lEX09GRlNFVDsKKwlyZXR1cm4gdGlzY2lfcm0tPnRpc2NpX3Bz aWxfb3BzLT5wYWlyKHRpc2NpX3JtLT50aXNjaSwKKwkJCQkJICAgICAgdGlzY2lfcm0tPnRpc2Np X25hdnNzX2Rldl9pZCwKKwkJCQkJICAgICAgc3JjX3RocmVhZCwgZHN0X3RocmVhZCk7Cit9CisK K3N0YXRpYyBpbnQgbmF2c3NfcHNpbF91bnBhaXIoc3RydWN0IHVkbWFfZGV2ICp1ZCwgdTMyIHNy Y190aHJlYWQsCisJCQkgICAgIHUzMiBkc3RfdGhyZWFkKQoreworCXN0cnVjdCB1ZG1hX3Rpc2Np X3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisKKwlkc3RfdGhyZWFkIHw9IFVETUFfUFNJ TF9EU1RfVEhSRUFEX0lEX09GRlNFVDsKKwlyZXR1cm4gdGlzY2lfcm0tPnRpc2NpX3BzaWxfb3Bz LT51bnBhaXIodGlzY2lfcm0tPnRpc2NpLAorCQkJCQkJdGlzY2lfcm0tPnRpc2NpX25hdnNzX2Rl dl9pZCwKKwkJCQkJCXNyY190aHJlYWQsIGRzdF90aHJlYWQpOworfQorCitzdGF0aWMgY2hhciAq dWRtYV9nZXRfZGlyX3RleHQoZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcikKK3sKKwlz d2l0Y2ggKGRpcikgeworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJCXJldHVybiAiREVWX1RPX01F TSI7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwkJcmV0dXJuICJNRU1fVE9fREVWIjsKKwljYXNl IERNQV9NRU1fVE9fTUVNOgorCQlyZXR1cm4gIk1FTV9UT19NRU0iOworCWNhc2UgRE1BX0RFVl9U T19ERVY6CisJCXJldHVybiAiREVWX1RPX0RFViI7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor CisJcmV0dXJuICJpbnZhbGlkIjsKK30KKworc3RhdGljIHZvaWQgdWRtYV9kdW1wX2NoYW5fc3Rk YXRhKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVjLT51 ZC0+ZGV2OworCXUzMiBvZmZzZXQ7CisJaW50IGk7CisKKwlpZiAodWMtPmRpciA9PSBETUFfTUVN X1RPX0RFViB8fCB1Yy0+ZGlyID09IERNQV9NRU1fVE9fTUVNKSB7CisJCWRldl9kYmcoZGV2LCAi VENIQU4gU3RhdGUgZGF0YTpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJ b2Zmc2V0ID0gVURNQV9UQ0hBTl9SVF9TVERBVEFfUkVHICsgaSAqIDQ7CisJCQlkZXZfZGJnKGRl diwgIlRSVF9TVERBVEFbJTAyZF06IDB4JTA4eFxuIiwgaSwKKwkJCQl1ZG1hX3RjaGFucnRfcmVh ZCh1Yy0+dGNoYW4sIG9mZnNldCkpOworCQl9CisJfQorCisJaWYgKHVjLT5kaXIgPT0gRE1BX0RF Vl9UT19NRU0gfHwgdWMtPmRpciA9PSBETUFfTUVNX1RPX01FTSkgeworCQlkZXZfZGJnKGRldiwg IlJDSEFOIFN0YXRlIGRhdGE6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJ CW9mZnNldCA9IFVETUFfUkNIQU5fUlRfU1REQVRBX1JFRyArIGkgKiA0OworCQkJZGV2X2RiZyhk ZXYsICJSUlRfU1REQVRBWyUwMmRdOiAweCUwOHhcbiIsIGksCisJCQkJdWRtYV9yY2hhbnJ0X3Jl YWQodWMtPnJjaGFuLCBvZmZzZXQpKTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSBkbWFf YWRkcl90IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKHN0cnVjdCB1ZG1hX2Rlc2MgKmQsCisJ CQkJCQkgICAgaW50IGlkeCkKK3sKKwlyZXR1cm4gZC0+aHdkZXNjW2lkeF0uY3BwaTVfZGVzY19w YWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkICp1ZG1hX2N1cnJfY3BwaTVfZGVzY192YWRk cihzdHJ1Y3QgdWRtYV9kZXNjICpkLCBpbnQgaWR4KQoreworCXJldHVybiBkLT5od2Rlc2NbaWR4 XS5jcHBpNV9kZXNjX3ZhZGRyOworfQorCitzdGF0aWMgc3RydWN0IHVkbWFfZGVzYyAqdWRtYV91 ZG1hX2Rlc2NfZnJvbV9wYWRkcihzdHJ1Y3QgdWRtYV9jaGFuICp1YywKKwkJCQkJCSAgIGRtYV9h ZGRyX3QgcGFkZHIpCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHVjLT50ZXJtaW5hdGVkX2Rl c2M7CisKKwlpZiAoZCkgeworCQlkbWFfYWRkcl90IGRlc2NfcGFkZHIgPSB1ZG1hX2N1cnJfY3Bw aTVfZGVzY19wYWRkcihkLAorCQkJCQkJCQkgICBkLT5kZXNjX2lkeCk7CisKKwkJaWYgKGRlc2Nf cGFkZHIgIT0gcGFkZHIpCisJCQlkID0gTlVMTDsKKwl9CisKKwlpZiAoIWQpIHsKKwkJZCA9IHVj LT5kZXNjOworCQlpZiAoZCkgeworCQkJZG1hX2FkZHJfdCBkZXNjX3BhZGRyID0gdWRtYV9jdXJy X2NwcGk1X2Rlc2NfcGFkZHIoZCwKKwkJCQkJCQkJZC0+ZGVzY19pZHgpOworCisJCQlpZiAoZGVz Y19wYWRkciAhPSBwYWRkcikKKwkJCQlkID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBkOwor fQorCitzdGF0aWMgdm9pZCB1ZG1hX2ZyZWVfaHdkZXNjKHN0cnVjdCB1ZG1hX2NoYW4gKnVjLCBz dHJ1Y3QgdWRtYV9kZXNjICpkKQoreworCWlmICh1Yy0+dXNlX2RtYV9wb29sKSB7CisJCWludCBp OworCisJCWZvciAoaSA9IDA7IGkgPCBkLT5od2Rlc2NfY291bnQ7IGkrKykgeworCQkJaWYgKCFk LT5od2Rlc2NbaV0uY3BwaTVfZGVzY192YWRkcikKKwkJCQljb250aW51ZTsKKworCQkJZG1hX3Bv b2xfZnJlZSh1Yy0+aGRlc2NfcG9vbCwKKwkJCQkgICAgICBkLT5od2Rlc2NbaV0uY3BwaTVfZGVz Y192YWRkciwKKwkJCQkgICAgICBkLT5od2Rlc2NbaV0uY3BwaTVfZGVzY19wYWRkcik7CisKKwkJ CWQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3ZhZGRyID0gTlVMTDsKKwkJfQorCX0gZWxzZSBpZiAo ZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHIpIHsKKwkJc3RydWN0IHVkbWFfZGV2ICp1ZCA9 IHVjLT51ZDsKKworCQlkbWFfZnJlZV9jb2hlcmVudCh1ZC0+ZGV2LCBkLT5od2Rlc2NbMF0uY3Bw aTVfZGVzY19zaXplLAorCQkJCSAgZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHIsCisJCQkJ ICBkLT5od2Rlc2NbMF0uY3BwaTVfZGVzY19wYWRkcik7CisKKwkJZC0+aHdkZXNjWzBdLmNwcGk1 X2Rlc2NfdmFkZHIgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgdWRtYV9wdXJnZV9kZXNj X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQg PSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp1ZCksIHB1cmdlX3dvcmspOworCXN0cnVjdCB2 aXJ0X2RtYV9kZXNjICp2ZCwgKl92ZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVB RChoZWFkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZC0+bG9jaywgZmxhZ3MpOworCWxpc3Rf c3BsaWNlX3RhaWxfaW5pdCgmdWQtPmRlc2NfdG9fcHVyZ2UsICZoZWFkKTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ1ZC0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHZkLCBfdmQsICZoZWFkLCBub2RlKSB7CisJCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9f dWRtYV9jaGFuKHZkLT50eC5jaGFuKTsKKwkJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFf ZGVzYygmdmQtPnR4KTsKKworCQl1ZG1hX2ZyZWVfaHdkZXNjKHVjLCBkKTsKKwkJbGlzdF9kZWwo JnZkLT5ub2RlKTsKKwkJa2ZyZWUoZCk7CisJfQorCisJLyogSWYgbW9yZSB0byBwdXJnZSwgc2No ZWR1bGUgdGhlIHdvcmsgYWdhaW4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnVkLT5kZXNjX3RvX3B1 cmdlKSkKKwkJc2NoZWR1bGVfd29yaygmdWQtPnB1cmdlX3dvcmspOworfQorCitzdGF0aWMgdm9p ZCB1ZG1hX2Rlc2NfZnJlZShzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJc3RydWN0IHVk bWFfZGV2ICp1ZCA9IHRvX3VkbWFfZGV2KHZkLT50eC5jaGFuLT5kZXZpY2UpOworCXN0cnVjdCB1 ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKHZkLT50eC5jaGFuKTsKKwlzdHJ1Y3QgdWRtYV9k ZXNjICpkID0gdG9fdWRtYV9kZXNjKCZ2ZC0+dHgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlpZiAodWMtPnRlcm1pbmF0ZWRfZGVzYyA9PSBkKQorCQl1Yy0+dGVybWluYXRlZF9kZXNjID0g TlVMTDsKKworCWlmICh1Yy0+dXNlX2RtYV9wb29sKSB7CisJCXVkbWFfZnJlZV9od2Rlc2ModWMs IGQpOworCQlrZnJlZShkKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1 ZC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnZkLT5ub2RlLCAmdWQtPmRlc2NfdG9f cHVyZ2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkLT5sb2NrLCBmbGFncyk7CisKKwlz Y2hlZHVsZV93b3JrKCZ1ZC0+cHVyZ2Vfd29yayk7Cit9CisKK3N0YXRpYyBib29sIHVkbWFfaXNf Y2hhbl9ydW5uaW5nKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXUzMiB0cnRfY3RsID0gMDsK Kwl1MzIgcnJ0X2N0bCA9IDA7CisKKwlpZiAodWMtPnRjaGFuKQorCQl0cnRfY3RsID0gdWRtYV90 Y2hhbnJ0X3JlYWQodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcpOworCWlmICh1Yy0+ cmNoYW4pCisJCXJydF9jdGwgPSB1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4sIFVETUFfUkNI QU5fUlRfQ1RMX1JFRyk7CisKKwlpZiAodHJ0X2N0bCAmIFVETUFfQ0hBTl9SVF9DVExfRU4gfHwg cnJ0X2N0bCAmIFVETUFfQ0hBTl9SVF9DVExfRU4pCisJCXJldHVybiB0cnVlOworCisJcmV0dXJu IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB1ZG1hX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgdWRt YV9jaGFuICp1YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkID0gdWMtPmRlc2M7 CisKKwlpZiAodWMtPmN5Y2xpYyAmJiB1Yy0+cGt0X21vZGUpIHsKKwkJZG1hX3N5bmNfc2luZ2xl X2Zvcl9kZXZpY2UodWMtPnVkLT5kZXYsCisJCQkJCSAgIGQtPmh3ZGVzY1tpZHhdLmNwcGk1X2Rl c2NfcGFkZHIsCisJCQkJCSAgIGQtPmh3ZGVzY1tpZHhdLmNwcGk1X2Rlc2Nfc2l6ZSwKKwkJCQkJ ICAgRE1BX1RPX0RFVklDRSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsg aSA8IGQtPmh3ZGVzY19jb3VudDsgaSsrKSB7CisJCQlpZiAoIWQtPmh3ZGVzY1tpXS5jcHBpNV9k ZXNjX3ZhZGRyKQorCQkJCWNvbnRpbnVlOworCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2Rldmlj ZSh1Yy0+dWQtPmRldiwKKwkJCQkJCWQtPmh3ZGVzY1tpXS5jcHBpNV9kZXNjX3BhZGRyLAorCQkJ CQkJZC0+aHdkZXNjW2ldLmNwcGk1X2Rlc2Nfc2l6ZSwKKwkJCQkJCURNQV9UT19ERVZJQ0UpOwor CQl9CisJfQorfQorCitzdGF0aWMgaW50IHVkbWFfcHVzaF90b19yaW5nKHN0cnVjdCB1ZG1hX2No YW4gKnVjLCBpbnQgaWR4KQoreworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQgPSB1Yy0+ZGVzYzsKKwor CXN0cnVjdCBrM19yaW5nICpyaW5nID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXN3 aXRjaCAodWMtPmRpcikgeworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJCXJpbmcgPSB1Yy0+cmNo YW4tPmZkX3Jpbmc7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJY2FzZSBETUFf TUVNX1RPX01FTToKKwkJcmluZyA9IHVjLT50Y2hhbi0+dF9yaW5nOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocmluZykgeworCQlkbWFfYWRkcl90IGRlc2NfYWRk ciA9IHVkbWFfY3Vycl9jcHBpNV9kZXNjX3BhZGRyKGQsIGlkeCk7CisKKwkJd21iKCk7IC8qIEVu c3VyZSB0aGF0IHdyaXRlcyBhcmUgbm90IG1vdmVkIG92ZXIgdGhpcyBwb2ludCAqLworCQl1ZG1h X3N5bmNfZm9yX2RldmljZSh1YywgaWR4KTsKKwkJcmV0ID0gazNfcmluZ2FjY19yaW5nX3B1c2go cmluZywgJmRlc2NfYWRkcik7CisJCXVjLT5pbl9yaW5nX2NudCsrOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9wb3BfZnJvbV9yaW5nKHN0cnVjdCB1ZG1hX2NoYW4g KnVjLCBkbWFfYWRkcl90ICphZGRyKQoreworCXN0cnVjdCBrM19yaW5nICpyaW5nID0gTlVMTDsK KwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCXN3aXRjaCAodWMtPmRpcikgeworCWNhc2UgRE1BX0RF Vl9UT19NRU06CisJCXJpbmcgPSB1Yy0+cmNoYW4tPnJfcmluZzsKKwkJYnJlYWs7CisJY2FzZSBE TUFfTUVNX1RPX0RFVjoKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQlyaW5nID0gdWMtPnRjaGFu LT50Y19yaW5nOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocmlu ZyAmJiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhyaW5nKSkgeworCQlzdHJ1Y3QgdWRtYV9kZXNj ICpkID0gTlVMTDsKKworCQlyZXQgPSBrM19yaW5nYWNjX3JpbmdfcG9wKHJpbmcsIGFkZHIpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBUZWFyZG93biBjb21wbGV0aW9uICov CisJCWlmICgqYWRkciAmIDB4MSkKKwkJCXJldHVybiByZXQ7CisKKwkJZCA9IHVkbWFfdWRtYV9k ZXNjX2Zyb21fcGFkZHIodWMsICphZGRyKTsKKworCQlpZiAoZCkKKwkJCWRtYV9zeW5jX3Npbmds ZV9mb3JfY3B1KHVjLT51ZC0+ZGV2LCAqYWRkciwKKwkJCQkJCWQtPmh3ZGVzY1swXS5jcHBpNV9k ZXNjX3NpemUsCisJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlybWIoKTsgLyogRW5zdXJlIHRo YXQgcmVhZHMgYXJlIG5vdCBtb3ZlZCBiZWZvcmUgdGhpcyBwb2ludCAqLworCisJCWlmICghcmV0 KQorCQkJdWMtPmluX3JpbmdfY250LS07CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgdWRtYV9yZXNldF9yaW5ncyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3Qg azNfcmluZyAqcmluZzEgPSBOVUxMOworCXN0cnVjdCBrM19yaW5nICpyaW5nMiA9IE5VTEw7CisK Kwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlpZiAodWMtPnJj aGFuKSB7CisJCQlyaW5nMSA9IHVjLT5yY2hhbi0+ZmRfcmluZzsKKwkJCXJpbmcyID0gdWMtPnJj aGFuLT5yX3Jpbmc7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwljYXNl IERNQV9NRU1fVE9fTUVNOgorCQlpZiAodWMtPnRjaGFuKSB7CisJCQlyaW5nMSA9IHVjLT50Y2hh bi0+dF9yaW5nOworCQkJcmluZzIgPSB1Yy0+dGNoYW4tPnRjX3Jpbmc7CisJCX0KKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJpbmcxKQorCQlrM19yaW5nYWNjX3Jp bmdfcmVzZXRfZG1hKHJpbmcxLAorCQkJCQkgIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcx KSk7CisJaWYgKHJpbmcyKQorCQlrM19yaW5nYWNjX3JpbmdfcmVzZXQocmluZzIpOworCisJLyog bWFrZSBzdXJlIHdlIGFyZSBub3QgbGVha2luZyBtZW1vcnkgYnkgc3RhbGxlZCBkZXNjcmlwdG9y ICovCisJaWYgKHVjLT50ZXJtaW5hdGVkX2Rlc2MpIHsKKwkJdWRtYV9kZXNjX2ZyZWUoJnVjLT50 ZXJtaW5hdGVkX2Rlc2MtPnZkKTsKKwkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJfQor CisJdWMtPmluX3JpbmdfY250ID0gMDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9yZXNldF9jb3Vu dGVycyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwl1MzIgdmFsOworCisJaWYgKHVjLT50Y2hh bikgeworCQl2YWwgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRf QkNOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JU X0JDTlRfUkVHLCB2YWwpOworCisJCXZhbCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwg VURNQV9UQ0hBTl9SVF9TQkNOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFu LCBVRE1BX1RDSEFOX1JUX1NCQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3RjaGFucnRf cmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUENOVF9SRUcpOworCQl1ZG1hX3RjaGFucnRf d3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BDTlRfUkVHLCB2YWwpOworCisJCXZhbCA9 IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JDTlRfUkVH KTsKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwgVURNQV9UQ0hBTl9SVF9QRUVSX0JD TlRfUkVHLCB2YWwpOworCX0KKworCWlmICh1Yy0+cmNoYW4pIHsKKwkJdmFsID0gdWRtYV9yY2hh bnJ0X3JlYWQodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0JDTlRfUkVHKTsKKwkJdWRtYV9yY2hh bnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9CQ05UX1JFRywgdmFsKTsKKworCQl2 YWwgPSB1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfU0JDTlRfUkVH KTsKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9TQkNOVF9S RUcsIHZhbCk7CisKKwkJdmFsID0gdWRtYV9yY2hhbnJ0X3JlYWQodWMtPnJjaGFuLCBVRE1BX1JD SEFOX1JUX1BDTlRfUkVHKTsKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9S Q0hBTl9SVF9QQ05UX1JFRywgdmFsKTsKKworCQl2YWwgPSB1ZG1hX3JjaGFucnRfcmVhZCh1Yy0+ cmNoYW4sIFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRyk7CisJCXVkbWFfcmNoYW5ydF93cml0 ZSh1Yy0+cmNoYW4sIFVETUFfUkNIQU5fUlRfUEVFUl9CQ05UX1JFRywgdmFsKTsKKwl9CisKKwl1 Yy0+YmNudCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9yZXNldF9jaGFuKHN0cnVjdCB1ZG1h X2NoYW4gKnVjLCBib29sIGhhcmQpCit7CisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFf REVWX1RPX01FTToKKwkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9S VF9QRUVSX1JUX0VOX1JFRywgMCk7CisJCXVkbWFfcmNoYW5ydF93cml0ZSh1Yy0+cmNoYW4sIFVE TUFfUkNIQU5fUlRfQ1RMX1JFRywgMCk7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6 CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywg MCk7CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVFUl9S VF9FTl9SRUcsIDApOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3Jj aGFucnRfd3JpdGUodWMtPnJjaGFuLCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsIDApOworCQl1ZG1h X3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsIDApOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXNldCBhbGwg Y291bnRlcnMgKi8KKwl1ZG1hX3Jlc2V0X2NvdW50ZXJzKHVjKTsKKworCS8qIEhhcmQgcmVzZXQ6 IHJlLWluaXRpYWxpemUgdGhlIGNoYW5uZWwgdG8gcmVzZXQgKi8KKwlpZiAoaGFyZCkgeworCQlz dHJ1Y3QgdWRtYV9jaGFuIHVjX2JhY2t1cCA9ICp1YzsKKwkJaW50IHJldDsKKworCQl1Yy0+dWQt PmRkZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMoJnVjLT52Yy5jaGFuKTsKKwkJLyogcmVz dG9yZSB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJCXVjLT5kaXIgPSB1Y19iYWNrdXAu ZGlyOworCQl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9IHVjX2JhY2t1cC5yZW1vdGVfdGhyZWFkX2lk OworCQl1Yy0+cGt0X21vZGUgPSB1Y19iYWNrdXAucGt0X21vZGU7CisJCXVjLT5zdGF0aWNfdHJf dHlwZSA9IHVjX2JhY2t1cC5zdGF0aWNfdHJfdHlwZTsKKwkJdWMtPmVuYWJsZV9hY2MzMiA9IHVj X2JhY2t1cC5lbmFibGVfYWNjMzI7CisJCXVjLT5lbmFibGVfYnVyc3QgPSB1Y19iYWNrdXAuZW5h YmxlX2J1cnN0OworCQl1Yy0+Y2hhbm5lbF90cGwgPSB1Y19iYWNrdXAuY2hhbm5lbF90cGw7CisJ CXVjLT5wc2Rfc2l6ZSA9IHVjX2JhY2t1cC5wc2Rfc2l6ZTsKKwkJdWMtPm1ldGFkYXRhX3NpemUg PSB1Y19iYWNrdXAubWV0YWRhdGFfc2l6ZTsKKwkJdWMtPmhkZXNjX3NpemUgPSB1Y19iYWNrdXAu aGRlc2Nfc2l6ZTsKKworCQlyZXQgPSB1Yy0+dWQtPmRkZXYuZGV2aWNlX2FsbG9jX2NoYW5fcmVz b3VyY2VzKCZ1Yy0+dmMuY2hhbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwl1 Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfSURMRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCB1ZG1hX3N0YXJ0X2Rlc2Moc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJaWYgKHVjLT5w a3RfbW9kZSAmJiAodWMtPmN5Y2xpYyB8fCB1Yy0+ZGlyID09IERNQV9ERVZfVE9fTUVNKSkgewor CQlpbnQgaTsKKworCQkvKiBQdXNoIGFsbCBkZXNjcmlwdG9ycyB0byByaW5nIGZvciBwYWNrZXQg bW9kZSBjeWNsaWMgb3IgUlggKi8KKwkJZm9yIChpID0gMDsgaSA8IHVjLT5kZXNjLT5zZ2xlbjsg aSsrKQorCQkJdWRtYV9wdXNoX3RvX3JpbmcodWMsIGkpOworCX0gZWxzZSB7CisJCXVkbWFfcHVz aF90b19yaW5nKHVjLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHVkbWFfY2hhbl9uZWVkc19y ZWNvbmZpZ3VyYXRpb24oc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJLyogT25seSBQRE1BcyBo YXZlIHN0YXRpY1RSICovCisJaWYgKCF1Yy0+c3RhdGljX3RyX3R5cGUpCisJCXJldHVybiBmYWxz ZTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0aWNUUiBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2Vk IGZvciBUWCAqLworCWlmIChtZW1jbXAoJnVjLT5zdGF0aWNfdHIsICZ1Yy0+ZGVzYy0+c3RhdGlj X3RyLCBzaXplb2YodWMtPnN0YXRpY190cikpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIGludCB1ZG1hX3N0YXJ0KHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQor eworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCA9IHZjaGFuX25leHRfZGVzYygmdWMtPnZjKTsK KworCWlmICghdmQpIHsKKwkJdWMtPmRlc2MgPSBOVUxMOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9 CisKKwlsaXN0X2RlbCgmdmQtPm5vZGUpOworCisJdWMtPmRlc2MgPSB0b191ZG1hX2Rlc2MoJnZk LT50eCk7CisKKwkvKiBDaGFubmVsIGlzIGFscmVhZHkgcnVubmluZyBhbmQgZG9lcyBub3QgbmVl ZCByZWNvbmZpZ3VyYXRpb24gKi8KKwlpZiAodWRtYV9pc19jaGFuX3J1bm5pbmcodWMpICYmICF1 ZG1hX2NoYW5fbmVlZHNfcmVjb25maWd1cmF0aW9uKHVjKSkgeworCQl1ZG1hX3N0YXJ0X2Rlc2Mo dWMpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBjbGVhciB0aGUg dGVhcmRvd24gYml0LCBpZiBpdCBpcyBzZXQgKi8KKwl1ZG1hX3Jlc2V0X2NoYW4odWMsIGZhbHNl KTsKKworCS8qIFB1c2ggZGVzY3JpcHRvcnMgYmVmb3JlIHdlIHN0YXJ0IHRoZSBjaGFubmVsICov CisJdWRtYV9zdGFydF9kZXNjKHVjKTsKKworCXN3aXRjaCAodWMtPmRlc2MtPmRpcikgeworCWNh c2UgRE1BX0RFVl9UT19NRU06CisJCS8qIENvbmZpZyByZW1vdGUgVFIgKi8KKwkJaWYgKHVjLT5z dGF0aWNfdHJfdHlwZSkgeworCQkJdTMyIHZhbCA9IFBETUFfU1RBVElDX1RSX1kodWMtPmRlc2Mt PnN0YXRpY190ci5lbGNudCkgfAorCQkJCSAgUERNQV9TVEFUSUNfVFJfWCh1Yy0+ZGVzYy0+c3Rh dGljX3RyLmVsc2l6ZSk7CisJCQljb25zdCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9k YXRhID0KKwkJCQkJCQl1Yy0+dWQtPm1hdGNoX2RhdGE7CisKKwkJCWlmICh1Yy0+ZW5hYmxlX2Fj YzMyKQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9BQ0MzMjsKKwkJCWlmICh1Yy0+ZW5h YmxlX2J1cnN0KQorCQkJCXZhbCB8PSBQRE1BX1NUQVRJQ19UUl9YWV9CVVJTVDsKKworCQkJdWRt YV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwKKwkJCQlVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElD X1RSX1hZX1JFRywgdmFsKTsKKworCQkJdWRtYV9yY2hhbnJ0X3dyaXRlKHVjLT5yY2hhbiwKKwkJ CQlVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVHLAorCQkJCVBETUFfU1RBVElDX1RS X1oodWMtPmRlc2MtPnN0YXRpY190ci5ic3RjbnQsCisJCQkJCQkgbWF0Y2hfZGF0YS0+c3RhdGlj dHJfel9tYXNrKSk7CisKKwkJCS8qIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGljVFIgY29uZmlndXJh dGlvbiAqLworCQkJbWVtY3B5KCZ1Yy0+c3RhdGljX3RyLCAmdWMtPmRlc2MtPnN0YXRpY190ciwK KwkJCSAgICAgICBzaXplb2YodWMtPnN0YXRpY190cikpOworCQl9CisKKwkJdWRtYV9yY2hhbnJ0 X3dyaXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFfQ0hB Tl9SVF9DVExfRU4pOworCisJCS8qIEVuYWJsZSByZW1vdGUgKi8KKwkJdWRtYV9yY2hhbnJ0X3dy aXRlKHVjLT5yY2hhbiwgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRywKKwkJCQkgICBVRE1B X1BFRVJfUlRfRU5fRU5BQkxFKTsKKworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fREVWOgor CQkvKiBDb25maWcgcmVtb3RlIFRSICovCisJCWlmICh1Yy0+c3RhdGljX3RyX3R5cGUpIHsKKwkJ CXUzMiB2YWwgPSBQRE1BX1NUQVRJQ19UUl9ZKHVjLT5kZXNjLT5zdGF0aWNfdHIuZWxjbnQpIHwK KwkJCQkgIFBETUFfU1RBVElDX1RSX1godWMtPmRlc2MtPnN0YXRpY190ci5lbHNpemUpOworCisJ CQlpZiAodWMtPmVuYWJsZV9hY2MzMikKKwkJCQl2YWwgfD0gUERNQV9TVEFUSUNfVFJfWFlfQUND MzI7CisJCQlpZiAodWMtPmVuYWJsZV9idXJzdCkKKwkJCQl2YWwgfD0gUERNQV9TVEFUSUNfVFJf WFlfQlVSU1Q7CisKKwkJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sCisJCQkJVURNQV9U Q0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9YWV9SRUcsIHZhbCk7CisKKwkJCS8qIHNhdmUgdGhlIGN1 cnJlbnQgc3RhdGljVFIgY29uZmlndXJhdGlvbiAqLworCQkJbWVtY3B5KCZ1Yy0+c3RhdGljX3Ry LCAmdWMtPmRlc2MtPnN0YXRpY190ciwKKwkJCSAgICAgICBzaXplb2YodWMtPnN0YXRpY190cikp OworCQl9CisKKwkJLyogRW5hYmxlIHJlbW90ZSAqLworCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMt PnRjaGFuLCBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVFUl9S VF9FTl9FTkFCTEUpOworCisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENI QU5fUlRfQ1RMX1JFRywKKwkJCQkgICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKworCQlicmVhazsK KwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLCBV RE1BX1JDSEFOX1JUX0NUTF9SRUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTik7CisJCXVk bWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfQ1RMX1JFRywKKwkJCQkg ICBVRE1BX0NIQU5fUlRfQ1RMX0VOKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwl1Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfQUNUSVZFOworb3V0Ogor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9zdG9wKHN0cnVjdCB1ZG1hX2NoYW4g KnVjKQoreworCWVudW0gdWRtYV9jaGFuX3N0YXRlIG9sZF9zdGF0ZSA9IHVjLT5zdGF0ZTsKKwor CXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19URVJNSU5BVElORzsKKwlyZWluaXRfY29tcGxldGlv bigmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwljYXNl IERNQV9ERVZfVE9fTUVNOgorCQl1ZG1hX3JjaGFucnRfd3JpdGUodWMtPnJjaGFuLCBVRE1BX1JD SEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJCSAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUgfAor CQkJCSAgIFVETUFfUEVFUl9SVF9FTl9URUFSRE9XTik7CisJCWJyZWFrOworCWNhc2UgRE1BX01F TV9UT19ERVY6CisJCXVkbWFfdGNoYW5ydF93cml0ZSh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRf UEVFUl9SVF9FTl9SRUcsCisJCQkJICAgVURNQV9QRUVSX1JUX0VOX0VOQUJMRSB8CisJCQkJICAg VURNQV9QRUVSX1JUX0VOX0ZMVVNIKTsKKwkJdWRtYV90Y2hhbnJ0X3dyaXRlKHVjLT50Y2hhbiwg VURNQV9UQ0hBTl9SVF9DVExfUkVHLAorCQkJCSAgIFVETUFfQ0hBTl9SVF9DVExfRU4gfAorCQkJ CSAgIFVETUFfQ0hBTl9SVF9DVExfVERPV04pOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9f TUVNOgorCQl1ZG1hX3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9S RUcsCisJCQkJICAgVURNQV9DSEFOX1JUX0NUTF9FTiB8CisJCQkJICAgVURNQV9DSEFOX1JUX0NU TF9URE9XTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVjLT5zdGF0ZSA9IG9sZF9zdGF0ZTsK KwkJY29tcGxldGVfYWxsKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfY3ljbGljX3BhY2tl dF9lbGFwc2VkKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQg PSB1Yy0+ZGVzYzsKKwlzdHJ1Y3QgY3BwaTVfaG9zdF9kZXNjX3QgKmhfZGVzYzsKKworCWhfZGVz YyA9IGQtPmh3ZGVzY1tkLT5kZXNjX2lkeF0uY3BwaTVfZGVzY192YWRkcjsKKwljcHBpNV9oZGVz Y19yZXNldF90b19vcmlnaW5hbChoX2Rlc2MpOworCXVkbWFfcHVzaF90b19yaW5nKHVjLCBkLT5k ZXNjX2lkeCk7CisJZC0+ZGVzY19pZHggPSAoZC0+ZGVzY19pZHggKyAxKSAlIGQtPnNnbGVuOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRtYV9mZXRjaF9lcGliKHN0cnVjdCB1ZG1hX2NoYW4g KnVjLCBzdHJ1Y3QgdWRtYV9kZXNjICpkKQoreworCXN0cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCAq aF9kZXNjID0gZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHI7CisKKwltZW1jcHkoZC0+bWV0 YWRhdGEsIGhfZGVzYy0+ZXBpYiwgZC0+bWV0YWRhdGFfc2l6ZSk7Cit9CisKK3N0YXRpYyBib29s IHVkbWFfaXNfZGVzY19yZWFsbHlfZG9uZShzdHJ1Y3QgdWRtYV9jaGFuICp1YywKKwkJCQkJICAg IHN0cnVjdCB1ZG1hX2Rlc2MgKmQpCit7CisJdTMyIHBlZXJfYmNudCwgYmNudDsKKworCS8qIE9u bHkgVFggdG93YXJkcyBQRE1BIGlzIGFmZmVjdGVkICovCisJaWYgKCF1Yy0+c3RhdGljX3RyX3R5 cGUgfHwgdWMtPmRpciAhPSBETUFfTUVNX1RPX0RFVikKKwkJcmV0dXJuIHRydWU7CisKKwlwZWVy X2JjbnQgPSB1ZG1hX3RjaGFucnRfcmVhZCh1Yy0+dGNoYW4sIFVETUFfVENIQU5fUlRfUEVFUl9C Q05UX1JFRyk7CisJYmNudCA9IHVkbWFfdGNoYW5ydF9yZWFkKHVjLT50Y2hhbiwgVURNQV9UQ0hB Tl9SVF9CQ05UX1JFRyk7CisKKwlpZiAocGVlcl9iY250IDwgYmNudCkKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfZmx1c2hfdHgoc3RydWN0 IHVkbWFfY2hhbiAqdWMpCit7CisJaWYgKHVjLT5kaXIgIT0gRE1BX01FTV9UT19ERVYpCisJCXJl dHVybjsKKworCXVjLT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19BQ1RJVkVfRkxVU0g7CisKKwl1ZG1h X3RjaGFucnRfd3JpdGUodWMtPnRjaGFuLCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsCisJCQkgICBV RE1BX0NIQU5fUlRfQ1RMX0VOIHwKKwkJCSAgIFVETUFfQ0hBTl9SVF9DVExfVERPV04pOworfQor CitzdGF0aWMgdm9pZCB1ZG1hX3JpbmdfY2FsbGJhY2soc3RydWN0IHVkbWFfY2hhbiAqdWMsIGRt YV9hZGRyX3QgcGFkZHIpCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZDsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCisJaWYgKCFwYWRkcikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JnVjLT52Yy5sb2NrLCBmbGFncyk7CisKKwkvKiBUZWFyZG93biBjb21wbGV0aW9uIG1lc3NhZ2Ug Ki8KKwlpZiAocGFkZHIgJiAweDEpIHsKKwkJLyogQ29tcGVuc2F0ZSBvdXIgaW50ZXJuYWwgcG9w L3B1c2ggY291bnRlciAqLworCQl1Yy0+aW5fcmluZ19jbnQrKzsKKworCQljb21wbGV0ZV9hbGwo JnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCisJCWlmICh1Yy0+dGVybWluYXRlZF9kZXNjKSB7 CisJCQl1ZG1hX2Rlc2NfZnJlZSgmdWMtPnRlcm1pbmF0ZWRfZGVzYy0+dmQpOworCQkJdWMtPnRl cm1pbmF0ZWRfZGVzYyA9IE5VTEw7CisJCX0KKworCQlpZiAoIXVjLT5kZXNjKQorCQkJdWRtYV9z dGFydCh1Yyk7CisKKwkJaWYgKHVjLT5zdGF0ZSAhPSBVRE1BX0NIQU5fSVNfQUNUSVZFX0ZMVVNI KQorCQkJZ290byBvdXQ7CisJCWVsc2UgaWYgKHVjLT5kZXNjKQorCQkJcGFkZHIgPSB1ZG1hX2N1 cnJfY3BwaTVfZGVzY19wYWRkcih1Yy0+ZGVzYywKKwkJCQkJCQkgICB1Yy0+ZGVzYy0+ZGVzY19p ZHgpOworCX0KKworCWQgPSB1ZG1hX3VkbWFfZGVzY19mcm9tX3BhZGRyKHVjLCBwYWRkcik7CisK KwlpZiAoZCkgeworCQlkbWFfYWRkcl90IGRlc2NfcGFkZHIgPSB1ZG1hX2N1cnJfY3BwaTVfZGVz Y19wYWRkcihkLAorCQkJCQkJCQkgICBkLT5kZXNjX2lkeCk7CisJCWlmIChkZXNjX3BhZGRyICE9 IHBhZGRyKSB7CisJCQlkZXZfZXJyKHVjLT51ZC0+ZGV2LCAibm90IG1hdGNoaW5nIGRlc2NyaXB0 b3JzIVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICh1Yy0+Y3ljbGljKSB7CisJCQkv KiBwdXNoIHRoZSBkZXNjcmlwdG9yIGJhY2sgdG8gdGhlIHJpbmcgKi8KKwkJCWlmIChkID09IHVj LT5kZXNjKSB7CisJCQkJdWRtYV9jeWNsaWNfcGFja2V0X2VsYXBzZWQodWMpOworCQkJCXZjaGFu X2N5Y2xpY19jYWxsYmFjaygmZC0+dmQpOworCQkJfQorCQl9IGVsc2UgeworCQkJYm9vbCBkZXNj X2RvbmUgPSB0cnVlOworCisJCQlpZiAoZCA9PSB1Yy0+ZGVzYykgeworCQkJCWRlc2NfZG9uZSA9 IHVkbWFfaXNfZGVzY19yZWFsbHlfZG9uZSh1YywgZCk7CisKKwkJCQlpZiAoZGVzY19kb25lKSB7 CisJCQkJCXVjLT5iY250ICs9IGQtPnJlc2lkdWU7CisJCQkJCXVkbWFfc3RhcnQodWMpOworCQkJ CX0gZWxzZSB7CisJCQkJCXVkbWFfZmx1c2hfdHgodWMpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAo ZCA9PSB1Yy0+dGVybWluYXRlZF9kZXNjKSB7CisJCQkJdWMtPnRlcm1pbmF0ZWRfZGVzYyA9IE5V TEw7CisJCQl9CisKKwkJCWlmIChkZXNjX2RvbmUpCisJCQkJdmNoYW5fY29va2llX2NvbXBsZXRl KCZkLT52ZCk7CisJCX0KKwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWMtPnZj LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRtYV90cl9ldmVudF9jYWxsYmFjayhz dHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkOworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWMtPnZjLmxvY2ssIGZsYWdzKTsK KwlkID0gdWMtPmRlc2M7CisJaWYgKGQpIHsKKwkJZC0+dHJfaWR4ID0gKGQtPnRyX2lkeCArIDEp ICUgZC0+c2dsZW47CisKKwkJaWYgKHVjLT5jeWNsaWMpIHsKKwkJCXZjaGFuX2N5Y2xpY19jYWxs YmFjaygmZC0+dmQpOworCQl9IGVsc2UgeworCQkJLyogVE9ETzogZmlndXJlIG91dCB0aGUgcmVh bCBhbW91bnQgb2YgZGF0YSAqLworCQkJdWMtPmJjbnQgKz0gZC0+cmVzaWR1ZTsKKwkJCXVkbWFf c3RhcnQodWMpOworCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7CisJCX0KKwl9CisK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Yy0+dmMubG9jaywgZmxhZ3MpOworfQorCitzdGF0 aWMgaXJxcmV0dXJuX3QgdWRtYV9yaW5nX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSBkYXRhOworCWRtYV9hZGRyX3QgcGFkZHIgPSAw OworCisJaWYgKCF1ZG1hX3BvcF9mcm9tX3JpbmcodWMsICZwYWRkcikpCisJCXVkbWFfcmluZ19j YWxsYmFjayh1YywgcGFkZHIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg aXJxcmV0dXJuX3QgdWRtYV91ZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSBkYXRhOworCisJdWRtYV90cl9ldmVudF9jYWxsYmFj ayh1Yyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmggYi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hNjE1M2RlYjc5MWIKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogIENvcHlyaWdodCAoQykgMjAxOSBU ZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICovCisK KyNpZm5kZWYgSzNfVURNQV9IXworI2RlZmluZSBLM19VRE1BX0hfCisKKyNpbmNsdWRlIDxsaW51 eC9zb2MvdGkvdGlfc2NpX3Byb3RvY29sLmg+CisKKyNkZWZpbmUgVURNQV9QU0lMX0RTVF9USFJF QURfSURfT0ZGU0VUIDB4ODAwMAorCisvKiBHbG9iYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVE TUFfUkVWX1JFRwkJCTB4MAorI2RlZmluZSBVRE1BX1BFUkZfQ1RMX1JFRwkJMHg0CisjZGVmaW5l IFVETUFfRU1VX0NUTF9SRUcJCTB4OAorI2RlZmluZSBVRE1BX1BTSUxfVE9fUkVHCQkweDEwCisj ZGVmaW5lIFVETUFfVVRDX0NUTF9SRUcJCTB4MWMKKyNkZWZpbmUgVURNQV9DQVBfUkVHKGkpCQkJ KDB4MjAgKyAoaSAqIDQpKQorI2RlZmluZSBVRE1BX1JYX0ZMT1dfSURfRldfT0VTX1JFRwkweDgw CisjZGVmaW5lIFVETUFfUlhfRkxPV19JRF9GV19TVEFUVVNfUkVHCTB4ODgKKworLyogVFggY2hh biBSVCByZWdzICovCisjZGVmaW5lIFVETUFfVENIQU5fUlRfQ1RMX1JFRwkJMHgwCisjZGVmaW5l IFVETUFfVENIQU5fUlRfU1dUUklHX1JFRwkweDgKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9TVERB VEFfUkVHCTB4ODAKKworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRyhpKQkoMHgyMDAg KyAoaSAqIDB4NCkpCisjZGVmaW5lIFVETUFfVENIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVH CVwKKwlVRE1BX1RDSEFOX1JUX1BFRVJuX1JFRygwKQkvKiBQU0ktTDogMHg0MDAgKi8KKyNkZWZp bmUgVURNQV9UQ0hBTl9SVF9QRUVSX1NUQVRJQ19UUl9aX1JFRwlcCisJVURNQV9UQ0hBTl9SVF9Q RUVSbl9SRUcoMSkJLyogUFNJLUw6IDB4NDAxICovCisjZGVmaW5lIFVETUFfVENIQU5fUlRfUEVF Ul9CQ05UX1JFRwkJXAorCVVETUFfVENIQU5fUlRfUEVFUm5fUkVHKDQpCS8qIFBTSS1MOiAweDQw NCAqLworI2RlZmluZSBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHCQlcCisJVURNQV9UQ0hB Tl9SVF9QRUVSbl9SRUcoOCkJLyogUFNJLUw6IDB4NDA4ICovCisKKyNkZWZpbmUgVURNQV9UQ0hB Tl9SVF9QQ05UX1JFRwkJMHg0MDAKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9CQ05UX1JFRwkJMHg0 MDgKKyNkZWZpbmUgVURNQV9UQ0hBTl9SVF9TQkNOVF9SRUcJCTB4NDEwCisKKy8qIFJYIGNoYW4g UlQgcmVncyAqLworI2RlZmluZSBVRE1BX1JDSEFOX1JUX0NUTF9SRUcJCTB4MAorI2RlZmluZSBV RE1BX1JDSEFOX1JUX1NXVFJJR19SRUcJMHg4CisjZGVmaW5lIFVETUFfUkNIQU5fUlRfU1REQVRB X1JFRwkweDgwCisKKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoaSkJKDB4MjAwICsg KGkgKiAweDQpKQorI2RlZmluZSBVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1hZX1JFRwlc CisJVURNQV9SQ0hBTl9SVF9QRUVSbl9SRUcoMCkJLyogUFNJLUw6IDB4NDAwICovCisjZGVmaW5l IFVETUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWl9SRUcJXAorCVVETUFfUkNIQU5fUlRfUEVF Um5fUkVHKDEpCS8qIFBTSS1MOiAweDQwMSAqLworI2RlZmluZSBVRE1BX1JDSEFOX1JUX1BFRVJf QkNOVF9SRUcJCVwKKwlVRE1BX1JDSEFOX1JUX1BFRVJuX1JFRyg0KQkvKiBQU0ktTDogMHg0MDQg Ki8KKyNkZWZpbmUgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRwkJXAorCVVETUFfUkNIQU5f UlRfUEVFUm5fUkVHKDgpCS8qIFBTSS1MOiAweDQwOCAqLworCisjZGVmaW5lIFVETUFfUkNIQU5f UlRfUENOVF9SRUcJCTB4NDAwCisjZGVmaW5lIFVETUFfUkNIQU5fUlRfQkNOVF9SRUcJCTB4NDA4 CisjZGVmaW5lIFVETUFfUkNIQU5fUlRfU0JDTlRfUkVHCQkweDQxMAorCisvKiBVRE1BX1RDSEFO X1JUX0NUTF9SRUcvVURNQV9SQ0hBTl9SVF9DVExfUkVHICovCisjZGVmaW5lIFVETUFfQ0hBTl9S VF9DVExfRU4JCUJJVCgzMSkKKyNkZWZpbmUgVURNQV9DSEFOX1JUX0NUTF9URE9XTgkJQklUKDMw KQorI2RlZmluZSBVRE1BX0NIQU5fUlRfQ1RMX1BBVVNFCQlCSVQoMjkpCisjZGVmaW5lIFVETUFf Q0hBTl9SVF9DVExfRlRET1dOCQlCSVQoMjgpCisjZGVmaW5lIFVETUFfQ0hBTl9SVF9DVExfRVJS T1IJCUJJVCgwKQorCisvKiBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHL1VETUFfUkNIQU5f UlRfUEVFUl9SVF9FTl9SRUcgKFBTSS1MOiAweDQwOCkgKi8KKyNkZWZpbmUgVURNQV9QRUVSX1JU X0VOX0VOQUJMRQkJQklUKDMxKQorI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fVEVBUkRPV04JQklU KDMwKQorI2RlZmluZSBVRE1BX1BFRVJfUlRfRU5fUEFVU0UJCUJJVCgyOSkKKyNkZWZpbmUgVURN QV9QRUVSX1JUX0VOX0ZMVVNICQlCSVQoMjgpCisjZGVmaW5lIFVETUFfUEVFUl9SVF9FTl9JRExF CQlCSVQoMSkKKworLyoKKyAqIFVETUFfVENIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHIC8K KyAqIFVETUFfUkNIQU5fUlRfUEVFUl9TVEFUSUNfVFJfWFlfUkVHCisgKi8KKyNkZWZpbmUgUERN QV9TVEFUSUNfVFJfWF9NQVNLCQlHRU5NQVNLKDI2LCAyNCkKKyNkZWZpbmUgUERNQV9TVEFUSUNf VFJfWF9TSElGVAkJKDI0KQorI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9ZX01BU0sJCUdFTk1BU0so MTEsIDApCisjZGVmaW5lIFBETUFfU1RBVElDX1RSX1lfU0hJRlQJCSgwKQorCisjZGVmaW5lIFBE TUFfU1RBVElDX1RSX1koeCkJXAorCSgoKHgpIDw8IFBETUFfU1RBVElDX1RSX1lfU0hJRlQpICYg UERNQV9TVEFUSUNfVFJfWV9NQVNLKQorI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YKHgpCVwKKwko KCh4KSA8PCBQRE1BX1NUQVRJQ19UUl9YX1NISUZUKSAmIFBETUFfU1RBVElDX1RSX1hfTUFTSykK KworI2RlZmluZSBQRE1BX1NUQVRJQ19UUl9YWV9BQ0MzMgkJQklUKDMwKQorI2RlZmluZSBQRE1B X1NUQVRJQ19UUl9YWV9CVVJTVAkJQklUKDMxKQorCisvKgorICogVURNQV9UQ0hBTl9SVF9QRUVS X1NUQVRJQ19UUl9aX1JFRyAvCisgKiBVRE1BX1JDSEFOX1JUX1BFRVJfU1RBVElDX1RSX1pfUkVH CisgKi8KKyNkZWZpbmUgUERNQV9TVEFUSUNfVFJfWih4LCBtYXNrKQkoKHgpICYgKG1hc2spKQor CitzdHJ1Y3QgdWRtYV9kZXY7CitzdHJ1Y3QgdWRtYV90Y2hhbjsKK3N0cnVjdCB1ZG1hX3JjaGFu Oworc3RydWN0IHVkbWFfcmZsb3c7CisKK2VudW0gdWRtYV9ybV9yYW5nZSB7CisJUk1fUkFOR0Vf VENIQU4gPSAwLAorCVJNX1JBTkdFX1JDSEFOLAorCVJNX1JBTkdFX1JGTE9XLAorCVJNX1JBTkdF X0xBU1QsCit9OworCisvKiBDaGFubmVsIFRocm91Z2hwdXQgTGV2ZWxzICovCitlbnVtIHVkbWFf dHBfbGV2ZWwgeworCVVETUFfVFBfTk9STUFMID0gMCwKKwlVRE1BX1RQX0hJR0ggPSAxLAorCVVE TUFfVFBfVUxUUkFISUdIID0gMiwKKwlVRE1BX1RQX0xBU1QsCit9OworCitzdHJ1Y3QgdWRtYV90 aXNjaV9ybSB7CisJY29uc3Qgc3RydWN0IHRpX3NjaV9oYW5kbGUgKnRpc2NpOworCWNvbnN0IHN0 cnVjdCB0aV9zY2lfcm1fdWRtYXBfb3BzICp0aXNjaV91ZG1hcF9vcHM7CisJdTMyICB0aXNjaV9k ZXZfaWQ7CisKKwkvKiB0aXNjaSBpbmZvcm1hdGlvbiBmb3IgUFNJLUwgdGhyZWFkIHBhaXJpbmcv dW5wYWlyaW5nICovCisJY29uc3Qgc3RydWN0IHRpX3NjaV9ybV9wc2lsX29wcyAqdGlzY2lfcHNp bF9vcHM7CisJdTMyICB0aXNjaV9uYXZzc19kZXZfaWQ7CisKKwlzdHJ1Y3QgdGlfc2NpX3Jlc291 cmNlICpybV9yYW5nZXNbUk1fUkFOR0VfTEFTVF07Cit9OworCisjZW5kaWYgLyogSzNfVURNQV9I XyAqLwotLSAKUGV0ZXIKClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmth dHUgMjIsIDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBL b3RpcGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK