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: Date: Mon, 19 Mar 2018 10:49:55 +0200 To: Martin Blumenstingl , 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" , KISHON VIJAY ABRAHAM List-ID: SGksCgpPbiAxOS8wMy8xOCAwMDoyOSwgTWFydGluIEJsdW1lbnN0aW5nbCB3cm90ZToKPiBIaSBS b2dlciwKPiAKPiBPbiBGcmksIE1hciAxNiwgMjAxOCBhdCAzOjMyIFBNLCBSb2dlciBRdWFkcm9z IDxyb2dlcnFAdGkuY29tPiB3cm90ZToKPj4gK3NvbWUgVEkgZm9sa3MKPj4KPj4gSGkgTWFydGlu LAo+Pgo+PiBPbiAxOC8wMi8xOCAyMDo0NCwgTWFydGluIEJsdW1lbnN0aW5nbCB3cm90ZToKPj4+ IE1hbnkgU29DIHBsYXRmb3JtcyBoYXZlIHNlcGFyYXRlIGRldmljZXMgZm9yIHRoZSBVU0IgUEhZ IHdoaWNoIGFyZQo+Pj4gcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBnZW5lcmljIFBIWSBmcmFtZXdv cmsuIFRoZXNlIFBIWXMgaGF2ZSB0byBiZQo+Pj4gZW5hYmxlZCB0byBtYWtlIHRoZSBVU0IgY29u dHJvbGxlciBhY3R1YWxseSB3b3JrLiBUaGV5IGFsc28gaGF2ZSB0byBiZQo+Pj4gZGlzYWJsZWQg YWdhaW4gb24gc2h1dGRvd24vc3VzcGVuZC4KPj4+Cj4+PiBDdXJyZW50bHkgKGF0IGxlYXN0KSB0 aGUgZm9sbG93aW5nIEhDSSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSB1c2luZyBjdXN0b20KPj4+IGNv ZGUgdG8gb2J0YWluIGFsbCBQSFlzIHZpYSBkZXZpY2V0cmVlIGZvciB0aGUgcm9vdGh1Yi9jb250 cm9sbGVyIGFuZAo+Pj4gZGlzYWJsZS9lbmFibGUgdGhlbSB3aGVuIHJlcXVpcmVkOgo+Pj4gLSBl aGNpLXBsYXRmb3JtLmMgaGFzIGVoY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPj4+IC0geGhj aS1tdGsuYyBoYXMgeGhjaV9tdGtfcGh5X3tpbml0LGV4aXQscG93ZXJfb24scG93ZXJfb2ZmfQo+ Pj4gLSBvaGNpLXBsYXRmb3JtLmMgaGFzIG9oY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPj4+ Cj4+PiBXaXRoIHRoaXMgbmV3IHdyYXBwZXIgdGhlIFVTQiBQSFlzIGNhbiBiZSBzcGVjaWZpZWQg ZGlyZWN0bHkgaW4gdGhlCj4+PiBVU0IgY29udHJvbGxlcidzIGRldmljZXRyZWUgbm9kZSAoanVz dCBsaWtlIG9uIHRoZSBkcml2ZXJzIGxpc3RlZAo+Pj4gYWJvdmUpLiBUaGlzIGFsbG93cyBTb0Nz IGxpa2UgdGhlIEFtbG9naWMgTWVzb24gR1hMIGZhbWlseSB0byBvcGVyYXRlCj4+PiBjb3JyZWN0 bHkgb25jZSB0aGlzIGlzIHdpcmVkIHVwIGNvcnJlY3RseS4gVGhlc2UgU29DcyB1c2UgYSBkd2Mz Cj4+PiBjb250cm9sbGVyIGFuZCByZXF1aXJlIGFsbCBVU0IgUEhZcyB0byBiZSBpbml0aWFsaXpl ZCAoaWYgb25lIG9mIHRoZSBVU0IKPj4+IFBIWXMgaXQgbm90IGluaXRpYWxpemVkIHRoZW4gbm9u ZSBvZiBVU0IgcG9ydCB3b3JrcyBhdCBhbGwpLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IE1hcnRp biBCbHVtZW5zdGluZ2wgPG1hcnRpbi5ibHVtZW5zdGluZ2xAZ29vZ2xlbWFpbC5jb20+Cj4+PiBU ZXN0ZWQtYnk6IFlpeHVuIExhbiA8eWl4dW4ubGFuQGFtbG9naWMuY29tPgo+Pj4gQ2M6IE5laWwg QXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KPj4+IENjOiBDaHVuZmVuZyBZdW4g PGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+Cj4+Cj4+IFRoaXMgcGF0Y2ggaXMgYnJlYWtpbmcg bG93IHBvd2VyIGNhc2VzIG9uIFRJIFNvQ3Mgd2hlbiBVU0IgaXMgaW4gaG9zdCBtb2RlLgo+PiBJ J2xsIGV4cGxhaW4gd2h5IGJlbG93Lgo+IGJhc2VkIG9uIHlvdXIgZXhwbGFuYXRpb24gYW5kIHJl YWRpbmcgdGhlIFRJIFBIWSBkcml2ZXJzIEkgYW0gYXNzdW1pbmcKPiB0aGF0IHRoZSBhZmZlY3Rl ZCBTb0NzIGFyZSB1c2luZyB0aGUgInBoeS1vbWFwLXVzYjIiIGRyaXZlcgo+IAp5ZXMgYW5kIHBo eS10aS1waXBlMyBhcyB3ZWxsIGkuZS4gInRpLHBoeS11c2IzIiBhbmQgInRpLG9tYXAtdXNiMyIK Cj4+PiAtLS0KPj4+ICBkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIHwgICAyICstCj4+PiAgZHJp dmVycy91c2IvY29yZS9waHkuYyAgICB8IDE1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+PiAgZHJpdmVycy91c2IvY29yZS9waHkuaCAgICB8ICAgNyAr Kwo+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgMTY2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY29yZS9waHkuYwo+Pj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jb3JlL3BoeS5oCj4+Pgo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCj4+ PiBpbmRleCA5MmM5Y2VmYjQzMTcuLjE4ZTg3NGIwNDQxZSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZl cnMvdXNiL2NvcmUvTWFrZWZpbGUKPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUK Pj4+IEBAIC02LDcgKzYsNyBAQAo+Pj4gIHVzYmNvcmUteSA6PSB1c2IubyBodWIubyBoY2QubyB1 cmIubyBtZXNzYWdlLm8gZHJpdmVyLm8KPj4+ICB1c2Jjb3JlLXkgKz0gY29uZmlnLm8gZmlsZS5v IGJ1ZmZlci5vIHN5c2ZzLm8gZW5kcG9pbnQubwo+Pj4gIHVzYmNvcmUteSArPSBkZXZpby5vIG5v dGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm8KPj4+IC11c2Jjb3JlLXkgKz0gcG9y dC5vCj4+PiArdXNiY29yZS15ICs9IHBoeS5vIHBvcnQubwo+Pj4KPj4+ICB1c2Jjb3JlLSQoQ09O RklHX09GKSAgICAgICAgICs9IG9mLm8KPj4+ICB1c2Jjb3JlLSQoQ09ORklHX1VTQl9QQ0kpICAg ICAgICAgICAgKz0gaGNkLXBjaS5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9w aHkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ PiBpbmRleCAwMDAwMDAwMDAwMDAuLjA5YjdjNDNjMGVhNAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4g KysrIGIvZHJpdmVycy91c2IvY29yZS9waHkuYwo+Pj4gQEAgLTAsMCArMSwxNTggQEAKPj4+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPj4+ICsvKgo+Pj4gKyAqIEEgd3Jh cHBlciBmb3IgbXVsdGlwbGUgUEhZcyB3aGljaCBwYXNzZXMgYWxsIHBoeV8qIGZ1bmN0aW9uIGNh bGxzIHRvCj4+PiArICogbXVsdGlwbGUgKGFjdHVhbCkgUEhZIGRldmljZXMuIFRoaXMgaXMgY29t ZXMgaGFuZHkgd2hlbiBpbml0aWFsaXppbmcKPj4+ICsgKiBhbGwgUEhZcyBvbiBhIEhDRCBhbmQg dG8ga2VlcCB0aGVtIGFsbCBpbiB0aGUgc2FtZSBzdGF0ZS4KPj4+ICsgKgo+Pj4gKyAqIENvcHly aWdodCAoQykgMjAxOCBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdv b2dsZW1haWwuY29tPgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2Uu aD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgInBo eS5oIgo+Pj4gKwo+Pj4gK3N0cnVjdCB1c2JfcGh5X3Jvb3RodWIgewo+Pj4gKyAgICAgc3RydWN0 IHBoeSAgICAgICAgICAgICAgKnBoeTsKPj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgICAg IGxpc3Q7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAq dXNiX3BoeV9yb290aHViX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArICAg ICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2VudHJ5Owo+Pj4gKwo+Pj4gKyAgICAg cm9vdGh1Yl9lbnRyeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcm9vdGh1Yl9lbnRyeSks IEdGUF9LRVJORUwpOwo+Pj4gKyAgICAgaWYgKCFyb290aHViX2VudHJ5KQo+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4+ICsKPj4+ICsgICAgIElOSVRfTElTVF9I RUFEKCZyb290aHViX2VudHJ5LT5saXN0KTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiByb290aHVi X2VudHJ5Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHVzYl9waHlfcm9vdGh1Yl9hZGRf cGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGluZGV4LAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKPj4+ICt7Cj4+PiArICAgICBz dHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2VudHJ5Owo+Pj4gKyAgICAgc3RydWN0IHBo eSAqcGh5ID0gZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgZGV2LT5vZl9ub2RlLCBpbmRl eCk7Cj4+PiArCj4+PiArICAgICBpZiAoSVNfRVJSX09SX05VTEwocGh5KSkgewo+Pj4gKyAgICAg ICAgICAgICBpZiAoIXBoeSB8fCBQVFJfRVJSKHBoeSkgPT0gLUVOT0RFVikKPj4+ICsgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsgICAgICAgICAgICAgZWxzZQo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHBoeSk7Cj4+PiArICAgICB9Cj4+PiArCj4+ PiArICAgICByb290aHViX2VudHJ5ID0gdXNiX3BoeV9yb290aHViX2FsbG9jKGRldik7Cj4+PiAr ICAgICBpZiAoSVNfRVJSKHJvb3RodWJfZW50cnkpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4g UFRSX0VSUihyb290aHViX2VudHJ5KTsKPj4+ICsKPj4+ICsgICAgIHJvb3RodWJfZW50cnktPnBo eSA9IHBoeTsKPj4+ICsKPj4+ICsgICAgIGxpc3RfYWRkX3RhaWwoJnJvb3RodWJfZW50cnktPmxp c3QsIGxpc3QpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9pbml0KHN0cnVjdCBkZXZpY2Ug KmRldikKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1 YjsKPj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4+PiAr ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwo+Pj4gKyAgICAgaW50IGksIG51bV9waHlzLCBl cnI7Cj4+PiArCj4+PiArICAgICBudW1fcGh5cyA9IG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdz KGRldi0+b2Zfbm9kZSwgInBoeXMiLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiI3BoeS1jZWxscyIpOwo+Pj4gKyAgICAgaWYgKG51bV9waHlzIDw9IDAp Cj4+PiArICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+Pj4gKwo+Pj4gKyAgICAgcGh5X3Jvb3Ro dWIgPSB1c2JfcGh5X3Jvb3RodWJfYWxsb2MoZGV2KTsKPj4+ICsgICAgIGlmIChJU19FUlIocGh5 X3Jvb3RodWIpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcGh5X3Jvb3RodWI7Cj4+PiArCj4+ PiArICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXM7IGkrKykgewo+Pj4gKyAgICAgICAgICAg ICBlcnIgPSB1c2JfcGh5X3Jvb3RodWJfYWRkX3BoeShkZXYsIGksICZwaHlfcm9vdGh1Yi0+bGlz dCk7Cj4+PiArICAgICAgICAgICAgIGlmIChlcnIpCj4+PiArICAgICAgICAgICAgICAgICAgICAg Z290byBlcnJfb3V0Owo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgaGVhZCA9ICZwaHlfcm9v dGh1Yi0+bGlzdDsKPj4+ICsKPj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1Yl9l bnRyeSwgaGVhZCwgbGlzdCkgewo+Pj4gKyAgICAgICAgICAgICBlcnIgPSBwaHlfaW5pdChyb290 aHViX2VudHJ5LT5waHkpOwo+Pgo+PiBUaGUgcGh5X2luaXQoKSBmdW5jdGlvbiBhY3R1YWxseSBl bmFibGVzIHRoZSBQSFkgY2xvY2tzLgo+PiBJdCBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIHVzYl9w aHlfcm9vdGh1Yl9leGl0KCkgcm91dGluZSBqdXN0IGJlZm9yZSBjYWxsaW5nIHBoeV9wb3dlcl9v bigpLgo+IGRvIHlvdSBtZWFuIHRoYXQgcGh5X2luaXQgc2hvdWxkIGJlIG1vdmVkIHRvIHVzYl9w aHlfcm9vdGh1Yl9wb3dlcl9vbgo+IChqdXN0IGJlZm9yZSBwaHlfcG93ZXJfb24gaXMgY2FsbGVk IHdpdGhpbiB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24pPwo+IAoKWWVzLgoKPiBhbiBlYXJsaWVy IHZlcnNpb24gb2YgbXkgcGF0Y2ggZGlkIGV4YWN0bHkgdGhpcywgYnV0IGl0IGNhdXNlZAo+IHBy b2JsZW1zIGR1cmluZyBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlIG9uIE1lZGlhdGVrIGRldmljZXMK PiBDaHVuZmVuZyBZdW4gcmVwb3J0ZWQgdGhhdCBpc3N1ZSBoZXJlIFswXSwgcXVvdGUgZnJvbSB0 aGF0IG1haWwgZm9yCj4gZWFzaWVyIHJlYWRpbmc6Cj4gIkluIG9yZGVyIHRvIGtlZXAgbGluayBz dGF0ZSBvbiBtdDgxNzMsIHdlIGp1c3QgcG93ZXIgb2ZmIGFsbCBwaHlzKG5vdAo+IGV4aXQpIHdo ZW4gc3lzdGVtIGVudGVyIHN1c3BlbmQsIHRoZW4gcG93ZXIgb24gdGhlbSBhZ2FpbiAobmVlZG4n dAo+IGluaXQsIG90aGVyd2lzZSBkZXZpY2Ugd2lsbCBiZSBkaXNjb25uZWN0ZWQpIHdoZW4gc3lz dGVtIHJlc3VtZSwgdGhpcwo+IGNhbiBhdm9pZCByZS1lbnVtZXJhdGluZyBkZXZpY2UuIgo+IAo+ Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8g ZXJyX2V4aXRfcGh5czsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIHJldHVybiBwaHlfcm9v dGh1YjsKPj4+ICsKPj4+ICtlcnJfZXhpdF9waHlzOgo+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9l bnRyeV9jb250aW51ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4+PiArICAg ICAgICAgICAgIHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+PiArCj4+PiArZXJyX291 dDoKPj4+ICsgICAgIHJldHVybiBFUlJfUFRSKGVycik7Cj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1C T0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9pbml0KTsKPj4+ICsKPj4+ICtpbnQgdXNiX3BoeV9yb290 aHViX2V4aXQoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpCj4+PiArewo+Pj4g KyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+ICsgICAgIHN0 cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4+PiArICAgICBpbnQgZXJyLCByZXQgPSAwOwo+Pj4gKwo+ Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+ PiArCj4+PiArICAgICBoZWFkID0gJnBoeV9yb290aHViLT5saXN0Owo+Pj4gKwo+Pj4gKyAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4+PiArICAg ICAgICAgICAgIGVyciA9IHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+PiArICAgICAg ICAgICAgIGlmIChlcnIpCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0Owo+Pj4g KyAgICAgfQo+Pgo+PiBwaHlfZXhpdCgpIHNob3VsZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3Ro dWJfcG93ZXJvZmYoKSBqdXN0IGFmdGVyIGNhbGxpbmcgcGh5X3Bvd2VyX29mZigpLgo+IGlmIEkg dW5kZXJzdG9vZCBDaHVuZmVuZyBZdW4gY29ycmVjdGx5IHRoaXMgd2lsbCByZXF1aXJlCj4gcmUt ZW51bWVyYXRpb24gb2YgdGhlIFVTQiBkZXZpY2VzIGFmdGVyIGEgc3VzcGVuZC9yZXN1bWUgY3lj bGUgb24KPiBNZWRpYXRlayBTb0NzCj4gCgpPSy4gSSBzdXBwb3NlIHRoYXQgdGhlcmUgYXJlIDIg Y2FzZXMKMSkgTWVkaWF0ZWsncyBjYXNlOiBVU0IgY29udHJvbGxlciBjb250ZXh0IHJldGFpbmVk IGFjcm9zcyBzdXNwZW5kL3Jlc3VtZS4KUmVtb3RlIHdha2V1cCBwcm9iYWJseSByZXF1aXJlZC4K Tm8gcmUtZW51bWVyYXRpb24gcHJlZmVycmVkIGFmdGVyIHJlc3VtZS4gcGh5X2V4aXQoKS9waHlf aW5pdCgpIG11c3Qgbm90IGJlIGNhbGxlZApkdXJpbmcgc3VzcGVuZC9yZXN1bWUgdG8ga2VlcCBQ SFkgbGluayBhY3RpdmUuCgoyKSBUSSdzIGNhc2U6IGxvdyBwb3dlciBpbXBvcnRhbnQ6IFVTQiBj b250ZXh0IGlzIGxvc3QsIE9LIHRvIHJlLWVudW1lcmF0ZS4KcGh5X2V4aXQoKS9waHlfaW5pdCgp IG11c3QgYmUgY2FsbGVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZS4KCgo+PiBXaXRoIHRoYXQgdGhl cmUgaXMgbm90aGluZyBlbHNlIGJlaW5nIGRvbmUgaGVyZS4gU2hvdWxkbid0IHdlIGJlIGRvaW5n IHRoZSBlcXVpdmFsZW50IG9mCj4+IHVzYl9waHlfcm9vdGh1Yl9kZWxfcGh5KCkgYW5kIHVzYl9w aHlfcm9vdGh1Yl9mcmVlKCkgaGVyZT8KPj4KPj4+ICsKPj4+ICsgICAgIHJldHVybiByZXQ7Cj4+ PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9leGl0KTsKPj4+ICsK Pj4+ICtpbnQgdXNiX3BoeV9yb290aHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIg KnBoeV9yb290aHViKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJv b3RodWJfZW50cnk7Cj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwo+Pj4gKyAgICAg aW50IGVycjsKPj4+ICsKPj4+ICsgICAgIGlmICghcGh5X3Jvb3RodWIpCj4+PiArICAgICAgICAg ICAgIHJldHVybiAwOwo+Pj4gKwo+Pj4gKyAgICAgaGVhZCA9ICZwaHlfcm9vdGh1Yi0+bGlzdDsK Pj4+ICsKPj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1Yl9lbnRyeSwgaGVhZCwg bGlzdCkgewo+Pj4gKyAgICAgICAgICAgICBlcnIgPSBwaHlfcG93ZXJfb24ocm9vdGh1Yl9lbnRy eS0+cGh5KTsKPj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPj4+ICsgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycl9vdXQ7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICByZXR1cm4gMDsK Pj4+ICsKPj4+ICtlcnJfb3V0Ogo+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51 ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4+PiArICAgICAgICAgICAgIHBo eV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiBl cnI7Cj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9v bik7Cj4+PiArCj4+PiArdm9pZCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2Jf cGh5X3Jvb3RodWIgKnBoeV9yb290aHViKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5 X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4+PiArCj4+PiArICAgICBpZiAoIXBoeV9yb290aHVi KQo+Pj4gKyAgICAgICAgICAgICByZXR1cm47Cj4+PiArCj4+PiArICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5X3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgJnBoeV9yb290aHViLT5saXN0LCBsaXN0KQo+ Pj4gKyAgICAgICAgICAgICBwaHlfcG93ZXJfb2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Cj4+ IE5vdCBkb2luZyB0aGUgcGh5X2V4aXQoKSBoZXJlIGxlYXZlcyB0aGUgY2xvY2tzIGVuYWJsZWQg b24gb3VyIFNvQyBhbmQKPj4gd2UncmUgbm8gbG9uZ2VyIGFibGUgdG8gcmVhY2ggbG93IHBvd2Vy IHN0YXRlcyBvbiBzeXN0ZW0gc3VzcGVuZC4KPiBJJ20gbm90IHN1cmUgd2hlcmUgdGhpcyBwcm9i bGVtIHNob3VsZCBiZSBzb2x2ZWQ6Cj4gLSBzZXQgc2tpcF9waHlfaW5pdGlhbGl6YXRpb24gaW4g c3RydWN0IHVzYl9oY2QgdG8gMSBmb3IgdGhlIGFmZmVjdGVkCj4gVEkgcGxhdGZvcm1zCgpNYW55 IFRJIHBsYXRmb3JtcyBhcmUgYWZmZWN0ZWQsIG9tYXA1KiwgZHJhNyosIGFtNDMqCgo+IC0gZml4 IHRoaXMgaW4gdGhlIHVzYl9waHlfcm9vdGh1YiBjb2RlCgpJJ2Qgdm90ZSBmb3IgZml4aW5nIGl0 IGluIHRoZSB1c2JfcGh5X3Jvb3RodWIgY29kZS4gSG93PwpIb3cgYWJvdXQgdXNpbmcgdGhlIGRl dmljZV9jYW5fd2FrZXVwKCkgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBjYWxsIHBoeV9leGl0KCkv aW5pdCgpIG9yIG5vdD8KSWYgdGhlIFVTQiBkZXZpY2UgY2FuJ3Qgd2FrZXVwIHRoZSBzeXN0ZW0g dGhlcmUgaXMgbm8gcG9pbnQgaW4ga2VlcGluZyBpdCBwb3dlcmVkL2Nsb2NrZWQgcmlnaHQ/Cgo+ IC0gZml4IHRoaXMgaW4gdGhlIFBIWSBkcml2ZXIKClRoZXJlIGlzIG5vdGhpbmcgdG8gZml4IGlu IHRoZSBQSFkgZHJpdmVyLiBJdCBpcyBkb2luZyB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvIGRvLgoK PiAtIHNvbWV3aGVyZSBlbHNlCj4gCj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9w aHlfcm9vdGh1Yl9wb3dlcl9vZmYpOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUv cGh5LmggYi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5oCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi42ZmRlNTliZmJmZjgKPj4+IC0tLSAvZGV2L251bGwKPj4+ ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmgKPj4+IEBAIC0wLDAgKzEsNyBAQAo+Pj4gK3N0 cnVjdCB1c2JfcGh5X3Jvb3RodWI7Cj4+PiArCj4+PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YiAq dXNiX3BoeV9yb290aHViX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKPj4+ICtpbnQgdXNiX3Bo eV9yb290aHViX2V4aXQoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpOwo+Pj4g Kwo+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24oc3RydWN0IHVzYl9waHlfcm9vdGh1 YiAqcGh5X3Jvb3RodWIpOwo+Pj4gK3ZvaWQgdXNiX3BoeV9yb290aHViX3Bvd2VyX29mZihzdHJ1 Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4+Pgo+PgoKPHNuaXA+Cg==