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=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable 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 91F41C43332 for ; Mon, 15 Mar 2021 13:28:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7D42E64EF2 for ; Mon, 15 Mar 2021 13:28:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231232AbhCON16 (ORCPT ); Mon, 15 Mar 2021 09:27:58 -0400 Received: from mail-co1nam11on2080.outbound.protection.outlook.com ([40.107.220.80]:9473 "EHLO NAM11-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S231136AbhCON0R (ORCPT ); Mon, 15 Mar 2021 09:26:17 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K5eNu7ClvVP/agpVeAeAnqfmZ7qGDEti6tz2cs22yR05jANp7k53EAflqcoUZ8f2+yiyjKKuEEmZsyPWlcL1VDomLBR7fKCvjaBLeqir9MZrDNxM9eRK19gBlRBvSr7fBZQRAMkvY+fNp7Zzmh/8PrNuAs7Mdwtjjy+Y/kpm670S+mc9tifKUTv2W9y7YG3zLinM3745mk1p4uU4JFIOmCZPf3D+jhMpC7TIOktWctK+JCg1wYQPArwvKbnZAJesex6aW1s0apJt2srdPQ34vXtcn3EqPtMSPMFb2KMI13VcPSxxMFWcNywOeislY3sq4e+8vpFgGuEMO6uLJuQ7Eg== 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=kNyz4UknRCZ7EEW7frS3oxOf1Ue/nS+0h9iFh9WxGUw=; b=cMJzKf5xMVhNSSLqv5Z2ELT7MJrB+KgEQfYldnwLEXkVv16XPqLRediC4SrQkCCn2acY18w5z0ksDrS8v4CB9ibeQe7HGdYIJuYCzFCaDBLQfHnAnUR8JNeX7IzJ4CuIQsJhJdnu1Dj4/RMXifLl4rjTS8fKmEDpMVlalNXupAFMklQuw6KQeM6lWZUVHSarVKbOVdJBDhdNwI6seLAYdue52sTM6DveqcMONuqxppm2YpZdQhTTzGFswDCvbQXubzI/VYDAMTM0FxBEChBVt4C7Mf1bI4ae7UB/IPi9k+DvYNkUSi8ADjFKxPtomvOpgwudhmQk7tUvfkEZ6zklzg== 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=kNyz4UknRCZ7EEW7frS3oxOf1Ue/nS+0h9iFh9WxGUw=; b=TpQyPGtPaNFfe0kQIm/XO2NN3mFi/NzDvHEFOwzZMw8nQtcfuHwM7x14H00zB7h0nUcoTPkYO2lgH0mQ0zhDWemFGr36IFybcXJxZpk0iTL2mGkUJYr5X5cH+PxlbIkHBjT8omUDckqQQ4Wmavdc9w+Fnm+5mzH8MK461eBf1+k= 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 SN6PR11MB3216.namprd11.prod.outlook.com (2603:10b6:805:c1::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32; Mon, 15 Mar 2021 13:26:12 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701%7]) with mapi id 15.20.3933.032; Mon, 15 Mar 2021 13:26:12 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v5 18/24] wfx: add data_tx.c/data_tx.h Date: Mon, 15 Mar 2021 14:24:55 +0100 Message-Id: <20210315132501.441681-19-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> References: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-ClientProxiedBy: SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Mon, 15 Mar 2021 13:26:09 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f65b270e-c460-4d24-f39a-08d8e7b5e6c7 X-MS-TrafficTypeDiagnostic: SN6PR11MB3216: 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: 33O3+LfFaJJcSCJzIeROCKGl05REEQOFlMeexW68UVTE4tFDtnU5YFBKh9Tptpzd80VNdLfiO4nXvwwVUjKZSrJH6dgo4j8aXjyCm41dIxPTouoCtH0h5FjSL9tqtwGFfvIPQ5wvxQOsmIitVkrzt+lqTry9rhBAQ7kxxzVPTcfzXELFFirkgyA3gYdqLz+4kEd6OfYRc466oe8CSMYVcg83hz6cqauzSonwKslvj356AQroAjxukdAlnpxJLOvP17fXHtt5XI69yGZkWva0escBrdJmDbdqv+AxpjzPvqjRVBJCi/iPi/oFGAQT9bepB7VvOlJm2WcknImmWa/OE8ZMzBk8W/ZNWhW6lH+zFb1jGPKPWL/uZdXCCHlFBiEZGj+kWMokCcameuGOhRMJDxetUtj/VOaisvusuVH7TdGV4VXItggbdMuu7MU2y/eD4uuuDsoUPS6K1Ari5ofuj9N/FtYped+zbGEt2RU8ijB3grnfpfHL+Aor67Xg9vaqtBgGdorRZEqxapzf27Cio+9V+bt5+6IwrTWGaYWR9yvDaqwOwaSPn78IALazL+il 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:(376002)(346002)(396003)(366004)(39850400004)(136003)(86362001)(107886003)(2616005)(186003)(1076003)(4326008)(316002)(30864003)(66556008)(478600001)(8676002)(66476007)(6486002)(7696005)(5660300002)(66946007)(2906002)(54906003)(83380400001)(6666004)(8936002)(36756003)(52116002)(7416002)(66574015)(16526019);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?UTVqQzZ4Vm1DWTl1UEtmWkhEbnFhWU9TREs3YUlYVXhhUGovWHdhQlc5TmRE?= =?utf-8?B?dzdLalBGU0VUZFY3QWkzV1pIaWxMbTNjUEhaU1YrWmRNKzlGY3BKVWczWW9L?= =?utf-8?B?OUpYcXppT2tIbk9IVld1cUlNTjV5WG5QMlNpendBSC9GbTB3YUI0NnlkTUtX?= =?utf-8?B?MFI3NDBBUEIxU0EwVndFRjlrWktFdHlJKy9HT21RdzU5SDY5Q3Q0Y3ZPWHFY?= =?utf-8?B?M0JIc0padFVCQmpxUFZGcjhMTkNQTXg0eWpBM1FkVURSQWp6YXJQZEV2UWVS?= =?utf-8?B?YVZxcHhzZ2dnWHFoOUx2bU02QTlqYkxZN3ZrMkF6dmdjKzlzaW5UbDNoWHNj?= =?utf-8?B?dlk4ZTkxSFhGZ00rWkY4UVprN1VJSEFBQXp3K2dQL3FGUWNLckNwNkVpM1o1?= =?utf-8?B?OWowMzhTNllJRUZxQlNiZlhGR1pVdWRkWDdGTjZxcTY5bVZxSFpwd2EvZnhF?= =?utf-8?B?bXo2QmMyNHRzN1lUMTNkKzBvQWdibTVkM21jN3M3cytXVnFDL1ZvQ1dJU3VE?= =?utf-8?B?M3RDZHhSN1NiVWJ0eGJIUWNiL2tibHovTzN2R2RXTnlVZUtUUDZ3L2RhbTRN?= =?utf-8?B?QVdkRlZLTS9iVTdKdXBmZzJDZnVUZEpEcVlwVzdPbUUyUnVmYkRsTkVsRDVi?= =?utf-8?B?clk3SlpmZktGYVZxTnFjRkpreGJnSUhYbFRoNzR6TnVjM3dKYXd5T2d6QlRx?= =?utf-8?B?am9EZEJ2NFBLbkxLRlMwbzM3V0hSRjJqc0RpZlhuWkdvRkp6ekI0VEpWdmgy?= =?utf-8?B?Z2NkbHduK1RmNkNBQkFXUDJlWDg2dVU3M0c0R25PL1JsV2F1aGVtdVBaZ0pK?= =?utf-8?B?aWpoRGc2UFI2SXVzZmV1cVNXeDV4OTZha3dMQTlXRGZUSTB2TWVCUS9DNkxL?= =?utf-8?B?UTFWTlp1b3AwbjZiZS9tMVpWTlY2aFBscVdSeXFJaTlGNjJtMTNXWG56T05U?= =?utf-8?B?UFd4VjlBQ3k0eXE1RW92YUgyN3owWEtueEo2L3dnWkdQSDQ3S0tZcWhzM1JI?= =?utf-8?B?UEg1UnM2SHBDQzlBeUxZZWQvelg5TVNTd2trMW04VnEwQmt2dCtONTB2QStP?= =?utf-8?B?RFRZVU1iQzdGTmJpMWVMNGVYa2VhVk1GbXBGb3VpMHRHZ3FUeFEyWFpHRlNY?= =?utf-8?B?TnNFbE1qTFFyQVhzNVB5UnVtaHhFSXNPVTVLRnpRKzVOcDVHdE1TVGxjVVQy?= =?utf-8?B?YkZyWkJrK2dnQmh4ZUVWcU5Zd1p2TVN2cFF3aWVuSWVQQ1o2cGd6Nm5WN3BB?= =?utf-8?B?dnllL0NrTDJoMUhiMTVTSTVuNThITXJyVDN0Zmx4cENiUXUxRk1LWTlyKytq?= =?utf-8?B?MEliRjB2dUk4VWpWdUQrc0xibFE5RkpEMXc1aXRwd0JHeGVQbFhCTWV1OCtx?= =?utf-8?B?SGpQNU1xaEErV29rK1pyVm9IVGJiYWFuTFo4alRYTTJNOWpqYUNGV2MyYWNx?= =?utf-8?B?WEJzcjNaQjJKZEpsYmhpeVZ4UUF0dTZHRWowdTc2cXdJdldHWVdWZnJ1d1Nx?= =?utf-8?B?K0Q4VyszR0IyTnJXaFduazQvWVVSdDl3Z242a2Y3eXNtWFZoZmZBMzlHNjRi?= =?utf-8?B?YmR6L2lKOGtOK21RVHF4VU5jaXUyS056REtKRlJWdGRuOC9SckRPTlNPeGRu?= =?utf-8?B?MUhuR2ZocmlIT2pDL1dCWWhLeXEwK2doSmJVelVLNGNueU5jTnMwK2UzVkgv?= =?utf-8?B?c1BBckRQNHZ6T3VlV0ozeFdwN2JWYm5sNit5MEpYRFFNRTgrREpoYmZHZEtj?= =?utf-8?B?T29jR3hXTk1zaDArTUVmR3RHdEU1cXE4WUlqaTJUc2licDJFVlhMR290QXdC?= =?utf-8?B?dVp0MEVtVWpFdHBiRmZuUlFZNXBPeTRrZjJ4WFAzWlBkbHNjcHdxWjB6V2ow?= =?utf-8?Q?2QzI95mkXC+Mt?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: f65b270e-c460-4d24-f39a-08d8e7b5e6c7 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2021 13:26:12.2634 (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: h74f4/+B4hmpZkG+chYiHA2CzZMvVvfptJHBJ+934tHfqhCUe/M0oH1r+uF/sQGUyCCsreALgBVogRhdkqbuNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3216 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jIHwgNTk4ICsr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0 YV90eC5oIHwgIDY4ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA2NjYgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRh X3R4LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFf dHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTU3ZmU0YjIxMjQzCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmMKQEAgLTAs MCArMSw1OTggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBEYXRhcGF0aCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxp bnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkYXRhX3R4LmgiCisjaW5jbHVkZSAid2Z4 LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJzdGEuaCIKKyNpbmNsdWRlICJxdWV1ZS5o IgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhY2VzLmgiCisjaW5jbHVkZSAiaGlm X3R4X21pYi5oIgorCitzdGF0aWMgaW50IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKK3sKKwlz dHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOworCisJaWYgKHJhdGUtPmlkeCA8 IDApCisJCXJldHVybiAtMTsKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNT KSB7CisJCWlmIChyYXRlLT5pZHggPiA3KSB7CisJCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHgg dmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gcmF0 ZS0+aWR4ICsgMTQ7CisJfQorCS8qIFdGeCBvbmx5IHN1cHBvcnQgMkdIeiwgZWxzZSBiYW5kIGlu Zm9ybWF0aW9uIHNob3VsZCBiZSByZXRyaWV2ZWQKKwkgKiBmcm9tIGllZWU4MDIxMV90eF9pbmZv CisJICovCisJYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpd OworCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9iaXRyYXRlcykgeworCQlXQVJOKDEsICJ3cm9u ZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKwly ZXR1cm4gYmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4XS5od192YWx1ZTsKK30KKworLyogVFggcG9s aWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lf YnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwKKwkJ CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gd3ZpZi0+d2RldjsKKwlpbnQgaSwgcmF0ZWlkOworCXU4IGNvdW50OworCisJV0FSTihy YXRlc1swXS5pZHggPCAwLCAiaW52YWxpZCByYXRlIHBvbGljeSIpOworCW1lbXNldChwb2xpY3ks IDAsIHNpemVvZigqcG9saWN5KSk7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhf UkFURVM7ICsraSkgeworCQlpZiAocmF0ZXNbaV0uaWR4IDwgMCkKKwkJCWJyZWFrOworCQlXQVJO X09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOworCQlyYXRlaWQgPSB3ZnhfZ2V0X2h3X3JhdGUod2Rl diwgJnJhdGVzW2ldKTsKKwkJLyogUGFjayB0d28gdmFsdWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xp Y3ktPnJhdGVzICovCisJCWNvdW50ID0gcmF0ZXNbaV0uY291bnQ7CisJCWlmIChyYXRlaWQgJSAy KQorCQkJY291bnQgPDw9IDQ7CisJCXBvbGljeS0+cmF0ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7 CisJfQorfQorCitzdGF0aWMgYm9vbCB0eF9wb2xpY3lfaXNfZXF1YWwoY29uc3Qgc3RydWN0IHR4 X3BvbGljeSAqYSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICpiKQoreworCXJl dHVybiAhbWVtY21wKGEtPnJhdGVzLCBiLT5yYXRlcywgc2l6ZW9mKGEtPnJhdGVzKSk7Cit9CisK K3N0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNh Y2hlLAorCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAqd2FudGVkKQoreworCXN0cnVjdCB0eF9w b2xpY3kgKml0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJmNhY2hlLT51c2VkLCBsaW5r KQorCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRlZCwgaXQpKQorCQkJcmV0dXJuIGl0IC0g Y2FjaGUtPmNhY2hlOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZjYWNoZS0+ZnJlZSwgbGlu aykKKwkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkKKwkJCXJldHVybiBpdCAt IGNhY2hlLT5jYWNoZTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF90eF9wb2xp Y3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAorCQkJICAgICAgc3RydWN0IHR4 X3BvbGljeSAqZW50cnkpCit7CisJKytlbnRyeS0+dXNhZ2VfY291bnQ7CisJbGlzdF9tb3ZlKCZl bnRyeS0+bGluaywgJmNhY2hlLT51c2VkKTsKK30KKworc3RhdGljIGludCB3ZnhfdHhfcG9saWN5 X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsCisJCQkJIHN0cnVjdCB0eF9w b2xpY3kgKmVudHJ5KQoreworCWludCByZXQgPSAtLWVudHJ5LT51c2FnZV9jb3VudDsKKworCWlm ICghcmV0KQorCQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPmZyZWUpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9nZXQoc3RydWN0IHdmeF92aWYg Knd2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMsIGJvb2wgKnJl bmV3KQoreworCWludCBpZHg7CisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUgPSAmd3Zp Zi0+dHhfcG9saWN5X2NhY2hlOworCXN0cnVjdCB0eF9wb2xpY3kgd2FudGVkOworCisJd2Z4X3R4 X3BvbGljeV9idWlsZCh3dmlmLCAmd2FudGVkLCByYXRlcyk7CisKKwlzcGluX2xvY2tfYmgoJmNh Y2hlLT5sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpKSB7CisJCVdBUk4oMSwg InVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3kiKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmNh Y2hlLT5sb2NrKTsKKwkJcmV0dXJuIEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRDsKKwl9CisJ aWR4ID0gd2Z4X3R4X3BvbGljeV9maW5kKGNhY2hlLCAmd2FudGVkKTsKKwlpZiAoaWR4ID49IDAp IHsKKwkJKnJlbmV3ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJc3RydWN0IHR4X3BvbGljeSAqZW50 cnk7CisJCSpyZW5ldyA9IHRydWU7CisJCS8qIElmIHBvbGljeSBpcyBub3QgZm91bmQgY3JlYXRl IGEgbmV3IG9uZQorCQkgKiB1c2luZyB0aGUgb2xkZXN0IGVudHJ5IGluICJmcmVlIiBsaXN0CisJ CSAqLworCQllbnRyeSA9IGxpc3RfZW50cnkoY2FjaGUtPmZyZWUucHJldiwgc3RydWN0IHR4X3Bv bGljeSwgbGluayk7CisJCW1lbWNweShlbnRyeS0+cmF0ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9m KGVudHJ5LT5yYXRlcykpOworCQllbnRyeS0+dXBsb2FkZWQgPSBmYWxzZTsKKwkJZW50cnktPnVz YWdlX2NvdW50ID0gMDsKKwkJaWR4ID0gZW50cnkgLSBjYWNoZS0+Y2FjaGU7CisJfQorCXdmeF90 eF9wb2xpY3lfdXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0pOworCWlmIChsaXN0X2VtcHR5 KCZjYWNoZS0+ZnJlZSkpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3dmlmLT53ZGV2LT5odyk7 CisJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKKwlyZXR1cm4gaWR4OworfQorCitzdGF0 aWMgdm9pZCB3ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCkK K3sKKwlpbnQgdXNhZ2UsIGxvY2tlZDsKKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpjYWNoZSA9 ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7CisKKwlpZiAoaWR4ID09IEhJRl9UWF9SRVRSWV9QT0xJ Q1lfSU5WQUxJRCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19iaCgmY2FjaGUtPmxvY2spOworCWxv Y2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsKKwl1c2FnZSA9IHdmeF90eF9wb2xpY3lf cmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhdKTsKKwlpZiAobG9ja2VkICYmICF1c2Fn ZSkKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHd2aWYtPndkZXYtPmh3KTsKKwlzcGluX3VubG9j a19iaCgmY2FjaGUtPmxvY2spOworfQorCitzdGF0aWMgaW50IHdmeF90eF9wb2xpY3lfdXBsb2Fk KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3kgKnBvbGljaWVzID0g d3ZpZi0+dHhfcG9saWN5X2NhY2hlLmNhY2hlOworCXU4IHRtcF9yYXRlc1sxMl07CisJaW50IGks IGlzX3VzZWQ7CisKKwlkbyB7CisJCXNwaW5fbG9ja19iaCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hl LmxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2Fj aGUuY2FjaGUpOyArK2kpIHsKKwkJCWlzX3VzZWQgPSBtZW16Y21wKHBvbGljaWVzW2ldLnJhdGVz LAorCQkJCQkgIHNpemVvZihwb2xpY2llc1tpXS5yYXRlcykpOworCQkJaWYgKCFwb2xpY2llc1tp XS51cGxvYWRlZCAmJiBpc191c2VkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpIDwgQVJSQVlf U0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKSB7CisJCQlwb2xpY2llc1tpXS51cGxv YWRlZCA9IHRydWU7CisJCQltZW1jcHkodG1wX3JhdGVzLCBwb2xpY2llc1tpXS5yYXRlcywgc2l6 ZW9mKHRtcF9yYXRlcykpOworCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnR4X3BvbGljeV9jYWNo ZS5sb2NrKTsKKwkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kod3ZpZiwgaSwgdG1wX3Jh dGVzKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT50eF9wb2xpY3lfY2Fj aGUubG9jayk7CisJCX0KKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lf Y2FjaGUuY2FjaGUpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9h ZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9h ZF93b3JrKTsKKworCXdmeF90eF9wb2xpY3lfdXBsb2FkKHd2aWYpOworCXdmeF90eF91bmxvY2so d3ZpZi0+d2Rldik7Cit9CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVjdCB3Znhfdmlm ICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlID0gJnd2aWYtPnR4X3Bv bGljeV9jYWNoZTsKKwlpbnQgaTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkp OworCisJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2Fj aGUtPnVzZWQpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+ZnJlZSk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjYWNoZS0+Y2FjaGUpOyArK2kpCisJCWxpc3RfYWRkKCZjYWNoZS0+ Y2FjaGVbaV0ubGluaywgJmNhY2hlLT5mcmVlKTsKK30KKworLyogVHggaW1wbGVtZW50YXRpb24g Ki8KKworc3RhdGljIGJvb2wgd2Z4X2lzX2FjdGlvbl9iYWNrKHN0cnVjdCBpZWVlODAyMTFfaGRy ICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAy MTFfbWdtdCAqKWhkcjsKKworCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9j b250cm9sKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAh PSBXTEFOX0NBVEVHT1JZX0JBQ0spCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIHU4IHdmeF90eF9nZXRfbGlua19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhk cikKK3sKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9CisJCXN0YSA/IChzdHJ1Y3Qg d2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXYgOiBOVUxMOworCWNvbnN0IHU4ICpkYSA9IGll ZWU4MDIxMV9nZXRfREEoaGRyKTsKKworCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+bGlua19p ZCkKKwkJcmV0dXJuIHN0YV9wcml2LT5saW5rX2lkOworCWlmICh3dmlmLT52aWYtPnR5cGUgIT0g Tkw4MDIxMV9JRlRZUEVfQVApCisJCXJldHVybiAwOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJf YWRkcihkYSkpCisJCXJldHVybiAwOworCXJldHVybiBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRF RDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3R4X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFf dHhfcmF0ZSAqcmF0ZXMpCit7CisJaW50IGk7CisJYm9vbCBmaW5pc2hlZDsKKworCS8qIEZpcm13 YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRlcyB3aXRoIGRpZmZlcmVudCBmbGFncyAqLworCWZv ciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKKwkJaWYgKHJhdGVz WzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQkJcmF0ZXNbaV0uZmxhZ3Mg fD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElF RUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjEx X1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9S Q19VU0VfUlRTX0NUUykpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1VT RV9SVFNfQ1RTOworCX0KKworCS8qIFNvcnQgcmF0ZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzICov CisJZG8geworCQlmaW5pc2hlZCA9IHRydWU7CisJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFf VFhfTUFYX1JBVEVTIC0gMTsgaSsrKSB7CisJCQlpZiAocmF0ZXNbaSArIDFdLmlkeCA9PSByYXRl c1tpXS5pZHggJiYKKwkJCSAgICByYXRlc1tpXS5pZHggIT0gLTEpIHsKKwkJCQlyYXRlc1tpXS5j b3VudCArPSByYXRlc1tpICsgMV0uY291bnQ7CisJCQkJaWYgKHJhdGVzW2ldLmNvdW50ID4gMTUp CisJCQkJCXJhdGVzW2ldLmNvdW50ID0gMTU7CisJCQkJcmF0ZXNbaSArIDFdLmlkeCA9IC0xOwor CQkJCXJhdGVzW2kgKyAxXS5jb3VudCA9IDA7CisKKwkJCQlmaW5pc2hlZCA9IGZhbHNlOworCQkJ fQorCQkJaWYgKHJhdGVzW2kgKyAxXS5pZHggPiByYXRlc1tpXS5pZHgpIHsKKwkJCQlzd2FwKHJh dGVzW2kgKyAxXSwgcmF0ZXNbaV0pOworCQkJCWZpbmlzaGVkID0gZmFsc2U7CisJCQl9CisJCX0K Kwl9IHdoaWxlICghZmluaXNoZWQpOworCS8qIEVuc3VyZSB0aGF0IE1DUzAgb3IgMU1icHMgaXMg cHJlc2VudCBhdCB0aGUgZW5kIG9mIHRoZSByZXRyeSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQlpZiAocmF0ZXNbaV0uaWR4ID09IDAp CisJCQlicmVhazsKKwkJaWYgKHJhdGVzW2ldLmlkeCA9PSAtMSkgeworCQkJcmF0ZXNbaV0uaWR4 ID0gMDsKKwkJCXJhdGVzW2ldLmNvdW50ID0gODsgLyogPT0gaHctPm1heF9yYXRlX3RyaWVzICov CisJCQlyYXRlc1tpXS5mbGFncyA9IHJhdGVzW2kgLSAxXS5mbGFncyAmCisJCQkJCSBJRUVFODAy MTFfVFhfUkNfTUNTOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogQWxsIHJldHJpZXMgdXNlIGxv bmcgR0kgKi8KKwlmb3IgKGkgPSAxOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKQor CQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworfQorCitzdGF0 aWMgdTggd2Z4X3R4X2dldF9yYXRlX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICBz dHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCit7CisJYm9vbCB0eF9wb2xpY3lfcmVu ZXcgPSBmYWxzZTsKKwl1OCByYXRlX2lkOworCisJcmF0ZV9pZCA9IHdmeF90eF9wb2xpY3lfZ2V0 KHd2aWYsCisJCQkJICAgIHR4X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4X3BvbGljeV9yZW5ldyk7 CisJaWYgKHJhdGVfaWQgPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEKQorCQlkZXZfd2Fy bih3dmlmLT53ZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQgVHggcG9saWN5Iik7CisK KwlpZiAodHhfcG9saWN5X3JlbmV3KSB7CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOworCQlp ZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnR4X3BvbGljeV91cGxvYWRfd29yaykpCisJCQl3Znhf dHhfdW5sb2NrKHd2aWYtPndkZXYpOworCX0KKwlyZXR1cm4gcmF0ZV9pZDsKK30KKworc3RhdGlj IGludCB3ZnhfdHhfZ2V0X2ZyYW1lX2Zvcm1hdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4 X2luZm8pCit7CisJaWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYgSUVFRTgw MjExX1RYX1JDX01DUykpCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX05PTl9IVDsKKwllbHNl IGlmICghKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19H UkVFTl9GSUVMRCkpCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX01JWEVEX0ZPUk1BVF9IVDsK KwllbHNlCisJCXJldHVybiBISUZfRlJBTUVfRk9STUFUX0dGX0hUXzExTjsKK30KKworc3RhdGlj IGludCB3ZnhfdHhfZ2V0X2ljdl9sZW4oc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5 KQoreworCWludCBtaWNfc3BhY2U7CisKKwlpZiAoIWh3X2tleSkKKwkJcmV0dXJuIDA7CisJaWYg KGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQorCQlyZXR1cm4g MDsKKwltaWNfc3BhY2UgPSAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJ UCkgPyA4IDogMDsKKwlyZXR1cm4gaHdfa2V5LT5pY3ZfbGVuICsgbWljX3NwYWNlOworfQorCitz dGF0aWMgaW50IHdmeF90eF9pbm5lcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhpZl9t c2cgKmhpZl9tc2c7CisJc3RydWN0IGhpZl9yZXFfdHggKnJlcTsKKwlzdHJ1Y3Qgd2Z4X3R4X3By aXYgKnR4X3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgw MjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSA9IHR4 X2luZm8tPmNvbnRyb2wuaHdfa2V5OworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3Ry dWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaW50IHF1ZXVlX2lkID0gc2tiX2dldF9x dWV1ZV9tYXBwaW5nKHNrYik7CisJc2l6ZV90IG9mZnNldCA9IChzaXplX3Qpc2tiLT5kYXRhICYg MzsKKwlpbnQgd21zZ19sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsKKwkJCXNpemVvZihz dHJ1Y3QgaGlmX3JlcV90eCkgKyBvZmZzZXQ7CisKKwlXQVJOKHF1ZXVlX2lkID49IElFRUU4MDIx MV9OVU1fQUNTLCAidW5zdXBwb3J0ZWQgcXVldWVfaWQiKTsKKwl3ZnhfdHhfZml4dXBfcmF0ZXMo dHhfaW5mby0+ZHJpdmVyX3JhdGVzKTsKKworCS8qIEZyb20gbm93IHR4X2luZm8tPmNvbnRyb2wg aXMgdW51c2FibGUgKi8KKwltZW1zZXQodHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSwgMCwgc2l6 ZW9mKHN0cnVjdCB3ZnhfdHhfcHJpdikpOworCS8qIEZpbGwgdHhfcHJpdiAqLworCXR4X3ByaXYg PSAoc3RydWN0IHdmeF90eF9wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwl0eF9w cml2LT5pY3Zfc2l6ZSA9IHdmeF90eF9nZXRfaWN2X2xlbihod19rZXkpOworCisJLyogRmlsbCBo aWZfbXNnICovCisJV0FSTihza2JfaGVhZHJvb20oc2tiKSA8IHdtc2dfbGVuLCAibm90IGVub3Vn aCBzcGFjZSBpbiBza2IiKTsKKwlXQVJOKG9mZnNldCAmIDEsICJhdHRlbXB0IHRvIHRyYW5zbWl0 IGFuIHVuYWxpZ25lZCBmcmFtZSIpOworCXNrYl9wdXQoc2tiLCB0eF9wcml2LT5pY3Zfc2l6ZSk7 CisJc2tiX3B1c2goc2tiLCB3bXNnX2xlbik7CisJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgd21zZ19s ZW4pOworCWhpZl9tc2cgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7CisJaGlmX21zZy0+ bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCWhpZl9tc2ctPmlkID0gSElGX1JFUV9JRF9U WDsKKwloaWZfbXNnLT5pbnRlcmZhY2UgPSB3dmlmLT5pZDsKKwlpZiAoc2tiLT5sZW4gPiB3dmlm LT53ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1ZikgeworCQlkZXZfd2Fybih3dmlmLT53ZGV2 LT5kZXYsCisJCQkgInJlcXVlc3RlZCBmcmFtZSBzaXplICglZCkgaXMgbGFyZ2VyIHRoYW4gbWF4 aW11bSBzdXBwb3J0ZWQgKCVkKVxuIiwKKwkJCSBza2ItPmxlbiwgd3ZpZi0+d2Rldi0+aHdfY2Fw cy5zaXplX2lucF9jaF9idWYpOworCQlza2JfcHVsbChza2IsIHdtc2dfbGVuKTsKKwkJcmV0dXJu IC1FSU87CisJfQorCisJLyogRmlsbCB0eCByZXF1ZXN0ICovCisJcmVxID0gKHN0cnVjdCBoaWZf cmVxX3R4ICopaGlmX21zZy0+Ym9keTsKKwkvKiBwYWNrZXRfaWQganVzdCBuZWVkIHRvIGJlIHVu aXF1ZSBvbiBkZXZpY2UuIDMyYml0cyBhcmUgbW9yZSB0aGFuCisJICogbmVjZXNzYXJ5IGZvciB0 aGF0IHRhc2ssIHNvIHdlIHRha2UgYWR2YW50YWdlIG9mIGl0IHRvIGFkZCBzb21lIGV4dHJhCisJ ICogZGF0YSBmb3IgZGVidWcuCisJICovCisJcmVxLT5wYWNrZXRfaWQgPSBhdG9taWNfYWRkX3Jl dHVybigxLCAmd3ZpZi0+d2Rldi0+cGFja2V0X2lkKSAmIDB4RkZGRjsKKwlyZXEtPnBhY2tldF9p ZCB8PSBJRUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKSA8PCAx NjsKKwlyZXEtPnBhY2tldF9pZCB8PSBxdWV1ZV9pZCA8PCAyODsKKworCXJlcS0+ZmNfb2Zmc2V0 ID0gb2Zmc2V0OworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9B RlRFUl9EVElNKQorCQlyZXEtPmFmdGVyX2R0aW0gPSAxOworCXJlcS0+cGVlcl9zdGFfaWQgPSB3 ZnhfdHhfZ2V0X2xpbmtfaWQod3ZpZiwgc3RhLCBoZHIpOworCS8qIFF1ZXVlIGluZGV4IGFyZSBp bnZlcnRlZCBiZXR3ZWVuIGZpcm13YXJlIGFuZCBMaW51eCAqLworCXJlcS0+cXVldWVfaWQgPSAz IC0gcXVldWVfaWQ7CisJcmVxLT5yZXRyeV9wb2xpY3lfaW5kZXggPSB3ZnhfdHhfZ2V0X3JhdGVf aWQod3ZpZiwgdHhfaW5mbyk7CisJcmVxLT5mcmFtZV9mb3JtYXQgPSB3ZnhfdHhfZ2V0X2ZyYW1l X2Zvcm1hdCh0eF9pbmZvKTsKKwlpZiAodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYg SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQlyZXEtPnNob3J0X2dpID0gMTsKKworCS8qIEF1 eGlsaWFyeSBvcGVyYXRpb25zICovCisJd2Z4X3R4X3F1ZXVlc19wdXQod3ZpZiwgc2tiKTsKKwlp ZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkKKwkJ c2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3JrKTsKKwl3ZnhfYmhfcmVxdWVzdF90 eCh3dmlmLT53ZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdHgoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwKKwkgICAg c3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2 OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBj b250cm9sID8gY29udHJvbC0+c3RhIDogTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8g KnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIg KmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlzaXplX3QgZHJpdmVy X2RhdGFfcm9vbSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sCisJCQkJ CSAgICAgICByYXRlX2RyaXZlcl9kYXRhKTsKKworCUJVSUxEX0JVR19PTl9NU0coc2l6ZW9mKHN0 cnVjdCB3ZnhfdHhfcHJpdikgPiBkcml2ZXJfZGF0YV9yb29tLAorCQkJICJzdHJ1Y3QgdHhfcHJp diBpcyB0b28gbGFyZ2UiKTsKKwlXQVJOKHNrYi0+bmV4dCB8fCBza2ItPnByZXYsICJza2IgaXMg YWxyZWFkeSBtZW1iZXIgb2YgYSBsaXN0Iik7CisJLyogY29udHJvbC52aWYgY2FuIGJlIE5VTEwg Zm9yIGluamVjdGVkIGZyYW1lcyAqLworCWlmICh0eF9pbmZvLT5jb250cm9sLnZpZikKKwkJd3Zp ZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXR4X2luZm8tPmNvbnRyb2wudmlmLT5kcnZfcHJpdjsKKwll bHNlCisJCXd2aWYgPSB3dmlmX2l0ZXJhdGUod2RldiwgTlVMTCk7CisJaWYgKFdBUk5fT04oIXd2 aWYpKQorCQlnb3RvIGRyb3A7CisJLyogQmVjYXVzZSBvZiBUWF9BTVBEVV9TRVRVUF9JTl9IVywg bWFjODAyMTEgZG9lcyBub3QgdHJ5IHRvIHNlbmQgYW55CisJICogQmxvY2tBY2sgc2Vzc2lvbiBt YW5hZ2VtZW50IGZyYW1lLiBUaGUgY2hlY2sgYmVsb3cgZXhpc3QganVzdCBpbiBjYXNlLgorCSAq LworCWlmICh3ZnhfaXNfYWN0aW9uX2JhY2soaGRyKSkgeworCQlkZXZfaW5mbyh3ZGV2LT5kZXYs ICJkcm9wIEJBIGFjdGlvblxuIik7CisJCWdvdG8gZHJvcDsKKwl9CisJaWYgKHdmeF90eF9pbm5l cih3dmlmLCBzdGEsIHNrYikpCisJCWdvdG8gZHJvcDsKKworCXJldHVybjsKKworZHJvcDoKKwlp ZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod2Rldi0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyB2 b2lkIHdmeF9za2JfZHRvcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNr YikKK3sKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRh OworCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJv ZHk7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKworCQkJ ICAgICAgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KSArCisJCQkgICAgICByZXEtPmZjX29mZnNl dDsKKworCWlmICghd3ZpZikgeworCQlwcl93YXJuKCJ2aWYgYXNzb2NpYXRlZCB3aXRoIHRoZSBz a2IgZG9lcyBub3QgZXhpc3QgYW55bW9yZVxuIik7CisJCXJldHVybjsKKwl9CisJd2Z4X3R4X3Bv bGljeV9wdXQod3ZpZiwgcmVxLT5yZXRyeV9wb2xpY3lfaW5kZXgpOworCXNrYl9wdWxsKHNrYiwg b2Zmc2V0KTsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod3ZpZi0+d2Rldi0+aHcsIHNr Yik7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF90eF9maWxsX3JhdGVzKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvLAorCQkJICAg ICAgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFyZykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4 X3JhdGUgKnJhdGU7CisJaW50IHR4X2NvdW50OworCWludCBpOworCisJdHhfY291bnQgPSBhcmct PmFja19mYWlsdXJlczsKKwlpZiAoIWFyZy0+c3RhdHVzIHx8IGFyZy0+YWNrX2ZhaWx1cmVzKQor CQl0eF9jb3VudCArPSAxOyAvKiBBbHNvIHJlcG9ydCBzdWNjZXNzICovCisJZm9yIChpID0gMDsg aSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQlyYXRlID0gJnR4X2luZm8tPnN0 YXR1cy5yYXRlc1tpXTsKKwkJaWYgKHJhdGUtPmlkeCA8IDApCisJCQlicmVhazsKKwkJaWYgKHR4 X2NvdW50IDwgcmF0ZS0+Y291bnQgJiYKKwkJICAgIGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNf VFhfRkFJTF9SRVRSSUVTICYmCisJCSAgICBhcmctPmFja19mYWlsdXJlcykKKwkJCWRldl9kYmco d2Rldi0+ZGV2LCAiYWxsIHJldHJpZXMgd2VyZSBub3QgY29uc3VtZWQ6ICVkICE9ICVkXG4iLAor CQkJCXJhdGUtPmNvdW50LCB0eF9jb3VudCk7CisJCWlmICh0eF9jb3VudCA8PSByYXRlLT5jb3Vu dCAmJiB0eF9jb3VudCAmJgorCQkgICAgYXJnLT50eGVkX3JhdGUgIT0gd2Z4X2dldF9od19yYXRl KHdkZXYsIHJhdGUpKQorCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJpbmNvbnNpc3RlbnQgdHhfaW5m byByYXRlczogJWQgIT0gJWRcbiIsCisJCQkJYXJnLT50eGVkX3JhdGUsIHdmeF9nZXRfaHdfcmF0 ZSh3ZGV2LCByYXRlKSk7CisJCWlmICh0eF9jb3VudCA+IHJhdGUtPmNvdW50KSB7CisJCQl0eF9j b3VudCAtPSByYXRlLT5jb3VudDsKKwkJfSBlbHNlIGlmICghdHhfY291bnQpIHsKKwkJCXJhdGUt PmNvdW50ID0gMDsKKwkJCXJhdGUtPmlkeCA9IC0xOworCQl9IGVsc2UgeworCQkJcmF0ZS0+Y291 bnQgPSB0eF9jb3VudDsKKwkJCXR4X2NvdW50ID0gMDsKKwkJfQorCX0KKwlpZiAodHhfY291bnQp CisJCWRldl9kYmcod2Rldi0+ZGV2LCAiJWQgbW9yZSByZXRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIs IHR4X2NvdW50KTsKK30KKwordm9pZCB3ZnhfdHhfY29uZmlybV9jYihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFyZykKK3sKKwljb25zdCBzdHJ1Y3Qgd2Z4 X3R4X3ByaXYgKnR4X3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwor CXN0cnVjdCB3ZnhfdmlmICp3dmlmOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSB3 ZnhfcGVuZGluZ19nZXQod2RldiwgYXJnLT5wYWNrZXRfaWQpOworCWlmICghc2tiKSB7CisJCWRl dl93YXJuKHdkZXYtPmRldiwgInJlY2VpdmVkIHVua25vd24gcGFja2V0X2lkICglIy44eCkgZnJv bSBjaGlwXG4iLAorCQkJIGFyZy0+cGFja2V0X2lkKTsKKwkJcmV0dXJuOworCX0KKwl0eF9pbmZv ID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXR4X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYoc2ti KTsKKwl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsICgoc3RydWN0IGhpZl9tc2cgKilza2ItPmRh dGEpLT5pbnRlcmZhY2UpOworCVdBUk5fT04oIXd2aWYpOworCWlmICghd3ZpZikKKwkJcmV0dXJu OworCisJLyogTm90ZSB0aGF0IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkoKSBnZXQgZGF0 YSBmcm9tIHR4X2luZm8gKi8KKwlfdHJhY2VfdHhfc3RhdHMoYXJnLCBza2IsIHdmeF9wZW5kaW5n X2dldF9wa3RfdXNfZGVsYXkod2Rldiwgc2tiKSk7CisJd2Z4X3R4X2ZpbGxfcmF0ZXMod2Rldiwg dHhfaW5mbywgYXJnKTsKKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gdHhfcHJpdi0+aWN2X3Np emUpOworCisJLyogRnJvbSBub3csIHlvdSBjYW4gdG91Y2ggdG8gdHhfaW5mby0+c3RhdHVzLCBi dXQgZG8gbm90IHRvdWNoIHRvCisJICogdHhfcHJpdiBhbnltb3JlCisJICovCisJLyogRklYTUU6 IHVzZSBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoKSAqLworCW1lbXNldCh0eF9pbmZv LT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2YodHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSkp OworCW1lbXNldCh0eF9pbmZvLT5wYWQsIDAsIHNpemVvZih0eF9pbmZvLT5wYWQpKTsKKworCWlm ICghYXJnLT5zdGF0dXMpIHsKKwkJdHhfaW5mby0+c3RhdHVzLnR4X3RpbWUgPQorCQkJbGUzMl90 b19jcHUoYXJnLT5tZWRpYV9kZWxheSkgLQorCQkJbGUzMl90b19jcHUoYXJnLT50eF9xdWV1ZV9k ZWxheSk7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQor CQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQ7 CisJCWVsc2UKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwl9 IGVsc2UgaWYgKGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJTF9SRVFVRVVFKSB7CisJ CVdBUk4oIWFyZy0+cmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVzIGFuZCByZXN1bHRfZmxhZ3Mi KTsKKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RU SU0pIHsKKwkJCS8qIERUSU0gcGVyaW9kIGVsYXBzZWQgKi8KKwkJCXd2aWYtPmFmdGVyX2R0aW1f dHhfYWxsb3dlZCA9IGZhbHNlOworCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93 b3JrKTsKKwkJfQorCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxU RVJFRDsKKwl9CisJd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIHdm eF9mbHVzaF92aWYoc3RydWN0IHdmeF92aWYgKnd2aWYsIHUzMiBxdWV1ZXMsCisJCQkgIHN0cnVj dCBza19idWZmX2hlYWQgKmRyb3BwZWQpCit7CisJc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgeworCQlp ZiAoIShCSVQoaSkgJiBxdWV1ZXMpKQorCQkJY29udGludWU7CisJCXF1ZXVlID0gJnd2aWYtPnR4 X3F1ZXVlW2ldOworCQlpZiAoZHJvcHBlZCkKKwkJCXdmeF90eF9xdWV1ZV9kcm9wKHd2aWYsIHF1 ZXVlLCBkcm9wcGVkKTsKKwl9CisJaWYgKHd2aWYtPndkZXYtPmNoaXBfZnJvemVuKQorCQlyZXR1 cm47CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsKKwkJaWYgKCEo QklUKGkpICYgcXVldWVzKSkKKwkJCWNvbnRpbnVlOworCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1 ZVtpXTsKKwkJaWYgKHdhaXRfZXZlbnRfdGltZW91dCh3dmlmLT53ZGV2LT50eF9kZXF1ZXVlLAor CQkJCSAgICAgICB3ZnhfdHhfcXVldWVfZW1wdHkod3ZpZiwgcXVldWUpLAorCQkJCSAgICAgICBt c2Vjc190b19qaWZmaWVzKDEwMDApKSA8PSAwKQorCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2 LAorCQkJCSAiZnJhbWVzIHF1ZXVlZCB3aGlsZSBmbHVzaGluZyB0eCBxdWV1ZXM/Iik7CisJfQor fQorCit2b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwKKwkgICAgICAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQoreworCXN0cnVj dCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBkcm9wcGVk OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmOworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0 IHNrX2J1ZmYgKnNrYjsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRyb3BwZWQpOworCWlmICh2 aWYpIHsKKwkJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJCXdmeF9m bHVzaF92aWYod3ZpZiwgcXVldWVzLCBkcm9wID8gJmRyb3BwZWQgOiBOVUxMKTsKKwl9IGVsc2Ug eworCQl3dmlmID0gTlVMTDsKKwkJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2 aWYpKSAhPSBOVUxMKQorCQkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAmZHJv cHBlZCA6IE5VTEwpOworCX0KKwl3ZnhfdHhfZmx1c2god2Rldik7CisJaWYgKHdkZXYtPmNoaXBf ZnJvemVuKQorCQl3ZnhfcGVuZGluZ19kcm9wKHdkZXYsICZkcm9wcGVkKTsKKwl3aGlsZSAoKHNr YiA9IHNrYl9kZXF1ZXVlKCZkcm9wcGVkKSkgIT0gTlVMTCkgeworCQloaWYgPSAoc3RydWN0IGhp Zl9tc2cgKilza2ItPmRhdGE7CisJCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRl cmZhY2UpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoSUVFRTgwMjExX1NLQl9D Qihza2IpKTsKKwkJd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7CisJfQorfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmggYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjZiZWNmMWY4Njc2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBEYXRhcGF0aCBpbXBs ZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqLwor I2lmbmRlZiBXRlhfREFUQV9UWF9ICisjZGVmaW5lIFdGWF9EQVRBX1RYX0gKKworI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgImhp Zl9hcGlfY21kLmgiCisjaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKKworc3RydWN0IHdmeF90eF9w cml2Oworc3RydWN0IHdmeF9kZXY7CitzdHJ1Y3Qgd2Z4X3ZpZjsKKworc3RydWN0IHR4X3BvbGlj eSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWludCB1c2FnZV9jb3VudDsKKwl1OCByYXRl c1sxMl07CisJYm9vbCB1cGxvYWRlZDsKK307CisKK3N0cnVjdCB0eF9wb2xpY3lfY2FjaGUgewor CXN0cnVjdCB0eF9wb2xpY3kgY2FjaGVbSElGX1RYX1JFVFJZX1BPTElDWV9NQVhdOworCS8qIEZJ WE1FOiB1c2UgYSB0cmVlcyBhbmQgZHJvcCBoYXNoIGZyb20gdHhfcG9saWN5ICovCisJc3RydWN0 IGxpc3RfaGVhZCB1c2VkOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlzcGlubG9ja190IGxv Y2s7Cit9OworCitzdHJ1Y3Qgd2Z4X3R4X3ByaXYgeworCWt0aW1lX3QgeG1pdF90aW1lc3RhbXA7 CisJdW5zaWduZWQgY2hhciBpY3Zfc2l6ZTsKK307CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0 KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKK3ZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCit2b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAorCSAgICBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF9kZXYg KndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOwordm9pZCB3ZnhfZmx1c2goc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJICAgICAg IHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF90eF9w cml2ICp3Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVl ZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisJ dHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlyZXR1cm4gKHN0cnVjdCB3ZnhfdHhf cHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGhpZl9yZXFfdHggKndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlz dHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOworCXN0cnVj dCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7CisKKwly ZXR1cm4gcmVxOworfQorCisjZW5kaWYKLS0gCjIuMzAuMgoK