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=-21.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,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 74BABC433FE for ; Mon, 20 Sep 2021 16:12:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4EF6661175 for ; Mon, 20 Sep 2021 16:12:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242779AbhITQNz (ORCPT ); Mon, 20 Sep 2021 12:13:55 -0400 Received: from mail-dm6nam12on2045.outbound.protection.outlook.com ([40.107.243.45]:61920 "EHLO NAM12-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S242448AbhITQNe (ORCPT ); Mon, 20 Sep 2021 12:13:34 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BfNvZkXoQ8MyEAozyDk3uKV9okXJBn1mUyynJLypL0oco00sCepUP7YfO9HAIMhnCfTYDJTwgh9NlZgq5R1CFj07Ix3jdWHQi15kIvDlh5ojkedjwcUAogMAED32NwnafegBc/yZk6V0aNw2Ba7PNX1bzb9z4vm2a3IsY92nEh6i4HmQABZNkDhYaLJmAjo5QdErC/rb0aYsDSVKbOtTsv9YXPPO1L3P977ivA0+eklu178rDmJLrEd66Kzv/QX0R18p4QkpWfZBqNa+Q/9ee6cUobNjY2tNsD1XloVxtGiHnhB3Feyi+7Tik5CiUFgLGp6LpoW4RZTfEu9nLIds6g== 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=x3CoZ+AhrYp9f2SD5ySiZke4mr6oE7e2csN2AGZmPmI=; b=BIJteWKLCw1vPg/KCv7rtVTaWcVkmmUHbP0A7lXFgo5yrCXnX1425238L90bOqaxdieTBD5gA69/94u+Kf+tSS7PTv1wc2bZAvA3tbng1O8VZ7Z+i1Bc1/l75x9/gHehtbvrXCh8/1Z5t3xqW9E4o14TNZjZWVsLNTCk0A4GpFchxTrCckhUsTe4hM2RBZFUxvoC7SG0y8eSopxqWL67ThYx4VCAVOnWghNCCkAEseQQwB2ViREURQxUscqDyuTukR+cKGcgztkL+kz4T8ymXK18vVES0mMeXMb+/DJ16cfPwqnsKXW25+JtOtruvgeeQujZkTXlm3VGcAXBxyEgzA== 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=x3CoZ+AhrYp9f2SD5ySiZke4mr6oE7e2csN2AGZmPmI=; b=irgqtHqMWKXHdickKH2+7+cdC75GgJy2VG7PviOvLmO5h6+EX4eDdZ92hiGrZTYSqi5Cm143pxPTomVcwmpc3Zb9jP10U94pfq02DOydvtnsrDwVXjM8u3x0ZeDxLNhVqex4vnd85IxApdEZnVjaYe5KRdbuBmmv/wuajyKc7Mg= 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 SA2PR11MB5002.namprd11.prod.outlook.com (2603:10b6:806:fb::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Mon, 20 Sep 2021 16:12:06 +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:05 +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 05/24] wfx: add main.c/main.h Date: Mon, 20 Sep 2021 18:11:17 +0200 Message-Id: <20210920161136.2398632-6-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:03 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 80c87f71-2d47-43ff-822b-08d97c5163be X-MS-TrafficTypeDiagnostic: SA2PR11MB5002: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:208; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AlzjsDZiObLXJhvNQYqCPIomxJjJKA/1YIFr+DRm6NGUv6A04KUR1JT5FpDld9hcdMKpY5OKqTf3CNpwLNZI/qUn63tNm1bGR9Kb+QeqUAZqTCi2p7fgpbSlse6HeAoZUNvz+ofKz/seCoVUi1ecdccTBKTvocmiwBrY/zFSjkr986s/iLacqG6ngq1YBHGABzTDJAAKTewhGVgYWD22iHFhtO90ZI2bwABYSWeEw6odNfB+6d/XaRhB1nXHX9rbQ3GnkQYONNs8oZYmWFVzu6R5OJ5DknFQkD5U7oNXlvu+2omvqVZfYYvN5eRaGPxe//Nq6PfcFHHtrXdWni9i4ktjKs8lRMlvAOnKgKKFR5IanzQDEqMK9S/LpjxTnfJvbOJYQ4mnt87nnnyDpFSK9uLrxWgBKq6iEIwJQj3vczbdJgloPb/uzJCFcj50CJElgSL1R0H/Ara5gIVCYQiwzONTNx0ghY0Ly9ikLHVy46fspT2zLtrjah0iKmmcXPj+JT/JAePISu0MsQvKm6FqnH596IpiDNm1C8SW+4j8x+zKM54i4caVqjLwtR+qJs42I1ncUnlVt3n43E4le+owx+X14oeRXZRahV9qio0mmu7uAs9/3nV/8NaL83MEjJauPlowEJUPKLMDcTSM1rZ66g== 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)(66476007)(36756003)(2616005)(66556008)(107886003)(186003)(54906003)(5660300002)(6486002)(66574015)(66946007)(52116002)(38100700002)(83380400001)(7696005)(6916009)(2906002)(1076003)(4326008)(8936002)(316002)(8676002)(508600001)(86362001)(30864003)(6666004)(7416002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /unptU1Fh0K8M+bGsBUFGHfXxJAS9N06+sJtK8FD+N3diEPk8ZoytnucHlrCgrzLFFjKXCET0DRggw6Yqch9ceFYIVNoos4xDxrAYG71PJgTMpd5rDdDiKtiMeLs3nrR7vaG7Y7sGQnUVHk8WYLUS1HlGsTvNsh4c+2LM3fkoskvc17TCriiysC8FELYcO0PNeecxkCzbqohcGKI9eok8lDsT/i0E9dsVVH3Shiu2uUVqsU7kaibonfK/bTm40MpbX7CTfTwIM137wGisLF2GtX2BK/4Ig12xE0OuX0y4kQggre/2/DS/pf7hvhahxhuhdgnUcmhBPGNEXtkVQRKLtgFaW3U+4hWd45WIyvgJ/66qLKUTCavDaaK96FpDWXDgh8/WcD2ZdXxmp732p9YG/xQCBwstvdRhjmc63HUGULFjtCoIMBYyGUGUuZeHYuYFLho9S4OZs4TA1osW1iZ/AXUsWP95UoEJNFhQEVDlGLJkpzwHMiypN3lc4BBhk1U2XRMYGKjxKmfcniW4Q1VKRT5FuhvQolRthJaX/RsbKdGsxuns6CxWuqnvskANse5iophiAbXzEh0YMbWNfha/9ve6MunExjHPOy8lZUIAHYU+Ui9kyJ6Jwz/f/knGYPMSTGpzdpPPPa0S7Rg5+7IgE581hboZRKgKpjMoXCMZtHkzX4BubNO30Sn4DvCjA4qUw3+c88EIst3wcqofGYbc/xTZ7hqmWiBTcnv9Z2Vjh6tpqbrkUS2eH8D+0dq0zwL/V+MwxlbNR3GCb7DcdB2OkL8WYh9DGbIyM6iDdeKTKfJnG8WBzD3f4hkXq+KuivF X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80c87f71-2d47-43ff-822b-08d97c5163be 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:05.8519 (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: t8uy2MHx5WPa2GclVjrUJNjmjQu5eBrsBMUIr5G8cfhzSyMrvPlx0/AxU1b4H7ezaTCoPZ/aI/uQOaS4sz/L2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5002 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jIHwgNTAzICsrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFp bi5oIHwgIDQzICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA1NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uYjJjYTQ5Y2EzNmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBEZXZpY2UgcHJvYmUg YW5kIHJlZ2lzdGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExh Ym9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICog Q29weXJpZ2h0IChjKSAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMu bmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg c3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4g TGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hh ZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIw MDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKi8KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUg PGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNs dWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgor I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUu aD4KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3ZnguaCIKKyNpbmNsdWRlICJmd2lv LmgiCisjaW5jbHVkZSAiaHdpby5oIgorI2luY2x1ZGUgImJ1cy5oIgorI2luY2x1ZGUgImJoLmgi CisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZGF0YV90eC5oIgorI2luY2x1ZGUgImhpZl90 eF9taWIuaCIKKyNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIgorCisjZGVmaW5lIFdGWF9QRFNfTUFY X1NJWkUgMTUwMAorCitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbGljb24gTGFicyA4MDIuMTEgV2ly ZWxlc3MgTEFOIGRyaXZlciBmb3IgV0YyMDAiKTsKK01PRFVMRV9BVVRIT1IoIkrDqXLDtG1lIFBv dWlsbGVyIDxqZXJvbWUucG91aWxsZXJAc2lsYWJzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKKworI2RlZmluZSBSQVRFVEFCX0VOVChfcmF0ZSwgX3JhdGVpZCwgX2ZsYWdzKSB7IFwK KwkuYml0cmF0ZSAgPSAoX3JhdGUpLCAgIFwKKwkuaHdfdmFsdWUgPSAoX3JhdGVpZCksIFwKKwku ZmxhZ3MgICAgPSAoX2ZsYWdzKSwgIFwKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0 ZSB3ZnhfcmF0ZXNbXSA9IHsKKwlSQVRFVEFCX0VOVCgxMCwgIDAsICAwKSwKKwlSQVRFVEFCX0VO VCgyMCwgIDEsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURVRBQl9FTlQo NTUsICAyLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEVUQUJfRU5UKDEx MCwgMywgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVCg2MCwg IDYsICAwKSwKKwlSQVRFVEFCX0VOVCg5MCwgIDcsICAwKSwKKwlSQVRFVEFCX0VOVCgxMjAsIDgs ICAwKSwKKwlSQVRFVEFCX0VOVCgxODAsIDksICAwKSwKKwlSQVRFVEFCX0VOVCgyNDAsIDEwLCAw KSwKKwlSQVRFVEFCX0VOVCgzNjAsIDExLCAwKSwKKwlSQVRFVEFCX0VOVCg0ODAsIDEyLCAwKSwK KwlSQVRFVEFCX0VOVCg1NDAsIDEzLCAwKSwKK307CisKKyNkZWZpbmUgQ0hBTjJHKF9jaGFubmVs LCBfZnJlcSwgX2ZsYWdzKSB7IFwKKwkuYmFuZCA9IE5MODAyMTFfQkFORF8yR0haLCBcCisJLmNl bnRlcl9mcmVxID0gKF9mcmVxKSwgICAgXAorCS5od192YWx1ZSA9IChfY2hhbm5lbCksICAgIFwK KwkuZmxhZ3MgPSAoX2ZsYWdzKSwgICAgICAgICBcCisJLm1heF9hbnRlbm5hX2dhaW4gPSAwLCAg ICAgXAorCS5tYXhfcG93ZXIgPSAzMCwgICAgICAgICAgIFwKK30KKworc3RhdGljIHN0cnVjdCBp ZWVlODAyMTFfY2hhbm5lbCB3ZnhfMmdoel9jaGFudGFibGVbXSA9IHsKKwlDSEFOMkcoMSwgIDI0 MTIsIDApLAorCUNIQU4yRygyLCAgMjQxNywgMCksCisJQ0hBTjJHKDMsICAyNDIyLCAwKSwKKwlD SEFOMkcoNCwgIDI0MjcsIDApLAorCUNIQU4yRyg1LCAgMjQzMiwgMCksCisJQ0hBTjJHKDYsICAy NDM3LCAwKSwKKwlDSEFOMkcoNywgIDI0NDIsIDApLAorCUNIQU4yRyg4LCAgMjQ0NywgMCksCisJ Q0hBTjJHKDksICAyNDUyLCAwKSwKKwlDSEFOMkcoMTAsIDI0NTcsIDApLAorCUNIQU4yRygxMSwg MjQ2MiwgMCksCisJQ0hBTjJHKDEyLCAyNDY3LCAwKSwKKwlDSEFOMkcoMTMsIDI0NzIsIDApLAor CUNIQU4yRygxNCwgMjQ4NCwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIx MV9zdXBwb3J0ZWRfYmFuZCB3ZnhfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IHdmeF8yZ2h6 X2NoYW50YWJsZSwKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Z4XzJnaHpfY2hhbnRhYmxl KSwKKwkuYml0cmF0ZXMgPSB3ZnhfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdm eF9yYXRlcyksCisJLmh0X2NhcCA9IHsKKwkJLyogUmVjZWl2ZSBjYXBzICovCisJCS5jYXAgPSBJ RUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8CisJCSAg ICAgICBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVSB8CisJCSAgICAgICAoMSA8PCBJRUVFODAy MTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQpLAorCQkuaHRfc3VwcG9ydGVkID0gMSwKKwkJLmFtcGR1 X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfMTZLLAorCQkuYW1wZHVfZGVuc2l0eSA9 IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfTk9ORSwKKwkJLm1jcyA9IHsKKwkJCS5yeF9tYXNr ID0geyAweEZGIH0sIC8qIE1DUzAgdG8gTUNTNyAqLworCQkJLnJ4X2hpZ2hlc3QgPSBjcHVfdG9f bGUxNig3MiksCisJCQkudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVELAor CQl9LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9saW1p dCB3ZGV2X2lmYWNlX2xpbWl0c1tdID0geworCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgw MjExX0lGVFlQRV9TVEFUSU9OKSB9LAorCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjEx X0lGVFlQRV9BUCkgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNl X2NvbWJpbmF0aW9uIHdmeF9pZmFjZV9jb21iaW5hdGlvbnNbXSA9IHsKKwl7CisJCS5udW1fZGlm ZmVyZW50X2NoYW5uZWxzID0gMiwKKwkJLm1heF9pbnRlcmZhY2VzID0gMiwKKwkJLmxpbWl0cyA9 IHdkZXZfaWZhY2VfbGltaXRzLAorCQkubl9saW1pdHMgPSBBUlJBWV9TSVpFKHdkZXZfaWZhY2Vf bGltaXRzKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Z4 X29wcyA9IHsKKwkuc3RhcnQJCQk9IHdmeF9zdGFydCwKKwkuc3RvcAkJCT0gd2Z4X3N0b3AsCisJ LmFkZF9pbnRlcmZhY2UJCT0gd2Z4X2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJ PSB3ZnhfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnICAgICAgICAgICAgICAgICA9IHdmeF9j b25maWcsCisJLnR4CQkJPSB3ZnhfdHgsCisJLmpvaW5faWJzcwkJPSB3Znhfam9pbl9pYnNzLAor CS5sZWF2ZV9pYnNzCQk9IHdmeF9sZWF2ZV9pYnNzLAorCS5jb25mX3R4CQk9IHdmeF9jb25mX3R4 LAorCS5od19zY2FuCQk9IHdmeF9od19zY2FuLAorCS5jYW5jZWxfaHdfc2NhbgkJPSB3ZnhfY2Fu Y2VsX2h3X3NjYW4sCisJLnN0YXJ0X2FwCQk9IHdmeF9zdGFydF9hcCwKKwkuc3RvcF9hcAkJPSB3 Znhfc3RvcF9hcCwKKwkuc3RhX2FkZAkJPSB3Znhfc3RhX2FkZCwKKwkuc3RhX3JlbW92ZQkJPSB3 Znhfc3RhX3JlbW92ZSwKKwkuc2V0X3RpbQkJPSB3Znhfc2V0X3RpbSwKKwkuc2V0X2tleQkJPSB3 Znhfc2V0X2tleSwKKwkuc2V0X3J0c190aHJlc2hvbGQJPSB3Znhfc2V0X3J0c190aHJlc2hvbGQs CisJLnNldF9kZWZhdWx0X3VuaWNhc3Rfa2V5ID0gd2Z4X3NldF9kZWZhdWx0X3VuaWNhc3Rfa2V5 LAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gd2Z4X2Jzc19pbmZvX2NoYW5nZWQsCisJLmNvbmZpZ3Vy ZV9maWx0ZXIJPSB3ZnhfY29uZmlndXJlX2ZpbHRlciwKKwkuYW1wZHVfYWN0aW9uCQk9IHdmeF9h bXBkdV9hY3Rpb24sCisJLmZsdXNoCQkJPSB3ZnhfZmx1c2gsCisJLmFkZF9jaGFuY3R4CQk9IHdm eF9hZGRfY2hhbmN0eCwKKwkucmVtb3ZlX2NoYW5jdHgJCT0gd2Z4X3JlbW92ZV9jaGFuY3R4LAor CS5jaGFuZ2VfY2hhbmN0eAkJPSB3ZnhfY2hhbmdlX2NoYW5jdHgsCisJLmFzc2lnbl92aWZfY2hh bmN0eAk9IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgsCisJLnVuYXNzaWduX3ZpZl9jaGFuY3R4CT0g d2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4LAorfTsKKworYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4o c3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBtYWpvciwgaW50IG1pbm9yKQoreworCWlmICh3ZGV2 LT5od19jYXBzLmFwaV92ZXJzaW9uX21ham9yIDwgbWFqb3IpCisJCXJldHVybiB0cnVlOworCWlm ICh3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21ham9yID4gbWFqb3IpCisJCXJldHVybiBmYWxz ZTsKKwlpZiAod2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9taW5vciA8IG1pbm9yKQorCQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRoZSBkZXZpY2UgbmVlZHMgZGF0YSBh Ym91dCB0aGUgYW50ZW5uYSBjb25maWd1cmF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGluCisgKiBw cm92aWRlZCBieSBQRFMgKFBsYXRmb3JtIERhdGEgU2V0LCB0aGlzIGlzIHRoZSB3b3JkaW5nIHVz ZWQgaW4gV0YyMDAKKyAqIGRvY3VtZW50YXRpb24pIGZpbGVzLiBGb3IgaGFyZHdhcmUgaW50ZWdy YXRvcnMsIHRoZSBmdWxsIHByb2Nlc3MgdG8gY3JlYXRlCisgKiBQRFMgZmlsZXMgaXMgZGVzY3Jp YmVkIGhlcmU6CisgKiAgIGh0dHBzOmdpdGh1Yi5jb20vU2lsaWNvbkxhYnMvd2Z4LWZpcm13YXJl L2Jsb2IvbWFzdGVyL1BEUy9SRUFETUUubWQKKyAqCisgKiBTbyB0aGlzIGZ1bmN0aW9uIGFpbXMg dG8gc2VuZCBQRFMgdG8gdGhlIGRldmljZS4gSG93ZXZlciwgdGhlIFBEUyBmaWxlIGlzCisgKiBv ZnRlbiBiaWdnZXIgdGhhbiBSeCBidWZmZXJzIG9mIHRoZSBjaGlwLCBzbyBpdCBoYXMgdG8gYmUg c2VudCBpbiBtdWx0aXBsZQorICogcGFydHMuCisgKgorICogSW4gYWRkLCB0aGUgUERTIGRhdGEg Y2Fubm90IGJlIHNwbGl0IGFueXdoZXJlLiBUaGUgUERTIGZpbGVzIGNvbnRhaW5zIHRyZWUKKyAq IHN0cnVjdHVyZXMuIEJyYWNlcyBhcmUgdXNlZCB0byBlbnRlci9sZWF2ZSBhIGxldmVsIG9mIHRo ZSB0cmVlIChpbiBhIEpTT04KKyAqIGZhc2hpb24pLiBQRFMgZmlsZXMgY2FuIG9ubHkgYmVlbiBz cGxpdCBiZXR3ZWVuIHJvb3Qgbm9kZXMuCisgKi8KK2ludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdm eF9kZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKwlpbnQgc3Rh cnQsIGJyYWNlX2xldmVsLCBpOworCisJc3RhcnQgPSAwOworCWJyYWNlX2xldmVsID0gMDsKKwlp ZiAoYnVmWzBdICE9ICd7JykgeworCQlkZXZfZXJyKHdkZXYtPmRldiwgInZhbGlkIFBEUyBzdGFy dCB3aXRoICd7Jy4gRGlkIHlvdSBmb3JnZXQgdG8gY29tcHJlc3MgaXQ/XG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCWZvciAoaSA9IDE7IGkgPCBsZW4gLSAxOyBpKyspIHsKKwkJaWYgKGJ1 ZltpXSA9PSAneycpCisJCQlicmFjZV9sZXZlbCsrOworCQlpZiAoYnVmW2ldID09ICd9JykKKwkJ CWJyYWNlX2xldmVsLS07CisJCWlmIChidWZbaV0gPT0gJ30nICYmICFicmFjZV9sZXZlbCkgewor CQkJaSsrOworCQkJaWYgKGkgLSBzdGFydCArIDEgPiBXRlhfUERTX01BWF9TSVpFKQorCQkJCXJl dHVybiAtRUZCSUc7CisJCQlidWZbc3RhcnRdID0gJ3snOworCQkJYnVmW2ldID0gMDsKKwkJCWRl dl9kYmcod2Rldi0+ZGV2LCAic2VuZCBQRFMgJyVzfSdcbiIsIGJ1ZiArIHN0YXJ0KTsKKwkJCWJ1 ZltpXSA9ICd9JzsKKwkJCXJldCA9IGhpZl9jb25maWd1cmF0aW9uKHdkZXYsIGJ1ZiArIHN0YXJ0 LAorCQkJCQkJaSAtIHN0YXJ0ICsgMSk7CisJCQlpZiAocmV0ID4gMCkgeworCQkJCWRldl9lcnIo d2Rldi0+ZGV2LCAiUERTIGJ5dGVzICVkIHRvICVkOiBpbnZhbGlkIGRhdGEgKHVuc3VwcG9ydGVk IG9wdGlvbnM/KVxuIiwKKwkJCQkJc3RhcnQsIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJ fQorCQkJaWYgKHJldCA9PSAtRVRJTUVET1VUKSB7CisJCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQ RFMgYnl0ZXMgJWQgdG8gJWQ6IGNoaXAgZGlkbid0IHJlcGx5IChjb3JydXB0ZWQgZmlsZT8pXG4i LAorCQkJCQlzdGFydCwgaSk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWlmIChyZXQpIHsK KwkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBieXRlcyAlZCB0byAlZDogY2hpcCByZXR1cm5l ZCBhbiB1bmtub3duIGVycm9yXG4iLAorCQkJCQlzdGFydCwgaSk7CisJCQkJcmV0dXJuIC1FSU87 CisJCQl9CisJCQlidWZbaV0gPSAnLCc7CisJCQlzdGFydCA9IGk7CisJCX0KKwl9CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3NlbmRfcGRhdGFfcGRzKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQoreworCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGRzOworCXU4 ICp0bXBfYnVmOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmcGRzLCB3ZGV2LT5wZGF0YS5m aWxlX3Bkcywgd2Rldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAi Y2FuJ3QgbG9hZCBhbnRlbm5hIHBhcmFtZXRlcnMgKFBEUyBmaWxlICVzKS4gVGhlIGRldmljZSBt YXkgYmUgdW5zdGFibGUuXG4iLAorCQkJd2Rldi0+cGRhdGEuZmlsZV9wZHMpOworCQlyZXR1cm4g cmV0OworCX0KKwl0bXBfYnVmID0ga21lbWR1cChwZHMtPmRhdGEsIHBkcy0+c2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCF0bXBfYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFz ZV9mdzsKKwl9CisJcmV0ID0gd2Z4X3NlbmRfcGRzKHdkZXYsIHRtcF9idWYsIHBkcy0+c2l6ZSk7 CisJa2ZyZWUodG1wX2J1Zik7CityZWxlYXNlX2Z3OgorCXJlbGVhc2VfZmlybXdhcmUocGRzKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3ZnhfZnJlZV9jb21tb24odm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGRhdGE7CisKKwltdXRleF9kZXN0cm95KCZ3 ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7CisJbXV0ZXhfZGVzdHJveSgmd2Rldi0+cnhf c3RhdHNfbG9jayk7CisJbXV0ZXhfZGVzdHJveSgmd2Rldi0+Y29uZl9tdXRleCk7CisJaWVlZTgw MjExX2ZyZWVfaHcod2Rldi0+aHcpOworfQorCitzdHJ1Y3Qgd2Z4X2RldiAqd2Z4X2luaXRfY29t bW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2Rh dGEgKnBkYXRhLAorCQkJCWNvbnN0IHN0cnVjdCBod2J1c19vcHMgKmh3YnVzX29wcywKKwkJCQl2 b2lkICpod2J1c19wcml2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCB3 ZnhfZGV2KSwgJndmeF9vcHMpOworCWlmICghaHcpCisJCXJldHVybiBOVUxMOworCisJU0VUX0lF RUU4MDIxMV9ERVYoaHcsIGRldik7CisKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBUWF9BTVBEVV9T RVRVUF9JTl9IVyk7CisJaWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pOwor CWllZWU4MDIxMV9od19zZXQoaHcsIENPTk5FQ1RJT05fTU9OSVRPUik7CisJaWVlZTgwMjExX2h3 X3NldChodywgUkVQT1JUU19UWF9BQ0tfU1RBVFVTKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBT VVBQT1JUU19EWU5BTUlDX1BTKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTSUdOQUxfREJNKTsK KwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19QUyk7CisJaWVlZTgwMjExX2h3X3NldCho dywgTUZQX0NBUEFCTEUpOworCisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHdm eF92aWYpOworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3Znhfc3RhX3ByaXYp OworCWh3LT5xdWV1ZXMgPSA0OworCWh3LT5tYXhfcmF0ZXMgPSA4OworCWh3LT5tYXhfcmF0ZV90 cmllcyA9IDg7CisJaHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNn KQorCQkJCSsgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KQorCQkJCSsgNCAvKiBhbGlnbm1lbnQg Ki8gKyA4IC8qIFRLSVAgSVYgKi87CisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQo Tkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FE SE9DKSB8CisJCQkJICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOworCWh3LT53aXBoeS0+cHJv YmVfcmVzcF9vZmZsb2FkID0gTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF9XUFMg fAorCQkJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1dQUzIgfAorCQkJCQlO TDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1AyUCB8CisJCQkJCU5MODAyMTFfUFJP QkVfUkVTUF9PRkZMT0FEX1NVUFBPUlRfODAyMTFVOworCWh3LT53aXBoeS0+ZmVhdHVyZXMgfD0g Tkw4MDIxMV9GRUFUVVJFX0FQX1NDQU47CisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFH X0FQX1BST0JFX1JFU1BfT0ZGTE9BRDsKKwlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdf QVBfVUFQU0Q7CisJaHctPndpcGh5LT5tYXhfYXBfYXNzb2Nfc3RhID0gSElGX0xJTktfSURfTUFY OworCWh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAyOworCWh3LT53aXBoeS0+bWF4X3NjYW5f aWVfbGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTjsKKwlody0+d2lwaHktPm5faWZhY2VfY29t YmluYXRpb25zID0gQVJSQVlfU0laRSh3ZnhfaWZhY2VfY29tYmluYXRpb25zKTsKKwlody0+d2lw aHktPmlmYWNlX2NvbWJpbmF0aW9ucyA9IHdmeF9pZmFjZV9jb21iaW5hdGlvbnM7CisJaHctPndp cGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0gPSBkZXZtX2ttYWxsb2MoZGV2LCBzaXplb2Yo d2Z4X2JhbmRfMmdoeiksIEdGUF9LRVJORUwpOworCS8qIEZJWE1FOiBhbHNvIGNvcHkgd2Z4X3Jh dGVzIGFuZCB3ZnhfMmdoel9jaGFudGFibGUgKi8KKwltZW1jcHkoaHctPndpcGh5LT5iYW5kc1tO TDgwMjExX0JBTkRfMkdIWl0sICZ3ZnhfYmFuZF8yZ2h6LAorCSAgICAgICBzaXplb2Yod2Z4X2Jh bmRfMmdoeikpOworCisJd2RldiA9IGh3LT5wcml2OworCXdkZXYtPmh3ID0gaHc7CisJd2Rldi0+ ZGV2ID0gZGV2OworCXdkZXYtPmh3YnVzX29wcyA9IGh3YnVzX29wczsKKwl3ZGV2LT5od2J1c19w cml2ID0gaHdidXNfcHJpdjsKKwltZW1jcHkoJndkZXYtPnBkYXRhLCBwZGF0YSwgc2l6ZW9mKCpw ZGF0YSkpOworCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgInNpbGFicyxh bnRlbm5hLWNvbmZpZy1maWxlIiwKKwkJCQkmd2Rldi0+cGRhdGEuZmlsZV9wZHMpOworCXdkZXYt PnBkYXRhLmdwaW9fd2FrZXVwID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAid2FrZXVw IiwKKwkJCQkJCQkgIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIod2Rldi0+cGRhdGEuZ3Bp b193YWtldXApKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXAp CisJCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAid2Z4 IHdha2V1cCIpOworCisJbXV0ZXhfaW5pdCgmd2Rldi0+Y29uZl9tdXRleCk7CisJbXV0ZXhfaW5p dCgmd2Rldi0+cnhfc3RhdHNfbG9jayk7CisJbXV0ZXhfaW5pdCgmd2Rldi0+dHhfcG93ZXJfbG9v cF9pbmZvX2xvY2spOworCWluaXRfY29tcGxldGlvbigmd2Rldi0+ZmlybXdhcmVfcmVhZHkpOwor CUlOSVRfREVMQVlFRF9XT1JLKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaywKKwkJCSAgd2Z4 X2Nvb2xpbmdfdGltZW91dF93b3JrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3ZGV2LT50eF9w ZW5kaW5nKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3ZGV2LT50eF9kZXF1ZXVlKTsKKwl3Znhf aW5pdF9oaWZfY21kKCZ3ZGV2LT5oaWZfY21kKTsKKwl3ZGV2LT5mb3JjZV9wc190aW1lb3V0ID0g LTE7CisKKwlpZiAoZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgd2Z4X2ZyZWVfY29tbW9u LCB3ZGV2KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gd2RldjsKK30KKworaW50IHdmeF9w cm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCXN0cnVj dCBncGlvX2Rlc2MgKmdwaW9fc2F2ZWQ7CisKKwkvKiBEdXJpbmcgZmlyc3QgcGFydCBvZiBib290 LCBncGlvX3dha2V1cCBjYW5ub3QgeWV0IGJlZW4gdXNlZC4gU28KKwkgKiBwcmV2ZW50IGJoKCkg dG8gdG91Y2ggaXQuCisJICovCisJZ3Bpb19zYXZlZCA9IHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVw OworCXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwID0gTlVMTDsKKwl3ZGV2LT5wb2xsX2lycSA9IHRy dWU7CisKKwl3ZnhfYmhfcmVnaXN0ZXIod2Rldik7CisKKwllcnIgPSB3ZnhfaW5pdF9kZXZpY2Uo d2Rldik7CisJaWYgKGVycikKKwkJZ290byBiaF91bnJlZ2lzdGVyOworCisJd2Z4X2JoX3BvbGxf aXJxKHdkZXYpOworCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+Zmly bXdhcmVfcmVhZHksIDEgKiBIWik7CisJaWYgKGVyciA8PSAwKSB7CisJCWlmIChlcnIgPT0gMCkg eworCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN0YXJ0 dXAgaW5kaWNhdGlvblxuIik7CisJCQllcnIgPSAtRVRJTUVET1VUOworCQl9IGVsc2UgaWYgKGVy ciA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJCWRldl9pbmZvKHdkZXYtPmRldiwgInByb2JlIGludGVy cnVwdGVkIGJ5IHVzZXJcbiIpOworCQl9CisJCWdvdG8gYmhfdW5yZWdpc3RlcjsKKwl9CisKKwkv KiBGSVhNRTogZmlsbCB3aXBoeTo6aHdfdmVyc2lvbiAqLworCWRldl9pbmZvKHdkZXYtPmRldiwg InN0YXJ0ZWQgZmlybXdhcmUgJWQuJWQuJWQgXCIlc1wiIChBUEk6ICVkLiVkLCBrZXlzZXQ6ICUw MlgsIGNhcHM6IDB4JS44WClcbiIsCisJCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21ham9yLCB3 ZGV2LT5od19jYXBzLmZpcm13YXJlX21pbm9yLAorCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9i dWlsZCwgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9sYWJlbCwKKwkJIHdkZXYtPmh3X2NhcHMuYXBp X3ZlcnNpb25fbWFqb3IsIHdkZXYtPmh3X2NhcHMuYXBpX3ZlcnNpb25fbWlub3IsCisJCSB3ZGV2 LT5rZXlzZXQsIHdkZXYtPmh3X2NhcHMubGlua19tb2RlKTsKKwlzbnByaW50Zih3ZGV2LT5ody0+ d2lwaHktPmZ3X3ZlcnNpb24sCisJCSBzaXplb2Yod2Rldi0+aHctPndpcGh5LT5md192ZXJzaW9u KSwKKwkJICIlZC4lZC4lZCIsCisJCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21ham9yLAorCQkg d2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9taW5vciwKKwkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVf YnVpbGQpOworCisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkgeworCQlkZXZf ZXJyKHdkZXYtPmRldiwKKwkJCSJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhw ZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcbiIsCisJCQl3ZGV2LT5od19jYXBzLmFw aV92ZXJzaW9uX21ham9yKTsKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIGJoX3VucmVnaXN0 ZXI7CisJfQorCisJaWYgKHdkZXYtPmh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9S Q0VEKSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBi dXQgY2FuJ3QgbmVnb3RpYXRlIGl0XG4iKTsKKwkJZ290byBiaF91bnJlZ2lzdGVyOworCX0KKwor CWlmICh3ZGV2LT5od19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkgeworCQl3ZGV2LT5ody0+d2lwaHkt PmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTFdLmZsYWdzIHw9IElFRUU4MDIx MV9DSEFOX05PX0lSOworCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0ha XS0+Y2hhbm5lbHNbMTJdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lSOworCQl3ZGV2LT5o dy0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTNdLmZsYWdzIHw9 IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCX0KKworCWRldl9kYmcod2Rldi0+ZGV2LCAic2Vu ZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiIsCisJCXdkZXYtPnBkYXRhLmZpbGVfcGRzKTsK KwllcnIgPSB3Znhfc2VuZF9wZGF0YV9wZHMod2Rldik7CisJaWYgKGVyciA8IDAgJiYgZXJyICE9 IC1FTk9FTlQpCisJCWdvdG8gYmhfdW5yZWdpc3RlcjsKKworCXdkZXYtPnBvbGxfaXJxID0gZmFs c2U7CisJZXJyID0gd2Rldi0+aHdidXNfb3BzLT5pcnFfc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3By aXYpOworCWlmIChlcnIpCisJCWdvdG8gYmhfdW5yZWdpc3RlcjsKKworCWVyciA9IGhpZl91c2Vf bXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdkZXYtPmRl diwgIm1pc2NvbmZpZ3VyZWQgSVJRP1xuIik7CisKKwl3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCA9 IGdwaW9fc2F2ZWQ7CisJaWYgKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKSB7CisJCWRldl9kYmco d2Rldi0+ZGV2LCAiZW5hYmxlICdxdWllc2NlbnQnIHBvd2VyIG1vZGUgd2l0aCB3YWtldXAgR1BJ TyBhbmQgUERTIGZpbGUgJXNcbiIsCisJCQl3ZGV2LT5wZGF0YS5maWxlX3Bkcyk7CisJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMSk7CisJCWNvbnRy b2xfcmVnX3dyaXRlKHdkZXYsIDApOworCQloaWZfc2V0X29wZXJhdGlvbmFsX21vZGUod2Rldiwg SElGX09QX1BPV0VSX01PREVfUVVJRVNDRU5UKTsKKwl9IGVsc2UgeworCQloaWZfc2V0X29wZXJh dGlvbmFsX21vZGUod2RldiwgSElGX09QX1BPV0VSX01PREVfRE9aRSk7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+YWRkcmVzc2VzKTsgaSsrKSB7CisJCWV0aF96ZXJv X2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOworCQllcnIgPSBvZl9nZXRfbWFjX2FkZHJl c3Mod2Rldi0+ZGV2LT5vZl9ub2RlLAorCQkJCQkgd2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOwor CQlpZiAoIWVycikgeworCQkJd2Rldi0+YWRkcmVzc2VzW2ldLmFkZHJbRVRIX0FMRU4gLSAxXSAr PSBpOworCQl9IGVsc2UgeworCQkJZXRoZXJfYWRkcl9jb3B5KHdkZXYtPmFkZHJlc3Nlc1tpXS5h ZGRyLAorCQkJCQl3ZGV2LT5od19jYXBzLm1hY19hZGRyW2ldKTsKKwkJfQorCQlpZiAoIWlzX3Zh bGlkX2V0aGVyX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpKSB7CisJCQlkZXZfd2Fybih3 ZGV2LT5kZXYsICJ1c2luZyByYW5kb20gTUFDIGFkZHJlc3NcbiIpOworCQkJZXRoX3JhbmRvbV9h ZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsKKwkJfQorCQlkZXZfaW5mbyh3ZGV2LT5kZXYs ICJNQUMgYWRkcmVzcyAlZDogJXBNXG4iLCBpLAorCQkJIHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRy KTsKKwl9CisJd2Rldi0+aHctPndpcGh5LT5uX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUod2Rldi0+ YWRkcmVzc2VzKTsKKwl3ZGV2LT5ody0+d2lwaHktPmFkZHJlc3NlcyA9IHdkZXYtPmFkZHJlc3Nl czsKKworCWlmICghd2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDMsIDgpKQorCQl3ZGV2LT5ody0+ d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUzsKKworCWVyciA9IGllZWU4 MDIxMV9yZWdpc3Rlcl9odyh3ZGV2LT5odyk7CisJaWYgKGVycikKKwkJZ290byBpcnFfdW5zdWJz Y3JpYmU7CisKKwllcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3Rv IGllZWU4MDIxMV91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2llZWU4MDIxMV91bnJlZ2lz dGVyOgorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsKK2lycV91bnN1YnNjcmli ZToKKwl3ZGV2LT5od2J1c19vcHMtPmlycV91bnN1YnNjcmliZSh3ZGV2LT5od2J1c19wcml2KTsK K2JoX3VucmVnaXN0ZXI6CisJd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7CisJcmV0dXJuIGVycjsK K30KKwordm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlpZWVlODAy MTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7CisJaGlmX3NodXRkb3duKHdkZXYpOworCXdkZXYt Pmh3YnVzX29wcy0+aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOworCXdmeF9iaF91 bnJlZ2lzdGVyKHdkZXYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3ZnhfY29yZV9pbml0KHZv aWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKKwkJ cmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2ZXIpOworCWlmIChJU19FTkFC TEVEKENPTkZJR19NTUMpICYmICFyZXQpCisJCXJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZ3 Znhfc2Rpb19kcml2ZXIpOworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3ZnhfY29yZV9p bml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdmeF9jb3JlX2V4aXQodm9pZCkKK3sKKwlpZiAo SVNfRU5BQkxFRChDT05GSUdfTU1DKSkKKwkJc2Rpb191bnJlZ2lzdGVyX2RyaXZlcigmd2Z4X3Nk aW9fZHJpdmVyKTsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKKwkJc3BpX3VucmVnaXN0 ZXJfZHJpdmVyKCZ3Znhfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3ZnhfY29yZV9leGl0 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oIGIv ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMTVhYmQyZDQzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaApAQCAtMCwwICsxLDQzIEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogRGV2aWNl IHByb2JlIGFuZCByZWdpc3Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2ls aWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nz b24KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWls ay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3Rl QGdtYWlsLmNvbT4sIGV0IGFsLgorICovCisjaWZuZGVmIFdGWF9NQUlOX0gKKyNkZWZpbmUgV0ZY X01BSU5fSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bp by9jb25zdW1lci5oPgorCisjaW5jbHVkZSAiaGlmX2FwaV9nZW5lcmFsLmgiCisKK3N0cnVjdCB3 ZnhfZGV2Oworc3RydWN0IGh3YnVzX29wczsKKworc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHsK KwkvKiBLZXlzZXQgYW5kICIuc2VjIiBleHRlbnNpb24gd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlz IHN0cmluZyAqLworCWNvbnN0IGNoYXIgKmZpbGVfZnc7CisJY29uc3QgY2hhciAqZmlsZV9wZHM7 CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb193YWtldXA7CisJLyogaWYgdHJ1ZSBISUYgRF9vdXQg aXMgc2FtcGxlZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrCisJICogKGludGVuZGVk IHRvIGJlIHVzZWQgaW4gNTBNaHogU0RJTykKKwkgKi8KKwlib29sIHVzZV9yaXNpbmdfY2xrOwor fTsKKworc3RydWN0IHdmeF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYs CisJCQkJY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCQljb25zdCBz dHJ1Y3QgaHdidXNfb3BzICpod2J1c19vcHMsCisJCQkJdm9pZCAqaHdidXNfcHJpdik7CisKK2lu dCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpOwordm9pZCB3ZnhfcmVsZWFzZShzdHJ1 Y3Qgd2Z4X2RldiAqd2Rldik7CisKK2Jvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBpbnQgbWFqb3IsIGludCBtaW5vcik7CitpbnQgd2Z4X3NlbmRfcGRzKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKKworI2VuZGlmCi0tIAoyLjMz LjAKCg==