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 78D3CC433E2 for ; Wed, 20 May 2020 11:46:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 50A90207D3 for ; Wed, 20 May 2020 11:46:42 +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="FWv8KZcv"; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="lACL966n" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726821AbgETLql (ORCPT ); Wed, 20 May 2020 07:46:41 -0400 Received: from esa1.microchip.iphmx.com ([68.232.147.91]:38276 "EHLO esa1.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726224AbgETLqk (ORCPT ); Wed, 20 May 2020 07:46:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1589975200; x=1621511200; h=from:to:subject:date:message-id:content-id: content-transfer-encoding:mime-version; bh=wZfkhs1MXNbgxRoWCq/URlIck/st2VNFBB1xBXsilQQ=; b=FWv8KZcvpTFKJ3TCp1Fzv2a7zXms9LTp8OZFq9MpjwiqFSfV1jKFWCL+ jShoPOSVqXQuxtdEfJn2Jf/XHBNymxJVoHehQrUQ3bzVIgMq+Jn9h5pwF moVuTf/GjIaPrX22wle/J1idjqRf+pyaYiYTTFAQfYC4i1m/envvangTH NmjwD4PhiIv92sxnb6nT1r2bIXRxBZNkk7EdE7EXhzL6v3qnYLY729RBJ 0tFcG83bmi12aIVV9QbUP1LknU9+DZy0XH63bA0zhMA6BnSPaH6AD8p8u Txjr5ZaQoJQ+iRQ8dkHXnAaJgHl+BmJ46i9oClsHQrT+393TviCB9C7dW A==; IronPort-SDR: mLycRAF49U61+QwgwUIWGp1pEdW9eAlJM6Q79DMakie+00B/dk8qU53rJn3Mj/lShN5H2BySlc dDfmMF49/opOJWJvooHRK04RULneDsIjH99/XVFq0vbtiJZmhG4V8b6mh57KwmPy4OQghZRYAE 71cF0khK9QTJvcbhbnbnASs+9gnHgCocyWupuh/n24TKNsljgHbfhWk/B0QaxZZjgSzKe9AMOm C0xjOMnlsA6E4TU+SX/q+llXqsGA9zAalY2/cOfI30tFx9AD23kXyZYJdfWMA7BMg3kErOulcM QSE= X-IronPort-AV: E=Sophos;i="5.73,413,1583218800"; d="scan'208";a="80362438" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 20 May 2020 04:46:39 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 20 May 2020 04:46:38 -0700 Received: from NAM04-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; Wed, 20 May 2020 04:46:38 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NXBvRqxWEgTN6crA7deh0ij5cCrMdDEq9nMaHDnvPTcC2zi3sQpHh2uNQfGe8a0ch8Uyxvs6MG+xEZWaWOZRRvm9nY/O7u1kqcxYR/tpT02YsmfDwQCedBZqOmRGO4LwdThkUNtwSY+aZHRUrTLan7nP6s30cqioXCRKbGv6QTTtKKRMB2euxi4Ri/ag2I/jVS9JPdY4m7pTLBwgJHMSXvUzXbJ4U8hHGxF4ELD3HASGfoUGHiwCK6CqdPLvSIElym1ae5PhOGkMyfCp33Pm2cpjdFHgIGHeScj7ZtieP+qNEDCtjuWsxuC0/34euVFyq7AohZadO9/2bVE5gfIREw== 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=wZfkhs1MXNbgxRoWCq/URlIck/st2VNFBB1xBXsilQQ=; b=JOhqCtHNILcNe+gLjG48TDOIv0seuox8P8C/ywXE4gX9Y9hSeUn5nFAURcIFPXZWR9Nap8JyfyC53SQqT2BGxGtOS7SUDcruy1blZRzjw63vFPzRbTVjMmDgHeV/paCMUkm4BVCdr16tK4mbmZJbxjs5ZX4QlmBrIl6chh9HwmDyI5q+Yh+he8mAH58StXVj4pbLpmA+igRdsb1SeyTwUhVTGXj+5lGwuXxFxiQeTbk6fIqi0/FQVVsr0kyDzV/78Elnth67Ysvf+7zNYvOvJVyOgTI+wFUUT9WqbCKBpDsWFrVui9PNJmzo8CwB9pOl+YBUsbR48u2PBwe9fo51Og== 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=wZfkhs1MXNbgxRoWCq/URlIck/st2VNFBB1xBXsilQQ=; b=lACL966nfCkCGQ+ThzHfBGzwT73aJrqY13Co8hvQF9g1oujNf7ViqrcmRsD8U27GhHsJQEaWBFUo/Z/NwhvGxHi94rpsh/8GTic55y2h4S5O7yBivTr7tPJJkRJcrd8syiz4l7XNt5Jj2KX4x+CAz91eaAEBHAwqwcQOWx6oyuw= Received: from MN2PR11MB4269.namprd11.prod.outlook.com (2603:10b6:208:190::32) by MN2PR11MB3981.namprd11.prod.outlook.com (2603:10b6:208:13d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.24; Wed, 20 May 2020 11:46:32 +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.024; Wed, 20 May 2020 11:46:32 +0000 From: To: , , , , , Subject: Subject: [PATCH v9 2/2] PCI: Microchip: Add host driver for Microchip PCIe controller Thread-Topic: Subject: [PATCH v9 2/2] PCI: Microchip: Add host driver for Microchip PCIe controller Thread-Index: AQHWLpxOnY/BrBe2V02EbM3ke9qYWg== Date: Wed, 20 May 2020 11:46:32 +0000 Message-ID: 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: 1823068a-7921-46b2-600c-08d7fcb3711f x-ms-traffictypediagnostic: MN2PR11MB3981: x-microsoft-antispam-prvs: x-bypassexternaltag: True x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 04097B7F7F x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mvaf87DPwrlt9+cMqcKqFlu+ZNzxC/xjS5PUeDIdo9SUgng5bBUU32ik2m8tLD/NG/7m+PsJZnH+3WzZUXBdTqP8TRBHNY4bEWEnulyhhG45De08YJ7FBQFv9mQ74af+tRRfzX1fOZQPfncBjvTVmiq9iHD1b21gZwh2vq6pTg/MPakqB83sXJOfnOpiG3Dk7G70ivQXMUvnwMYkhrmUOxK7QZVAMqsGbNyKHIk9eiAoy3/Zzp/b+lbRiXuo0ZZtFrpXDr0kq4CoCR6xqR9+kNCVfW0Io3Itk9tsv90k67PHB1R85n2RtC8rr68NONImYWn/0QbWM9mw3v6ZTzVEwg== 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:(346002)(366004)(39860400002)(376002)(396003)(136003)(8676002)(6512007)(110136005)(186003)(26005)(2906002)(36756003)(8936002)(316002)(6486002)(30864003)(6506007)(91956017)(76116006)(66446008)(64756008)(66946007)(86362001)(5660300002)(66556008)(66476007)(2616005)(71200400001)(478600001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: ZL73ik5+IU97+1K06+OwGdCmpjeRd3V1ZMDx5lNMrbSbD0KQiS4kLT3b4ohQ9YS7skGbrIZlr5XPphKzRM1+aWjo6ns2vM1OevFc9M69C+3uUvHaq1411umI8mvMqJR4QHeTeqIQZI6THPJpj7ikbsMGkwcKudF7jOK21GLruyYbEk4TSxPUwuJtIVsC6T9+lk2UcA9407rnv0guwFrHcvLiJQ/kAdQmK+2/N1GJlU9fOTjWdCautpCv0lPEDaIKFz+eSi+zlLAioRwxzi1Nb9mdAeGZMzN/Iuqie3D11S3evBpWe/pmEjujvwxSpHyQXET3cwXN95+i1hLmpBy9aXLTIKF3Jk7/8s5DpQ6dyrmRm9aDL3dsKyRXh+qMk+JBh4WGW32A2j9Q1YljzQnGnT1rZORTaMWPKmQSTYhnmIeYj2sMZZX61qsSGucSClW1ViIrBCM6F/I5x1SJcL3OPKdBTlkbLa6pfkTk3wSlbyMgpJD1K0R3YdzJXWhna+Vt x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <8DD5012D83717C4A945B2CFCB4AE48B4@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 1823068a-7921-46b2-600c-08d7fcb3711f X-MS-Exchange-CrossTenant-originalarrivaltime: 20 May 2020 11:46:32.2052 (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: U2bSaW8DzA1vIihhUQe8NLtclSasOU0CkNVOqlIdJxGeYLKnWQMHqALxqU2lyY9KOReAFCnx381p7feRYejunALx9kohJMKqBsSKgkwHoTo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3981 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org DQpUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBQQ0llIFBvbGFyRmly ZSBQQ0llDQpjb250cm9sbGVyIHdoZW4gY29uZmlndXJlZCBpbiBob3N0IChSb290IENvbXBsZXgp IG1vZGUuDQoNClNpZ25lZC1vZmYtYnk6IERhaXJlIE1jTmFtYXJhIDxkYWlyZS5tY25hbWFyYUBt aWNyb2NoaXAuY29tPg0KLS0tDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnICAgICAg ICAgICAgICAgfCAgIDkgKw0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgICAgICAg ICAgICAgIHwgICAxICsNCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWljcm9jaGlwLWhv c3QuYyB8IDY2NCArKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2VkLCA2NzQgaW5z ZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3Bj aWUtbWljcm9jaGlwLWhvc3QuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQppbmRleCA5MWJmZGI3 ODQ4MjkuLjVlYzc2MDQ2NmJkOSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv S2NvbmZpZw0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQpAQCAtMjU4LDYg KzI1OCwxNSBAQCBjb25maWcgUENJX0hZUEVSVl9JTlRFUkZBQ0UNCiAJICBUaGUgSHlwZXItViBQ Q0kgSW50ZXJmYWNlIGlzIGEgaGVscGVyIGRyaXZlciBhbGxvd3Mgb3RoZXIgZHJpdmVycyB0bw0K IAkgIGhhdmUgYSBjb21tb24gaW50ZXJmYWNlIHdpdGggdGhlIEh5cGVyLVYgUENJIGZyb250ZW5k IGRyaXZlci4NCiANCitjb25maWcgUENJRV9NSUNST0NISVBfSE9TVA0KKwlib29sICJNaWNyb2No aXAgQVhJIFBDSWUgaG9zdCBicmlkZ2Ugc3VwcG9ydCINCisJZGVwZW5kcyBvbiBQQ0lfTVNJICYm IE9GDQorCXNlbGVjdCBQQ0lfTVNJX0lSUV9ET01BSU4NCisJc2VsZWN0IEdFTkVSSUNfTVNJX0lS UV9ET01BSU4NCisJaGVscA0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIHRvIHN1 cHBvcnQgdGhlIE1pY3JvY2hpcCBBWEkgUENJZQ0KKwkgIEhvc3QgQnJpZGdlIGRyaXZlci4NCisN CiBzb3VyY2UgImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL0tjb25maWciDQogc291cmNlICJk cml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWciDQogc291cmNlICJkcml2ZXJz L3BjaS9jb250cm9sbGVyL2NhZGVuY2UvS2NvbmZpZyINCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0K aW5kZXggMTU4YzU5NzcxODI0Li40MTY1MjhkODU1M2UgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2Vm aWxlDQpAQCAtMjYsNiArMjYsNyBAQCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9FUCkgKz0g cGNpZS1yb2NrY2hpcC1lcC5vDQogb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfSE9TVCkgKz0g cGNpZS1yb2NrY2hpcC1ob3N0Lm8NCiBvYmotJChDT05GSUdfUENJRV9NRURJQVRFSykgKz0gcGNp ZS1tZWRpYXRlay5vDQogb2JqLSQoQ09ORklHX1BDSUVfVEFOR09fU01QODc1OSkgKz0gcGNpZS10 YW5nby5vDQorb2JqLSQoQ09ORklHX1BDSUVfTUlDUk9DSElQX0hPU1QpICs9IHBjaWUtbWljcm9j aGlwLWhvc3Qubw0KIG9iai0kKENPTkZJR19WTUQpICs9IHZtZC5vDQogb2JqLSQoQ09ORklHX1BD SUVfQlJDTVNUQikgKz0gcGNpZS1icmNtc3RiLm8NCiAjIHBjaWUtaGlzaS5vIHF1aXJrcyBhcmUg bmVlZGVkIGV2ZW4gd2l0aG91dCBDT05GSUdfUENJRV9EVw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvcGNpZS1taWNyb2NoaXAtaG9zdC5jIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9wY2llLW1pY3JvY2hpcC1ob3N0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAw MDAwMDAwMDAwMDAuLmJkZWE0MTZhZmY3OQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2llLW1pY3JvY2hpcC1ob3N0LmMNCkBAIC0wLDAgKzEsNjY0IEBADQor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIE1pY3JvY2hpcCBB WEkgUENJZSBCcmlkZ2UgaG9zdCBjb250cm9sbGVyIGRyaXZlcg0KKyAqDQorICogQ29weXJpZ2h0 IChjKSAyMDE4IC0gMjAxOSBNaWNyb2NoaXAgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQorICoNCisgKiBBdXRob3I6IERhaXJlIE1jTmFtYXJhIDxkYWlyZS5tY25hbWFyYUBtaWNy b2NoaXAuY29tPg0KKyAqDQorICogQmFzZWQgb246DQorICoJcGNpZS1yY2FyLmMNCisgKglwY2ll LXhpbGlueC5jDQorICoJcGNpZS1hbHRlcmEuYw0KKyAqLw0KKyNpbmNsdWRlIDxsaW51eC9pcnFj aGlwL2NoYWluZWRfaXJxLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRl IDxsaW51eC9tc2kuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KKyNpbmNsdWRl IDxsaW51eC9vZl9pcnEuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+DQorI2luY2x1ZGUg PGxpbnV4L3BjaS1lY2FtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0K Kw0KKyNpbmNsdWRlICIuLi9wY2kuaCINCisNCisvKiBOdW1iZXIgb2YgTVNJIElSUXMgKi8NCisj ZGVmaW5lIE1DX05VTV9NU0lfSVJRUwkJCQkzMg0KKyNkZWZpbmUgTUNfTlVNX01TSV9JUlFTX0NP REVECQkJNQ0KKw0KKy8qIFBDSWUgQnJpZGdlIFBoeSBhbmQgQ29udHJvbGxlciBQaHkgb2Zmc2V0 cyAqLw0KKyNkZWZpbmUgTUNfUENJRTFfQlJJREdFX0FERFIJCQkweDAwMDA4MDAwdQ0KKyNkZWZp bmUgTUNfUENJRTFfQ1RSTF9BRERSCQkJMHgwMDAwYTAwMHUNCisNCisvKiBQQ0llIENvbnRyb2xs ZXIgUGh5IFJlZ3MgKi8NCisjZGVmaW5lIE1DX1NFQ19FUlJPUl9JTlQJCQkweDI4DQorI2RlZmlu ZSAgU0VDX0VSUk9SX0lOVF9UWF9SQU1fU0VDX0VSUl9JTlQJR0VOTUFTSygzLCAwKQ0KKyNkZWZp bmUgIFNFQ19FUlJPUl9JTlRfUlhfUkFNX1NFQ19FUlJfSU5UCUdFTk1BU0soNywgNCkNCisjZGVm aW5lICBTRUNfRVJST1JfSU5UX1BDSUUyQVhJX1JBTV9TRUNfRVJSX0lOVAlHRU5NQVNLKDExLCA4 KQ0KKyNkZWZpbmUgIFNFQ19FUlJPUl9JTlRfQVhJMlBDSUVfUkFNX1NFQ19FUlJfSU5UCUdFTk1B U0soMTUsIDEyKQ0KKyNkZWZpbmUgTUNfU0VDX0VSUk9SX0lOVF9NQVNLCQkJMHgyYw0KKyNkZWZp bmUgTUNfREVEX0VSUk9SX0lOVAkJCTB4MzANCisjZGVmaW5lICBERURfRVJST1JfSU5UX1RYX1JB TV9ERURfRVJSX0lOVAlHRU5NQVNLKDMsIDApDQorI2RlZmluZSAgREVEX0VSUk9SX0lOVF9SWF9S QU1fREVEX0VSUl9JTlQJR0VOTUFTSyg3LCA0KQ0KKyNkZWZpbmUgIERFRF9FUlJPUl9JTlRfUENJ RTJBWElfUkFNX0RFRF9FUlJfSU5UCUdFTk1BU0soMTEsIDgpDQorI2RlZmluZSAgREVEX0VSUk9S X0lOVF9BWEkyUENJRV9SQU1fREVEX0VSUl9JTlQJR0VOTUFTSygxNSwgMTIpDQorI2RlZmluZSBN Q19ERURfRVJST1JfSU5UX01BU0sJCQkweDM0DQorI2RlZmluZSBNQ19FQ0NfQ09OVFJPTAkJCQkw eDM4DQorI2RlZmluZSAgRUNDX0NPTlRST0xfQVhJMlBDSUVfUkFNX0VDQ19CWVBBU1MJQklUKDI3 KQ0KKyNkZWZpbmUgIEVDQ19DT05UUk9MX1BDSUUyQVhJX1JBTV9FQ0NfQllQQVNTCUJJVCgyNikN CisjZGVmaW5lICBFQ0NfQ09OVFJPTF9SWF9SQU1fRUNDX0JZUEFTUwkJQklUKDI1KQ0KKyNkZWZp bmUgIEVDQ19DT05UUk9MX1RYX1JBTV9FQ0NfQllQQVNTCQlCSVQoMjQpDQorI2RlZmluZSBNQ19M VFNTTV9TVEFURQkJCQkweDVjDQorI2RlZmluZSAgTFRTU01fTDBfU1RBVEUJCQkJMHgxMA0KKyNk ZWZpbmUgTUNfUENJRV9FVkVOVF9JTlQJCQkweDE0Yw0KKyNkZWZpbmUgIFBDSUVfRVZFTlRfSU5U X0wyX0VYSVRfSU5UCQlCSVQoMCkNCisjZGVmaW5lICBQQ0lFX0VWRU5UX0lOVF9IT1RSU1RfRVhJ VF9JTlQJCUJJVCgxKQ0KKyNkZWZpbmUgIFBDSUVfRVZFTlRfSU5UX0RMVVBfRVhJVF9JTlQJCUJJ VCgyKQ0KKyNkZWZpbmUgIFBDSUVfRVZFTlRfSU5UX0wyX0VYSVRfSU5UX01BU0sJQklUKDE2KQ0K KyNkZWZpbmUgIFBDSUVfRVZFTlRfSU5UX0hPVFJTVF9FWElUX0lOVF9NQVNLCUJJVCgxNykNCisj ZGVmaW5lICBQQ0lFX0VWRU5UX0lOVF9ETFVQX0VYSVRfSU5UX01BU0sJQklUKDE4KQ0KKw0KKy8q IFBDSWUgQnJpZGdlIFBoeSBSZWdzICovDQorI2RlZmluZSBNQ19QQ0lFX1BDSV9JRFNfRFcxCQkJ MHg5Yw0KKw0KKy8qIFBDSWUgQ29uZmlnIHNwYWNlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSAq Lw0KKyNkZWZpbmUgTUNfTVNJX0NBUF9DVFJMCQkJCTB4ZTB1DQorI2RlZmluZSAgTVNJX0VOQUJM RQkJCQkoMHgwMXUgPDwgMTYpDQorI2RlZmluZSAgTVNJX0NBUF9NVUxUSQkJCQkoTUNfTlVNX01T SV9JUlFTX0NPREVEIDw8IDE3KQ0KKyNkZWZpbmUgIE1TSV9FTkFCTEVfTVVMVEkJCQkoTUNfTlVN X01TSV9JUlFTX0NPREVEIDw8IDIwKQ0KKyNkZWZpbmUgTUNfTVNJX01TR19MT19BRERSCQkJMHhl NHUNCisjZGVmaW5lIE1DX01TSV9NU0dfSElfQUREUgkJCTB4ZTh1DQorI2RlZmluZSBNQ19NU0lf TVNHX0RBVEEJCQkJMHhmMHUNCisNCisjZGVmaW5lIE1DX0lNQVNLX0xPQ0FMCQkJCTB4MTgwDQor I2RlZmluZSAgUENJRV9MT0NBTF9JTlRfRU5BQkxFCQkJMHgwZjAwMDAwMHUNCisjZGVmaW5lICBQ Q0lfSU5UUwkJCQkweDBmMDAwMDAwdQ0KKyNkZWZpbmUgIFBNX01TSV9JTlRfU0hJRlQJCQkyNA0K KyNkZWZpbmUgIFBDSUVfRU5BQkxFX01TSQkJCTB4MTAwMDAwMDB1DQorI2RlZmluZSAgTVNJX0lO VAkJCQkweDEwMDAwMDAwdQ0KKyNkZWZpbmUgIE1TSV9JTlRfU0hJRlQJCQkJMjgNCisjZGVmaW5l IE1DX0lTVEFUVVNfTE9DQUwJCQkweDE4NA0KKyNkZWZpbmUgTUNfSU1BU0tfSE9TVAkJCQkweDE4 OA0KKyNkZWZpbmUgTUNfSVNUQVRVU19IT1NUCQkJCTB4MThjDQorI2RlZmluZSBNQ19NU0lfQURE UgkJCQkweDE5MA0KKyNkZWZpbmUgTUNfSVNUQVRVU19NU0kJCQkJMHgxOTQNCisNCisvKiBQQ0ll IE1hc3RlciB0YWJsZSBpbml0IGRlZmluZXMgKi8NCisjZGVmaW5lIE1DX0FUUjBfUENJRV9XSU4w X1NSQ0FERFJfUEFSQU0JCTB4NjAwdQ0KKyNkZWZpbmUgIEFUUjBfUENJRV9BVFJfU0laRQkJCTB4 MWYNCisjZGVmaW5lICBBVFIwX1BDSUVfQVRSX1NJWkVfU0hJRlQJCTENCisjZGVmaW5lIE1DX0FU UjBfUENJRV9XSU4wX1NSQ19BRERSCQkweDYwNHUNCisjZGVmaW5lIE1DX0FUUjBfUENJRV9XSU4w X1RSU0xfQUREUl9MU0IJCTB4NjA4dQ0KKyNkZWZpbmUgTUNfQVRSMF9QQ0lFX1dJTjBfVFJTTF9B RERSX1VEVwkJMHg2MGN1DQorI2RlZmluZSBNQ19BVFIwX1BDSUVfV0lOMF9UUlNMX1BBUkFNCQkw eDYxMHUNCisNCisvKiBQQ0llIEFYSSBzbGF2ZSB0YWJsZSBpbml0IGRlZmluZXMgKi8NCisjZGVm aW5lIE1DX0FUUjBfQVhJNF9TTFYwX1NSQ0FERFJfUEFSQU0JCTB4ODAwdQ0KKyNkZWZpbmUgIEFU Ul9TSVpFX1NISUZUCQkJCTENCisjZGVmaW5lICBBVFJfSU1QTF9FTkFCTEUJCQkxDQorI2RlZmlu ZSBNQ19BVFIwX0FYSTRfU0xWMF9TUkNfQUREUgkJMHg4MDR1DQorI2RlZmluZSBNQ19BVFIwX0FY STRfU0xWMF9UUlNMX0FERFJfTFNCCQkweDgwOHUNCisjZGVmaW5lIE1DX0FUUjBfQVhJNF9TTFYw X1RSU0xfQUREUl9VRFcJCTB4ODBjdQ0KKyNkZWZpbmUgTUNfQVRSMF9BWEk0X1NMVjBfVFJTTF9Q QVJBTQkJMHg4MTB1DQorI2RlZmluZSAgUENJRV9UWF9SWF9JTlRFUkZBQ0UJCQkweDAwMDAwMDAw dQ0KKyNkZWZpbmUgIFBDSUVfQ09ORklHX0lOVEVSRkFDRQkJCTB4MDAwMDAwMDF1DQorDQorI2Rl ZmluZSBBVFRfRU5UUllfU0laRQkJCTMyDQorDQorc3RydWN0IG1jX21zaSB7DQorCXN0cnVjdCBt dXRleCBsb2NrOwkJLyogUHJvdGVjdCB1c2VkIGJpdG1hcCAqLw0KKwlzdHJ1Y3QgaXJxX2RvbWFp biAqbXNpX2RvbWFpbjsNCisJc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47DQorCXUzMiBu dW1fdmVjdG9yczsNCisJdTY0IHZlY3Rvcl9waHk7DQorCURFQ0xBUkVfQklUTUFQKHVzZWQsIE1D X05VTV9NU0lfSVJRUyk7DQorfTsNCisNCitzdHJ1Y3QgbWNfcGNpZSB7DQorCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7DQorCXZvaWQgX19pb21lbSAqY2ZnX2Jhc2VfYWRkcjsNCisJdm9p ZCBfX2lvbWVtICpicmlkZ2VfYmFzZV9hZGRyOw0KKwl2b2lkIF9faW9tZW0gKmN0cmxfYmFzZV9h ZGRyOw0KKwl1NjQgY2ZnaHdfYmFzZV9hZGRyOw0KKwl1NjQgY2ZnX3NpemU7DQorCXUzMiBhdHJf c3o7DQorCXUzMiBpcnE7DQorCXN0cnVjdCBpcnFfZG9tYWluICppbnR4X2RvbWFpbjsNCisJcmF3 X3NwaW5sb2NrX3QgaW50eF9tYXNrX2xvY2s7DQorCXN0cnVjdCBtY19tc2kgbXNpOw0KK307DQor DQorc3RhdGljIGlubGluZSB1MzIgY2ZnX3JlYWRsKHN0cnVjdCBtY19wY2llICpwY2llLCBjb25z dCB1MzIgcmVnKQ0KK3sNCisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQocGNpZS0+Y2ZnX2Jhc2VfYWRk ciArIHJlZyk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjZmdfd3JpdGVsKHN0cnVjdCBt Y19wY2llICpwY2llLCBjb25zdCB1MzIgdmFsLA0KKwkJCSAgICAgIGNvbnN0IHUzMiByZWcpDQor ew0KKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBjaWUtPmNmZ19iYXNlX2FkZHIgKyByZWcpOw0KK30N CisNCitzdGF0aWMgdm9pZCBtY19wY2llX2VuYWJsZShzdHJ1Y3QgbWNfcGNpZSAqcGNpZSkNCit7 DQorCXUzMiBlbmI7DQorDQorCWVuYiA9IHJlYWRsKHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBN Q19MVFNTTV9TVEFURSk7DQorCWVuYiB8PSBMVFNTTV9MMF9TVEFURTsNCisJd3JpdGVsKGVuYiwg cGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0xUU1NNX1NUQVRFKTsNCit9DQorDQorc3RhdGlj IHZvaWQgbWNfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KK3sNCisJc3RydWN0IGly cV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7DQorCXN0cnVjdCBtY19wY2ll ICpwY2llID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCisJc3RydWN0IG1jX21zaSAqbXNpID0gJnBjaWUt Pm1zaTsNCisJdW5zaWduZWQgbG9uZyBzdGF0dXM7DQorCXVuc2lnbmVkIGxvbmcgaW50eF9zdGF0 dXM7DQorCXVuc2lnbmVkIGxvbmcgbXNpX3N0YXR1czsNCisJdTMyIGJpdDsNCisJdTMyIHZpcnE7 DQorDQorCS8qDQorCSAqIFRoZSBjb3JlIHByb3ZpZGVzIGEgc2luZ2xlIGludGVycnVwdCBmb3Ig Ym90aCBJTlR4L01TSSBtZXNzYWdlcy4NCisJICogU28gd2UnbGwgcmVhZCBib3RoIElOVHggYW5k IE1TSSBzdGF0dXMuDQorCSAqLw0KKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsNCisN CisJc3RhdHVzID0gcmVhZGwocGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lTVEFUVVNfTE9D QUwpOw0KKwl3aGlsZSAoc3RhdHVzICYgKFBDSV9JTlRTIHwgTVNJX0lOVCkpIHsNCisJCWludHhf c3RhdHVzID0gKHN0YXR1cyAmIFBDSV9JTlRTKSA+PiBQTV9NU0lfSU5UX1NISUZUOw0KKwkJZm9y X2VhY2hfc2V0X2JpdChiaXQsICZpbnR4X3N0YXR1cywgUENJX05VTV9JTlRYKSB7DQorCQkJdmly cSA9IGlycV9maW5kX21hcHBpbmcocGNpZS0+aW50eF9kb21haW4sIGJpdCArIDEpOw0KKwkJCWlm ICh2aXJxKQ0KKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7DQorCQkJZWxzZQ0KKwkJCQlk ZXZfZXJyX3JhdGVsaW1pdGVkKGRldiwgImJhZCBJTlR4IElSUSAlZFxuIiwNCisJCQkJCQkgICAg Yml0KTsNCisNCisJCQkvKiBDbGVhciB0aGF0IGludGVycnVwdCBiaXQgKi8NCisJCQl3cml0ZWwo MSA8PCAoYml0ICsgUE1fTVNJX0lOVF9TSElGVCksDQorCQkJICAgICAgIHBjaWUtPmJyaWRnZV9i YXNlX2FkZHIgKyBNQ19JU1RBVFVTX0xPQ0FMKTsNCisJCX0NCisNCisJCW1zaV9zdGF0dXMgPSAo c3RhdHVzICYgTVNJX0lOVCk7DQorCQlpZiAobXNpX3N0YXR1cykgew0KKwkJCW1zaV9zdGF0dXMg PSByZWFkbChwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsNCisJCQkJCSAgIE1DX0lTVEFUVVNfTVNJ KTsNCisJCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJm1zaV9zdGF0dXMsIG1zaS0+bnVtX3ZlY3Rv cnMpIHsNCisJCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcobXNpLT5kZXZfZG9tYWluLCBiaXQp Ow0KKwkJCQlpZiAodmlycSkNCisJCQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsNCisJCQkJ ZWxzZQ0KKwkJCQkJZGV2X2Vycl9yYXRlbGltaXRlZChkZXYsDQorCQkJCQkJCSAgICAiYmFkIE1T SSBJUlEgJWRcbiIsDQorCQkJCQkJCSAgICBiaXQpOw0KKw0KKwkJCQkvKiBDbGVhciB0aGF0IE1T SSBpbnRlcnJ1cHQgYml0ICovDQorCQkJCXdyaXRlbCgoMSA8PCBiaXQpLCBwY2llLT5icmlkZ2Vf YmFzZV9hZGRyICsNCisJCQkJICAgICAgIE1DX0lTVEFUVVNfTVNJKTsNCisJCQl9DQorCQkJLyog Q2xlYXIgdGhlIElTVEFUVVMgTVNJIGJpdCAqLw0KKwkJCXdyaXRlbCgxIDw8IE1TSV9JTlRfU0hJ RlQsIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKw0KKwkJCSAgICAgICBNQ19JU1RBVFVTX0xPQ0FM KTsNCisJCX0NCisNCisJCXN0YXR1cyA9IHJlYWRsKHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBN Q19JU1RBVFVTX0xPQ0FMKTsNCisJfQ0KKw0KKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2Mp Ow0KK30NCisNCitzdGF0aWMgaW50IG1jX3BjaWVfcGFyc2VfZHQoc3RydWN0IG1jX3BjaWUgKnBj aWUpDQorew0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGNpZS0+cGRldjsNCisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCisJc3RydWN0IG1jX21zaSAq bXNpID0gJnBjaWUtPm1zaTsNCisJc3RydWN0IHJlc291cmNlICpyZXM7DQorCXZvaWQgX19pb21l bSAqYXhpX2Jhc2VfYWRkcjsNCisNCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAxKTsNCisJYXhpX2Jhc2VfYWRkciA9IGRldm1faW9yZW1hcF9yZXNv dXJjZShkZXYsIHJlcyk7DQorCWlmIChJU19FUlIoYXhpX2Jhc2VfYWRkcikpDQorCQlyZXR1cm4g UFRSX0VSUihheGlfYmFzZV9hZGRyKTsNCisNCisJcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciA9IGF4 aV9iYXNlX2FkZHIgKyBNQ19QQ0lFMV9CUklER0VfQUREUjsNCisJcGNpZS0+Y3RybF9iYXNlX2Fk ZHIgPSBheGlfYmFzZV9hZGRyICsgTUNfUENJRTFfQ1RSTF9BRERSOw0KKw0KKwltc2ktPnZlY3Rv cl9waHkgPSBNQ19NU0lfQUREUjsNCisNCisJbXNpLT5udW1fdmVjdG9ycyA9IE1DX05VTV9NU0lf SVJRUzsNCisNCisJcGNpZS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCisJaWYg KHBjaWUtPmlycSA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJR JWRcbiIsIHBjaWUtPmlycSk7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIHZvaWQgbWNfcGNpZV9lbmFibGVfbXNpKHN0cnVjdCBtY19wY2ll ICpwY2llKQ0KK3sNCisJc3RydWN0IG1jX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCisJdTMyIG1z Z19jdHJsID0gY2ZnX3JlYWRsKHBjaWUsIE1DX01TSV9DQVBfQ1RSTCk7DQorDQorCW1zZ19jdHJs IHw9IE1TSV9FTkFCTEVfTVVMVEkgfCBNU0lfQ0FQX01VTFRJIHwgTVNJX0VOQUJMRTsNCisJY2Zn X3dyaXRlbChwY2llLCBtc2dfY3RybCwgTUNfTVNJX0NBUF9DVFJMKTsNCisNCisJY2ZnX3dyaXRl bChwY2llLCBsb3dlcl8zMl9iaXRzKG1zaS0+dmVjdG9yX3BoeSksIE1DX01TSV9NU0dfTE9fQURE Uik7DQorCWNmZ193cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhtc2ktPnZlY3Rvcl9waHkpLCBN Q19NU0lfTVNHX0hJX0FERFIpOw0KK30NCisNCitzdGF0aWMgaW50IG1jX2hvc3RfaW5pdChzdHJ1 Y3QgbWNfcGNpZSAqcGNpZSkNCit7DQorCXUzMiB2YWw7DQorDQorCW1jX3BjaWVfZW5hYmxlKHBj aWUpOw0KKw0KKwl2YWwgPSBFQ0NfQ09OVFJPTF9BWEkyUENJRV9SQU1fRUNDX0JZUEFTUyB8DQor CSAgICAgIEVDQ19DT05UUk9MX1BDSUUyQVhJX1JBTV9FQ0NfQllQQVNTIHwNCisJICAgICAgRUND X0NPTlRST0xfUlhfUkFNX0VDQ19CWVBBU1MgfCBFQ0NfQ09OVFJPTF9UWF9SQU1fRUNDX0JZUEFT UzsNCisJd3JpdGVsKHZhbCwgcGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBNQ19FQ0NfQ09OVFJPTCk7 DQorDQorCXZhbCA9IFBDSUVfRVZFTlRfSU5UX0wyX0VYSVRfSU5UIHwgUENJRV9FVkVOVF9JTlRf SE9UUlNUX0VYSVRfSU5UIHwNCisJICAgICAgUENJRV9FVkVOVF9JTlRfRExVUF9FWElUX0lOVCB8 IFBDSUVfRVZFTlRfSU5UX0wyX0VYSVRfSU5UX01BU0sgfA0KKwkgICAgICBQQ0lFX0VWRU5UX0lO VF9IT1RSU1RfRVhJVF9JTlRfTUFTSyB8DQorCSAgICAgIFBDSUVfRVZFTlRfSU5UX0RMVVBfRVhJ VF9JTlRfTUFTSzsNCisJd3JpdGVsKHZhbCwgcGNpZS0+Y3RybF9iYXNlX2FkZHIgKyBNQ19QQ0lF X0VWRU5UX0lOVCk7DQorDQorCXZhbCA9IFNFQ19FUlJPUl9JTlRfVFhfUkFNX1NFQ19FUlJfSU5U IHwNCisJICAgICAgU0VDX0VSUk9SX0lOVF9SWF9SQU1fU0VDX0VSUl9JTlQgfA0KKwkgICAgICBT RUNfRVJST1JfSU5UX1BDSUUyQVhJX1JBTV9TRUNfRVJSX0lOVCB8DQorCSAgICAgIFNFQ19FUlJP Ul9JTlRfQVhJMlBDSUVfUkFNX1NFQ19FUlJfSU5UOw0KKwl3cml0ZWwodmFsLCBwY2llLT5jdHJs X2Jhc2VfYWRkciArIE1DX1NFQ19FUlJPUl9JTlQpOw0KKwl3cml0ZWwodmFsLCBwY2llLT5jdHJs X2Jhc2VfYWRkciArIE1DX1NFQ19FUlJPUl9JTlRfTUFTSyk7DQorDQorCXZhbCA9IERFRF9FUlJP Ul9JTlRfVFhfUkFNX0RFRF9FUlJfSU5UIHwNCisJICAgICAgREVEX0VSUk9SX0lOVF9SWF9SQU1f REVEX0VSUl9JTlQgfA0KKwkgICAgICBERURfRVJST1JfSU5UX1BDSUUyQVhJX1JBTV9ERURfRVJS X0lOVCB8DQorCSAgICAgIERFRF9FUlJPUl9JTlRfQVhJMlBDSUVfUkFNX0RFRF9FUlJfSU5UOw0K Kwl3cml0ZWwodmFsLCBwY2llLT5jdHJsX2Jhc2VfYWRkciArIE1DX0RFRF9FUlJPUl9JTlQpOw0K Kwl3cml0ZWwodmFsLCBwY2llLT5jdHJsX2Jhc2VfYWRkciArIE1DX0RFRF9FUlJPUl9JTlRfTUFT Syk7DQorDQorCXdyaXRlbCgwLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1BU0tfTE9D QUwpOw0KKwl3cml0ZWwoR0VOTUFTSygzMSwgMCksIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBN Q19JU1RBVFVTX0xPQ0FMKTsNCisJd3JpdGVsKDAsIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBN Q19JTUFTS19IT1NUKTsNCisJd3JpdGVsKEdFTk1BU0soMzEsIDApLCBwY2llLT5icmlkZ2VfYmFz ZV9hZGRyICsgTUNfSVNUQVRVU19IT1NUKTsNCisNCisJLyogQ29uZmlndXJlIEFkZHJlc3MgVHJh bnNsYXRpb24gVGFibGUgMCBmb3IgUENJZSBjb25maWcgc3BhY2UgKi8NCisJd3JpdGVsKFBDSUVf Q09ORklHX0lOVEVSRkFDRSwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArDQorCSAgICAgICBNQ19B VFIwX0FYSTRfU0xWMF9UUlNMX1BBUkFNKTsNCisNCisJdmFsID0gbG93ZXJfMzJfYml0cyhwY2ll LT5jZmdod19iYXNlX2FkZHIpIHwNCisJICAgICAgKHBjaWUtPmF0cl9zeiA8PCBBVFJfU0laRV9T SElGVCkgfCBBVFJfSU1QTF9FTkFCTEU7DQorCXdyaXRlbCh2YWwsIHBjaWUtPmJyaWRnZV9iYXNl X2FkZHIgKyBNQ19BVFIwX0FYSTRfU0xWMF9TUkNBRERSX1BBUkFNKTsNCisJd3JpdGVsKDAsIHBj aWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19BVFIwX0FYSTRfU0xWMF9TUkNfQUREUik7DQorDQor CXZhbCA9IGxvd2VyXzMyX2JpdHMocGNpZS0+Y2ZnaHdfYmFzZV9hZGRyKTsNCisJd3JpdGVsKHZh bCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0FUUjBfQVhJNF9TTFYwX1RSU0xfQUREUl9M U0IpOw0KKwl2YWwgPSB1cHBlcl8zMl9iaXRzKHBjaWUtPmNmZ2h3X2Jhc2VfYWRkcik7DQorCXdy aXRlbCh2YWwsIHBjaWUtPmJyaWRnZV9iYXNlX2FkZHIgKyBNQ19BVFIwX0FYSTRfU0xWMF9UUlNM X0FERFJfVURXKTsNCisNCisJdmFsID0gcmVhZGwocGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1D X0FUUjBfUENJRV9XSU4wX1NSQ0FERFJfUEFSQU0pOw0KKwl2YWwgfD0gKEFUUjBfUENJRV9BVFJf U0laRSA8PCBBVFIwX1BDSUVfQVRSX1NJWkVfU0hJRlQpOw0KKwl3cml0ZWwodmFsLCBwY2llLT5i cmlkZ2VfYmFzZV9hZGRyICsgTUNfQVRSMF9QQ0lFX1dJTjBfU1JDQUREUl9QQVJBTSk7DQorCXdy aXRlbCgwLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfQVRSMF9QQ0lFX1dJTjBfU1JDX0FE RFIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbWNfbWFza19pbnR4X2ly cShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQorew0KKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBp cnFfdG9fZGVzYyhkYXRhLT5pcnEpOw0KKwlzdHJ1Y3QgbWNfcGNpZSAqcGNpZTsNCisJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCisJdTMyIG1hc2ssIHZhbDsNCisNCisJcGNpZSA9IGlycV9kZXNjX2dl dF9jaGlwX2RhdGEoZGVzYyk7DQorCW1hc2sgPSBQQ0lFX0xPQ0FMX0lOVF9FTkFCTEU7DQorCXJh d19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdzKTsNCisJdmFs ID0gcmVhZGwocGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xPQ0FMKTsNCisJdmFs ICY9IH5tYXNrOw0KKwl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1B U0tfTE9DQUwpOw0KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+aW50eF9tYXNr X2xvY2ssIGZsYWdzKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWNfdW5tYXNrX2ludHhfaXJxKHN0 cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90 b19kZXNjKGRhdGEtPmlycSk7DQorCXN0cnVjdCBtY19wY2llICpwY2llOw0KKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KKwl1MzIgbWFzaywgdmFsOw0KKw0KKwlwY2llID0gaXJxX2Rlc2NfZ2V0X2No aXBfZGF0YShkZXNjKTsNCisJbWFzayA9IFBDSUVfTE9DQUxfSU5UX0VOQUJMRTsNCisJcmF3X3Nw aW5fbG9ja19pcnFzYXZlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KKwl2YWwgPSBy ZWFkbChwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1BU0tfTE9DQUwpOw0KKwl2YWwgfD0g bWFzazsNCisJd3JpdGVsKHZhbCwgcGNpZS0+YnJpZGdlX2Jhc2VfYWRkciArIE1DX0lNQVNLX0xP Q0FMKTsNCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhfbWFza19sb2Nr LCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWNfaW50eF9pcnFfY2hp cCA9IHsNCisJLm5hbWUgPSAibWljcm9jaGlwX3BjaWU6aW50eCIsDQorCS5pcnFfZW5hYmxlID0g bWNfdW5tYXNrX2ludHhfaXJxLA0KKwkuaXJxX2Rpc2FibGUgPSBtY19tYXNrX2ludHhfaXJxLA0K KwkuaXJxX21hc2sgPSBtY19tYXNrX2ludHhfaXJxLA0KKwkuaXJxX3VubWFzayA9IG1jX3VubWFz a19pbnR4X2lycSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbWNfcGNpZV9pbnR4X21hcChzdHJ1Y3Qg aXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLA0KKwkJCSAgICBpcnFfaHdfbnVt YmVyX3QgaHdpcnEpDQorew0KKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmbWNfaW50 eF9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpOw0KKwlpcnFfc2V0X2NoaXBfZGF0YShpcnEs IGRvbWFpbi0+aG9zdF9kYXRhKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaW50eF9kb21haW5fb3BzID0gew0KKwkubWFwID0gbWNf cGNpZV9pbnR4X21hcCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWNfbXNpX2ly cV9jaGlwID0gew0KKwkubmFtZSA9ICJNaWNyb2NoaXAgUENJZSBNU0kiLA0KKwkuaXJxX21hc2sg PSBwY2lfbXNpX21hc2tfaXJxLA0KKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwN Cit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvIG1jX21zaV9kb21haW5faW5m byA9IHsNCisJLmZsYWdzID0gKE1TSV9GTEFHX1VTRV9ERUZfRE9NX09QUyB8IE1TSV9GTEFHX1VT RV9ERUZfQ0hJUF9PUFMgfA0KKwkJICBNU0lfRkxBR19QQ0lfTVNJWCksDQorCS5jaGlwID0gJm1j X21zaV9pcnFfY2hpcCwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIG1jX2NvbXBvc2VfbXNpX21zZyhz dHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpDQorew0KKwlzdHJ1Y3Qg bWNfcGNpZSAqcGNpZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlwaHlz X2FkZHJfdCBhZGRyID0gcGNpZS0+bXNpLnZlY3Rvcl9waHk7DQorDQorCW1zZy0+YWRkcmVzc19s byA9IGxvd2VyXzMyX2JpdHMoYWRkcik7DQorCW1zZy0+YWRkcmVzc19oaSA9IHVwcGVyXzMyX2Jp dHMoYWRkcik7DQorCW1zZy0+ZGF0YSA9IGRhdGEtPmh3aXJxOw0KKw0KKwlkZXZfZGJnKCZwY2ll LT5wZGV2LT5kZXYsICJtc2kjJXggYWRkcmVzc19oaSAlI3ggYWRkcmVzc19sbyAlI3hcbiIsDQor CQkoaW50KWRhdGEtPmh3aXJxLCBtc2ctPmFkZHJlc3NfaGksIG1zZy0+YWRkcmVzc19sbyk7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbWNfbXNpX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmly cV9kYXRhLA0KKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3Jj ZSkNCit7DQorCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGlycV9jaGlw IG1jX21zaV9ib3R0b21faXJxX2NoaXAgPSB7DQorCS5uYW1lID0gIk1pY3JvY2hpcCBNU0kiLA0K KwkuaXJxX2NvbXBvc2VfbXNpX21zZyA9IG1jX2NvbXBvc2VfbXNpX21zZywNCisJLmlycV9zZXRf YWZmaW5pdHkgPSBtY19tc2lfc2V0X2FmZmluaXR5LA0KK307DQorDQorc3RhdGljIGludCBtY19p cnFfbXNpX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KKwkJCQkgICB1 bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsDQorCQkJCSAgIHZvaWQgKmFy Z3MpDQorew0KKwlzdHJ1Y3QgbWNfcGNpZSAqcGNpZSA9IGRvbWFpbi0+aG9zdF9kYXRhOw0KKwlz dHJ1Y3QgbWNfbXNpICptc2kgPSAmcGNpZS0+bXNpOw0KKwl1bnNpZ25lZCBsb25nIGJpdDsNCisJ dTMyIHJlZzsNCisNCisJV0FSTl9PTihucl9pcnFzICE9IDEpOw0KKwltdXRleF9sb2NrKCZtc2kt PmxvY2spOw0KKwliaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1zaS0+dXNlZCwgbXNpLT5udW1f dmVjdG9ycyk7DQorCWlmIChiaXQgPj0gbXNpLT5udW1fdmVjdG9ycykgew0KKwkJbXV0ZXhfdW5s b2NrKCZtc2ktPmxvY2spOw0KKwkJcmV0dXJuIC1FTk9TUEM7DQorCX0NCisNCisJc2V0X2JpdChi aXQsIG1zaS0+dXNlZCk7DQorCW11dGV4X3VubG9jaygmbXNpLT5sb2NrKTsNCisNCisJaXJxX2Rv bWFpbl9zZXRfaW5mbyhkb21haW4sIHZpcnEsIGJpdCwgJm1jX21zaV9ib3R0b21faXJxX2NoaXAs DQorCQkJICAgIGRvbWFpbi0+aG9zdF9kYXRhLCBoYW5kbGVfc2ltcGxlX2lycSwgTlVMTCwgTlVM TCk7DQorDQorCS8qIEVuYWJsZSBNU0kgaW50ZXJydXB0cyAqLw0KKwlyZWcgPSByZWFkbChwY2ll LT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1BU0tfTE9DQUwpOw0KKwlyZWcgfD0gUENJRV9FTkFC TEVfTVNJOw0KKwl3cml0ZWwocmVnLCBwY2llLT5icmlkZ2VfYmFzZV9hZGRyICsgTUNfSU1BU0tf TE9DQUwpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbWNfaXJxX21zaV9k b21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KKwkJCQkgICB1bnNpZ25lZCBp bnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpDQorew0KKwlzdHJ1Y3QgaXJxX2RhdGEgKmQg PSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShkb21haW4sIHZpcnEpOw0KKwlzdHJ1Y3QgbWNfcGNp ZSAqcGNpZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOw0KKwlzdHJ1Y3QgbWNfbXNp ICptc2kgPSAmcGNpZS0+bXNpOw0KKw0KKwltdXRleF9sb2NrKCZtc2ktPmxvY2spOw0KKw0KKwlp ZiAodGVzdF9iaXQoZC0+aHdpcnEsIG1zaS0+dXNlZCkpDQorCQlfX2NsZWFyX2JpdChkLT5od2ly cSwgbXNpLT51c2VkKTsNCisJZWxzZQ0KKwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAidHJ5 aW5nIHRvIGZyZWUgdW51c2VkIE1TSSVsdVxuIiwNCisJCQlkLT5od2lycSk7DQorDQorCW11dGV4 X3VubG9jaygmbXNpLT5sb2NrKTsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9t YWluX29wcyBtc2lfZG9tYWluX29wcyA9IHsNCisJLmFsbG9jCT0gbWNfaXJxX21zaV9kb21haW5f YWxsb2MsDQorCS5mcmVlCT0gbWNfaXJxX21zaV9kb21haW5fZnJlZSwNCit9Ow0KKw0KK3N0YXRp YyBpbnQgbWNfYWxsb2NhdGVfbXNpX2RvbWFpbnMoc3RydWN0IG1jX3BjaWUgKnBjaWUpDQorew0K KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgZndub2Rl X2hhbmRsZSAqZndub2RlID0gb2Zfbm9kZV90b19md25vZGUoZGV2LT5vZl9ub2RlKTsNCisJc3Ry dWN0IG1jX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCisNCisJbXV0ZXhfaW5pdCgmcGNpZS0+bXNp LmxvY2spOw0KKw0KKwltc2ktPmRldl9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoTlVM TCwgbXNpLT5udW1fdmVjdG9ycywNCisJCQkJCQkmbXNpX2RvbWFpbl9vcHMsIHBjaWUpOw0KKwlp ZiAoIW1zaS0+ZGV2X2RvbWFpbikgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRl IElSUSBkb21haW5cbiIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJbXNpLT5tc2lf ZG9tYWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUsDQorCQkJCQkJICAgICZt Y19tc2lfZG9tYWluX2luZm8sDQorCQkJCQkJICAgIG1zaS0+ZGV2X2RvbWFpbik7DQorCWlmICgh bXNpLT5tc2lfZG9tYWluKSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgTVNJ IGRvbWFpblxuIik7DQorCQlpcnFfZG9tYWluX3JlbW92ZShtc2ktPmRldl9kb21haW4pOw0KKwkJ cmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg bWNfcGNpZV9pbml0X2lycV9kb21haW5zKHN0cnVjdCBtY19wY2llICpwY2llKQ0KK3sNCisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCisJc3RydWN0IGRldmljZV9ub2Rl ICpub2RlID0gZGV2LT5vZl9ub2RlOw0KKw0KKwlwY2llLT5pbnR4X2RvbWFpbiA9IGlycV9kb21h aW5fYWRkX2xpbmVhcihub2RlLCBQQ0lfTlVNX0lOVFgsDQorCQkJCQkJICAmaW50eF9kb21haW5f b3BzLCBwY2llKTsNCisJaWYgKCFwY2llLT5pbnR4X2RvbWFpbikgew0KKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZ2V0IGFuIElOVHggSVJRIGRvbWFpblxuIik7DQorCQlyZXR1cm4gLUVOT01F TTsNCisJfQ0KKwlyYXdfc3Bpbl9sb2NrX2luaXQoJnBjaWUtPmludHhfbWFza19sb2NrKTsNCisN CisJcmV0dXJuIG1jX2FsbG9jYXRlX21zaV9kb21haW5zKHBjaWUpOw0KK30NCisNCitzdGF0aWMg dm9pZCBtY19wY2lfdW5tYXBfY2ZnKHZvaWQgKnB0cikNCit7DQorCXBjaV9lY2FtX2ZyZWUoKHN0 cnVjdCBwY2lfY29uZmlnX3dpbmRvdyAqKXB0cik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWNfcGNp ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IG1jX3Bj aWUgKnBjaWU7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZTsNCisJc3RydWN0IHBj aV9jb25maWdfd2luZG93ICpjZmc7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7 DQorCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqd2luOw0KKwlzdHJ1Y3QgcmVzb3VyY2UgKmJ1c19y YW5nZSA9IE5VTEw7DQorCXN0cnVjdCByZXNvdXJjZSAqY2ZncmVzOw0KKwlpbnQgcmV0Ow0KKwly ZXNvdXJjZV9zaXplX3Qgc2l6ZTsNCisJdTMyIGluZGV4Ow0KKwl1MzIgYXRyX3N6Ow0KKwl1MzIg dmFsOw0KKw0KKwlpZiAoIWRldi0+b2Zfbm9kZSkNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwkv KiBBbGxvY2F0ZSB0aGUgUENJZSBwb3J0ICovDQorCWJyaWRnZSA9IGRldm1fcGNpX2FsbG9jX2hv c3RfYnJpZGdlKGRldiwgc2l6ZW9mKCpwY2llKSk7DQorCWlmICghYnJpZGdlKQ0KKwkJcmV0dXJu IC1FTk9NRU07DQorDQorCXBjaWUgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihicmlkZ2UpOw0KKw0K KwlwY2llLT5wZGV2ID0gcGRldjsNCisNCisJY2ZncmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCisJcGNpZS0+Y2ZnaHdfYmFzZV9hZGRyID0gY2Zn cmVzLT5zdGFydDsNCisJc2l6ZSA9IHJlc291cmNlX3NpemUoY2ZncmVzKTsNCisJcGNpZS0+Y2Zn X3NpemUgPSBzaXplOw0KKwlwY2llLT5hdHJfc3ogPSBmaW5kX2ZpcnN0X2JpdCgoY29uc3QgdW5z aWduZWQgbG9uZyAqKSZzaXplLCA2NCkgLSAxOw0KKw0KKwlyZXQgPSBtY19wY2llX3BhcnNlX2R0 KHBjaWUpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgInBhcnNpbmcgZGV2aWNldHJl ZSBmYWlsZWQsIHJldCAleFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJaXJx X3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+aXJxLCBtY19wY2llX2lzciwgcGNp ZSk7DQorDQorCXJldCA9IG1jX2hvc3RfaW5pdChwY2llKTsNCisJaWYgKHJldCkgew0KKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBob3N0XG4iKTsNCisJCXJldHVybiByZXQ7 DQorCX0NCisNCisJLyoNCisJICogQ29uZmlndXJlIGFsbCBpbmJvdW5kIGFuZCBvdXRib3VuZCB3 aW5kb3dzIGFuZCBwcmVwYXJlDQorCSAqIGZvciBjb25maWcgYWNjZXNzDQorCSAqLw0KKwlyZXQg PSBwY2lfcGFyc2VfcmVxdWVzdF9vZl9wY2lfcmFuZ2VzKGRldiwgJmJyaWRnZS0+d2luZG93cywN CisJCQkJCSAgICAgICZicmlkZ2UtPmRtYV9yYW5nZXMsICZidXNfcmFuZ2UpOw0KKwlpZiAocmV0 KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzZSBQQ0kgcmFuZ2VzXG4iKTsNCisJ CXJldHVybiByZXQ7DQorCX0NCisNCisJaW5kZXggPSAxOw0KKwlyZXNvdXJjZV9saXN0X2Zvcl9l YWNoX2VudHJ5KHdpbiwgJmJyaWRnZS0+d2luZG93cykgew0KKwkJaWYgKChyZXNvdXJjZV90eXBl KHdpbi0+cmVzKSAhPSBJT1JFU09VUkNFX01FTSkgJiYNCisJCSAgICAocmVzb3VyY2VfdHlwZSh3 aW4tPnJlcykgIT0gSU9SRVNPVVJDRV9JTykpDQorCQkJY29udGludWU7DQorDQorCQlzaXplID0g cmVzb3VyY2Vfc2l6ZSh3aW4tPnJlcyk7DQorCQlhdHJfc3ogPSBmaW5kX2ZpcnN0X2JpdCgoY29u c3QgdW5zaWduZWQgbG9uZyAqKSZzaXplLCA2NCkgLSAxOw0KKw0KKwkJLyoNCisJCSAqIENvbmZp Z3VyZSBBZGRyZXNzIFRyYW5zbGF0aW9uIFRhYmxlIGluZGV4IGZvciBQQ0kNCisJCSAqIG1lbSBz cGFjZQ0KKwkJICovDQorCQl3cml0ZWwoUENJRV9UWF9SWF9JTlRFUkZBQ0UsIHBjaWUtPmJyaWRn ZV9iYXNlX2FkZHIgKw0KKwkJICAgICAgIChpbmRleCAqIEFUVF9FTlRSWV9TSVpFKSArDQorCQkg ICAgICAgTUNfQVRSMF9BWEk0X1NMVjBfVFJTTF9QQVJBTSk7DQorDQorCQl2YWwgPSBsb3dlcl8z Ml9iaXRzKHdpbi0+cmVzLT5zdGFydCkgfA0KKwkJCQkgICAgKGF0cl9zeiA8PCBBVFJfU0laRV9T SElGVCkgfA0KKwkJCQkgICAgQVRSX0lNUExfRU5BQkxFOw0KKw0KKwkJd3JpdGVsKHZhbCwgcGNp ZS0+YnJpZGdlX2Jhc2VfYWRkciArDQorCQkgICAgICAgKGluZGV4ICogQVRUX0VOVFJZX1NJWkUp ICsNCisJCSAgICAgICBNQ19BVFIwX0FYSTRfU0xWMF9TUkNBRERSX1BBUkFNKTsNCisNCisJCXZh bCA9IHVwcGVyXzMyX2JpdHMod2luLT5yZXMtPnN0YXJ0KTsNCisJCXdyaXRlbCh2YWwsIHBjaWUt PmJyaWRnZV9iYXNlX2FkZHIgKyAoaW5kZXggKiBBVFRfRU5UUllfU0laRSkgKw0KKwkJCQlNQ19B VFIwX0FYSTRfU0xWMF9TUkNfQUREUik7DQorDQorCQl2YWwgPSBsb3dlcl8zMl9iaXRzKHdpbi0+ cmVzLT5zdGFydCAtIHdpbi0+b2Zmc2V0KTsNCisJCXdyaXRlbCh2YWwsIHBjaWUtPmJyaWRnZV9i YXNlX2FkZHIgKw0KKwkJICAgICAgIChpbmRleCAqIEFUVF9FTlRSWV9TSVpFKSArDQorCQkgICAg ICAgTUNfQVRSMF9BWEk0X1NMVjBfVFJTTF9BRERSX0xTQik7DQorDQorCQl2YWwgPSB1cHBlcl8z Ml9iaXRzKHdpbi0+cmVzLT5zdGFydCk7DQorCQl3cml0ZWwodmFsLCBwY2llLT5icmlkZ2VfYmFz ZV9hZGRyICsgKGluZGV4ICogQVRUX0VOVFJZX1NJWkUpICsNCisJCQkJTUNfQVRSMF9BWEk0X1NM VjBfVFJTTF9BRERSX1VEVyk7DQorDQorCQlpbmRleCsrOw0KKwl9DQorDQorCXJldCA9IG1jX3Bj aWVfaW5pdF9pcnFfZG9tYWlucyhwY2llKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgY3JlYXRpbmcgSVJRIGRvbWFpbnNcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwkvKiBQYXJzZSBhbmQgbWFwIG91ciBDb25maWd1cmF0aW9uIFNwYWNlIHdpbmRvd3MgKi8N CisJY2ZnID0gcGNpX2VjYW1fY3JlYXRlKGRldiwgY2ZncmVzLCBidXNfcmFuZ2UsICZwY2lfZ2Vu ZXJpY19lY2FtX29wcyk7DQorCWlmIChJU19FUlIoY2ZnKSkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgY3JlYXRpbmcgQ29uZmlndXJhdGlvbiBTcGFjZVxuIik7DQorCQlyZXR1cm4gUFRSX0VS UihjZmcpOw0KKwl9DQorDQorCXBjaWUtPmNmZ19iYXNlX2FkZHIgPSBjZmctPndpbjsNCisNCisJ dmFsID0gY2ZnX3JlYWRsKHBjaWUsIFBDSV9QUklNQVJZX0JVUyk7DQorCXZhbCAmPSAweGZmMDAw MDAwOw0KKwl2YWwgfD0gMHgwMGZmMDEwMDsNCisJY2ZnX3dyaXRlbChwY2llLCB2YWwsIFBDSV9Q UklNQVJZX0JVUyk7DQorDQorCS8qIEhhcmR3YXJlIGRvZXNuJ3Qgc2V0dXAgTVNJIGJ5IGRlZmF1 bHQgKi8NCisJbWNfcGNpZV9lbmFibGVfbXNpKHBjaWUpOw0KKw0KKwl2YWwgPSBQQ0lFX0VOQUJM RV9NU0kgfCBQQ0lFX0xPQ0FMX0lOVF9FTkFCTEU7DQorCXdyaXRlbCh2YWwsIHBjaWUtPmJyaWRn ZV9iYXNlX2FkZHIgKyBNQ19JTUFTS19MT0NBTCk7DQorDQorCXJldCA9IGRldm1fYWRkX2FjdGlv bl9vcl9yZXNldChkZXYsIG1jX3BjaV91bm1hcF9jZmcsIGNmZyk7DQorCWlmIChyZXQpDQorCQly ZXR1cm4gcmV0Ow0KKw0KKwkvKiBJbml0aWFsaXplIGJyaWRnZSAqLw0KKwlicmlkZ2UtPmRldi5w YXJlbnQgPSBkZXY7DQorCWJyaWRnZS0+c3lzZGF0YSA9IGNmZzsNCisJYnJpZGdlLT5idXNuciA9 IGNmZy0+YnVzci5zdGFydDsNCisJYnJpZGdlLT5vcHMgPSAmcGNpX2dlbmVyaWNfZWNhbV9vcHMu cGNpX29wczsNCisJYnJpZGdlLT5tYXBfaXJxID0gb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNpOw0K KwlicmlkZ2UtPnN3aXp6bGVfaXJxID0gcGNpX2NvbW1vbl9zd2l6emxlOw0KKw0KKwlyZXR1cm4g cGNpX2hvc3RfcHJvYmUoYnJpZGdlKTsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbWNfcGNpZV9vZl9tYXRjaFtdID0gew0KKwl7IC5jb21wYXRpYmxlID0gIm1pY3Jv Y2hpcCxwZi1heGktcGNpZS1ob3N0LTEuMCIgfSwNCisJe30sDQorfTsNCisNCitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBtY19wY2llX29mX21hdGNoKQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG1jX3BjaWVfZHJpdmVyID0gew0KKwkucHJvYmUgPSBtY19wY2llX3Byb2JlLA0K KwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAibWljcm9jaGlwLXBjaWUiLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gbWNfcGNpZV9vZl9tYXRjaCwNCisJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1 ZSwNCisJfSwNCit9Ow0KKw0KK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKG1jX3BjaWVfZHJpdmVy KTsNCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJN aWNyb2NoaXAgUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7DQorTU9EVUxFX0FVVEhPUigi RGFpcmUgTWNOYW1hcmEgPGRhaXJlLm1jbmFtYXJhQG1pY3JvY2hpcC5jb20+Iik7DQotLSANCjIu MTcuMQ0KDQo=