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: Roger Quadros Message-Id: <8812bba8-bd2e-85dd-9506-a2e856db4f14@ti.com> Date: Tue, 20 Mar 2018 12:55:56 +0200 To: Martin Blumenstingl , Chunfeng Yun , KISHON VIJAY ABRAHAM 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: T24gMTkvMDMvMTggMTg6MTIsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4gSGkgUm9nZXIs Cj4gCj4gT24gTW9uLCBNYXIgMTksIDIwMTggYXQgOTo0OSBBTSwgUm9nZXIgUXVhZHJvcyA8cm9n ZXJxQHRpLmNvbT4gd3JvdGU6Cj4+IEhpLAo+Pgo+PiBPbiAxOS8wMy8xOCAwMDoyOSwgTWFydGlu IEJsdW1lbnN0aW5nbCB3cm90ZToKPj4+IEhpIFJvZ2VyLAo+Pj4KPj4+IE9uIEZyaSwgTWFyIDE2 LCAyMDE4IGF0IDM6MzIgUE0sIFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+IHdyb3RlOgo+ Pj4+ICtzb21lIFRJIGZvbGtzCj4+Pj4KPj4+PiBIaSBNYXJ0aW4sCj4+Pj4KPj4+PiBPbiAxOC8w Mi8xOCAyMDo0NCwgTWFydGluIEJsdW1lbnN0aW5nbCB3cm90ZToKPj4+Pj4gTWFueSBTb0MgcGxh dGZvcm1zIGhhdmUgc2VwYXJhdGUgZGV2aWNlcyBmb3IgdGhlIFVTQiBQSFkgd2hpY2ggYXJlCj4+ Pj4+IHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBQSFkgZnJhbWV3b3JrLiBUaGVzZSBQ SFlzIGhhdmUgdG8gYmUKPj4+Pj4gZW5hYmxlZCB0byBtYWtlIHRoZSBVU0IgY29udHJvbGxlciBh Y3R1YWxseSB3b3JrLiBUaGV5IGFsc28gaGF2ZSB0byBiZQo+Pj4+PiBkaXNhYmxlZCBhZ2FpbiBv biBzaHV0ZG93bi9zdXNwZW5kLgo+Pj4+Pgo+Pj4+PiBDdXJyZW50bHkgKGF0IGxlYXN0KSB0aGUg Zm9sbG93aW5nIEhDSSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSB1c2luZyBjdXN0b20KPj4+Pj4gY29k ZSB0byBvYnRhaW4gYWxsIFBIWXMgdmlhIGRldmljZXRyZWUgZm9yIHRoZSByb290aHViL2NvbnRy b2xsZXIgYW5kCj4+Pj4+IGRpc2FibGUvZW5hYmxlIHRoZW0gd2hlbiByZXF1aXJlZDoKPj4+Pj4g LSBlaGNpLXBsYXRmb3JtLmMgaGFzIGVoY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPj4+Pj4g LSB4aGNpLW10ay5jIGhhcyB4aGNpX210a19waHlfe2luaXQsZXhpdCxwb3dlcl9vbixwb3dlcl9v ZmZ9Cj4+Pj4+IC0gb2hjaS1wbGF0Zm9ybS5jIGhhcyBvaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixv ZmZ9Cj4+Pj4+Cj4+Pj4+IFdpdGggdGhpcyBuZXcgd3JhcHBlciB0aGUgVVNCIFBIWXMgY2FuIGJl IHNwZWNpZmllZCBkaXJlY3RseSBpbiB0aGUKPj4+Pj4gVVNCIGNvbnRyb2xsZXIncyBkZXZpY2V0 cmVlIG5vZGUgKGp1c3QgbGlrZSBvbiB0aGUgZHJpdmVycyBsaXN0ZWQKPj4+Pj4gYWJvdmUpLiBU aGlzIGFsbG93cyBTb0NzIGxpa2UgdGhlIEFtbG9naWMgTWVzb24gR1hMIGZhbWlseSB0byBvcGVy YXRlCj4+Pj4+IGNvcnJlY3RseSBvbmNlIHRoaXMgaXMgd2lyZWQgdXAgY29ycmVjdGx5LiBUaGVz ZSBTb0NzIHVzZSBhIGR3YzMKPj4+Pj4gY29udHJvbGxlciBhbmQgcmVxdWlyZSBhbGwgVVNCIFBI WXMgdG8gYmUgaW5pdGlhbGl6ZWQgKGlmIG9uZSBvZiB0aGUgVVNCCj4+Pj4+IFBIWXMgaXQgbm90 IGluaXRpYWxpemVkIHRoZW4gbm9uZSBvZiBVU0IgcG9ydCB3b3JrcyBhdCBhbGwpLgo+Pj4+Pgo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3Rp bmdsQGdvb2dsZW1haWwuY29tPgo+Pj4+PiBUZXN0ZWQtYnk6IFlpeHVuIExhbiA8eWl4dW4ubGFu QGFtbG9naWMuY29tPgo+Pj4+PiBDYzogTmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGli cmUuY29tPgo+Pj4+PiBDYzogQ2h1bmZlbmcgWXVuIDxjaHVuZmVuZy55dW5AbWVkaWF0ZWsuY29t Pgo+Pj4+Cj4+Pj4gVGhpcyBwYXRjaCBpcyBicmVha2luZyBsb3cgcG93ZXIgY2FzZXMgb24gVEkg U29DcyB3aGVuIFVTQiBpcyBpbiBob3N0IG1vZGUuCj4+Pj4gSSdsbCBleHBsYWluIHdoeSBiZWxv dy4KPj4+IGJhc2VkIG9uIHlvdXIgZXhwbGFuYXRpb24gYW5kIHJlYWRpbmcgdGhlIFRJIFBIWSBk cml2ZXJzIEkgYW0gYXNzdW1pbmcKPj4+IHRoYXQgdGhlIGFmZmVjdGVkIFNvQ3MgYXJlIHVzaW5n IHRoZSAicGh5LW9tYXAtdXNiMiIgZHJpdmVyCj4+Pgo+PiB5ZXMgYW5kIHBoeS10aS1waXBlMyBh cyB3ZWxsIGkuZS4gInRpLHBoeS11c2IzIiBhbmQgInRpLG9tYXAtdXNiMyIKPiBJIG1pc3NlZCB0 aGF0LCB0aGFua3MKPiAKPj4+Pj4gLS0tCj4+Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxl IHwgICAyICstCj4+Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL3BoeS5jICAgIHwgMTU4ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gIGRyaXZlcnMvdXNi L2NvcmUvcGh5LmggICAgfCAgIDcgKysKPj4+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgMTY2IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3VzYi9jb3JlL3BoeS5jCj4+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY29y ZS9waHkuaAo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9NYWtlZmls ZSBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKPj4+Pj4gaW5kZXggOTJjOWNlZmI0MzE3Li4x OGU4NzRiMDQ0MWUgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUK Pj4+Pj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQo+Pj4+PiBAQCAtNiw3ICs2LDcg QEAKPj4+Pj4gIHVzYmNvcmUteSA6PSB1c2IubyBodWIubyBoY2QubyB1cmIubyBtZXNzYWdlLm8g ZHJpdmVyLm8KPj4+Pj4gIHVzYmNvcmUteSArPSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lz ZnMubyBlbmRwb2ludC5vCj4+Pj4+ICB1c2Jjb3JlLXkgKz0gZGV2aW8ubyBub3RpZnkubyBnZW5l cmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vCj4+Pj4+IC11c2Jjb3JlLXkgKz0gcG9ydC5vCj4+Pj4+ ICt1c2Jjb3JlLXkgKz0gcGh5Lm8gcG9ydC5vCj4+Pj4+Cj4+Pj4+ICB1c2Jjb3JlLSQoQ09ORklH X09GKSAgICAgICAgICs9IG9mLm8KPj4+Pj4gIHVzYmNvcmUtJChDT05GSUdfVVNCX1BDSSkgICAg ICAgICAgICArPSBoY2QtcGNpLm8KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUv cGh5LmMgYi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+Pj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDliN2M0M2MwZWE0Cj4+Pj4+IC0tLSAvZGV2L251 bGwKPj4+Pj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9waHkuYwo+Pj4+PiBAQCAtMCwwICsxLDE1 OCBAQAo+Pj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4+Pj4+ICsv Kgo+Pj4+PiArICogQSB3cmFwcGVyIGZvciBtdWx0aXBsZSBQSFlzIHdoaWNoIHBhc3NlcyBhbGwg cGh5XyogZnVuY3Rpb24gY2FsbHMgdG8KPj4+Pj4gKyAqIG11bHRpcGxlIChhY3R1YWwpIFBIWSBk ZXZpY2VzLiBUaGlzIGlzIGNvbWVzIGhhbmR5IHdoZW4gaW5pdGlhbGl6aW5nCj4+Pj4+ICsgKiBh bGwgUEhZcyBvbiBhIEhDRCBhbmQgdG8ga2VlcCB0aGVtIGFsbCBpbiB0aGUgc2FtZSBzdGF0ZS4K Pj4+Pj4gKyAqCj4+Pj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWFydGluIEJsdW1lbnN0aW5n bCA8bWFydGluLmJsdW1lbnN0aW5nbEBnb29nbGVtYWlsLmNvbT4KPj4+Pj4gKyAqLwo+Pj4+PiAr Cj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+Pj4+ICsjaW5jbHVkZSA8bGludXgv bGlzdC5oPgo+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPj4+Pj4gKyNpbmNsdWRl IDxsaW51eC9vZi5oPgo+Pj4+PiArCj4+Pj4+ICsjaW5jbHVkZSAicGh5LmgiCj4+Pj4+ICsKPj4+ Pj4gK3N0cnVjdCB1c2JfcGh5X3Jvb3RodWIgewo+Pj4+PiArICAgICBzdHJ1Y3QgcGh5ICAgICAg ICAgICAgICAqcGh5Owo+Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0Owo+ Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnVz Yl9waHlfcm9vdGh1Yl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+Pj4+ICt7Cj4+Pj4+ICsg ICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4+Pj4+ICsKPj4+Pj4g KyAgICAgcm9vdGh1Yl9lbnRyeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcm9vdGh1Yl9l bnRyeSksIEdGUF9LRVJORUwpOwo+Pj4+PiArICAgICBpZiAoIXJvb3RodWJfZW50cnkpCj4+Pj4+ ICsgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+Pj4+ICsKPj4+Pj4gKyAg ICAgSU5JVF9MSVNUX0hFQUQoJnJvb3RodWJfZW50cnktPmxpc3QpOwo+Pj4+PiArCj4+Pj4+ICsg ICAgIHJldHVybiByb290aHViX2VudHJ5Owo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMg aW50IHVzYl9waHlfcm9vdGh1Yl9hZGRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGluZGV4 LAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk ICpsaXN0KQo+Pj4+PiArewo+Pj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290 aHViX2VudHJ5Owo+Pj4+PiArICAgICBzdHJ1Y3QgcGh5ICpwaHkgPSBkZXZtX29mX3BoeV9nZXRf YnlfaW5kZXgoZGV2LCBkZXYtPm9mX25vZGUsIGluZGV4KTsKPj4+Pj4gKwo+Pj4+PiArICAgICBp ZiAoSVNfRVJSX09SX05VTEwocGh5KSkgewo+Pj4+PiArICAgICAgICAgICAgIGlmICghcGh5IHx8 IFBUUl9FUlIocGh5KSA9PSAtRU5PREVWKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIDA7Cj4+Pj4+ICsgICAgICAgICAgICAgZWxzZQo+Pj4+PiArICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIocGh5KTsKPj4+Pj4gKyAgICAgfQo+Pj4+PiArCj4+Pj4+ICsgICAg IHJvb3RodWJfZW50cnkgPSB1c2JfcGh5X3Jvb3RodWJfYWxsb2MoZGV2KTsKPj4+Pj4gKyAgICAg aWYgKElTX0VSUihyb290aHViX2VudHJ5KSkKPj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gUFRS X0VSUihyb290aHViX2VudHJ5KTsKPj4+Pj4gKwo+Pj4+PiArICAgICByb290aHViX2VudHJ5LT5w aHkgPSBwaHk7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgbGlzdF9hZGRfdGFpbCgmcm9vdGh1Yl9lbnRy eS0+bGlzdCwgbGlzdCk7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+Pj4+ICt9Cj4+ Pj4+ICsKPj4+Pj4gK3N0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9pbml0 KHN0cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4gK3sKPj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlf cm9vdGh1YiAqcGh5X3Jvb3RodWI7Cj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIg KnJvb3RodWJfZW50cnk7Cj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4+Pj4+ ICsgICAgIGludCBpLCBudW1fcGh5cywgZXJyOwo+Pj4+PiArCj4+Pj4+ICsgICAgIG51bV9waHlz ID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3MoZGV2LT5vZl9ub2RlLCAicGh5cyIsCj4+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNwaHktY2VsbHMi KTsKPj4+Pj4gKyAgICAgaWYgKG51bV9waHlzIDw9IDApCj4+Pj4+ICsgICAgICAgICAgICAgcmV0 dXJuIE5VTEw7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgcGh5X3Jvb3RodWIgPSB1c2JfcGh5X3Jvb3Ro dWJfYWxsb2MoZGV2KTsKPj4+Pj4gKyAgICAgaWYgKElTX0VSUihwaHlfcm9vdGh1YikpCj4+Pj4+ ICsgICAgICAgICAgICAgcmV0dXJuIHBoeV9yb290aHViOwo+Pj4+PiArCj4+Pj4+ICsgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fcGh5czsgaSsrKSB7Cj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0g dXNiX3BoeV9yb290aHViX2FkZF9waHkoZGV2LCBpLCAmcGh5X3Jvb3RodWItPmxpc3QpOwo+Pj4+ PiArICAgICAgICAgICAgIGlmIChlcnIpCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3Rv IGVycl9vdXQ7Cj4+Pj4+ICsgICAgIH0KPj4+Pj4gKwo+Pj4+PiArICAgICBoZWFkID0gJnBoeV9y b290aHViLT5saXN0Owo+Pj4+PiArCj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9v dGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+Pj4+PiArICAgICAgICAgICAgIGVyciA9IHBoeV9p bml0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Pj4KPj4+PiBUaGUgcGh5X2luaXQoKSBmdW5jdGlv biBhY3R1YWxseSBlbmFibGVzIHRoZSBQSFkgY2xvY2tzLgo+Pj4+IEl0IHNob3VsZCBiZSBtb3Zl ZCB0byB0aGUgdXNiX3BoeV9yb290aHViX2V4aXQoKSByb3V0aW5lIGp1c3QgYmVmb3JlIGNhbGxp bmcgcGh5X3Bvd2VyX29uKCkuCj4+PiBkbyB5b3UgbWVhbiB0aGF0IHBoeV9pbml0IHNob3VsZCBi ZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24KPj4+IChqdXN0IGJlZm9yZSBwaHlf cG93ZXJfb24gaXMgY2FsbGVkIHdpdGhpbiB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24pPwo+Pj4K Pj4KPj4gWWVzLgo+Pgo+Pj4gYW4gZWFybGllciB2ZXJzaW9uIG9mIG15IHBhdGNoIGRpZCBleGFj dGx5IHRoaXMsIGJ1dCBpdCBjYXVzZWQKPj4+IHByb2JsZW1zIGR1cmluZyBhIHN1c3BlbmQvcmVz dW1lIGN5Y2xlIG9uIE1lZGlhdGVrIGRldmljZXMKPj4+IENodW5mZW5nIFl1biByZXBvcnRlZCB0 aGF0IGlzc3VlIGhlcmUgWzBdLCBxdW90ZSBmcm9tIHRoYXQgbWFpbCBmb3IKPj4+IGVhc2llciBy ZWFkaW5nOgo+Pj4gIkluIG9yZGVyIHRvIGtlZXAgbGluayBzdGF0ZSBvbiBtdDgxNzMsIHdlIGp1 c3QgcG93ZXIgb2ZmIGFsbCBwaHlzKG5vdAo+Pj4gZXhpdCkgd2hlbiBzeXN0ZW0gZW50ZXIgc3Vz cGVuZCwgdGhlbiBwb3dlciBvbiB0aGVtIGFnYWluIChuZWVkbid0Cj4+PiBpbml0LCBvdGhlcndp c2UgZGV2aWNlIHdpbGwgYmUgZGlzY29ubmVjdGVkKSB3aGVuIHN5c3RlbSByZXN1bWUsIHRoaXMK Pj4+IGNhbiBhdm9pZCByZS1lbnVtZXJhdGluZyBkZXZpY2UuIgo+Pj4KPj4+Pj4gKyAgICAgICAg ICAgICBpZiAoZXJyKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfZXhpdF9w aHlzOwo+Pj4+PiArICAgICB9Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgcmV0dXJuIHBoeV9yb290aHVi Owo+Pj4+PiArCj4+Pj4+ICtlcnJfZXhpdF9waHlzOgo+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkKPj4+Pj4g KyAgICAgICAgICAgICBwaHlfZXhpdChyb290aHViX2VudHJ5LT5waHkpOwo+Pj4+PiArCj4+Pj4+ ICtlcnJfb3V0Ogo+Pj4+PiArICAgICByZXR1cm4gRVJSX1BUUihlcnIpOwo+Pj4+PiArfQo+Pj4+ PiArRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX2luaXQpOwo+Pj4+PiArCj4+Pj4+ ICtpbnQgdXNiX3BoeV9yb290aHViX2V4aXQoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jv b3RodWIpCj4+Pj4+ICt7Cj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3Ro dWJfZW50cnk7Cj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4+Pj4+ICsgICAg IGludCBlcnIsIHJldCA9IDA7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikK Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4gKwo+Pj4+PiArICAgICBoZWFkID0g JnBoeV9yb290aHViLT5saXN0Owo+Pj4+PiArCj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50 cnkocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+Pj4+PiArICAgICAgICAgICAgIGVyciA9 IHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVy cikKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldDsKPj4+Pj4gKyAgICAgfQo+ Pj4+Cj4+Pj4gcGh5X2V4aXQoKSBzaG91bGQgYmUgbW92ZWQgdG8gdXNiX3BoeV9yb290aHViX3Bv d2Vyb2ZmKCkganVzdCBhZnRlciBjYWxsaW5nIHBoeV9wb3dlcl9vZmYoKS4KPj4+IGlmIEkgdW5k ZXJzdG9vZCBDaHVuZmVuZyBZdW4gY29ycmVjdGx5IHRoaXMgd2lsbCByZXF1aXJlCj4+PiByZS1l bnVtZXJhdGlvbiBvZiB0aGUgVVNCIGRldmljZXMgYWZ0ZXIgYSBzdXNwZW5kL3Jlc3VtZSBjeWNs ZSBvbgo+Pj4gTWVkaWF0ZWsgU29Dcwo+Pj4KPj4KPj4gT0suIEkgc3VwcG9zZSB0aGF0IHRoZXJl IGFyZSAyIGNhc2VzCj4+IDEpIE1lZGlhdGVrJ3MgY2FzZTogVVNCIGNvbnRyb2xsZXIgY29udGV4 dCByZXRhaW5lZCBhY3Jvc3Mgc3VzcGVuZC9yZXN1bWUuCj4+IFJlbW90ZSB3YWtldXAgcHJvYmFi bHkgcmVxdWlyZWQuCj4+IE5vIHJlLWVudW1lcmF0aW9uIHByZWZlcnJlZCBhZnRlciByZXN1bWUu IHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IG5vdCBiZSBjYWxsZWQKPj4gZHVyaW5nIHN1c3Bl bmQvcmVzdW1lIHRvIGtlZXAgUEhZIGxpbmsgYWN0aXZlLgo+IERvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy91c2IvbWVkaWF0ZWssbXR1My50eHQgaW5kZWVkIHNob3dzCj4gdGhhdCB0 aGUgcGFyZW50IG9mIHRoZSBVU0IgY29udHJvbGxlciBjYW4gYmUgbWFya2VkIGFzICJ3YWtldXAt c291cmNlIgo+IAo+PiAyKSBUSSdzIGNhc2U6IGxvdyBwb3dlciBpbXBvcnRhbnQ6IFVTQiBjb250 ZXh0IGlzIGxvc3QsIE9LIHRvIHJlLWVudW1lcmF0ZS4KPj4gcGh5X2V4aXQoKS9waHlfaW5pdCgp IG11c3QgYmUgY2FsbGVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZS4KPiBBQ0sKPiAKPj4+PiBXaXRo IHRoYXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGJlaW5nIGRvbmUgaGVyZS4gU2hvdWxkbid0IHdl IGJlIGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mCj4+Pj4gdXNiX3BoeV9yb290aHViX2RlbF9waHko KSBhbmQgdXNiX3BoeV9yb290aHViX2ZyZWUoKSBoZXJlPwo+Pj4+Cj4+Pj4+ICsKPj4+Pj4gKyAg ICAgcmV0dXJuIHJldDsKPj4+Pj4gK30KPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlf cm9vdGh1Yl9leGl0KTsKPj4+Pj4gKwo+Pj4+PiAraW50IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9v bihzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPj4+Pj4gK3sKPj4+Pj4gKyAg ICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+Pj4gKyAgICAgc3Ry dWN0IGxpc3RfaGVhZCAqaGVhZDsKPj4+Pj4gKyAgICAgaW50IGVycjsKPj4+Pj4gKwo+Pj4+PiAr ICAgICBpZiAoIXBoeV9yb290aHViKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+ PiArCj4+Pj4+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4+Pj4+ICsKPj4+Pj4g KyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4+ Pj4+ICsgICAgICAgICAgICAgZXJyID0gcGh5X3Bvd2VyX29uKHJvb3RodWJfZW50cnktPnBoeSk7 Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg IGdvdG8gZXJyX291dDsKPj4+Pj4gKyAgICAgfQo+Pj4+PiArCj4+Pj4+ICsgICAgIHJldHVybiAw Owo+Pj4+PiArCj4+Pj4+ICtlcnJfb3V0Ogo+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 X2NvbnRpbnVlX3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkKPj4+Pj4gKyAgICAg ICAgICAgICBwaHlfcG93ZXJfb2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Pj4+ICsKPj4+Pj4g KyAgICAgcmV0dXJuIGVycjsKPj4+Pj4gK30KPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9w aHlfcm9vdGh1Yl9wb3dlcl9vbik7Cj4+Pj4+ICsKPj4+Pj4gK3ZvaWQgdXNiX3BoeV9yb290aHVi X3Bvd2VyX29mZihzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPj4+Pj4gK3sK Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+Pj4g Kwo+Pj4+PiArICAgICBpZiAoIXBoeV9yb290aHViKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVy bjsKPj4+Pj4gKwo+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uocm9vdGh1 Yl9lbnRyeSwgJnBoeV9yb290aHViLT5saXN0LCBsaXN0KQo+Pj4+PiArICAgICAgICAgICAgIHBo eV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pgo+Pj4+IE5vdCBkb2luZyB0aGUg cGh5X2V4aXQoKSBoZXJlIGxlYXZlcyB0aGUgY2xvY2tzIGVuYWJsZWQgb24gb3VyIFNvQyBhbmQK Pj4+PiB3ZSdyZSBubyBsb25nZXIgYWJsZSB0byByZWFjaCBsb3cgcG93ZXIgc3RhdGVzIG9uIHN5 c3RlbSBzdXNwZW5kLgo+Pj4gSSdtIG5vdCBzdXJlIHdoZXJlIHRoaXMgcHJvYmxlbSBzaG91bGQg YmUgc29sdmVkOgo+Pj4gLSBzZXQgc2tpcF9waHlfaW5pdGlhbGl6YXRpb24gaW4gc3RydWN0IHVz Yl9oY2QgdG8gMSBmb3IgdGhlIGFmZmVjdGVkCj4+PiBUSSBwbGF0Zm9ybXMKPj4KPj4gTWFueSBU SSBwbGF0Zm9ybXMgYXJlIGFmZmVjdGVkLCBvbWFwNSosIGRyYTcqLCBhbTQzKgo+Pgo+Pj4gLSBm aXggdGhpcyBpbiB0aGUgdXNiX3BoeV9yb290aHViIGNvZGUKPj4KPj4gSSdkIHZvdGUgZm9yIGZp eGluZyBpdCBpbiB0aGUgdXNiX3BoeV9yb290aHViIGNvZGUuIEhvdz8KPj4gSG93IGFib3V0IHVz aW5nIHRoZSBkZXZpY2VfY2FuX3dha2V1cCgpIHRvIGRlY2lkZSBpZiB3ZSBzaG91bGQgY2FsbCBw aHlfZXhpdCgpL2luaXQoKSBvciBub3Q/Cj4+IElmIHRoZSBVU0IgZGV2aWNlIGNhbid0IHdha2V1 cCB0aGUgc3lzdGVtIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgaXQgcG93ZXJlZC9jbG9j a2VkIHJpZ2h0Pwo+IEBDaHVuZmVuZzogY2FuIHlvdSBjb25maXJtIFJvZ2VyJ3MgaWRlYSB0aGF0 IHdlIGNvdWxkIGNhbGwgcGh5X2V4aXQgaWYKPiB0aGUgY29udHJvbGxlciBpcyAqTk9UKiBtYXJr ZWQgYXMgIndha2V1cC1zb3VyY2UiPwo+IEkgYW0gYWxzbyBub3Qgc3VyZSBpZiBpdCB3b3VsZCB3 b3JrLCBzaW5jZSB0aGUgIndha2V1cC1zb3VyY2UiCj4gcHJvcGVydHkgaXMgZGVmaW5lZCBvbiB0 aGUgVVNCIGNvbnRyb2xsZXIncyBwYXJlbnQgbm9kZSBpbiBjYXNlIG9mIHRoZQo+IE1lZGlhdGVr IE1UVTMgKE1lZGlhdGVrIFVTQjMuMCBEUkQpIGNvbnRyb2xsZXIKClRoYXQgaXMgYWJvdXQgd2Fr ZXVwLXNvdXJjZSBhbmQgbm90IGFib3V0IHdoZXRoZXIgcmVtb3RlIHdha2V1cCBzaG91bGQgYmUg ZW5hYmxlZCBvciBub3QuCmkuZS4gd2FrZXVwLXNvdXJjZSBjYW4gYmUgcHJlc2VudCBidXQgd2Fr ZXVwIGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBieSB0aGUgdXNlciB2aWEgc3lzZnMuCgo+IAo+Pj4g LSBmaXggdGhpcyBpbiB0aGUgUEhZIGRyaXZlcgo+Pgo+PiBUaGVyZSBpcyBub3RoaW5nIHRvIGZp eCBpbiB0aGUgUEhZIGRyaXZlci4gSXQgaXMgZG9pbmcgd2hhdCBpdCBpcyBzdXBwb3NlZCB0byBk by4KPiBJIGFjdHVhbGx5IHdvbmRlciBpZiBwaHlfb3BzIHNob3VsZCBoYXZlIGV4cGxpY2l0IHN1 c3BlbmQvcmVzdW1lIHN1cHBvcnQ6Cj4gLSBhc3N1bWluZyB3ZSBkZWZpbmUgdHdvIG5ldyBjYWxs YmFja3M6IC5zdXNwZW5kIGFuZCAucmVzdW1lCj4gLSB0aGUgUEhZIGZyYW1ld29yayBjb3VsZCBj YWxsIC5wb3dlcl9vZmYgYnkgZGVmYXVsdCBpZiAuc3VzcGVuZCBpcyBub3QgZGVmaW5lZAo+IC0g dGhlIFBIWSBmcmFtZXdvcmsgY291bGQgY2FsbCAucG93ZXJfb24gYnkgZGVmYXVsdCBpZiAucmVz dW1lIGlzIG5vdCBkZWZpbmVkCj4gLSBkcml2ZXJzIGNvdWxkIHNldCAuc3VzcGVuZCBhbmQgLnJl c3VtZSBvbiB0aGVpciBvd24sIGFsbG93aW5nIG1vcmUKPiBmaW5lLWdyYWluZWQgY29udHJvbCBi eSBmb3IgZXhhbXBsZSAqb25seSogc3RvcHBpbmcgdGhlIGNsb2NrIChidXQgbm90Cj4gcmUtaW5p dGlhbGl6aW5nIHRoZSByZWdpc3RlcnMsIGV0Yy4pCj4gCj4gQFJvZ2VyOiB3aGF0IGRvIHlvdSB0 aGluayBhYm91dCB0aGlzPwoKTG9va3MgZmluZSB0byBtZS4gSG93ZXZlciBvbmUgdGhpbmcgaXMg c3RpbGwgbm90IGNsZWFyLiBIb3cgZG9lcyB0aGUgUEhZIGRyaXZlcgpkZWNpZGUgaWYgaXQgbmVl ZHMgdG8gZG8gYSBmdWxsIHBvd2VyIG9mZiBvciBwYXJ0aWFsIHBvd2VyIG9mZj8KSXQgZG9lc24n dCBrbm93IGFib3V0IHRoZSByb290aHViJ3MgZGV2aWNlX21heV93YWtldXAoKSBzdGF0dXMuCgo+ IEtpc2hvbiAodGhlIFBIWSBmcmFtZXdvcmsgbWFpbnRhaW5lcikgaXMgYWxzbyBDQydlZCAtIEkg d291bGQgbGlrZSB0bwo+IGhlYXIgaGlzIG9waW5pb24gdG9vCj4gCj4+PiAtIHNvbWV3aGVyZSBl bHNlCj4+Pgo+Pj4+PiArfQo+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHVi X3Bvd2VyX29mZik7Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3BoeS5oIGIv ZHJpdmVycy91c2IvY29yZS9waHkuaAo+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+PiBp bmRleCAwMDAwMDAwMDAwMDAuLjZmZGU1OWJmYmZmOAo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmgKPj4+Pj4gQEAgLTAsMCArMSw3IEBACj4+Pj4+ ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViOwo+Pj4+PiArCj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9y b290aHViICp1c2JfcGh5X3Jvb3RodWJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+Pj4+PiAr aW50IHVzYl9waHlfcm9vdGh1Yl9leGl0KHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290 aHViKTsKPj4+Pj4gKwo+Pj4+PiAraW50IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbihzdHJ1Y3Qg dXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4+Pj4+ICt2b2lkIHVzYl9waHlfcm9vdGh1 Yl9wb3dlcl9vZmYoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpOwo+Pj4+Pgo+ Pj4+Cj4+Cg==