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=-12.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,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 23259C433DF for ; Mon, 12 Oct 2020 10:47:56 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 A53EC208FE for ; Mon, 12 Oct 2020 10:47:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="LBBNckCX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A53EC208FE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 384D9869F8; Mon, 12 Oct 2020 10:47:55 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3N5TC5x487ZY; Mon, 12 Oct 2020 10:47:46 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id 97D1386A0F; Mon, 12 Oct 2020 10:47:42 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id A72C71BF5B5 for ; Mon, 12 Oct 2020 10:47:40 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id A361D8727F for ; Mon, 12 Oct 2020 10:47:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IDXyM07zTK9j for ; Mon, 12 Oct 2020 10:47:39 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2084.outbound.protection.outlook.com [40.107.223.84]) by hemlock.osuosl.org (Postfix) with ESMTPS id 062BD872A0 for ; Mon, 12 Oct 2020 10:47:39 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lel2CxGUiLf3uK309hnLPAY7bO/hMJb7sTXOX5PERd4ZVG9ryl2T8ocuwWx6ZYxITIHAl0bshZv7EtXT7ElorKNkHwlHtiUDLI1SQlG5F4/nmck9eKQiaW//4M973DsppotI8yj4rbLt164i9oxFPCjXf+1tr99LSd8RWE1ISoyu3N2k9DvkLEl1KZyFpVWNgNR+4AcsIP1oBHbszu6x0rZEszPRU8zNTqAwwqCJzHSgNfY+dJFJr1EoYH4lRE7CaKlKY4OQN/l52TfW2XdlhHDQGTTOJ8/+YseOFOLPQkfRb+qXDdsTgeYI8iCgBRTQ8/au0m9EqhdOVRWHjAZCgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UV1cd3GVoNuKb/VlBvRHt182U+LsCRPQf+EQHVQ8TM0=; b=jjv5rpWQTAuo9Auft5KM/WtDgL0GoMG95/3f8WhxuW7Z21/WNYoTsegASmyzDA2OFbiIdSu6Q4qEDD22O593LyzwrDfkhQbpcEirl2G5nmSq6TsiN4vCjDEA+418VtOCqiQblK8EQIB/GWgSni84seUwv6sxadGlMgWxh+bPjdFRuscXoJwYlywuswSJ+KJA7bGOHa/Q9iQ4yObh1BvaMcKogGCkoNiTfR8nZbu3u0tI2JlvENQ/xWTED4ZaQyPRpAQ/8uUyrm8X0ES5EmD3sVOZM6vO1Gm8RB8V9iiijWB4zQWZS97gkI8oW2OmVNKMlBxnZuvMBG5G+67nQXAKGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UV1cd3GVoNuKb/VlBvRHt182U+LsCRPQf+EQHVQ8TM0=; b=LBBNckCXQp/8LazQdDQaiwIqt/mzS6C8mWuo2isl0eLvaDY/wYy/R3nzKBDGLdJdojKf21d7AVzhIWptGlYZFq0YlTmUU71MRtEtMclBEYGrY4Y8P9JZz1VzzJWTMWYUxeONJkwfxOs6H+nihHkOCMldBjT8JOrekmz4dZHTUVg= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SA0PR11MB4734.namprd11.prod.outlook.com (2603:10b6:806:99::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.23; Mon, 12 Oct 2020 10:47:37 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a%5]) with mapi id 15.20.3455.029; Mon, 12 Oct 2020 10:47:37 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH 17/23] wfx: add data_tx.c/data_tx.h Date: Mon, 12 Oct 2020 12:46:42 +0200 Message-Id: <20201012104648.985256-18-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> References: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (82.67.86.106) by PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.21 via Frontend Transport; Mon, 12 Oct 2020 10:47:36 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 69d143d8-d7a2-4743-e592-08d86e9c3c15 X-MS-TrafficTypeDiagnostic: SA0PR11MB4734: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UZzF0YEgmlyqvG/pCrln/4q7jEbIf+16rbVhPbEAJ3dFYI95uyiYe/Ljl8wWMOmoUhlrqSv7SGBj2aze64HXX4Xt75N6MwWT5m8KgoLytCO4s15Glnm//h9IaaqlRe/5lJJqpwFXOAN70jiQl4yuQlCMF7N7pwpx4Nbx8InL96vpHgtcpW5hwdowmMM3KepT6KPaW6GPgk5LBgaaFQg1y4evabnuI2yK1noPUP3zagvz9sKLqjnJTFwgDxkBqNEf37uTrx/c4qZr7lIOi11Xp914+/s87crEJJzgaL9mvzZCsgzNIHQ7BDEbUwm7jqbP5O9iXw0+zG3rIAbUN30iEg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB2718.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(39850400004)(396003)(366004)(136003)(346002)(376002)(66556008)(66476007)(6512007)(26005)(36756003)(66946007)(16526019)(186003)(316002)(4326008)(2616005)(956004)(1076003)(30864003)(5660300002)(107886003)(6486002)(54906003)(86362001)(8676002)(83380400001)(8936002)(66574015)(52116002)(2906002)(6506007)(8886007)(6666004)(478600001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: uXtcRPdr+nTMPRYhWAStGF9fhStBZnmNTtJdXxNFvAh4fUylaheiqstM4Yw8LhMm/aQy1LLd4bMt8kDW+VnniA+pRCSHrr2ikoAdwKg53QczGXfW+TiKE0TvHW+q8BNrABNncAV+/Z7QAvkhy3SL5C4v6PIUUnhq6NhCNcSdxNdC8tu8JSqfgRAwG1o+L/5UsZYNmm7AC3xhZ7ues3H9PmfDUoJA5IJjeCwOQTdygtd9O92emAln/q9ZL008F5cB4m2BIRSvb4BMoQImhboGrOE2sYDfotwb0B6441fxHCYdGIPPj1KVrftdR1qJn50tM1PWLkHd+S/FLcp91GkLYr8pMFb2DzRVofv7fyOSWkQE2/RtkWiE6Byrb05dKb9DAZDdfQ8uMyHkw8m9tkLizqHigRogUwJVaeN9iSyduvIVs2vIj6iBla1xoCDlmlOi5YDZJ9SH1wTpsbceuX6aAAT52AhGkzzYJgzlo3ry/Ll1c1HB6XGrSkbKF5V2dKezaVj4MgfIegDEXhiJBM/8G7iap0u5pyPSi/mfAMzMjN+3JA5F1dY/KxaT3OmrNOFMYR+UzmlOmPyV9NJPxkN8wY3iZ/X9KM8ZYcgMV4qqBXElpycO/XP4HyXhqhuyunRKu7LEfHbSITc5zV9YeGHOtA== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69d143d8-d7a2-4743-e592-08d86e9c3c15 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2020 10:47:37.7725 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Io1/SIq5XZVpgc8GRok8UuiL2GsTNqCFS0dvRTWm8b3NCeBc/lzTDhpLohCYah+DzVt6zQHqoJUvS2l2fuzGjg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4734 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Rob Herring , "David S . Miller" , Kalle Valo Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jIHwgNTg1ICsr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0 YV90eC5oIHwgIDY3ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA2NTIgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRh X3R4LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFf dHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTI1NGExZWE3YmJkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmMKQEAgLTAs MCArMSw1ODUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBEYXRhcGF0aCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxp bnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkYXRhX3R4LmgiCisjaW5jbHVkZSAid2Z4 LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJzdGEuaCIKKyNpbmNsdWRlICJxdWV1ZS5o IgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhY2VzLmgiCisjaW5jbHVkZSAiaGlm X3R4X21pYi5oIgorCitzdGF0aWMgaW50IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKK3sKKwlz dHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOworCisJaWYgKHJhdGUtPmlkeCA8 IDApCisJCXJldHVybiAtMTsKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNT KSB7CisJCWlmIChyYXRlLT5pZHggPiA3KSB7CisJCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHgg dmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gcmF0 ZS0+aWR4ICsgMTQ7CisJfQorCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9iaXRyYXRlcykgewor CQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJcmV0 dXJuIC0xOworCX0KKwkvLyBXRnggb25seSBzdXBwb3J0IDJHSHosIGVsc2UgYmFuZCBpbmZvcm1h dGlvbiBzaG91bGQgYmUgcmV0cmlldmVkCisJLy8gZnJvbSBpZWVlODAyMTFfdHhfaW5mbworCWJh bmQgPSB3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXTsKKwlyZXR1cm4g YmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4XS5od192YWx1ZTsKK30KKworLyogVFggcG9saWN5IGNh Y2hlIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfYnVpbGQo c3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwKKwkJCQlzdHJ1 Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g d3ZpZi0+d2RldjsKKwlpbnQgaSwgcmF0ZWlkOworCXU4IGNvdW50OworCisJV0FSTihyYXRlc1sw XS5pZHggPCAwLCAiaW52YWxpZCByYXRlIHBvbGljeSIpOworCW1lbXNldChwb2xpY3ksIDAsIHNp emVvZigqcG9saWN5KSk7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7 ICsraSkgeworCQlpZiAocmF0ZXNbaV0uaWR4IDwgMCkKKwkJCWJyZWFrOworCQlXQVJOX09OKHJh dGVzW2ldLmNvdW50ID4gMTUpOworCQlyYXRlaWQgPSB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgJnJh dGVzW2ldKTsKKwkJLy8gUGFjayB0d28gdmFsdWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xpY3ktPnJh dGVzCisJCWNvdW50ID0gcmF0ZXNbaV0uY291bnQ7CisJCWlmIChyYXRlaWQgJSAyKQorCQkJY291 bnQgPDw9IDQ7CisJCXBvbGljeS0+cmF0ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7CisJfQorfQor CitzdGF0aWMgYm9vbCB0eF9wb2xpY3lfaXNfZXF1YWwoY29uc3Qgc3RydWN0IHR4X3BvbGljeSAq YSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICpiKQoreworCXJldHVybiAhbWVt Y21wKGEtPnJhdGVzLCBiLT5yYXRlcywgc2l6ZW9mKGEtPnJhdGVzKSk7Cit9CisKK3N0YXRpYyBp bnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAorCQkJ ICAgICAgc3RydWN0IHR4X3BvbGljeSAqd2FudGVkKQoreworCXN0cnVjdCB0eF9wb2xpY3kgKml0 OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJmNhY2hlLT51c2VkLCBsaW5rKQorCQlpZiAo dHhfcG9saWN5X2lzX2VxdWFsKHdhbnRlZCwgaXQpKQorCQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNh Y2hlOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZjYWNoZS0+ZnJlZSwgbGluaykKKwkJaWYg KHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkKKwkJCXJldHVybiBpdCAtIGNhY2hlLT5j YWNoZTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfdXNlKHN0 cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAorCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAq ZW50cnkpCit7CisJKytlbnRyeS0+dXNhZ2VfY291bnQ7CisJbGlzdF9tb3ZlKCZlbnRyeS0+bGlu aywgJmNhY2hlLT51c2VkKTsKK30KKworc3RhdGljIGludCB3ZnhfdHhfcG9saWN5X3JlbGVhc2Uo c3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsCisJCQkJIHN0cnVjdCB0eF9wb2xpY3kgKmVu dHJ5KQoreworCWludCByZXQgPSAtLWVudHJ5LT51c2FnZV9jb3VudDsKKworCWlmICghcmV0KQor CQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPmZyZWUpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9nZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJ CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMsIGJvb2wgKnJlbmV3KQorewor CWludCBpZHg7CisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUgPSAmd3ZpZi0+dHhfcG9s aWN5X2NhY2hlOworCXN0cnVjdCB0eF9wb2xpY3kgd2FudGVkOworCisJd2Z4X3R4X3BvbGljeV9i dWlsZCh3dmlmLCAmd2FudGVkLCByYXRlcyk7CisKKwlzcGluX2xvY2tfYmgoJmNhY2hlLT5sb2Nr KTsKKwlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpKSB7CisJCVdBUk4oMSwgInVuYWJsZSB0 byBnZXQgYSB2YWxpZCBUeCBwb2xpY3kiKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2Nr KTsKKwkJcmV0dXJuIEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRDsKKwl9CisJaWR4ID0gd2Z4 X3R4X3BvbGljeV9maW5kKGNhY2hlLCAmd2FudGVkKTsKKwlpZiAoaWR4ID49IDApIHsKKwkJKnJl bmV3ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJc3RydWN0IHR4X3BvbGljeSAqZW50cnk7CisJCSpy ZW5ldyA9IHRydWU7CisJCS8qIElmIHBvbGljeSBpcyBub3QgZm91bmQgY3JlYXRlIGEgbmV3IG9u ZQorCQkgKiB1c2luZyB0aGUgb2xkZXN0IGVudHJ5IGluICJmcmVlIiBsaXN0CisJCSAqLworCQll bnRyeSA9IGxpc3RfZW50cnkoY2FjaGUtPmZyZWUucHJldiwgc3RydWN0IHR4X3BvbGljeSwgbGlu ayk7CisJCW1lbWNweShlbnRyeS0+cmF0ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9mKGVudHJ5LT5y YXRlcykpOworCQllbnRyeS0+dXBsb2FkZWQgPSBmYWxzZTsKKwkJZW50cnktPnVzYWdlX2NvdW50 ID0gMDsKKwkJaWR4ID0gZW50cnkgLSBjYWNoZS0+Y2FjaGU7CisJfQorCXdmeF90eF9wb2xpY3lf dXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0pOworCWlmIChsaXN0X2VtcHR5KCZjYWNoZS0+ ZnJlZSkpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3dmlmLT53ZGV2LT5odyk7CisJc3Bpbl91 bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgdm9pZCB3 ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCkKK3sKKwlpbnQg dXNhZ2UsIGxvY2tlZDsKKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpjYWNoZSA9ICZ3dmlmLT50 eF9wb2xpY3lfY2FjaGU7CisKKwlpZiAoaWR4ID09IEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJ RCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19iaCgmY2FjaGUtPmxvY2spOworCWxvY2tlZCA9IGxp c3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsKKwl1c2FnZSA9IHdmeF90eF9wb2xpY3lfcmVsZWFzZShj YWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhdKTsKKwlpZiAobG9ja2VkICYmICF1c2FnZSkKKwkJaWVl ZTgwMjExX3dha2VfcXVldWVzKHd2aWYtPndkZXYtPmh3KTsKKwlzcGluX3VubG9ja19iaCgmY2Fj aGUtPmxvY2spOworfQorCitzdGF0aWMgaW50IHdmeF90eF9wb2xpY3lfdXBsb2FkKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3kgKnBvbGljaWVzID0gd3ZpZi0+dHhf cG9saWN5X2NhY2hlLmNhY2hlOworCXU4IHRtcF9yYXRlc1sxMl07CisJaW50IGksIGlzX3VzZWQ7 CisKKwlkbyB7CisJCXNwaW5fbG9ja19iaCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmxvY2spOwor CQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUp OyArK2kpIHsKKwkJCWlzX3VzZWQgPSBtZW16Y21wKHBvbGljaWVzW2ldLnJhdGVzLAorCQkJCQkg IHNpemVvZihwb2xpY2llc1tpXS5yYXRlcykpOworCQkJaWYgKCFwb2xpY2llc1tpXS51cGxvYWRl ZCAmJiBpc191c2VkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpIDwgQVJSQVlfU0laRSh3dmlm LT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKSB7CisJCQlwb2xpY2llc1tpXS51cGxvYWRlZCA9IHRy dWU7CisJCQltZW1jcHkodG1wX3JhdGVzLCBwb2xpY2llc1tpXS5yYXRlcywgc2l6ZW9mKHRtcF9y YXRlcykpOworCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnR4X3BvbGljeV9jYWNoZS5sb2NrKTsK KwkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kod3ZpZiwgaSwgdG1wX3JhdGVzKTsKKwkJ fSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT50eF9wb2xpY3lfY2FjaGUubG9jayk7 CisJCX0KKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2Fj aGUpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9CisJCWNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9hZF93b3JrKTsK KworCXdmeF90eF9wb2xpY3lfdXBsb2FkKHd2aWYpOworCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rl dik7Cit9CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQor eworCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNo ZTsKKwlpbnQgaTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOworCisJc3Bp bl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPnVzZWQp OworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+ZnJlZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjYWNoZS0+Y2FjaGUpOyArK2kpCisJCWxpc3RfYWRkKCZjYWNoZS0+Y2FjaGVbaV0u bGluaywgJmNhY2hlLT5mcmVlKTsKK30KKworLyogVHggaW1wbGVtZW50YXRpb24gKi8KKworc3Rh dGljIGJvb2wgaWVlZTgwMjExX2lzX2FjdGlvbl9iYWNrKHN0cnVjdCBpZWVlODAyMTFfaGRyICpo ZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFf bWdtdCAqKWhkcjsKKworCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250 cm9sKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAhPSBX TEFOX0NBVEVHT1JZX0JBQ0spCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIHU4IHdmeF90eF9nZXRfbGlua19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikK K3sKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9CisJCXN0YSA/IChzdHJ1Y3Qgd2Z4 X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXYgOiBOVUxMOworCWNvbnN0IHU4ICpkYSA9IGllZWU4 MDIxMV9nZXRfREEoaGRyKTsKKworCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+bGlua19pZCkK KwkJcmV0dXJuIHN0YV9wcml2LT5saW5rX2lkOworCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4 MDIxMV9JRlRZUEVfQVApCisJCXJldHVybiAwOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRk cihkYSkpCisJCXJldHVybiAwOworCXJldHVybiBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRFRDsK K30KKworc3RhdGljIHZvaWQgd2Z4X3R4X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfdHhf cmF0ZSAqcmF0ZXMpCit7CisJaW50IGk7CisJYm9vbCBmaW5pc2hlZDsKKworCS8vIEZpcm13YXJl IGlzIG5vdCBhYmxlIHRvIG1peCByYXRlcyB3aXRoIGRpZmZlcmVudCBmbGFncworCWZvciAoaSA9 IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKKwkJaWYgKHJhdGVzWzBdLmZs YWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQkJcmF0ZXNbaV0uZmxhZ3MgfD0gSUVF RTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIx MV9UWF9SQ19TSE9SVF9HSSkpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JD X1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0Vf UlRTX0NUUykpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1VTRV9SVFNf Q1RTOworCX0KKworCS8vIFNvcnQgcmF0ZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCisJZG8gewor CQlmaW5pc2hlZCA9IHRydWU7CisJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JB VEVTIC0gMTsgaSsrKSB7CisJCQlpZiAocmF0ZXNbaSArIDFdLmlkeCA9PSByYXRlc1tpXS5pZHgg JiYKKwkJCSAgICByYXRlc1tpXS5pZHggIT0gLTEpIHsKKwkJCQlyYXRlc1tpXS5jb3VudCArPSBy YXRlc1tpICsgMV0uY291bnQ7CisJCQkJaWYgKHJhdGVzW2ldLmNvdW50ID4gMTUpCisJCQkJCXJh dGVzW2ldLmNvdW50ID0gMTU7CisJCQkJcmF0ZXNbaSArIDFdLmlkeCA9IC0xOworCQkJCXJhdGVz W2kgKyAxXS5jb3VudCA9IDA7CisKKwkJCQlmaW5pc2hlZCA9IGZhbHNlOworCQkJfQorCQkJaWYg KHJhdGVzW2kgKyAxXS5pZHggPiByYXRlc1tpXS5pZHgpIHsKKwkJCQlzd2FwKHJhdGVzW2kgKyAx XSwgcmF0ZXNbaV0pOworCQkJCWZpbmlzaGVkID0gZmFsc2U7CisJCQl9CisJCX0KKwl9IHdoaWxl ICghZmluaXNoZWQpOworCS8vIEVuc3VyZSB0aGF0IE1DUzAgb3IgMU1icHMgaXMgcHJlc2VudCBh dCB0aGUgZW5kIG9mIHRoZSByZXRyeSBsaXN0CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9U WF9NQVhfUkFURVM7IGkrKykgeworCQlpZiAocmF0ZXNbaV0uaWR4ID09IDApCisJCQlicmVhazsK KwkJaWYgKHJhdGVzW2ldLmlkeCA9PSAtMSkgeworCQkJcmF0ZXNbaV0uaWR4ID0gMDsKKwkJCXJh dGVzW2ldLmNvdW50ID0gODsgLy8gPT0gaHctPm1heF9yYXRlX3RyaWVzCisJCQlyYXRlc1tpXS5m bGFncyA9IHJhdGVzW2kgLSAxXS5mbGFncyAmCisJCQkJCSBJRUVFODAyMTFfVFhfUkNfTUNTOwor CQkJYnJlYWs7CisJCX0KKwl9CisJLy8gQWxsIHJldHJpZXMgdXNlIGxvbmcgR0kKKwlmb3IgKGkg PSAxOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKQorCQlyYXRlc1tpXS5mbGFncyAm PSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworfQorCitzdGF0aWMgdTggd2Z4X3R4X2dldF9y YXRlX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4 X2luZm8gKnR4X2luZm8pCit7CisJYm9vbCB0eF9wb2xpY3lfcmVuZXcgPSBmYWxzZTsKKwl1OCBy YXRlX2lkOworCisJcmF0ZV9pZCA9IHdmeF90eF9wb2xpY3lfZ2V0KHd2aWYsCisJCQkJICAgIHR4 X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4X3BvbGljeV9yZW5ldyk7CisJaWYgKHJhdGVfaWQgPT0g SElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEKQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYs ICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQgVHggcG9saWN5Iik7CisKKwlpZiAodHhfcG9saWN5X3Jl bmV3KSB7CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOworCQlpZiAoIXNjaGVkdWxlX3dvcmso Jnd2aWYtPnR4X3BvbGljeV91cGxvYWRfd29yaykpCisJCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndk ZXYpOworCX0KKwlyZXR1cm4gcmF0ZV9pZDsKK30KKworc3RhdGljIGludCB3ZnhfdHhfZ2V0X2Zy YW1lX2Zvcm1hdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCit7CisJaWYgKCEo dHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykpCisJ CXJldHVybiBISUZfRlJBTUVfRk9STUFUX05PTl9IVDsKKwllbHNlIGlmICghKHR4X2luZm8tPmRy aXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpCisJCXJl dHVybiBISUZfRlJBTUVfRk9STUFUX01JWEVEX0ZPUk1BVF9IVDsKKwllbHNlCisJCXJldHVybiBI SUZfRlJBTUVfRk9STUFUX0dGX0hUXzExTjsKK30KKworc3RhdGljIGludCB3ZnhfdHhfZ2V0X2lj dl9sZW4oc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5KQoreworCWludCBtaWNfc3Bh Y2U7CisKKwlpZiAoIWh3X2tleSkKKwkJcmV0dXJuIDA7CisJaWYgKGh3X2tleS0+Y2lwaGVyID09 IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQorCQlyZXR1cm4gMDsKKwltaWNfc3BhY2UgPSAo aHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgPyA4IDogMDsKKwlyZXR1 cm4gaHdfa2V5LT5pY3ZfbGVuICsgbWljX3NwYWNlOworfQorCitzdGF0aWMgaW50IHdmeF90eF9p bm5lcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJ CXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhpZl9tc2cgKmhpZl9tc2c7CisJc3Ry dWN0IGhpZl9yZXFfdHggKnJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8g PSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdf a2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhk ciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpbnQgcXVldWVfaWQgPSBz a2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzaXplX3Qgb2Zmc2V0ID0gKHNpemVfdClza2It PmRhdGEgJiAzOworCWludCB3bXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKworCQkJ c2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KSArIG9mZnNldDsKKworCVdBUk4ocXVldWVfaWQgPj0g SUVFRTgwMjExX05VTV9BQ1MsICJ1bnN1cHBvcnRlZCBxdWV1ZV9pZCIpOworCXdmeF90eF9maXh1 cF9yYXRlcyh0eF9pbmZvLT5kcml2ZXJfcmF0ZXMpOworCisJLy8gRnJvbSBub3cgdHhfaW5mby0+ Y29udHJvbCBpcyB1bnVzYWJsZQorCW1lbXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAw LCBzaXplb2Yoc3RydWN0IHdmeF90eF9wcml2KSk7CisKKwkvLyBGaWxsIGhpZl9tc2cKKwlXQVJO KHNrYl9oZWFkcm9vbShza2IpIDwgd21zZ19sZW4sICJub3QgZW5vdWdoIHNwYWNlIGluIHNrYiIp OworCVdBUk4ob2Zmc2V0ICYgMSwgImF0dGVtcHQgdG8gdHJhbnNtaXQgYW4gdW5hbGlnbmVkIGZy YW1lIik7CisJc2tiX3B1dChza2IsIHdmeF90eF9nZXRfaWN2X2xlbihod19rZXkpKTsKKwlza2Jf cHVzaChza2IsIHdtc2dfbGVuKTsKKwltZW1zZXQoc2tiLT5kYXRhLCAwLCB3bXNnX2xlbik7CisJ aGlmX21zZyA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKKwloaWZfbXNnLT5sZW4gPSBj cHVfdG9fbGUxNihza2ItPmxlbik7CisJaGlmX21zZy0+aWQgPSBISUZfUkVRX0lEX1RYOworCWhp Zl9tc2ctPmludGVyZmFjZSA9IHd2aWYtPmlkOworCWlmIChza2ItPmxlbiA+IHd2aWYtPndkZXYt Pmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKSB7CisJCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwK KwkJCSAicmVxdWVzdGVkIGZyYW1lIHNpemUgKCVkKSBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN1 cHBvcnRlZCAoJWQpXG4iLAorCQkJIHNrYi0+bGVuLCB3dmlmLT53ZGV2LT5od19jYXBzLnNpemVf aW5wX2NoX2J1Zik7CisJCXNrYl9wdWxsKHNrYiwgd21zZ19sZW4pOworCQlyZXR1cm4gLUVJTzsK Kwl9CisKKwkvLyBGaWxsIHR4IHJlcXVlc3QKKwlyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKilo aWZfbXNnLT5ib2R5OworCS8vIHBhY2tldF9pZCBqdXN0IG5lZWQgdG8gYmUgdW5pcXVlIG9uIGRl dmljZS4gMzJiaXRzIGFyZSBtb3JlIHRoYW4KKwkvLyBuZWNlc3NhcnkgZm9yIHRoYXQgdGFzaywg c28gd2UgdGFlIGFkdmFudGFnZSBvZiBpdCB0byBhZGQgc29tZSBleHRyYQorCS8vIGRhdGEgZm9y IGRlYnVnLgorCXJlcS0+cGFja2V0X2lkID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJnd2aWYtPndk ZXYtPnBhY2tldF9pZCkgJiAweEZGRkY7CisJcmVxLT5wYWNrZXRfaWQgfD0gSUVFRTgwMjExX1NF UV9UT19TTihsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSkgPDwgMTY7CisJcmVxLT5wYWNrZXRf aWQgfD0gcXVldWVfaWQgPDwgMjg7CisKKwlyZXEtPmZjX29mZnNldCA9IG9mZnNldDsKKwlpZiAo dHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkKKwkJcmVx LT5hZnRlcl9kdGltID0gMTsKKwlyZXEtPnBlZXJfc3RhX2lkID0gd2Z4X3R4X2dldF9saW5rX2lk KHd2aWYsIHN0YSwgaGRyKTsKKwkvLyBRdWV1ZSBpbmRleCBhcmUgaW52ZXJ0ZWQgYmV0d2VlbiBm aXJtd2FyZSBhbmQgTGludXgKKwlyZXEtPnF1ZXVlX2lkID0gMyAtIHF1ZXVlX2lkOworCXJlcS0+ cmV0cnlfcG9saWN5X2luZGV4ID0gd2Z4X3R4X2dldF9yYXRlX2lkKHd2aWYsIHR4X2luZm8pOwor CXJlcS0+ZnJhbWVfZm9ybWF0ID0gd2Z4X3R4X2dldF9mcmFtZV9mb3JtYXQodHhfaW5mbyk7CisJ aWYgKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9S VF9HSSkKKwkJcmVxLT5zaG9ydF9naSA9IDE7CisKKwkvLyBBdXhpbGlhcnkgb3BlcmF0aW9ucwor CXdmeF90eF9xdWV1ZXNfcHV0KHd2aWYsIHNrYik7CisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVF RTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pCisJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVw ZGF0ZV90aW1fd29yayk7CisJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7CisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgd2Z4X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCisJICAgIHN0cnVjdCBza19idWZmICpza2IpCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gY29udHJvbCA/IGNvbnRyb2wtPnN0YSA6 IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NL Ql9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIx MV9oZHIgKilza2ItPmRhdGE7CisJc2l6ZV90IGRyaXZlcl9kYXRhX3Jvb20gPSBzaXplb2ZfZmll bGQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLAorCQkJCQkgICAgICAgcmF0ZV9kcml2ZXJfZGF0 YSk7CisKKwljb21waWxldGltZV9hc3NlcnQoc2l6ZW9mKHN0cnVjdCB3ZnhfdHhfcHJpdikgPD0g ZHJpdmVyX2RhdGFfcm9vbSwKKwkJCSAgICJzdHJ1Y3QgdHhfcHJpdiBpcyB0b28gbGFyZ2UiKTsK KwlXQVJOKHNrYi0+bmV4dCB8fCBza2ItPnByZXYsICJza2IgaXMgYWxyZWFkeSBtZW1iZXIgb2Yg YSBsaXN0Iik7CisJLy8gY29udHJvbC52aWYgY2FuIGJlIE5VTEwgZm9yIGluamVjdGVkIGZyYW1l cworCWlmICh0eF9pbmZvLT5jb250cm9sLnZpZikKKwkJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAq KXR4X2luZm8tPmNvbnRyb2wudmlmLT5kcnZfcHJpdjsKKwllbHNlCisJCXd2aWYgPSB3dmlmX2l0 ZXJhdGUod2RldiwgTlVMTCk7CisJaWYgKFdBUk5fT04oIXd2aWYpKQorCQlnb3RvIGRyb3A7CisJ Ly8gQmVjYXVzZSBvZiBUWF9BTVBEVV9TRVRVUF9JTl9IVywgbWFjODAyMTEgZG9lcyBub3QgdHJ5 IHRvIHNlbmQgYW55CisJLy8gQmxvY2tBY2sgc2Vzc2lvbiBtYW5hZ2VtZW50IGZyYW1lLiBUaGUg Y2hlY2sgYmVsb3cgZXhpc3QganVzdCBpbiBjYXNlLgorCWlmIChpZWVlODAyMTFfaXNfYWN0aW9u X2JhY2soaGRyKSkgeworCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJkcm9wIEJBIGFjdGlvblxuIik7 CisJCWdvdG8gZHJvcDsKKwl9CisJaWYgKHdmeF90eF9pbm5lcih3dmlmLCBzdGEsIHNrYikpCisJ CWdvdG8gZHJvcDsKKworCXJldHVybjsKKworZHJvcDoKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2ly cXNhZmUod2Rldi0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9za2JfZHRvcihzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGlmX21z ZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOworCXN0cnVjdCBoaWZfcmVxX3R4 ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7CisJdW5zaWduZWQgaW50IG9m ZnNldCA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKworCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBo aWZfcmVxX3R4KSArCisJCQkgICAgICByZXEtPmZjX29mZnNldDsKKworCWlmICghd3ZpZikgewor CQlwcl93YXJuKCJ2aWYgYXNzb2NpYXRlZCB3aXRoIHRoZSBza2IgZG9lcyBub3QgZXhpc3QgYW55 bW9yZVxuIik7CisJCXJldHVybjsKKwl9CisJd2Z4X3R4X3BvbGljeV9wdXQod3ZpZiwgcmVxLT5y ZXRyeV9wb2xpY3lfaW5kZXgpOworCXNrYl9wdWxsKHNrYiwgb2Zmc2V0KTsKKwlpZWVlODAyMTFf dHhfc3RhdHVzX2lycXNhZmUod3ZpZi0+d2Rldi0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lk IHdmeF90eF9maWxsX3JhdGVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAorCQkJICAgICAgc3RydWN0 IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGhpZl9j bmZfdHggKmFyZykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGU7CisJaW50IHR4 X2NvdW50OworCWludCBpOworCisJdHhfY291bnQgPSBhcmctPmFja19mYWlsdXJlczsKKwlpZiAo IWFyZy0+c3RhdHVzIHx8IGFyZy0+YWNrX2ZhaWx1cmVzKQorCQl0eF9jb3VudCArPSAxOyAvLyBB bHNvIHJlcG9ydCBzdWNjZXNzCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFU RVM7IGkrKykgeworCQlyYXRlID0gJnR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXTsKKwkJaWYgKHJh dGUtPmlkeCA8IDApCisJCQlicmVhazsKKwkJaWYgKHR4X2NvdW50IDwgcmF0ZS0+Y291bnQgJiYK KwkJICAgIGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJTF9SRVRSSUVTICYmCisJCSAg ICBhcmctPmFja19mYWlsdXJlcykKKwkJCWRldl9kYmcod2Rldi0+ZGV2LCAiYWxsIHJldHJpZXMg d2VyZSBub3QgY29uc3VtZWQ6ICVkICE9ICVkXG4iLAorCQkJCXJhdGUtPmNvdW50LCB0eF9jb3Vu dCk7CisJCWlmICh0eF9jb3VudCA8PSByYXRlLT5jb3VudCAmJiB0eF9jb3VudCAmJgorCQkgICAg YXJnLT50eGVkX3JhdGUgIT0gd2Z4X2dldF9od19yYXRlKHdkZXYsIHJhdGUpKQorCQkJZGV2X2Ri Zyh3ZGV2LT5kZXYsICJpbmNvbnNpc3RlbnQgdHhfaW5mbyByYXRlczogJWQgIT0gJWRcbiIsCisJ CQkJYXJnLT50eGVkX3JhdGUsIHdmeF9nZXRfaHdfcmF0ZSh3ZGV2LCByYXRlKSk7CisJCWlmICh0 eF9jb3VudCA+IHJhdGUtPmNvdW50KSB7CisJCQl0eF9jb3VudCAtPSByYXRlLT5jb3VudDsKKwkJ fSBlbHNlIGlmICghdHhfY291bnQpIHsKKwkJCXJhdGUtPmNvdW50ID0gMDsKKwkJCXJhdGUtPmlk eCA9IC0xOworCQl9IGVsc2UgeworCQkJcmF0ZS0+Y291bnQgPSB0eF9jb3VudDsKKwkJCXR4X2Nv dW50ID0gMDsKKwkJfQorCX0KKwlpZiAodHhfY291bnQpCisJCWRldl9kYmcod2Rldi0+ZGV2LCAi JWQgbW9yZSByZXRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIsIHR4X2NvdW50KTsKK30KKwordm9pZCB3 ZnhfdHhfY29uZmlybV9jYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9j bmZfdHggKmFyZykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3Ry dWN0IHdmeF92aWYgKnd2aWY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IHdmeF9w ZW5kaW5nX2dldCh3ZGV2LCBhcmctPnBhY2tldF9pZCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dh cm4od2Rldi0+ZGV2LCAicmVjZWl2ZWQgdW5rbm93biBwYWNrZXRfaWQgKCUjLjh4KSBmcm9tIGNo aXBcbiIsCisJCQkgYXJnLT5wYWNrZXRfaWQpOworCQlyZXR1cm47CisJfQorCXR4X2luZm8gPSBJ RUVFODAyMTFfU0tCX0NCKHNrYik7CisJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCAoKHN0cnVj dCBoaWZfbXNnICopc2tiLT5kYXRhKS0+aW50ZXJmYWNlKTsKKwlXQVJOX09OKCF3dmlmKTsKKwlp ZiAoIXd2aWYpCisJCXJldHVybjsKKworCS8vIE5vdGUgdGhhdCB3ZnhfcGVuZGluZ19nZXRfcGt0 X3VzX2RlbGF5KCkgZ2V0IGRhdGEgZnJvbSB0eF9pbmZvCisJX3RyYWNlX3R4X3N0YXRzKGFyZywg c2tiLCB3ZnhfcGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KHdkZXYsIHNrYikpOworCXdmeF90eF9m aWxsX3JhdGVzKHdkZXYsIHR4X2luZm8sIGFyZyk7CisJLy8gRnJvbSBub3csIHlvdSBjYW4gdG91 Y2ggdG8gdHhfaW5mby0+c3RhdHVzLCBidXQgZG8gbm90IHRvdWNoIHRvCisJLy8gdHhfcHJpdiBh bnltb3JlCisJLy8gRklYTUU6IHVzZSBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoKQor CW1lbXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2YodHhfaW5mby0+cmF0 ZV9kcml2ZXJfZGF0YSkpOworCW1lbXNldCh0eF9pbmZvLT5wYWQsIDAsIHNpemVvZih0eF9pbmZv LT5wYWQpKTsKKworCWlmICghYXJnLT5zdGF0dXMpIHsKKwkJdHhfaW5mby0+c3RhdHVzLnR4X3Rp bWUgPQorCQkJbGUzMl90b19jcHUoYXJnLT5tZWRpYV9kZWxheSkgLQorCQkJbGUzMl90b19jcHUo YXJnLT50eF9xdWV1ZV9kZWxheSk7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9U WF9DVExfTk9fQUNLKQorCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfTk9B Q0tfVFJBTlNNSVRURUQ7CisJCWVsc2UKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9U WF9TVEFUX0FDSzsKKwl9IGVsc2UgaWYgKGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJ TF9SRVFVRVVFKSB7CisJCVdBUk4oIWFyZy0+cmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVzIGFu ZCByZXN1bHRfZmxhZ3MiKTsKKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NU TF9TRU5EX0FGVEVSX0RUSU0pIHsKKwkJCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IGZh bHNlOyAvLyBEVElNIHBlcmlvZCBlbGFwc2VkCisJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRh dGVfdGltX3dvcmspOworCQl9CisJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFU X1RYX0ZJTFRFUkVEOworCX0KKwl3Znhfc2tiX2R0b3Iod3ZpZiwgc2tiKTsKK30KKworc3RhdGlj IHZvaWQgd2Z4X2ZsdXNoX3ZpZihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTMyIHF1ZXVlcywKKwkJ CSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3F1ZXVlICpx dWV1ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsr KSB7CisJCWlmICghKEJJVChpKSAmIHF1ZXVlcykpCisJCQljb250aW51ZTsKKwkJcXVldWUgPSAm d3ZpZi0+dHhfcXVldWVbaV07CisJCWlmIChkcm9wcGVkKQorCQkJd2Z4X3R4X3F1ZXVlX2Ryb3Ao d3ZpZiwgcXVldWUsIGRyb3BwZWQpOworCX0KKwlpZiAod3ZpZi0+d2Rldi0+Y2hpcF9mcm96ZW4p CisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewor CQlpZiAoIShCSVQoaSkgJiBxdWV1ZXMpKQorCQkJY29udGludWU7CisJCXF1ZXVlID0gJnd2aWYt PnR4X3F1ZXVlW2ldOworCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KHd2aWYtPndkZXYtPnR4X2Rl cXVldWUsCisJCQkJICAgICAgIHdmeF90eF9xdWV1ZV9lbXB0eSh3dmlmLCBxdWV1ZSksCisJCQkJ ICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpIDw9IDApCisJCQlkZXZfd2Fybih3dmlmLT53 ZGV2LT5kZXYsCisJCQkJICJmcmFtZXMgcXVldWVkIHdoaWxlIGZsdXNoaW5nIHR4IHF1ZXVlcz8i KTsKKwl9Cit9CisKK3ZvaWQgd2Z4X2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCSAgICAgICB1MzIgcXVldWVzLCBib29sIGRyb3ApCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFk IGRyb3BwZWQ7CisJc3RydWN0IHdmeF92aWYgKnd2aWY7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsK KwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZHJvcHBlZCk7 CisJaWYgKHZpZikgeworCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsK KwkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAmZHJvcHBlZCA6IE5VTEwpOwor CX0gZWxzZSB7CisJCXd2aWYgPSBOVUxMOworCQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpCisJCQl3ZnhfZmx1c2hfdmlmKHd2aWYsIHF1ZXVlcywgZHJv cCA/ICZkcm9wcGVkIDogTlVMTCk7CisJfQorCXdmeF90eF9mbHVzaCh3ZGV2KTsKKwlpZiAod2Rl di0+Y2hpcF9mcm96ZW4pCisJCXdmeF9wZW5kaW5nX2Ryb3Aod2RldiwgJmRyb3BwZWQpOworCXdo aWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRyb3BwZWQpKSAhPSBOVUxMKSB7CisJCWhpZiA9IChz dHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKKwkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBo aWYtPmludGVyZmFjZSk7CisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhJRUVFODAy MTFfU0tCX0NCKHNrYikpOworCQl3Znhfc2tiX2R0b3Iod3ZpZiwgc2tiKTsKKwl9Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaCBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNDZjOWZmZjdhODcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgKQEAgLTAsMCArMSw2NyBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIERhdGFw YXRoIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxp Y29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nv bgorICovCisjaWZuZGVmIFdGWF9EQVRBX1RYX0gKKyNkZWZpbmUgV0ZYX0RBVEFfVFhfSAorCisj aW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5j bHVkZSAiaGlmX2FwaV9jbWQuaCIKKyNpbmNsdWRlICJoaWZfYXBpX21pYi5oIgorCitzdHJ1Y3Qg d2Z4X3R4X3ByaXY7CitzdHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1Y3Qg dHhfcG9saWN5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJaW50IHVzYWdlX2NvdW50Owor CXU4IHJhdGVzWzEyXTsKKwlib29sIHVwbG9hZGVkOworfTsKKworc3RydWN0IHR4X3BvbGljeV9j YWNoZSB7CisJc3RydWN0IHR4X3BvbGljeSBjYWNoZVtISUZfVFhfUkVUUllfUE9MSUNZX01BWF07 CisJLy8gRklYTUU6IHVzZSBhIHRyZWVzIGFuZCBkcm9wIGhhc2ggZnJvbSB0eF9wb2xpY3kKKwlz dHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlOworCXNwaW5sb2Nr X3QgbG9jazsKK307CisKK3N0cnVjdCB3ZnhfdHhfcHJpdiB7CisJa3RpbWVfdCB4bWl0X3RpbWVz dGFtcDsKK307CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlm KTsKK3ZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndv cmspOworCit2b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV90eF9jb250cm9sICpjb250cm9sLAorCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3Zv aWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBo aWZfY25mX3R4ICphcmcpOwordm9pZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJv cCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF90eF9wcml2ICp3Znhfc2tiX3R4X3ByaXYo c3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2lu Zm87CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisJdHhfaW5mbyA9IElFRUU4MDIxMV9T S0JfQ0Ioc2tiKTsKKwlyZXR1cm4gKHN0cnVjdCB3ZnhfdHhfcHJpdiAqKXR4X2luZm8tPnJhdGVf ZHJpdmVyX2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhpZl9yZXFfdHggKndmeF9z a2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0g KHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOworCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAo c3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7CisKKwlyZXR1cm4gcmVxOworfQorCisjZW5k aWYgLyogV0ZYX0RBVEFfVFhfSCAqLwotLSAKMi4yOC4wCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkZXZlbCBtYWlsaW5nIGxpc3QKZGV2ZWxAbGludXhk cml2ZXJwcm9qZWN0Lm9yZwpodHRwOi8vZHJpdmVyZGV2LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcml2ZXJkZXYtZGV2ZWwK