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=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS 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 A52A2C433DF for ; Tue, 26 May 2020 14:52:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6291A207FB for ; Tue, 26 May 2020 14:52:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="VoRCbPZM"; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="Zp9rRqyJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729368AbgEZOw6 (ORCPT ); Tue, 26 May 2020 10:52:58 -0400 Received: from esa1.microchip.iphmx.com ([68.232.147.91]:34133 "EHLO esa1.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729522AbgEZOw5 (ORCPT ); Tue, 26 May 2020 10:52:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1590504776; x=1622040776; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=rrSw9cFZ7xNxqdCbYZhgdqeHHF56cZDT2l8u/l18Rhs=; b=VoRCbPZMjo/sPgpZaIgEA7yJYMxQ/LeaWzKHA/WFQDXOVqTipZaLmdPx McHhls9ZNl0HvMBuejK5+8KX3DcOVckwEHKoCbIFOW8lv5rOTMFCy4coQ 7HyYNUNrqH8JpHtVxU1/Uil5gw7hOhzpwPixW/w6cEiWPgHBVC2qvSZAo gQQGXs5aZOiPybXcFDRWx+kawNE3aetTIOz4CKVZFL7FZP3Bsj4881oqW IhlstkgaySw3PJNmMBfMqCxUADJvnVrqEKM7gFjrnH0VjQnSYxQhtJuvl tusPLfpiqWHr5aFyKh85XAbux/KQwCtiUqaW1aeXqeEj+lkexQvvZ/JrN A==; IronPort-SDR: 2pkhQj8pHBAqLxSajkj9t2JJHYORcQ4Tv+Y4CVJc5wTwItcVmgJ2gLg5p887QHP8HMHXchqe80 wZ7U+vw4cwqJ6LJzvCi7UHKg6Hu/hWxcRr23FRUvnyZ6Ri8LV/rfeQwQYkE3Y3GQ5ra02bHw8c MZdSApUNEC7eHGAfvDAFH02ydWLAXh5zeonAKSoJCKjiKFR5i31mjZ2/mSYvojGU+9YiN2lykB aFMK7CdbyK+9WBgwwU29ZOWucv2Fd/QtR9+JOzWwrXE3fSY4GN0/4cNAWaW5Bg/o+wSuD3Sno1 ec8= X-IronPort-AV: E=Sophos;i="5.73,437,1583218800"; d="scan'208";a="81031564" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 26 May 2020 07:52:55 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 26 May 2020 07:52:55 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 26 May 2020 07:52:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R2ijWmwV89Cgj9bHNpcxAS1cbjIb/VsYfp03Ajk9t1xRaqIdMo0/DU4uQk8+x+7QCpNu3mJlrNNEMC+hIL/2HiG/XL1dTCUNYVqcegxUXGhDJEXKNby6pbAJ4QRLjYMlgb9FBLkL/XREjRdqXJDZ6H+0QHBH3yvxyaaTbt8jcB6/zym/477Ygnd6bHaJDR0ofAxfaqPC8zY093BbAIHb4nhAsqHto8IEXDAE7ZQTp+W+5JVXJaUaoa7UuWbN0s5EFIprFsMC74aWhmxmTLktR3rrrv8bieVLXL6KBPeCAfZ2osghCnEgzXQkiwjZk3BrBDGpujVXtfo1AAP8Y2WFkw== 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=rrSw9cFZ7xNxqdCbYZhgdqeHHF56cZDT2l8u/l18Rhs=; b=gylSTUFsBFLtiaNrwkwNQrFyAt60Rb02EqZls5OTZWueTWgJPbfOIZeE3CMPwdI+8r4IdMl55Rly1XTV1n7n3P6ibMEuE12nMi5Kg8ZFTNgdY/fGkJDiZEcp2lTEDhRn5g592Y1t25sNl+TQ5FotKYGZBBYQs5lOp/MXd+D0OurbUTKxvr9DyeAfzhlB47ZhfB5iYg/slJWSAmG45KctADDm1AZmN0dUqM93jLtVsNztgCU3o0mcLruiqiqVYY46EGFcOrx0YXNgxUCdIPviv5d48Oc3SG/y/Hau8G21DMrgLnN01OmqJHMlicrU47ylPCvVPiwHxKjyqgo7c93PFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rrSw9cFZ7xNxqdCbYZhgdqeHHF56cZDT2l8u/l18Rhs=; b=Zp9rRqyJ6683GXN6ShXl+uueXPHUxbHX4BMtXWwHdPWyETtrDPos/rw+iWHqfO1lmi++tpemCE0bs++UWzYALOg+d4H5/XF84iA22LZSzZwOblMAZpQ9lQJ1haXgyAn3gj7+N5g5u1TOUbuCUvMjlLrvLQepPWWI+G0Mp1eR4VA= Received: from MN2PR11MB4269.namprd11.prod.outlook.com (2603:10b6:208:190::32) by MN2PR11MB4191.namprd11.prod.outlook.com (2603:10b6:208:151::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.17; Tue, 26 May 2020 14:52:53 +0000 Received: from MN2PR11MB4269.namprd11.prod.outlook.com ([fe80::8d6f:606b:5ddc:d5cb]) by MN2PR11MB4269.namprd11.prod.outlook.com ([fe80::8d6f:606b:5ddc:d5cb%2]) with mapi id 15.20.3021.029; Tue, 26 May 2020 14:52:53 +0000 From: To: , , , , , CC: Subject: Re: Subject: [PATCH v10 2/2] PCI: microchip: Add host driver for Microchip PCIe controller Thread-Topic: Subject: [PATCH v10 2/2] PCI: microchip: Add host driver for Microchip PCIe controller Thread-Index: AQHWM21VpTQMwwIfsEiCze8YEDl09w== Date: Tue, 26 May 2020 14:52:53 +0000 Message-ID: <7e0db9f4bf23b7d35afea041f71a1db7fba800fd.camel@microchip.com> References: <930a4f34fd11be89bc66cfa35b249c9b685aa8c2.camel@microchip.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: thegoodpenguin.co.uk; dkim=none (message not signed) header.d=none;thegoodpenguin.co.uk; dmarc=none action=none header.from=microchip.com; x-originating-ip: [89.101.219.210] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 95c0126f-86e0-475d-1566-08d801847810 x-ms-traffictypediagnostic: MN2PR11MB4191: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 041517DFAB x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FCPSbcE/ryLcRXPJJAoswwVTOq5a6O+KeP/zJWhqMyUye0mV7GsHGy6Th0UENTc/GnDm5/lwrTPokcH4qdJ+BnNXPX+VscZ5HSRnmPfwJDiSKKH7MqrJKEETV5PGOFJSMIvy6OvyQr2/uqWT73VMhg8/lCVRbrHLzArvmU0bpkFh3noVwwVcSO1xdDCJLu6O1zHaLDrj9+PR515iUv3Hzfv6RAegqw+ah72VMv2ZiM8THhKQEfxwnE8X6RE6vDPnFpxHavQ2BkSeiO59HTZy5jxfX+DbeO1r+cGWwXMVOAKe7scYtXhSEcHD/ploFEJtQl9la2uMcgKqymkVKizbkQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4269.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(136003)(376002)(346002)(39850400004)(366004)(396003)(8676002)(6512007)(4326008)(36756003)(8936002)(316002)(110136005)(2906002)(6486002)(478600001)(71200400001)(6506007)(26005)(30864003)(186003)(5660300002)(2616005)(66476007)(66446008)(64756008)(91956017)(76116006)(66946007)(86362001)(66556008)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: o5WNUyHCNFwecT5NTVDqo+q4D7GgIvFg7u3br00f7glhsxjOarFfkdp5S51a5jr6b+sRbvNTJGt7zQDbZEJjbr7V+h4fRR3SJUERpYA8zWCDg4CtaAvRX+3ybvgqwk5X8PvwEEvkQdUEZXaPgTIAjnMINltF3oDZ9powy0Gk8M10pyS7x/m/5F4FbSM2eW1MTOE2YtBSSwkAiA5LxEHORiO3pZfuHZjjMAMeMZwkRcWKUyysAyhkhxJ91lmOXUvvw0+Ym4TxmuiHodtUQgE8p3GS+MYdrjicGK/XnWKVEy6JBc3JDue+NwzZAb9/H81hWrJjI/ccKsW1pm2EMy6ADxvFyEo+04T6Pe8jHW6PYWFdAWLUyiQbQo25Hb/MB6ZgtHjyXq+uU0XvbhqrVRmf1SxNXbvWYkeSLvRMzrSJKKrEpROqr18nm+/KO8UrAQ5MGEYPrRbNUZbL7Y7CSW3sIIO4IyCj/C9sltHXFtxpaTZ0sP+k6eCn0pxJfb6zrJH4 Content-Type: text/plain; charset="utf-8" Content-ID: <9ADD6F23CD814245B56EC3A25DF8CBE1@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 95c0126f-86e0-475d-1566-08d801847810 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 May 2020 14:52:53.2587 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: edven06rNLxFmate+c+WZ7jINJ4wyS9PgVNC/GJ6VUVUxZCvqn0yVeEGfaxp6LRlPuyyfSpn+ZefQTBIkhlCkTNtC3GBH7xSh2tKEhdlFNA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4191 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org YWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgUENJZSBQb2xhckZpcmUgUENJZSBjb250cm9s bGVyIHdoZW4NCmNvbmZpZ3VyZWQgaW4gaG9zdCAoUm9vdCBDb21wbGV4KSBtb2RlLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBEYWlyZSBNY05hbWFyYSA8ZGFpcmUubWNuYW1hcmFAbWljcm9jaGlwLmNvbT4N Ci0tLQ0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA5 ICsNCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSAr DQogZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1pY3JvY2hpcC1ob3N0LmMgfCA2NjQgKysr KysrKysrKysrKysrKysrKw0KIDMgZmlsZXMgY2hhbmdlZCwgNjc0IGluc2VydGlvbnMoKykNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1pY3JvY2hpcC1o b3N0LmMNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KaW5kZXggOTFiZmRiNzg0ODI5Li41ZWM3NjA0 NjZiZDkgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcNCisrKyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KQEAgLTI1OCw2ICsyNTgsMTUgQEAgY29u ZmlnIFBDSV9IWVBFUlZfSU5URVJGQUNFDQogCSAgVGhlIEh5cGVyLVYgUENJIEludGVyZmFjZSBp cyBhIGhlbHBlciBkcml2ZXIgYWxsb3dzIG90aGVyIGRyaXZlcnMgdG8NCiAJICBoYXZlIGEgY29t bW9uIGludGVyZmFjZSB3aXRoIHRoZSBIeXBlci1WIFBDSSBmcm9udGVuZCBkcml2ZXIuDQogDQor Y29uZmlnIFBDSUVfTUlDUk9DSElQX0hPU1QNCisJYm9vbCAiTWljcm9jaGlwIEFYSSBQQ0llIGhv c3QgYnJpZGdlIHN1cHBvcnQiDQorCWRlcGVuZHMgb24gUENJX01TSSAmJiBPRg0KKwlzZWxlY3Qg UENJX01TSV9JUlFfRE9NQUlODQorCXNlbGVjdCBHRU5FUklDX01TSV9JUlFfRE9NQUlODQorCWhl bHANCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCB0byBzdXBwb3J0IHRoZSBNaWNy b2NoaXAgQVhJIFBDSWUNCisJICBIb3N0IEJyaWRnZSBkcml2ZXIuDQorDQogc291cmNlICJkcml2 ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9LY29uZmlnIg0KIHNvdXJjZSAiZHJpdmVycy9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9LY29uZmlnIg0KIHNvdXJjZSAiZHJpdmVycy9wY2kvY29udHJvbGxl ci9jYWRlbmNlL0tjb25maWciDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCmluZGV4IDE1OGM1OTc3 MTgyNC4uNDE2NTI4ZDg1NTNlIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZQ0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KQEAgLTI2LDYg KzI2LDcgQEAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAt ZXAubw0KIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0hPU1QpICs9IHBjaWUtcm9ja2NoaXAt aG9zdC5vDQogb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBjaWUtbWVkaWF0ZWsubw0K IG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUtdGFuZ28ubw0KK29iai0k KENPTkZJR19QQ0lFX01JQ1JPQ0hJUF9IT1NUKSArPSBwY2llLW1pY3JvY2hpcC1ob3N0Lm8NCiBv YmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KIG9iai0kKENPTkZJR19QQ0lFX0JSQ01TVEIpICs9 IHBjaWUtYnJjbXN0Yi5vDQogIyBwY2llLWhpc2kubyBxdWlya3MgYXJlIG5lZWRlZCBldmVuIHdp dGhvdXQgQ09ORklHX1BDSUVfRFcNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaWUtbWljcm9jaGlwLWhvc3QuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1taWNy b2NoaXAtaG9zdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5i ZGVhNDE2YWZmNzkNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv cGNpZS1taWNyb2NoaXAtaG9zdC5jDQpAQCAtMCwwICsxLDY2NCBAQA0KKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBNaWNyb2NoaXAgQVhJIFBDSWUgQnJpZGdl IGhvc3QgY29udHJvbGxlciBkcml2ZXINCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOCAtIDIw MTkgTWljcm9jaGlwIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICog QXV0aG9yOiBEYWlyZSBNY05hbWFyYSA8ZGFpcmUubWNuYW1hcmFAbWljcm9jaGlwLmNvbT4NCisg Kg0KKyAqIEJhc2VkIG9uOg0KKyAqCXBjaWUtcmNhci5jDQorICoJcGNpZS14aWxpbnguYw0KKyAq CXBjaWUtYWx0ZXJhLmMNCisgKi8NCisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2ly cS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbXNpLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfaXJx Lmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wY2ktZWNh bS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisNCisjaW5jbHVkZSAi Li4vcGNpLmgiDQorDQorLyogTnVtYmVyIG9mIE1TSSBJUlFzICovDQorI2RlZmluZSBNQ19OVU1f TVNJX0lSUVMJCQkJMzINCisjZGVmaW5lIE1DX05VTV9NU0lfSVJRU19DT0RFRAkJCTUNCisNCisv KiBQQ0llIEJyaWRnZSBQaHkgYW5kIENvbnRyb2xsZXIgUGh5IG9mZnNldHMgKi8NCisjZGVmaW5l IE1DX1BDSUUxX0JSSURHRV9BRERSCQkJMHgwMDAwODAwMHUNCisjZGVmaW5lIE1DX1BDSUUxX0NU UkxfQUREUgkJCTB4MDAwMGEwMDB1DQorDQorLyogUENJZSBDb250cm9sbGVyIFBoeSBSZWdzICov DQorI2RlZmluZSBNQ19TRUNfRVJST1JfSU5UCQkJMHgyOA0KKyNkZWZpbmUgIFNFQ19FUlJPUl9J TlRfVFhfUkFNX1NFQ19FUlJfSU5UCUdFTk1BU0soMywgMCkNCisjZGVmaW5lICBTRUNfRVJST1Jf SU5UX1JYX1JBTV9TRUNfRVJSX0lOVAlHRU5NQVNLKDcsIDQpDQorI2RlZmluZSAgU0VDX0VSUk9S X0lOVF9QQ0lFMkFYSV9SQU1fU0VDX0VSUl9JTlQJR0VOTUFTSygxMSwgOCkNCisjZGVmaW5lICBT RUNfRVJST1JfSU5UX0FYSTJQQ0lFX1JBTV9TRUNfRVJSX0lOVAlHRU5NQVNLKDE1LCAxMikNCisj ZGVmaW5lIE1DX1NFQ19FUlJPUl9JTlRfTUFTSwkJCTB4MmMNCisjZGVmaW5lIE1DX0RFRF9FUlJP Ul9JTlQJCQkweDMwDQorI2RlZmluZSAgREVEX0VSUk9SX0lOVF9UWF9SQU1fREVEX0VSUl9JTlQJ R0VOTUFTSygzLCAwKQ0KKyNkZWZpbmUgIERFRF9FUlJPUl9JTlRfUlhfUkFNX0RFRF9FUlJfSU5U CUdFTk1BU0soNywgNCkNCisjZGVmaW5lICBERURfRVJST1JfSU5UX1BDSUUyQVhJX1JBTV9ERURf RVJSX0lOVAlHRU5NQVNLKDExLCA4KQ0KKyNkZWZpbmUgIERFRF9FUlJPUl9JTlRfQVhJMlBDSUVf UkFNX0RFRF9FUlJfSU5UCUdFTk1BU0soMTUsIDEyKQ0KKyNkZWZpbmUgTUNfREVEX0VSUk9SX0lO VF9NQVNLCQkJMHgzNA0KKyNkZWZpbmUgTUNfRUNDX0NPTlRST0wJCQkJMHgzOA0KKyNkZWZpbmUg IEVDQ19DT05UUk9MX0FYSTJQQ0lFX1JBTV9FQ0NfQllQQVNTCUJJVCgyNykNCisjZGVmaW5lICBF Q0NfQ09OVFJPTF9QQ0lFMkFYSV9SQU1fRUNDX0JZUEFTUwlCSVQoMjYpDQorI2RlZmluZSAgRUND X0NPTlRST0xfUlhfUkFNX0VDQ19CWVBBU1MJCUJJVCgyNSkNCisjZGVmaW5lICBFQ0NfQ09OVFJP TF9UWF9SQU1fRUNDX0JZUEFTUwkJQklUKDI0KQ0KKyNkZWZpbmUgTUNfTFRTU01fU1RBVEUJCQkJ MHg1Yw0KKyNkZWZpbmUgIExUU1NNX0wwX1NUQVRFCQkJCTB4MTANCisjZGVmaW5lIE1DX1BDSUVf RVZFTlRfSU5UCQkJMHgxNGMNCisjZGVmaW5lICBQQ0lFX0VWRU5UX0lOVF9MMl9FWElUX0lOVAkJ QklUKDApDQorI2RlZmluZSAgUENJRV9FVkVOVF9JTlRfSE9UUlNUX0VYSVRfSU5UCQlCSVQoMSkN CisjZGVmaW5lICBQQ0lFX0VWRU5UX0lOVF9ETFVQX0VYSVRfSU5UCQlCSVQoMikNCisjZGVmaW5l ICBQQ0lFX0VWRU5UX0lOVF9MMl9FWElUX0lOVF9NQVNLCUJJVCgxNikNCisjZGVmaW5lICBQQ0lF X0VWRU5UX0lOVF9IT1RSU1RfRVhJVF9JTlRfTUFTSwlCSVQoMTcpDQorI2RlZmluZSAgUENJRV9F VkVOVF9JTlRfRExVUF9FWElUX0lOVF9NQVNLCUJJVCgxOCkNCisNCisvKiBQQ0llIEJyaWRnZSBQ aHkgUmVncyAqLw0KKyNkZWZpbmUgTUNfUENJRV9QQ0lfSURTX0RXMQkJCTB4OWMNCisNCisvKiBQ Q0llIENvbmZpZyBzcGFjZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8NCisjZGVmaW5lIE1D X01TSV9DQVBfQ1RSTAkJCQkweGUwdQ0KKyNkZWZpbmUgIE1TSV9FTkFCTEUJCQkJKDB4MDF1IDw8 IDE2KQ0KKyNkZWZpbmUgIE1TSV9DQVBfTVVMVEkJCQkJKE1DX05VTV9NU0lfSVJRU19DT0RFRCA8 PCAxNykNCisjZGVmaW5lICBNU0lfRU5BQkxFX01VTFRJCQkJKE1DX05VTV9NU0lfSVJRU19DT0RF RCA8PCAyMCkNCisjZGVmaW5lIE1DX01TSV9NU0dfTE9fQUREUgkJCTB4ZTR1DQorI2RlZmluZSBN Q19NU0lfTVNHX0hJX0FERFIJCQkweGU4dQ0KKyNkZWZpbmUgTUNfTVNJX01TR19EQVRBCQkJCTB4 ZjB1DQorDQorI2RlZmluZSBNQ19JTUFTS19MT0NBTAkJCQkweDE4MA0KKyNkZWZpbmUgIFBDSUVf TE9DQUxfSU5UX0VOQUJMRQkJCTB4MGYwMDAwMDB1DQorI2RlZmluZSAgUENJX0lOVFMJCQkJMHgw ZjAwMDAwMHUNCisjZGVmaW5lICBQTV9NU0lfSU5UX1NISUZUCQkJMjQNCisjZGVmaW5lICBQQ0lF X0VOQUJMRV9NU0kJCQkweDEwMDAwMDAwdQ0KKyNkZWZpbmUgIE1TSV9JTlQJCQkJMHgxMDAwMDAw MHUNCisjZGVmaW5lICBNU0lfSU5UX1NISUZUCQkJCTI4DQorI2RlZmluZSBNQ19JU1RBVFVTX0xP Q0FMCQkJMHgxODQNCisjZGVmaW5lIE1DX0lNQVNLX0hPU1QJCQkJMHgxODgNCisjZGVmaW5lIE1D X0lTVEFUVVNfSE9TVAkJCQkweDE4Yw0KKyNkZWZpbmUgTUNfTVNJX0FERFIJCQkJMHgxOTANCisj ZGVmaW5lIE1DX0lTVEFUVVNfTVNJCQkJCTB4MTk0DQorDQorLyogUENJZSBNYXN0ZXIgdGFibGUg aW5pdCBkZWZpbmVzICovDQorI2RlZmluZSBNQ19BVFIwX1BDSUVfV0lOMF9TUkNBRERSX1BBUkFN CQkweDYwMHUNCisjZGVmaW5lICBBVFIwX1BDSUVfQVRSX1NJWkUJCQkweDFmDQorI2RlZmluZSAg QVRSMF9QQ0lFX0FUUl9TSVpFX1NISUZUCQkxDQorI2RlZmluZSBNQ19BVFIwX1BDSUVfV0lOMF9T UkNfQUREUgkJMHg2MDR1DQorI2RlZmluZSBNQ19BVFIwX1BDSUVfV0lOMF9UUlNMX0FERFJfTFNC CQkweDYwOHUNCisjZGVmaW5lIE1DX0FUUjBfUENJRV9XSU4wX1RSU0xfQUREUl9VRFcJCTB4NjBj dQ0KKyNkZWZpbmUgTUNfQVRSMF9QQ0lFX1dJTjBfVFJTTF9QQVJBTQkJMHg2MTB1DQorDQorLyog UENJZSBBWEkgc2xhdmUgdGFibGUgaW5pdCBkZWZpbmVzICovDQorI2RlZmluZSBNQ19BVFIwX0FY STRfU0xWMF9TUkNBRERSX1BBUkFNCQkweDgwMHUNCisjZGVmaW5lICBBVFJfU0laRV9TSElGVAkJ CQkxDQorI2RlZmluZSAgQVRSX0lNUExfRU5BQkxFCQkJMQ0KKyNkZWZpbmUgTUNfQVRSMF9BWEk0 X1NMVjBfU1JDX0FERFIJCTB4ODA0dQ0KKyNkZWZpbmUgTUNfQVRSMF9BWEk0X1NMVjBfVFJTTF9B RERSX0xTQgkJMHg4MDh1DQorI2RlZmluZSBNQ19BVFIwX0FYSTRfU0xWMF9UUlNMX0FERFJfVURX CQkweDgwY3UNCisjZGVmaW5lIE1DX0FUUjBfQVhJNF9TTFYwX1RSU0xfUEFSQU0JCTB4ODEwdQ0K KyNkZWZpbmUgIFBDSUVfVFhfUlhfSU5URVJGQUNFCQkJMHgwMDAwMDAwMHUNCisjZGVmaW5lICBQ Q0lFX0NPTkZJR19JTlRFUkZBQ0UJCQkweDAwMDAwMDAxdQ0KKw0KKyNkZWZpbmUgQVRUX0VOVFJZ X1NJWkUJCQkzMg0KKw0KK3N0cnVjdCBtY19tc2kgew0KKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8q IFByb3RlY3QgdXNlZCBiaXRtYXAgKi8NCisJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47 DQorCXN0cnVjdCBpcnFfZG9tYWluICpkZXZfZG9tYWluOw0KKwl1MzIgbnVtX3ZlY3RvcnM7DQor CXU2NCB2ZWN0b3JfcGh5Ow0KKwlERUNMQVJFX0JJVE1BUCh1c2VkLCBNQ19OVU1fTVNJX0lSUVMp Ow0KK307DQorDQorc3RydWN0IG1jX3BjaWUgew0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2Ow0KKwl2b2lkIF9faW9tZW0gKmNmZ19iYXNlX2FkZHI7DQorCXZvaWQgX19pb21lbSAqYnJp ZGdlX2Jhc2VfYWRkcjsNCisJdm9pZCBfX2lvbWVtICpjdHJsX2Jhc2VfYWRkcjsNCisJdTY0IGNm Z2h3X2Jhc2VfYWRkcjsNCisJdTY0IGNmZ19zaXplOw0KKwl1MzIgYXRyX3N6Ow0KKwl1MzIgaXJx Ow0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9kb21haW47DQorCXJhd19zcGlubG9ja190IGlu dHhfbWFza19sb2NrOw0KKwlzdHJ1Y3QgbWNfbXNpIG1zaTsNCit9Ow0KKw0KK3N0YXRpYyBpbmxp bmUgdTMyIGNmZ19yZWFkbChzdHJ1Y3QgbWNfcGNpZSAqcGNpZSwgY29uc3QgdTMyIHJlZykNCit7 DQorCXJldHVybiByZWFkbF9yZWxheGVkKHBjaWUtPmNmZ19iYXNlX2FkZHIgKyByZWcpOw0KK30N CisNCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnX3dyaXRlbChzdHJ1Y3QgbWNfcGNpZSAqcGNpZSwg Y29uc3QgdTMyIHZhbCwNCisJCQkgICAgICBjb25zdCB1MzIgcmVnKQ0KK3sNCisJd3JpdGVsX3Jl bGF4ZWQodmFsLCBwY2llLT5jZmdfYmFzZV9hZGRyICsgcmVnKTsNCit9DQorDQorc3RhdGljIHZv aWQgbWNfcGNpZV9lbmFibGUoc3RydWN0IG1jX3BjaWUgKnBjaWUpDQorew0KKwl1MzIgZW5iOw0K Kw0KKwllbmIgPSByZWFkbChwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfTFRTU01fU1RBVEUp Ow0KKwllbmIgfD0gTFRTU01fTDBfU1RBVEU7DQorCXdyaXRlbChlbmIsIHBjaWUtPmJyaWRnZV9i YXNlX2FkZHIgKyBNQ19MVFNTTV9TVEFURSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1jX3BjaWVf aXNyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykNCit7DQorCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9 IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOw0KKwlzdHJ1Y3QgbWNfcGNpZSAqcGNpZSA9IGlycV9k ZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2ll LT5wZGV2LT5kZXY7DQorCXN0cnVjdCBtY19tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXVuc2ln bmVkIGxvbmcgc3RhdHVzOw0KKwl1bnNpZ25lZCBsb25nIGludHhfc3RhdHVzOw0KKwl1bnNpZ25l ZCBsb25nIG1zaV9zdGF0dXM7DQorCXUzMiBiaXQ7DQorCXUzMiB2aXJxOw0KKw0KKwkvKg0KKwkg KiBUaGUgY29yZSBwcm92aWRlcyBhIHNpbmdsZSBpbnRlcnJ1cHQgZm9yIGJvdGggSU5UeC9NU0kg bWVzc2FnZXMuDQorCSAqIFNvIHdlJ2xsIHJlYWQgYm90aCBJTlR4IGFuZCBNU0kgc3RhdHVzLg0K KwkgKi8NCisJY2hhaW5lZF9pcnFfZW50ZXIoY2hpcCwgZGVzYyk7DQorDQorCXN0YXR1cyA9IHJl YWRsKHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19JU1RBVFVTX0xPQ0FMKTsNCisJd2hpbGUg KHN0YXR1cyAmIChQQ0lfSU5UUyB8IE1TSV9JTlQpKSB7DQorCQlpbnR4X3N0YXR1cyA9IChzdGF0 dXMgJiBQQ0lfSU5UUykgPj4gUE1fTVNJX0lOVF9TSElGVDsNCisJCWZvcl9lYWNoX3NldF9iaXQo Yml0LCAmaW50eF9zdGF0dXMsIFBDSV9OVU1fSU5UWCkgew0KKwkJCXZpcnEgPSBpcnFfZmluZF9t YXBwaW5nKHBjaWUtPmludHhfZG9tYWluLCBiaXQgKyAxKTsNCisJCQlpZiAodmlycSkNCisJCQkJ Z2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0KKwkJCWVsc2UNCisJCQkJZGV2X2Vycl9yYXRlbGlt aXRlZChkZXYsICJiYWQgSU5UeCBJUlEgJWRcbiIsDQorCQkJCQkJICAgIGJpdCk7DQorDQorCQkJ LyogQ2xlYXIgdGhhdCBpbnRlcnJ1cHQgYml0ICovDQorCQkJd3JpdGVsKDEgPDwgKGJpdCArIFBN X01TSV9JTlRfU0hJRlQpLA0KKwkJCSAgICAgICBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNf SVNUQVRVU19MT0NBTCk7DQorCQl9DQorDQorCQltc2lfc3RhdHVzID0gKHN0YXR1cyAmIE1TSV9J TlQpOw0KKwkJaWYgKG1zaV9zdGF0dXMpIHsNCisJCQltc2lfc3RhdHVzID0gcmVhZGwocGNpZS0+ YnJpZGdlX2Jhc2VfYWRkciArDQorCQkJCQkgICBNQ19JU1RBVFVTX01TSSk7DQorCQkJZm9yX2Vh Y2hfc2V0X2JpdChiaXQsICZtc2lfc3RhdHVzLCBtc2ktPm51bV92ZWN0b3JzKSB7DQorCQkJCXZp cnEgPSBpcnFfZmluZF9tYXBwaW5nKG1zaS0+ZGV2X2RvbWFpbiwgYml0KTsNCisJCQkJaWYgKHZp cnEpDQorCQkJCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7DQorCQkJCWVsc2UNCisJCQkJCWRl dl9lcnJfcmF0ZWxpbWl0ZWQoZGV2LA0KKwkJCQkJCQkgICAgImJhZCBNU0kgSVJRICVkXG4iLA0K KwkJCQkJCQkgICAgYml0KTsNCisNCisJCQkJLyogQ2xlYXIgdGhhdCBNU0kgaW50ZXJydXB0IGJp dCAqLw0KKwkJCQl3cml0ZWwoKDEgPDwgYml0KSwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArDQor CQkJCSAgICAgICBNQ19JU1RBVFVTX01TSSk7DQorCQkJfQ0KKwkJCS8qIENsZWFyIHRoZSBJU1RB VFVTIE1TSSBiaXQgKi8NCisJCQl3cml0ZWwoMSA8PCBNU0lfSU5UX1NISUZULCBwY2llLT5icmlk Z2VfYmFzZV9hZGRyICsNCisJCQkgICAgICAgTUNfSVNUQVRVU19MT0NBTCk7DQorCQl9DQorDQor CQlzdGF0dXMgPSByZWFkbChwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSVNUQVRVU19MT0NB TCk7DQorCX0NCisNCisJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsNCit9DQorDQorc3Rh dGljIGludCBtY19wY2llX3BhcnNlX2R0KHN0cnVjdCBtY19wY2llICpwY2llKQ0KK3sNCisJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaWUtPnBkZXY7DQorCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwY2llLT5wZGV2LT5kZXY7DQorCXN0cnVjdCBtY19tc2kgKm1zaSA9ICZwY2llLT5t c2k7DQorCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KKwl2b2lkIF9faW9tZW0gKmF4aV9iYXNlX2Fk ZHI7DQorDQorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01F TSwgMSk7DQorCWF4aV9iYXNlX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp Ow0KKwlpZiAoSVNfRVJSKGF4aV9iYXNlX2FkZHIpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoYXhpX2Jh c2VfYWRkcik7DQorDQorCXBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgPSBheGlfYmFzZV9hZGRyICsg TUNfUENJRTFfQlJJREdFX0FERFI7DQorCXBjaWUtPmN0cmxfYmFzZV9hZGRyID0gYXhpX2Jhc2Vf YWRkciArIE1DX1BDSUUxX0NUUkxfQUREUjsNCisNCisJbXNpLT52ZWN0b3JfcGh5ID0gTUNfTVNJ X0FERFI7DQorDQorCW1zaS0+bnVtX3ZlY3RvcnMgPSBNQ19OVU1fTVNJX0lSUVM7DQorDQorCXBj aWUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQorCWlmIChwY2llLT5pcnEgPCAw KSB7DQorCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZXF1ZXN0IElSUSVkXG4iLCBwY2llLT5p cnEpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIG1jX3BjaWVfZW5hYmxlX21zaShzdHJ1Y3QgbWNfcGNpZSAqcGNpZSkNCit7DQor CXN0cnVjdCBtY19tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXUzMiBtc2dfY3RybCA9IGNmZ19y ZWFkbChwY2llLCBNQ19NU0lfQ0FQX0NUUkwpOw0KKw0KKwltc2dfY3RybCB8PSBNU0lfRU5BQkxF X01VTFRJIHwgTVNJX0NBUF9NVUxUSSB8IE1TSV9FTkFCTEU7DQorCWNmZ193cml0ZWwocGNpZSwg bXNnX2N0cmwsIE1DX01TSV9DQVBfQ1RSTCk7DQorDQorCWNmZ193cml0ZWwocGNpZSwgbG93ZXJf MzJfYml0cyhtc2ktPnZlY3Rvcl9waHkpLCBNQ19NU0lfTVNHX0xPX0FERFIpOw0KKwljZmdfd3Jp dGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMobXNpLT52ZWN0b3JfcGh5KSwgTUNfTVNJX01TR19ISV9B RERSKTsNCit9DQorDQorc3RhdGljIGludCBtY19ob3N0X2luaXQoc3RydWN0IG1jX3BjaWUgKnBj aWUpDQorew0KKwl1MzIgdmFsOw0KKw0KKwltY19wY2llX2VuYWJsZShwY2llKTsNCisNCisJdmFs ID0gRUNDX0NPTlRST0xfQVhJMlBDSUVfUkFNX0VDQ19CWVBBU1MgfA0KKwkgICAgICBFQ0NfQ09O VFJPTF9QQ0lFMkFYSV9SQU1fRUNDX0JZUEFTUyB8DQorCSAgICAgIEVDQ19DT05UUk9MX1JYX1JB TV9FQ0NfQllQQVNTIHwgRUNDX0NPTlRST0xfVFhfUkFNX0VDQ19CWVBBU1M7DQorCXdyaXRlbCh2 YWwsIHBjaWUtPmN0cmxfYmFzZV9hZGRyICsgTUNfRUNDX0NPTlRST0wpOw0KKw0KKwl2YWwgPSBQ Q0lFX0VWRU5UX0lOVF9MMl9FWElUX0lOVCB8IFBDSUVfRVZFTlRfSU5UX0hPVFJTVF9FWElUX0lO VCB8DQorCSAgICAgIFBDSUVfRVZFTlRfSU5UX0RMVVBfRVhJVF9JTlQgfCBQQ0lFX0VWRU5UX0lO VF9MMl9FWElUX0lOVF9NQVNLIHwNCisJICAgICAgUENJRV9FVkVOVF9JTlRfSE9UUlNUX0VYSVRf SU5UX01BU0sgfA0KKwkgICAgICBQQ0lFX0VWRU5UX0lOVF9ETFVQX0VYSVRfSU5UX01BU0s7DQor CXdyaXRlbCh2YWwsIHBjaWUtPmN0cmxfYmFzZV9hZGRyICsgTUNfUENJRV9FVkVOVF9JTlQpOw0K Kw0KKwl2YWwgPSBTRUNfRVJST1JfSU5UX1RYX1JBTV9TRUNfRVJSX0lOVCB8DQorCSAgICAgIFNF Q19FUlJPUl9JTlRfUlhfUkFNX1NFQ19FUlJfSU5UIHwNCisJICAgICAgU0VDX0VSUk9SX0lOVF9Q Q0lFMkFYSV9SQU1fU0VDX0VSUl9JTlQgfA0KKwkgICAgICBTRUNfRVJST1JfSU5UX0FYSTJQQ0lF X1JBTV9TRUNfRVJSX0lOVDsNCisJd3JpdGVsKHZhbCwgcGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBN Q19TRUNfRVJST1JfSU5UKTsNCisJd3JpdGVsKHZhbCwgcGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBN Q19TRUNfRVJST1JfSU5UX01BU0spOw0KKw0KKwl2YWwgPSBERURfRVJST1JfSU5UX1RYX1JBTV9E RURfRVJSX0lOVCB8DQorCSAgICAgIERFRF9FUlJPUl9JTlRfUlhfUkFNX0RFRF9FUlJfSU5UIHwN CisJICAgICAgREVEX0VSUk9SX0lOVF9QQ0lFMkFYSV9SQU1fREVEX0VSUl9JTlQgfA0KKwkgICAg ICBERURfRVJST1JfSU5UX0FYSTJQQ0lFX1JBTV9ERURfRVJSX0lOVDsNCisJd3JpdGVsKHZhbCwg cGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBNQ19ERURfRVJST1JfSU5UKTsNCisJd3JpdGVsKHZhbCwg cGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBNQ19ERURfRVJST1JfSU5UX01BU0spOw0KKw0KKwl3cml0 ZWwoMCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisJd3JpdGVs KEdFTk1BU0soMzEsIDApLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSVNUQVRVU19MT0NB TCk7DQorCXdyaXRlbCgwLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1BU0tfSE9TVCk7 DQorCXdyaXRlbChHRU5NQVNLKDMxLCAwKSwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lT VEFUVVNfSE9TVCk7DQorDQorCS8qIENvbmZpZ3VyZSBBZGRyZXNzIFRyYW5zbGF0aW9uIFRhYmxl IDAgZm9yIFBDSWUgY29uZmlnIHNwYWNlICovDQorCXdyaXRlbChQQ0lFX0NPTkZJR19JTlRFUkZB Q0UsIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKw0KKwkgICAgICAgTUNfQVRSMF9BWEk0X1NMVjBf VFJTTF9QQVJBTSk7DQorDQorCXZhbCA9IGxvd2VyXzMyX2JpdHMocGNpZS0+Y2ZnaHdfYmFzZV9h ZGRyKSB8DQorCSAgICAgIChwY2llLT5hdHJfc3ogPDwgQVRSX1NJWkVfU0hJRlQpIHwgQVRSX0lN UExfRU5BQkxFOw0KKwl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfQVRS MF9BWEk0X1NMVjBfU1JDQUREUl9QQVJBTSk7DQorCXdyaXRlbCgwLCBwY2llLT5icmlkZ2VfYmFz ZV9hZGRyICsgTUNfQVRSMF9BWEk0X1NMVjBfU1JDX0FERFIpOw0KKw0KKwl2YWwgPSBsb3dlcl8z Ml9iaXRzKHBjaWUtPmNmZ2h3X2Jhc2VfYWRkcik7DQorCXdyaXRlbCh2YWwsIHBjaWUtPmJyaWRn ZV9iYXNlX2FkZHIgKyBNQ19BVFIwX0FYSTRfU0xWMF9UUlNMX0FERFJfTFNCKTsNCisJdmFsID0g dXBwZXJfMzJfYml0cyhwY2llLT5jZmdod19iYXNlX2FkZHIpOw0KKwl3cml0ZWwodmFsLCBwY2ll LT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfQVRSMF9BWEk0X1NMVjBfVFJTTF9BRERSX1VEVyk7DQor DQorCXZhbCA9IHJlYWRsKHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19BVFIwX1BDSUVfV0lO MF9TUkNBRERSX1BBUkFNKTsNCisJdmFsIHw9IChBVFIwX1BDSUVfQVRSX1NJWkUgPDwgQVRSMF9Q Q0lFX0FUUl9TSVpFX1NISUZUKTsNCisJd3JpdGVsKHZhbCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRk ciArIE1DX0FUUjBfUENJRV9XSU4wX1NSQ0FERFJfUEFSQU0pOw0KKwl3cml0ZWwoMCwgcGNpZS0+ YnJpZGdlX2Jhc2VfYWRkciArIE1DX0FUUjBfUENJRV9XSU4wX1NSQ19BRERSKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1jX21hc2tfaW50eF9pcnEoc3RydWN0IGlycV9k YXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZGF0 YS0+aXJxKTsNCisJc3RydWN0IG1jX3BjaWUgKnBjaWU7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQorCXUzMiBtYXNrLCB2YWw7DQorDQorCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRhKGRl c2MpOw0KKwltYXNrID0gUENJRV9MT0NBTF9JTlRfRU5BQkxFOw0KKwlyYXdfc3Bpbl9sb2NrX2ly cXNhdmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQorCXZhbCA9IHJlYWRsKHBjaWUt PmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19JTUFTS19MT0NBTCk7DQorCXZhbCAmPSB+bWFzazsNCisJ d3JpdGVsKHZhbCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisJ cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1jX3VubWFza19pbnR4X2lycShzdHJ1Y3QgaXJxX2RhdGEg KmRhdGEpDQorew0KKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkYXRhLT5p cnEpOw0KKwlzdHJ1Y3QgbWNfcGNpZSAqcGNpZTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJ dTMyIG1hc2ssIHZhbDsNCisNCisJcGNpZSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7 DQorCW1hc2sgPSBQQ0lFX0xPQ0FMX0lOVF9FTkFCTEU7DQorCXJhd19zcGluX2xvY2tfaXJxc2F2 ZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdzKTsNCisJdmFsID0gcmVhZGwocGNpZS0+YnJp ZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisJdmFsIHw9IG1hc2s7DQorCXdyaXRl bCh2YWwsIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19JTUFTS19MT0NBTCk7DQorCXJhd19z cGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KK30N CisNCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1jX2ludHhfaXJxX2NoaXAgPSB7DQorCS5uYW1l ID0gIm1pY3JvY2hpcF9wY2llOmludHgiLA0KKwkuaXJxX2VuYWJsZSA9IG1jX3VubWFza19pbnR4 X2lycSwNCisJLmlycV9kaXNhYmxlID0gbWNfbWFza19pbnR4X2lycSwNCisJLmlycV9tYXNrID0g bWNfbWFza19pbnR4X2lycSwNCisJLmlycV91bm1hc2sgPSBtY191bm1hc2tfaW50eF9pcnEsDQor fTsNCisNCitzdGF0aWMgaW50IG1jX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRv bWFpbiwgdW5zaWduZWQgaW50IGlycSwNCisJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0K K3sNCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJm1jX2ludHhfaXJxX2NoaXAsIGhh bmRsZV9zaW1wbGVfaXJxKTsNCisJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkb21haW4tPmhvc3Rf ZGF0YSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9k b21haW5fb3BzIGludHhfZG9tYWluX29wcyA9IHsNCisJLm1hcCA9IG1jX3BjaWVfaW50eF9tYXAs DQorfTsNCisNCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1jX21zaV9pcnFfY2hpcCA9IHsNCisJ Lm5hbWUgPSAiTWljcm9jaGlwIFBDSWUgTVNJIiwNCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNr X2lycSwNCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsDQorfTsNCisNCitzdGF0 aWMgc3RydWN0IG1zaV9kb21haW5faW5mbyBtY19tc2lfZG9tYWluX2luZm8gPSB7DQorCS5mbGFn cyA9IChNU0lfRkxBR19VU0VfREVGX0RPTV9PUFMgfCBNU0lfRkxBR19VU0VfREVGX0NISVBfT1BT IHwNCisJCSAgTVNJX0ZMQUdfUENJX01TSVgpLA0KKwkuY2hpcCA9ICZtY19tc2lfaXJxX2NoaXAs DQorfTsNCisNCitzdGF0aWMgdm9pZCBtY19jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRh ICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQ0KK3sNCisJc3RydWN0IG1jX3BjaWUgKnBjaWUg PSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCisJcGh5c19hZGRyX3QgYWRkciA9 IHBjaWUtPm1zaS52ZWN0b3JfcGh5Ow0KKw0KKwltc2ctPmFkZHJlc3NfbG8gPSBsb3dlcl8zMl9i aXRzKGFkZHIpOw0KKwltc2ctPmFkZHJlc3NfaGkgPSB1cHBlcl8zMl9iaXRzKGFkZHIpOw0KKwlt c2ctPmRhdGEgPSBkYXRhLT5od2lycTsNCisNCisJZGV2X2RiZygmcGNpZS0+cGRldi0+ZGV2LCAi bXNpIyV4IGFkZHJlc3NfaGkgJSN4IGFkZHJlc3NfbG8gJSN4XG4iLA0KKwkJKGludClkYXRhLT5o d2lycSwgbXNnLT5hZGRyZXNzX2hpLCBtc2ctPmFkZHJlc3NfbG8pOw0KK30NCisNCitzdGF0aWMg aW50IG1jX21zaV9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwNCisJCQkg ICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGJvb2wgZm9yY2UpDQorew0KKwlyZXR1 cm4gLUVJTlZBTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtY19tc2lfYm90dG9t X2lycV9jaGlwID0gew0KKwkubmFtZSA9ICJNaWNyb2NoaXAgTVNJIiwNCisJLmlycV9jb21wb3Nl X21zaV9tc2cgPSBtY19jb21wb3NlX21zaV9tc2csDQorCS5pcnFfc2V0X2FmZmluaXR5ID0gbWNf bXNpX3NldF9hZmZpbml0eSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbWNfaXJxX21zaV9kb21haW5f YWxsb2Moc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCisJCQkJICAgdW5zaWduZWQgaW50IHZp cnEsIHVuc2lnbmVkIGludCBucl9pcnFzLA0KKwkJCQkgICB2b2lkICphcmdzKQ0KK3sNCisJc3Ry dWN0IG1jX3BjaWUgKnBjaWUgPSBkb21haW4tPmhvc3RfZGF0YTsNCisJc3RydWN0IG1jX21zaSAq bXNpID0gJnBjaWUtPm1zaTsNCisJdW5zaWduZWQgbG9uZyBiaXQ7DQorCXUzMiByZWc7DQorDQor CVdBUk5fT04obnJfaXJxcyAhPSAxKTsNCisJbXV0ZXhfbG9jaygmbXNpLT5sb2NrKTsNCisJYml0 ID0gZmluZF9maXJzdF96ZXJvX2JpdChtc2ktPnVzZWQsIG1zaS0+bnVtX3ZlY3RvcnMpOw0KKwlp ZiAoYml0ID49IG1zaS0+bnVtX3ZlY3RvcnMpIHsNCisJCW11dGV4X3VubG9jaygmbXNpLT5sb2Nr KTsNCisJCXJldHVybiAtRU5PU1BDOw0KKwl9DQorDQorCXNldF9iaXQoYml0LCBtc2ktPnVzZWQp Ow0KKwltdXRleF91bmxvY2soJm1zaS0+bG9jayk7DQorDQorCWlycV9kb21haW5fc2V0X2luZm8o ZG9tYWluLCB2aXJxLCBiaXQsICZtY19tc2lfYm90dG9tX2lycV9jaGlwLA0KKwkJCSAgICBkb21h aW4tPmhvc3RfZGF0YSwgaGFuZGxlX3NpbXBsZV9pcnEsIE5VTEwsIE5VTEwpOw0KKw0KKwkvKiBF bmFibGUgTVNJIGludGVycnVwdHMgKi8NCisJcmVnID0gcmVhZGwocGNpZS0+YnJpZGdlX2Jhc2Vf YWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisJcmVnIHw9IFBDSUVfRU5BQkxFX01TSTsNCisJd3Jp dGVsKHJlZywgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1jX2lycV9tc2lfZG9tYWluX2ZyZWUoc3Ry dWN0IGlycV9kb21haW4gKmRvbWFpbiwNCisJCQkJICAgdW5zaWduZWQgaW50IHZpcnEsIHVuc2ln bmVkIGludCBucl9pcnFzKQ0KK3sNCisJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2RvbWFpbl9n ZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsNCisJc3RydWN0IG1jX3BjaWUgKnBjaWUgPSBpcnFf ZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsNCisJc3RydWN0IG1jX21zaSAqbXNpID0gJnBjaWUt Pm1zaTsNCisNCisJbXV0ZXhfbG9jaygmbXNpLT5sb2NrKTsNCisNCisJaWYgKHRlc3RfYml0KGQt Pmh3aXJxLCBtc2ktPnVzZWQpKQ0KKwkJX19jbGVhcl9iaXQoZC0+aHdpcnEsIG1zaS0+dXNlZCk7 DQorCWVsc2UNCisJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgInRyeWluZyB0byBmcmVlIHVu dXNlZCBNU0klbHVcbiIsDQorCQkJZC0+aHdpcnEpOw0KKw0KKwltdXRleF91bmxvY2soJm1zaS0+ bG9jayk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgbXNpX2Rv bWFpbl9vcHMgPSB7DQorCS5hbGxvYwk9IG1jX2lycV9tc2lfZG9tYWluX2FsbG9jLA0KKwkuZnJl ZQk9IG1jX2lycV9tc2lfZG9tYWluX2ZyZWUsDQorfTsNCisNCitzdGF0aWMgaW50IG1jX2FsbG9j YXRlX21zaV9kb21haW5zKHN0cnVjdCBtY19wY2llICpwY2llKQ0KK3sNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9k ZSA9IG9mX25vZGVfdG9fZndub2RlKGRldi0+b2Zfbm9kZSk7DQorCXN0cnVjdCBtY19tc2kgKm1z aSA9ICZwY2llLT5tc2k7DQorDQorCW11dGV4X2luaXQoJnBjaWUtPm1zaS5sb2NrKTsNCisNCisJ bXNpLT5kZXZfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIG1zaS0+bnVtX3Zl Y3RvcnMsDQorCQkJCQkJJm1zaV9kb21haW5fb3BzLCBwY2llKTsNCisJaWYgKCFtc2ktPmRldl9k b21haW4pIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBJUlEgZG9tYWluXG4i KTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCW1zaS0+bXNpX2RvbWFpbiA9IHBjaV9t c2lfY3JlYXRlX2lycV9kb21haW4oZndub2RlLA0KKwkJCQkJCSAgICAmbWNfbXNpX2RvbWFpbl9p bmZvLA0KKwkJCQkJCSAgICBtc2ktPmRldl9kb21haW4pOw0KKwlpZiAoIW1zaS0+bXNpX2RvbWFp bikgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIE1TSSBkb21haW5cbiIpOw0K KwkJaXJxX2RvbWFpbl9yZW1vdmUobXNpLT5kZXZfZG9tYWluKTsNCisJCXJldHVybiAtRU5PTUVN Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG1jX3BjaWVfaW5pdF9p cnFfZG9tYWlucyhzdHJ1Y3QgbWNfcGNpZSAqcGNpZSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwY2llLT5wZGV2LT5kZXY7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGRldi0+ b2Zfbm9kZTsNCisNCisJcGNpZS0+aW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIo bm9kZSwgUENJX05VTV9JTlRYLA0KKwkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcGNpZSk7DQor CWlmICghcGNpZS0+aW50eF9kb21haW4pIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdl dCBhbiBJTlR4IElSUSBkb21haW5cbiIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisJcmF3 X3NwaW5fbG9ja19pbml0KCZwY2llLT5pbnR4X21hc2tfbG9jayk7DQorDQorCXJldHVybiBtY19h bGxvY2F0ZV9tc2lfZG9tYWlucyhwY2llKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWNfcGNpX3Vu bWFwX2NmZyh2b2lkICpwdHIpDQorew0KKwlwY2lfZWNhbV9mcmVlKChzdHJ1Y3QgcGNpX2NvbmZp Z193aW5kb3cgKilwdHIpOw0KK30NCisNCitzdGF0aWMgaW50IG1jX3BjaWVfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBtY19wY2llICpwY2llOw0KKwlz dHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7DQorCXN0cnVjdCBwY2lfY29uZmlnX3dpbmRv dyAqY2ZnOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgcmVz b3VyY2VfZW50cnkgKndpbjsNCisJc3RydWN0IHJlc291cmNlICpidXNfcmFuZ2UgPSBOVUxMOw0K KwlzdHJ1Y3QgcmVzb3VyY2UgKmNmZ3JlczsNCisJaW50IHJldDsNCisJcmVzb3VyY2Vfc2l6ZV90 IHNpemU7DQorCXUzMiBpbmRleDsNCisJdTMyIGF0cl9zejsNCisJdTMyIHZhbDsNCisNCisJaWYg KCFkZXYtPm9mX25vZGUpDQorCQlyZXR1cm4gLUVOT0RFVjsNCisNCisJLyogQWxsb2NhdGUgdGhl IFBDSWUgcG9ydCAqLw0KKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYs IHNpemVvZigqcGNpZSkpOw0KKwlpZiAoIWJyaWRnZSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0K KwlwY2llID0gcGNpX2hvc3RfYnJpZGdlX3ByaXYoYnJpZGdlKTsNCisNCisJcGNpZS0+cGRldiA9 IHBkZXY7DQorDQorCWNmZ3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7DQorCXBjaWUtPmNmZ2h3X2Jhc2VfYWRkciA9IGNmZ3Jlcy0+c3RhcnQ7DQor CXNpemUgPSByZXNvdXJjZV9zaXplKGNmZ3Jlcyk7DQorCXBjaWUtPmNmZ19zaXplID0gc2l6ZTsN CisJcGNpZS0+YXRyX3N6ID0gZmluZF9maXJzdF9iaXQoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikm c2l6ZSwgNjQpIC0gMTsNCisNCisJcmV0ID0gbWNfcGNpZV9wYXJzZV9kdChwY2llKTsNCisJaWYg KHJldCkgew0KKwkJZGV2X2VycihkZXYsICJwYXJzaW5nIGRldmljZXRyZWUgZmFpbGVkLCByZXQg JXhcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCWlycV9zZXRfY2hhaW5lZF9o YW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgbWNfcGNpZV9pc3IsIHBjaWUpOw0KKw0KKwlyZXQg PSBtY19ob3N0X2luaXQocGNpZSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIGluaXRpYWxpemUgaG9zdFxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8q DQorCSAqIENvbmZpZ3VyZSBhbGwgaW5ib3VuZCBhbmQgb3V0Ym91bmQgd2luZG93cyBhbmQgcHJl cGFyZQ0KKwkgKiBmb3IgY29uZmlnIGFjY2Vzcw0KKwkgKi8NCisJcmV0ID0gcGNpX3BhcnNlX3Jl cXVlc3Rfb2ZfcGNpX3JhbmdlcyhkZXYsICZicmlkZ2UtPndpbmRvd3MsDQorCQkJCQkgICAgICAm YnJpZGdlLT5kbWFfcmFuZ2VzLCAmYnVzX3JhbmdlKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gcGFyc2UgUENJIHJhbmdlc1xuIik7DQorCQlyZXR1cm4gcmV0Ow0K Kwl9DQorDQorCWluZGV4ID0gMTsNCisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW4s ICZicmlkZ2UtPndpbmRvd3MpIHsNCisJCWlmICgocmVzb3VyY2VfdHlwZSh3aW4tPnJlcykgIT0g SU9SRVNPVVJDRV9NRU0pICYmDQorCQkgICAgKHJlc291cmNlX3R5cGUod2luLT5yZXMpICE9IElP UkVTT1VSQ0VfSU8pKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJc2l6ZSA9IHJlc291cmNlX3NpemUo d2luLT5yZXMpOw0KKwkJYXRyX3N6ID0gZmluZF9maXJzdF9iaXQoKGNvbnN0IHVuc2lnbmVkIGxv bmcgKikmc2l6ZSwgNjQpIC0gMTsNCisNCisJCS8qDQorCQkgKiBDb25maWd1cmUgQWRkcmVzcyBU cmFuc2xhdGlvbiBUYWJsZSBpbmRleCBmb3IgUENJDQorCQkgKiBtZW0gc3BhY2UNCisJCSAqLw0K KwkJd3JpdGVsKFBDSUVfVFhfUlhfSU5URVJGQUNFLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsN CisJCSAgICAgICAoaW5kZXggKiBBVFRfRU5UUllfU0laRSkgKw0KKwkJICAgICAgIE1DX0FUUjBf QVhJNF9TTFYwX1RSU0xfUEFSQU0pOw0KKw0KKwkJdmFsID0gbG93ZXJfMzJfYml0cyh3aW4tPnJl cy0+c3RhcnQpIHwNCisJCQkJICAgIChhdHJfc3ogPDwgQVRSX1NJWkVfU0hJRlQpIHwNCisJCQkJ ICAgIEFUUl9JTVBMX0VOQUJMRTsNCisNCisJCXdyaXRlbCh2YWwsIHBjaWUtPmJyaWRnZV9iYXNl X2FkZHIgKw0KKwkJICAgICAgIChpbmRleCAqIEFUVF9FTlRSWV9TSVpFKSArDQorCQkgICAgICAg TUNfQVRSMF9BWEk0X1NMVjBfU1JDQUREUl9QQVJBTSk7DQorDQorCQl2YWwgPSB1cHBlcl8zMl9i aXRzKHdpbi0+cmVzLT5zdGFydCk7DQorCQl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFzZV9h ZGRyICsgKGluZGV4ICogQVRUX0VOVFJZX1NJWkUpICsNCisJCQkJTUNfQVRSMF9BWEk0X1NMVjBf U1JDX0FERFIpOw0KKw0KKwkJdmFsID0gbG93ZXJfMzJfYml0cyh3aW4tPnJlcy0+c3RhcnQgLSB3 aW4tPm9mZnNldCk7DQorCQl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsNCisJ CSAgICAgICAoaW5kZXggKiBBVFRfRU5UUllfU0laRSkgKw0KKwkJICAgICAgIE1DX0FUUjBfQVhJ NF9TTFYwX1RSU0xfQUREUl9MU0IpOw0KKw0KKwkJdmFsID0gdXBwZXJfMzJfYml0cyh3aW4tPnJl cy0+c3RhcnQpOw0KKwkJd3JpdGVsKHZhbCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIChpbmRl eCAqIEFUVF9FTlRSWV9TSVpFKSArDQorCQkJCU1DX0FUUjBfQVhJNF9TTFYwX1RSU0xfQUREUl9V RFcpOw0KKw0KKwkJaW5kZXgrKzsNCisJfQ0KKw0KKwlyZXQgPSBtY19wY2llX2luaXRfaXJxX2Rv bWFpbnMocGNpZSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGNyZWF0 aW5nIElSUSBkb21haW5zXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyogUGFyc2Ug YW5kIG1hcCBvdXIgQ29uZmlndXJhdGlvbiBTcGFjZSB3aW5kb3dzICovDQorCWNmZyA9IHBjaV9l Y2FtX2NyZWF0ZShkZXYsIGNmZ3JlcywgYnVzX3JhbmdlLCAmcGNpX2dlbmVyaWNfZWNhbV9vcHMp Ow0KKwlpZiAoSVNfRVJSKGNmZykpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGNyZWF0aW5n IENvbmZpZ3VyYXRpb24gU3BhY2VcbiIpOw0KKwkJcmV0dXJuIFBUUl9FUlIoY2ZnKTsNCisJfQ0K Kw0KKwlwY2llLT5jZmdfYmFzZV9hZGRyID0gY2ZnLT53aW47DQorDQorCXZhbCA9IGNmZ19yZWFk bChwY2llLCBQQ0lfUFJJTUFSWV9CVVMpOw0KKwl2YWwgJj0gMHhmZjAwMDAwMDsNCisJdmFsIHw9 IDB4MDBmZjAxMDA7DQorCWNmZ193cml0ZWwocGNpZSwgdmFsLCBQQ0lfUFJJTUFSWV9CVVMpOw0K Kw0KKwkvKiBIYXJkd2FyZSBkb2Vzbid0IHNldHVwIE1TSSBieSBkZWZhdWx0ICovDQorCW1jX3Bj aWVfZW5hYmxlX21zaShwY2llKTsNCisNCisJdmFsID0gUENJRV9FTkFCTEVfTVNJIHwgUENJRV9M T0NBTF9JTlRfRU5BQkxFOw0KKwl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsg TUNfSU1BU0tfTE9DQUwpOw0KKw0KKwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2 LCBtY19wY2lfdW5tYXBfY2ZnLCBjZmcpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisN CisJLyogSW5pdGlhbGl6ZSBicmlkZ2UgKi8NCisJYnJpZGdlLT5kZXYucGFyZW50ID0gZGV2Ow0K KwlicmlkZ2UtPnN5c2RhdGEgPSBjZmc7DQorCWJyaWRnZS0+YnVzbnIgPSBjZmctPmJ1c3Iuc3Rh cnQ7DQorCWJyaWRnZS0+b3BzID0gJnBjaV9nZW5lcmljX2VjYW1fb3BzLnBjaV9vcHM7DQorCWJy aWRnZS0+bWFwX2lycSA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaTsNCisJYnJpZGdlLT5zd2l6 emxlX2lycSA9IHBjaV9jb21tb25fc3dpenpsZTsNCisNCisJcmV0dXJuIHBjaV9ob3N0X3Byb2Jl KGJyaWRnZSk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1jX3Bj aWVfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29tcGF0aWJsZSA9ICJtaWNyb2NoaXAscGYtYXhpLXBj aWUtaG9zdC0xLjAiIH0sDQorCXt9LA0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg bWNfcGNpZV9vZl9tYXRjaCkNCisNCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtY19w Y2llX2RyaXZlciA9IHsNCisJLnByb2JlID0gbWNfcGNpZV9wcm9iZSwNCisJLmRyaXZlciA9IHsN CisJCS5uYW1lID0gIm1pY3JvY2hpcC1wY2llIiwNCisJCS5vZl9tYXRjaF90YWJsZSA9IG1jX3Bj aWVfb2ZfbWF0Y2gsDQorCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsDQorCX0sDQorfTsN CisNCitidWlsdGluX3BsYXRmb3JtX2RyaXZlcihtY19wY2llX2RyaXZlcik7DQorDQorTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOw0KK01PRFVMRV9ERVNDUklQVElPTigiTWljcm9jaGlwIFBDSWUg aG9zdCBjb250cm9sbGVyIGRyaXZlciIpOw0KK01PRFVMRV9BVVRIT1IoIkRhaXJlIE1jTmFtYXJh IDxkYWlyZS5tY25hbWFyYUBtaWNyb2NoaXAuY29tPiIpOw0KLS0gDQoyLjE3LjENCg0K