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,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B446CA9ECF for ; Fri, 1 Nov 2019 08:42:52 +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 BE21A21855 for ; Fri, 1 Nov 2019 08:42:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="a8rPwMyF"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="MVm4utPH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BE21A21855 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=zus3SDAvtM7+uKeSIYrmXpLo+/x7R9NvvvhZA1hc+qo=; b=a8rPwMyF9OPV3M jIhEDJeqvwZmc7b8zeeb6c9o6AZYb2y73JkQgG5bBn5nZHDP+0EMBAMrOfZ/8YOw1Ys2QzZX2D4EK qDL2RkjEespjbHTc59nfiXVWvRJwHt6zh+sxs0Ig9kwP424dRh7ka8bYGsjgQRjn77NTx1eopqi26 Is3uOpmJQF4Yi12UbuIgnIaMvkGEQnWs/cAEqJdLGKtlwyB2oBbfSTcFui9CP2vB8wsQN2jTupz3U BpUh9ozL0x5mB0nX7LcyuJyH48SBygz3w4oGmScjYilOts6g2ttuYp6GusLiOvoGudWHk/KrDpY2y CTNLKkiEj9tv6/gEYEEw==; 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 1iQSW2-000238-9S; Fri, 01 Nov 2019 08:42:42 +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 1iQSU9-000070-7y for linux-arm-kernel@lists.infradead.org; Fri, 01 Nov 2019 08:40:50 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA18ectj129993; Fri, 1 Nov 2019 03:40:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572597638; bh=pFGcgmV9joePAjtxjh/KmnjqFTz3Ya0AK5+VjeJhMm8=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=MVm4utPHwt77y25x11v/PqF326b9LZBGyVbi1qPnN8mOPb1VBW9YpHsIUTcTcrwlm NRC3vVApq2/vnRIYCjh8SbWQHzlNf7mz+DMq9Q59qFW5yqF92tD2fdbxTPbgQxkqkO 8hQrDJfimKTszN9lVYcn/eiGSfHgImZC+nmj2KaM= Received: from DLEE106.ent.ti.com (dlee106.ent.ti.com [157.170.170.36]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xA18ecrD046471 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 1 Nov 2019 03:40:38 -0500 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE106.ent.ti.com (157.170.170.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 1 Nov 2019 03:40:37 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Fri, 1 Nov 2019 03:40:24 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA18eP8b036903; Fri, 1 Nov 2019 03:40:33 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v4 02/15] soc: ti: k3: add navss ringacc driver Date: Fri, 1 Nov 2019 10:41:22 +0200 Message-ID: <20191101084135.14811-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191101084135.14811-1-peter.ujfalusi@ti.com> References: <20191101084135.14811-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-20191101_014045_770504_683605AB X-CRM114-Status: GOOD ( 24.83 ) 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 fCAgIDEyICsKIGRyaXZlcnMvc29jL3RpL01ha2VmaWxlICAgICAgICAgICB8ICAgIDEgKwogZHJp dmVycy9zb2MvdGkvazMtcmluZ2FjYy5jICAgICAgIHwgMTE1OCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oIHwgIDI0NCArKysr KysKIDQgZmlsZXMgY2hhbmdlZCwgMTQxNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkv S2NvbmZpZyBiL2RyaXZlcnMvc29jL3RpL0tjb25maWcKaW5kZXggY2Y1NDVmNDI4ZDAzLi44Nzcy MmQzMzMzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL0tjb25maWcKKysrIGIvZHJpdmVy cy9zb2MvdGkvS2NvbmZpZwpAQCAtODAsNiArODAsMTggQEAgY29uZmlnIFRJX1NDSV9QTV9ET01B SU5TCiAJICBjYWxsZWQgdGlfc2NpX3BtX2RvbWFpbnMuIE5vdGUgdGhpcyBpcyBuZWVkZWQgZWFy bHkgaW4gYm9vdCBiZWZvcmUKIAkgIHJvb3RmcyBtYXkgYmUgYXZhaWxhYmxlLgogCitjb25maWcg VElfSzNfUklOR0FDQworCXRyaXN0YXRlICJLMyBSaW5nIGFjY2VsZXJhdG9yIFN1YiBTeXN0ZW0i CisJZGVwZW5kcyBvbiBBUkNIX0szIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gVElfU0NJ X0lOVEFfSVJRQ0hJUAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9y dCB0aGUgSzMgUmluZyBhY2NlbGVyYXRvciBtb2R1bGUuCisJICBUaGUgUmluZyBBY2NlbGVyYXRv ciAoUklOR0FDQyBvciBSQSkgIHByb3ZpZGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgorCSAgdG8g ZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBhIHByb2R1Y2Vy CisJICBhbmQgYSBjb25zdW1lci4gVGhlcmUgaXMgb25lIFJJTkdBQ0MgbW9kdWxlIHBlciBOQVZT UyBvbiBUSSBBTTY1eCBTb0NzCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRpZiAjIFNPQ19U SQogCiBjb25maWcgVElfU0NJX0lOVEFfTVNJX0RPTUFJTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z b2MvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQppbmRleCBiMzg2OGQzOTJk NGYuLmNjNGJjOGIwOGJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKQEAgLTksMyArOSw0IEBAIG9iai0kKENPTkZJR19B TVgzX1BNKQkJCSs9IHBtMzN4eC5vCiBvYmotJChDT05GSUdfV0tVUF9NM19JUEMpCQkrPSB3a3Vw X20zX2lwYy5vCiBvYmotJChDT05GSUdfVElfU0NJX1BNX0RPTUFJTlMpCQkrPSB0aV9zY2lfcG1f ZG9tYWlucy5vCiBvYmotJChDT05GSUdfVElfU0NJX0lOVEFfTVNJX0RPTUFJTikJKz0gdGlfc2Np X2ludGFfbXNpLm8KK29iai0kKENPTkZJR19USV9LM19SSU5HQUNDKQkJKz0gazMtcmluZ2FjYy5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMgYi9kcml2ZXJzL3NvYy90 aS9rMy1yaW5nYWNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4w MDU5Y2E5N2MwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNj LmMKQEAgLTAsMCArMSwxMTU4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIFRJIEszIE5BVlNTIFJpbmcgQWNjZWxlcmF0b3Igc3Vic3lzdGVtIGRyaXZlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQg LSBodHRwOi8vd3d3LnRpLmNvbQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5o PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9zb2MvdGkvazMtcmluZ2FjYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90 aS90aV9zY2lfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX2ludGFf bXNpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9t YWluLmg+CisKK3N0YXRpYyBMSVNUX0hFQUQoazNfcmluZ2FjY19saXN0KTsKK3N0YXRpYyBERUZJ TkVfTVVURVgoazNfcmluZ2FjY19saXN0X2xvY2spOworCisjZGVmaW5lIEszX1JJTkdBQ0NfQ0ZH X1JJTkdfU0laRV9FTENOVF9NQVNLCQlHRU5NQVNLKDE5LCAwKQorCisvKioKKyAqIHN0cnVjdCBr M19yaW5nX3J0X3JlZ3MgLSAgVGhlIFJBIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyByZWdpb24K KyAqLworc3RydWN0IGszX3JpbmdfcnRfcmVncyB7CisJdTMyCXJlc3ZfMTZbNF07CisJdTMyCWRi OwkJLyogUlQgUmluZyBOIERvb3JiZWxsIFJlZ2lzdGVyICovCisJdTMyCXJlc3ZfNFsxXTsKKwl1 MzIJb2NjOwkJLyogUlQgUmluZyBOIE9jY3VwYW5jeSBSZWdpc3RlciAqLworCXUzMglpbmR4OwkJ LyogUlQgUmluZyBOIEN1cnJlbnQgSW5kZXggUmVnaXN0ZXIgKi8KKwl1MzIJaHdvY2M7CQkvKiBS VCBSaW5nIE4gSGFyZHdhcmUgT2NjdXBhbmN5IFJlZ2lzdGVyICovCisJdTMyCWh3aW5keDsJCS8q IFJUIFJpbmcgTiBDdXJyZW50IEluZGV4IFJlZ2lzdGVyICovCit9OworCisjZGVmaW5lIEszX1JJ TkdBQ0NfUlRfUkVHU19TVEVQCTB4MTAwMAorCisvKioKKyAqIHN0cnVjdCBrM19yaW5nX2ZpZm9f cmVncyAtICBUaGUgUmluZyBBY2NlbGVyYXRvciBRdWV1ZXMgUmVnaXN0ZXJzIHJlZ2lvbgorICov CitzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgeworCXUzMgloZWFkX2RhdGFbMTI4XTsJCS8qIFJp bmcgSGVhZCBFbnRyeSBEYXRhIFJlZ2lzdGVycyAqLworCXUzMgl0YWlsX2RhdGFbMTI4XTsJCS8q IFJpbmcgVGFpbCBFbnRyeSBEYXRhIFJlZ2lzdGVycyAqLworCXUzMglwZWVrX2hlYWRfZGF0YVsx MjhdOwkvKiBSaW5nIFBlZWsgSGVhZCBFbnRyeSBEYXRhIFJlZ3MgKi8KKwl1MzIJcGVla190YWls X2RhdGFbMTI4XTsJLyogUmluZyBQZWVrIFRhaWwgRW50cnkgRGF0YSBSZWdzICovCit9OworCisv KioKKyAqIHN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyAtIFJBIFByb3h5IEdsb2Jh bCBDb25maWcgTU1JTyBSZWdpb24KKyAqLworc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19y ZWdzIHsKKwl1MzIJcmV2aXNpb247CS8qIFJldmlzaW9uIFJlZ2lzdGVyICovCisJdTMyCWNvbmZp ZzsJCS8qIENvbmZpZyBSZWdpc3RlciAqLworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1BST1hZ X0NGR19USFJFQURTX01BU0sJCUdFTk1BU0soMTUsIDApCisKKy8qKgorICogc3RydWN0IGszX3Jp bmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgLSAgUHJveHkgRGF0YXBhdGggTU1JTyBSZWdpb24KKyAq Lworc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgeworCXUzMgljb250cm9sOwkv KiBQcm94eSBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXN0YXR1czsJCS8qIFByb3h5IFN0YXR1 cyBSZWdpc3RlciAqLworCXU4CXJlc3ZfNTEyWzUwNF07CisJdTMyCWRhdGFbMTI4XTsJLyogUHJv eHkgRGF0YSBSZWdpc3RlciAqLworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX1RBUkdF VF9TVEVQCTB4MTAwMAorI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VECSgtMSkKKwor ZW51bSBrM19yaW5nYWNjX3Byb3h5X2FjY2Vzc19tb2RlIHsKKwlQUk9YWV9BQ0NFU1NfTU9ERV9I RUFEID0gMCwKKwlQUk9YWV9BQ0NFU1NfTU9ERV9UQUlMID0gMSwKKwlQUk9YWV9BQ0NFU1NfTU9E RV9QRUVLX0hFQUQgPSAyLAorCVBST1hZX0FDQ0VTU19NT0RFX1BFRUtfVEFJTCA9IDMsCit9Owor CisjZGVmaW5lIEszX1JJTkdBQ0NfRklGT19XSU5ET1dfU0laRV9CWVRFUyAgKDUxMlUpCisjZGVm aW5lIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAJMHgxMDAwCisjZGVmaW5lIEszX1JJTkdBQ0Nf TUFYX0RCX1JJTkdfQ05UICAgICgxMjdVKQorCisvKioKKyAqIHN0cnVjdCBrM19yaW5nX29wcyAt ICBSaW5nIG9wZXJhdGlvbnMKKyAqLworc3RydWN0IGszX3Jpbmdfb3BzIHsKKwlpbnQgKCpwdXNo X3RhaWwpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOworCWludCAoKnB1c2hfaGVh ZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcG9wX3RhaWwpKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbG0pOworCWludCAoKnBvcF9oZWFkKShzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKK307CisKKy8qKgorICogc3RydWN0IGszX3Jpbmcg LSBSQSBSaW5nIGRlc2NyaXB0b3IKKyAqCisgKiBAcnQgLSBSaW5nIGNvbnRyb2wvc3RhdHVzIHJl Z2lzdGVycworICogQGZpZm9zIC0gUmluZyBxdWV1ZXMgcmVnaXN0ZXJzCisgKiBAcHJveHkgLSBS aW5nIFByb3h5IERhdGFwYXRoIHJlZ2lzdGVycworICogQHJpbmdfbWVtX2RtYSAtIFJpbmcgYnVm ZmVyIGRtYSBhZGRyZXNzCisgKiBAcmluZ19tZW1fdmlydCAtIFJpbmcgYnVmZmVyIHZpcnQgYWRk cmVzcworICogQG9wcyAtIFJpbmcgb3BlcmF0aW9ucworICogQHNpemUgLSBSaW5nIHNpemUgaW4g ZWxlbWVudHMKKyAqIEBlbG1fc2l6ZSAtIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudAorICogQG1v ZGUgLSBSaW5nIG1vZGUKKyAqIEBmbGFncyAtIGZsYWdzCisgKiBAZnJlZSAtIE51bWJlciBvZiBm cmVlIGVsZW1lbnRzCisgKiBAb2NjIC0gUmluZyBvY2N1cGFuY3kKKyAqIEB3aW5kZXggLSBXcml0 ZSBpbmRleCAob25seSBmb3IgQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisgKiBAcmluZGV4 IC0gUmVhZCBpbmRleCAob25seSBmb3IgQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisgKiBA cmluZ19pZCAtIFJpbmcgSWQKKyAqIEBwYXJlbnQgLSBQb2ludGVyIG9uIHN0cnVjdCBAazNfcmlu Z2FjYworICogQHVzZV9jb3VudCAtIFVzZSBjb3VudCBmb3Igc2hhcmVkIHJpbmdzCisgKiBAcHJv eHlfaWQgLSBSQSBSaW5nIFByb3h5IElkIChvbmx5IGlmIEBLM19SSU5HQUNDX1JJTkdfVVNFX1BS T1hZKQorICovCitzdHJ1Y3QgazNfcmluZyB7CisJc3RydWN0IGszX3JpbmdfcnRfcmVncyBfX2lv bWVtICpydDsKKwlzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgX19pb21lbSAqZmlmb3M7CisJc3Ry dWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgIF9faW9tZW0gKnByb3h5OworCWRtYV9h ZGRyX3QJcmluZ19tZW1fZG1hOworCXZvaWQJCSpyaW5nX21lbV92aXJ0OworCXN0cnVjdCBrM19y aW5nX29wcyAqb3BzOworCXUzMgkJc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6ZSBlbG1fc2l6ZTsK KwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOworCXUzMgkJZmxhZ3M7CisjZGVmaW5lIEszX1JJTkdf RkxBR19CVVNZCUJJVCgxKQorI2RlZmluZSBLM19SSU5HX0ZMQUdfU0hBUkVECUJJVCgyKQorCXUz MgkJZnJlZTsKKwl1MzIJCW9jYzsKKwl1MzIJCXdpbmRleDsKKwl1MzIJCXJpbmRleDsKKwl1MzIJ CXJpbmdfaWQ7CisJc3RydWN0IGszX3JpbmdhY2MJKnBhcmVudDsKKwl1MzIJCXVzZV9jb3VudDsK KwlpbnQJCXByb3h5X2lkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjYyAtIFJpbmdz IGFjY2VsZXJhdG9yIGRlc2NyaXB0b3IKKyAqCisgKiBAZGV2IC0gcG9pbnRlciBvbiBSQSBkZXZp Y2UKKyAqIEBwcm94eV9nY2ZnIC0gUkEgcHJveHkgZ2xvYmFsIGNvbmZpZyByZWdpc3RlcnMKKyAq IEBwcm94eV90YXJnZXRfYmFzZSAtIFJBIHByb3h5IGRhdGFwYXRoIHJlZ2lvbgorICogQG51bV9y aW5ncyAtIG51bWJlciBvZiByaW5nIGluIFJBCisgKiBAcmluZ3NfaW51c2UgLSBiaXRmaWVsZCBm b3IgcmluZyB1c2FnZSB0cmFja2luZworICogQHJtX2dwX3JhbmdlIC0gZ2VuZXJhbCBwdXJwb3Nl IHJpbmdzIHJhbmdlIGZyb20gdGlzY2kKKyAqIEBkbWFfcmluZ19yZXNldF9xdWlyayAtIERNQSBy ZXNldCB3L2EgZW5hYmxlCisgKiBAbnVtX3Byb3hpZXMgLSBudW1iZXIgb2YgUkEgcHJveGllcwor ICogQHByb3h5X2ludXNlIC0gYml0ZmllbGQgZm9yIHByb3h5IHVzYWdlIHRyYWNraW5nCisgKiBA cmluZ3MgLSBhcnJheSBvZiByaW5ncyBkZXNjcmlwdG9ycyAoc3RydWN0IEBrM19yaW5nKQorICog QGxpc3QgLSBsaXN0IG9mIFJBcyBpbiB0aGUgc3lzdGVtCisgKiBAdGlzY2kgLSBwb2ludGVyIHRp LXNjaSBoYW5kbGUKKyAqIEB0aXNjaV9yaW5nX29wcyAtIHRpLXNjaSByaW5ncyBvcHMKKyAqIEB0 aXNjaV9kZXZfaWQgLSB0aS1zY2kgZGV2aWNlIGlkCisgKi8KK3N0cnVjdCBrM19yaW5nYWNjIHsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdz IF9faW9tZW0gKnByb3h5X2djZmc7CisJdm9pZCBfX2lvbWVtICpwcm94eV90YXJnZXRfYmFzZTsK Kwl1MzIgbnVtX3JpbmdzOyAvKiBudW1iZXIgb2YgcmluZ3MgaW4gUmluZ2FjYyBtb2R1bGUgKi8K Kwl1bnNpZ25lZCBsb25nICpyaW5nc19pbnVzZTsKKwlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNlICpy bV9ncF9yYW5nZTsKKworCWJvb2wgZG1hX3JpbmdfcmVzZXRfcXVpcms7CisJdTMyIG51bV9wcm94 aWVzOworCXVuc2lnbmVkIGxvbmcgKnByb3h5X2ludXNlOworCisJc3RydWN0IGszX3JpbmcgKnJp bmdzOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbXV0ZXggcmVxX2xvY2s7IC8q IHByb3RlY3QgcmluZ3MgYWxsb2NhdGlvbiAqLworCisJY29uc3Qgc3RydWN0IHRpX3NjaV9oYW5k bGUgKnRpc2NpOworCWNvbnN0IHN0cnVjdCB0aV9zY2lfcm1fcmluZ2FjY19vcHMgKnRpc2NpX3Jp bmdfb3BzOworCXUzMiAgdGlzY2lfZGV2X2lkOworfTsKKworc3RhdGljIGxvbmcgazNfcmluZ2Fj Y19yaW5nX2dldF9maWZvX3BvcyhzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gSzNf UklOR0FDQ19GSUZPX1dJTkRPV19TSVpFX0JZVEVTIC0KKwkgICAgICAgKDQgPDwgcmluZy0+ZWxt X3NpemUpOworfQorCitzdGF0aWMgdm9pZCAqazNfcmluZ2FjY19nZXRfZWxtX2FkZHIoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHUzMiBpZHgpCit7CisJcmV0dXJuIChyaW5nLT5yaW5nX21lbV92aXJ0 ICsgaWR4ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKK30KKworc3RhdGljIGludCBrM19yaW5n YWNjX3JpbmdfcHVzaF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9p ZCAqZWxlbSk7CisKK3N0YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX3Jpbmdf b3BzID0geworCQkucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtLAorCQkucG9w X2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX21lbSwKK307CisKK3N0YXRpYyBpbnQgazNfcmlu Z2FjY19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3Rh dGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lk ICplbGVtKTsKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbyhzdHJ1Y3Qg azNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19w b3BfdGFpbF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3N0YXRpYyBz dHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX21zZ19vcHMgPSB7CisJCS5wdXNoX3RhaWwg PSBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbywKKwkJLnB1c2hfaGVhZCA9IGszX3JpbmdhY2Nfcmlu Z19wdXNoX2hlYWRfaW8sCisJCS5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9p bywKKwkJLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9pbywKK307CisKK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywg dm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHko c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcG9wX2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwor c3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHZvaWQgKmVsZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3Jpbmdf bW9kZV9wcm94eV9vcHMgPSB7CisJCS5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF90 YWlsX3Byb3h5LAorCQkucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94 eSwKKwkJLnBvcF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5LAorCQkucG9w X2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHksCit9OworCitzdGF0aWMgdm9p ZCBrM19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKKworCWRldl9kYmcoZGV2LCAiZHVtcCBy aW5nOiAlZFxuIiwgcmluZy0+cmluZ19pZCk7CisJZGV2X2RiZyhkZXYsICJkdW1wIG1lbSB2aXJ0 ICVwLCBkbWEgJXBhZFxuIiwgcmluZy0+cmluZ19tZW1fdmlydCwKKwkJJnJpbmctPnJpbmdfbWVt X2RtYSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIGVsbXNpemUgJWQsIHNpemUgJWQsIG1vZGUgJWQs IHByb3h5X2lkICVkXG4iLAorCQlyaW5nLT5lbG1fc2l6ZSwgcmluZy0+c2l6ZSwgcmluZy0+bW9k ZSwgcmluZy0+cHJveHlfaWQpOworCisJZGV2X2RiZyhkZXYsICJkdW1wIHJpbmdfcnRfcmVnczog ZGIlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmRiKSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIG9j YyUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+b2NjKSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIGlu ZHglMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmluZHgpKTsKKwlkZXZfZGJnKGRldiwgImR1bXAg aHdvY2MlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmh3b2NjKSk7CisJZGV2X2RiZyhkZXYsICJk dW1wIGh3aW5keCUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+aHdpbmR4KSk7CisKKwlpZiAocmlu Zy0+cmluZ19tZW1fdmlydCkKKwkJcHJpbnRfaGV4X2R1bXBfZGVidWcoImR1bXAgcmluZ19tZW1f dmlydCAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgMTYsIDEsIHJpbmctPnJpbmdfbWVt X3ZpcnQsIDE2ICogOCwgZmFsc2UpOworfQorCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19y ZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMy IGZsYWdzKQoreworCWludCBwcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisK KwltdXRleF9sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisKKwlpZiAoaWQgPT0gSzNfUklOR0FD Q19SSU5HX0lEX0FOWSkgeworCQkvKiBSZXF1ZXN0IGZvciBhbnkgZ2VuZXJhbCBwdXJwb3NlIHJp bmcgKi8KKwkJc3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNjICpncF9yaW5ncyA9CisJCQkJCQkm cmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2NbMF07CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwor CQlzaXplID0gZ3BfcmluZ3MtPnN0YXJ0ICsgZ3BfcmluZ3MtPm51bTsKKwkJaWQgPSBmaW5kX25l eHRfemVyb19iaXQocmluZ2FjYy0+cmluZ3NfaW51c2UsIHNpemUsCisJCQkJCWdwX3JpbmdzLT5z dGFydCk7CisJCWlmIChpZCA9PSBzaXplKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgaWYgKGlk IDwgMCkgeworCQlnb3RvIGVycm9yOworCX0KKworCWlmICh0ZXN0X2JpdChpZCwgcmluZ2FjYy0+ cmluZ3NfaW51c2UpICYmCisJICAgICEocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklO R19GTEFHX1NIQVJFRCkpCisJCWdvdG8gZXJyb3I7CisJZWxzZSBpZiAocmluZ2FjYy0+cmluZ3Nb aWRdLmZsYWdzICYgSzNfUklOR19GTEFHX1NIQVJFRCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZmxh Z3MgJiBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZKSB7CisJCXByb3h5X2lkID0gZmluZF9uZXh0 X3plcm9fYml0KHJpbmdhY2MtPnByb3h5X2ludXNlLAorCQkJCQkgICAgICByaW5nYWNjLT5udW1f cHJveGllcywgMCk7CisJCWlmIChwcm94eV9pZCA9PSByaW5nYWNjLT5udW1fcHJveGllcykKKwkJ CWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCF0cnlfbW9kdWxlX2dldChyaW5nYWNjLT5kZXYtPmRy aXZlci0+b3duZXIpKQorCQlnb3RvIGVycm9yOworCisJaWYgKHByb3h5X2lkICE9IEszX1JJTkdB Q0NfUFJPWFlfTk9UX1VTRUQpIHsKKwkJc2V0X2JpdChwcm94eV9pZCwgcmluZ2FjYy0+cHJveHlf aW51c2UpOworCQlyaW5nYWNjLT5yaW5nc1tpZF0ucHJveHlfaWQgPSBwcm94eV9pZDsKKwkJZGV2 X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmluZyMlZCBwcm94eSMlZFxuIiwgaWQsCisJCQlw cm94eV9pZCk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmlu ZyMlZFxuIiwgaWQpOworCX0KKworCXNldF9iaXQoaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsK K291dDoKKwlyaW5nYWNjLT5yaW5nc1tpZF0udXNlX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZy aW5nYWNjLT5yZXFfbG9jayk7CisJcmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07CisKK2Vycm9y OgorCW11dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCXJldHVybiBOVUxMOworfQor RVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcpOworCitzdGF0aWMgdm9p ZCBrM19yaW5nYWNjX3JpbmdfcmVzZXRfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0 cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwly ZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ks CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfQ09VTlRfVkFMSUQsCisJCQlyaW5nYWNjLT50 aXNjaV9kZXZfaWQsCisJCQlyaW5nLT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQlyaW5nLT5z aXplLAorCQkJMCwKKwkJCTAsCisJCQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2Mt PmRldiwgIlRJU0NJIHJlc2V0IHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0 LCByaW5nLT5yaW5nX2lkKTsKK30KKwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3RydWN0 IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5H X0ZMQUdfQlVTWSkpCisJCXJldHVybjsKKworCXJpbmctPm9jYyA9IDA7CisJcmluZy0+ZnJlZSA9 IDA7CisJcmluZy0+cmluZGV4ID0gMDsKKwlyaW5nLT53aW5kZXggPSAwOworCisJazNfcmluZ2Fj Y19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19yZXNldCk7CisKK3N0YXRpYyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9k ZV9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcsCisJCQkJCSAgICAgICBlbnVtIGszX3JpbmdfbW9k ZSBtb2RlKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owor CWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJ cmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwK KwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJ MCwKKwkJCTAsCisJCQltb2RlLAorCQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIo cmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmVjb25mIHFtb2RlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxu IiwKKwkJCXJldCwgcmluZy0+cmluZ19pZCk7Cit9CisKK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jl c2V0X2RtYShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYykKK3sKKwlpZiAoIXJpbmcgfHwg IShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuOworCisJaWYgKCFy aW5nLT5wYXJlbnQtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrKQorCQlnb3RvIHJlc2V0OworCisJaWYg KCFvY2MpCisJCW9jYyA9IHJlYWRsKCZyaW5nLT5ydC0+b2NjKTsKKworCWlmIChvY2MpIHsKKwkJ dTMyIGRiX3JpbmdfY250LCBkYl9yaW5nX2NudF9jdXI7CisKKwkJZGV2X2RiZyhyaW5nLT5wYXJl bnQtPmRldiwgIiVzICV1IG9jYzogJXVcbiIsIF9fZnVuY19fLAorCQkJcmluZy0+cmluZ19pZCwg b2NjKTsKKwkJLyogVEktU0NJIHJpbmcgcmVzZXQgKi8KKwkJazNfcmluZ2FjY19yaW5nX3Jlc2V0 X3NjaShyaW5nKTsKKworCQkvKgorCQkgKiBTZXR1cCB0aGUgcmluZyBpbiByaW5nL2Rvb3JiZWxs IG1vZGUgKGlmIG5vdCBhbHJlYWR5IGluIHRoaXMKKwkJICogbW9kZSkKKwkJICovCisJCWlmIChy aW5nLT5tb2RlICE9IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3Jp bmdfcmVjb25maWdfcW1vZGVfc2NpKAorCQkJCQlyaW5nLCBLM19SSU5HQUNDX1JJTkdfTU9ERV9S SU5HKTsKKwkJLyoKKwkJICogUmluZyB0aGUgZG9vcmJlbGwgMioqMjIg4oCTIHJpbmdPY2MgdGlt ZXMuCisJCSAqIFRoaXMgd2lsbCB3cmFwIHRoZSBpbnRlcm5hbCBVRE1BUCByaW5nIHN0YXRlIG9j Y3VwYW5jeQorCQkgKiBjb3VudGVyICh3aGljaCBpcyAyMS1iaXRzIHdpZGUpIHRvIDAuCisJCSAq LworCQlkYl9yaW5nX2NudCA9ICgxVSA8PCAyMikgLSBvY2M7CisKKwkJd2hpbGUgKGRiX3Jpbmdf Y250ICE9IDApIHsKKwkJCS8qCisJCQkgKiBSaW5nIHRoZSBkb29yYmVsbCB3aXRoIHRoZSBtYXhp bXVtIGNvdW50IGVhY2gKKwkJCSAqIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0 aGUgdG90YWwKKwkJCSAqIG9mIHdyaXRlcworCQkJICovCisJCQlpZiAoZGJfcmluZ19jbnQgPiBL M19SSU5HQUNDX01BWF9EQl9SSU5HX0NOVCkKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBLM19SSU5H QUNDX01BWF9EQl9SSU5HX0NOVDsKKwkJCWVsc2UKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBkYl9y aW5nX2NudDsKKworCQkJd3JpdGVsKGRiX3JpbmdfY250X2N1ciwgJnJpbmctPnJ0LT5kYik7CisJ CQlkYl9yaW5nX2NudCAtPSBkYl9yaW5nX2NudF9jdXI7CisJCX0KKworCQkvKiBSZXN0b3JlIHRo ZSBvcmlnaW5hbCByaW5nIG1vZGUgKGlmIG5vdCByaW5nIG1vZGUpICovCisJCWlmIChyaW5nLT5t b2RlICE9IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVj b25maWdfcW1vZGVfc2NpKHJpbmcsIHJpbmctPm1vZGUpOworCX0KKworcmVzZXQ6CisJLyogUmVz ZXQgdGhlIHJpbmcgKi8KKwlrM19yaW5nYWNjX3JpbmdfcmVzZXQocmluZyk7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcmVzZXRfZG1hKTsKKworc3RhdGljIHZvaWQgazNf cmluZ2FjY19yaW5nX2ZyZWVfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBr M19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSBy aW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX0FMTF9OT19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9p ZCwKKwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwK KwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBm cmVlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmluZ19pZCk7Cit9 CisKK2ludCBrM19yaW5nYWNjX3JpbmdfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlz dHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlyaW5nYWNjID0gcmluZy0+cGFyZW50OworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQt PmRldiwgImZsYWdzOiAweCUwOHhcbiIsIHJpbmctPmZsYWdzKTsKKworCWlmICghdGVzdF9iaXQo cmluZy0+cmluZ19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCW11dGV4X2xvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKKworCWlmICgtLXJpbmctPnVzZV9j b3VudCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19C VVNZKSkKKwkJZ290byBub19pbml0OworCisJazNfcmluZ2FjY19yaW5nX2ZyZWVfc2NpKHJpbmcp OworCisJZG1hX2ZyZWVfY29oZXJlbnQocmluZ2FjYy0+ZGV2LAorCQkJICByaW5nLT5zaXplICog KDQgPDwgcmluZy0+ZWxtX3NpemUpLAorCQkJICByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5y aW5nX21lbV9kbWEpOworCXJpbmctPmZsYWdzID0gMDsKKwlyaW5nLT5vcHMgPSBOVUxMOworCWlm IChyaW5nLT5wcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7CisJCWNsZWFy X2JpdChyaW5nLT5wcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nLT5wcm94 eSA9IE5VTEw7CisJCXJpbmctPnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsK Kwl9CisKK25vX2luaXQ6CisJY2xlYXJfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJpbmdz X2ludXNlKTsKKworCW1vZHVsZV9wdXQocmluZ2FjYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwor b3V0OgorCW11dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCXJldHVybiAwOworfQor RVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2ZyZWUpOworCit1MzIgazNfcmluZ2Fj Y19nZXRfcmluZ19pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJl dHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJpbmctPnJpbmdfaWQ7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrM19yaW5nYWNjX2dldF9yaW5nX2lkKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2Np X2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIHJpbmctPnBhcmVudC0+dGlzY2lfZGV2X2lkOworfQorRVhQT1JU X1NZTUJPTF9HUEwoazNfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKTsKKworaW50IGszX3Jpbmdh Y2NfZ2V0X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpbnQgaXJxX251 bTsKKworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnFfbnVtID0gdGlfc2Np X2ludGFfbXNpX2dldF92aXJxKHJpbmctPnBhcmVudC0+ZGV2LCByaW5nLT5yaW5nX2lkKTsKKwlp ZiAoaXJxX251bSA8PSAwKQorCQlpcnFfbnVtID0gLUVJTlZBTDsKKwlyZXR1cm4gaXJxX251bTsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7CisKK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2NmZ19zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7 CisJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJdTMyIHJpbmdf aWR4OworCWludCByZXQ7CisKKwlpZiAoIXJpbmdhY2MtPnRpc2NpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJpbmdfaWR4ID0gcmluZy0+cmluZ19pZDsKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVF X1JNX0FMTF9OT19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmdfaWR4 LAorCQkJbG93ZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEpLAorCQkJdXBwZXJfMzJfYml0 cyhyaW5nLT5yaW5nX21lbV9kbWEpLAorCQkJcmluZy0+c2l6ZSwKKwkJCXJpbmctPm1vZGUsCisJ CQlyaW5nLT5lbG1fc2l6ZSwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ ZGV2LCAiVElTQ0kgY29uZmlnIHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0 LCByaW5nX2lkeCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgazNfcmluZ2FjY19yaW5nX2Nm ZyhzdHJ1Y3QgazNfcmluZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCit7CisJc3Ry dWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisK KwlpZiAoIXJpbmcgfHwgIWNmZykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNmZy0+ZWxtX3Np emUgPiBLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzI1NiB8fAorCSAgICBjZmctPm1vZGUgPj0gSzNf UklOR0FDQ19SSU5HX01PREVfSU5WQUxJRCB8fAorCSAgICBjZmctPnNpemUgJiB+SzNfUklOR0FD Q19DRkdfUklOR19TSVpFX0VMQ05UX01BU0sgfHwKKwkgICAgIXRlc3RfYml0KHJpbmctPnJpbmdf aWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2Zn LT5tb2RlID09IEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0UgJiYKKwkgICAgcmluZy0+cHJv eHlfaWQgPT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCAmJgorCSAgICBjZmctPmVsbV9zaXpl ID4gSzNfUklOR0FDQ19SSU5HX0VMU0laRV84KSB7CisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LAor CQkJIk1lc3NhZ2UgbW9kZSBtdXN0IHVzZSBwcm94eSBmb3IgJXUgZWxlbWVudCBzaXplXG4iLAor CQkJNCA8PCByaW5nLT5lbG1fc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJ ICogSW4gY2FzZSBvZiBzaGFyZWQgcmluZyBvbmx5IHRoZSBmaXJzdCB1c2VyIChtYXN0ZXIgdXNl cikgY2FuCisJICogY29uZmlndXJlIHRoZSByaW5nLiBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGJ5 IHRoZSBjbGllbnQ6CisJICogcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJpbmdhY2Ms IHJpbmdfaWQsIDApOyAjIG1hc3RlciB1c2VyCisJICogazNfcmluZ2FjY19yaW5nX2NmZyhyaW5n LCBjZmcpOyAjIG1hc3RlciBjb25maWd1cmF0aW9uCisJICogazNfcmluZ2FjY19yZXF1ZXN0X3Jp bmcocmluZ2FjYywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICogazNfcmluZ2Fj Y19yZXF1ZXN0X3JpbmcocmluZ2FjYywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJ ICovCisJaWYgKHJpbmctPnVzZV9jb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCXJpbmctPnNp emUgPSBjZmctPnNpemU7CisJcmluZy0+ZWxtX3NpemUgPSBjZmctPmVsbV9zaXplOworCXJpbmct Pm1vZGUgPSBjZmctPm1vZGU7CisJcmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwly aW5nLT5yaW5kZXggPSAwOworCXJpbmctPndpbmRleCA9IDA7CisKKwlpZiAocmluZy0+cHJveHlf aWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkKKwkJcmluZy0+cHJveHkgPSByaW5nYWNj LT5wcm94eV90YXJnZXRfYmFzZSArCisJCQkgICAgICByaW5nLT5wcm94eV9pZCAqIEszX1JJTkdB Q0NfUFJPWFlfVEFSR0VUX1NURVA7CisKKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKKwljYXNlIEsz X1JJTkdBQ0NfUklOR19NT0RFX1JJTkc6CisJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcmlu Z19vcHM7CisJCWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRToKKwkJ aWYgKHJpbmctPnByb3h5KQorCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9vcHM7 CisJCWVsc2UKKwkJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJcmluZy0+b3BzID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290 byBlcnJfZnJlZV9wcm94eTsKKwl9OworCisJcmluZy0+cmluZ19tZW1fdmlydCA9IGRtYV9hbGxv Y19jb2hlcmVudChyaW5nYWNjLT5kZXYsCisJCQkJCXJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5l bG1fc2l6ZSksCisJCQkJCSZyaW5nLT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOworCWlmICgh cmluZy0+cmluZ19tZW1fdmlydCkgeworCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIkZhaWxlZCB0 byBhbGxvYyByaW5nIG1lbVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVf b3BzOworCX0KKworCXJldCA9IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHJpbmcpOworCisJaWYg KHJldCkKKwkJZ290byBlcnJfZnJlZV9tZW07CisKKwlyaW5nLT5mbGFncyB8PSBLM19SSU5HX0ZM QUdfQlVTWTsKKwlyaW5nLT5mbGFncyB8PSAoY2ZnLT5mbGFncyAmIEszX1JJTkdBQ0NfUklOR19T SEFSRUQpID8KKwkJCUszX1JJTkdfRkxBR19TSEFSRUQgOiAwOworCisJazNfcmluZ2FjY19yaW5n X2R1bXAocmluZyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfbWVtOgorCWRtYV9mcmVlX2Nv aGVyZW50KHJpbmdhY2MtPmRldiwKKwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9z aXplKSwKKwkJCSAgcmluZy0+cmluZ19tZW1fdmlydCwKKwkJCSAgcmluZy0+cmluZ19tZW1fZG1h KTsKK2Vycl9mcmVlX29wczoKKwlyaW5nLT5vcHMgPSBOVUxMOworZXJyX2ZyZWVfcHJveHk6CisJ cmluZy0+cHJveHkgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChr M19yaW5nYWNjX3JpbmdfY2ZnKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1 Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJ TkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmluZy0+c2l6ZTsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZSk7CisKK3UzMiBr M19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFy aW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKCFyaW5nLT5mcmVlKQorCQlyaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIHJl YWRsKCZyaW5nLT5ydC0+b2NjKTsKKworCXJldHVybiByaW5nLT5mcmVlOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9mcmVlKTsKKwordTMyIGszX3JpbmdhY2Nfcmlu Z19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmct PmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVy biByZWFkbCgmcmluZy0+cnQtPm9jYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNj X3JpbmdfZ2V0X29jYyk7CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNf cmluZyAqcmluZykKK3sKKwlyZXR1cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShyaW5nKTsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKTsKKworZW51bSBr M19yaW5nYWNjX2FjY2Vzc19tb2RlIHsKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVB RCwKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNT X01PREVfUFVTSF9UQUlMLAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUwsCisJSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX0hFQUQsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q RUVLX1RBSUwsCit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfTU9ERSh4KQkoKCh4KSAm IDB4MykgPDwgMTYpCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHgpCSgoKHgpICYg MHg3KSA8PCAyNCkKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShzdHJ1Y3Qg azNfcmluZyAqcmluZywKKwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9k ZSBtb2RlKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSByaW5nLT5yaW5nX2lkOworCXZhbCB8PSBL M19SSU5HQUNDX1BST1hZX01PREUobW9kZSk7CisJdmFsIHw9IEszX1JJTkdBQ0NfUFJPWFlfRUxT SVpFKHJpbmctPmVsbV9zaXplKTsKKwl3cml0ZWwodmFsLCAmcmluZy0+cHJveHktPmNvbnRyb2wp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJv eHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCisJCQkJCWVudW0gazNfcmluZ2Fj Y19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCXB0 ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+cHJveHktPmRhdGE7CisKKwlzd2l0Y2ggKGFjY2Vz c19tb2RlKSB7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKKwljYXNl IEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJCWszX3JpbmdhY2NfcmluZ19jZmdf cHJveHkocmluZywgUFJPWFlfQUNDRVNTX01PREVfSEVBRCk7CisJCWJyZWFrOworCWNhc2UgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19N T0RFX1BPUF9UQUlMOgorCQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FD Q0VTU19NT0RFX1RBSUwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3 aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hF QUQ6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJp bmctPnBhcmVudC0+ZGV2LAorCQkJInByb3h5Om1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXAp LCBtb2RlOiVkXG4iLCBwdHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxl bSwgcHRyLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7 CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdB Q0NfQUNDRVNTX01PREVfUFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAor CQkJInByb3h5Om1lbWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAor CQkJYWNjZXNzX21vZGUpOworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVs bV9zaXplKSk7CisJCXJpbmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBmcmVl JWQgb2NjJWRcbiIsIHJpbmctPmZyZWUsCisJCXJpbmctPm9jYyk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19w cm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hF QUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2Nfcmlu Z19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUFVTSF9UQUlMKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRf cHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3Jp bmdhY2NfcmluZ19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0Nf QUNDRVNTX01PREVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19w b3BfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1 cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNf UklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX2FjY2Vzc19pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwKKwkJCQkg ICAgIGVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9f aW9tZW0gKnB0cjsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0Nf QUNDRVNTX01PREVfUFVTSF9IRUFEOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1Bf SEVBRDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+aGVhZF9kYXRhOwor CQlicmVhazsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgorCWNhc2Ug SzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAq KSZyaW5nLT5maWZvcy0+dGFpbF9kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5n KTsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUE9QX0hFQUQ6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlk ZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJIm1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIo JXApLCBtb2RlOiVkXG4iLCBwdHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8o ZWxlbSwgcHRyLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJl YWs7CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2 LAorCQkJIm1lbWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJ YWNjZXNzX21vZGUpOworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9z aXplKSk7CisJCXJpbmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZyZWUlZCBpbmRleCVk IG9jYyVkIGluZGV4JWRcbiIsIHJpbmctPmZyZWUsCisJCXJpbmctPndpbmRleCwgcmluZy0+b2Nj LCByaW5nLT5yaW5kZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmluZ19wdXNoX2hlYWRfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJ cmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcHVzaF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1 cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FD Q19BQ0NFU1NfTU9ERV9QVVNIX1RBSUwpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2Nfcmlu Z19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGsz X3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3Bf dGFpbF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNf cmluZ2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NF U1NfTU9ERV9QT1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hf bWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXZvaWQgKmVsZW1fcHRy OworCisJZWxlbV9wdHIgPSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT53aW5k ZXgpOworCisJbWVtY3B5KGVsZW1fcHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwor CisJcmluZy0+d2luZGV4ID0gKHJpbmctPndpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKKwlyaW5n LT5mcmVlLS07CisJd3JpdGVsKDEsICZyaW5nLT5ydC0+ZGIpOworCisJZGV2X2RiZyhyaW5nLT5w YXJlbnQtPmRldiwgInJpbmdfcHVzaF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAorCQlyaW5nLT5m cmVlLCByaW5nLT53aW5kZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmlu Z2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJ dm9pZCAqZWxlbV9wdHI7CisKKwllbGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJp bmcsIHJpbmctPnJpbmRleCk7CisKKwltZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmct PmVsbV9zaXplKSk7CisKKwlyaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5n LT5zaXplOworCXJpbmctPm9jYy0tOworCXdyaXRlbCgtMSwgJnJpbmctPnJ0LT5kYik7CisKKwlk ZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBv c19wdHIlcFxuIiwKKwkJcmluZy0+b2NjLCByaW5nLT5yaW5kZXgsIGVsZW1fcHRyKTsKKwlyZXR1 cm4gMDsKK30KKworaW50IGszX3JpbmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5n LCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8 fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVk XG4iLCByaW5nLT5mcmVlLAorCQlyaW5nLT53aW5kZXgpOworCisJaWYgKGszX3JpbmdhY2Nfcmlu Z19pc19mdWxsKHJpbmcpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyaW5nLT5vcHMgJiYg cmluZy0+b3BzLT5wdXNoX3RhaWwpCisJCXJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcs IGVsZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19wdXNoKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQoc3RydWN0IGszX3Jp bmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYg KCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAt RUlOVkFMOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVzaF9oZWFkOiBm cmVlJWQgaW5kZXglZFxuIiwKKwkJcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChr M19yaW5nYWNjX3JpbmdfaXNfZnVsbChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAo cmluZy0+b3BzICYmIHJpbmctPm9wcy0+cHVzaF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1 c2hfaGVhZChyaW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3Ao c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RT VVBQOworCisJaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJpbmctPm9jYyA9IGsz X3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRl diwgInJpbmdfcG9wOiBvY2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRl eCk7CisKKwlpZiAoIXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmct Pm9wcyAmJiByaW5nLT5vcHMtPnBvcF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFk KHJpbmcsIGVsZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3Jp bmdhY2NfcmluZ19wb3ApOworCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBr M19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKwor CWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmICghcmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNj X3JpbmdfZ2V0X29jYyhyaW5nKTsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5n X3BvcF90YWlsOiBvY2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7 CisKKwlpZiAoIXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9w cyAmJiByaW5nLT5vcHMtPnBvcF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF90YWlsKHJp bmcsIGVsZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3Jpbmdh Y2NfcmluZ19wb3BfdGFpbCk7CisKK3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dl dF9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpw cm9wZXJ0eSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJpbmdhY2NfbnA7CisJc3RydWN0IGsz X3JpbmdhY2MgKnJpbmdhY2MgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXN0cnVjdCBrM19y aW5nYWNjICplbnRyeTsKKworCXJpbmdhY2NfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBwcm9w ZXJ0eSwgMCk7CisJaWYgKCFyaW5nYWNjX25wKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsK KworCW11dGV4X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGVudHJ5LCAmazNfcmluZ2FjY19saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmRldi0+b2Zf bm9kZSA9PSByaW5nYWNjX25wKSB7CisJCQlyaW5nYWNjID0gZW50cnk7CisJCQlicmVhazsKKwkJ fQorCW11dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCW9mX25vZGVfcHV0KHJp bmdhY2NfbnApOworCisJcmV0dXJuIHJpbmdhY2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9r M19yaW5nYWNjX2dldF9ieV9waGFuZGxlKTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3Byb2Jl X2R0KHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSA9IHJpbmdhY2MtPmRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5n YWNjLT5kZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2Rl dmljZShkZXYpOworCWludCByZXQ7CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYsICJk ZXZpY2UgdHJlZSBpbmZvIHVuYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQor CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLG51bS1yaW5ncyIsICZyaW5n YWNjLT5udW1fcmluZ3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxudW0tcmlu Z3MgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJpbmdh Y2MtPmRtYV9yaW5nX3Jlc2V0X3F1aXJrID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2Rl LCAidGksZG1hLXJpbmctcmVzZXQtcXVpcmsiKTsKKworCXJpbmdhY2MtPnRpc2NpID0gdGlfc2Np X2dldF9ieV9waGFuZGxlKG5vZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnRp c2NpKSkgeworCQlyZXQgPSBQVFJfRVJSKHJpbmdhY2MtPnRpc2NpKTsKKwkJaWYgKHJldCAhPSAt RVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4iLCBy ZXQpOworCQlyaW5nYWNjLT50aXNjaSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZy aW5nYWNjLT50aXNjaV9kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxz Y2ktZGV2LWlkIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlw ZGV2LT5pZCA9IHJpbmdhY2MtPnRpc2NpX2Rldl9pZDsKKworCXJpbmdhY2MtPnJtX2dwX3Jhbmdl ID0gZGV2bV90aV9zY2lfZ2V0X29mX3Jlc291cmNlKHJpbmdhY2MtPnRpc2NpLCBkZXYsCisJCQkJ CQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJpbmdz Iik7CisJaWYgKElTX0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSkpIHsKKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1cm4gUFRSX0VS UihyaW5nYWNjLT5ybV9ncF9yYW5nZSk7CisJfQorCisJcmV0dXJuIHRpX3NjaV9pbnRhX21zaV9k b21haW5fYWxsb2NfaXJxcyhyaW5nYWNjLT5kZXYsCisJCQkJCQkgcmluZ2FjYy0+cm1fZ3BfcmFu Z2UpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKwl2b2lkIF9faW9t ZW0gKmJhc2VfZmlmbywgKmJhc2VfcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpOworCisJcmluZ2FjYyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOworCWlmICghcmlu Z2FjYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyaW5nYWNjLT5kZXYgPSBkZXY7CisJbXV0ZXhf aW5pdCgmcmluZ2FjYy0+cmVxX2xvY2spOworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dl dF9kb21haW4oZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9J TlRBX01TSSk7CisJaWYgKCFkZXYtPm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IE1TSSBkb21haW5cbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisK KwlyZXQgPSBrM19yaW5nYWNjX3Byb2JlX2R0KHJpbmdhY2MpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVT T1VSQ0VfTUVNLCAicnQiKTsKKwliYXNlX3J0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKGJhc2VfcnQpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX3J0KTsK KworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9N RU0sICJmaWZvcyIpOworCWJhc2VfZmlmbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7CisJaWYgKElTX0VSUihiYXNlX2ZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX2ZpZm8p OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwgInByb3h5X2djZmciKTsKKwlyaW5nYWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQor CQlyZXR1cm4gUFRSX0VSUihyaW5nYWNjLT5wcm94eV9nY2ZnKTsKKworCXJlcyA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJwcm94 eV90YXJnZXQiKTsKKwlyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSA9IGRldm1faW9yZW1hcF9y ZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFz ZSkpCisJCXJldHVybiBQVFJfRVJSKHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlKTsKKworCXJp bmdhY2MtPm51bV9wcm94aWVzID0gcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPmNvbmZpZykg JgorCQkJCSAgICAgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhSRUFEU19NQVNLOworCisJcmluZ2Fj Yy0+cmluZ3MgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJCSAgICAgIHNpemVvZigqcmluZ2FjYy0+ cmluZ3MpICoKKwkJCQkgICAgICByaW5nYWNjLT5udW1fcmluZ3MsCisJCQkJICAgICAgR0ZQX0tF Uk5FTCk7CisJcmluZ2FjYy0+cmluZ3NfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkg ICAgQklUU19UT19MT05HUyhyaW5nYWNjLT5udW1fcmluZ3MpLAorCQkJCQkgICAgc2l6ZW9mKHVu c2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwlyaW5nYWNjLT5wcm94eV9pbnVzZSA9IGRldm1f a2NhbGxvYyhkZXYsCisJCQkJCSAgICBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9wcm94aWVz KSwKKwkJCQkJICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAo IXJpbmdhY2MtPnJpbmdzIHx8ICFyaW5nYWNjLT5yaW5nc19pbnVzZSB8fCAhcmluZ2FjYy0+cHJv eHlfaW51c2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJpbmdhY2Mt Pm51bV9yaW5nczsgaSsrKSB7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnJ0ID0gYmFzZV9ydCArCisJ CQkJICAgICAgIEszX1JJTkdBQ0NfUlRfUkVHU19TVEVQICogaTsKKwkJcmluZ2FjYy0+cmluZ3Nb aV0uZmlmb3MgPSBiYXNlX2ZpZm8gKworCQkJCQkgIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAg KiBpOworCQlyaW5nYWNjLT5yaW5nc1tpXS5wYXJlbnQgPSByaW5nYWNjOworCQlyaW5nYWNjLT5y aW5nc1tpXS5yaW5nX2lkID0gaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlfaWQgPSBLM19S SU5HQUNDX1BST1hZX05PVF9VU0VEOworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCByaW5nYWNj KTsKKworCXJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1f cmluZ19vcHM7CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9h ZGRfdGFpbCgmcmluZ2FjYy0+bGlzdCwgJmszX3JpbmdhY2NfbGlzdCk7CisJbXV0ZXhfdW5sb2Nr KCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisKKwlkZXZfaW5mbyhkZXYsICJSaW5nIEFjY2VsZXJh dG9yIHByb2JlZCByaW5nczoldSwgZ3AtcmluZ3NbJXUsJXVdIHNjaS1kZXYtaWQ6JXVcbiIsCisJ CSByaW5nYWNjLT5udW1fcmluZ3MsCisJCSByaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5z dGFydCwKKwkJIHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLm51bSwKKwkJIHJpbmdhY2Mt PnRpc2NpX2Rldl9pZCk7CisJZGV2X2luZm8oZGV2LCAiZG1hLXJpbmctcmVzZXQtcXVpcms6ICVz XG4iLAorCQkgcmluZ2FjYy0+ZG1hX3JpbmdfcmVzZXRfcXVpcmsgPyAiZW5hYmxlZCIgOiAiZGlz YWJsZWQiKTsKKwlkZXZfaW5mbyhkZXYsICJSQSBQcm94eSByZXYuICUwOHgsIG51bV9wcm94aWVz OiV1XG4iLAorCQkgcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwgcmluZ2Fj Yy0+bnVtX3Byb3hpZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2Nf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGszX3Jpbmdh Y2MgKnJpbmdhY2MgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwltdXRleF9sb2Nr KCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJnJpbmdhY2MtPmxpc3QpOworCW11 dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCXJldHVybiAwOworfQorCisvKiBN YXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgazNfcmluZ2FjY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUg PSAidGksYW02NTQtbmF2c3MtcmluZ2FjYyIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgazNfcmluZ2FjY19vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGszX3JpbmdhY2NfZHJpdmVyID0geworCS5wcm9iZQkJPSBrM19yaW5nYWNjX3Byb2Jl LAorCS5yZW1vdmUJCT0gazNfcmluZ2FjY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1l CT0gImszLXJpbmdhY2MiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBrM19yaW5nYWNjX29mX21hdGNo LAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrM19yaW5nYWNjX2RyaXZlcik7CisK K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgUmluZ2Fj YyBkcml2ZXIgZm9yIEszIFNPQ3MiKTsKK01PRFVMRV9BVVRIT1IoIkdyeWdvcmlpIFN0cmFzaGtv IDxncnlnb3JpaS5zdHJhc2hrb0B0aS5jb20+Iik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L3NvYy90aS9rMy1yaW5nYWNjLmggYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNmY3M2RmMGE1MjQKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKQEAgLTAs MCArMSwyNDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgor ICogSzMgUmluZyBBY2NlbGVyYXRvciAoUkEpIHN1YnN5c3RlbSBpbnRlcmZhY2UKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDov L3d3dy50aS5jb20KKyAqLworCisjaWZuZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCisj ZGVmaW5lIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBl cy5oPgorCitzdHJ1Y3QgZGV2aWNlX25vZGU7CisKKy8qKgorICogZW51bSBrM19yaW5nX21vZGUg LSAmc3RydWN0IGszX3JpbmdfY2ZnIG1vZGUKKyAqCisgKiBSQSByaW5nIG9wZXJhdGlvbmFsIG1v ZGVzCisgKgorICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkc6IEV4cG9zZWQgUmluZyBtb2Rl IGZvciBTVyBkaXJlY3QgYWNjZXNzCisgKiBASzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTog TWVzc2FnaW5nIG1vZGUuIE1lc3NhZ2luZyBtb2RlIHJlcXVpcmVzCisgKgl0aGF0IGFsbCBhY2Nl c3NlcyB0byB0aGUgcXVldWUgbXVzdCBnbyB0aHJvdWdoIHRoaXMgSVAgc28gdGhhdCBhbGwKKyAq CWFjY2Vzc2VzIHRvIHRoZSBtZW1vcnkgYXJlIGNvbnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMg SVAgdGhlbgorICoJY29udHJvbHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcXVldWUsIGFuZCBT VyBoYXMgbm8gZGlyZWN0bHkgY29udHJvbCwKKyAqCXN1Y2ggYXMgdGhyb3VnaCBkb29yYmVsbHMg YW5kIGNhbm5vdCBhY2Nlc3MgdGhlIHN0b3JhZ2UgbWVtb3J5IGRpcmVjdGx5LgorICoJVGhpcyBp cyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gbW9yZSB0aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkg Y2FuIGJlCisgKgl0aGUgcHJvZHVjZXIgYW5kL29yIGNvbnN1bWVyIGF0IHRoZSBzYW1lIHRpbWUK KyAqIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5USUFMUzogQ3JlZGVudGlhbHMgbW9kZSBp cyBtZXNzYWdlIG1vZGUgcGx1cworICoJc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNz YWdlLCByZXF1aXJpbmcgdGhlIGVsZW1lbnQgc2l6ZSB0byBiZQorICoJZG91YmxlZCB0byBmaXQg dGhlIGNyZWRlbnRpYWxzLiBBbnkgZXhwb3NlZCBtZW1vcnkgc2hvdWxkIGJlIHByb3RlY3RlZAor ICoJYnkgYSBmaXJld2FsbCBmcm9tIHVud2FudGVkIGFjY2VzcworICovCitlbnVtIGszX3Jpbmdf bW9kZSB7CisJSzNfUklOR0FDQ19SSU5HX01PREVfUklORyA9IDAsCisJSzNfUklOR0FDQ19SSU5H X01PREVfTUVTU0FHRSwKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9DUkVERU5USUFMUywKKwlLM19S SU5HQUNDX1JJTkdfTU9ERV9JTlZBTElECit9OworCisvKioKKyAqIGVudW0gazNfcmluZ19zaXpl IC0gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZQorICoKKyAqIFJBIHJpbmcgZWxlbWVudCdz IHNpemVzIGluIGJ5dGVzLgorICovCitlbnVtIGszX3Jpbmdfc2l6ZSB7CisJSzNfUklOR0FDQ19S SU5HX0VMU0laRV80ID0gMCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzgsCisJSzNfUklOR0FD Q19SSU5HX0VMU0laRV8xNiwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzMyLAorCUszX1JJTkdB Q0NfUklOR19FTFNJWkVfNjQsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV8xMjgsCisJSzNfUklO R0FDQ19SSU5HX0VMU0laRV8yNTYsCisJSzNfUklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECit9 OworCitzdHJ1Y3QgazNfcmluZ2FjYzsKK3N0cnVjdCBrM19yaW5nOworCisvKioKKyAqIGVudW0g azNfcmluZ19jZmcgLSBSQSByaW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICogQHNp emU6IFJpbmcgc2l6ZSwgbnVtYmVyIG9mIGVsZW1lbnRzCisgKiBAZWxtX3NpemU6IFJpbmcgZWxl bWVudCBzaXplCisgKiBAbW9kZTogUmluZyBvcGVyYXRpb25hbCBtb2RlCisgKiBAZmxhZ3M6IFJp bmcgY29uZmlndXJhdGlvbiBmbGFncy4gUG9zc2libGUgdmFsdWVzOgorICoJIEBLM19SSU5HQUND X1JJTkdfU0hBUkVEOiB3aGVuIHNldCBhbGxvd3MgdG8gcmVxdWVzdCB0aGUgc2FtZSByaW5nCisg KgkgZmV3IHRpbWVzLiBJdCdzIHVzYWJsZSB3aGVuIHRoZSBzYW1lIHJpbmcgaXMgdXNlZCBhcyBG cmVlIEhvc3QgUEQgcmluZworICoJIGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxlLgor ICoJIE5vdGU6IExvY2tpbmcgc2hvdWxkIGJlIGRvbmUgYnkgY29uc3VtZXIgaWYgcmVxdWlyZWQK KyAqLworc3RydWN0IGszX3JpbmdfY2ZnIHsKKwl1MzIgc2l6ZTsKKwllbnVtIGszX3Jpbmdfc2l6 ZSBlbG1fc2l6ZTsKKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOworI2RlZmluZSBLM19SSU5HQUND X1JJTkdfU0hBUkVEIEJJVCgxKQorCXUzMiBmbGFnczsKK307CisKKyNkZWZpbmUgSzNfUklOR0FD Q19SSU5HX0lEX0FOWSAoLTEpCisKKy8qKgorICogb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRs ZSAtIGZpbmQgYSBSQSBieSBwaGFuZGxlIHByb3BlcnR5CisgKiBAbnA6IGRldmljZSBub2RlCisg KiBAcHJvcG5hbWU6IHByb3BlcnR5IG5hbWUgY29udGFpbmluZyBwaGFuZGxlIG9uIFJBIG5vZGUK KyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgb24gdGhlIFJBIC0gc3RydWN0IGszX3JpbmdhY2MKKyAq IG9yIC1FTk9ERVYgaWYgbm90IGZvdW5kLAorICogb3IgLUVQUk9CRV9ERUZFUiBpZiBub3QgeWV0 IHJlZ2lzdGVyZWQKKyAqLworc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5 X3BoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJCWNvbnN0IGNoYXIgKnByb3Bl cnR5KTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZIEJJVCgxKQorCisvKioK KyAqIGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nIC0gcmVxdWVzdCByaW5nIGZyb20gcmluZ2FjYwor ICogQHJpbmdhY2M6IHBvaW50ZXIgb24gcmluZ2FjYworICogQGlkOiByaW5nIGlkIG9yIEszX1JJ TkdBQ0NfUklOR19JRF9BTlkgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZworICogQGZsYWdz OgorICoJQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFk6IGlmIHNldCAtIHByb3h5IHdpbGwgYmUg YWxsb2NhdGVkIGFuZAorICoJCXVzZWQgdG8gYWNjZXNzIHJpbmcgbWVtb3J5LiBTb3Bwb3J0ZWQg b25seSBmb3IgcmluZ3MgaW4KKyAqCQlNZXNzYWdlL0NyZWRlbnRpYWxzL1F1ZXVlIG1vZGUuCisg KgorICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSaW5nIC0gc3RydWN0IGszX3JpbmcKKyAqIG9y IE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2Fj Y19yZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwg dTMyIGZsYWdzKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0 CisgKiBAcmluZzogcG9pbnRlciBvbiBSaW5nCisgKgorICogUmVzZXRzIHJpbmcgaW50ZXJuYWwg c3RhdGUgKChodylvY2MsIChodylpZHgpLgorICovCit2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNl dChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19yZXNldCAt IHJpbmcgcmVzZXQgZm9yIERNQSByaW5ncworICogQHJpbmc6IHBvaW50ZXIgb24gUmluZworICoK KyAqIFJlc2V0cyByaW5nIGludGVybmFsIHN0YXRlICgoaHcpb2NjLCAoaHcpaWR4KS4gU2hvdWxk IGJlIHVzZWQgZm9yIHJpbmdzCisgKiB3aGljaCBhcmUgcmVhZCBieSBLMyBVRE1BLCBsaWtlIFRY IG9yIEZyZWUgSG9zdCBQRCByaW5ncy4KKyAqLwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXRf ZG1hKHN0cnVjdCBrM19yaW5nICpyaW5nLCB1MzIgb2NjKTsKKworLyoqCisgKiBrM19yaW5nYWNj X3JpbmdfZnJlZSAtIHJpbmcgZnJlZQorICogQHJpbmc6IHBvaW50ZXIgb24gUmluZworICoKKyAq IFJlc2V0cyByaW5nIGFuZCBmcmVlIGFsbCBhbG9jYXRlZCByZXNvdXJjZXMuCisgKi8KK2ludCBr M19yaW5nYWNjX3JpbmdfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNf cmluZ2FjY19nZXRfcmluZ19pZCAtIEdldCB0aGUgUmluZyBJRAorICogQHJpbmc6IHBvaW50ZXIg b24gcmluZworICoKKyAqIFJldHVybnMgdGhlIFJpbmcgSUQKKyAqLwordTMyIGszX3JpbmdhY2Nf Z2V0X3JpbmdfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2Nf Z2V0X3JpbmdfaXJxX251bSAtIEdldCB0aGUgaXJxIG51bWJlciBmb3IgdGhlIHJpbmcKKyAqIEBy aW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgbnVtYmVy IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlIGludGVycnVwdAorICovCitpbnQgazNf cmluZ2FjY19nZXRfcmluZ19pcnFfbnVtKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisg KiBrM19yaW5nYWNjX3JpbmdfY2ZnIC0gcmluZyBjb25maWd1cmUKKyAqIEByaW5nOiBwb2ludGVy IG9uIHJpbmcKKyAqIEBjZmc6IFJpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChzZWUgJnN0 cnVjdCBrM19yaW5nX2NmZykKKyAqCisgKiBDb25maWd1cmVzIHJpbmcsIGluY2x1ZGluZyByaW5n IG1lbW9yeSBhbGxvY2F0aW9uLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVy d2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19jZmcoc3RydWN0IGszX3JpbmcgKnJpbmcs IHN0cnVjdCBrM19yaW5nX2NmZyAqY2ZnKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfZ2V0 X3NpemUgLSBnZXQgcmluZyBzaXplCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKgorICog UmV0dXJucyByaW5nIHNpemUgaW4gbnVtYmVyIG9mIGVsZW1lbnRzLgorICovCit1MzIgazNfcmlu Z2FjY19yaW5nX2dldF9zaXplKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoqCisgKiBrM19y aW5nYWNjX3JpbmdfZ2V0X2ZyZWUgLSBnZXQgZnJlZSBlbGVtZW50cworICogQHJpbmc6IHBvaW50 ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGZyZWUgZWxlbWVudHMgaW4gdGhl IHJpbmcuCisgKi8KK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3Jpbmcg KnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19nZXRfb2NjIC0gZ2V0IHJpbmcgb2Nj dXBhbmN5CisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0b3RhbCBu dW1iZXIgb2YgdmFsaWQgZW50cmllcyBvbiB0aGUgcmluZworICovCit1MzIgazNfcmluZ2FjY19y aW5nX2dldF9vY2Moc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioKKyAqIGszX3JpbmdhY2Nf cmluZ19pc19mdWxsIC0gY2hlY2tzIGlmIHJpbmcgaXMgZnVsbAorICogQHJpbmc6IHBvaW50ZXIg b24gcmluZworICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmluZyBpcyBmdWxsCisgKi8KK3Uz MiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgor ICogazNfcmluZ2FjY19yaW5nX3B1c2ggLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgdGFpbAor ICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVt ZW50IGJ1ZmZlcgorICoKKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyB0YWls LiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25m aWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAw IG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19w dXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworLyoqCisgKiBrM19yaW5n YWNjX3JpbmdfcG9wIC0gcG9wIGVsZW1lbnQgZnJvbSB0aGUgcmluZyBoZWFkCisgKiBAcmluZzog cG9pbnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVy CisgKgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZC4gU2l6ZSBv ZiB0aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlv biAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3Vj Y2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICovCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcChzdHJ1 Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5n X3B1c2hfaGVhZCAtIHB1c2ggZWxlbWVudCB0byB0aGUgcmluZyBoZWFkCisgKiBAcmluZzogcG9p bnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCisg KgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IHRvIHRoZSByaW5nIGhlYWQuIFNpemUgb2YgdGhl IHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24gJnN0 cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywg ZXJybm8gb3RoZXJ3aXNlLgorICogTm90IFN1cHBvcnRlZCBieSByaW5nIG1vZGVzOiBLM19SSU5H QUNDX1JJTkdfTU9ERV9SSU5HCisgKi8KK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkKHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworLyoqCisgKiBrM19yaW5nYWNjX3Jp bmdfcG9wX3RhaWwgLSBwb3AgZWxlbWVudCBmcm9tIHRoZSByaW5nIHRhaWwKKyAqIEByaW5nOiBw b2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVudCBidWZmZXIK KyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgZnJvbSB0aGUgcmluZyB0YWlsLiBTaXplIG9m IHRoZSByaW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0aW9u ICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nl c3MsIGVycm5vIG90aGVyd2lzZS4KKyAqIE5vdCBTdXBwb3J0ZWQgYnkgcmluZyBtb2RlczogSzNf UklOR0FDQ19SSU5HX01PREVfUklORworICovCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWls KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0 X3Rpc2NpX2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKyNlbmRpZiAvKiBfX1NPQ19U SV9LM19SSU5HQUNDX0FQSV9IXyAqLwotLSAKUGV0ZXIKClRleGFzIEluc3RydW1lbnRzIEZpbmxh bmQgT3ksIFBvcmtrYWxhbmthdHUgMjIsIDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9CdXNpbmVz cyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK