From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [PATCH v2 2/3] drm/arm: Add support for Mali Display Processors Date: Tue, 24 May 2016 10:43:28 +0100 Message-ID: <20160524094328.GO23566@e106497-lin.cambridge.arm.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Emil Velikov Cc: Mark Rutland , devicetree , Pawel Moll , LKML , DRI devel , Rob Herring List-Id: devicetree@vger.kernel.org T24gVHVlLCBNYXkgMjQsIDIwMTYgYXQgMDE6MDE6MzNBTSArMDEwMCwgRW1pbCBWZWxpa292IHdy b3RlOgo+IEhpIExpdml1LAoKSGkgRW1pbCwKClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHRha2lu ZyB5b3VyIHRpbWUgdG8gcmV2aWV3IHRoaXMuCgo+IAo+IEh1bWJsZSByZXF1ZXN0OiBGb3IgdGhl IGZ1dHVyZSBwbGVhc2Ugc3BsaXQgdGhpbmdzIGludG8gbWFuYWdlYWJsZQo+IGh1bmtzLiBJIGRv dWJ0IHlvdSB3cm90ZSB0aGUgd2hvbGUgdGhpbmcgaW4gb25lIGdvLCByaWdodCA/CgpBY3R1YWxs eSwgSSBkaWQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gZXhpc3RpbmcgTWFsaSBEUCBkcml2ZXIgKEdQ TCBldmVuKSBbMV0KdGhhdCB0YXJnZXRzIEFERi4gVGhpcyBpcyB0aGUgS01TIHZlcnNpb24gYW5k IGEgcmV3cml0ZSBvZiB0aGF0IGRyaXZlci4KClsxXSBodHRwOi8vbWFsaWRldmVsb3Blci5hcm0u Y29tL3Jlc291cmNlcy9kcml2ZXJzL29wZW4tc291cmNlLW1hbGktZHAtYWRmLWtlcm5lbC1kZXZp Y2UtZHJpdmVycy8KCj4gCj4gQXQgdGhlIHZlcnkgbWluaW11bSB5b3UgY291bGQgaGF2ZSBpbnRy b2R1Y2VkIERQNTAwIHN1cHBvcnQgaW5pdGlhbGx5Cj4gYW5kIHRoZW4gRFA1NTAgYW5kIERQNjUw IGFzIGZvbGxvdyB1cCBjb21taXRzLgoKSSd2ZSB0cmllZCB0byBtaW5pbWlzZSB0aGUgYW1vdW50 IG9mIGNvZGUgbmVlZGVkIHRvIHN1cHBvcnQgZGlmZmVyZW50IHZlcnNpb25zCm9mIHRoZSBoYXJk d2FyZSwgYnV0IEkgY2Fubm90IGhpZGUgdGhlIGZhY3QgdGhhdCBlYWNoIHZlcnNpb24gYmVoYXZl cyBkaWZmZXJlbnRseS4KSWYgSSBoYWQgaW50cm9kdWNlZCBvbmx5IERQNTAwIHN1cHBvcnQgd2l0 aCBhbGwgdGhlIHNjYWZmb2xkaW5nIGluIHBsYWNlIHlvdQoob3Igb3RoZXJzKSB3b3VsZCd2ZSBy aWdodGx5IHF1ZXN0aW9uZWQgdGhlIG5lZWQgZm9yIGFsbCB0aGUgc3RydWN0dXJlcyB3aGVuIG9u bHkKb25lIGhhcmR3YXJlIHZlcnNpb24gd2FzIHN1cHBvcnRlZC4gQXQgbGVhc3QgdGhpcyB3YXkg aXQgYmVjb21lcyBjbGVhciB3aHkgc29tZQpzdHJ1Y3R1cmVzIGFyZSBuZWVkZWQuIEl0IGRvZXNu J3QgbWFrZSByZXZpZXdpbmcgdGhlIGNvZGUgZWFzaWVyIHRob3VnaCwgYW5kIEkKZG8gYXBwb2xv Z2lzZSBmb3IgdGhhdCwgYnV0IEkgaG9wZSBpdCBpcyBnb2luZyB0byBiZSBhIG9uZSBvZmYgb2Nj dXJlbmNlLgoKPiAKPiBPbiAyNSBBcHJpbCAyMDE2IGF0IDE1OjE5LCBMaXZpdSBEdWRhdSA8TGl2 aXUuRHVkYXVAYXJtLmNvbT4gd3JvdGU6Cj4gCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiA+IEBAIC0wLDAgKzEsMjU5IEBACj4g Cj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3Rv X21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gPiArICAgICAgIHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4gKyAgICAgICBzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ ID4gKwo+ID4gKyAgICAgICBkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZSgmY3J0Yy0+c3Rh dGUtPmFkanVzdGVkX21vZGUsICZ2bSk7Cj4gPiArCj4gPiArICAgICAgIGNsa19wcmVwYXJlX2Vu YWJsZShod2Rldi0+cHhsY2xrKTsKPiA+ICsKPiA+ICsgICAgICAgLyogbWNsayBuZWVkcyB0byBi ZSBzZXQgdG8gdGhlIHNhbWUgb3IgaGlnaGVyIHJhdGUgdGhhbiBweGxjbGsgKi8KPiA+ICsgICAg ICAgY2xrX3NldF9yYXRlKGh3ZGV2LT5tY2xrLCBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5j cnRjX2Nsb2NrICogMTAwMCk7Cj4gPiArICAgICAgIGNsa19zZXRfcmF0ZShod2Rldi0+cHhsY2xr LCBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrICogMTAwMCk7Cj4gPiArCj4g PiArICAgICAgIGh3ZGV2LT5tb2Rlc2V0KGh3ZGV2LCAmdm0pOwo+ID4gKyAgICAgICBod2Rldi0+ bGVhdmVfY29uZmlnX21vZGUoaHdkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBt YWxpZHBfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArICAg ICAgIHN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0 Yyk7Cj4gPiArICAgICAgIHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ ZGV2Owo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAgICAgICAgKiBhdm9pZCBkaXNhYmxpbmcg YWxyZWFkeSBkaXNhYmxlZCBjbG9ja3MgYW5kIGhhcmR3YXJlCj4gPiArICAgICAgICAqIChhcyBp cyB0aGUgY2FzZSBhdCBkZXZpY2UgcHJvYmUgdGltZSkKPiA+ICsgICAgICAgICovCj4gSWRlYWxs eSBvbmUgc2hvdWxkIGxvd2VyIHRoZSBweGxjbGssIGNvcnJlY3QgPwoKQWN0dWFsbHkgdGhlIHB4 bGNsayBpbiB0aGUgbWlzc2luZyAiZWxzZSIgYnJhbmNoIGlzIGFscmVhZHkgZGlzYWJsZWQuIFlv dSBtaWdodCBoYXZlCmFuIGV4cGxhbmF0aW9uIGZvciB0aGUgYmVoYXZpb3VyLCBidXQgd2hlbiBE Uk0gaW5pdGlhbGlzZXMgYSBkcml2ZXIgaXQgd2lsbCBjYWxsIHRoZQpjcnRjJ3MgLT5kaXNhYmxl KCkgaG9vayBkdXJpbmcgdGhlIG1vZGVzZXQuIEluIE1hbGkgRFAncyBjYXNlLCB3ZSBzdGFydCB3 aXRoIHRoZSBweGxjbGsKZGlzYWJsZWQgYW5kIGNhbGxpbmcgY2xrX2Rpc2FibGVfdW5wcmVwYXJl KCkgdW5jb25kaXRpb25hbGx5IGhlcmUgZ2l2ZXMgYSBodWdlIFdBUk4gZHVtcAppbiB0aGUgZG1l c2cuCgo+IAo+ID4gKyAgICAgICBpZiAoY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgewo+ID4gKyAgICAg ICAgICAgICAgIGh3ZGV2LT5lbnRlcl9jb25maWdfbW9kZShod2Rldik7Cj4gPiArICAgICAgICAg ICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5weGxjbGspOwo+ID4gKyAgICAgICB9 Cj4gPiArfQo+ID4gKwo+IAo+IAo+ID4gK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsgICAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFy eSA9IE5VTEwsICpwbGFuZTsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiBZb3Ugd2FudCBt YWxpZHBfZGVfcGxhbmVzX2luaXQoKSBpbiBoZXJlLgo+IAo+ID4gKyAgICAgICBkcm1fZm9yX2Vh Y2hfcGxhbmUocGxhbmUsIGRybSkgewo+ID4gKyAgICAgICAgICAgICAgIGlmIChwbGFuZS0+dHlw ZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBwcmltYXJ5ID0gcGxhbmU7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKCFw cmltYXJ5KSB7Cj4gPiArICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJubyBwcmltYXJ5IHBsYW5l IGZvdW5kXG4iKTsKPiAuLi4gYW5kIF9kZXN0cm95KCkgaGVyZS4KCkkgc2VlIHlvdXIgcG9pbnQu IEkgd2lsbCByZS1vcmdhbmlzZSB0aGUgY2FsbHMuCgo+IAo+IAo+ID4gLS0tIC9kZXYvbnVsbAo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMKPiAKPiA+ICtzdGF0aWMg aW50IG1hbGlkcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKyAgICAg ICBpbnQgcmV0Owo+ID4gKyAgICAgICBzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5k ZXZfcHJpdmF0ZTsKPiA+ICsgICAgICAgc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0g bWFsaWRwLT5kZXY7Cj4gPiArCj4gPiArICAgICAgIGRybV9tb2RlX2NvbmZpZ19pbml0KGRybSk7 Cj4gPiArCj4gPiArICAgICAgIGRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gaHdkZXYtPm1p bl9saW5lX3NpemU7Cj4gPiArICAgICAgIGRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IGh3 ZGV2LT5taW5fbGluZV9zaXplOwo+ID4gKyAgICAgICBkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0 aCA9IGh3ZGV2LT5tYXhfbGluZV9zaXplOwo+ID4gKyAgICAgICBkcm0tPm1vZGVfY29uZmlnLm1h eF9oZWlnaHQgPSBod2Rldi0+bWF4X2xpbmVfc2l6ZTsKPiA+ICsgICAgICAgZHJtLT5tb2RlX2Nv bmZpZy5mdW5jcyA9ICZtYWxpZHBfbW9kZV9jb25maWdfZnVuY3M7Cj4gPiArCj4gPiArICAgICAg IHJldCA9IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChkcm0pOwo+IE1vdmUgdGhpcyBpbiBtYWxpZHBf Y3J0Y19pbml0KCkgLi4uCj4gCj4gPiArICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gPiArICAgICAg ICAgICAgICAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGlzZSBwbGFuZXNcbiIpOwo+ID4g KyAgICAgICAgICAgICAgIGdvdG8gcGxhbmVfaW5pdF9mYWlsOwo+ID4gKyAgICAgICB9Cj4gPiAr Cj4gPiArICAgICAgIHJldCA9IG1hbGlkcF9jcnRjX2luaXQoZHJtKTsKPiA+ICsgICAgICAgaWYg KHJldCkgewo+ID4gKyAgICAgICAgICAgICAgIERSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxp c2UgQ1JUQ1xuIik7Cj4gPiArICAgICAgICAgICAgICAgZ290byBjcnRjX2luaXRfZmFpbDsKPiA+ ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICtjcnRjX2lu aXRfZmFpbDoKPiA+ICsgICAgICAgbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gLi4u IGFuZCBkcm9wIHRoaXMgPwoKV2lsbCBkby4KCj4gCj4gPiArcGxhbmVfaW5pdF9mYWlsOgo+IE5p dHBpY2s6IHRoZXJlIGlzL3dhcyB0aGUgaWRlYSB0aGF0IGxhYmVscyBzaG91bGQgYmUgY2FsbGVk IGFmdGVyIHdoYXQKPiB0aGV5IGRvLCByYXRoZXIgdGhhbiB3aGF0IGZhaWxzLiBQZXJzb25hbGx5 IEknbSBpbiBmYXZvdXIgb2YgaXQgYXMgaXQKPiBtYWtlcyB0aGluZ3MgY2xlYXJlci4uLiBzYWRs eSBJIG1pZ2h0IGJlIG9uZSBvZiB0aGUgZmV3LgoKV291bGQgY2FsbGluZyB0aGUgbGFiZWwocykg eHh4eF9pbml0X2NsZWFudXAgYmUgYSBiZXR0ZXIgb3B0aW9uIGluIHlvdXIgdmlldz8KCj4gCj4g PiArICAgICAgIGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gPiArCj4gPiArICAgICAg IHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+IEFkZCBhIG1hbGlkcF9maW5pKCkgaGVscGVyIHRv IGNvbXBsZW1lbnQgdGhlIGFib3ZlID8KPiAKPiA+ICtzdGF0aWMgaW50IG1hbGlkcF9pcnFfaW5p dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+IAo+IERpdHRvIC0gYWRkIG1hbGlkcF9p cnFfZmluaSgpIHRvIGNvbXBsZW1lbnQgdGhlIF9pbml0KCkgZnVuY3Rpb24gPwo+IAoKSSB3aWxs IGxvb2sgaW50byB0aGlzLgoKPiAKPiA+ICtzdGF0aWMgaW50IG1hbGlkcF9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKPiA+ICt7Cj4gCj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAqIGNvcHkg dGhlIGFzc29jaWF0ZWQgZGF0YSBmcm9tIG1hbGlkcF9kcm1fb2ZfbWF0Y2ggdG8gYXZvaWQKPiA+ ICsgICAgICAgICogaGF2aW5nIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIE9GIG5vZGUgYWZ0 ZXIgYmluZGluZwo+ID4gKyAgICAgICAgKi8KPiBUaGlzIGZlZWxzIGEgYml0IHN0cmFuZ2UuIElz IGtlZXBpbmcgYSByZWZlcmVuY2UgdGhhdCBiYWQgPwo+IAoKVGhlcmUgc2VlbXMgdG8gYmUgc29t ZSBvZGQgYmVoYXZpb3VyIHJlbGF0ZWQgdG8gb2ZfZGV2aWNlX2lkIC5kYXRhIGFuZCByZW1vdmFi bGUgbW9kdWxlcy4KSWYgb25lIHJtbW9kJ3MgdGhlIG1vZHVsZSBhbmQgdGhlbiBtb2Rwcm9iZSdz IGl0IGJhY2sgdGhlIGtlcm5lbCB0aGlua3MgdGhlIG9mX2RldmljZV9pZCBkYXRhCmlzIHN0aWxs IGFyb3VuZCB3aGVuIGluIGZhY3QgaXQgaXMgZnVsbCBvZiBnYXJiYWdlLiBJIGRpZCBub3QgaW52 ZXN0aWdhdGUgdG9vIGNsb3NlbHksCkkgYXNzdW1lZCB0aGF0IHRoZSBNT0RVTEVfREVWSUNFX1RB QkxFIGVudHJpZXMgZW5kIHVwIHNvbWVob3cgaW4gdGhlIC5pbml0IHNlY3Rpb24gYW5kIGdldApk aXNjYXJkZWQgYnV0IG5vdCBjbGVhbmVkIHVwIHByb3Blcmx5IGFuZCBvbiBmdXJ0aGVyIGluc21v ZHMgdGhlIGtlcm5lbCB0aGlua3MgZGF0YSBpcyBzdGlsbCBhcm91bmQ/IAoKPiAKPiAKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKPiAK PiA+ICsjZGVmaW5lIE1BTElEUF9DT01NT05fRk9STUFUUyBcCj4gPiArICAgICAgIC8qICAgIGxh eWVycyBzdXBwb3J0aW5nIHRoZSBmb3JtYXQsICAgICAgaW50ZXJuYWwgaWQsICAgICAgZm91cmNj ICovIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIs IE1BTElEUF9JRCgwLCAwKSwgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCB9LCBcCj4gPiArICAgICAg IHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMCwgMSks IERSTV9GT1JNQVRfQUJHUjIxMDEwMTAgfSwgXAo+ID4gKyAgICAgICB7IERFX1ZJREVPMSB8IERF X0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDIpLCBEUk1fRk9STUFUX1JHQkEx MDEwMTAyIH0sIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9W SURFTzIsIE1BTElEUF9JRCgwLCAzKSwgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMiB9LCBcCj4gPiAr ICAgICAgIHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgxLCAwKSwgRFJNX0ZPUk1BVF9BUkdCODg4OCB9LCBcCj4gPiArICAgICAgIHsg REVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9J RCgxLCAxKSwgRFJNX0ZPUk1BVF9BQkdSODg4OCB9LCBcCj4gPiArICAgICAgIHsgREVfVklERU8x IHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAyKSwg RFJNX0ZPUk1BVF9SR0JBODg4OCB9LCBcCj4gPiArICAgICAgIHsgREVfVklERU8xIHwgREVfR1JB UEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAzKSwgRFJNX0ZPUk1B VF9CR1JBODg4OCB9LCBcCj4gPiArICAgICAgIHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAwKSwgRFJNX0ZPUk1BVF9YUkdCODg4 OCB9LCBcCj4gPiArICAgICAgIHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8y IHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAxKSwgRFJNX0ZPUk1BVF9YQkdSODg4OCB9LCBcCj4g PiArICAgICAgIHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01B UlQsIE1BTElEUF9JRCgyLCAyKSwgRFJNX0ZPUk1BVF9SR0JYODg4OCB9LCBcCj4gPiArICAgICAg IHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElE UF9JRCgyLCAzKSwgRFJNX0ZPUk1BVF9CR1JYODg4OCB9LCBcCj4gPiArICAgICAgIHsgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMywgMCksIERSTV9GT1JN QVRfUkdCODg4IH0sIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBE RV9WSURFTzIsIE1BTElEUF9JRCgzLCAxKSwgRFJNX0ZPUk1BVF9CR1I4ODggfSwgXAo+ID4gKyAg ICAgICB7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDQs IDApLCBEUk1fRk9STUFUX1JHQkE1NTUxIH0sIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAxKSwgRFJNX0ZPUk1BVF9BQkdS MTU1NSB9LCBcCj4gPiArICAgICAgIHsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklE RU8yLCBNQUxJRFBfSUQoNCwgMiksIERSTV9GT1JNQVRfUkdCNTY1IH0sICAgXAo+ID4gKyAgICAg ICB7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDQsIDMp LCBEUk1fRk9STUFUX0JHUjU2NSB9LCAgIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9W SURFTzIsIE1BTElEUF9JRCg1LCAyKSwgRFJNX0ZPUk1BVF9ZVVlWIH0sIFwKPiA+ICsgICAgICAg eyBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCAzKSwgRFJNX0ZPUk1BVF9VWVZZ IH0sIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA2 KSwgRFJNX0ZPUk1BVF9OVjEyIH0sIFwKPiA+ICsgICAgICAgeyBERV9WSURFTzEgfCBERV9WSURF TzIsIE1BTElEUF9JRCg1LCA3KSwgRFJNX0ZPUk1BVF9ZVVY0MjAgfQo+ID4gKwo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCBtYWxpZHA1NTBfZGVfZm9ybWF0c1td ID0gewo+ID4gKyAgICAgICBNQUxJRFBfQ09NTU9OX0ZPUk1BVFMsCj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRwNjUwX2RlX2Zv cm1hdHNbXSA9IHsKPiA+ICsgICAgICAgTUFMSURQX0NPTU1PTl9GT1JNQVRTLAo+ID4gK307Cj4g PiArCj4gUHJldHR5IHN1cmUgdGhhdCB1c2luZyB0aGUgZGVmaW5lIGhlcmUgd2lsbCBsZWFkIHRv IHRoZSBleGFjdCBzYW1lCj4gY29kZSBleGlzdGluZyB0d2ljZSBpbiB0aGUgZHJpdmVyLiBKdXN0 IGtpbGwgb2ZmIG1hbGlkcDY1MF9kZV9mb3JtYXRzCj4gYW5kIHVzZSBtYWxpZHA1NTBfZGVfZm9y bWF0cyBpbnN0ZWFkID8KCm1hbGlkcDY1MF9kZV9mb3JtYXRzW10gaGFzIHNvbWUgYWRkaXRpb25h bCBzdXBwb3J0ZWQgZm9ybWF0cyAobW9zdGx5IGNvbXByZXNzZWQgYnVmZmVycykgYnV0IEkgcmVt b3ZlZCB0aGUKQUZCQyBjb21wcmVzc2lvbiBzdXBwb3J0IGZyb20gdGhlIGluaXRpYWwgc3VibWlz c2lvbi4gSWYgSSBhZGQgYSBjb21tZW50IGF0IHRoZSBlbmQgb2YgbWFsaWRwNjUwX2RlX2Zvcm1h dHNbXQp3b3VsZCB0aGF0IGJlIE9LIG9yIHlvdSB3b3VsZCBwcmVmZXIgaWYgSSByZS1pbnRyb2R1 Y2UgdGhlIHN0cnVjdHVyZSB3aGVuIEkgYWRkIGJhY2sgY29tcHJlc3Npb24/Cgo+IAo+IAo+ID4g K3ZvaWQgbWFsaWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldikKPiBNYW55L21vc3Qgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgc2hvdWxk IGJlIHN0YXRpYy4KCllvdSBhcmUgcmlnaHQsIHdpbGwgdXBkYXRlIHRoZW0uCgo+IAo+ID4gK3sK PiA+ICsgICAgICAgdTMyIHN0YXR1cywgY291bnQgPSAxMDA7Cj4gPiArCj4gQW55IHBhcnRpY3Vs YXIgcmVhc29uIGJlaGluZCB0aGUgYXN5bW1ldHJpYyAodnMgdGhlIGxlYXZlX2NvbmZpZ19tb2Rl KQo+ICdjb3VudCcgPyBXb3J0aCBhZGRpbmcgYSBjb21tZW50ID8KCk1heWJlIEkgbmVlZCB0byBt b3ZlIHRoZSBjb21tZW50IGZyb20gaW5zaWRlIHRoZSB3aGlsZSgpIGxvb3Agb3V0IGhlcmUuIEJh c2ljYWxseSBlbnRlcmluZyBjb25maWcKbW9kZSBjYW4gYmUgZGVsYXllZCBmb3IgYSBmdWxsIGZy YW1lIHJlbmRlciBvciBtb3JlIGlmIHRoZSBiaXQgaXMgc2V0IGNsb3NlIHRvIGEgdnN5bmMgZXZl bnQsIHdoaWxlCmV4aXRpbmcgdGhlIGNvbmZpZyBtb2RlIGlzIHByZXR0eSBtdWNoIHN5bmNlZCB0 byB0aGUgbmV4dCB2c3luYy4gSSBjb3VsZCBwcm9iYWJseSBtYWtlIHRoZQpsZWF2ZV9jb25maWdf bW9kZSBjb3VudCAxMDAgYXMgd2VsbCwga25vd2luZyB0aGF0IGl0IHdvdWxkIG5ldmVyIHJlYWNo IGEgaGlnaCB2YWx1ZS4KCj4gCj4gPiArICAgICAgIG1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBN QUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQNTAwX0RDX0NPTlRST0wpOwo+ID4gKyAgICAg ICB3aGlsZSAoY291bnQpIHsKPiA+ICsgICAgICAgICAgICAgICBzdGF0dXMgPSBtYWxpZHBfaHdf cmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ID4g KyAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpID09 IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Cj4gPiArICAgICAgICAgICAgICAgLyoKPiA+ICsgICAgICAgICAgICAgICAgKiBlbnRlcmlu ZyBjb25maWcgbW9kZSBjYW4gdGFrZSBhcyBsb25nIGFzIHRoZSByZW5kZXJpbmcKPiA+ICsgICAg ICAgICAgICAgICAgKiBvZiBhIGZ1bGwgZnJhbWUsIGhlbmNlIHRoZSBsb25nIHNsZWVwIGhlcmUK PiA+ICsgICAgICAgICAgICAgICAgKi8KPiA+ICsgICAgICAgICAgICAgICB1c2xlZXBfcmFuZ2Uo MTAwMCwgMTAwMDApOwo+ID4gKyAgICAgICAgICAgICAgIGNvdW50LS07Cj4gPiArICAgICAgIH0K PiA+ICsgICAgICAgV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBjb25m aWcgbW9kZSIpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1hbGlkcDUwMF9sZWF2ZV9jb25maWdf bW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKyAgICAgICB1 MzIgc3RhdHVzLCBjb3VudCA9IDMwOwo+ID4gKwo+IC4uLgo+IAo+IAo+ID4gK3U4IG1hbGlkcF9o d19nZXRfZm9ybWF0X2lkKGNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCkKPiA+ICt7 Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgbWFwLT5uX2lucHV0X2Zvcm1hdHM7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGlm ICgoKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5sYXllciAmIGxheWVyX2lkKSA9PSBsYXllcl9pZCkg JiYKPiA+ICsgICAgICAgICAgICAgICAgICAgKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5mb3JtYXQg PT0gZm9ybWF0KSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAtPmlucHV0 X2Zvcm1hdHNbaV0uaWQ7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuICh1 OCktMTsKPiBUaGlzIGZlZWxzIHZlcnkgc3RyYW5nZSB0byByZWFkLiBVc2UgMHhmZiAoaGVyZSBh bmQgYmVsb3cpIGluc3RlYWQgPwoKV2lsbCBkby4KCj4gCj4gPiArfQo+ID4gKwo+ID4gKwo+ID4g K3UzMiBtYWxpZHBfaHdfcmVhZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiBy ZWcpCj4gPiArewo+ID4gKyAgICAgICB1MzIgdmFsdWUgPSByZWFkbChod2Rldi0+cmVncyArIHJl Zyk7Cj4gPiArICAgICAgIHJldHVybiB2YWx1ZTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtYWxp ZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgdmFsdWUsIHUz MiByZWcpCj4gPiArewo+ID4gKyAgICAgICB3cml0ZWwodmFsdWUsIGh3ZGV2LT5yZWdzICsgcmVn KTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtYWxpZHBfaHdfc2V0Yml0cyhzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYsIHUzMiBtYXNrLCB1MzIgcmVnKQo+ID4gK3sKPiA+ICsgICAgICAg dTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVnKTsKPiA+ICsKPiA+ICsgICAgICAg ZGF0YSB8PSBtYXNrOwo+ID4gKyAgICAgICBtYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGRhdGEsIHJl Zyk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbWFsaWRwX2h3X2NsZWFyYml0cyhzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiBtYXNrLCB1MzIgcmVnKQo+ID4gK3sKPiA+ICsgICAg ICAgdTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVnKTsKPiA+ICsKPiA+ICsgICAg ICAgZGF0YSAmPSB+bWFzazsKPiA+ICsgICAgICAgbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBkYXRh LCByZWcpOwo+ID4gK30KPiA+ICsKPiBKdXN0IGRlY2xhcmUgdGhlIGFib3ZlIDQgYXMgc3RhdGlj IGlubGluZSA/IE9yIHRoZSByZWFkL3dyaXRlIG9uZXMgYXQgbGVhc3QuCgpJIHdpbGwsIHRoYW5r cyBmb3IgcG9pbnRpbmcgaXQgb3V0LgoKPiAKPiAKPiA+ICt2b2lkIG1hbGlkcF9od19jbGVhcl9p cnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSkKPiA+ ICt7Cj4gPiArICAgICAgIHUzMiBiYXNlID0gMDsKPiA+ICsKPiA+ICsgICAgICAgc3dpdGNoIChi bG9jaykgewo+ID4gKyAgICAgICBjYXNlIE1BTElEUF9ERV9CTE9DSzoKPiA+ICsgICAgICAgICAg ICAgICBiYXNlID0gMDsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2Fz ZSBNQUxJRFBfU0VfQkxPQ0s6Cj4gPiArICAgICAgICAgICAgICAgYmFzZSA9IGh3ZGV2LT5tYXAu c2VfYmFzZTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBNQUxJ RFBfRENfQkxPQ0s6Cj4gPiArICAgICAgICAgICAgICAgYmFzZSA9IGh3ZGV2LT5tYXAuZGNfYmFz ZTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgfQo+ID4gKwo+IE1vdmUg dGhlIGFib3ZlIHN3aXRjaCBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIGhhdmlu ZyB0aHJlZQo+IGNvcGllcyBvZiBpdCA/CgpPSwoKPiAKPiAKPiA+ICtpbnQgbWFsaWRwX2RlX2ly cV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEpCj4gPiArewo+ID4gKyAgICAg ICBzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsgICAg ICAgc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArICAg ICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAgIC8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBk aXNhYmxlZCAqLwo+ID4gKyAgICAgICBtYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElE UF9EQ19CTE9DSywgMHhmZmZmZmZmZik7Cj4gPiArICAgICAgIG1hbGlkcF9od19jbGVhcl9pcnEo aHdkZXYsIE1BTElEUF9EQ19CTE9DSywgMHhmZmZmZmZmZik7Cj4gPiArICAgICAgIG1hbGlkcF9o d19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLCAweGZmZmZmZmZmKTsKPiA+ICsg ICAgICAgbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLCAweGZmZmZm ZmZmKTsKPiA+ICsKPiBTaG91bGRuJ3Qgd2UgZGlzYWJsZS9jbGVhciBERSBiZWZvcmUgREMgPyBU aGlzIHdheSBJdCBhbGlnbnMgd2l0aAo+IF9jbGVhbnVwIGFuZCBpcyB0aGUgaW52ZXJzZSBvZiBl bmFibGUgYSBjb3VwbGUgb2YgbGluZXMgYmVsb3cuCgpJIHdpbGwgdXBkYXRlIHRoZSBvcmRlci4K Cj4gCj4gPiArICAgICAgIHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZHJtLT5kZXYs IGlycSwgbWFsaWRwX2RlX2lycSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWxpZHBfZGVfaXJxX3RocmVhZF9oYW5kbGVyLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAibWFsaWRwLWRlIiwgZHJtKTsK PiA+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICBEUk1fRVJST1Io ImZhaWxlZCB0byBpbnN0YWxsIERFIElSUSBoYW5kbGVyXG4iKTsKPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8qIGZpcnN0IGVu YWJsZSB0aGUgREMgYmxvY2sgSVJRcyAqLwo+ID4gKyAgICAgICBtYWxpZHBfaHdfZW5hYmxlX2ly cShod2RldiwgTUFMSURQX0RDX0JMT0NLLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOwo+ID4gKwo+ID4gKyAgICAgICAvKiBu b3cgZW5hYmxlIHRoZSBERSBibG9jayBJUlFzICovCj4gPiArICAgICAgIG1hbGlkcF9od19lbmFi bGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGh3ZGV2LT5tYXAuZGVfaXJxX21hcC5pcnFfbWFzayk7Cj4gPiArCj4gPiArICAgICAg IHJldHVybiAwOwo+ID4gK30KPiAKPiAKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKPiA+IEBAIC0wLDAgKzEsMTg5IEBACj4gCj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gQWZhaWN0IHRoZSBoZWFkZXIgaXMgbm90IHVz ZWQgaGVyZS4gUGxlYXNlIGluY2x1ZGUgaXQgb25seSB3aGVyZSBuZWVkZWQuCgpTb3JyeSwgZm9y Z290IHRvIHJlbW92ZSBpdCB3aGVuIEkgcmVtb3ZlZCBBRkJDIHN1cHBvcnQuIFdpbGwgdXBkYXRl LgoKPiAKPiAKPiA+ICtzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSB7Cj4gPiArICAgICAgIGNvbnN0 IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwIG1hcDsKPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICpy ZWdzOwo+ID4gKwo+ID4gKyAgICAgICAvKiBBUEIgY2xvY2sgKi8KPiA+ICsgICAgICAgc3RydWN0 IGNsayAqcGNsazsKPiA+ICsgICAgICAgLyogQVhJIGNsb2NrICovCj4gPiArICAgICAgIHN0cnVj dCBjbGsgKmFjbGs7Cj4gPiArICAgICAgIC8qIG1haW4gY2xvY2sgZm9yIGRpc3BsYXkgY29yZSAq Lwo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICptY2xrOwo+ID4gKyAgICAgICAvKiBwaXhlbCBjbG9j ayBmb3IgZGlzcGxheSBjb3JlICovCj4gPiArICAgICAgIHN0cnVjdCBjbGsgKnB4bGNsazsKPiA+ ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogVmFsaWRhdGUgdGhlIGRyaXZlciBpbnN0 YW5jZSBhZ2FpbnN0IHRoZSBoYXJkd2FyZSBiaXRzCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAg ICBpbnQgKCpxdWVyeV9odykoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKPiA+ICsK PiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogU2V0IHRoZSBoYXJkd2FyZSBpbnRvIGNvbmZp ZyBtb2RlLCByZWFkeSB0byBhY2NlcHQgbW9kZSBjaGFuZ2VzCj4gPiArICAgICAgICAqLwo+ID4g KyAgICAgICB2b2lkICgqZW50ZXJfY29uZmlnX21vZGUpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2Rldik7Cj4gPiArCj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAqIFRlbGwgaGFyZHdh cmUgdG8gZXhpdCBjb25maWd1cmF0aW9uIG1vZGUKPiA+ICsgICAgICAgICovCj4gPiArICAgICAg IHZvaWQgKCpsZWF2ZV9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 KTsKPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogUXVlcnkgaWYgaGFyZHdhcmUg aXMgaW4gY29uZmlndXJhdGlvbiBtb2RlCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBib29s ICgqaW5fY29uZmlnX21vZGUpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gPiAr Cj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAqIFNldCBjb25maWd1cmF0aW9uIHZhbGlkIGZs YWcgZm9yIGhhcmR3YXJlIHBhcmFtZXRlcnMgdGhhdCBjYW4KPiA+ICsgICAgICAgICogYmUgY2hh bmdlZCBvdXRzaWRlIHRoZSBjb25maWd1cmF0aW9uIG1vZGUuIEhhcmR3YXJlIHdpbGwgdXNlCj4g PiArICAgICAgICAqIHRoZSBuZXcgc2V0dGluZ3Mgd2hlbiBjb25maWcgdmFsaWQgaXMgc2V0IGFm dGVyIHRoZSBlbmQgb2YgdGhlCj4gPiArICAgICAgICAqIGN1cnJlbnQgYnVmZmVyIHNjYW5vdXQK PiA+ICsgICAgICAgICovCj4gPiArICAgICAgIHZvaWQgKCpzZXRfY29uZmlnX3ZhbGlkKShzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpOwo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAg ICAgICAgKiBTZXQgYSBuZXcgbW9kZSBpbiBoYXJkd2FyZS4gUmVxdWlyZXMgdGhlIGhhcmR3YXJl IHRvIGJlIGluCj4gPiArICAgICAgICAqIGNvbmZpZ3VyYXRpb24gbW9kZSBiZWZvcmUgdGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICB2b2lkICgqbW9k ZXNldCkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCBzdHJ1Y3QgdmlkZW9tb2RlICpt KTsKPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogQ2FsY3VsYXRlIHRoZSByZXF1 aXJlZCByb3RhdGlvbiBtZW1vcnkgZ2l2ZW4gdGhlIGFjdGl2ZSBhcmVhCj4gPiArICAgICAgICAq IGFuZCB0aGUgYnVmZmVyIGZvcm1hdC4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGludCAo KnJvdG1lbV9yZXF1aXJlZCkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MTYgdywg dTE2IGgsIHUzMiBmbXQpOwo+ID4gKwo+IE5pdHBpY2s6IFdlIG5vcm1hbGx5IGNyZWF0ZSB1c2Ug ImNvbnN0IHN0cnVjdCBmb28gKmZ1bmNzIiBmb3IgdmZ1bmNzLgoKYW5kIHNvIHNob3VsZCBJLiBX aWxsIHVwZGF0ZS4KCj4gCj4gTWFueSBvZiB0aGUgc3RydWN0cyBpbiB0aGlzIGZpbGUgaGF2ZSBo b2xlcyBpbiB0aGVtLiBXb3J0aCBjaGVja2luZwo+IHdpdGggcGFob2xlIGFuZCByZW9yZGVyaW5n ID8KCkkgd2FzIG5vdCBhd2FyZSBvZiBwYWhvbGUsIHRoYW5rcyBmb3IgdGhlIGhpbnQuIFdpbGwg dXBkYXRlLgoKPiAKPiA+ICsvKgo+ID4gKyAqIGJhY2tncm91bmQgY29sb3IgY29tcG9uZW50cyBh cmUgZGVmaW5lZCBhcyAxMmJpdHMgdmFsdWVzLAo+ID4gKyAqIHRoZXkgd2lsbCBiZSBzaGlmdGVk IHJpZ2h0IHdoZW4gc3RvcmVkIG9uIGhhcmR3YXJlIHRoYXQKPiA+ICsgKiBzdXBwb3J0cyBvbmx5 IDhiaXRzIHBlciBjaGFubmVsCj4gPiArICovCj4gPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xP Ul9SICAgICAgICAgICAgMHgwMDAKPiA+ICsjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX0cgICAg ICAgICAgICAweDAwMAo+ID4gKyNkZWZpbmUgTUFMSURQX0JHTkRfQ09MT1JfQiAgICAgICAgICAg IDB4MDAwCj4gPiArCj4gU29tZXRoaW5nIGZlZWxzIHZlcnkgd3JvbmcgaGVyZS4gQXJlIHlvdSBz dXJlIHdoYXQgYWxsIHRocmVlIGFyZSB6ZXJvID8KCkRlZmF1bHQgYmFja2dyb3VuZCBjb2xvci4g QmxhY2sgaXMgIzAwMDAwMDAwMC4KCj4gCj4gCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwo+IAo+ID4gK3N0YXRpYyBpbnQgbWFs aWRwX2RlX2F0b21pY191cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBjcnRjX3gsIGludCBjcnRjX3ksCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcnRjX3csCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcnRjX2gsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY194LCB1 aW50MzJfdCBzcmNfeSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3Qgc3JjX3csIHVpbnQzMl90IHNyY19oKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0 dXJuIGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZShwbGFuZSwgY3J0YywgZmIsIGNydGNf eCwgY3J0Y195LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNydGNfdywgY3J0Y19oLCBzcmNfeCwgc3JjX3ksCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3csIHNyY19oKTsKPiBKdXN0IGRyb3AgdGhl IHdyYXBwZXIgYW5kIHJlZmVyZW5jZSB0aGUgaGVscGVyIGRpcmVjdGx5IGludG8KPiBkcm1fcGxh bmVfZnVuY3MgYmVsb3cgPwoKU29ycnksIGRlYnVnZ2luZyBhcnRpZmFjdC4gV2lsbCBkby4KCj4g Cj4gCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX3VwZGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IGRy bV9nZW1fY21hX29iamVjdCAqb2JqOwo+ID4gKyAgICAgICBzdHJ1Y3QgbWFsaWRwX3BsYW5lICpt cDsKPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgKm1hcDsKPiA+ICsg ICAgICAgdTggZm9ybWF0X2lkOwo+ID4gKyAgICAgICB1MTYgcHRyOwo+ID4gKyAgICAgICB1MzIg Zm9ybWF0LCBzcmNfdywgc3JjX2gsIGRlc3RfdywgZGVzdF9oLCB2YWwgPSAwOwo+ID4gKyAgICAg ICBpbnQgbnVtX3BsYW5lcywgaTsKPiA+ICsKPiA+ICsgICAgICAgbXAgPSB0b19tYWxpZHBfcGxh bmUocGxhbmUpOwo+ID4gKwo+ID4gKyNpZmRlZiBNQUxJRFBfRU5BQkxFX0JHTkRfQ09MT1JfQVNf UFJJTUFSWV9QTEFORQo+ID4gKyAgICAgICAvKiBza2lwIHRoZSBwcmltYXJ5IHBsYW5lLCBpdCBp cyB1c2luZyB0aGUgYmFja2dyb3VuZCBjb2xvciAqLwo+ID4gKyAgICAgICBpZiAoIW1wLT5sYXll ciB8fCAhbXAtPmxheWVyLT5pZCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArI2Vu ZGlmCj4gPiArCj4gQWZhaWN0IHRoZSBhYm92ZSBkZWZpbmUgaXMgbm90IHNldCBhbnl3aGVyZSAt IG5laXRoZXIgZXhwbGljaXRseQo+ICgjZGVmaW5lIGZvbywgLURGT08pIG5vciBpbXBsaWNpdGx5 ICh2aWEga2NvbmZpZyB0b2dnbGUpLiBBcyBzdWNoIGl0Cj4gc2hvdWxkIGdvLiBTYW1lIGdvZXMg Zm9yIHRoZSBvdGhlciBpbnN0YW5jZXMgb2YgaXQuCgpPbiBwcmluY2lwbGUsIEkgYWdyZWUgd2l0 aCB5b3UuIFRoaXMgd2FzIGFkZGVkIGZvciAyIHJlYXNvbnM6IG9uZSBpcyBpbnRlcm5hbCB0ZXN0 aW5nLAp3aGVyZSB0aGUgb2xkIEFERiBkcml2ZXIgaGFkIHRlc3QgY2FzZXMgZm9yIHVzaW5nIHRo ZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIHByaW1hcnkgcGxhbmUKYW5kIHdlIHdhbnRlZCB0byBjaGVj ayBmb3IgZmVhdHVyZSBwYXJpdHkgKGlycmVsZXZhbnQgaGVyZSwgdGhvdWdoKTsgc2Vjb25kIGlz IHRoZSBmYWN0CnRoYXQgSSByZWFkIHRocm91Z2ggc29tZSBhcmNoaXZlZCBlbWFpbHMgZnJvbSBE YW5pZWwgYWJvdXQgZXhwb3NpbmcgdGhlIGJhY2tncm91bmQgY29sb3IKYXMgdGhlIHByaW1hcnkg cGxhbmUgYW5kIGZyZWUgYW5vdGhlciBwbGFuZSBmb3IgdGhlIGNvbXBvc2l0b3IgdG8gdXNlLiBJ IHdhbnRlZCB0byBjaGVjawppZiB3ZSBjYW4gZG8gdGhhdCBhbmQgaXQgbG9va3MgcG9zc2libGUs IGJ1dCBpdCBicmVha3MgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSB0aGF0IGFzc3VtZXMKdGhhdCB0 aGUgcHJpbWFyeSBwbGFuZSBpcyBtb3JlIHRoYW4ganVzdCBjb2xvciAobW9zdGx5IGxlZ2FjeSBm YmRldiBhcHBzKS4gSWYgdGhpcyBpcwpjb25zaWRlcmVkIGFuIHVzZWZ1bCBjYXNlLCB0aGVuIEkg Y2FuIGNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgdGhlICNkZWZpbmUgKGFuZCByZW5hbWUK aXQpLiBJdCB3YXMgbGVmdCBoZXJlIGFzIGEgc29ydCBvZiBjb252ZXJzYXRpb24gYnJlYWtlci4K Cj4gCj4gCj4gPiArICAgICAgIGZvcm1hdF9pZCA9IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKG1h cCwgbXAtPmxheWVyLT5pZCwgZm9ybWF0KTsKPiA+ICsgICAgICAgaWYgKGZvcm1hdF9pZCA9PSAo dTgpLTEpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKwo+IFdlIHNob3VsZCBtb3Zl IHRoaXMgdG8gZnJvbSBfdXBkYXRlIHRvIF9jaGVjay4KCllvdSdyZSBhYnNvbHV0ZWx5IHJpZ2h0 LCB3aWxsIGRvLgoKPiAKPiAKPiA+ICtpbnQgbWFsaWRwX2RlX3BsYW5lc19pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0pCj4gPiArewo+IC4uLgo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwg bWFwLT5uX2xheWVyczsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAgdTggaWQgPSBtYXAtPmxh eWVyc1tpXS5pZDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBwbGFuZSA9IGRldm1fa3phbGxv Yyhkcm0tPmRldiwgc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOwo+IEVpdGhlciB1c2UgdGhl IG5vbi1kZXZtIGZ1bmN0aW9uIGhlcmUgYW5kIGluIF9kZXN0cm95IG9yIGRyb3AgdGhlIG9uZQo+ IGluIF9kZXN0cm95ID8gQWZhaWN0IHdlIGNvdWxkIGdldCBhIGRvdWJsZS1mcmVlIHdpdGggdGhl IGxhdHRlciBpbgo+IHBsYWNlLiBQZXJzb25hbGx5LCBJJ2QgZHJvcCB0aGUgZGV2bV8uCgpPSywg SSB3aWxsIGhhdmUgYSBsb29rIGludG8gZHJvcHBpbmcgdGhlIGRldm1fLgoKPiAKPiAKPiBUaGUg YmVzdCB0aGluZyBpcyB0aGF0IEkgZGlkIG5vdCBzcG90IGV2ZW4gb25lIHVzZSBvZiBkZXByZWNh dGVkCj4gZnVuY3Rpb25zLiBOaWNlbHkgZG9uZSBnZW50cyA6LSkKClRoYW5rcyEgSXQgaXMgbm90 IGVhc3kgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGdvaW5nIGZv cndhcmQsIHNvIEkgd291bGQKcHV0IHRoYXQgZG93biB0byBsdWNrIDspCgpCZXN0IHJlZ2FyZHMs Ckxpdml1Cgo+IAo+IFJlZ2FyZHMsCj4gRW1pbAo+IAoKLS0gCj09PT09PT09PT09PT09PT09PT09 CnwgSSB3b3VsZCBsaWtlIHRvIHwKfCBmaXggdGhlIHdvcmxkLCAgfAp8IGJ1dCB0aGV5J3JlIG5v dCB8CnwgZ2l2aW5nIG1lIHRoZSAgIHwKIFwgc291cmNlIGNvZGUhICAvCiAgLS0tLS0tLS0tLS0t LS0tCiAgICDCr1xfKOODhClfL8KvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=