From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,v2,12/15] usb:cdns3: Adds enumeration related function. From: Roger Quadros Message-Id: <5BFEB92C.9060903@ti.com> Date: Wed, 28 Nov 2018 17:50:04 +0200 To: Pawel Laszczak , devicetree@vger.kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, adouglas@cadence.com, jbergsagel@ti.com, nsekhar@ti.com, nm@ti.com, sureshp@cadence.com, peter.chen@nxp.com, pjez@cadence.com, kurahul@cadence.com List-ID: T24gMTgvMTEvMTggMTI6MDksIFBhd2VsIExhc3pjemFrIHdyb3RlOgo+IFBhdGNoIGltcGxlbWVu dHMgYSBzZXQgb2YgZnVuY3Rpb24gcmVsYXRlZCB0byBlbnVtZXJhdGlvbiBwcm9jZXNzLgo+IFNv bWUgc3RhbmRhcmQgcmVxdWVzdHMgYXJlIGhhbmRsZWQgb24gY29udHJvbGxlciBkcml2ZXIgbGV2 ZWwgYW5kCj4gb3RoZXIgYXJlIGRlbGVnYXRlZCB0byBnYWRnZXQgY29yZSBkcml2ZXIuCj4gQWxs IGNsYXNzIHJlcXVlc3RzIGFyZSBkZWxlZ2F0ZWQgdG8gZ2FkZ2V0IGNvcmUgZHJpdmVyLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IFBhd2VsIExhc3pjemFrIDxwYXdlbGxAY2FkZW5jZS5jb20+Cj4gLS0t Cj4gIGRyaXZlcnMvdXNiL2NkbnMzL2VwMC5jICAgIHwgNDkxICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KPiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmMgfCAxMTkgKysr KysrKysrCj4gIGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5oIHwgICA0ICsKPiAgMyBmaWxlcyBj aGFuZ2VkLCA2MTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvY2RuczMvZXAwLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9lcDAuYwo+IGlu ZGV4IGViOTJmZDIzNGJkNy4uNmYzM2Q5OGY3Njg0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNi L2NkbnMzL2VwMC5jCj4gKysrIGIvZHJpdmVycy91c2IvY2RuczMvZXAwLmMKPiBAQCAtMTAsNiAr MTAsNyBAQAo+ICAgKgkgICAgUGV0ZXIgQ2hlbiA8cGV0ZXIuY2hlbkBueHAuY29tPgo+ICAgKi8K PiAgCj4gKyNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+Cj4gICNpbmNsdWRlICJnYWRn ZXQuaCIKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgY2RuczNf Z2FkZ2V0X2VwMF9kZXNjID0gewo+IEBAIC01Miw5ICs1MywzMSBAQCBzdGF0aWMgdm9pZCBjZG5z M19lcDBfcnVuX3RyYW5zZmVyKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LAo+ICAJCXdy aXRlbChFUF9DTURfRVJEWSwgJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQpOwo+ICB9Cj4gIAo+ICsv KioKPiArICogY2RuczNfZXAwX2RlbGVnYXRlX3JlcSAtIFJldHVybnMgc3RhdHVzIG9mIGhhbmRs aW5nIHNldHVwIHBhY2tldAo+ICsgKiBTZXR1cCBpcyBoYW5kbGVkIGJ5IGdhZGdldCBkcml2ZXIK PiArICogQHByaXZfZGV2OiBleHRlbmRlZCBnYWRnZXQgb2JqZWN0Cj4gKyAqIEBjdHJsX3JlcTog cG9pbnRlciB0byByZWNlaXZlZCBzZXR1cCBwYWNrZXQKPiArICoKPiArICogUmV0dXJucyB6ZXJv IG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGlj IGludCBjZG5zM19lcDBfZGVsZWdhdGVfcmVxKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2 LAo+ICsJCQkJICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsX3JlcSkKPiArewo+ICsJaW50 IHJldDsKPiArCj4gKwlzcGluX3VubG9jaygmcHJpdl9kZXYtPmxvY2spOwo+ICsJcHJpdl9kZXYt PnNldHVwX3BlbmRpbmcgPSAxOwo+ICsJcmV0ID0gcHJpdl9kZXYtPmdhZGdldF9kcml2ZXItPnNl dHVwKCZwcml2X2Rldi0+Z2FkZ2V0LCBjdHJsX3JlcSk7Cj4gKwlwcml2X2Rldi0+c2V0dXBfcGVu ZGluZyA9IDA7CgpXaHkgaXMgc2V0dXBfcGVuZGluZyBmbGFnIGJlaW5nIHNldCBhbmQgY2xlYXJl ZD8KCj4gKwlzcGluX2xvY2soJnByaXZfZGV2LT5sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gIHN0YXRpYyB2b2lkIGNkbnMzX3ByZXBhcmVfc2V0dXBfcGFja2V0KHN0cnVjdCBjZG5z M19kZXZpY2UgKnByaXZfZGV2KQo+ICB7Cj4gLQkvL1RPRE86IEltcGxlbWVudHMgdGhpcyBmdW5j dGlvbgo+ICsJcHJpdl9kZXYtPmVwMF9kYXRhX2RpciA9IDA7Cj4gKwljZG5zM19lcDBfcnVuX3Ry YW5zZmVyKHByaXZfZGV2LCBwcml2X2Rldi0+c2V0dXBfZG1hLCA4LCAwKTsKCndoeSBoYXJkY29k ZSB0byA4PwpEb24ndCB2ZW5kb3Igc3BlY2lmaWMgcmVxdWVzdHMgaGF2ZSBkaWZmZXJlbnQgbGVu Z3Rocz8KCj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGNkbnMzX3NldF9od19jb25maWd1cmF0aW9u KHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2KQo+IEBAIC05MCw5ICsxMTMsNDMxIEBAIHN0 YXRpYyB2b2lkIGNkbnMzX3NldF9od19jb25maWd1cmF0aW9uKHN0cnVjdCBjZG5zM19kZXZpY2Ug KnByaXZfZGV2KQo+ICAJfQo+ICB9Cj4gIAo+ICsvKioKPiArICogY2RuczNfcmVxX2VwMF9zZXRf Y29uZmlndXJhdGlvbiAtIEhhbmRsaW5nIG9mIFNFVF9DT05GSUcgc3RhbmRhcmQgVVNCIHJlcXVl c3QKPiArICogQHByaXZfZGV2OiBleHRlbmRlZCBnYWRnZXQgb2JqZWN0Cj4gKyAqIEBjdHJsX3Jl cTogcG9pbnRlciB0byByZWNlaXZlZCBzZXR1cCBwYWNrZXQKPiArICoKPiArICogUmV0dXJucyAw IGlmIHN1Y2Nlc3MsIDB4N0ZGRiBvbiBkZWZlcnJlZCBzdGF0dXMgc3RhZ2UsIGVycm9yIGNvZGUg b24gZXJyb3IKCndoYXQgaXMgdGhpcyBtYWdpYyBudW1iZXIgMHg3ZmZmPwoKPiArICovCj4gK3N0 YXRpYyBpbnQgY2RuczNfcmVxX2VwMF9zZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgY2RuczNfZGV2 aWNlICpwcml2X2RldiwKPiArCQkJCQkgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsX3Jl cSkKPiArewo+ICsJZW51bSB1c2JfZGV2aWNlX3N0YXRlIGRldmljZV9zdGF0ZSA9IHByaXZfZGV2 LT5nYWRnZXQuc3RhdGU7Cj4gKwlzdHJ1Y3QgY2RuczNfZW5kcG9pbnQgKnByaXZfZXAsICp0ZW1w X2VwOwo+ICsJdTMyIGNvbmZpZyA9IGxlMTZfdG9fY3B1KGN0cmxfcmVxLT53VmFsdWUpOwo+ICsJ aW50IHJlc3VsdCA9IDA7Cj4gKwo+ICsJc3dpdGNoIChkZXZpY2Vfc3RhdGUpIHsKPiArCWNhc2Ug VVNCX1NUQVRFX0FERFJFU1M6Cj4gKwkJLyogQ29uZmlndXJlIG5vbi1jb250cm9sIEVQcyAqLwo+ ICsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2VwLCB0ZW1wX2VwLAo+ICsJCQkJCSAm cHJpdl9kZXYtPmVwX21hdGNoX2xpc3QsCj4gKwkJCQkJIGVwX21hdGNoX3BlbmRpbmdfbGlzdCkK PiArCQkJY2RuczNfZXBfY29uZmlnKHByaXZfZXApOwoKV2h5IGNvbmZpZ3VyZSBoZXJlPyBUaGV5 IHNob3VsZCBiZSBjb25maWd1cmVkIGF0IGVwX2VuYWJsZS4gbm8/CkFuZCB5b3UgZG9uJ3QgbmVl ZCB0byBtYWludGFpbiBhIGVwX21hdGNoL3BlbmRpbmdfbGlzdC4KCj4gKwo+ICsJCXJlc3VsdCA9 IGNkbnMzX2VwMF9kZWxlZ2F0ZV9yZXEocHJpdl9kZXYsIGN0cmxfcmVxKTsKPiArCj4gKwkJaWYg KHJlc3VsdCkKPiArCQkJcmV0dXJuIHJlc3VsdDsKPiArCj4gKwkJaWYgKGNvbmZpZykgewoKV2hh dCBpZiByZXN1bHQgaXMgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUz8KCj4gKwkJCWNkbnMzX3Nl dF9od19jb25maWd1cmF0aW9uKHByaXZfZGV2KTsKCnVzYl9nYWRnZXRfc2V0X3N0YXRlKFVTQl9T VEFURV9DT05GSUdVUkVEKSA/Cgo+ICsJCX0gZWxzZSB7Cj4gKwkJCWNkbnMzX2dhZGdldF91bmNv bmZpZyhwcml2X2Rldik7Cj4gKwkJCXVzYl9nYWRnZXRfc2V0X3N0YXRlKCZwcml2X2Rldi0+Z2Fk Z2V0LAo+ICsJCQkJCSAgICAgVVNCX1NUQVRFX0FERFJFU1MpOwo+ICsJCX0KPiArCQlicmVhazsK PiArCWNhc2UgVVNCX1NUQVRFX0NPTkZJR1VSRUQ6Cj4gKwkJcmVzdWx0ID0gY2RuczNfZXAwX2Rl bGVnYXRlX3JlcShwcml2X2RldiwgY3RybF9yZXEpOwo+ICsKPiArCQlpZiAoIWNvbmZpZyAmJiAh cmVzdWx0KSB7Cj4gKwkJCWNkbnMzX2dhZGdldF91bmNvbmZpZyhwcml2X2Rldik7Cj4gKwkJCXVz Yl9nYWRnZXRfc2V0X3N0YXRlKCZwcml2X2Rldi0+Z2FkZ2V0LAo+ICsJCQkJCSAgICAgVVNCX1NU QVRFX0FERFJFU1MpOwo+ICsJCX0KPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmVzdWx0 ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKioK PiArICogY2RuczNfcmVxX2VwMF9zZXRfYWRkcmVzcyAtIEhhbmRsaW5nIG9mIFNFVF9BRERSRVNT IHN0YW5kYXJkIFVTQiByZXF1ZXN0Cj4gKyAqIEBwcml2X2RldjogZXh0ZW5kZWQgZ2FkZ2V0IG9i amVjdAo+ICsgKiBAY3RybF9yZXE6IHBvaW50ZXIgdG8gcmVjZWl2ZWQgc2V0dXAgcGFja2V0Cj4g KyAqCj4gKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGVycm9yCj4gKyAq Lwo+ICtzdGF0aWMgaW50IGNkbnMzX3JlcV9lcDBfc2V0X2FkZHJlc3Moc3RydWN0IGNkbnMzX2Rl dmljZSAqcHJpdl9kZXYsCj4gKwkJCQkgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmxf cmVxKQo+ICt7Cj4gKwllbnVtIHVzYl9kZXZpY2Vfc3RhdGUgZGV2aWNlX3N0YXRlID0gcHJpdl9k ZXYtPmdhZGdldC5zdGF0ZTsKPiArCXUzMiByZWc7Cj4gKwl1MzIgYWRkcjsKPiArCj4gKwlhZGRy ID0gbGUxNl90b19jcHUoY3RybF9yZXEtPndWYWx1ZSk7Cj4gKwo+ICsJaWYgKGFkZHIgPiBERVZJ Q0VfQUREUkVTU19NQVgpIHsKCklmIERFVklDRV9BRERSRVNTX01BWCBjb21lcyBmcm9tIFVTQiBz cGVjIGl0IG11c3QgYmUgaW4gY2g5LmguCk1heWJlIGFkZCBzb21ldGhpbmcgbGlrZQoKI2RlZmlu ZQlVU0JfREVWSUNFX01BWF9BRERSRVNTCTEyNwoKPiArCQlkZXZfZXJyKCZwcml2X2Rldi0+ZGV2 LAo+ICsJCQkiRGV2aWNlIGFkZHJlc3MgKCVkKSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICVkXG4i LAo+ICsJCQlhZGRyLCBERVZJQ0VfQUREUkVTU19NQVgpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJfQo+ICsKPiArCWlmIChkZXZpY2Vfc3RhdGUgPT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpIHsK PiArCQlkZXZfZXJyKCZwcml2X2Rldi0+ZGV2LCAiVVNCIGRldmljZSBhbHJlYWR5IGNvbmZpZ3Vy ZWRcbiIpOwoKTWVzc2FnZSBpcyBtaXNsZWFkaW5nLiBIb3cgYWJvdXQgImNhbid0IHNldF9hZGRy ZXNzIGZyb20gY29uZmlndXJlZCBzdGF0ZSIKCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJcmVnID0gcmVhZGwoJnByaXZfZGV2LT5yZWdzLT51c2JfY21kKTsKPiArCj4gKwl3cml0 ZWwocmVnIHwgVVNCX0NNRF9GQUREUihhZGRyKSB8IFVTQl9DTURfU0VUX0FERFIsCj4gKwkgICAg ICAgJnByaXZfZGV2LT5yZWdzLT51c2JfY21kKTsKPiArCj4gKwl1c2JfZ2FkZ2V0X3NldF9zdGF0 ZSgmcHJpdl9kZXYtPmdhZGdldCwKPiArCQkJICAgICAoYWRkciA/IFVTQl9TVEFURV9BRERSRVNT IDogVVNCX1NUQVRFX0RFRkFVTFQpKTsKPiArCj4gKwljZG5zM19wcmVwYXJlX3NldHVwX3BhY2tl dChwcml2X2Rldik7Cgp3aHkgY2FsbCB0aGlzIGhlcmU/IFRoaXMgc2hvdWxkIGJlIGRvbmUgYWZ0 ZXIgdGhlIGN1cnJlbnQgZXAwIHJlcXVlc3QgaXMgY29tcGxldGUuCgo+ICsKPiArCXdyaXRlbChF UF9DTURfRVJEWSB8IEVQX0NNRF9SRVFfQ01QTCwgJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2RuczNfcmVxX2VwMF9nZXRf c3RhdHVzIC0gSGFuZGxpbmcgb2YgR0VUX1NUQVRVUyBzdGFuZGFyZCBVU0IgcmVxdWVzdAo+ICsg KiBAcHJpdl9kZXY6IGV4dGVuZGVkIGdhZGdldCBvYmplY3QKPiArICogQGN0cmxfcmVxOiBwb2lu dGVyIHRvIHJlY2VpdmVkIHNldHVwIHBhY2tldAo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgc3Vj Y2VzcywgZXJyb3IgY29kZSBvbiBlcnJvcgo+ICsgKi8KPiArc3RhdGljIGludCBjZG5zM19yZXFf ZXAwX2dldF9zdGF0dXMoc3RydWN0IGNkbnMzX2RldmljZSAqcHJpdl9kZXYsCj4gKwkJCQkgICAg c3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKPiArewo+ICsJX19sZTE2ICpyZXNwb25zZV9w a3Q7Cj4gKwl1MTYgdXNiX3N0YXR1cyA9IDA7Cj4gKwl1MzIgcmVjaXA7Cj4gKwl1MzIgcmVnOwo+ ICsKPiArCXJlY2lwID0gY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0s7Cj4gKwo+ ICsJc3dpdGNoIChyZWNpcCkgewo+ICsJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgo+ICsJCS8qIHNl bGYgcG93ZXJlZCAqLwo+ICsJCXVzYl9zdGF0dXMgfD0gcHJpdl9kZXYtPmdhZGdldC5pc19zZWxm cG93ZXJlZDsKCmlmIChwcnZfZGV2Z2FkZ2V0LmlzX3NlbGZwb3dlcmVkKQoJdXNiX3N0YXRzIHw9 IEJJVChVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7Cgo+ICsKPiArCQlpZiAocHJpdl9kZXYtPmdh ZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfU1VQRVIpCgpZb3Ugc2hvdWxkIGNoZWNrIGNvbnRyb2xs ZXIgc3BlZWQgZGlyZWN0bHkgaW5zdGVhZC4KCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlyZWcgPSBy ZWFkbCgmcHJpdl9kZXYtPnJlZ3MtPnVzYl9zdHMpOwo+ICsKPiArCQlpZiAocHJpdl9kZXYtPnUx X2FsbG93ZWQpCj4gKwkJCXVzYl9zdGF0dXMgfD0gQklUKFVTQl9ERVZfU1RBVF9VMV9FTkFCTEVE KTsKPiArCj4gKwkJaWYgKHByaXZfZGV2LT51Ml9hbGxvd2VkKQo+ICsJCQl1c2Jfc3RhdHVzIHw9 IEJJVChVU0JfREVWX1NUQVRfVTJfRU5BQkxFRCk7Cj4gKwo+ICsJCWlmIChwcml2X2Rldi0+d2Fr ZV91cF9mbGFnKQo+ICsJCQl1c2Jfc3RhdHVzIHw9IEJJVChVU0JfREVWSUNFX1JFTU9URV9XQUtF VVApOwoKUmVtb3RlIHdha2V1cCBpcyBub3QgU1Mgc3BlY2lmaWMuIFNvIG5lZWRzIHRvIGdvIGJl Zm9yZSB0aGUgU1MgY2hlY2suCgo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfUkVDSVBfSU5URVJG QUNFOgo+ICsJCXJldHVybiBjZG5zM19lcDBfZGVsZWdhdGVfcmVxKHByaXZfZGV2LCBjdHJsKTsK PiArCWNhc2UgVVNCX1JFQ0lQX0VORFBPSU5UOgo+ICsJCS8qIGNoZWNrIGlmIGVuZHBvaW50IGlz IHN0YWxsZWQgKi8KPiArCQljZG5zM19zZWxlY3RfZXAocHJpdl9kZXYsIGN0cmwtPndJbmRleCk7 Cj4gKwkJaWYgKEVQX1NUU19TVEFMTChyZWFkbCgmcHJpdl9kZXYtPnJlZ3MtPmVwX3N0cykpKQo+ ICsJCQl1c2Jfc3RhdHVzID0gIEJJVChVU0JfRU5EUE9JTlRfSEFMVCk7Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJlc3BvbnNlX3Br dCA9IChfX2xlMTYgKilwcml2X2Rldi0+c2V0dXA7Cj4gKwkqcmVzcG9uc2VfcGt0ID0gY3B1X3Rv X2xlMTYodXNiX3N0YXR1cyk7Cj4gKwo+ICsJY2RuczNfZXAwX3J1bl90cmFuc2Zlcihwcml2X2Rl diwgcHJpdl9kZXYtPnNldHVwX2RtYSwKPiArCQkJICAgICAgIHNpemVvZigqcmVzcG9uc2VfcGt0 KSwgMSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5zM19lcDBfZmVh dHVyZV9oYW5kbGVfZGV2aWNlKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LAo+ICsJCQkJ CSAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwsCj4gKwkJCQkJICAgaW50IHNldCkKPiAr ewo+ICsJZW51bSB1c2JfZGV2aWNlX3N0YXRlIHN0YXRlOwo+ICsJZW51bSB1c2JfZGV2aWNlX3Nw ZWVkIHNwZWVkOwo+ICsJaW50IHJldCA9IDA7Cj4gKwl1MzIgd1ZhbHVlOwo+ICsJdTMyIHdJbmRl eDsKPiArCXUxNiB0bW9kZTsKPiArCj4gKwl3VmFsdWUgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFs dWUpOwo+ICsJd0luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKPiArCXN0YXRlID0g cHJpdl9kZXYtPmdhZGdldC5zdGF0ZTsKPiArCXNwZWVkID0gcHJpdl9kZXYtPmdhZGdldC5zcGVl ZDsKPiArCj4gKwlzd2l0Y2ggKGN0cmwtPndWYWx1ZSkgewo+ICsJY2FzZSBVU0JfREVWSUNFX1JF TU9URV9XQUtFVVA6Cj4gKwkJcHJpdl9kZXYtPndha2VfdXBfZmxhZyA9ICEhc2V0Owo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBVU0JfREVWSUNFX1UxX0VOQUJMRToKPiArCQlpZiAoc3RhdGUgIT0gVVNC X1NUQVRFX0NPTkZJR1VSRUQgfHwgc3BlZWQgIT0gVVNCX1NQRUVEX1NVUEVSKQo+ICsJCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwkJcHJpdl9kZXYtPnUxX2FsbG93ZWQgPSAhIXNldDsKPiArCQli cmVhazsKPiArCWNhc2UgVVNCX0RFVklDRV9VMl9FTkFCTEU6Cj4gKwkJaWYgKHN0YXRlICE9IFVT Ql9TVEFURV9DT05GSUdVUkVEIHx8IHNwZWVkICE9IFVTQl9TUEVFRF9TVVBFUikKPiArCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCXByaXZfZGV2LT51Ml9hbGxvd2VkID0gISFzZXQ7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIFVTQl9ERVZJQ0VfTFRNX0VOQUJMRToKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfREVWSUNFX1RFU1RfTU9ERToKPiArCQlpZiAoc3Rh dGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQgfHwgc3BlZWQgPiBVU0JfU1BFRURfSElHSCkKPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCXRtb2RlID0gbGUxNl90b19jcHUoY3RybC0+d0lu ZGV4KTsKPiArCj4gKwkJaWYgKCFzZXQgfHwgKHRtb2RlICYgMHhmZikgIT0gMCkKPiArCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCXN3aXRjaCAodG1vZGUgPj4gOCkgewo+ICsJCWNhc2UgVEVT VF9KOgo+ICsJCWNhc2UgVEVTVF9LOgo+ICsJCWNhc2UgVEVTVF9TRTBfTkFLOgo+ICsJCWNhc2Ug VEVTVF9QQUNLRVQ6Cj4gKwkJCWNkbnMzX3NldF9yZWdpc3Rlcl9iaXQoJnByaXZfZGV2LT5yZWdz LT51c2JfY21kLAo+ICsJCQkJCSAgICAgICBVU0JfQ01EX1NUTU9ERSB8Cj4gKwkJCQkJICAgICAg IFVTQl9TVFNfVE1PREVfU0VMKHRtb2RlIC0gMSkpOwo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0 Ogo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCX0KPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4g KwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGNkbnMzX2VwMF9mZWF0dXJlX2hhbmRsZV9pbnRmKHN0cnVjdCBjZG5zM19kZXZp Y2UgKnByaXZfZGV2LAo+ICsJCQkJCSBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsLAo+ICsJ CQkJCSBpbnQgc2V0KQo+ICt7Cj4gKwl1MzIgd1ZhbHVlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ ICsJd1ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKPiArCj4gKwlzd2l0Y2ggKHdW YWx1ZSkgewo+ICsJY2FzZSBVU0JfSU5UUkZfRlVOQ19TVVNQRU5EOgo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgY2RuczNfZXAwX2ZlYXR1cmVfaGFuZGxlX2VuZHBvaW50KHN0 cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LAo+ICsJCQkJCSAgICAgc3RydWN0IHVzYl9jdHJs cmVxdWVzdCAqY3RybCwKPiArCQkJCQkgICAgIGludCBzZXQpCj4gK3sKPiArCXN0cnVjdCBjZG5z M19lbmRwb2ludCAqcHJpdl9lcDsKPiArCWludCByZXQgPSAwOwo+ICsJdTggaW5kZXg7Cj4gKwo+ ICsJaWYgKCEoY3RybC0+d0luZGV4ICYgIH5VU0JfRElSX0lOKSkKPiArCQlyZXR1cm4gMDsKCldo eSBpcyB0aGlzIGNoZWNrPwoKPiArCj4gKwlpbmRleCA9IGNkbnMzX2VwX2FkZHJfdG9faW5kZXgo Y3RybC0+d0luZGV4KTsKPiArCXByaXZfZXAgPSBwcml2X2Rldi0+ZXBzW2luZGV4XTsKPiArCj4g KwljZG5zM19zZWxlY3RfZXAocHJpdl9kZXYsIGN0cmwtPndJbmRleCk7Cj4gKwo+ICsJaWYgKGxl MTZfdG9fY3B1KGN0cmwtPndWYWx1ZSkgIT0gVVNCX0VORFBPSU5UX0hBTFQpCj4gKwkJcmV0dXJu IC1FSU5WQUw7CgpUaGlzIGNoZWNrIHNob3VsZCBiZSBkb25lIGZpcnN0IGJlZm9yZSB5b3UgdHJ5 IHRvIGRlY29kZSB3SW5kZXguCgo+ICsKPiArCWlmIChzZXQpIHsKPiArCQl3cml0ZWwoRVBfQ01E X1NTVEFMTCwgJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQpOwo+ICsJCXByaXZfZXAtPmZsYWdzIHw9 IEVQX1NUQUxMOwo+ICsJfSBlbHNlIHsKPiArCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcXVlc3Q7 Cj4gKwo+ICsJCWlmIChwcml2X2Rldi0+ZXBzW2luZGV4XS0+ZmxhZ3MgJiBFUF9XRURHRSkgewo+ ICsJCQljZG5zM19zZWxlY3RfZXAocHJpdl9kZXYsIDB4MDApOwo+ICsJCQlyZXR1cm4gMDsKPiAr CQl9Cj4gKwo+ICsJCXdyaXRlbChFUF9DTURfQ1NUQUxMIHwgRVBfQ01EX0VQUlNULCAmcHJpdl9k ZXYtPnJlZ3MtPmVwX2NtZCk7Cj4gKwo+ICsJCS8qIHdhaXQgZm9yIEVQUlNUIGNsZWFyZWQgKi8K PiArCQlyZXQgPSBjZG5zM19oYW5kc2hha2UoJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQsCj4gKwkJ CQkgICAgICBFUF9DTURfRVBSU1QsIDAsIDEwMCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJCXByaXZfZXAtPmZsYWdzICY9IH5FUF9TVEFMTDsKPiArCj4gKwkJ cmVxdWVzdCA9IGNkbnMzX25leHRfcmVxdWVzdCgmcHJpdl9lcC0+cmVxdWVzdF9saXN0KTsKPiAr CQlpZiAocmVxdWVzdCkKPiArCQkJY2RuczNfZXBfcnVuX3RyYW5zZmVyKHByaXZfZXAsIHJlcXVl c3QpOwo+ICsJfQo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNkbnMzX3Jl cV9lcDBfaGFuZGxlX2ZlYXR1cmUgLQo+ICsgKiBIYW5kbGluZyBvZiBHRVQvU0VUX0ZFQVRVUkUg c3RhbmRhcmQgVVNCIHJlcXVlc3QKPiArICoKPiArICogQHByaXZfZGV2OiBleHRlbmRlZCBnYWRn ZXQgb2JqZWN0Cj4gKyAqIEBjdHJsX3JlcTogcG9pbnRlciB0byByZWNlaXZlZCBzZXR1cCBwYWNr ZXQKPiArICogQHNldDogbXVzdCBiZSBzZXQgdG8gMSBmb3IgU0VUX0ZFQVRVUkUgcmVxdWVzdAo+ ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgc3VjY2VzcywgZXJyb3IgY29kZSBvbiBlcnJvcgo+ICsg Ki8KPiArc3RhdGljIGludCBjZG5zM19yZXFfZXAwX2hhbmRsZV9mZWF0dXJlKHN0cnVjdCBjZG5z M19kZXZpY2UgKnByaXZfZGV2LAo+ICsJCQkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmws Cj4gKwkJCQkJaW50IHNldCkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwl1MzIgcmVjaXA7Cj4g Kwo+ICsJcmVjaXAgPSBjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSzsKPiArCj4g Kwlzd2l0Y2ggKHJlY2lwKSB7Cj4gKwljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6Cj4gKwkJcmV0ID0g Y2RuczNfZXAwX2ZlYXR1cmVfaGFuZGxlX2RldmljZShwcml2X2RldiwgY3RybCwgc2V0KTsKPiAr CQlicmVhazsKPiArCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKPiArCQlyZXQgPSBjZG5zM19l cDBfZmVhdHVyZV9oYW5kbGVfaW50Zihwcml2X2RldiwgY3RybCwgc2V0KTsKPiArCQlicmVhazsK PiArCWNhc2UgVVNCX1JFQ0lQX0VORFBPSU5UOgo+ICsJCXJldCA9IGNkbnMzX2VwMF9mZWF0dXJl X2hhbmRsZV9lbmRwb2ludChwcml2X2RldiwgY3RybCwgc2V0KTsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFyZXQpCj4gKwkJ d3JpdGVsKEVQX0NNRF9FUkRZIHwgRVBfQ01EX1JFUV9DTVBMLCAmcHJpdl9kZXYtPnJlZ3MtPmVw X2NtZCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNkbnMzX3Jl cV9lcDBfc2V0X3NlbCAtIEhhbmRsaW5nIG9mIFNFVF9TRUwgc3RhbmRhcmQgVVNCIHJlcXVlc3QK PiArICogQHByaXZfZGV2OiBleHRlbmRlZCBnYWRnZXQgb2JqZWN0Cj4gKyAqIEBjdHJsX3JlcTog cG9pbnRlciB0byByZWNlaXZlZCBzZXR1cCBwYWNrZXQKPiArICoKPiArICogUmV0dXJucyAwIGlm IHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZXJyb3IKPiArICovCj4gK3N0YXRpYyBpbnQgY2RuczNf cmVxX2VwMF9zZXRfc2VsKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LAo+ICsJCQkJIHN0 cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmxfcmVxKQo+ICt7Cj4gKwlpZiAocHJpdl9kZXYtPmdh ZGdldC5zdGF0ZSA8IFVTQl9TVEFURV9BRERSRVNTKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCWlmIChjdHJsX3JlcS0+d0xlbmd0aCAhPSA2KSB7Cj4gKwkJZGV2X2VycigmcHJpdl9kZXYt PmRldiwgIlNldCBTRUwgc2hvdWxkIGJlIDYgYnl0ZXMsIGdvdCAlZFxuIiwKPiArCQkJY3RybF9y ZXEtPndMZW5ndGgpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXByaXZfZGV2 LT5lcDBfZGF0YV9kaXIgPSAwOwo+ICsJY2RuczNfZXAwX3J1bl90cmFuc2Zlcihwcml2X2Rldiwg cHJpdl9kZXYtPnNldHVwX2RtYSwgNiwgMSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGNkbnMzX3JlcV9lcDBfc2V0X2lzb2NoX2RlbGF5IC0KPiArICogSGFuZGxpbmcgb2Yg R0VUX0lTT0NIX0RFTEFZIHN0YW5kYXJkIFVTQiByZXF1ZXN0Cj4gKyAqIEBwcml2X2RldjogZXh0 ZW5kZWQgZ2FkZ2V0IG9iamVjdAo+ICsgKiBAY3RybF9yZXE6IHBvaW50ZXIgdG8gcmVjZWl2ZWQg c2V0dXAgcGFja2V0Cj4gKyAqCj4gKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBlcnJvciBjb2Rl IG9uIGVycm9yCj4gKyAqLwo+ICtzdGF0aWMgaW50IGNkbnMzX3JlcV9lcDBfc2V0X2lzb2NoX2Rl bGF5KHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LAo+ICsJCQkJCSBzdHJ1Y3QgdXNiX2N0 cmxyZXF1ZXN0ICpjdHJsX3JlcSkKPiArewo+ICsJaWYgKGN0cmxfcmVxLT53SW5kZXggfHwgY3Ry bF9yZXEtPndMZW5ndGgpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcHJpdl9kZXYtPmlz b2NoX2RlbGF5ID0gY3RybF9yZXEtPndWYWx1ZTsKPiArCXdyaXRlbChFUF9DTURfRVJEWSB8IEVQ X0NNRF9SRVFfQ01QTCwgJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQpOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBjZG5zM19lcDBfc3RhbmRhcmRfcmVxdWVzdCAtIEhhbmRsaW5n IHN0YW5kYXJkIFVTQiByZXF1ZXN0cwo+ICsgKiBAcHJpdl9kZXY6IGV4dGVuZGVkIGdhZGdldCBv YmplY3QKPiArICogQGN0cmxfcmVxOiBwb2ludGVyIHRvIHJlY2VpdmVkIHNldHVwIHBhY2tldAo+ ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgc3VjY2VzcywgZXJyb3IgY29kZSBvbiBlcnJvcgo+ICsg Ki8KPiArc3RhdGljIGludCBjZG5zM19lcDBfc3RhbmRhcmRfcmVxdWVzdChzdHJ1Y3QgY2RuczNf ZGV2aWNlICpwcml2X2RldiwKPiArCQkJCSAgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0 cmxfcmVxKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXN3aXRjaCAoY3RybF9yZXEtPmJSZXF1 ZXN0KSB7Cj4gKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6Cj4gKwkJcmV0ID0gY2RuczNfcmVx X2VwMF9zZXRfYWRkcmVzcyhwcml2X2RldiwgY3RybF9yZXEpOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgo+ICsJCXJldCA9IGNkbnMzX3JlcV9lcDBfc2V0 X2NvbmZpZ3VyYXRpb24ocHJpdl9kZXYsIGN0cmxfcmVxKTsKPiArCQlicmVhazsKPiArCWNhc2Ug VVNCX1JFUV9HRVRfU1RBVFVTOgo+ICsJCXJldCA9IGNkbnMzX3JlcV9lcDBfZ2V0X3N0YXR1cyhw cml2X2RldiwgY3RybF9yZXEpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfUkVRX0NMRUFSX0ZF QVRVUkU6Cj4gKwkJcmV0ID0gY2RuczNfcmVxX2VwMF9oYW5kbGVfZmVhdHVyZShwcml2X2Rldiwg Y3RybF9yZXEsIDApOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgo+ ICsJCXJldCA9IGNkbnMzX3JlcV9lcDBfaGFuZGxlX2ZlYXR1cmUocHJpdl9kZXYsIGN0cmxfcmVx LCAxKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX1JFUV9TRVRfU0VMOgo+ICsJCXJldCA9IGNk bnMzX3JlcV9lcDBfc2V0X3NlbChwcml2X2RldiwgY3RybF9yZXEpOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBVU0JfUkVRX1NFVF9JU09DSF9ERUxBWToKPiArCQlyZXQgPSBjZG5zM19yZXFfZXAwX3Nl dF9pc29jaF9kZWxheShwcml2X2RldiwgY3RybF9yZXEpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVs dDoKPiArCQlyZXQgPSBjZG5zM19lcDBfZGVsZWdhdGVfcmVxKHByaXZfZGV2LCBjdHJsX3JlcSk7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGlj IHZvaWQgX19wZW5kaW5nX3NldHVwX3N0YXR1c19oYW5kbGVyKHN0cnVjdCBjZG5zM19kZXZpY2Ug KnByaXZfZGV2KQo+ICB7Cj4gLQkvL1RPRE86IEltcGxlbWVudHMgdGhpcyBmdW5jdGlvbgo+ICsJ c3RydWN0IHVzYl9yZXF1ZXN0ICpyZXF1ZXN0ID0gcHJpdl9kZXYtPnBlbmRpbmdfc3RhdHVzX3Jl cXVlc3Q7Cj4gKwo+ICsJaWYgKHByaXZfZGV2LT5zdGF0dXNfY29tcGxldGlvbl9ub19jYWxsICYm IHJlcXVlc3QgJiYKPiArCSAgICByZXF1ZXN0LT5jb21wbGV0ZSkgewo+ICsJCXJlcXVlc3QtPmNv bXBsZXRlKHByaXZfZGV2LT5nYWRnZXQuZXAwLCByZXF1ZXN0KTsKPiArCQlwcml2X2Rldi0+c3Rh dHVzX2NvbXBsZXRpb25fbm9fY2FsbCA9IDA7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgY2RuczNf cGVuZGluZ19zZXR1cF9zdGF0dXNfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4g K3sKPiArCXN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2ID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBjZG5zM19kZXZpY2UsCj4gKwkJCXBlbmRpbmdfc3RhdHVzX3dxKTsKPiArCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZfZGV2LT5sb2Nr LCBmbGFncyk7Cj4gKwlfX3BlbmRpbmdfc2V0dXBfc3RhdHVzX2hhbmRsZXIocHJpdl9kZXYpOwo+ ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdl9kZXYtPmxvY2ssIGZsYWdzKTsKPiAgfQo+ ICAKPiAgLyoqCj4gQEAgLTEwMSwxMiArNTQ2LDUwIEBAIHN0YXRpYyB2b2lkIF9fcGVuZGluZ19z ZXR1cF9zdGF0dXNfaGFuZGxlcihzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2RldikKPiAgICov Cj4gIHN0YXRpYyB2b2lkIGNkbnMzX2VwMF9zZXR1cF9waGFzZShzdHJ1Y3QgY2RuczNfZGV2aWNl ICpwcml2X2RldikKPiAgewo+IC0JLy9UT0RPOiBJbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb24uCj4g KwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsID0gcHJpdl9kZXYtPnNldHVwOwo+ICsJaW50 IHJlc3VsdDsKPiArCj4gKwlpZiAoKGN0cmwtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0sp ID09IFVTQl9UWVBFX1NUQU5EQVJEKQo+ICsJCXJlc3VsdCA9IGNkbnMzX2VwMF9zdGFuZGFyZF9y ZXF1ZXN0KHByaXZfZGV2LCBjdHJsKTsKPiArCWVsc2UKPiArCQlyZXN1bHQgPSBjZG5zM19lcDBf ZGVsZWdhdGVfcmVxKHByaXZfZGV2LCBjdHJsKTsKPiArCj4gKwlpZiAocmVzdWx0ICE9IDAgJiYg cmVzdWx0ICE9IFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMpIHsKPiArCQlkZXZfZGJnKCZwcml2 X2Rldi0+ZGV2LCAiU1RBTEwgZm9yIGVwMFxuIik7Cj4gKwkJLyogc2V0X3N0YWxsIG9uIGVwMCAq Lwo+ICsJCWNkbnMzX3NlbGVjdF9lcChwcml2X2RldiwgMHgwMCk7Cj4gKwkJd3JpdGVsKEVQX0NN RF9TU1RBTEwsICZwcml2X2Rldi0+cmVncy0+ZXBfY21kKTsKPiArCQl3cml0ZWwoRVBfQ01EX0VS RFkgfCBFUF9DTURfUkVRX0NNUEwsICZwcml2X2Rldi0+cmVncy0+ZXBfY21kKTsKPiArCX0KPiAg fQo+ICAKPiAgc3RhdGljIHZvaWQgY2RuczNfdHJhbnNmZXJfY29tcGxldGVkKHN0cnVjdCBjZG5z M19kZXZpY2UgKnByaXZfZGV2KQo+ICB7Cj4gLQkvL1RPRE86IEltcGxlbWVudHMgdGhpcyBmdW5j dGlvbgo+ICsJaWYgKHByaXZfZGV2LT5lcDBfcmVxdWVzdCkgewo+ICsJCXVzYl9nYWRnZXRfdW5t YXBfcmVxdWVzdF9ieV9kZXYocHJpdl9kZXYtPnN5c2RldiwKPiArCQkJCQkJcHJpdl9kZXYtPmVw MF9yZXF1ZXN0LAo+ICsJCQkJCQlwcml2X2Rldi0+ZXAwX2RhdGFfZGlyKTsKPiArCj4gKwkJcHJp dl9kZXYtPmVwMF9yZXF1ZXN0LT5hY3R1YWwgPQo+ICsJCQlUUkJfTEVOKGxlMzJfdG9fY3B1KHBy aXZfZGV2LT50cmJfZXAwLT5sZW5ndGgpKTsKPiArCj4gKwkJZGV2X2RiZygmcHJpdl9kZXYtPmRl diwgIkVwMCBjb21wbGV0aW9uIGxlbmd0aCAlZFxuIiwKPiArCQkJcHJpdl9kZXYtPmVwMF9yZXF1 ZXN0LT5hY3R1YWwpOwo+ICsJCWxpc3RfZGVsX2luaXQoJnByaXZfZGV2LT5lcDBfcmVxdWVzdC0+ bGlzdCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHByaXZfZGV2LT5lcDBfcmVxdWVzdCAmJgo+ICsJICAg IHByaXZfZGV2LT5lcDBfcmVxdWVzdC0+Y29tcGxldGUpIHsKPiArCQlzcGluX3VubG9jaygmcHJp dl9kZXYtPmxvY2spOwo+ICsJCXByaXZfZGV2LT5lcDBfcmVxdWVzdC0+Y29tcGxldGUocHJpdl9k ZXYtPmdhZGdldC5lcDAsCj4gKwkJCQkJCXByaXZfZGV2LT5lcDBfcmVxdWVzdCk7Cj4gKwo+ICsJ CXByaXZfZGV2LT5lcDBfcmVxdWVzdCA9IE5VTEw7Cj4gKwkJc3Bpbl9sb2NrKCZwcml2X2Rldi0+ bG9jayk7Cj4gKwl9Cj4gKwo+ICsJY2RuczNfcHJlcGFyZV9zZXR1cF9wYWNrZXQocHJpdl9kZXYp Owo+ICsJd3JpdGVsKEVQX0NNRF9SRVFfQ01QTCwgJnByaXZfZGV2LT5yZWdzLT5lcF9jbWQpOwo+ ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmMg Yi9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuYwo+IGluZGV4IDMwOTIwMjQ3NGU1Ny4uMDIwMmZm NWY2YzkwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5jCj4gKysrIGIv ZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmMKPiBAQCAtNzAsNiArNzAsMzAgQEAgc3RhdGljIHU4 IGNkbnMzX2VwX3JlZ19wb3NfdG9faW5kZXgoaW50IGkpCj4gIAlyZXR1cm4gKChpIC8gMTYpICsg KCgoaSAlIDE2KSAtIDIpICogMikpOwo+ICB9Cj4gIAo+ICsvKioKPiArICogY2RuczNfZXBfYWRk cl90b19pbmRleCAtIE1hY3JvIGNvbnZlcnRzIGVuZHBvaW50IGFkZHJlc3MgdG8KPiArICogaW5k ZXggb2YgZW5kcG9pbnQgb2JqZWN0IGluIGNkbnMzX2RldmljZS5lcHNbXSBjb250YWluZXIKPiAr ICogQGVwX2FkZHI6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHdoaWNoIGVuZHBvaW50IG9iamVjdCBp cyByZXF1aXJlZAo+ICsgKgo+ICsgKiBSZW1lbWJlciB0aGF0IGVuZHBvaW50IGNvbnRhaW5lciBk b2Vzbid0IGNvbnRhaW4gZGVmYXVsdCBlbmRwb2ludAo+ICsgKi8KPiArdTggY2RuczNfZXBfYWRk cl90b19pbmRleCh1OCBlcF9hZGRyKQo+ICt7Cj4gKwlyZXR1cm4gKCgoZXBfYWRkciAmIDB4N0Yp IC0gMSkgKyAoKGVwX2FkZHIgJiBVU0JfRElSX0lOKSA/IDEgOiAwKSk7Cj4gK30KPiArCj4gKy8q Kgo+ICsgKiBjZG5zM19lcF9hZGRyX3RvX2JpdF9wb3MgLSBNYWNybyBjb252ZXJ0cyBlbmRwb2lu dCBhZGRyZXNzIHRvCj4gKyAqIGJpdCBwb3NpdGlvbiBpbiBlcF9pc3RzIHJlZ2lzdGVyCj4gKyAq IEBlcF9hZGRyOiBlbmRwb2ludCBhZGRyZXNzIGZvciB3aGljaCBiaXQgcG9zaXRpb24gaXMgcmVx dWlyZWQKPiArICoKPiArICogUmVtZW1iZXIgdGhhdCBlbmRwb2ludCBjb250YWluZXIgZG9lc24n dCBjb250YWluIGRlZmF1bHQgZW5kcG9pbnQKPiArICovCj4gK3N0YXRpYyB1MzIgY2RuczNfZXBf YWRkcl90b19iaXRfcG9zKHU4IGVwX2FkZHIpCj4gK3sKPiArCXJldHVybiAoMSA8PCAoZXBfYWRk ciAmIDB4N0YpKSA8PCAoKGVwX2FkZHIgJiAweDgwKSA/IDE2IDogMCk7Cj4gK30KPiArCj4gIC8q Kgo+ICAgKiBjZG5zM19uZXh0X3JlcXVlc3QgLSByZXR1cm5zIG5leHQgcmVxdWVzdCBmcm9tIGxp c3QKPiAgICogQGxpc3Q6IGxpc3QgY29udGFpbmluZyByZXF1ZXN0cwo+IEBAIC00NjQsNiArNDg4 LDk5IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBjZG5zM19pcnFfaGFuZGxlcl90aHJlYWQoc3RydWN0 IGNkbnMzICpjZG5zKQo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiArLyoqCj4gKyAqIGNkbnMz X2VwX29uY2hpcF9idWZmZXJfYWxsb2MgLSBUcnkgdG8gYWxsb2NhdGUgb25jaGlwIGJ1ZiBmb3Ig RVAKPiArICoKPiArICogVGhlIHJlYWwgYWxsb2NhdGlvbiB3aWxsIG9jY3VyIGR1cmluZyB3cml0 ZSB0byBFUF9DRkcgcmVnaXN0ZXIsCj4gKyAqIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVj ayBpZiB0aGUgJ3NpemUnIGFsbG9jYXRpb24gaXMgYWxsb3dlZC4KPiArICoKPiArICogQHByaXZf ZGV2OiBleHRlbmRlZCBnYWRnZXQgb2JqZWN0Cj4gKyAqIEBzaXplOiB0aGUgc2l6ZSAoS0IpIGZv ciBFUCB3b3VsZCBsaWtlIHRvIGFsbG9jYXRlCj4gKyAqIEBpc19pbjogdGhlIGRpcmVjdGlvbiBm b3IgRVAKPiArICoKPiArICogUmV0dXJuIDAgaWYgdGhlIGxhdGVyIGFsbG9jYXRpb24gaXMgYWxs b3dlZCBvciBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGNk bnMzX2VwX29uY2hpcF9idWZmZXJfYWxsb2Moc3RydWN0IGNkbnMzX2RldmljZSAqcHJpdl9kZXYs Cj4gKwkJCQkJaW50IHNpemUsIGludCBpc19pbikKPiArewo+ICsJaWYgKGlzX2luKSB7Cj4gKwkJ cHJpdl9kZXYtPm9uY2hpcF9tZW1fYWxsb2NhdGVkX3NpemUgKz0gc2l6ZTsKPiArCX0gZWxzZSBp ZiAoIXByaXZfZGV2LT5vdXRfbWVtX2lzX2FsbG9jYXRlZCkgewo+ICsJCSAvKiBBTEwgT1VUIEVQ cyBhcmUgc2hhcmVkIHRoZSBzYW1lIGNodW5rIG9uY2hpcCBtZW1vcnkgKi8KPiArCQlwcml2X2Rl di0+b25jaGlwX21lbV9hbGxvY2F0ZWRfc2l6ZSArPSBzaXplOwo+ICsJCXByaXZfZGV2LT5vdXRf bWVtX2lzX2FsbG9jYXRlZCA9IDE7Cj4gKwl9Cj4gKwo+ICsJaWYgKHByaXZfZGV2LT5vbmNoaXBf bWVtX2FsbG9jYXRlZF9zaXplID4gQ0ROUzNfT05DSElQX0JVRl9TSVpFKSB7Cj4gKwkJcHJpdl9k ZXYtPm9uY2hpcF9tZW1fYWxsb2NhdGVkX3NpemUgLT0gc2l6ZTsKPiArCQlyZXR1cm4gLUVQRVJN Owo+ICsJfSBlbHNlIHsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAq IGNkbnMzX2VwX2NvbmZpZyBDb25maWd1cmUgaGFyZHdhcmUgZW5kcG9pbnQKPiArICogQHByaXZf ZXA6IGV4dGVuZGVkIGVuZHBvaW50IG9iamVjdAo+ICsgKi8KPiArdm9pZCBjZG5zM19lcF9jb25m aWcoc3RydWN0IGNkbnMzX2VuZHBvaW50ICpwcml2X2VwKQo+ICt7Cj4gKwlib29sIGlzX2lzb19l cCA9IChwcml2X2VwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwo+ICsJc3RydWN0 IGNkbnMzX2RldmljZSAqcHJpdl9kZXYgPSBwcml2X2VwLT5jZG5zM19kZXY7Cj4gKwl1MzIgYkVu ZHBvaW50QWRkcmVzcyA9IHByaXZfZXAtPm51bSB8IHByaXZfZXAtPmRpcjsKPiArCXUzMiBpbnRl cnJ1cHRfbWFzayA9IEVQX1NUU19FTl9UUkJFUlJFTjsKPiArCXUzMiBtYXhfcGFja2V0X3NpemUg PSAwOwo+ICsJdTMyIGVwX2NmZyA9IDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChwcml2X2Vw LT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgewo+ICsJCWVwX2NmZyA9IEVQX0NGR19F UFRZUEUoVVNCX0VORFBPSU5UX1hGRVJfSU5UKTsKPiArCX0gZWxzZSBpZiAocHJpdl9lcC0+dHlw ZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7Cj4gKwkJZXBfY2ZnID0gRVBfQ0ZHX0VQVFlQ RShVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKPiArCX0gZWxzZSB7Cj4gKwkJZXBfY2ZnID0gRVBf Q0ZHX0VQVFlQRShVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKPiArCQlpbnRlcnJ1cHRfbWFzayA9 IDB4RkZGRkZGRkY7Cj4gKwl9Cj4gKwo+ICsJc3dpdGNoIChwcml2X2Rldi0+Z2FkZ2V0LnNwZWVk KSB7Cj4gKwljYXNlIFVTQl9TUEVFRF9GVUxMOgo+ICsJCW1heF9wYWNrZXRfc2l6ZSA9IGlzX2lz b19lcCA/IDEwMjMgOiA2NDsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX1NQRUVEX0hJR0g6Cj4g KwkJbWF4X3BhY2tldF9zaXplID0gaXNfaXNvX2VwID8gMTAyNCA6IDUxMjsKPiArCQlicmVhazsK PiArCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgo+ICsJCW1heF9wYWNrZXRfc2l6ZSA9IDEwMjQ7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCS8vYWxsIG90aGVyIHNwZWVkIGFyZSBub3Qgc3Vw cG9ydGVkCj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXJldCA9IGNkbnMzX2VwX29uY2hpcF9i dWZmZXJfYWxsb2MocHJpdl9kZXYsIENETlMzX0VQX0JVRl9TSVpFLAo+ICsJCQkJCSAgIHByaXZf ZXAtPmRpcik7Cgp3aGVyZSBkbyB5b3UgZnJlZSB0aGUgYnVmZmVyX2FsbG9jPwoKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKCZwcml2X2Rldi0+ZGV2LCAib25jaGlwIG1lbSBpcyBmdWxsLCBl cCBpcyBpbnZhbGlkXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZXBfY2ZnIHw9IEVQ X0NGR19NQVhQS1RTSVpFKG1heF9wYWNrZXRfc2l6ZSkgfAo+ICsJCSAgRVBfQ0ZHX0JVRkZFUklO RyhDRE5TM19FUF9CVUZfU0laRSAtIDEpIHwKPiArCQkgIEVQX0NGR19NQVhCVVJTVChwcml2X2Vw LT5lbmRwb2ludC5tYXhidXJzdCk7Cj4gKwo+ICsJY2RuczNfc2VsZWN0X2VwKHByaXZfZGV2LCBi RW5kcG9pbnRBZGRyZXNzKTsKPiArCj4gKwl3cml0ZWwoZXBfY2ZnLCAmcHJpdl9kZXYtPnJlZ3Mt PmVwX2NmZyk7Cj4gKwl3cml0ZWwoaW50ZXJydXB0X21hc2ssICZwcml2X2Rldi0+cmVncy0+ZXBf c3RzX2VuKTsKPiArCj4gKwlkZXZfZGJnKCZwcml2X2Rldi0+ZGV2LCAiQ29uZmlndXJlICVzOiB3 aXRoIHZhbCAlMDh4XG4iLAo+ICsJCXByaXZfZXAtPm5hbWUsIGVwX2NmZyk7Cj4gKwo+ICsJLyog ZW5hYmxlIGludGVycnVwdCBmb3Igc2VsZWN0ZWQgZW5kcG9pbnQgKi8KPiArCWNkbnMzX3NldF9y ZWdpc3Rlcl9iaXQoJnByaXZfZGV2LT5yZWdzLT5lcF9pZW4sCj4gKwkJCSAgICAgICBjZG5zM19l cF9hZGRyX3RvX2JpdF9wb3MoYkVuZHBvaW50QWRkcmVzcykpOwo+ICt9Cj4gKwo+ICAvKiBGaW5k IGNvcnJlY3QgZGlyZWN0aW9uIGZvciBIVyBlbmRwb2ludCBhY2NvcmRpbmcgdG8gZGVzY3JpcHRp b24gKi8KPiAgc3RhdGljIGludCBjZG5zM19lcF9kaXJfaXNfY29ycmVjdChzdHJ1Y3QgdXNiX2Vu ZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MsCj4gIAkJCQkgICBzdHJ1Y3QgY2RuczNfZW5kcG9pbnQg KnByaXZfZXApCj4gQEAgLTExMDQsNiArMTIyMSw4IEBAIHN0YXRpYyBpbnQgX19jZG5zM19nYWRn ZXRfaW5pdChzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gIAlwcml2X2Rldi0+aXNfY29ubmVjdGVkID0g MDsKPiAgCj4gIAlzcGluX2xvY2tfaW5pdCgmcHJpdl9kZXYtPmxvY2spOwo+ICsJSU5JVF9XT1JL KCZwcml2X2Rldi0+cGVuZGluZ19zdGF0dXNfd3EsCj4gKwkJICBjZG5zM19wZW5kaW5nX3NldHVw X3N0YXR1c19oYW5kbGVyKTsKPiAgCj4gIAlwcml2X2Rldi0+aW5fc3RhbmRieV9tb2RlID0gMTsK PiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5oIGIvZHJpdmVycy91 c2IvY2RuczMvZ2FkZ2V0LmgKPiBpbmRleCA4YzJmMzYzZjkzNDAuLmRiOGM2Y2I5ZjJhNSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQuaAo+ICsrKyBiL2RyaXZlcnMvdXNi L2NkbnMzL2dhZGdldC5oCj4gQEAgLTEwNzAsMTQgKzEwNzAsMTggQEAgc3RydWN0IGNkbnMzX2Rl dmljZSB7Cj4gIAo+ICBpbnQgY2RuczNfaGFuZHNoYWtlKHZvaWQgX19pb21lbSAqcHRyLCB1MzIg bWFzaywgdTMyIGRvbmUsIGludCB1c2VjKTsKPiAgdm9pZCBjZG5zM19zZXRfcmVnaXN0ZXJfYml0 KHZvaWQgX19pb21lbSAqcHRyLCB1MzIgbWFzayk7Cj4gK3ZvaWQgY2RuczNfcGVuZGluZ19zZXR1 cF9zdGF0dXNfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwo+ICBpbnQgY2RuczNf aW5pdF9lcDAoc3RydWN0IGNkbnMzX2RldmljZSAqcHJpdl9kZXYpOwo+ICB2b2lkIGNkbnMzX2Vw MF9jb25maWcoc3RydWN0IGNkbnMzX2RldmljZSAqcHJpdl9kZXYpOwo+ICt2b2lkIGNkbnMzX2Vw X2NvbmZpZyhzdHJ1Y3QgY2RuczNfZW5kcG9pbnQgKnByaXZfZXApOwo+ICB2b2lkIGNkbnMzX2No ZWNrX2VwMF9pbnRlcnJ1cHRfcHJvY2VlZChzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2Rldiwg aW50IGRpcik7Cj4gIHZvaWQgY2RuczNfc2VsZWN0X2VwKHN0cnVjdCBjZG5zM19kZXZpY2UgKnBy aXZfZGV2LCB1MzIgZXApOwo+ICB2b2lkIGNkbnMzX2VuYWJsZV9sMShzdHJ1Y3QgY2RuczNfZGV2 aWNlICpwcml2X2RldiwgaW50IGVuYWJsZSk7Cj4gIHN0cnVjdCB1c2JfcmVxdWVzdCAqY2RuczNf bmV4dF9yZXF1ZXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwo+ICt2b2lkIGNkbnMzX2dhZGdl dF91bmNvbmZpZyhzdHJ1Y3QgY2RuczNfZGV2aWNlICpwcml2X2Rldik7Cj4gIGludCBjZG5zM19l cF9ydW5fdHJhbnNmZXIoc3RydWN0IGNkbnMzX2VuZHBvaW50ICpwcml2X2VwLAo+ICAJCQkgIHN0 cnVjdCB1c2JfcmVxdWVzdCAqcmVxdWVzdCk7Cj4gK3U4IGNkbnMzX2VwX2FkZHJfdG9faW5kZXgo dTggZXBfYWRkcik7Cj4gIGludCBjZG5zM19nYWRnZXRfZXBfc2V0X3dlZGdlKHN0cnVjdCB1c2Jf ZXAgKmVwKTsKPiAgaW50IGNkbnMzX2dhZGdldF9lcF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpl cCwgaW50IHZhbHVlKTsKPiAgc3RydWN0IHVzYl9yZXF1ZXN0ICpjZG5zM19nYWRnZXRfZXBfYWxs b2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwKPiAKCmNoZWVycywKLXJvZ2VyCg==