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=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 A86A9C4741F for ; Wed, 4 Nov 2020 15:56:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5DA1E2063A for ; Wed, 4 Nov 2020 15:56:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="D8bh4Vrf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730985AbgKDPwu (ORCPT ); Wed, 4 Nov 2020 10:52:50 -0500 Received: from mail-eopbgr750080.outbound.protection.outlook.com ([40.107.75.80]:6126 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730882AbgKDPwt (ORCPT ); Wed, 4 Nov 2020 10:52:49 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AuJF+DRqog3ch8fk+0YeUbxZAxBHRGY6KNB/qfdUAu2PLnw1afjPfaNHJ3GjoYanhD1UtXIo2OKUVXdNwrGo0zHyV0+XrMYCwJdWM2X50R/YI5eL+xY0VGMqlx58ag4LBZOVKOOfIeVkJgYQZ9Cjy7WP8D500vnL3ZzXxlD9FPm5oZUgcPaErNewgSeQdrHW2kP98QDJK8kzKOuLnwcHTsEtf/F3PSW01kQ54MKbQVgiBMPQiLPubAaquaUPJiCidluoxWNWMWcx+dEGn/cLcBAs57KyS3kyZTHYvIl2KAnW+pkE3NFxFdA2ChA1vj7sLIT9tev318rVA/xD7UwFPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fToRYLC37VQYsDq3X6A9sqCSuGGHfNtPPa2+eRKoZpA=; b=m0BjlMHq0lWqkKNiB4CZ+uI+YtRZUEowGF6Iqar5bRSoqbw6BWteAdrP6UhGyo1X722OdaBQWRTLPD71l9VKhGPBjx4CPpjAq1uA1FOIYOuLUSP1xXVNNghasOAyqhzFZFPJouzlewHhDjlUEhR5lf0sAf2TYDTZQwbSZhoEnb5etJba35fNk/6xpB0aJ4b78h+DPcYy+AUZeihro8rsSvzCWRFL8UY9G+u2lvHN0VTrKcE5xCsDKuh74RUxZ4HXXp8L/a4rPmfKf/TMmGNaC3Y9q2BRrj3SXuWPvx3eaw6dJu4ak+E5jPG+jvm4h88zV9OMDTFzqjZ+YsgpU2JpLQ== 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=fToRYLC37VQYsDq3X6A9sqCSuGGHfNtPPa2+eRKoZpA=; b=D8bh4VrfsXvRwdntpJiVTk9RH4slQbnDht739ywz+tIhkfkZ91v/OovOxxwDsY6GHg9dfZQIZVs7znHL0XxkaMOHmhsmG1Zgx4MKR0P0sg20F6hQn5hw1QtHCoHEJvKAad/FemLTg5RIqPAkIX2BaWG3nuX29MlDpKM1TsxLMV8= 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 SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.32; Wed, 4 Nov 2020 15:52:33 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a%5]) with mapi id 15.20.3499.032; Wed, 4 Nov 2020 15:52:33 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v3 05/24] wfx: add main.c/main.h Date: Wed, 4 Nov 2020 16:51:48 +0100 Message-Id: <20201104155207.128076-6-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201104155207.128076-1-Jerome.Pouiller@silabs.com> References: <20201104155207.128076-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: SN6PR01CA0032.prod.exchangelabs.com (2603:10b6:805:b6::45) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (82.67.86.106) by SN6PR01CA0032.prod.exchangelabs.com (2603:10b6:805:b6::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.19 via Frontend Transport; Wed, 4 Nov 2020 15:52:31 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f825c1f-1e0b-4fae-2093-08d880d9a469 X-MS-TrafficTypeDiagnostic: SN6PR11MB2718: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:147; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AF+NC+K3YBEFxVP7XBPN+gmLPr0X3XJAETkJ7GWvpfZZtnJ6hM/Z3vXvMR83jPjmZ3YfzOh53eOIpiP701VKfjwycYvsHgPDmUo6i7VIh4u3OG56WIVkjhmUaVrmA7fZdeEvHtGsj2WuJOd/GoOH5xf5Xlz0cEf2euDIeRtIQs8sYE4zVDPDHpgRmml9RM8yxonk6B1Q1c5nM4C5kKeqIgEaLbzHeky8On2rJFek2TC04SUxJ2jxd3Q4LEEmgCdLvHJwDCujcpvmY+SdfdUJPynZmXJP2i3PBuZPulDhdXdD9jF9Sx34M1wh/MCgyIAdVK1eZYHcsk8iXptVuP4ckQ== 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)(346002)(376002)(39850400004)(136003)(396003)(8936002)(478600001)(186003)(16526019)(956004)(2616005)(6486002)(8676002)(66574015)(66476007)(66556008)(66946007)(316002)(7696005)(6666004)(83380400001)(26005)(54906003)(107886003)(30864003)(36756003)(52116002)(7416002)(4326008)(5660300002)(86362001)(1076003)(2906002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: RvIAUeTtOeiIqGm3axEW+0+f8KgsBnrgUqRcyjNKnnT+/XGmjvC4FF6ARcSv5N7jNDBcsHHug7lPqKRXvhrR8+szTpQtCNkJ3grW30JXRpsKr080hfcufqHb88ayuQG6+Aap6xqhKesRPZXTxiAZjiOVmDMpv7N+IWeX+LIgD/EDmvqwvneICavczEbgaBM4jG+z9tLzpUrSbZvCt3bo3jgYXx1HR8akhb4Xxz4jN+ng8ZjpZndGo9Rb7BurJlM8xEthB4oyloqD/L0rG1L7hfG+TjG4ZCLP4htKZleLiucq/PVH9j1VkBIiPQGXa94g488xWBS71JIYsKnNNK7rxho8yFSfDBWyuzlLQgPn7R5l46Itf/I6vMvjeCqzcrlF4Ff48NnjRJnL5auW7EqIm/PAXIi1ZFJwAGf7Z3BfNyZkYzUYt3El7JVS2ZeMKQBso3hSXGiTgq8GJ1c7LmmH1yUC1Q1S4tqjZH1Kv6Bg0T9I1ukt0r2bABu57fL3XS09m9XANGPQRRbDdb8wwCfIUPEUFgZ0qBBzV2cmuGXROKhQNvc0kU/+loxawrJV9XSIXps3t53IX5NkhZnfyTMr8s3uESXB5hQJca+8bEh/kLtPYCx48ERgpUS0GATsZb8q52jzN5R72n9KhEFyG2OgLA== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f825c1f-1e0b-4fae-2093-08d880d9a469 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2020 15:52:33.0195 (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: NN/ToqLQKlsrsfeBnK0Q2P0V+BdpN8SVT3x3ygHohXP2LsHK10rzAHvrcpmYIC8Fxa9KqOGonoagJIpb6GkpGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2718 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jIHwgNDg5ICsrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFp bi5oIHwgIDQ0ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMWI0OTBiMDA5OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMKQEAgLTAsMCArMSw0ODkgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBEZXZpY2UgcHJvYmUg YW5kIHJlZ2lzdGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExh Ym9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICog Q29weXJpZ2h0IChjKSAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMu bmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg c3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4g TGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hh ZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIw MDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKi8KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUg PGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNs dWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgor I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUu aD4KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3ZnguaCIKKyNpbmNsdWRlICJmd2lv LmgiCisjaW5jbHVkZSAiaHdpby5oIgorI2luY2x1ZGUgImJ1cy5oIgorI2luY2x1ZGUgImJoLmgi CisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZGF0YV90eC5oIgorI2luY2x1ZGUgImhpZl90 eF9taWIuaCIKKyNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIgorCisjZGVmaW5lIFdGWF9QRFNfTUFY X1NJWkUgMTUwMAorCitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbGljb24gTGFicyA4MDIuMTEgV2ly ZWxlc3MgTEFOIGRyaXZlciBmb3IgV0Z4Iik7CitNT0RVTEVfQVVUSE9SKCJKw6lyw7RtZSBQb3Vp bGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BM Iik7CisKKyNkZWZpbmUgUkFURVRBQl9FTlQoX3JhdGUsIF9yYXRlaWQsIF9mbGFncykgeyBcCisJ LmJpdHJhdGUgID0gKF9yYXRlKSwgICBcCisJLmh3X3ZhbHVlID0gKF9yYXRlaWQpLCBcCisJLmZs YWdzICAgID0gKF9mbGFncyksICBcCit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUg d2Z4X3JhdGVzW10gPSB7CisJUkFURVRBQl9FTlQoMTAsICAwLCAgMCksCisJUkFURVRBQl9FTlQo MjAsICAxLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEVUQUJfRU5UKDU1 LCAgMiwgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVCgxMTAs IDMsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURVRBQl9FTlQoNjAsICA2 LCAgMCksCisJUkFURVRBQl9FTlQoOTAsICA3LCAgMCksCisJUkFURVRBQl9FTlQoMTIwLCA4LCAg MCksCisJUkFURVRBQl9FTlQoMTgwLCA5LCAgMCksCisJUkFURVRBQl9FTlQoMjQwLCAxMCwgMCks CisJUkFURVRBQl9FTlQoMzYwLCAxMSwgMCksCisJUkFURVRBQl9FTlQoNDgwLCAxMiwgMCksCisJ UkFURVRBQl9FTlQoNTQwLCAxMywgMCksCit9OworCisjZGVmaW5lIENIQU4yRyhfY2hhbm5lbCwg X2ZyZXEsIF9mbGFncykgeyBcCisJLmJhbmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgXAorCS5jZW50 ZXJfZnJlcSA9IChfZnJlcSksICAgIFwKKwkuaHdfdmFsdWUgPSAoX2NoYW5uZWwpLCAgICBcCisJ LmZsYWdzID0gKF9mbGFncyksICAgICAgICAgXAorCS5tYXhfYW50ZW5uYV9nYWluID0gMCwgICAg IFwKKwkubWF4X3Bvd2VyID0gMzAsICAgICAgICAgICBcCit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5uZWwgd2Z4XzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDEsICAyNDEy LCAwKSwKKwlDSEFOMkcoMiwgIDI0MTcsIDApLAorCUNIQU4yRygzLCAgMjQyMiwgMCksCisJQ0hB TjJHKDQsICAyNDI3LCAwKSwKKwlDSEFOMkcoNSwgIDI0MzIsIDApLAorCUNIQU4yRyg2LCAgMjQz NywgMCksCisJQ0hBTjJHKDcsICAyNDQyLCAwKSwKKwlDSEFOMkcoOCwgIDI0NDcsIDApLAorCUNI QU4yRyg5LCAgMjQ1MiwgMCksCisJQ0hBTjJHKDEwLCAyNDU3LCAwKSwKKwlDSEFOMkcoMTEsIDI0 NjIsIDApLAorCUNIQU4yRygxMiwgMjQ2NywgMCksCisJQ0hBTjJHKDEzLCAyNDcyLCAwKSwKKwlD SEFOMkcoMTQsIDI0ODQsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf c3VwcG9ydGVkX2JhbmQgd2Z4X2JhbmRfMmdoeiA9IHsKKwkuY2hhbm5lbHMgPSB3ZnhfMmdoel9j aGFudGFibGUsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdmeF8yZ2h6X2NoYW50YWJsZSks CisJLmJpdHJhdGVzID0gd2Z4X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3Znhf cmF0ZXMpLAorCS5odF9jYXAgPSB7CisJCS8vIFJlY2VpdmUgY2FwcworCQkuY2FwID0gSUVFRTgw MjExX0hUX0NBUF9HUk5fRkxEIHwgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfAorCQkgICAgICAg SUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFUgfAorCQkgICAgICAgKDEgPDwgSUVFRTgwMjExX0hU X0NBUF9SWF9TVEJDX1NISUZUKSwKKwkJLmh0X3N1cHBvcnRlZCA9IDEsCisJCS5hbXBkdV9mYWN0 b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SywKKwkJLmFtcGR1X2RlbnNpdHkgPSBJRUVF ODAyMTFfSFRfTVBEVV9ERU5TSVRZX05PTkUsCisJCS5tY3MgPSB7CisJCQkucnhfbWFzayA9IHsg MHhGRiB9LCAvLyBNQ1MwIHRvIE1DUzcKKwkJCS5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYoNzIp LAorCQkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwKKwkJfSwKKwl9 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgd2Rldl9p ZmFjZV9saW1pdHNbXSA9IHsKKwl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZ UEVfU1RBVElPTikgfSwKKwl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVf QVApIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5h dGlvbiB3ZnhfaWZhY2VfY29tYmluYXRpb25zW10gPSB7CisJeworCQkubnVtX2RpZmZlcmVudF9j aGFubmVscyA9IDIsCisJCS5tYXhfaW50ZXJmYWNlcyA9IDIsCisJCS5saW1pdHMgPSB3ZGV2X2lm YWNlX2xpbWl0cywKKwkJLm5fbGltaXRzID0gQVJSQVlfU0laRSh3ZGV2X2lmYWNlX2xpbWl0cyks CisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdmeF9vcHMgPSB7 CisJLnN0YXJ0CQkJPSB3Znhfc3RhcnQsCisJLnN0b3AJCQk9IHdmeF9zdG9wLAorCS5hZGRfaW50 ZXJmYWNlCQk9IHdmeF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Z4X3Jl bW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyAgICAgICAgICAgICAgICAgPSB3ZnhfY29uZmlnLAor CS50eAkJCT0gd2Z4X3R4LAorCS5qb2luX2lic3MJCT0gd2Z4X2pvaW5faWJzcywKKwkubGVhdmVf aWJzcwkJPSB3ZnhfbGVhdmVfaWJzcywKKwkuY29uZl90eAkJPSB3ZnhfY29uZl90eCwKKwkuaHdf c2NhbgkJPSB3ZnhfaHdfc2NhbiwKKwkuY2FuY2VsX2h3X3NjYW4JCT0gd2Z4X2NhbmNlbF9od19z Y2FuLAorCS5zdGFydF9hcAkJPSB3Znhfc3RhcnRfYXAsCisJLnN0b3BfYXAJCT0gd2Z4X3N0b3Bf YXAsCisJLnN0YV9hZGQJCT0gd2Z4X3N0YV9hZGQsCisJLnN0YV9yZW1vdmUJCT0gd2Z4X3N0YV9y ZW1vdmUsCisJLnNldF90aW0JCT0gd2Z4X3NldF90aW0sCisJLnNldF9rZXkJCT0gd2Z4X3NldF9r ZXksCisJLnNldF9ydHNfdGhyZXNob2xkCT0gd2Z4X3NldF9ydHNfdGhyZXNob2xkLAorCS5zZXRf ZGVmYXVsdF91bmljYXN0X2tleSA9IHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleSwKKwkuYnNz X2luZm9fY2hhbmdlZAk9IHdmeF9ic3NfaW5mb19jaGFuZ2VkLAorCS5jb25maWd1cmVfZmlsdGVy CT0gd2Z4X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmFtcGR1X2FjdGlvbgkJPSB3ZnhfYW1wZHVfYWN0 aW9uLAorCS5mbHVzaAkJCT0gd2Z4X2ZsdXNoLAorCS5hZGRfY2hhbmN0eAkJPSB3ZnhfYWRkX2No YW5jdHgsCisJLnJlbW92ZV9jaGFuY3R4CQk9IHdmeF9yZW1vdmVfY2hhbmN0eCwKKwkuY2hhbmdl X2NoYW5jdHgJCT0gd2Z4X2NoYW5nZV9jaGFuY3R4LAorCS5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3 ZnhfYXNzaWduX3ZpZl9jaGFuY3R4LAorCS51bmFzc2lnbl92aWZfY2hhbmN0eAk9IHdmeF91bmFz c2lnbl92aWZfY2hhbmN0eCwKK307CisKK2Jvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBpbnQgbWFqb3IsIGludCBtaW5vcikKK3sKKwlpZiAod2Rldi0+aHdfY2Fw cy5hcGlfdmVyc2lvbl9tYWpvciA8IG1ham9yKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAod2Rldi0+ aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpvciA+IG1ham9yKQorCQlyZXR1cm4gZmFsc2U7CisJaWYg KHdkZXYtPmh3X2NhcHMuYXBpX3ZlcnNpb25fbWlub3IgPCBtaW5vcikKKwkJcmV0dXJuIHRydWU7 CisJcmV0dXJuIGZhbHNlOworfQorCisvKiBOT1RFOiB3Znhfc2VuZF9wZHMoKSBkZXN0cm95IGJ1 ZiAqLworaW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTggKmJ1Ziwgc2l6 ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCWludCBzdGFydCwgYnJhY2VfbGV2ZWwsIGk7CisKKwlz dGFydCA9IDA7CisJYnJhY2VfbGV2ZWwgPSAwOworCWlmIChidWZbMF0gIT0gJ3snKSB7CisJCWRl dl9lcnIod2Rldi0+ZGV2LCAidmFsaWQgUERTIHN0YXJ0IHdpdGggJ3snLiBEaWQgeW91IGZvcmdl dCB0byBjb21wcmVzcyBpdD9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZm9yIChpID0g MTsgaSA8IGxlbiAtIDE7IGkrKykgeworCQlpZiAoYnVmW2ldID09ICd7JykKKwkJCWJyYWNlX2xl dmVsKys7CisJCWlmIChidWZbaV0gPT0gJ30nKQorCQkJYnJhY2VfbGV2ZWwtLTsKKwkJaWYgKGJ1 ZltpXSA9PSAnfScgJiYgIWJyYWNlX2xldmVsKSB7CisJCQlpKys7CisJCQlpZiAoaSAtIHN0YXJ0 ICsgMSA+IFdGWF9QRFNfTUFYX1NJWkUpCisJCQkJcmV0dXJuIC1FRkJJRzsKKwkJCWJ1ZltzdGFy dF0gPSAneyc7CisJCQlidWZbaV0gPSAwOworCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJzZW5kIFBE UyAnJXN9J1xuIiwgYnVmICsgc3RhcnQpOworCQkJYnVmW2ldID0gJ30nOworCQkJcmV0ID0gaGlm X2NvbmZpZ3VyYXRpb24od2RldiwgYnVmICsgc3RhcnQsCisJCQkJCQlpIC0gc3RhcnQgKyAxKTsK KwkJCWlmIChyZXQgPiAwKSB7CisJCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQRFMgYnl0ZXMgJWQg dG8gJWQ6IGludmFsaWQgZGF0YSAodW5zdXBwb3J0ZWQgb3B0aW9ucz8pXG4iLAorCQkJCQlzdGFy dCwgaSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAocmV0ID09IC1FVElNRURP VVQpIHsKKwkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBieXRlcyAlZCB0byAlZDogY2hpcCBk aWRuJ3QgcmVwbHkgKGNvcnJ1cHRlZCBmaWxlPylcbiIsCisJCQkJCXN0YXJ0LCBpKTsKKwkJCQly ZXR1cm4gcmV0OworCQkJfQorCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIod2Rldi0+ZGV2LCAi UERTIGJ5dGVzICVkIHRvICVkOiBjaGlwIHJldHVybmVkIGFuIHVua25vd24gZXJyb3JcbiIsCisJ CQkJCXN0YXJ0LCBpKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWJ1ZltpXSA9ICcsJzsK KwkJCXN0YXJ0ID0gaTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3Znhf c2VuZF9wZGF0YV9wZHMoc3RydWN0IHdmeF9kZXYgKndkZXYpCit7CisJaW50IHJldCA9IDA7CisJ Y29uc3Qgc3RydWN0IGZpcm13YXJlICpwZHM7CisJdTggKnRtcF9idWY7CisKKwlyZXQgPSByZXF1 ZXN0X2Zpcm13YXJlKCZwZHMsIHdkZXYtPnBkYXRhLmZpbGVfcGRzLCB3ZGV2LT5kZXYpOworCWlm IChyZXQpIHsKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJjYW4ndCBsb2FkIFBEUyBmaWxlICVzXG4i LAorCQkJd2Rldi0+cGRhdGEuZmlsZV9wZHMpOworCQlyZXR1cm4gcmV0OworCX0KKwl0bXBfYnVm ID0ga21lbWR1cChwZHMtPmRhdGEsIHBkcy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBf YnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZV9mdzsKKwl9CisJcmV0ID0g d2Z4X3NlbmRfcGRzKHdkZXYsIHRtcF9idWYsIHBkcy0+c2l6ZSk7CisJa2ZyZWUodG1wX2J1Zik7 CityZWxlYXNlX2Z3OgorCXJlbGVhc2VfZmlybXdhcmUocGRzKTsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCB3ZnhfZnJlZV9jb21tb24odm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiA9IGRhdGE7CisKKwltdXRleF9kZXN0cm95KCZ3ZGV2LT50eF9wb3dlcl9sb29w X2luZm9fbG9jayk7CisJbXV0ZXhfZGVzdHJveSgmd2Rldi0+cnhfc3RhdHNfbG9jayk7CisJbXV0 ZXhfZGVzdHJveSgmd2Rldi0+Y29uZl9tdXRleCk7CisJaWVlZTgwMjExX2ZyZWVfaHcod2Rldi0+ aHcpOworfQorCitzdHJ1Y3Qgd2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2Ug KmRldiwKKwkJCQljb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJCWNv bnN0IHN0cnVjdCBod2J1c19vcHMgKmh3YnVzX29wcywKKwkJCQl2b2lkICpod2J1c19wcml2KQor eworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2OworCisJ aHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCB3ZnhfZGV2KSwgJndmeF9vcHMp OworCWlmICghaHcpCisJCXJldHVybiBOVUxMOworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRl dik7CisKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBUWF9BTVBEVV9TRVRVUF9JTl9IVyk7CisJaWVl ZTgwMjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pOworCWllZWU4MDIxMV9od19zZXQo aHcsIENPTk5FQ1RJT05fTU9OSVRPUik7CisJaWVlZTgwMjExX2h3X3NldChodywgUkVQT1JUU19U WF9BQ0tfU1RBVFVTKTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19EWU5BTUlDX1BT KTsKKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTSUdOQUxfREJNKTsKKwlpZWVlODAyMTFfaHdfc2V0 KGh3LCBTVVBQT1JUU19QUyk7CisJaWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpOwor CisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHdmeF92aWYpOworCWh3LT5zdGFf ZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3Znhfc3RhX3ByaXYpOworCWh3LT5xdWV1ZXMgPSA0 OworCWh3LT5tYXhfcmF0ZXMgPSA4OworCWh3LT5tYXhfcmF0ZV90cmllcyA9IDg7CisJaHctPmV4 dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKQorCQkJCSsgc2l6ZW9mKHN0 cnVjdCBoaWZfcmVxX3R4KQorCQkJCSsgNCAvKiBhbGlnbm1lbnQgKi8gKyA4IC8qIFRLSVAgSVYg Ki87CisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RB VElPTikgfAorCQkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8CisJCQkJICAgICBC SVQoTkw4MDIxMV9JRlRZUEVfQVApOworCWh3LT53aXBoeS0+cHJvYmVfcmVzcF9vZmZsb2FkID0g Tkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF9XUFMgfAorCQkJCQlOTDgwMjExX1BS T0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1dQUzIgfAorCQkJCQlOTDgwMjExX1BST0JFX1JFU1Bf T0ZGTE9BRF9TVVBQT1JUX1AyUCB8CisJCQkJCU5MODAyMTFfUFJPQkVfUkVTUF9PRkZMT0FEX1NV UFBPUlRfODAyMTFVOworCWh3LT53aXBoeS0+ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FQ X1NDQU47CisJaHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1BST0JFX1JFU1BfT0ZG TE9BRDsKKwlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQVBfVUFQU0Q7CisJaHctPndp cGh5LT5tYXhfYXBfYXNzb2Nfc3RhID0gSElGX0xJTktfSURfTUFYOworCWh3LT53aXBoeS0+bWF4 X3NjYW5fc3NpZHMgPSAyOworCWh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gSUVFRTgwMjEx X01BWF9EQVRBX0xFTjsKKwlody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlf U0laRSh3ZnhfaWZhY2VfY29tYmluYXRpb25zKTsKKwlody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0 aW9ucyA9IHdmeF9pZmFjZV9jb21iaW5hdGlvbnM7CisJaHctPndpcGh5LT5iYW5kc1tOTDgwMjEx X0JBTkRfMkdIWl0gPSBkZXZtX2ttYWxsb2MoZGV2LCBzaXplb2Yod2Z4X2JhbmRfMmdoeiksIEdG UF9LRVJORUwpOworCS8vIEZJWE1FOiBhbHNvIGNvcHkgd2Z4X3JhdGVzIGFuZCB3ZnhfMmdoel9j aGFudGFibGUKKwltZW1jcHkoaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0sICZ3 ZnhfYmFuZF8yZ2h6LAorCSAgICAgICBzaXplb2Yod2Z4X2JhbmRfMmdoeikpOworCisJd2RldiA9 IGh3LT5wcml2OworCXdkZXYtPmh3ID0gaHc7CisJd2Rldi0+ZGV2ID0gZGV2OworCXdkZXYtPmh3 YnVzX29wcyA9IGh3YnVzX29wczsKKwl3ZGV2LT5od2J1c19wcml2ID0gaHdidXNfcHJpdjsKKwlt ZW1jcHkoJndkZXYtPnBkYXRhLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworCW9mX3Byb3BlcnR5 X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgInNpbGFicyxhbnRlbm5hLWNvbmZpZy1maWxlIiwK KwkJCQkmd2Rldi0+cGRhdGEuZmlsZV9wZHMpOworCXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwID0g ZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAid2FrZXVwIiwKKwkJCQkJCQkgIEdQSU9EX09V VF9MT1cpOworCWlmIChJU19FUlIod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApKQorCQlyZXR1cm4g TlVMTDsKKwlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApCisJCWdwaW9kX3NldF9jb25zdW1l cl9uYW1lKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAid2Z4IHdha2V1cCIpOworCisJbXV0ZXhf aW5pdCgmd2Rldi0+Y29uZl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmd2Rldi0+cnhfc3RhdHNfbG9j ayk7CisJbXV0ZXhfaW5pdCgmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvX2xvY2spOworCWluaXRf Y29tcGxldGlvbigmd2Rldi0+ZmlybXdhcmVfcmVhZHkpOworCUlOSVRfREVMQVlFRF9XT1JLKCZ3 ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaywKKwkJCSAgd2Z4X2Nvb2xpbmdfdGltZW91dF93b3Jr KTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3ZGV2LT50eF9wZW5kaW5nKTsKKwlpbml0X3dhaXRx dWV1ZV9oZWFkKCZ3ZGV2LT50eF9kZXF1ZXVlKTsKKwl3ZnhfaW5pdF9oaWZfY21kKCZ3ZGV2LT5o aWZfY21kKTsKKwl3ZGV2LT5mb3JjZV9wc190aW1lb3V0ID0gLTE7CisKKwlpZiAoZGV2bV9hZGRf YWN0aW9uX29yX3Jlc2V0KGRldiwgd2Z4X2ZyZWVfY29tbW9uLCB3ZGV2KSkKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gd2RldjsKK30KKworaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAq d2RldikKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCWNvbnN0IHZvaWQgKm1hY2FkZHI7CisJc3Ry dWN0IGdwaW9fZGVzYyAqZ3Bpb19zYXZlZDsKKworCS8vIER1cmluZyBmaXJzdCBwYXJ0IG9mIGJv b3QsIGdwaW9fd2FrZXVwIGNhbm5vdCB5ZXQgYmVlbiB1c2VkLiBTbworCS8vIHByZXZlbnQgYmgo KSB0byB0b3VjaCBpdC4KKwlncGlvX3NhdmVkID0gd2Rldi0+cGRhdGEuZ3Bpb193YWtldXA7CisJ d2Rldi0+cGRhdGEuZ3Bpb193YWtldXAgPSBOVUxMOworCXdkZXYtPnBvbGxfaXJxID0gdHJ1ZTsK KworCXdmeF9iaF9yZWdpc3Rlcih3ZGV2KTsKKworCWVyciA9IHdmeF9pbml0X2RldmljZSh3ZGV2 KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjA7CisKKwl3ZnhfYmhfcG9sbF9pcnEod2Rldik7CisJ ZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5maXJtd2FyZV9yZWFkeSwg MSAqIEhaKTsKKwlpZiAoZXJyIDw9IDApIHsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlkZXZfZXJy KHdkZXYtPmRldiwgInRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3RhcnR1cCBpbmRpY2F0aW9u XG4iKTsKKwkJCWVyciA9IC1FVElNRURPVVQ7CisJCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFS VFNZUykgeworCQkJZGV2X2luZm8od2Rldi0+ZGV2LCAicHJvYmUgaW50ZXJydXB0ZWQgYnkgdXNl clxuIik7CisJCX0KKwkJZ290byBlcnIwOworCX0KKworCS8vIEZJWE1FOiBmaWxsIHdpcGh5Ojpo d192ZXJzaW9uCisJZGV2X2luZm8od2Rldi0+ZGV2LCAic3RhcnRlZCBmaXJtd2FyZSAlZC4lZC4l ZCBcIiVzXCIgKEFQSTogJWQuJWQsIGtleXNldDogJTAyWCwgY2FwczogMHglLjhYKVxuIiwKKwkJ IHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWFqb3IsIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWlu b3IsCisJCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX2J1aWxkLCB3ZGV2LT5od19jYXBzLmZpcm13 YXJlX2xhYmVsLAorCQkgd2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpvciwgd2Rldi0+aHdf Y2Fwcy5hcGlfdmVyc2lvbl9taW5vciwKKwkJIHdkZXYtPmtleXNldCwgd2Rldi0+aHdfY2Fwcy5s aW5rX21vZGUpOworCXNucHJpbnRmKHdkZXYtPmh3LT53aXBoeS0+ZndfdmVyc2lvbiwKKwkJIHNp emVvZih3ZGV2LT5ody0+d2lwaHktPmZ3X3ZlcnNpb24pLAorCQkgIiVkLiVkLiVkIiwKKwkJIHdk ZXYtPmh3X2NhcHMuZmlybXdhcmVfbWFqb3IsCisJCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21p bm9yLAorCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9idWlsZCk7CisKKwlpZiAod2Z4X2FwaV9v bGRlcl90aGFuKHdkZXYsIDEsIDApKSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LAorCQkJInVuc3Vw cG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9uIChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1 cm5zICVkKVxuIiwKKwkJCXdkZXYtPmh3X2NhcHMuYXBpX3ZlcnNpb25fbWFqb3IpOworCQllcnIg PSAtRU5PVFNVUFA7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlpZiAod2Rldi0+aHdfY2Fwcy5saW5r X21vZGUgPT0gU0VDX0xJTktfRU5GT1JDRUQpIHsKKwkJZGV2X2Vycih3ZGV2LT5kZXYsCisJCQki Y2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBidXQgY2FuJ3QgbmVnb3RpYXRlIGl0XG4iKTsKKwkJ Z290byBlcnIwOworCX0KKworCWlmICh3ZGV2LT5od19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkgewor CQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTFd LmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lSOworCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRz W05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTJdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFO X05PX0lSOworCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hh bm5lbHNbMTNdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCX0KKworCWRldl9k Ymcod2Rldi0+ZGV2LCAic2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcbiIsCisJCXdkZXYt PnBkYXRhLmZpbGVfcGRzKTsKKwllcnIgPSB3Znhfc2VuZF9wZGF0YV9wZHMod2Rldik7CisJaWYg KGVyciA8IDApCisJCWdvdG8gZXJyMDsKKworCXdkZXYtPnBvbGxfaXJxID0gZmFsc2U7CisJZXJy ID0gd2Rldi0+aHdidXNfb3BzLT5pcnFfc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOworCWlm IChlcnIpCisJCWdvdG8gZXJyMDsKKworCWVyciA9IGhpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2 LCB0cnVlKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdkZXYtPmRldiwgIm1pc2NvbmZpZ3VyZWQg SVJRP1xuIik7CisKKwl3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCA9IGdwaW9fc2F2ZWQ7CisJaWYg KHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKSB7CisJCWRldl9kYmcod2Rldi0+ZGV2LAorCQkJImVu YWJsZSAncXVpZXNjZW50JyBwb3dlciBtb2RlIHdpdGggd2FrZXVwIEdQSU8gYW5kIFBEUyBmaWxl ICVzXG4iLAorCQkJd2Rldi0+cGRhdGEuZmlsZV9wZHMpOworCQlncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXAsIDEpOworCQljb250cm9sX3JlZ193cml0ZSh3 ZGV2LCAwKTsKKwkJaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9N T0RFX1FVSUVTQ0VOVCk7CisJfSBlbHNlIHsKKwkJaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdk ZXYsIEhJRl9PUF9QT1dFUl9NT0RFX0RPWkUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHdkZXYtPmFkZHJlc3Nlcyk7IGkrKykgeworCQlldGhfemVyb19hZGRyKHdkZXYtPmFk ZHJlc3Nlc1tpXS5hZGRyKTsKKwkJbWFjYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LT5k ZXYtPm9mX25vZGUpOworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKG1hY2FkZHIpKSB7CisJCQlldGhl cl9hZGRyX2NvcHkod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIsIG1hY2FkZHIpOworCQkJd2Rldi0+ YWRkcmVzc2VzW2ldLmFkZHJbRVRIX0FMRU4gLSAxXSArPSBpOworCQl9IGVsc2UgeworCQkJZXRo ZXJfYWRkcl9jb3B5KHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyLAorCQkJCQl3ZGV2LT5od19jYXBz Lm1hY19hZGRyW2ldKTsKKwkJfQorCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIod2Rldi0+YWRk cmVzc2VzW2ldLmFkZHIpKSB7CisJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1c2luZyByYW5kb20g TUFDIGFkZHJlc3NcbiIpOworCQkJZXRoX3JhbmRvbV9hZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5h ZGRyKTsKKwkJfQorCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJNQUMgYWRkcmVzcyAlZDogJXBNXG4i LCBpLAorCQkJIHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsKKwl9CisJd2Rldi0+aHctPndpcGh5 LT5uX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUod2Rldi0+YWRkcmVzc2VzKTsKKwl3ZGV2LT5ody0+ d2lwaHktPmFkZHJlc3NlcyA9IHdkZXYtPmFkZHJlc3NlczsKKworCWVyciA9IGllZWU4MDIxMV9y ZWdpc3Rlcl9odyh3ZGV2LT5odyk7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCisJZXJyID0g d2Z4X2RlYnVnX2luaXQod2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnIyOworCisJcmV0dXJu IDA7CisKK2VycjI6CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0+aHcpOworZXJyMToK Kwl3ZGV2LT5od2J1c19vcHMtPmlycV91bnN1YnNjcmliZSh3ZGV2LT5od2J1c19wcml2KTsKK2Vy cjA6CisJd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCB3 ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlpZWVlODAyMTFfdW5yZWdpc3Rl cl9odyh3ZGV2LT5odyk7CisJaGlmX3NodXRkb3duKHdkZXYpOworCXdkZXYtPmh3YnVzX29wcy0+ aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOworCXdmeF9iaF91bnJlZ2lzdGVyKHdk ZXYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3ZnhfY29yZV9pbml0KHZvaWQpCit7CisJaW50 IHJldCA9IDA7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKKwkJcmV0ID0gc3BpX3Jl Z2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2ZXIpOworCWlmIChJU19FTkFCTEVEKENPTkZJR19N TUMpICYmICFyZXQpCisJCXJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc2Rpb19kcml2 ZXIpOworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3ZnhfY29yZV9pbml0KTsKKworc3Rh dGljIHZvaWQgX19leGl0IHdmeF9jb3JlX2V4aXQodm9pZCkKK3sKKwlpZiAoSVNfRU5BQkxFRChD T05GSUdfTU1DKSkKKwkJc2Rpb191bnJlZ2lzdGVyX2RyaXZlcigmd2Z4X3NkaW9fZHJpdmVyKTsK KwlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKKwkJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3 Znhfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3ZnhfY29yZV9leGl0KTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oIGIvZHJpdmVycy9uZXQv d2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5hMGRiMzIyMzgzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaApAQCAtMCwwICsxLDQ0IEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogRGV2aWNlIHByb2JlIGFuZCBy ZWdpc3Rlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0 b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqIENvcHly aWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBD b3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4s IGV0IGFsLgorICovCisjaWZuZGVmIFdGWF9NQUlOX0gKKyNkZWZpbmUgV0ZYX01BSU5fSAorCisj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5o PgorCisjaW5jbHVkZSAiaGlmX2FwaV9nZW5lcmFsLmgiCisKK3N0cnVjdCB3ZnhfZGV2Oworc3Ry dWN0IGh3YnVzX29wczsKKworc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBLZXlzZXQg YW5kICIuc2VjIiBleHRlbnNpb24gd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIHN0cmluZyAqLwor CWNvbnN0IGNoYXIgKmZpbGVfZnc7CisJY29uc3QgY2hhciAqZmlsZV9wZHM7CisJc3RydWN0IGdw aW9fZGVzYyAqZ3Bpb193YWtldXA7CisJLyoKKwkgKiBpZiB0cnVlIEhJRiBEX291dCBpcyBzYW1w bGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sKKwkgKiAoaW50ZW5kZWQgdG8gYmUg dXNlZCBpbiA1ME1oeiBTRElPKQorCSAqLworCWJvb2wgdXNlX3Jpc2luZ19jbGs7Cit9OworCitz dHJ1Y3Qgd2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlj b25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJCWNvbnN0IHN0cnVjdCBo d2J1c19vcHMgKmh3YnVzX29wcywKKwkJCQl2b2lkICpod2J1c19wcml2KTsKKworaW50IHdmeF9w cm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Cit2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KTsKKworYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4oc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCBtYWpvciwgaW50IG1pbm9yKTsKK2ludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBsZW4pOworCisjZW5kaWYKLS0gCjIuMjguMAoK