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=-8.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C09BCC04AAD for ; Mon, 6 May 2019 12:36:29 +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 8DFBF2087F for ; Mon, 6 May 2019 12:36:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JYwnU+0g"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="s8eefizv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8DFBF2087F 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=1//nx9ofeTdOZ0mMZvTmKgMXXotfsk3kYV31Q+mZWD4=; b=JYwnU+0gLNXwQv q1/zWwNirlnO4mkAZOudCvgAA1fC8xC8bsBmcaLo3LdGzAzcQUCwYCL4kmiO6jo7LG2VHKG9AMbdF 0v8ZelnAuP180qW71QU9SX6klXaLk4vcq3C8v/VuISNJ9wOuy+rsmzkJfjcGyccaQ0Qh+/bBwPn6T CMFWea5Br4NTCgt/TcIHbk6FB3Z3D5mRV1Uyet5Qie9gpZF9g+cAJNMYBXQMzY1F2IgfDHBieplXK TlfImg7xUbh23IHdq2jfWj0uOXPqYrn8PCPhQPJemvaqfkCeGXTQqALbZsKIxbMZSsX1stt+FPu9H uhkdQP687+GD2Mcwhtzg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcqy-0000Db-Vn; Mon, 06 May 2019 12:36:21 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcpu-0007HK-Ns for linux-arm-kernel@lists.infradead.org; Mon, 06 May 2019 12:35:38 +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 x46CZ5lq066567; Mon, 6 May 2019 07:35:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1557146105; bh=ytaaq+oeZvBDR6YoyYp9Hgqz7JQkkSx2RkejkBI2Ry8=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=s8eefizvgytEO8rHHdfIBxAA0fQrOxcnTxbx2X5bOkTHnJnkAeb+8WDpJN1wCKr68 4bNCzMbb38UeCt42CoEV4ytMw+1BQY/tdS2ZSEdJ1ytTR6VXFwehvIKJjsn1BipYlU esmUALsC5Q/mZJmRObvcfDgooWP/ZyBIp+fkvWSA= Received: from DFLE102.ent.ti.com (dfle102.ent.ti.com [10.64.6.23]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x46CZ5ZA128305 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 May 2019 07:35:05 -0500 Received: from DFLE108.ent.ti.com (10.64.6.29) 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; Mon, 6 May 2019 07:35:04 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE108.ent.ti.com (10.64.6.29) 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; Mon, 6 May 2019 07:35:04 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id x46CYpU9110286; Mon, 6 May 2019 07:35:01 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH 03/16] soc: ti: k3: add navss ringacc driver Date: Mon, 6 May 2019 15:34:43 +0300 Message-ID: <20190506123456.6777-4-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190506123456.6777-1-peter.ujfalusi@ti.com> References: <20190506123456.6777-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-20190506_053515_424676_1CE8E3CA X-CRM114-Status: GOOD ( 27.32 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 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, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KClRoZSBS aW5nIEFjY2VsZXJhdG9yIChSSU5HQUNDIG9yIFJBKSBwcm92aWRlcyBoYXJkd2FyZSBhY2NlbGVy YXRpb24gdG8KZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBh IHByb2R1Y2VyIGFuZCBhIGNvbnN1bWVyLgpUaGVyZSBpcyBvbmUgUklOR0FDQyBtb2R1bGUgcGVy IE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MuCgpUaGUgUklOR0FDQyBjb252ZXJ0cyBjb25zdGFudC1h ZGRyZXNzIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvIGVxdWl2YWxlbnQKcmVhZCBvciB3cml0 ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGluIG1lbW9yeS4gVGhlIFJJ TkdBQ0MKZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFjaCBETUEgY29udHJvbGxlciB3aGljaCBu ZWVkcyB0byBhY2Nlc3MgcmluZwplbGVtZW50cyBmcm9tIGhhdmluZyB0byBrbm93IHRoZSBjdXJy ZW50IHN0YXRlIG9mIHRoZSByaW5nIChiYXNlIGFkZHJlc3MsCmN1cnJlbnQgb2Zmc2V0KS4gVGhl IERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8gYQpzcGVj aWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBtYXBzIHRvIHRoZSBzb3VyY2UgaW50ZXJmYWNlIG9u IHRoZSBSSU5HQUNDKQphbmQgdGhlIFJJTkdBQ0MgcmVwbGFjZXMgdGhlIGFkZHJlc3MgZm9yIHRo ZSB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3IGFkZHJlc3MKd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhl IGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRoZSByaW5nIChoZWFkIGZvciByZWFkcywKdGFpbCBm b3Igd3JpdGVzKS4gU2luY2UgdGhlIFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlw bGUgRE1BCmNvbnRyb2xsZXJzIG9yIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvaGVyZW50bHkg c2hhcmUgdGhlIHNhbWUgcmluZ3MgYXMKYXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0 byBwbGFjZSBkYXRhIHdoaWNoIGlzIGRlc3RpbmVkIHRvd2FyZHMKc29mdHdhcmUgaW50byBjYWNo ZWQgbWVtb3J5IGRpcmVjdGx5LgoKU3VwcG9ydGVkIHJpbmcgbW9kZXM6Ci0gUmluZyBNb2RlCi0g TWVzc2FnaW5nIE1vZGUKLSBDcmVkZW50aWFscyBNb2RlCi0gUXVldWUgTWFuYWdlciBNb2RlCgpU SS1TQ0kgaW50ZWdyYXRpb246CgpUZXhhcyBJbnN0cnVtZW50J3MgU3lzdGVtIENvbnRyb2wgSW50 ZXJmYWNlIChUSS1TQ0kpIE1lc3NhZ2UgUHJvdG9jb2wgbm93CmhhcyBjb250cm9sIG92ZXIgUmlu Z2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBhbmQgUmluZ3MKY29uZmlndXJh dGlvbi4KClRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgb2YgVEktU0NJIFJpbmdhY2MgbW9kdWxl IFJNIHByb3RvY29sCmludHJvZHVjZWQgYXMgb3B0aW9uIHRocm91Z2ggRFQgcGFyYW1ldGVyczoK LSB0aSxzY2k6IHBoYW5kbGUgb24gVEktU0NJIGZpcm13YXJlIGNvbnRyb2xsZXIgRFQgbm9kZQot IHRpLHNjaS1kZXYtaWQ6IFRJLVNDSSBkZXZpY2UgaWRlbnRpZmllciBhcyBwZXIgVEktU0NJIGZp cm13YXJlIHNwZWMKCmlmIGJvdGggcGFyYW1ldGVycyBwcmVzZW50IC0gUmluZ2FjYyBkcml2ZXIg d2lsbCBjb25maWd1cmUvZnJlZS9yZXNldCBSaW5ncwp1c2luZyBUSS1TQ0kgTWVzc2FnZSBSaW5n YWNjIFJNIFByb3RvY29sLgoKVGhlIFJpbmdhY2MgZHJpdmVyIG1hbmFnZXMgUmluZ3MgYWxsb2Nh dGlvbiBieSBpdHNlbGYgbm93IGFuZCByZXF1ZXN0cwpUSS1TQ0kgZmlybXdhcmUgdG8gYWxsb2Nh dGUgYW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBvbmx5LiBJdCdzIGRvbmUKdGhpcyB3YXkg YmVjYXVzZSwgTGludXggZHJpdmVyIGltcGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRp b24gYW5kCmNvbmZpZ3VyYXRpb24gKGFsbG9jYXRlIHJpbmcgYW5kIGNvbmZpZ3VyZSByaW5nKSB3 aGlsZSBJLVNDSSBNZXNzYWdlClByb3RvY29sIHN1cHBvcnRzIG9ubHkgb25lIGNvbWJpbmVkIG9w ZXJhdGlvbiAoYWxsb2NhdGUrY29uZmlndXJlKS4KCkdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3Jp aS5zdHJhc2hrb0B0aS5jb20+ClNpZ25lZC1vZmYtYnk6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51 amZhbHVzaUB0aS5jb20+Ci0tLQogZHJpdmVycy9zb2MvdGkvS2NvbmZpZyAgICAgICAgICAgIHwg ICAxNyArCiBkcml2ZXJzL3NvYy90aS9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKIGRyaXZl cnMvc29jL3RpL2szLXJpbmdhY2MuYyAgICAgICB8IDExOTAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGluY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2MuaCB8ICAyNTggKysrKysr KwogNCBmaWxlcyBjaGFuZ2VkLCAxNDY2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9L Y29uZmlnIGIvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwppbmRleCBkYmQ2YzYwYjgxZGIuLjJkMGNk YWUxNGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZworKysgYi9kcml2ZXJz L3NvYy90aS9LY29uZmlnCkBAIC04MCw0ICs4MCwyMSBAQCBjb25maWcgVElfU0NJX0lOVEFfTVNJ X0RPTUFJTgogCWhlbHAKIAkgIERyaXZlciB0byBlbmFibGUgSW50ZXJydXB0IEFnZ3JlZ2F0b3Ig c3BlY2lmaWMgTVNJIERvbWFpbi4KIAorY29uZmlnIFRJX0szX1JJTkdBQ0MKKwl0cmlzdGF0ZSAi SzMgUmluZyBhY2NlbGVyYXRvciBTdWIgU3lzdGVtIgorCWRlcGVuZHMgb24gQVJDSF9LMyB8fCBD T01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIFRJX1NDSV9JTlRBX0lSUUNISVAKKwlkZWZhdWx0IHkK KwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIEszIFJpbmcgYWNjZWxlcmF0b3Ig bW9kdWxlLgorCSAgVGhlIFJpbmcgQWNjZWxlcmF0b3IgKFJJTkdBQ0Mgb3IgUkEpICBwcm92aWRl cyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KKwkgIHRvIGVuYWJsZSBzdHJhaWdodGZvcndhcmQgcGFz c2luZyBvZiB3b3JrIGJldHdlZW4gYSBwcm9kdWNlcgorCSAgYW5kIGEgY29uc3VtZXIuIFRoZXJl IGlzIG9uZSBSSU5HQUNDIG1vZHVsZSBwZXIgTkFWU1Mgb24gVEkgQU02NXggU29DcworCSAgSWYg dW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFRJX0szX1JJTkdBQ0NfREVCVUcKKwl0cmlzdGF0ZSAi SzMgUmluZyBhY2NlbGVyYXRvciBTdWIgU3lzdGVtIHRlc3RzIGFuZCBkZWJ1ZyIKKwlkZXBlbmRz IG9uIFRJX0szX1JJTkdBQ0MKKwlkZWZhdWx0IG4KKwogZW5kaWYgIyBTT0NfVEkKZGlmZiAtLWdp dCBhL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlIGIvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKaW5k ZXggYjM4NjhkMzkyZDRmLi5jYzRiYzhiMDhiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3Rp L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCkBAIC05LDMgKzksNCBAQCBv YmotJChDT05GSUdfQU1YM19QTSkJCQkrPSBwbTMzeHgubwogb2JqLSQoQ09ORklHX1dLVVBfTTNf SVBDKQkJKz0gd2t1cF9tM19pcGMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9QTV9ET01BSU5TKQkJ Kz0gdGlfc2NpX3BtX2RvbWFpbnMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9JTlRBX01TSV9ET01B SU4pCSs9IHRpX3NjaV9pbnRhX21zaS5vCitvYmotJChDT05GSUdfVElfSzNfUklOR0FDQykJCSs9 IGszLXJpbmdhY2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jIGIv ZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNjMyOTg4ZGUwNTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2Mv dGkvazMtcmluZ2FjYy5jCkBAIC0wLDAgKzEsMTE5MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBUSSBLMyBOQVZTUyBSaW5nIEFjY2VsZXJhdG9yIHN1YnN5 c3RlbSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMg SW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3NvYy90aS9rMy1yaW5nYWNjLmg+CisjaW5jbHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9wcm90 b2NvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfaW50YV9tc2kuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKworc3Rh dGljIExJU1RfSEVBRChrM19yaW5nYWNjX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChrM19y aW5nYWNjX2xpc3RfbG9jayk7CisKKyNpZmRlZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwor I2RlZmluZQlrM19uYXZfZGJnKGRldiwgYXJnLi4uKSBkZXZfZXJyKGRldiwgYXJnKQorc3RhdGlj CXZvaWQgZGJnX3dyaXRlbCh1MzIgdiwgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJcHJfZXJyKCJX UklURUwoMzIpOiB2KCUwOFgpLS0+cmVnKCVwKVxuIiwgdiwgcmVnKTsKKwl3cml0ZWwodiwgcmVn KTsKK30KKworc3RhdGljCXUzMiBkYmdfcmVhZGwodm9pZCBfX2lvbWVtICpyZWcpCit7CisJdTMy IHY7CisKKwl2ID0gcmVhZGwocmVnKTsKKwlwcl9lcnIoIlJFQURMKDMyKTogdiglMDhYKTwtLXJl ZyglcClcbiIsIHYsIHJlZyk7CisJcmV0dXJuIHY7Cit9CisjZWxzZQorI2RlZmluZQlrM19uYXZf ZGJnKGRldiwgYXJnLi4uKSBkZXZfZGJnKGRldiwgYXJnKQorI2RlZmluZSBkYmdfd3JpdGVsKHYs IHJlZykgd3JpdGVsKHYsIHJlZykKKworI2RlZmluZSBkYmdfcmVhZGwocmVnKSByZWFkbChyZWcp CisjZW5kaWYKKworI2RlZmluZSBLM19SSU5HQUNDX0NGR19SSU5HX1NJWkVfRUxDTlRfTUFTSwkJ R0VOTUFTSygxOSwgMCkKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIC0gIFRoZSBS QSBDb250cm9sL1N0YXR1cyBSZWdpc3RlcnMgcmVnaW9uCisgKi8KK3N0cnVjdCBrM19yaW5nX3J0 X3JlZ3MgeworCXUzMglyZXN2XzE2WzRdOworCXUzMglkYjsJCS8qIFJUIFJpbmcgTiBEb29yYmVs bCBSZWdpc3RlciAqLworCXUzMglyZXN2XzRbMV07CisJdTMyCW9jYzsJCS8qIFJUIFJpbmcgTiBP Y2N1cGFuY3kgUmVnaXN0ZXIgKi8KKwl1MzIJaW5keDsJCS8qIFJUIFJpbmcgTiBDdXJyZW50IElu ZGV4IFJlZ2lzdGVyICovCisJdTMyCWh3b2NjOwkJLyogUlQgUmluZyBOIEhhcmR3YXJlIE9jY3Vw YW5jeSBSZWdpc3RlciAqLworCXUzMglod2luZHg7CQkvKiBSVCBSaW5nIE4gQ3VycmVudCBJbmRl eCBSZWdpc3RlciAqLworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JUX1JFR1NfU1RFUAkweDEw MDAKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgLSAgVGhlIFJpbmcgQWNjZWxl cmF0b3IgUXVldWVzIFJlZ2lzdGVycyByZWdpb24KKyAqLworc3RydWN0IGszX3JpbmdfZmlmb19y ZWdzIHsKKwl1MzIJaGVhZF9kYXRhWzEyOF07CQkvKiBSaW5nIEhlYWQgRW50cnkgRGF0YSBSZWdp c3RlcnMgKi8KKwl1MzIJdGFpbF9kYXRhWzEyOF07CQkvKiBSaW5nIFRhaWwgRW50cnkgRGF0YSBS ZWdpc3RlcnMgKi8KKwl1MzIJcGVla19oZWFkX2RhdGFbMTI4XTsJLyogUmluZyBQZWVrIEhlYWQg RW50cnkgRGF0YSBSZWdzICovCisJdTMyCXBlZWtfdGFpbF9kYXRhWzEyOF07CS8qIFJpbmcgUGVl ayBUYWlsIEVudHJ5IERhdGEgUmVncyAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2Fj Y19wcm94eV9nY2ZnX3JlZ3MgLSBSQSBQcm94eSBHbG9iYWwgQ29uZmlnIE1NSU8gUmVnaW9uCisg Ki8KK3N0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyB7CisJdTMyCXJldmlzaW9uOwkv KiBSZXZpc2lvbiBSZWdpc3RlciAqLworCXUzMgljb25maWc7CQkvKiBDb25maWcgUmVnaXN0ZXIg Ki8KK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhSRUFEU19NQVNLCQlHRU5N QVNLKDE1LCAwKQorCisvKioKKyAqIHN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X3RhcmdldF9yZWdz IC0gIFByb3h5IERhdGFwYXRoIE1NSU8gUmVnaW9uCisgKi8KK3N0cnVjdCBrM19yaW5nYWNjX3By b3h5X3RhcmdldF9yZWdzIHsKKwl1MzIJY29udHJvbDsJLyogUHJveHkgQ29udHJvbCBSZWdpc3Rl ciAqLworCXUzMglzdGF0dXM7CQkvKiBQcm94eSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1OAlyZXN2 XzUxMls1MDRdOworCXUzMglkYXRhWzEyOF07CS8qIFByb3h5IERhdGEgUmVnaXN0ZXIgKi8KK307 CisKKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9UQVJHRVRfU1RFUAkweDEwMDAKKyNkZWZpbmUg SzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRAkoLTEpCisKK2VudW0gazNfcmluZ2FjY19wcm94eV9h Y2Nlc3NfbW9kZSB7CisJUFJPWFlfQUNDRVNTX01PREVfSEVBRCA9IDAsCisJUFJPWFlfQUNDRVNT X01PREVfVEFJTCA9IDEsCisJUFJPWFlfQUNDRVNTX01PREVfUEVFS19IRUFEID0gMiwKKwlQUk9Y WV9BQ0NFU1NfTU9ERV9QRUVLX1RBSUwgPSAzLAorfTsKKworI2RlZmluZSBLM19SSU5HQUNDX0ZJ Rk9fV0lORE9XX1NJWkVfQllURVMgICg1MTJVKQorI2RlZmluZSBLM19SSU5HQUNDX0ZJRk9fUkVH U19TVEVQCTB4MTAwMAorI2RlZmluZSBLM19SSU5HQUNDX01BWF9EQl9SSU5HX0NOVCAgICAoMTI3 VSkKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ19vcHMgLSAgUmluZyBvcGVyYXRpb25zCisgKi8K K3N0cnVjdCBrM19yaW5nX29wcyB7CisJaW50ICgqcHVzaF90YWlsKShzdHJ1Y3QgazNfcmluZyAq cmluZywgdm9pZCAqZWxtKTsKKwlpbnQgKCpwdXNoX2hlYWQpKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbG0pOworCWludCAoKnBvcF90YWlsKShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9p ZCAqZWxtKTsKKwlpbnQgKCpwb3BfaGVhZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVs bSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBrM19yaW5nIC0gUkEgUmluZyBkZXNjcmlwdG9yCisg KgorICogQHJ0IC0gUmluZyBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMKKyAqIEBmaWZvcyAtIFJp bmcgcXVldWVzIHJlZ2lzdGVycworICogQHByb3h5IC0gUmluZyBQcm94eSBEYXRhcGF0aCByZWdp c3RlcnMKKyAqIEByaW5nX21lbV9kbWEgLSBSaW5nIGJ1ZmZlciBkbWEgYWRkcmVzcworICogQHJp bmdfbWVtX3ZpcnQgLSBSaW5nIGJ1ZmZlciB2aXJ0IGFkZHJlc3MKKyAqIEBvcHMgLSBSaW5nIG9w ZXJhdGlvbnMKKyAqIEBzaXplIC0gUmluZyBzaXplIGluIGVsZW1lbnRzCisgKiBAZWxtX3NpemUg LSBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQKKyAqIEBtb2RlIC0gUmluZyBtb2RlCisgKiBAZmxh Z3MgLSBmbGFncworICogQGZyZWUgLSBOdW1iZXIgb2YgZnJlZSBlbGVtZW50cworICogQG9jYyAt IFJpbmcgb2NjdXBhbmN5CisgKiBAd2luZGV4IC0gV3JpdGUgaW5kZXggKG9ubHkgZm9yIEBLM19S SU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorICogQHJpbmRleCAtIFJlYWQgaW5kZXggKG9ubHkgZm9y IEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorICogQHJpbmdfaWQgLSBSaW5nIElkCisgKiBA cGFyZW50IC0gUG9pbnRlciBvbiBzdHJ1Y3QgQGszX3JpbmdhY2MKKyAqIEB1c2VfY291bnQgLSBV c2UgY291bnQgZm9yIHNoYXJlZCByaW5ncworICogQHByb3h5X2lkIC0gUkEgUmluZyBQcm94eSBJ ZCAob25seSBpZiBASzNfUklOR0FDQ19SSU5HX1VTRV9QUk9YWSkKKyAqLworc3RydWN0IGszX3Jp bmcgeworCXN0cnVjdCBrM19yaW5nX3J0X3JlZ3MgX19pb21lbSAqcnQ7CisJc3RydWN0IGszX3Jp bmdfZmlmb19yZWdzIF9faW9tZW0gKmZpZm9zOworCXN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X3Rh cmdldF9yZWdzICBfX2lvbWVtICpwcm94eTsKKwlkbWFfYWRkcl90CXJpbmdfbWVtX2RtYTsKKwl2 b2lkCQkqcmluZ19tZW1fdmlydDsKKwlzdHJ1Y3QgazNfcmluZ19vcHMgKm9wczsKKwl1MzIJCXNp emU7CisJZW51bSBrM19yaW5nX3NpemUgZWxtX3NpemU7CisJZW51bSBrM19yaW5nX21vZGUgbW9k ZTsKKwl1MzIJCWZsYWdzOworI2RlZmluZSBLM19SSU5HX0ZMQUdfQlVTWQlCSVQoMSkKKyNkZWZp bmUgSzNfUklOR19GTEFHX1NIQVJFRAlCSVQoMikKKwl1MzIJCWZyZWU7CisJdTMyCQlvY2M7CisJ dTMyCQl3aW5kZXg7CisJdTMyCQlyaW5kZXg7CisJdTMyCQlyaW5nX2lkOworCXN0cnVjdCBrM19y aW5nYWNjCSpwYXJlbnQ7CisJdTMyCQl1c2VfY291bnQ7CisJaW50CQlwcm94eV9pZDsKK307CisK Ky8qKgorICogc3RydWN0IGszX3JpbmdhY2MgLSBSaW5ncyBhY2NlbGVyYXRvciBkZXNjcmlwdG9y CisgKgorICogQGRldiAtIHBvaW50ZXIgb24gUkEgZGV2aWNlCisgKiBAcHJveHlfZ2NmZyAtIFJB IHByb3h5IGdsb2JhbCBjb25maWcgcmVnaXN0ZXJzCisgKiBAcHJveHlfdGFyZ2V0X2Jhc2UgLSBS QSBwcm94eSBkYXRhcGF0aCByZWdpb24KKyAqIEBudW1fcmluZ3MgLSBudW1iZXIgb2YgcmluZyBp biBSQQorICogQHJtX2dwX3JhbmdlIC0gZ2VuZXJhbCBwdXJwb3NlIHJpbmdzIHJhbmdlIGZyb20g dGlzY2kKKyAqIEBkbWFfcmluZ19yZXNldF9xdWlyayAtIERNQSByZXNldCB3L2EgZW5hYmxlCisg KiBAbnVtX3Byb3hpZXMgLSBudW1iZXIgb2YgUkEgcHJveGllcworICogQHJpbmdzIC0gYXJyYXkg b2YgcmluZ3MgZGVzY3JpcHRvcnMgKHN0cnVjdCBAazNfcmluZykKKyAqIEBsaXN0IC0gbGlzdCBv ZiBSQXMgaW4gdGhlIHN5c3RlbQorICogQHRpc2NpIC0gcG9pbnRlciB0aS1zY2kgaGFuZGxlCisg KiBAdGlzY2lfcmluZ19vcHMgLSB0aS1zY2kgcmluZ3Mgb3BzCisgKiBAdGlzY2lfZGV2X2lkIC0g dGktc2NpIGRldmljZSBpZAorICovCitzdHJ1Y3QgazNfcmluZ2FjYyB7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCXN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyBfX2lvbWVtICpwcm94 eV9nY2ZnOworCXZvaWQgX19pb21lbSAqcHJveHlfdGFyZ2V0X2Jhc2U7CisJdTMyIG51bV9yaW5n czsgLyogbnVtYmVyIG9mIHJpbmdzIGluIFJpbmdhY2MgbW9kdWxlICovCisJdW5zaWduZWQgbG9u ZyAqcmluZ3NfaW51c2U7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZSAqcm1fZ3BfcmFuZ2U7CisK Kwlib29sIGRtYV9yaW5nX3Jlc2V0X3F1aXJrOworCXUzMiBudW1fcHJveGllczsKKwl1bnNpZ25l ZCBsb25nICpwcm94eV9pbnVzZTsKKworCXN0cnVjdCBrM19yaW5nICpyaW5nczsKKwlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG11dGV4IHJlcV9sb2NrOyAvKiBwcm90ZWN0IHJpbmdz IGFsbG9jYXRpb24gKi8KKworCWNvbnN0IHN0cnVjdCB0aV9zY2lfaGFuZGxlICp0aXNjaTsKKwlj b25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3JpbmdhY2Nfb3BzICp0aXNjaV9yaW5nX29wczsKKwl1MzIg IHRpc2NpX2Rldl9pZDsKK307CisKK3N0YXRpYyBsb25nIGszX3JpbmdhY2NfcmluZ19nZXRfZmlm b19wb3Moc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIEszX1JJTkdBQ0NfRklGT19X SU5ET1dfU0laRV9CWVRFUyAtCisJICAgICAgICg0IDw8IHJpbmctPmVsbV9zaXplKTsKK30KKwor c3RhdGljIHZvaWQgKmszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHN0cnVjdCBrM19yaW5nICpyaW5n LCB1MzIgaWR4KQoreworCXJldHVybiAoaWR4ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpICsgcmlu Zy0+cmluZ19tZW1fdmlydCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hf bWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmlu Z2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCitz dGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9yaW5nX29wcyA9IHsKKwkJLnB1 c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX21lbSwKKwkJLnBvcF9oZWFkID0gazNfcmlu Z2FjY19yaW5nX3BvcF9tZW0sCit9OworCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmlu Z2FjY19yaW5nX3BvcF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0 aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcs IHZvaWQgKmVsZW0pOworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8oc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdf b3BzIGszX3JpbmdfbW9kZV9tc2dfb3BzID0geworCQkucHVzaF90YWlsID0gazNfcmluZ2FjY19y aW5nX3B1c2hfaW8sCisJCS5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX2lv LAorCQkucG9wX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8sCisJCS5wb3BfaGVh ZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfaW8sCit9OworCitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wdXNoX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwor c3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5n ICpyaW5nLCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFk X3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNf cmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICpl bGVtKTsKKworc3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcHJveHlfb3Bz ID0geworCQkucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eSwKKwkJ LnB1c2hfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfcHJveHksCisJCS5wb3BfdGFp bCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eSwKKwkJLnBvcF9oZWFkID0gazNfcmlu Z2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5LAorfTsKKworI2lmZGVmIENPTkZJR19USV9LM19SSU5H QUNDX0RFQlVHCit2b2lkIGszX3JpbmdhY2NfcmluZ19kdW1wKHN0cnVjdCBrM19yaW5nICpyaW5n KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJpbmctPnBhcmVudC0+ZGV2OworCisJazNfbmF2 X2RiZyhkZXYsICJkdW1wIHJpbmc6ICVkXG4iLCByaW5nLT5yaW5nX2lkKTsKKwlrM19uYXZfZGJn KGRldiwgImR1bXAgbWVtIHZpcnQgJXAsIGRtYSAlcGFkXG4iLAorCQkgICByaW5nLT5yaW5nX21l bV92aXJ0LCAmcmluZy0+cmluZ19tZW1fZG1hKTsKKwlrM19uYXZfZGJnKGRldiwgImR1bXAgZWxt c2l6ZSAlZCwgc2l6ZSAlZCwgbW9kZSAlZCwgcHJveHlfaWQgJWRcbiIsCisJCSAgIHJpbmctPmVs bV9zaXplLCByaW5nLT5zaXplLCByaW5nLT5tb2RlLCByaW5nLT5wcm94eV9pZCk7CisKKwlrM19u YXZfZGJnKGRldiwgImR1bXAgcmluZ19ydF9yZWdzOiBkYiUwOHhcbiIsCisJCSAgIHJlYWRsKCZy aW5nLT5ydC0+ZGIpKTsKKwlrM19uYXZfZGJnKGRldiwgImR1bXAgb2NjJTA4eFxuIiwKKwkJICAg cmVhZGwoJnJpbmctPnJ0LT5vY2MpKTsKKwlrM19uYXZfZGJnKGRldiwgImR1bXAgaW5keCUwOHhc biIsCisJCSAgIHJlYWRsKCZyaW5nLT5ydC0+aW5keCkpOworCWszX25hdl9kYmcoZGV2LCAiZHVt cCBod29jYyUwOHhcbiIsCisJCSAgIHJlYWRsKCZyaW5nLT5ydC0+aHdvY2MpKTsKKwlrM19uYXZf ZGJnKGRldiwgImR1bXAgaHdpbmR4JTA4eFxuIiwKKwkJICAgcmVhZGwoJnJpbmctPnJ0LT5od2lu ZHgpKTsKKworCWlmIChyaW5nLT5yaW5nX21lbV92aXJ0KQorCQlwcmludF9oZXhfZHVtcChLRVJO X0VSUiwgImR1bXAgcmluZ19tZW1fdmlydCAiLAorCQkJICAgICAgIERVTVBfUFJFRklYX05PTkUs IDE2LCAxLAorCQkJICAgICAgIHJpbmctPnJpbmdfbWVtX3ZpcnQsIDE2ICogOCwgZmFsc2UpOwor fQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2R1bXApOworI2VuZGlmCisKK3N0 cnVjdCBrM19yaW5nICprM19yaW5nYWNjX3JlcXVlc3RfcmluZyhzdHJ1Y3QgazNfcmluZ2FjYyAq cmluZ2FjYywKKwkJCQkJaW50IGlkLCB1MzIgZmxhZ3MpCit7CisJaW50IHByb3h5X2lkID0gSzNf UklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKworCW11dGV4X2xvY2soJnJpbmdhY2MtPnJlcV9sb2Nr KTsKKworCWlmIChpZCA9PSBLM19SSU5HQUNDX1JJTkdfSURfQU5ZKSB7CisJCS8qIFJlcXVlc3Qg Zm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZyAqLworCQlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNl X2Rlc2MgKmdwX3JpbmdzID0KKwkJCQkJCSZyaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXTsK KwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCXNpemUgPSBncF9yaW5ncy0+c3RhcnQgKyBncF9y aW5ncy0+bnVtOworCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChyaW5nYWNjLT5yaW5nc19pbnVz ZSwgc2l6ZSwKKwkJCQkJZ3BfcmluZ3MtPnN0YXJ0KTsKKwkJaWYgKGlkID09IHNpemUpCisJCQln b3RvIGVycm9yOworCX0gZWxzZSBpZiAoaWQgPCAwKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCisJ aWYgKHRlc3RfYml0KGlkLCByaW5nYWNjLT5yaW5nc19pbnVzZSkgJiYKKwkgICAgIShyaW5nYWNj LT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVEKSkKKwkJZ290byBlcnJvcjsK KwllbHNlIGlmIChyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVE KQorCQlnb3RvIG91dDsKKworCWlmIChmbGFncyAmIEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkp IHsKKwkJcHJveHlfaWQgPSBmaW5kX25leHRfemVyb19iaXQocmluZ2FjYy0+cHJveHlfaW51c2Us CisJCQkJCSAgICAgIHJpbmdhY2MtPm51bV9wcm94aWVzLCAwKTsKKwkJaWYgKHByb3h5X2lkID09 IHJpbmdhY2MtPm51bV9wcm94aWVzKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoIXRyeV9t b2R1bGVfZ2V0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcikpCisJCWdvdG8gZXJyb3I7CisK KwlpZiAocHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkgeworCQlzZXRfYml0 KHByb3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVzZSk7CisJCXJpbmdhY2MtPnJpbmdzW2lkXS5w cm94eV9pZCA9IHByb3h5X2lkOworCQlrM19uYXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyBy aW5nIyVkIHByb3h5IyVkXG4iLAorCQkJICAgaWQsIHByb3h5X2lkKTsKKwl9IGVsc2UgeworCQlr M19uYXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkXG4iLCBpZCk7CisJfQorCisJ c2V0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOworb3V0OgorCXJpbmdhY2MtPnJpbmdz W2lkXS51c2VfY291bnQrKzsKKwltdXRleF91bmxvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKwly ZXR1cm4gJnJpbmdhY2MtPnJpbmdzW2lkXTsKKworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZyaW5n YWNjLT5yZXFfbG9jayk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19y aW5nYWNjX3JlcXVlc3RfcmluZyk7CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNl dF9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdh Y2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJpbmdhY2MtPnRpc2NpX3Jp bmdfb3BzLT5jb25maWcoCisJCQlyaW5nYWNjLT50aXNjaSwKKwkJCVRJX1NDSV9NU0dfVkFMVUVf Uk1fUklOR19DT1VOVF9WQUxJRCwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmct PnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCXJpbmctPnNpemUsCisJCQkwLAorCQkJMCwKKwkJ CTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmVzZXQgcmlu ZyBmYWlsICglZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQsIHJpbmctPnJpbmdfaWQpOworfQor Cit2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlp ZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJu OworCisJcmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5yaW5kZXggPSAw OworCXJpbmctPndpbmRleCA9IDA7CisKKwlrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHJpbmcp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0KTsKKworc3RhdGlj IHZvaWQgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaShzdHJ1Y3QgazNfcmluZyAq cmluZywKKwkJCQkJICAgICAgIGVudW0gazNfcmluZ19tb2RlIG1vZGUpCit7CisJc3RydWN0IGsz X3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJp bmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5jb25maWcoCisJCQlyaW5nYWNjLT50aXNjaSwKKwkJCVRJ X1NDSV9NU0dfVkFMVUVfUk1fUklOR19NT0RFX1ZBTElELAorCQkJcmluZ2FjYy0+dGlzY2lfZGV2 X2lkLAorCQkJcmluZy0+cmluZ19pZCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCW1vZGUsCisJ CQkwLAorCQkJMCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVNDSSBy ZWNvbmYgcW1vZGUgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nLT5yaW5n X2lkKTsKK30KKwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKHN0cnVjdCBrM19yaW5n ICpyaW5nLCB1MzIgb2NjKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklO R19GTEFHX0JVU1kpKQorCQlyZXR1cm47CisKKwlpZiAoIXJpbmctPnBhcmVudC0+ZG1hX3Jpbmdf cmVzZXRfcXVpcmspCisJCXJldHVybjsKKworCWlmICghb2NjKQorCQlvY2MgPSBkYmdfcmVhZGwo JnJpbmctPnJ0LT5vY2MpOworCisJaWYgKG9jYykgeworCQl1MzIgZGJfcmluZ19jbnQsIGRiX3Jp bmdfY250X2N1cjsKKworCQlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiJXMgJXUgb2Nj OiAldVxuIiwgX19mdW5jX18sCisJCQkgICByaW5nLT5yaW5nX2lkLCBvY2MpOworCQkvKiAyLiBS ZXNldCB0aGUgcmluZyAqLworCQlrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHJpbmcpOworCisJ CS8qCisJCSAqIDMuIFNldHVwIHRoZSByaW5nIGluIHJpbmcvZG9vcmJlbGwgbW9kZQorCQkgKiAo aWYgbm90IGFscmVhZHkgaW4gdGhpcyBtb2RlKQorCQkgKi8KKwkJaWYgKHJpbmctPm1vZGUgIT0g SzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKwkJCWszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19x bW9kZV9zY2koCisJCQkJCXJpbmcsIEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpOworCQkvKgor CQkgKiA0LiBSaW5nIHRoZSBkb29yYmVsbCAyKioyMiDigJMgcmluZ09jYyB0aW1lcy4KKwkJICog VGhpcyB3aWxsIHdyYXAgdGhlIGludGVybmFsIFVETUFQIHJpbmcgc3RhdGUgb2NjdXBhbmN5CisJ CSAqIGNvdW50ZXIgKHdoaWNoIGlzIDIxLWJpdHMgd2lkZSkgdG8gMC4KKwkJICovCisJCWRiX3Jp bmdfY250ID0gKDFVIDw8IDIyKSAtIG9jYzsKKworCQl3aGlsZSAoZGJfcmluZ19jbnQgIT0gMCkg eworCQkJLyoKKwkJCSAqIFJpbmcgdGhlIGRvb3JiZWxsIHdpdGggdGhlIG1heGltdW0gY291bnQg ZWFjaAorCQkJICogaXRlcmF0aW9uIGlmIHBvc3NpYmxlIHRvIG1pbmltaXplIHRoZSB0b3RhbAor CQkJICogb2Ygd3JpdGVzCisJCQkgKi8KKwkJCWlmIChkYl9yaW5nX2NudCA+IEszX1JJTkdBQ0Nf TUFYX0RCX1JJTkdfQ05UKQorCQkJCWRiX3JpbmdfY250X2N1ciA9IEszX1JJTkdBQ0NfTUFYX0RC X1JJTkdfQ05UOworCQkJZWxzZQorCQkJCWRiX3JpbmdfY250X2N1ciA9IGRiX3JpbmdfY250Owor CisJCQl3cml0ZWwoZGJfcmluZ19jbnRfY3VyLCAmcmluZy0+cnQtPmRiKTsKKwkJCWRiX3Jpbmdf Y250IC09IGRiX3JpbmdfY250X2N1cjsKKwkJfQorCisJCS8qIDUuIFJlc3RvcmUgdGhlIG9yaWdp bmFsIHJpbmcgbW9kZSAoaWYgbm90IHJpbmcgbW9kZSkgKi8KKwkJaWYgKHJpbmctPm1vZGUgIT0g SzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKwkJCWszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19x bW9kZV9zY2kocmluZywgcmluZy0+bW9kZSk7CisJfQorCisJLyogMi4gUmVzZXQgdGhlIHJpbmcg Ki8KKwlrM19yaW5nYWNjX3JpbmdfcmVzZXQocmluZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChr M19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKTsKKworc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5n X2ZyZWVfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpy aW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNj aV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZB TFVFX1JNX0FMTF9OT19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmct PnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTApOworCWlm IChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBmcmVlIGZhaWwgKCVk KSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmluZ19pZCk7Cit9CisKK2ludCBrM19y aW5nYWNjX3JpbmdfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmlu Z2FjYyAqcmluZ2FjYzsKKworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyaW5n YWNjID0gcmluZy0+cGFyZW50OworCisJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZs YWdzOiAweCUwOHhcbiIsIHJpbmctPmZsYWdzKTsKKworCWlmICghdGVzdF9iaXQocmluZy0+cmlu Z19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4 X2xvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKworCWlmICgtLXJpbmctPnVzZV9jb3VudCkKKwkJ Z290byBvdXQ7CisKKwlpZiAoIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJ Z290byBub19pbml0OworCisJazNfcmluZ2FjY19yaW5nX2ZyZWVfc2NpKHJpbmcpOworCisJZG1h X2ZyZWVfY29oZXJlbnQocmluZ2FjYy0+ZGV2LAorCQkJICByaW5nLT5zaXplICogKDQgPDwgcmlu Zy0+ZWxtX3NpemUpLAorCQkJICByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5yaW5nX21lbV9k bWEpOworCXJpbmctPmZsYWdzID0gMDsKKwlyaW5nLT5vcHMgPSBOVUxMOworCWlmIChyaW5nLT5w cm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7CisJCWNsZWFyX2JpdChyaW5n LT5wcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nLT5wcm94eSA9IE5VTEw7 CisJCXJpbmctPnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKwl9CisKK25v X2luaXQ6CisJY2xlYXJfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsK KworCW1vZHVsZV9wdXQocmluZ2FjYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKworb3V0OgorCW11 dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2ZyZWUpOworCit1MzIgazNfcmluZ2FjY19nZXRfcmlu Z19pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0dXJuIHJpbmctPnJpbmdfaWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19y aW5nYWNjX2dldF9yaW5nX2lkKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChz dHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOwor CisJcmV0dXJuIHJpbmctPnBhcmVudC0+dGlzY2lfZGV2X2lkOworfQorRVhQT1JUX1NZTUJPTF9H UEwoazNfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKTsKKworaW50IGszX3JpbmdhY2NfZ2V0X3Jp bmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpbnQgaXJxX251bTsKKworCWlm ICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnFfbnVtID0gdGlfc2NpX2ludGFfbXNp X2dldF92aXJxKHJpbmctPnBhcmVudC0+ZGV2LCByaW5nLT5yaW5nX2lkKTsKKwlpZiAoaXJxX251 bSA8PSAwKQorCQlpcnFfbnVtID0gLUVJTlZBTDsKKwlyZXR1cm4gaXJxX251bTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7CisKK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX2NmZ19zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0 IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJdTMyIHJpbmdfaWR4OworCWlu dCByZXQ7CisKKwlpZiAoIXJpbmdhY2MtPnRpc2NpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJp bmdfaWR4ID0gcmluZy0+cmluZ19pZDsKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+ Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX0FMTF9O T19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmdfaWR4LAorCQkJbG93 ZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEpLAorCQkJdXBwZXJfMzJfYml0cyhyaW5nLT5y aW5nX21lbV9kbWEpLAorCQkJcmluZy0+c2l6ZSwKKwkJCXJpbmctPm1vZGUsCisJCQlyaW5nLT5l bG1fc2l6ZSwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElT Q0kgY29uZmlnIHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nX2lk eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1Y3Qg azNfcmluZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCit7CisJc3RydWN0IGszX3Jp bmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJp bmcgfHwgIWNmZykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNmZy0+ZWxtX3NpemUgPiBLM19S SU5HQUNDX1JJTkdfRUxTSVpFXzI1NiB8fAorCSAgICBjZmctPm1vZGUgPiBLM19SSU5HQUNDX1JJ TkdfTU9ERV9RTSB8fAorCSAgICBjZmctPnNpemUgJiB+SzNfUklOR0FDQ19DRkdfUklOR19TSVpF X0VMQ05UX01BU0sgfHwKKwkgICAgIXRlc3RfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJp bmdzX2ludXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmluZy0+dXNlX2NvdW50ICE9 IDEpCisJCXJldHVybiAwOworCisJcmluZy0+c2l6ZSA9IGNmZy0+c2l6ZTsKKwlyaW5nLT5lbG1f c2l6ZSA9IGNmZy0+ZWxtX3NpemU7CisJcmluZy0+bW9kZSA9IGNmZy0+bW9kZTsKKwlyaW5nLT5v Y2MgPSAwOworCXJpbmctPmZyZWUgPSAwOworCXJpbmctPnJpbmRleCA9IDA7CisJcmluZy0+d2lu ZGV4ID0gMDsKKworCWlmIChyaW5nLT5wcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9V U0VEKQorCQlyaW5nLT5wcm94eSA9IHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlICsKKwkJCSAg ICAgIHJpbmctPnByb3h5X2lkICogSzNfUklOR0FDQ19QUk9YWV9UQVJHRVRfU1RFUDsKKworCXN3 aXRjaCAocmluZy0+bW9kZSkgeworCWNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfUklORzoKKwkJ cmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9yaW5nX29wczsKKwkJYnJlYWs7CisJY2FzZSBLM19S SU5HQUNDX1JJTkdfTU9ERV9RTToKKwkJLyoKKwkJICogSW4gUXVldWUgbW9kZSBlbG1fc2l6ZSBj YW4gYmUgOCBvbmx5IGFuZCBlYWNoIG9wZXJhdGlvbgorCQkgKiB1c2VzIDIgZWxlbWVudCBzbG90 cworCQkgKi8KKwkJaWYgKGNmZy0+ZWxtX3NpemUgIT0gSzNfUklOR0FDQ19SSU5HX0VMU0laRV84 IHx8CisJCSAgICBjZmctPnNpemUgJSAyKQorCQkJZ290byBlcnJfZnJlZV9wcm94eTsKKwljYXNl IEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0U6CisJCWlmIChyaW5nLT5wcm94eSkKKwkJCXJp bmctPm9wcyA9ICZrM19yaW5nX21vZGVfcHJveHlfb3BzOworCQllbHNlCisJCQlyaW5nLT5vcHMg PSAmazNfcmluZ19tb2RlX21zZ19vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJpbmctPm9w cyA9IE5VTEw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfcHJveHk7CisJfTsK KworCXJpbmctPnJpbmdfbWVtX3ZpcnQgPQorCQkJZG1hX2FsbG9jX2NvaGVyZW50KHJpbmdhY2Mt PmRldiwKKwkJCQkJICAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKKwkJCQkJ ICAgJnJpbmctPnJpbmdfbWVtX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyaW5nLT5yaW5nX21l bV92aXJ0KSB7CisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jIHJpbmcg bWVtXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9vcHM7CisJfQorCisJ cmV0ID0gazNfcmluZ2FjY19yaW5nX2NmZ19zY2kocmluZyk7CisKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9mcmVlX21lbTsKKworCXJpbmctPmZsYWdzIHw9IEszX1JJTkdfRkxBR19CVVNZOworCXJp bmctPmZsYWdzIHw9IChjZmctPmZsYWdzICYgSzNfUklOR0FDQ19SSU5HX1NIQVJFRCkgPworCQkJ SzNfUklOR19GTEFHX1NIQVJFRCA6IDA7CisKKwlrM19yaW5nYWNjX3JpbmdfZHVtcChyaW5nKTsK KworCXJldHVybiAwOworCitlcnJfZnJlZV9tZW06CisJZG1hX2ZyZWVfY29oZXJlbnQocmluZ2Fj Yy0+ZGV2LAorCQkJICByaW5nLT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAorCQkJICBy aW5nLT5yaW5nX21lbV92aXJ0LAorCQkJICByaW5nLT5yaW5nX21lbV9kbWEpOworZXJyX2ZyZWVf b3BzOgorCXJpbmctPm9wcyA9IE5VTEw7CitlcnJfZnJlZV9wcm94eToKKwlyaW5nLT5wcm94eSA9 IE5VTEw7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nfcmlu Z19jZmcpOworCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9zaXplKHN0cnVjdCBrM19yaW5nICpy aW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByaW5nLT5zaXplOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9zaXplKTsKKwordTMyIGszX3JpbmdhY2Nfcmlu Z19nZXRfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5n LT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAo IXJpbmctPmZyZWUpCisJCXJpbmctPmZyZWUgPSByaW5nLT5zaXplIC0gZGJnX3JlYWRsKCZyaW5n LT5ydC0+b2NjKTsKKworCXJldHVybiByaW5nLT5mcmVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwo azNfcmluZ2FjY19yaW5nX2dldF9mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2Nj KHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYg SzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBkYmdfcmVh ZGwoJnJpbmctPnJ0LT5vY2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5n X2dldF9vY2MpOworCit1MzIgazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3Jpbmcg KnJpbmcpCit7CisJcmV0dXJuICFrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUocmluZyk7Cit9CitF WFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCk7CisKK2VudW0gazNfcmlu Z2FjY19hY2Nlc3NfbW9kZSB7CisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQsCisJ SzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BVU0hfVEFJTCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMLAorCUszX1JJTkdB Q0NfQUNDRVNTX01PREVfUEVFS19IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUEVFS19U QUlMLAorfTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHN0cnVjdCBr M19yaW5nICpyaW5nLAorCQkJCSAgICAgZW51bSBrM19yaW5nYWNjX3Byb3h5X2FjY2Vzc19tb2Rl IG1vZGUpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHJpbmctPnJpbmdfaWQ7CisJdmFsIHw9IG1v ZGUgPDwgMTY7CisJdmFsIHw9IHJpbmctPmVsbV9zaXplIDw8IDI0OworCWRiZ193cml0ZWwodmFs LCAmcmluZy0+cHJveHktPmNvbnRyb2wpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGsz X3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVs ZW0sCisJCQkJCWVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2 b2lkIF9faW9tZW0gKnB0cjsKKworCXB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+cHJveHkt PmRhdGE7CisKKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BVU0hfSEVBRDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6 CisJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmluZywgUFJPWFlfQUNDRVNTX01PREVfSEVB RCk7CisJCWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJ Y2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlrM19yaW5nYWNjX3Jpbmdf Y2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VTU19NT0RFX1RBSUwpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dl dF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BPUF9UQUlMOgorCQlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicHJveHk6bWVtY3B5 X2Zyb21pbyh4KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsCisJCQkgICBwdHIsIGFjY2Vzc19t b2RlKTsKKwkJbWVtY3B5X2Zyb21pbyhlbGVtLCBwdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7 CisJCXJpbmctPm9jYy0tOworCQlicmVhazsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UFVTSF9UQUlMOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQ6CisJCWsz X25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJwcm94eTptZW1jcHlfdG9pbyh4KTogLS0+IHB0 ciglcCksIG1vZGU6JWRcbiIsCisJCQkgICBwdHIsIGFjY2Vzc19tb2RlKTsKKwkJbWVtY3B5X3Rv aW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5mcmVlLS07CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWszX25hdl9kYmco cmluZy0+cGFyZW50LT5kZXYsICJwcm94eTogZnJlZSVkIG9jYyVkXG4iLAorCQkgICByaW5nLT5m cmVlLCByaW5nLT5vY2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wdXNoX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7 CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJ ICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEKTsKK30KKworc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lk ICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVs ZW0sCisJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTCk7Cit9CisKK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5 KHJpbmcsIGVsZW0sCisJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEKTsK K30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nl c3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9Q X0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8oc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCisJCQkJICAgICBlbnVtIGszX3JpbmdhY2NfYWNj ZXNzX21vZGUgYWNjZXNzX21vZGUpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlzd2l0Y2gg KGFjY2Vzc19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoK KwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJCXB0ciA9ICh2b2lkIF9f aW9tZW0gKikmcmluZy0+Zmlmb3MtPmhlYWRfZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5H QUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UE9QX1RBSUw6CisJCXB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+Zmlmb3MtPnRhaWxfZGF0 YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHRyICs9 IGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3MocmluZyk7CisKKwlzd2l0Y2ggKGFjY2Vzc19t b2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEOgorCWNhc2UgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQt PmRldiwgIm1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLAorCQkJICAg cHRyLCBhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8PCByaW5n LT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9IRUFEOgorCQlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAibWVtY3B5X3RvaW8oeCk6 IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLAorCQkJICAgcHRyLCBhY2Nlc3NfbW9kZSk7CisJCW1l bWNweV90b2lvKHB0ciwgZWxlbSwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKKwkJcmluZy0+ZnJl ZS0tOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrM19u YXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiZnJlZSVkIGluZGV4JWQgb2NjJWQgaW5kZXglZFxu IiwKKwkJICAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4LCByaW5nLT5vY2MsIHJpbmctPnJpbmRl eCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVh ZF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmlu Z2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QVVNIX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2lv KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNj X3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCisJCQkJCSBLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BVU0hfVEFJTCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9pbyhzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5n X2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1Bf SEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX2lvKHN0cnVj dCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3Jpbmdf YWNjZXNzX2lvKHJpbmcsIGVsZW0sCisJCQkJCSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9I RUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9tZW0oc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJdm9pZCAqZWxlbV9wdHI7CisKKwllbGVtX3B0 ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmctPndpbmRleCk7CisKKwltZW1j cHkoZWxlbV9wdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisKKwlyaW5nLT53aW5k ZXggPSAocmluZy0+d2luZGV4ICsgMSkgJSByaW5nLT5zaXplOworCXJpbmctPmZyZWUtLTsKKwlk Ymdfd3JpdGVsKDEsICZyaW5nLT5ydC0+ZGIpOworCisJazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQt PmRldiwgInJpbmdfcHVzaF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAorCQkgICByaW5nLT5mcmVl LCByaW5nLT53aW5kZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJdm9p ZCAqZWxlbV9wdHI7CisKKwllbGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcs IHJpbmctPnJpbmRleCk7CisKKwltZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmctPmVs bV9zaXplKSk7CisKKwlyaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5nLT5z aXplOworCXJpbmctPm9jYy0tOworCWRiZ193cml0ZWwoLTEsICZyaW5nLT5ydC0+ZGIpOworCisJ azNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wX21lbTogb2NjJWQgaW5kZXgl ZCBwb3NfcHRyJXBcbiIsCisJCSAgIHJpbmctPm9jYywgcmluZy0+cmluZGV4LCBlbGVtX3B0cik7 CisJcmV0dXJuIDA7Cit9CisKK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlpZiAo IXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlrM19uYXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wdXNoOiBmcmVl JWQgaW5kZXglZFxuIiwKKwkJICAgcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChr M19yaW5nYWNjX3JpbmdfaXNfZnVsbChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAo cmluZy0+b3BzICYmIHJpbmctPm9wcy0+cHVzaF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1 c2hfdGFpbChyaW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChrM19yaW5nYWNjX3JpbmdfcHVzaCk7CisKK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFk KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9U U1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJy aW5nX3B1c2hfaGVhZDogZnJlZSVkIGluZGV4JWRcbiIsCisJCSAgIHJpbmctPmZyZWUsIHJpbmct PndpbmRleCk7CisKKwlpZiAoazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwocmluZykpCisJCXJldHVy biAtRU5PTUVNOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnB1c2hfaGVhZCkKKwkJ cmV0ID0gcmluZy0+b3BzLT5wdXNoX2hlYWQocmluZywgZWxlbSk7CisKKwlyZXR1cm4gcmV0Owor fQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZCk7CisKK2ludCBr M19yaW5nYWNjX3JpbmdfcG9wKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQorewor CWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYg SzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmluZy0+b2Nj KQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhyaW5nKTsKKworCWszX25h dl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3BvcDogb2NjJWQgaW5kZXglZFxuIiwKKwkJ ICAgcmluZy0+b2NjLCByaW5nLT5yaW5kZXgpOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJldHVy biAtRU5PREFUQTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wb3BfaGVhZCkKKwkJ cmV0ID0gcmluZy0+b3BzLT5wb3BfaGVhZChyaW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcG9wKTsKKworaW50IGszX3Jpbmdh Y2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlp bnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEsz X1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXJpbmctPm9jYykK KwkJcmluZy0+b2NjID0gazNfcmluZ2FjY19yaW5nX2dldF9vY2MocmluZyk7CisKKwlrM19uYXZf ZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3BfdGFpbDogb2NjJWQgaW5kZXglZFxuIiwK KwkJICAgcmluZy0+b2NjLCByaW5nLT5yaW5kZXgpOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJl dHVybiAtRU5PREFUQTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wb3BfdGFpbCkK KwkJcmV0ID0gcmluZy0+b3BzLT5wb3BfdGFpbChyaW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7 Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwpOworCitzdHJ1 Y3QgazNfcmluZ2FjYyAqb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZShzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLAorCQkJCQkJY29uc3QgY2hhciAqcHJvcGVydHkpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpyaW5nYWNjX25wOworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gRVJSX1BU UigtRVBST0JFX0RFRkVSKTsKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqZW50cnk7CisKKwlyaW5nYWNj X25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgcHJvcGVydHksIDApOworCWlmICghcmluZ2FjY19u cCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNj X2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmszX3JpbmdhY2NfbGlz dCwgbGlzdCkKKwkJaWYgKGVudHJ5LT5kZXYtPm9mX25vZGUgPT0gcmluZ2FjY19ucCkgeworCQkJ cmluZ2FjYyA9IGVudHJ5OworCQkJYnJlYWs7CisJCX0KKwltdXRleF91bmxvY2soJmszX3Jpbmdh Y2NfbGlzdF9sb2NrKTsKKwlvZl9ub2RlX3B1dChyaW5nYWNjX25wKTsKKworCXJldHVybiByaW5n YWNjOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSk7 CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19wcm9iZV9kdChzdHJ1Y3QgazNfcmluZ2FjYyAqcmlu Z2FjYykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSByaW5nYWNjLT5kZXYtPm9mX25v ZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmluZ2FjYy0+ZGV2OworCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgcmV0OworCisJ aWYgKCFub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiZGV2aWNlIHRyZWUgaW5mbyB1bmF2YWlsYWJs ZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG5vZGUsICJ0aSxudW0tcmluZ3MiLCAmcmluZ2FjYy0+bnVtX3JpbmdzKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LCAidGksbnVtLXJpbmdzIHJlYWQgZmFpbHVyZSAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyaW5nYWNjLT5kbWFfcmluZ19yZXNldF9xdWlyayA9 CisJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInRpLGRtYS1yaW5nLXJlc2V0LXF1aXJr Iik7CisKKwlyaW5nYWNjLT50aXNjaSA9IHRpX3NjaV9nZXRfYnlfcGhhbmRsZShub2RlLCAidGks c2NpIik7CisJaWYgKElTX0VSUihyaW5nYWNjLT50aXNjaSkpIHsKKwkJcmV0ID0gUFRSX0VSUihy aW5nYWNjLT50aXNjaSk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIo ZGV2LCAidGksc2NpIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmluZ2FjYy0+dGlzY2kgPSBO VUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5v ZGUsICJ0aSxzY2ktZGV2LWlkIiwKKwkJCQkgICAmcmluZ2FjYy0+dGlzY2lfZGV2X2lkKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAidGksc2NpLWRldi1pZCByZWFkIGZhaWwgJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGRldi0+aWQgPSByaW5nYWNjLT50aXNjaV9k ZXZfaWQ7CisKKwlyaW5nYWNjLT5ybV9ncF9yYW5nZSA9IGRldm1fdGlfc2NpX2dldF9vZl9yZXNv dXJjZShyaW5nYWNjLT50aXNjaSwgZGV2LAorCQkJCQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAor CQkJCQkJInRpLHNjaS1ybS1yYW5nZS1ncC1yaW5ncyIpOworCWlmIChJU19FUlIocmluZ2FjYy0+ cm1fZ3BfcmFuZ2UpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1TSSBp bnRlcnJ1cHRzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+cm1fZ3BfcmFuZ2UpOwor CX0KKworCXJldHVybiB0aV9zY2lfaW50YV9tc2lfZG9tYWluX2FsbG9jX2lycXMocmluZ2FjYy0+ ZGV2LAorCQkJCQkJIHJpbmdhY2MtPnJtX2dwX3JhbmdlKTsKK30KKworc3RhdGljIGludCBrM19y aW5nYWNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGsz X3JpbmdhY2MgKnJpbmdhY2M7CisJdm9pZCBfX2lvbWVtICpiYXNlX2ZpZm8sICpiYXNlX3J0Owor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisJaW50IHJldCwgaTsKKworCXJpbmdhY2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJp bmdhY2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJpbmdhY2MpCisJCXJldHVybiAtRU5PTUVNOwor CisJcmluZ2FjYy0+ZGV2ID0gZGV2OworCW11dGV4X2luaXQoJnJpbmdhY2MtPnJlcV9sb2NrKTsK KworCWRldi0+bXNpX2RvbWFpbiA9IG9mX21zaV9nZXRfZG9tYWluKGRldiwgZGV2LT5vZl9ub2Rl LAorCQkJCQkgICAgRE9NQUlOX0JVU19USV9TQ0lfSU5UQV9NU0kpOworCWlmICghZGV2LT5tc2lf ZG9tYWluKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBNU0kgZG9tYWluXG4iKTsK KwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcmV0ID0gazNfcmluZ2FjY19wcm9iZV9k dChyaW5nYWNjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJ0Iik7CisJYmFzZV9y dCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlX3J0 KSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9ydCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmlmb3MiKTsKKwliYXNlX2ZpZm8g PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZV9maWZv KSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9maWZvKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwcm94eV9nY2ZnIik7CisJcmlu Z2FjYy0+cHJveHlfZ2NmZyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYg KElTX0VSUihyaW5nYWNjLT5wcm94eV9nY2ZnKSkKKwkJcmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+ cHJveHlfZ2NmZyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYs IElPUkVTT1VSQ0VfTUVNLAorCQkJCQkgICAicHJveHlfdGFyZ2V0Iik7CisJcmluZ2FjYy0+cHJv eHlfdGFyZ2V0X2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJ U19FUlIocmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihyaW5n YWNjLT5wcm94eV90YXJnZXRfYmFzZSk7CisKKwlyaW5nYWNjLT5udW1fcHJveGllcyA9IGRiZ19y ZWFkbCgmcmluZ2FjYy0+cHJveHlfZ2NmZy0+Y29uZmlnKSAmCisJCQkJCSBLM19SSU5HQUNDX1BS T1hZX0NGR19USFJFQURTX01BU0s7CisKKwlyaW5nYWNjLT5yaW5ncyA9IGRldm1fa3phbGxvYyhk ZXYsCisJCQkJICAgICAgc2l6ZW9mKCpyaW5nYWNjLT5yaW5ncykgKgorCQkJCSAgICAgIHJpbmdh Y2MtPm51bV9yaW5ncywKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlyaW5nYWNjLT5yaW5nc19p bnVzZSA9IGRldm1fa2NhbGxvYyhkZXYsCisJCQkJCSAgICBCSVRTX1RPX0xPTkdTKHJpbmdhY2Mt Pm51bV9yaW5ncyksCisJCQkJCSAgICBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwp OworCXJpbmdhY2MtPnByb3h5X2ludXNlID0gZGV2bV9rY2FsbG9jKGRldiwKKwkJCQkJICAgIEJJ VFNfVE9fTE9OR1MocmluZ2FjYy0+bnVtX3Byb3hpZXMpLAorCQkJCQkgICAgc2l6ZW9mKHVuc2ln bmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmluZ2FjYy0+cmluZ3MgfHwgIXJpbmdh Y2MtPnJpbmdzX2ludXNlIHx8ICFyaW5nYWNjLT5wcm94eV9pbnVzZSkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ2FjYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJcmlu Z2FjYy0+cmluZ3NbaV0ucnQgPSBiYXNlX3J0ICsKKwkJCQkgICAgICAgSzNfUklOR0FDQ19SVF9S RUdTX1NURVAgKiBpOworCQlyaW5nYWNjLT5yaW5nc1tpXS5maWZvcyA9IGJhc2VfZmlmbyArCisJ CQkJCSAgSzNfUklOR0FDQ19GSUZPX1JFR1NfU1RFUCAqIGk7CisJCXJpbmdhY2MtPnJpbmdzW2ld LnBhcmVudCA9IHJpbmdhY2M7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnJpbmdfaWQgPSBpOworCQly aW5nYWNjLT5yaW5nc1tpXS5wcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisJ fQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHJpbmdhY2MpOworCisJcmluZ2FjYy0+dGlzY2lfcmlu Z19vcHMgPSAmcmluZ2FjYy0+dGlzY2ktPm9wcy5ybV9yaW5nX29wczsKKworCXBtX3J1bnRpbWVf ZW5hYmxlKGRldik7CisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCWlmIChyZXQg PCAwKSB7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBlbmFibGUgcG0gJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCW11dGV4 X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyaW5nYWNjLT5s aXN0LCAmazNfcmluZ2FjY19saXN0KTsKKwltdXRleF91bmxvY2soJmszX3JpbmdhY2NfbGlzdF9s b2NrKTsKKworCWRldl9pbmZvKGRldiwgIlJpbmcgQWNjZWxlcmF0b3IgcHJvYmVkIHJpbmdzOiV1 LCBncC1yaW5nc1sldSwldV0gc2NpLWRldi1pZDoldVxuIiwKKwkJIHJpbmdhY2MtPm51bV9yaW5n cywKKwkJIHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLnN0YXJ0LAorCQkgcmluZ2FjYy0+ cm1fZ3BfcmFuZ2UtPmRlc2NbMF0ubnVtLAorCQkgcmluZ2FjYy0+dGlzY2lfZGV2X2lkKTsKKwlk ZXZfaW5mbyhkZXYsICJkbWEtcmluZy1yZXNldC1xdWlyazogJXNcbiIsCisJCSByaW5nYWNjLT5k bWFfcmluZ19yZXNldF9xdWlyayA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCWRldl9pbmZv KGRldiwgIlJBIFByb3h5IHJldi4gJTA4eCwgbnVtX3Byb3hpZXM6JXVcbiIsCisJCSBkYmdfcmVh ZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwKKwkJIHJpbmdhY2MtPm51bV9wcm94 aWVzKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYyA9IGRldl9n ZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRl dik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJbXV0ZXhfbG9jaygmazNf cmluZ2FjY19saXN0X2xvY2spOworCWxpc3RfZGVsKCZyaW5nYWNjLT5saXN0KTsKKwltdXRleF91 bmxvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWF0Y2gg dGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGszX3JpbmdhY2Nfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRp LGFtNjU0LW5hdnNzLXJpbmdhY2MiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIGszX3JpbmdhY2Nfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBrM19yaW5nYWNjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gazNfcmluZ2FjY19wcm9iZSwKKwku cmVtb3ZlCQk9IGszX3JpbmdhY2NfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJr My1yaW5nYWNjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gazNfcmluZ2FjY19vZl9tYXRjaCwKKwl9 LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoazNfcmluZ2FjY19kcml2ZXIpOworCitNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIFJpbmdhY2MgZHJp dmVyIGZvciBLMyBTT0NzIik7CitNT0RVTEVfQVVUSE9SKCJHcnlnb3JpaSBTdHJhc2hrbyA8Z3J5 Z29yaWkuc3RyYXNoa29AdGkuY29tPiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2Mv dGkvazMtcmluZ2FjYy5oIGIvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2JkYzg1MzMyZTMzCi0tLSAvZGV2 L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCkBAIC0wLDAgKzEs MjU4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIEsz IFJpbmcgQWNjZWxlcmF0b3IgKFJBKSBzdWJzeXN0ZW0gaW50ZXJmYWNlCisgKgorICogQ29weXJp Z2h0IChDKSAyMDE5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cu dGkuY29tCisgKi8KKworI2lmbmRlZiBfX1NPQ19USV9LM19SSU5HQUNDX0FQSV9IXworI2RlZmlu ZSBfX1NPQ19USV9LM19SSU5HQUNDX0FQSV9IXworCisvKioKKyAqIGVudW0gazNfcmluZ19tb2Rl IC0gJnN0cnVjdCBrM19yaW5nX2NmZyBtb2RlCisgKgorICogUkEgcmluZyBvcGVyYXRpb25hbCBt b2RlcworICoKKyAqIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HOiBFeHBvc2VkIFJpbmcgbW9k ZSBmb3IgU1cgZGlyZWN0IGFjY2VzcworICogQEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0U6 IE1lc3NhZ2luZyBtb2RlLiBNZXNzYWdpbmcgbW9kZSByZXF1aXJlcworICoJdGhhdCBhbGwgYWNj ZXNzZXMgdG8gdGhlIHF1ZXVlIG11c3QgZ28gdGhyb3VnaCB0aGlzIElQIHNvIHRoYXQgYWxsCisg KglhY2Nlc3NlcyB0byB0aGUgbWVtb3J5IGFyZSBjb250cm9sbGVkIGFuZCBvcmRlcmVkLiBUaGlz IElQIHRoZW4KKyAqCWNvbnRyb2xzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHF1ZXVlLCBhbmQg U1cgaGFzIG5vIGRpcmVjdGx5IGNvbnRyb2wsCisgKglzdWNoIGFzIHRocm91Z2ggZG9vcmJlbGxz IGFuZCBjYW5ub3QgYWNjZXNzIHRoZSBzdG9yYWdlIG1lbW9yeSBkaXJlY3RseS4KKyAqCVRoaXMg aXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIG1vcmUgdGhhbiBvbmUgU1cgb3IgSFcgZW50aXR5 IGNhbiBiZQorICoJdGhlIHByb2R1Y2VyIGFuZC9vciBjb25zdW1lciBhdCB0aGUgc2FtZSB0aW1l CisgKiBASzNfUklOR0FDQ19SSU5HX01PREVfQ1JFREVOVElBTFM6IENyZWRlbnRpYWxzIG1vZGUg aXMgbWVzc2FnZSBtb2RlIHBsdXMKKyAqCXN0b3JlcyBjcmVkZW50aWFscyB3aXRoIGVhY2ggbWVz c2FnZSwgcmVxdWlyaW5nIHRoZSBlbGVtZW50IHNpemUgdG8gYmUKKyAqCWRvdWJsZWQgdG8gZml0 IHRoZSBjcmVkZW50aWFscy4gQW55IGV4cG9zZWQgbWVtb3J5IHNob3VsZCBiZSBwcm90ZWN0ZWQK KyAqCWJ5IGEgZmlyZXdhbGwgZnJvbSB1bndhbnRlZCBhY2Nlc3MKKyAqIEBLM19SSU5HQUNDX1JJ TkdfTU9ERV9RTTogIFF1ZXVlIG1hbmFnZXIgbW9kZS4gVGhpcyB0YWtlcyB0aGUgY3JlZGVudGlh bHMKKyAqCW1vZGUgYW5kIGFkZHMgcGFja2V0IGxlbmd0aCBwZXIgZWxlbWVudCwgYWxvbmcgd2l0 aCBhZGRpdGlvbmFsIHJlYWQgb25seQorICoJZmllbGRzIGZvciBlbGVtZW50IGNvdW50IGFuZCBh Y2N1bXVsYXRlZCBxdWV1ZSBsZW5ndGguIFRoZSBRTSBtb2RlIG9ubHkKKyAqCW9wZXJhdGVzIHdp dGggYW4gOCBieXRlIGVsZW1lbnQgc2l6ZSAoYW55IG90aGVyIGVsZW1lbnQgc2l6ZSBpcworICoJ aWxsZWdhbCksIGFuZCBsaWtlIGluIGNyZWRlbnRpYWxzIG1vZGUgZWFjaCBvcGVyYXRpb24gdXNl cyAyIGVsZW1lbnQKKyAqCXNsb3RzIHRvIHN0b3JlIHRoZSBjcmVkZW50aWFscyBhbmQgbGVuZ3Ro IGZpZWxkcworICovCitlbnVtIGszX3JpbmdfbW9kZSB7CisJSzNfUklOR0FDQ19SSU5HX01PREVf UklORyA9IDAsCisJSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRSwKKwlLM19SSU5HQUNDX1JJ TkdfTU9ERV9DUkVERU5USUFMUywKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9RTSwKKwlLM19SSU5H QUNDX1JJTkdfTU9ERV9JTlZBTElECit9OworCisvKioKKyAqIGVudW0gazNfcmluZ19zaXplIC0g JnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZQorICoKKyAqIFJBIHJpbmcgZWxlbWVudCdzIHNp emVzIGluIGJ5dGVzLgorICovCitlbnVtIGszX3Jpbmdfc2l6ZSB7CisJSzNfUklOR0FDQ19SSU5H X0VMU0laRV80ID0gMCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzgsCisJSzNfUklOR0FDQ19S SU5HX0VMU0laRV8xNiwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzMyLAorCUszX1JJTkdBQ0Nf UklOR19FTFNJWkVfNjQsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xMjgsCisJSzNfUklOR0FD Q19SSU5HX0VMU0laRV8yNTYsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECit9Owor CitzdHJ1Y3QgazNfcmluZ2FjYzsKK3N0cnVjdCBrM19yaW5nOworCisvKioKKyAqIGVudW0gazNf cmluZ19jZmcgLSBSQSByaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICogQHNpemU6 IFJpbmcgc2l6ZSwgbnVtYmVyIG9mIGVsZW1lbnRzCisgKiBAZWxtX3NpemU6IFJpbmcgZWxlbWVu dCBzaXplCisgKiBAbW9kZTogUmluZyBvcGVyYXRpb25hbCBtb2RlCisgKiBAZmxhZ3M6IFJpbmcg Y29uZmlndXJhdGlvbiBmbGFncy4gUG9zc2libGUgdmFsdWVzOgorICoJIEBLM19SSU5HQUNDX1JJ TkdfU0hBUkVEOiB3aGVuIHNldCBhbGxvd3MgdG8gcmVxdWVzdCB0aGUgc2FtZSByaW5nCisgKgkg ZmV3IHRpbWVzLiBJdCdzIHVzYWJsZSB3aGVuIHRoZSBzYW1lIHJpbmcgaXMgdXNlZCBhcyBGcmVl IEhvc3QgUEQgcmluZworICoJIGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxlLgorICoJ IE5vdGU6IExvY2tpbmcgc2hvdWxkIGJlIGRvbmUgYnkgY29uc3VtZXIgaWYgcmVxdWlyZWQKKyAq Lworc3RydWN0IGszX3JpbmdfY2ZnIHsKKwl1MzIgc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6ZSBl bG1fc2l6ZTsKKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOworI2RlZmluZSBLM19SSU5HQUNDX1JJ TkdfU0hBUkVEIEJJVCgxKQorCXUzMiBmbGFnczsKK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19S SU5HX0lEX0FOWSAoLTEpCisKKy8qKgorICogb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSAt IGZpbmQgYSBSQSBieSBwaGFuZGxlIHByb3BlcnR5CisgKiBAbnA6IGRldmljZSBub2RlCisgKiBA cHJvcG5hbWU6IHByb3BlcnR5IG5hbWUgY29udGFpbmluZyBwaGFuZGxlIG9uIFJBIG5vZGUKKyAq CisgKiBSZXR1cm5zIHBvaW50ZXIgb24gdGhlIFJBIC0gc3RydWN0IGszX3JpbmdhY2MKKyAqIG9y IC1FTk9ERVYgaWYgbm90IGZvdW5kLAorICogb3IgLUVQUk9CRV9ERUZFUiBpZiBub3QgeWV0IHJl Z2lzdGVyZWQKKyAqLworc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3Bo YW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5 KTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZIEJJVCgxKQorCisvKioKKyAq IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nIC0gcmVxdWVzdCByaW5nIGZyb20gcmluZ2FjYworICog QHJpbmdhY2M6IHBvaW50ZXIgb24gcmluZ2FjYworICogQGlkOiByaW5nIGlkIG9yIEszX1JJTkdB Q0NfUklOR19JRF9BTlkgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZworICogQGZsYWdzOgor ICoJQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFk6IGlmIHNldCAtIHByb3h5IHdpbGwgYmUgYWxs b2NhdGVkIGFuZAorICoJCXVzZWQgdG8gYWNjZXNzIHJpbmcgbWVtb3J5LiBTb3Bwb3J0ZWQgb25s eSBmb3IgcmluZ3MgaW4KKyAqCQlNZXNzYWdlL0NyZWRlbnRpYWxzL1F1ZXVlIG1vZGUuCisgKgor ICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSaW5nIC0gc3RydWN0IGszX3JpbmcKKyAqIG9yIE5V TEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19y ZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMy IGZsYWdzKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0Cisg KiBAcmluZzogcG9pbnRlciBvbiBSaW5nCisgKgorICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3Rh dGUgKChodylvY2MsIChodylpZHgpLgorICogVE9ET19HUzogPyBSaW5nIGNhbiBiZSByZXVzZWQg d2l0aG91dCByZWNvbmZpZ3VyYXRpb24KKyAqLwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQo c3RydWN0IGszX3JpbmcgKnJpbmcpOworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSBy aW5nIHJlc2V0IGZvciBETUEgcmluZ3MKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisg KiBSZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuIFNob3VsZCBi ZSB1c2VkIGZvciByaW5ncworICogd2hpY2ggYXJlIHJlYWQgYnkgSzMgVURNQSwgbGlrZSBUWCBv ciBGcmVlIEhvc3QgUEQgcmluZ3MuCisgKi8KK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2Rt YShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYyk7CisKKy8qKgorICogazNfcmluZ2FjY19y aW5nX2ZyZWUgLSByaW5nIGZyZWUKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBS ZXNldHMgcmluZyBhbmQgZnJlZSBhbGwgYWxvY2F0ZWQgcmVzb3VyY2VzLgorICovCitpbnQgazNf cmluZ2FjY19yaW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3Jp bmdhY2NfZ2V0X3JpbmdfaWQgLSBHZXQgdGhlIFJpbmcgSUQKKyAqIEByaW5nOiBwb2ludGVyIG9u IHJpbmcKKyAqCisgKiBSZXR1cm5zIHRoZSBSaW5nIElECisgKi8KK3UzMiBrM19yaW5nYWNjX2dl dF9yaW5nX2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX2dl dF9yaW5nX2lycV9udW0gLSBHZXQgdGhlIGlycSBudW1iZXIgZm9yIHRoZSByaW5nCisgKiBAcmlu ZzogcG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0aGUgaW50ZXJydXB0IG51bWJlciB3 aGljaCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQKKyAqLworaW50IGszX3Jp bmdhY2NfZ2V0X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICog azNfcmluZ2FjY19yaW5nX2NmZyAtIHJpbmcgY29uZmlndXJlCisgKiBAcmluZzogcG9pbnRlciBv biByaW5nCisgKiBAY2ZnOiBSaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoc2VlICZzdHJ1 Y3QgazNfcmluZ19jZmcpCisgKgorICogQ29uZmlndXJlcyByaW5nLCBpbmNsdWRpbmcgcmluZyBt ZW1vcnkgYWxsb2NhdGlvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndp c2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBrM19yaW5nICpyaW5nLCBz dHJ1Y3QgazNfcmluZ19jZmcgKmNmZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX2dldF9z aXplIC0gZ2V0IHJpbmcgc2l6ZQorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJl dHVybnMgcmluZyBzaXplIGluIG51bWJlciBvZiBlbGVtZW50cy4KKyAqLwordTMyIGszX3Jpbmdh Y2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmlu Z2FjY19yaW5nX2dldF9mcmVlIC0gZ2V0IGZyZWUgZWxlbWVudHMKKyAqIEByaW5nOiBwb2ludGVy IG9uIHJpbmcKKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmcmVlIGVsZW1lbnRzIGluIHRoZSBy aW5nLgorICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpy aW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyAtIGdldCByaW5nIG9jY3Vw YW5jeQorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdG90YWwgbnVt YmVyIG9mIHZhbGlkIGVudHJpZXMgb24gdGhlIHJpbmcKKyAqLwordTMyIGszX3JpbmdhY2Nfcmlu Z19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3Jp bmdfaXNfZnVsbCAtIGNoZWNrcyBpZiByaW5nIGlzIGZ1bGwKKyAqIEByaW5nOiBwb2ludGVyIG9u IHJpbmcKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJpbmcgaXMgZnVsbAorICovCit1MzIg azNfcmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAq IGszX3JpbmdhY2NfcmluZ19wdXNoIC0gcHVzaCBlbGVtZW50IHRvIHRoZSByaW5nIHRhaWwKKyAq IEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVu dCBidWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbC4g U2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmln dXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBv biBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfcHVz aChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2Fj Y19yaW5nX3BvcCAtIHBvcCBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBv aW50ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgor ICoKKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQuIFNpemUgb2Yg dGhlIHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24g JnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nl c3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19w dXNoX2hlYWQgLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBvaW50 ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoK KyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyBoZWFkLiBTaXplIG9mIHRoZSBy aW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1 Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVy cm5vIG90aGVyd2lzZS4KKyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FD Q19SSU5HX01PREVfUklORworICovCitpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5n X3BvcF90YWlsIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsCisgKiBAcmluZzogcG9p bnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisg KgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgdGFpbC4gU2l6ZSBvZiB0 aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAm c3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCBlcnJubyBvdGhlcndpc2UuCisgKiBOb3QgU3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEszX1JJ TkdBQ0NfUklOR19NT0RFX1JJTkcKKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3UzMiBrM19yaW5nYWNjX2dldF90 aXNjaV9kZXZfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIERlYnVnZ2luZyBk ZWZpbml0aW9ucworICogVE9ETzogbWlnaHQgYmUgcmVtb3ZlZAorICovCisjaWZkZWYgQ09ORklH X1RJX0szX1JJTkdBQ0NfREVCVUcKK3ZvaWQgazNfcmluZ2FjY19yaW5nX2R1bXAoc3RydWN0IGsz X3JpbmcgKnJpbmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrM19yaW5nYWNjX3Jpbmdf ZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykge307CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU09D X1RJX0szX1JJTkdBQ0NfQVBJX0hfICovCi0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlu bGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2lu ZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=