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=-5.5 required=3.0 tests=BAYES_00, CHARSET_FARAWAY_HEADER,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 A1677C4743C for ; Fri, 4 Jun 2021 17:37:41 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 073C3613FA for ; Fri, 4 Jun 2021 17:37:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 073C3613FA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=rock-chips.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 32DB582F2D; Fri, 4 Jun 2021 19:37:12 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=rock-chips.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 61A3D80C98; Fri, 4 Jun 2021 15:42:27 +0200 (CEST) Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.70.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1422080C98 for ; Fri, 4 Jun 2021 15:42:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=rock-chips.com Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=jon.lin@rock-chips.com Received: from localhost (unknown [192.168.167.139]) by regular1.263xmail.com (Postfix) with ESMTP id ABBB81C4D; Fri, 4 Jun 2021 21:42:14 +0800 (CST) X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-CHECKED: 0 X-ADDR-CHECKED4: 1 X-ANTISPAM-LEVEL: 2 X-SKE-CHECKED: 1 X-ABS-CHECKED: 1 Received: from desktop-fvtcj9u (unknown [58.22.7.114]) by smtp.263.net (postfix) whith ESMTP id P23401T140628616795904S1622814132854664_; Fri, 04 Jun 2021 21:42:13 +0800 (CST) X-IP-DOMAINF: 1 X-UNIQUE-TAG: X-RL-SENDER: jon.lin@rock-chips.com X-SENDER: jon.lin@rock-chips.com X-LOGIN-NAME: jon.lin@rock-chips.com X-FST-TO: kever.yang@rock-chips.com X-RCPT-COUNT: 9 X-SENDER-IP: 58.22.7.114 X-ATTACHMENT-NUM: 2 X-System-Flag: 0 Date: Fri, 4 Jun 2021 21:42:18 +0800 From: =?GB2312?B?wda2pse/?= To: =?GB2312?B?0e6/rQ==?= , "Chris Morgan" Cc: u-boot , heiko.stuebner , vigneshr , jagan , sjg , "Chris Morgan" , =?GB2312?B?1dTSx7fl?= Subject: Re: Re: [RFC 0/5] rockchip_sfc: add support for Rockchip SFC References: <20210525214921.16606-1-macroalpha82@gmail.com>, <8416db10-aea9-7717-3121-81802c049509@rock-chips.com>, <20210601165430.GA56@wintermute.localdomain>, X-Priority: 3 X-Has-Attach: yes X-Mailer: Foxmail 7.2.18.106[cn] Mime-Version: 1.0 Message-ID: <20210604214218242796317@rock-chips.com> Content-Type: multipart/mixed; boundary="----=_001_NextPart781385088131_=----" X-Mailman-Approved-At: Fri, 04 Jun 2021 19:37:01 +0200 X-Content-Filtered-By: Mailman/MimeDel 2.1.34 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_001_NextPart781385088131_=---- Content-Type: text/plain; charset="GB2312" Content-Transfer-Encoding: base64 DQpIaSBDaHJpczoNCg0KSXQncyBteSBob25vciB0byByZWFkIGFib3V0IHNwaS1yb2NrY2hpcC1z ZmMgZHJpdmVyIGZyb20geW91LCBhbmQgeW91ciBjb2RlIGhhcyBtYWRlIGEgYmlnIGRpZmZlcmVu Y2UgdG8gbWUuDQoNClJlY2VudGx5LCB3ZSBoYXBwZW4gdG8gYmUgd2lsbGluZyB0byBzdWJtaXQg dGhlIHNwaS1tZW0gcmsgc2ZjIGRyaXZlcnMsIGFuZCB3ZSBoYXZlIHRyaWVkIHNvbWUgb2YgdGhl bQ0KaW4gdGhlIGludGVybmFsIHByb2Nlc3MuIENvbXBhcmVkIHdpdGggdGhlIFJLIGludGVybmFs IGNvZGUsIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHRob3VnaHRzIG9uIHlvdXIgY29kZToNCjEpIE9u bHkgc3VwcG9ydCBzcGktbm9yLCBub3Qgc3VwcG9ydCBzcGktbmFuZA0KMikgT25seSBzdXBwb3J0 IHJ4X2R1YWwsIHR4X3F1YWQsIG5vdCBzdXBwb3J0IHR4X2R1YWwsIHR4X3F1YWQNCjMpIFNvbWUg b2YgdGhlIGNvZGUgbWF5IGJlIGZ1cnRoZXIgc2ltcGxpZmllZCwgc3VjaCBhcyAicm9ja2NoaXBf c2ZjX3JlZ2lzdGVyX2FsbCIgDQo0KSBTb21lIG9mIHRoZSBsb2dpYyBtYXkgYmUgZnVydGhlciBz aW1wbGlmaWVkLCBzdWNoIGFzICJyb2NrY2hpcF9zZmNfaW5pdCIgDQo1KSBEb2Vzbid0IHN1cHBv cnQgU0ZDIHZlcjQgdmVyNSBhbHRob3VnaHQgd2l0Y2ggaXMgY29tcGF0aWJsZWQgd2l0aCBsb3dl ciB2ZXJzaW9uDQoNCkluIG9yZGVyIHRvIHN1cHBvcnQgYWxsIHRoZXNlIGZlYXR1cmVzLCBJIGFk anVzdCB0aGUgZHJpdmVycyBvbiB0aGUgYmFzaXMgb2YgeW91ciBjb2RlIHdpdGNoIGlzIGF0dGFj aCB0byB0aGVzZSBtYWlsLCB0aGVzZQ0KZHJpdmVycyBoYXZlIGJlZW4gdGVzdCBpbiBsaW51eCA1 LjEwIHJrMzU2OCBib2FyZCwgYW5kIEknbSBzdGlsbCBkb2luZyBtb3JlIHN0cmljdCB0ZXN0cy4N Cg0KU28gSSBzdWdnZXN0IHRoYXQgd2UgY29tcGxldGUgaXQgdG9nZXRoZXIsIG9yIHdlIG1heSBj b25zaWRlciB0cmFuc2ZlcnJpbmcgaXQgdG8gbWUgZm9yIHN1Ym1pc3Npb24gSWYgSSBoYXZlIHRo ZSBob25vci4NCg0KSSdtIHN0aWxsIHVuZmFtaWxpYXIgd2l0aCB0aGUgY29tbXVuaXR5IGN1bHR1 cmUuIEkgaG9wZSBJIGRpZG4ndCBvZmZlbmQgeW91LiBJZiBJIGhhdmUsIEknbGwgc2F5IHNvcnJ5 IGluIGFkdmFuY2UuIA0KQmVzdCB3aXNoZXMuDQoNCg0KDQpqb24ubGluQHJvY2stY2hpcHMuY29t DQogDQpGcm9tOiBLZXZlciBZYW5nDQpEYXRlOiAyMDIxLTA2LTAyIDA5OjI3DQpUbzogQ2hyaXMg TW9yZ2FuDQpDQzogdS1ib290OyBoZWlrby5zdHVlYm5lcjsgdmlnbmVzaHI7IGphZ2FuOyBzamc7 IENocmlzIE1vcmdhbjsg1dTSx7flOyDB1ramx78NClN1YmplY3Q6IFJlOiBbUkZDIDAvNV0gcm9j a2NoaXBfc2ZjOiBhZGQgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU0ZDDQpIaSBDaHJpcywNCiANCk9u IDIwMjEvNi8yIMnPzucxMjo1NCwgQ2hyaXMgTW9yZ2FuIHdyb3RlOg0KPiBPbiBUdWUsIEp1biAw MSwgMjAyMSBhdCAwODoyMjowOVBNICswODAwLCBLZXZlciBZYW5nIHdyb3RlOg0KPj4gQWRkIFlp ZmVuZyBmcm9tIHJvY2tjaGlwLg0KPj4NCj4+IEhpIENocmlzLA0KPj4NCj4+ICAgICAgRmlyc3Qg b2YgYWxsLCBJIHRoaW5rIHlvdSBzaG91bGQgcmVtYWluIHRoZSBvcmlnaW4gYXV0aG9yIGluZm8g aW4gdGhlDQo+PiBzaWduZWQtb2ZmLg0KPiBPa2F5LCBJIGNhbiBkbyB0aGF0LiBQbGVhc2Ugbm90 ZSB0aGF0IHNpbmNlIEkgc3VibWl0dGVkIHRoaXMgSSB3YXMNCj4gYXNrZWQgdG8gcmVkbyB0aGUg dXBzdHJlYW0gbGludXggcHJvcG9zZWQgZHJpdmVyIHRvIHVzZSB0aGUgc3BpLW1lbQ0KPiBmcmFt ZXdvcmsuIEkgdGhpbmsgZm9yIG5vdyBob25lc3RseSBJJ2QgbGlrZSB0byBhYmFuZG9uIHRoaXMg cGF0Y2gNCj4gYW5kIHJlc3VibWl0IGEgbGl0dGxlIGxhdGVyIHdpdGggb25lIHRoYXQgaXMgbW9y ZSBvciBsZXNzIHRoZSBzYW1lDQo+ICh1c2luZyB0aGUgc3BpLW1lbSBmcmFtZXdvcmspIGFzIHRo ZSBMaW51eCBkcml2ZXIuDQogDQogDQpUaGlzIHNvdW5kcyBiZXR0ZXIsIHRoZW4gd2UgY2FuIHdh aXQgZm9yIGRyaXZlciB3aXRoIG5ldyBmcmFtZXdvcmsuDQogDQpUaGFua3MsDQogDQotIEtldmVy DQogDQo+DQo+IGh0dHBzOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1tdGQv cGF0Y2gvMjAyMTA1MjgxNzAwMjAuMjYyMTktMi1tYWNyb2FscGhhODJAZ21haWwuY29tLw0KPg0K Pj4NCj4+IEhpIFlpZmVuZywNCj4+DQo+PiAgICAgIFBsZWFzZSBoZWxwIHRvIHJldmlldyB0aGlz IGRyaXZlci4NCj4+DQo+Pg0KPj4gVGhhbmtzLA0KPj4NCj4+IC0gS2V2ZXINCj4+DQo+PiBPbiAy MDIxLzUvMjYgyc/O5zU6NDksIENocmlzIE1vcmdhbiB3cm90ZToNCj4+PiBGcm9tOiBDaHJpcyBN b3JnYW4gPG1hY3JvbW9yZ2FuQGhvdG1haWwuY29tPg0KPj4+DQo+Pj4gUmVxdWVzdGluZyBjb21t ZW50cyBmb3IgYSBwcm9wb3NlZCBwYXRjaHNldCBmb3IgYWRkaW5nIHRoZSBSb2NrY2hpcA0KPj4+ IHNlcmlhbCBmbGFzaCBjb250cm9sbGVyIHRvIHUtYm9vdC4gVGhlIGdvYWwgb2YgdGhlc2UgcGF0 Y2hlcyBpcyB0bw0KPj4+IGVuYWJsZSBpdCBmb3IgdGhlIE9kcm9pZCBHbyBBZHZhbmNlIHNvIHRo YXQgaXQgbWF5IGV2ZW50dWFsbHkgYm9vdA0KPj4+IGV4Y2x1c2l2ZWx5IGZyb20gdGhlIFNGQyBv biBtYWlubGluZSBVLWJvb3QgKEkgaGF2ZSB0ZXN0ZWQgdGhpcyBhbmQNCj4+PiBpdCB3b3Jrcyku DQo+Pj4NCj4+PiBUaGUgc3BlY2lmaWMgaGVscCBJIG5lZWQgd2l0aCB0aGlzIHBhdGNoIGlzOg0K Pj4+DQo+Pj4gMSkgSSBkb24ndCBrbm93IHRoZSBiZXN0IHdheSB0byB1cHN0cmVhbSB0aGUgWFRY MjVGMTI4QiBmbGFzaCBjaGlwLg0KPj4+IFRoaXMgY2hpcCB1c2VzIGEgY29udGludWF0aW9uIGNv ZGUgZm9yIHRoZSBtYW51ZmFjdHVyZXIgSUQsIGhvd2V2ZXIgSQ0KPj4+IGNhbm5vdCBzZWVtIHRv IGZpbmQgYW55IHdheSB0byBhY3R1YWxseSByZWFkIHRoZSBjb250aW51YXRpb24gY29kZS4NCj4+ PiBUaGVyZSBpcyBhIHJpc2sgb2YgdGhpcyBkcml2ZXIsIHVzZWQgYXMtaXMsIHRvIGNvbGxpZGUg d2l0aCBhbm90aGVyDQo+Pj4gY2hpcCB3aGljaCBoYXMgdGhlIHNhbWUgbWFudWZhY3R1cmVyIElE IHdpdGggYSBkaWZmZXJlbnQgY29udGludWF0aW9uDQo+Pj4gY29kZS4NCj4+Pg0KPj4+IDIpIFRo ZSBSb2NrY2hpcCBTRkMgZHJpdmVyIGl0c2VsZiAoYXMgaXQgaXMgbW9zdGx5IGFzLWlzIGZyb20g dGhlIEJTUA0KPj4+IFUtQm9vdCBzb3VyY2VzKSBzdXBwb3J0cyBTUEkgTkFORCBhbmQgY2hpcHMg b2YgdmFyeWluZyBzaXplcywgYnV0IG15DQo+Pj4gaW1wbGVtZW50YXRpb24gb25seSBwZXJtaXRz IG1lIHRvIHRlc3Qgd2l0aCBhIHNpbmdsZSAxMjhNYiBmbGFzaCBjaGlwLg0KPj4+IFRoZSBkcml2 ZXIgaXRzZWxmIGRvZXMgc29tZSBjaGVja2luZyBvbiB0aGUgYml0bGVuIGluIHRoZSByb3V0aW5l DQo+Pj4gcm9ja2NoaXBfc2ZjX3hmZXIoKSB3aGljaCBpcyB3aGF0IGlzIGNhbGxlZCBmb3IgdGhl IGRtX3NwaV9vcHMueGZlci4NCj4+PiBJJ20gbm90IHN1cmUgaWYgdGhlcmUgaXMgYSBiZXR0ZXIg d2F5IHRvIGRvIHRoaXMuIEFkZGl0aW9uYWxseSwgSSBoYXZlDQo+Pj4gdG8gYml0LXNoaWZ0IHRo ZSBhZGRyZXNzIHdyaXR0ZW4gdG8gdGhlIFNGQyBhcyBJIHN1c3BlY3QgdGhlIHZhbHVlIGlzDQo+ Pj4gbWVhbnQgdG8gYmUgbGVmdCBqdXN0aWZpZWQsIGJ1dCBJIG5ldmVyIHRlc3RlZCBpdCBmdXJ0 aGVyLg0KPj4+DQo+Pj4gQWRkaXRpb25hbGx5LCBpdCBtaWdodCBiZSB3b3J0aCBtZW50aW9uaW5n IGJ1dCBJIG5vdGljZWQgdGhlIFJvY2tjaGlwDQo+Pj4gQlJPTSB3aWxsIG9ubHkgYm9vdCB0aGUg VFBML1NQTCBvZmYgb2YgdGhlIFNGQyBpZiBJIHdyaXRlIGl0IHRvIGFkZHJlc3MNCj4+PiAweDEw MDAwLiBUaGlzIGlzIG5vdCBkb2N1bWVudGVkIGFuZCBkaWZmZXJlbnQgdGhhbiB0aGUgYWRkcmVz cyBsb29rZWQNCj4+PiBhdCBmb3IgU0QgY2FyZCBib290aW5nICg1MTIgKiA2NCA9IDB4ODAwMCBm b3IgU0QgQ2FyZCBib290aW5nKS4gQWxzbywNCj4+PiBsaWtlIHRoZSBTRCBjYXJkIGRyaXZlciBJ IGNhbiBjb25maXJtIHRoYXQgaWYgRE1BIGlzIGVuYWJsZWQgYXQgdGhlIFNQTA0KPj4+IHN0YWdl IEEtVEYgc2VlbXMgdG8gZmFpbCBzaWxlbnRseSwgdGhlbiB3aGVuIExpbnV4IGxvYWRzIGl0IGhh bmdzLg0KPj4+IFRoZXJlIGlzIGFuIGlmZGVmIHRvIGZvcmNlIEZJRk8gbW9kZSBvbmx5IGluIHRo ZSBTUEwgc3RhZ2UuDQo+Pj4NCj4+PiBUZXN0ZWQ6IFJlYWQgKHdvcmtzKQ0KPj4+IFdyaXRlICh3 b3JrcyBpZiB5b3Ugd3JpdGUgdG8gYW4gZXJhc2VkIHNlY3RvcikNCj4+PiBFcmFzZSAod29ya3Mp DQo+Pj4gU1BMIFJlYWQgKHdvcmtzIGlmIHlvdSBlZGl0IHRoZSB1LWJvb3Qsc3BsLWJvb3Qtb3Jk ZXIpDQo+Pj4NCj4+PiBDaHJpcyBNb3JnYW4gKDUpOg0KPj4+ICAgICBzcGk6IHJvY2tjaGlwX3Nm YzogYWRkIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNGQw0KPj4+ICAgICByb2NrY2hpcDogcHgzMDog QWRkIHN1cHBvcnQgZm9yIHVzaW5nIFNGQw0KPj4+ICAgICByb2NrY2hpcDogcHgzMDogYWRkIHRo ZSBzZXJpYWwgZmxhc2ggY29udHJvbGxlcg0KPj4+ICAgICBtdGQ6IHNwaS1ub3ItaWRzOiBBZGQg WFRYIFhUMjVGMTI4Qg0KPj4+ICAgICByb2NrY2hpcDogcHgzMDogYWRkIHN1cHBvcnQgZm9yIFNG QyBmb3IgT2Ryb2lkIEdvIEFkdmFuY2UNCj4+Pg0KPj4+ICAgIGFyY2gvYXJtL2R0cy9weDMwLmR0 c2kgICAgICAgICAgICAgICAgICAgICB8ICAzOCArKw0KPj4+ICAgIGFyY2gvYXJtL2R0cy9yazMz MjYtb2Ryb2lkLWdvMi11LWJvb3QuZHRzaSB8ICAxMCArLQ0KPj4+ICAgIGFyY2gvYXJtL2R0cy9y azMzMjYtb2Ryb2lkLWdvMi5kdHMgICAgICAgICB8ICAyMiArDQo+Pj4gICAgYXJjaC9hcm0vbWFj aC1yb2NrY2hpcC9weDMwL3B4MzAuYyAgICAgICAgIHwgIDY0ICsrDQo+Pj4gICAgZHJpdmVycy9t dGQvc3BpL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4+PiAgICBkcml2ZXJz L210ZC9zcGkvc3BpLW5vci1pZHMuYyAgICAgICAgICAgICAgfCAgIDggKw0KPj4+ICAgIGRyaXZl cnMvc3BpL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArDQo+Pj4gICAgZHJp dmVycy9zcGkvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4+PiAgICBk cml2ZXJzL3NwaS9yb2NrY2hpcF9zZmMuYyAgICAgICAgICAgICAgICAgfCA2NTIgKysrKysrKysr KysrKysrKysrKysrDQo+Pj4gICAgOSBmaWxlcyBjaGFuZ2VkLCA5MjYgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQ0KPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NwaS9yb2Nr Y2hpcF9zZmMuYw0KPj4+DQo+Pg0KPg0KIA0KIA0KIA0K ------=_001_NextPart781385088131_=---- Content-Type: application/octet-stream; name="spi-rockchip-sfc_modified_20210604.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="spi-rockchip-sfc_modified_20210604.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQovKgogKiBSb2NrY2hpcCBT ZXJpYWwgRmxhc2ggQ29udHJvbGxlciBEcml2ZXIKICoKICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MjEsIFJvY2tjaGlwIEluYy4KICogQXV0aG9yOiBTaGF3biBMaW4gPHNoYXduLmxpbkByb2NrLWNo aXBzLmNvbT4KICoJICAgQ2hyaXMgTW9yZ2FuIDxtYWNyb2FscGhhODJAZ21haWwuY29tPgogKgkg ICBKb24gTGluIDxKb24ubGluQHJvY2stY2hpcHMuY29tPgogKi8KCiNpbmNsdWRlIDxsaW51eC9i aXRvcHMuaD4KI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgojaW5jbHVkZSA8bGludXgvY29tcGxldGlv bi5oPgojaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KI2luY2x1ZGUgPGxpbnV4L2lvcG9s bC5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5j bHVkZSA8bGludXgvb2YuaD4KI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgojaW5j bHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRl IDxsaW51eC9zcGkvc3BpLW1lbS5oPgoKLyogU3lzdGVtIGNvbnRyb2wgKi8KI2RlZmluZSBTRkNf Q1RSTAkJCTB4MAojZGVmaW5lICBTRkNfQ1RSTF9QSEFTRV9TRUxfTkVHRVRJVkUJQklUKDEpCiNk ZWZpbmUgIFNGQ19DVFJMX0NNRF9CSVRTX1NISUZUCTgKI2RlZmluZSAgU0ZDX0NUUkxfQUREUl9C SVRTX1NISUZUCTEwCiNkZWZpbmUgIFNGQ19DVFJMX0RBVEFfQklUU19TSElGVAkxMgoKLyogSW50 ZXJydXB0IG1hc2sgKi8KI2RlZmluZSBTRkNfSU1SCQkJCTB4NAojZGVmaW5lICBTRkNfSU1SX1JY X0ZVTEwJCUJJVCgwKQojZGVmaW5lICBTRkNfSU1SX1JYX1VGTE9XCQlCSVQoMSkKI2RlZmluZSAg U0ZDX0lNUl9UWF9PRkxPVwkJQklUKDIpCiNkZWZpbmUgIFNGQ19JTVJfVFhfRU1QVFkJCUJJVCgz KQojZGVmaW5lICBTRkNfSU1SX1RSQU5fRklOSVNICQlCSVQoNCkKI2RlZmluZSAgU0ZDX0lNUl9C VVNfRVJSCQlCSVQoNSkKI2RlZmluZSAgU0ZDX0lNUl9OU1BJX0VSUgkJQklUKDYpCiNkZWZpbmUg IFNGQ19JTVJfRE1BCQkJQklUKDcpCgovKiBJbnRlcnJ1cHQgY2xlYXIgKi8KI2RlZmluZSBTRkNf SUNMUgkJCTB4OAojZGVmaW5lICBTRkNfSUNMUl9SWF9GVUxMCQlCSVQoMCkKI2RlZmluZSAgU0ZD X0lDTFJfUlhfVUZMT1cJCUJJVCgxKQojZGVmaW5lICBTRkNfSUNMUl9UWF9PRkxPVwkJQklUKDIp CiNkZWZpbmUgIFNGQ19JQ0xSX1RYX0VNUFRZCQlCSVQoMykKI2RlZmluZSAgU0ZDX0lDTFJfVFJB Tl9GSU5JU0gJCUJJVCg0KQojZGVmaW5lICBTRkNfSUNMUl9CVVNfRVJSCQlCSVQoNSkKI2RlZmlu ZSAgU0ZDX0lDTFJfTlNQSV9FUlIJCUJJVCg2KQojZGVmaW5lICBTRkNfSUNMUl9ETUEJCQlCSVQo NykKCi8qIEZJRk8gdGhyZXNob2xkIGxldmVsICovCiNkZWZpbmUgU0ZDX0ZUTFIJCQkweGMKI2Rl ZmluZSAgU0ZDX0ZUTFJfVFhfU0hJRlQJCTAKI2RlZmluZSAgU0ZDX0ZUTFJfVFhfTUFTSwkJMHgx ZgojZGVmaW5lICBTRkNfRlRMUl9SWF9TSElGVAkJOAojZGVmaW5lICBTRkNfRlRMUl9SWF9NQVNL CQkweDFmCgovKiBSZXNldCBGU00gYW5kIEZJRk8gKi8KI2RlZmluZSBTRkNfUkNWUgkJCTB4MTAK I2RlZmluZSAgU0ZDX1JDVlJfUkVTRVQJCQlCSVQoMCkKCi8qIEVuaGFuY2VkIG1vZGUgKi8KI2Rl ZmluZSBTRkNfQVgJCQkJMHgxNAoKLyogQWRkcmVzcyBCaXQgbnVtYmVyICovCiNkZWZpbmUgU0ZD X0FCSVQJCQkweDE4CgovKiBJbnRlcnJ1cHQgc3RhdHVzICovCiNkZWZpbmUgU0ZDX0lTUgkJCQkw eDFjCiNkZWZpbmUgIFNGQ19JU1JfUlhfRlVMTF9TSElGVAkJQklUKDApCiNkZWZpbmUgIFNGQ19J U1JfUlhfVUZMT1dfU0hJRlQJCUJJVCgxKQojZGVmaW5lICBTRkNfSVNSX1RYX09GTE9XX1NISUZU CQlCSVQoMikKI2RlZmluZSAgU0ZDX0lTUl9UWF9FTVBUWV9TSElGVAkJQklUKDMpCiNkZWZpbmUg IFNGQ19JU1JfVFhfRklOSVNIX1NISUZUCUJJVCg0KQojZGVmaW5lICBTRkNfSVNSX0JVU19FUlJf U0hJRlQJCUJJVCg1KQojZGVmaW5lICBTRkNfSVNSX05TUElfRVJSX1NISUZUCQlCSVQoNikKI2Rl ZmluZSAgU0ZDX0lTUl9ETUFfU0hJRlQJCUJJVCg3KQoKLyogRklGTyBzdGF0dXMgKi8KI2RlZmlu ZSBTRkNfRlNSCQkJCTB4MjAKI2RlZmluZSAgU0ZDX0ZTUl9UWF9JU19GVUxMCQlCSVQoMCkKI2Rl ZmluZSAgU0ZDX0ZTUl9UWF9JU19FTVBUWQkJQklUKDEpCiNkZWZpbmUgIFNGQ19GU1JfUlhfSVNf RU1QVFkJCUJJVCgyKQojZGVmaW5lICBTRkNfRlNSX1JYX0lTX0ZVTEwJCUJJVCgzKQojZGVmaW5l ICBTRkNfRlNSX1RYTFZfTUFTSwkJR0VOTUFTSygxMiwgOCkKI2RlZmluZSAgU0ZDX0ZTUl9UWExW X1NISUZUCQk4CiNkZWZpbmUgIFNGQ19GU1JfUlhMVl9NQVNLCQlHRU5NQVNLKDIwLCAxNikKI2Rl ZmluZSAgU0ZDX0ZTUl9SWExWX1NISUZUCQkxNgoKLyogRlNNIHN0YXR1cyAqLwojZGVmaW5lIFNG Q19TUgkJCQkweDI0CiNkZWZpbmUgIFNGQ19TUl9JU19JRExFCQkJMHgwCiNkZWZpbmUgIFNGQ19T Ul9JU19CVVNZCQkJMHgxCgovKiBSYXcgaW50ZXJydXB0IHN0YXR1cyAqLwojZGVmaW5lIFNGQ19S SVNSCQkJMHgyOAojZGVmaW5lICBTRkNfUklTUl9SWF9GVUxMCQlCSVQoMCkKI2RlZmluZSAgU0ZD X1JJU1JfUlhfVU5ERVJGTE9XCQlCSVQoMSkKI2RlZmluZSAgU0ZDX1JJU1JfVFhfT1ZFUkZMT1cJ CUJJVCgyKQojZGVmaW5lICBTRkNfUklTUl9UWF9FTVBUWQkJQklUKDMpCiNkZWZpbmUgIFNGQ19S SVNSX1RSQU5fRklOSVNICQlCSVQoNCkKI2RlZmluZSAgU0ZDX1JJU1JfQlVTX0VSUgkJQklUKDUp CiNkZWZpbmUgIFNGQ19SSVNSX05TUElfRVJSCQlCSVQoNikKI2RlZmluZSAgU0ZDX1JJU1JfRE1B CQkJQklUKDcpCgovKiBWZXJzaW9uICovCiNkZWZpbmUgU0ZDX1ZFUgkJCQkweDJDCiNkZWZpbmUg IFNGQ19WRVJfMwkJCTB4MwojZGVmaW5lICBTRkNfVkVSXzQJCQkweDQKI2RlZmluZSAgU0ZDX1ZF Ul81CQkJMHg1CgovKiBNYXN0ZXIgdHJpZ2dlciAqLwojZGVmaW5lIFNGQ19ETUFfVFJJR0dFUgkJ CTB4ODAKCi8qIFNyYyBvciBEc3QgYWRkciBmb3IgbWFzdGVyICovCiNkZWZpbmUgU0ZDX0RNQV9B RERSCQkJMHg4NAoKLyogTGVuZ3RoIENvbnRyb2wgUmVnaXN0ZXIgRXh0ZW50aW9uIDMyR0IgKi8K I2RlZmluZSBTRkNfTEVOX0NUUkwJCQkweDg4CiNkZWZpbmUgU0ZDX0xFTl9DVFJMX1RSQl9TRUwJ CTEKI2RlZmluZSBTRkNfTEVOX0VYVAkJCTB4OEMKCi8qIENvbW1hbmQgKi8KI2RlZmluZSBTRkNf Q01ECQkJCTB4MTAwCiNkZWZpbmUgIFNGQ19DTURfSURYX1NISUZUCQkwCiNkZWZpbmUgIFNGQ19D TURfRFVNTVlfU0hJRlQJCTgKI2RlZmluZSAgU0ZDX0NNRF9ESVJfU0hJRlQJCTEyCiNkZWZpbmUg IFNGQ19DTURfRElSX1JECQkJMAojZGVmaW5lICBTRkNfQ01EX0RJUl9XUgkJCTEKI2RlZmluZSAg U0ZDX0NNRF9BRERSX1NISUZUCQkxNAojZGVmaW5lICBTRkNfQ01EX0FERFJfMEJJVFMJCTAKI2Rl ZmluZSAgU0ZDX0NNRF9BRERSXzI0QklUUwkJMQojZGVmaW5lICBTRkNfQ01EX0FERFJfMzJCSVRT CQkyCiNkZWZpbmUgIFNGQ19DTURfQUREUl9YQklUUwkJMwojZGVmaW5lICBTRkNfQ01EX1RSQU5f QllURVNfU0hJRlQJMTYKI2RlZmluZSAgU0ZDX0NNRF9DU19TSElGVAkJMzAKCi8qIEFkZHJlc3Mg Ki8KI2RlZmluZSBTRkNfQUREUgkJCTB4MTA0CgovKiBEYXRhICovCiNkZWZpbmUgU0ZDX0RBVEEJ CQkweDEwOAoKLyogVGhlIGNvbnRyb2xsZXIgYW5kIGRvY3VtZW50YXRpb24gcmVwb3J0cyB0aGF0 IGl0IHN1cHBvcnRzIHVwIHRvIDQgQ1MKICogZGV2aWNlcyAoMC0zKSwgaG93ZXZlciBJIGhhdmUg b25seSBiZWVuIGFibGUgdG8gdGVzdCBhIHNpbmdsZSBDUyAoQ1MgMCkKICogZHVlIHRvIHRoZSBj b25maWd1cmF0aW9uIG9mIG15IGRldmljZS4KICovCiNkZWZpbmUgU0ZDX01BWF9DSElQU0VMRUNU X05VTQkJNAoKLyogVGhlIFNGQyBjYW4gdHJhbnNmZXIgbWF4IDE2S0IgLSAxIGF0IG9uZSB0aW1l CiAqIHdlIHNldCBpdCB0byAxNS41S0IgaGVyZSBmb3IgYWxpZ25tZW50LgogKi8KI2RlZmluZSBT RkNfTUFYX0lPU0laRV9WRVIzCQkoNTEyICogMzEpCgojZGVmaW5lIFNGQ19NQVhfSU9TSVpFX1ZF UjQJCSgweEZGRkZGRkZGKQoKLyogRE1BIGlzIG9ubHkgZW5hYmxlZCBmb3IgbGFyZ2UgZGF0YSB0 cmFuc21pc3Npb24gKi8KI2RlZmluZSBTRkNfRE1BX1RSQU5TX1RIUkVUSE9MRAkJKDB4NDApCgov KiBNYXhpbXVtIGNsb2NrIHZhbHVlcyBmcm9tIGRhdGFzaGVldCBzdWdnZXN0IGtlZXBpbmcgY2xv Y2sgdmFsdWUgdW5kZXIKICogMTUwTUh6LiBObyBtaW5pbXVtIG9yIGF2ZXJhZ2UgdmFsdWUgaXMg c3VnZ2VzdGVkLCBidXQgdGhlIFUtYm9vdCBCU1AgZHJpdmVyCiAqIGhhcyBhIG1pbmltdW0gb2Yg MTBNSHogYW5kIGEgZGVmYXVsdCBvZiA4ME1IeiB3aGljaCBzZWVtcyByZWFzb25hYmxlLgogKi8K I2RlZmluZSBTRkNfTUlOX1NQRUVEX0haCQkoMTAgKiAxMDAwICogMTAwMCkKI2RlZmluZSBTRkNf REVGQVVMVF9TUEVFRF9IWgkJKDgwICogMTAwMCAqIDEwMDApCiNkZWZpbmUgU0ZDX01BWF9TUEVF RF9IWgkJKDE1MCAqIDEwMDAgKiAxMDAwKQoKc3RydWN0IHJvY2tjaGlwX3NmYyB7CglzdHJ1Y3Qg ZGV2aWNlICpkZXY7Cgl2b2lkIF9faW9tZW0gKnJlZ2Jhc2U7CglzdHJ1Y3QgY2xrICpoY2xrOwoJ c3RydWN0IGNsayAqY2xrOwoJdTMyIGZyZXF1ZW5jeTsKCS8qIHZpcnR1YWwgbWFwcGVkIGFkZHIg Zm9yIGRtYV9idWZmZXIgKi8KCXZvaWQgKmJ1ZmZlcjsKCWRtYV9hZGRyX3QgZG1hX2J1ZmZlcjsK CXN0cnVjdCBjb21wbGV0aW9uIGNwOwoJYm9vbCB1c2VfZG1hOwoJdTMyIG1heF9pb3NpemU7Cn07 CgpzdGF0aWMgaW50IHJvY2tjaGlwX3NmY19yZXNldChzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMp CnsKCWludCBlcnI7Cgl1MzIgc3RhdHVzOwoKCXdyaXRlbF9yZWxheGVkKFNGQ19SQ1ZSX1JFU0VU LCBzZmMtPnJlZ2Jhc2UgKyBTRkNfUkNWUik7CgoJZXJyID0gcmVhZGxfcG9sbF90aW1lb3V0KHNm Yy0+cmVnYmFzZSArIFNGQ19SQ1ZSLCBzdGF0dXMsCgkJCQkgIShzdGF0dXMgJiBTRkNfUkNWUl9S RVNFVCksIDIwLAoJCQkJIGppZmZpZXNfdG9fdXNlY3MoSFopKTsKCWlmIChlcnIpCgkJZGV2X2Vy cihzZmMtPmRldiwgIlNGQyByZXNldCBuZXZlciBmaW5pc2hlZFxuIik7CgoJLyogU3RpbGwgbmVl ZCB0byBjbGVhciB0aGUgbWFza2VkIGludGVycnVwdCBmcm9tIFJJU1IgKi8KCXdyaXRlbF9yZWxh eGVkKDB4RkZGRkZGRkYsIHNmYy0+cmVnYmFzZSArIFNGQ19JQ0xSKTsKCglkZXZfZGJnKHNmYy0+ ZGV2LCAicmVzZXRcbiIpOwoKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyB1MTYgcm9ja2NoaXBfc2Zj X2dldF92ZXJzaW9uKHN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYykKewoJcmV0dXJuICAodTE2KShy ZWFkbChzZmMtPnJlZ2Jhc2UgKyBTRkNfVkVSKSAmIDB4ZmZmZik7Cn0KCnN0YXRpYyB1MzIgcm9j a2NoaXBfc2ZjX2dldF9tYXhfaW9zaXplKHN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYykKewoJaWYg KHJvY2tjaGlwX3NmY19nZXRfdmVyc2lvbihzZmMpID49IFNGQ19WRVJfNCkKCQlyZXR1cm4gU0ZD X01BWF9JT1NJWkVfVkVSNDsKCWVsc2UKCQlyZXR1cm4gU0ZDX01BWF9JT1NJWkVfVkVSMzsKfQoK c3RhdGljIGludCByb2NrY2hpcF9zZmNfaW5pdChzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMpCnsK CXdyaXRlbCgwLCBzZmMtPnJlZ2Jhc2UgKyBTRkNfQ1RSTCk7CglpZiAocm9ja2NoaXBfc2ZjX2dl dF92ZXJzaW9uKHNmYykgPj0gU0ZDX1ZFUl80KQoJCXdyaXRlbChTRkNfTEVOX0NUUkxfVFJCX1NF TCwgc2ZjLT5yZWdiYXNlICsgU0ZDX0xFTl9DVFJMKTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGlu bGluZSBpbnQgcm9ja2NoaXBfc2ZjX2dldF9maWZvX2xldmVsKHN0cnVjdCByb2NrY2hpcF9zZmMg KnNmYywgaW50IHdyKQp7Cgl1MzIgZnNyID0gcmVhZGxfcmVsYXhlZChzZmMtPnJlZ2Jhc2UgKyBT RkNfRlNSKTsKCWludCBsZXZlbDsKCglpZiAod3IpCgkJbGV2ZWwgPSAoZnNyICYgU0ZDX0ZTUl9U WExWX01BU0spID4+IFNGQ19GU1JfVFhMVl9TSElGVDsKCWVsc2UKCQlsZXZlbCA9IChmc3IgJiBT RkNfRlNSX1JYTFZfTUFTSykgPj4gU0ZDX0ZTUl9SWExWX1NISUZUOwoKCXJldHVybiBsZXZlbDsK fQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfd2FpdF9maWZvX3JlYWR5KHN0cnVjdCByb2NrY2hp cF9zZmMgKnNmYywgaW50IHdyLCB1MzIgdGltZW91dCkKewoJdW5zaWduZWQgbG9uZyBkZWFkbGlu ZSA9IGppZmZpZXMgKyB0aW1lb3V0OwoJaW50IGxldmVsOwoKCXdoaWxlICghKGxldmVsID0gcm9j a2NoaXBfc2ZjX2dldF9maWZvX2xldmVsKHNmYywgd3IpKSkgewoJCWlmICh0aW1lX2FmdGVyX2Vx KGppZmZpZXMsIGRlYWRsaW5lKSkgewoJCQlkZXZfd2FybihzZmMtPmRldiwgIiVzIGZpZm8gdGlt ZW91dFxuIiwgd3IgPyAid3JpdGUiIDogInJlYWQiKTsKCQkJcmV0dXJuIC1FVElNRURPVVQ7CgkJ fQoJCXVkZWxheSgxKTsKCX0KCglyZXR1cm4gbGV2ZWw7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBf c2ZjX3hmZXJfc2V0dXAoc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjLAoJCQkJICAgc3RydWN0IHNw aV9tZW0gKm1lbSwKCQkJCSAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCwKCQkJCSAgIHUz MiBsZW4pCnsKCXUzMiBjdHJsID0gMCwgY21kID0gMDsKCgkvKiBzZXQgQ01EICovCgljbWQgPSBv cC0+Y21kLm9wY29kZTsKCWN0cmwgfD0gKChvcC0+Y21kLmJ1c3dpZHRoID4+IDEpIDw8IFNGQ19D VFJMX0NNRF9CSVRTX1NISUZUKTsKCgkvKiBzZXQgQUREUiAqLwoJaWYgKG9wLT5hZGRyLm5ieXRl cykgewoJCWlmIChvcC0+YWRkci5uYnl0ZXMgPT0gNCkgewoJCQljbWQgfD0gU0ZDX0NNRF9BRERS XzMyQklUUyA8PCBTRkNfQ01EX0FERFJfU0hJRlQ7CgkJfSBlbHNlIGlmIChvcC0+YWRkci5uYnl0 ZXMgPT0gMykgewoJCQljbWQgfD0gU0ZDX0NNRF9BRERSXzI0QklUUyA8PCBTRkNfQ01EX0FERFJf U0hJRlQ7CgkJfSBlbHNlIHsKCQkJY21kIHw9IFNGQ19DTURfQUREUl9YQklUUyA8PCBTRkNfQ01E X0FERFJfU0hJRlQ7CgkJCXdyaXRlbF9yZWxheGVkKG9wLT5hZGRyLm5ieXRlcyAqIDggLSAxLCBz ZmMtPnJlZ2Jhc2UgKyBTRkNfQUJJVCk7CgkJfQoKCQljdHJsIHw9ICgob3AtPmFkZHIuYnVzd2lk dGggPj4gMSkgPDwgU0ZDX0NUUkxfQUREUl9CSVRTX1NISUZUKTsKCX0KCgkvKiBzZXQgRFVNTVkg Ki8KCWlmIChvcC0+ZHVtbXkubmJ5dGVzKSB7CgkJaWYgKG9wLT5kdW1teS5idXN3aWR0aCA9PSA0 KQoJCQljbWQgfD0gb3AtPmR1bW15Lm5ieXRlcyAqIDIgPDwgU0ZDX0NNRF9EVU1NWV9TSElGVDsK CQllbHNlIGlmIChvcC0+ZHVtbXkuYnVzd2lkdGggPT0gMikKCQkJY21kIHw9IG9wLT5kdW1teS5u Ynl0ZXMgKiA0IDw8IFNGQ19DTURfRFVNTVlfU0hJRlQ7CgkJZWxzZQoJCQljbWQgfD0gb3AtPmR1 bW15Lm5ieXRlcyAqIDggPDwgU0ZDX0NNRF9EVU1NWV9TSElGVDsKCX0KCgkvKiBzZXQgREFUQSAq LwoJaWYgKHJvY2tjaGlwX3NmY19nZXRfdmVyc2lvbihzZmMpID49IFNGQ19WRVJfNCkgLyogQ2xl YXIgaXQgaWYgbm8gZGF0YSB0byB0cmFuc2ZlciAqLwoJCXdyaXRlbChsZW4sIHNmYy0+cmVnYmFz ZSArIFNGQ19MRU5fRVhUKTsKCWVsc2UKCQljbWQgfD0gbGVuIDw8IFNGQ19DTURfVFJBTl9CWVRF U19TSElGVDsKCWlmIChsZW4pIHsKCQlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9P VVQpCgkJCWNtZCB8PSBTRkNfQ01EX0RJUl9XUiA8PCBTRkNfQ01EX0RJUl9TSElGVDsKCgkJY3Ry bCB8PSAoKG9wLT5kYXRhLmJ1c3dpZHRoID4+IDEpIDw8IFNGQ19DVFJMX0RBVEFfQklUU19TSElG VCk7Cgl9CglpZiAoIWxlbiAmJiBvcC0+YWRkci5uYnl0ZXMpCgkJY21kIHw9IFNGQ19DTURfRElS X1dSIDw8IFNGQ19DTURfRElSX1NISUZUOwoKCS8qIHNldCB0aGUgQ29udHJvbGxlciAqLwoJY3Ry bCB8PSBTRkNfQ1RSTF9QSEFTRV9TRUxfTkVHRVRJVkU7CgljbWQgfD0gbWVtLT5zcGktPmNoaXBf c2VsZWN0IDw8IFNGQ19DTURfQ1NfU0hJRlQ7CgoJZGV2X2RiZyhzZmMtPmRldiwgImFkZHIubmJ5 dGVzPSV4KHglZCkgZHVtbXkubmJ5dGVzPSV4KHglZClcbiIsCgkJb3AtPmFkZHIubmJ5dGVzLCBv cC0+YWRkci5idXN3aWR0aCwKCQlvcC0+ZHVtbXkubmJ5dGVzLCBvcC0+ZHVtbXkuYnVzd2lkdGgp OwoJZGV2X2RiZyhzZmMtPmRldiwgImN0cmw9JXggY21kPSV4IGFkZHI9JWxseCBsZW49JXhcbiIs CgkJY3RybCwgY21kLCBvcC0+YWRkci52YWwsIGxlbik7CgoJd3JpdGVsKGN0cmwsIHNmYy0+cmVn YmFzZSArIFNGQ19DVFJMKTsKCXdyaXRlbChjbWQsIHNmYy0+cmVnYmFzZSArIFNGQ19DTUQpOwoJ aWYgKG9wLT5hZGRyLm5ieXRlcykKCQl3cml0ZWwob3AtPmFkZHIudmFsLCBzZmMtPnJlZ2Jhc2Ug KyBTRkNfQUREUik7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX3dyaXRl X2ZpZm8oc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQp7 Cgl1OCBieXRlcyA9IGxlbiAmIDB4MzsKCXUzMiBkd29yZHM7CglpbnQgdHhfbGV2ZWw7Cgl1MzIg d3JpdGVfd29yZHM7Cgl1MzIgdG1wID0gMDsKCglkd29yZHMgPSBsZW4gPj4gMjsKCXdoaWxlIChk d29yZHMpIHsKCQl0eF9sZXZlbCA9IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9fcmVhZHkoc2ZjLCBT RkNfQ01EX0RJUl9XUiwgSFopOwoJCWlmICh0eF9sZXZlbCA8IDApCgkJCXJldHVybiB0eF9sZXZl bDsKCQl3cml0ZV93b3JkcyA9IG1pbl90KHUzMiwgdHhfbGV2ZWwsIGR3b3Jkcyk7CgkJaW93cml0 ZTMyX3JlcChzZmMtPnJlZ2Jhc2UgKyBTRkNfREFUQSwgYnVmLCB3cml0ZV93b3Jkcyk7CgkJYnVm ICs9IHdyaXRlX3dvcmRzIDw8IDI7CgkJZHdvcmRzIC09IHdyaXRlX3dvcmRzOwoJfQoKCS8qIHdy aXRlIHRoZSByZXN0IG5vbiB3b3JkIGFsaWduZWQgYnl0ZXMgKi8KCWlmIChieXRlcykgewoJCXR4 X2xldmVsID0gcm9ja2NoaXBfc2ZjX3dhaXRfZmlmb19yZWFkeShzZmMsIFNGQ19DTURfRElSX1dS LCBIWik7CgkJaWYgKHR4X2xldmVsIDwgMCkKCQkJcmV0dXJuIHR4X2xldmVsOwoJCW1lbWNweSgm dG1wLCBidWYsIGJ5dGVzKTsKCQl3cml0ZWwodG1wLCBzZmMtPnJlZ2Jhc2UgKyBTRkNfREFUQSk7 Cgl9CgoJcmV0dXJuIGxlbjsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfcmVhZF9maWZvKHN0 cnVjdCByb2NrY2hpcF9zZmMgKnNmYywgdTggKmJ1ZiwgaW50IGxlbikKewoJdTggYnl0ZXMgPSBs ZW4gJiAweDM7Cgl1MzIgZHdvcmRzOwoJdTggcmVhZF93b3JkczsKCWludCByeF9sZXZlbDsKCWlu dCB0bXA7CgoJLyogd29yZCBhbGlnbmVkIGFjY2VzcyBvbmx5ICovCglkd29yZHMgPSBsZW4gPj4g MjsKCXdoaWxlIChkd29yZHMpIHsKCQlyeF9sZXZlbCA9IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9f cmVhZHkoc2ZjLCBTRkNfQ01EX0RJUl9SRCwgSFopOwoJCWlmIChyeF9sZXZlbCA8IDApCgkJCXJl dHVybiByeF9sZXZlbDsKCQlyZWFkX3dvcmRzID0gbWluX3QodTMyLCByeF9sZXZlbCwgZHdvcmRz KTsKCQlpb3JlYWQzMl9yZXAoc2ZjLT5yZWdiYXNlICsgU0ZDX0RBVEEsIGJ1ZiwgcmVhZF93b3Jk cyk7CgkJYnVmICs9IHJlYWRfd29yZHMgPDwgMjsKCQlkd29yZHMgLT0gcmVhZF93b3JkczsKCX0K CgkvKiByZWFkIHRoZSByZXN0IG5vbiB3b3JkIGFsaWduZWQgYnl0ZXMgKi8KCWlmIChieXRlcykg ewoJCXJ4X2xldmVsID0gcm9ja2NoaXBfc2ZjX3dhaXRfZmlmb19yZWFkeShzZmMsIFNGQ19DTURf RElSX1JELCBIWik7CgkJaWYgKHJ4X2xldmVsIDwgMCkKCQkJcmV0dXJuIHJ4X2xldmVsOwoJCXRt cCA9IHJlYWRsX3JlbGF4ZWQoc2ZjLT5yZWdiYXNlICsgU0ZDX0RBVEEpOwoJCW1lbWNweShidWYs ICZ0bXAsIGJ5dGVzKTsKCX0KCglyZXR1cm4gbGVuOwp9CgpzdGF0aWMgaW50IHJvY2tjaGlwX3Nm Y19maWZvX3RyYW5zZmVyX2RtYShzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMsIGRtYV9hZGRyX3Qg ZG1hX2J1Ziwgc2l6ZV90IGxlbikKewoJdTMyIHJlZzsKCWludCBlcnIgPSAwOwoKCWluaXRfY29t cGxldGlvbigmc2ZjLT5jcCk7CgoJd3JpdGVsKDB4RkZGRkZGRkYsIHNmYy0+cmVnYmFzZSArIFNG Q19JQ0xSKTsKCgkvKiBFbmFibGUgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0ICovCglyZWcg PSByZWFkbChzZmMtPnJlZ2Jhc2UgKyBTRkNfSU1SKTsKCXJlZyAmPSB+U0ZDX0lNUl9ETUE7Cgl3 cml0ZWwocmVnLCBzZmMtPnJlZ2Jhc2UgKyBTRkNfSU1SKTsKCXdyaXRlbCgodTMyKWRtYV9idWYs IHNmYy0+cmVnYmFzZSArIFNGQ19ETUFfQUREUik7Cgl3cml0ZWwoMHgxLCBzZmMtPnJlZ2Jhc2Ug KyBTRkNfRE1BX1RSSUdHRVIpOwoKCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQuICovCglpZiAo IXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2ZjLT5jcCwgbXNlY3NfdG9famlmZmllcygy MDAwKSkpIHsKCQlkZXZfZXJyKHNmYy0+ZGV2LCAiRE1BIHdhaXQgZm9yIHRyYW5zZmVyIGZpbmlz aCB0aW1lb3V0XG4iKTsKCQllcnIgPSAtRVRJTUVET1VUOwoJfQoKCXdyaXRlbCgweEZGRkZGRkZG LCBzZmMtPnJlZ2Jhc2UgKyBTRkNfSUNMUik7CgkvKiBEaXNhYmxlIHRyYW5zZmVyIGZpbmlzaCBp bnRlcnJ1cHQgKi8KCXJlZyA9IHJlYWRsKHNmYy0+cmVnYmFzZSArIFNGQ19JTVIpOwoJcmVnIHw9 IFNGQ19JTVJfRE1BOwoJd3JpdGVsKHJlZywgc2ZjLT5yZWdiYXNlICsgU0ZDX0lNUik7CgoJcmV0 dXJuIGxlbjsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfeGZlcl9kYXRhX3BvbGwoc3RydWN0 IHJvY2tjaGlwX3NmYyAqc2ZjLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIHUzMiBsZW4p CnsKCWRldl9kYmcoc2ZjLT5kZXYsICJ4ZmVyX3BvbGwgbGVuPSV4XG4iLCBsZW4pOwoKCWlmIChv cC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkKCQlyZXR1cm4gcm9ja2NoaXBfc2ZjX3dy aXRlX2ZpZm8oc2ZjLCBvcC0+ZGF0YS5idWYub3V0LCBsZW4pOwoJZWxzZQoJCXJldHVybiByb2Nr Y2hpcF9zZmNfcmVhZF9maWZvKHNmYywgb3AtPmRhdGEuYnVmLmluLCBsZW4pOwp9CgpzdGF0aWMg aW50IHJvY2tjaGlwX3NmY194ZmVyX2RhdGFfZG1hKHN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYywg Y29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wLCB1MzIgbGVuKQp7CglpbnQgcmV0OwoKCWRldl9k Ymcoc2ZjLT5kZXYsICJ4ZmVyX2RtYSBsZW49JXhcbiIsIGxlbik7CgoJaWYgKG9wLT5kYXRhLmRp ciA9PSBTUElfTUVNX0RBVEFfT1VUKSB7CgkJbWVtY3B5X3RvaW8oc2ZjLT5idWZmZXIsIG9wLT5k YXRhLmJ1Zi5vdXQsIGxlbik7CgkJcmV0ID0gcm9ja2NoaXBfc2ZjX2ZpZm9fdHJhbnNmZXJfZG1h KHNmYywgc2ZjLT5kbWFfYnVmZmVyLCBsZW4pOwoJfSBlbHNlIHsKCQlyZXQgPSByb2NrY2hpcF9z ZmNfZmlmb190cmFuc2Zlcl9kbWEoc2ZjLCBzZmMtPmRtYV9idWZmZXIsIGxlbik7CgkJbWVtY3B5 X2Zyb21pbyhvcC0+ZGF0YS5idWYuaW4sIHNmYy0+YnVmZmVyLCBsZW4pOwoJfQoKCXJldHVybiBy ZXQ7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX3hmZXJfZG9uZShzdHJ1Y3Qgcm9ja2NoaXBf c2ZjICpzZmMsIHUzMiB0aW1lb3V0X3VzKQp7CglpbnQgcmV0ID0gMDsKCXUzMiBzdGF0dXM7CgoJ cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHNmYy0+cmVnYmFzZSArIFNGQ19TUiwgc3RhdHVzLAoJ CQkJICEoc3RhdHVzICYgU0ZDX1NSX0lTX0JVU1kpLAoJCQkJIDIwLCB0aW1lb3V0X3VzKTsKCWlm IChyZXQpIHsKCQlkZXZfZXJyKHNmYy0+ZGV2LCAid2FpdCBzZmMgaWRsZSB0aW1lb3V0XG4iKTsK CQlyb2NrY2hpcF9zZmNfcmVzZXQoc2ZjKTsKCgkJcmV0ID0gLUVJTzsKCX0KCglyZXR1cm4gcmV0 Owp9CgpzdGF0aWMgaW50IHJvY2tjaGlwX3NmY19leGVjX21lbV9vcChzdHJ1Y3Qgc3BpX21lbSAq bWVtLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCnsKCXN0cnVjdCByb2NrY2hpcF9zZmMg KnNmYyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7Cgl1MzIgbGVu ID0gbWluX3QodTMyLCBvcC0+ZGF0YS5uYnl0ZXMsIHNmYy0+bWF4X2lvc2l6ZSk7CglpbnQgcmV0 OwoKCWlmIChtZW0tPnNwaS0+bWF4X3NwZWVkX2h6ICE9IHNmYy0+ZnJlcXVlbmN5KSB7CgkJaWYg KGNsa19zZXRfcmF0ZShzZmMtPmNsaywgbWVtLT5zcGktPm1heF9zcGVlZF9oeikpCgkJCXJldHVy biByZXQ7CgkJZGV2X2RiZyhzZmMtPmRldiwgInNldF9mcmVxPSVkSHogcmVhbF9mcmVxPSVsZEh6 XG4iLAoJCQlzZmMtPmZyZXF1ZW5jeSwgY2xrX2dldF9yYXRlKHNmYy0+Y2xrKSk7Cgl9CgoJcm9j a2NoaXBfc2ZjX3hmZXJfc2V0dXAoc2ZjLCBtZW0sIG9wLCBsZW4pOwoJaWYgKGxlbikgewoJCWlm IChsaWtlbHkoc2ZjLT51c2VfZG1hKSAmJiAhKGxlbiAmIDB4MykgJiYgbGVuID49IFNGQ19ETUFf VFJBTlNfVEhSRVRIT0xEKQoJCQlyZXQgPSByb2NrY2hpcF9zZmNfeGZlcl9kYXRhX2RtYShzZmMs IG9wLCBsZW4pOwoJCWVsc2UKCQkJcmV0ID0gcm9ja2NoaXBfc2ZjX3hmZXJfZGF0YV9wb2xsKHNm Yywgb3AsIGxlbik7CgoJCWlmIChyZXQgIT0gbGVuKSB7CgkJCWRldl9lcnIoc2ZjLT5kZXYsICJ4 ZmVyIGRhdGEgZmFpbGVkIHJldCAlZCBkaXIgJWRcbiIsIHJldCwgb3AtPmRhdGEuZGlyKTsKCgkJ CXJldHVybiAtRUlPOwoJCX0KCX0KCglyZXR1cm4gcm9ja2NoaXBfc2ZjX3hmZXJfZG9uZShzZmMs IDEwMDAwMCk7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICpyb2NrY2hpcF9zZmNfZ2V0X25hbWUoc3Ry dWN0IHNwaV9tZW0gKm1lbSkKewoJcmV0dXJuIGRldm1fa2FzcHJpbnRmKCZtZW0tPnNwaS0+ZGV2 LCBHRlBfS0VSTkVMLCAiJXMuJWQiLCBkZXZfbmFtZSgmbWVtLT5zcGktPmRldiksIG1lbS0+c3Bp LT5jaGlwX3NlbGVjdCk7Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVt X29wcyByb2NrY2hpcF9zZmNfbWVtX29wcyA9IHsKCS5leGVjX29wID0gcm9ja2NoaXBfc2ZjX2V4 ZWNfbWVtX29wLAoJLmdldF9uYW1lID0gcm9ja2NoaXBfc2ZjX2dldF9uYW1lLAp9OwoKc3RhdGlj IGlycXJldHVybl90IHJvY2tjaGlwX3NmY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZf aWQpCnsKCXN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IGRldl9pZDsKCXUzMiByZWc7CgoJcmVn ID0gcmVhZGwoc2ZjLT5yZWdiYXNlICsgU0ZDX1JJU1IpOwoKCS8qIENsZWFyIGludGVycnVwdCAq LwoJd3JpdGVsX3JlbGF4ZWQocmVnLCBzZmMtPnJlZ2Jhc2UgKyBTRkNfSUNMUik7CgoJaWYgKHJl ZyAmIFNGQ19SSVNSX0RNQSkKCQljb21wbGV0ZSgmc2ZjLT5jcCk7CgoJcmV0dXJuIElSUV9IQU5E TEVEOwp9CgpzdGF0aWMgaW50IHJvY2tjaGlwX3NmY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwoJc3RydWN0IHNw aV9tYXN0ZXIgKm1hc3RlcjsKCXN0cnVjdCByZXNvdXJjZSAqcmVzOwoJc3RydWN0IHJvY2tjaGlw X3NmYyAqc2ZjOwoJaW50IHJldDsKCgltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5k ZXYsIHNpemVvZigqc2ZjKSk7CglpZiAoIW1hc3RlcikgewoJCWRldl9lcnIoJnBkZXYtPmRldiwg InNwaV9hbGxvY19tYXN0ZXIgZmFpbGVkXG4iKTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCgltYXN0 ZXItPm1lbV9vcHMgPSAmcm9ja2NoaXBfc2ZjX21lbV9vcHM7CgltYXN0ZXItPmRldi5vZl9ub2Rl ID0gcGRldi0+ZGV2Lm9mX25vZGU7CgltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9UWF9RVUFEIHwg U1BJX1RYX0RVQUwgfCBTUElfUlhfUVVBRCB8IFNQSV9SWF9EVUFMOwoJbWFzdGVyLT5taW5fc3Bl ZWRfaHogPSBTRkNfTUlOX1NQRUVEX0haOwoJbWFzdGVyLT5tYXhfc3BlZWRfaHogPSBTRkNfTUFY X1NQRUVEX0haOwoJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IFNGQ19NQVhfQ0hJUFNFTEVDVF9O VU07CgoJc2ZjID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwoJc2ZjLT5kZXYgPSBk ZXY7CgoJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKCXNmYy0+cmVnYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CglpZiAo SVNfRVJSKHNmYy0+cmVnYmFzZSkpCgkJcmV0dXJuIFBUUl9FUlIoc2ZjLT5yZWdiYXNlKTsKCglz ZmMtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiY2xrX3NmYyIpOwoJaWYgKElTX0VS UihzZmMtPmNsaykpIHsKCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHNmYyBp bnRlcmZhY2UgY2xrXG4iKTsKCQlyZXR1cm4gUFRSX0VSUihzZmMtPmNsayk7Cgl9CgoJc2ZjLT5o Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJoY2xrX3NmYyIpOwoJaWYgKElTX0VSUihz ZmMtPmhjbGspKSB7CgkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBzZmMgYWhi IGNsa1xuIik7CgkJcmV0dXJuIFBUUl9FUlIoc2ZjLT5oY2xrKTsKCX0KCglzZmMtPnVzZV9kbWEg PSAhb2ZfcHJvcGVydHlfcmVhZF9ib29sKHNmYy0+ZGV2LT5vZl9ub2RlLAoJCQkJCSAgICAgICJy b2NrY2hpcCxzZmMtbm8tZG1hIik7CgoJaWYgKHNmYy0+dXNlX2RtYSkgewoJCXJldCA9IGRtYV9z ZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIpKTsKCQlpZiAocmV0KSB7 CgkJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byBzZXQgZG1hIG1hc2tcbiIpOwoJCQlyZXR1cm4g cmV0OwoJCX0KCgkJc2ZjLT5idWZmZXIgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgU0ZDX01B WF9JT1NJWkVfVkVSMywKCQkJCQkJICAmc2ZjLT5kbWFfYnVmZmVyLAoJCQkJCQkgIEdGUF9LRVJO RUwpOwoJCWlmICghc2ZjLT5idWZmZXIpCgkJCXJldHVybiAtRU5PTUVNOwoJfQoKCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShzZmMtPmhjbGspOwoJaWYgKHJldCkgewoJCWRldl9lcnIoJnBkZXYt PmRldiwgIkZhaWxlZCB0byBlbmFibGUgYWhiIGNsa1xuIik7CgkJZ290byBlcnJfaGNsazsKCX0K CglyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc2ZjLT5jbGspOwoJaWYgKHJldCkgewoJCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgaW50ZXJmYWNlIGNsa1xuIik7CgkJZ290 byBlcnJfY2xrOwoJfQoKCS8qIEZpbmQgdGhlIGlycSAqLwoJcmV0ID0gcGxhdGZvcm1fZ2V0X2ly cShwZGV2LCAwKTsKCWlmIChyZXQgPCAwKSB7CgkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0 IHRoZSBpcnFcbiIpOwoJCWdvdG8gZXJyX2lycTsKCX0KCglyZXQgPSBkZXZtX3JlcXVlc3RfaXJx KGRldiwgcmV0LCByb2NrY2hpcF9zZmNfaXJxX2hhbmRsZXIsCgkJCSAgICAgICAwLCBwZGV2LT5u YW1lLCBzZmMpOwoJaWYgKHJldCkgewoJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qg aXJxXG4iKTsKCQlnb3RvIGVycl9pcnE7Cgl9CgoJcmV0ID0gcm9ja2NoaXBfc2ZjX2luaXQoc2Zj KTsKCWlmIChyZXQpCgkJZ290byBlcnJfaXJxOwoKCXNmYy0+bWF4X2lvc2l6ZSA9IHJvY2tjaGlw X3NmY19nZXRfbWF4X2lvc2l6ZShzZmMpOwoKCXJldCA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3Rl cihkZXYsIG1hc3Rlcik7CglpZiAocmV0KQoJCWdvdG8gZXJyX2lycTsKCglyZXR1cm4gMDsKCmVy cl9pcnE6CgljbGtfZGlzYWJsZV91bnByZXBhcmUoc2ZjLT5jbGspOwplcnJfY2xrOgoJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHNmYy0+aGNsayk7CmVycl9oY2xrOgoJcmV0dXJuIHJldDsKfQoKc3Rh dGljIGludCByb2NrY2hpcF9zZmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CnsKCXN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwoKCWNsa19kaXNhYmxlX3VucHJlcGFyZShzZmMtPmNsayk7CgljbGtfZGlzYWJsZV91bnByZXBh cmUoc2ZjLT5oY2xrKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCByb2NrY2hpcF9zZmNfZHRfaWRzW10gPSB7Cgl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlw LHB4MzAtc2ZjIn0sCgl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzAzNi1zZmMifSwKCXsg LmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMzA4LXNmYyJ9LAoJeyAuY29tcGF0aWJsZSA9ICJy b2NrY2hpcCxyazMzMjYtc2ZjIn0sCgl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzU2OC1z ZmMifSwKCXsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscnYxMTI2LXNmYyJ9LAoJeyAvKiBzZW50 aW5lbCAqLyB9Cn07Ck1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJvY2tjaGlwX3NmY19kdF9pZHMp OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfc2ZjX2RyaXZlciA9IHsK CS5kcml2ZXIgPSB7CgkJLm5hbWUJPSAicm9ja2NoaXAtc2ZjIiwKCQkub2ZfbWF0Y2hfdGFibGUg PSByb2NrY2hpcF9zZmNfZHRfaWRzLAoJfSwKCS5wcm9iZQk9IHJvY2tjaGlwX3NmY19wcm9iZSwK CS5yZW1vdmUJPSByb2NrY2hpcF9zZmNfcmVtb3ZlLAp9Owptb2R1bGVfcGxhdGZvcm1fZHJpdmVy KHJvY2tjaGlwX3NmY19kcml2ZXIpOwoKTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpNT0RVTEVf REVTQ1JJUFRJT04oIlJvY2tjaGlwIFNlcmlhbCBGbGFzaCBDb250cm9sbGVyIERyaXZlciIpOwpN T0RVTEVfQVVUSE9SKCJTaGF3biBMaW4gPHNoYXduLmxpbkByb2NrLWNoaXBzLmNvbT4iKTsK ------=_001_NextPart781385088131_=---- Content-Type: application/octet-stream; name="spi-rockchip-sfc.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="spi-rockchip-sfc.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQovKgogKiBSb2NrY2hpcCBT ZXJpYWwgRmxhc2ggQ29udHJvbGxlciBEcml2ZXIKICoKICogQ29weXJpZ2h0IChjKSAyMDE3LCBS b2NrY2hpcCBJbmMuCiAqIEF1dGhvcjogU2hhd24gTGluIDxzaGF3bi5saW5Acm9jay1jaGlwcy5j b20+CiAqLwoKI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgojaW5jbHVkZSA8bGludXgvY2xrLmg+ CiNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGlu Zy5oPgojaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CiNpbmNsdWRlIDxsaW51eC9tbS5oPgojaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9vZi5oPgojaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+CgovKiBTeXN0 ZW0gY29udHJvbCAqLwojZGVmaW5lIFNGQ19DVFJMCQkJMHgwCiNkZWZpbmUgIFNGQ19DVFJMX0NP TU1PTl9CSVRTXzEJCTB4MAojZGVmaW5lICBTRkNfQ1RSTF9DT01NT05fQklUU18yCQkweDEKI2Rl ZmluZSAgU0ZDX0NUUkxfQ09NTU9OX0JJVFNfNAkJMHgyCiNkZWZpbmUgIFNGQ19DVFJMX0RBVEFf QklUU19TSElGVAkxMgojZGVmaW5lICBTRkNfQ1RSTF9BRERSX0JJVFNfU0hJRlQJMTAKI2RlZmlu ZSAgU0ZDX0NUUkxfQ01EX0JJVFNfU0hJRlQJOAojZGVmaW5lICBTRkNfQ1RSTF9QSEFTRV9TRUxf TkVHRVRJVkUJQklUKDEpCgovKiBJbnRlcnJ1cHQgbWFzayAqLwojZGVmaW5lIFNGQ19JTVIJCQkJ MHg0CiNkZWZpbmUgIFNGQ19JTVJfUlhfRlVMTAkJQklUKDApCiNkZWZpbmUgIFNGQ19JTVJfUlhf VUZMT1cJCUJJVCgxKQojZGVmaW5lICBTRkNfSU1SX1RYX09GTE9XCQlCSVQoMikKI2RlZmluZSAg U0ZDX0lNUl9UWF9FTVBUWQkJQklUKDMpCiNkZWZpbmUgIFNGQ19JTVJfVFJBTl9GSU5JU0gJCUJJ VCg0KQojZGVmaW5lICBTRkNfSU1SX0JVU19FUlIJCUJJVCg1KQojZGVmaW5lICBTRkNfSU1SX05T UElfRVJSCQlCSVQoNikKI2RlZmluZSAgU0ZDX0lNUl9ETUEJCQlCSVQoNykKCi8qIEludGVycnVw dCBjbGVhciAqLwojZGVmaW5lIFNGQ19JQ0xSCQkJMHg4CiNkZWZpbmUgIFNGQ19JQ0xSX1JYX0ZV TEwJCUJJVCgwKQojZGVmaW5lICBTRkNfSUNMUl9SWF9VRkxPVwkJQklUKDEpCiNkZWZpbmUgIFNG Q19JQ0xSX1RYX09GTE9XCQlCSVQoMikKI2RlZmluZSAgU0ZDX0lDTFJfVFhfRU1QVFkJCUJJVCgz KQojZGVmaW5lICBTRkNfSUNMUl9UUkFOX0ZJTklTSAkJQklUKDQpCiNkZWZpbmUgIFNGQ19JQ0xS X0JVU19FUlIJCUJJVCg1KQojZGVmaW5lICBTRkNfSUNMUl9OU1BJX0VSUgkJQklUKDYpCiNkZWZp bmUgIFNGQ19JQ0xSX0RNQQkJCUJJVCg3KQoKLyogRklGTyB0aHJlc2hvbGQgbGV2ZWwgKi8KI2Rl ZmluZSBTRkNfRlRMUgkJCTB4YwojZGVmaW5lICBTRkNfRlRMUl9UWF9TSElGVAkJMAojZGVmaW5l ICBTRkNfRlRMUl9UWF9NQVNLCQkweDFmCiNkZWZpbmUgIFNGQ19GVExSX1JYX1NISUZUCQk4CiNk ZWZpbmUgIFNGQ19GVExSX1JYX01BU0sJCTB4MWYKCi8qIFJlc2V0IEZTTSBhbmQgRklGTyAqLwoj ZGVmaW5lIFNGQ19SQ1ZSCQkJMHgxMAojZGVmaW5lICBTRkNfUkNWUl9SRVNFVAkJCUJJVCgwKQoK LyogRW5oYW5jZWQgbW9kZSAqLwojZGVmaW5lIFNGQ19BWAkJCQkweDE0CgovKiBBZGRyZXNzIEJp dCBudW1iZXIgKi8KI2RlZmluZSBTRkNfQUJJVAkJCTB4MTgKCi8qIEludGVycnVwdCBzdGF0dXMg Ki8KI2RlZmluZSBTRkNfSVNSCQkJCTB4MWMKI2RlZmluZSAgU0ZDX0lTUl9SWF9GVUxMX1NISUZU CQlCSVQoMCkKI2RlZmluZSAgU0ZDX0lTUl9SWF9VRkxPV19TSElGVAkJQklUKDEpCiNkZWZpbmUg IFNGQ19JU1JfVFhfT0ZMT1dfU0hJRlQJCUJJVCgyKQojZGVmaW5lICBTRkNfSVNSX1RYX0VNUFRZ X1NISUZUCQlCSVQoMykKI2RlZmluZSAgU0ZDX0lTUl9UWF9GSU5JU0hfU0hJRlQJQklUKDQpCiNk ZWZpbmUgIFNGQ19JU1JfQlVTX0VSUl9TSElGVAkJQklUKDUpCiNkZWZpbmUgIFNGQ19JU1JfTlNQ SV9FUlJfU0hJRlQJCUJJVCg2KQojZGVmaW5lICBTRkNfSVNSX0RNQV9TSElGVAkJQklUKDcpCgov KiBGSUZPIHN0YXR1cyAqLwojZGVmaW5lIFNGQ19GU1IJCQkJMHgyMAojZGVmaW5lICBTRkNfRlNS X1RYX0lTX0ZVTEwJCUJJVCgwKQojZGVmaW5lICBTRkNfRlNSX1RYX0lTX0VNUFRZCQlCSVQoMSkK I2RlZmluZSAgU0ZDX0ZTUl9SWF9JU19FTVBUWQkJQklUKDIpCiNkZWZpbmUgIFNGQ19GU1JfUlhf SVNfRlVMTAkJQklUKDMpCiNkZWZpbmUgIFNGQ19GU1JfVFhMVl9NQVNLCQlHRU5NQVNLKDEyLCA4 KQojZGVmaW5lICBTRkNfRlNSX1RYTFZfU0hJRlQJCTgKI2RlZmluZSAgU0ZDX0ZTUl9SWExWX01B U0sJCUdFTk1BU0soMjAsIDE2KQojZGVmaW5lICBTRkNfRlNSX1JYTFZfU0hJRlQJCTE2CgovKiBG U00gc3RhdHVzICovCiNkZWZpbmUgU0ZDX1NSCQkJCTB4MjQKI2RlZmluZSAgU0ZDX1NSX0lTX0lE TEUJCQkweDAKI2RlZmluZSAgU0ZDX1NSX0lTX0JVU1kJCQkweDEKCi8qIFJhdyBpbnRlcnJ1cHQg c3RhdHVzICovCiNkZWZpbmUgU0ZDX1JJU1IJCQkweDI4CiNkZWZpbmUgIFNGQ19SSVNSX1JYX0ZV TEwJCUJJVCgwKQojZGVmaW5lICBTRkNfUklTUl9SWF9VTkRFUkZMT1cJCUJJVCgxKQojZGVmaW5l ICBTRkNfUklTUl9UWF9PVkVSRkxPVwkJQklUKDIpCiNkZWZpbmUgIFNGQ19SSVNSX1RYX0VNUFRZ CQlCSVQoMykKI2RlZmluZSAgU0ZDX1JJU1JfVFJBTl9GSU5JU0gJCUJJVCg0KQojZGVmaW5lICBT RkNfUklTUl9CVVNfRVJSCQlCSVQoNSkKI2RlZmluZSAgU0ZDX1JJU1JfTlNQSV9FUlIJCUJJVCg2 KQojZGVmaW5lICBTRkNfUklTUl9ETUEJCQlCSVQoNykKCi8qIE1hc3RlciB0cmlnZ2VyICovCiNk ZWZpbmUgU0ZDX0RNQV9UUklHR0VSCQkJMHg4MAoKLyogU3JjIG9yIERzdCBhZGRyIGZvciBtYXN0 ZXIgKi8KI2RlZmluZSBTRkNfRE1BX0FERFIJCQkweDg0CgovKiBDb21tYW5kICovCiNkZWZpbmUg U0ZDX0NNRAkJCQkweDEwMAojZGVmaW5lICBTRkNfQ01EX0lEWF9TSElGVAkJMAojZGVmaW5lICBT RkNfQ01EX0RVTU1ZX1NISUZUCQk4CiNkZWZpbmUgIFNGQ19DTURfRElSX1JECQkJMAojZGVmaW5l ICBTRkNfQ01EX0RJUl9XUgkJCTEKI2RlZmluZSAgU0ZDX0NNRF9ESVJfU0hJRlQJCTEyCiNkZWZp bmUgIFNGQ19DTURfQUREUl9aRVJPCQkoMHgwIDw8IDE0KQojZGVmaW5lICBTRkNfQ01EX0FERFJf MjRCSVRTCQkoMHgxIDw8IDE0KQojZGVmaW5lICBTRkNfQ01EX0FERFJfMzJCSVRTCQkoMHgyIDw8 IDE0KQojZGVmaW5lICBTRkNfQ01EX0FERFJfRlJTCQkoMHgzIDw8IDE0KQojZGVmaW5lICBTRkNf Q01EX1RSQU5fQllURVNfU0hJRlQJMTYKI2RlZmluZSAgU0ZDX0NNRF9DU19TSElGVAkJMzAKCi8q IEFkZHJlc3MgKi8KI2RlZmluZSBTRkNfQUREUgkJCTB4MTA0CgovKiBEYXRhICovCiNkZWZpbmUg U0ZDX0RBVEEJCQkweDEwOAoKLyogVGhlIGNvbnRyb2xsZXIgYW5kIGRvY3VtZW50YXRpb24gcmVw b3J0cyB0aGF0IGl0IHN1cHBvcnRzIHVwIHRvIDQgQ1MKICogZGV2aWNlcyAoMC0zKSwgaG93ZXZl ciBJIGhhdmUgb25seSBiZWVuIGFibGUgdG8gdGVzdCBhIHNpbmdsZSBDUyAoQ1MgMCkKICogZHVl IHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIG15IGRldmljZS4KICovCiNkZWZpbmUgU0ZDX01BWF9D SElQU0VMRUNUX05VTQkJNAoKLyogVGhlIFNGQyBjYW4gdHJhbnNmZXIgbWF4IDE2S0IgLSAxIGF0 IG9uZSB0aW1lCiAqIHdlIHNldCBpdCB0byAxNS41S0IgaGVyZSBmb3IgYWxpZ25tZW50LgogKi8K I2RlZmluZSBTRkNfTUFYX1RSQU5TX0JZVEVTCQkoNTEyICogMzEpCgovKiBNYXhpbXVtIGNsb2Nr IHZhbHVlcyBmcm9tIGRhdGFzaGVldCBzdWdnZXN0IGtlZXBpbmcgY2xvY2sgdmFsdWUgdW5kZXIK ICogMTUwTUh6LiBObyBtaW5pbXVtIG9yIGF2ZXJhZ2UgdmFsdWUgaXMgc3VnZ2VzdGVkLCBidXQg dGhlIFUtYm9vdCBCU1AgZHJpdmVyCiAqIGhhcyBhIG1pbmltdW0gb2YgMTBNSHogYW5kIGEgZGVm YXVsdCBvZiA4ME1IeiB3aGljaCBzZWVtcyByZWFzb25hYmxlLgogKi8KI2RlZmluZSBTRkNfTUlO X1NQRUVEX0haCQkoMTAgKiAxMDAwICogMTAwMCkKI2RlZmluZSBTRkNfREVGQVVMVF9TUEVFRF9I WgkJKDgwICogMTAwMCAqIDEwMDApCiNkZWZpbmUgU0ZDX01BWF9TUEVFRF9IWgkJKDE1MCAqIDEw MDAgKiAxMDAwKQoKI2RlZmluZSBTRkNfQ01EX0RVTU1ZKHgpIFwKCSgoeCkgPDwgU0ZDX0NNRF9E VU1NWV9TSElGVCkKCmVudW0gcm9ja2NoaXBfc2ZjX2lmdHlwZSB7CglJRl9UWVBFX1NURCwKCUlG X1RZUEVfRFVBTCwKCUlGX1RZUEVfUVVBRCwKfTsKCnN0cnVjdCByb2NrY2hpcF9zZmM7CnN0cnVj dCByb2NrY2hpcF9zZmNfY2hpcF9wcml2IHsKCXU4IGNzOwoJdTMyIGNsa19yYXRlOwoJc3RydWN0 IHJvY2tjaGlwX3NmYyAqc2ZjOwp9OwoKc3RydWN0IHJvY2tjaGlwX3NmYyB7CglzdHJ1Y3QgZGV2 aWNlICpkZXY7Cgl2b2lkIF9faW9tZW0gKnJlZ2Jhc2U7CglzdHJ1Y3QgY2xrICpoY2xrOwoJc3Ry dWN0IGNsayAqY2xrOwoJLyogdmlydHVhbCBtYXBwZWQgYWRkciBmb3IgZG1hX2J1ZmZlciAqLwoJ dm9pZCAqYnVmZmVyOwoJZG1hX2FkZHJfdCBkbWFfYnVmZmVyOwoJc3RydWN0IGNvbXBsZXRpb24g Y3A7CglzdHJ1Y3Qgcm9ja2NoaXBfc2ZjX2NoaXBfcHJpdiBmbGFzaFtTRkNfTUFYX0NISVBTRUxF Q1RfTlVNXTsKCXU4IG51bV9jaGlwOwoJYm9vbCB1c2VfZG1hOwp9OwoKc3RhdGljIGludCByb2Nr Y2hpcF9zZmNfZ2V0X2lmX3R5cGUoY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wLAoJCQkJICAg IHN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYykKewoJaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDIp CgkJcmV0dXJuIElGX1RZUEVfRFVBTDsKCWVsc2UgaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQp CgkJcmV0dXJuIElGX1RZUEVfUVVBRDsKCWVsc2UgaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDEp CgkJcmV0dXJuIElGX1RZUEVfU1REOwoKCWRldl9lcnIoc2ZjLT5kZXYsICJ1bnN1cHBvcnRlZCBT UEkgcmVhZCBtb2RlXG4iKTsKCglyZXR1cm4gLUVJTlZBTDsKfQoKc3RhdGljIGludCByb2NrY2hp cF9zZmNfcmVzZXQoc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjKQp7CglpbnQgZXJyOwoJdTMyIHN0 YXR1czsKCgl3cml0ZWxfcmVsYXhlZChTRkNfUkNWUl9SRVNFVCwgc2ZjLT5yZWdiYXNlICsgU0ZD X1JDVlIpOwoKCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dChzZmMtPnJlZ2Jhc2UgKyBTRkNfUkNW Uiwgc3RhdHVzLAoJCQkJICEoc3RhdHVzICYgU0ZDX1JDVlJfUkVTRVQpLCAyMCwKCQkJCSBqaWZm aWVzX3RvX3VzZWNzKEhaKSk7CglpZiAoZXJyKQoJCWRldl9lcnIoc2ZjLT5kZXYsICJTRkMgcmVz ZXQgbmV2ZXIgZmluaXNoZWRcbiIpOwoKCS8qIFN0aWxsIG5lZWQgdG8gY2xlYXIgdGhlIG1hc2tl ZCBpbnRlcnJ1cHQgZnJvbSBSSVNSICovCgl3cml0ZWxfcmVsYXhlZChTRkNfSUNMUl9SWF9GVUxM IHwgU0ZDX0lDTFJfUlhfVUZMT1cgfAoJCSAgICAgICBTRkNfSUNMUl9UWF9PRkxPVyB8IFNGQ19J Q0xSX1RYX0VNUFRZIHwKCQkgICAgICAgU0ZDX0lDTFJfVFJBTl9GSU5JU0ggfCBTRkNfSUNMUl9C VVNfRVJSIHwKCQkgICAgICAgU0ZDX0lDTFJfTlNQSV9FUlIgfCBTRkNfSUNMUl9ETUEsCgkJICAg ICAgIHNmYy0+cmVnYmFzZSArIFNGQ19JQ0xSKTsKCglkZXZfZGJnKHNmYy0+ZGV2LCAicmVzZXRc biIpOwoKCXJldHVybiBlcnI7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX2luaXQoc3RydWN0 IHJvY2tjaGlwX3NmYyAqc2ZjKQp7CglpbnQgZXJyOwoKCWVyciA9IGNsa19zZXRfcmF0ZShzZmMt PmNsaywgU0ZDX0RFRkFVTFRfU1BFRURfSFopOwoJaWYgKGVycikKCQlyZXR1cm4gZXJyOwoKCWVy ciA9IHJvY2tjaGlwX3NmY19yZXNldChzZmMpOwoJaWYgKGVycikKCQlyZXR1cm4gZXJyOwoKCS8q IE1hc2sgYWxsIGVpZ2h0IGludGVycnVwdHMgKi8KCXdyaXRlbF9yZWxheGVkKDB4ZmYsIHNmYy0+ cmVnYmFzZSArIFNGQ19JTVIpOwoKCXdyaXRlbF9yZWxheGVkKFNGQ19DVFJMX1BIQVNFX1NFTF9O RUdFVElWRSwgc2ZjLT5yZWdiYXNlICsgU0ZDX0NUUkwpOwoKCXJldHVybiAwOwp9CgpzdGF0aWMg aW5saW5lIGludCByb2NrY2hpcF9zZmNfZ2V0X2ZpZm9fbGV2ZWwoc3RydWN0IHJvY2tjaGlwX3Nm YyAqc2ZjLCBpbnQgd3IpCnsKCXUzMiBmc3IgPSByZWFkbF9yZWxheGVkKHNmYy0+cmVnYmFzZSAr IFNGQ19GU1IpOwoJaW50IGxldmVsOwoKCWlmICh3cikKCQlsZXZlbCA9IChmc3IgJiBTRkNfRlNS X1RYTFZfTUFTSykgPj4gU0ZDX0ZTUl9UWExWX1NISUZUOwoJZWxzZQoJCWxldmVsID0gKGZzciAm IFNGQ19GU1JfUlhMVl9NQVNLKSA+PiBTRkNfRlNSX1JYTFZfU0hJRlQ7CgoJcmV0dXJuIGxldmVs Owp9CgpzdGF0aWMgaW50IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9fcmVhZHkoc3RydWN0IHJvY2tj aGlwX3NmYyAqc2ZjLCBpbnQgd3IsIHUzMiB0aW1lb3V0KQp7Cgl1bnNpZ25lZCBsb25nIGRlYWRs aW5lID0gamlmZmllcyArIHRpbWVvdXQ7CglpbnQgbGV2ZWw7CgoJd2hpbGUgKCEobGV2ZWwgPSBy b2NrY2hpcF9zZmNfZ2V0X2ZpZm9fbGV2ZWwoc2ZjLCB3cikpKSB7CgkJaWYgKHRpbWVfYWZ0ZXJf ZXEoamlmZmllcywgZGVhZGxpbmUpKSB7CgkJCWRldl93YXJuKHNmYy0+ZGV2LCAiJXMgZmlmbyB0 aW1lb3V0XG4iLCB3ciA/ICJ3cml0ZSIgOiAicmVhZCIpOwoJCQlyZXR1cm4gLUVUSU1FRE9VVDsK CQl9CgkJdWRlbGF5KDEpOwoJfQoKCXJldHVybiBsZXZlbDsKfQoKLyogVGhlIFNGQ19DVFJMIHJl Z2lzdGVyIGlzIGEgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIsCiAqIHdoZW4gdGhlIGNvbnRyb2xs ZXIgaXMgaW4gYnVzeSBzdGF0ZShTRkNfU1IpLAogKiBTRkNfQ1RSTCBjYW5ub3QgYmUgc2V0Lgog Ki8Kc3RhdGljIHZvaWQgcm9ja2NoaXBfc2ZjX3dhaXRfaWRsZShzdHJ1Y3Qgcm9ja2NoaXBfc2Zj ICpzZmMsIHUzMiB0aW1lb3V0X3VzKQp7Cgl1MzIgc3RhdHVzOwoJaW50IHJldDsKCglyZXQgPSBy ZWFkbF9wb2xsX3RpbWVvdXQoc2ZjLT5yZWdiYXNlICsgU0ZDX1NSLCBzdGF0dXMsCgkJCQkgIShz dGF0dXMgJiBTRkNfU1JfSVNfQlVTWSksCgkJCQkgMjAsIHRpbWVvdXRfdXMpOwoJaWYgKHJldCkg ewoJCWRldl9lcnIoc2ZjLT5kZXYsICJ3YWl0IHNmYyBpZGxlIHRpbWVvdXRcbiIpOwoJCXJvY2tj aGlwX3NmY19yZXNldChzZmMpOwoJfQp9CgpzdGF0aWMgdm9pZCByb2NrY2hpcF9zZmNfc2V0dXBf Y3RybChzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMpCnsKCXUzMiByZWc7CgoJcmVnID0gSUZfVFlQ RV9TVEQgPDwgU0ZDX0NUUkxfREFUQV9CSVRTX1NISUZUOwoJcmVnIHw9IElGX1RZUEVfU1REIDw8 IFNGQ19DVFJMX0FERFJfQklUU19TSElGVDsKCXJlZyB8PSBJRl9UWVBFX1NURCA8PCBTRkNfQ1RS TF9DTURfQklUU19TSElGVDsKCXJlZyB8PSBTRkNfQ1RSTF9QSEFTRV9TRUxfTkVHRVRJVkU7CgoJ cm9ja2NoaXBfc2ZjX3dhaXRfaWRsZShzZmMsIDEwMDAwKTsKCgl3cml0ZWxfcmVsYXhlZChyZWcs IHNmYy0+cmVnYmFzZSArIFNGQ19DVFJMKTsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfb3Bf cmVnKHN0cnVjdCByb2NrY2hpcF9zZmNfY2hpcF9wcml2ICpwcml2LAoJCQkgICAgICAgdTggb3Bj b2RlLCBpbnQgbGVuLCB1OCBvcHR5cGUpCnsKCXN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IHBy aXYtPnNmYzsKCXUzMiByZWc7CgoJcm9ja2NoaXBfc2ZjX3NldHVwX2N0cmwoc2ZjKTsKCglyZWcg PSBvcGNvZGUgPDwgU0ZDX0NNRF9JRFhfU0hJRlQ7CglyZWcgfD0gbGVuIDw8IFNGQ19DTURfVFJB Tl9CWVRFU19TSElGVDsKCXJlZyB8PSBwcml2LT5jcyA8PCBTRkNfQ01EX0NTX1NISUZUOwoJcmVn IHw9IG9wdHlwZSA8PCBTRkNfQ01EX0RJUl9TSElGVDsKCXdyaXRlbF9yZWxheGVkKHJlZywgc2Zj LT5yZWdiYXNlICsgU0ZDX0NNRCk7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBf c2ZjX3dyaXRlX2ZpZm8oc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjLCBjb25zdCB1OCAqYnVmLCBp bnQgbGVuKQp7Cgl1OCBieXRlcyA9IGxlbiAmIDB4MzsKCXUzMiBkd29yZHM7CglpbnQgdHhfbGV2 ZWw7Cgl1MzIgd3JpdGVfd29yZHM7Cgl1MzIgdG1wID0gMDsKCglkd29yZHMgPSBsZW4gPj4gMjsK CXdoaWxlIChkd29yZHMpIHsKCQl0eF9sZXZlbCA9IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9fcmVh ZHkoc2ZjLCBTRkNfQ01EX0RJUl9XUiwgSFopOwoJCWlmICh0eF9sZXZlbCA8IDApCgkJCXJldHVy biB0eF9sZXZlbDsKCQl3cml0ZV93b3JkcyA9IG1pbl90KHUzMiwgdHhfbGV2ZWwsIGR3b3Jkcyk7 CgkJaW93cml0ZTMyX3JlcChzZmMtPnJlZ2Jhc2UgKyBTRkNfREFUQSwgYnVmLCB3cml0ZV93b3Jk cyk7CgkJYnVmICs9IHdyaXRlX3dvcmRzIDw8IDI7CgkJZHdvcmRzIC09IHdyaXRlX3dvcmRzOwoJ CX0KCgkvKiB3cml0ZSB0aGUgcmVzdCBub24gd29yZCBhbGlnbmVkIGJ5dGVzICovCglpZiAoYnl0 ZXMpIHsKCQl0eF9sZXZlbCA9IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9fcmVhZHkoc2ZjLCBTRkNf Q01EX0RJUl9XUiwgSFopOwoJCWlmICh0eF9sZXZlbCA8IDApCgkJCXJldHVybiB0eF9sZXZlbDsK CQltZW1jcHkoJnRtcCwgYnVmLCBieXRlcyk7CgkJd3JpdGVsX3JlbGF4ZWQodG1wLCBzZmMtPnJl Z2Jhc2UgKyBTRkNfREFUQSk7Cgl9CgoJcmV0dXJuIGxlbjsKfQoKc3RhdGljIGludCByb2NrY2hp cF9zZmNfcmVhZF9maWZvKHN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYywgdTggKmJ1ZiwgaW50IGxl bikKewoJdTggYnl0ZXMgPSBsZW4gJiAweDM7Cgl1MzIgZHdvcmRzOwoJdTggcmVhZF93b3JkczsK CWludCByeF9sZXZlbDsKCWludCB0bXA7CgoJLyogd29yZCBhbGlnbmVkIGFjY2VzcyBvbmx5ICov Cglkd29yZHMgPSBsZW4gPj4gMjsKCXdoaWxlIChkd29yZHMpIHsKCQlyeF9sZXZlbCA9IHJvY2tj aGlwX3NmY193YWl0X2ZpZm9fcmVhZHkoc2ZjLCBTRkNfQ01EX0RJUl9SRCwgSFopOwoJCWlmIChy eF9sZXZlbCA8IDApCgkJCXJldHVybiByeF9sZXZlbDsKCQlyZWFkX3dvcmRzID0gbWluX3QodTMy LCByeF9sZXZlbCwgZHdvcmRzKTsKCQlpb3JlYWQzMl9yZXAoc2ZjLT5yZWdiYXNlICsgU0ZDX0RB VEEsIGJ1ZiwgcmVhZF93b3Jkcyk7CgkJYnVmICs9IHJlYWRfd29yZHMgPDwgMjsKCQlkd29yZHMg LT0gcmVhZF93b3JkczsKCQl9CgoJLyogcmVhZCB0aGUgcmVzdCBub24gd29yZCBhbGlnbmVkIGJ5 dGVzICovCglpZiAoYnl0ZXMpIHsKCQlyeF9sZXZlbCA9IHJvY2tjaGlwX3NmY193YWl0X2ZpZm9f cmVhZHkoc2ZjLCBTRkNfQ01EX0RJUl9SRCwgSFopOwoJCWlmIChyeF9sZXZlbCA8IDApCgkJCXJl dHVybiByeF9sZXZlbDsKCQl0bXAgPSByZWFkbF9yZWxheGVkKHNmYy0+cmVnYmFzZSArIFNGQ19E QVRBKTsKCQltZW1jcHkoYnVmLCAmdG1wLCBieXRlcyk7Cgl9CgoJcmV0dXJuIGxlbjsKfQoKc3Rh dGljIGludCByb2NrY2hpcF9zZmNfcmVhZF9yZWcoc3RydWN0IHJvY2tjaGlwX3NmY19jaGlwX3By aXYgKnByaXYsCgkJCQkgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQp7CglzdHJ1Y3Qgcm9j a2NoaXBfc2ZjICpzZmMgPSBwcml2LT5zZmM7CglpbnQgcmV0OwoJaW50IHRyYW5zOwoJc2l6ZV90 IG5fcnggPSBvcC0+ZGF0YS5uYnl0ZXM7Cgl1OCBvcGNvZGUgPSBvcC0+Y21kLm9wY29kZTsKCXU4 ICpyeGJ1ZiA9IG9wLT5kYXRhLmJ1Zi5pbjsKCgl0cmFucyA9IG1pbl90KGludCwgbl9yeCwgU0ZD X01BWF9UUkFOU19CWVRFUyk7CglyZXQgPSByb2NrY2hpcF9zZmNfb3BfcmVnKHByaXYsIG9wY29k ZSwgdHJhbnMsIFNGQ19DTURfRElSX1JEKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglyZXQg PSByb2NrY2hpcF9zZmNfcmVhZF9maWZvKHNmYywgcnhidWYsIHRyYW5zKTsKCWlmIChyZXQgPCAw KQoJCXJldHVybiByZXQ7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX3dy aXRlX3JlZyhzdHJ1Y3Qgcm9ja2NoaXBfc2ZjX2NoaXBfcHJpdiAqcHJpdiwKCQkJCSAgY29uc3Qg c3RydWN0IHNwaV9tZW1fb3AgKm9wKQp7CglzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMgPSBwcml2 LT5zZmM7CglpbnQgcmV0OwoJc2l6ZV90IG5fdHggPSBvcC0+ZGF0YS5uYnl0ZXM7Cgl1OCBvcGNv ZGUgPSBvcC0+Y21kLm9wY29kZTsKCWNvbnN0IHU4ICp0eGJ1ZiA9IG9wLT5kYXRhLmJ1Zi5vdXQ7 CgoJcmV0ID0gcm9ja2NoaXBfc2ZjX29wX3JlZyhwcml2LCBvcGNvZGUsIG5fdHgsIFNGQ19DTURf RElSX1dSKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCXJldCA9IHJvY2tjaGlwX3NmY193cml0 ZV9maWZvKHNmYywgdHhidWYsIG5fdHgpOwoJaWYgKHJldCA8IDApCgkJcmV0dXJuIHJldDsKCgly ZXR1cm4gMDsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfc2V0dXBfdHJhbnNmZXIoc3RydWN0 IHJvY2tjaGlwX3NmY19jaGlwX3ByaXYgKnByaXYsCgkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNw aV9tZW1fb3AgKm9wLAoJCQkJICAgICAgIGxvZmZfdCBmcm9tX3RvLCBzaXplX3QgbGVuLCB1OCBv cF90eXBlKQp7CglzdHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMgPSBwcml2LT5zZmM7Cgl1OCBpZl90 eXBlID0gSUZfVFlQRV9TVEQ7Cgl1OCBhZGRyX3dpZHRoID0gb3AtPmFkZHIubmJ5dGVzOwoJdTgg cmVhZF9kdW1teV9iaXRzID0gb3AtPmR1bW15Lm5ieXRlcyA8PCAzOwoJdTMyIHJlZzsKCglpZiAo b3BfdHlwZSA9PSBTRkNfQ01EX0RJUl9SRCkKCQlpZl90eXBlID0gcm9ja2NoaXBfc2ZjX2dldF9p Zl90eXBlKG9wLCBzZmMpOwoKCXJvY2tjaGlwX3NmY193YWl0X2lkbGUoc2ZjLCAxMDAwMCk7CgoJ d3JpdGVsX3JlbGF4ZWQoKGlmX3R5cGUgPDwgU0ZDX0NUUkxfREFUQV9CSVRTX1NISUZUKSB8CgkJ ICAgICAgIChJRl9UWVBFX1NURCA8PCBTRkNfQ1RSTF9BRERSX0JJVFNfU0hJRlQpIHwKCQkgICAg ICAgKElGX1RZUEVfU1REIDw8IFNGQ19DVFJMX0NNRF9CSVRTX1NISUZUKSB8CgkJICAgICAgIFNG Q19DVFJMX1BIQVNFX1NFTF9ORUdFVElWRSwKCQkgICAgICAgc2ZjLT5yZWdiYXNlICsgU0ZDX0NU UkwpOwoKCXJlZyA9IG9wLT5jbWQub3Bjb2RlIDw8IFNGQ19DTURfSURYX1NISUZUOwoKCXJlZyB8 PSBvcF90eXBlIDw8IFNGQ19DTURfRElSX1NISUZUOwoJcmVnIHw9IChhZGRyX3dpZHRoID09IDQp ID8KCQlTRkNfQ01EX0FERFJfMzJCSVRTIDogU0ZDX0NNRF9BRERSXzI0QklUUzsKCglyZWcgfD0g cHJpdi0+Y3MgPDwgU0ZDX0NNRF9DU19TSElGVDsKCXJlZyB8PSBsZW4gPDwgU0ZDX0NNRF9UUkFO X0JZVEVTX1NISUZUOwoKCWlmIChvcF90eXBlID09IFNGQ19DTURfRElSX1JEKQoJCXJlZyB8PSBT RkNfQ01EX0RVTU1ZKHJlYWRfZHVtbXlfYml0cyk7CgoJd3JpdGVsX3JlbGF4ZWQocmVnLCBzZmMt PnJlZ2Jhc2UgKyBTRkNfQ01EKTsKCXdyaXRlbF9yZWxheGVkKGZyb21fdG8sIHNmYy0+cmVnYmFz ZSArIFNGQ19BRERSKTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfZG9f ZG1hX3RyYW5zZmVyKHN0cnVjdCByb2NrY2hpcF9zZmNfY2hpcF9wcml2ICpwcml2LAoJCQkJCWNv bnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCwgbG9mZl90IGZyb21fdG8sCgkJCQkJZG1hX2FkZHJf dCBkbWFfYnVmLCBzaXplX3QgbGVuLCB1OCBvcF90eXBlKQp7CglzdHJ1Y3Qgcm9ja2NoaXBfc2Zj ICpzZmMgPSBwcml2LT5zZmM7Cgl1MzIgcmVnOwoJaW50IGVyciA9IDA7CgoJaW5pdF9jb21wbGV0 aW9uKCZzZmMtPmNwKTsKCgl3cml0ZWxfcmVsYXhlZChTRkNfSUNMUl9SWF9GVUxMIHwgU0ZDX0lD TFJfUlhfVUZMT1cgfAoJCSAgICAgICBTRkNfSUNMUl9UWF9PRkxPVyB8IFNGQ19JQ0xSX1RYX0VN UFRZIHwKCQkgICAgICAgU0ZDX0lDTFJfVFJBTl9GSU5JU0ggfCBTRkNfSUNMUl9CVVNfRVJSIHwK CQkgICAgICAgU0ZDX0lDTFJfTlNQSV9FUlIgfCBTRkNfSUNMUl9ETUEsCgkJICAgICAgIHNmYy0+ cmVnYmFzZSArIFNGQ19JQ0xSKTsKCgkvKiBFbmFibGUgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJy dXB0ICovCglyZWcgPSByZWFkbF9yZWxheGVkKHNmYy0+cmVnYmFzZSArIFNGQ19JTVIpOwoJcmVn ICY9IH5TRkNfSU1SX1RSQU5fRklOSVNIOwoJd3JpdGVsX3JlbGF4ZWQocmVnLCBzZmMtPnJlZ2Jh c2UgKyBTRkNfSU1SKTsKCgllcnIgPSByb2NrY2hpcF9zZmNfc2V0dXBfdHJhbnNmZXIocHJpdiwg b3AsIGZyb21fdG8sIGxlbiwgb3BfdHlwZSk7CglpZiAoZXJyIDwgMCkKCQlyZXR1cm4gZXJyOwoK CXdyaXRlbF9yZWxheGVkKGRtYV9idWYsIHNmYy0+cmVnYmFzZSArIFNGQ19ETUFfQUREUik7CgoJ LyoKCSAqIFN0YXJ0IGRtYSBidXQgbm90ZSB0aGF0IHRoZSBzZmMtPmRtYV9idWZmZXIgaXMgZGVy aXZlZCBmcm9tCgkgKiBkbWFtX2FsbG9jX2NvaGVyZW50IHNvIHdlIGRvbid0IGFjdHVhbGx5IG5l ZWQgYW55IHN5bmMgb3BlcmF0aW9ucwoJICogZm9yIGNvaGVyZW50IGRtYSBtZW1vcnkuCgkgKi8K CXdyaXRlbCgweDEsIHNmYy0+cmVnYmFzZSArIFNGQ19ETUFfVFJJR0dFUik7CgoJLyogV2FpdCBm b3IgdGhlIGludGVycnVwdC4gKi8KCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZz ZmMtPmNwLCBtc2Vjc190b19qaWZmaWVzKDIwMDApKSkgewoJCWRldl9lcnIoc2ZjLT5kZXYsICJE TUEgd2FpdCBmb3IgdHJhbnNmZXIgZmluaXNoIHRpbWVvdXRcbiIpOwoJCWVyciA9IC1FVElNRURP VVQ7Cgl9CgoJd3JpdGVsX3JlbGF4ZWQoU0ZDX0lDTFJfUlhfRlVMTCB8IFNGQ19JQ0xSX1JYX1VG TE9XIHwKCQkgICAgICAgU0ZDX0lDTFJfVFhfT0ZMT1cgfCBTRkNfSUNMUl9UWF9FTVBUWSB8CgkJ ICAgICAgIFNGQ19JQ0xSX1RSQU5fRklOSVNIIHwgU0ZDX0lDTFJfQlVTX0VSUiB8CgkJICAgICAg IFNGQ19JQ0xSX05TUElfRVJSIHwgU0ZDX0lDTFJfRE1BLAoJCSAgICAgICBzZmMtPnJlZ2Jhc2Ug KyBTRkNfSUNMUik7CgkvKiBEaXNhYmxlIHRyYW5zZmVyIGZpbmlzaCBpbnRlcnJ1cHQgKi8KCXJl ZyA9IHJlYWRsX3JlbGF4ZWQoc2ZjLT5yZWdiYXNlICsgU0ZDX0lNUik7CglyZWcgfD0gU0ZDX0lN Ul9UUkFOX0ZJTklTSDsKCXdyaXRlbF9yZWxheGVkKHJlZywgc2ZjLT5yZWdiYXNlICsgU0ZDX0lN Uik7CgoJaWYgKGVycikgewoJCXJvY2tjaGlwX3NmY19yZXNldChzZmMpOwoJCXJldHVybiBlcnI7 Cgl9CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHJvY2tjaGlwX3NmY19waW9fd3Jp dGUoc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjLCB1X2NoYXIgKmJ1ZiwKCQkJCQkgc2l6ZV90IGxl bikKewoJcmV0dXJuIHJvY2tjaGlwX3NmY193cml0ZV9maWZvKHNmYywgYnVmLCBsZW4pOwp9Cgpz dGF0aWMgaW5saW5lIGludCByb2NrY2hpcF9zZmNfcGlvX3JlYWQoc3RydWN0IHJvY2tjaGlwX3Nm YyAqc2ZjLCB1X2NoYXIgKmJ1ZiwKCQkJCQlzaXplX3QgbGVuKQp7CglyZXR1cm4gcm9ja2NoaXBf c2ZjX3JlYWRfZmlmbyhzZmMsIGJ1ZiwgbGVuKTsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNf cGlvX3RyYW5zZmVyKHN0cnVjdCByb2NrY2hpcF9zZmNfY2hpcF9wcml2ICpwcml2LAoJCQkJICAg ICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIGxvZmZfdCBmcm9tX3RvLCBzaXplX3QgbGVu LAoJCQkJICAgICB1X2NoYXIgKmJ1ZiwgdTggb3BfdHlwZSkKewoJc3RydWN0IHJvY2tjaGlwX3Nm YyAqc2ZjID0gcHJpdi0+c2ZjOwoJc2l6ZV90IHRyYW5zOwoJaW50IHJldDsKCgl0cmFucyA9IG1p bl90KHNpemVfdCwgU0ZDX01BWF9UUkFOU19CWVRFUywgbGVuKTsKCXJldCA9IHJvY2tjaGlwX3Nm Y19zZXR1cF90cmFuc2Zlcihwcml2LCBvcCwgZnJvbV90bywgdHJhbnMsIG9wX3R5cGUpOwoJaWYg KHJldCA8IDApCgkJcmV0dXJuIHJldDsKCglpZiAob3BfdHlwZSA9PSBTRkNfQ01EX0RJUl9XUikK CQlyZXQgPSByb2NrY2hpcF9zZmNfcGlvX3dyaXRlKHNmYywgYnVmLCB0cmFucyk7CgllbHNlCgkJ cmV0ID0gcm9ja2NoaXBfc2ZjX3Bpb19yZWFkKHNmYywgYnVmLCB0cmFucyk7CgoJcmV0dXJuIHJl dDsKfQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfZG1hX3RyYW5zZmVyKHN0cnVjdCByb2NrY2hp cF9zZmNfY2hpcF9wcml2ICpwcml2LAoJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAq b3AsIGxvZmZfdCBmcm9tX3RvLCBzaXplX3QgbGVuLAoJCQkJICAgICB1X2NoYXIgKmJ1ZiwgdTgg b3BfdHlwZSkKewoJc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjID0gcHJpdi0+c2ZjOwoJc2l6ZV90 IHRyYW5zOwoJaW50IHJldDsKCgl0cmFucyA9IG1pbl90KHNpemVfdCwgU0ZDX01BWF9UUkFOU19C WVRFUywgbGVuKTsKCglpZiAob3BfdHlwZSA9PSBTRkNfQ01EX0RJUl9XUikKCQltZW1jcHkoc2Zj LT5idWZmZXIsIGJ1ZiwgdHJhbnMpOwoKCXJldCA9IHJvY2tjaGlwX3NmY19kb19kbWFfdHJhbnNm ZXIocHJpdiwgb3AsIGZyb21fdG8sIHNmYy0+ZG1hX2J1ZmZlciwKCQkJCQkgICB0cmFucywgb3Bf dHlwZSk7CglpZiAocmV0KSB7CgkJZGV2X3dhcm4oc2ZjLT5kZXYsICJETUEgdGltZW91dFxuIik7 CgkJcmV0dXJuIHJldDsKCX0KCglpZiAob3BfdHlwZSA9PSBTRkNfQ01EX0RJUl9SRCkKCQltZW1j cHkoYnVmLCBzZmMtPmJ1ZmZlciwgdHJhbnMpOwoKCXJldHVybiB0cmFuczsKfQoKc3RhdGljIHNz aXplX3Qgcm9ja2NoaXBfc2ZjX2RvX3JkX3dyKHN0cnVjdCByb2NrY2hpcF9zZmNfY2hpcF9wcml2 ICpwcml2LAoJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIGxvZmZfdCBmcm9t X3RvLCBzaXplX3QgbGVuLAoJCQkJICAgICB1X2NoYXIgKmJ1ZiwgdTMyIG9wX3R5cGUpCnsKCXN0 cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IHByaXYtPnNmYzsKCgkvKiBETUEgY2FuIG9ubHkgaGFu ZGxlIHdvcmQgYWxpZ25lZCB0cmFuc2ZlciBjaHVua3MgKi8KCWlmIChsaWtlbHkoc2ZjLT51c2Vf ZG1hKSAmJiAhKGxlbiAmIDB4MykpCgkJcmV0dXJuIHJvY2tjaGlwX3NmY19kbWFfdHJhbnNmZXIo cHJpdiwgb3AsIGZyb21fdG8sIGxlbiwgYnVmLCBvcF90eXBlKTsKCWVsc2UKCQlyZXR1cm4gcm9j a2NoaXBfc2ZjX3Bpb190cmFuc2Zlcihwcml2LCBvcCwgZnJvbV90bywgbGVuLCBidWYsIG9wX3R5 cGUpOwp9CgpzdGF0aWMgc3NpemVfdCByb2NrY2hpcF9zZmNfcmVhZChzdHJ1Y3Qgcm9ja2NoaXBf c2ZjX2NoaXBfcHJpdiAqcHJpdiwKCQkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCnsK CWxvZmZfdCBmcm9tID0gb3AtPmFkZHIudmFsOwoJc2l6ZV90IGxlbiA9IG9wLT5kYXRhLm5ieXRl czsKCXVfY2hhciAqcmVhZF9idWYgPSBvcC0+ZGF0YS5idWYuaW47CgoJcmV0dXJuIHJvY2tjaGlw X3NmY19kb19yZF93cihwcml2LCBvcCwgZnJvbSwgbGVuLCByZWFkX2J1ZiwgU0ZDX0NNRF9ESVJf UkQpOwp9CgpzdGF0aWMgc3NpemVfdCByb2NrY2hpcF9zZmNfd3JpdGUoc3RydWN0IHJvY2tjaGlw X3NmY19jaGlwX3ByaXYgKnByaXYsCgkJCQkgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkK ewoJbG9mZl90IHRvID0gb3AtPmFkZHIudmFsOwoJc2l6ZV90IGxlbiA9IG9wLT5kYXRhLm5ieXRl czsKCWNvbnN0IHVfY2hhciAqd3JpdGVfYnVmID0gb3AtPmRhdGEuYnVmLm91dDsKCglyZXR1cm4g cm9ja2NoaXBfc2ZjX2RvX3JkX3dyKHByaXYsIG9wLCB0bywgbGVuLCAodV9jaGFyICopd3JpdGVf YnVmLCBTRkNfQ01EX0RJUl9XUik7Cn0KCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX21lbV9wcm9j ZXNzKHN0cnVjdCBzcGlfbWVtICptZW0sIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKewoJ c3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtZW0tPnNw aS0+bWFzdGVyKTsKCXN0cnVjdCByb2NrY2hpcF9zZmNfY2hpcF9wcml2ICpwcml2ID0gJnNmYy0+ Zmxhc2hbbWVtLT5zcGktPmNoaXBfc2VsZWN0XTsKCglpZiAob3AtPmRhdGEuZGlyID09IFNQSV9N RU1fREFUQV9JTiAmJiBvcC0+ZGF0YS5idWYuaW4pIHsKCQlpZiAoIW9wLT5hZGRyLm5ieXRlcykK CQkJcmV0dXJuIHJvY2tjaGlwX3NmY19yZWFkX3JlZyhwcml2LCBvcCk7CgoJCXJldHVybiByb2Nr Y2hpcF9zZmNfcmVhZChwcml2LCBvcCk7Cgl9CgoJaWYgKCFvcC0+YWRkci5uYnl0ZXMgfHwgIW9w LT5kYXRhLmJ1Zi5vdXQpCgkJcmV0dXJuIHJvY2tjaGlwX3NmY193cml0ZV9yZWcocHJpdiwgb3Ap OwoKCXJldHVybiByb2NrY2hpcF9zZmNfd3JpdGUocHJpdiwgb3ApOwp9CgpzdGF0aWMgaW50IHJv Y2tjaGlwX3NmY19leGVjX21lbV9vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBjb25zdCBzdHJ1Y3Qg c3BpX21lbV9vcCAqb3ApCnsKCXN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IHNwaV9tYXN0ZXJf Z2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CglzdHJ1Y3Qgcm9ja2NoaXBfc2ZjX2NoaXBf cHJpdiAqcHJpdiA9ICZzZmMtPmZsYXNoW21lbS0+c3BpLT5jaGlwX3NlbGVjdF07CglpbnQgcmV0 OwoKCXJldCA9IGNsa19zZXRfcmF0ZShzZmMtPmNsaywgcHJpdi0+Y2xrX3JhdGUpOwoJaWYgKHJl dCkKCQlyZXR1cm4gcmV0OwoKCXJldCA9IHJvY2tjaGlwX3NmY19tZW1fcHJvY2VzcyhtZW0sIG9w KTsKCWlmIChyZXQgPCAwKSB7CgkJZGV2X2VycigmbWVtLT5zcGktPmRldiwgIm9wZXJhdGlvbiBm YWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKCQlyZXR1cm4gcmV0OwoJfQoKCXJldHVybiAwOwp9Cgpz dGF0aWMgY29uc3QgY2hhciAqcm9ja2NoaXBfc2ZjX2dldF9uYW1lKHN0cnVjdCBzcGlfbWVtICpt ZW0pCnsKCXN0cnVjdCByb2NrY2hpcF9zZmMgKnNmYyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEo bWVtLT5zcGktPm1hc3Rlcik7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzZmMtPmRldjsKCglyZXR1 cm4gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMuJWQiLCBkZXZfbmFtZShkZXYp LCBtZW0tPnNwaS0+Y2hpcF9zZWxlY3QpOwp9CgpzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250 cm9sbGVyX21lbV9vcHMgcm9ja2NoaXBfc2ZjX21lbV9vcHMgPSB7CgkuZXhlY19vcCA9IHJvY2tj aGlwX3NmY19leGVjX21lbV9vcCwKCS5nZXRfbmFtZSA9IHJvY2tjaGlwX3NmY19nZXRfbmFtZSwK fTsKCnN0YXRpYyBpbnQgcm9ja2NoaXBfc2ZjX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAsCgkJCQkgc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjKQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYg PSBzZmMtPmRldjsKCWludCByZXQ7CgoJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91OChucCwgInJl ZyIsICZzZmMtPmZsYXNoW3NmYy0+bnVtX2NoaXBdLmNzKTsKCWlmIChyZXQpIHsKCQlkZXZfZXJy KGRldiwgIk5vIHJlZyBwcm9wZXJ0eSBmb3IgJXNcbiIsCgkJCW5wLT5mdWxsX25hbWUpOwoJCXJl dHVybiByZXQ7Cgl9CgoJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzcGktbWF4LWZy ZXF1ZW5jeSIsCgkJCQkgICAmc2ZjLT5mbGFzaFtzZmMtPm51bV9jaGlwXS5jbGtfcmF0ZSk7Cglp ZiAocmV0KSB7CgkJZGV2X2VycihkZXYsICJObyBzcGktbWF4LWZyZXF1ZW5jeSBwcm9wZXJ0eSBm b3IgJXNcbiIsCgkJCW5wLT5mdWxsX25hbWUpOwoJCXJldHVybiByZXQ7Cgl9CgoJc2ZjLT5mbGFz aFtzZmMtPm51bV9jaGlwXS5zZmMgPSBzZmM7CglzZmMtPm51bV9jaGlwKys7CglyZXR1cm4gMDsK fQoKc3RhdGljIGludCByb2NrY2hpcF9zZmNfcmVnaXN0ZXJfYWxsKHN0cnVjdCByb2NrY2hpcF9z ZmMgKnNmYykKewoJc3RydWN0IGRldmljZSAqZGV2ID0gc2ZjLT5kZXY7CglzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wOwoJaW50IHJldDsKCglmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShk ZXYtPm9mX25vZGUsIG5wKSB7CgkJcmV0ID0gcm9ja2NoaXBfc2ZjX3JlZ2lzdGVyKG5wLCBzZmMp OwoJCWlmIChyZXQpCgkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGFsbCBjaGlw c1xuIik7CgkJCXJldHVybiByZXQ7CgoJCWlmIChzZmMtPm51bV9jaGlwID49IFNGQ19NQVhfQ0hJ UFNFTEVDVF9OVU0pIHsKCQkJZGV2X3dhcm4oZGV2LCAiRXhjZWVkcyB0aGUgbWF4IGNzIGxpbWl0 YXRpb25cbiIpOwoJCQlicmVhazsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpcnFyZXR1 cm5fdCByb2NrY2hpcF9zZmNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQp7Cglz dHJ1Y3Qgcm9ja2NoaXBfc2ZjICpzZmMgPSBkZXZfaWQ7Cgl1MzIgcmVnOwoKCXJlZyA9IHJlYWRs KHNmYy0+cmVnYmFzZSArIFNGQ19SSVNSKTsKCgkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KCXdyaXRl bF9yZWxheGVkKHJlZywgc2ZjLT5yZWdiYXNlICsgU0ZDX0lDTFIpOwoKCWlmIChyZWcgJiBTRkNf UklTUl9UUkFOX0ZJTklTSCkKCQljb21wbGV0ZSgmc2ZjLT5jcCk7CgoJcmV0dXJuIElSUV9IQU5E TEVEOwp9CgpzdGF0aWMgaW50IHJvY2tjaGlwX3NmY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwoJc3RydWN0IHNw aV9tYXN0ZXIgKm1hc3RlcjsKCXN0cnVjdCByZXNvdXJjZSAqcmVzOwoJc3RydWN0IHJvY2tjaGlw X3NmYyAqc2ZjOwoJaW50IHJldDsKCgltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5k ZXYsIHNpemVvZigqc2ZjKSk7CglpZiAoIW1hc3RlcikgewoJCWRldl9lcnIoJnBkZXYtPmRldiwg InNwaV9hbGxvY19tYXN0ZXIgZmFpbGVkXG4iKTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCgltYXN0 ZXItPm1lbV9vcHMgPSAmcm9ja2NoaXBfc2ZjX21lbV9vcHM7CgltYXN0ZXItPmRldi5vZl9ub2Rl ID0gcGRldi0+ZGV2Lm9mX25vZGU7CgltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9SWF9RVUFEIHwg U1BJX1JYX0RVQUw7CgltYXN0ZXItPm1pbl9zcGVlZF9oeiA9IFNGQ19NSU5fU1BFRURfSFo7Cglt YXN0ZXItPm1heF9zcGVlZF9oeiA9IFNGQ19NQVhfU1BFRURfSFo7CgoJc2ZjID0gc3BpX21hc3Rl cl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwoJc2ZjLT5kZXYgPSBkZXY7CgoJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKCXNmYy0+cmVnYmFzZSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CglpZiAoSVNfRVJSKHNmYy0+cmVnYmFzZSkp CgkJcmV0dXJuIFBUUl9FUlIoc2ZjLT5yZWdiYXNlKTsKCglzZmMtPmNsayA9IGRldm1fY2xrX2dl dCgmcGRldi0+ZGV2LCAic2ZjIik7CglpZiAoSVNfRVJSKHNmYy0+Y2xrKSkgewoJCWRldl9lcnIo JnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgc2ZjIGludGVyZmFjZSBjbGtcbiIpOwoJCXJldHVy biBQVFJfRVJSKHNmYy0+Y2xrKTsKCX0KCglzZmMtPmhjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYt PmRldiwgImFoYiIpOwoJaWYgKElTX0VSUihzZmMtPmhjbGspKSB7CgkJZGV2X2VycigmcGRldi0+ ZGV2LCAiRmFpbGVkIHRvIGdldCBzZmMgYWhiIGNsa1xuIik7CgkJcmV0dXJuIFBUUl9FUlIoc2Zj LT5oY2xrKTsKCX0KCglzZmMtPnVzZV9kbWEgPSAhb2ZfcHJvcGVydHlfcmVhZF9ib29sKHNmYy0+ ZGV2LT5vZl9ub2RlLAoJCQkJCSAgICAgICJyb2NrY2hpcCxzZmMtbm8tZG1hIik7CgoJaWYgKHNm Yy0+dXNlX2RtYSkgewoJCXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFf QklUX01BU0soMzIpKTsKCQlpZiAocmV0KSB7CgkJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byBz ZXQgZG1hIG1hc2tcbiIpOwoJCQlyZXR1cm4gcmV0OwoJCX0KCgkJc2ZjLT5idWZmZXIgPSBkbWFt X2FsbG9jX2NvaGVyZW50KGRldiwgU0ZDX01BWF9UUkFOU19CWVRFUywKCQkJCQkJICAmc2ZjLT5k bWFfYnVmZmVyLAoJCQkJCQkgIEdGUF9LRVJORUwpOwoJCWlmICghc2ZjLT5idWZmZXIpCgkJCXJl dHVybiAtRU5PTUVNOwoJfQoKCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzZmMtPmhjbGspOwoJ aWYgKHJldCkgewoJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgYWhiIGNs a1xuIik7CgkJZ290byBlcnJfaGNsazsKCX0KCglyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc2Zj LT5jbGspOwoJaWYgKHJldCkgewoJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFi bGUgaW50ZXJmYWNlIGNsa1xuIik7CgkJZ290byBlcnJfY2xrOwoJfQoKCS8qIEZpbmQgdGhlIGly cSAqLwoJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKCWlmIChyZXQgPCAwKSB7CgkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHRoZSBpcnFcbiIpOwoJCWdvdG8gZXJyX2lycTsK CX0KCglyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcmV0LCByb2NrY2hpcF9zZmNfaXJxX2hh bmRsZXIsCgkJCSAgICAgICAwLCBwZGV2LT5uYW1lLCBzZmMpOwoJaWYgKHJldCkgewoJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxXG4iKTsKCQlnb3RvIGVycl9pcnE7Cgl9CgoJ c2ZjLT5udW1fY2hpcCA9IDA7CglyZXQgPSByb2NrY2hpcF9zZmNfaW5pdChzZmMpOwoJaWYgKHJl dCkKCQlnb3RvIGVycl9pcnE7CgoJcmV0ID0gcm9ja2NoaXBfc2ZjX3JlZ2lzdGVyX2FsbChzZmMp OwoJaWYgKHJldCkKCQlnb3RvIGVycl9pcnE7CgoJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFz dGVyKGRldiwgbWFzdGVyKTsKCWlmIChyZXQpCgkJZ290byBlcnJfaXJxOwoKCXJldHVybiAwOwoK ZXJyX2lycToKCWNsa19kaXNhYmxlX3VucHJlcGFyZShzZmMtPmNsayk7CmVycl9jbGs6CgljbGtf ZGlzYWJsZV91bnByZXBhcmUoc2ZjLT5oY2xrKTsKZXJyX2hjbGs6CglyZXR1cm4gcmV0Owp9Cgpz dGF0aWMgaW50IHJvY2tjaGlwX3NmY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKewoJc3RydWN0IHJvY2tjaGlwX3NmYyAqc2ZjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CgoJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNmYy0+Y2xrKTsKCWNsa19kaXNhYmxlX3VucHJl cGFyZShzZmMtPmhjbGspOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHJvY2tjaGlwX3NmY19kdF9pZHNbXSA9IHsKCXsgLmNvbXBhdGlibGUgPSAicm9ja2No aXAscmszMDM2LXNmYyJ9LAoJeyAvKiBzZW50aW5lbCAqLyB9Cn07Ck1PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIHJvY2tjaGlwX3NmY19kdF9pZHMpOwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgcm9ja2NoaXBfc2ZjX2RyaXZlciA9IHsKCS5kcml2ZXIgPSB7CgkJLm5hbWUJPSAicm9ja2No aXAtc2ZjIiwKCQkub2ZfbWF0Y2hfdGFibGUgPSByb2NrY2hpcF9zZmNfZHRfaWRzLAoJfSwKCS5w cm9iZQk9IHJvY2tjaGlwX3NmY19wcm9iZSwKCS5yZW1vdmUJPSByb2NrY2hpcF9zZmNfcmVtb3Zl LAp9Owptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJvY2tjaGlwX3NmY19kcml2ZXIpOwoKTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwpNT0RVTEVfREVTQ1JJUFRJT04oIlJvY2tjaGlwIFNlcmlhbCBG bGFzaCBDb250cm9sbGVyIERyaXZlciIpOwpNT0RVTEVfQVVUSE9SKCJTaGF3biBMaW4gPHNoYXdu LmxpbkByb2NrLWNoaXBzLmNvbT4iKTsK ------=_001_NextPart781385088131_=------