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: [usb-next,v10,3/8] usb: core: add a wrapper for the USB PHYs on the HCD From: Kishon Vijay Abraham I Message-Id: Date: Tue, 20 Mar 2018 16:57:03 +0530 To: Martin Blumenstingl , Roger Quadros , Chunfeng Yun Cc: linux-usb@vger.kernel.org, mathias.nyman@intel.com, arnd@arndb.de, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com, linux-omap@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, jonathanh@nvidia.com, thierry.reding@gmail.com, stern@rowland.harvard.edu, linux@prisktech.co.nz, Peter.Chen@nxp.com, matthias.bgg@gmail.com, mark.rutland@arm.com, robh+dt@kernel.org, Neil Armstrong , linux-amlogic@lists.infradead.org, yixun.lan@amlogic.com, Keerthy , "Gerlach, Dave" List-ID: SGksCgpPbiBNb25kYXkgMTkgTWFyY2ggMjAxOCAwOTo0MiBQTSwgTWFydGluIEJsdW1lbnN0aW5n bCB3cm90ZToKPiBIaSBSb2dlciwKPiAKPiBPbiBNb24sIE1hciAxOSwgMjAxOCBhdCA5OjQ5IEFN LCBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPiB3cm90ZToKPj4gSGksCj4+Cj4+IE9uIDE5 LzAzLzE4IDAwOjI5LCBNYXJ0aW4gQmx1bWVuc3RpbmdsIHdyb3RlOgo+Pj4gSGkgUm9nZXIsCj4+ Pgo+Pj4gT24gRnJpLCBNYXIgMTYsIDIwMTggYXQgMzozMiBQTSwgUm9nZXIgUXVhZHJvcyA8cm9n ZXJxQHRpLmNvbT4gd3JvdGU6Cj4+Pj4gK3NvbWUgVEkgZm9sa3MKPj4+Pgo+Pj4+IEhpIE1hcnRp biwKPj4+Pgo+Pj4+IE9uIDE4LzAyLzE4IDIwOjQ0LCBNYXJ0aW4gQmx1bWVuc3RpbmdsIHdyb3Rl Ogo+Pj4+PiBNYW55IFNvQyBwbGF0Zm9ybXMgaGF2ZSBzZXBhcmF0ZSBkZXZpY2VzIGZvciB0aGUg VVNCIFBIWSB3aGljaCBhcmUKPj4+Pj4gcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBnZW5lcmljIFBI WSBmcmFtZXdvcmsuIFRoZXNlIFBIWXMgaGF2ZSB0byBiZQo+Pj4+PiBlbmFibGVkIHRvIG1ha2Ug dGhlIFVTQiBjb250cm9sbGVyIGFjdHVhbGx5IHdvcmsuIFRoZXkgYWxzbyBoYXZlIHRvIGJlCj4+ Pj4+IGRpc2FibGVkIGFnYWluIG9uIHNodXRkb3duL3N1c3BlbmQuCj4+Pj4+Cj4+Pj4+IEN1cnJl bnRseSAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcgSENJIHBsYXRmb3JtIGRyaXZlcnMgYXJlIHVz aW5nIGN1c3RvbQo+Pj4+PiBjb2RlIHRvIG9idGFpbiBhbGwgUEhZcyB2aWEgZGV2aWNldHJlZSBm b3IgdGhlIHJvb3RodWIvY29udHJvbGxlciBhbmQKPj4+Pj4gZGlzYWJsZS9lbmFibGUgdGhlbSB3 aGVuIHJlcXVpcmVkOgo+Pj4+PiAtIGVoY2ktcGxhdGZvcm0uYyBoYXMgZWhjaV9wbGF0Zm9ybV9w b3dlcl97b24sb2ZmfQo+Pj4+PiAtIHhoY2ktbXRrLmMgaGFzIHhoY2lfbXRrX3BoeV97aW5pdCxl eGl0LHBvd2VyX29uLHBvd2VyX29mZn0KPj4+Pj4gLSBvaGNpLXBsYXRmb3JtLmMgaGFzIG9oY2lf cGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPj4+Pj4KPj4+Pj4gV2l0aCB0aGlzIG5ldyB3cmFwcGVy IHRoZSBVU0IgUEhZcyBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGluIHRoZQo+Pj4+PiBVU0Ig Y29udHJvbGxlcidzIGRldmljZXRyZWUgbm9kZSAoanVzdCBsaWtlIG9uIHRoZSBkcml2ZXJzIGxp c3RlZAo+Pj4+PiBhYm92ZSkuIFRoaXMgYWxsb3dzIFNvQ3MgbGlrZSB0aGUgQW1sb2dpYyBNZXNv biBHWEwgZmFtaWx5IHRvIG9wZXJhdGUKPj4+Pj4gY29ycmVjdGx5IG9uY2UgdGhpcyBpcyB3aXJl ZCB1cCBjb3JyZWN0bHkuIFRoZXNlIFNvQ3MgdXNlIGEgZHdjMwo+Pj4+PiBjb250cm9sbGVyIGFu ZCByZXF1aXJlIGFsbCBVU0IgUEhZcyB0byBiZSBpbml0aWFsaXplZCAoaWYgb25lIG9mIHRoZSBV U0IKPj4+Pj4gUEhZcyBpdCBub3QgaW5pdGlhbGl6ZWQgdGhlbiBub25lIG9mIFVTQiBwb3J0IHdv cmtzIGF0IGFsbCkuCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1hcnRpbiBCbHVtZW5zdGlu Z2wgPG1hcnRpbi5ibHVtZW5zdGluZ2xAZ29vZ2xlbWFpbC5jb20+Cj4+Pj4+IFRlc3RlZC1ieTog WWl4dW4gTGFuIDx5aXh1bi5sYW5AYW1sb2dpYy5jb20+Cj4+Pj4+IENjOiBOZWlsIEFybXN0cm9u ZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Cj4+Pj4+IENjOiBDaHVuZmVuZyBZdW4gPGNodW5m ZW5nLnl1bkBtZWRpYXRlay5jb20+Cj4+Pj4KPj4+PiBUaGlzIHBhdGNoIGlzIGJyZWFraW5nIGxv dyBwb3dlciBjYXNlcyBvbiBUSSBTb0NzIHdoZW4gVVNCIGlzIGluIGhvc3QgbW9kZS4KPj4+PiBJ J2xsIGV4cGxhaW4gd2h5IGJlbG93Lgo+Pj4gYmFzZWQgb24geW91ciBleHBsYW5hdGlvbiBhbmQg cmVhZGluZyB0aGUgVEkgUEhZIGRyaXZlcnMgSSBhbSBhc3N1bWluZwo+Pj4gdGhhdCB0aGUgYWZm ZWN0ZWQgU29DcyBhcmUgdXNpbmcgdGhlICJwaHktb21hcC11c2IyIiBkcml2ZXIKPj4+Cj4+IHll cyBhbmQgcGh5LXRpLXBpcGUzIGFzIHdlbGwgaS5lLiAidGkscGh5LXVzYjMiIGFuZCAidGksb21h cC11c2IzIgo+IEkgbWlzc2VkIHRoYXQsIHRoYW5rcwo+IAo+Pj4+PiAtLS0KPj4+Pj4gIGRyaXZl cnMvdXNiL2NvcmUvTWFrZWZpbGUgfCAgIDIgKy0KPj4+Pj4gIGRyaXZlcnMvdXNiL2NvcmUvcGh5 LmMgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+Pj4+PiAgZHJpdmVycy91c2IvY29yZS9waHkuaCAgICB8ICAgNyArKwo+Pj4+PiAgMyBmaWxl cyBjaGFuZ2VkLCAxNjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Pj4+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPj4+Pj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3VzYi9jb3JlL3BoeS5oCj4+Pj4+Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQo+Pj4+PiBp bmRleCA5MmM5Y2VmYjQzMTcuLjE4ZTg3NGIwNDQxZSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVy cy91c2IvY29yZS9NYWtlZmlsZQo+Pj4+PiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxl Cj4+Pj4+IEBAIC02LDcgKzYsNyBAQAo+Pj4+PiAgdXNiY29yZS15IDo9IHVzYi5vIGh1Yi5vIGhj ZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIubwo+Pj4+PiAgdXNiY29yZS15ICs9IGNvbmZpZy5v IGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm8KPj4+Pj4gIHVzYmNvcmUteSArPSBk ZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm8KPj4+Pj4gLXVzYmNv cmUteSArPSBwb3J0Lm8KPj4+Pj4gK3VzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8KPj4+Pj4KPj4+ Pj4gIHVzYmNvcmUtJChDT05GSUdfT0YpICAgICAgICAgKz0gb2Yubwo+Pj4+PiAgdXNiY29yZS0k KENPTkZJR19VU0JfUENJKSAgICAgICAgICAgICs9IGhjZC1wY2kubwo+Pj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvY29yZS9waHkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPj4+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wOWI3YzQzYzBl YTQKPj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+PiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5j Cj4+Pj4+IEBAIC0wLDAgKzEsMTU4IEBACj4+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCsKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBBIHdyYXBwZXIgZm9yIG11bHRpcGxlIFBI WXMgd2hpY2ggcGFzc2VzIGFsbCBwaHlfKiBmdW5jdGlvbiBjYWxscyB0bwo+Pj4+PiArICogbXVs dGlwbGUgKGFjdHVhbCkgUEhZIGRldmljZXMuIFRoaXMgaXMgY29tZXMgaGFuZHkgd2hlbiBpbml0 aWFsaXppbmcKPj4+Pj4gKyAqIGFsbCBQSFlzIG9uIGEgSENEIGFuZCB0byBrZWVwIHRoZW0gYWxs IGluIHRoZSBzYW1lIHN0YXRlLgo+Pj4+PiArICoKPj4+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAx OCBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29t Pgo+Pj4+PiArICovCj4+Pj4+ICsKPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcGh5L3Bo eS5oPgo+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+Pj4+ICsKPj4+Pj4gKyNpbmNsdWRl ICJwaHkuaCIKPj4+Pj4gKwo+Pj4+PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YiB7Cj4+Pj4+ICsg ICAgIHN0cnVjdCBwaHkgICAgICAgICAgICAgICpwaHk7Cj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0 X2hlYWQgICAgICAgIGxpc3Q7Cj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgc3RydWN0 IHVzYl9waHlfcm9vdGh1YiAqdXNiX3BoeV9yb290aHViX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRl dikKPj4+Pj4gK3sKPj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9l bnRyeTsKPj4+Pj4gKwo+Pj4+PiArICAgICByb290aHViX2VudHJ5ID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpyb290aHViX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Cj4+Pj4+ICsgICAgIGlmICgh cm9vdGh1Yl9lbnRyeSkKPj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPj4+Pj4gKwo+Pj4+PiArICAgICBJTklUX0xJU1RfSEVBRCgmcm9vdGh1Yl9lbnRyeS0+bGlz dCk7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgcmV0dXJuIHJvb3RodWJfZW50cnk7Cj4+Pj4+ICt9Cj4+ Pj4+ICsKPj4+Pj4gK3N0YXRpYyBpbnQgdXNiX3BoeV9yb290aHViX2FkZF9waHkoc3RydWN0IGRl dmljZSAqZGV2LCBpbnQgaW5kZXgsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4+Pj4+ICt7Cj4+Pj4+ICsgICAgIHN0cnVjdCB1 c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4+Pj4+ICsgICAgIHN0cnVjdCBwaHkgKnBo eSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaW5kZXgpOwo+ Pj4+PiArCj4+Pj4+ICsgICAgIGlmIChJU19FUlJfT1JfTlVMTChwaHkpKSB7Cj4+Pj4+ICsgICAg ICAgICAgICAgaWYgKCFwaHkgfHwgUFRSX0VSUihwaHkpID09IC1FTk9ERVYpCj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4gKyAgICAgICAgICAgICBlbHNlCj4+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwaHkpOwo+Pj4+PiArICAgICB9 Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgcm9vdGh1Yl9lbnRyeSA9IHVzYl9waHlfcm9vdGh1Yl9hbGxv YyhkZXYpOwo+Pj4+PiArICAgICBpZiAoSVNfRVJSKHJvb3RodWJfZW50cnkpKQo+Pj4+PiArICAg ICAgICAgICAgIHJldHVybiBQVFJfRVJSKHJvb3RodWJfZW50cnkpOwo+Pj4+PiArCj4+Pj4+ICsg ICAgIHJvb3RodWJfZW50cnktPnBoeSA9IHBoeTsKPj4+Pj4gKwo+Pj4+PiArICAgICBsaXN0X2Fk ZF90YWlsKCZyb290aHViX2VudHJ5LT5saXN0LCBsaXN0KTsKPj4+Pj4gKwo+Pj4+PiArICAgICBy ZXR1cm4gMDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YiAq dXNiX3BoeV9yb290aHViX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+PiArewo+Pj4+PiAr ICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1YjsKPj4+Pj4gKyAgICAgc3Ry dWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+Pj4gKyAgICAgc3RydWN0IGxp c3RfaGVhZCAqaGVhZDsKPj4+Pj4gKyAgICAgaW50IGksIG51bV9waHlzLCBlcnI7Cj4+Pj4+ICsK Pj4+Pj4gKyAgICAgbnVtX3BoeXMgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhkZXYtPm9m X25vZGUsICJwaHlzIiwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiI3BoeS1jZWxscyIpOwo+Pj4+PiArICAgICBpZiAobnVtX3BoeXMgPD0gMCkKPj4+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPj4+Pj4gKwo+Pj4+PiArICAgICBwaHlfcm9v dGh1YiA9IHVzYl9waHlfcm9vdGh1Yl9hbGxvYyhkZXYpOwo+Pj4+PiArICAgICBpZiAoSVNfRVJS KHBoeV9yb290aHViKSkKPj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcGh5X3Jvb3RodWI7Cj4+ Pj4+ICsKPj4+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8IG51bV9waHlzOyBpKyspIHsKPj4+Pj4g KyAgICAgICAgICAgICBlcnIgPSB1c2JfcGh5X3Jvb3RodWJfYWRkX3BoeShkZXYsIGksICZwaHlf cm9vdGh1Yi0+bGlzdCk7Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPj4+Pj4gKyAgICAgfQo+Pj4+PiArCj4+Pj4+ ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4+Pj4+ICsgICAg ICAgICAgICAgZXJyID0gcGh5X2luaXQocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pgo+Pj4+IFRo ZSBwaHlfaW5pdCgpIGZ1bmN0aW9uIGFjdHVhbGx5IGVuYWJsZXMgdGhlIFBIWSBjbG9ja3MuCj4+ Pj4gSXQgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSB1c2JfcGh5X3Jvb3RodWJfZXhpdCgpIHJvdXRp bmUganVzdCBiZWZvcmUgY2FsbGluZyBwaHlfcG93ZXJfb24oKS4KPj4+IGRvIHlvdSBtZWFuIHRo YXQgcGh5X2luaXQgc2hvdWxkIGJlIG1vdmVkIHRvIHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbgo+ Pj4gKGp1c3QgYmVmb3JlIHBoeV9wb3dlcl9vbiBpcyBjYWxsZWQgd2l0aGluIHVzYl9waHlfcm9v dGh1Yl9wb3dlcl9vbik/Cj4+Pgo+Pgo+PiBZZXMuCj4+Cj4+PiBhbiBlYXJsaWVyIHZlcnNpb24g b2YgbXkgcGF0Y2ggZGlkIGV4YWN0bHkgdGhpcywgYnV0IGl0IGNhdXNlZAo+Pj4gcHJvYmxlbXMg ZHVyaW5nIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUgb24gTWVkaWF0ZWsgZGV2aWNlcwo+Pj4gQ2h1 bmZlbmcgWXVuIHJlcG9ydGVkIHRoYXQgaXNzdWUgaGVyZSBbMF0sIHF1b3RlIGZyb20gdGhhdCBt YWlsIGZvcgo+Pj4gZWFzaWVyIHJlYWRpbmc6Cj4+PiAiSW4gb3JkZXIgdG8ga2VlcCBsaW5rIHN0 YXRlIG9uIG10ODE3Mywgd2UganVzdCBwb3dlciBvZmYgYWxsIHBoeXMobm90Cj4+PiBleGl0KSB3 aGVuIHN5c3RlbSBlbnRlciBzdXNwZW5kLCB0aGVuIHBvd2VyIG9uIHRoZW0gYWdhaW4gKG5lZWRu J3QKPj4+IGluaXQsIG90aGVyd2lzZSBkZXZpY2Ugd2lsbCBiZSBkaXNjb25uZWN0ZWQpIHdoZW4g c3lzdGVtIHJlc3VtZSwgdGhpcwo+Pj4gY2FuIGF2b2lkIHJlLWVudW1lcmF0aW5nIGRldmljZS4i Cj4+Pgo+Pj4+PiArICAgICAgICAgICAgIGlmIChlcnIpCj4+Pj4+ICsgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycl9leGl0X3BoeXM7Cj4+Pj4+ICsgICAgIH0KPj4+Pj4gKwo+Pj4+PiArICAg ICByZXR1cm4gcGh5X3Jvb3RodWI7Cj4+Pj4+ICsKPj4+Pj4gK2Vycl9leGl0X3BoeXM6Cj4+Pj4+ ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShyb290aHViX2VudHJ5 LCBoZWFkLCBsaXN0KQo+Pj4+PiArICAgICAgICAgICAgIHBoeV9leGl0KHJvb3RodWJfZW50cnkt PnBoeSk7Cj4+Pj4+ICsKPj4+Pj4gK2Vycl9vdXQ6Cj4+Pj4+ICsgICAgIHJldHVybiBFUlJfUFRS KGVycik7Cj4+Pj4+ICt9Cj4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X3Jvb3RodWJf aW5pdCk7Cj4+Pj4+ICsKPj4+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfZXhpdChzdHJ1Y3QgdXNi X3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPj4+Pj4gK3sKPj4+Pj4gKyAgICAgc3RydWN0IHVz Yl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+Pj4gKyAgICAgc3RydWN0IGxpc3RfaGVh ZCAqaGVhZDsKPj4+Pj4gKyAgICAgaW50IGVyciwgcmV0ID0gMDsKPj4+Pj4gKwo+Pj4+PiArICAg ICBpZiAoIXBoeV9yb290aHViKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+PiAr Cj4+Pj4+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4+Pj4+ICsKPj4+Pj4gKyAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4+Pj4+ ICsgICAgICAgICAgICAgZXJyID0gcGh5X2V4aXQocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pj4g KyAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0g cmV0Owo+Pj4+PiArICAgICB9Cj4+Pj4KPj4+PiBwaHlfZXhpdCgpIHNob3VsZCBiZSBtb3ZlZCB0 byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJvZmYoKSBqdXN0IGFmdGVyIGNhbGxpbmcgcGh5X3Bvd2Vy X29mZigpLgo+Pj4gaWYgSSB1bmRlcnN0b29kIENodW5mZW5nIFl1biBjb3JyZWN0bHkgdGhpcyB3 aWxsIHJlcXVpcmUKPj4+IHJlLWVudW1lcmF0aW9uIG9mIHRoZSBVU0IgZGV2aWNlcyBhZnRlciBh IHN1c3BlbmQvcmVzdW1lIGN5Y2xlIG9uCj4+PiBNZWRpYXRlayBTb0NzCj4+Pgo+Pgo+PiBPSy4g SSBzdXBwb3NlIHRoYXQgdGhlcmUgYXJlIDIgY2FzZXMKPj4gMSkgTWVkaWF0ZWsncyBjYXNlOiBV U0IgY29udHJvbGxlciBjb250ZXh0IHJldGFpbmVkIGFjcm9zcyBzdXNwZW5kL3Jlc3VtZS4KPj4g UmVtb3RlIHdha2V1cCBwcm9iYWJseSByZXF1aXJlZC4KPj4gTm8gcmUtZW51bWVyYXRpb24gcHJl ZmVycmVkIGFmdGVyIHJlc3VtZS4gcGh5X2V4aXQoKS9waHlfaW5pdCgpIG11c3Qgbm90IGJlIGNh bGxlZAo+PiBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgdG8ga2VlcCBQSFkgbGluayBhY3RpdmUuCj4g RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9tZWRpYXRlayxtdHUzLnR4dCBp bmRlZWQgc2hvd3MKPiB0aGF0IHRoZSBwYXJlbnQgb2YgdGhlIFVTQiBjb250cm9sbGVyIGNhbiBi ZSBtYXJrZWQgYXMgIndha2V1cC1zb3VyY2UiCj4gCj4+IDIpIFRJJ3MgY2FzZTogbG93IHBvd2Vy IGltcG9ydGFudDogVVNCIGNvbnRleHQgaXMgbG9zdCwgT0sgdG8gcmUtZW51bWVyYXRlLgo+PiBw aHlfZXhpdCgpL3BoeV9pbml0KCkgbXVzdCBiZSBjYWxsZWQgZHVyaW5nIHN1c3BlbmQvcmVzdW1l Lgo+IEFDSwo+IAo+Pj4+IFdpdGggdGhhdCB0aGVyZSBpcyBub3RoaW5nIGVsc2UgYmVpbmcgZG9u ZSBoZXJlLiBTaG91bGRuJ3Qgd2UgYmUgZG9pbmcgdGhlIGVxdWl2YWxlbnQgb2YKPj4+PiB1c2Jf cGh5X3Jvb3RodWJfZGVsX3BoeSgpIGFuZCB1c2JfcGh5X3Jvb3RodWJfZnJlZSgpIGhlcmU/Cj4+ Pj4KPj4+Pj4gKwo+Pj4+PiArICAgICByZXR1cm4gcmV0Owo+Pj4+PiArfQo+Pj4+PiArRVhQT1JU X1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX2V4aXQpOwo+Pj4+PiArCj4+Pj4+ICtpbnQgdXNi X3BoeV9yb290aHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290aHVi KQo+Pj4+PiArewo+Pj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2Vu dHJ5Owo+Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwo+Pj4+PiArICAgICBpbnQg ZXJyOwo+Pj4+PiArCj4+Pj4+ICsgICAgIGlmICghcGh5X3Jvb3RodWIpCj4+Pj4+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgaGVhZCA9ICZwaHlfcm9vdGh1Yi0+ bGlzdDsKPj4+Pj4gKwo+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJvb3RodWJfZW50 cnksIGhlYWQsIGxpc3QpIHsKPj4+Pj4gKyAgICAgICAgICAgICBlcnIgPSBwaHlfcG93ZXJfb24o cm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4+PiAr ICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfb3V0Owo+Pj4+PiArICAgICB9Cj4+Pj4+ICsK Pj4+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+Pj4+ICsKPj4+Pj4gK2Vycl9vdXQ6Cj4+Pj4+ICsgICAg IGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShyb290aHViX2VudHJ5LCBoZWFk LCBsaXN0KQo+Pj4+PiArICAgICAgICAgICAgIHBoeV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+ cGh5KTsKPj4+Pj4gKwo+Pj4+PiArICAgICByZXR1cm4gZXJyOwo+Pj4+PiArfQo+Pj4+PiArRVhQ T1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX3Bvd2VyX29uKTsKPj4+Pj4gKwo+Pj4+PiAr dm9pZCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBo eV9yb290aHViKQo+Pj4+PiArewo+Pj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpy b290aHViX2VudHJ5Owo+Pj4+PiArCj4+Pj4+ICsgICAgIGlmICghcGh5X3Jvb3RodWIpCj4+Pj4+ ICsgICAgICAgICAgICAgcmV0dXJuOwo+Pj4+PiArCj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hf ZW50cnlfcmV2ZXJzZShyb290aHViX2VudHJ5LCAmcGh5X3Jvb3RodWItPmxpc3QsIGxpc3QpCj4+ Pj4+ICsgICAgICAgICAgICAgcGh5X3Bvd2VyX29mZihyb290aHViX2VudHJ5LT5waHkpOwo+Pj4+ Cj4+Pj4gTm90IGRvaW5nIHRoZSBwaHlfZXhpdCgpIGhlcmUgbGVhdmVzIHRoZSBjbG9ja3MgZW5h YmxlZCBvbiBvdXIgU29DIGFuZAo+Pj4+IHdlJ3JlIG5vIGxvbmdlciBhYmxlIHRvIHJlYWNoIGxv dyBwb3dlciBzdGF0ZXMgb24gc3lzdGVtIHN1c3BlbmQuCj4+PiBJJ20gbm90IHN1cmUgd2hlcmUg dGhpcyBwcm9ibGVtIHNob3VsZCBiZSBzb2x2ZWQ6Cj4+PiAtIHNldCBza2lwX3BoeV9pbml0aWFs aXphdGlvbiBpbiBzdHJ1Y3QgdXNiX2hjZCB0byAxIGZvciB0aGUgYWZmZWN0ZWQKPj4+IFRJIHBs YXRmb3Jtcwo+Pgo+PiBNYW55IFRJIHBsYXRmb3JtcyBhcmUgYWZmZWN0ZWQsIG9tYXA1KiwgZHJh NyosIGFtNDMqCj4+Cj4+PiAtIGZpeCB0aGlzIGluIHRoZSB1c2JfcGh5X3Jvb3RodWIgY29kZQo+ Pgo+PiBJJ2Qgdm90ZSBmb3IgZml4aW5nIGl0IGluIHRoZSB1c2JfcGh5X3Jvb3RodWIgY29kZS4g SG93Pwo+PiBIb3cgYWJvdXQgdXNpbmcgdGhlIGRldmljZV9jYW5fd2FrZXVwKCkgdG8gZGVjaWRl IGlmIHdlIHNob3VsZCBjYWxsIHBoeV9leGl0KCkvaW5pdCgpIG9yIG5vdD8KPj4gSWYgdGhlIFVT QiBkZXZpY2UgY2FuJ3Qgd2FrZXVwIHRoZSBzeXN0ZW0gdGhlcmUgaXMgbm8gcG9pbnQgaW4ga2Vl cGluZyBpdCBwb3dlcmVkL2Nsb2NrZWQgcmlnaHQ/Cj4gQENodW5mZW5nOiBjYW4geW91IGNvbmZp cm0gUm9nZXIncyBpZGVhIHRoYXQgd2UgY291bGQgY2FsbCBwaHlfZXhpdCBpZgo+IHRoZSBjb250 cm9sbGVyIGlzICpOT1QqIG1hcmtlZCBhcyAid2FrZXVwLXNvdXJjZSI/Cj4gSSBhbSBhbHNvIG5v dCBzdXJlIGlmIGl0IHdvdWxkIHdvcmssIHNpbmNlIHRoZSAid2FrZXVwLXNvdXJjZSIKPiBwcm9w ZXJ0eSBpcyBkZWZpbmVkIG9uIHRoZSBVU0IgY29udHJvbGxlcidzIHBhcmVudCBub2RlIGluIGNh c2Ugb2YgdGhlCj4gTWVkaWF0ZWsgTVRVMyAoTWVkaWF0ZWsgVVNCMy4wIERSRCkgY29udHJvbGxl cgo+IAo+Pj4gLSBmaXggdGhpcyBpbiB0aGUgUEhZIGRyaXZlcgo+Pgo+PiBUaGVyZSBpcyBub3Ro aW5nIHRvIGZpeCBpbiB0aGUgUEhZIGRyaXZlci4gSXQgaXMgZG9pbmcgd2hhdCBpdCBpcyBzdXBw b3NlZCB0byBkby4KPiBJIGFjdHVhbGx5IHdvbmRlciBpZiBwaHlfb3BzIHNob3VsZCBoYXZlIGV4 cGxpY2l0IHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6CgpOb3QgaW4gZmF2b3Igb2YgYWRkaW5nIGV4 cGxpY2l0IHN1c3BlbmQvcmVzdW1lIG9wcyBzaW5jZSBQTSBmcmFtZXdvcmsgYWxyZWFkeQpoYXMg dGhvc2UuIEkgdGhpbmsgd2Ugc2hvdWxkIGxldCBQSFkgZHJpdmVycyBtYW5hZ2Ugc3VzcGVuZC9y ZXN1bWUgb24gaXRzIG93bgooYWZ0ZXIgY3JlYXRpbmcgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiB0 aGUgY29udHJvbGxlciBkZXZpY2UgYW5kIFBIWSB1c2luZwpkZXZpY2VfbGlua19hZGQpLgoKVGhh bmtzCktpc2hvbgotLS0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxp bmUgInVuc3Vic2NyaWJlIGxpbnV4LXVzYiIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1h am9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3Zn ZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCg==