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 277CDC43331 for ; Mon, 11 Nov 2019 13:53:17 +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 DAA33206A3 for ; Mon, 11 Nov 2019 13:53:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hTUmA9WF"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="mpswwmWw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DAA33206A3 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=cbiGz046lH0RDHOEuXtqsfzYdAz/ZEk4xMOj7rPrzyA=; b=hTUmA9WFDjcjc9 LfITOVSk9eF0A02NIHsuocgEwyP9UrMpF2brKSWHhuKx8ffBZgJ7teO5wIuTJsDvTzlZYTibuC24T Jy15h8SsLG93tSEu/lueFvY9PcWFn6FW85z3VjYYv1hCFHv9qRgMrKMoUotBfQ/QHxQmhlYXZqZcu Ie99IeYcuoXg6HwYyxvy6ky7vRksKfKgFecGhR1KVF7jp+Ym3rSBR9uZzYZTZUo4wjqVbC3AP2aR9 u2t8SGNIyAvVyCoI4ocNNKaTQEFuIkLGGOhLRCx1y/naSlgyKiB5N0mQxl4wZ+fqpowVHFZQuo4cL kwsUYrwDwQbIB3Feh4Lg==; 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 1iUA83-00013r-VB; Mon, 11 Nov 2019 13:53:16 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUA7Q-0000Ud-Dp for linux-arm-kernel@lists.infradead.org; Mon, 11 Nov 2019 13:52:40 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id xABDqQsK013794; Mon, 11 Nov 2019 07:52:26 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1573480346; bh=sQPYIOUSsT6DDcopQ7EaFDSZEh5w1AAUWnXYoq0RNFA=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=mpswwmWwuTm3oimzL6ud5OhlKtTFwS6DHvYDAzZl9qRktZ9o08J/Sq6fCqVTmIyqA 9h6H7c3KNWUp/kGb/e7d3mBGkmdI3UZZIHYDJXDZZ0Q2rS6mfnVTYs7eQUnHa2lm6U CeqzNOrY6lcLboMevJQ+83rCvoezcuE9q7xtqQU8= Received: from DFLE104.ent.ti.com (dfle104.ent.ti.com [10.64.6.25]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xABDqQ3A079433 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 11 Nov 2019 07:52:26 -0600 Received: from DFLE112.ent.ti.com (10.64.6.33) 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, 11 Nov 2019 07:52:09 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE112.ent.ti.com (10.64.6.33) 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, 11 Nov 2019 07:52:09 -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 xABDqE8n097668; Mon, 11 Nov 2019 07:52:22 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v5 02/15] soc: ti: k3: add navss ringacc driver Date: Mon, 11 Nov 2019 15:53:17 +0200 Message-ID: <20191111135330.8235-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111135330.8235-1-peter.ujfalusi@ti.com> References: <20191111135330.8235-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-20191111_055236_673736_04BF062C X-CRM114-Status: GOOD ( 23.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 bGUgYi9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQppbmRleCBiMzg2OGQzOTJkNGYuLmNjNGJjOGIw OGJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9z b2MvdGkvTWFrZWZpbGUKQEAgLTksMyArOSw0IEBAIG9iai0kKENPTkZJR19BTVgzX1BNKQkJCSs9 IHBtMzN4eC5vCiBvYmotJChDT05GSUdfV0tVUF9NM19JUEMpCQkrPSB3a3VwX20zX2lwYy5vCiBv YmotJChDT05GSUdfVElfU0NJX1BNX0RPTUFJTlMpCQkrPSB0aV9zY2lfcG1fZG9tYWlucy5vCiBv YmotJChDT05GSUdfVElfU0NJX0lOVEFfTVNJX0RPTUFJTikJKz0gdGlfc2NpX2ludGFfbXNpLm8K K29iai0kKENPTkZJR19USV9LM19SSU5HQUNDKQkJKz0gazMtcmluZ2FjYy5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMgYi9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZDlmMzViN2M5YTYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMKQEAgLTAsMCAr MSwxMTgwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIFRJ IEszIE5BVlNTIFJpbmcgQWNjZWxlcmF0b3Igc3Vic3lzdGVtIGRyaXZlcgorICoKKyAqIENvcHly aWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3 LnRpLmNvbQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUg PGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv b2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9zb2MvdGkvazMtcmluZ2FjYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJv dG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX2ludGFfbXNpLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisKK3N0 YXRpYyBMSVNUX0hFQUQoazNfcmluZ2FjY19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoazNf cmluZ2FjY19saXN0X2xvY2spOworCisjZGVmaW5lIEszX1JJTkdBQ0NfQ0ZHX1JJTkdfU0laRV9F TENOVF9NQVNLCQlHRU5NQVNLKDE5LCAwKQorCisvKioKKyAqIHN0cnVjdCBrM19yaW5nX3J0X3Jl Z3MgLSBUaGUgUkEgcmVhbHRpbWUgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzIHJlZ2lvbgorICoK KyAqIEByZXN2XzE2OiBSZXNlcnZlZAorICogQGRiOiBSaW5nIERvb3JiZWxsIFJlZ2lzdGVyCisg KiBAcmVzdl80OiBSZXNlcnZlZAorICogQG9jYzogUmluZyBPY2N1cGFuY3kgUmVnaXN0ZXIKKyAq IEBpbmR4OiBSaW5nIEN1cnJlbnQgSW5kZXggUmVnaXN0ZXIKKyAqIEBod29jYzogUmluZyBIYXJk d2FyZSBPY2N1cGFuY3kgUmVnaXN0ZXIKKyAqIEBod2luZHg6IFJpbmcgSGFyZHdhcmUgQ3VycmVu dCBJbmRleCBSZWdpc3RlcgorICovCitzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIHsKKwl1MzIJcmVz dl8xNls0XTsKKwl1MzIJZGI7CisJdTMyCXJlc3ZfNFsxXTsKKwl1MzIJb2NjOworCXUzMglpbmR4 OworCXUzMglod29jYzsKKwl1MzIJaHdpbmR4OworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JU X1JFR1NfU1RFUAkweDEwMDAKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgLSBU aGUgUmluZyBBY2NlbGVyYXRvciBRdWV1ZXMgUmVnaXN0ZXJzIHJlZ2lvbgorICoKKyAqIEBoZWFk X2RhdGE6IFJpbmcgSGVhZCBFbnRyeSBEYXRhIFJlZ2lzdGVycworICogQHRhaWxfZGF0YTogUmlu ZyBUYWlsIEVudHJ5IERhdGEgUmVnaXN0ZXJzCisgKiBAcGVla19oZWFkX2RhdGE6IFJpbmcgUGVl ayBIZWFkIEVudHJ5IERhdGEgUmVncworICogQHBlZWtfdGFpbF9kYXRhOiBSaW5nIFBlZWsgVGFp bCBFbnRyeSBEYXRhIFJlZ3MKKyAqLworc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIHsKKwl1MzIJ aGVhZF9kYXRhWzEyOF07CisJdTMyCXRhaWxfZGF0YVsxMjhdOworCXUzMglwZWVrX2hlYWRfZGF0 YVsxMjhdOworCXUzMglwZWVrX3RhaWxfZGF0YVsxMjhdOworfTsKKworLyoqCisgKiBzdHJ1Y3Qg azNfcmluZ2FjY19wcm94eV9nY2ZnX3JlZ3MgLSBSQSBQcm94eSBHbG9iYWwgQ29uZmlnIE1NSU8g UmVnaW9uCisgKgorICogQHJldmlzaW9uOiBSZXZpc2lvbiBSZWdpc3RlcgorICogQGNvbmZpZzog Q29uZmlnIFJlZ2lzdGVyCisgKi8KK3N0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyB7 CisJdTMyCXJldmlzaW9uOworCXUzMgljb25maWc7Cit9OworCisjZGVmaW5lIEszX1JJTkdBQ0Nf UFJPWFlfQ0ZHX1RIUkVBRFNfTUFTSwkJR0VOTUFTSygxNSwgMCkKKworLyoqCisgKiBzdHJ1Y3Qg azNfcmluZ2FjY19wcm94eV90YXJnZXRfcmVncyAtIFByb3h5IERhdGFwYXRoIE1NSU8gUmVnaW9u CisgKgorICogQGNvbnRyb2w6IFByb3h5IENvbnRyb2wgUmVnaXN0ZXIKKyAqIEBzdGF0dXM6IFBy b3h5IFN0YXR1cyBSZWdpc3RlcgorICogQHJlc3ZfNTEyOiBSZXNlcnZlZAorICogQGRhdGE6IFBy b3h5IERhdGEgUmVnaXN0ZXIKKyAqLworc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3Jl Z3MgeworCXUzMgljb250cm9sOworCXUzMglzdGF0dXM7CisJdTgJcmVzdl81MTJbNTA0XTsKKwl1 MzIJZGF0YVsxMjhdOworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX1RBUkdFVF9TVEVQ CTB4MTAwMAorI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VECSgtMSkKKworZW51bSBr M19yaW5nYWNjX3Byb3h5X2FjY2Vzc19tb2RlIHsKKwlQUk9YWV9BQ0NFU1NfTU9ERV9IRUFEID0g MCwKKwlQUk9YWV9BQ0NFU1NfTU9ERV9UQUlMID0gMSwKKwlQUk9YWV9BQ0NFU1NfTU9ERV9QRUVL X0hFQUQgPSAyLAorCVBST1hZX0FDQ0VTU19NT0RFX1BFRUtfVEFJTCA9IDMsCit9OworCisjZGVm aW5lIEszX1JJTkdBQ0NfRklGT19XSU5ET1dfU0laRV9CWVRFUyAgKDUxMlUpCisjZGVmaW5lIEsz X1JJTkdBQ0NfRklGT19SRUdTX1NURVAJMHgxMDAwCisjZGVmaW5lIEszX1JJTkdBQ0NfTUFYX0RC X1JJTkdfQ05UICAgICgxMjdVKQorCitzdHJ1Y3QgazNfcmluZ19vcHMgeworCWludCAoKnB1c2hf dGFpbCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcHVzaF9oZWFk KShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKKwlpbnQgKCpwb3BfdGFpbCkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcG9wX2hlYWQpKHN0cnVjdCBr M19yaW5nICpyaW5nLCB2b2lkICplbG0pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZyAt IFJBIFJpbmcgZGVzY3JpcHRvcgorICoKKyAqIEBydDogUmluZyBjb250cm9sL3N0YXR1cyByZWdp c3RlcnMKKyAqIEBmaWZvczogUmluZyBxdWV1ZXMgcmVnaXN0ZXJzCisgKiBAcHJveHk6IFJpbmcg UHJveHkgRGF0YXBhdGggcmVnaXN0ZXJzCisgKiBAcmluZ19tZW1fZG1hOiBSaW5nIGJ1ZmZlciBk bWEgYWRkcmVzcworICogQHJpbmdfbWVtX3ZpcnQ6IFJpbmcgYnVmZmVyIHZpcnQgYWRkcmVzcwor ICogQG9wczogUmluZyBvcGVyYXRpb25zCisgKiBAc2l6ZTogUmluZyBzaXplIGluIGVsZW1lbnRz CisgKiBAZWxtX3NpemU6IFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudAorICogQG1vZGU6IFJpbmcg bW9kZQorICogQGZsYWdzOiBmbGFncworICogQGZyZWU6IE51bWJlciBvZiBmcmVlIGVsZW1lbnRz CisgKiBAb2NjOiBSaW5nIG9jY3VwYW5jeQorICogQHdpbmRleDogV3JpdGUgaW5kZXggKG9ubHkg Zm9yIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQorICogQHJpbmRleDogUmVhZCBpbmRleCAo b25seSBmb3IgQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisgKiBAcmluZ19pZDogUmluZyBJ ZAorICogQHBhcmVudDogUG9pbnRlciBvbiBzdHJ1Y3QgQGszX3JpbmdhY2MKKyAqIEB1c2VfY291 bnQ6IFVzZSBjb3VudCBmb3Igc2hhcmVkIHJpbmdzCisgKiBAcHJveHlfaWQ6IFJBIFJpbmcgUHJv eHkgSWQgKG9ubHkgaWYgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCisgKi8KK3N0cnVjdCBr M19yaW5nIHsKKwlzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIF9faW9tZW0gKnJ0OworCXN0cnVjdCBr M19yaW5nX2ZpZm9fcmVncyBfX2lvbWVtICpmaWZvczsKKwlzdHJ1Y3QgazNfcmluZ2FjY19wcm94 eV90YXJnZXRfcmVncyAgX19pb21lbSAqcHJveHk7CisJZG1hX2FkZHJfdAlyaW5nX21lbV9kbWE7 CisJdm9pZAkJKnJpbmdfbWVtX3ZpcnQ7CisJc3RydWN0IGszX3Jpbmdfb3BzICpvcHM7CisJdTMy CQlzaXplOworCWVudW0gazNfcmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmluZ19tb2Rl IG1vZGU7CisJdTMyCQlmbGFnczsKKyNkZWZpbmUgSzNfUklOR19GTEFHX0JVU1kJQklUKDEpCisj ZGVmaW5lIEszX1JJTkdfRkxBR19TSEFSRUQJQklUKDIpCisJdTMyCQlmcmVlOworCXUzMgkJb2Nj OworCXUzMgkJd2luZGV4OworCXUzMgkJcmluZGV4OworCXUzMgkJcmluZ19pZDsKKwlzdHJ1Y3Qg azNfcmluZ2FjYwkqcGFyZW50OworCXUzMgkJdXNlX2NvdW50OworCWludAkJcHJveHlfaWQ7Cit9 OworCisvKioKKyAqIHN0cnVjdCBrM19yaW5nYWNjIC0gUmluZ3MgYWNjZWxlcmF0b3IgZGVzY3Jp cHRvcgorICoKKyAqIEBkZXY6IHBvaW50ZXIgb24gUkEgZGV2aWNlCisgKiBAcHJveHlfZ2NmZzog UkEgcHJveHkgZ2xvYmFsIGNvbmZpZyByZWdpc3RlcnMKKyAqIEBwcm94eV90YXJnZXRfYmFzZTog UkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCisgKiBAbnVtX3JpbmdzOiBudW1iZXIgb2YgcmluZyBp biBSQQorICogQHJpbmdzX2ludXNlOiBiaXRmaWVsZCBmb3IgcmluZyB1c2FnZSB0cmFja2luZwor ICogQHJtX2dwX3JhbmdlOiBnZW5lcmFsIHB1cnBvc2UgcmluZ3MgcmFuZ2UgZnJvbSB0aXNjaQor ICogQGRtYV9yaW5nX3Jlc2V0X3F1aXJrOiBETUEgcmVzZXQgdy9hIGVuYWJsZQorICogQG51bV9w cm94aWVzOiBudW1iZXIgb2YgUkEgcHJveGllcworICogQHByb3h5X2ludXNlOiBiaXRmaWVsZCBm b3IgcHJveHkgdXNhZ2UgdHJhY2tpbmcKKyAqIEByaW5nczogYXJyYXkgb2YgcmluZ3MgZGVzY3Jp cHRvcnMgKHN0cnVjdCBAazNfcmluZykKKyAqIEBsaXN0OiBsaXN0IG9mIFJBcyBpbiB0aGUgc3lz dGVtCisgKiBAcmVxX2xvY2s6IHByb3RlY3QgcmluZ3MgYWxsb2NhdGlvbgorICogQHRpc2NpOiBw b2ludGVyIHRpLXNjaSBoYW5kbGUKKyAqIEB0aXNjaV9yaW5nX29wczogdGktc2NpIHJpbmdzIG9w cworICogQHRpc2NpX2Rldl9pZDogdGktc2NpIGRldmljZSBpZAorICovCitzdHJ1Y3QgazNfcmlu Z2FjYyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2dj ZmdfcmVncyBfX2lvbWVtICpwcm94eV9nY2ZnOworCXZvaWQgX19pb21lbSAqcHJveHlfdGFyZ2V0 X2Jhc2U7CisJdTMyIG51bV9yaW5nczsgLyogbnVtYmVyIG9mIHJpbmdzIGluIFJpbmdhY2MgbW9k dWxlICovCisJdW5zaWduZWQgbG9uZyAqcmluZ3NfaW51c2U7CisJc3RydWN0IHRpX3NjaV9yZXNv dXJjZSAqcm1fZ3BfcmFuZ2U7CisKKwlib29sIGRtYV9yaW5nX3Jlc2V0X3F1aXJrOworCXUzMiBu dW1fcHJveGllczsKKwl1bnNpZ25lZCBsb25nICpwcm94eV9pbnVzZTsKKworCXN0cnVjdCBrM19y aW5nICpyaW5nczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG11dGV4IHJlcV9s b2NrOyAvKiBwcm90ZWN0IHJpbmdzIGFsbG9jYXRpb24gKi8KKworCWNvbnN0IHN0cnVjdCB0aV9z Y2lfaGFuZGxlICp0aXNjaTsKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3JpbmdhY2Nfb3BzICp0 aXNjaV9yaW5nX29wczsKKwl1MzIgdGlzY2lfZGV2X2lkOworfTsKKworc3RhdGljIGxvbmcgazNf cmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlyZXR1 cm4gSzNfUklOR0FDQ19GSUZPX1dJTkRPV19TSVpFX0JZVEVTIC0KKwkgICAgICAgKDQgPDwgcmlu Zy0+ZWxtX3NpemUpOworfQorCitzdGF0aWMgdm9pZCAqazNfcmluZ2FjY19nZXRfZWxtX2FkZHIo c3RydWN0IGszX3JpbmcgKnJpbmcsIHUzMiBpZHgpCit7CisJcmV0dXJuIChyaW5nLT5yaW5nX21l bV92aXJ0ICsgaWR4ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKK30KKworc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcHVzaF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Oworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3QgazNfcmluZyAqcmlu Zywgdm9pZCAqZWxlbSk7CisKK3N0YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2Rl X3Jpbmdfb3BzID0geworCQkucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtLAor CQkucG9wX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX21lbSwKK307CisKK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Oworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbyhz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wb3BfdGFpbF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3N0 YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX21zZ19vcHMgPSB7CisJCS5wdXNo X3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbywKKwkJLnB1c2hfaGVhZCA9IGszX3Jpbmdh Y2NfcmluZ19wdXNoX2hlYWRfaW8sCisJCS5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3Bf dGFpbF9pbywKKwkJLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9pbywKK307CisKK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAq cmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxf cHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBrM19y aW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVs ZW0pOworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGsz X3JpbmdfbW9kZV9wcm94eV9vcHMgPSB7CisJCS5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3Jpbmdf cHVzaF90YWlsX3Byb3h5LAorCQkucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVh ZF9wcm94eSwKKwkJLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5LAor CQkucG9wX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHksCit9OworCitzdGF0 aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKKworCWRldl9kYmcoZGV2LCAi ZHVtcCByaW5nOiAlZFxuIiwgcmluZy0+cmluZ19pZCk7CisJZGV2X2RiZyhkZXYsICJkdW1wIG1l bSB2aXJ0ICVwLCBkbWEgJXBhZFxuIiwgcmluZy0+cmluZ19tZW1fdmlydCwKKwkJJnJpbmctPnJp bmdfbWVtX2RtYSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIGVsbXNpemUgJWQsIHNpemUgJWQsIG1v ZGUgJWQsIHByb3h5X2lkICVkXG4iLAorCQlyaW5nLT5lbG1fc2l6ZSwgcmluZy0+c2l6ZSwgcmlu Zy0+bW9kZSwgcmluZy0+cHJveHlfaWQpOworCisJZGV2X2RiZyhkZXYsICJkdW1wIHJpbmdfcnRf cmVnczogZGIlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmRiKSk7CisJZGV2X2RiZyhkZXYsICJk dW1wIG9jYyUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+b2NjKSk7CisJZGV2X2RiZyhkZXYsICJk dW1wIGluZHglMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmluZHgpKTsKKwlkZXZfZGJnKGRldiwg ImR1bXAgaHdvY2MlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmh3b2NjKSk7CisJZGV2X2RiZyhk ZXYsICJkdW1wIGh3aW5keCUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+aHdpbmR4KSk7CisKKwlp ZiAocmluZy0+cmluZ19tZW1fdmlydCkKKwkJcHJpbnRfaGV4X2R1bXBfZGVidWcoImR1bXAgcmlu Z19tZW1fdmlydCAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgMTYsIDEsIHJpbmctPnJp bmdfbWVtX3ZpcnQsIDE2ICogOCwgZmFsc2UpOworfQorCitzdHJ1Y3QgazNfcmluZyAqazNfcmlu Z2FjY19yZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBp ZCwgdTMyIGZsYWdzKQoreworCWludCBwcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VT RUQ7CisKKwltdXRleF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisKKwlpZiAoIXRyeV9tb2R1 bGVfZ2V0KHJpbmdhY2MtPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZy aW5nYWNjLT5yZXFfbG9jayk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChpZCA9PSBLM19S SU5HQUNDX1JJTkdfSURfQU5ZKSB7CisJCS8qIFJlcXVlc3QgZm9yIGFueSBnZW5lcmFsIHB1cnBv c2UgcmluZyAqLworCQlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNlX2Rlc2MgKmdwX3JpbmdzID0KKwkJ CQkJCSZyaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXTsKKwkJdW5zaWduZWQgbG9uZyBzaXpl OworCisJCXNpemUgPSBncF9yaW5ncy0+c3RhcnQgKyBncF9yaW5ncy0+bnVtOworCQlpZCA9IGZp bmRfbmV4dF96ZXJvX2JpdChyaW5nYWNjLT5yaW5nc19pbnVzZSwgc2l6ZSwKKwkJCQkJZ3Bfcmlu Z3MtPnN0YXJ0KTsKKwkJaWYgKGlkID09IHNpemUpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSBp ZiAoaWQgPCAwKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHRlc3RfYml0KGlkLCByaW5n YWNjLT5yaW5nc19pbnVzZSkgJiYKKwkgICAgIShyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBL M19SSU5HX0ZMQUdfU0hBUkVEKSkKKwkJZ290byBlcnJvcjsKKwllbHNlIGlmIChyaW5nYWNjLT5y aW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdfU0hBUkVEKQorCQlnb3RvIG91dDsKKworCWlm IChmbGFncyAmIEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpIHsKKwkJcHJveHlfaWQgPSBmaW5k X25leHRfemVyb19iaXQocmluZ2FjYy0+cHJveHlfaW51c2UsCisJCQkJCSAgICAgIHJpbmdhY2Mt Pm51bV9wcm94aWVzLCAwKTsKKwkJaWYgKHByb3h5X2lkID09IHJpbmdhY2MtPm51bV9wcm94aWVz KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAocHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9Y WV9OT1RfVVNFRCkgeworCQlzZXRfYml0KHByb3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVzZSk7 CisJCXJpbmdhY2MtPnJpbmdzW2lkXS5wcm94eV9pZCA9IHByb3h5X2lkOworCQlkZXZfZGJnKHJp bmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkIHByb3h5IyVkXG4iLCBpZCwKKwkJCXByb3h5X2lk KTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkXG4i LCBpZCk7CisJfQorCisJc2V0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOworb3V0Ogor CXJpbmdhY2MtPnJpbmdzW2lkXS51c2VfY291bnQrKzsKKwltdXRleF91bmxvY2soJnJpbmdhY2Mt PnJlcV9sb2NrKTsKKwlyZXR1cm4gJnJpbmdhY2MtPnJpbmdzW2lkXTsKKworZXJyb3I6CisJbW9k dWxlX3B1dChyaW5nYWNjLT5kZXYtPmRyaXZlci0+b3duZXIpOworCW11dGV4X3VubG9jaygmcmlu Z2FjYy0+cmVxX2xvY2spOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19yZXF1ZXN0X3JpbmcpOworCitzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVz ZXRfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5n YWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVF X1JNX1JJTkdfQ09VTlRfVkFMSUQsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5n LT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQlyaW5nLT5zaXplLAorCQkJMCwKKwkJCTAsCisJ CQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlc2V0IHJp bmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsKK30K Kwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy bjsKKworCXJpbmctPm9jYyA9IDA7CisJcmluZy0+ZnJlZSA9IDA7CisJcmluZy0+cmluZGV4ID0g MDsKKwlyaW5nLT53aW5kZXggPSAwOworCisJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5n KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19yZXNldCk7CisKK3N0YXRp YyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2koc3RydWN0IGszX3Jpbmcg KnJpbmcsCisJCQkJCSAgICAgICBlbnVtIGszX3JpbmdfbW9kZSBtb2RlKQoreworCXN0cnVjdCBr M19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSBy aW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rl dl9pZCwKKwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQltb2RlLAor CQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kg cmVjb25mIHFtb2RlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmlu Z19pZCk7Cit9CisKK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdTMyIG9jYykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJ TkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuOworCisJaWYgKCFyaW5nLT5wYXJlbnQtPmRtYV9yaW5n X3Jlc2V0X3F1aXJrKQorCQlnb3RvIHJlc2V0OworCisJaWYgKCFvY2MpCisJCW9jYyA9IHJlYWRs KCZyaW5nLT5ydC0+b2NjKTsKKworCWlmIChvY2MpIHsKKwkJdTMyIGRiX3JpbmdfY250LCBkYl9y aW5nX2NudF9jdXI7CisKKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgIiVzICV1IG9jYzog JXVcbiIsIF9fZnVuY19fLAorCQkJcmluZy0+cmluZ19pZCwgb2NjKTsKKwkJLyogVEktU0NJIHJp bmcgcmVzZXQgKi8KKwkJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKKworCQkvKgor CQkgKiBTZXR1cCB0aGUgcmluZyBpbiByaW5nL2Rvb3JiZWxsIG1vZGUgKGlmIG5vdCBhbHJlYWR5 IGluIHRoaXMKKwkJICogbW9kZSkKKwkJICovCisJCWlmIChyaW5nLT5tb2RlICE9IEszX1JJTkdB Q0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVfc2Np KAorCQkJCQlyaW5nLCBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKTsKKwkJLyoKKwkJICogUmlu ZyB0aGUgZG9vcmJlbGwgMioqMjIg4oCTIHJpbmdPY2MgdGltZXMuCisJCSAqIFRoaXMgd2lsbCB3 cmFwIHRoZSBpbnRlcm5hbCBVRE1BUCByaW5nIHN0YXRlIG9jY3VwYW5jeQorCQkgKiBjb3VudGVy ICh3aGljaCBpcyAyMS1iaXRzIHdpZGUpIHRvIDAuCisJCSAqLworCQlkYl9yaW5nX2NudCA9ICgx VSA8PCAyMikgLSBvY2M7CisKKwkJd2hpbGUgKGRiX3JpbmdfY250ICE9IDApIHsKKwkJCS8qCisJ CQkgKiBSaW5nIHRoZSBkb29yYmVsbCB3aXRoIHRoZSBtYXhpbXVtIGNvdW50IGVhY2gKKwkJCSAq IGl0ZXJhdGlvbiBpZiBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgdG90YWwKKwkJCSAqIG9mIHdy aXRlcworCQkJICovCisJCQlpZiAoZGJfcmluZ19jbnQgPiBLM19SSU5HQUNDX01BWF9EQl9SSU5H X0NOVCkKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBLM19SSU5HQUNDX01BWF9EQl9SSU5HX0NOVDsK KwkJCWVsc2UKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBkYl9yaW5nX2NudDsKKworCQkJd3JpdGVs KGRiX3JpbmdfY250X2N1ciwgJnJpbmctPnJ0LT5kYik7CisJCQlkYl9yaW5nX2NudCAtPSBkYl9y aW5nX2NudF9jdXI7CisJCX0KKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCByaW5nIG1vZGUg KGlmIG5vdCByaW5nIG1vZGUpICovCisJCWlmIChyaW5nLT5tb2RlICE9IEszX1JJTkdBQ0NfUklO R19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVfc2NpKHJpbmcs IHJpbmctPm1vZGUpOworCX0KKworcmVzZXQ6CisJLyogUmVzZXQgdGhlIHJpbmcgKi8KKwlrM19y aW5nYWNjX3JpbmdfcmVzZXQocmluZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNj X3JpbmdfcmVzZXRfZG1hKTsKKworc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX2ZyZWVfc2Np KHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0g cmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29w cy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX0FM TF9OT19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmctPnJpbmdfaWQs CisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJ CWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBmcmVlIGZhaWwgKCVkKSByaW5nX2lk eCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmluZ19pZCk7Cit9CisKK2ludCBrM19yaW5nYWNjX3Jp bmdfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmlu Z2FjYzsKKworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyaW5nYWNjID0gcmlu Zy0+cGFyZW50OworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZsYWdzOiAweCUwOHhc biIsIHJpbmctPmZsYWdzKTsKKworCWlmICghdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2Fj Yy0+cmluZ3NfaW51c2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJpbmdh Y2MtPnJlcV9sb2NrKTsKKworCWlmICgtLXJpbmctPnVzZV9jb3VudCkKKwkJZ290byBvdXQ7CisK KwlpZiAoIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJZ290byBub19pbml0 OworCisJazNfcmluZ2FjY19yaW5nX2ZyZWVfc2NpKHJpbmcpOworCisJZG1hX2ZyZWVfY29oZXJl bnQocmluZ2FjYy0+ZGV2LAorCQkJICByaW5nLT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUp LAorCQkJICByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5yaW5nX21lbV9kbWEpOworCXJpbmct PmZsYWdzID0gMDsKKwlyaW5nLT5vcHMgPSBOVUxMOworCWlmIChyaW5nLT5wcm94eV9pZCAhPSBL M19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7CisJCWNsZWFyX2JpdChyaW5nLT5wcm94eV9pZCwg cmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nLT5wcm94eSA9IE5VTEw7CisJCXJpbmctPnBy b3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKwl9CisKK25vX2luaXQ6CisJY2xl YXJfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKKworCW1vZHVsZV9w dXQocmluZ2FjYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKworb3V0OgorCW11dGV4X3VubG9jaygm cmluZ2FjYy0+cmVxX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19yaW5nX2ZyZWUpOworCit1MzIgazNfcmluZ2FjY19nZXRfcmluZ19pZChzdHJ1Y3Qg azNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0 dXJuIHJpbmctPnJpbmdfaWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX2dldF9y aW5nX2lkKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChzdHJ1Y3QgazNfcmlu ZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJp bmctPnBhcmVudC0+dGlzY2lfZGV2X2lkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2Fj Y19nZXRfdGlzY2lfZGV2X2lkKTsKKworaW50IGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bShz dHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpbnQgaXJxX251bTsKKworCWlmICghcmluZykKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlpcnFfbnVtID0gdGlfc2NpX2ludGFfbXNpX2dldF92aXJxKHJp bmctPnBhcmVudC0+ZGV2LCByaW5nLT5yaW5nX2lkKTsKKwlpZiAoaXJxX251bSA8PSAwKQorCQlp cnFfbnVtID0gLUVJTlZBTDsKKwlyZXR1cm4gaXJxX251bTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19y aW5nX2NmZ19zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJdTMyIHJpbmdfaWR4OworCWludCByZXQ7CisKKwlp ZiAoIXJpbmdhY2MtPnRpc2NpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJpbmdfaWR4ID0gcmlu Zy0+cmluZ19pZDsKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJ cmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX0FMTF9OT19PUkRFUiwKKwkJ CXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmdfaWR4LAorCQkJbG93ZXJfMzJfYml0cyhy aW5nLT5yaW5nX21lbV9kbWEpLAorCQkJdXBwZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEp LAorCQkJcmluZy0+c2l6ZSwKKwkJCXJpbmctPm1vZGUsCisJCQlyaW5nLT5lbG1fc2l6ZSwKKwkJ CTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgY29uZmlnIHJp bmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nX2lkeCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1Y3QgazNfcmluZyAqcmlu Zywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCit7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdh Y2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJpbmcgfHwgIWNmZykK KwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNmZy0+ZWxtX3NpemUgPiBLM19SSU5HQUNDX1JJTkdf RUxTSVpFXzI1NiB8fAorCSAgICBjZmctPm1vZGUgPj0gSzNfUklOR0FDQ19SSU5HX01PREVfSU5W QUxJRCB8fAorCSAgICBjZmctPnNpemUgJiB+SzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VMQ05U X01BU0sgfHwKKwkgICAgIXRlc3RfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJpbmdzX2lu dXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2ZnLT5tb2RlID09IEszX1JJTkdBQ0Nf UklOR19NT0RFX01FU1NBR0UgJiYKKwkgICAgcmluZy0+cHJveHlfaWQgPT0gSzNfUklOR0FDQ19Q Uk9YWV9OT1RfVVNFRCAmJgorCSAgICBjZmctPmVsbV9zaXplID4gSzNfUklOR0FDQ19SSU5HX0VM U0laRV84KSB7CisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LAorCQkJIk1lc3NhZ2UgbW9kZSBtdXN0 IHVzZSBwcm94eSBmb3IgJXUgZWxlbWVudCBzaXplXG4iLAorCQkJNCA8PCByaW5nLT5lbG1fc2l6 ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSW4gY2FzZSBvZiBzaGFyZWQg cmluZyBvbmx5IHRoZSBmaXJzdCB1c2VyIChtYXN0ZXIgdXNlcikgY2FuCisJICogY29uZmlndXJl IHRoZSByaW5nLiBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGJ5IHRoZSBjbGllbnQ6CisJICogcmlu ZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJpbmdhY2MsIHJpbmdfaWQsIDApOyAjIG1hc3Rl ciB1c2VyCisJICogazNfcmluZ2FjY19yaW5nX2NmZyhyaW5nLCBjZmcpOyAjIG1hc3RlciBjb25m aWd1cmF0aW9uCisJICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcocmluZ2FjYywgcmluZ19pZCwg SzNfUklOR19GTEFHX1NIQVJFRCk7CisJICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcocmluZ2Fj YywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICovCisJaWYgKHJpbmctPnVzZV9j b3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCXJpbmctPnNpemUgPSBjZmctPnNpemU7CisJcmlu Zy0+ZWxtX3NpemUgPSBjZmctPmVsbV9zaXplOworCXJpbmctPm1vZGUgPSBjZmctPm1vZGU7CisJ cmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5yaW5kZXggPSAwOworCXJp bmctPndpbmRleCA9IDA7CisKKwlpZiAocmluZy0+cHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9Y WV9OT1RfVVNFRCkKKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSAr CisJCQkgICAgICByaW5nLT5wcm94eV9pZCAqIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVA7 CisKKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfUklOR19NT0RFX1JJ Tkc6CisJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcmluZ19vcHM7CisJCWJyZWFrOworCWNh c2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRToKKwkJaWYgKHJpbmctPnByb3h5KQorCQkJ cmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9vcHM7CisJCWVsc2UKKwkJCXJpbmctPm9w cyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmluZy0+ b3BzID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9wcm94eTsKKwl9 OworCisJcmluZy0+cmluZ19tZW1fdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChyaW5nYWNjLT5k ZXYsCisJCQkJCXJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSksCisJCQkJCSZyaW5n LT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+cmluZ19tZW1fdmlydCkg eworCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIkZhaWxlZCB0byBhbGxvYyByaW5nIG1lbVxuIik7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfb3BzOworCX0KKworCXJldCA9IGsz X3JpbmdhY2NfcmluZ19jZmdfc2NpKHJpbmcpOworCisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJl ZV9tZW07CisKKwlyaW5nLT5mbGFncyB8PSBLM19SSU5HX0ZMQUdfQlVTWTsKKwlyaW5nLT5mbGFn cyB8PSAoY2ZnLT5mbGFncyAmIEszX1JJTkdBQ0NfUklOR19TSEFSRUQpID8KKwkJCUszX1JJTkdf RkxBR19TSEFSRUQgOiAwOworCisJazNfcmluZ2FjY19yaW5nX2R1bXAocmluZyk7CisKKwlyZXR1 cm4gMDsKKworZXJyX2ZyZWVfbWVtOgorCWRtYV9mcmVlX2NvaGVyZW50KHJpbmdhY2MtPmRldiwK KwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKKwkJCSAgcmluZy0+cmlu Z19tZW1fdmlydCwKKwkJCSAgcmluZy0+cmluZ19tZW1fZG1hKTsKK2Vycl9mcmVlX29wczoKKwly aW5nLT5vcHMgPSBOVUxMOworZXJyX2ZyZWVfcHJveHk6CisJcmluZy0+cHJveHkgPSBOVUxMOwor CXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfY2ZnKTsK KwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sK KwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmluZy0+c2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZSk7CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X2Zy ZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3Mg JiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyaW5nLT5m cmVlKQorCQlyaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIHJlYWRsKCZyaW5nLT5ydC0+b2NjKTsK KworCXJldHVybiByaW5nLT5mcmVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19y aW5nX2dldF9mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHN0cnVjdCBrM19y aW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFH X0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWFkbCgmcmluZy0+cnQtPm9j Yyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyk7CisKK3Uz MiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlyZXR1 cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShyaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGszX3JpbmdhY2NfcmluZ19pc19mdWxsKTsKKworZW51bSBrM19yaW5nYWNjX2FjY2Vzc19tb2Rl IHsKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRCwKKwlLM19SSU5HQUNDX0FDQ0VT U19NT0RFX1BPUF9IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMLAorCUsz X1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUwsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q RUVLX0hFQUQsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX1RBSUwsCit9OworCisjZGVm aW5lIEszX1JJTkdBQ0NfUFJPWFlfTU9ERSh4KQkoKCh4KSAmIDB4MykgPDwgMTYpCisjZGVmaW5l IEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywKKwkJCQkg ICAgIGVudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSBtb2RlKQoreworCXUzMiB2YWw7 CisKKwl2YWwgPSByaW5nLT5yaW5nX2lkOworCXZhbCB8PSBLM19SSU5HQUNDX1BST1hZX01PREUo bW9kZSk7CisJdmFsIHw9IEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHJpbmctPmVsbV9zaXplKTsK Kwl3cml0ZWwodmFsLCAmcmluZy0+cHJveHktPmNvbnRyb2wpOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkoc3RydWN0IGszX3JpbmcgKnJp bmcsIHZvaWQgKmVsZW0sCisJCQkJCWVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3Nf bW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCXB0ciA9ICh2b2lkIF9faW9tZW0gKikm cmluZy0+cHJveHktPmRhdGE7CisKKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7CisJY2FzZSBLM19S SU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUE9QX0hFQUQ6CisJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmluZywgUFJPWFlfQUND RVNTX01PREVfSEVBRCk7CisJCWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q VVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlrM19y aW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VTU19NT0RFX1RBSUwpOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdHIgKz0gazNfcmlu Z2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsK KwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJ InByb3h5Om1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLCBwdHIsCisJ CQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8PCByaW5nLT5l bG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5HQUNDX0FD Q0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9I RUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJInByb3h5Om1lbWNweV90b2lv KHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNzX21vZGUpOworCQlt ZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJCXJpbmctPmZy ZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2 X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBmcmVlJWQgb2NjJWRcbiIsIHJpbmctPmZy ZWUsCisJCXJpbmctPm9jYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkK K3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJ CQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQpOworfQorCitzdGF0aWMgaW50 IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywg ZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMKTsKK30KKwor c3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJv eHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQp OworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2Fj Y2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q T1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2FjY2Vzc19pbyhzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwKKwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19h Y2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCXN3aXRj aCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFE OgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKKwkJcHRyID0gKHZvaWQg X19pb21lbSAqKSZyaW5nLT5maWZvcy0+aGVhZF9kYXRhOworCQlicmVhazsKKwljYXNlIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9E RV9QT1BfVEFJTDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+dGFpbF9k YXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdHIg Kz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAoYWNjZXNz X21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJY2FzZSBL M19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ ZGV2LAorCQkJIm1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4iLCBwdHIs CisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8PCByaW5n LT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBLM19SSU5HQUND X0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJIm1lbWNweV90b2lvKHgp OiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNzX21vZGUpOworCQltZW1j cHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJCXJpbmctPmZyZWUt LTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2Ri ZyhyaW5nLT5wYXJlbnQtPmRldiwgImZyZWUlZCBpbmRleCVkIG9jYyVkIGluZGV4JWRcbiIsIHJp bmctPmZyZWUsCisJCXJpbmctPndpbmRleCwgcmluZy0+b2NjLCByaW5nLT5yaW5kZXgpOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfaW8oc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2Nfcmlu Z19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbyhzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2Fj Y2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RB SUwpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3Jp bmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3Nf aW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOwor fQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbyhzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19p byhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCk7Cit9 CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKQoreworCXZvaWQgKmVsZW1fcHRyOworCisJZWxlbV9wdHIgPSBrM19y aW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT53aW5kZXgpOworCisJbWVtY3B5KGVsZW1f cHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCisJcmluZy0+d2luZGV4ID0gKHJp bmctPndpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKKwlyaW5nLT5mcmVlLS07CisJd3JpdGVsKDEs ICZyaW5nLT5ydC0+ZGIpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVz aF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAorCQlyaW5nLT5mcmVlLCByaW5nLT53aW5kZXgpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJdm9pZCAqZWxlbV9wdHI7CisKKwll bGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmctPnJpbmRleCk7CisK KwltZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisKKwlyaW5n LT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5nLT5zaXplOworCXJpbmctPm9jYy0t OworCXdyaXRlbCgtMSwgJnJpbmctPnJ0LT5kYik7CisKKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ ZGV2LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBvc19wdHIlcFxuIiwKKwkJcmluZy0+ b2NjLCByaW5nLT5yaW5kZXgsIGVsZW1fcHRyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGszX3Jp bmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWlu dCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNf UklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9kYmcocmluZy0+cGFy ZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLCByaW5nLT5mcmVlLAorCQly aW5nLT53aW5kZXgpOworCisJaWYgKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHJpbmcpKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wdXNoX3RhaWwp CisJCXJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcsIGVsZW0pOworCisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wdXNoKTsKKworaW50IGsz X3JpbmdhY2NfcmluZ19wdXNoX2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Cit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFyaW5nIHx8ICEocmluZy0+Zmxh Z3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X2RiZyhy aW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVzaF9oZWFkOiBmcmVlJWQgaW5kZXglZFxuIiwKKwkJ cmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChrM19yaW5nYWNjX3JpbmdfaXNfZnVs bChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmluZy0+b3BzICYmIHJpbmctPm9w cy0+cHVzaF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfaGVhZChyaW5nLCBlbGVtKTsK KworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcHVz aF9oZWFkKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGszX3JpbmcgKnJpbmcs IHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFyaW5nIHx8 ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKCFyaW5nLT5vY2MpCisJCXJpbmctPm9jYyA9IGszX3JpbmdhY2NfcmluZ19nZXRfb2Nj KHJpbmcpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcG9wOiBvY2MlZCBp bmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlpZiAoIXJpbmctPm9j YykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnBv cF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFkKHJpbmcsIGVsZW0pOworCisJcmV0 dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3ApOworCitp bnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICpl bGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmct PmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgh cmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhyaW5nKTsK KworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3BvcF90YWlsOiBvY2MlZCBpbmRl eCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlpZiAoIXJpbmctPm9jYykK KwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnBvcF90 YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF90YWlsKHJpbmcsIGVsZW0pOworCisJcmV0dXJu IHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbCk7CisK K3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnJpbmdhY2NfbnA7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBF UlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXN0cnVjdCBrM19yaW5nYWNjICplbnRyeTsKKworCXJp bmdhY2NfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBwcm9wZXJ0eSwgMCk7CisJaWYgKCFyaW5n YWNjX25wKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCW11dGV4X2xvY2soJmszX3Jp bmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmazNfcmluZ2Fj Y19saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmRldi0+b2Zfbm9kZSA9PSByaW5nYWNjX25wKSB7 CisJCQlyaW5nYWNjID0gZW50cnk7CisJCQlicmVhazsKKwkJfQorCW11dGV4X3VubG9jaygmazNf cmluZ2FjY19saXN0X2xvY2spOworCW9mX25vZGVfcHV0KHJpbmdhY2NfbnApOworCisJcmV0dXJu IHJpbmdhY2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9rM19yaW5nYWNjX2dldF9ieV9waGFu ZGxlKTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3Byb2JlX2R0KHN0cnVjdCBrM19yaW5nYWNj ICpyaW5nYWNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHJpbmdhY2MtPmRldi0+ b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nYWNjLT5kZXY7CisJc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7 CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2UgdHJlZSBpbmZvIHVuYXZh aWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInRpLG51bS1yaW5ncyIsICZyaW5nYWNjLT5udW1fcmluZ3MpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxudW0tcmluZ3MgcmVhZCBmYWlsdXJlICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJpbmdhY2MtPmRtYV9yaW5nX3Jlc2V0X3F1 aXJrID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAidGksZG1hLXJpbmctcmVzZXQt cXVpcmsiKTsKKworCXJpbmdhY2MtPnRpc2NpID0gdGlfc2NpX2dldF9ieV9waGFuZGxlKG5vZGUs ICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnRpc2NpKSkgeworCQlyZXQgPSBQVFJf RVJSKHJpbmdhY2MtPnRpc2NpKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2 X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4iLCByZXQpOworCQlyaW5nYWNjLT50aXNj aSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIobm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZyaW5nYWNjLT50aXNjaV9kZXZfaWQp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxzY2ktZGV2LWlkIHJlYWQgZmFpbCAl ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwZGV2LT5pZCA9IHJpbmdhY2MtPnRp c2NpX2Rldl9pZDsKKworCXJpbmdhY2MtPnJtX2dwX3JhbmdlID0gZGV2bV90aV9zY2lfZ2V0X29m X3Jlc291cmNlKHJpbmdhY2MtPnRpc2NpLCBkZXYsCisJCQkJCQlyaW5nYWNjLT50aXNjaV9kZXZf aWQsCisJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJpbmdzIik7CisJaWYgKElTX0VSUihyaW5n YWNjLT5ybV9ncF9yYW5nZSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUg TVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyaW5nYWNjLT5ybV9ncF9yYW5n ZSk7CisJfQorCisJcmV0dXJuIHRpX3NjaV9pbnRhX21zaV9kb21haW5fYWxsb2NfaXJxcyhyaW5n YWNjLT5kZXYsCisJCQkJCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UpOworfQorCitzdGF0aWMgaW50 IGszX3JpbmdhY2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKwl2b2lkIF9faW9tZW0gKmJhc2VfZmlmbywgKmJhc2Vf cnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKKwlpbnQgcmV0LCBpOworCisJcmluZ2FjYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOworCWlmICghcmluZ2FjYykKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlyaW5nYWNjLT5kZXYgPSBkZXY7CisJbXV0ZXhfaW5pdCgmcmluZ2FjYy0+cmVxX2xv Y2spOworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dldF9kb21haW4oZGV2LCBkZXYtPm9m X25vZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9JTlRBX01TSSk7CisJaWYgKCFkZXYt Pm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1TSSBkb21haW5c biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXQgPSBrM19yaW5nYWNjX3By b2JlX2R0KHJpbmdhY2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicnQiKTsKKwli YXNlX3J0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGJh c2VfcnQpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX3J0KTsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJmaWZvcyIpOworCWJhc2Vf ZmlmbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNl X2ZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX2ZpZm8pOworCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByb3h5X2djZmciKTsK KwlyaW5nYWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQorCQlyZXR1cm4gUFRSX0VSUihyaW5n YWNjLT5wcm94eV9nY2ZnKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUo cGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJwcm94eV90YXJnZXQiKTsKKwlyaW5nYWNj LT5wcm94eV90YXJnZXRfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJ aWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSkpCisJCXJldHVybiBQVFJfRVJS KHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlKTsKKworCXJpbmdhY2MtPm51bV9wcm94aWVzID0g cmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPmNvbmZpZykgJgorCQkJCSAgICAgSzNfUklOR0FD Q19QUk9YWV9DRkdfVEhSRUFEU19NQVNLOworCisJcmluZ2FjYy0+cmluZ3MgPSBkZXZtX2t6YWxs b2MoZGV2LAorCQkJCSAgICAgIHNpemVvZigqcmluZ2FjYy0+cmluZ3MpICoKKwkJCQkgICAgICBy aW5nYWNjLT5udW1fcmluZ3MsCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJcmluZ2FjYy0+cmlu Z3NfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkgICAgQklUU19UT19MT05HUyhyaW5n YWNjLT5udW1fcmluZ3MpLAorCQkJCQkgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VS TkVMKTsKKwlyaW5nYWNjLT5wcm94eV9pbnVzZSA9IGRldm1fa2NhbGxvYyhkZXYsCisJCQkJCSAg ICBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9wcm94aWVzKSwKKwkJCQkJICAgIHNpemVvZih1 bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJpbmdhY2MtPnJpbmdzIHx8ICFy aW5nYWNjLT5yaW5nc19pbnVzZSB8fCAhcmluZ2FjYy0+cHJveHlfaW51c2UpCisJCXJldHVybiAt RU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJpbmdhY2MtPm51bV9yaW5nczsgaSsrKSB7CisJ CXJpbmdhY2MtPnJpbmdzW2ldLnJ0ID0gYmFzZV9ydCArCisJCQkJICAgICAgIEszX1JJTkdBQ0Nf UlRfUkVHU19TVEVQICogaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0uZmlmb3MgPSBiYXNlX2ZpZm8g KworCQkJCQkgIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAgKiBpOworCQlyaW5nYWNjLT5yaW5n c1tpXS5wYXJlbnQgPSByaW5nYWNjOworCQlyaW5nYWNjLT5yaW5nc1tpXS5yaW5nX2lkID0gaTsK KwkJcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlfaWQgPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VE OworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCByaW5nYWNjKTsKKworCXJpbmdhY2MtPnRpc2Np X3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1fcmluZ19vcHM7CisKKwltdXRleF9s b2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmluZ2FjYy0+bGlz dCwgJmszX3JpbmdhY2NfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9j ayk7CisKKwlkZXZfaW5mbyhkZXYsICJSaW5nIEFjY2VsZXJhdG9yIHByb2JlZCByaW5nczoldSwg Z3AtcmluZ3NbJXUsJXVdIHNjaS1kZXYtaWQ6JXVcbiIsCisJCSByaW5nYWNjLT5udW1fcmluZ3Ms CisJCSByaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5zdGFydCwKKwkJIHJpbmdhY2MtPnJt X2dwX3JhbmdlLT5kZXNjWzBdLm51bSwKKwkJIHJpbmdhY2MtPnRpc2NpX2Rldl9pZCk7CisJZGV2 X2luZm8oZGV2LCAiZG1hLXJpbmctcmVzZXQtcXVpcms6ICVzXG4iLAorCQkgcmluZ2FjYy0+ZG1h X3JpbmdfcmVzZXRfcXVpcmsgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwlkZXZfaW5mbyhk ZXYsICJSQSBQcm94eSByZXYuICUwOHgsIG51bV9wcm94aWVzOiV1XG4iLAorCQkgcmVhZGwoJnJp bmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwgcmluZ2FjYy0+bnVtX3Byb3hpZXMpOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBkZXZfZ2V0 X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9j ayk7CisJbGlzdF9kZWwoJnJpbmdhY2MtPmxpc3QpOworCW11dGV4X3VubG9jaygmazNfcmluZ2Fj Y19saXN0X2xvY2spOworCXJldHVybiAwOworfQorCisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxh dGZvcm0gYmluZGluZyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgazNfcmlu Z2FjY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3Mtcmlu Z2FjYyIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgazNfcmluZ2FjY19v Zl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGszX3JpbmdhY2NfZHJp dmVyID0geworCS5wcm9iZQkJPSBrM19yaW5nYWNjX3Byb2JlLAorCS5yZW1vdmUJCT0gazNfcmlu Z2FjY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImszLXJpbmdhY2MiLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBrM19yaW5nYWNjX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX3Bs YXRmb3JtX2RyaXZlcihrM19yaW5nYWNjX2RyaXZlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgUmluZ2FjYyBkcml2ZXIgZm9yIEszIFNPQ3Mi KTsKK01PRFVMRV9BVVRIT1IoIkdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3JpaS5zdHJhc2hrb0B0 aS5jb20+Iik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgg Yi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4yNmY3M2RmMGE1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNs dWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKQEAgLTAsMCArMSwyNDQgQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogSzMgUmluZyBBY2NlbGVyYXRv ciAoUkEpIHN1YnN5c3RlbSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4 YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20KKyAqLworCisj aWZuZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCisjZGVmaW5lIF9fU09DX1RJX0szX1JJ TkdBQ0NfQVBJX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNl X25vZGU7CisKKy8qKgorICogZW51bSBrM19yaW5nX21vZGUgLSAmc3RydWN0IGszX3JpbmdfY2Zn IG1vZGUKKyAqCisgKiBSQSByaW5nIG9wZXJhdGlvbmFsIG1vZGVzCisgKgorICogQEszX1JJTkdB Q0NfUklOR19NT0RFX1JJTkc6IEV4cG9zZWQgUmluZyBtb2RlIGZvciBTVyBkaXJlY3QgYWNjZXNz CisgKiBASzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTogTWVzc2FnaW5nIG1vZGUuIE1lc3Nh Z2luZyBtb2RlIHJlcXVpcmVzCisgKgl0aGF0IGFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgbXVz dCBnbyB0aHJvdWdoIHRoaXMgSVAgc28gdGhhdCBhbGwKKyAqCWFjY2Vzc2VzIHRvIHRoZSBtZW1v cnkgYXJlIGNvbnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAgdGhlbgorICoJY29udHJvbHMg dGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcXVldWUsIGFuZCBTVyBoYXMgbm8gZGlyZWN0bHkgY29u dHJvbCwKKyAqCXN1Y2ggYXMgdGhyb3VnaCBkb29yYmVsbHMgYW5kIGNhbm5vdCBhY2Nlc3MgdGhl IHN0b3JhZ2UgbWVtb3J5IGRpcmVjdGx5LgorICoJVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVs IHdoZW4gbW9yZSB0aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkgY2FuIGJlCisgKgl0aGUgcHJvZHVj ZXIgYW5kL29yIGNvbnN1bWVyIGF0IHRoZSBzYW1lIHRpbWUKKyAqIEBLM19SSU5HQUNDX1JJTkdf TU9ERV9DUkVERU5USUFMUzogQ3JlZGVudGlhbHMgbW9kZSBpcyBtZXNzYWdlIG1vZGUgcGx1cwor ICoJc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdlLCByZXF1aXJpbmcgdGhlIGVs ZW1lbnQgc2l6ZSB0byBiZQorICoJZG91YmxlZCB0byBmaXQgdGhlIGNyZWRlbnRpYWxzLiBBbnkg ZXhwb3NlZCBtZW1vcnkgc2hvdWxkIGJlIHByb3RlY3RlZAorICoJYnkgYSBmaXJld2FsbCBmcm9t IHVud2FudGVkIGFjY2VzcworICovCitlbnVtIGszX3JpbmdfbW9kZSB7CisJSzNfUklOR0FDQ19S SU5HX01PREVfUklORyA9IDAsCisJSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRSwKKwlLM19S SU5HQUNDX1JJTkdfTU9ERV9DUkVERU5USUFMUywKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9JTlZB TElECit9OworCisvKioKKyAqIGVudW0gazNfcmluZ19zaXplIC0gJnN0cnVjdCBrM19yaW5nX2Nm ZyBlbG1fc2l6ZQorICoKKyAqIFJBIHJpbmcgZWxlbWVudCdzIHNpemVzIGluIGJ5dGVzLgorICov CitlbnVtIGszX3Jpbmdfc2l6ZSB7CisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV80ID0gMCwKKwlL M19SSU5HQUNDX1JJTkdfRUxTSVpFXzgsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xNiwKKwlL M19SSU5HQUNDX1JJTkdfRUxTSVpFXzMyLAorCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfNjQsCisJ SzNfUklOR0FDQ19SSU5HX0VMU0laRV8xMjgsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8yNTYs CisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECit9OworCitzdHJ1Y3QgazNfcmluZ2Fj YzsKK3N0cnVjdCBrM19yaW5nOworCisvKioKKyAqIGVudW0gazNfcmluZ19jZmcgLSBSQSByaW5n IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICogQHNpemU6IFJpbmcgc2l6ZSwgbnVtYmVy IG9mIGVsZW1lbnRzCisgKiBAZWxtX3NpemU6IFJpbmcgZWxlbWVudCBzaXplCisgKiBAbW9kZTog UmluZyBvcGVyYXRpb25hbCBtb2RlCisgKiBAZmxhZ3M6IFJpbmcgY29uZmlndXJhdGlvbiBmbGFn cy4gUG9zc2libGUgdmFsdWVzOgorICoJIEBLM19SSU5HQUNDX1JJTkdfU0hBUkVEOiB3aGVuIHNl dCBhbGxvd3MgdG8gcmVxdWVzdCB0aGUgc2FtZSByaW5nCisgKgkgZmV3IHRpbWVzLiBJdCdzIHVz YWJsZSB3aGVuIHRoZSBzYW1lIHJpbmcgaXMgdXNlZCBhcyBGcmVlIEhvc3QgUEQgcmluZworICoJ IGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxlLgorICoJIE5vdGU6IExvY2tpbmcgc2hv dWxkIGJlIGRvbmUgYnkgY29uc3VtZXIgaWYgcmVxdWlyZWQKKyAqLworc3RydWN0IGszX3Jpbmdf Y2ZnIHsKKwl1MzIgc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6ZSBlbG1fc2l6ZTsKKwllbnVtIGsz X3JpbmdfbW9kZSBtb2RlOworI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfU0hBUkVEIEJJVCgxKQor CXUzMiBmbGFnczsKK307CisKKyNkZWZpbmUgSzNfUklOR0FDQ19SSU5HX0lEX0FOWSAoLTEpCisK Ky8qKgorICogb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSAtIGZpbmQgYSBSQSBieSBwaGFu ZGxlIHByb3BlcnR5CisgKiBAbnA6IGRldmljZSBub2RlCisgKiBAcHJvcG5hbWU6IHByb3BlcnR5 IG5hbWUgY29udGFpbmluZyBwaGFuZGxlIG9uIFJBIG5vZGUKKyAqCisgKiBSZXR1cm5zIHBvaW50 ZXIgb24gdGhlIFJBIC0gc3RydWN0IGszX3JpbmdhY2MKKyAqIG9yIC1FTk9ERVYgaWYgbm90IGZv dW5kLAorICogb3IgLUVQUk9CRV9ERUZFUiBpZiBub3QgeWV0IHJlZ2lzdGVyZWQKKyAqLworc3Ry dWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUoc3RydWN0IGRldmlj ZV9ub2RlICpucCwKKwkJCQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5KTsKKworI2RlZmluZSBLM19S SU5HQUNDX1JJTkdfVVNFX1BST1hZIEJJVCgxKQorCisvKioKKyAqIGszX3JpbmdhY2NfcmVxdWVz dF9yaW5nIC0gcmVxdWVzdCByaW5nIGZyb20gcmluZ2FjYworICogQHJpbmdhY2M6IHBvaW50ZXIg b24gcmluZ2FjYworICogQGlkOiByaW5nIGlkIG9yIEszX1JJTkdBQ0NfUklOR19JRF9BTlkgZm9y IGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZworICogQGZsYWdzOgorICoJQEszX1JJTkdBQ0NfUklO R19VU0VfUFJPWFk6IGlmIHNldCAtIHByb3h5IHdpbGwgYmUgYWxsb2NhdGVkIGFuZAorICoJCXVz ZWQgdG8gYWNjZXNzIHJpbmcgbWVtb3J5LiBTb3Bwb3J0ZWQgb25seSBmb3IgcmluZ3MgaW4KKyAq CQlNZXNzYWdlL0NyZWRlbnRpYWxzL1F1ZXVlIG1vZGUuCisgKgorICogUmV0dXJucyBwb2ludGVy IG9uIHRoZSBSaW5nIC0gc3RydWN0IGszX3JpbmcKKyAqIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWls dXJlLgorICovCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19yZXF1ZXN0X3Jpbmcoc3RydWN0 IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMyIGZsYWdzKTsKKworLyoqCisg KiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0CisgKiBAcmluZzogcG9pbnRlciBv biBSaW5nCisgKgorICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3RhdGUgKChodylvY2MsIChodylp ZHgpLgorICovCit2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmluZyAqcmlu Zyk7CisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19yZXNldCAtIHJpbmcgcmVzZXQgZm9yIERNQSBy aW5ncworICogQHJpbmc6IHBvaW50ZXIgb24gUmluZworICoKKyAqIFJlc2V0cyByaW5nIGludGVy bmFsIHN0YXRlICgoaHcpb2NjLCAoaHcpaWR4KS4gU2hvdWxkIGJlIHVzZWQgZm9yIHJpbmdzCisg KiB3aGljaCBhcmUgcmVhZCBieSBLMyBVRE1BLCBsaWtlIFRYIG9yIEZyZWUgSG9zdCBQRCByaW5n cy4KKyAqLwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKHN0cnVjdCBrM19yaW5nICpy aW5nLCB1MzIgb2NjKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZnJlZSAtIHJpbmcgZnJl ZQorICogQHJpbmc6IHBvaW50ZXIgb24gUmluZworICoKKyAqIFJlc2V0cyByaW5nIGFuZCBmcmVl IGFsbCBhbG9jYXRlZCByZXNvdXJjZXMuCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfZnJlZShz dHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19nZXRfcmluZ19pZCAt IEdldCB0aGUgUmluZyBJRAorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVy bnMgdGhlIFJpbmcgSUQKKyAqLwordTMyIGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQoc3RydWN0IGsz X3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSAtIEdl dCB0aGUgaXJxIG51bWJlciBmb3IgdGhlIHJpbmcKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcK KyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRv IHJlcXVlc3QgdGhlIGludGVycnVwdAorICovCitpbnQgazNfcmluZ2FjY19nZXRfcmluZ19pcnFf bnVtKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfY2Zn IC0gcmluZyBjb25maWd1cmUKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBjZmc6IFJp bmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChzZWUgJnN0cnVjdCBrM19yaW5nX2NmZykKKyAq CisgKiBDb25maWd1cmVzIHJpbmcsIGluY2x1ZGluZyByaW5nIG1lbW9yeSBhbGxvY2F0aW9uLgor ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGszX3Jp bmdhY2NfcmluZ19jZmcoc3RydWN0IGszX3JpbmcgKnJpbmcsIHN0cnVjdCBrM19yaW5nX2NmZyAq Y2ZnKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUgLSBnZXQgcmluZyBzaXpl CisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyByaW5nIHNpemUgaW4g bnVtYmVyIG9mIGVsZW1lbnRzLgorICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9zaXplKHN0 cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUg LSBnZXQgZnJlZSBlbGVtZW50cworICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJl dHVybnMgbnVtYmVyIG9mIGZyZWUgZWxlbWVudHMgaW4gdGhlIHJpbmcuCisgKi8KK3UzMiBrM19y aW5nYWNjX3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGsz X3JpbmdhY2NfcmluZ19nZXRfb2NjIC0gZ2V0IHJpbmcgb2NjdXBhbmN5CisgKiBAcmluZzogcG9p bnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgdmFsaWQgZW50cmll cyBvbiB0aGUgcmluZworICovCit1MzIgazNfcmluZ2FjY19yaW5nX2dldF9vY2Moc3RydWN0IGsz X3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19pc19mdWxsIC0gY2hlY2tz IGlmIHJpbmcgaXMgZnVsbAorICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVy bnMgdHJ1ZSBpZiB0aGUgcmluZyBpcyBmdWxsCisgKi8KK3UzMiBrM19yaW5nYWNjX3JpbmdfaXNf ZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3B1 c2ggLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbAorICogQHJpbmc6IHBvaW50ZXIgb24g cmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50IGJ1ZmZlcgorICoKKyAqIFB1 c2ggb25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyB0YWlsLiBTaXplIG9mIHRoZSByaW5nIGVs ZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNf cmluZ19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90 aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcG9wIC0gcG9wIGVs ZW1lbnQgZnJvbSB0aGUgcmluZyBoZWFkCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKiBA ZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVzaCBvbmUgcmlu ZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZC4gU2l6ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlz CisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2Zn IGVsbV9zaXplLi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNl LgorICovCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9p ZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZCAtIHB1c2ggZWxl bWVudCB0byB0aGUgcmluZyBoZWFkCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKiBAZWxl bTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVzaCBvbmUgcmluZyBl bGVtZW50IHRvIHRoZSByaW5nIGhlYWQuIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcworICog ZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1f c2l6ZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICog Tm90IFN1cHBvcnRlZCBieSByaW5nIG1vZGVzOiBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HCisg Ki8KK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwgLSBwb3AgZWxl bWVudCBmcm9tIHRoZSByaW5nIHRhaWwKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBl bGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVudCBidWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5n IGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsLiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMK KyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcg ZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4K KyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNfUklOR0FDQ19SSU5HX01PREVfUklO RworICovCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChzdHJ1Y3Qg azNfcmluZyAqcmluZyk7CisKKyNlbmRpZiAvKiBfX1NPQ19USV9LM19SSU5HQUNDX0FQSV9IXyAq LwotLSAKUGV0ZXIKClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUg MjIsIDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3Rp cGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK