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: [v2,8/8] usb: dwc3: Add Amlogic G12A DWC3 glue From: Chunfeng Yun Message-Id: <1551956472.2210.106.camel@mhfsdcap03> Date: Thu, 7 Mar 2019 19:01:12 +0800 To: Neil Armstrong Cc: gregkh@linuxfoundation.org, hminas@synopsys.com, balbi@kernel.org, kishon@ti.com, linux-amlogic@lists.infradead.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: T24gVGh1LCAyMDE5LTAzLTA3IGF0IDEwOjQ1ICswMTAwLCBOZWlsIEFybXN0cm9uZyB3cm90ZToK PiBPbiAwNy8wMy8yMDE5IDAzOjAyLCBDaHVuZmVuZyBZdW4gd3JvdGU6Cj4gPiBIaSwKPiA+IE9u IE1vbiwgMjAxOS0wMy0wNCBhdCAxMTozOCArMDEwMCwgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4g Pj4gQWRkcyBzdXBwb3J0IGZvciBBbWxvZ2ljIEcxMkEgVVNCIENvbnRyb2wgR2x1ZSBIVy4KPiA+ Pgo+ID4+IFRoZSBBbWxvZ2ljIEcxMkEgU29DIEZhbWlseSBlbWJlZHMgMiBVU0IgQ29udHJvbGxl cnMgOgo+ID4+IC0gYSBEV0MzIElQIGNvbmZpZ3VyZWQgYXMgSG9zdCBmb3IgVVNCMiBhbmQgVVNC Mwo+ID4+IC0gYSBEV0MyIElQIGNvbmZpZ3VyZWQgYXMgUGVyaXBoZXJhbCBVU0IyIE9ubHkKPiA+ Pgo+ID4+IEEgZ2x1ZSBjb25uZWN0cyB0aGVzZSBib3RoIGNvbnRyb2xsZXJzIHRvIDIgVVNCMiBQ SFlzLCBhbmQgb3B0aW9ubmFsbHkKPiA+PiB0byBhbiBVU0IzK1BDSUUgQ29tYm8gUEhZIHNoYXJl ZCB3aXRoIHRoZSBQQ0lFIGNvbnRyb2xsZXIuCj4gPj4KPiA+PiBUaGUgR2x1ZSBjb25maWd1cmVz IHRoZSBVVE1JIDhiaXQgaW50ZXJmYWNlcyBmb3IgdGhlIFVTQjIgUEhZcywgaW5jbHVkaW5nCj4g Pj4gcm91dGluZyBvZiB0aGUgT1RHIFBIWSBiZXR3ZWVuIHRoZSBEV0MzIGFuZCBEV0MyIGNvbnRy b2xsZXJzLCBhbmQKPiA+PiBzZXR1cHMgdGhlIG9uLWNoaXAgT1RHIG1vZGUgc2VsZWN0aW9uIGZv ciB0aGlzIFBIWS4KPiA+Pgo+ID4+IFRoaXMgZHJpdmVycyBzdXBwb3J0cyB0aGUgb24tcHJvYmUg c2V0dXAgb2YgdGhlIE9URyBtb2RlLCBhbmQgbWFudWFsbHkKPiA+PiB2aWEgYSBkZWJ1Z2ZzIGlu dGVyZmFjZS4gVGhlIElSUSBtb2RlIGNoYW5nZSBkZXRlY3QgaXMgeWV0IHRvIGJlIGFkZGVkCj4g Pj4gaW4gYSBmdXR1cmUgcGF0Y2hzZXQsIG1haW5seSBkdWUgdG8gbGFjayBvZiBoYXJkd2FyZSB0 byB2YWxpZGF0ZSBvbi4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy91c2IvZHdjMy9L Y29uZmlnICAgICAgICAgICB8ICAxMCArCj4gPj4gIGRyaXZlcnMvdXNiL2R3YzMvTWFrZWZpbGUg ICAgICAgICAgfCAgIDEgKwo+ID4+ICBkcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5j IHwgNjAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4gIDMgZmlsZXMgY2hhbmdl ZCwgNjEyIGluc2VydGlvbnMoKykKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L2R3YzMvZHdjMy1tZXNvbi1nMTJhLmMKPiA+Pgo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9kd2MzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKPiA+PiBpbmRleCAxYTA0 MDRmZGE1OTYuLjIxY2U3MzY4ZDMyNSAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3VzYi9kd2Mz L0tjb25maWcKPiA+PiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKPiA+PiBAQCAtOTMs NiArOTMsMTYgQEAgY29uZmlnIFVTQl9EV0MzX0tFWVNUT05FCj4gPj4gIAkgIFN1cHBvcnQgb2Yg VVNCMi8zIGZ1bmN0aW9uYWxpdHkgaW4gVEkgS2V5c3RvbmUyIHBsYXRmb3Jtcy4KPiA+PiAgCSAg U2F5ICdZJyBvciAnTScgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgc3VjaCBkZXZpY2UKPiA+PiAgCj4g Pj4gK2NvbmZpZyBVU0JfRFdDM19NRVNPTl9HMTJBCj4gPj4gKyAgICAgICB0cmlzdGF0ZSAiQW1s b2dpYyBNZXNvbiBHMTJBIFBsYXRmb3JtcyIKPiA+PiArICAgICAgIGRlcGVuZHMgb24gT0YgJiYg Q09NTU9OX0NMSwo+ID4+ICsgICAgICAgZGVwZW5kcyBvbiBBUkNIX01FU09OIHx8IENPTVBJTEVf VEVTVAo+ID4+ICsgICAgICAgZGVmYXVsdCBVU0JfRFdDMwo+ID4+ICsgICAgICAgc2VsZWN0IFVT Ql9ST0xFX1NXSVRDSAo+ID4+ICsgICAgICAgaGVscAo+ID4+ICsgICAgICAgICBTdXBwb3J0IFVT QjIvMyBmdW5jdGlvbmFsaXR5IGluIEFtbG9naWMgRzEyQSBwbGF0Zm9ybXMuCj4gPj4gKwkgU2F5 ICdZJyBvciAnTScgaWYgeW91IGhhdmUgb25lIHN1Y2ggZGV2aWNlLgo+ID4+ICsKPiA+PiAgY29u ZmlnIFVTQl9EV0MzX09GX1NJTVBMRQo+ID4+ICAgICAgICAgdHJpc3RhdGUgIkdlbmVyaWMgT0Yg U2ltcGxlIEdsdWUgTGF5ZXIiCj4gPj4gICAgICAgICBkZXBlbmRzIG9uIE9GICYmIENPTU1PTl9D TEsKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZSBiL2RyaXZlcnMv dXNiL2R3YzMvTWFrZWZpbGUKPiA+PiBpbmRleCA2ZTNlZjYxNDRlNWQuLmFlODZkYTBkYzViZCAx MDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3VzYi9kd2MzL01ha2VmaWxlCj4gPj4gKysrIGIvZHJp dmVycy91c2IvZHdjMy9NYWtlZmlsZQo+ID4+IEBAIC00Nyw2ICs0Nyw3IEBAIG9iai0kKENPTkZJ R19VU0JfRFdDM19FWFlOT1MpCQkrPSBkd2MzLWV4eW5vcy5vCj4gPj4gIG9iai0kKENPTkZJR19V U0JfRFdDM19QQ0kpCQkrPSBkd2MzLXBjaS5vCj4gPj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19I QVBTKQkJKz0gZHdjMy1oYXBzLm8KPiA+PiAgb2JqLSQoQ09ORklHX1VTQl9EV0MzX0tFWVNUT05F KQkJKz0gZHdjMy1rZXlzdG9uZS5vCj4gPj4gK29iai0kKENPTkZJR19VU0JfRFdDM19NRVNPTl9H MTJBKQkrPSBkd2MzLW1lc29uLWcxMmEubwo+ID4+ICBvYmotJChDT05GSUdfVVNCX0RXQzNfT0Zf U0lNUExFKQkrPSBkd2MzLW9mLXNpbXBsZS5vCj4gPj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19T VCkJCSs9IGR3YzMtc3Qubwo+ID4+ICBvYmotJChDT05GSUdfVVNCX0RXQzNfUUNPTSkJCSs9IGR3 YzMtcWNvbS5vCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1tZXNvbi1n MTJhLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjc1OTQyNjE0YTAzNAo+ID4+IC0t LSAvZGV2L251bGwKPiA+PiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5j Cj4gPj4gQEAgLTAsMCArMSw2MDEgQEAKPiA+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKPiA+PiArLyoKPiA+PiArICogVVNCIEdsdWUgZm9yIEFtbG9naWMgRzEyQSBTb0Nz Cj4gPj4gKyAqCj4gPj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBCYXlMaWJyZSwgU0FTCj4gPj4g KyAqIEF1dGhvcjogTmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgo+ID4+ ICsgKi8KPiA+PiArCj4gPj4gKy8qCj4gPj4gKyAqIFRoZSBVU0IgaXMgb3JnYW5pemVkIHdpdGgg YSBnbHVlIGFyb3VuZCB0aGUgRFdDMyBDb250cm9sbGVyIElQIGFzIDoKPiA+PiArICogLSBDb250 cm9sIHJlZ2lzdGVycyBmb3IgZWFjaCBVU0IyIFBvcnRzCj4gPj4gKyAqIC0gQ29udHJvbCByZWdp c3RlcnMgZm9yIHRoZSBVU0IgUEhZIGxheWVyCj4gPj4gKyAqIC0gU3VwZXJTcGVlZCBQSFkgY2Fu IGJlIGVuYWJsZWQgb25seSBpZiBwb3J0IGlzIHVzZWQKPiA+PiArICoKPiA+PiArICogVE9GSVg6 Cj4gPj4gKyAqIC0gQWRkIGR5bmFtaWMgT1RHIHN3aXRjaGluZyB3aXRoIElEIGNoYW5nZSBpbnRl cnJ1cHQKPiA+PiArICovCj4gPj4gKwo+ID4gWy4uLl0KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQg ZHdjM19tZXNvbl9nMTJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPj4g K3sKPiA+PiArCXN0cnVjdCBkd2MzX21lc29uX2cxMmEJKnByaXY7Cj4gPj4gKwlzdHJ1Y3QgZGV2 aWNlCQkqZGV2ID0gJnBkZXYtPmRldjsKPiA+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbnAgPSBk ZXYtPm9mX25vZGU7Cj4gPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPj4gKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKPiA+PiArCWVudW0gcGh5X21vZGUgb3RnX2lkOwo+ID4+ICsJaW50IHJldCwg aTsKPiA+PiArCj4gPj4gKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwg R0ZQX0tFUk5FTCk7Cj4gPj4gKwlpZiAoIXByaXYpCj4gPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Pj4gKwo+ID4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKPiA+PiArCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ ID4+ICsJaWYgKElTX0VSUihiYXNlKSkKPiA+PiArCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKPiA+ PiArCj4gPj4gKwlwcml2LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBiYXNl LAo+ID4+ICsJCQkJCSAgICAgJnBoeV9tZXNvbl9nMTJhX3VzYjNfcmVnbWFwX2NvbmYpOwo+ID4+ ICsJaWYgKElTX0VSUihwcml2LT5yZWdtYXApKQo+ID4+ICsJCXJldHVybiBQVFJfRVJSKHByaXYt PnJlZ21hcCk7Cj4gPj4gKwo+ID4+ICsJcHJpdi0+dmJ1cyA9IGRldm1fcmVndWxhdG9yX2dldF9v cHRpb25hbChkZXYsICJ2YnVzIik7Cj4gPj4gKwlpZiAoSVNfRVJSKHByaXYtPnZidXMpKSB7Cj4g Pj4gKwkJaWYgKFBUUl9FUlIocHJpdi0+dmJ1cykgPT0gLUVQUk9CRV9ERUZFUikKPiA+PiArCQkJ cmV0dXJuIFBUUl9FUlIocHJpdi0+dmJ1cyk7Cj4gPj4gKwkJcHJpdi0+dmJ1cyA9IE5VTEw7Cj4g Pj4gKwl9Cj4gPj4gKwo+ID4+ICsJcHJpdi0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7 Cj4gPj4gKwlpZiAoSVNfRVJSKHByaXYtPmNsaykpCj4gPj4gKwkJcmV0dXJuIFBUUl9FUlIocHJp di0+Y2xrKTsKPiA+PiArCj4gPj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xr KTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJldDsKPiA+PiArCj4gPj4gKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKPiA+PiArCXByaXYtPmRldiA9IGRldjsKPiA+ PiArCj4gPj4gKwlwcml2LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCBOVUxM KTsKPiA+PiArCWlmIChJU19FUlIocHJpdi0+cmVzZXQpKSB7Cj4gPj4gKwkJcmV0ID0gUFRSX0VS Uihwcml2LT5yZXNldCk7Cj4gPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGRldmlj ZSByZXNldCwgZXJyPSVkXG4iLCByZXQpOwo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwl9Cj4g Pj4gKwo+ID4+ICsJcmV0ID0gcmVzZXRfY29udHJvbF9yZXNldChwcml2LT5yZXNldCk7Cj4gPj4g KwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJcmV0ID0gZHdjM19t ZXNvbl9nMTJhX2dldF9waHlzKHByaXYpOwo+ID4+ICsJaWYgKHJldCkKPiA+PiArCQlyZXR1cm4g cmV0Owo+ID4+ICsKPiA+PiArCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0+dmJ1cyk7Cj4g Pj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJLyogR2V0IGRy X21vZGUgKi8KPiA+PiArCXByaXYtPm90Z19tb2RlID0gdXNiX2dldF9kcl9tb2RlKGRldik7Cj4g Pj4gKwo+ID4+ICsJZHdjM19tZXNvbl9nMTJhX3VzYl9pbml0KHByaXYpOwo+ID4+ICsKPiA+PiAr CS8qIFNldCBQSFkgUG93ZXIgKi8KPiA+PiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsg KytpKSB7Cj4gPj4gKwkJcmV0ID0gcGh5X3Bvd2VyX29uKHByaXYtPnBoeXNbaV0pOwo+ID4+ICsJ CWlmIChyZXQpCj4gPj4gKwkJCWdvdG8gZXJyX3BoeXNfcHV0Owo+ID4+ICsJfQo+ID4+ICsKPiA+ PiArCS8qIEluaXQgUEhZcyAqLwo+ID4+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyAr K2kpIHsKPiA+PiArCQlyZXQgPSBwaHlfaW5pdChwcml2LT5waHlzW2ldKTsKPiA+PiArCQlpZiAo cmV0KQo+ID4+ICsJCQlnb3RvIGVycl9waHlzX3Bvd2VyOwo+ID4+ICsJfQo+ID4gdXN1YWxseSBw aHlfaW5pdCgpIGZpcnN0Cj4gCj4gT0ssIGkgdXN1YWxseSBzYXcgcG93ZXJfb24gYmVmb3JlLCBi dXQgSSdsbCBzd2FwIHRoZW0uCj4gCj4gPiAKPiA+PiArCj4gPj4gKwlyZXQgPSBvZl9wbGF0Zm9y bV9wb3B1bGF0ZShucCwgTlVMTCwgTlVMTCwgZGV2KTsKPiA+PiArCWlmIChyZXQpIHsKPiA+PiAr CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKPiA+PiArCQljbGtfcHV0KHByaXYt PmNsayk7Cj4gPj4gKwo+ID4+ICsJCWdvdG8gZXJyX3BoeXNfZXhpdDsKPiA+PiArCX0KPiA+PiAr Cj4gPj4gKwkvKiBTZXR1cCBPVEcgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBJRCBwaW4gKi8K PiA+PiArCWlmIChwcml2LT5vdGdfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsKPiA+PiArCQkv KiBUT0ZJWCBIYW5kbGUgSUQgbW9kZSB0b2dnbGluZyB2aWEgSVJRICovCj4gPj4gKwkJb3RnX2lk ID0gZHdjM19tZXNvbl9nMTJhX2dldF9pZChwcml2KTsKPiA+PiArCQlpZiAob3RnX2lkICE9IHBy aXYtPm90Z19waHlfbW9kZSkgewo+ID4+ICsJCQlpZiAoZHdjM19tZXNvbl9nMTJhX290Z19tb2Rl X3NldChwcml2LCBvdGdfaWQpKQo+ID4+ICsJCQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHN3 aXRjaCBPVEcgbW9kZVxuIik7Cj4gPj4gKwkJfQo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCS8qIFNl dHVwIHJvbGUgc3dpdGNoZXIgKi8KPiA+PiArCXByaXYtPnN3aXRjaF9kZXNjLnVzYjJfcG9ydCA9 IGR3YzNfbWVzb25fZzEyX2ZpbmRfY2hpbGQoZGV2LAo+ID4+ICsJCQkJCQkJCSJzbnBzLGR3YzMi KTsKPiA+PiArCXByaXYtPnN3aXRjaF9kZXNjLnVkYyA9IGR3YzNfbWVzb25fZzEyX2ZpbmRfY2hp bGQoZGV2LCAic25wcyxkd2MyIik7Cj4gPj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5hbGxvd191c2Vy c3BhY2VfY29udHJvbCA9IHRydWU7Cj4gPj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5zZXQgPSBkd2Mz X21lc29uX2cxMmFfcm9sZV9zZXQ7Cj4gPj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5nZXQgPSBkd2Mz X21lc29uX2cxMmFfcm9sZV9nZXQ7Cj4gPiB0byBtZSwgdXNlIGEgbG9jYWwgdmFyaWFibGUgZm9y IHN3aXRjaF9kZXNjCj4gCj4gSSdtIG5ldmVyIGZhbiBvZiBjaGFuZ2luZyBhIGxvY2FsIGdsb2Jh bCB2YXJpYWJsZSBmb3IgYSBkcml2ZXIgaW5zdGFuY2UsCj4gaXMgaXQgc3RyaWN0bHkgcmVxdWly ZWQgPwpObyA6KQo+IAo+ID4gCj4gPj4gKwo+ID4+ICsJcHJpdi0+cm9sZV9zd2l0Y2ggPSB1c2Jf cm9sZV9zd2l0Y2hfcmVnaXN0ZXIoZGV2LCAmcHJpdi0+c3dpdGNoX2Rlc2MpOwo+ID4+ICsJaWYg KElTX0VSUihwcml2LT5yb2xlX3N3aXRjaCkpCj4gPj4gKwkJZGV2X3dhcm4oZGV2LCAiVW5hYmxl IHRvIHJlZ2lzdGVyIFJvbGUgU3dpdGNoXG4iKTsKPiA+PiArCj4gPj4gKwlwbV9ydW50aW1lX3Nl dF9hY3RpdmUoZGV2KTsKPiA+PiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7Cj4gPj4gKwlwbV9y dW50aW1lX2dldF9zeW5jKGRldik7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4gKwo+ID4+ ICtlcnJfcGh5c19leGl0Ogo+ID4+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kp Cj4gPj4gKwkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7Cj4gPj4gKwo+ID4+ICtlcnJfcGh5c19w b3dlcjoKPiA+PiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQo+ID4+ICsJCXBo eV9wb3dlcl9vZmYocHJpdi0+cGh5c1tpXSk7Cj4gPj4gKwo+ID4+ICtlcnJfcGh5c19wdXQ6Cj4g Pj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkKPiA+PiArCQlwaHlfcHV0KHBy aXYtPnBoeXNbaV0pOwo+ID4+ICsKPiA+IFRoZSBwaHlzIGFyZSBnb3QgYnkgZGV2bV9waHlfb3B0 aW9uYWxfZ2V0KCksIG5vIG5lZWQgY2FsbCBwaHlfcHV0KCkKPiAKPiBZb3UgYXJlIHJpZ2h0LCB0 aGlzIGlzIGEgbGVmdG92ZXIgZnJvbSB2MS4KPiAKPiA+PiArCXJldHVybiByZXQ7Cj4gPj4gK30K PiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9nMTJhX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJh ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Owo+ID4+ICsJaW50IGk7Cj4gPj4gKwo+ID4+ICsJdXNiX3JvbGVf c3dpdGNoX3VucmVnaXN0ZXIocHJpdi0+cm9sZV9zd2l0Y2gpOwo+ID4+ICsKPiA+PiArCW9mX3Bs YXRmb3JtX2RlcG9wdWxhdGUoZGV2KTsKPiA+PiArCj4gPj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBI WV9DT1VOVCA7ICsraSkgewo+ID4+ICsJCXBoeV9wb3dlcl9vZmYocHJpdi0+cGh5c1tpXSk7Cj4g Pj4gKwkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7Cj4gPj4gKwkJcGh5X3B1dChwcml2LT5waHlz W2ldKTsKPiA+IGRpdHRvCj4gCj4gVGhhbmtzIGZvciB0aGUgcmV2aWV3LAo+IE5laWwKPiAKPiA+ PiArCX0KPiA+PiArCj4gPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKPiA+ PiArCWNsa19wdXQocHJpdi0+Y2xrKTsKPiA+PiArCj4gPj4gKwlwbV9ydW50aW1lX2Rpc2FibGUo ZGV2KTsKPiA+PiArCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOwo+ID4+ICsJcG1fcnVudGlt ZV9zZXRfc3VzcGVuZGVkKGRldik7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30KPiA+ PiArCj4gPj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgZHdjM19tZXNvbl9nMTJhX3J1bnRp bWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkd2Mz X21lc29uX2cxMmEJKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+PiArCj4gPj4gKwlj bGtfZGlzYWJsZShwcml2LT5jbGspOwo+ID4+ICsKPiA+PiArCXJldHVybiAwOwo+ID4+ICt9Cj4g Pj4gKwo+ID4+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGR3YzNfbWVzb25fZzEyYV9ydW50 aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkd2Mz X21lc29uX2cxMmEJKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+PiArCj4gPj4gKwly ZXR1cm4gY2xrX2VuYWJsZShwcml2LT5jbGspOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIGR3YzNfbWVzb25fZzEyYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldikKPiA+PiArewo+ID4+ICsJc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJpdiA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwo+ID4+ICsJaW50IGk7Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMCA7 IGkgPCBQSFlfQ09VTlQgOyArK2kpCj4gPj4gKwkJaWYgKHByaXYtPnBoeXNbaV0pCj4gPj4gKwkJ CXBoeV9leGl0KHByaXYtPnBoeXNbaV0pOwo+ID4+ICsKPiA+PiArCXJlc2V0X2NvbnRyb2xfYXNz ZXJ0KHByaXYtPnJlc2V0KTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsK PiA+PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBkd2MzX21lc29uX2cxMmFfcmVzdW1lKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+PiArewo+ID4+ICsJc3RydWN0IGR3YzNfbWVzb25fZzEyYSAq cHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4+ICsJaW50IGksIHJldDsKPiA+PiArCj4g Pj4gKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJlc2V0KTsKPiA+PiArCj4gPj4gKwlk d2MzX21lc29uX2cxMmFfdXNiX2luaXQocHJpdik7Cj4gPj4gKwo+ID4+ICsJLyogSW5pdCBQSFlz ICovCj4gPj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkgewo+ID4+ICsJCWlm IChwcml2LT5waHlzW2ldKSB7Cj4gPj4gKwkJCXJldCA9IHBoeV9pbml0KHByaXYtPnBoeXNbaV0p Owo+ID4+ICsJCQlpZiAocmV0KQo+ID4+ICsJCQkJcmV0dXJuIHJldDsKPiA+PiArCQl9Cj4gPj4g Kwl9Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2MzX21lc29uX2cxMmFfZGV2X3BtX29wcyA9IHsKPiA+ PiArCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGR3YzNfbWVzb25fZzEyYV9zdXNwZW5kLCBkd2Mz X21lc29uX2cxMmFfcmVzdW1lKQo+ID4+ICsJU0VUX1JVTlRJTUVfUE1fT1BTKGR3YzNfbWVzb25f ZzEyYV9ydW50aW1lX3N1c3BlbmQsCj4gPj4gKwkJCWR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3Jl c3VtZSwgTlVMTCkKPiA+PiArfTsKPiA+PiArCj4gPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGR3YzNfbWVzb25fZzEyYV9tYXRjaFtdID0gewo+ID4+ICsJeyAuY29tcGF0aWJs ZSA9ICJhbWxvZ2ljLG1lc29uLWcxMmEtdXNiLWN0cmwiIH0sCj4gPj4gKwl7IC8qIFNlbnRpbmVs ICovIH0KPiA+PiArfTsKPiA+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdjM19tZXNvbl9n MTJhX21hdGNoKTsKPiA+PiArCj4gPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3 YzNfbWVzb25fZzEyYV9kcml2ZXIgPSB7Cj4gPj4gKwkucHJvYmUJCT0gZHdjM19tZXNvbl9nMTJh X3Byb2JlLAo+ID4+ICsJLnJlbW92ZQkJPSBkd2MzX21lc29uX2cxMmFfcmVtb3ZlLAo+ID4+ICsJ LmRyaXZlcgkJPSB7Cj4gPj4gKwkJLm5hbWUJPSAiZHdjMy1tZXNvbi1nMTJhIiwKPiA+PiArCQku b2ZfbWF0Y2hfdGFibGUgPSBkd2MzX21lc29uX2cxMmFfbWF0Y2gsCj4gPj4gKwkJLnBtCT0gJmR3 YzNfbWVzb25fZzEyYV9kZXZfcG1fb3BzLAo+ID4+ICsJfSwKPiA+PiArfTsKPiA+PiArCj4gPj4g K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdjM19tZXNvbl9nMTJhX2RyaXZlcik7Cj4gPj4gK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBbWxvZ2lj IE1lc29uIEcxMkEgVVNCIEdsdWUgTGF5ZXIiKTsKPiA+PiArTU9EVUxFX0FVVEhPUigiTmVpbCBB cm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPiIpOwo+ID4gCj4gPiAKPgo=