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: [1/8] phy: tegra: xusb: t210: add XUSB device mode support From: Thierry Reding Message-Id: <20190213083522.GB647@ulmo> Date: Wed, 13 Feb 2019 09:35:22 +0100 To: Nagarjuna Kristam Cc: balbi@kernel.org, gregkh@linuxfoundation.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org List-ID: T24gV2VkLCBGZWIgMTMsIDIwMTkgYXQgMTI6MzQ6MzlQTSArMDUzMCwgTmFnYXJqdW5hIEtyaXN0 YW0gd3JvdGU6Cj4gSGkgVGhpZXJyeSwKPiAKPiBPbiAwNC0wMi0yMDE5IDE3OjU3LCBUaGllcnJ5 IFJlZGluZyB3cm90ZToKPiA+IE9uIFRodSwgSmFuIDAzLCAyMDE5IGF0IDAzOjM0OjUyUE0gKzA1 MzAsIE5hZ2FyanVuYSBLcmlzdGFtIHdyb3RlOgo+ID4+IEFkZCBzdXBwb3J0IGZvciBYVVNCIGRl dmljZSBtb2RlIGNvbnRyb2xsZXIgb24gVGVncmEyMTAuCj4gPj4gVXBkYXRlIFBBRENUTCBkcml2 ZXIgdG8gc2V0IHBvcnQgY2FwIGJhc2VkIG9uIERUIGNvbmZpZy4KPiA+PiBBZGQgY29kZSB0byBo YW5kbGUgcHJvcGVydHkgIm52aWRpYSx1c2IzLXBvcnQtZmFrZSIKPiA+PiBQcm92aWRlIEFQSSdz IHRvIGNvbnRyb2wgdmJ1cyBvdmVycmlkZSBhbmQgdXRtaSBwYWQgcG93ZXIgY29udHJvbAo+ID4g Cj4gPiBZb3UgZXNzZW50aWFsbHkgbGlzdCB0aHJlZSBmZWF0dXJlcyBhZGRpdGlvbnMgaGVyZSwg c28gaXQgbWFrZXMgc2Vuc2UgdG8KPiA+IHByb3ZpZGUgZWFjaCBvZiB0aGVtIGluIGEgc2VwYXJh dGUgcGF0Y2guIFRoYXQgaGVscHMgcmV2aWV3ZXJzCj4gPiBjb25jZW50cmF0ZSBvbiBvbmUgZmVh dHVyZSBhdCBhIHRpbWUgd2l0aG91dCBoYXZpbmcgdG8gbG9hZCBjb250ZXh0IGZvcgo+ID4gdGhy ZWUgZGlmZmVyZW50IHRoaW5ncyBpbiBwYXJhbGxlbC4KPiA+IAo+ID4gQWxzbywgZm9yIGVhY2gg ZmVhdHVyZSBwbGVhc2UgcHJvdmlkZSBhIGJpdCBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24K PiA+IGFzIHdlbGwgYXMgcmVhc29ucyBmb3Igd2h5IHRoZXkgYXJlIGFkZGVkLgo+ID4gCj4gCj4g Rm9yIFhVU0IgZGV2aWNlIGNvbnRyb2wgRmVhdHVyZSBzdXBwb3J0LCB3ZSBuZWVkZWQgYWxsIHRo cmVlIGFuZCBoZW5jZQo+IGFkZGVkIHRoZW0gYXMgcGFydCBvZiBvbmUgY2hhbmdlLiBJZiB3ZSBj YW4gaGF2ZSBncm91cCBvZiBpbmRpdmlkdWFscyBDTCdzCj4gZm9yIHByb3ZpZGluZyBvbmUgZmVh dHVyZSBzdXBwb3J0LCB3aWxsIHNwbGl0IHRoZW0gYWNjb3JkaW5nbHkuCj4gRG9pbmcgYWJvdmUg d2lsbCBtYXJrIGN1cnJlbnQgY2hhbmdlcyBhcyBhIGRpZmZlcmVudCBwYXRjaCBzZXJpZXMsIGNv bnNpZGVyaW5nCj4gbmV3IHBhdGNoIHNlcmllcyB3aWxsIGJlIG1hZGUsIGlzIGl0IGZpbmUgdG8g bW92ZSBVU0IgZ2FkZ2V0IGRyaXZlciBjaGFuZ2VzIHRvCj4gYSBuZXcgc2VyaWVzID8KPiBQbGVh c2Ugc2hhcmUgeW91ciBpbnB1dHMKClllcywgaXQncyBnZW5lcmFsbHkgZmluZSB0byByZWFycmFu Z2UgcGF0Y2hlcyBpbiBhIHNlcmllcyBvciBhZGQgbmV3Cm9uZXMgYXMgdGhlIG5lZWQgYXJpc2Vz LiBPbmUgdGhpbmcgdG8gY29uc2lkZXIgaXMgdG8ga2VlcCB0aGUgc3ViamVjdCBvZgp0aGUgY292 ZXIgbGV0dGVyIGludGFjdCBhbmQgdXNlIHByb3BlciB2ZXJzaW9uaW5nIG9mIHBhdGNoZXMuIEJv dGggb2YKdGhlc2Ugc2hvdWxkIGhlbHAgdHJhY2sgdGhlIHNlcmllcyBhcyBpdCBldm9sdmVzLgoK V2hlbiBzcGxpdHRpbmcgdXAgcGF0Y2hlcywgdGhvdWdoLCBtYWtlIHN1cmUgdGhhdCBhbGwgcGF0 Y2hlcyBjYW4gYmUKc3VjY2Vzc2Z1bGx5IGJ1aWx0IGluIHRoZSBvcmRlciB0aGF0IHlvdSBzZW5k IHRoZW0uIFRoaXMgaXMgaW1wb3J0YW50IGluCm9yZGVyIHRvIGJlIGFibGUgdG8gcnVuIGdpdCBi aXNlY3Rpb25zIGxhdGVyIG9uLiBZb3UgY2FuIGVhc2lseSB2ZXJpZnkKdGhpcyBieSBkb2luZyBz b21ldGhpbmcgbGlrZToKCgkkIGdpdCByZWJhc2UgLWkgLS1leGVjICcvYmluL3NoJwoKb25jZSB0 aGUgc2VyaWVzIGlzIHJlYWR5LiBUaGF0IHdpbGwgYXV0b21hdGljYWxseSBkcm9wIHlvdSBpbnRv IGEgc2hlbGwKYWZ0ZXIgZWFjaCBjb21taXQgYW5kIHlvdSBjYW4gcnVuIHlvdXIgYnVpbGQgY29t bWFuZHMgdG8gdmVyaWZ5IHRoYXQKZWFjaCBjb21taXQgYnVpbGRzLiBZb3UgY2FuIGFsc28gcmVw bGFjZSAiL2Jpbi9zaCIgd2l0aCB0aGUgYnVpbGQKY29tbWFuZCBkaXJlY3RseSB0byBmdWxseSBh dXRvbWF0ZSB0aGlzIHByb2Nlc3MuIEhvd2V2ZXIgeW91IGhhdmUgdG8KbWFrZSBzdXJlIHRoYXQg eW91ciBidWlsZCBjb21tYW5kIHJldHVybnMgcHJvcGVyIGVycm9yIGNvZGVzIG9uIGZhaWx1cmUK Zm9yIHRoaXMgdG8gd29yay4KClsuLi5dCj4gPj4gKwlyZWcgPSBwYWRjdGxfcmVhZGwocGFkY3Rs LCBYVVNCX1BBRENUTF9VU0IyX09UR19QQURYX0NUTDAoaW5kZXgpKTsKPiA+PiArCXJlZyB8PSBY VVNCX1BBRENUTF9VU0IyX09UR19QQURfQ1RMMF9QRDsKPiA+PiArCXBhZGN0bF93cml0ZWwocGFk Y3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRFhfQ1RMMChpbmRleCkpOwo+ID4+ICsK PiA+PiArCXJlZyA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BB RFhfQ1RMMShpbmRleCkpOwo+ID4+ICsJcmVnIHw9IFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRF9D VEwxX1BEX0RSOwo+ID4+ICsJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHJlZywgWFVTQl9QQURDVExf VVNCMl9PVEdfUEFEWF9DVEwxKGluZGV4KSk7Cj4gPj4gKwo+ID4+ICsJdWRlbGF5KDIpOwo+ID4+ ICsKPiA+PiArCXRlZ3JhMjEwX3V0bWlfYmlhc19wYWRfcG93ZXJfb2ZmKHBhZGN0bCwgcGFkKTsK PiA+PiArCXVzYjItPnBvd2VyZWRfb24gPSBmYWxzZTsKPiA+PiArCj4gPj4gKwltdXRleF91bmxv Y2soJnBhZGN0bC0+bG9jayk7Cj4gPj4gK30KPiA+IAo+ID4gSSdtIG5vdCBzdXJlIEkgdW5kZXJz dGFuZCB0aGlzIGNvcnJlY3RseS4gVGhpcyBzZWVtcyB0byBpbXBsZW1lbnQgc29tZQo+ID4gcmVm ZXJlbmNlIGNvdW50aW5nIG9mIGl0cyBvd24uIFdoeSBpcyB0aGF0PyBJcyBpdCBiZWNhdXNlIGl0 IGlzIHNoYXJlZAo+ID4gYmV0d2VlbiBtdWx0aXBsZSBwYWRzPyBCdXQgdGhlbiwgeW91J3JlIHdy aXRpbmcgdG8gaW5kZXhlZCByZWdpc3RlcnMsCj4gPiB3aGljaCBpbmRpY2F0ZXMgdG8gbWUgdGhh dCB0aGVzZSBhcmUgaW4gZmFjdCBzZXBhcmF0ZSBwYWRzIGFuZCBub3QgYQo+ID4gc2hhcmVkIHJl c291cmNlLiBTbyB3aHkgdGhlIHJlZmVyZW5jZSBjb3VudGluZz8KPiA+IAo+ID4gSSdtIGFsc28g bm90IHN1cmUgd2h5IHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lk ZSB0aGlzCj4gPiBmaWxlLiBUaGV5IGFyZSBub3QgdXNlZCBvdXRzaWRlLCBhcyBmYXIgYXMgSSBj YW4gdGVsbC4KPiA+IAo+IAo+IExvY2sgd2FzIGFkZGVkLCBzaW5jZSB0aGUgQVBJIGFyZWEgY2Fs bGVkIGZyb20gZXh0ZXJuYWwgY29udGV4dChYVURDIGRyaXZlcikKPiBhbmQgdG8gcHJvdGVjdCBh Z2FpbnN0IG9uL29mZiwgbXV0ZXhfbG9jayB3YXMgZG9uZS4KPiBCYXNlZCBvbiBsYXRlciBzdWdn ZXN0aW9uIGluIHRoZSByZXZpZXcsIHdpbGwgbW92ZSB1dG1pIHBhZCBhbmQgdXRtaSBiaWFzIHBh ZAo+IHBvd2VyIG9uIGZ1bmN0aW9ucyB0byBwaHlfcG93ZXJfb24sIHdpdGggdGhhdCwgbXV0ZXgg bG9jayBpcyBub3QgbmVlZGVkIGFueSBtb3JlLgoKU291bmRzIGdyZWF0IQoKWy4uLl0KPiA+PiBA QCAtNTQ2LDkgKzU0NiwyNiBAQCBzdGF0aWMgaW50IHRlZ3JhX3h1c2JfdXNiMl9wb3J0X3BhcnNl X2R0KHN0cnVjdCB0ZWdyYV94dXNiX3VzYjJfcG9ydCAqdXNiMikKPiA+PiAgewo+ID4+ICAJc3Ry dWN0IHRlZ3JhX3h1c2JfcG9ydCAqcG9ydCA9ICZ1c2IyLT5iYXNlOwo+ID4+ICAJc3RydWN0IGRl dmljZV9ub2RlICpucCA9IHBvcnQtPmRldi5vZl9ub2RlOwo+ID4+ICsJY29uc3QgY2hhciAqcHJv cF9zdHJpbmc7Cj4gPj4gKwl1MzIgdmFsdWU7Cj4gPj4gIAo+ID4+ICAJdXNiMi0+aW50ZXJuYWwg PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJudmlkaWEsaW50ZXJuYWwiKTsKPiA+PiAgCj4g Pj4gKwl1c2IyLT5wb3J0X2NhcCA9IFVTQl9QT1JUX0RJU0FCTEVEOyAvKiBkZWZhdWx0ICovCj4g Pj4gKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAibW9kZSIsICZwcm9wX3N0cmlu ZykpIHsKPiA+PiArCQlpZiAoIXN0cmNtcCgiaG9zdCIsIHByb3Bfc3RyaW5nKSkKPiA+PiArCQkJ dXNiMi0+cG9ydF9jYXAgPSBVU0JfSE9TVF9DQVA7Cj4gPj4gKwkJZWxzZSBpZiAoIXN0cmNtcCgi ZGV2aWNlIiwgcHJvcF9zdHJpbmcpKQo+ID4+ICsJCQl1c2IyLT5wb3J0X2NhcCA9IFVTQl9ERVZJ Q0VfQ0FQOwo+ID4+ICsJCWVsc2UgaWYgKCFzdHJjbXAoIm90ZyIsIHByb3Bfc3RyaW5nKSkKPiA+ PiArCQkJdXNiMi0+cG9ydF9jYXAgPSBVU0JfT1RHX0NBUDsKPiA+PiArCX0KPiA+IAo+ID4gVGhp cyBzZWVtcyB0byBmdWxmaWxsIHRoZSBzYW1lIHB1cnBvc2UgYXMgdGhpczoKPiA+IAo+ID4gCWh0 dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wYXRjaC8xMDMxMDE0Lwo+ID4gCj4gPiBBbHRob3Vn aCwgbG9va2luZyBtb3JlIGNsb3NlbHkgYXQgdGhhdCwgd2UgY2FuIHByb2JhYmx5IGp1c3QgdGhl Cj4gPiB1c2JfZ2V0X2RyX21vZGUoKSBoZWxwZXIgZm9yIHRoaXMuIFRoZXJlJ3MgYWxzbyBhIHN0 YW5kYXJkIHByb3BlcnR5IGZvcgo+ID4gdGhlIGR1YWwtcm9sZSBtb2RlLCBuYW1lZCAiZHJfbW9k ZSIsIGFsYmVpdCB0aGUgbmFtZSBkb2VzIG5vdCBzZWVtIHRvCj4gPiBtYXRjaCBzdGFuZGFyZCBi ZXN0IHByYWN0aWNlcy4gU2VlbXMgbGlrZSBpdCB3b3VsZCBzdGlsbCBtYWtlIHNlbnNlIHRvCj4g PiBtb3ZlIHRvIHRoYXQgc3RhbmRhcmQgcHJvcGVydHkgbmFtZS4KPiA+IAo+IAo+IFllcywgdGhp cyBwYXJ0IG9mIGNoYW5nZSBpcyB3aGF0IGJlbG93IHBhdGNoIGlzIGRvaW5nCj4gCWh0dHA6Ly9w YXRjaHdvcmsub3psYWJzLm9yZy9wYXRjaC8xMDMxMDE0Lwo+IHcuci50IHVzaW5nIHVzYl9nZXRf ZHJfbW9kZSgpLCBpdCBwYXJzZXMgZHJfbW9kZSBzdHJpbmcgaWYgcHJlc2VudCBpbiBmd25vZGUK PiBCdXQgaW4gb3VyIGNhc2UsIHdlIGhhdmUgbW9kZSBwYXJ0IG9mIHBvcnQgc2V0dGluZyBhbmQg aXMgbm90IGlubGluZSB3aXRoCj4gZXhwZWN0YXRpb24gb2YgQVBJIHVzYl9nZXRfZHJfbW9kZSgp LiBJIGJlbGlldmUgd2UgbmVlZCB0byBzdGF5IHdpdGggaW1wbGVtZW50YXRpb24KPiBhcyBpbiBh Ym92ZSBsaW5rLgoKWWVhaCwgSSByZWFsaXplZCB0aGUgc2FtZSB0aGluZyB3aGVuIEkgdHJpZWQg dG8gY29udmVydCB0aGUgYWJvdmUgcGF0Y2gKdG8gdXNlIHVzYl9nZXRfZHJfbW9kZSgpIGluc3Rl YWQuIEkgYWdyZWUsIEkgdGhpbmsgd2UgbmVlZCB0byBzdGljayB3aXRoCnRoZSBjdXJyZW50IGlt cGxlbWVudGF0aW9uLgoKPiBDb25zaWRlcmluZyBjdXJyZW50IHBhdGNoIGFuZCBjaGFuZ2VzIGlu IHBhdGNoLzEwMzEwMTQvIGFyZSBzYW1lLAo+IHBsZWFzZSBzdWdnZXN0LCBpZiBjaGFuZ2VzIHcu ci50IG1vZGUgcmVhZGluZyB3aWxsIGJlIHRha2VuIGFzIHBhcnQgb2YKPiBwYXRjaC8xMDMxMDE0 LyBvciBzaGFsbCBpIGNvbnRpbnVlIGluIGN1cnJlbnQgcGF0Y2ggc2VyaWVzCgpJIHdvdWxkIHN1 Z2dlc3QgdGhhdCB5b3UgZWl0aGVyIHN0aWNrIHdpdGggdGhpcyBwYXRjaCBvciByZXBsYWNlIGl0 IHdpdGgKdGhlIGFib3ZlIGZvciBub3cuIElmIHRoZSBhYm92ZSBzZXJpZXMgZ29lcyBpbiBmaXJz dCwgeW91IGNhbiByZWJhc2UKeW91ciBzZXJpZXMgb24gdG9wIG9mIGl0IGFuZCBkcm9wIHRoZSBk dXBsaWNhdGUgcGF0Y2guIElmIHlvdXIgc2VyaWVzCmdvZXMgaW4gZmlyc3QsIHRoZW4gdGhlIGFi b3ZlIHNlcmllcyB3aWxsIG5lZWQgdG8gYmUgcmViYXNlZCBhbmQgZHJvcAp0aGUgZHVwbGljYXRl IHBhdGNoLgoKPiA+PiArdm9pZCB0ZWdyYV9waHlfeHVzYl91dG1pX3BhZF9wb3dlcl9vbihzdHJ1 Y3QgcGh5ICpwaHkpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCB0ZWdyYV94dXNiX2xhbmUgKmxhbmUg PSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKPiA+PiArCXN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAq cGFkY3RsID0gbGFuZS0+cGFkLT5wYWRjdGw7Cj4gPj4gKwo+ID4+ICsJaWYgKHBhZGN0bC0+c29j LT5vcHMtPnV0bWlfcGFkX3Bvd2VyX29uKQo+ID4+ICsJCXBhZGN0bC0+c29jLT5vcHMtPnV0bWlf cGFkX3Bvd2VyX29uKHBoeSk7Cj4gPj4gK30KPiA+PiArRVhQT1JUX1NZTUJPTF9HUEwodGVncmFf cGh5X3h1c2JfdXRtaV9wYWRfcG93ZXJfb24pOwo+ID4+ICsKPiA+PiArdm9pZCB0ZWdyYV9waHlf eHVzYl91dG1pX3BhZF9wb3dlcl9kb3duKHN0cnVjdCBwaHkgKnBoeSkKPiA+PiArewo+ID4+ICsJ c3RydWN0IHRlZ3JhX3h1c2JfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ID4+ ICsJc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwgPSBsYW5lLT5wYWQtPnBhZGN0bDsK PiA+PiArCj4gPj4gKwlpZiAocGFkY3RsLT5zb2MtPm9wcy0+dXRtaV9wYWRfcG93ZXJfZG93bikK PiA+PiArCQlwYWRjdGwtPnNvYy0+b3BzLT51dG1pX3BhZF9wb3dlcl9kb3duKHBoeSk7Cj4gPj4g K30KPiA+PiArRVhQT1JUX1NZTUJPTF9HUEwodGVncmFfcGh5X3h1c2JfdXRtaV9wYWRfcG93ZXJf ZG93bik7Cj4gPiAKPiA+IEkgYWxyZWFkeSBicmllZmx5IHRvdWNoZWQgb24gdGhpcyBlYXJsaWVy LCBidSB3aHkgZG8gdGhlc2UgaGF2ZSB0byBiZQo+ID4gZXhwb3J0ZWQgZnVuY3Rpb25zPyBDYW4n dCB0aGVzZSBzaW1wbHkgYmUgYWJzdHJhY3RlZCBiZWhpbmQgdGhlIFBIWQo+ID4gYWJzdHJhY3Rp b24/Cj4gPiAKPiAKPiB5ZXMsIHRoZXkgY2FuIGJlIHBhcnQgb2YgcGh5X3Bvd2VyX3h4eCgpLiBX aWxsIHJlbW92ZQo+IHRlZ3JhX3BoeV94dXNiX3V0bWlfcGFkX3Bvd2VyX3h4IGV4cG9ydCBmdW5j dGlvbnMKCkV4Y2VsbGVudCEKClsuLi5dCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv cGh5L3RlZ3JhL3h1c2IuaCBiL2luY2x1ZGUvbGludXgvcGh5L3RlZ3JhL3h1c2IuaAo+ID4+IGlu ZGV4IDhlMWE1N2EuLjE0M2FmNDQgMTAwNjQ0Cj4gPj4gLS0tIGEvaW5jbHVkZS9saW51eC9waHkv dGVncmEveHVzYi5oCj4gPj4gKysrIGIvaW5jbHVkZS9saW51eC9waHkvdGVncmEveHVzYi5oCj4g Pj4gQEAgLTEsNSArMSw1IEBACj4gPj4gIC8qCj4gPj4gLSAqIENvcHlyaWdodCAoYykgMjAxNiwg TlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+PiArICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMTgsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gPj4gICAqCj4gPj4gICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4gPj4gICAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4g Pj4gQEAgLTI2LDUgKzI2LDEwIEBAIGludCB0ZWdyYV94dXNiX3BhZGN0bF9oc2ljX3NldF9pZGxl KHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+ID4+ICAJCQkJICAgIHVuc2lnbmVk IGludCBwb3J0LCBib29sIGlkbGUpOwo+ID4+ICBpbnQgdGVncmFfeHVzYl9wYWRjdGxfdXNiM19z ZXRfbGZwc19kZXRlY3Qoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwsCj4gPj4gIAkJ CQkJICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgZW5hYmxlKTsKPiA+PiAraW50IHRlZ3JhX3h1 c2JfcGFkY3RsX3NldF92YnVzX292ZXJyaWRlKHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFk Y3RsKTsKPiA+PiAraW50IHRlZ3JhX3h1c2JfcGFkY3RsX2NsZWFyX3ZidXNfb3ZlcnJpZGUoc3Ry dWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpOwo+ID4+ICAKPiA+PiArdm9pZCB0ZWdyYV9w aHlfeHVzYl91dG1pX3BhZF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpOwo+ID4+ICt2b2lkIHRl Z3JhX3BoeV94dXNiX3V0bWlfcGFkX3Bvd2VyX2Rvd24oc3RydWN0IHBoeSAqcGh5KTsKPiA+PiAr aW50IHRlZ3JhX3BoeV94dXNiX3V0bWlfcG9ydF9yZXNldF9xdWlyayhzdHJ1Y3QgcGh5ICpwaHkp Owo+ID4gCj4gPiBXZSBhbHJlYWR5IGhhdmUgbW9yZSBjdXN0b20gQVBJcyBoZXJlIHRoYW4gSSdk IGxpa2UsIHNvIEkgcmVhbGx5IHdhbnQgdG8KPiA+IG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIG5vdCBh ZGRpbmcgdG8gdGhlc2UgaWYgbm90IGFic29sdXRlbHkgbmVjZXNzYXJ5Lgo+ID4gCj4gPiBBcmUg dGhlcmUgYW55IHJlYXNvbnMgd2h5IHdlIGNhbid0IHNvbWVob3cgaGlkZSB0aGVzZSBiZWhpbmQg dGhlCj4gPiBleGlzdGluZyBQSFkgZnJhbWV3b3JrPwo+ID4gCj4gPiB0ZWdyYV9waHlfeHVzYl91 dG1pX3BvcnRfcmVzZXRfcXVpcmsoKSBzZWVtcyBsaWtlIHNvbWV0aGluZyB0aGF0IHdlIG1heQo+ ID4gYmUgYWJsZSB0byBpbXBsZW1lbnQgdXNpbmcgdGhlIHBoeV9vcHMtPnJlc2V0KCkgY2FsbGJh Y2suIFRoZSBwb3dlcl9vbigpCj4gPiBhbmQgcG93ZXJfb2ZmKCkgZm9yIHRoZSBVVE1JIHBhZCBz ZWVtIGxpa2UgdGhleSBzaG91bGQgYmUganVzdCBwYXJ0IG9mCj4gPiB0aGUgcmVndWxhciBwYWQg LT5wb3dlcl9vbigpIGFuZCAtPnBvd2VyX29mZigpIGNhbGxiYWNrIGltcGxlbWVudGF0aW9ucwo+ ID4gKHBlcmhhcHMgdGhpcyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW50cm9kdWNlIGFub3RoZXIg cGFkIGZvciB0aGlzPykuCj4gPiAKPiAKPiBBcyBtZW50aW9uZWQgZWFybGllciwgd2lsbCBtb3Zl IHV0bWkgcGFkIGFuZCB1dG1pIGJpYXMgcGFkIHBvd2VyIGZ1bmN0aW9uCj4gY2FuIGJlIHRvIHBo eSBwb3dlciBmdW5jdGlvbnMuCj4gCj4gdGVncmFfcGh5X3h1c2JfdXRtaV9wb3J0X3Jlc2V0X3F1 aXJrKCkgZG9lcyBhIHZidXMgb3ZlcnJpZGUgb25seSBvbiBhIHNwZWNpZmljCj4gY29uZGl0aW9u LCBzbyBpdCBjYW5ub3QgYmUgZGlyZWN0IHJlcGxhY2VtZW50IG9mIHBoeV9vcHMtPnJlc2V0LgoK SWYgWFVEQyBpcyB0aGUgb25seSB1c2VyIG9mIHRoZSBQSFksIHRoZW4gaXQgY2FuIGNhbGwgcGh5 X3Jlc2V0KCkgb24gdGhlClBIWSBhdCBhbnkgdGltZSB0aGF0IGl0IHdhbnRzLCBzbyBpdCBjb3Vs ZCBiZSBhIHJlcGxhY2VtZW50IGZvciB0aGUKY3VzdG9tIEFQSSBpZiB3ZSBjaG9vc2UgdG8uCgpU aGF0IHNhaWQsIGl0IHNlZW1zIGxpa2UgdGhpcyBhY3R1YWxseSBvcGVyYXRlcyBvbiB0aGUgInBv cnQiIHJlZ2lzdGVycwpyYXRoZXIgdGhhbiB0aGUgInBhZCIgcmVnaXN0ZXJzLCBzbyBwaHlfcmVz ZXQoKSBtaWdodCBub3QgYmUgdGhlIGJlc3QKY2FuZGlkYXRlIGFmdGVyIGFsbCwgc2luY2UgdGhl IFBIWXMgcmVhbGx5IG9ubHkgZGVhbCB3aXRoIHBhZHMuCgo+ID4gU2V0L2NsZWFyIFZCVVMgb3Zl cnJpZGUgc2VlbXMgbGlrZSBtYXliZSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBoaWRkZW4KPiA+ IGJlaGluZCBwaHlfb3BzLT5jb25maWd1cmUoKS4gVGhpcyBpcyBhIGZhaXJseSByZWNlbnQgYWRk aXRpb24sIGJ1dAo+ID4gc291bmRzIGxpa2Ugd2UgY291bGQgYWxzbyBwdXNoIHRoaW5ncyBsaWtl IEhTSUMgaWRsZSBhbmQgVVNCMyBMUEZTCj4gPiBkZXRlY3Rpb24gaW50byB0aGF0Lgo+ID4gCj4g QUZBSVUsIHdlIGNhbiBub3QgdXNlIHBoeV9vcHMtPmNvbmZpZ3VyZSgpLCBzaW5jZSB0aGUgc2Ft ZSBoYXMgZW51bSBhcmd1bWVudAo+IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHksIHdoaWNo IGlzIG5vdCBpbmxpbmUgd2l0aCBuZWVkcyBvZiB2YnVzIG92ZXJyaWRlLgo+IEFsc28sIEFQSSBp cyBub3QgcHJlc2VudCBpbiBjdXJyZW50IGtlcm5lbC4KClRoZSBBUEkgaXMgcGFydCBvZiBsaW51 eC1uZXh0LCBzbyB5b3UgY291bGQgcmViYXNlIHRoZSBzZXJpZXMgb24gdGhhdAphbmQgdXNlIGl0 LiBBbHNvLCB3aGF0IEkgd2FzIHN1Z2dlc3RpbmcgaXMgdGhhdCB3ZSBjb3VsZCBleHRlbmQgdGhl IG5ldwpjb25maWd1cmUgaG9vayB3aXRoIG9wdGlvbnMgdGhhdCBjYW4gbW9kZWwgdGhlIFZCVVMg b3ZlcnJpZGUKZnVuY3Rpb25hbGl0eS4gQnV0IEkgYWxzbyByZWFsaXplIHRoYXQgaXQgbWF5IGJl IGEgYml0IG9mIGEgc3RyZXRjaCB0bwpjb25zaWRlciB0aGUgVkJVUyBvdmVycmlkZSBjb25maWd1 cmF0aW9uLiBBZ2FpbiwgaXQncyBhbHNvIGRlYWxpbmcgd2l0aAphIHByb3BlcnR5IHRoYXQncyBt b3JlIGluIHRoZSBkb21haW4gb2YgdGhlIHBvcnQgcmF0aGVyIHRoYW4gdGhlIFBIWSwgc28KcGh5 X2NvbmZpZ3VyZSgpIG1heSBub3QgYmUgYSBnb29kIGNhbmRpZGF0ZSBhZnRlciBhbGwuCgo+IFNv IGkgYmVsZWl2ZSB3ZSBuZWVkIHRvIHN0YXkgd2l0aCB2YnVzIG92ZXJyaWRlIEFQSSwgd2hpY2gg aW5zdGVhZCBvZiAyLCB3aWxsCj4gZXhwb3J0IDEoYW5kIHRha2UgYXJndW1lbnQgYXMgc2V0L2Ns ZWFyKSBhbmQgb3RoZXIgcG9ydF9yZXNldF9xdWlyawoKU291bmRzIGdvb2QuIEFsdGhvdWdoIEkn bSB3b25kZXJpbmcgaWYgcGVyaGFwcyB0aGUgbmFtZSBjb3VsZCBiZSBtYWRlIGEKYml0IG1vcmUg Z2VuZXJpYy4gV2hhdCBpZiB3ZSBjYWxsZWQgdGhlIFZCVVMgb3ZlcnJpZGUgQVBJcyBzb21ldGhp bmcKbGlrZToKCglpbnQgdGVncmFfeHVzYl9wYWRjdGxfc2V0X290Z19tb2RlKHN0cnVjdCB0ZWdy YV94dXNiX3BhZGN0bCAqcGFkY3RsLAoJCQkJCSAgIGVudW0gdXNiX2RyX21vZGUgbW9kZSk7CgpU aGF0IHdheSB3ZSBhdm9pZCBoYXZpbmcgYSBib29sZWFuIGFyZ3VtZW50LiBJIGZpbmQgdGhvc2Ug c29tZXdoYXQKYW5ub3lpbmcgYmVjYXVzZSB5b3UgY2FuJ3QgaW1tZWRpYXRlbHkgc2VlIGZyb20g dGhlIGNhbGxzaXRlIHdoYXQgdGhleQptZWFuLiBJdCdzIGZhaXJseSBjbGVhciBpbiB0aGlzIGNh c2UsIGJ1dDoKCgl0ZWdyYV94dXNiX3BhZGN0bF9zZXRfb3RnX21vZGUocGFkY3RsLCBVU0JfRFJf TU9ERV9QRVJJUEhFUkFMKTsKCmlzIGV2ZW4gY2xlYXJlci4gQW5kIGl0IGhhcyB0aGUgYWRkZWQg YmVuZWZpdCB0aGF0IHdlIGNhbiBhZGQgbW9yZSBjb2RlCnRvIGl0IGlmIHdlIG5lZWQgdG8gd2l0 aG91dCBtYWtpbmcgdGhlIG5hbWUgYW1iaWd1b3VzLgoKQWdhaW4sIHRoaXMgaXNuJ3QgYSBzdHJv bmcgb2JqZWN0aW9uLCBzbyBpZiB5b3UgcHJlZmVyIHRvIGtlZXAgdGhlCnRlZ3JhX3h1c2JfcGFk Y3RsX3NldF92YnVzX292ZXJyaWRlKHBhZGN0bCwgdHJ1ZS9mYWxzZSksIGZlZWwgZnJlZSB0byBk bwpzby4KClRoaWVycnkK