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: [4/4] usb: musb: Add support for MediaTek musb controller From: Bin Liu Message-Id: <20190109140144.GI25910@uda0271908> Date: Wed, 9 Jan 2019 08:01:44 -0600 To: Min Guo Cc: Rob Herring , Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Yonglong Wu List-ID: SGkgTWluLAoKT24gV2VkLCBKYW4gMDksIDIwMTkgYXQgMDg6MzE6MDhQTSArMDgwMCwgTWluIEd1 byB3cm90ZToKPiBIaSBCaW4sCj4gT24gVHVlLCAyMDE5LTAxLTA4IGF0IDA5OjQ0IC0wNjAwLCBC aW4gTGl1IHdyb3RlOgo+ID4gSGksCj4gPiAKPiA+IE9uIFRodSwgRGVjIDI3LCAyMDE4IGF0IDAz OjM0OjI2UE0gKzA4MDAsIG1pbi5ndW9AbWVkaWF0ZWsuY29tIHdyb3RlOgo+ID4gPiBGcm9tOiBN aW4gR3VvIDxtaW4uZ3VvQG1lZGlhdGVrLmNvbT4KPiA+ID4gCj4gPiA+IFRoaXMgYWRkcyBzdXBw b3J0IGZvciBNZWRpYVRlayBtdXNiIGNvbnRyb2xsZXIgaW4KPiA+ID4gaG9zdCwgcGVyaXBoZXJh bCBhbmQgb3RnIG1vZGUKPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IE1pbiBHdW8gPG1pbi5n dW9AbWVkaWF0ZWsuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBZb25nbG9uZyBXdSA8eW9uZ2xv bmcud3VAbWVkaWF0ZWsuY29tPgo+ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvdXNiL211c2IvS2Nv bmZpZyAgICAgfCAgIDggKy0KPiA+ID4gIGRyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUgICAgfCAg IDEgKwo+ID4gPiAgZHJpdmVycy91c2IvbXVzYi9tZWRpYXRlay5jICB8IDU2MiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ICBkcml2ZXJzL3VzYi9tdXNi L211c2JfY29yZS5jIHwgIDEwICsKPiA+ID4gIGRyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgg fCAgIDEgKwo+ID4gPiAgZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oICB8ICAgMSArCj4gPiA+ ICBkcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIHwgIDc5ICsrKystLQo+ID4gPiAgZHJpdmVy cy91c2IvbXVzYi9tdXNiX3JlZ3MuaCB8ICAgNiArCj4gPiA+ICBkcml2ZXJzL3VzYi9tdXNiL211 c2Joc2RtYS5jIHwgIDM0ICsrLQo+ID4gPiAgOSBmaWxlcyBjaGFuZ2VkLCA2NzEgaW5zZXJ0aW9u cygrKSwgMzEgZGVsZXRpb25zKC0pCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91 c2IvbXVzYi9tZWRpYXRlay5jCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv bXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCj4gPiA+IGluZGV4IGFkMDg4 OTUuLjU0MGZjOWYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwo+ ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKPiA+ID4gQEAgLTExNSw2ICsxMTUs MTIgQEAgY29uZmlnIFVTQl9NVVNCX0paNDc0MAo+ID4gPiAgCWRlcGVuZHMgb24gVVNCX01VU0Jf R0FER0VUCj4gPiA+ICAJZGVwZW5kcyBvbiBVU0JfT1RHX0JMQUNLTElTVF9IVUIKPiA+ID4gIAo+ ID4gPiArY29uZmlnIFVTQl9NVVNCX01FRElBVEVLCj4gPiA+ICsJdHJpc3RhdGUgIk1lZGlhVGVr IHBsYXRmb3JtcyIKPiA+ID4gKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsKPiA+IAo+ID4gUGxl YXNlIGFsc28gYWRkICd8fCBDT01QSUxFX1RFU1QnIHRvIG1ha2UgdGVzdGluZyBlYXNpZXIuCj4g Cj4gT2sKPiAKPiA+ID4gKwlkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVYKPiA+ID4gKwlkZXBlbmRz IG9uIEdFTkVSSUNfUEhZCj4gPiA+ICsKPiA+ID4gIGNvbmZpZyBVU0JfTVVTQl9BTTMzNVhfQ0hJ TEQKPiA+ID4gIAl0cmlzdGF0ZQo+ID4gPiAgCj4gPiA+IEBAIC0xNDEsNyArMTQ3LDcgQEAgY29u ZmlnIFVTQl9VWDUwMF9ETUEKPiA+ID4gIAo+ID4gPiAgY29uZmlnIFVTQl9JTlZFTlRSQV9ETUEK PiA+ID4gIAlib29sICdJbnZlbnRyYScKPiA+ID4gLQlkZXBlbmRzIG9uIFVTQl9NVVNCX09NQVAy UExVUwo+ID4gPiArCWRlcGVuZHMgb24gVVNCX01VU0JfT01BUDJQTFVTIHx8IFVTQl9NVVNCX01F RElBVEVLCj4gPiA+ICAJaGVscAo+ID4gPiAgCSAgRW5hYmxlIERNQSB0cmFuc2ZlcnMgdXNpbmcg TWVudG9yJ3MgZW5naW5lLgo+ID4gPiAgCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9t dXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQo+ID4gPiBpbmRleCAzYTg4 Yzc5Li42M2Q4MmQwIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxl Cj4gPiA+ICsrKyBiL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKPiA+ID4gQEAgLTI0LDYgKzI0 LDcgQEAgb2JqLSQoQ09ORklHX1VTQl9NVVNCX0RBOFhYKQkJCSs9IGRhOHh4Lm8KPiA+ID4gIG9i ai0kKENPTkZJR19VU0JfTVVTQl9VWDUwMCkJCQkrPSB1eDUwMC5vCj4gPiA+ICBvYmotJChDT05G SUdfVVNCX01VU0JfSlo0NzQwKQkJCSs9IGp6NDc0MC5vCj4gPiA+ICBvYmotJChDT05GSUdfVVNC X01VU0JfU1VOWEkpCQkJKz0gc3VueGkubwo+ID4gPiArb2JqLSQoQ09ORklHX1VTQl9NVVNCX01F RElBVEVLKSAgICAgIAkJKz0gbWVkaWF0ZWsubwo+ID4gPiAgCj4gPiA+ICAKPiA+ID4gIG9iai0k KENPTkZJR19VU0JfTVVTQl9BTTMzNVhfQ0hJTEQpCQkrPSBtdXNiX2FtMzM1eC5vCj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMgYi9kcml2ZXJzL3VzYi9tdXNi L21lZGlhdGVrLmMKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAw MC4uMTVhNjQ2MAo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvdXNiL211 c2IvbWVkaWF0ZWsuYwo+ID4gCj4gPiBbc25pcF0KPiA+IEkgd2lsbCByZXZpZXcgdGhpcyBzZWN0 aW9uIGxhdGVyIGFmdGVyIHdlIHNvcnRlZCBvdXQgb3RoZXIgdGhpbmdzLgo+ID4gCj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVz Yi9tdXNiX2NvcmUuYwo+ID4gPiBpbmRleCBiN2Q1NjI3Li5kNjBmNzZmIDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvdXNi L211c2IvbXVzYl9jb3JlLmMKPiA+ID4gQEAgLTEwMjgsNiArMTAyOCwxNiBAQCBzdGF0aWMgdm9p ZCBtdXNiX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgbXVzYiAqbXVzYikKPiA+ID4gIAl0ZW1w ID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9JTlRSVVNCKTsKPiA+ID4gIAl0ZW1wID0gbXVzYl9y ZWFkdyhtYmFzZSwgTVVTQl9JTlRSVFgpOwo+ID4gPiAgCXRlbXAgPSBtdXNiX3JlYWR3KG1iYXNl LCBNVVNCX0lOVFJSWCk7Cj4gPiA+ICsKPiA+ID4gKwkvKiAgTWVkaWFUZWsgY29udHJvbGxlciBp bnRlcnJ1cHQgc3RhdHVzIGlzIFcxQyAqLwo+ID4gCj4gPiBUaGlzIFcxQyBkb2Vzbid0IG1hdGNo IHRvIHRoZSBNVVNCIFByb2dyYW1taW5nIEd1aWRlIHRoYXQgSSBoYXZlLiBUaG9zZQo+ID4gcmVn aXN0ZXJzIGFyZSByZWFkLW9ubHkuCj4gPiBJcyB0aGUgZGlmZmVyZW5jZSBkdWUgdG8gdGhlIElQ IGludGVyZ3JhdGlvbiBpbiB0aGUgbXRrIHBsYXRmb3Jtcz8gb3IgaXMKPiA+IGl0IGEgbmV3IHZl cnNpb24gb2YgdGhlIE1VU0IgY29udHJvbGxlcj8gSWYgbGF0dGVyLCB3aGF0IGlzIHRoZSB2ZXJz aW9uPwo+IAo+IFRoaXMgaXMgZGlmZmVyZW5jZSBkdWUgdG8gdGhlIElQIGludGVyZ3JhdGlvbiBp biBtdGsgcGxhdGZvcm1zLiBXMUMgaXMKPiBlYXN5IGZvciBDcGRlVmlzZXIgZGVidWcuCj4gCj4g PiA+ICsJaWYgKG11c2ItPm9wcy0+cXVpcmtzICYgTVVTQl9NVEtfUVVJUktTKSB7Cj4gPiAKPiA+ IEJhc2ljYWxseSB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIHR5cGUgb2YgcGxhdGZvcm0gc3Bl Y2lmaWMgcXVpcmtzIGlmCj4gPiBwb3NzaWJsZSwgc28gbGV0J3MgdHJ5IHRvIG5vdCB1c2UgaXQu Cj4gCj4gSSB3aWxsIHRyeSBteSBiZXN0IHRvIGF2b2lkIHVzaW5nIGl0LgoKVGhhbmtzLgoKPiAK PiA+ID4gKwkJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5UUlVTQiwKPiA+ID4gKwkJCW11c2Jf cmVhZGIobWJhc2UsIE1VU0JfSU5UUlVTQikpOwo+ID4gCj4gPiBGb3IgdGhpcyBjbGVhcmluZyBy ZWdpc3RlciBiaXQgb3BlcmF0aW9uLCBwbGVhc2UgY3JlYXRlIHBsYXRmb3JtIGhvb2tzCj4gPiBt dXNiX2NsZWFyYigpIGFuZCBtdXNiX2NsZWFydygpIGluIHN0cnVjdCBtdXNiX3BsYXRmb3JtX29w cyBpbnN0ZWFkLAo+ID4gdGhlbiBmb2xsb3cgaG93IG11c2JfcmVhZGIoKSBwb2ludGVyIGlzIGFz c2lnbmVkIGluCj4gPiBtdXNiX2luaXRfY29udHJvbGxlcigpIHRvIHVzZSB0aGUgVzFDIHZlcnNp b24gZm9yIG10ayBwbGF0Zm9ybS4KPiAKPiBJIGhhdmUgdHJpZWQgaW1wbGVtZW50aW5nIG11c2Jf cmVhZGIoKSwgbXVzYl9yZWFkdygpIGludGVyZmFjZSB3aXRoCj4gaW50ZXJydXB0IHN0YXR1cyBX MUMgZnVuY3Rpb24gaW4gc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzLiBCdXQgdGhpcwo+IGludGVy ZmFjZSB3aWxsIHJlcXVpcmUgYSBnbG9iYWwgdmFyaWFibGUgdG8gaG9sZCBNQUMgYmFzaWMgYWRk cmVzcyBmb3IKPiBqdWRnbWVudCwgYW5kIHRoZW4gc3BlY2lhbCBoYW5kbGluZyBvZiB0aGUgaW50 ZXJydXB0IHN0YXRlLiBBIGdsb2JhbAo+IHZhcmlhYmxlIHdpbGwgbWFrZSB0aGUgZHJpdmVyIHdv cmsgd2l0aCBvbmx5IGEgc2luZ2xlIGluc3RhbmNlLCBzbyBpdAo+IGNhbid0IHdvcmsgb24gc29t ZSBNVEsgcGxhdGZvcm1zIHdoaWNoIGhhdmUgdHdvIGluc3RhbmNlcy4KCkkgZGlkbid0IG1lYW4g dG8gbW9kaWZ5IG11c2JfcmVhZCooKSwgYnV0Cgo+IEhvdyBhYm91dCBjcmVhdGluZyBtdXNiX2Ns ZWFyYi93KCkgYXMgZm9sbG93aW5nOgo+IHZvaWQgKCpjbGVhcmIpKHZvaWQgX19pb21lbSAqYWRk ciwgdW5zaWduZWQgb2Zmc2V0LCB1OCBkYXRhKTsKPiB2b2lkICgqY2xlYXJ3KSh2b2lkIF9faW9t ZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCwgdTE2IGRhdGEpOwoKdGhpcyBpcyB3aGF0IEkgd2Fz IGFza2luZyBmb3IsIHNpbWlsYXIgdG8gd2hhdCBtdXNiX3JlYWRiL3coKSBpcwppbXBsZW1lbnRl ZC4KCj4gCj4gCj4gPiA+ICsJCW11c2Jfd3JpdGV3KG1iYXNlLCBNVVNCX0lOVFJSWCwKPiA+ID4g KwkJCW11c2JfcmVhZHcobWJhc2UsIE1VU0JfSU5UUlJYKSk7Cj4gPiA+ICsJCW11c2Jfd3JpdGV3 KG1iYXNlLCBNVVNCX0lOVFJUWCwKPiA+ID4gKwkJCW11c2JfcmVhZHcobWJhc2UsIE1VU0JfSU5U UlRYKSk7Cj4gPiA+ICsJfQo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdm9pZCBtdXNi X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBtdXNiICptdXNiKQo+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3Jl LmgKPiA+ID4gaW5kZXggMDQyMDNiNy4uMWJmNGU5YSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVy cy91c2IvbXVzYi9tdXNiX2NvcmUuaAo+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Jf Y29yZS5oCj4gPiA+IEBAIC0xMzgsNiArMTM4LDcgQEAgZW51bSBtdXNiX2dfZXAwX3N0YXRlIHsK PiA+ID4gICAqLwo+ID4gPiAgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKPiA+ID4gIAo+ID4g PiArI2RlZmluZSBNVVNCX01US19RVUlSS1MJQklUKDEwKQo+ID4gPiAgI2RlZmluZSBNVVNCX0df Tk9fU0tCX1JFU0VSVkUJQklUKDkpCj4gPiA+ICAjZGVmaW5lIE1VU0JfREE4WFgJCUJJVCg4KQo+ ID4gPiAgI2RlZmluZSBNVVNCX1BSRVNFUlZFX1NFU1NJT04JQklUKDcpCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2Jf ZG1hLmgKPiA+ID4gaW5kZXggMjgxZTc1ZDMuLmIyMTgyMTAgMTAwNjQ0Cj4gPiA+IC0tLSBhL2Ry aXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaAo+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211 c2JfZG1hLmgKPiA+ID4gQEAgLTE5Nyw2ICsxOTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXVz Yl9kbWFfY29udHJvbGxlcl9kZXN0cm95KHN0cnVjdCBkbWFfY29udHJvbGxlciAqZCkgeyB9Cj4g PiA+ICBleHRlcm4gc3RydWN0IGRtYV9jb250cm9sbGVyICoKPiA+ID4gIG11c2Joc19kbWFfY29u dHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqYmFzZSk7Cj4g PiA+ICBleHRlcm4gdm9pZCBtdXNiaHNfZG1hX2NvbnRyb2xsZXJfZGVzdHJveShzdHJ1Y3QgZG1h X2NvbnRyb2xsZXIgKmMpOwo+ID4gPiArZXh0ZXJuIGlycXJldHVybl90IGRtYV9jb250cm9sbGVy X2lycShpbnQgaXJxLCB2b2lkICpwcml2YXRlX2RhdGEpOwo+ID4gPiAgCj4gPiA+ICBleHRlcm4g c3RydWN0IGRtYV9jb250cm9sbGVyICoKPiA+ID4gIHR1c2JfZG1hX2NvbnRyb2xsZXJfY3JlYXRl KHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKmJhc2UpOwo+ID4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9o b3N0LmMKPiA+ID4gaW5kZXggYjU5Y2U5YS4uYjFiMDIxNiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwo+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211 c2JfaG9zdC5jCj4gPiA+IEBAIC0yOTIsMjAgKzI5Miw3MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg bXVzYl9zYXZlX3RvZ2dsZShzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19pbiwKPiA+ID4gIHsK PiA+ID4gIAl2b2lkIF9faW9tZW0JCSplcGlvID0gcWgtPmh3X2VwLT5yZWdzOwo+ID4gPiAgCXUx NgkJCWNzcjsKPiA+ID4gKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IHFoLT5od19lcC0+bXVzYjsKPiA+ ID4gIAo+ID4gPiAgCS8qCj4gPiA+ICAJICogRklYTUU6IHRoZSBjdXJyZW50IE1lbnRvciBETUEg Y29kZSBzZWVtcyB0byBoYXZlCj4gPiA+ICAJICogcHJvYmxlbXMgZ2V0dGluZyB0b2dnbGUgY29y cmVjdC4KPiA+ID4gIAkgKi8KPiA+ID4gIAo+ID4gPiAtCWlmIChpc19pbikKPiA+ID4gLQkJY3Ny ID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKSAmIE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xF Owo+ID4gPiAtCWVsc2UKPiA+ID4gLQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NS KSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gPiArCS8qIE1lZGlhVGVrIGNvbnRyb2xs ZXIgaGFzIHByaXZhdGUgdG9nZ2xlIHJlZ2lzdGVyICovCj4gPiAKPiA+IG9ubHkgb25lIHRvZ2ds ZSByZWdpc3RlciBmb3IgYWxsIGVuZHBvaW50cz8gaG93IGRvZXMgaXQgaGFuZGxlCj4gPiBkaWZm ZXJlbmNlIHRvZ2dsZSB2YWx1ZXMgZm9yIGRpZmZlcmVudCBlbmRwb2ludHM/Cj4gCj4gTWVkaWFU ZWsgY29udHJvbGxlciBoYXMgc2VwYXJhdGUgcmVnaXN0ZXJzIHRvIGRlc2NyaWJlIFRYL1JYIHRv Z2dsZS4KCklzIGl0IG9uZSByZWdpc3RlciBwZXIgZW5kcG9pbnQ/Cgo+IAo+ID4gPiArCWlmICht dXNiLT5vcHMtPnF1aXJrcyAmIE1VU0JfTVRLX1FVSVJLUykgewo+ID4gPiArCQl1MTYgdG9nZ2xl Owo+ID4gPiArCQl1OCBlcG51bSA9IHFoLT5od19lcC0+ZXBudW07Cj4gPiA+ICsKPiA+ID4gKwkJ aWYgKGlzX2luKQo+ID4gPiArCQkJdG9nZ2xlID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgTVVT Ql9SWFRPRyk7Cgp0aGlzIGxpbmUgc2VlbXMgdGVsbGluZyB0aGVyZSBpcyBqdXN0ICpvbmUqIHJl Z2lzdGVyIGZvciBhbGwgZW5kcG9pbnRzLgoKPiA+IAo+ID4gc2hvdWxkIHVzZSBtdXNiX3JlYWR3 KCkgaW5zdGVhZD8gTVVTQl9SWFRPRyBzZWVtcyB0byBiZSAxNmJpdC4KPiAKPiBPawo+IAo+ID4g PiArCQllbHNlCj4gPiA+ICsJCQl0b2dnbGUgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBNVVNC X1RYVE9HKTsKPiA+ID4gKwo+ID4gPiArCQljc3IgPSB0b2dnbGUgJiAoMSA8PCBlcG51bSk7Cj4g PiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJaWYgKGlzX2luKQo+ID4gPiArCQkJY3NyID0gbXVzYl9y ZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKQo+ID4gPiArCQkJCSYgTVVTQl9SWENTUl9IX0RBVEFUT0dH TEU7Cj4gPiA+ICsJCWVsc2UKPiA+ID4gKwkJCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9U WENTUikKPiA+ID4gKwkJCQkmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gCj4gPiBEb2Vz IHRoaXMgbG9naWMgc3RpbGwgd29yayBmb3IgdGhlIG10ayBwbGF0Zm9ybSBldmVuIGlmIGl0IGhh cyBpdHMgb3duCj4gPiBwcml2YXRlIHRvZ2dsZSByZWdpc3Rlcj8gSWYgc28sIHdlIGRvbid0IG5l ZWQgdG8gY2hhbmdlIGhlcmUuCj4gCj4gU29ycnksIHRoaXMgbG9naWMgY2FuIG5vdCB3b3JrIG9u IG10ayBwbGF0Zm9ybSwgYml0Cj4gTVVTQl9SWENTUl9IX0RBVEFUT0dHTEUgYW5kIE1VU0JfVFhD U1JfSF9EQVRBVE9HR0xFIGFyZSB1c2VkIGZvciBvdGhlcgo+IGZ1bmN0aW9uLgoKSXMgdGhlcmUg YSBkaWZmZXJlbnQgY29udHJvbGxlciBSVEwgdmVyc2lvbiB3ZSBjYW4gdXNlIHRvCmRpZmZlcmVu dGlhdGU/Cgo+IAo+ID4gSWYgbm90LCBsZXQncyB0cnkgdG8gbm90IHVzZSB0aGlzIHF1aXJrIGZs YWcuIFBsZWFzZSBjcmVhdGUgYSBob29rCj4gPiBtdXNiX3BsYXRmb3JtX2dldF90b2dnbGUoKSBp biBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMuCj4gCj4gRG9lcyB0aGUgbWV0aG9kIG9mIGltcGxl bWVudCBtdXNiX3BsYXRmb3JtX2dldF90b2dnbGUoKSBpcyBwcmVwYXJlCj4gbXVzYl9kZWZhdWx0 X2dldF90b2dnbGUgd2l0aCBjb21tb24gZnVuY3Rpb24sIHRoZW4gZm9sbG93IGhvdwo+IG11c2Jf cmVhZGIoKSBwb2ludGVyIGlzIGFzc2lnbmVkIGluIG11c2JfaW5pdF9jb250cm9sbGVyKCk/CgpZ ZXMsIHNpbWlsYXIgdG8gbXVzYl9yZWFkYigpIGltcGxlbWVudGF0aW9uLgoKPiBIb3cgYWJvdXQg Y3JlYXRpbmcgbXVzYl9wbGF0Zm9ybV9nZXRfdG9nZ2xlKCkgYXMgZm9sbG93aW5nOgo+IHUxNiAo KmdldF90b2dnbGUpKHN0cnVjdCBtdXNiKiBtdXNiLCBzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBp c19pbik7Cgp5ZXMsIGl0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uLCB0aGVuIGFkZCBp dCBpbiBzdHJ1Y3QgbXVzYl9pby4KCj4gCj4gPiA+ICsJfQo+ID4gPiAgCj4gPiA+ICAJdXNiX3Nl dHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAhaXNfaW4sIGNzciA/IDEgOiAwKTsKPiA+ID4g IH0KPiA+ID4gIAo+ID4gPiArc3RhdGljIGlubGluZSB1MTYgbXVzYl9zZXRfdG9nZ2xlKHN0cnVj dCBtdXNiX3FoICpxaCwgaW50IGlzX2luLAo+ID4gPiArCQkJCQlzdHJ1Y3QgdXJiICp1cmIpCj4g PiA+ICt7Cj4gPiA+ICsJdTE2IGNzciA9IDA7Cj4gPiA+ICsJdTE2IHRvZ2dsZSA9IDA7Cj4gPiA+ ICsJc3RydWN0IG11c2IgKm11c2IgPSBxaC0+aHdfZXAtPm11c2I7Cj4gPiA+ICsJdTggZXBudW0g PSBxaC0+aHdfZXAtPmVwbnVtOwo+ID4gPiArCj4gPiA+ICsJdG9nZ2xlID0gdXNiX2dldHRvZ2ds ZSh1cmItPmRldiwgcWgtPmVwbnVtLCAhaXNfaW4pOwo+ID4gPiArCj4gPiA+ICsJLyogTWVkaWFU ZWsgY29udHJvbGxlciBoYXMgcHJpdmF0ZSB0b2dnbGUgcmVnaXN0ZXIgKi8KPiA+ID4gKwlpZiAo bXVzYi0+b3BzLT5xdWlya3MgJiBNVVNCX01US19RVUlSS1MpIHsKPiA+ID4gKwkJaWYgKGlzX2lu KSB7Cj4gPiA+ICsJCQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9SWFRPR0VOLCAoMSA8 PCBlcG51bSkpOwo+ID4gPiArCQkJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE1VU0JfUlhUT0cs ICh0b2dnbGUgPDwgZXBudW0pKTsKPiA+ID4gKwkJfSBlbHNlIHsKPiA+ID4gKwkJCW11c2Jfd3Jp dGVsKG11c2ItPm1yZWdzLCBNVVNCX1RYVE9HRU4sICgxIDw8IGVwbnVtKSk7Cj4gPiA+ICsJCQlt dXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9UWFRPRywgKHRvZ2dsZSA8PCBlcG51bSkpOwo+ ID4gPiArCQl9Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJaWYgKGlzX2luKSB7Cj4gPiA+ICsJ CQlpZiAodG9nZ2xlKQo+ID4gPiArCQkJCWNzciA9IE1VU0JfUlhDU1JfSF9XUl9EQVRBVE9HR0xF Cj4gPiA+ICsJCQkJCQl8IE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gPiArCQkJZWxzZQo+ ID4gPiArCQkJCWNzciA9IDA7Cj4gPiA+ICsJCX0gZWxzZSB7Cj4gPiA+ICsJCQlpZiAodG9nZ2xl KQo+ID4gPiArCQkJCWNzciB8PSBNVVNCX1RYQ1NSX0hfV1JfREFUQVRPR0dMRQo+ID4gPiArCQkJ CQkJfCBNVVNCX1RYQ1NSX0hfREFUQVRPR0dMRTsKPiA+ID4gKwkJCWVsc2UKPiA+ID4gKwkJCQlj c3IgfD0gTVVTQl9UWENTUl9DTFJEQVRBVE9HOwoKJz8gOicgb3BlcmF0aW9uIHByb2JhYmx5IGlz IGJldHRlciB0aGFuICdpZiBlbHNlJyBoZXJlLgoKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4g KwlyZXR1cm4gY3NyOwo+ID4gCj4gPiBQbGVhc2UgY3JlYXRlIGEgc2VwZXJhdGUgcGF0Y2ggZm9y IHRoaXMgbXVzYl9zZXRfdG9nZ2xlKCkgd2l0aG91dCBhZGRpbmcKPiA+IHRoZSBtdGsgbG9naWMu IEl0IGlzIGEgbmljZSBjbGVhbnVwLgo+IAo+IERvZXMgdGhpcyBsaWtlIGdldCB0b2dnbGUgaW1w bGVtZW50YXRpb24sIGNyZWF0ZSBhIGhvb2sKPiBtdXNiX3BsYXRmb3JtX3NldF90b2dnbGUoKSBp biBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHM/CgpZb3UgZGlkIHRoZSBjb2RlIGNsZWFudXAgYnkg Y3JlYXRpbmcgbXVzYl9zZXRfdG9nZ2xlKCksIHBsZWFzZSBtYWtlIGl0CmluIGEgc2VwYXJhdGUg cGF0Y2gsIGxpa2UKCnN0YXRpYyB1MTYgbXVzYl9zZXRfdG9nZ2xlKHN0cnVjdCBtdXNiX3FoICpx aCwgaW50IGlzX2luLCBzdHJ1Y3QgdXJiICp1cmIpCnsKCXRvZ2dsZSA9IHVzYl9nZXR0b2dnbGUo dXJiLT5kZXYsIHFoLT5lcG51bSwgIWlzX2luKTsKCWlmIChpc19pbikKCQljc3IgPSB0b2dnbGUg PyAKCQkJKE1VU0JfUlhDU1JfSF9XUl9EQVRBVE9HR0xFIHwgTVVTQl9SWENTUl9IX0RBVEFUT0dH TEUpIDoKCQkJMDsKCWVsc2UKCQljc3IgPSB0b2dnbGUgPwoJCQlNVVNCX1RYQ1NSX0hfV1JfREFU QVRPR0dMRSB8IE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFIDoKCQkJTVVTQl9UWENTUl9DTFJEQVRB VE9HOwoJcmV0dXJuIGNzcjsKfQoKLyogdXNlIG11c2Jfc2V0X3RvZ2dsZSgpIGluIHRoZSB0d28g aW5zdGFuY2VzICovCgp0aGVuIGluIHRoaXMgcGF0Y2ggeW91IGFkZCB0aGUgbXRrIGltcGxlbWVu dGF0aW9uIHNpbWlsYXIgYXMKKmdldF90b2dnbGUoKSBkaXNjdXNzZWQgYWJvdmUuCgo+IAo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICAvKgo+ID4gPiAgICogQWR2YW5jZSB0aGlzIGhhcmR3YXJlIGVu ZHBvaW50J3MgcXVldWUsIGNvbXBsZXRpbmcgdGhlIHNwZWNpZmllZCBVUkIgYW5kCj4gPiA+ICAg KiBhZHZhbmNpbmcgdG8gZWl0aGVyIHRoZSBuZXh0IFVSQiBxdWV1ZWQgdG8gdGhhdCBxaCwgb3Ig ZWxzZSBpbnZhbGlkYXRpbmcKPiA+ID4gQEAgLTc3MiwxMyArODI1LDggQEAgc3RhdGljIHZvaWQg bXVzYl9lcF9wcm9ncmFtKHN0cnVjdCBtdXNiICptdXNiLCB1OCBlcG51bSwKPiA+ID4gIAkJCQkJ KTsKPiA+ID4gIAkJCWNzciB8PSBNVVNCX1RYQ1NSX01PREU7Cj4gPiA+ICAKPiA+ID4gLQkJCWlm ICghaHdfZXAtPnR4X2RvdWJsZV9idWZmZXJlZCkgewo+ID4gPiAtCQkJCWlmICh1c2JfZ2V0dG9n Z2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDEpKQo+ID4gPiAtCQkJCQljc3IgfD0gTVVTQl9UWENT Ul9IX1dSX0RBVEFUT0dHTEUKPiA+ID4gLQkJCQkJCXwgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7 Cj4gPiA+IC0JCQkJZWxzZQo+ID4gPiAtCQkJCQljc3IgfD0gTVVTQl9UWENTUl9DTFJEQVRBVE9H Owo+ID4gPiAtCQkJfQo+ID4gPiArCQkJaWYgKCFod19lcC0+dHhfZG91YmxlX2J1ZmZlcmVkKQo+ ID4gPiArCQkJCWNzciB8PSBtdXNiX3NldF90b2dnbGUocWgsICFpc19vdXQsIHVyYik7Cj4gPiA+ ICAKPiA+ID4gIAkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIGNzcik7Cj4gPiA+ICAJ CQkvKiBSRVZJU0lUIG1heSBuZWVkIHRvIGNsZWFyIEZMVVNIRklGTyAuLi4gKi8KPiA+ID4gQEAg LTg2MCwxNyArOTA4LDEyIEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1Y3QgbXVz YiAqbXVzYiwgdTggZXBudW0sCj4gPiA+ICAKPiA+ID4gIAkvKiBJTi9yZWNlaXZlICovCj4gPiA+ ICAJfSBlbHNlIHsKPiA+ID4gLQkJdTE2CWNzcjsKPiA+ID4gKwkJdTE2CWNzciA9IDA7Cj4gPiA+ ICAKPiA+ID4gIAkJaWYgKGh3X2VwLT5yeF9yZWluaXQpIHsKPiA+ID4gIAkJCW11c2JfcnhfcmVp bml0KG11c2IsIHFoLCBlcG51bSk7Cj4gPiA+ICsJCQljc3IgfD0gbXVzYl9zZXRfdG9nZ2xlKHFo LCAhaXNfb3V0LCB1cmIpOwo+ID4gPiAgCj4gPiA+IC0JCQkvKiBpbml0IG5ldyBzdGF0ZTogdG9n Z2xlIGFuZCBOWUVULCBtYXliZSBETUEgbGF0ZXIgKi8KPiA+ID4gLQkJCWlmICh1c2JfZ2V0dG9n Z2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDApKQo+ID4gPiAtCQkJCWNzciA9IE1VU0JfUlhDU1Jf SF9XUl9EQVRBVE9HR0xFCj4gPiA+IC0JCQkJCXwgTVVTQl9SWENTUl9IX0RBVEFUT0dHTEU7Cj4g PiA+IC0JCQllbHNlCj4gPiA+IC0JCQkJY3NyID0gMDsKPiA+ID4gIAkJCWlmIChxaC0+dHlwZSA9 PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCj4gPiA+ICAJCQkJY3NyIHw9IE1VU0JfUlhDU1JfRElT TllFVDsKPiA+ID4gIAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3Jl Z3MuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKPiA+ID4gaW5kZXggNWNkNzI2NC4u ZmZiZTI2NyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAo+ ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCj4gPiA+IEBAIC0yNzMsNiAr MjczLDEyIEBACj4gPiA+ICAjZGVmaW5lIE1VU0JfUlhIVUJBRERSCQkweDA2Cj4gPiA+ICAjZGVm aW5lIE1VU0JfUlhIVUJQT1JUCQkweDA3Cj4gPiA+ICAKPiA+ID4gKy8qIE1lZGlhVGVrIGNvbnRy b2xsZXIgdG9nZ2xlIGVuYWJsZSBhbmQgc3RhdHVzIHJlZyAqLwo+ID4gPiArI2RlZmluZSBNVVNC X1JYVE9HCQkweDgwCj4gPiA+ICsjZGVmaW5lIE1VU0JfUlhUT0dFTgkJMHg4Mgo+ID4gPiArI2Rl ZmluZSBNVVNCX1RYVE9HCQkweDg0Cj4gPiA+ICsjZGVmaW5lIE1VU0JfVFhUT0dFTgkJMHg4Ngo+ ID4gCj4gPiBBZ2FpbiwgdGhlc2Ugb2Zmc2V0cyBhcmUgZm9yIGRpZmZlcmVudCByZWdpc3RlcnMg aW4gdGhlIE1VU0IgdmVyc2lvbiBJCj4gPiBoYXZlLCBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91 IGhhdmUgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlIE1VU0IgSVAuCj4gCj4gU29ycnksIHRoZXNl IGFyZSBNZWRpYVRlayBjb250cm9sbGVyIHByaXZhdGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGNvbnRy b2wKPiB0b2dnbGUuCgpPa2F5LiBPbmNlIHRoZSBwbGF0Zm9ybSBnZXQvc2V0X3RvZ2dsZSgpIGFy ZSBpbXBsZW1lbnRlZCwgdGhvc2UKcmVnaXN0ZXJzIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBtdGsg Z2x1ZSBkcml2ZXIgaW5zdGVhZCBvZiBoZXJlLgoKUmVnYXJkcywKLUJpbi4K