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: min.guo@mediatek.com Message-Id: <1547105062.4433.144.camel@mhfsdcap03> Date: Thu, 10 Jan 2019 15:24:22 +0800 To: Bin Liu 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: SGkgQmluLAoKT24gV2VkLCAyMDE5LTAxLTA5IGF0IDA4OjAxIC0wNjAwLCBCaW4gTGl1IHdyb3Rl Ogo+IEhpIE1pbiwKPiAKPiBPbiBXZWQsIEphbiAwOSwgMjAxOSBhdCAwODozMTowOFBNICswODAw LCBNaW4gR3VvIHdyb3RlOgo+ID4gSGkgQmluLAo+ID4gT24gVHVlLCAyMDE5LTAxLTA4IGF0IDA5 OjQ0IC0wNjAwLCBCaW4gTGl1IHdyb3RlOgo+ID4gPiBIaSwKPiA+ID4gCj4gPiA+IE9uIFRodSwg RGVjIDI3LCAyMDE4IGF0IDAzOjM0OjI2UE0gKzA4MDAsIG1pbi5ndW9AbWVkaWF0ZWsuY29tIHdy b3RlOgo+ID4gPiA+IEZyb206IE1pbiBHdW8gPG1pbi5ndW9AbWVkaWF0ZWsuY29tPgo+ID4gPiA+ IAo+ID4gPiA+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNZWRpYVRlayBtdXNiIGNvbnRyb2xsZXIg aW4KPiA+ID4gPiBob3N0LCBwZXJpcGhlcmFsIGFuZCBvdGcgbW9kZQo+ID4gPiA+IAo+ID4gPiA+ IFNpZ25lZC1vZmYtYnk6IE1pbiBHdW8gPG1pbi5ndW9AbWVkaWF0ZWsuY29tPgo+ID4gPiA+IFNp Z25lZC1vZmYtYnk6IFlvbmdsb25nIFd1IDx5b25nbG9uZy53dUBtZWRpYXRlay5jb20+Cj4gPiA+ ID4gLS0tCj4gPiA+ID4gIGRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyAgICAgfCAgIDggKy0KPiA+ ID4gPiAgZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZSAgICB8ICAgMSArCj4gPiA+ID4gIGRyaXZl cnMvdXNiL211c2IvbWVkaWF0ZWsuYyAgfCA1NjIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gPiA+ICBkcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIHwg IDEwICsKPiA+ID4gPiAgZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCB8ICAgMSArCj4gPiA+ ID4gIGRyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaCAgfCAgIDEgKwo+ID4gPiA+ICBkcml2ZXJz L3VzYi9tdXNiL211c2JfaG9zdC5jIHwgIDc5ICsrKystLQo+ID4gPiA+ICBkcml2ZXJzL3VzYi9t dXNiL211c2JfcmVncy5oIHwgICA2ICsKPiA+ID4gPiAgZHJpdmVycy91c2IvbXVzYi9tdXNiaHNk bWEuYyB8ICAzNCArKy0KPiA+ID4gPiAgOSBmaWxlcyBjaGFuZ2VkLCA2NzEgaW5zZXJ0aW9ucygr KSwgMzEgZGVsZXRpb25zKC0pCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9tdXNiL21lZGlhdGVrLmMKPiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCj4gPiA+ID4gaW5kZXgg YWQwODg5NS4uNTQwZmM5ZiAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tj b25maWcKPiA+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKPiA+ID4gPiBAQCAt MTE1LDYgKzExNSwxMiBAQCBjb25maWcgVVNCX01VU0JfSlo0NzQwCj4gPiA+ID4gIAlkZXBlbmRz IG9uIFVTQl9NVVNCX0dBREdFVAo+ID4gPiA+ICAJZGVwZW5kcyBvbiBVU0JfT1RHX0JMQUNLTElT VF9IVUIKPiA+ID4gPiAgCj4gPiA+ID4gK2NvbmZpZyBVU0JfTVVTQl9NRURJQVRFSwo+ID4gPiA+ ICsJdHJpc3RhdGUgIk1lZGlhVGVrIHBsYXRmb3JtcyIKPiA+ID4gPiArCWRlcGVuZHMgb24gQVJD SF9NRURJQVRFSwo+ID4gPiAKPiA+ID4gUGxlYXNlIGFsc28gYWRkICd8fCBDT01QSUxFX1RFU1Qn IHRvIG1ha2UgdGVzdGluZyBlYXNpZXIuCj4gPiAKPiA+IE9rCj4gPiAKPiA+ID4gPiArCWRlcGVu ZHMgb24gTk9QX1VTQl9YQ0VJVgo+ID4gPiA+ICsJZGVwZW5kcyBvbiBHRU5FUklDX1BIWQo+ID4g PiA+ICsKPiA+ID4gPiAgY29uZmlnIFVTQl9NVVNCX0FNMzM1WF9DSElMRAo+ID4gPiA+ICAJdHJp c3RhdGUKPiA+ID4gPiAgCj4gPiA+ID4gQEAgLTE0MSw3ICsxNDcsNyBAQCBjb25maWcgVVNCX1VY NTAwX0RNQQo+ID4gPiA+ICAKPiA+ID4gPiAgY29uZmlnIFVTQl9JTlZFTlRSQV9ETUEKPiA+ID4g PiAgCWJvb2wgJ0ludmVudHJhJwo+ID4gPiA+IC0JZGVwZW5kcyBvbiBVU0JfTVVTQl9PTUFQMlBM VVMKPiA+ID4gPiArCWRlcGVuZHMgb24gVVNCX01VU0JfT01BUDJQTFVTIHx8IFVTQl9NVVNCX01F RElBVEVLCj4gPiA+ID4gIAloZWxwCj4gPiA+ID4gIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIHVz aW5nIE1lbnRvcidzIGVuZ2luZS4KPiA+ID4gPiAgCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvdXNiL211c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlCj4gPiA+ID4g aW5kZXggM2E4OGM3OS4uNjNkODJkMCAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3VzYi9t dXNiL01ha2VmaWxlCj4gPiA+ID4gKysrIGIvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQo+ID4g PiA+IEBAIC0yNCw2ICsyNCw3IEBAIG9iai0kKENPTkZJR19VU0JfTVVTQl9EQThYWCkJCQkrPSBk YTh4eC5vCj4gPiA+ID4gIG9iai0kKENPTkZJR19VU0JfTVVTQl9VWDUwMCkJCQkrPSB1eDUwMC5v Cj4gPiA+ID4gIG9iai0kKENPTkZJR19VU0JfTVVTQl9KWjQ3NDApCQkJKz0gano0NzQwLm8KPiA+ ID4gPiAgb2JqLSQoQ09ORklHX1VTQl9NVVNCX1NVTlhJKQkJCSs9IHN1bnhpLm8KPiA+ID4gPiAr b2JqLSQoQ09ORklHX1VTQl9NVVNCX01FRElBVEVLKSAgICAgIAkJKz0gbWVkaWF0ZWsubwo+ID4g PiA+ICAKPiA+ID4gPiAgCj4gPiA+ID4gIG9iai0kKENPTkZJR19VU0JfTVVTQl9BTTMzNVhfQ0hJ TEQpCQkrPSBtdXNiX2FtMzM1eC5vCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211 c2IvbWVkaWF0ZWsuYyBiL2RyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYwo+ID4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uMTVhNjQ2MAo+ID4gPiA+IC0t LSAvZGV2L251bGwKPiA+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMKPiA+ ID4gCj4gPiA+IFtzbmlwXQo+ID4gPiBJIHdpbGwgcmV2aWV3IHRoaXMgc2VjdGlvbiBsYXRlciBh ZnRlciB3ZSBzb3J0ZWQgb3V0IG90aGVyIHRoaW5ncy4KPiA+ID4gCj4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Jf Y29yZS5jCj4gPiA+ID4gaW5kZXggYjdkNTYyNy4uZDYwZjc2ZiAxMDA2NDQKPiA+ID4gPiAtLS0g YS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCj4gPiA+ID4gKysrIGIvZHJpdmVycy91c2Iv bXVzYi9tdXNiX2NvcmUuYwo+ID4gPiA+IEBAIC0xMDI4LDYgKzEwMjgsMTYgQEAgc3RhdGljIHZv aWQgbXVzYl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IG11c2IgKm11c2IpCj4gPiA+ID4gIAl0 ZW1wID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9JTlRSVVNCKTsKPiA+ID4gPiAgCXRlbXAgPSBt dXNiX3JlYWR3KG1iYXNlLCBNVVNCX0lOVFJUWCk7Cj4gPiA+ID4gIAl0ZW1wID0gbXVzYl9yZWFk dyhtYmFzZSwgTVVTQl9JTlRSUlgpOwo+ID4gPiA+ICsKPiA+ID4gPiArCS8qICBNZWRpYVRlayBj b250cm9sbGVyIGludGVycnVwdCBzdGF0dXMgaXMgVzFDICovCj4gPiA+IAo+ID4gPiBUaGlzIFcx QyBkb2Vzbid0IG1hdGNoIHRvIHRoZSBNVVNCIFByb2dyYW1taW5nIEd1aWRlIHRoYXQgSSBoYXZl LiBUaG9zZQo+ID4gPiByZWdpc3RlcnMgYXJlIHJlYWQtb25seS4KPiA+ID4gSXMgdGhlIGRpZmZl cmVuY2UgZHVlIHRvIHRoZSBJUCBpbnRlcmdyYXRpb24gaW4gdGhlIG10ayBwbGF0Zm9ybXM/IG9y IGlzCj4gPiA+IGl0IGEgbmV3IHZlcnNpb24gb2YgdGhlIE1VU0IgY29udHJvbGxlcj8gSWYgbGF0 dGVyLCB3aGF0IGlzIHRoZSB2ZXJzaW9uPwo+ID4gCj4gPiBUaGlzIGlzIGRpZmZlcmVuY2UgZHVl IHRvIHRoZSBJUCBpbnRlcmdyYXRpb24gaW4gbXRrIHBsYXRmb3Jtcy4gVzFDIGlzCj4gPiBlYXN5 IGZvciBDcGRlVmlzZXIgZGVidWcuCj4gPiAKPiA+ID4gPiArCWlmIChtdXNiLT5vcHMtPnF1aXJr cyAmIE1VU0JfTVRLX1FVSVJLUykgewo+ID4gPiAKPiA+ID4gQmFzaWNhbGx5IHdlIGRvbid0IHdh bnQgdG8gdXNlIHRoaXMgdHlwZSBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBxdWlya3MgaWYKPiA+ID4g cG9zc2libGUsIHNvIGxldCdzIHRyeSB0byBub3QgdXNlIGl0Lgo+ID4gCj4gPiBJIHdpbGwgdHJ5 IG15IGJlc3QgdG8gYXZvaWQgdXNpbmcgaXQuCj4gCj4gVGhhbmtzLgo+IAo+ID4gCj4gPiA+ID4g KwkJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5UUlVTQiwKPiA+ID4gPiArCQkJbXVzYl9yZWFk YihtYmFzZSwgTVVTQl9JTlRSVVNCKSk7Cj4gPiA+IAo+ID4gPiBGb3IgdGhpcyBjbGVhcmluZyBy ZWdpc3RlciBiaXQgb3BlcmF0aW9uLCBwbGVhc2UgY3JlYXRlIHBsYXRmb3JtIGhvb2tzCj4gPiA+ IG11c2JfY2xlYXJiKCkgYW5kIG11c2JfY2xlYXJ3KCkgaW4gc3RydWN0IG11c2JfcGxhdGZvcm1f b3BzIGluc3RlYWQsCj4gPiA+IHRoZW4gZm9sbG93IGhvdyBtdXNiX3JlYWRiKCkgcG9pbnRlciBp cyBhc3NpZ25lZCBpbgo+ID4gPiBtdXNiX2luaXRfY29udHJvbGxlcigpIHRvIHVzZSB0aGUgVzFD IHZlcnNpb24gZm9yIG10ayBwbGF0Zm9ybS4KPiA+IAo+ID4gSSBoYXZlIHRyaWVkIGltcGxlbWVu dGluZyBtdXNiX3JlYWRiKCksIG11c2JfcmVhZHcoKSBpbnRlcmZhY2Ugd2l0aAo+ID4gaW50ZXJy dXB0IHN0YXR1cyBXMUMgZnVuY3Rpb24gaW4gc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzLiBCdXQg dGhpcwo+ID4gaW50ZXJmYWNlIHdpbGwgcmVxdWlyZSBhIGdsb2JhbCB2YXJpYWJsZSB0byBob2xk IE1BQyBiYXNpYyBhZGRyZXNzIGZvcgo+ID4ganVkZ21lbnQsIGFuZCB0aGVuIHNwZWNpYWwgaGFu ZGxpbmcgb2YgdGhlIGludGVycnVwdCBzdGF0ZS4gQSBnbG9iYWwKPiA+IHZhcmlhYmxlIHdpbGwg bWFrZSB0aGUgZHJpdmVyIHdvcmsgd2l0aCBvbmx5IGEgc2luZ2xlIGluc3RhbmNlLCBzbyBpdAo+ ID4gY2FuJ3Qgd29yayBvbiBzb21lIE1USyBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSB0d28gaW5zdGFu Y2VzLgo+IAo+IEkgZGlkbid0IG1lYW4gdG8gbW9kaWZ5IG11c2JfcmVhZCooKSwgYnV0Cj4gCj4g PiBIb3cgYWJvdXQgY3JlYXRpbmcgbXVzYl9jbGVhcmIvdygpIGFzIGZvbGxvd2luZzoKPiA+IHZv aWQgKCpjbGVhcmIpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1OCBkYXRh KTsKPiA+IHZvaWQgKCpjbGVhcncpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0 LCB1MTYgZGF0YSk7Cj4gCj4gdGhpcyBpcyB3aGF0IEkgd2FzIGFza2luZyBmb3IsIHNpbWlsYXIg dG8gd2hhdCBtdXNiX3JlYWRiL3coKSBpcwo+IGltcGxlbWVudGVkLgoKSSB3aWxsIHByZXBhcmUg YSBwYXRjaCBmb3IgbXVzYl9jbGVhcmIvdygpLgoKPiA+IAo+ID4gCj4gPiA+ID4gKwkJbXVzYl93 cml0ZXcobWJhc2UsIE1VU0JfSU5UUlJYLAo+ID4gPiA+ICsJCQltdXNiX3JlYWR3KG1iYXNlLCBN VVNCX0lOVFJSWCkpOwo+ID4gPiA+ICsJCW11c2Jfd3JpdGV3KG1iYXNlLCBNVVNCX0lOVFJUWCwK PiA+ID4gPiArCQkJbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9JTlRSVFgpKTsKPiA+ID4gPiArCX0K PiA+ID4gPiAgfQo+ID4gPiA+ICAKPiA+ID4gPiAgc3RhdGljIHZvaWQgbXVzYl9lbmFibGVfaW50 ZXJydXB0cyhzdHJ1Y3QgbXVzYiAqbXVzYikKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKPiA+ID4g PiBpbmRleCAwNDIwM2I3Li4xYmY0ZTlhIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvdXNi L211c2IvbXVzYl9jb3JlLmgKPiA+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29y ZS5oCj4gPiA+ID4gQEAgLTEzOCw2ICsxMzgsNyBAQCBlbnVtIG11c2JfZ19lcDBfc3RhdGUgewo+ ID4gPiA+ICAgKi8KPiA+ID4gPiAgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKPiA+ID4gPiAg Cj4gPiA+ID4gKyNkZWZpbmUgTVVTQl9NVEtfUVVJUktTCUJJVCgxMCkKPiA+ID4gPiAgI2RlZmlu ZSBNVVNCX0dfTk9fU0tCX1JFU0VSVkUJQklUKDkpCj4gPiA+ID4gICNkZWZpbmUgTVVTQl9EQThY WAkJQklUKDgpCj4gPiA+ID4gICNkZWZpbmUgTVVTQl9QUkVTRVJWRV9TRVNTSU9OCUJJVCg3KQo+ ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmggYi9kcml2ZXJz L3VzYi9tdXNiL211c2JfZG1hLmgKPiA+ID4gPiBpbmRleCAyODFlNzVkMy4uYjIxODIxMCAxMDA2 NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKPiA+ID4gPiArKysg Yi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKPiA+ID4gPiBAQCAtMTk3LDYgKzE5Nyw3IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX2RtYV9jb250cm9sbGVyX2Rlc3Ryb3koc3RydWN0IGRt YV9jb250cm9sbGVyICpkKSB7IH0KPiA+ID4gPiAgZXh0ZXJuIHN0cnVjdCBkbWFfY29udHJvbGxl ciAqCj4gPiA+ID4gIG11c2Joc19kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11 c2IsIHZvaWQgX19pb21lbSAqYmFzZSk7Cj4gPiA+ID4gIGV4dGVybiB2b2lkIG11c2Joc19kbWFf Y29udHJvbGxlcl9kZXN0cm95KHN0cnVjdCBkbWFfY29udHJvbGxlciAqYyk7Cj4gPiA+ID4gK2V4 dGVybiBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0 ZV9kYXRhKTsKPiA+ID4gPiAgCj4gPiA+ID4gIGV4dGVybiBzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIg Kgo+ID4gPiA+ICB0dXNiX2RtYV9jb250cm9sbGVyX2NyZWF0ZShzdHJ1Y3QgbXVzYiAqbXVzYiwg dm9pZCBfX2lvbWVtICpiYXNlKTsKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVz Yi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKPiA+ID4gPiBpbmRl eCBiNTljZTlhLi5iMWIwMjE2IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvdXNiL211c2Iv bXVzYl9ob3N0LmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCj4g PiA+ID4gQEAgLTI5MiwyMCArMjkyLDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3NhdmVf dG9nZ2xlKHN0cnVjdCBtdXNiX3FoICpxaCwgaW50IGlzX2luLAo+ID4gPiA+ICB7Cj4gPiA+ID4g IAl2b2lkIF9faW9tZW0JCSplcGlvID0gcWgtPmh3X2VwLT5yZWdzOwo+ID4gPiA+ICAJdTE2CQkJ Y3NyOwo+ID4gPiA+ICsJc3RydWN0IG11c2IgKm11c2IgPSBxaC0+aHdfZXAtPm11c2I7Cj4gPiA+ ID4gIAo+ID4gPiA+ICAJLyoKPiA+ID4gPiAgCSAqIEZJWE1FOiB0aGUgY3VycmVudCBNZW50b3Ig RE1BIGNvZGUgc2VlbXMgdG8gaGF2ZQo+ID4gPiA+ICAJICogcHJvYmxlbXMgZ2V0dGluZyB0b2dn bGUgY29ycmVjdC4KPiA+ID4gPiAgCSAqLwo+ID4gPiA+ICAKPiA+ID4gPiAtCWlmIChpc19pbikK PiA+ID4gPiAtCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpICYgTVVTQl9SWENT Ul9IX0RBVEFUT0dHTEU7Cj4gPiA+ID4gLQllbHNlCj4gPiA+ID4gLQkJY3NyID0gbXVzYl9yZWFk dyhlcGlvLCBNVVNCX1RYQ1NSKSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gPiA+ICsJ LyogTWVkaWFUZWsgY29udHJvbGxlciBoYXMgcHJpdmF0ZSB0b2dnbGUgcmVnaXN0ZXIgKi8KPiA+ ID4gCj4gPiA+IG9ubHkgb25lIHRvZ2dsZSByZWdpc3RlciBmb3IgYWxsIGVuZHBvaW50cz8gaG93 IGRvZXMgaXQgaGFuZGxlCj4gPiA+IGRpZmZlcmVuY2UgdG9nZ2xlIHZhbHVlcyBmb3IgZGlmZmVy ZW50IGVuZHBvaW50cz8KPiA+IAo+ID4gTWVkaWFUZWsgY29udHJvbGxlciBoYXMgc2VwYXJhdGUg cmVnaXN0ZXJzIHRvIGRlc2NyaWJlIFRYL1JYIHRvZ2dsZS4KPiAKPiBJcyBpdCBvbmUgcmVnaXN0 ZXIgcGVyIGVuZHBvaW50PwoKTVVTQl9SWFRPRy9NVVNCX1RYVE9HIGlzIGNvbW1vbiByZWdpc3Rl ciwgZWFjaCBiaXQgcmVmbGVjdHMgdGhlIHRvZ2dsZQpzdGF0ZSBvZiBhbiBlbmRwb2ludC4gYml0 WzBdIG5vdCB1c2VkLGJpdFsxfjhdIGNvcnJlc3BvbmRzIHRvIGVwWzF+OF0KCj4gPiAKPiA+ID4g PiArCWlmIChtdXNiLT5vcHMtPnF1aXJrcyAmIE1VU0JfTVRLX1FVSVJLUykgewo+ID4gPiA+ICsJ CXUxNiB0b2dnbGU7Cj4gPiA+ID4gKwkJdTggZXBudW0gPSBxaC0+aHdfZXAtPmVwbnVtOwo+ID4g PiA+ICsKPiA+ID4gPiArCQlpZiAoaXNfaW4pCj4gPiA+ID4gKwkJCXRvZ2dsZSA9IG11c2JfcmVh ZGwobXVzYi0+bXJlZ3MsIE1VU0JfUlhUT0cpOwo+IAo+IHRoaXMgbGluZSBzZWVtcyB0ZWxsaW5n IHRoZXJlIGlzIGp1c3QgKm9uZSogcmVnaXN0ZXIgZm9yIGFsbCBlbmRwb2ludHMuCgpZZXMsIGFs bCBlbmRwb2ludCBzaGFyZSB0aGlzIHJlZ2lzdGVyLCBlbmRwb2ludCBhbmQgYml0IGFyZSBvbmUt dG8tb25lCmNvcnJlc3BvbmRlbmNlLgoKPiA+ID4gCj4gPiA+IHNob3VsZCB1c2UgbXVzYl9yZWFk dygpIGluc3RlYWQ/IE1VU0JfUlhUT0cgc2VlbXMgdG8gYmUgMTZiaXQuCj4gPiAKPiA+IE9rCj4g PiAKPiA+ID4gPiArCQllbHNlCj4gPiA+ID4gKwkJCXRvZ2dsZSA9IG11c2JfcmVhZGwobXVzYi0+ bXJlZ3MsIE1VU0JfVFhUT0cpOwo+ID4gPiA+ICsKPiA+ID4gPiArCQljc3IgPSB0b2dnbGUgJiAo MSA8PCBlcG51bSk7Cj4gPiA+ID4gKwl9IGVsc2Ugewo+ID4gPiA+ICsJCWlmIChpc19pbikKPiA+ ID4gPiArCQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKQo+ID4gPiA+ICsJCQkJ JiBNVVNCX1JYQ1NSX0hfREFUQVRPR0dMRTsKPiA+ID4gPiArCQllbHNlCj4gPiA+ID4gKwkJCWNz ciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9UWENTUikKPiA+ID4gPiArCQkJCSYgTVVTQl9UWENT Ul9IX0RBVEFUT0dHTEU7Cj4gPiA+IAo+ID4gPiBEb2VzIHRoaXMgbG9naWMgc3RpbGwgd29yayBm b3IgdGhlIG10ayBwbGF0Zm9ybSBldmVuIGlmIGl0IGhhcyBpdHMgb3duCj4gPiA+IHByaXZhdGUg dG9nZ2xlIHJlZ2lzdGVyPyBJZiBzbywgd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgaGVyZS4KPiA+ IAo+ID4gU29ycnksIHRoaXMgbG9naWMgY2FuIG5vdCB3b3JrIG9uIG10ayBwbGF0Zm9ybSwgYml0 Cj4gPiBNVVNCX1JYQ1NSX0hfREFUQVRPR0dMRSBhbmQgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEUg YXJlIHVzZWQgZm9yIG90aGVyCj4gPiBmdW5jdGlvbi4KPiAKPiBJcyB0aGVyZSBhIGRpZmZlcmVu dCBjb250cm9sbGVyIFJUTCB2ZXJzaW9uIHdlIGNhbiB1c2UgdG8KPiBkaWZmZXJlbnRpYXRlPwoK U29ycnksIHRoZXJlIGlzIG5vIGNvbnRyb2xsZXIgUlRMIHZlcnNpb24gY2FuIGJlIHVzZWQgdG8g aW5kaWNhdGUgdGhlCmRpZmZlcmVuY2VzLgoKPiA+IAo+ID4gPiBJZiBub3QsIGxldCdzIHRyeSB0 byBub3QgdXNlIHRoaXMgcXVpcmsgZmxhZy4gUGxlYXNlIGNyZWF0ZSBhIGhvb2sKPiA+ID4gbXVz Yl9wbGF0Zm9ybV9nZXRfdG9nZ2xlKCkgaW4gc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzLgo+ID4g Cj4gPiBEb2VzIHRoZSBtZXRob2Qgb2YgaW1wbGVtZW50IG11c2JfcGxhdGZvcm1fZ2V0X3RvZ2ds ZSgpIGlzIHByZXBhcmUKPiA+IG11c2JfZGVmYXVsdF9nZXRfdG9nZ2xlIHdpdGggY29tbW9uIGZ1 bmN0aW9uLCB0aGVuIGZvbGxvdyBob3cKPiA+IG11c2JfcmVhZGIoKSBwb2ludGVyIGlzIGFzc2ln bmVkIGluIG11c2JfaW5pdF9jb250cm9sbGVyKCk/Cj4gCj4gWWVzLCBzaW1pbGFyIHRvIG11c2Jf cmVhZGIoKSBpbXBsZW1lbnRhdGlvbi4KCk9LLgoKPiA+IEhvdyBhYm91dCBjcmVhdGluZyBtdXNi X3BsYXRmb3JtX2dldF90b2dnbGUoKSBhcyBmb2xsb3dpbmc6Cj4gPiB1MTYgKCpnZXRfdG9nZ2xl KShzdHJ1Y3QgbXVzYiogbXVzYiwgc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfaW4pOwo+IAo+ IHllcywgaXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZW4gYWRkIGl0IGluIHN0 cnVjdCBtdXNiX2lvLgoKSSB3aWxsIHByZXBhcmUgYSBwYXRjaCBmb3IgKCpnZXRfdG9nZ2xlKS4K Cj4gPiAKPiA+ID4gPiArCX0KPiA+ID4gPiAgCj4gPiA+ID4gIAl1c2Jfc2V0dG9nZ2xlKHVyYi0+ ZGV2LCBxaC0+ZXBudW0sICFpc19pbiwgY3NyID8gMSA6IDApOwo+ID4gPiA+ICB9Cj4gPiA+ID4g IAo+ID4gPiA+ICtzdGF0aWMgaW5saW5lIHUxNiBtdXNiX3NldF90b2dnbGUoc3RydWN0IG11c2Jf cWggKnFoLCBpbnQgaXNfaW4sCj4gPiA+ID4gKwkJCQkJc3RydWN0IHVyYiAqdXJiKQo+ID4gPiA+ ICt7Cj4gPiA+ID4gKwl1MTYgY3NyID0gMDsKPiA+ID4gPiArCXUxNiB0b2dnbGUgPSAwOwo+ID4g PiA+ICsJc3RydWN0IG11c2IgKm11c2IgPSBxaC0+aHdfZXAtPm11c2I7Cj4gPiA+ID4gKwl1OCBl cG51bSA9IHFoLT5od19lcC0+ZXBudW07Cj4gPiA+ID4gKwo+ID4gPiA+ICsJdG9nZ2xlID0gdXNi X2dldHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAhaXNfaW4pOwo+ID4gPiA+ICsKPiA+ID4g PiArCS8qIE1lZGlhVGVrIGNvbnRyb2xsZXIgaGFzIHByaXZhdGUgdG9nZ2xlIHJlZ2lzdGVyICov Cj4gPiA+ID4gKwlpZiAobXVzYi0+b3BzLT5xdWlya3MgJiBNVVNCX01US19RVUlSS1MpIHsKPiA+ ID4gPiArCQlpZiAoaXNfaW4pIHsKPiA+ID4gPiArCQkJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3Ms IE1VU0JfUlhUT0dFTiwgKDEgPDwgZXBudW0pKTsKPiA+ID4gPiArCQkJbXVzYl93cml0ZWwobXVz Yi0+bXJlZ3MsIE1VU0JfUlhUT0csICh0b2dnbGUgPDwgZXBudW0pKTsKPiA+ID4gPiArCQl9IGVs c2Ugewo+ID4gPiA+ICsJCQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9UWFRPR0VOLCAo MSA8PCBlcG51bSkpOwo+ID4gPiA+ICsJCQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9U WFRPRywgKHRvZ2dsZSA8PCBlcG51bSkpOwo+ID4gPiA+ICsJCX0KPiA+ID4gPiArCX0gZWxzZSB7 Cj4gPiA+ID4gKwkJaWYgKGlzX2luKSB7Cj4gPiA+ID4gKwkJCWlmICh0b2dnbGUpCj4gPiA+ID4g KwkJCQljc3IgPSBNVVNCX1JYQ1NSX0hfV1JfREFUQVRPR0dMRQo+ID4gPiA+ICsJCQkJCQl8IE1V U0JfUlhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gPiA+ICsJCQllbHNlCj4gPiA+ID4gKwkJCQljc3Ig PSAwOwo+ID4gPiA+ICsJCX0gZWxzZSB7Cj4gPiA+ID4gKwkJCWlmICh0b2dnbGUpCj4gPiA+ID4g KwkJCQljc3IgfD0gTVVTQl9UWENTUl9IX1dSX0RBVEFUT0dHTEUKPiA+ID4gPiArCQkJCQkJfCBN VVNCX1RYQ1NSX0hfREFUQVRPR0dMRTsKPiA+ID4gPiArCQkJZWxzZQo+ID4gPiA+ICsJCQkJY3Ny IHw9IE1VU0JfVFhDU1JfQ0xSREFUQVRPRzsKPiAKPiAnPyA6JyBvcGVyYXRpb24gcHJvYmFibHkg aXMgYmV0dGVyIHRoYW4gJ2lmIGVsc2UnIGhlcmUuCgpPSy4KCj4gPiA+ID4gKwkJfQo+ID4gPiA+ ICsJfQo+ID4gPiA+ICsJcmV0dXJuIGNzcjsKPiA+ID4gCj4gPiA+IFBsZWFzZSBjcmVhdGUgYSBz ZXBlcmF0ZSBwYXRjaCBmb3IgdGhpcyBtdXNiX3NldF90b2dnbGUoKSB3aXRob3V0IGFkZGluZwo+ ID4gPiB0aGUgbXRrIGxvZ2ljLiBJdCBpcyBhIG5pY2UgY2xlYW51cC4KPiA+IAo+ID4gRG9lcyB0 aGlzIGxpa2UgZ2V0IHRvZ2dsZSBpbXBsZW1lbnRhdGlvbiwgY3JlYXRlIGEgaG9vawo+ID4gbXVz Yl9wbGF0Zm9ybV9zZXRfdG9nZ2xlKCkgaW4gc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzPwo+IAo+ IFlvdSBkaWQgdGhlIGNvZGUgY2xlYW51cCBieSBjcmVhdGluZyBtdXNiX3NldF90b2dnbGUoKSwg cGxlYXNlIG1ha2UgaXQKPiBpbiBhIHNlcGFyYXRlIHBhdGNoLCBsaWtlCj4gCj4gc3RhdGljIHUx NiBtdXNiX3NldF90b2dnbGUoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfaW4sIHN0cnVjdCB1 cmIgKnVyYikKPiB7Cj4gCXRvZ2dsZSA9IHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHFoLT5lcG51 bSwgIWlzX2luKTsKPiAJaWYgKGlzX2luKQo+IAkJY3NyID0gdG9nZ2xlID8gCj4gCQkJKE1VU0Jf UlhDU1JfSF9XUl9EQVRBVE9HR0xFIHwgTVVTQl9SWENTUl9IX0RBVEFUT0dHTEUpIDoKPiAJCQkw Owo+IAllbHNlCj4gCQljc3IgPSB0b2dnbGUgPwo+IAkJCU1VU0JfVFhDU1JfSF9XUl9EQVRBVE9H R0xFIHwgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEUgOgo+IAkJCU1VU0JfVFhDU1JfQ0xSREFUQVRP RzsKPiAJcmV0dXJuIGNzcjsKPiB9Cj4gCj4gLyogdXNlIG11c2Jfc2V0X3RvZ2dsZSgpIGluIHRo ZSB0d28gaW5zdGFuY2VzICovCj4gCj4gdGhlbiBpbiB0aGlzIHBhdGNoIHlvdSBhZGQgdGhlIG10 ayBpbXBsZW1lbnRhdGlvbiBzaW1pbGFyIGFzCj4gKmdldF90b2dnbGUoKSBkaXNjdXNzZWQgYWJv dmUuCgpPSy4KCj4gPiAKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiAgLyoKPiA+ID4gPiAg ICogQWR2YW5jZSB0aGlzIGhhcmR3YXJlIGVuZHBvaW50J3MgcXVldWUsIGNvbXBsZXRpbmcgdGhl IHNwZWNpZmllZCBVUkIgYW5kCj4gPiA+ID4gICAqIGFkdmFuY2luZyB0byBlaXRoZXIgdGhlIG5l eHQgVVJCIHF1ZXVlZCB0byB0aGF0IHFoLCBvciBlbHNlIGludmFsaWRhdGluZwo+ID4gPiA+IEBA IC03NzIsMTMgKzgyNSw4IEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1Y3QgbXVz YiAqbXVzYiwgdTggZXBudW0sCj4gPiA+ID4gIAkJCQkJKTsKPiA+ID4gPiAgCQkJY3NyIHw9IE1V U0JfVFhDU1JfTU9ERTsKPiA+ID4gPiAgCj4gPiA+ID4gLQkJCWlmICghaHdfZXAtPnR4X2RvdWJs ZV9idWZmZXJlZCkgewo+ID4gPiA+IC0JCQkJaWYgKHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHFo LT5lcG51bSwgMSkpCj4gPiA+ID4gLQkJCQkJY3NyIHw9IE1VU0JfVFhDU1JfSF9XUl9EQVRBVE9H R0xFCj4gPiA+ID4gLQkJCQkJCXwgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7Cj4gPiA+ID4gLQkJ CQllbHNlCj4gPiA+ID4gLQkJCQkJY3NyIHw9IE1VU0JfVFhDU1JfQ0xSREFUQVRPRzsKPiA+ID4g PiAtCQkJfQo+ID4gPiA+ICsJCQlpZiAoIWh3X2VwLT50eF9kb3VibGVfYnVmZmVyZWQpCj4gPiA+ ID4gKwkJCQljc3IgfD0gbXVzYl9zZXRfdG9nZ2xlKHFoLCAhaXNfb3V0LCB1cmIpOwo+ID4gPiA+ ICAKPiA+ID4gPiAgCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWENTUiwgY3NyKTsKPiA+ID4g PiAgCQkJLyogUkVWSVNJVCBtYXkgbmVlZCB0byBjbGVhciBGTFVTSEZJRk8gLi4uICovCj4gPiA+ ID4gQEAgLTg2MCwxNyArOTA4LDEyIEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1 Y3QgbXVzYiAqbXVzYiwgdTggZXBudW0sCj4gPiA+ID4gIAo+ID4gPiA+ICAJLyogSU4vcmVjZWl2 ZSAqLwo+ID4gPiA+ICAJfSBlbHNlIHsKPiA+ID4gPiAtCQl1MTYJY3NyOwo+ID4gPiA+ICsJCXUx Ngljc3IgPSAwOwo+ID4gPiA+ICAKPiA+ID4gPiAgCQlpZiAoaHdfZXAtPnJ4X3JlaW5pdCkgewo+ ID4gPiA+ICAJCQltdXNiX3J4X3JlaW5pdChtdXNiLCBxaCwgZXBudW0pOwo+ID4gPiA+ICsJCQlj c3IgfD0gbXVzYl9zZXRfdG9nZ2xlKHFoLCAhaXNfb3V0LCB1cmIpOwo+ID4gPiA+ICAKPiA+ID4g PiAtCQkJLyogaW5pdCBuZXcgc3RhdGU6IHRvZ2dsZSBhbmQgTllFVCwgbWF5YmUgRE1BIGxhdGVy ICovCj4gPiA+ID4gLQkJCWlmICh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDAp KQo+ID4gPiA+IC0JCQkJY3NyID0gTVVTQl9SWENTUl9IX1dSX0RBVEFUT0dHTEUKPiA+ID4gPiAt CQkJCQl8IE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gPiA+IC0JCQllbHNlCj4gPiA+ID4g LQkJCQljc3IgPSAwOwo+ID4gPiA+ICAJCQlpZiAocWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hG RVJfSU5UKQo+ID4gPiA+ICAJCQkJY3NyIHw9IE1VU0JfUlhDU1JfRElTTllFVDsKPiA+ID4gPiAg Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggYi9kcml2 ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCj4gPiA+ID4gaW5kZXggNWNkNzI2NC4uZmZiZTI2NyAx MDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCj4gPiA+ID4g KysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAo+ID4gPiA+IEBAIC0yNzMsNiArMjcz LDEyIEBACj4gPiA+ID4gICNkZWZpbmUgTVVTQl9SWEhVQkFERFIJCTB4MDYKPiA+ID4gPiAgI2Rl ZmluZSBNVVNCX1JYSFVCUE9SVAkJMHgwNwo+ID4gPiA+ICAKPiA+ID4gPiArLyogTWVkaWFUZWsg Y29udHJvbGxlciB0b2dnbGUgZW5hYmxlIGFuZCBzdGF0dXMgcmVnICovCj4gPiA+ID4gKyNkZWZp bmUgTVVTQl9SWFRPRwkJMHg4MAo+ID4gPiA+ICsjZGVmaW5lIE1VU0JfUlhUT0dFTgkJMHg4Mgo+ ID4gPiA+ICsjZGVmaW5lIE1VU0JfVFhUT0cJCTB4ODQKPiA+ID4gPiArI2RlZmluZSBNVVNCX1RY VE9HRU4JCTB4ODYKPiA+ID4gCj4gPiA+IEFnYWluLCB0aGVzZSBvZmZzZXRzIGFyZSBmb3IgZGlm ZmVyZW50IHJlZ2lzdGVycyBpbiB0aGUgTVVTQiB2ZXJzaW9uIEkKPiA+ID4gaGF2ZSwgcGxlYXNl IGxldCBtZSBrbm93IGlmIHlvdSBoYXZlIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBNVVNCIElQ Lgo+ID4gCj4gPiBTb3JyeSwgdGhlc2UgYXJlIE1lZGlhVGVrIGNvbnRyb2xsZXIgcHJpdmF0ZSBy ZWdpc3RlcnMgdXNlZCBmb3IgY29udHJvbAo+ID4gdG9nZ2xlLgo+IAo+IE9rYXkuIE9uY2UgdGhl IHBsYXRmb3JtIGdldC9zZXRfdG9nZ2xlKCkgYXJlIGltcGxlbWVudGVkLCB0aG9zZQo+IHJlZ2lz dGVycyBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgbXRrIGdsdWUgZHJpdmVyIGluc3RlYWQgb2YgaGVy ZS4KCk9LLgoKPiBSZWdhcmRzLAo+IC1CaW4uCg==