From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v4 16/16] drm/panel: Add Sharp LQ101R1SX01 support Date: Tue, 04 Nov 2014 11:41:15 +0100 Message-ID: <5458AD4B.1090908@samsung.com> References: <1415006021-29313-1-git-send-email-thierry.reding@gmail.com> <1415006021-29313-16-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout4.w1.samsung.com (mailout4.w1.samsung.com [210.118.77.14]) by gabe.freedesktop.org (Postfix) with ESMTP id 43FA76E51D for ; Tue, 4 Nov 2014 02:41:22 -0800 (PST) Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NEI003SYGHHL770@mailout4.w1.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 04 Nov 2014 10:44:05 +0000 (GMT) In-reply-to: <1415006021-29313-16-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gMTEvMDMvMjAxNCAxMDoxMyBBTSwgVGhpZXJyeSBSZWRpbmcgd3JvdGU6Cj4gRnJvbTogVGhp ZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KPiAKPiBUaGlzIHBhbmVsIHJlcXVpcmVz IGR1YWwtY2hhbm5lbCBtb2RlLiBUaGUgZGV2aWNlIGFjY2VwdHMgY29tbWFuZC1tb2RlCj4gZGF0 YSBvbiA4IGxhbmVzIGFuZCB3aWxsIHRoZXJlZm9yZSBuZWVkIGEgZHVhbC1jaGFubmVsIERTSSBj b250cm9sbGVyLgo+IFRoZSB0d28gaW50ZXJmYWNlcyB0aGF0IG1ha2UgdXAgdGhpcyBkZXZpY2Ug bmVlZCB0byBiZSBpbnN0YW50aWF0ZWQgaW4KPiB0aGUgY29udHJvbGxlcnMgdGhhdCBnYW5nIHVw IHRvIHByb3ZpZGUgdGhlIGR1YWwtY2hhbm5lbCBEU0kgaG9zdC4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+IC0tLQo+IENoYW5nZXMgaW4g djQ6Cj4gLSB1c2UgbG93IHBvd2VyIG1vZGUgc2luY2UgaGlnaHNwZWVkIG1lc3NhZ2UgdHJhbnNm ZXJzIGRvbid0IHdvcmsKPiAtIGNsYXJpZnkgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIHByb3BlcnRp ZXMgZm9yIGJvdGggRFNJIGxpbmtzCj4gLSBwb3dlciBvZmYgcGFuZWwgd2hlbiAucHJlcGFyZSgp IGZhaWxzCj4gLSBwcm9wZXJseSBkcm9wIHJlZmVyZW5jZSB0byBEU0ktTElOSzIKPiAtIGRvbid0 IGFsbG9jYXRlIG1lbW9yeSBmb3IgRFNJLUxJTksyCj4gLSBwcm9wYWdhdGUgZXJyb3JzIG9uIGZh aWx1cmUKPiAKPiAgLi4uL2JpbmRpbmdzL3BhbmVsL3NoYXJwLGxxMTAxcjFzeDAxLnR4dCAgICAg ICAgICAgfCAgNDkgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgIHwgIDEzICsKPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt c2hhcnAtbHExMDFyMXN4MDEuYyAgICB8IDQ2NCArKysrKysrKysrKysrKysrKysrKysKPiAgNCBm aWxlcyBjaGFuZ2VkLCA1MjcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BhbmVsL3NoYXJwLGxxMTAxcjFzeDAxLnR4 dAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNoYXJw LWxxMTAxcjFzeDAxLmMKPiAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL3BhbmVsL3NoYXJwLGxxMTAxcjFzeDAxLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9wYW5lbC9zaGFycCxscTEwMXIxc3gwMS50eHQKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjUyMmJiOGU0N2UxCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wYW5lbC9zaGFy cCxscTEwMXIxc3gwMS50eHQKPiBAQCAtMCwwICsxLDQ5IEBACj4gK1NoYXJwIE1pY3JvZWxlY3Ry b25pY3MgMTAuMSIgV1FYR0EgVEZUIExDRCBwYW5lbAo+ICsKPiArVGhpcyBwYW5lbCByZXF1aXJl cyBhIGR1YWwtY2hhbm5lbCBEU0kgaG9zdCB0byBvcGVyYXRlLiBJdCBzdXBwb3J0cyB0d28gbW9k ZXM6Cj4gKy0gbGVmdC1yaWdodDogZWFjaCBjaGFubmVsIGRyaXZlcyB0aGUgbGVmdCBvciByaWdo dCBoYWxmIG9mIHRoZSBzY3JlZW4KPiArLSBldmVuLW9kZDogZWFjaCBjaGFubmVsIGRyaXZlcyB0 aGUgZXZlbiBvciBvZGQgbGluZXMgb2YgdGhlIHNjcmVlbgo+ICsKPiArRWFjaCBvZiB0aGUgRFNJ IGNoYW5uZWxzIGNvbnRyb2xzIGEgc2VwYXJhdGUgRFNJIHBlcmlwaGVyYWwuIFRoZSBwZXJpcGhl cmFsCj4gK2RyaXZlbiBieSB0aGUgZmlyc3QgbGluayAoRFNJLUxJTksxKSwgbGVmdCBvciBldmVu LCBpcyBjb25zaWRlcmVkIHRoZSBwcmltYXJ5Cj4gK3BlcmlwaGVyYWwgYW5kIGNvbnRyb2xzIHRo ZSBkZXZpY2UuIFRoZSAnbGluazInIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZQo+ICt0byB0 aGUgcGVyaXBoZXJhbCBkcml2ZW4gYnkgdGhlIHNlY29uZCBsaW5rIChEU0ktTElOSzIsIHJpZ2h0 IG9yIG9kZCkuCj4gKwo+ICtOb3RlIHRoYXQgaW4gdmlkZW8gbW9kZSB0aGUgRFNJLUxJTksxIGlu dGVyZmFjZSBhbHdheXMgcHJvdmlkZXMgdGhlIGxlZnQvZXZlbgo+ICtwaXhlbHMgYW5kIERTSS1M SU5LMiBhbHdheXMgcHJvdmlkZXMgdGhlIHJpZ2h0L29kZCBwaXhlbHMuIEluIGNvbW1hbmQgbW9k ZSBpdAo+ICtpcyBwb3NzaWJsZSB0byBwcm9ncmFtIGVpdGhlciBsaW5rIHRvIGRyaXZlIHRoZSBs ZWZ0L2V2ZW4gb3IgcmlnaHQvb2RkIHBpeGVscwo+ICtidXQgZm9yIHRoZSBzYWtlIG9mIGNvbnNp c3RlbmN5IHRoaXMgYmluZGluZyBhc3N1bWVzIHRoYXQgdGhlIHNhbWUgYXNzaWdubWVudAo+ICtp cyBjaG9zZW4gYXMgZm9yIHZpZGVvIG1vZGUuCj4gKwo+ICtSZXF1aXJlZCBwcm9wZXJ0aWVzOgo+ ICstIGNvbXBhdGlibGU6IHNob3VsZCBiZSAic2hhcnAsbHExMDFyMXN4MDEiCj4gKy0gcmVnOiBE U0kgdmlydHVhbCBjaGFubmVsIG9mIHRoZSBwZXJpcGhlcmFsCj4gKwo+ICtSZXF1aXJlZCBwcm9w ZXJ0aWVzIChmb3IgRFNJLUxJTksxIG9ubHkpOgo+ICstIGxpbmsyOiBwaGFuZGxlIHRvIHRoZSBE U0kgcGVyaXBoZXJhbCBvbiB0aGUgc2Vjb25kYXJ5IGxpbmsuIE5vdGUgdGhhdCB0aGUKPiArICBw cmVzZW5jZSBvZiB0aGlzIHByb3BlcnR5IG1hcmtzIHRoZSBjb250YWluaW5nIG5vZGUgYXMgRFNJ LUxJTksxLgo+ICstIHBvd2VyLXN1cHBseTogcGhhbmRsZSBvZiB0aGUgcmVndWxhdG9yIHRoYXQg cHJvdmlkZXMgdGhlIHN1cHBseSB2b2x0YWdlCj4gKwo+ICtPcHRpb25hbCBwcm9wZXJ0aWVzIChm b3IgRFNJLUxJTksxIG9ubHkpOgo+ICstIGJhY2tsaWdodDogcGhhbmRsZSBvZiB0aGUgYmFja2xp Z2h0IGRldmljZSBhdHRhY2hlZCB0byB0aGUgcGFuZWwKPiArCj4gK0V4YW1wbGU6Cj4gKwo+ICsJ ZHNpQDU0MzAwMDAwIHsKPiArCQlwYW5lbDogcGFuZWxAMCB7Cj4gKwkJCWNvbXBhdGlibGUgPSAi c2hhcnAsbHExMDFyMXN4MDEiOwo+ICsJCQlyZWcgPSA8MD47Cj4gKwo+ICsJCQlsaW5rMiA9IDwm c2Vjb25kYXJ5PjsKPiArCj4gKwkJCXBvd2VyLXN1cHBseSA9IDwuLi4+Owo+ICsJCQliYWNrbGln aHQgPSA8Li4uPjsKPiArCQl9Owo+ICsJfTsKPiArCj4gKwlkc2lANTQ0MDAwMDAgewo+ICsJCXNl Y29uZGFyeTogcGFuZWxAMCB7Cj4gKwkJCWNvbXBhdGlibGUgPSAic2hhcnAsbHExMDFyMXN4MDEi Owo+ICsJCQlyZWcgPSA8MD47Cj4gKwkJfTsKPiArCX07CgpUaGUgYmluZGluZ3MgYWJvdmUgYW5k IHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBjbGVhcmx5IHNob3dzCnRoYXQgdGhlIHNlY29uZGFy eSBub2RlIGlzIGp1c3QgYSBkdW1teSBkc2kgZGV2aWNlLgpIaWRpbmcgdGhpcyBiZWhpbmQgY29u ZGl0aW9uYWxzIGluIGJvdGggZG9jcyBhbmQgY29kZSBkb2VzIG5vdCBsb29rIGdvb2QKdG8gbWUu IE9uIHRoZSBvdGhlciBzaWRlIGhhdmluZyBjb21tb24gZHVtbXkgZHNpIGRyaXZlcgp3b3VsZCBh bGxvdyB0byByZXVzZSBpdCBpbiBvdGhlciBkdWFsLWRzaSBkZXZpY2VzLgpTbyBpbnN0ZWFkIG9m IDJuZCBub2RlIHlvdSB3b3VsZCBoYXZlOgoJZHNpQDU0NDAwMDAwIHsKCQlzZWNvbmRhcnk6IHBh bmVsQDAgewoJCQljb21wYXRpYmxlID0gImRzaS1kdW1teS13aGF0ZXZlciI7CgkJCXJlZyA9IDww PjsKCQl9OwoJfTsKCk9yIGp1c3Q6Cglkc2kyOiBkc2lANTQ0MDAwMDAgewoJfQoKd2l0aCBwaGFu ZGxlIHRvIGRzaTIgaW4gMXN0IG5vZGUsIGluIHN1Y2ggY2FzZSAybmQgZHNpIGRldiB3b3VsZCBi ZQpjcmVhdGVkIGR5bmFtaWNhbGx5IGxpa2Ugd2l0aCBpMmNfbmV3X2R1bW15LgoKQnV0IHRoaXMg aXMgb2YgY291cnNlIGp1c3QgbXkgb3Bpbmlvbi4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPiBpbmRl eCBiZWU5ZjcyYjNhOTMuLjAyNGU5OGVmOGU0ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4g QEAgLTI3LDQgKzI3LDE3IEBAIGNvbmZpZyBEUk1fUEFORUxfUzZFOEFBMAo+ICAJc2VsZWN0IERS TV9NSVBJX0RTSQo+ICAJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCj4gIAo+ICtjb25maWcgRFJN X1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxCj4gKwl0cmlzdGF0ZSAiU2hhcnAgTFExMDFSMVNYMDEg cGFuZWwiCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQo+ICsJ aGVscAo+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBT aGFycCBMUTEwMVIxU1gwMQo+ICsJICBURlQtTENEIG1vZHVsZXMuIFRoZSBwYW5lbCBoYXMgYSAy NTYweDE2MDAgcmVzb2x1dGlvbiBhbmQgdXNlcwo+ICsJICAyNCBiaXQgUkdCIHBlciBwaXhlbC4g SXQgcHJvdmlkZXMgYSBkdWFsIE1JUEkgRFNJIGludGVyZmFjZSB0bwo+ICsJICB0aGUgaG9zdCBh bmQgaGFzIGEgYnVpbHQtaW4gTEVEIGJhY2tsaWdodC4KPiArCj4gKwkgIFRvIGNvbXBpbGUgdGhp cyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKPiArCSAgd2ls bCBiZSBjYWxsZWQgcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEuCj4gKwo+ICBlbmRtZW51Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQo+IGluZGV4IDhiOTI5MjEyZmFkNy4uNGIyYTA0MzA4MDRiIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+IEBAIC0xLDMgKzEsNCBAQAo+ICBvYmotJChDT05GSUdf RFJNX1BBTkVMX1NJTVBMRSkgKz0gcGFuZWwtc2ltcGxlLm8KPiAgb2JqLSQoQ09ORklHX0RSTV9Q QU5FTF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxf UzZFOEFBMCkgKz0gcGFuZWwtczZlOGFhMC5vCj4gK29iai0kKENPTkZJR19EUk1fUEFORUxfU0hB UlBfTFExMDFSMVNYMDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZTBlN2Y1N2U0YTEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNoYXJwLWxxMTAxcjFzeDAx LmMKPiBAQCAtMCwwICsxLDQ2NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTlZJ RElBIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8v Y29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsKPiAr I2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K PiArCj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KPiArCj4gKyNpbmNsdWRlIDxs aW51eC9ob3N0MXguaD4KPiArCj4gK3N0cnVjdCBzaGFycF9wYW5lbCB7Cj4gKwlzdHJ1Y3QgZHJt X3BhbmVsIGJhc2U7Cj4gKwkvKiB0aGUgZGF0YXNoZWV0IHJlZmVycyB0byB0aGVtIGFzIERTSS1M SU5LMSBhbmQgRFNJLUxJTksyICovCj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpsaW5rMTsK PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmxpbmsyOwo+ICsKPiArCXN0cnVjdCBiYWNrbGln aHRfZGV2aWNlICpiYWNrbGlnaHQ7Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7Cj4gKwo+ ICsJYm9vbCBwcmVwYXJlZDsKPiArCWJvb2wgZW5hYmxlZDsKCk5pdHBpY2suCkFzIEkgd3JvdGUg aW4gcmV2aWV3IHRvIHByZXZpb3VzIHZlcnNpb24gaXQgaXMgdXAgdG8gcGFuZWwgY2xpZW50Cih1 c3VhbGx5IGNvbm5lY3RvcikgdG8gY2FsbCBwYW5lbCBjYWxsYmFja3MgcHJvcGVybHksIHdlIHNo b3VsZCBub3QgYWRkCmFkZGl0aW9uYWwgY2hlY2tzIHRvIHBhbmVscy4gSWYgY2FsbCBvcmRlciBp cyBpbmNvcnJlY3QgdGhlbiB0aGUgY2xpZW50CnNob3VsZCBiZSBmaXhlZC4KCj4gKwo+ICsJY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCBzaGFycF9wYW5lbCAqdG9fc2hhcnBfcGFuZWwoc3RydWN0IGRybV9wYW5lbCAq cGFuZWwpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBzaGFycF9w YW5lbCwgYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2hhcnBfcGFuZWxfd3JpdGUoc3Ry dWN0IHNoYXJwX3BhbmVsICpzaGFycCwgdTE2IG9mZnNldCwgdTggdmFsdWUpCj4gK3sKPiArCXU4 IHBheWxvYWRbM10gPSB7IG9mZnNldCA+PiA4LCBvZmZzZXQgJiAweGZmLCB2YWx1ZSB9Owo+ICsJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gc2hhcnAtPmxpbmsxOwo+ICsJc3NpemVfdCBl cnI7Cj4gKwo+ICsJZXJyID0gbWlwaV9kc2lfZ2VuZXJpY193cml0ZShkc2ksIHBheWxvYWQsIHNp emVvZihwYXlsb2FkKSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIoJmRzaS0+ZGV2 LCAiZmFpbGVkIHRvIHdyaXRlICUwMnggdG8gJTA0eDogJWRcbiIsCj4gKwkJCXZhbHVlLCBvZmZz ZXQsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwllcnIgPSBtaXBpX2RzaV9k Y3Nfbm9wKGRzaSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIoJmRzaS0+ZGV2LCAi ZmFpbGVkIHRvIHNlbmQgRENTIG5vcDogJWRcbiIsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiAr CX0KPiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBzaGFycF9wYW5lbF9yZWFkKHN0cnVjdCBz aGFycF9wYW5lbCAqc2hhcnAsCj4gKwkJCQkJICAgdTE2IG9mZnNldCwgdTggKnZhbHVlKQo+ICt7 Cj4gKwlzc2l6ZV90IGVycjsKPiArCj4gKwljcHVfdG9fYmUxNnMoJm9mZnNldCk7Cj4gKwo+ICsJ ZXJyID0gbWlwaV9kc2lfZ2VuZXJpY19yZWFkKHNoYXJwLT5saW5rMSwgJm9mZnNldCwgc2l6ZW9m KG9mZnNldCksCj4gKwkJCQkgICAgdmFsdWUsIHNpemVvZigqdmFsdWUpKTsKPiArCWlmIChlcnIg PCAwKQo+ICsJCWRldl9lcnIoJnNoYXJwLT5saW5rMS0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgZnJv bSAlMDR4OiAlZFxuIiwKPiArCQkJb2Zmc2V0LCBlcnIpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgc2hhcnBfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkKPiArewo+ICsJc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycCA9IHRvX3NoYXJwX3Bh bmVsKHBhbmVsKTsKPiArCj4gKwlpZiAoIXNoYXJwLT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWlmIChzaGFycC0+YmFja2xpZ2h0KSB7Cj4gKwkJc2hhcnAtPmJhY2tsaWdodC0+cHJv cHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047Cj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0 dXMoc2hhcnAtPmJhY2tsaWdodCk7Cj4gKwl9Cj4gKwo+ICsJc2hhcnAtPmVuYWJsZWQgPSBmYWxz ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBzaGFycF9wYW5lbF91 bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBzaGFycF9w YW5lbCAqc2hhcnAgPSB0b19zaGFycF9wYW5lbChwYW5lbCk7Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CWlmICghc2hhcnAtPnByZXBhcmVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVyciA9IG1pcGlf ZHNpX2Rjc19zZXRfZGlzcGxheV9vZmYoc2hhcnAtPmxpbmsxKTsKPiArCWlmIChlcnIgPCAwKQo+ ICsJCWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvZmY6ICVkXG4i LCBlcnIpOwo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9tb2RlKHNoYXJw LT5saW5rMSk7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQlkZXZfZXJyKHBhbmVsLT5kZXYsICJmYWls ZWQgdG8gZW50ZXIgc2xlZXAgbW9kZTogJWRcbiIsIGVycik7Cj4gKwo+ICsJbXNsZWVwKDEyMCk7 Cj4gKwo+ICsJcmVndWxhdG9yX2Rpc2FibGUoc2hhcnAtPnN1cHBseSk7Cj4gKwo+ICsJc2hhcnAt PnByZXBhcmVkID0gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgc2hhcnBfc2V0dXBfc3ltbWV0cmljYWxfc3BsaXQoc3RydWN0IG1pcGlfZHNpX2RldmljZSAq bGVmdCwKPiArCQkJCQkgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqcmlnaHQsCj4gKwkJCQkJIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCWVyciA9IG1pcGlfZHNpX2Rjc19zZXRfY29sdW1uX2FkZHJlc3MobGVmdCwgMCwgbW9kZS0+ aGRpc3BsYXkgLyAyIC0gMSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIoJmxlZnQt PmRldiwgImZhaWxlZCB0byBzZXQgY29sdW1uIGFkZHJlc3M6ICVkXG4iLCBlcnIpOwo+ICsJCXJl dHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gbWlwaV9kc2lfZGNzX3NldF9wYWdlX2FkZHJl c3MobGVmdCwgMCwgbW9kZS0+dmRpc3BsYXkgLSAxKTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJ ZGV2X2VycigmbGVmdC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYWdlIGFkZHJlc3M6ICVkXG4iLCBl cnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gbWlwaV9kc2lfZGNzX3Nl dF9jb2x1bW5fYWRkcmVzcyhyaWdodCwgbW9kZS0+aGRpc3BsYXkgLyAyLAo+ICsJCQkJCSAgICAg IG1vZGUtPmhkaXNwbGF5IC0gMSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIoJnJp Z2h0LT5kZXYsICJmYWlsZWQgdG8gc2V0IGNvbHVtbiBhZGRyZXNzOiAlZFxuIiwgZXJyKTsKPiAr CQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2Rjc19zZXRfcGFnZV9h ZGRyZXNzKHJpZ2h0LCAwLCBtb2RlLT52ZGlzcGxheSAtIDEpOwo+ICsJaWYgKGVyciA8IDApIHsK PiArCQlkZXZfZXJyKCZyaWdodC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYWdlIGFkZHJlc3M6ICVk XG4iLCBlcnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgc2hhcnBfcGFuZWxfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCkKPiArewo+ICsJc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycCA9IHRvX3NoYXJwX3BhbmVs KHBhbmVsKTsKPiArCXU4IGZvcm1hdCA9IE1JUElfRENTX1BJWEVMX0ZNVF8yNEJJVDsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJaWYgKHNoYXJwLT5wcmVwYXJlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4g KwllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHNoYXJwLT5zdXBwbHkpOwo+ICsJaWYgKGVyciA8IDAp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKPiAr Cj4gKwllcnIgPSBtaXBpX2RzaV9kY3Nfc29mdF9yZXNldChzaGFycC0+bGluazEpOwo+ICsJaWYg KGVyciA8IDApIHsKPiArCQlkZXZfZXJyKHBhbmVsLT5kZXYsICJzb2Z0IHJlc2V0IGZhaWxlZDog JWRcbiIsIGVycik7Cj4gKwkJZ290byBwb3dlcm9mZjsKPiArCX0KPiArCj4gKwltc2xlZXAoMTIw KTsKPiArCj4gKwllcnIgPSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKHNoYXJwLT5saW5r MSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0 byBleGl0IHNsZWVwIG1vZGU6ICVkXG4iLCBlcnIpOwo+ICsJCWdvdG8gcG93ZXJvZmY7Cj4gKwl9 Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBNSVBJIERDUyBzcGVjaWZpY2F0aW9uIG1hbmRhdGVzIHRo aXMgZGVsYXkgb25seSBiZXR3ZWVuIHRoZQo+ICsJICogZXhpdF9zbGVlcF9tb2RlIGFuZCBlbnRl cl9zbGVlcF9tb2RlIGNvbW1hbmRzLCBzbyBpdCBpc24ndCBzdHJpY3RseQo+ICsJICogbmVjZXNz YXJ5IGhlcmUuCj4gKwkgKi8KPiArCS8qCj4gKwltc2xlZXAoMTIwKTsKPiArCSovCj4gKwo+ICsJ Lyogc2V0IGxlZnQtcmlnaHQgbW9kZSAqLwo+ICsJZXJyID0gc2hhcnBfcGFuZWxfd3JpdGUoc2hh cnAsIDB4MTAwMCwgMHgyYSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIocGFuZWwt PmRldiwgImZhaWxlZCB0byBzZXQgbGVmdC1yaWdodCBtb2RlOiAlZFxuIiwgZXJyKTsKPiArCQln b3RvIHBvd2Vyb2ZmOwo+ICsJfQo+ICsKPiArCS8qIGVuYWJsZSBjb21tYW5kIG1vZGUgKi8KPiAr CWVyciA9IHNoYXJwX3BhbmVsX3dyaXRlKHNoYXJwLCAweDEwMDEsIDB4MDEpOwo+ICsJaWYgKGVy ciA8IDApIHsKPiArCQlkZXZfZXJyKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNvbW1h bmQgbW9kZTogJWRcbiIsIGVycik7Cj4gKwkJZ290byBwb3dlcm9mZjsKPiArCX0KPiArCj4gKwll cnIgPSBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVsX2Zvcm1hdChzaGFycC0+bGluazEsIGZvcm1hdCk7 Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBz ZXQgcGl4ZWwgZm9ybWF0OiAlZFxuIiwgZXJyKTsKPiArCQlnb3RvIHBvd2Vyb2ZmOwo+ICsJfQo+ ICsKPiArCS8qCj4gKwkgKiBUT0RPOiBUaGUgZGV2aWNlIHN1cHBvcnRzIGJvdGggbGVmdC1yaWdo dCBhbmQgZXZlbi1vZGQgc3BsaXQKPiArCSAqIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhpcyBkcml2 ZXIgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgdGhlIGxlZnQtCj4gKwkgKiByaWdodCBzcGxpdC4g VG8gc3VwcG9ydCBhIGRpZmZlcmVudCBtb2RlIGEgbWVjaGFuaXNtIG5lZWRzIHRvIGJlCj4gKwkg KiBwdXQgaW4gcGxhY2UgdG8gY29tbXVuaWNhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayB0byB0 aGUgRFNJIGhvc3QKPiArCSAqIGNvbnRyb2xsZXIuCj4gKwkgKi8KPiArCWVyciA9IHNoYXJwX3Nl dHVwX3N5bW1ldHJpY2FsX3NwbGl0KHNoYXJwLT5saW5rMSwgc2hhcnAtPmxpbmsyLAo+ICsJCQkJ CSAgICBzaGFycC0+bW9kZSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRldl9lcnIocGFuZWwt PmRldiwgImZhaWxlZCB0byBzZXQgdXAgc3ltbWV0cmljYWwgc3BsaXQ6ICVkXG4iLAo+ICsJCQll cnIpOwo+ICsJCWdvdG8gcG93ZXJvZmY7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gbWlwaV9kc2lfZGNz X3NldF9kaXNwbGF5X29uKHNoYXJwLT5saW5rMSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCWRl dl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRcbiIsIGVycik7 Cj4gKwkJZ290byBwb3dlcm9mZjsKPiArCX0KPiArCj4gKwlzaGFycC0+cHJlcGFyZWQgPSB0cnVl Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcG93ZXJvZmY6Cj4gKwlyZWd1bGF0b3JfZGlzYWJs ZShzaGFycC0+c3VwcGx5KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg c2hhcnBfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1 Y3Qgc2hhcnBfcGFuZWwgKnNoYXJwID0gdG9fc2hhcnBfcGFuZWwocGFuZWwpOwo+ICsKPiArCWlm IChzaGFycC0+ZW5hYmxlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoc2hhcnAtPmJhY2ts aWdodCkgewo+ICsJCXNoYXJwLT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5C TEFOSzsKPiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzaGFycC0+YmFja2xpZ2h0KTsKPiAr CX0KPiArCj4gKwlzaGFycC0+ZW5hYmxlZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkZWZhdWx0X21vZGUg PSB7Cj4gKwkuY2xvY2sgPSAyNzgwMDAsCj4gKwkuaGRpc3BsYXkgPSAyNTYwLAo+ICsJLmhzeW5j X3N0YXJ0ID0gMjU2MCArIDEyOCwKPiArCS5oc3luY19lbmQgPSAyNTYwICsgMTI4ICsgNjQsCj4g KwkuaHRvdGFsID0gMjU2MCArIDEyOCArIDY0ICsgNjQsCj4gKwkudmRpc3BsYXkgPSAxNjAwLAo+ ICsJLnZzeW5jX3N0YXJ0ID0gMTYwMCArIDQsCj4gKwkudnN5bmNfZW5kID0gMTYwMCArIDQgKyA4 LAo+ICsJLnZ0b3RhbCA9IDE2MDAgKyA0ICsgOCArIDMyLAo+ICsJLnZyZWZyZXNoID0gNjAsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHNoYXJwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwo+ ICsJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmZGVmYXVsdF9tb2RlKTsK PiArCWlmICghbW9kZSkgewo+ICsJCWRldl9lcnIocGFuZWwtPmRybS0+ZGV2LCAiZmFpbGVkIHRv IGFkZCBtb2RlICV1eCV1eEAldVxuIiwKPiArCQkJZGVmYXVsdF9tb2RlLmhkaXNwbGF5LCBkZWZh dWx0X21vZGUudmRpc3BsYXksCj4gKwkJCWRlZmF1bHRfbW9kZS52cmVmcmVzaCk7Cj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4gKwo+ ICsJZHJtX21vZGVfcHJvYmVkX2FkZChwYW5lbC0+Y29ubmVjdG9yLCBtb2RlKTsKPiArCj4gKwlw YW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSAyMTc7Cj4gKwlwYW5lbC0+ Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gMTM2Owo+ICsKPiArCXJldHVybiAx Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBzaGFycF9w YW5lbF9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gc2hhcnBfcGFuZWxfZGlzYWJsZSwKPiArCS51 bnByZXBhcmUgPSBzaGFycF9wYW5lbF91bnByZXBhcmUsCj4gKwkucHJlcGFyZSA9IHNoYXJwX3Bh bmVsX3ByZXBhcmUsCj4gKwkuZW5hYmxlID0gc2hhcnBfcGFuZWxfZW5hYmxlLAo+ICsJLmdldF9t b2RlcyA9IHNoYXJwX3BhbmVsX2dldF9tb2RlcywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNoYXJwX29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxl ID0gInNoYXJwLGxxMTAxcjFzeDAxIiwgfSwKPiArCXsgfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBzaGFycF9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgaW50IHNoYXJwX3BhbmVs X2FkZChzdHJ1Y3Qgc2hhcnBfcGFuZWwgKnNoYXJwKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wOwo+ICsJaW50IGVycjsKPiArCj4gKwlzaGFycC0+bW9kZSA9ICZkZWZhdWx0X21vZGU7 Cj4gKwo+ICsJc2hhcnAtPnN1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldCgmc2hhcnAtPmxpbmsx LT5kZXYsICJwb3dlciIpOwo+ICsJaWYgKElTX0VSUihzaGFycC0+c3VwcGx5KSkKPiArCQlyZXR1 cm4gUFRSX0VSUihzaGFycC0+c3VwcGx5KTsKPiArCj4gKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUo c2hhcnAtPmxpbmsxLT5kZXYub2Zfbm9kZSwgImJhY2tsaWdodCIsIDApOwo+ICsJaWYgKG5wKSB7 Cj4gKwkJc2hhcnAtPmJhY2tsaWdodCA9IG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUobnApOwo+ ICsJCW9mX25vZGVfcHV0KG5wKTsKPiArCj4gKwkJaWYgKCFzaGFycC0+YmFja2xpZ2h0KQo+ICsJ CQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCj4gKwlkcm1fcGFuZWxfaW5pdCgmc2hh cnAtPmJhc2UpOwo+ICsJc2hhcnAtPmJhc2UuZnVuY3MgPSAmc2hhcnBfcGFuZWxfZnVuY3M7Cj4g KwlzaGFycC0+YmFzZS5kZXYgPSAmc2hhcnAtPmxpbmsxLT5kZXY7Cj4gKwo+ICsJZXJyID0gZHJt X3BhbmVsX2FkZCgmc2hhcnAtPmJhc2UpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJZ290byBwdXRf YmFja2xpZ2h0Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcHV0X2JhY2tsaWdodDoKPiArCWlm IChzaGFycC0+YmFja2xpZ2h0KQo+ICsJCXB1dF9kZXZpY2UoJnNoYXJwLT5iYWNrbGlnaHQtPmRl dik7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2hhcnBfcGFu ZWxfZGVsKHN0cnVjdCBzaGFycF9wYW5lbCAqc2hhcnApCj4gK3sKPiArCWlmIChzaGFycC0+YmFz ZS5kZXYpCj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmc2hhcnAtPmJhc2UpOwo+ICsKPiArCWlmIChz aGFycC0+YmFja2xpZ2h0KQo+ICsJCXB1dF9kZXZpY2UoJnNoYXJwLT5iYWNrbGlnaHQtPmRldik7 Cj4gKwo+ICsJaWYgKHNoYXJwLT5saW5rMikKPiArCQlwdXRfZGV2aWNlKCZzaGFycC0+bGluazIt PmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2hhcnBfcGFuZWxfcHJvYmUoc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpzZWNv bmRhcnkgPSBOVUxMOwo+ICsJc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycDsKPiArCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnA7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWRzaS0+bGFuZXMgPSA0Owo+ICsJ ZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+ICsJZHNpLT5tb2RlX2ZsYWdzID0g TUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJLyogRmluZCBEU0ktTElOSzEgKi8KPiArCW5wID0g b2ZfcGFyc2VfcGhhbmRsZShkc2ktPmRldi5vZl9ub2RlLCAibGluazIiLCAwKTsKPiArCWlmIChu cCkgewo+ICsJCXNlY29uZGFyeSA9IG9mX2ZpbmRfbWlwaV9kc2lfZGV2aWNlX2J5X25vZGUobnAp Owo+ICsJCW9mX25vZGVfcHV0KG5wKTsKPiArCj4gKwkJaWYgKCFzZWNvbmRhcnkpCj4gKwkJCXJl dHVybiAtRVBST0JFX0RFRkVSOwo+ICsJfQo+ICsKPiArCS8qIHJlZ2lzdGVyIGEgcGFuZWwgZm9y IG9ubHkgdGhlIERTSS1MSU5LMSBpbnRlcmZhY2UgKi8KPiArCWlmIChzZWNvbmRhcnkpIHsKPiAr CQlzaGFycCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYsIHNpemVvZigqc2hhcnApLCBHRlBfS0VS TkVMKTsKPiArCQlpZiAoIXNoYXJwKSB7Cj4gKwkJCXB1dF9kZXZpY2UoJnNlY29uZGFyeS0+ZGV2 KTsKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJfQo+ICsKPiArCQltaXBpX2RzaV9zZXRfZHJ2 ZGF0YShkc2ksIHNoYXJwKTsKPiArCj4gKwkJc2hhcnAtPmxpbmsyID0gc2Vjb25kYXJ5Owo+ICsJ CXNoYXJwLT5saW5rMSA9IGRzaTsKPiArCj4gKwkJZXJyID0gc2hhcnBfcGFuZWxfYWRkKHNoYXJw KTsKPiArCQlpZiAoZXJyIDwgMCkgewo+ICsJCQlwdXRfZGV2aWNlKCZzZWNvbmRhcnktPmRldik7 Cj4gKwkJCXJldHVybiBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2F0 dGFjaChkc2kpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlpZiAoc2Vjb25kYXJ5KQo+ICsJCQlz aGFycF9wYW5lbF9kZWwoc2hhcnApOwo+ICsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNoYXJwX3BhbmVsX3JlbW92ZShzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4gK3sKPiArCXN0cnVjdCBzaGFycF9wYW5lbCAqc2hh cnAgPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBv bmx5IGRldGFjaCBmcm9tIGhvc3QgZm9yIHRoZSBEU0ktTElOSzIgaW50ZXJmYWNlICovCj4gKwlp ZiAoIXNoYXJwKSB7Cj4gKwkJbWlwaV9kc2lfZGV0YWNoKGRzaSk7CgpRdW90YXRpb24gZnJvbSBw cmV2aW91cyByZXZpZXc6Cgo+PiBUaGVyZSBpcyBubyBsb2NraW5nIG1lY2hhbmlzbSBoZXJlLCBz byBpdCBpcyBwb3NzaWJsZSB0aGF0Cj4+IGV2ZXJ5dGhpbmcgY2FuIGNyYXNoIGlmIHNvbWVvbmUg dW5iaW5kIGRyaXZlciBmcm9tIExJTksyIGFuZCB0aGVuIHRyeSB0bwo+PiBlbmFibGUgdGhlIHBh bmVsLgo+IAo+IEkgZG9uJ3QgdGhpbmsgc28uIFNpbmNlIHdlJ3JlIG5vdCBkb2luZyBhbnl0aGlu ZyB3aXRoIHRoZSBEU0ktTElOSzIKPiBkZXZpY2UgYW55bW9yZSBpdCdzIGlycmVsZXZhbnQgd2hl dGhlciBpdCBpcyBib3VuZCB0byB0aGUgZHJpdmVyIG9yCj4gbm90Lgo+IAoKUGxlYXNlIGNvbnNp ZGVyIGZvbGxvd2luZyBzY2VuYXJpbzoKMS4gcGFuZWwgbGluazIgaXMgcHJvYmVkCjIuIHBhbmVs IGxpbmsxIGlzIHByb2JlZAozLiBwYW5lbCBsaW5rMiBpcyB1bmJvdW5kIChmb3IgZXhhbXBsZSBi eTogZWNobyBsaW5rMgo+L3N5cy9idXMvZHNpL2RyaXZlcnMvKmxxMTAxKi91bmJpbmQpCjQuIGRy bSBpcyBib3VuZDoKICAgLSBkdXJpbmcgc2hhcnBfc2V0dXBfc3ltbWV0cmljYWxfc3BsaXQgeW91 IHdpbGwgY2FsbCB0cmFuc2ZlcgogICAgIGJ1dCB0aGVyZSBpcyBubyBkZXZpY2UgYXR0YWNoZWQg dG8gZHNpMi4KCk1heWJlIGl0IHdpbGwgbm90IGNhdXNlIGFueSB0cm91YmxlcyBidXQgaXQgc2Vl bXMgaW5jb3JyZWN0LgoKSSBndWVzcyBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byBkbyBkZXZpY2Vf bG9jayBhbmQgY2hlY2sgaWYgZGV2aWNlIGlzCmJvdW5kIGV2ZXJ5IHRpbWUgeW91IHdhbnQgdG8g YWNjZXNzIGxpbmsyIGRldmljZS4KCgo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWVyciA9 IHNoYXJwX3BhbmVsX2Rpc2FibGUoJnNoYXJwLT5iYXNlKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJ CWRldl9lcnIoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgcGFuZWw6ICVkXG4iLCBlcnIp Owo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2RldGFjaChkc2kpOwo+ICsJaWYgKGVyciA8IDApCj4g KwkJZGV2X2VycigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVk XG4iLCBlcnIpOwo+ICsKPiArCWRybV9wYW5lbF9kZXRhY2goJnNoYXJwLT5iYXNlKTsKPiArCXNo YXJwX3BhbmVsX2RlbChzaGFycCk7CgpZb3UgaGF2ZSBmb2xsb3dpbmcgZmxvdzoKCnNoYXJwX3By b2JlOgoJZHJtX3BhbmVsX2FkZAoJZHNpX2F0dGFjaAoKc2hhcnBfcmVtb3ZlOgoJZHJtX3BhbmVs X2Rpc2FibGUKCWRzaV9kZXRhY2gKCWRybV9wYW5lbF9kZXRhY2gKCWRybV9wYW5lbF9kZWwKClNv IHBhbmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgYnkgY29ubmVjdG9yCmJ1dCBwYW5lbCBkZS1p bml0aWFsaXphdGlvbiBpcyBkb25lIGJ5IHRoZSBwYW5lbCBpdHNlbGYsCm9uIHRoZSBvdGhlciBz aWRlIGNvbm5lY3RvciBjYW4gYWxzbyBkaXNhYmxlL2RldGFjaCB0aGUgcGFuZWwuClNvIGl0IHNl ZW1zIHRoYXQgZHJtX3BhbmVsIHJlc291cmNlIG93bmVyc2hpcCBpcyBzcGxpdCBiZXR3ZWVuCnRo ZSBwYW5lbCBhbmQgdGhlIGNvbm5lY3Rvci4gSXQgc2VlbXMgcmFjeSwgdW5sZXNzIHlvdSBwcm92 aWRlCmFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMuCkFuZCBpbmRlZWQgdGhl cmUgYXJlIHJhY2VzIGhlcmUsIGZvciBleGFtcGxlIHRoZXJlIGFyZSB0d28gcHJvY2Vzc2VzOgot ICgxKSBjb25uZWN0b3IgY2FsbHMgc2hhcnBfcHJlcGFyZSwgaW4gdGhlIG1pZGRsZSBvZgpzaGFy cF9zZXR1cF9zeW1tZXRyaWNhbF9zcGxpdCBwcm9jZXNzIGdvZXMgdG8gc2xlZXAsCi0gKDIpIHNo YXJwX3BhbmVsX3JlbW92ZSBpcyBjYWxsZWQgZHVlIHRvIHVuYmluZCwgb3IgbW9kdWxlIHJlbW92 YWwsCnNoYXJwX2Rpc2FibGUgaXMgY2FsbGVkLAotICgxKSBwcm9jZXNzIHdha2VzIHVwLCBpdCB0 cmllcyB0byBjb250aW51ZQpzaGFycF9zZXR1cF9zeW1tZXRyaWNhbF9zcGxpdCwgcmVzdWx0cyBh cmUgdW5wcmVkaWN0YWJsZS4KCklmIHlvdSBsZWF2ZSBvd25lcnNoaXAgb2YgZHJtX3BhbmVsIHRv IGNvbm5lY3RvciB5b3UgY2FuIHJldXNlCnN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIG9mIGNv bm5lY3Rvci9kcm0gaW5zaWRlIGNvbm5lY3Rvci4gT3RoZXJ3aXNlCnlvdSB3aWxsIG5lZWQgdG8g YWRkIGFub3RoZXIgbG9ja3MgaW4gZHJtX3BhbmVsLgoKWW91IGNhbiBsb29rIGF0IGV4eW5vc19k cm1fZHNpLmMgY29kZSwgZXNwZWNpYWxseToKLSBleHlub3NfZHNpX2RldGVjdCwKLSBleHlub3Nf ZHNpX2hvc3RfYXR0YWNoLAotIGV4eW5vc19kc2lfaG9zdF9kZXRhY2gsCgphbmQgdXNhZ2Ugb2Yg ZHNpLT5wYW5lbF9ub2RlIGFuZCBkc2ktPnBhbmVsIHdpdGggZHJtIHN5bmNocm9uaXphdGlvbiB2 aWEKZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50LgoKUmVnYXJkcwpBbmRyemVqCgoKCgo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaGFycF9wYW5lbF9zaHV0ZG93bihz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4gK3sKPiArCXN0cnVjdCBzaGFycF9wYW5lbCAq c2hhcnAgPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ICsKPiArCS8qIG5vdGhpbmcgdG8g ZG8gZm9yIERTSS1MSU5LMiAqLwo+ICsJaWYgKCFzaGFycCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ c2hhcnBfcGFuZWxfZGlzYWJsZSgmc2hhcnAtPmJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IG1pcGlfZHNpX2RyaXZlciBzaGFycF9wYW5lbF9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyID0g ewo+ICsJCS5uYW1lID0gInBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxIiwKPiArCQkub2ZfbWF0Y2hf dGFibGUgPSBzaGFycF9vZl9tYXRjaCwKPiArCX0sCj4gKwkucHJvYmUgPSBzaGFycF9wYW5lbF9w cm9iZSwKPiArCS5yZW1vdmUgPSBzaGFycF9wYW5lbF9yZW1vdmUsCj4gKwkuc2h1dGRvd24gPSBz aGFycF9wYW5lbF9zaHV0ZG93biwKPiArfTsKPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcihzaGFy cF9wYW5lbF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiVGhpZXJyeSBSZWRpbmcgPHRy ZWRpbmdAbnZpZGlhLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMUTEwMVIx U1gwMSBwYW5lbCBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK