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 20D13C433FE for ; Mon, 20 Sep 2021 16:14:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0195E60F70 for ; Mon, 20 Sep 2021 16:14:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243530AbhITQP6 (ORCPT ); Mon, 20 Sep 2021 12:15:58 -0400 Received: from mail-mw2nam10on2075.outbound.protection.outlook.com ([40.107.94.75]:38624 "EHLO NAM10-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S242800AbhITQOZ (ORCPT ); Mon, 20 Sep 2021 12:14:25 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CdFtHj1aCRqXIoA58sak2nMOX2agBhrFs3TjVP4IGjeceKuo5wbrofdvuyQzvi/eJV8a/XyWc9D5xS0c5+9p1+SHeyqhJNxLG12Od3gRqk571ovVOdxJ9PkWJLAUOgyjnf7glSaukLPsiGzxLFMl6CUEkocPG8xtfO61k+IRfCI3uqMGH5I8ryTClQEwFWB32Fvabmh7zZblZ5ltUuPMG1iyJ8B2r6aF18hLC7RdyZzjOlOtkcpuYA4ba++fWsjPKmoILUEodFGER5CYUUqZNgJZ1oDJ6qS0RI8bxVDZmG0FVhxh5eEgccUhXglZy/Tur51H9Cv1fHDOTHnBIkGmfg== 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=ybgEuCsNV9bbyHcBBr4CpymIperNZ1kVekePC1cgfQg=; b=NvH9NPZhRvF+x5vyocr2CIK3s1iknXlgIvy9YL2tWm2CfhNW3jebXZ6IVx4HDN+1JAtJbkbBrRIsc/Rn6CyZ6Srr7aleJrIlSZIRTbuiLN62hKgVUDeBFeBJ5/SprtsLuD/w/634lFGFJMUD4zDhu+at0So1NaVKhz92TjHg4QAjGkf8wzmHcBatfo8oKogRyP9QJyQH0PjsALOhzVPA2idS6j2UXKIyjKUGh3YjeIeQZSjp3Cfm/tElk+yfQ36wwXCfy87xqYNRaJdzoDM0ydYBZN4s3L2SpszYjeXeocRDWSqJpZA6nKp3XSf74rTN/tFwarT/Rnj7HjIvAmEWlQ== 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=ybgEuCsNV9bbyHcBBr4CpymIperNZ1kVekePC1cgfQg=; b=SICZq/eQ0loABuXipZwkSEKbuYWz++cL45kqgPGxnurOkDqfPcKW2fgyc5888OLnP04l/fTiPNeZW+dlJUEfZb1+Hc62DVx44yGOACsN+jDtyomFWQqDh5B0VDBvNBy2r7CfVXVNYIfAiaXvfK/vXgrKAjiKljhsLLR32yguyCA= 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:41 +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:41 +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 19/24] wfx: add sta.c/sta.h Date: Mon, 20 Sep 2021 18:11:31 +0200 Message-Id: <20210920161136.2398632-20-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:38 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2825e139-6c0f-408c-1259-08d97c517899 X-MS-TrafficTypeDiagnostic: SN6PR11MB3168: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Q4l27SyrwU8W4m91tNpOyJ1RqS4hFJoc2bFfZzs4FUyj6PiTvpGSgrtK2FrbhzC0TL0FlUcAasIcYQuRnAyBgKpoDJ5zj+KZ6n/+OCy/XrXlKzQQBZhicjCDyUS7GfzlwBfOdoYxP1FVfJGk8OeppHMVoayCvpaBcmMm4lxJbz4q6QA5O4qsI5S2BNjRthEE8J4JAuOyw2tB4L3L+IaqqJ91NJb/PDxKAKhnLDIC9pLQwag51K5tU7cLLwbcFG5/iHHerGA7EwO244wJ0o5zsRLG6twGXZJCMcEy8hdJSRQngOyNtFOdkTHcabT0+JnxWm/DiP1MIEByvY6o2SFTzyyWwGbHjaW7THq7/PQs2zgYeppot7gZmnBjo8pHNMOhTDGvefyFb2139wCS/AzK2e5xDepaZVmkz0FiOYpGUEcaq6fzHt94wf2ugZ5YfN/Ui9P9fJwnZATwgA/Hm5qdhs5HaV3oVm57RTo3BNgFFtVOPIO+fAn2rRwJmbJ4t34jKzL4EPAD9U05gh3F/WSUoq3IIsACPIWJiQe8yrX5MaaOqBYGCxa9NpiyAazXLufwMOeXamkD5hshh0id+kWGOLhK6KiurNT8stlAwvx8TdaEVqc7I6A3W8NqjJ02T42IQTL7yS7bhaJautEsjD8Vkw== 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: Ag2GmHrnQPWJ3VkBre1lP7sMV0aC3uuDN8V/1HHS3ZCutlHuwUaDPnbNSJmE/LDcmDfgQiGlMMi05/7s9ChxwOL2WwbmgqA8dbZT2+Tti6TyZoq9tG6IDq7yS/1mz3ufM5aZlZKKkViW02+vAMEsHg/uI8MsL5whDp+/xh0kXOrd3AyS9W+XjPygzyvzI1hFUyOtbB68NBjaj24EikG72rzRE5615M/ubSqtMeyn2FpqPsAPp5S6/jBxxXgQNtZv53AoRns2FKwzxH7BHWmXKM5jdgXwbSLmEIpYQa+wWaQIy++srlYH2ZlamN9QgyfPlnRKgVqzPGu87zq1XdKAcFOBR+MY0DhLVaKvHvptq78VmSd+VmXRupOuiXKAzcSdhyYAGdyw3qNF0dkYNiejQ6FXZ/rJLhRZ2Wef1nz6aEXUBkcv5W81UN+YqWT/4Rd7GvD8esCc5qhn4qmTTukmi/Ec5xiqaXRjSirklUq+szsL7VRxyGmOInHyjWCd2H4Gdb7epG3HKKybFwc9+aHGC/pSf22sTbSsD57cbKdqlvFjdm+8dJzJtiAysGZxqfEcsxray+HGsXTwigYeoSswS5lHnFs6kmemm1+UaqNdV2Iozd0az2sY4DRSRkL37EuV6112Jn1CAu+DhJGPibEL3b3uwbD7w976LMMGyJ0vRFxy5p78tuTm2Vh9DQ6fbmeVXcXzndeENxwHSIeyTRWpyKhdbOJkahvhwQ46fbO+gE3v7LKl7GDxpWJH18htiKHM/WDBFRpD3c9Xne6WIJohW8633rfiuqj9zH1YKa98UsNHoFGx+tQA1EDMNkOPnp73 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2825e139-6c0f-408c-1259-08d97c517899 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:40.9907 (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: NgfhmwaQT8pTr1qFHOECn03UJbjI4IOL6a8q3LhGnMCWcUrM2wF0XaAXmurJRVkyKQl4MSPA0Py2YYgq2p8jDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3168 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA4MzIgKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNzMgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDkwNSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmIwYWViZTBlNmMzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw4MzIgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvKiBUaGUgZGV2aWNlIG9ubHkgc3VwcG9ydHMg MkdIeiAqLworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+ aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwg c2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKKwkJCWlm IChpID49IHNiYW5kLT5uX2JpdHJhdGVzKQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3Vw cG9ydGVkIGJhc2ljIHJhdGVcbiIpOworCQkJZWxzZQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJp dHJhdGVzW2ldLmh3X3ZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdm eF9jb29saW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IHdmeF9kZXYgKndkZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAor CQkJCQkgICAgc3RydWN0IHdmeF9kZXYsCisJCQkJCSAgICBjb29saW5nX3RpbWVvdXRfd29yayk7 CisKKwl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7CisJd2Z4X3R4X3VubG9jayh3ZGV2KTsKK30K Kwordm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0 YV9ub3RpZnlfY21kIGNtZCkKK3sKKwlpZiAoY21kID09IFNUQV9OT1RJRllfQVdBS0UpIHsKKwkJ LyogRGV2aWNlIHJlY292ZXIgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJCWlmIChjYW5jZWxfZGVs YXllZF93b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaykpCisJCQl3ZnhfdHhfdW5sb2Nr KHdkZXYpOworCX0gZWxzZSB7CisJCS8qIERldmljZSBpcyB0b28gaG90ICovCisJCXNjaGVkdWxl X2RlbGF5ZWRfd29yaygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmssIDEwICogSFopOworCQl3 ZnhfdHhfbG9jayh3ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVhY29u KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGZpbHRlcl9iZWFjb24pCit7CisJc3RhdGljIGNv bnN0IHN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgZmlsdGVyX2llc1tdID0geworCQl7CisJCQku aWVfaWQgICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLAorCQkJLmhhc19jaGFuZ2Vk ICA9IDEsCisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQkJ Lm91aSAgICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QSB9LAorCQl9LCB7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJ CQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9LCB7CisJCQku aWVfaWQgICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sCisJCQkuaGFzX2NoYW5nZWQgID0gMSwK KwkJCS5ub19sb25nZXIgICAgPSAxLAorCQkJLmhhc19hcHBlYXJlZCA9IDEsCisJCX0sIHsKKwkJ CS5pZV9pZCAgICAgICAgPSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSCwKKwkJCS5oYXNfY2hhbmdl ZCAgPSAxLAorCQkJLm5vX2xvbmdlciAgICA9IDEsCisJCQkuaGFzX2FwcGVhcmVkID0gMSwKKwkJ fQorCX07CisKKwlpZiAoIWZpbHRlcl9iZWFjb24pIHsKKwkJaGlmX2JlYWNvbl9maWx0ZXJfY29u dHJvbCh3dmlmLCAwLCAxKTsKKwl9IGVsc2UgeworCQloaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFi bGUod3ZpZiwgQVJSQVlfU0laRShmaWx0ZXJfaWVzKSwgZmlsdGVyX2llcyk7CisJCWhpZl9iZWFj b25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgSElGX0JFQUNPTl9GSUxURVJfRU5BQkxFLCAwKTsKKwl9 Cit9CisKK3ZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2Zs YWdzLCB1NjQgdW51c2VkKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsKKwlzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCWJvb2wgZmlsdGVyX2Jzc2lkLCBmaWx0ZXJf cHJicmVxLCBmaWx0ZXJfYmVhY29uOworCisJLyogTm90ZXM6CisJICogICAtIFByb2JlIHJlc3Bv bnNlcyAoRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIGFyZSBuZXZlciBmaWx0ZXJlZAorCSAqICAg LSBQUy1Qb2xsIChGSUZfUFNQT0xMKSBhcmUgbmV2ZXIgZmlsdGVyZWQKKwkgKiAgIC0gUlRTLCBD VFMgYW5kIEFjayAoRklGX0NPTlRST0wpIGFyZSBhbHdheXMgZmlsdGVyZWQKKwkgKiAgIC0gQnJv a2VuIGZyYW1lcyAoRklGX0ZDU0ZBSUwgYW5kIEZJRl9QTENQRkFJTCkgYXJlIGFsd2F5cyBmaWx0 ZXJlZAorCSAqICAgLSBGaXJtd2FyZSBkb2VzICh5ZXQpIGFsbG93IHRvIGZvcndhcmQgdW5pY2Fz dCB0cmFmZmljIHNlbnQgdG8KKwkgKiAgICAgb3RoZXIgc3RhdGlvbnMgKGFrYS4gcHJvbWlzY3Vv dXMgbW9kZSkKKwkgKi8KKwkqdG90YWxfZmxhZ3MgJj0gRklGX0JDTl9QUkJSRVNQX1BST01JU0Mg fCBGSUZfQUxMTVVMVEkgfCBGSUZfT1RIRVJfQlNTIHwKKwkJCUZJRl9QUk9CRV9SRVEgfCBGSUZf UFNQT0xMOworCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7CisJd2hpbGUgKCh3dmlm ID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7CisJCW11dGV4X2xvY2soJnd2 aWYtPnNjYW5fbG9jayk7CisKKwkJLyogTm90ZTogRklGX0JDTl9QUkJSRVNQX1BST01JU0MgY292 ZXJzIHByb2JlIHJlc3BvbnNlIGFuZAorCQkgKiBiZWFjb25zIGZyb20gb3RoZXIgQlNTCisJCSAq LworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCisJCQlmaWx0 ZXJfYmVhY29uID0gZmFsc2U7CisJCWVsc2UKKwkJCWZpbHRlcl9iZWFjb24gPSB0cnVlOworCQl3 ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCBmaWx0ZXJfYmVhY29uKTsKKworCQlpZiAoKnRvdGFsX2Zs YWdzICYgRklGX09USEVSX0JTUykKKwkJCWZpbHRlcl9ic3NpZCA9IGZhbHNlOworCQllbHNlCisJ CQlmaWx0ZXJfYnNzaWQgPSB0cnVlOworCisJCS8qIEluIEFQIG1vZGUsIGNoaXAgY2FuIHJlcGx5 IHRvIHByb2JlIHJlcXVlc3QgaXRzZWxmICovCisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJP QkVfUkVRICYmCisJCSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsK KwkJCWRldl9kYmcod2Rldi0+ZGV2LCAiZG8gbm90IGZvcndhcmQgcHJvYmUgcmVxdWVzdCBpbiBB UCBtb2RlXG4iKTsKKwkJCSp0b3RhbF9mbGFncyAmPSB+RklGX1BST0JFX1JFUTsKKwkJfQorCisJ CWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVRKQorCQkJZmlsdGVyX3ByYnJlcSA9IGZh bHNlOworCQllbHNlCisJCQlmaWx0ZXJfcHJicmVxID0gdHJ1ZTsKKwkJaGlmX3NldF9yeF9maWx0 ZXIod3ZpZiwgZmlsdGVyX2Jzc2lkLCBmaWx0ZXJfcHJicmVxKTsKKworCQltdXRleF91bmxvY2so Jnd2aWYtPnNjYW5fbG9jayk7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7 Cit9CisKK3N0YXRpYyBpbnQgd2Z4X2dldF9wc190aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBib29sICplbmFibGVfcHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuMCA9 IE5VTEwsICpjaGFuMSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnd2 aWYtPndkZXYtPmh3LT5jb25mOworCisJV0FSTighd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAm JiBlbmFibGVfcHMsCisJICAgICAiZW5hYmxlX3BzIGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNzb2Np YXRlZCIpOworCWlmICh3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMCkpCisJCWNoYW4wID0gd2Rl dl90b193dmlmKHd2aWYtPndkZXYsIDApLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsKKwlp ZiAod2Rldl90b193dmlmKHd2aWYtPndkZXYsIDEpKQorCQljaGFuMSA9IHdkZXZfdG9fd3ZpZih3 dmlmLT53ZGV2LCAxKS0+dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47CisJaWYgKGNoYW4wICYm IGNoYW4xICYmIHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlpZiAo Y2hhbjAtPmh3X3ZhbHVlID09IGNoYW4xLT5od192YWx1ZSkgeworCQkJLyogSXQgaXMgdXNlbGVz cyB0byBlbmFibGUgUFMgaWYgY2hhbm5lbHMgYXJlIHRoZSBzYW1lLiAqLworCQkJaWYgKGVuYWJs ZV9wcykKKwkJCQkqZW5hYmxlX3BzID0gZmFsc2U7CisJCQlpZiAod3ZpZi0+dmlmLT5ic3NfY29u Zi5hc3NvYyAmJiB3dmlmLT52aWYtPmJzc19jb25mLnBzKQorCQkJCWRldl9pbmZvKHd2aWYtPndk ZXYtPmRldiwgImlnbm9yaW5nIHJlcXVlc3RlZCBQUyBtb2RlIik7CisJCQlyZXR1cm4gLTE7CisJ CX0gZWxzZSB7CisJCQkvKiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIFBTIGlmIGNoYW5uZWxz CisJCQkgKiBhcmUgZGlmZmVyZW50LgorCQkJICovCisJCQlpZiAoZW5hYmxlX3BzKQorCQkJCSpl bmFibGVfcHMgPSB0cnVlOworCQkJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQgPiAt MSkKKwkJCQlyZXR1cm4gd3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dDsKKwkJCWVsc2UgaWYg KHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAzLCAyKSkKKwkJCQlyZXR1cm4gMDsKKwkJ CWVsc2UKKwkJCQlyZXR1cm4gMzA7CisJCX0KKwl9CisJaWYgKGVuYWJsZV9wcykKKwkJKmVuYWJs ZV9wcyA9IHd2aWYtPnZpZi0+YnNzX2NvbmYucHM7CisJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3Bz X3RpbWVvdXQgPiAtMSkKKwkJcmV0dXJuIHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQ7CisJ ZWxzZSBpZiAod3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiB3dmlmLT52aWYtPmJzc19jb25m LnBzKQorCQlyZXR1cm4gY29uZi0+ZHluYW1pY19wc190aW1lb3V0OworCWVsc2UKKwkJcmV0dXJu IC0xOworfQorCitpbnQgd2Z4X3VwZGF0ZV9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlp bnQgcHNfdGltZW91dDsKKwlib29sIHBzOworCisJaWYgKCF3dmlmLT52aWYtPmJzc19jb25mLmFz c29jKQorCQlyZXR1cm4gMDsKKwlwc190aW1lb3V0ID0gd2Z4X2dldF9wc190aW1lb3V0KHd2aWYs ICZwcyk7CisJaWYgKCFwcykKKwkJcHNfdGltZW91dCA9IDA7CisJV0FSTl9PTihwc190aW1lb3V0 IDwgMCk7CisJaWYgKHd2aWYtPnVhcHNkX21hc2spCisJCXBzX3RpbWVvdXQgPSAwOworCisJaWYg KCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRl LAorCQkJCQkgVFVfVE9fSklGRklFUyg1MTIpKSkKKwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2 LAorCQkJICJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgb2Ygc2V0X3BtX21vZGVfY29tcGxldGVcbiIp OworCXJldHVybiBoaWZfc2V0X3BtKHd2aWYsIHBzLCBwc190aW1lb3V0KTsKK30KKworaW50IHdm eF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLAorCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1z ICpwYXJhbXMpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IG9s ZF91YXBzZCA9IHd2aWYtPnVhcHNkX21hc2s7CisKKwlXQVJOX09OKHF1ZXVlID49IGh3LT5xdWV1 ZXMpOworCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7CisJYXNzaWduX2JpdChxdWV1 ZSwgJnd2aWYtPnVhcHNkX21hc2ssIHBhcmFtcy0+dWFwc2QpOworCWhpZl9zZXRfZWRjYV9xdWV1 ZV9wYXJhbXMod3ZpZiwgcXVldWUsIHBhcmFtcyk7CisJaWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIG9sZF91YXBzZCAhPSB3dmlmLT51YXBzZF9t YXNrKSB7CisJCWhpZl9zZXRfdWFwc2RfaW5mbyh3dmlmLCB3dmlmLT51YXBzZF9tYXNrKTsKKwkJ d2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4 KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHct PnByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBOVUxMOworCisJd2hpbGUgKCh3dmlmID0g d3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQorCQloaWZfcnRzX3RocmVzaG9sZCh3 dmlmLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3Np KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCByYXdfcmNwaV9yc3NpKQoreworCS8qIFJTU0k6IHNp Z25lZCBROC4wLCBSQ1BJOiB1bnNpZ25lZCBRNy4xCisJICogUlNTSSA9IFJDUEkgLyAyIC0gMTEw CisJICovCisJaW50IHJjcGlfcnNzaTsKKwlpbnQgY3FtX2V2dDsKKworCXJjcGlfcnNzaSA9IHJh d19yY3BpX3Jzc2kgLyAyIC0gMTEwOworCWlmIChyY3BpX3Jzc2kgPD0gd3ZpZi0+dmlmLT5ic3Nf Y29uZi5jcW1fcnNzaV90aG9sZCkKKwkJY3FtX2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNI T0xEX0VWRU5UX0xPVzsKKwllbHNlCisJCWNxbV9ldnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVT SE9MRF9FVkVOVF9ISUdIOworCWllZWU4MDIxMV9jcW1fcnNzaV9ub3RpZnkod3ZpZi0+dmlmLCBj cW1fZXZ0LCByY3BpX3Jzc2ksIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgdm9pZCB3ZnhfYmVh Y29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCQkJCQkgICAg c3RydWN0IHdmeF92aWYsIGJlYWNvbl9sb3NzX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfYnNz X2NvbmYgKmJzc19jb25mID0gJnd2aWYtPnZpZi0+YnNzX2NvbmY7CisKKwlpZWVlODAyMTFfYmVh Y29uX2xvc3Mod3ZpZi0+dmlmKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsodG9fZGVsYXllZF93 b3JrKHdvcmspLAorCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhic3NfY29uZi0+YmVhY29uX2lu dCkpOworfQorCit2b2lkIHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IGlkeCkKK3sK KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7 CisKKwloaWZfd2VwX2RlZmF1bHRfa2V5X2lkKHd2aWYsIGlkeCk7Cit9CisKK3ZvaWQgd2Z4X3Jl c2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3Zp Zi0+d2RldjsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOworCWhpZl9yZXNldCh3dmlmLCBm YWxzZSk7CisJd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYpOworCWlmICh3dmlmX2NvdW50KHdkZXYp IDw9IDEpCisJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsKKwl3 ZnhfdHhfdW5sb2NrKHdkZXYpOworCXd2aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSBmYWxzZTsKKwlj YW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmspOworCXd2aWYg PSAgTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5V TEwpCisJCXdmeF91cGRhdGVfcG0od3ZpZik7Cit9CisKK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4 X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAo c3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2OworCisJc3RhX3ByaXYtPnZpZl9p ZCA9IHd2aWYtPmlkOworCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9O KQorCQloaWZfc2V0X21mcCh3dmlmLCBzdGEtPm1mcCwgc3RhLT5tZnApOworCisJLyogSW4gc3Rh dGlvbiBtb2RlLCB0aGUgZmlybXdhcmUgaW50ZXJwcmV0cyBuZXcgbGluay1pZCBhcyBhIFRETFMg cGVlciAqLworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJiAhc3Rh LT50ZGxzKQorCQlyZXR1cm4gMDsKKwlzdGFfcHJpdi0+bGlua19pZCA9IGZmeih3dmlmLT5saW5r X2lkX21hcCk7CisJd3ZpZi0+bGlua19pZF9tYXAgfD0gQklUKHN0YV9wcml2LT5saW5rX2lkKTsK KwlXQVJOX09OKCFzdGFfcHJpdi0+bGlua19pZCk7CisJV0FSTl9PTihzdGFfcHJpdi0+bGlua19p ZCA+PSBISUZfTElOS19JRF9NQVgpOworCWhpZl9tYXBfbGluayh3dmlmLCBmYWxzZSwgc3RhLT5h ZGRyLCBzdGFfcHJpdi0+bGlua19pZCwgc3RhLT5tZnApOworCisJcmV0dXJuIDA7Cit9CisKK2lu dCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwKKwkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0 IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRy dl9wcml2OworCisJLyogU2VlIG5vdGUgaW4gd2Z4X3N0YV9hZGQoKSAqLworCWlmICghc3RhX3By aXYtPmxpbmtfaWQpCisJCXJldHVybiAwOworCS8qIEZJWE1FIGFkZCBhIG11dGV4PyAqLworCWhp Zl9tYXBfbGluayh3dmlmLCB0cnVlLCBzdGEtPmFkZHIsIHN0YV9wcml2LT5saW5rX2lkLCBmYWxz ZSk7CisJd3ZpZi0+bGlua19pZF9tYXAgJj0gfkJJVChzdGFfcHJpdi0+bGlua19pZCk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMoc3RydWN0IHdm eF92aWYgKnd2aWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGllZWU4MDIx MV9iZWFjb25fZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOworCWlmICghc2tiKQorCQly ZXR1cm4gLUVOT01FTTsKKwloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElGX1RN UExUX0JDTiwKKwkJCSAgICAgICBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKKwlkZXZfa2ZyZWVf c2tiKHNrYik7CisKKwlza2IgPSBpZWVlODAyMTFfcHJvYmVyZXNwX2dldCh3dmlmLT53ZGV2LT5o dywgd3ZpZi0+dmlmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJaGlmX3NldF90 ZW1wbGF0ZV9mcmFtZSh3dmlmLCBza2IsIEhJRl9UTVBMVF9QUkJSRVMsCisJCQkgICAgICAgQVBJ X1JBVEVfSU5ERVhfQl8xTUJQUyk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCB3Znhfc2V0X21mcF9hcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sK KwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+ aHcsIHd2aWYtPnZpZik7CisJY29uc3QgaW50IGllb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGll ZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJsZSk7CisJY29uc3QgdTE2ICpwdHIgPSAodTE2 ICopY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9SU04sCisJCQkJCQkgc2tiLT5kYXRhICsgaWVv ZmZzZXQsCisJCQkJCQkgc2tiLT5sZW4gLSBpZW9mZnNldCk7CisJY29uc3QgaW50IHBhaXJ3aXNl X2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQgPSA4IC8gc2l6ZW9mKHUxNik7CisJY29uc3QgaW50 IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXplID0gNCAvIHNpemVvZih1MTYpOworCWNvbnN0IGlu dCBha21fc3VpdGVfc2l6ZSA9IDQgLyBzaXplb2YodTE2KTsKKworCWlmIChwdHIpIHsKKwkJcHRy ICs9IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQ7CisJCWlmIChXQVJOX09OKHB0 ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQorCQkJcmV0dXJuOworCQlwdHIgKz0g MSArIHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXplICogKnB0cjsKKwkJaWYgKFdBUk5fT04ocHRy ID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCisJCQlyZXR1cm47CisJCXB0ciArPSAx ICsgYWttX3N1aXRlX3NpemUgKiAqcHRyOworCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2ti X3RhaWxfcG9pbnRlcihza2IpKSkKKwkJCXJldHVybjsKKwkJaGlmX3NldF9tZnAod3ZpZiwgKnB0 ciAmIEJJVCg3KSwgKnB0ciAmIEJJVCg2KSk7CisJfQorfQorCitpbnQgd2Z4X3N0YXJ0X2FwKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0 cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7CisJaW50IHJldDsKKworCXd2aWYgPSAg TlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwp CisJCXdmeF91cGRhdGVfcG0od3ZpZik7CisJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ ZHJ2X3ByaXY7CisJd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMod3ZpZik7CisJcmV0ID0gaGlmX3N0 YXJ0KHd2aWYsICZ2aWYtPmJzc19jb25mLCB3dmlmLT5jaGFubmVsKTsKKwlpZiAocmV0ID4gMCkK KwkJcmV0dXJuIC1FSU87CisJd2Z4X3NldF9tZnBfYXAod3ZpZik7CisJcmV0dXJuIHJldDsKK30K Kwordm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl3ZnhfcmVzZXQod3ZpZik7Cit9CisKK3N0YXRpYyB2b2lk IHdmeF9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCWludCByZXQ7CisJc3RydWN0IGll ZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZ3dmlmLT52aWYtPmJzc19jb25mOworCXN0cnVjdCBj Zmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVO XTsKKwljb25zdCB1OCAqc3NpZGllID0gTlVMTDsKKwlpbnQgc3NpZGxlbiA9IDA7CisKKwl3Znhf dHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsKKworCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod3Zp Zi0+d2Rldi0+aHctPndpcGh5LCB3dmlmLT5jaGFubmVsLAorCQkJICAgICAgIGNvbmYtPmJzc2lk LCBOVUxMLCAwLAorCQkJICAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksIElFRUU4MDIxMV9Q UklWQUNZX0FOWSk7CisJaWYgKCFic3MgJiYgIWNvbmYtPmlic3Nfam9pbmVkKSB7CisJCXdmeF90 eF91bmxvY2sod3ZpZi0+d2Rldik7CisJCXJldHVybjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7 IC8qIHByb3RlY3Qgc3NpZGllICovCisJaWYgKGJzcykKKwkJc3NpZGllID0gaWVlZTgwMjExX2Jz c19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lEKTsKKwlpZiAoc3NpZGllKSB7CisJCXNzaWRsZW4g PSBzc2lkaWVbMV07CisJCWlmIChzc2lkbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJ CXNzaWRsZW4gPSBJRUVFODAyMTFfTUFYX1NTSURfTEVOOworCQltZW1jcHkoc3NpZCwgJnNzaWRp ZVsyXSwgc3NpZGxlbik7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJY2ZnODAyMTFfcHV0 X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIGJzcyk7CisKKwl3dmlmLT5qb2luX2luX3Byb2dy ZXNzID0gdHJ1ZTsKKwlyZXQgPSBoaWZfam9pbih3dmlmLCBjb25mLCB3dmlmLT5jaGFubmVsLCBz c2lkLCBzc2lkbGVuKTsKKwlpZiAocmV0KSB7CisJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mo d3ZpZi0+dmlmKTsKKwkJd2Z4X3Jlc2V0KHd2aWYpOworCX0gZWxzZSB7CisJCS8qIER1ZSB0byBi ZWFjb24gZmlsdGVyaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlCisJCSAqIEFQJ3MgYmVhY29u IGlzIG5vdCBrbm93biBmb3IgdGhlIG1hYzgwMjExIHN0YWNrLgorCQkgKiBEaXNhYmxlIGZpbHRl cmluZyB0ZW1wb3JhcnkgdG8gbWFrZSBzdXJlIHRoZSBzdGFjaworCQkgKiByZWNlaXZlcyBhdCBs ZWFzdCBvbmUKKwkJICovCisJCXdmeF9maWx0ZXJfYmVhY29uKHd2aWYsIGZhbHNlKTsKKwl9CisJ d2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKK30KKworc3RhdGljIHZvaWQgd2Z4X2pvaW5fZmlu YWxpemUoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jz c19jb25mICppbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCWlu dCBhbXBkdV9kZW5zaXR5ID0gMDsKKwlib29sIGdyZWVuZmllbGQgPSBmYWxzZTsKKworCXJjdV9y ZWFkX2xvY2soKTsgLyogcHJvdGVjdCBzdGEgKi8KKwlpZiAoaW5mby0+YnNzaWQgJiYgIWluZm8t Pmlic3Nfam9pbmVkKQorCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEod3ZpZi0+dmlmLCBpbmZv LT5ic3NpZCk7CisJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCWFtcGR1 X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCWlmIChzdGEgJiYgc3RhLT5o dF9jYXAuaHRfc3VwcG9ydGVkICYmCisJICAgICEoaW5mby0+aHRfb3BlcmF0aW9uX21vZGUgJiBJ RUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RBX1BSU05UKSkKKwkJZ3JlZW5maWVsZCA9ICEh KHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCk7CisJcmN1X3JlYWRf dW5sb2NrKCk7CisKKwl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gZmFsc2U7CisJaGlmX3NldF9h c3NvY2lhdGlvbl9tb2RlKHd2aWYsIGFtcGR1X2RlbnNpdHksIGdyZWVuZmllbGQsCisJCQkJIGlu Zm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHd2aWYsIDAp OworCS8qIGJlYWNvbl9sb3NzX2NvdW50IGlzIGRlZmluZWQgdG8gNyBpbiBuZXQvbWFjODAyMTEv bWxtZS5jLiBMZXQncyB1c2UKKwkgKiB0aGUgc2FtZSB2YWx1ZS4KKwkgKi8KKwloaWZfc2V0X2Jz c19wYXJhbXMod3ZpZiwgaW5mby0+YWlkLCA3KTsKKwloaWZfc2V0X2JlYWNvbl93YWtldXBfcGVy aW9kKHd2aWYsIDEsIDEpOworCXdmeF91cGRhdGVfcG0od3ZpZik7Cit9CisKK2ludCB3Znhfam9p bl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm KQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZf cHJpdjsKKworCXdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHd2aWYpOworCXdmeF9qb2luKHd2aWYp OworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3ZnhfdmlmICp3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdmeF9yZXNldCh3dmlm KTsKK30KKworc3RhdGljIHZvaWQgd2Z4X2VuYWJsZV9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2 aWYsIGJvb2wgZW5hYmxlKQoreworCS8qIERyaXZlciBoYXMgQ29udGVudCBBZnRlciBEVElNIEJl YWNvbiBpbiBxdWV1ZS4gRHJpdmVyIGlzIHdhaXRpbmcgZm9yCisJICogYSBzaWduYWwgZnJvbSB0 aGUgZmlybXdhcmUuIFNpbmNlIHdlIGFyZSBnb2luZyB0byBzdG9wIHRvIHNlbmQKKwkgKiBiZWFj b25zLCB0aGlzIHNpZ25hbCB3aWxsIG5ldmVyIGhhcHBlbnMuIFNlZSBhbHNvCisJICogd2Z4X3N1 c3BlbmRfcmVzdW1lX21jKCkKKwkgKi8KKwlpZiAoIWVuYWJsZSAmJiB3ZnhfdHhfcXVldWVzX2hh c19jYWIod3ZpZikpIHsKKwkJd3ZpZi0+YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsKKwkJ d2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7CisJfQorCWhpZl9iZWFjb25fdHJhbnNtaXQo d3ZpZiwgZW5hYmxlKTsKK30KKwordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgc3RydWN0IGll ZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHdmeF9kZXYg KndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211 dGV4KTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMgfHwKKwkgICAg Y2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQgfHwKKwkgICAgY2hhbmdlZCAmIEJTU19D SEFOR0VEX0JTU0lEKSB7CisJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElP TikKKwkJCXdmeF9qb2luKHd2aWYpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURf QVNTT0MpIHsKKwkJaWYgKGluZm8tPmFzc29jIHx8IGluZm8tPmlic3Nfam9pbmVkKQorCQkJd2Z4 X2pvaW5fZmluYWxpemUod3ZpZiwgaW5mbyk7CisJCWVsc2UgaWYgKCFpbmZvLT5hc3NvYyAmJiB2 aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXdmeF9yZXNldCh3dmlmKTsK KwkJZWxzZQorCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAibWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEFT U09DXG4iKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTkZPKSB7 CisJCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCWRldl93YXJu KHdkZXYtPmRldiwgIm1pc3VuZGVyc3Rvb2QgY2hhbmdlOiBCRUFDT05fSU5GT1xuIik7CisJCWhp Zl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgaW5mby0+ZHRpbV9wZXJpb2QsCisJCQkJ CSAgICAgaW5mby0+ZHRpbV9wZXJpb2QpOworCQkvKiBXZSB0ZW1wb3JhcnkgZm9yd2FyZGVkIGJl YWNvbiBmb3Igam9pbiBwcm9jZXNzLiBJdCBpcyBub3cgbm8KKwkJICogbW9yZSBuZWNlc3Nhcnku CisJCSAqLworCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCB0cnVlKTsKKwl9CisKKwlpZiAoY2hh bmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsKKwkJZm9yIChpID0gMDsgaSA8IEhJRl9N QVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTOyBpKyspIHsKKwkJCV9fYmUzMiAqYXJwX2FkZHIg PSAmaW5mby0+YXJwX2FkZHJfbGlzdFtpXTsKKworCQkJaWYgKGluZm8tPmFycF9hZGRyX2NudCA+ IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTKQorCQkJCWFycF9hZGRyID0gTlVMTDsK KwkJCWlmIChpID49IGluZm8tPmFycF9hZGRyX2NudCkKKwkJCQlhcnBfYWRkciA9IE5VTEw7CisJ CQloaWZfc2V0X2FycF9pcHY0X2ZpbHRlcih3dmlmLCBpLCBhcnBfYWRkcik7CisJCX0KKwl9CisK KwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FQX1BST0JFX1JFU1AgfHwKKwkgICAgY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0JFQUNPTikKKwkJd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMod3ZpZik7 CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKQorCQl3ZnhfZW5h YmxlX2JlYWNvbih3dmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsKKworCWlmIChjaGFuZ2VkICYg QlNTX0NIQU5HRURfS0VFUF9BTElWRSkKKwkJaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHd2aWYsIGlu Zm8tPm1heF9pZGxlX3BlcmlvZCAqCisJCQkJCSAgICBVU0VDX1BFUl9UVSAvIFVTRUNfUEVSX01T RUMpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpCisJCWhpZl9l cnBfdXNlX3Byb3RlY3Rpb24od3ZpZiwgaW5mby0+dXNlX2N0c19wcm90KTsKKworCWlmIChjaGFu Z2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpCisJCWhpZl9zbG90X3RpbWUod3ZpZiwgaW5mby0+ dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjApOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9D UU0pCisJCWhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3dmlmLCBpbmZvLT5jcW1fcnNzaV90 aG9sZCwKKwkJCQkJICAgIGluZm8tPmNxbV9yc3NpX2h5c3QpOworCisJaWYgKGNoYW5nZWQgJiBC U1NfQ0hBTkdFRF9UWFBPV0VSKQorCQloaWZfc2V0X291dHB1dF9wb3dlcih3dmlmLCBpbmZvLT50 eHBvd2VyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfUFMpCisJCXdmeF91cGRhdGVf cG0od3ZpZik7CisKKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0 aWMgaW50IHdmeF91cGRhdGVfdGltKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCBz a19idWZmICpza2I7CisJdTE2IHRpbV9vZmZzZXQsIHRpbV9sZW5ndGg7CisJdTggKnRpbV9wdHI7 CisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0od3ZpZi0+d2Rldi0+aHcsIHd2aWYt PnZpZiwKKwkJCQkgICAgICAgJnRpbV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsKKwlpZiAoIXNrYikK KwkJcmV0dXJuIC1FTk9FTlQ7CisJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRpbV9vZmZzZXQ7CisK KwlpZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsKKwkJLyogRmlybXdhcmUgaGFu ZGxlcyBEVElNIGNvdW50ZXIgaW50ZXJuYWxseSAqLworCQl0aW1fcHRyWzJdID0gMDsKKworCQkv KiBTZXQvcmVzZXQgYWlkMCBiaXQgKi8KKwkJaWYgKHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlm KSkKKwkJCXRpbV9wdHJbNF0gfD0gMTsKKwkJZWxzZQorCQkJdGltX3B0cls0XSAmPSB+MTsKKwl9 CisKKwloaWZfdXBkYXRlX2llX2JlYWNvbih3dmlmLCB0aW1fcHRyLCB0aW1fbGVuZ3RoKTsKKwlk ZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3Vw ZGF0ZV90aW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHVwZGF0ZV90aW1f d29yayk7CisKKwl3ZnhfdXBkYXRlX3RpbSh3dmlmKTsKK30KKworaW50IHdmeF9zZXRfdGltKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNl dCkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3Znhfc3Rh X3ByaXYgKnN0YV9kZXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2Owor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIHN0YV9kZXYtPnZpZl9p ZCk7CisKKwlpZiAoIXd2aWYpIHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVk IGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlP OworCX0KKwlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOworCXJldHVybiAw OworfQorCit2b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg ZW51bSBzdGFfbm90aWZ5X2NtZCBub3RpZnlfY21kKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlm X2l0OworCisJaWYgKG5vdGlmeV9jbWQgIT0gU1RBX05PVElGWV9BV0FLRSkKKwkJcmV0dXJuOwor CisJLyogRGV2aWNlIHdvbid0IGJlIGFibGUgdG8gaG9ub3IgQ0FCIGlmIGEgc2NhbiBpcyBpbiBw cm9ncmVzcyBvbiBhbnkKKwkgKiBpbnRlcmZhY2UuIFByZWZlciB0byBza2lwIHRoaXMgRFRJTSBh bmQgd2FpdCBmb3IgdGhlIG5leHQgb25lLgorCSAqLworCXd2aWZfaXQgPSBOVUxMOworCXdoaWxl ICgod3ZpZl9pdCA9IHd2aWZfaXRlcmF0ZSh3dmlmLT53ZGV2LCB3dmlmX2l0KSkgIT0gTlVMTCkK KwkJaWYgKG11dGV4X2lzX2xvY2tlZCgmd3ZpZl9pdC0+c2Nhbl9sb2NrKSkKKwkJCXJldHVybjsK KworCWlmICghd2Z4X3R4X3F1ZXVlc19oYXNfY2FiKHd2aWYpIHx8IHd2aWYtPmFmdGVyX2R0aW1f dHhfYWxsb3dlZCkKKwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAiaW5jb3JyZWN0IHNlcXVl bmNlICglZCBDQUIgaW4gcXVldWUpIiwKKwkJCSB3ZnhfdHhfcXVldWVzX2hhc19jYWIod3ZpZikp OworCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IHRydWU7CisJd2Z4X2JoX3JlcXVlc3Rf dHgod3ZpZi0+d2Rldik7Cit9CisKK2ludCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAgc3Ry dWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykKK3sKKwkvKiBBZ2dyZWdhdGlvbiBp cyBpbXBsZW1lbnRlZCBmdWxseSBpbiBmaXJtd2FyZSAqLworCXN3aXRjaCAocGFyYW1zLT5hY3Rp b24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKKwljYXNlIElFRUU4MDIxMV9B TVBEVV9SWF9TVE9QOgorCQkvKiBKdXN0IGFja25vd2xlZGdlIGl0IHRvIGVuYWJsZSBmcmFtZSBy ZS1vcmRlcmluZyAqLworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQkvKiBMZWF2ZSB0aGUgZmly bXdhcmUgZG9pbmcgaXRzIGJ1c2luZXNzIGZvciB0eCBhZ2dyZWdhdGlvbiAqLworCQlyZXR1cm4g LUVPUE5PVFNVUFA7CisJfQorfQorCitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7 CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X3JlbW92ZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7Cit9 CisKK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJ c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYsCisJCQl1MzIgY2hhbmdlZCkKK3sK K30KKworaW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5j dHhfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaCA9IGNvbmYt PmRlZi5jaGFuOworCisJV0FSTih3dmlmLT5jaGFubmVsLCAiY2hhbm5lbCBvdmVyd3JpdGUiKTsK Kwl3dmlmLT5jaGFubmVsID0gY2g7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdW5hc3Np Z25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2Nv bmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2 aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYu Y2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5lbCAhPSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsK Kwl3dmlmLT5jaGFubmVsID0gTlVMTDsKK30KKworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXJldHVybiAwOworfQorCitpbnQgd2Z4X2Fk ZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpCit7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+ cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2 X3ByaXY7CisKKwl2aWYtPmRyaXZlcl9mbGFncyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxU RVIgfAorCQkJICAgICBJRUVFODAyMTFfVklGX1NVUFBPUlRTX1VBUFNEIHwKKwkJCSAgICAgSUVF RTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNTSTsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZf bXV0ZXgpOworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NU QVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBF X0FQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0 ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogRklYTUU6IHByZWZlciB1c2Ug b2YgY29udGFpbmVyX29mKCkgdG8gZ2V0IHZpZiAqLworCXd2aWYtPnZpZiA9IHZpZjsKKwl3dmlm LT53ZGV2ID0gd2RldjsKKworCXd2aWYtPmxpbmtfaWRfbWFwID0gMTsgLyogbGluay1pZCAwIGlz IHJlc2VydmVkIGZvciBtdWx0aWNhc3QgKi8KKwlJTklUX1dPUksoJnd2aWYtPnVwZGF0ZV90aW1f d29yaywgd2Z4X3VwZGF0ZV90aW1fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPmJl YWNvbl9sb3NzX3dvcmssIHdmeF9iZWFjb25fbG9zc193b3JrKTsKKworCWluaXRfY29tcGxldGlv bigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOworCWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1f bW9kZV9jb21wbGV0ZSk7CisJSU5JVF9XT1JLKCZ3dmlmLT50eF9wb2xpY3lfdXBsb2FkX3dvcmss IHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmspOworCisJbXV0ZXhfaW5pdCgmd3ZpZi0+c2Nhbl9s b2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNjYW5fY29tcGxldGUpOworCUlOSVRfV09S Sygmd3ZpZi0+c2Nhbl93b3JrLCB3ZnhfaHdfc2Nhbl93b3JrKTsKKworCXdmeF90eF9xdWV1ZXNf aW5pdCh3dmlmKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQod3ZpZik7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsKKwkJaWYgKCF3ZGV2LT52aWZbaV0pIHsK KwkJCXdkZXYtPnZpZltpXSA9IHZpZjsKKwkJCXd2aWYtPmlkID0gaTsKKwkJCWJyZWFrOworCQl9 CisJfQorCVdBUk4oaSA9PSBBUlJBWV9TSVpFKHdkZXYtPnZpZiksICJ0cnkgdG8gaW5zdGFudGlh dGUgbW9yZSB2aWYgdGhhbiBzdXBwb3J0ZWQiKTsKKworCWhpZl9zZXRfbWFjYWRkcih3dmlmLCB2 aWYtPmFkZHIpOworCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKworCXd2aWYg PSBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVM TCkgeworCQkvKiBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgQmxvY2sgQWNrcy4gV2UgY2Fu IHJlLWVuYWJsZSB0aGVtICovCisJCWlmICh3dmlmX2NvdW50KHdkZXYpID09IDEpCisJCQloaWZf c2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJCWVsc2UKKwkJCWhpZl9z ZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAwKTsKKwl9CisJcmV0dXJuIHJldDsK K30KKwordm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5k cnZfcHJpdjsKKworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21v ZGVfY29tcGxldGUsIG1zZWNzX3RvX2ppZmZpZXMoMzAwKSk7CisJd2Z4X3R4X3F1ZXVlc19jaGVj a19lbXB0eSh3dmlmKTsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCVdBUk4o d3ZpZi0+bGlua19pZF9tYXAgIT0gMSwgImNvcnJ1cHRlZCBzdGF0ZSIpOworCisJaGlmX3Jlc2V0 KHd2aWYsIGZhbHNlKTsKKwloaWZfc2V0X21hY2FkZHIod3ZpZiwgTlVMTCk7CisJd2Z4X3R4X3Bv bGljeV9pbml0KHd2aWYpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5iZWFj b25fbG9zc193b3JrKTsKKwl3ZGV2LT52aWZbd3ZpZi0+aWRdID0gTlVMTDsKKwl3dmlmLT52aWYg PSBOVUxMOworCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKworCXd2aWYgPSBO VUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkg eworCQkvKiBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgQmxvY2sgQWNrcy4gV2UgY2FuIHJl LWVuYWJsZSB0aGVtICovCisJCWlmICh3dmlmX2NvdW50KHdkZXYpID09IDEpCisJCQloaWZfc2V0 X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJCWVsc2UKKwkJCWhpZl9zZXRf YmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAwKTsKKwl9Cit9CisKK2ludCB3Znhfc3Rh cnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4 X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYg PSBody0+cHJpdjsKKworCVdBUk5fT04oIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmd2Rldi0+ dHhfcGVuZGluZykpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9zdGEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZDdlMzhiZTQyMzUKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oCkBAIC0wLDAg KzEsNzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8q CisgKiBJbXBsZW1lbnRhdGlvbiBvZiBtYWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMp IDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpZm5kZWYgV0ZYX1NUQV9ICisjZGVmaW5lIFdGWF9T VEFfSAorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKK3N0cnVjdCB3ZnhfZGV2Oworc3Ry dWN0IHdmeF92aWY7CisKK3N0cnVjdCB3Znhfc3RhX3ByaXYgeworCWludCBsaW5rX2lkOworCWlu dCB2aWZfaWQ7Cit9OworCisvKiBtYWM4MDIxMSBpbnRlcmZhY2UgKi8KK2ludCB3Znhfc3RhcnQo c3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCB3Znhfc3RvcChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodyk7CitpbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNo YW5nZWQpOworaW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgdTMyIHZhbHVlKTsKK3ZvaWQgd2Z4X3NldF9kZWZhdWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4 KTsKK3ZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVu c2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdz LCB1NjQgdW51c2VkKTsKKworaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK3ZvaWQgd2Z4X3JlbW92ZV9pbnRl cmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYp OworaW50IHdmeF9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3Znhfam9pbl9pYnNzKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK3ZvaWQgd2Z4X2xl YXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYpOworaW50IHdmeF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAorCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhf cXVldWVfcGFyYW1zICpwYXJhbXMpOwordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgc3RydWN0 IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpOworaW50IHdmeF9zdGFfYWRk KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQlz dHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKK2ludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSk7Cit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAgZW51bSBzdGFfbm90aWZ5 X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOworaW50IHdmeF9zZXRfdGltKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNl dCk7CitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFt cyAqcGFyYW1zKTsKK2ludCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs CisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Cit2b2lkIHdmeF9y ZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAy MTFfY2hhbmN0eF9jb25mICpjb25mKTsKK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYs IHUzMiBjaGFuZ2VkKTsKK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3RydWN0IGllZWU4 MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOworCisv KiBIYXJkd2FyZSBBUEkgQ2FsbGJhY2tzICovCit2b2lkIHdmeF9jb29saW5nX3RpbWVvdXRfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCk7Cit2b2lkIHdmeF9z dXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2Nt ZCBjbWQpOwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2aWYs IHU4IHJhd19yY3BpX3Jzc2kpOworaW50IHdmeF91cGRhdGVfcG0oc3RydWN0IHdmeF92aWYgKnd2 aWYpOworCisvKiBPdGhlciBIZWxwZXJzICovCit2b2lkIHdmeF9yZXNldChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZik7Cit1MzIgd2Z4X3JhdGVfbWFza190b19odyhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTMyIHJhdGVzKTsKKworI2VuZGlmCi0tIAoyLjMzLjAKCg==