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 30F00C43603 for ; Mon, 9 Dec 2019 09:45:30 +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 EB89620726 for ; Mon, 9 Dec 2019 09:45: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="MGjKuD8r"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="pXEXbxh+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB89620726 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=22NbSDpYBXGCo6BTT2T24IsFZ2ET2TX/TmmHP4pr17U=; b=MGjKuD8r2voCKB ZfVJDgbQ/DyBkTKW10sc/nxQOxRpdtS6F+WDTlnFEguO6/8K7CCr5tVKG3ZvnVbEpPrNVNVOz61KG jyULhWO8KI6Y+U44nzIoPbZTEGEs/09BibPYsxlvdBeFypQcGYGhDpFVCOD18FupC9SrD94Kn+r5b 4rKmKwzT8rhmPUExeQbGZlkHsQdfeDyjJLSsMBNjI+qaNPPITjbLskPQWpooScs/jmcOp3w4XZ5nx hngR8eEWuakf8XmCrTC65AYh4vhAZsHlm3iDtpfOrCw2nomrjPpLBVa5APP3713zRz0IM5fSQiqX3 wa7WxyN9Ikc+376ck/IA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ieFbb-0007cW-Hm; Mon, 09 Dec 2019 09:45:27 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ieFa7-00058W-Jt for linux-arm-kernel@lists.infradead.org; Mon, 09 Dec 2019 09:44:00 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id xB99hn3E088362; Mon, 9 Dec 2019 03:43:49 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1575884629; bh=+/0scCMj7l2rxGGipc/RG99u+wu2kARReIQi7Xje5eg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=pXEXbxh+IG/aaZPOt05oBXyVNFdLq6qAknoThcbmhEW0KbZXAq6QKGXGz4Vc26h++ bnJh1KSczyqyc2To0aYdyNTMziEHn2u5tTPltGDQHYygj6c9ZuiXsq9Zfa6ZzSGnhZ LkUF3aVQEBN0tTK4UGj6GOerlN+s46mwPENQrO5M= Received: from DFLE104.ent.ti.com (dfle104.ent.ti.com [10.64.6.25]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id xB99hnuU032000; Mon, 9 Dec 2019 03:43:49 -0600 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 9 Dec 2019 03:43:37 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 9 Dec 2019 03:43:37 -0600 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id xB99hOWj080263; Mon, 9 Dec 2019 03:43:33 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v7 02/12] soc: ti: k3: add navss ringacc driver Date: Mon, 9 Dec 2019 11:43:22 +0200 Message-ID: <20191209094332.4047-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191209094332.4047-1-peter.ujfalusi@ti.com> References: <20191209094332.4047-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-20191209_014355_850407_7A590660 X-CRM114-Status: GOOD ( 22.94 ) 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, vigneshr@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 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 aGlsZSBUSS1TQ0kgTWVzc2FnZQpQcm90b2NvbCBzdXBwb3J0cyBvbmx5IG9uZSBjb21iaW5lZCBv cGVyYXRpb24gKGFsbG9jYXRlK2NvbmZpZ3VyZSkuCgpTaWduZWQtb2ZmLWJ5OiBHcnlnb3JpaSBT dHJhc2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29tPgpTaWduZWQtb2ZmLWJ5OiBQZXRlciBV amZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgpSZXZpZXdlZC1ieTogVGVybyBLcmlzdG8g PHQta3Jpc3RvQHRpLmNvbT4KLS0tCiBkcml2ZXJzL3NvYy90aS9LY29uZmlnICAgICAgICAgICAg fCAgIDExICsKIGRyaXZlcnMvc29jL3RpL01ha2VmaWxlICAgICAgICAgICB8ICAgIDEgKwogZHJp dmVycy9zb2MvdGkvazMtcmluZ2FjYy5jICAgICAgIHwgMTE4MCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oIHwgIDI0NCArKysr KysKIDQgZmlsZXMgY2hhbmdlZCwgMTQzNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkv S2NvbmZpZyBiL2RyaXZlcnMvc29jL3RpL0tjb25maWcKaW5kZXggY2Y1NDVmNDI4ZDAzLi5iZGNl OThmNjhhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL0tjb25maWcKKysrIGIvZHJpdmVy cy9zb2MvdGkvS2NvbmZpZwpAQCAtODAsNiArODAsMTcgQEAgY29uZmlnIFRJX1NDSV9QTV9ET01B SU5TCiAJICBjYWxsZWQgdGlfc2NpX3BtX2RvbWFpbnMuIE5vdGUgdGhpcyBpcyBuZWVkZWQgZWFy bHkgaW4gYm9vdCBiZWZvcmUKIAkgIHJvb3RmcyBtYXkgYmUgYXZhaWxhYmxlLgogCitjb25maWcg VElfSzNfUklOR0FDQworCXRyaXN0YXRlICJLMyBSaW5nIGFjY2VsZXJhdG9yIFN1YiBTeXN0ZW0i CisJZGVwZW5kcyBvbiBBUkNIX0szIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gVElfU0NJ X0lOVEFfSVJRQ0hJUAorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgSzMgUmlu ZyBhY2NlbGVyYXRvciBtb2R1bGUuCisJICBUaGUgUmluZyBBY2NlbGVyYXRvciAoUklOR0FDQyBv ciBSQSkgIHByb3ZpZGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgorCSAgdG8gZW5hYmxlIHN0cmFp Z2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBhIHByb2R1Y2VyCisJICBhbmQgYSBj b25zdW1lci4gVGhlcmUgaXMgb25lIFJJTkdBQ0MgbW9kdWxlIHBlciBOQVZTUyBvbiBUSSBBTTY1 eCBTb0NzCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRpZiAjIFNPQ19USQogCiBjb25maWcg VElfU0NJX0lOVEFfTVNJX0RPTUFJTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvTWFrZWZp bGUgYi9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQppbmRleCA3ODhiNWNkMWUxODAuLmJlYzgyNzkz N2E1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9z b2MvdGkvTWFrZWZpbGUKQEAgLTEwLDMgKzEwLDQgQEAgb2JqLSQoQ09ORklHX0FSQ0hfT01BUDJQ TFVTKQkJKz0gb21hcF9wcm0ubwogb2JqLSQoQ09ORklHX1dLVVBfTTNfSVBDKQkJKz0gd2t1cF9t M19pcGMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9QTV9ET01BSU5TKQkJKz0gdGlfc2NpX3BtX2Rv bWFpbnMubwogb2JqLSQoQ09ORklHX1RJX1NDSV9JTlRBX01TSV9ET01BSU4pCSs9IHRpX3NjaV9p bnRhX21zaS5vCitvYmotJChDT05GSUdfVElfSzNfUklOR0FDQykJCSs9IGszLXJpbmdhY2Mubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jIGIvZHJpdmVycy9zb2MvdGkv azMtcmluZ2FjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmQ5 ZjM1YjdjOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5j CkBAIC0wLDAgKzEsMTE4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8qCisgKiBUSSBLMyBOQVZTUyBSaW5nIEFjY2VsZXJhdG9yIHN1YnN5c3RlbSBkcml2ZXIKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0g aHR0cDovL3d3dy50aS5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4K KyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvc29jL3RpL2szLXJpbmdhY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkv dGlfc2NpX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvc29jL3RpL3RpX3NjaV9pbnRhX21z aS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFp bi5oPgorCitzdGF0aWMgTElTVF9IRUFEKGszX3JpbmdhY2NfbGlzdCk7CitzdGF0aWMgREVGSU5F X01VVEVYKGszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKworI2RlZmluZSBLM19SSU5HQUNDX0NGR19S SU5HX1NJWkVfRUxDTlRfTUFTSwkJR0VOTUFTSygxOSwgMCkKKworLyoqCisgKiBzdHJ1Y3QgazNf cmluZ19ydF9yZWdzIC0gVGhlIFJBIHJlYWx0aW1lIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyBy ZWdpb24KKyAqCisgKiBAcmVzdl8xNjogUmVzZXJ2ZWQKKyAqIEBkYjogUmluZyBEb29yYmVsbCBS ZWdpc3RlcgorICogQHJlc3ZfNDogUmVzZXJ2ZWQKKyAqIEBvY2M6IFJpbmcgT2NjdXBhbmN5IFJl Z2lzdGVyCisgKiBAaW5keDogUmluZyBDdXJyZW50IEluZGV4IFJlZ2lzdGVyCisgKiBAaHdvY2M6 IFJpbmcgSGFyZHdhcmUgT2NjdXBhbmN5IFJlZ2lzdGVyCisgKiBAaHdpbmR4OiBSaW5nIEhhcmR3 YXJlIEN1cnJlbnQgSW5kZXggUmVnaXN0ZXIKKyAqLworc3RydWN0IGszX3JpbmdfcnRfcmVncyB7 CisJdTMyCXJlc3ZfMTZbNF07CisJdTMyCWRiOworCXUzMglyZXN2XzRbMV07CisJdTMyCW9jYzsK Kwl1MzIJaW5keDsKKwl1MzIJaHdvY2M7CisJdTMyCWh3aW5keDsKK307CisKKyNkZWZpbmUgSzNf UklOR0FDQ19SVF9SRUdTX1NURVAJMHgxMDAwCisKKy8qKgorICogc3RydWN0IGszX3JpbmdfZmlm b19yZWdzIC0gVGhlIFJpbmcgQWNjZWxlcmF0b3IgUXVldWVzIFJlZ2lzdGVycyByZWdpb24KKyAq CisgKiBAaGVhZF9kYXRhOiBSaW5nIEhlYWQgRW50cnkgRGF0YSBSZWdpc3RlcnMKKyAqIEB0YWls X2RhdGE6IFJpbmcgVGFpbCBFbnRyeSBEYXRhIFJlZ2lzdGVycworICogQHBlZWtfaGVhZF9kYXRh OiBSaW5nIFBlZWsgSGVhZCBFbnRyeSBEYXRhIFJlZ3MKKyAqIEBwZWVrX3RhaWxfZGF0YTogUmlu ZyBQZWVrIFRhaWwgRW50cnkgRGF0YSBSZWdzCisgKi8KK3N0cnVjdCBrM19yaW5nX2ZpZm9fcmVn cyB7CisJdTMyCWhlYWRfZGF0YVsxMjhdOworCXUzMgl0YWlsX2RhdGFbMTI4XTsKKwl1MzIJcGVl a19oZWFkX2RhdGFbMTI4XTsKKwl1MzIJcGVla190YWlsX2RhdGFbMTI4XTsKK307CisKKy8qKgor ICogc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdzIC0gUkEgUHJveHkgR2xvYmFsIENv bmZpZyBNTUlPIFJlZ2lvbgorICoKKyAqIEByZXZpc2lvbjogUmV2aXNpb24gUmVnaXN0ZXIKKyAq IEBjb25maWc6IENvbmZpZyBSZWdpc3RlcgorICovCitzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV9n Y2ZnX3JlZ3MgeworCXUzMglyZXZpc2lvbjsKKwl1MzIJY29uZmlnOworfTsKKworI2RlZmluZSBL M19SSU5HQUNDX1BST1hZX0NGR19USFJFQURTX01BU0sJCUdFTk1BU0soMTUsIDApCisKKy8qKgor ICogc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgLSBQcm94eSBEYXRhcGF0aCBN TUlPIFJlZ2lvbgorICoKKyAqIEBjb250cm9sOiBQcm94eSBDb250cm9sIFJlZ2lzdGVyCisgKiBA c3RhdHVzOiBQcm94eSBTdGF0dXMgUmVnaXN0ZXIKKyAqIEByZXN2XzUxMjogUmVzZXJ2ZWQKKyAq IEBkYXRhOiBQcm94eSBEYXRhIFJlZ2lzdGVyCisgKi8KK3N0cnVjdCBrM19yaW5nYWNjX3Byb3h5 X3RhcmdldF9yZWdzIHsKKwl1MzIJY29udHJvbDsKKwl1MzIJc3RhdHVzOworCXU4CXJlc3ZfNTEy WzUwNF07CisJdTMyCWRhdGFbMTI4XTsKK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9U QVJHRVRfU1RFUAkweDEwMDAKKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRAkoLTEp CisKK2VudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSB7CisJUFJPWFlfQUNDRVNTX01P REVfSEVBRCA9IDAsCisJUFJPWFlfQUNDRVNTX01PREVfVEFJTCA9IDEsCisJUFJPWFlfQUNDRVNT X01PREVfUEVFS19IRUFEID0gMiwKKwlQUk9YWV9BQ0NFU1NfTU9ERV9QRUVLX1RBSUwgPSAzLAor fTsKKworI2RlZmluZSBLM19SSU5HQUNDX0ZJRk9fV0lORE9XX1NJWkVfQllURVMgICg1MTJVKQor I2RlZmluZSBLM19SSU5HQUNDX0ZJRk9fUkVHU19TVEVQCTB4MTAwMAorI2RlZmluZSBLM19SSU5H QUNDX01BWF9EQl9SSU5HX0NOVCAgICAoMTI3VSkKKworc3RydWN0IGszX3Jpbmdfb3BzIHsKKwlp bnQgKCpwdXNoX3RhaWwpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOworCWludCAo KnB1c2hfaGVhZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcG9w X3RhaWwpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOworCWludCAoKnBvcF9oZWFk KShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKK307CisKKy8qKgorICogc3RydWN0 IGszX3JpbmcgLSBSQSBSaW5nIGRlc2NyaXB0b3IKKyAqCisgKiBAcnQ6IFJpbmcgY29udHJvbC9z dGF0dXMgcmVnaXN0ZXJzCisgKiBAZmlmb3M6IFJpbmcgcXVldWVzIHJlZ2lzdGVycworICogQHBy b3h5OiBSaW5nIFByb3h5IERhdGFwYXRoIHJlZ2lzdGVycworICogQHJpbmdfbWVtX2RtYTogUmlu ZyBidWZmZXIgZG1hIGFkZHJlc3MKKyAqIEByaW5nX21lbV92aXJ0OiBSaW5nIGJ1ZmZlciB2aXJ0 IGFkZHJlc3MKKyAqIEBvcHM6IFJpbmcgb3BlcmF0aW9ucworICogQHNpemU6IFJpbmcgc2l6ZSBp biBlbGVtZW50cworICogQGVsbV9zaXplOiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQKKyAqIEBt b2RlOiBSaW5nIG1vZGUKKyAqIEBmbGFnczogZmxhZ3MKKyAqIEBmcmVlOiBOdW1iZXIgb2YgZnJl ZSBlbGVtZW50cworICogQG9jYzogUmluZyBvY2N1cGFuY3kKKyAqIEB3aW5kZXg6IFdyaXRlIGlu ZGV4IChvbmx5IGZvciBASzNfUklOR0FDQ19SSU5HX01PREVfUklORykKKyAqIEByaW5kZXg6IFJl YWQgaW5kZXggKG9ubHkgZm9yIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorICogQHJpbmdf aWQ6IFJpbmcgSWQKKyAqIEBwYXJlbnQ6IFBvaW50ZXIgb24gc3RydWN0IEBrM19yaW5nYWNjCisg KiBAdXNlX2NvdW50OiBVc2UgY291bnQgZm9yIHNoYXJlZCByaW5ncworICogQHByb3h5X2lkOiBS QSBSaW5nIFByb3h5IElkIChvbmx5IGlmIEBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZKQorICov CitzdHJ1Y3QgazNfcmluZyB7CisJc3RydWN0IGszX3JpbmdfcnRfcmVncyBfX2lvbWVtICpydDsK KwlzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgX19pb21lbSAqZmlmb3M7CisJc3RydWN0IGszX3Jp bmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgIF9faW9tZW0gKnByb3h5OworCWRtYV9hZGRyX3QJcmlu Z19tZW1fZG1hOworCXZvaWQJCSpyaW5nX21lbV92aXJ0OworCXN0cnVjdCBrM19yaW5nX29wcyAq b3BzOworCXUzMgkJc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6ZSBlbG1fc2l6ZTsKKwllbnVtIGsz X3JpbmdfbW9kZSBtb2RlOworCXUzMgkJZmxhZ3M7CisjZGVmaW5lIEszX1JJTkdfRkxBR19CVVNZ CUJJVCgxKQorI2RlZmluZSBLM19SSU5HX0ZMQUdfU0hBUkVECUJJVCgyKQorCXUzMgkJZnJlZTsK Kwl1MzIJCW9jYzsKKwl1MzIJCXdpbmRleDsKKwl1MzIJCXJpbmRleDsKKwl1MzIJCXJpbmdfaWQ7 CisJc3RydWN0IGszX3JpbmdhY2MJKnBhcmVudDsKKwl1MzIJCXVzZV9jb3VudDsKKwlpbnQJCXBy b3h5X2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjYyAtIFJpbmdzIGFjY2VsZXJh dG9yIGRlc2NyaXB0b3IKKyAqCisgKiBAZGV2OiBwb2ludGVyIG9uIFJBIGRldmljZQorICogQHBy b3h5X2djZmc6IFJBIHByb3h5IGdsb2JhbCBjb25maWcgcmVnaXN0ZXJzCisgKiBAcHJveHlfdGFy Z2V0X2Jhc2U6IFJBIHByb3h5IGRhdGFwYXRoIHJlZ2lvbgorICogQG51bV9yaW5nczogbnVtYmVy IG9mIHJpbmcgaW4gUkEKKyAqIEByaW5nc19pbnVzZTogYml0ZmllbGQgZm9yIHJpbmcgdXNhZ2Ug dHJhY2tpbmcKKyAqIEBybV9ncF9yYW5nZTogZ2VuZXJhbCBwdXJwb3NlIHJpbmdzIHJhbmdlIGZy b20gdGlzY2kKKyAqIEBkbWFfcmluZ19yZXNldF9xdWlyazogRE1BIHJlc2V0IHcvYSBlbmFibGUK KyAqIEBudW1fcHJveGllczogbnVtYmVyIG9mIFJBIHByb3hpZXMKKyAqIEBwcm94eV9pbnVzZTog Yml0ZmllbGQgZm9yIHByb3h5IHVzYWdlIHRyYWNraW5nCisgKiBAcmluZ3M6IGFycmF5IG9mIHJp bmdzIGRlc2NyaXB0b3JzIChzdHJ1Y3QgQGszX3JpbmcpCisgKiBAbGlzdDogbGlzdCBvZiBSQXMg aW4gdGhlIHN5c3RlbQorICogQHJlcV9sb2NrOiBwcm90ZWN0IHJpbmdzIGFsbG9jYXRpb24KKyAq IEB0aXNjaTogcG9pbnRlciB0aS1zY2kgaGFuZGxlCisgKiBAdGlzY2lfcmluZ19vcHM6IHRpLXNj aSByaW5ncyBvcHMKKyAqIEB0aXNjaV9kZXZfaWQ6IHRpLXNjaSBkZXZpY2UgaWQKKyAqLworc3Ry dWN0IGszX3JpbmdhY2MgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgazNfcmluZ2Fj Y19wcm94eV9nY2ZnX3JlZ3MgX19pb21lbSAqcHJveHlfZ2NmZzsKKwl2b2lkIF9faW9tZW0gKnBy b3h5X3RhcmdldF9iYXNlOworCXUzMiBudW1fcmluZ3M7IC8qIG51bWJlciBvZiByaW5ncyBpbiBS aW5nYWNjIG1vZHVsZSAqLworCXVuc2lnbmVkIGxvbmcgKnJpbmdzX2ludXNlOworCXN0cnVjdCB0 aV9zY2lfcmVzb3VyY2UgKnJtX2dwX3JhbmdlOworCisJYm9vbCBkbWFfcmluZ19yZXNldF9xdWly azsKKwl1MzIgbnVtX3Byb3hpZXM7CisJdW5zaWduZWQgbG9uZyAqcHJveHlfaW51c2U7CisKKwlz dHJ1Y3QgazNfcmluZyAqcmluZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBt dXRleCByZXFfbG9jazsgLyogcHJvdGVjdCByaW5ncyBhbGxvY2F0aW9uICovCisKKwljb25zdCBz dHJ1Y3QgdGlfc2NpX2hhbmRsZSAqdGlzY2k7CisJY29uc3Qgc3RydWN0IHRpX3NjaV9ybV9yaW5n YWNjX29wcyAqdGlzY2lfcmluZ19vcHM7CisJdTMyIHRpc2NpX2Rldl9pZDsKK307CisKK3N0YXRp YyBsb25nIGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3Moc3RydWN0IGszX3JpbmcgKnJpbmcp Cit7CisJcmV0dXJuIEszX1JJTkdBQ0NfRklGT19XSU5ET1dfU0laRV9CWVRFUyAtCisJICAgICAg ICg0IDw8IHJpbmctPmVsbV9zaXplKTsKK30KKworc3RhdGljIHZvaWQgKmszX3JpbmdhY2NfZ2V0 X2VsbV9hZGRyKHN0cnVjdCBrM19yaW5nICpyaW5nLCB1MzIgaWR4KQoreworCXJldHVybiAocmlu Zy0+cmluZ19tZW1fdmlydCArIGlkeCAqICg0IDw8IHJpbmctPmVsbV9zaXplKSk7Cit9CisKK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGsz X3JpbmdfbW9kZV9yaW5nX29wcyA9IHsKKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19w dXNoX21lbSwKKwkJLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9tZW0sCit9OworCitz dGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9pbyhzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X2hlYWRfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVs ZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9tc2dfb3BzID0g eworCQkucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaW8sCisJCS5wdXNoX2hlYWQg PSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX2lvLAorCQkucG9wX3RhaWwgPSBrM19yaW5nYWNj X3JpbmdfcG9wX3RhaWxfaW8sCisJCS5wb3BfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfaW8s Cit9OworCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfcHJveHkoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBrM19yaW5nYWNjX3Jpbmdf cHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKK3N0YXRp YyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5 KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworc3RhdGljIHN0cnVjdCBrM19y aW5nX29wcyBrM19yaW5nX21vZGVfcHJveHlfb3BzID0geworCQkucHVzaF90YWlsID0gazNfcmlu Z2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eSwKKwkJLnB1c2hfaGVhZCA9IGszX3JpbmdhY2Nfcmlu Z19wdXNoX2hlYWRfcHJveHksCisJCS5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFp bF9wcm94eSwKKwkJLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5LAor fTsKKworc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX2R1bXAoc3RydWN0IGszX3JpbmcgKnJp bmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmluZy0+cGFyZW50LT5kZXY7CisKKwlkZXZf ZGJnKGRldiwgImR1bXAgcmluZzogJWRcbiIsIHJpbmctPnJpbmdfaWQpOworCWRldl9kYmcoZGV2 LCAiZHVtcCBtZW0gdmlydCAlcCwgZG1hICVwYWRcbiIsIHJpbmctPnJpbmdfbWVtX3ZpcnQsCisJ CSZyaW5nLT5yaW5nX21lbV9kbWEpOworCWRldl9kYmcoZGV2LCAiZHVtcCBlbG1zaXplICVkLCBz aXplICVkLCBtb2RlICVkLCBwcm94eV9pZCAlZFxuIiwKKwkJcmluZy0+ZWxtX3NpemUsIHJpbmct PnNpemUsIHJpbmctPm1vZGUsIHJpbmctPnByb3h5X2lkKTsKKworCWRldl9kYmcoZGV2LCAiZHVt cCByaW5nX3J0X3JlZ3M6IGRiJTA4eFxuIiwgcmVhZGwoJnJpbmctPnJ0LT5kYikpOworCWRldl9k YmcoZGV2LCAiZHVtcCBvY2MlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPm9jYykpOworCWRldl9k YmcoZGV2LCAiZHVtcCBpbmR4JTA4eFxuIiwgcmVhZGwoJnJpbmctPnJ0LT5pbmR4KSk7CisJZGV2 X2RiZyhkZXYsICJkdW1wIGh3b2NjJTA4eFxuIiwgcmVhZGwoJnJpbmctPnJ0LT5od29jYykpOwor CWRldl9kYmcoZGV2LCAiZHVtcCBod2luZHglMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmh3aW5k eCkpOworCisJaWYgKHJpbmctPnJpbmdfbWVtX3ZpcnQpCisJCXByaW50X2hleF9kdW1wX2RlYnVn KCJkdW1wIHJpbmdfbWVtX3ZpcnQgIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkgICAgIDE2LCAx LCByaW5nLT5yaW5nX21lbV92aXJ0LCAxNiAqIDgsIGZhbHNlKTsKK30KKworc3RydWN0IGszX3Jp bmcgKmszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjLAor CQkJCQlpbnQgaWQsIHUzMiBmbGFncykKK3sKKwlpbnQgcHJveHlfaWQgPSBLM19SSU5HQUNDX1BS T1hZX05PVF9VU0VEOworCisJbXV0ZXhfbG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCisJaWYg KCF0cnlfbW9kdWxlX2dldChyaW5nYWNjLT5kZXYtPmRyaXZlci0+b3duZXIpKSB7CisJCW11dGV4 X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAo aWQgPT0gSzNfUklOR0FDQ19SSU5HX0lEX0FOWSkgeworCQkvKiBSZXF1ZXN0IGZvciBhbnkgZ2Vu ZXJhbCBwdXJwb3NlIHJpbmcgKi8KKwkJc3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNjICpncF9y aW5ncyA9CisJCQkJCQkmcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF07CisJCXVuc2lnbmVk IGxvbmcgc2l6ZTsKKworCQlzaXplID0gZ3BfcmluZ3MtPnN0YXJ0ICsgZ3BfcmluZ3MtPm51bTsK KwkJaWQgPSBmaW5kX25leHRfemVyb19iaXQocmluZ2FjYy0+cmluZ3NfaW51c2UsIHNpemUsCisJ CQkJCWdwX3JpbmdzLT5zdGFydCk7CisJCWlmIChpZCA9PSBzaXplKQorCQkJZ290byBlcnJvcjsK Kwl9IGVsc2UgaWYgKGlkIDwgMCkgeworCQlnb3RvIGVycm9yOworCX0KKworCWlmICh0ZXN0X2Jp dChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpICYmCisJICAgICEocmluZ2FjYy0+cmluZ3NbaWRd LmZsYWdzICYgSzNfUklOR19GTEFHX1NIQVJFRCkpCisJCWdvdG8gZXJyb3I7CisJZWxzZSBpZiAo cmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklOR19GTEFHX1NIQVJFRCkKKwkJZ290byBv dXQ7CisKKwlpZiAoZmxhZ3MgJiBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZKSB7CisJCXByb3h5 X2lkID0gZmluZF9uZXh0X3plcm9fYml0KHJpbmdhY2MtPnByb3h5X2ludXNlLAorCQkJCQkgICAg ICByaW5nYWNjLT5udW1fcHJveGllcywgMCk7CisJCWlmIChwcm94eV9pZCA9PSByaW5nYWNjLT5u dW1fcHJveGllcykKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHByb3h5X2lkICE9IEszX1JJ TkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsKKwkJc2V0X2JpdChwcm94eV9pZCwgcmluZ2FjYy0+cHJv eHlfaW51c2UpOworCQlyaW5nYWNjLT5yaW5nc1tpZF0ucHJveHlfaWQgPSBwcm94eV9pZDsKKwkJ ZGV2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmluZyMlZCBwcm94eSMlZFxuIiwgaWQsCisJ CQlwcm94eV9pZCk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcg cmluZyMlZFxuIiwgaWQpOworCX0KKworCXNldF9iaXQoaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNl KTsKK291dDoKKwlyaW5nYWNjLT5yaW5nc1tpZF0udXNlX2NvdW50Kys7CisJbXV0ZXhfdW5sb2Nr KCZyaW5nYWNjLT5yZXFfbG9jayk7CisJcmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07CisKK2Vy cm9yOgorCW1vZHVsZV9wdXQocmluZ2FjYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwltdXRleF91 bmxvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKTsKKworc3RhdGljIHZvaWQgazNfcmluZ2Fj Y19yaW5nX3Jlc2V0X3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmlu Z2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmluZ2Fj Yy0+dGlzY2lfcmluZ19vcHMtPmNvbmZpZygKKwkJCXJpbmdhY2MtPnRpc2NpLAorCQkJVElfU0NJ X01TR19WQUxVRV9STV9SSU5HX0NPVU5UX1ZBTElELAorCQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lk LAorCQkJcmluZy0+cmluZ19pZCwKKwkJCTAsCisJCQkwLAorCQkJcmluZy0+c2l6ZSwKKwkJCTAs CisJCQkwLAorCQkJMCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVND SSByZXNldCByaW5nIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmlu Z19pZCk7Cit9CisKK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0KHN0cnVjdCBrM19yaW5nICpy aW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kp KQorCQlyZXR1cm47CisKKwlyaW5nLT5vY2MgPSAwOworCXJpbmctPmZyZWUgPSAwOworCXJpbmct PnJpbmRleCA9IDA7CisJcmluZy0+d2luZGV4ID0gMDsKKworCWszX3JpbmdhY2NfcmluZ19yZXNl dF9zY2kocmluZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcmVzZXQp OworCitzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVfc2NpKHN0cnVj dCBrM19yaW5nICpyaW5nLAorCQkJCQkgICAgICAgZW51bSBrM19yaW5nX21vZGUgbW9kZSkKK3sK KwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwlpbnQgcmV0Owor CisJcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMtPmNvbmZpZygKKwkJCXJpbmdhY2MtPnRp c2NpLAorCQkJVElfU0NJX01TR19WQUxVRV9STV9SSU5HX01PREVfVkFMSUQsCisJCQlyaW5nYWNj LT50aXNjaV9kZXZfaWQsCisJCQlyaW5nLT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQkwLAor CQkJbW9kZSwKKwkJCTAsCisJCQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRl diwgIlRJU0NJIHJlY29uZiBxbW9kZSBmYWlsICglZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQs IHJpbmctPnJpbmdfaWQpOworfQorCit2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldF9kbWEoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHUzMiBvY2MpCit7CisJaWYgKCFyaW5nIHx8ICEocmluZy0+Zmxh Z3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybjsKKworCWlmICghcmluZy0+cGFyZW50 LT5kbWFfcmluZ19yZXNldF9xdWlyaykKKwkJZ290byByZXNldDsKKworCWlmICghb2NjKQorCQlv Y2MgPSByZWFkbCgmcmluZy0+cnQtPm9jYyk7CisKKwlpZiAob2NjKSB7CisJCXUzMiBkYl9yaW5n X2NudCwgZGJfcmluZ19jbnRfY3VyOworCisJCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICIl cyAldSBvY2M6ICV1XG4iLCBfX2Z1bmNfXywKKwkJCXJpbmctPnJpbmdfaWQsIG9jYyk7CisJCS8q IFRJLVNDSSByaW5nIHJlc2V0ICovCisJCWszX3JpbmdhY2NfcmluZ19yZXNldF9zY2kocmluZyk7 CisKKwkJLyoKKwkJICogU2V0dXAgdGhlIHJpbmcgaW4gcmluZy9kb29yYmVsbCBtb2RlIChpZiBu b3QgYWxyZWFkeSBpbiB0aGlzCisJCSAqIG1vZGUpCisJCSAqLworCQlpZiAocmluZy0+bW9kZSAh PSBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorCQkJazNfcmluZ2FjY19yaW5nX3JlY29uZmln X3Ftb2RlX3NjaSgKKwkJCQkJcmluZywgSzNfUklOR0FDQ19SSU5HX01PREVfUklORyk7CisJCS8q CisJCSAqIFJpbmcgdGhlIGRvb3JiZWxsIDIqKjIyIOKAkyByaW5nT2NjIHRpbWVzLgorCQkgKiBU aGlzIHdpbGwgd3JhcCB0aGUgaW50ZXJuYWwgVURNQVAgcmluZyBzdGF0ZSBvY2N1cGFuY3kKKwkJ ICogY291bnRlciAod2hpY2ggaXMgMjEtYml0cyB3aWRlKSB0byAwLgorCQkgKi8KKwkJZGJfcmlu Z19jbnQgPSAoMVUgPDwgMjIpIC0gb2NjOworCisJCXdoaWxlIChkYl9yaW5nX2NudCAhPSAwKSB7 CisJCQkvKgorCQkJICogUmluZyB0aGUgZG9vcmJlbGwgd2l0aCB0aGUgbWF4aW11bSBjb3VudCBl YWNoCisJCQkgKiBpdGVyYXRpb24gaWYgcG9zc2libGUgdG8gbWluaW1pemUgdGhlIHRvdGFsCisJ CQkgKiBvZiB3cml0ZXMKKwkJCSAqLworCQkJaWYgKGRiX3JpbmdfY250ID4gSzNfUklOR0FDQ19N QVhfREJfUklOR19DTlQpCisJCQkJZGJfcmluZ19jbnRfY3VyID0gSzNfUklOR0FDQ19NQVhfREJf UklOR19DTlQ7CisJCQllbHNlCisJCQkJZGJfcmluZ19jbnRfY3VyID0gZGJfcmluZ19jbnQ7CisK KwkJCXdyaXRlbChkYl9yaW5nX2NudF9jdXIsICZyaW5nLT5ydC0+ZGIpOworCQkJZGJfcmluZ19j bnQgLT0gZGJfcmluZ19jbnRfY3VyOworCQl9CisKKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwg cmluZyBtb2RlIChpZiBub3QgcmluZyBtb2RlKSAqLworCQlpZiAocmluZy0+bW9kZSAhPSBLM19S SU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorCQkJazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2Rl X3NjaShyaW5nLCByaW5nLT5tb2RlKTsKKwl9CisKK3Jlc2V0OgorCS8qIFJlc2V0IHRoZSByaW5n ICovCisJazNfcmluZ2FjY19yaW5nX3Jlc2V0KHJpbmcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwo azNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYSk7CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2Nfcmlu Z19mcmVlX3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAq cmluZ2FjYyA9IHJpbmctPnBhcmVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmluZ2FjYy0+dGlz Y2lfcmluZ19vcHMtPmNvbmZpZygKKwkJCXJpbmdhY2MtPnRpc2NpLAorCQkJVElfU0NJX01TR19W QUxVRV9STV9BTExfTk9fT1JERVIsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5n LT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwKTsKKwlp ZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJpbmcgZnJlZSBmYWlsICgl ZCkgcmluZ19pZHggJWRcbiIsCisJCQlyZXQsIHJpbmctPnJpbmdfaWQpOworfQorCitpbnQgazNf cmluZ2FjY19yaW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3Jp bmdhY2MgKnJpbmdhY2M7CisKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcmlu Z2FjYyA9IHJpbmctPnBhcmVudDsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJmbGFn czogMHglMDh4XG4iLCByaW5nLT5mbGFncyk7CisKKwlpZiAoIXRlc3RfYml0KHJpbmctPnJpbmdf aWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9s b2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisKKwlpZiAoLS1yaW5nLT51c2VfY291bnQpCisJCWdv dG8gb3V0OworCisJaWYgKCEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCWdv dG8gbm9faW5pdDsKKworCWszX3JpbmdhY2NfcmluZ19mcmVlX3NjaShyaW5nKTsKKworCWRtYV9m cmVlX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKKwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmct PmVsbV9zaXplKSwKKwkJCSAgcmluZy0+cmluZ19tZW1fdmlydCwgcmluZy0+cmluZ19tZW1fZG1h KTsKKwlyaW5nLT5mbGFncyA9IDA7CisJcmluZy0+b3BzID0gTlVMTDsKKwlpZiAocmluZy0+cHJv eHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkgeworCQljbGVhcl9iaXQocmluZy0+ cHJveHlfaWQsIHJpbmdhY2MtPnByb3h5X2ludXNlKTsKKwkJcmluZy0+cHJveHkgPSBOVUxMOwor CQlyaW5nLT5wcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisJfQorCitub19p bml0OgorCWNsZWFyX2JpdChyaW5nLT5yaW5nX2lkLCByaW5nYWNjLT5yaW5nc19pbnVzZSk7CisK Kwltb2R1bGVfcHV0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcik7CisKK291dDoKKwltdXRl eF91bmxvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGszX3JpbmdhY2NfcmluZ19mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Jpbmdf aWQoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJldHVybiByaW5nLT5yaW5nX2lkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmlu Z2FjY19nZXRfcmluZ19pZCk7CisKK3UzMiBrM19yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQoc3Ry dWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXJldHVybiByaW5nLT5wYXJlbnQtPnRpc2NpX2Rldl9pZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZCk7CisKK2ludCBrM19yaW5nYWNjX2dldF9yaW5n X2lycV9udW0oc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaW50IGlycV9udW07CisKKwlpZiAo IXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaXJxX251bSA9IHRpX3NjaV9pbnRhX21zaV9n ZXRfdmlycShyaW5nLT5wYXJlbnQtPmRldiwgcmluZy0+cmluZ19pZCk7CisJaWYgKGlycV9udW0g PD0gMCkKKwkJaXJxX251bSA9IC1FSU5WQUw7CisJcmV0dXJuIGlycV9udW07Cit9CitFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0pOworCitzdGF0aWMgaW50IGsz X3JpbmdhY2NfcmluZ19jZmdfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBr M19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCXUzMiByaW5nX2lkeDsKKwlpbnQg cmV0OworCisJaWYgKCFyaW5nYWNjLT50aXNjaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyaW5n X2lkeCA9IHJpbmctPnJpbmdfaWQ7CisJcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMtPmNv bmZpZygKKwkJCXJpbmdhY2MtPnRpc2NpLAorCQkJVElfU0NJX01TR19WQUxVRV9STV9BTExfTk9f T1JERVIsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5nX2lkeCwKKwkJCWxvd2Vy XzMyX2JpdHMocmluZy0+cmluZ19tZW1fZG1hKSwKKwkJCXVwcGVyXzMyX2JpdHMocmluZy0+cmlu Z19tZW1fZG1hKSwKKwkJCXJpbmctPnNpemUsCisJCQlyaW5nLT5tb2RlLAorCQkJcmluZy0+ZWxt X3NpemUsCisJCQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJ IGNvbmZpZyByaW5nIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZ19pZHgp OworCisJcmV0dXJuIHJldDsKK30KKworaW50IGszX3JpbmdhY2NfcmluZ19jZmcoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHN0cnVjdCBrM19yaW5nX2NmZyAqY2ZnKQoreworCXN0cnVjdCBrM19yaW5n YWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQgPSAwOworCisJaWYgKCFyaW5n IHx8ICFjZmcpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjZmctPmVsbV9zaXplID4gSzNfUklO R0FDQ19SSU5HX0VMU0laRV8yNTYgfHwKKwkgICAgY2ZnLT5tb2RlID49IEszX1JJTkdBQ0NfUklO R19NT0RFX0lOVkFMSUQgfHwKKwkgICAgY2ZnLT5zaXplICYgfkszX1JJTkdBQ0NfQ0ZHX1JJTkdf U0laRV9FTENOVF9NQVNLIHx8CisJICAgICF0ZXN0X2JpdChyaW5nLT5yaW5nX2lkLCByaW5nYWNj LT5yaW5nc19pbnVzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNmZy0+bW9kZSA9PSBL M19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFICYmCisJICAgIHJpbmctPnByb3h5X2lkID09IEsz X1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQgJiYKKwkgICAgY2ZnLT5lbG1fc2l6ZSA+IEszX1JJTkdB Q0NfUklOR19FTFNJWkVfOCkgeworCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwKKwkJCSJNZXNzYWdl IG1vZGUgbXVzdCB1c2UgcHJveHkgZm9yICV1IGVsZW1lbnQgc2l6ZVxuIiwKKwkJCTQgPDwgcmlu Zy0+ZWxtX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEluIGNhc2Ug b2Ygc2hhcmVkIHJpbmcgb25seSB0aGUgZmlyc3QgdXNlciAobWFzdGVyIHVzZXIpIGNhbgorCSAq IGNvbmZpZ3VyZSB0aGUgcmluZy4gVGhlIHNlcXVlbmNlIHNob3VsZCBiZSBieSB0aGUgY2xpZW50 OgorCSAqIHJpbmcgPSBrM19yaW5nYWNjX3JlcXVlc3RfcmluZyhyaW5nYWNjLCByaW5nX2lkLCAw KTsgIyBtYXN0ZXIgdXNlcgorCSAqIGszX3JpbmdhY2NfcmluZ19jZmcocmluZywgY2ZnKTsgIyBt YXN0ZXIgY29uZmlndXJhdGlvbgorCSAqIGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJpbmdhY2Ms IHJpbmdfaWQsIEszX1JJTkdfRkxBR19TSEFSRUQpOworCSAqIGszX3JpbmdhY2NfcmVxdWVzdF9y aW5nKHJpbmdhY2MsIHJpbmdfaWQsIEszX1JJTkdfRkxBR19TSEFSRUQpOworCSAqLworCWlmIChy aW5nLT51c2VfY291bnQgIT0gMSkKKwkJcmV0dXJuIDA7CisKKwlyaW5nLT5zaXplID0gY2ZnLT5z aXplOworCXJpbmctPmVsbV9zaXplID0gY2ZnLT5lbG1fc2l6ZTsKKwlyaW5nLT5tb2RlID0gY2Zn LT5tb2RlOworCXJpbmctPm9jYyA9IDA7CisJcmluZy0+ZnJlZSA9IDA7CisJcmluZy0+cmluZGV4 ID0gMDsKKwlyaW5nLT53aW5kZXggPSAwOworCisJaWYgKHJpbmctPnByb3h5X2lkICE9IEszX1JJ TkdBQ0NfUFJPWFlfTk9UX1VTRUQpCisJCXJpbmctPnByb3h5ID0gcmluZ2FjYy0+cHJveHlfdGFy Z2V0X2Jhc2UgKworCQkJICAgICAgcmluZy0+cHJveHlfaWQgKiBLM19SSU5HQUNDX1BST1hZX1RB UkdFVF9TVEVQOworCisJc3dpdGNoIChyaW5nLT5tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX1JJ TkdfTU9ERV9SSU5HOgorCQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX3Jpbmdfb3BzOworCQli cmVhazsKKwljYXNlIEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0U6CisJCWlmIChyaW5nLT5w cm94eSkKKwkJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcHJveHlfb3BzOworCQllbHNlCisJ CQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX21zZ19vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCXJpbmctPm9wcyA9IE5VTEw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVf cHJveHk7CisJfTsKKworCXJpbmctPnJpbmdfbWVtX3ZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQo cmluZ2FjYy0+ZGV2LAorCQkJCQlyaW5nLT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAor CQkJCQkmcmluZy0+cmluZ19tZW1fZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJpbmctPnJpbmdf bWVtX3ZpcnQpIHsKKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2Mgcmlu ZyBtZW1cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX29wczsKKwl9CisK KwlyZXQgPSBrM19yaW5nYWNjX3JpbmdfY2ZnX3NjaShyaW5nKTsKKworCWlmIChyZXQpCisJCWdv dG8gZXJyX2ZyZWVfbWVtOworCisJcmluZy0+ZmxhZ3MgfD0gSzNfUklOR19GTEFHX0JVU1k7CisJ cmluZy0+ZmxhZ3MgfD0gKGNmZy0+ZmxhZ3MgJiBLM19SSU5HQUNDX1JJTkdfU0hBUkVEKSA/CisJ CQlLM19SSU5HX0ZMQUdfU0hBUkVEIDogMDsKKworCWszX3JpbmdhY2NfcmluZ19kdW1wKHJpbmcp OworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX21lbToKKwlkbWFfZnJlZV9jb2hlcmVudChyaW5n YWNjLT5kZXYsCisJCQkgIHJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSksCisJCQkg IHJpbmctPnJpbmdfbWVtX3ZpcnQsCisJCQkgIHJpbmctPnJpbmdfbWVtX2RtYSk7CitlcnJfZnJl ZV9vcHM6CisJcmluZy0+b3BzID0gTlVMTDsKK2Vycl9mcmVlX3Byb3h5OgorCXJpbmctPnByb3h5 ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19y aW5nX2NmZyk7CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUoc3RydWN0IGszX3Jpbmcg KnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVT WSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJpbmctPnNpemU7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUpOworCit1MzIgazNfcmluZ2FjY19y aW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJp bmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlm ICghcmluZy0+ZnJlZSkKKwkJcmluZy0+ZnJlZSA9IHJpbmctPnNpemUgLSByZWFkbCgmcmluZy0+ cnQtPm9jYyk7CisKKwlyZXR1cm4gcmluZy0+ZnJlZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGsz X3JpbmdhY2NfcmluZ19nZXRfZnJlZSk7CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhz dHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEsz X1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVhZGwoJnJp bmctPnJ0LT5vY2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9v Y2MpOworCit1MzIgazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcp Cit7CisJcmV0dXJuICFrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUocmluZyk7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCk7CisKK2VudW0gazNfcmluZ2FjY19h Y2Nlc3NfbW9kZSB7CisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQsCisJSzNfUklO R0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hf VEFJTCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMLAorCUszX1JJTkdBQ0NfQUND RVNTX01PREVfUEVFS19IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUEVFS19UQUlMLAor fTsKKworI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX01PREUoeCkJKCgoeCkgJiAweDMpIDw8IDE2 KQorI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX0VMU0laRSh4KQkoKCh4KSAmIDB4NykgPDwgMjQp CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkoc3RydWN0IGszX3JpbmcgKnJp bmcsCisJCQkJICAgICBlbnVtIGszX3JpbmdhY2NfcHJveHlfYWNjZXNzX21vZGUgbW9kZSkKK3sK Kwl1MzIgdmFsOworCisJdmFsID0gcmluZy0+cmluZ19pZDsKKwl2YWwgfD0gSzNfUklOR0FDQ19Q Uk9YWV9NT0RFKG1vZGUpOworCXZhbCB8PSBLM19SSU5HQUNDX1BST1hZX0VMU0laRShyaW5nLT5l bG1fc2l6ZSk7CisJd3JpdGVsKHZhbCwgJnJpbmctPnByb3h5LT5jb250cm9sKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5KHN0cnVjdCBr M19yaW5nICpyaW5nLCB2b2lkICplbGVtLAorCQkJCQllbnVtIGszX3JpbmdhY2NfYWNjZXNzX21v ZGUgYWNjZXNzX21vZGUpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlwdHIgPSAodm9pZCBf X2lvbWVtICopJnJpbmctPnByb3h5LT5kYXRhOworCisJc3dpdGNoIChhY2Nlc3NfbW9kZSkgewor CWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQ6CisJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BPUF9IRUFEOgorCQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcs IFBST1hZX0FDQ0VTU19NT0RFX0hFQUQpOworCQlicmVhazsKKwljYXNlIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUFVTSF9UQUlMOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJ TDoKKwkJazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShyaW5nLCBQUk9YWV9BQ0NFU1NfTU9ERV9U QUlMKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHRy ICs9IGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3MocmluZyk7CisKKwlzd2l0Y2ggKGFjY2Vz c19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEOgorCWNhc2Ug SzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQt PmRldiwKKwkJCSJwcm94eTptZW1jcHlfZnJvbWlvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxu IiwgcHRyLAorCQkJYWNjZXNzX21vZGUpOworCQltZW1jcHlfZnJvbWlvKGVsZW0sIHB0ciwgKDQg PDwgcmluZy0+ZWxtX3NpemUpKTsKKwkJcmluZy0+b2NjLS07CisJCWJyZWFrOworCWNhc2UgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19N T0RFX1BVU0hfSEVBRDoKKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwKKwkJCSJwcm94eTpt ZW1jcHlfdG9pbyh4KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsIHB0ciwKKwkJCWFjY2Vzc19t b2RlKTsKKwkJbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwor CQlyaW5nLT5mcmVlLS07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJwcm94eTogZnJlZSVkIG9jYyVkXG4i LCByaW5nLT5mcmVlLAorCQlyaW5nLT5vY2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywg ZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEKTsKK30KKwor c3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5n ICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3By b3h5KHJpbmcsIGVsZW0sCisJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJ TCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0cnVj dCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3Jpbmdf YWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCisJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BPUF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJv eHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3Jpbmdh Y2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nl c3NfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCisJCQkJICAgICBlbnVtIGsz X3JpbmdhY2NfYWNjZXNzX21vZGUgYWNjZXNzX21vZGUpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7 CisKKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RF X1BVU0hfSEVBRDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJCXB0 ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+Zmlmb3MtPmhlYWRfZGF0YTsKKwkJYnJlYWs7CisJ Y2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0Nf QUNDRVNTX01PREVfUE9QX1RBSUw6CisJCXB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+Zmlm b3MtPnRhaWxfZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcHRyICs9IGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3MocmluZyk7CisKKwlzd2l0 Y2ggKGFjY2Vzc19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFE OgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJZGV2X2RiZyhyaW5n LT5wYXJlbnQtPmRldiwKKwkJCSJtZW1jcHlfZnJvbWlvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTol ZFxuIiwgcHRyLAorCQkJYWNjZXNzX21vZGUpOworCQltZW1jcHlfZnJvbWlvKGVsZW0sIHB0ciwg KDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKKwkJcmluZy0+b2NjLS07CisJCWJyZWFrOworCWNhc2Ug SzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BVU0hfSEVBRDoKKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwKKwkJCSJtZW1j cHlfdG9pbyh4KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsIHB0ciwKKwkJCWFjY2Vzc19tb2Rl KTsKKwkJbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQly aW5nLT5mcmVlLS07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJmcmVlJWQgaW5kZXglZCBvY2MlZCBpbmRl eCVkXG4iLCByaW5nLT5mcmVlLAorCQlyaW5nLT53aW5kZXgsIHJpbmctPm9jYywgcmluZy0+cmlu ZGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9o ZWFkX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19y aW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCisJCQkJCSBLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BVU0hfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hf aW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3Jpbmdh Y2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUFVTSF9UQUlMKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXJldHVybiBrM19yaW5nYWNjX3Jp bmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCisJCQkJCSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BP UF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8oc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2Nfcmlu Z19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9Q X0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX21lbShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwl2b2lkICplbGVtX3B0cjsKKworCWVsZW1f cHRyID0gazNfcmluZ2FjY19nZXRfZWxtX2FkZHIocmluZywgcmluZy0+d2luZGV4KTsKKworCW1l bWNweShlbGVtX3B0ciwgZWxlbSwgKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKKworCXJpbmctPndp bmRleCA9IChyaW5nLT53aW5kZXggKyAxKSAlIHJpbmctPnNpemU7CisJcmluZy0+ZnJlZS0tOwor CXdyaXRlbCgxLCAmcmluZy0+cnQtPmRiKTsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYs ICJyaW5nX3B1c2hfbWVtOiBmcmVlJWQgaW5kZXglZFxuIiwKKwkJcmluZy0+ZnJlZSwgcmluZy0+ d2luZGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19w b3BfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXZvaWQgKmVsZW1f cHRyOworCisJZWxlbV9wdHIgPSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT5y aW5kZXgpOworCisJbWVtY3B5KGVsZW0sIGVsZW1fcHRyLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkp OworCisJcmluZy0+cmluZGV4ID0gKHJpbmctPnJpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKKwly aW5nLT5vY2MtLTsKKwl3cml0ZWwoLTEsICZyaW5nLT5ydC0+ZGIpOworCisJZGV2X2RiZyhyaW5n LT5wYXJlbnQtPmRldiwgInJpbmdfcG9wX21lbTogb2NjJWQgaW5kZXglZCBwb3NfcHRyJXBcbiIs CisJCXJpbmctPm9jYywgcmluZy0+cmluZGV4LCBlbGVtX3B0cik7CisJcmV0dXJuIDA7Cit9CisK K2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxl bSkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5m bGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfZGJn KHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wdXNoOiBmcmVlJWQgaW5kZXglZFxuIiwgcmluZy0+ ZnJlZSwKKwkJcmluZy0+d2luZGV4KTsKKworCWlmIChrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChy aW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmluZy0+b3BzICYmIHJpbmctPm9wcy0+ cHVzaF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfdGFpbChyaW5nLCBlbGVtKTsKKwor CXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcHVzaCk7 CisKK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAh KHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2hfaGVhZDogZnJlZSVkIGluZGV4 JWRcbiIsCisJCXJpbmctPmZyZWUsIHJpbmctPndpbmRleCk7CisKKwlpZiAoazNfcmluZ2FjY19y aW5nX2lzX2Z1bGwocmluZykpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHJpbmctPm9wcyAm JiByaW5nLT5vcHMtPnB1c2hfaGVhZCkKKwkJcmV0ID0gcmluZy0+b3BzLT5wdXNoX2hlYWQocmlu ZywgZWxlbSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2Fj Y19yaW5nX3B1c2hfaGVhZCk7CisKK2ludCBrM19yaW5nYWNjX3JpbmdfcG9wKHN0cnVjdCBrM19y aW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlm ICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmICghcmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3Jp bmdfZ2V0X29jYyhyaW5nKTsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3Bv cDogb2NjJWQgaW5kZXglZFxuIiwgcmluZy0+b2NjLAorCQlyaW5nLT5yaW5kZXgpOworCisJaWYg KCFyaW5nLT5vY2MpCisJCXJldHVybiAtRU5PREFUQTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmlu Zy0+b3BzLT5wb3BfaGVhZCkKKwkJcmV0ID0gcmluZy0+b3BzLT5wb3BfaGVhZChyaW5nLCBlbGVt KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3Jpbmdf cG9wKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNfcmluZyAqcmlu Zywgdm9pZCAqZWxlbSkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXJpbmcg fHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoIXJpbmctPm9jYykKKwkJcmluZy0+b2NjID0gazNfcmluZ2FjY19yaW5nX2dldF9v Y2MocmluZyk7CisKKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3BfdGFpbDog b2NjJWQgaW5kZXglZFxuIiwgcmluZy0+b2NjLAorCQlyaW5nLT5yaW5kZXgpOworCisJaWYgKCFy aW5nLT5vY2MpCisJCXJldHVybiAtRU5PREFUQTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+ b3BzLT5wb3BfdGFpbCkKKwkJcmV0ID0gcmluZy0+b3BzLT5wb3BfdGFpbChyaW5nLCBlbGVtKTsK KworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcG9w X3RhaWwpOworCitzdHJ1Y3QgazNfcmluZ2FjYyAqb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRs ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJY29uc3QgY2hhciAqcHJvcGVydHkpCit7 CisJc3RydWN0IGRldmljZV9ub2RlICpyaW5nYWNjX25wOworCXN0cnVjdCBrM19yaW5nYWNjICpy aW5nYWNjID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqZW50 cnk7CisKKwlyaW5nYWNjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgcHJvcGVydHksIDApOwor CWlmICghcmluZ2FjY19ucCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwltdXRleF9s b2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwg JmszX3JpbmdhY2NfbGlzdCwgbGlzdCkKKwkJaWYgKGVudHJ5LT5kZXYtPm9mX25vZGUgPT0gcmlu Z2FjY19ucCkgeworCQkJcmluZ2FjYyA9IGVudHJ5OworCQkJYnJlYWs7CisJCX0KKwltdXRleF91 bmxvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlvZl9ub2RlX3B1dChyaW5nYWNjX25wKTsK KworCXJldHVybiByaW5nYWNjOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfazNfcmluZ2FjY19n ZXRfYnlfcGhhbmRsZSk7CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19wcm9iZV9kdChzdHJ1Y3Qg azNfcmluZ2FjYyAqcmluZ2FjYykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSByaW5n YWNjLT5kZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmluZ2FjYy0+ZGV2Owor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsK KwlpbnQgcmV0OworCisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiZGV2aWNlIHRyZWUg aW5mbyB1bmF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ0aSxudW0tcmluZ3MiLCAmcmluZ2FjYy0+bnVtX3Jp bmdzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAidGksbnVtLXJpbmdzIHJlYWQgZmFp bHVyZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyaW5nYWNjLT5kbWFfcmlu Z19yZXNldF9xdWlyayA9CisJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInRpLGRtYS1y aW5nLXJlc2V0LXF1aXJrIik7CisKKwlyaW5nYWNjLT50aXNjaSA9IHRpX3NjaV9nZXRfYnlfcGhh bmRsZShub2RlLCAidGksc2NpIik7CisJaWYgKElTX0VSUihyaW5nYWNjLT50aXNjaSkpIHsKKwkJ cmV0ID0gUFRSX0VSUihyaW5nYWNjLT50aXNjaSk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZF UikKKwkJCWRldl9lcnIoZGV2LCAidGksc2NpIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmlu Z2FjYy0+dGlzY2kgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5vZGUsICJ0aSxzY2ktZGV2LWlkIiwKKwkJCQkgICAmcmluZ2FjYy0+dGlz Y2lfZGV2X2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAidGksc2NpLWRldi1pZCBy ZWFkIGZhaWwgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGRldi0+aWQgPSBy aW5nYWNjLT50aXNjaV9kZXZfaWQ7CisKKwlyaW5nYWNjLT5ybV9ncF9yYW5nZSA9IGRldm1fdGlf c2NpX2dldF9vZl9yZXNvdXJjZShyaW5nYWNjLT50aXNjaSwgZGV2LAorCQkJCQkJcmluZ2FjYy0+ dGlzY2lfZGV2X2lkLAorCQkJCQkJInRpLHNjaS1ybS1yYW5nZS1ncC1yaW5ncyIpOworCWlmIChJ U19FUlIocmluZ2FjYy0+cm1fZ3BfcmFuZ2UpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv IGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHRzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+ cm1fZ3BfcmFuZ2UpOworCX0KKworCXJldHVybiB0aV9zY2lfaW50YV9tc2lfZG9tYWluX2FsbG9j X2lycXMocmluZ2FjYy0+ZGV2LAorCQkJCQkJIHJpbmdhY2MtPnJtX2dwX3JhbmdlKTsKK30KKwor c3RhdGljIGludCBrM19yaW5nYWNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2M7CisJdm9pZCBfX2lvbWVtICpiYXNlX2Zp Zm8sICpiYXNlX3J0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0 IHJlc291cmNlICpyZXM7CisJaW50IHJldCwgaTsKKworCXJpbmdhY2MgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKnJpbmdhY2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJpbmdhY2MpCisJCXJl dHVybiAtRU5PTUVNOworCisJcmluZ2FjYy0+ZGV2ID0gZGV2OworCW11dGV4X2luaXQoJnJpbmdh Y2MtPnJlcV9sb2NrKTsKKworCWRldi0+bXNpX2RvbWFpbiA9IG9mX21zaV9nZXRfZG9tYWluKGRl diwgZGV2LT5vZl9ub2RlLAorCQkJCQkgICAgRE9NQUlOX0JVU19USV9TQ0lfSU5UQV9NU0kpOwor CWlmICghZGV2LT5tc2lfZG9tYWluKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBN U0kgZG9tYWluXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcmV0ID0gazNf cmluZ2FjY19wcm9iZV9kdChyaW5nYWNjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwg InJ0Iik7CisJYmFzZV9ydCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYg KElTX0VSUihiYXNlX3J0KSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9ydCk7CisKKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmlmb3Mi KTsKKwliYXNlX2ZpZm8gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJ U19FUlIoYmFzZV9maWZvKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9maWZvKTsKKworCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwcm94 eV9nY2ZnIik7CisJcmluZ2FjYy0+cHJveHlfZ2NmZyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7CisJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV9nY2ZnKSkKKwkJcmV0dXJuIFBU Ul9FUlIocmluZ2FjYy0+cHJveHlfZ2NmZyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkgICAicHJveHlfdGFyZ2V0Iik7 CisJcmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZXMpOworCWlmIChJU19FUlIocmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UpKQorCQlyZXR1 cm4gUFRSX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSk7CisKKwlyaW5nYWNjLT5udW1f cHJveGllcyA9IHJlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5jb25maWcpICYKKwkJCQkgICAg IEszX1JJTkdBQ0NfUFJPWFlfQ0ZHX1RIUkVBRFNfTUFTSzsKKworCXJpbmdhY2MtPnJpbmdzID0g ZGV2bV9remFsbG9jKGRldiwKKwkJCQkgICAgICBzaXplb2YoKnJpbmdhY2MtPnJpbmdzKSAqCisJ CQkJICAgICAgcmluZ2FjYy0+bnVtX3JpbmdzLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCXJp bmdhY2MtPnJpbmdzX2ludXNlID0gZGV2bV9rY2FsbG9jKGRldiwKKwkJCQkJICAgIEJJVFNfVE9f TE9OR1MocmluZ2FjYy0+bnVtX3JpbmdzKSwKKwkJCQkJICAgIHNpemVvZih1bnNpZ25lZCBsb25n KSwgR0ZQX0tFUk5FTCk7CisJcmluZ2FjYy0+cHJveHlfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2 LAorCQkJCQkgICAgQklUU19UT19MT05HUyhyaW5nYWNjLT5udW1fcHJveGllcyksCisJCQkJCSAg ICBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCisJaWYgKCFyaW5nYWNjLT5y aW5ncyB8fCAhcmluZ2FjYy0+cmluZ3NfaW51c2UgfHwgIXJpbmdhY2MtPnByb3h5X2ludXNlKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCByaW5nYWNjLT5udW1fcmluZ3M7 IGkrKykgeworCQlyaW5nYWNjLT5yaW5nc1tpXS5ydCA9IGJhc2VfcnQgKworCQkJCSAgICAgICBL M19SSU5HQUNDX1JUX1JFR1NfU1RFUCAqIGk7CisJCXJpbmdhY2MtPnJpbmdzW2ldLmZpZm9zID0g YmFzZV9maWZvICsKKwkJCQkJICBLM19SSU5HQUNDX0ZJRk9fUkVHU19TVEVQICogaTsKKwkJcmlu Z2FjYy0+cmluZ3NbaV0ucGFyZW50ID0gcmluZ2FjYzsKKwkJcmluZ2FjYy0+cmluZ3NbaV0ucmlu Z19pZCA9IGk7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9Y WV9OT1RfVVNFRDsKKwl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgcmluZ2FjYyk7CisKKwlyaW5n YWNjLT50aXNjaV9yaW5nX29wcyA9ICZyaW5nYWNjLT50aXNjaS0+b3BzLnJtX3Jpbmdfb3BzOwor CisJbXV0ZXhfbG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJp bmdhY2MtPmxpc3QsICZrM19yaW5nYWNjX2xpc3QpOworCW11dGV4X3VubG9jaygmazNfcmluZ2Fj Y19saXN0X2xvY2spOworCisJZGV2X2luZm8oZGV2LCAiUmluZyBBY2NlbGVyYXRvciBwcm9iZWQg cmluZ3M6JXUsIGdwLXJpbmdzWyV1LCV1XSBzY2ktZGV2LWlkOiV1XG4iLAorCQkgcmluZ2FjYy0+ bnVtX3JpbmdzLAorCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF0uc3RhcnQsCisJCSBy aW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5udW0sCisJCSByaW5nYWNjLT50aXNjaV9kZXZf aWQpOworCWRldl9pbmZvKGRldiwgImRtYS1yaW5nLXJlc2V0LXF1aXJrOiAlc1xuIiwKKwkJIHJp bmdhY2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJ ZGV2X2luZm8oZGV2LCAiUkEgUHJveHkgcmV2LiAlMDh4LCBudW1fcHJveGllczoldVxuIiwKKwkJ IHJlYWRsKCZyaW5nYWNjLT5wcm94eV9nY2ZnLT5yZXZpc2lvbiksIHJpbmdhY2MtPm51bV9wcm94 aWVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNj ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJbXV0ZXhfbG9jaygmazNfcmluZ2Fj Y19saXN0X2xvY2spOworCWxpc3RfZGVsKCZyaW5nYWNjLT5saXN0KTsKKwltdXRleF91bmxvY2so JmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWF0Y2ggdGFibGUg Zm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIGszX3JpbmdhY2Nfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLGFtNjU0 LW5hdnNzLXJpbmdhY2MiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGsz X3JpbmdhY2Nfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBrM19y aW5nYWNjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gazNfcmluZ2FjY19wcm9iZSwKKwkucmVtb3Zl CQk9IGszX3JpbmdhY2NfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrMy1yaW5n YWNjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gazNfcmluZ2FjY19vZl9tYXRjaCwKKwl9LAorfTsK K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoazNfcmluZ2FjY19kcml2ZXIpOworCitNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIFJpbmdhY2MgZHJpdmVyIGZv ciBLMyBTT0NzIik7CitNT0RVTEVfQVVUSE9SKCJHcnlnb3JpaSBTdHJhc2hrbyA8Z3J5Z29yaWku c3RyYXNoa29AdGkuY29tPiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvdGkvazMt cmluZ2FjYy5oIGIvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjZmNzNkZjBhNTI0Ci0tLSAvZGV2L251bGwK KysrIGIvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCkBAIC0wLDAgKzEsMjQ0IEBA CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIEszIFJpbmcg QWNjZWxlcmF0b3IgKFJBKSBzdWJzeXN0ZW0gaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChD KSAyMDE5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29t CisgKi8KKworI2lmbmRlZiBfX1NPQ19USV9LM19SSU5HQUNDX0FQSV9IXworI2RlZmluZSBfX1NP Q19USV9LM19SSU5HQUNDX0FQSV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3Ry dWN0IGRldmljZV9ub2RlOworCisvKioKKyAqIGVudW0gazNfcmluZ19tb2RlIC0gJnN0cnVjdCBr M19yaW5nX2NmZyBtb2RlCisgKgorICogUkEgcmluZyBvcGVyYXRpb25hbCBtb2RlcworICoKKyAq IEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HOiBFeHBvc2VkIFJpbmcgbW9kZSBmb3IgU1cgZGly ZWN0IGFjY2VzcworICogQEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0U6IE1lc3NhZ2luZyBt b2RlLiBNZXNzYWdpbmcgbW9kZSByZXF1aXJlcworICoJdGhhdCBhbGwgYWNjZXNzZXMgdG8gdGhl IHF1ZXVlIG11c3QgZ28gdGhyb3VnaCB0aGlzIElQIHNvIHRoYXQgYWxsCisgKglhY2Nlc3NlcyB0 byB0aGUgbWVtb3J5IGFyZSBjb250cm9sbGVkIGFuZCBvcmRlcmVkLiBUaGlzIElQIHRoZW4KKyAq CWNvbnRyb2xzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHF1ZXVlLCBhbmQgU1cgaGFzIG5vIGRp cmVjdGx5IGNvbnRyb2wsCisgKglzdWNoIGFzIHRocm91Z2ggZG9vcmJlbGxzIGFuZCBjYW5ub3Qg YWNjZXNzIHRoZSBzdG9yYWdlIG1lbW9yeSBkaXJlY3RseS4KKyAqCVRoaXMgaXMgcGFydGljdWxh cmx5IHVzZWZ1bCB3aGVuIG1vcmUgdGhhbiBvbmUgU1cgb3IgSFcgZW50aXR5IGNhbiBiZQorICoJ dGhlIHByb2R1Y2VyIGFuZC9vciBjb25zdW1lciBhdCB0aGUgc2FtZSB0aW1lCisgKiBASzNfUklO R0FDQ19SSU5HX01PREVfQ1JFREVOVElBTFM6IENyZWRlbnRpYWxzIG1vZGUgaXMgbWVzc2FnZSBt b2RlIHBsdXMKKyAqCXN0b3JlcyBjcmVkZW50aWFscyB3aXRoIGVhY2ggbWVzc2FnZSwgcmVxdWly aW5nIHRoZSBlbGVtZW50IHNpemUgdG8gYmUKKyAqCWRvdWJsZWQgdG8gZml0IHRoZSBjcmVkZW50 aWFscy4gQW55IGV4cG9zZWQgbWVtb3J5IHNob3VsZCBiZSBwcm90ZWN0ZWQKKyAqCWJ5IGEgZmly ZXdhbGwgZnJvbSB1bndhbnRlZCBhY2Nlc3MKKyAqLworZW51bSBrM19yaW5nX21vZGUgeworCUsz X1JJTkdBQ0NfUklOR19NT0RFX1JJTkcgPSAwLAorCUszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NB R0UsCisJSzNfUklOR0FDQ19SSU5HX01PREVfQ1JFREVOVElBTFMsCisJSzNfUklOR0FDQ19SSU5H X01PREVfSU5WQUxJRAorfTsKKworLyoqCisgKiBlbnVtIGszX3Jpbmdfc2l6ZSAtICZzdHJ1Y3Qg azNfcmluZ19jZmcgZWxtX3NpemUKKyAqCisgKiBSQSByaW5nIGVsZW1lbnQncyBzaXplcyBpbiBi eXRlcy4KKyAqLworZW51bSBrM19yaW5nX3NpemUgeworCUszX1JJTkdBQ0NfUklOR19FTFNJWkVf NCA9IDAsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV84LAorCUszX1JJTkdBQ0NfUklOR19FTFNJ WkVfMTYsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8zMiwKKwlLM19SSU5HQUNDX1JJTkdfRUxT SVpFXzY0LAorCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfMTI4LAorCUszX1JJTkdBQ0NfUklOR19F TFNJWkVfMjU2LAorCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfSU5WQUxJRAorfTsKKworc3RydWN0 IGszX3JpbmdhY2M7CitzdHJ1Y3QgazNfcmluZzsKKworLyoqCisgKiBlbnVtIGszX3JpbmdfY2Zn IC0gUkEgcmluZyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqIEBzaXplOiBSaW5nIHNp emUsIG51bWJlciBvZiBlbGVtZW50cworICogQGVsbV9zaXplOiBSaW5nIGVsZW1lbnQgc2l6ZQor ICogQG1vZGU6IFJpbmcgb3BlcmF0aW9uYWwgbW9kZQorICogQGZsYWdzOiBSaW5nIGNvbmZpZ3Vy YXRpb24gZmxhZ3MuIFBvc3NpYmxlIHZhbHVlczoKKyAqCSBASzNfUklOR0FDQ19SSU5HX1NIQVJF RDogd2hlbiBzZXQgYWxsb3dzIHRvIHJlcXVlc3QgdGhlIHNhbWUgcmluZworICoJIGZldyB0aW1l cy4gSXQncyB1c2FibGUgd2hlbiB0aGUgc2FtZSByaW5nIGlzIHVzZWQgYXMgRnJlZSBIb3N0IFBE IHJpbmcKKyAqCSBmb3IgZGlmZmVyZW50IGZsb3dzLCBmb3IgZXhhbXBsZS4KKyAqCSBOb3RlOiBM b2NraW5nIHNob3VsZCBiZSBkb25lIGJ5IGNvbnN1bWVyIGlmIHJlcXVpcmVkCisgKi8KK3N0cnVj dCBrM19yaW5nX2NmZyB7CisJdTMyIHNpemU7CisJZW51bSBrM19yaW5nX3NpemUgZWxtX3NpemU7 CisJZW51bSBrM19yaW5nX21vZGUgbW9kZTsKKyNkZWZpbmUgSzNfUklOR0FDQ19SSU5HX1NIQVJF RCBCSVQoMSkKKwl1MzIgZmxhZ3M7Cit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19JRF9B TlkgKC0xKQorCisvKioKKyAqIG9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUgLSBmaW5kIGEg UkEgYnkgcGhhbmRsZSBwcm9wZXJ0eQorICogQG5wOiBkZXZpY2Ugbm9kZQorICogQHByb3BuYW1l OiBwcm9wZXJ0eSBuYW1lIGNvbnRhaW5pbmcgcGhhbmRsZSBvbiBSQSBub2RlCisgKgorICogUmV0 dXJucyBwb2ludGVyIG9uIHRoZSBSQSAtIHN0cnVjdCBrM19yaW5nYWNjCisgKiBvciAtRU5PREVW IGlmIG5vdCBmb3VuZCwKKyAqIG9yIC1FUFJPQkVfREVGRVIgaWYgbm90IHlldCByZWdpc3RlcmVk CisgKi8KK3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSk7CisKKyNk ZWZpbmUgSzNfUklOR0FDQ19SSU5HX1VTRV9QUk9YWSBCSVQoMSkKKworLyoqCisgKiBrM19yaW5n YWNjX3JlcXVlc3RfcmluZyAtIHJlcXVlc3QgcmluZyBmcm9tIHJpbmdhY2MKKyAqIEByaW5nYWNj OiBwb2ludGVyIG9uIHJpbmdhY2MKKyAqIEBpZDogcmluZyBpZCBvciBLM19SSU5HQUNDX1JJTkdf SURfQU5ZIGZvciBhbnkgZ2VuZXJhbCBwdXJwb3NlIHJpbmcKKyAqIEBmbGFnczoKKyAqCUBLM19S SU5HQUNDX1JJTkdfVVNFX1BST1hZOiBpZiBzZXQgLSBwcm94eSB3aWxsIGJlIGFsbG9jYXRlZCBh bmQKKyAqCQl1c2VkIHRvIGFjY2VzcyByaW5nIG1lbW9yeS4gU29wcG9ydGVkIG9ubHkgZm9yIHJp bmdzIGluCisgKgkJTWVzc2FnZS9DcmVkZW50aWFscy9RdWV1ZSBtb2RlLgorICoKKyAqIFJldHVy bnMgcG9pbnRlciBvbiB0aGUgUmluZyAtIHN0cnVjdCBrM19yaW5nCisgKiBvciBOVUxMIGluIGNh c2Ugb2YgZmFpbHVyZS4KKyAqLworc3RydWN0IGszX3JpbmcgKmszX3JpbmdhY2NfcmVxdWVzdF9y aW5nKHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjLAorCQkJCQlpbnQgaWQsIHUzMiBmbGFncyk7 CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3Jlc2V0IC0gcmluZyByZXNldAorICogQHJpbmc6 IHBvaW50ZXIgb24gUmluZworICoKKyAqIFJlc2V0cyByaW5nIGludGVybmFsIHN0YXRlICgoaHcp b2NjLCAoaHcpaWR4KS4KKyAqLwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3RydWN0IGsz X3JpbmcgKnJpbmcpOworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0 IGZvciBETUEgcmluZ3MKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBSZXNldHMg cmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuIFNob3VsZCBiZSB1c2VkIGZv ciByaW5ncworICogd2hpY2ggYXJlIHJlYWQgYnkgSzMgVURNQSwgbGlrZSBUWCBvciBGcmVlIEhv c3QgUEQgcmluZ3MuCisgKi8KK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdTMyIG9jYyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX2ZyZWUg LSByaW5nIGZyZWUKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBSZXNldHMgcmlu ZyBhbmQgZnJlZSBhbGwgYWxvY2F0ZWQgcmVzb3VyY2VzLgorICovCitpbnQgazNfcmluZ2FjY19y aW5nX2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2NfZ2V0 X3JpbmdfaWQgLSBHZXQgdGhlIFJpbmcgSUQKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAq CisgKiBSZXR1cm5zIHRoZSBSaW5nIElECisgKi8KK3UzMiBrM19yaW5nYWNjX2dldF9yaW5nX2lk KHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX2dldF9yaW5nX2ly cV9udW0gLSBHZXQgdGhlIGlycSBudW1iZXIgZm9yIHRoZSByaW5nCisgKiBAcmluZzogcG9pbnRl ciBvbiByaW5nCisgKgorICogUmV0dXJucyB0aGUgaW50ZXJydXB0IG51bWJlciB3aGljaCBjYW4g YmUgdXNlZCB0byByZXF1ZXN0IHRoZSBpbnRlcnJ1cHQKKyAqLworaW50IGszX3JpbmdhY2NfZ2V0 X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2Fj Y19yaW5nX2NmZyAtIHJpbmcgY29uZmlndXJlCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisg KiBAY2ZnOiBSaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoc2VlICZzdHJ1Y3QgazNfcmlu Z19jZmcpCisgKgorICogQ29uZmlndXJlcyByaW5nLCBpbmNsdWRpbmcgcmluZyBtZW1vcnkgYWxs b2NhdGlvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCisgKi8K K2ludCBrM19yaW5nYWNjX3JpbmdfY2ZnKHN0cnVjdCBrM19yaW5nICpyaW5nLCBzdHJ1Y3QgazNf cmluZ19jZmcgKmNmZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX2dldF9zaXplIC0gZ2V0 IHJpbmcgc2l6ZQorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgcmlu ZyBzaXplIGluIG51bWJlciBvZiBlbGVtZW50cy4KKyAqLwordTMyIGszX3JpbmdhY2NfcmluZ19n ZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5n X2dldF9mcmVlIC0gZ2V0IGZyZWUgZWxlbWVudHMKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcK KyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBmcmVlIGVsZW1lbnRzIGluIHRoZSByaW5nLgorICov Cit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKwor LyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyAtIGdldCByaW5nIG9jY3VwYW5jeQorICog QHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdG90YWwgbnVtYmVyIG9mIHZh bGlkIGVudHJpZXMgb24gdGhlIHJpbmcKKyAqLwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2Nj KHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfaXNfZnVs bCAtIGNoZWNrcyBpZiByaW5nIGlzIGZ1bGwKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAq CisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJpbmcgaXMgZnVsbAorICovCit1MzIgazNfcmluZ2Fj Y19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3Jpbmdh Y2NfcmluZ19wdXNoIC0gcHVzaCBlbGVtZW50IHRvIHRoZSByaW5nIHRhaWwKKyAqIEByaW5nOiBw b2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVudCBidWZmZXIK KyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbC4gU2l6ZSBvZiB0 aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAm c3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCBlcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3Bv cCAtIHBvcCBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBvaW50ZXIgb24g cmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoKKyAqIFB1 c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQuIFNpemUgb2YgdGhlIHJpbmcg ZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBr M19yaW5nX2NmZyBlbG1fc2l6ZS4uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5v IG90aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsZW0pOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQg LSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgaGVhZAorICogQHJpbmc6IHBvaW50ZXIgb24gcmlu ZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoKKyAqIFB1c2gg b25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyBoZWFkLiBTaXplIG9mIHRoZSByaW5nIGVsZW1l bnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNfcmlu Z19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVy d2lzZS4KKyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FDQ19SSU5HX01P REVfUklORworICovCitpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZChzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3BvcF90YWls IC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsCisgKiBAcmluZzogcG9pbnRlciBvbiBy aW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVz aCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgdGFpbC4gU2l6ZSBvZiB0aGUgcmluZyBl bGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGsz X3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBv dGhlcndpc2UuCisgKiBOb3QgU3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEszX1JJTkdBQ0NfUklO R19NT0RFX1JJTkcKKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3UzMiBrM19yaW5nYWNjX2dldF90aXNjaV9kZXZf aWQoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisjZW5kaWYgLyogX19TT0NfVElfSzNfUklOR0FD Q19BUElfSF8gKi8KLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jr a2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1 MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==