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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16374C4332F for ; Tue, 5 Oct 2021 13:57:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F207A61074 for ; Tue, 5 Oct 2021 13:57:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236261AbhJEN7F (ORCPT ); Tue, 5 Oct 2021 09:59:05 -0400 Received: from mail-dm3nam07on2053.outbound.protection.outlook.com ([40.107.95.53]:10988 "EHLO NAM02-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235228AbhJEN5w (ORCPT ); Tue, 5 Oct 2021 09:57:52 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fZeX8r2IY8ee7N+4Pc1zmZGzNUr/sFQq4mbTg78OACg+ZwCgTwRo9DTY8FzmOI6+KWAam8WOQa/5x3hszQ3pMuKEuhC7qQLFoqvePQ/OUVuOUQJB5KJBiOSI4G2LOssfELqw/o5DZKLOpO7HBom+ZisabbOLE3Bp52A6BrXLEfoE2RFpS9wxpuXOp/mWCGQcdSbPbOnN+LGC1KbxTBJkrcaWMrKDYXdM/5MjKlW2AyprPA7lhlViwUyQaL7xzZjuxmktYU1o6cpgKk9fFIPG2blRXRpH9x7Hq7e6ver+puKTgcchnF2VGADZkS4uRe04ETo/WhXffTWLNorQXjGzWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qc2nhYPUp44TaigF+ZqUGiK7kA2uEL2yCAv84w7NXjk=; b=DFK4Ron+dUmiBy+bd1pr68yMGkyPrqlDc6tnBSU7dl1b0RxkXBmmLMI4oYib1PldvYjbbYZuW08Sw639A+cxa27Hph75RUwpWy/WRn97oj7iqZXEWtcYPh08osKiBvsKlHzbhaGBtQ5vwR/4H4d1HiJhBucCE49EzJGItTewtIToGUpjjgxwz4oQpzd/GpipjwZSVFzq6hCK3eznkzeEyRGoPIOtQmOA5e390Q+CWmB8X5DdnwhuQexyfKF6UAQVI8XFv04f8grC2ZQ+RSGVE1CTvxOgqmYMa4bI342ir1fQvwDV1OqKQAm+SXaTjG2rk+dy2zUx2pnl1tGk8Zt7Ag== 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=qc2nhYPUp44TaigF+ZqUGiK7kA2uEL2yCAv84w7NXjk=; b=ERF0Eu/1Uw6INxI7ONka3xLWNlXihDG6LgiiR29llvgQHlwE6CXLAmyHAjHcpCL+CO6o286STX4CtHfsW0bpHq6MVPyUH18YrRpps/hZWqYf2wt04tueY4hKAg3RCxlZ3FSIxW8JUAvyPiqUPfWGg+MvloQiqdxKGAx3pI6gB0s= 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 PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) by PH0PR11MB5643.namprd11.prod.outlook.com (2603:10b6:510:d5::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Tue, 5 Oct 2021 13:54:34 +0000 Received: from PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4]) by PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4%9]) with mapi id 15.20.4566.022; Tue, 5 Oct 2021 13:54:34 +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 v8 05/24] wfx: add main.c/main.h Date: Tue, 5 Oct 2021 15:53:41 +0200 Message-Id: <20211005135400.788058-6-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> References: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) To PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) MIME-Version: 1.0 Received: from pc-42.silabs.com (37.71.187.125) by PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Tue, 5 Oct 2021 13:54:31 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 780d909c-aea5-4471-2a21-08d98807a983 X-MS-TrafficTypeDiagnostic: PH0PR11MB5643: 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: 1CuWpJsIQXV+94yv5tgtDL3SiHb9CVJS8MJZbfO57UtirJFVE+ujHUnTnKyFSY/bkp6rNlc9ZF/wFbkMTyS0OYJ1OBg1ahXK+4C+Qb9xyU4e8JfhZFjF2P8vWy9otOMzGY9tOP164CwBhlKOCfQmKxtFkjbRjX5flwQ2T44b7Ya3WNU/10uSbNuYHdyXtV5Ja9qfjdD9cZC9lp4AMI1wVRzpgoslzCnYmsZaO2BoyLltj3G2W7Nlekm877b4EGZqK1ikQyJijKwzNqyu5RBH9sDrGyIEHZKvlahnE1fUxgZXamRnaqWzA1hEA5fwa8KnTO8HskBZ1qixlhS+OWgpUQw81apAjcHXImNh8OuF8WQyNQZphtSGGAufj9E0MBIWA4JO0P7Yf+zeDzDYmaM6go7zjR3jCyCCmpnA2/wlOV1NG/OSctBiRW4s0xn765fem7cpzu9RE4Mwc7MEJsS+D6VHrhM/WYFrBxYRFnyqRUk4U2IQ4tMD6yObp7d/njOHA8fug36de6G/zncYHoPLi5/n65bbJ5lO1qdQFjwK5QU65uZhZCHKvT1vuPkW4evgcAtDslKNfd6GMQ30fK+CBUZIOJb9q7JXCsUugeDtKXhENK8uxh2c0cC4Gl5+Ybj/CH+ue/TT8J4g3Or1e6viMX7F+ngI1uoblYea37hSU5swJgwEnNcg635/UeHggdjNteBIMWUSLam2Nbhhd6jEVA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5657.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(7416002)(2616005)(956004)(54906003)(8936002)(66574015)(36756003)(1076003)(186003)(38100700002)(86362001)(6486002)(83380400001)(6916009)(5660300002)(38350700002)(66946007)(66476007)(66556008)(52116002)(7696005)(508600001)(6666004)(2906002)(316002)(4326008)(26005)(30864003)(107886003)(8676002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VUdSOGNGekczakd0c2FwQzBrMHVrTjN4VUZVMWdhV3hteE1RUysvOGl0bGE2?= =?utf-8?B?TzZDUksvbXBrbDVHQmFYMHRIMFVONUJBVm1PRFdjeU5SRGlxRjJZQ29TaEFS?= =?utf-8?B?bWlPUHFvUExOWEtPQUJiWFUzbEJFV2hrNFdPeHlBTFlwc3VsRWU5bXNqU2Jo?= =?utf-8?B?bERhRCt6a21FbFJCOHNESURvMHNjUG9qOENyQ1JYOWM5ZHFqZEViZlU3TE5D?= =?utf-8?B?dVZreG9OVS9tdjl2K1ZVU3RIdDl3NTFJRHlhTXJYSk1YdS9pTTA3VUpTQW9y?= =?utf-8?B?dGdYRzBONTFucUs3dXNETmx3VEpXU2hkcHpGSm8xdm9nL2tsS04xUitIaEFQ?= =?utf-8?B?dDRrOGNDM1dOVFV2Um9OdDhlbG1aeUNZUlF1VkZ0WkpFNXBRN1RXVWE0VkhR?= =?utf-8?B?N2s5VzR6UnNKN2N5UzhIN2hOYUNEbWZhWCtjalZzcUZISno1ZGFXODl1S3pP?= =?utf-8?B?eGVFMDhqcTVndVVxZkpTbmJMZUl2YjRCWjh2VlpXdDErNmN3a3hnaHE1ZVFD?= =?utf-8?B?Z0tYRnNwUHVmVU5FelMyTUNQank3OTdXbDA2TzIrWDVVeVNwUURlKzFLcG05?= =?utf-8?B?dUtlRmVaMWs4c2I4MEJJdkJQYzhwU0Y4SThHMUJwSUVtQlJ6U1F3WWhXaTIr?= =?utf-8?B?THFHQk42bnBOait2VDNiV2cybklFOTY1MzJObFNhMlR4ejFZS3BVWWFuRW1t?= =?utf-8?B?L21CdGNUMGllVk1sMTdyRXdTN09VclhvaHFudW5DSzdPU1NYQW9TMzA5TGha?= =?utf-8?B?YmZmbXZSQXVNdXowbnV2WnlpTXpoNW40VjExVWRJcmhXOERGNzUwNndZNlpq?= =?utf-8?B?Z2c0WWdtMFJTM2UrVXRlbm5aaVpCWS9HRW9acU8vVnFkSm9rcXlySkZQMUI4?= =?utf-8?B?emFYeUNpK01USWUzbmJmSmhVSDFkbjJzSEZGaWZHeHp1TWs0SnN4aGlCTzQv?= =?utf-8?B?RFdweHVZSmQrdzVVNUxYdlNqbXh6ZUFNT1ZGSDZidU9iQkh0aDhhZXdIdTVU?= =?utf-8?B?ZlIxUXJxakF3QWluSFF5eVlEWGRiTGpZYm14V3ZORm9sUTFIY3VadFlIaTdr?= =?utf-8?B?ZFVpVnQremdLdDUwTGlNbTBZWTU5OUdCZzg3Q2M3TnliODJIRUdkMHdNMkFR?= =?utf-8?B?VkYzK2p4V0NDdFFUc21ia2VndGs1NWFiM3JUdjdhdG9USjhjYWVTNzBJaU9w?= =?utf-8?B?L1lqYWpBb3JaWm5DREU1MHZSYjBaWmJiYkRPMW9hTDYvUWxhc3BacXlRWnoz?= =?utf-8?B?ZFBVTjlPcE1tbW5RZmI1R3ZGL0luZHNoRFNPNUR0T2dGKzN5SEFEd3k4QUl3?= =?utf-8?B?V0ZKVExvRGx6a2QrdFpPMCs2TU0yZW82VFFYZXplNTQwS00xdnhOUHp2SFRj?= =?utf-8?B?cEdwWUFNWnNYSnR6MnFPZ3pjSVc2ZE1EOWNKRlV0NlZ1RmdMQjkzNk1WejFB?= =?utf-8?B?ZVYxSy9mM3VKWmtEeG90Y1EzS0tFMHBlZzBEMUxybHYyOUsrZXlsbmI1R2F5?= =?utf-8?B?bXdURlljWDJBenRmWFNMU2ViOWZHUS9tVVI0dFJvL28xRm5uNUd1M3dDUUFE?= =?utf-8?B?eXlOVmtXc1Y3clB6bEFKdDFvb2xnd1UrUTBzRE5XSXkzVDZ6YWxHemlNZHlE?= =?utf-8?B?azBzalRSSmhBZTVxMVBxVUFWK2pqdE9vOXRHcTYzRTZhYk1lMmdmUzROV2hq?= =?utf-8?B?K2NJWXhUUSs1ejJoTWFTbUc0a3dQZW83WkN0T3JsTnlWU2pKbENHbEZQTS9D?= =?utf-8?Q?CiEP6JG5Nmpo/9DLFePivXrKXdnKBXFDWDSPnAa?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 780d909c-aea5-4471-2a21-08d98807a983 X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5657.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Oct 2021 13:54:34.2278 (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: 7cT4WhSK2UHaZD83/Wjla2qbGPsR6i6vK+u/S9tBtqNIjFyMov1o8/iGufmFINcjxIvZi0Sih5BfBJxr1z93mg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5643 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jIHwgNTAyICsrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFp bi5oIHwgIDQ0ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA1NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMjZiZGY4OThkMWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMKQEAgLTAsMCArMSw1MDIgQEAKKy8vIFNQ 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 ZltpXSA9ICd9JzsKKwkJCXJldCA9IHdmeF9oaWZfY29uZmlndXJhdGlvbih3ZGV2LCBidWYgKyBz dGFydCwKKwkJCQkJCSAgICBpIC0gc3RhcnQgKyAxKTsKKwkJCWlmIChyZXQgPiAwKSB7CisJCQkJ ZGV2X2Vycih3ZGV2LT5kZXYsICJQRFMgYnl0ZXMgJWQgdG8gJWQ6IGludmFsaWQgZGF0YSAodW5z dXBwb3J0ZWQgb3B0aW9ucz8pXG4iLAorCQkJCQlzdGFydCwgaSk7CisJCQkJcmV0dXJuIC1FSU5W QUw7CisJCQl9CisJCQlpZiAocmV0ID09IC1FVElNRURPVVQpIHsKKwkJCQlkZXZfZXJyKHdkZXYt PmRldiwgIlBEUyBieXRlcyAlZCB0byAlZDogY2hpcCBkaWRuJ3QgcmVwbHkgKGNvcnJ1cHRlZCBm aWxlPylcbiIsCisJCQkJCXN0YXJ0LCBpKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJaWYg KHJldCkgeworCQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiUERTIGJ5dGVzICVkIHRvICVkOiBjaGlw IHJldHVybmVkIGFuIHVua25vd24gZXJyb3JcbiIsCisJCQkJCXN0YXJ0LCBpKTsKKwkJCQlyZXR1 cm4gLUVJTzsKKwkJCX0KKwkJCWJ1ZltpXSA9ICcsJzsKKwkJCXN0YXJ0ID0gaTsKKwkJfQorCX0K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3Znhfc2VuZF9wZGF0YV9wZHMoc3RydWN0IHdm eF9kZXYgKndkZXYpCit7CisJaW50IHJldCA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpw ZHM7CisJdTggKnRtcF9idWY7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZHMsIHdkZXYt PnBkYXRhLmZpbGVfcGRzLCB3ZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih3ZGV2 LT5kZXYsICJjYW4ndCBsb2FkIGFudGVubmEgcGFyYW1ldGVycyAoUERTIGZpbGUgJXMpLiBUaGUg ZGV2aWNlIG1heSBiZSB1bnN0YWJsZS5cbiIsCisJCQl3ZGV2LT5wZGF0YS5maWxlX3Bkcyk7CisJ CXJldHVybiByZXQ7CisJfQorCXRtcF9idWYgPSBrbWVtZHVwKHBkcy0+ZGF0YSwgcGRzLT5zaXpl LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcF9idWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290 byByZWxlYXNlX2Z3OworCX0KKwlyZXQgPSB3Znhfc2VuZF9wZHMod2RldiwgdG1wX2J1ZiwgcGRz LT5zaXplKTsKKwlrZnJlZSh0bXBfYnVmKTsKK3JlbGVhc2VfZnc6CisJcmVsZWFzZV9maXJtd2Fy ZShwZHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9mcmVlX2NvbW1vbih2 b2lkICpkYXRhKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gZGF0YTsKKworCW11dGV4X2Rl c3Ryb3koJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKKwltdXRleF9kZXN0cm95KCZ3 ZGV2LT5yeF9zdGF0c19sb2NrKTsKKwltdXRleF9kZXN0cm95KCZ3ZGV2LT5jb25mX211dGV4KTsK KwlpZWVlODAyMTFfZnJlZV9odyh3ZGV2LT5odyk7Cit9CisKK3N0cnVjdCB3ZnhfZGV2ICp3Znhf aW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCB3ZnhfcGxh dGZvcm1fZGF0YSAqcGRhdGEsCisJCQkJY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgKmh3YnVz X29wcywKKwkJCQl2b2lkICpod2J1c19wcml2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6 ZW9mKHN0cnVjdCB3ZnhfZGV2KSwgJndmeF9vcHMpOworCWlmICghaHcpCisJCXJldHVybiBOVUxM OworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRldik7CisKKwlpZWVlODAyMTFfaHdfc2V0KGh3 LCBUWF9BTVBEVV9TRVRVUF9JTl9IVyk7CisJaWVlZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdH UkVHQVRJT04pOworCWllZWU4MDIxMV9od19zZXQoaHcsIENPTk5FQ1RJT05fTU9OSVRPUik7CisJ aWVlZTgwMjExX2h3X3NldChodywgUkVQT1JUU19UWF9BQ0tfU1RBVFVTKTsKKwlpZWVlODAyMTFf aHdfc2V0KGh3LCBTVVBQT1JUU19EWU5BTUlDX1BTKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBT SUdOQUxfREJNKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19QUyk7CisJaWVlZTgw MjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpOworCisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXpl b2Yoc3RydWN0IHdmeF92aWYpOworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3 Znhfc3RhX3ByaXYpOworCWh3LT5xdWV1ZXMgPSA0OworCWh3LT5tYXhfcmF0ZXMgPSA4OworCWh3 LT5tYXhfcmF0ZV90cmllcyA9IDg7CisJaHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0 cnVjdCB3ZnhfaGlmX21zZykKKwkJCQkrIHNpemVvZihzdHJ1Y3Qgd2Z4X2hpZl9yZXFfdHgpCisJ CQkJKyA0IC8qIGFsaWdubWVudCAqLyArIDggLyogVEtJUCBJViAqLzsKKwlody0+d2lwaHktPmlu dGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCQkJICAgICBC SVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKKwkJCQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9B UCk7CisJaHctPndpcGh5LT5wcm9iZV9yZXNwX29mZmxvYWQgPSBOTDgwMjExX1BST0JFX1JFU1Bf T0ZGTE9BRF9TVVBQT1JUX1dQUyB8CisJCQkJCU5MODAyMTFfUFJPQkVfUkVTUF9PRkZMT0FEX1NV UFBPUlRfV1BTMiB8CisJCQkJCU5MODAyMTFfUFJPQkVfUkVTUF9PRkZMT0FEX1NVUFBPUlRfUDJQ IHwKKwkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF84MDIxMVU7CisJaHct PndpcGh5LT5mZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfQVBfU0NBTjsKKwlody0+d2lwaHkt PmZsYWdzIHw9IFdJUEhZX0ZMQUdfQVBfUFJPQkVfUkVTUF9PRkZMT0FEOworCWh3LT53aXBoeS0+ ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9VQVBTRDsKKwlody0+d2lwaHktPm1heF9hcF9hc3NvY19z dGEgPSBISUZfTElOS19JRF9NQVg7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDI7CisJ aHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOOworCWh3 LT53aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKHdmeF9pZmFjZV9jb21i aW5hdGlvbnMpOworCWh3LT53aXBoeS0+aWZhY2VfY29tYmluYXRpb25zID0gd2Z4X2lmYWNlX2Nv bWJpbmF0aW9uczsKKwlody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXSA9IGRldm1f a21hbGxvYyhkZXYsIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSwgR0ZQX0tFUk5FTCk7CisJLyogRklY TUU6IGFsc28gY29weSB3ZnhfcmF0ZXMgYW5kIHdmeF8yZ2h6X2NoYW50YWJsZSAqLworCW1lbWNw eShody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXSwgJndmeF9iYW5kXzJnaHosCisJ ICAgICAgIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSk7CisKKwl3ZGV2ID0gaHctPnByaXY7CisJd2Rl di0+aHcgPSBodzsKKwl3ZGV2LT5kZXYgPSBkZXY7CisJd2Rldi0+aHdidXNfb3BzID0gaHdidXNf b3BzOworCXdkZXYtPmh3YnVzX3ByaXYgPSBod2J1c19wcml2OworCW1lbWNweSgmd2Rldi0+cGRh dGEsIHBkYXRhLCBzaXplb2YoKnBkYXRhKSk7CisJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2 LT5vZl9ub2RlLCAic2lsYWJzLGFudGVubmEtY29uZmlnLWZpbGUiLAorCQkJCSZ3ZGV2LT5wZGF0 YS5maWxlX3Bkcyk7CisJd2Rldi0+cGRhdGEuZ3Bpb193YWtldXAgPSBkZXZtX2dwaW9kX2dldF9v cHRpb25hbChkZXYsICJ3YWtldXAiLAorCQkJCQkJCSAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElT X0VSUih3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkpCisJCXJldHVybiBOVUxMOworCWlmICh3ZGV2 LT5wZGF0YS5ncGlvX3dha2V1cCkKKwkJZ3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUod2Rldi0+cGRh dGEuZ3Bpb193YWtldXAsICJ3Znggd2FrZXVwIik7CisKKwltdXRleF9pbml0KCZ3ZGV2LT5jb25m X211dGV4KTsKKwltdXRleF9pbml0KCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKKwltdXRleF9pbml0 KCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZ3ZGV2 LT5maXJtd2FyZV9yZWFkeSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJndkZXYtPmNvb2xpbmdfdGlt ZW91dF93b3JrLAorCQkJICB3ZnhfY29vbGluZ190aW1lb3V0X3dvcmspOworCXNrYl9xdWV1ZV9o ZWFkX2luaXQoJndkZXYtPnR4X3BlbmRpbmcpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndkZXYt PnR4X2RlcXVldWUpOworCXdmeF9pbml0X2hpZl9jbWQoJndkZXYtPmhpZl9jbWQpOworCisJaWYg KGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHdmeF9mcmVlX2NvbW1vbiwgd2RldikpCisJ CXJldHVybiBOVUxMOworCisJcmV0dXJuIHdkZXY7Cit9CisKK2ludCB3ZnhfcHJvYmUoc3RydWN0 IHdmeF9kZXYgKndkZXYpCit7CisJaW50IGk7CisJaW50IGVycjsKKwlzdHJ1Y3QgZ3Bpb19kZXNj ICpncGlvX3NhdmVkOworCisJLyogRHVyaW5nIGZpcnN0IHBhcnQgb2YgYm9vdCwgZ3Bpb193YWtl dXAgY2Fubm90IHlldCBiZWVuIHVzZWQuIFNvCisJICogcHJldmVudCBiaCgpIHRvIHRvdWNoIGl0 LgorCSAqLworCWdwaW9fc2F2ZWQgPSB3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cDsKKwl3ZGV2LT5w ZGF0YS5ncGlvX3dha2V1cCA9IE5VTEw7CisJd2Rldi0+cG9sbF9pcnEgPSB0cnVlOworCisJd2Z4 X2JoX3JlZ2lzdGVyKHdkZXYpOworCisJZXJyID0gd2Z4X2luaXRfZGV2aWNlKHdkZXYpOworCWlm IChlcnIpCisJCWdvdG8gYmhfdW5yZWdpc3RlcjsKKworCXdmeF9iaF9wb2xsX2lycSh3ZGV2KTsK KwllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndkZXYtPmZpcm13YXJlX3JlYWR5 LCAxICogSFopOworCWlmIChlcnIgPD0gMCkgeworCQlpZiAoZXJyID09IDApIHsKKwkJCWRldl9l cnIod2Rldi0+ZGV2LCAidGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFydHVwIGluZGljYXRp b25cbiIpOworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIGlmIChlcnIgPT0gLUVSRVNU QVJUU1lTKSB7CisJCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJwcm9iZSBpbnRlcnJ1cHRlZCBieSB1 c2VyXG4iKTsKKwkJfQorCQlnb3RvIGJoX3VucmVnaXN0ZXI7CisJfQorCisJLyogRklYTUU6IGZp bGwgd2lwaHk6Omh3X3ZlcnNpb24gKi8KKwlkZXZfaW5mbyh3ZGV2LT5kZXYsICJzdGFydGVkIGZp cm13YXJlICVkLiVkLiVkIFwiJXNcIiAoQVBJOiAlZC4lZCwga2V5c2V0OiAlMDJYLCBjYXBzOiAw eCUuOFgpXG4iLAorCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9tYWpvciwgd2Rldi0+aHdfY2Fw cy5maXJtd2FyZV9taW5vciwKKwkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfYnVpbGQsIHdkZXYt Pmh3X2NhcHMuZmlybXdhcmVfbGFiZWwsCisJCSB3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21h am9yLCB3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21pbm9yLAorCQkgd2Rldi0+a2V5c2V0LCB3 ZGV2LT5od19jYXBzLmxpbmtfbW9kZSk7CisJc25wcmludGYod2Rldi0+aHctPndpcGh5LT5md192 ZXJzaW9uLAorCQkgc2l6ZW9mKHdkZXYtPmh3LT53aXBoeS0+ZndfdmVyc2lvbiksCisJCSAiJWQu JWQuJWQiLAorCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9tYWpvciwKKwkJIHdkZXYtPmh3X2Nh cHMuZmlybXdhcmVfbWlub3IsCisJCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX2J1aWxkKTsKKwor CWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMCkpIHsKKwkJZGV2X2Vycih3ZGV2LT5k ZXYsCisJCQkidW5zdXBwb3J0ZWQgZmlybXdhcmUgQVBJIHZlcnNpb24gKGV4cGVjdCAxIHdoaWxl IGZpcm13YXJlIHJldHVybnMgJWQpXG4iLAorCQkJd2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9t YWpvcik7CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBiaF91bnJlZ2lzdGVyOworCX0KKwor CWlmICh3ZGV2LT5od19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkgeworCQlk ZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5l Z290aWF0ZSBpdFxuIik7CisJCWdvdG8gYmhfdW5yZWdpc3RlcjsKKwl9CisKKwlpZiAod2Rldi0+ aHdfY2Fwcy5yZWdpb25fc2VsX21vZGUpIHsKKwkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgw MjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzExXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19J UjsKKwkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxz WzEyXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JUjsKKwkJd2Rldi0+aHctPndpcGh5LT5i YW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzEzXS5mbGFncyB8PSBJRUVFODAyMTFf Q0hBTl9ESVNBQkxFRDsKKwl9CisKKwlkZXZfZGJnKHdkZXYtPmRldiwgInNlbmRpbmcgY29uZmln dXJhdGlvbiBmaWxlICVzXG4iLAorCQl3ZGV2LT5wZGF0YS5maWxlX3Bkcyk7CisJZXJyID0gd2Z4 X3NlbmRfcGRhdGFfcGRzKHdkZXYpOworCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRU5PRU5UKQor CQlnb3RvIGJoX3VucmVnaXN0ZXI7CisKKwl3ZGV2LT5wb2xsX2lycSA9IGZhbHNlOworCWVyciA9 IHdkZXYtPmh3YnVzX29wcy0+aXJxX3N1YnNjcmliZSh3ZGV2LT5od2J1c19wcml2KTsKKwlpZiAo ZXJyKQorCQlnb3RvIGJoX3VucmVnaXN0ZXI7CisKKwllcnIgPSB3ZnhfaGlmX3VzZV9tdWx0aV90 eF9jb25mKHdkZXYsIHRydWUpOworCWlmIChlcnIpCisJCWRldl9lcnIod2Rldi0+ZGV2LCAibWlz Y29uZmlndXJlZCBJUlE/XG4iKTsKKworCXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19z YXZlZDsKKwlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApIHsKKwkJZGV2X2RiZyh3ZGV2LT5k ZXYsICJlbmFibGUgJ3F1aWVzY2VudCcgcG93ZXIgbW9kZSB3aXRoIHdha2V1cCBHUElPIGFuZCBQ RFMgZmlsZSAlc1xuIiwKKwkJCXdkZXYtPnBkYXRhLmZpbGVfcGRzKTsKKwkJZ3Bpb2Rfc2V0X3Zh bHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAxKTsKKwkJd2Z4X2NvbnRyb2xf cmVnX3dyaXRlKHdkZXYsIDApOworCQl3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYs IEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7CisJfSBlbHNlIHsKKwkJd2Z4X2hpZl9zZXRf b3BlcmF0aW9uYWxfbW9kZSh3ZGV2LCBISUZfT1BfUE9XRVJfTU9ERV9ET1pFKTsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT5hZGRyZXNzZXMpOyBpKyspIHsKKwkJZXRo X3plcm9fYWRkcih3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcik7CisJCWVyciA9IG9mX2dldF9tYWNf YWRkcmVzcyh3ZGV2LT5kZXYtPm9mX25vZGUsCisJCQkJCSB3ZGV2LT5hZGRyZXNzZXNbaV0uYWRk cik7CisJCWlmICghZXJyKSB7CisJCQl3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcltFVEhfQUxFTiAt IDFdICs9IGk7CisJCX0gZWxzZSB7CisJCQlldGhlcl9hZGRyX2NvcHkod2Rldi0+YWRkcmVzc2Vz W2ldLmFkZHIsCisJCQkJCXdkZXYtPmh3X2NhcHMubWFjX2FkZHJbaV0pOworCQl9CisJCWlmICgh aXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcikpIHsKKwkJCWRldl93 YXJuKHdkZXYtPmRldiwgInVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xuIik7CisJCQlldGhfcmFu ZG9tX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOworCQl9CisJCWRldl9pbmZvKHdkZXYt PmRldiwgIk1BQyBhZGRyZXNzICVkOiAlcE1cbiIsIGksCisJCQkgd2Rldi0+YWRkcmVzc2VzW2ld LmFkZHIpOworCX0KKwl3ZGV2LT5ody0+d2lwaHktPm5fYWRkcmVzc2VzID0gQVJSQVlfU0laRSh3 ZGV2LT5hZGRyZXNzZXMpOworCXdkZXYtPmh3LT53aXBoeS0+YWRkcmVzc2VzID0gd2Rldi0+YWRk cmVzc2VzOworCisJaWYgKCF3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMywgOCkpCisJCXdkZXYt Pmh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTOworCisJZXJyID0g aWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtPmh3KTsKKwlpZiAoZXJyKQorCQlnb3RvIGlycV91 bnN1YnNjcmliZTsKKworCWVyciA9IHdmeF9kZWJ1Z19pbml0KHdkZXYpOworCWlmIChlcnIpCisJ CWdvdG8gaWVlZTgwMjExX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworaWVlZTgwMjExX3Vu cmVnaXN0ZXI6CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0+aHcpOworaXJxX3Vuc3Vi c2NyaWJlOgorCXdkZXYtPmh3YnVzX29wcy0+aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3By aXYpOworYmhfdW5yZWdpc3RlcjoKKwl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTsKKwlyZXR1cm4g ZXJyOworfQorCit2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQoreworCWll ZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsKKwl3ZnhfaGlmX3NodXRkb3duKHdkZXYp OworCXdkZXYtPmh3YnVzX29wcy0+aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOwor CXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3ZnhfY29y ZV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdf U1BJKSkKKwkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2ZXIpOworCWlm IChJU19FTkFCTEVEKENPTkZJR19NTUMpICYmICFyZXQpCisJCXJldCA9IHNkaW9fcmVnaXN0ZXJf ZHJpdmVyKCZ3Znhfc2Rpb19kcml2ZXIpOworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3 ZnhfY29yZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdmeF9jb3JlX2V4aXQodm9pZCkK K3sKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSkKKwkJc2Rpb191bnJlZ2lzdGVyX2RyaXZl cigmd2Z4X3NkaW9fZHJpdmVyKTsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKKwkJc3Bp X3VucmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3Znhf Y29yZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv bWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMDEwZWIwY2VhMWIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaApAQCAtMCwwICsx LDQ0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgor ICogRGV2aWNlIHByb2JlIGFuZCByZWdpc3Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2lj ZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90 ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICovCisjaWZuZGVmIFdGWF9NQUlOX0gKKyNk ZWZpbmUgV0ZYX01BSU5fSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvZ3Bpby9jb25zdW1lci5oPgorCisjaW5jbHVkZSAiaGlmX2FwaV9nZW5lcmFsLmgiCisK K3N0cnVjdCB3ZnhfZGV2Oworc3RydWN0IHdmeF9od2J1c19vcHM7CisKK3N0cnVjdCB3ZnhfcGxh dGZvcm1fZGF0YSB7CisJLyogS2V5c2V0IGFuZCAiLnNlYyIgZXh0ZW5zaW9uIHdpbGwgYmUgYXBw ZW5kZWQgdG8gdGhpcyBzdHJpbmcgKi8KKwljb25zdCBjaGFyICpmaWxlX2Z3OworCWNvbnN0IGNo YXIgKmZpbGVfcGRzOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fd2FrZXVwOworCWJvb2wgcmVz ZXRfaW52ZXJ0ZWQ7CisJLyogaWYgdHJ1ZSBISUYgRF9vdXQgaXMgc2FtcGxlZCBvbiB0aGUgcmlz aW5nIGVkZ2Ugb2YgdGhlIGNsb2NrCisJICogKGludGVuZGVkIHRvIGJlIHVzZWQgaW4gNTBNaHog U0RJTykKKwkgKi8KKwlib29sIHVzZV9yaXNpbmdfY2xrOworfTsKKworc3RydWN0IHdmeF9kZXYg KndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHdm eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCQljb25zdCBzdHJ1Y3Qgd2Z4X2h3YnVzX29wcyAq aHdidXNfb3BzLAorCQkJCXZvaWQgKmh3YnVzX3ByaXYpOworCitpbnQgd2Z4X3Byb2JlKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KTsKK3ZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYp OworCitib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IG1h am9yLCBpbnQgbWlub3IpOworaW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTggKmJ1Ziwgc2l6ZV90IGxlbik7CisKKyNlbmRpZgotLSAKMi4zMy4wCgo=