From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Beckett Subject: Re: [RFC PATCH v3 1/4] drm/i915: add i915_ved.c to setup bridge for VED Date: Fri, 28 Nov 2014 16:59:09 +0000 Message-ID: <5478A9DD.908@intel.com> References: <1416596818-5651-1-git-send-email-yao.cheng@intel.com> <1416596818-5651-2-git-send-email-yao.cheng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1416596818-5651-2-git-send-email-yao.cheng@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Yao Cheng , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, daniel.vetter@ffwll.ch, sean.v.kelley@intel.com, john.chehab@intel.com Cc: emil.l.velikov@gmail.com, fei.jiang@intel.com, daniel@fooishbar.org, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gMjEvMTEvMjAxNCAxOTowNiwgWWFvIENoZW5nIHdyb3RlOgo+IFNldHVwIG1pbmltdW0gcmVx dWlyZWQgcmVzb3VyY2VzIGR1cmluZyBpOTE1X2RyaXZlcl9sb2FkOgo+IDEuIENyZWF0ZSBhIHBs YXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSByZXNvdXJjZXMKPiAyLiBNYWtlIHRoZSBw bGF0Zm9ybSBkZXZpY2UgY2hpbGQgb2YgaTkxNSBkZXZpY2UgZm9yIHJ1bnRpbWUgUE0uCj4gMy4g Q3JlYXRlIElSUSBjaGlwIHRvIGZvcndhcmQgdGhlIFZFRCBpcnFzLgo+IFZFRCBkcml2ZXIgKGEg c3RhbmRhbG9uZSBkcm0gZHJpdmVyKSBwcm9iZXMgdGhlIFZFRCBkZXZpY2UgYW5kCj4gY3JlYXRl cyBhIG5ldyBkcmkgY2FyZCBvbiBpbnN0YWxsLgo+IEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFZF RCBvbiB2YWxsZXl2aWV3Lgo+IEtlcm5lbGRvYyBpcyB1cGRhdGVkIGZvciBpOTE1X3ZlZC5jLgo+ Cj4gdjI6Cj4gdGFrZSBEYW5pZWwgJiBKYW5pJ3MgY29tbWVudHMKPiAJLSBleHRyYWN0IGNoYW5n ZSB0byBuZXcgZmlsZSBpOTE1X3ZlZC5jCj4gCS0gYWRkIGtlcm5lbGRvYwo+IAktIGNoYW5nZSAn aXB2ci12ZWQnIHRvICdpcHZyLXZsdi12ZWQnIGZvciBleHRlbnNpYmlsaXR5Cj4gCS0gdW5yZWdp c3RlciBwbGF0ZGV2IGJlZm9yZSBpcnFfZnJlZV9kZXNjCj4gCS0gYWRkIFdBUk5fT04oIWludGVs X2lycXNfZW5hYmxlZCkgaW4gaXJxIGluaXQgY29kZQo+IAktIHJlbW92ZSB1bm5lY2Vzc2FyeSB0 cmFjZSBwb2ludAo+IAktIHJlbW92ZSB1bm5lY2Vzc2FyeSBCVUdfT04KPgo+IHYzOgo+IHRha2Ug VmlsbGUncyBjb21tZW50cyBhbmQgVkVEIFBSSU1FIHN1cHBvcnQKPiAJLSBhZGQgSEFTX1ZFRCgp IGNoZWNrCj4gCS0gYWRkIHZlZCBzdHJ1Y3QgdG8gbWFrZSBjb2RlIG5lYXQKPiAJLSBubyBuZWVk IHRvIGNoZWNrIHBsYXRmb3JtIGluIHZsdl9pcnFfaGFuZGxlcgo+IAktIGk5MTVfcmVnLmggdXBk YXRlCj4gCS0gbm8gbmVlZCB0byBrbWFsbG9jIGZvciBzbWFsbCBhbW91bnQgb2YgcmVzb3VyY2UK PiAJLSByZW1vdmUgdW5uZWNlc3NhcnkgUkVHIHJlc291cmNlCj4gCS0gZm9sbG93IHZsdl9kaXNw bGF5X2lycXNfaW5zdGFsbCgpIHRvIGltcGxlbWVudCBWRUQgbWFzay91bm1hc2sKPiAJLSB3b3Jr YXJvdW5kIG5vbW11X21hcF9zZyBpc3N1ZSBieSBzZXQgZG1hX21hc2sgdG8gc3VwcG9ydCBWRUQg UFJJTUUuCj4KPiBTaWduZWQtb2ZmLWJ5OiBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+ Cj4gLS0tCj4gICBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgIHwgICA1ICsKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kbWEuYyB8ICAxMSArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCB8ICAxMiArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyB8ICAgMiAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIHwgICA0ICsKPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfdmVkLmMgfCAyNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCAyOTIgaW5zZXJ0aW9ucygrKQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmVkLmMKPgo+IGRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgYi9Eb2N1bWVudGF0aW9u L0RvY0Jvb2svZHJtLnRtcGwKPiBpbmRleCA5ZDk5NzcyLi5iMmQxMDlmIDEwMDY0NAo+IC0tLSBh L0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vRG9j Qm9vay9kcm0udG1wbAo+IEBAIC0zODM5LDYgKzM4MzksMTEgQEAgaW50IG51bV9pb2N0bHM7PC9z eW5vcHNpcz4KPiAgICFGZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBpbnRlbF9ydW50 aW1lX3BtX2Rpc2FibGVfaW50ZXJydXB0cwo+ICAgIUZkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jIGludGVsX3J1bnRpbWVfcG1fZW5hYmxlX2ludGVycnVwdHMKPiAgICAgICAgIDwvc2Vj dDI+Cj4gKyAgICAgIDxzZWN0Mj4KPiArICAgICAgICA8dGl0bGU+VkVEIHZpZGVvIGNvcmUgaW50 ZWdyYXRpb248L3RpdGxlPgo+ICshUGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmVkLmMgVkVE IHZpZGVvIGNvcmUgaW50ZWdyYXRpb24KPiArIUlkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Zl ZC5jCj4gKyAgICAgIDwvc2VjdDI+Cj4gICAgICAgPC9zZWN0MT4KPiAgICAgICA8c2VjdDE+Cj4g ICAgICAgICA8dGl0bGU+RGlzcGxheSBIYXJkd2FyZSBIYW5kbGluZzwvdGl0bGU+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBpbmRleCA4OTFlNTg0Li5lMmYyNzc2IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtODMsNiArODMsOSBAQCBpOTE1LXkgKz0gZHZvX2NoNzAxNy5vIFwKPiAgIGk5 MTUteSArPSBpOTE1X2RtYS5vIFwKPiAgIAkgIGk5MTVfdW1zLm8KPgo+ICsjIFZFRCBmb3IgVkxW Cj4gK2k5MTUteSArPSBpOTE1X3ZlZC5vCj4gKwo+ICAgb2JqLSQoQ09ORklHX0RSTV9JOTE1KSAg Kz0gaTkxNS5vCj4KPiAgIENGTEFHU19pOTE1X3RyYWNlX3BvaW50cy5vIDo9IC1JJChzcmMpCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXggOWE3MzUzMy4uZmJmMjE0NCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBAIC0xNzkxLDYgKzE3OTEsMTMgQEAgaW50IGk5MTVfZHJp dmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAg IAlpZiAoSVNfR0VONShkZXYpKQo+ICAgCQlpbnRlbF9ncHVfaXBzX2luaXQoZGV2X3ByaXYpOwo+ Cj4gKwlpZiAoSEFTX1ZFRChkZXYpKSB7Cj4gKwkJcmV0ID0gdmx2X3NldHVwX3ZlZChkZXYpOwo+ ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIFZFRCBi cmlkZ2U6ICVkXG4iLCByZXQpOwo+ICsJCX0KPiArCX0KPiArCj4gICAJaW50ZWxfcnVudGltZV9w bV9lbmFibGUoZGV2X3ByaXYpOwo+Cj4gICAJcmV0dXJuIDA7Cj4gQEAgLTE4MzMsNiArMTg0MCwx MCBAQCBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAg IAlpbnQgcmV0Owo+Cj4gKwlpZiAoSEFTX1ZFRChkZXYpKSB7Cj4gKwkJdmx2X3RlYXJkb3duX3Zl ZChkZXYpOwo+ICsJfQo+ICsKPiAgIAlyZXQgPSBpOTE1X2dlbV9zdXNwZW5kKGRldik7Cj4gICAJ aWYgKHJldCkgewo+ICAgCQlEUk1fRVJST1IoImZhaWxlZCB0byBpZGxlIGhhcmR3YXJlOiAlZFxu IiwgcmV0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBmODMwNTk2Li42Y2ZhYmFj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTE3NjIsNiArMTc2MiwxMiBAQCBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4KPiAgIAl1aW50MzJfdCBiaW9zX3ZnYWNudHI7Cj4K PiArCS8qIG5lY2Vzc2FyeSByZXNvdXJjZSBzaGFyaW5nIHdpdGggdmVkIGRyaXZlci4gKi8KPiAr CXN0cnVjdCB7Cj4gKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKPiArCQlpbnQJ aXJxOwo+ICsJfSB2ZWQ7Cj4gKwo+ICAgCS8qIE9sZCBkcmkxIHN1cHBvcnQgaW5mcmFzdHJ1Y3R1 cmUsIGJld2FyZSB0aGUgZHJhZ29ucyB5YSBmb29scyBlbnRlcmluZwo+ICAgCSAqIGhlcmUhICov Cj4gICAJc3RydWN0IGk5MTVfZHJpMV9zdGF0ZSBkcmkxOwo+IEBAIC0yMjU3LDYgKzIyNjMsNyBA QCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKPiAgIAkJCQkgSVNfQlJPQURXRUxMKGRldikg fHwgSVNfVkFMTEVZVklFVyhkZXYpKQo+ICAgI2RlZmluZSBIQVNfUkM2KGRldikJCShJTlRFTF9J TkZPKGRldiktPmdlbiA+PSA2KQo+ICAgI2RlZmluZSBIQVNfUkM2cChkZXYpCQkoSU5URUxfSU5G TyhkZXYpLT5nZW4gPT0gNiB8fCBJU19JVllCUklER0UoZGV2KSkKPiArI2RlZmluZSBIQVNfVkVE KGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX3ZhbGxleXZpZXcgJiYgSVNfR0VONyhkZXYpKQo+ Cj4gICAjZGVmaW5lIElOVEVMX1BDSF9ERVZJQ0VfSURfTUFTSwkJMHhmZjAwCj4gICAjZGVmaW5l IElOVEVMX1BDSF9JQlhfREVWSUNFX0lEX1RZUEUJCTB4M2IwMAo+IEBAIC0yODUxLDYgKzI4NTgs MTEgQEAgdm9pZCBpOTE1X3Jlc3RvcmVfZGlzcGxheV9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gICB2b2lkIGk5MTVfc2V0dXBfc3lzZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldl9wcml2 KTsKPiAgIHZvaWQgaTkxNV90ZWFyZG93bl9zeXNmcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2X3By aXYpOwo+Cj4gKy8qIGk5MTVfdmVkLmMgKi8KPiAraW50IHZsdl9zZXR1cF92ZWQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gK3ZvaWQgdmx2X3RlYXJkb3duX3ZlZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiArdm9pZCB2bHZfdmVkX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICsKPiAgIC8qIGludGVsX2kyYy5jICovCj4gICBleHRlcm4gaW50IGludGVsX3NldHVw X2dtYnVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICAgZXh0ZXJuIHZvaWQgaW50ZWxfdGVh cmRvd25fZ21idXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jCj4gaW5kZXggNWZmZjI4Ny4uYTMzOTRkZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEu Ywo+IEBAIC0xODY1LDYgKzE4NjUsOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5dmlld19p cnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gICAJCQlzbmJfZ3RfaXJxX2hhbmRsZXIo ZGV2LCBkZXZfcHJpdiwgZ3RfaWlyKTsKPiAgIAkJaWYgKHBtX2lpcikKPiAgIAkJCWdlbjZfcnBz X2lycV9oYW5kbGVyKGRldl9wcml2LCBwbV9paXIpOwo+ICsJCWlmIChpaXIgJiBWTFZfVkVEX0JM T0NLX0lOVEVSUlVQVCkKPiArCQkJdmx2X3ZlZF9pcnFfaGFuZGxlcihkZXYpOwo+ICAgCQkvKiBD YWxsIHJlZ2FyZGxlc3MsIGFzIHNvbWUgc3RhdHVzIGJpdHMgbWlnaHQgbm90IGJlCj4gICAJCSAq IHNpZ25hbGxlZCBpbiBpaXIgKi8KPiAgIAkJdmFsbGV5dmlld19waXBlc3RhdF9pcnFfaGFuZGxl cihkZXYsIGlpcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggZDQzZmEwZS4uMWE0 NmZlNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC0xMjg0LDYgKzEyODQsOSBA QCBlbnVtIHB1bml0X3Bvd2VyX3dlbGwgewo+ICAgI2RlZmluZSBWTFZfRElTUExBWV9CQVNFIDB4 MTgwMDAwCj4gICAjZGVmaW5lIFZMVl9NSVBJX0JBU0UgVkxWX0RJU1BMQVlfQkFTRQo+Cj4gKyNk ZWZpbmUgVkxWX1ZFRF9CQVNFIDB4MTcwMDAwCj4gKyNkZWZpbmUgVkxWX1ZFRF9TSVpFIDB4MDEw MDAwCj4gKwo+ICAgI2RlZmluZSBWTFZfR1VfQ1RMMAkoVkxWX0RJU1BMQVlfQkFTRSArIDB4MjAz MCkKPiAgICNkZWZpbmUgVkxWX0dVX0NUTDEJKFZMVl9ESVNQTEFZX0JBU0UgKyAweDIwMzQpCj4g ICAjZGVmaW5lIFNDUEQwCQkweDAyMDljIC8qIDkxNSsgb25seSAqLwo+IEBAIC0xNDc3LDYgKzE0 ODAsNyBAQCBlbnVtIHB1bml0X3Bvd2VyX3dlbGwgewo+ICAgI2RlZmluZSBJTEtfQlNEX1VTRVJf SU5URVJSVVBUCQkJCSgxPDw1KQo+Cj4gICAjZGVmaW5lIEk5MTVfUE1fSU5URVJSVVBUCQkJCSgx PDwzMSkKPiArI2RlZmluZSBWTFZfVkVEX0JMT0NLX0lOVEVSUlVQVAkJCSgxPDwyMykKPiAgICNk ZWZpbmUgSTkxNV9JU1BfSU5URVJSVVBUCQkJCSgxPDwyMikKPiAgICNkZWZpbmUgSTkxNV9MUEVf UElQRV9CX0lOVEVSUlVQVAkJCSgxPDwyMSkKPiAgICNkZWZpbmUgSTkxNV9MUEVfUElQRV9BX0lO VEVSUlVQVAkJCSgxPDwyMCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV92ZWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdmVkLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjk4MmU2OWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92ZWQuYwo+IEBAIC0wLDAgKzEsMjU1IEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBU SEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIFlhbyBDaGVuZyA8eWFv LmNoZW5nQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYu aCIKPiArCj4gKy8qKgo+ICsgKiBET0M6IFZFRCB2aWRlbyBjb3JlIGludGVncmF0aW9uCj4gKyAq Cj4gKyAqIE1vdGl2YXRpb246Cj4gKyAqIFNvbWUgcGxhdGZvcm1zIChlLmcuIHZhbGxleXZpZXcp IGludGVncmF0ZXMgYSBWRUQgaW5zaWRlIEdQVSB0byBleHRlbmQgdGhlCj4gKyAqIHZpZGVvIGRl Y29kaW5nIGNhcGFiaWxpdHkuCj4gKyAqIFRoZSBWRUQgaXMgZHJpdmVuIGJ5IHRoZSBzdGFuZGFs b25lIGRybSBkcml2ZXIgImlwdnIiIHdoaWNoIGNvdmVycyBQb3dlclZSCj4gKyAqIFZQVXMuIFNp bmNlIHRoZSBQb3dlclZSIFZQVXMgYXJlIGFsc28gaW50ZWdyYXRlZCBieSBub24taTkxNSBwbGF0 Zm9ybXMgc3VjaAo+ICsgKiBhcyBHTUE1MDAsIHdlJ2QgbGlrZSB0byBrZWVwIGlwdnIgZHJpdmVy IGFuZCBpOTE1IGRyaXZlciBzZXBhcmF0ZWQgYW5kCj4gKyAqIGluZGVwZW5kZW50IHRvIGVhY2gg b3RoZXIuIFRvIGFjaGlldmUgdGhpcyB3ZSBkbyB0aGUgbWluaW11bSB3b3JrIGluIGk5MTUKPiAr ICogdG8gc2V0dXAgYSBicmlkZ2UgYmV0d2VlbiBpcHZyIGFuZCBpOTE1Ogo+ICsgKiAxLiBDcmVh dGUgYSBwbGF0Zm9ybSBkZXZpY2UgdG8gc2hhcmUgTU1JTy9JUlEgcmVzb3VyY2VzCj4gKyAqIDIu IE1ha2UgdGhlIHBsYXRmb3JtIGRldmljZSBjaGlsZCBvZiBpOTE1IGRldmljZSBmb3IgcnVudGlt ZSBQTS4KPiArICogMy4gQ3JlYXRlIElSUSBjaGlwIHRvIGZvcndhcmQgdGhlIFZFRCBpcnFzLgo+ ICsgKiBpcHZyIGRyaXZlciBwcm9iZXMgdGhlIFZFRCBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcg ZHJpIGNhcmQgb24gaW5zdGFsbC4KPiArICoKPiArICogVGhyZWF0czoKPiArICogRHVlIHRvIHRo ZSByZXN0cmljdGlvbiBpbiBMaW51eCBwbGF0Zm9ybSBkZXZpY2UgbW9kZWwsIHVzZXIgbmVlZCBt YW51YWxseQo+ICsgKiB1bmluc3RhbGwgaXB2ciBkcml2ZXIgYmVmb3JlIHVuaW5zdGFsbGluZyBp OTE1IG1vZHVsZSwgb3RoZXJ3aXNlIGhlIG1pZ2h0Cj4gKyAqIHJ1biBpbnRvIHVzZS1hZnRlci1m cmVlIGlzc3VlcyBhZnRlciBpOTE1IHJlbW92ZXMgdGhlIHBsYXRmb3JtIGRldmljZS4KCkNhbiB5 b3UgZ28gaW4gdG8gbW9yZSBkZXRhaWwgb24gd2hhdCB5b3UgY29uc2lkZXIgdG8gYmUgdGhlIHJl c3RyaWN0aW9uIAppbiB0aGUgcGxhdGZvcm0gZGV2aWNlIG1vZGVsPwoKV2hlbiByZW1vdmluZyB0 aGUgZGV2aWNlIHZpYSBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciwgaXQgd2lsbCBjYWxsIAp0 aGUgcmVtb3ZlIGNhbGxiYWNrIG9mIGFueSBkcml2ZXJzIGhhbmRsaW5nIHRoaXMgZGV2aWNlICh2 aWEgdGhlIGJ1cyAKcmVtb3ZlIGZ1bmN0aW9uKS4gSXQgaXMgdGhlbiB1cCB0byB0aGUgZHJpdmVy IHRvIGVuc3VyZSBubyBmdXJ0aGVyIHVzYWdlIApvZiB0aGUgZGV2aWNlIGZyb20gd2hpY2ggaXQg aXMgYmVpbmcgcmVtb3ZlZC4gVGhpcyB1c3VhbGx5IGludm9sdmVzIApyZW1vdmluZyBhbGwgdXNl ciBpbnB1dCB2ZWN0b3JzLCBkaXNhYmxpbmcgaW50ZXJydXB0cyBpbnZvbHZlZCBhbmQgCmZsdXNo aW5nL2NhbmNlbGluZyBhbnkgZGVsYXllZCB3b3JrLiBUaGlzIHNob3VsZCBwcmV2ZW50IGFueSBm dXJ0aGVyIHVzZSAKb2YgdGhlIGRldmljZSBieSB0aGUgZHJpdmVyLgoKVGhlIGRyaXZlcidzIHJl bW92ZSBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSBkaXJlY3QgY2FsbCBjaGFpbiBmcm9tIApwbGF0 Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlciwgc28gYnkgdGhlIHRpbWUgaXQgcmV0dXJucywgdGhlcmUg c2hvdWxkIGJlIApubyBmdXJ0aGVyIGNoYW5jZSBvZiBhY2Nlc3Nlcy4KCj4gKyAqCj4gKyAqIElt cGxlbWVudGF0aW9uOgo+ICsgKiBUaGUgTU1JTy9SRUcgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSBj cmVhdGVkIGFjY29yZGluZyB0byB0aGUgcmVnaXN0ZXJzCj4gKyAqIHNwZWNpZmljYXRpb24uCj4g KyAqIFdoZW4gZm9yd2FyZGluZyBWRUQgaXJxcywgdGhlIGZsb3cgY29udHJvbCBoYW5kbGVyIHNl bGVjdGlvbiBkZXBlbmRzIG9uIHRoZQo+ICsgKiBwbGF0Zm9ybSwgZm9yIGV4YW1wbGUgb24gdmFs bGV5dmlldyBoYW5kbGVfc2ltcGxlX2lycSBpcyBlbm91Z2guCj4gKyAqCj4gKyAqLwo+ICsKPiAr c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHZsdl92ZWRfcGxhdGRldl9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCByZXNvdXJj ZSByc2NbMl0gPSB7IHswfSwgezB9IH07Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0 ZGV2Owo+ICsJdTY0ICpkbWFfbWFzayA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWlmIChkZXZfcHJpdi0+dmVk LmlycSA8IDApCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJcGxhdGRldiA9 IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaXB2ci12ZWQtdmx2IiwgLTEpOwo+ICsJaWYgKCFwbGF0 ZGV2KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxv Y2F0ZSBWRUQgcGxhdGZvcm0gZGV2aWNlXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4g KwkvKiB0byB3b3JrLWFyb3VuZCBjaGVja19hZGRyIGluIG5vbW11X21hcF9zZygpICovCj4gKwlk bWFfbWFzayA9IGttYWxsb2Moc2l6ZW9mKCpwbGF0ZGV2LT5kZXYuZG1hX21hc2spLCBHRlBfS0VS TkVMKTsKPiArCWlmICghZG1hX21hc2spIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCURSTV9F UlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYV9tYXNrXG4iKTsKPiArCQlnb3RvIGVycl9wdXRf ZGV2Owo+ICsJfQo+ICsJKmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMxKTsKPiArCXBsYXRkZXYt PmRldi5kbWFfbWFzayA9IGRtYV9tYXNrOwo+ICsJcGxhdGRldi0+ZGV2LmNvaGVyZW50X2RtYV9t YXNrID0gKmRtYV9tYXNrOwo+ICsKPiArCXJzY1swXS5zdGFydCAgICA9IHJzY1swXS5lbmQgPSBk ZXZfcHJpdi0+dmVkLmlycTsKPiArCXJzY1swXS5mbGFncyAgICA9IElPUkVTT1VSQ0VfSVJROwo+ ICsJcnNjWzBdLm5hbWUgICAgID0gImlwdnItdmVkLXZsdi1pcnEiOwo+ICsKPiArCXJzY1sxXS5z dGFydCAgICA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsgVkxWX1ZFRF9CQVNF Owo+ICsJcnNjWzFdLmVuZCAgICAgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkg KyBWTFZfVkVEX0JBU0UgKyBWTFZfVkVEX1NJWkU7Cj4gKwlyc2NbMV0uZmxhZ3MgICAgPSBJT1JF U09VUkNFX01FTTsKPiArCXJzY1sxXS5uYW1lICAgICA9ICJpcHZyLXZlZC12bHYtbW1pbyI7Cj4g Kwo+ICsJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGxhdGRldiwgcnNjLCAy KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhZGQgcmVzb3VyY2Ug Zm9yIFZFRCBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX3B1dF9k ZXY7Cj4gKwl9Cj4gKwo+ICsJcGxhdGRldi0+ZGV2LnBhcmVudCA9IGRldi0+ZGV2OyAvKiBmb3Ig VkVEIGRyaXZlcidzIHJ1bnRpbWUtUE0gKi8KPiArCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQo cGxhdGRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWRkIFZF RCBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX3B1dF9kZXY7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIHBsYXRkZXY7Cj4gK2Vycl9wdXRfZGV2Ogo+ICsJcGxhdGZvcm1f ZGV2aWNlX3B1dChwbGF0ZGV2KTsKPiArZXJyOgo+ICsJaWYgKGRtYV9tYXNrKQo+ICsJCWtmcmVl KGRtYV9tYXNrKTsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZsdl92ZWRfcGxhdGRldl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 Cj4gKwlpZiAoZGV2X3ByaXYtPnZlZC5wbGF0ZGV2KSB7Cj4gKwkJa2ZyZWUoZGV2X3ByaXYtPnZl ZC5wbGF0ZGV2LT5kZXYuZG1hX21hc2spOwo+ICsJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVy KGRldl9wcml2LT52ZWQucGxhdGRldik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZs dl92ZWRfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBkLT5jaGlwX2RhdGE7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsK PiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsJZGV2X3ByaXYtPmlycV9tYXNrICY9IH5W TFZfVkVEX0JMT0NLX0lOVEVSUlVQVDsKPiArCUk5MTVfV1JJVEUoVkxWX0lJUiwgVkxWX1ZFRF9C TE9DS19JTlRFUlJVUFQpOwo+ICsJSTkxNV9XUklURShWTFZfSUlSLCBWTFZfVkVEX0JMT0NLX0lO VEVSUlVQVCk7Cj4gKwlJOTE1X1dSSVRFKFZMVl9JTVIsIGRldl9wcml2LT5pcnFfbWFzayk7Cj4g KwlJOTE1X1dSSVRFKFZMVl9JRVIsIH5kZXZfcHJpdi0+aXJxX21hc2spOwo+ICsJUE9TVElOR19S RUFEKFZMVl9JRVIpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5p cnFfbG9jaywgaXJxZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2bHZfdmVkX2lycV9t YXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGQtPmNoaXBfZGF0YTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwo+ICsJdW5zaWduZWQg bG9uZyBpcnFmbGFnczsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ss IGlycWZsYWdzKTsKPiArCj4gKwlkZXZfcHJpdi0+aXJxX21hc2sgfD0gVkxWX1ZFRF9CTE9DS19J TlRFUlJVUFQ7Cj4gKwlJOTE1X1dSSVRFKFZMVl9JRVIsIH5kZXZfcHJpdi0+aXJxX21hc2spOwo+ ICsJSTkxNV9XUklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOwo+ICsJSTkxNV9XUklU RShWTFZfSUlSLCBWTFZfVkVEX0JMT0NLX0lOVEVSUlVQVCk7Cj4gKwlJOTE1X1dSSVRFKFZMVl9J SVIsIFZMVl9WRURfQkxPQ0tfSU5URVJSVVBUKTsKPiArCVBPU1RJTkdfUkVBRChWTFZfSUlSKTsK PiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZs YWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB2bHZfdmVkX2lycWNoaXAg PSB7Cj4gKwkubmFtZSA9ICJpcHZyX3ZlZF9pcnFjaGlwIiwKPiArCS5pcnFfbWFzayA9IHZsdl92 ZWRfaXJxX21hc2ssCj4gKwkuaXJxX3VubWFzayA9IHZsdl92ZWRfaXJxX3VubWFzaywKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgdmx2X3ZlZF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgaXJxKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSAo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKPiArCVdBUk5fT04o IWludGVsX2lycXNfZW5hYmxlZChkZXZfcHJpdikpOwo+ICsJaXJxX3NldF9jaGlwX2FuZF9oYW5k bGVyX25hbWUoaXJxLAo+ICsJCSZ2bHZfdmVkX2lycWNoaXAsCj4gKwkJaGFuZGxlX3NpbXBsZV9p cnEsCj4gKwkJImlwdnJfdmVkX3Zsdl9pcnFfaGFuZGxlciIpOwo+ICsJcmV0dXJuIGlycV9zZXRf Y2hpcF9kYXRhKGlycSwgZGV2KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHZsdl92ZWRfaXJxX2hh bmRsZXIoKSAtIGZvcndhcmRzIHRoZSBWRUQgaXJxCj4gKyAqIEBkZXY6IHRoZSBpOTE1IGRybSBk ZXZpY2UKPiArICoKPiArICogdGhlIFZFRCBpcnEgaXMgZm9yd2FyZGVkIHRvIHRoZSBpcnEgaGFu ZGxlciByZWdpc3RlcmVkIGJ5IFZFRCBkcml2ZXIuCj4gKyAqLwo+ICt2b2lkIHZsdl92ZWRfaXJx X2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJldDsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlp ZiAoZGV2X3ByaXYtPnZlZC5pcnEgPCAwICYmIHByaW50a19yYXRlbGltaXQoKSkgewo+ICsJCURS TV9FUlJPUigiaW52YWxpZCB2ZWQgaXJxIG51bWJlcjogJWRcbiIsIGRldl9wcml2LT52ZWQuaXJx KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwlyZXQgPSBnZW5lcmljX2hhbmRsZV9pcnEoZGV2X3By aXYtPnZlZC5pcnEpOwo+ICsJaWYgKHJldCAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKPiArCQlE Uk1fRVJST1IoImVycm9yIGhhbmRsaW5nIHZsdiB2ZWQgaXJxOiAlZFxuIiwgcmV0KTsKPiArCX0K PiArfQo+ICsKPiArLyoqCj4gKyAqIHZsdl9zZXR1cF92ZWQoKSAtIHNldHVwIHRoZSBicmlkZ2Ug YmV0d2VlbiBWRUQgZHJpdmVyIGFuZCBpOTE1Cj4gKyAqIEBkZXY6IHRoZSBpOTE1IGRybSBkZXZp Y2UKPiArICoKPiArICogc2V0IHVwIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHJlc291cmNlcyBmb3Ig dGhlIGJyaWRnZTogaXJxIGNoaXAsIHBsYXRmb3JtCj4gKyAqIHJlc291cmNlIGFuZCBwbGF0Zm9y bSBkZXZpY2UuIGk5MTUgZGV2aWNlIGlzIHNldCBhcyBwYXJlbnQgb2YgdGhlIG5ldwo+ICsgKiBw bGF0Zm9ybSBkZXZpY2UuCj4gKyAqCj4gKyAqIFJldHVybjogMCBpZiBzdWNjZXNzZnVsLiBub24t emVybyBpZiBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGZhaWxzCj4gKyAqLwo+ICtpbnQgdmx2 X3NldHVwX3ZlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAr Cj4gKwlkZXZfcHJpdi0+dmVkLmlycSA9IGlycV9hbGxvY19kZXNjcygtMSwgMCwgMSwgMCk7Cj4g KwlpZiAoZGV2X3ByaXYtPnZlZC5pcnEgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g YWxsb2NhdGUgSVJRIGRlc2M6ICVkXG4iLCBkZXZfcHJpdi0+dmVkLmlycSk7Cj4gKwkJcmV0ID0g ZGV2X3ByaXYtPnZlZC5pcnE7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdmx2 X3ZlZF9pcnFfaW5pdChkZXYsIGRldl9wcml2LT52ZWQuaXJxKTsKPiArCWlmIChyZXQpIHsKPiAr CQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGlycWNoaXAgZm9yIHZsdi12ZWQ6ICVk XG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX2ZyZWVfaXJxOwo+ICsJfQo+ICsKPiArCWRldl9wcml2 LT52ZWQucGxhdGRldiA9IHZsdl92ZWRfcGxhdGRldl9jcmVhdGUoZGV2KTsKPiArCWlmIChJU19F UlIoZGV2X3ByaXYtPnZlZC5wbGF0ZGV2KSkgewo+ICsJCXJldCA9IFBUUl9FUlIoZGV2X3ByaXYt PnZlZC5wbGF0ZGV2KTsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGxhdGZvcm0g ZGV2aWNlIGZvciB2bHYtdmVkOiAlZFxuIiwgcmV0KTsKPiArCQlnb3RvIGVycl9mcmVlX2lycTsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArZXJyX2ZyZWVfaXJxOgo+ICsJaXJxX2ZyZWVfZGVz YyhkZXZfcHJpdi0+dmVkLmlycSk7Cj4gK2VycjoKPiArCWRldl9wcml2LT52ZWQuaXJxID0gLTE7 Cj4gKwlkZXZfcHJpdi0+dmVkLnBsYXRkZXYgPSBOVUxMOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIHZsdl90ZWFyZG93bl92ZWQoKSAtIGRlc3Ryb3kgdGhlIGJyaWRnZSBi ZXR3ZWVuIFZFRCBkcml2ZXIgYW5kIGk5MTUKPiArICogQGRldjogdGhlIGk5MTUgZHJtIGRldmlj ZQo+ICsgKgo+ICsgKiByZWxlYXNlIGFsbCB0aGUgcmVzb3VyY2VzIGZvciBWRUQgPC0+IGk5MTUg YnJpZGdlLgo+ICsgKi8KPiArdm9pZCB2bHZfdGVhcmRvd25fdmVkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cgp5b3UgbWF5IHdhbnQgdG8gbWFzayB0aGUgaTkxNSBpbnRlcnJ1cHQgZm9y IHRoZSBWRUQgYmxvY2sgYmVmb3JlIApyZW1vdmluZyB0aGUgZGV2aWNlLgoKPiArCXZsdl92ZWRf cGxhdGRldl9kZXN0cm95KGRldik7Cj4gKwlpZiAoZGV2X3ByaXYtPnZlZC5pcnEgPj0gMCkKPiAr CQlpcnFfZnJlZV9kZXNjKGRldl9wcml2LT52ZWQuaXJxKTsKPiArfQo+CgoKR2VuZXJhbGx5IGl0 IGlzIGEgbmljZWx5IGludGVyZmFjZWQgY2hpbGQgZGV2aWNlLgoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==