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.7 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 0F700C433EF for ; Mon, 20 Sep 2021 16:14:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EA63460F58 for ; Mon, 20 Sep 2021 16:14:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243436AbhITQPZ (ORCPT ); Mon, 20 Sep 2021 12:15:25 -0400 Received: from mail-bn7nam10on2065.outbound.protection.outlook.com ([40.107.92.65]:4704 "EHLO NAM10-BN7-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S242686AbhITQOQ (ORCPT ); Mon, 20 Sep 2021 12:14:16 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oFyG13FvhJCdycHE44FyMc6qsyHzcjrUfe/6/LNwvcxEvp7x8wcw1ZegtEJ8UohhMSdKiuTaXMwhIkT5dJERWPedOLO0YX/ztlpdOYHvrDejzeJFC89MQUU2OpIf2ulVEV642ttJ/e2HzW8D9a0hbK0LA4XsBAHC3M75m3inP50o6bNqQ9mo0Ib1eumKUGmjru3e8aMvIsCv0izjKWutf1Rer7M3RhdTBv+XxsgFfwrmCvjlsWkkIkrMVC2UtIQuo/0iusgKivp8Ub6g/ydz5QlEeipaMDyvZlLjaRBYDdMViJv/tzDQFq5NHnGfjIfsalGD/XWHkgf2LpzPfYNCGA== 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; bh=MuASShjszN7CfB9ROyxndQjwwLy50CLbW8teiYyja/k=; b=SPjO+AVaEGUg1TR6TpexijonFfD9ECdRGVSu2taAI+Pn0Ipw9uIFSignTna4e/ZVdpwRLTekFNDiUmziowNyGAq0e39ZmTZ/G3T+oM/IcVS7clmYcHjpki6dzchj7qgqI1nPRswOW3osOge1T1blRq23Hkq/rOqH5rNh+ejCJiJrVS0vSX/+qM+i3QvkHPwGt7F/kYCaZ8j41HG/qSkeB0GAoXp3MUnK8h9mst+eWDuSrxyl8riyfAoPNEW4gCL88dMOuqFncSUOD+lu+HWY0fwObGX7meiaCUoKoYw82qcBsmXklHVGGIRNYFMFNnw4acDdZbrwDC1ssn5sVHKF5w== 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=MuASShjszN7CfB9ROyxndQjwwLy50CLbW8teiYyja/k=; b=WpCoXtCOwfDDMXY5PsauWOHDQKBkqYR4xBxJ6neJRqxNZSyAkvH4/dN/jteJWmC2zJ241qopu58QHqYtrWJwpmf69pXlFWyuVVXhsAn0BLc9nIrl0IhFKE0GjfGTNP33Wj+s2e+Hs7lovSFjreKjRTM1BSp/S6iYpqqNJDYS20k= 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 SN6PR11MB3168.namprd11.prod.outlook.com (2603:10b6:805:c4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.18; Mon, 20 Sep 2021 16:12:38 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd%7]) with mapi id 15.20.4523.018; Mon, 20 Sep 2021 16:12:38 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Kalle Valo Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "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 v7 18/24] wfx: add data_tx.c/data_tx.h Date: Mon, 20 Sep 2021 18:11:30 +0200 Message-Id: <20210920161136.2398632-19-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920161136.2398632-1-Jerome.Pouiller@silabs.com> References: <20210920161136.2398632-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: SA0PR11CA0064.namprd11.prod.outlook.com (2603:10b6:806:d2::9) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 Received: from pc-42.silabs.com (2a01:e34:ecb5:66a0:9876:e1d7:65be:d294) by SA0PR11CA0064.namprd11.prod.outlook.com (2603:10b6:806:d2::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14 via Frontend Transport; Mon, 20 Sep 2021 16:12:36 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: abd4f4ce-388b-4221-efde-08d97c517728 X-MS-TrafficTypeDiagnostic: SN6PR11MB3168: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Yx7MknBhkPiLyQBAHCBXZigphUcfD69G/5U0cxHJITRnLropCB2eQqgnrNBnHJd//BFis+uaqEfRVFwqhz5TIGQpJMCzYFtMJaTbHZvWs7ctEnByKJf6y8OuW+mfyYp8ctlrMW+6f3oesZPdBcH+xRKtiURZnPdn/okb3vdUYs/xk+s2ljFUesX5zI5lLAPVXGBxxJAGnFwh7cxWjyenq/4Nf7DBylr3hYF+WCjm+EKkzCa4lrwQNvVZWbhmuFaOncF7XB4oHtxBsRlpgGTd9+6JN3ymTLt4QvlvdBaUL4GdPgWTzrFSfRfL/dI8t/uAGui6y17XzUI7F6PooyTGPZRcYYCtQQsCP1n835NKodcpNNWxeB8S+zqe65b3qFs7Eyd4UnkKneN723qMe4hIFBy4yR5tAEWYGfHzAGBVdm0O7sx68paZVJgJFwlM7yTbYlrSL0zObPU4jvdXaz24OfHFhA9vefMeLZ55CXpag4aj8i4/Dp63+cXuo5IO27clQRMadAL+fzpfxlyOlJJ+jgExsmXjJqr3rVLbhBgMEg5myuWAEZL1lxZIx7kK2EcP/JiYFjfPvcJCIvb0HbjgirwZSqtPaTe4onUnMdeVSaM94s6+VY7bsJo0YSEFVwBKaVoYFhod/54lx7DiSUnXzw== 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:(366004)(86362001)(1076003)(6666004)(54906003)(5660300002)(8676002)(6916009)(2906002)(38100700002)(8936002)(107886003)(52116002)(186003)(66946007)(66574015)(6486002)(66476007)(4326008)(36756003)(2616005)(508600001)(30864003)(7416002)(66556008)(7696005)(316002)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3uspjPJYOBaMQqRp2ILWjjcncbBl1OAWIgKA4nB4qXKceOONhwv2s8kjQK129qaOAxPHoOd1YB+Muxsoud0emo8XPGmUGmYyj0co4k3VurJ7btDTcN7COvGkYlwGefDlxZhzMP6RmY3iZLNqx8eoBPxUzjzJsV5hP3g/yEq8R3s6yXKk0h4+f5cXD9wteYvR4b3xr8PrMllSIYxq2jLRTD/k85JATFAJ6k5IW2bCeW/dzXZOkPodQhxplNcm5E1nUDMow27HptqnpFeG38Vy7IC5uHBAn2cHxb6+sb8vwl1bKxEHrURVuHnGeRj2p7AXPnTliTeWRuxRRsIEFndVmhqJenO/1q5pOG0ZBRL3bo/q2M0727JsSXftbzoM3fz5VfEeh5T2y9tL/QAWP/bxO2St0CRqvgKwNGX7MNy0mlhadg8IxfpyQhORFntx7gMqzBCqNxo9eJ+66LO0mNrXchhAsidZfazI+4BE1BD6jwiFREYuaAfbjowH+o8Qkspl3jPMDY1rfVMaamfTMmou6DOVnjRvROnYl1m5DXXQR/IwDKeOvMr1+kK9osPIWPOwQa346yZQnmBfJpqyFiEnNeyLNC7igUbiTNVSVQCtf2v9puoWFveUsDrzkLmMPz/B8yK97eJoh4HNaT7SKaq7YduvTqylGjnHVpz4cIK0hz1HY2v0/j2xyhj40LQvPuaEYDR4+g4JgtpN4RirbSylYKh6R6s3ZgNssHDfBJm6/+OMLBAR8voLoSVcN+1FU7C5RSOifK55CDKw9DYNRgIbtkDmbB2ZVTafYRKWSoiRM2OIs6Fo+LTqp1h4GA60ka8R X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: abd4f4ce-388b-4221-efde-08d97c517728 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2021 16:12:38.5491 (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: +f3OOskXJS41Rk7pM013pea/IfVPJ0b3s+kpL9Sl8GcJk4MzASJw3gURyvzdzQBd3MPW/6cAhSKwO/hBM0r/Eg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3168 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jIHwgNTk2ICsr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0 YV90eC5oIHwgIDY4ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA2NjQgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRh X3R4LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFf dHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTI1OGVmMzlkZjcyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmMKQEAgLTAs MCArMSw1OTYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBEYXRhIHRyYW5zbWl0dGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkYXRhX3R4LmgiCisjaW5j bHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJzdGEuaCIKKyNpbmNsdWRl ICJxdWV1ZS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhY2VzLmgiCisjaW5j bHVkZSAiaGlmX3R4X21pYi5oIgorCitzdGF0aWMgaW50IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0 ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOworCisJaWYgKHJh dGUtPmlkeCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFf VFhfUkNfTUNTKSB7CisJCWlmIChyYXRlLT5pZHggPiA3KSB7CisJCQlXQVJOKDEsICJ3cm9uZyBy YXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQly ZXR1cm4gcmF0ZS0+aWR4ICsgMTQ7CisJfQorCS8qIFRoZSBkZXZpY2Ugb25seSBzdXBwb3J0IDJH SHosIGVsc2UgYmFuZCBpbmZvcm1hdGlvbiBzaG91bGQgYmUKKwkgKiByZXRyaWV2ZWQgZnJvbSBp ZWVlODAyMTFfdHhfaW5mbworCSAqLworCWJhbmQgPSB3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05M ODAyMTFfQkFORF8yR0haXTsKKwlpZiAocmF0ZS0+aWR4ID49IGJhbmQtPm5fYml0cmF0ZXMpIHsK KwkJV0FSTigxLCAid3JvbmcgcmF0ZS0+aWR4IHZhbHVlOiAlZCIsIHJhdGUtPmlkeCk7CisJCXJl dHVybiAtMTsKKwl9CisJcmV0dXJuIGJhbmQtPmJpdHJhdGVzW3JhdGUtPmlkeF0uaHdfdmFsdWU7 Cit9CisKKy8qIFRYIHBvbGljeSBjYWNoZSBpbXBsZW1lbnRhdGlvbiAqLworCitzdGF0aWMgdm9p ZCB3ZnhfdHhfcG9saWN5X2J1aWxkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgdHhfcG9s aWN5ICpwb2xpY3ksCisJCQkJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcykKK3sKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7CisJaW50IGksIHJhdGVpZDsKKwl1OCBj b3VudDsKKworCVdBUk4ocmF0ZXNbMF0uaWR4IDwgMCwgImludmFsaWQgcmF0ZSBwb2xpY3kiKTsK KwltZW1zZXQocG9saWN5LCAwLCBzaXplb2YoKnBvbGljeSkpOworCWZvciAoaSA9IDA7IGkgPCBJ RUVFODAyMTFfVFhfTUFYX1JBVEVTOyArK2kpIHsKKwkJaWYgKHJhdGVzW2ldLmlkeCA8IDApCisJ CQlicmVhazsKKwkJV0FSTl9PTihyYXRlc1tpXS5jb3VudCA+IDE1KTsKKwkJcmF0ZWlkID0gd2Z4 X2dldF9od19yYXRlKHdkZXYsICZyYXRlc1tpXSk7CisJCS8qIFBhY2sgdHdvIHZhbHVlcyBpbiBl YWNoIGJ5dGUgb2YgcG9saWN5LT5yYXRlcyAqLworCQljb3VudCA9IHJhdGVzW2ldLmNvdW50Owor CQlpZiAocmF0ZWlkICUgMikKKwkJCWNvdW50IDw8PSA0OworCQlwb2xpY3ktPnJhdGVzW3JhdGVp ZCAvIDJdIHw9IGNvdW50OworCX0KK30KKworc3RhdGljIGJvb2wgdHhfcG9saWN5X2lzX2VxdWFs KGNvbnN0IHN0cnVjdCB0eF9wb2xpY3kgKmEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHR4X3Bv bGljeSAqYikKK3sKKwlyZXR1cm4gIW1lbWNtcChhLT5yYXRlcywgYi0+cmF0ZXMsIHNpemVvZihh LT5yYXRlcykpOworfQorCitzdGF0aWMgaW50IHdmeF90eF9wb2xpY3lfZmluZChzdHJ1Y3QgdHhf cG9saWN5X2NhY2hlICpjYWNoZSwKKwkJCSAgICAgIHN0cnVjdCB0eF9wb2xpY3kgKndhbnRlZCkK K3sKKwlzdHJ1Y3QgdHhfcG9saWN5ICppdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZj YWNoZS0+dXNlZCwgbGluaykKKwkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkK KwkJCXJldHVybiBpdCAtIGNhY2hlLT5jYWNoZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0LCAm Y2FjaGUtPmZyZWUsIGxpbmspCisJCWlmICh0eF9wb2xpY3lfaXNfZXF1YWwod2FudGVkLCBpdCkp CisJCQlyZXR1cm4gaXQgLSBjYWNoZS0+Y2FjaGU7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMg dm9pZCB3ZnhfdHhfcG9saWN5X3VzZShzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpjYWNoZSwKKwkJ CSAgICAgIHN0cnVjdCB0eF9wb2xpY3kgKmVudHJ5KQoreworCSsrZW50cnktPnVzYWdlX2NvdW50 OworCWxpc3RfbW92ZSgmZW50cnktPmxpbmssICZjYWNoZS0+dXNlZCk7Cit9CisKK3N0YXRpYyBp bnQgd2Z4X3R4X3BvbGljeV9yZWxlYXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAor CQkJCSBzdHJ1Y3QgdHhfcG9saWN5ICplbnRyeSkKK3sKKwlpbnQgcmV0ID0gLS1lbnRyeS0+dXNh Z2VfY291bnQ7CisKKwlpZiAoIXJldCkKKwkJbGlzdF9tb3ZlKCZlbnRyeS0+bGluaywgJmNhY2hl LT5mcmVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdmeF90eF9wb2xpY3lfZ2V0 KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUg KnJhdGVzLCBib29sICpyZW5ldykKK3sKKwlpbnQgaWR4OworCXN0cnVjdCB0eF9wb2xpY3lfY2Fj aGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKKwlzdHJ1Y3QgdHhfcG9saWN5IHdh bnRlZDsKKwlzdHJ1Y3QgdHhfcG9saWN5ICplbnRyeTsKKworCXdmeF90eF9wb2xpY3lfYnVpbGQo d3ZpZiwgJndhbnRlZCwgcmF0ZXMpOworCisJc3Bpbl9sb2NrX2JoKCZjYWNoZS0+bG9jayk7CisJ aWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKSkgeworCQlXQVJOKDEsICJ1bmFibGUgdG8gZ2V0 IGEgdmFsaWQgVHggcG9saWN5Iik7CisJCXNwaW5fdW5sb2NrX2JoKCZjYWNoZS0+bG9jayk7CisJ CXJldHVybiBISUZfVFhfUkVUUllfUE9MSUNZX0lOVkFMSUQ7CisJfQorCWlkeCA9IHdmeF90eF9w b2xpY3lfZmluZChjYWNoZSwgJndhbnRlZCk7CisJaWYgKGlkeCA+PSAwKSB7CisJCSpyZW5ldyA9 IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIElmIHBvbGljeSBpcyBub3QgZm91bmQgY3JlYXRlIGEg bmV3IG9uZSB1c2luZyB0aGUgb2xkZXN0CisJCSAqIGVudHJ5IGluICJmcmVlIiBsaXN0CisJCSAq LworCQkqcmVuZXcgPSB0cnVlOworCQllbnRyeSA9IGxpc3RfZW50cnkoY2FjaGUtPmZyZWUucHJl diwgc3RydWN0IHR4X3BvbGljeSwgbGluayk7CisJCW1lbWNweShlbnRyeS0+cmF0ZXMsIHdhbnRl ZC5yYXRlcywgc2l6ZW9mKGVudHJ5LT5yYXRlcykpOworCQllbnRyeS0+dXBsb2FkZWQgPSBmYWxz ZTsKKwkJZW50cnktPnVzYWdlX2NvdW50ID0gMDsKKwkJaWR4ID0gZW50cnkgLSBjYWNoZS0+Y2Fj aGU7CisJfQorCXdmeF90eF9wb2xpY3lfdXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0pOwor CWlmIChsaXN0X2VtcHR5KCZjYWNoZS0+ZnJlZSkpCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3 dmlmLT53ZGV2LT5odyk7CisJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKKwlyZXR1cm4g aWR4OworfQorCitzdGF0aWMgdm9pZCB3ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgaW50IGlkeCkKK3sKKwlpbnQgdXNhZ2UsIGxvY2tlZDsKKwlzdHJ1Y3QgdHhfcG9saWN5 X2NhY2hlICpjYWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7CisKKwlpZiAoaWR4ID09IEhJ Rl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19iaCgmY2Fj aGUtPmxvY2spOworCWxvY2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsKKwl1c2FnZSA9 IHdmeF90eF9wb2xpY3lfcmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhdKTsKKwlpZiAo bG9ja2VkICYmICF1c2FnZSkKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHd2aWYtPndkZXYtPmh3 KTsKKwlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOworfQorCitzdGF0aWMgaW50IHdmeF90 eF9wb2xpY3lfdXBsb2FkKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xp Y3kgKnBvbGljaWVzID0gd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmNhY2hlOworCXU4IHRtcF9yYXRl c1sxMl07CisJaW50IGksIGlzX3VzZWQ7CisKKwlkbyB7CisJCXNwaW5fbG9ja19iaCgmd3ZpZi0+ dHhfcG9saWN5X2NhY2hlLmxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3dmlm LT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpOyArK2kpIHsKKwkJCWlzX3VzZWQgPSBtZW16Y21wKHBv bGljaWVzW2ldLnJhdGVzLAorCQkJCQkgIHNpemVvZihwb2xpY2llc1tpXS5yYXRlcykpOworCQkJ aWYgKCFwb2xpY2llc1tpXS51cGxvYWRlZCAmJiBpc191c2VkKQorCQkJCWJyZWFrOworCQl9CisJ CWlmIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKSB7CisJCQlw b2xpY2llc1tpXS51cGxvYWRlZCA9IHRydWU7CisJCQltZW1jcHkodG1wX3JhdGVzLCBwb2xpY2ll c1tpXS5yYXRlcywgc2l6ZW9mKHRtcF9yYXRlcykpOworCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYt PnR4X3BvbGljeV9jYWNoZS5sb2NrKTsKKwkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3ko d3ZpZiwgaSwgdG1wX3JhdGVzKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ3dmlm LT50eF9wb2xpY3lfY2FjaGUubG9jayk7CisJCX0KKwl9IHdoaWxlIChpIDwgQVJSQVlfU0laRSh3 dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3Znhf dHhfcG9saWN5X3VwbG9hZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwg dHhfcG9saWN5X3VwbG9hZF93b3JrKTsKKworCXdmeF90eF9wb2xpY3lfdXBsb2FkKHd2aWYpOwor CXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Cit9CisKK3ZvaWQgd2Z4X3R4X3BvbGljeV9pbml0 KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hl ID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKKwlpbnQgaTsKKworCW1lbXNldChjYWNoZSwgMCwg c2l6ZW9mKCpjYWNoZSkpOworCisJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKKwlJTklU X0xJU1RfSEVBRCgmY2FjaGUtPnVzZWQpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+ZnJlZSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZS0+Y2FjaGUpOyArK2kpCisJCWxp c3RfYWRkKCZjYWNoZS0+Y2FjaGVbaV0ubGluaywgJmNhY2hlLT5mcmVlKTsKK30KKworLyogVHgg aW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIGJvb2wgd2Z4X2lzX2FjdGlvbl9iYWNrKHN0cnVj dCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0g KHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWhkcjsKKworCWlmICghaWVlZTgwMjExX2lzX2FjdGlv bihtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZ210LT51LmFj dGlvbi5jYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX0JBQ0spCisJCXJldHVybiBmYWxzZTsKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHU4IHdmeF90eF9nZXRfbGlua19pZChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGll ZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9CisJ CXN0YSA/IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXYgOiBOVUxMOworCWNv bnN0IHU4ICpkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKKworCWlmIChzdGFfcHJpdiAmJiBz dGFfcHJpdi0+bGlua19pZCkKKwkJcmV0dXJuIHN0YV9wcml2LT5saW5rX2lkOworCWlmICh3dmlm LT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCXJldHVybiAwOworCWlmIChpc19t dWx0aWNhc3RfZXRoZXJfYWRkcihkYSkpCisJCXJldHVybiAwOworCXJldHVybiBISUZfTElOS19J RF9OT1RfQVNTT0NJQVRFRDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3R4X2ZpeHVwX3JhdGVzKHN0 cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMpCit7CisJaW50IGk7CisJYm9vbCBmaW5pc2hl ZDsKKworCS8qIEZpcm13YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRlcyB3aXRoIGRpZmZlcmVu dCBmbGFncyAqLworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKysp IHsKKwkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQkJ cmF0ZXNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRl c1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkpCisJCQlyYXRlc1tpXS5mbGFn cyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAoIShyYXRlc1swXS5mbGFncyAm IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVF RTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOworCX0KKworCS8qIFNvcnQgcmF0ZXMgYW5kIHJlbW92 ZSBkdXBsaWNhdGVzICovCisJZG8geworCQlmaW5pc2hlZCA9IHRydWU7CisJCWZvciAoaSA9IDA7 IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTIC0gMTsgaSsrKSB7CisJCQlpZiAocmF0ZXNbaSAr IDFdLmlkeCA9PSByYXRlc1tpXS5pZHggJiYKKwkJCSAgICByYXRlc1tpXS5pZHggIT0gLTEpIHsK KwkJCQlyYXRlc1tpXS5jb3VudCArPSByYXRlc1tpICsgMV0uY291bnQ7CisJCQkJaWYgKHJhdGVz W2ldLmNvdW50ID4gMTUpCisJCQkJCXJhdGVzW2ldLmNvdW50ID0gMTU7CisJCQkJcmF0ZXNbaSAr IDFdLmlkeCA9IC0xOworCQkJCXJhdGVzW2kgKyAxXS5jb3VudCA9IDA7CisKKwkJCQlmaW5pc2hl ZCA9IGZhbHNlOworCQkJfQorCQkJaWYgKHJhdGVzW2kgKyAxXS5pZHggPiByYXRlc1tpXS5pZHgp IHsKKwkJCQlzd2FwKHJhdGVzW2kgKyAxXSwgcmF0ZXNbaV0pOworCQkJCWZpbmlzaGVkID0gZmFs c2U7CisJCQl9CisJCX0KKwl9IHdoaWxlICghZmluaXNoZWQpOworCS8qIEVuc3VyZSB0aGF0IE1D UzAgb3IgMU1icHMgaXMgcHJlc2VudCBhdCB0aGUgZW5kIG9mIHRoZSByZXRyeSBsaXN0ICovCisJ Zm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQlpZiAocmF0 ZXNbaV0uaWR4ID09IDApCisJCQlicmVhazsKKwkJaWYgKHJhdGVzW2ldLmlkeCA9PSAtMSkgewor CQkJcmF0ZXNbaV0uaWR4ID0gMDsKKwkJCXJhdGVzW2ldLmNvdW50ID0gODsgLyogPT0gaHctPm1h eF9yYXRlX3RyaWVzICovCisJCQlyYXRlc1tpXS5mbGFncyA9IHJhdGVzW2kgLSAxXS5mbGFncyAm CisJCQkJCSBJRUVFODAyMTFfVFhfUkNfTUNTOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogQWxs IHJldHJpZXMgdXNlIGxvbmcgR0kgKi8KKwlmb3IgKGkgPSAxOyBpIDwgSUVFRTgwMjExX1RYX01B WF9SQVRFUzsgaSsrKQorCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JU X0dJOworfQorCitzdGF0aWMgdTggd2Z4X3R4X2dldF9yZXRyeV9wb2xpY3lfaWQoc3RydWN0IHdm eF92aWYgKnd2aWYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8p Cit7CisJYm9vbCB0eF9wb2xpY3lfcmVuZXcgPSBmYWxzZTsKKwl1OCByZXQ7CisKKwlyZXQgPSB3 ZnhfdHhfcG9saWN5X2dldCh3dmlmLCB0eF9pbmZvLT5kcml2ZXJfcmF0ZXMsICZ0eF9wb2xpY3lf cmVuZXcpOworCWlmIChyZXQgPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEKQorCQlkZXZf d2Fybih3dmlmLT53ZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQgVHggcG9saWN5Iik7 CisKKwlpZiAodHhfcG9saWN5X3JlbmV3KSB7CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOwor CQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnR4X3BvbGljeV91cGxvYWRfd29yaykpCisJCQl3 ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHdmeF90eF9nZXRfZnJhbWVfZm9ybWF0KHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhf aW5mbykKK3sKKwlpZiAoISh0eF9pbmZvLT5kcml2ZXJfcmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAy MTFfVFhfUkNfTUNTKSkKKwkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRfTk9OX0hUOworCWVsc2Ug aWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dS RUVOX0ZJRUxEKSkKKwkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRfTUlYRURfRk9STUFUX0hUOwor CWVsc2UKKwkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRfR0ZfSFRfMTFOOworfQorCitzdGF0aWMg aW50IHdmeF90eF9nZXRfaWN2X2xlbihzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkp Cit7CisJaW50IG1pY19zcGFjZTsKKworCWlmICghaHdfa2V5KQorCQlyZXR1cm4gMDsKKwlpZiAo aHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpCisJCXJldHVybiAw OworCW1pY19zcGFjZSA9IChod19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQ KSA/IDggOiAwOworCXJldHVybiBod19rZXktPmljdl9sZW4gKyBtaWNfc3BhY2U7Cit9CisKK3N0 YXRpYyBpbnQgd2Z4X3R4X2lubmVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgw MjExX3N0YSAqc3RhLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGlmX21z ZyAqaGlmX21zZzsKKwlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxOworCXN0cnVjdCB3ZnhfdHhfcHJp diAqdHhfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAy MTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhf aW5mby0+Y29udHJvbC5od19rZXk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpbnQgcXVldWVfaWQgPSBza2JfZ2V0X3F1 ZXVlX21hcHBpbmcoc2tiKTsKKwlzaXplX3Qgb2Zmc2V0ID0gKHNpemVfdClza2ItPmRhdGEgJiAz OworCWludCB3bXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKworCQkJc2l6ZW9mKHN0 cnVjdCBoaWZfcmVxX3R4KSArIG9mZnNldDsKKworCVdBUk4ocXVldWVfaWQgPj0gSUVFRTgwMjEx X05VTV9BQ1MsICJ1bnN1cHBvcnRlZCBxdWV1ZV9pZCIpOworCXdmeF90eF9maXh1cF9yYXRlcyh0 eF9pbmZvLT5kcml2ZXJfcmF0ZXMpOworCisJLyogRnJvbSBub3cgdHhfaW5mby0+Y29udHJvbCBp cyB1bnVzYWJsZSAqLworCW1lbXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXpl b2Yoc3RydWN0IHdmeF90eF9wcml2KSk7CisJLyogRmlsbCB0eF9wcml2ICovCisJdHhfcHJpdiA9 IChzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKil0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCXR4X3By aXYtPmljdl9zaXplID0gd2Z4X3R4X2dldF9pY3ZfbGVuKGh3X2tleSk7CisKKwkvKiBGaWxsIGhp Zl9tc2cgKi8KKwlXQVJOKHNrYl9oZWFkcm9vbShza2IpIDwgd21zZ19sZW4sICJub3QgZW5vdWdo IHNwYWNlIGluIHNrYiIpOworCVdBUk4ob2Zmc2V0ICYgMSwgImF0dGVtcHQgdG8gdHJhbnNtaXQg YW4gdW5hbGlnbmVkIGZyYW1lIik7CisJc2tiX3B1dChza2IsIHR4X3ByaXYtPmljdl9zaXplKTsK Kwlza2JfcHVzaChza2IsIHdtc2dfbGVuKTsKKwltZW1zZXQoc2tiLT5kYXRhLCAwLCB3bXNnX2xl bik7CisJaGlmX21zZyA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKKwloaWZfbXNnLT5s ZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJaGlmX21zZy0+aWQgPSBISUZfUkVRX0lEX1RY OworCWhpZl9tc2ctPmludGVyZmFjZSA9IHd2aWYtPmlkOworCWlmIChza2ItPmxlbiA+IHd2aWYt PndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKSB7CisJCWRldl93YXJuKHd2aWYtPndkZXYt PmRldiwKKwkJCSAicmVxdWVzdGVkIGZyYW1lIHNpemUgKCVkKSBpcyBsYXJnZXIgdGhhbiBtYXhp bXVtIHN1cHBvcnRlZCAoJWQpXG4iLAorCQkJIHNrYi0+bGVuLCB3dmlmLT53ZGV2LT5od19jYXBz LnNpemVfaW5wX2NoX2J1Zik7CisJCXNrYl9wdWxsKHNrYiwgd21zZ19sZW4pOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwkvKiBGaWxsIHR4IHJlcXVlc3QgKi8KKwlyZXEgPSAoc3RydWN0IGhpZl9y ZXFfdHggKiloaWZfbXNnLT5ib2R5OworCS8qIHBhY2tldF9pZCBqdXN0IG5lZWQgdG8gYmUgdW5p cXVlIG9uIGRldmljZS4gMzJiaXRzIGFyZSBtb3JlIHRoYW4KKwkgKiBuZWNlc3NhcnkgZm9yIHRo YXQgdGFzaywgc28gd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgaXQgdG8gYWRkIHNvbWUgZXh0cmEKKwkg KiBkYXRhIGZvciBkZWJ1Zy4KKwkgKi8KKwlyZXEtPnBhY2tldF9pZCA9IGF0b21pY19hZGRfcmV0 dXJuKDEsICZ3dmlmLT53ZGV2LT5wYWNrZXRfaWQpICYgMHhGRkZGOworCXJlcS0+cGFja2V0X2lk IHw9IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkpIDw8IDE2 OworCXJlcS0+cGFja2V0X2lkIHw9IHF1ZXVlX2lkIDw8IDI4OworCisJcmVxLT5mY19vZmZzZXQg PSBvZmZzZXQ7CisJLyogUXVldWUgaW5kZXggYXJlIGludmVydGVkIGJldHdlZW4gZmlybXdhcmUg YW5kIExpbnV4ICovCisJcmVxLT5xdWV1ZV9pZCA9IDMgLSBxdWV1ZV9pZDsKKwlyZXEtPnBlZXJf c3RhX2lkID0gd2Z4X3R4X2dldF9saW5rX2lkKHd2aWYsIHN0YSwgaGRyKTsKKwlyZXEtPnJldHJ5 X3BvbGljeV9pbmRleCA9IHdmeF90eF9nZXRfcmV0cnlfcG9saWN5X2lkKHd2aWYsIHR4X2luZm8p OworCXJlcS0+ZnJhbWVfZm9ybWF0ID0gd2Z4X3R4X2dldF9mcmFtZV9mb3JtYXQodHhfaW5mbyk7 CisJaWYgKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19T SE9SVF9HSSkKKwkJcmVxLT5zaG9ydF9naSA9IDE7CisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVF RTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pCisJCXJlcS0+YWZ0ZXJfZHRpbSA9IDE7CisK KwkvKiBBdXhpbGlhcnkgb3BlcmF0aW9ucyAqLworCXdmeF90eF9xdWV1ZXNfcHV0KHd2aWYsIHNr Yik7CisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RU SU0pCisJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29yayk7CisJd2Z4X2JoX3Jl cXVlc3RfdHgod3ZpZi0+d2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2ws CisJICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBo dy0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhID0gY29udHJvbCA/IGNvbnRyb2wtPnN0YSA6IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90 eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAy MTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc2l6ZV90 IGRyaXZlcl9kYXRhX3Jvb20gPSBzaXplb2ZfZmllbGQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZv LAorCQkJCQkgICAgICAgcmF0ZV9kcml2ZXJfZGF0YSk7CisKKwlCVUlMRF9CVUdfT05fTVNHKHNp emVvZihzdHJ1Y3Qgd2Z4X3R4X3ByaXYpID4gZHJpdmVyX2RhdGFfcm9vbSwKKwkJCSAic3RydWN0 IHR4X3ByaXYgaXMgdG9vIGxhcmdlIik7CisJV0FSTihza2ItPm5leHQgfHwgc2tiLT5wcmV2LCAi c2tiIGlzIGFscmVhZHkgbWVtYmVyIG9mIGEgbGlzdCIpOworCS8qIGNvbnRyb2wudmlmIGNhbiBi ZSBOVUxMIGZvciBpbmplY3RlZCBmcmFtZXMgKi8KKwlpZiAodHhfaW5mby0+Y29udHJvbC52aWYp CisJCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil0eF9pbmZvLT5jb250cm9sLnZpZi0+ZHJ2X3By aXY7CisJZWxzZQorCQl3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIE5VTEwpOworCWlmIChXQVJO X09OKCF3dmlmKSkKKwkJZ290byBkcm9wOworCS8qIEJlY2F1c2Ugb2YgVFhfQU1QRFVfU0VUVVBf SU5fSFcsIG1hYzgwMjExIGRvZXMgbm90IHRyeSB0byBzZW5kIGFueQorCSAqIEJsb2NrQWNrIHNl c3Npb24gbWFuYWdlbWVudCBmcmFtZS4gVGhlIGNoZWNrIGJlbG93IGV4aXN0IGp1c3QgaW4gY2Fz ZS4KKwkgKi8KKwlpZiAod2Z4X2lzX2FjdGlvbl9iYWNrKGhkcikpIHsKKwkJZGV2X2luZm8od2Rl di0+ZGV2LCAiZHJvcCBCQSBhY3Rpb25cbiIpOworCQlnb3RvIGRyb3A7CisJfQorCWlmICh3Znhf dHhfaW5uZXIod3ZpZiwgc3RhLCBza2IpKQorCQlnb3RvIGRyb3A7CisKKwlyZXR1cm47CisKK2Ry b3A6CisJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHdkZXYtPmh3LCBza2IpOworfQorCitz dGF0aWMgdm9pZCB3Znhfc2tiX2R0b3Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19i dWZmICpza2IpCit7CisJc3RydWN0IGhpZl9tc2cgKmhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNr Yi0+ZGF0YTsKKwlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxID0gKHN0cnVjdCBoaWZfcmVxX3R4ICop aGlmLT5ib2R5OworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cp ICsKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkgKworCQkJICAgICAgcmVxLT5m Y19vZmZzZXQ7CisKKwlpZiAoIXd2aWYpIHsKKwkJcHJfd2FybigidmlmIGFzc29jaWF0ZWQgd2l0 aCB0aGUgc2tiIGRvZXMgbm90IGV4aXN0IGFueW1vcmVcbiIpOworCQlyZXR1cm47CisJfQorCXdm eF90eF9wb2xpY3lfcHV0KHd2aWYsIHJlcS0+cmV0cnlfcG9saWN5X2luZGV4KTsKKwlza2JfcHVs bChza2IsIG9mZnNldCk7CisJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHd2aWYtPndkZXYt Pmh3LCBza2IpOworfQorCitzdGF0aWMgdm9pZCB3ZnhfdHhfZmlsbF9yYXRlcyhzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywK KwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpCit7CisJc3RydWN0IGllZWU4 MDIxMV90eF9yYXRlICpyYXRlOworCWludCB0eF9jb3VudDsKKwlpbnQgaTsKKworCXR4X2NvdW50 ID0gYXJnLT5hY2tfZmFpbHVyZXM7CisJaWYgKCFhcmctPnN0YXR1cyB8fCBhcmctPmFja19mYWls dXJlcykKKwkJdHhfY291bnQgKz0gMTsgLyogQWxzbyByZXBvcnQgc3VjY2VzcyAqLworCWZvciAo aSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKKwkJcmF0ZSA9ICZ0eF9p bmZvLT5zdGF0dXMucmF0ZXNbaV07CisJCWlmIChyYXRlLT5pZHggPCAwKQorCQkJYnJlYWs7CisJ CWlmICh0eF9jb3VudCA8IHJhdGUtPmNvdW50ICYmCisJCSAgICBhcmctPnN0YXR1cyA9PSBISUZf U1RBVFVTX1RYX0ZBSUxfUkVUUklFUyAmJgorCQkgICAgYXJnLT5hY2tfZmFpbHVyZXMpCisJCQlk ZXZfZGJnKHdkZXYtPmRldiwgImFsbCByZXRyaWVzIHdlcmUgbm90IGNvbnN1bWVkOiAlZCAhPSAl ZFxuIiwKKwkJCQlyYXRlLT5jb3VudCwgdHhfY291bnQpOworCQlpZiAodHhfY291bnQgPD0gcmF0 ZS0+Y291bnQgJiYgdHhfY291bnQgJiYKKwkJICAgIGFyZy0+dHhlZF9yYXRlICE9IHdmeF9nZXRf aHdfcmF0ZSh3ZGV2LCByYXRlKSkKKwkJCWRldl9kYmcod2Rldi0+ZGV2LCAiaW5jb25zaXN0ZW50 IHR4X2luZm8gcmF0ZXM6ICVkICE9ICVkXG4iLAorCQkJCWFyZy0+dHhlZF9yYXRlLCB3ZnhfZ2V0 X2h3X3JhdGUod2RldiwgcmF0ZSkpOworCQlpZiAodHhfY291bnQgPiByYXRlLT5jb3VudCkgewor CQkJdHhfY291bnQgLT0gcmF0ZS0+Y291bnQ7CisJCX0gZWxzZSBpZiAoIXR4X2NvdW50KSB7CisJ CQlyYXRlLT5jb3VudCA9IDA7CisJCQlyYXRlLT5pZHggPSAtMTsKKwkJfSBlbHNlIHsKKwkJCXJh dGUtPmNvdW50ID0gdHhfY291bnQ7CisJCQl0eF9jb3VudCA9IDA7CisJCX0KKwl9CisJaWYgKHR4 X2NvdW50KQorCQlkZXZfZGJnKHdkZXYtPmRldiwgIiVkIG1vcmUgcmV0cmllcyB0aGFuIGV4cGVj dGVkXG4iLCB0eF9jb3VudCk7Cit9CisKK3ZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdm eF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpCit7CisJY29uc3Qgc3Ry dWN0IHdmeF90eF9wcml2ICp0eF9wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhf aW5mbzsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJ c2tiID0gd2Z4X3BlbmRpbmdfZ2V0KHdkZXYsIGFyZy0+cGFja2V0X2lkKTsKKwlpZiAoIXNrYikg eworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJyZWNlaXZlZCB1bmtub3duIHBhY2tldF9pZCAoJSMu OHgpIGZyb20gY2hpcFxuIiwKKwkJCSBhcmctPnBhY2tldF9pZCk7CisJCXJldHVybjsKKwl9CisJ dHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl0eF9wcml2ID0gd2Z4X3NrYl90eF9w cml2KHNrYik7CisJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCAoKHN0cnVjdCBoaWZfbXNnICop c2tiLT5kYXRhKS0+aW50ZXJmYWNlKTsKKwlXQVJOX09OKCF3dmlmKTsKKwlpZiAoIXd2aWYpCisJ CXJldHVybjsKKworCS8qIE5vdGUgdGhhdCB3ZnhfcGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KCkg Z2V0IGRhdGEgZnJvbSB0eF9pbmZvICovCisJX3RyYWNlX3R4X3N0YXRzKGFyZywgc2tiLCB3Znhf cGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KHdkZXYsIHNrYikpOworCXdmeF90eF9maWxsX3JhdGVz KHdkZXYsIHR4X2luZm8sIGFyZyk7CisJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIHR4X3ByaXYt Pmljdl9zaXplKTsKKworCS8qIEZyb20gbm93LCB5b3UgY2FuIHRvdWNoIHRvIHR4X2luZm8tPnN0 YXR1cywgYnV0IGRvIG5vdCB0b3VjaCB0bworCSAqIHR4X3ByaXYgYW55bW9yZQorCSAqLworCS8q IEZJWE1FOiB1c2UgaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKCkgKi8KKwltZW1zZXQo dHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSwgMCwgc2l6ZW9mKHR4X2luZm8tPnJhdGVfZHJpdmVy X2RhdGEpKTsKKwltZW1zZXQodHhfaW5mby0+cGFkLCAwLCBzaXplb2YodHhfaW5mby0+cGFkKSk7 CisKKwlpZiAoIWFyZy0+c3RhdHVzKSB7CisJCXR4X2luZm8tPnN0YXR1cy50eF90aW1lID0KKwkJ CWxlMzJfdG9fY3B1KGFyZy0+bWVkaWFfZGVsYXkpIC0KKwkJCWxlMzJfdG9fY3B1KGFyZy0+dHhf cXVldWVfZGVsYXkpOworCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05P X0FDSykKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX05PQUNLX1RSQU5T TUlUVEVEOworCQllbHNlCisJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9B Q0s7CisJfSBlbHNlIGlmIChhcmctPnN0YXR1cyA9PSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVRVUVV RSkgeworCQlXQVJOKCFhcmctPnJlcXVldWUsICJpbmNvaGVyZW50IHN0YXR1cyBhbmQgcmVzdWx0 X2ZsYWdzIik7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9B RlRFUl9EVElNKSB7CisJCQl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSBmYWxzZTsgLyog RFRJTSBwZXJpb2QgZWxhcHNlZCAqLworCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3Rp bV93b3JrKTsKKwkJfQorCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9G SUxURVJFRDsKKwl9CisJd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lk IHdmeF9mbHVzaF92aWYoc3RydWN0IHdmeF92aWYgKnd2aWYsIHUzMiBxdWV1ZXMsCisJCQkgIHN0 cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpCit7CisJc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7 CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewor CQlpZiAoIShCSVQoaSkgJiBxdWV1ZXMpKQorCQkJY29udGludWU7CisJCXF1ZXVlID0gJnd2aWYt PnR4X3F1ZXVlW2ldOworCQlpZiAoZHJvcHBlZCkKKwkJCXdmeF90eF9xdWV1ZV9kcm9wKHd2aWYs IHF1ZXVlLCBkcm9wcGVkKTsKKwl9CisJaWYgKHd2aWYtPndkZXYtPmNoaXBfZnJvemVuKQorCQly ZXR1cm47CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsKKwkJaWYg KCEoQklUKGkpICYgcXVldWVzKSkKKwkJCWNvbnRpbnVlOworCQlxdWV1ZSA9ICZ3dmlmLT50eF9x dWV1ZVtpXTsKKwkJaWYgKHdhaXRfZXZlbnRfdGltZW91dCh3dmlmLT53ZGV2LT50eF9kZXF1ZXVl LAorCQkJCSAgICAgICB3ZnhfdHhfcXVldWVfZW1wdHkod3ZpZiwgcXVldWUpLAorCQkJCSAgICAg ICBtc2Vjc190b19qaWZmaWVzKDEwMDApKSA8PSAwKQorCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ ZGV2LAorCQkJCSAiZnJhbWVzIHF1ZXVlZCB3aGlsZSBmbHVzaGluZyB0eCBxdWV1ZXM/Iik7CisJ fQorfQorCit2b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwKKwkgICAgICAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQoreworCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBkcm9w cGVkOworCXN0cnVjdCB3ZnhfdmlmICp3dmlmOworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3Ry dWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRyb3BwZWQpOworCWlm ICh2aWYpIHsKKwkJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJCXdm eF9mbHVzaF92aWYod3ZpZiwgcXVldWVzLCBkcm9wID8gJmRyb3BwZWQgOiBOVUxMKTsKKwl9IGVs c2UgeworCQl3dmlmID0gTlVMTDsKKwkJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYs IHd2aWYpKSAhPSBOVUxMKQorCQkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAm ZHJvcHBlZCA6IE5VTEwpOworCX0KKwl3ZnhfdHhfZmx1c2god2Rldik7CisJaWYgKHdkZXYtPmNo aXBfZnJvemVuKQorCQl3ZnhfcGVuZGluZ19kcm9wKHdkZXYsICZkcm9wcGVkKTsKKwl3aGlsZSAo KHNrYiA9IHNrYl9kZXF1ZXVlKCZkcm9wcGVkKSkgIT0gTlVMTCkgeworCQloaWYgPSAoc3RydWN0 IGhpZl9tc2cgKilza2ItPmRhdGE7CisJCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5p bnRlcmZhY2UpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoSUVFRTgwMjExX1NL Ql9DQihza2IpKTsKKwkJd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7CisJfQorfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmggYi9kcml2ZXJzL25l dC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjE1NTkwYThmYWVmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBEYXRhIHRyYW5z bWl0dGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwg U2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJp Y3Nzb24KKyAqLworI2lmbmRlZiBXRlhfREFUQV9UWF9ICisjZGVmaW5lIFdGWF9EQVRBX1RYX0gK KworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKwor I2luY2x1ZGUgImhpZl9hcGlfY21kLmgiCisjaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKKworc3Ry dWN0IHdmeF90eF9wcml2Oworc3RydWN0IHdmeF9kZXY7CitzdHJ1Y3Qgd2Z4X3ZpZjsKKworc3Ry dWN0IHR4X3BvbGljeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWludCB1c2FnZV9jb3Vu dDsKKwl1OCByYXRlc1sxMl07CisJYm9vbCB1cGxvYWRlZDsKK307CisKK3N0cnVjdCB0eF9wb2xp Y3lfY2FjaGUgeworCXN0cnVjdCB0eF9wb2xpY3kgY2FjaGVbSElGX1RYX1JFVFJZX1BPTElDWV9N QVhdOworCS8qIEZJWE1FOiB1c2UgYSB0cmVlcyBhbmQgZHJvcCBoYXNoIGZyb20gdHhfcG9saWN5 ICovCisJc3RydWN0IGxpc3RfaGVhZCB1c2VkOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlz cGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3Qgd2Z4X3R4X3ByaXYgeworCWt0aW1lX3QgeG1p dF90aW1lc3RhbXA7CisJdW5zaWduZWQgY2hhciBpY3Zfc2l6ZTsKK307CisKK3ZvaWQgd2Z4X3R4 X3BvbGljeV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKK3ZvaWQgd2Z4X3R4X3BvbGljeV91 cGxvYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCit2b2lkIHdmeF90eChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9s LAorCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOwordm9pZCB3 ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCisJICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHdmeF90eF9wcml2ICp3Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sK KwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisKKwlpZiAoIXNrYikKKwkJcmV0 dXJuIE5VTEw7CisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlyZXR1cm4gKHN0 cnVjdCB3ZnhfdHhfcHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Cit9CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IGhpZl9yZXFfdHggKndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYg KnNrYikKK3sKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5k YXRhOworCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYt PmJvZHk7CisKKwlyZXR1cm4gcmVxOworfQorCisjZW5kaWYKLS0gCjIuMzMuMAoK