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=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham 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 EC7F5C433E6 for ; Tue, 26 Jan 2021 11:49:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD9262311A for ; Tue, 26 Jan 2021 11:49:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392213AbhAZLsy (ORCPT ); Tue, 26 Jan 2021 06:48:54 -0500 Received: from Mailgw01.mediatek.com ([1.203.163.78]:49634 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2405424AbhAZLoN (ORCPT ); Tue, 26 Jan 2021 06:44:13 -0500 X-UUID: fc01bfcfc88b4445842eed8382579e89-20210126 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=rMaqsNRaSBNq3CC8xfFhQT37vqzWxfNL4jDING88anQ=; b=uE3mAi+M2ao3L9/GQ5zEKsRUe1GGgmXW5BYdlhYeBbQqGNCoTGwz8Kawdj+v3gDJctdvml0aHEuTIOxS/HvNIw919O48w72q0tmFx7srhkr4ohpIsLPSmzZHljVo2y1fAU+JkDW928VG2hYsY87fykhZuX7fqGdwhfAwlnsVkjo=; X-UUID: fc01bfcfc88b4445842eed8382579e89-20210126 Received: from mtkcas35.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1840643641; Tue, 26 Jan 2021 19:43:01 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 26 Jan 2021 19:42:54 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 26 Jan 2021 19:42:54 +0800 Message-ID: <1611661374.14672.14.camel@mhfsdcap03> Subject: Re: [v7,3/7] PCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192 From: Jianjun Wang To: Rob Herring CC: , , Lorenzo Pieralisi , , , , , , , , Matthias Brugger , "Sj Huang" , Ryder Lee , , Philipp Zabel , , Bjorn Helgaas , , Date: Tue, 26 Jan 2021 19:42:54 +0800 In-Reply-To: <20210125195454.GA831088@robh.at.kernel.org> References: <20210113114001.5804-1-jianjun.wang@mediatek.com> <20210113114001.5804-4-jianjun.wang@mediatek.com> <20210125195454.GA831088@robh.at.kernel.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: E0257927E6D099B726A961595941808FD19AFFAD2F944F6B1425C3E1CBEC1DEE2000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org T24gTW9uLCAyMDIxLTAxLTI1IGF0IDEzOjU0IC0wNjAwLCBSb2IgSGVycmluZyB3cm90ZToNCj4g T24gV2VkLCBKYW4gMTMsIDIwMjEgYXQgMDc6Mzk6NTdQTSArMDgwMCwgSmlhbmp1biBXYW5nIHdy b3RlOg0KPiA+IE1lZGlhVGVrJ3MgUENJZSBob3N0IGNvbnRyb2xsZXIgaGFzIHRocmVlIGdlbmVy YXRpb24gSFdzLCB0aGUgbmV3DQo+ID4gZ2VuZXJhdGlvbiBIVyBpcyBhbiBpbmRpdmlkdWFsIGJy aWRnZSwgaXQgc3VwcG9ydHMgR2VuMyBzcGVlZCBhbmQNCj4gPiBjb21wYXRpYmxlIHdpdGggR2Vu MiwgR2VuMSBzcGVlZC4NCj4gPiANCj4gPiBBZGQgc3VwcG9ydCBmb3IgbmV3IEdlbjMgY29udHJv bGxlciB3aGljaCBjYW4gYmUgZm91bmQgb24gTVQ4MTkyLg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYt Ynk6IEppYW5qdW4gV2FuZyA8amlhbmp1bi53YW5nQG1lZGlhdGVrLmNvbT4NCj4gPiBBY2tlZC1i eTogUnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2 ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgICAgICAgICAgICAgIHwgIDEzICsNCj4gPiAgZHJp dmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGRy aXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMgfCA0NjMgKysrKysrKysr KysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA0NzcgaW5zZXJ0aW9ucygrKQ0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVr LWdlbjMuYw0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tj b25maWcgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcNCj4gPiBpbmRleCA2NGUyZjVl Mzc5YWEuLmIyNDJiMTcwMjViMyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9s bGVyL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcNCj4g PiBAQCAtMjQyLDYgKzI0MiwxOSBAQCBjb25maWcgUENJRV9NRURJQVRFSw0KPiA+ICAJICBTYXkg WSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQ0llIGNvbnRyb2xsZXIgc3VwcG9ydCBvbg0K PiA+ICAJICBNZWRpYVRlayBTb0NzLg0KPiA+ICANCj4gPiArY29uZmlnIFBDSUVfTUVESUFURUtf R0VOMw0KPiA+ICsJdHJpc3RhdGUgIk1lZGlhVGVrIEdlbjMgUENJZSBjb250cm9sbGVyIg0KPiA+ ICsJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVA0KPiA+ICsJZGVwZW5k cyBvbiBQQ0lfTVNJX0lSUV9ET01BSU4NCj4gPiArCWhlbHANCj4gPiArCSAgQWRkcyBzdXBwb3J0 IGZvciBQQ0llIEdlbjMgTUFDIGNvbnRyb2xsZXIgZm9yIE1lZGlhVGVrIFNvQ3MuDQo+ID4gKwkg IFRoaXMgUENJZSBjb250cm9sbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBHZW4zLCBHZW4yIGFuZCBH ZW4xIHNwZWVkLA0KPiA+ICsJICBhbmQgc3VwcG9ydCB1cCB0byAyNTYgTVNJIGludGVycnVwdCBu dW1iZXJzIGZvcg0KPiA+ICsJICBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KPiA+ICsNCj4gPiAr CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgR2VuMyBQQ0llIGNvbnRyb2xsZXIg c3VwcG9ydCBvbg0KPiA+ICsJICBNZWRpYVRlayBTb0NzLg0KPiA+ICsNCj4gPiAgY29uZmlnIFBD SUVfVEFOR09fU01QODc1OQ0KPiA+ICAJYm9vbCAiVGFuZ28gU01QODc1OSBQQ0llIGNvbnRyb2xs ZXIgKERBTkdFUk9VUykiDQo+ID4gIAlkZXBlbmRzIG9uIEFSQ0hfVEFOR08gJiYgUENJX01TSSAm JiBPRg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlIGIv ZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+IGluZGV4IDA0YzZlZGMyODVjNS4u ZGY1ZDc3ZDcyYTlkIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFr ZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4gQEAg LTI3LDYgKzI3LDcgQEAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVApICs9IHBjaWUtcm9ja2No aXAubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9FUCkgKz0gcGNpZS1yb2NrY2hp cC1lcC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0hPU1QpICs9IHBjaWUtcm9j a2NoaXAtaG9zdC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX01FRElBVEVLKSArPSBwY2llLW1l ZGlhdGVrLm8NCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUtfR0VOMykgKz0gcGNpZS1t ZWRpYXRlay1nZW4zLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfVEFOR09fU01QODc1OSkgKz0g cGNpZS10YW5nby5vDQo+ID4gIG9iai0kKENPTkZJR19WTUQpICs9IHZtZC5vDQo+ID4gIG9iai0k KENPTkZJR19QQ0lFX0JSQ01TVEIpICs9IHBjaWUtYnJjbXN0Yi5vDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMgYi9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmMwMGVhN2MxNjdkZQ0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5j DQo+ID4gQEAgLTAsMCArMSw0NjMgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogTWVkaWFUZWsgUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyLg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5j Lg0KPiA+ICsgKiBBdXRob3I6IEppYW5qdW4gV2FuZyA8amlhbmp1bi53YW5nQG1lZGlhdGVrLmNv bT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiANCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L29mX2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiANCj4gSSBkb24ndCB0aGluayB0aGVz ZSA0IGFyZSBuZWVkZWQuDQoNClllcywgSSB3aWxsIGRyb3AgdGhlc2UgaW4gdGhlIG5leHQgdmVy c2lvbi4NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9w bV9ydW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPg0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgIi4uL3BjaS5oIg0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX1NFVFRJTkdfUkVH CQkweDgwDQo+ID4gKyNkZWZpbmUgUENJRV9QQ0lfSURTXzEJCQkweDljDQo+ID4gKyNkZWZpbmUg UENJX0NMQVNTKGNsYXNzKQkJKGNsYXNzIDw8IDgpDQo+ID4gKyNkZWZpbmUgUENJRV9SQ19NT0RF CQkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHTlVNX1JFRwkJCTB4MTQwDQo+ ID4gKyNkZWZpbmUgUENJRV9DRkdfREVWRk4oZGV2Zm4pCQkoKGRldmZuKSAmIEdFTk1BU0soNywg MCkpDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdfQlVTKGJ1cykJCSgoKGJ1cykgPDwgOCkgJiBHRU5N QVNLKDE1LCA4KSkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19CWVRFX0VOKGJ5dGVzKQkJKCgoYnl0 ZXMpIDw8IDE2KSAmIEdFTk1BU0soMTksIDE2KSkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19GT1JD RV9CWVRFX0VOCQlCSVQoMjApDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdfT0ZGU0VUX0FERFIJCTB4 MTAwMA0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUihidXMsIGRldmZuKSBcDQo+ID4gKwko UENJRV9DRkdfQlVTKGJ1cykgfCBQQ0lFX0NGR19ERVZGTihkZXZmbikpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBDSUVfUlNUX0NUUkxfUkVHCQkweDE0OA0KPiA+ICsjZGVmaW5lIFBDSUVfTUFDX1JT VEIJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBQQ0lFX1BIWV9SU1RCCQkJQklUKDEpDQo+ID4gKyNk ZWZpbmUgUENJRV9CUkdfUlNUQgkJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIFBDSUVfUEVfUlNUQgkJ CUJJVCgzKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRVU19SRUcJCTB4MTUw DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTElOS19TVEFUVVNfUkVHCQkweDE1NA0KPiA+ICsj ZGVmaW5lIFBDSUVfUE9SVF9MSU5LVVAJCUJJVCg4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lF X1RSQU5TX1RBQkxFX0JBU0VfUkVHCTB4ODAwDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfU1JDX0FE RFJfTVNCX09GRlNFVAkweDQNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09G RlNFVAkweDgNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJfTVNCX09GRlNFVAkweGMN Cj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVAkweDEwDQo+ID4gKyNkZWZp bmUgUENJRV9BVFJfVExCX1NFVF9PRkZTRVQJCTB4MjANCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJ RV9NQVhfVFJBTlNfVEFCTEVTCQk4DQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfRU4JCQlCSVQoMCkN Cj4gPiArI2RlZmluZSBQQ0lFX0FUUl9TSVpFKHNpemUpIFwNCj4gPiArCSgoKCgoc2l6ZSkgLSAx KSA8PCAxKSAmIEdFTk1BU0soNiwgMSkpIHwgUENJRV9BVFJfRU4pDQo+ID4gKyNkZWZpbmUgUENJ RV9BVFJfSUQoaWQpCQkJKChpZCkgJiBHRU5NQVNLKDMsIDApKQ0KPiA+ICsjZGVmaW5lIFBDSUVf QVRSX1RZUEVfTUVNCQlQQ0lFX0FUUl9JRCgwKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQVRSX1RZUEVf SU8JCVBDSUVfQVRSX0lEKDEpDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJfVExQX1RZUEUodHlwZSkJ CSgoKHR5cGUpIDw8IDE2KSAmIEdFTk1BU0soMTgsIDE2KSkNCj4gPiArI2RlZmluZSBQQ0lFX0FU Ul9UTFBfVFlQRV9NRU0JCVBDSUVfQVRSX1RMUF9UWVBFKDApDQo+ID4gKyNkZWZpbmUgUENJRV9B VFJfVExQX1RZUEVfSU8JCVBDSUVfQVRSX1RMUF9UWVBFKDIpDQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogc3RydWN0IG10a19wY2llX3BvcnQgLSBQQ0llIHBvcnQgaW5mb3JtYXRpb24NCj4gPiAr ICogQGRldjogcG9pbnRlciB0byBQQ0llIGRldmljZQ0KPiA+ICsgKiBAYmFzZTogSU8gbWFwcGVk IHJlZ2lzdGVyIGJhc2UNCj4gPiArICogQHJlZ19iYXNlOiBQaHlzaWNhbCByZWdpc3RlciBiYXNl DQo+ID4gKyAqIEBtYWNfcmVzZXQ6IG1hYyByZXNldCBjb250cm9sDQo+ID4gKyAqIEBwaHlfcmVz ZXQ6IHBoeSByZXNldCBjb250cm9sDQo+ID4gKyAqIEBwaHk6IFBIWSBjb250cm9sbGVyIGJsb2Nr DQo+ID4gKyAqIEBjbGtzOiBQQ0llIGNsb2Nrcw0KPiA+ICsgKiBAbnVtX2Nsa3M6IFBDSWUgY2xv Y2tzIGNvdW50IGZvciB0aGlzIHBvcnQNCj4gPiArICovDQo+ID4gK3N0cnVjdCBtdGtfcGNpZV9w b3J0IHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArCXZvaWQgX19pb21lbSAqYmFz ZTsNCj4gPiArCXBoeXNfYWRkcl90IHJlZ19iYXNlOw0KPiA+ICsJc3RydWN0IHJlc2V0X2NvbnRy b2wgKm1hY19yZXNldDsNCj4gPiArCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlfcmVzZXQ7DQo+ ID4gKwlzdHJ1Y3QgcGh5ICpwaHk7DQo+ID4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsN Cj4gPiArCWludCBudW1fY2xrczsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBt dGtfcGNpZV9jb25maWdfdGxwX2hlYWRlcg0KPiA+ICsgKiBAYnVzOiBQQ0kgYnVzIHRvIHF1ZXJ5 DQo+ID4gKyAqIEBkZXZmbjogZGV2aWNlL2Z1bmN0aW9uIG51bWJlcg0KPiA+ICsgKiBAd2hlcmU6 IG9mZnNldCBpbiBjb25maWcgc3BhY2UNCj4gPiArICogQHNpemU6IGRhdGEgc2l6ZSBpbiBUTFAg aGVhZGVyDQo+ID4gKyAqDQo+ID4gKyAqIFNldCBieXRlIGVuYWJsZSBmaWVsZCBhbmQgZGV2aWNl IGluZm9ybWF0aW9uIGluIGNvbmZpZ3VyYXRpb24gVExQIGhlYWRlci4NCj4gPiArICovDQo+ID4g K3N0YXRpYyB2b2lkIG10a19wY2llX2NvbmZpZ190bHBfaGVhZGVyKHN0cnVjdCBwY2lfYnVzICpi dXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCj4gPiArCQkJCQlpbnQgd2hlcmUsIGludCBzaXplKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGJ1cy0+c3lzZGF0YTsN Cj4gPiArCWludCBieXRlczsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJYnl0ZXMgPSAo R0VOTUFTSyhzaXplIC0gMSwgMCkgJiAweGYpIDw8ICh3aGVyZSAmIDB4Myk7DQo+ID4gKw0KPiA+ ICsJdmFsID0gUENJRV9DRkdfRk9SQ0VfQllURV9FTiB8IFBDSUVfQ0ZHX0JZVEVfRU4oYnl0ZXMp IHwNCj4gPiArCSAgICAgIFBDSUVfQ0ZHX0hFQURFUihidXMtPm51bWJlciwgZGV2Zm4pOw0KPiA+ ICsNCj4gPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHTlVNX1JF Ryk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIF9faW9tZW0gKm10a19wY2llX21h cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLA0KPiA+ICsJCQkJ ICAgICAgaW50IHdoZXJlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9y dCA9IGJ1cy0+c3lzZGF0YTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcG9ydC0+YmFzZSArIFBDSUVf Q0ZHX09GRlNFVF9BRERSICsgd2hlcmU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXRrX3BjaWVfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRl dmZuLA0KPiA+ICsJCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ID4gK3sNCj4g PiArCW10a19wY2llX2NvbmZpZ190bHBfaGVhZGVyKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplKTsN Cj4gDQo+IFRoaXMgY2FuIG1vdmUgdG8gbXRrX3BjaWVfbWFwX2J1cy4gQW5kIGlmIHRoYXQncyB0 aGUgb25seSBjYWxsZXIsIHlvdSANCj4gbWlnaHQgYXMgd2VsbCBqdXN0IG1lcmdlIG10a19wY2ll X2NvbmZpZ190bHBfaGVhZGVyIGludG8gDQo+IG10a19wY2llX21hcF9idXMuDQoNClRoYW5rcyBm b3IgeW91ciByZXZpZXcsIG10a19wY2llX2NvbmZpZ190bHBfaGVhZGVyIG5lZWQgdGhlIFRMUCBk YXRhDQpzaXplIHRvIHNldCBpdHMgYnl0ZSBlbmFibGUgZmlsZWQsIGJ1dCB0aGUgbWFwX2J1cyBj YWxsYmFjayBkb3NlIG5vdA0KaGF2ZSB0aGlzIHZhbHVlLg0KPiANCj4gPiArDQo+ID4gKwlyZXR1 cm4gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMihidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFs KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9jb25maWdfd3JpdGUo c3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLA0KPiA+ICsJCQkJIGludCB3 aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpDQo+ID4gK3sNCj4gPiArCW10a19wY2llX2NvbmZpZ190 bHBfaGVhZGVyKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplKTsNCj4gPiArDQo+ID4gKwlpZiAoc2l6 ZSA8PSAyKQ0KPiA+ICsJCXZhbCA8PD0gKHdoZXJlICYgMHgzKSAqIDg7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZTMyKGJ1cywgZGV2Zm4sIHdoZXJlLCA0LCB2 YWwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9vcHMgbXRrX3BjaWVf b3BzID0gew0KPiA+ICsJLm1hcF9idXMgPSBtdGtfcGNpZV9tYXBfYnVzLA0KPiA+ICsJLnJlYWQg ID0gbXRrX3BjaWVfY29uZmlnX3JlYWQsDQo+ID4gKwkud3JpdGUgPSBtdGtfcGNpZV9jb25maWdf d3JpdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3NldF90cmFu c190YWJsZShzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwNCj4gPiArCQkJCSAgICByZXNvdXJj ZV9zaXplX3QgY3B1X2FkZHIsDQo+ID4gKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRy LA0KPiA+ICsJCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLA0KPiA+ICsJCQkJICAgIHVuc2ln bmVkIGxvbmcgdHlwZSwgaW50IG51bSkNCj4gPiArew0KPiA+ICsJdm9pZCBfX2lvbWVtICp0YWJs ZTsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJaWYgKG51bSA+PSBQQ0lFX01BWF9UUkFO U19UQUJMRVMpIHsNCj4gPiArCQlkZXZfZXJyKHBvcnQtPmRldiwgIm5vdCBlbm91Z2ggdHJhbnNs YXRlIHRhYmxlWyVkXSBmb3IgYWRkcjogJSNsbHgsIGxpbWl0ZWQgdG8gWyVkXVxuIiwNCj4gPiAr CQkJbnVtLCAodW5zaWduZWQgbG9uZyBsb25nKSBjcHVfYWRkciwNCj4gPiArCQkJUENJRV9NQVhf VFJBTlNfVEFCTEVTKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwl0YWJsZSA9IHBvcnQtPmJhc2UgKyBQQ0lFX1RSQU5TX1RBQkxFX0JBU0VfUkVHICsNCj4g PiArCQludW0gKiBQQ0lFX0FUUl9UTEJfU0VUX09GRlNFVDsNCj4gPiArDQo+ID4gKwl3cml0ZWxf cmVsYXhlZChsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSB8IFBDSUVfQVRSX1NJWkUoZmxzKHNpemUp IC0gMSksDQo+ID4gKwkJICAgICAgIHRhYmxlKTsNCj4gPiArCXdyaXRlbF9yZWxheGVkKHVwcGVy XzMyX2JpdHMoY3B1X2FkZHIpLA0KPiA+ICsJCSAgICAgICB0YWJsZSArIFBDSUVfQVRSX1NSQ19B RERSX01TQl9PRkZTRVQpOw0KPiA+ICsJd3JpdGVsX3JlbGF4ZWQobG93ZXJfMzJfYml0cyhwY2lf YWRkciksDQo+ID4gKwkJICAgICAgIHRhYmxlICsgUENJRV9BVFJfVFJTTF9BRERSX0xTQl9PRkZT RVQpOw0KPiA+ICsJd3JpdGVsX3JlbGF4ZWQodXBwZXJfMzJfYml0cyhwY2lfYWRkciksDQo+ID4g KwkJICAgICAgIHRhYmxlICsgUENJRV9BVFJfVFJTTF9BRERSX01TQl9PRkZTRVQpOw0KPiA+ICsN Cj4gPiArCWlmICh0eXBlID09IElPUkVTT1VSQ0VfSU8pDQo+ID4gKwkJdmFsID0gUENJRV9BVFJf VFlQRV9JTyB8IFBDSUVfQVRSX1RMUF9UWVBFX0lPOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXZhbCA9 IFBDSUVfQVRSX1RZUEVfTUVNIHwgUENJRV9BVFJfVExQX1RZUEVfTUVNOw0KPiA+ICsNCj4gPiAr CXdyaXRlbF9yZWxheGVkKHZhbCwgdGFibGUgKyBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVCk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXRrX3BjaWVfc3RhcnR1cF9wb3J0KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5Ow0KPiA+ICsJc3RydWN0IHBjaV9o b3N0X2JyaWRnZSAqaG9zdCA9IHBjaV9ob3N0X2JyaWRnZV9mcm9tX3ByaXYocG9ydCk7DQo+ID4g Kwl1bnNpZ25lZCBpbnQgdGFibGVfaW5kZXggPSAwOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCXUz MiB2YWw7DQo+ID4gKw0KPiA+ICsJLyogU2V0IGFzIFJDIG1vZGUgKi8NCj4gPiArCXZhbCA9IHJl YWRsX3JlbGF4ZWQocG9ydC0+YmFzZSArIFBDSUVfU0VUVElOR19SRUcpOw0KPiA+ICsJdmFsIHw9 IFBDSUVfUkNfTU9ERTsNCj4gPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFzZSArIFBD SUVfU0VUVElOR19SRUcpOw0KPiA+ICsNCj4gPiArCS8qIFNldCBjbGFzcyBjb2RlICovDQo+ID4g Kwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX1BDSV9JRFNfMSk7DQo+ID4g Kwl2YWwgJj0gfkdFTk1BU0soMzEsIDgpOw0KPiA+ICsJdmFsIHw9IFBDSV9DTEFTUyhQQ0lfQ0xB U1NfQlJJREdFX1BDSSA8PCA4KTsNCj4gPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFz ZSArIFBDSUVfUENJX0lEU18xKTsNCj4gPiArDQo+ID4gKwkvKiBBc3NlcnQgYWxsIHJlc2V0IHNp Z25hbHMgKi8NCj4gPiArCXZhbCA9IHJlYWRsX3JlbGF4ZWQocG9ydC0+YmFzZSArIFBDSUVfUlNU X0NUUkxfUkVHKTsNCj4gPiArCXZhbCB8PSBQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlfUlNUQiB8 IFBDSUVfQlJHX1JTVEIgfCBQQ0lFX1BFX1JTVEI7DQo+ID4gKwl3cml0ZWxfcmVsYXhlZCh2YWws IHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogRGUtYXNz ZXJ0IHJlc2V0IHNpZ25hbHMgKi8NCj4gPiArCXZhbCAmPSB+KFBDSUVfTUFDX1JTVEIgfCBQQ0lF X1BIWV9SU1RCIHwgUENJRV9CUkdfUlNUQik7DQo+ID4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBv cnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogRGVsYXkgMTAw bXMgdG8gd2FpdCB0aGUgcmVmZXJlbmNlIGNsb2NrcyBiZWNvbWUgc3RhYmxlICovDQo+ID4gKwlt c2xlZXAoMTAwKTsNCj4gPiArDQo+ID4gKwkvKiBEZS1hc3NlcnQgUEVSU1QjIHNpZ25hbCAqLw0K PiA+ICsJdmFsICY9IH5QQ0lFX1BFX1JTVEI7DQo+ID4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBv cnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgaWYg dGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQo+ID4gKwllcnIgPSByZWFkbF9wb2xsX3RpbWVvdXQo cG9ydC0+YmFzZSArIFBDSUVfTElOS19TVEFUVVNfUkVHLCB2YWwsDQo+ID4gKwkJCQkgISEodmFs ICYgUENJRV9QT1JUX0xJTktVUCksIDIwLA0KPiA+ICsJCQkJIDUwICogVVNFQ19QRVJfTVNFQyk7 DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNl ICsgUENJRV9MVFNTTV9TVEFUVVNfUkVHKTsNCj4gPiArCQlkZXZfZXJyKHBvcnQtPmRldiwgIlBD SWUgbGluayBkb3duLCBsdHNzbSByZWcgdmFsOiAlI3hcbiIsIHZhbCk7DQo+ID4gKwkJcmV0dXJu IGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBTZXQgUENJZSB0cmFuc2xhdGlvbiB3aW5k b3dzICovDQo+ID4gKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaG9zdC0+ d2luZG93cykgew0KPiA+ICsJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZW50cnktPnJlczsNCj4g PiArCQl1bnNpZ25lZCBsb25nIHR5cGUgPSByZXNvdXJjZV90eXBlKHJlcyk7DQo+ID4gKwkJcmVz b3VyY2Vfc2l6ZV90IGNwdV9hZGRyOw0KPiA+ICsJCXJlc291cmNlX3NpemVfdCBwY2lfYWRkcjsN Cj4gPiArCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsNCj4gPiArCQljb25zdCBjaGFyICpyYW5nZV90 eXBlOw0KPiA+ICsNCj4gPiArCQlpZiAodHlwZSA9PSBJT1JFU09VUkNFX0lPKSB7DQo+ID4gKwkJ CWNwdV9hZGRyID0gcGNpX3Bpb190b19hZGRyZXNzKHJlcy0+c3RhcnQpOw0KPiA+ICsJCQlyYW5n ZV90eXBlID0gIklPIjsNCj4gPiArCQl9IGVsc2UgaWYgKHR5cGUgPT0gSU9SRVNPVVJDRV9NRU0p IHsNCj4gPiArCQkJY3B1X2FkZHIgPSByZXMtPnN0YXJ0Ow0KPiA+ICsJCQlyYW5nZV90eXBlID0g Ik1FTSI7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJY29udGludWU7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQlwY2lfYWRkciA9IHJlcy0+c3RhcnQgLSBlbnRyeS0+b2Zmc2V0Ow0KPiA+ICsJ CXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7DQo+ID4gKwkJZXJyID0gbXRrX3BjaWVfc2V0X3Ry YW5zX3RhYmxlKHBvcnQsIGNwdV9hZGRyLCBwY2lfYWRkciwgc2l6ZSwNCj4gPiArCQkJCQkgICAg ICAgdHlwZSwgdGFibGVfaW5kZXgpOw0KPiA+ICsJCWlmIChlcnIpDQo+ID4gKwkJCXJldHVybiBl cnI7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcocG9ydC0+ZGV2LCAic2V0ICVzIHRyYW5zIHdpbmRv d1slZF06IGNwdV9hZGRyID0gJSNsbHgsIHBjaV9hZGRyID0gJSNsbHgsIHNpemUgPSAlI2xseFxu IiwNCj4gPiArCQkJcmFuZ2VfdHlwZSwgdGFibGVfaW5kZXgsICh1bnNpZ25lZCBsb25nIGxvbmcp IGNwdV9hZGRyLA0KPiA+ICsJCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfYWRkciwNCj4gPiAr CQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc2l6ZSk7DQo+ID4gKw0KPiA+ICsJCXRhYmxlX2luZGV4 Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbXRrX3BjaWVfY2xrX2luaXQoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQp DQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcG9ydC0+bnVtX2Nsa3MgPSBk ZXZtX2Nsa19idWxrX2dldF9hbGwocG9ydC0+ZGV2LCAmcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAo cG9ydC0+bnVtX2Nsa3MgPCAwKSB7DQo+ID4gKwkJZGV2X2Vycihwb3J0LT5kZXYsICJmYWlsZWQg dG8gZ2V0IFBDSWUgY2xvY2tcbiIpOw0KPiA+ICsJCXJldHVybiBwb3J0LT5udW1fY2xrczsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShwb3J0LT5u dW1fY2xrcywgcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycihw b3J0LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIFBDSWUgY2xvY2tzXG4iKTsNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IG10a19wY2llX3Bvd2VyX3VwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpw b3J0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQo+ID4g KwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCXBvcnQtPnBoeV9yZXNldCA9IGRldm1fcmVzZXRfY29u dHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKGRldiwgInBoeSIpOw0KPiA+ICsJaWYgKElTX0VS Uihwb3J0LT5waHlfcmVzZXQpKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHBvcnQtPnBoeV9yZXNl dCk7DQo+ID4gKw0KPiA+ICsJLyogUEhZIHBvd2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAq Lw0KPiA+ICsJcG9ydC0+cGh5ID0gZGV2bV9waHlfb3B0aW9uYWxfZ2V0KGRldiwgInBjaWUtcGh5 Iik7DQo+ID4gKwlpZiAoSVNfRVJSKHBvcnQtPnBoeSkpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIo cG9ydC0+cGh5KTsNCj4gPiArDQo+ID4gKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPnBo eV9yZXNldCk7DQo+ID4gKw0KPiA+ICsJZXJyID0gcGh5X2luaXQocG9ydC0+cGh5KTsNCj4gPiAr CWlmIChlcnIpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIFBD SWUgcGh5XG4iKTsNCj4gPiArCQlnb3RvIGVycl9waHlfaW5pdDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwllcnIgPSBwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsNCj4gPiArCWlmIChlcnIpIHsNCj4g PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwb3dlciBvbiBQQ0llIHBoeVxuIik7DQo+ID4g KwkJZ290byBlcnJfcGh5X29uOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPm1hY19yZXNl dCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKGRldiwgIm1hYyIp Ow0KPiA+ICsJaWYgKElTX0VSUihwb3J0LT5tYWNfcmVzZXQpKSB7DQo+ID4gKwkJZXJyID0gUFRS X0VSUihwb3J0LT5tYWNfcmVzZXQpOw0KPiA+ICsJCWdvdG8gZXJyX21hY19yc3Q7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmVzZXRfY29udHJvbF9kZWFzc2VydChwb3J0LT5tYWNfcmVzZXQpOw0K PiA+ICsNCj4gPiArCS8qIE1BQyBwb3dlciBvbiBhbmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVy IGNsb2NrcyAqLw0KPiA+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4gPiArCXBtX3J1bnRp bWVfZ2V0X3N5bmMoZGV2KTsNCj4gPiArDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9jbGtfaW5pdChw b3J0KTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImNsb2NrIGluaXQg ZmFpbGVkXG4iKTsNCj4gPiArCQlnb3RvIGVycl9jbGtfaW5pdDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9jbGtfaW5pdDoNCj4gPiArCXBtX3J1bnRp bWVfcHV0X3N5bmMoZGV2KTsNCj4gPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOw0KPiA+ICsJ cmVzZXRfY29udHJvbF9hc3NlcnQocG9ydC0+bWFjX3Jlc2V0KTsNCj4gPiArZXJyX21hY19yc3Q6 DQo+ID4gKwlwaHlfcG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQo+ID4gK2Vycl9waHlfb246DQo+ID4g KwlwaHlfZXhpdChwb3J0LT5waHkpOw0KPiA+ICtlcnJfcGh5X2luaXQ6DQo+ID4gKwlyZXNldF9j b250cm9sX2Fzc2VydChwb3J0LT5waHlfcmVzZXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlcnI7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX3Bvd2VyX2Rvd24oc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCWNsa19idWxrX2Rpc2FibGVf dW5wcmVwYXJlKHBvcnQtPm51bV9jbGtzLCBwb3J0LT5jbGtzKTsNCj4gPiArDQo+ID4gKwlwbV9y dW50aW1lX3B1dF9zeW5jKHBvcnQtPmRldik7DQo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUocG9y dC0+ZGV2KTsNCj4gPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7DQo+ ID4gKw0KPiA+ICsJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KPiA+ICsJcGh5X2V4aXQocG9y dC0+cGh5KTsNCj4gPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0dXAoc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQt PmRldjsNCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsNCj4gPiArCXN0cnVjdCByZXNvdXJjZSAqcmVnczsNCj4gPiArCWludCBlcnI7 DQo+ID4gKw0KPiA+ICsJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwg SU9SRVNPVVJDRV9NRU0sICJwY2llLW1hYyIpOw0KPiA+ICsJcG9ydC0+YmFzZSA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOw0KPiANCj4gVXNlIGRldm1fcGxhdGZvcm1faW9yZW1h cF9yZXNvdXJjZV9ieW5hbWUoKQ0KDQpUaGUgcmVncyB3aWxsIGJlIG5lZWRlZCB0byBnZXQgdGhl IHBoeXNpY2FsIGFkZHJlc3Mgb2YgUENJZSByZWdpc3RlciwgaXQNCndpbGwgYmUgdXNlZCB0byBj b25maWd1cmUgdGhlIGNhcHR1cmUgYWRkcmVzcyBvZiBNU0kuDQo+IA0KPiA+ICsJaWYgKElTX0VS Uihwb3J0LT5iYXNlKSkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdp c3RlciBiYXNlXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihwb3J0LT5iYXNlKTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlwb3J0LT5yZWdfYmFzZSA9IHJlZ3MtPnN0YXJ0Ow0KPiA+ICsNCj4g PiArCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgYmVmb3JlIHBvd2VyIHVw ICovDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9wb3dlcl91cChwb3J0KTsNCj4gPiArCWlmIChlcnIp DQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwkvKiBUcnkgbGluayB1cCAqLw0KPiA+ ICsJZXJyID0gbXRrX3BjaWVfc3RhcnR1cF9wb3J0KHBvcnQpOw0KPiA+ICsJaWYgKGVycikgew0K PiA+ICsJCWRldl9lcnIoZGV2LCAiUENJZSBzdGFydHVwIGZhaWxlZFxuIik7DQo+ID4gKwkJZ290 byBlcnJfc2V0dXA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oZGV2LCAiUENJZSBs aW5rIHVwIHN1Y2Nlc3MhXG4iKTsNCj4gDQo+IERvIHlvdSByZWFsbHkgbmVlZCB0aGlzLCB0aGVy ZSdzIGxvdHMgcHJpbnRlZCBieSBQQ0kgaW4gdGhlIHN1Y2Nlc3NmdWwgDQo+IGNhc2UuDQoNCkkg d2lsbCBkcm9wIHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbiwgdGhhbmtzIGZvciB5b3VyIHJldmll dy4NCg0KVGhhbmtzLg0KPiANCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vy cl9zZXR1cDoNCj4gPiArCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIGVycjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQ7 DQo+ID4gKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0Ow0KPiA+ICsJaW50IGVycjsNCj4g PiArDQo+ID4gKwlob3N0ID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9icmlkZ2UoZGV2LCBzaXplb2Yo KnBvcnQpKTsNCj4gPiArCWlmICghaG9zdCkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiAr DQo+ID4gKwlwb3J0ID0gcGNpX2hvc3RfYnJpZGdlX3ByaXYoaG9zdCk7DQo+ID4gKw0KPiA+ICsJ cG9ydC0+ZGV2ID0gZGV2Ow0KPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7 DQo+ID4gKw0KPiA+ICsJZXJyID0gbXRrX3BjaWVfc2V0dXAocG9ydCk7DQo+ID4gKwlpZiAoZXJy KQ0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJaG9zdC0+b3BzID0gJm10a19wY2ll X29wczsNCj4gPiArCWhvc3QtPnN5c2RhdGEgPSBwb3J0Ow0KPiA+ICsNCj4gPiArCWVyciA9IHBj aV9ob3N0X3Byb2JlKGhvc3QpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCW10a19wY2llX3Bv d2VyX2Rvd24ocG9ydCk7DQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IG10 a19wY2llX3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXN0 cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9zdF9icmlkZ2VfZnJvbV9wcml2KHBv cnQpOw0KPiA+ICsNCj4gPiArCXBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsNCj4gPiArCXBjaV9z dG9wX3Jvb3RfYnVzKGhvc3QtPmJ1cyk7DQo+ID4gKwlwY2lfcmVtb3ZlX3Jvb3RfYnVzKGhvc3Qt PmJ1cyk7DQo+ID4gKwlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsNCj4gPiArDQo+ID4gKwlt dGtfcGNpZV9wb3dlcl9kb3duKHBvcnQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfcGNpZV9v Zl9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxOTItcGNp ZSIgfSwNCj4gPiArCXt9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbXRrX3BjaWVfZHJpdmVyID0gew0KPiA+ICsJLnByb2JlID0gbXRrX3BjaWVf cHJvYmUsDQo+ID4gKwkucmVtb3ZlID0gbXRrX3BjaWVfcmVtb3ZlLA0KPiA+ICsJLmRyaXZlciA9 IHsNCj4gPiArCQkubmFtZSA9ICJtdGstcGNpZSIsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0g bXRrX3BjaWVfb2ZfbWF0Y2gsDQo+ID4gKwl9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihtdGtfcGNpZV9kcml2ZXIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7DQo+ID4gLS0gDQo+ID4gMi4yNS4xDQo+ID4gDQo+IA0KPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBMaW51eC1tZWRpYXRlayBtYWls aW5nIGxpc3QNCj4gTGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZw0KPiBodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVrDQoNCg==