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: [5/5] usb: typec: ucsi: Support for DisplayPort alt mode From: Ajay Gupta Message-Id: Date: Tue, 5 Feb 2019 01:03:58 +0000 To: Heikki Krogerus , Greg Kroah-Hartman , Michael Hsu Cc: "linux-usb@vger.kernel.org" List-ID: SGkgSGVpa2tpLAoKPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IGxpbnV4LXVz Yi1vd25lckB2Z2VyLmtlcm5lbC5vcmcgPGxpbnV4LXVzYi1vd25lckB2Z2VyLmtlcm5lbC5vcmc+ IE9uCj4gQmVoYWxmIE9mIEhlaWtraSBLcm9nZXJ1cwo+IFNlbnQ6IEZyaWRheSwgRmVicnVhcnkg MSwgMjAxOSAyOjQ4IEFNCj4gVG86IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91 bmRhdGlvbi5vcmc+OyBBamF5IEd1cHRhCj4gPGFqYXlnQG52aWRpYS5jb20+OyBNaWNoYWVsIEhz dSA8bWhzdUBudmlkaWEuY29tPgo+IENjOiBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCj4gU3Vi amVjdDogW1BBVENIIDUvNV0gdXNiOiB0eXBlYzogdWNzaTogU3VwcG9ydCBmb3IgRGlzcGxheVBv cnQgYWx0IG1vZGUKPiAKPiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJpbmQgYSBkcml2ZXIg dG8gYSBEaXNwbGF5UG9ydCBhbHQgbW9kZSBhZGFwdGVyIGRldmljZXMuCj4gCj4gVGhlIGRyaXZl ciBhdHRlbXB0cyB0byBjb3BlIHdpdGggdGhlIGxpbWl0YXRpb25zIG9mIFVDU0kgYnkgImVtdWxh dGluZyIKPiBiZWhhdmlvdXIgYW5kIGF0dGVtcHRpbmcgdG8gZ3Vlc3MgdGhpbmdzIHdoZW4gZXZl ciBwb3NzaWJsZSBpbiBvcmRlciB0byBzYXRpc2Z5Cj4gdGhlIHJlcXVpcmVtZW50cyB0aGUgc3Rh bmRhcmQgRGlzcGxheVBvcnQgYWx0IG1vZGUgZHJpdmVyIGhhcy4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+Cj4gLS0t Cj4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgICAgICB8ICAxNSArLQo+ICBkcml2 ZXJzL3VzYi90eXBlYy91Y3NpL2Rpc3BsYXlwb3J0LmMgfCAzMDEgKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaS5jICAgICAgICB8ICAyMiAr LQo+ICBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuaCAgICAgICAgfCAgMjEgKysKPiAgNCBm aWxlcyBjaGFuZ2VkLCAzNTEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkgIGNyZWF0ZSBt b2RlIDEwMDY0NAo+IGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvZGlzcGxheXBvcnQuYwo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlIGIvZHJpdmVycy91c2Iv dHlwZWMvdWNzaS9NYWtlZmlsZQo+IGluZGV4IDJmNDkwMGIyNjIxMC4uYjM1ZTE1YTFmMDJjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlCj4gQEAgLTEsMTIgKzEsMTUgQEAKPiAgIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC1DRkxBR1NfdHJhY2UubwkJCTo9IC1JJChz cmMpCj4gK0NGTEFHU190cmFjZS5vCQkJCTo9IC1JJChzcmMpCj4gCj4gLW9iai0kKENPTkZJR19U WVBFQ19VQ1NJKQkrPSB0eXBlY191Y3NpLm8KPiArb2JqLSQoQ09ORklHX1RZUEVDX1VDU0kpCQkr PSB0eXBlY191Y3NpLm8KPiAKPiAtdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5vCj4gK3R5cGVjX3Vj c2kteQkJCQk6PSB1Y3NpLm8KPiAKPiAtdHlwZWNfdWNzaS0kKENPTkZJR19UUkFDSU5HKQkrPSB0 cmFjZS5vCj4gK3R5cGVjX3Vjc2ktJChDT05GSUdfVFJBQ0lORykJCSs9IHRyYWNlLm8KPiAKPiAt b2JqLSQoQ09ORklHX1VDU0lfQUNQSSkJCSs9IHVjc2lfYWNwaS5vCj4gK2lmbmVxICgkKENPTkZJ R19UWVBFQ19EUF9BTFRNT0RFKSwpCj4gKwl0eXBlY191Y3NpLXkJCQkrPSBkaXNwbGF5cG9ydC5v Cj4gK2VuZGlmCj4gCj4gLW9iai0kKENPTkZJR19VQ1NJX0NDRykJCSs9IHVjc2lfY2NnLm8KPiAr b2JqLSQoQ09ORklHX1VDU0lfQUNQSSkJCQkrPSB1Y3NpX2FjcGkubwo+ICtvYmotJChDT05GSUdf VUNTSV9DQ0cpCQkJKz0gdWNzaV9jY2cubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBl Yy91Y3NpL2Rpc3BsYXlwb3J0LmMKPiBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvZGlzcGxheXBv cnQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zYzUzMTJj YzcxMzAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9kaXNw bGF5cG9ydC5jCj4gQEAgLTAsMCArMSwzMDEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPiArLyoKPiArICogVUNTSSBEaXNwbGF5UG9ydCBBbHRlcm5hdGUgTW9kZSBT dXBwb3J0Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24K PiArICogQXV0aG9yOiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRl bC5jb20+ICAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBlY19kcC5oPgo+ICsjaW5j bHVkZSA8bGludXgvdXNiL3BkX3Zkby5oPgo+ICsKPiArI2luY2x1ZGUgInVjc2kuaCIKPiArCj4g KyNkZWZpbmUgVUNTSV9DTURfU0VUX05FV19DQU0oX2Nvbl9udW1fLCBfZW50ZXJfLCBfY2FtXywg X2FtXykKPiAJCVwKPiArCSAoVUNTSV9TRVRfTkVXX0NBTSB8ICgoX2Nvbl9udW1fKSA8PCAxNikg fCAoKF9lbnRlcl8pIDw8IDIzKSB8Cj4gCVwKPiArCSAgKChfY2FtXykgPDwgMjQpIHwgKCh1NjQp KF9hbV8pIDw8IDMyKSkKPiArCj4gK3N0cnVjdCB1Y3NpX2RwIHsKPiArCXN0cnVjdCB0eXBlY19k aXNwbGF5cG9ydF9kYXRhIGRhdGE7Cj4gKwlzdHJ1Y3QgdWNzaV9jb25uZWN0b3IgKmNvbjsKPiAr CXN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQ7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsK PiArCWludCBvZmZzZXQ7Cj4gKwo+ICsJYm9vbCBvdmVycmlkZTsKPiArCWJvb2wgaW5pdGlhbGl6 ZWQ7Cj4gKwo+ICsJdTMyIGhlYWRlcjsKPiArCXUzMiAqdmRvX2RhdGE7Cj4gKwl1OCB2ZG9fc2l6 ZTsKPiArfTsKPiArCj4gKy8qCj4gKyAqIE5vdGUuIEFsdGVybmF0ZSBtb2RlIGNvbnRyb2wgaXMg b3B0aW9uYWwgZmVhdHVyZSBpbiBVQ1NJLiBJdCBtZWFucwo+ICt0aGF0IGV2ZW4KPiArICogaWYg dGhlIHN5c3RlbSBzdXBwb3J0cyBhbHRlcm5hdGUgbW9kZXMsIHRoZSBPUyBtYXkgbm90IGJlIGF3 YXJlIG9mIHRoZW0uCj4gKyAqCj4gKyAqIEluIG1vc3QgY2FzZXMgaG93ZXZlciwgdGhlIE9TIHdp bGwgYmUgYWJsZSB0byBzZWUgdGhlIHN1cHBvcnRlZAo+ICthbHRlcm5hdGUKPiArICogbW9kZXMs IGJ1dCBpdCBtYXkgc3RpbGwgbm90IGJlIGFibGUgdG8gY29uZmlndXJlIHRoZW0sIG5vdCBldmVu Cj4gK2VudGVyIG9yIGV4aXQKPiArICogdGhlbS4gVGhhdCBpcyBiZWNhdXNlIFVDU0kgZGVmaW5l cyBhbHQgbW9kZSBkZXRhaWxzIGFuZCBhbHQgbW9kZQo+ICJvdmVycmlkaW5nIgo+ICsgKiBhcyBz ZXBhcmF0ZSBvcHRpb25zLgo+ICsgKgo+ICsgKiBJbiBjYXNlIGFsdCBtb2RlIGRldGFpbHMgYXJl IHN1cHBvcnRlZCwgYnV0IG92ZXJyaWRpbmcgaXMgbm90LCB0aGUKPiArZHJpdmVyCj4gKyAqIHdp bGwgc3RpbGwgZGlzcGxheSB0aGUgc3VwcG9ydGVkIHBpbiBhc3NpZ25tZW50cyBhbmQgY29uZmln dXJhdGlvbiwKPiArYnV0IGFueQo+ICsgKiBjaGFuZ2VzIHRoZSB1c2VyIGF0dGVtcHRzIHRvIGRv IHdpbGwgbGVhZCBpbnRvIGZhaWx1cmUgd2l0aCByZXR1cm4KPiArdmFsdWUgb2YKPiArICogLUVP UE5PVFNVUFAuCj4gKyAqLwo+ICsKPiArc3RhdGljIGludCB1Y3NpX2Rpc3BsYXlwb3J0X2VudGVy KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQpIHsKPiArCXN0cnVjdCB1Y3NpX2RwICpkcCA9IHR5 cGVjX2FsdG1vZGVfZ2V0X2RydmRhdGEoYWx0KTsKPiArCj4gKwltdXRleF9sb2NrKCZkcC0+Y29u LT5sb2NrKTsKPiArCj4gKwlpZiAoIWRwLT5vdmVycmlkZSAmJiBkcC0+aW5pdGlhbGl6ZWQpIHsK PiArCQljb25zdCBzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcCA9Cj4gdHlwZWNfYWx0bW9kZV9nZXRf cGFydG5lcihhbHQpOwo+ICsKPiArCQlkZXZfd2FybigmcC0+ZGV2LAo+ICsJCQkgImZpcm13YXJl IGRvZXNuJ3Qgc3VwcG9ydCBhbHRlcm5hdGUgbW9kZQo+IG92ZXJyaWRpbmdcbiIpOwo+ICsJCW11 dGV4X3VubG9jaygmZHAtPmNvbi0+bG9jayk7Cj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsJ fQo+ICsKPiArCS8qCj4gKwkgKiBXZSBjYW4ndCBzZW5kIHRoZSBOZXcgQ0FNIGNvbW1hbmQgeWV0 IHRvIHRoZSBQUE0gYXMgaXQgbmVlZHMgdGhlCj4gKwkgKiBjb25maWd1cmF0aW9uIHZhbHVlIGFz IHdlbGwuIFByZXRlbmRpbmcgdGhhdCB3ZSBoYXZlIG5vdyBlbnRlcmVkIHRoZQo+ICsJICogbW9k ZSwgYW5kIGxldHRpbmcgdGhlIGFsdCBtb2RlIGRyaXZlciBjb250aW51ZS4KPiArCSAqLwo+ICsK PiArCWRwLT5oZWFkZXIgPSBWRE8oVVNCX1RZUEVDX0RQX1NJRCwgMSwgQ01EX0VOVEVSX01PREUp Owo+ICsJZHAtPmhlYWRlciB8PSBWRE9fT1BPUyhVU0JfVFlQRUNfRFBfTU9ERSk7Cj4gKwlkcC0+ aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX0FDSyk7Cj4gKwo+ICsJZHAtPnZkb19kYXRhID0g TlVMTDsKPiArCWRwLT52ZG9fc2l6ZSA9IDE7Cj4gKwo+ICsJc2NoZWR1bGVfd29yaygmZHAtPndv cmspOwo+ICsKPiArCW11dGV4X3VubG9jaygmZHAtPmNvbi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWNzaV9kaXNwbGF5cG9ydF9leGl0KHN0cnVjdCB0 eXBlY19hbHRtb2RlICphbHQpIHsKPiArCXN0cnVjdCB1Y3NpX2RwICpkcCA9IHR5cGVjX2FsdG1v ZGVfZ2V0X2RydmRhdGEoYWx0KTsKPiArCXN0cnVjdCB1Y3NpX2NvbnRyb2wgY3RybDsKPiArCWlu dCByZXQgPSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmRwLT5jb24tPmxvY2spOwo+ICsKPiArCWlm ICghZHAtPm92ZXJyaWRlKSB7Cj4gKwkJY29uc3Qgc3RydWN0IHR5cGVjX2FsdG1vZGUgKnAgPQo+ IHR5cGVjX2FsdG1vZGVfZ2V0X3BhcnRuZXIoYWx0KTsKPiArCj4gKwkJZGV2X3dhcm4oJnAtPmRl diwKPiArCQkJICJmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgYWx0ZXJuYXRlIG1vZGUKPiBvdmVy cmlkaW5nXG4iKTsKPiArCQlyZXQgPSAtRU9QTk9UU1VQUDsKPiArCQlnb3RvIG91dF91bmxvY2s7 Cj4gKwl9Cj4gKwo+ICsJY3RybC5yYXdfY21kID0gVUNTSV9DTURfU0VUX05FV19DQU0oZHAtPmNv bi0+bnVtLCAwLCBkcC0KPiA+b2Zmc2V0LCAwKTsKPiArCXJldCA9IHVjc2lfc2VuZF9jb21tYW5k KGRwLT5jb24tPnVjc2ksICZjdHJsLCBOVUxMLCAwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdv dG8gb3V0X3VubG9jazsKPiArCj4gKwlkcC0+aGVhZGVyID0gVkRPKFVTQl9UWVBFQ19EUF9TSUQs IDEsIENNRF9FWElUX01PREUpOwo+ICsJZHAtPmhlYWRlciB8PSBWRE9fT1BPUyhVU0JfVFlQRUNf RFBfTU9ERSk7Cj4gKwlkcC0+aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX0FDSyk7Cj4gKwo+ ICsJZHAtPnZkb19kYXRhID0gTlVMTDsKPiArCWRwLT52ZG9fc2l6ZSA9IDE7Cj4gKwo+ICsJc2No ZWR1bGVfd29yaygmZHAtPndvcmspOwo+ICsKPiArb3V0X3VubG9jazoKPiArCW11dGV4X3VubG9j aygmZHAtPmNvbi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiAr ICogV2UgZG8gbm90IGFjdHVhbGx5IGhhdmUgYWNjZXNzIHRvIHRoZSBTdGF0dXMgVXBkYXRlIFZE Tywgc28gd2UgaGF2ZQo+ICt0byBndWVzcwo+ICsgKiB0aGluZ3MuCj4gKyAqLwo+ICtzdGF0aWMg aW50IHVjc2lfZGlzcGxheXBvcnRfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgdWNzaV9kcCAqZHApIHsK PiArCXUzMiBjYXAgPSBkcC0+YWx0LT52ZG87Cj4gKwo+ICsJZHAtPmRhdGEuc3RhdHVzID0gRFBf U1RBVFVTX0VOQUJMRUQ7Cj4gKwo+ICsJLyoKPiArCSAqIElmIHBpbiBhc3NpZ25lbWVudCBEIGlz IHN1cHBvcnRlZCwgY2xhaW1pbmcgYWx3YXlzCj4gKwkgKiB0aGF0IE11bHRpLWZ1bmN0aW9uIGlz IHByZWZlcnJlZC4KPiArCSAqLwo+ICsJaWYgKERQX0NBUF9DQVBBQklMSVRZKGNhcCkgJiBEUF9D QVBfVUZQX0QpIHsKPiArCQlkcC0+ZGF0YS5zdGF0dXMgfD0gRFBfU1RBVFVTX0NPTl9VRlBfRDsK PiArCj4gKwkJaWYgKERQX0NBUF9VRlBfRF9QSU5fQVNTSUdOKGNhcCkgJiBCSVQoRFBfUElOX0FT U0lHTl9EKSkKPiArCQkJZHAtPmRhdGEuc3RhdHVzIHw9IERQX1NUQVRVU19QUkVGRVJfTVVMVElf RlVOQzsKPiArCX0gZWxzZSB7Cj4gKwkJZHAtPmRhdGEuc3RhdHVzIHw9IERQX1NUQVRVU19DT05f REZQX0Q7Cj4gKwo+ICsJCWlmIChEUF9DQVBfREZQX0RfUElOX0FTU0lHTihjYXApICYgQklUKERQ X1BJTl9BU1NJR05fRCkpCj4gKwkJCWRwLT5kYXRhLnN0YXR1cyB8PSBEUF9TVEFUVVNfUFJFRkVS X01VTFRJX0ZVTkM7Cj4gKwl9Cj4gKwo+ICsJZHAtPnZkb19kYXRhID0gJmRwLT5kYXRhLnN0YXR1 czsKPiArCWRwLT52ZG9fc2l6ZSA9IDI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdWNzaV9kaXNwbGF5cG9ydF9jb25maWd1cmUoc3RydWN0IHVjc2lfZHAgKmRwKSB7 Cj4gKwl1MzIgcGlucyA9IERQX0NPTkZfR0VUX1BJTl9BU1NJR04oZHAtPmRhdGEuY29uZik7Cj4g KwlzdHJ1Y3QgdWNzaV9jb250cm9sIGN0cmw7Cj4gKwo+ICsJaWYgKCFkcC0+b3ZlcnJpZGUpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJY3RybC5yYXdfY21kID0gVUNTSV9DTURfU0VUX05FV19DQU0o ZHAtPmNvbi0+bnVtLCAxLCBkcC0KPiA+b2Zmc2V0LAo+ICtwaW5zKTsKPiArCj4gKwlyZXR1cm4g dWNzaV9zZW5kX2NvbW1hbmQoZHAtPmNvbi0+dWNzaSwgJmN0cmwsIE5VTEwsIDApOyB9Cj4gKwo+ ICtzdGF0aWMgaW50IHVjc2lfZGlzcGxheXBvcnRfdmRtKHN0cnVjdCB0eXBlY19hbHRtb2RlICph bHQsCj4gKwkJCQl1MzIgaGVhZGVyLCBjb25zdCB1MzIgKmRhdGEsIGludCBjb3VudCkgewo+ICsJ c3RydWN0IHVjc2lfZHAgKmRwID0gdHlwZWNfYWx0bW9kZV9nZXRfZHJ2ZGF0YShhbHQpOwo+ICsJ aW50IGNtZF90eXBlID0gUERfVkRPX0NNRFQoaGVhZGVyKTsKPiArCWludCBjbWQgPSBQRF9WRE9f Q01EKGhlYWRlcik7Cj4gKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcGRldjsKPiArCj4gKwltdXRl eF9sb2NrKCZkcC0+Y29uLT5sb2NrKTsKPiArCj4gKwlpZiAoIWRwLT5vdmVycmlkZSAmJiBkcC0+ aW5pdGlhbGl6ZWQpIHsKPiArCQljb25zdCBzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcCA9Cj4gdHlw ZWNfYWx0bW9kZV9nZXRfcGFydG5lcihhbHQpOwo+ICsKPiArCQlkZXZfd2FybigmcC0+ZGV2LAo+ ICsJCQkgImZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBhbHRlcm5hdGUgbW9kZQo+IG92ZXJyaWRp bmdcbiIpOwo+ICsJCW11dGV4X3VubG9jaygmZHAtPmNvbi0+bG9jayk7Cj4gKwkJcmV0dXJuIC1F T1BOT1RTVVBQOwo+ICsJfQo+ICsKPiArCXBkZXYgPSB0eXBlY19tYXRjaF9hbHRtb2RlKGRwLT5j b24tPnBhcnRuZXJfYWx0bW9kZSwgLTEsCj4gKwkJCQkgICBhbHQtPnN2aWQsIGFsdC0+bW9kZSk7 Cj4gKwo+ICsJc3dpdGNoIChjbWRfdHlwZSkgewo+ICsJY2FzZSBDTURUX0lOSVQ6Cj4gKwkJZHAt PmhlYWRlciA9IFZETyhVU0JfVFlQRUNfRFBfU0lELCAxLCBjbWQpOwo+ICsJCWRwLT5oZWFkZXIg fD0gVkRPX09QT1MoVVNCX1RZUEVDX0RQX01PREUpOwo+ICsKPiArCQlzd2l0Y2ggKGNtZCkgewo+ ICsJCWNhc2UgRFBfQ01EX1NUQVRVU19VUERBVEU6Cj4gKwkJCWlmICh1Y3NpX2Rpc3BsYXlwb3J0 X3N0YXR1c191cGRhdGUoZHApKQo+ICsJCQkJZHAtPmhlYWRlciB8PSBWRE9fQ01EVChDTURUX1JT UF9OQUspOwo+ICsJCQllbHNlCj4gKwkJCQlkcC0+aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQ X0FDSyk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgRFBfQ01EX0NPTkZJR1VSRToKPiArCQkJZHAt PmRhdGEuY29uZiA9ICpkYXRhOwo+ICsJCQlpZiAodWNzaV9kaXNwbGF5cG9ydF9jb25maWd1cmUo ZHApKSB7Cj4gKwkJCQlkcC0+aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX05BSyk7Cj4gKwkJ CX0gZWxzZSB7Cj4gKwkJCQlkcC0+aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX0FDSyk7Cj4g KwkJCQlpZiAoZHAtPmluaXRpYWxpemVkKQo+ICsJCQkJCXVjc2lfYWx0bW9kZV91cGRhdGVfYWN0 aXZlKGRwLT5jb24pOwo+ICsJCQkJZWxzZQo+ICsJCQkJCWRwLT5pbml0aWFsaXplZCA9IHRydWU7 Cj4gKwkJCX0KPiArCQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJZHAtPmhlYWRlciB8PSBW RE9fQ01EVChDTURUX1JTUF9BQ0spOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCXNjaGVk dWxlX3dvcmsoJmRwLT53b3JrKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7 Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkcC0+Y29uLT5sb2NrKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB0eXBlY19hbHRtb2RlX29wcyB1 Y3NpX2Rpc3BsYXlwb3J0X29wcyA9IHsKPiArCS5lbnRlciA9IHVjc2lfZGlzcGxheXBvcnRfZW50 ZXIsCj4gKwkuZXhpdCA9IHVjc2lfZGlzcGxheXBvcnRfZXhpdCwKPiArCS52ZG0gPSB1Y3NpX2Rp c3BsYXlwb3J0X3ZkbSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHVjc2lfZGlzcGxheXBvcnRf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspIHsKPiArCXN0cnVjdCB1Y3NpX2RwICpkcCA9 IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdWNzaV9kcCwgd29yayk7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCW11dGV4X2xvY2soJmRwLT5jb24tPmxvY2spOwo+ICsKPiArCXJldCA9IHR5cGVjX2Fs dG1vZGVfdmRtKGRwLT5hbHQsIGRwLT5oZWFkZXIsCj4gKwkJCQlkcC0+dmRvX2RhdGEsIGRwLT52 ZG9fc2l6ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIoJmRwLT5hbHQtPmRldiwgIlZETSAw eCV4IGZhaWxlZFxuIiwgZHAtPmhlYWRlcik7Cj4gKwo+ICsJZHAtPnZkb19kYXRhID0gTlVMTDsK PiArCWRwLT52ZG9fc2l6ZSA9IDA7Cj4gKwlkcC0+aGVhZGVyID0gMDsKPiArCj4gKwltdXRleF91 bmxvY2soJmRwLT5jb24tPmxvY2spOwo+ICt9Cj4gKwo+ICt2b2lkIHVjc2lfZGlzcGxheXBvcnRf cmVtb3ZlX3BhcnRuZXIoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdCkgewo+ICsJc3RydWN0IHVj c2lfZHAgKmRwOwo+ICsKPiArCWlmICghYWx0KQo+ICsJCXJldHVybjsKPiArCj4gKwlkcCA9IHR5 cGVjX2FsdG1vZGVfZ2V0X2RydmRhdGEoYWx0KTsKPiArCWRwLT5kYXRhLmNvbmYgPSAwOwo+ICsJ ZHAtPmRhdGEuc3RhdHVzID0gMDsKPiArCWRwLT5pbml0aWFsaXplZCA9IGZhbHNlOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqdWNzaV9yZWdpc3Rlcl9kaXNwbGF5cG9ydChzdHJ1 Y3QgdWNzaV9jb25uZWN0b3IgKmNvbiwKPiArCQkJCQkJYm9vbCBvdmVycmlkZSwgaW50IG9mZnNl dCwKPiArCQkJCQkJc3RydWN0IHR5cGVjX2FsdG1vZGVfZGVzYwo+ICpkZXNjKQo+ICt7Cj4gKwl1 OCBhbGxfYXNzaWdubWVudHMgPSBCSVQoRFBfUElOX0FTU0lHTl9DKSB8IEJJVChEUF9QSU5fQVNT SUdOX0QpIHwKPiArCQkJICAgICBCSVQoRFBfUElOX0FTU0lHTl9FKTsKPiArCXN0cnVjdCB0eXBl Y19hbHRtb2RlICphbHQ7Cj4gKwlzdHJ1Y3QgdWNzaV9kcCAqZHA7Cj4gKwo+ICsJLyogV2UgY2Fu J3QgcmVseSBvbiB0aGUgZmlybXdhcmUgd2l0aCB0aGUgY2FwYWJpbGl0aWVzLiAqLwo+ICsJZGVz Yy0+dmRvIHw9IERQX0NBUF9EUF9TSUdOQUxJTkcgfCBEUF9DQVBfUkVDRVBUQUNMRTsKPiArCj4g KwkvKiBDbGFpbWluZyB0aGF0IHdlIHN1cHBvcnQgYWxsIHBpbiBhc3NpZ25tZW50cyAqLwo+ICsJ ZGVzYy0+dmRvIHw9IGFsbF9hc3NpZ25tZW50cyA8PCA4Owo+ICsJZGVzYy0+dmRvIHw9IGFsbF9h c3NpZ25tZW50cyA8PCAxNjsKPiArCj4gKwlhbHQgPSB0eXBlY19wb3J0X3JlZ2lzdGVyX2FsdG1v ZGUoY29uLT5wb3J0LCBkZXNjKTsKPiArCWlmIChJU19FUlIoYWx0KSkKPiArCQlyZXR1cm4gYWx0 Owo+ICsKPiArCWRwID0gZGV2bV9remFsbG9jKCZhbHQtPmRldiwgc2l6ZW9mKCpkcCksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFkcCkgewo+ICsJCXR5cGVjX3VucmVnaXN0ZXJfYWx0bW9kZShhbHQp Owo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCUlOSVRfV09SSygm ZHAtPndvcmssIHVjc2lfZGlzcGxheXBvcnRfd29yayk7Cj4gKwlkcC0+b3ZlcnJpZGUgPSBvdmVy cmlkZTsKPiArCWRwLT5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwlkcC0+Y29uID0gY29uOwo+ICsJZHAt PmFsdCA9IGFsdDsKPiArCj4gKwlhbHQtPm9wcyA9ICZ1Y3NpX2Rpc3BsYXlwb3J0X29wczsKPiAr CXR5cGVjX2FsdG1vZGVfc2V0X2RydmRhdGEoYWx0LCBkcCk7Cj4gKwo+ICsJcmV0dXJuIGFsdDsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuYyBiL2RyaXZl cnMvdXNiL3R5cGVjL3Vjc2kvdWNzaS5jIGluZGV4Cj4gNTE5MGY4ZGQ0NTQ4Li43NjBkNjllYWEw MjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpLmMKPiArKysgYi9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuYwo+IEBAIC0xMiw3ICsxMiw3IEBACj4gICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gICNpbmNs dWRlIDxsaW51eC9zbGFiLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWNfYWx0bW9kZS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjX2RwLmg+Cj4gCj4gICNpbmNsdWRlICJ1Y3Np LmgiCj4gICNpbmNsdWRlICJ0cmFjZS5oIgo+IEBAIC0yODgsOSArMjg4LDEyIEBAIHN0YXRpYyBp bnQgdWNzaV9yZWdpc3Rlcl9hbHRtb2RlKHN0cnVjdCB1Y3NpX2Nvbm5lY3Rvcgo+ICpjb24sCj4g IAkJCQkgdTggcmVjaXBpZW50KQo+ICB7Cj4gIAlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0Owo+ ICsJYm9vbCBvdmVycmlkZTsKPiAgCWludCByZXQ7Cj4gIAlpbnQgaTsKPiAKPiArCW92ZXJyaWRl ID0gISEoY29uLT51Y3NpLT5jYXAuZmVhdHVyZXMgJgo+IFVDU0lfQ0FQX0FMVF9NT0RFX09WRVJS SURFKTsKPiArCj4gIAlzd2l0Y2ggKHJlY2lwaWVudCkgewo+ICAJY2FzZSBVQ1NJX1JFQ0lQSUVO VF9DT046Cj4gIAkJaSA9IHVjc2lfbmV4dF9hbHRtb2RlKGNvbi0+cG9ydF9hbHRtb2RlKTsKPiBA QCAtMzAyLDcgKzMwNSwxNSBAQCBzdGF0aWMgaW50IHVjc2lfcmVnaXN0ZXJfYWx0bW9kZShzdHJ1 Y3QgdWNzaV9jb25uZWN0b3IKPiAqY29uLAo+ICAJCWRlc2MtPm1vZGUgPSB1Y3NpX2FsdG1vZGVf bmV4dF9tb2RlKGNvbi0+cG9ydF9hbHRtb2RlLAo+ICAJCQkJCQkgICAgZGVzYy0+c3ZpZCk7Cj4g Cj4gLQkJYWx0ID0gdHlwZWNfcG9ydF9yZWdpc3Rlcl9hbHRtb2RlKGNvbi0+cG9ydCwgZGVzYyk7 Cj4gKwkJc3dpdGNoIChkZXNjLT5zdmlkKSB7Cj4gKwkJY2FzZSBVU0JfVFlQRUNfRFBfU0lEOgo+ ICsJCQlhbHQgPSB1Y3NpX3JlZ2lzdGVyX2Rpc3BsYXlwb3J0KGNvbiwgb3ZlcnJpZGUsIGksIGRl c2MpOwo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlhbHQgPSB0eXBlY19wb3J0X3Jl Z2lzdGVyX2FsdG1vZGUoY29uLT5wb3J0LCBkZXNjKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsK PiAgCQlpZiAoSVNfRVJSKGFsdCkpIHsKPiAgCQkJcmV0ID0gUFRSX0VSUihhbHQpOwo+ICAJCQln b3RvIGVycjsKPiBAQCAtMzk4LDYgKzQwOSw3IEBAIHN0YXRpYyBpbnQgdWNzaV9yZWdpc3Rlcl9h bHRtb2RlcyhzdHJ1Y3QgdWNzaV9jb25uZWN0b3IKPiAqY29uLCB1OCByZWNpcGllbnQpICBzdGF0 aWMgdm9pZCB1Y3NpX3VucmVnaXN0ZXJfYWx0bW9kZXMoc3RydWN0IHVjc2lfY29ubmVjdG9yCj4g KmNvbiwgdTggcmVjaXBpZW50KSAgewo+ICAJc3RydWN0IHR5cGVjX2FsdG1vZGUgKiphZGV2Owo+ ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdDsKPiAgCWludCBpID0gMDsKPiAKPiAgCXN3aXRj aCAocmVjaXBpZW50KSB7Cj4gQEAgLTQxMiw2ICs0MjQsMTIgQEAgc3RhdGljIHZvaWQgdWNzaV91 bnJlZ2lzdGVyX2FsdG1vZGVzKHN0cnVjdAo+IHVjc2lfY29ubmVjdG9yICpjb24sIHU4IHJlY2lw aWVudCkKPiAgCX0KPiAKPiAgCXdoaWxlIChhZGV2W2ldKSB7Cj4gKwkJaWYgKHJlY2lwaWVudCA9 PSBVQ1NJX1JFQ0lQSUVOVF9TT1AgJiYKPiArCQkgICAgYWRldltpXS0+c3ZpZCA9PSBVU0JfVFlQ RUNfRFBfU0lEKSB7Cj4gKwkJCWFsdCA9IHR5cGVjX21hdGNoX2FsdG1vZGUoY29uLT5wb3J0X2Fs dG1vZGUsIC0xLAo+ICsJCQkJCQkgIFVTQl9UWVBFQ19EUF9TSUQsIDEpOwo+ICsJCQl1Y3NpX2Rp c3BsYXlwb3J0X3JlbW92ZV9wYXJ0bmVyKGFsdCk7CiJhbHQiIG1heSBiZSBudWxsIGhlcmUgaW4g Y2FzZXMgd2hlcmUgYXR0YWNoZWQgdHlwZS1DIGRldmljZSBoYXMgRFAgYWx0IG1vZGUgd2hpY2gg aXMgbm90IHN1cHBvcnRlZApieSBjb25uZWN0b3IuIFBsZWFzZSBjaGFuZ2UgYXMKCQkJSWYgKGFs dCkKCQkJCXVjc2lfZGlzcGxheXBvcnRfcmVtb3ZlX3BhcnRuZXIoYWx0KTsKClRoYW5rcwo+IG52 cHVibGljCj4gKwkJfQo+ICAJCXR5cGVjX3VucmVnaXN0ZXJfYWx0bW9kZShhZGV2W2ldKTsKPiAg CQlhZGV2W2krK10gPSBOVUxMOwo+ICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBl Yy91Y3NpL3Vjc2kuaCBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaS5oIGluZGV4Cj4gYzQx NmJhZTRiNWNhLi4wMzZlYmYyNTZjZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMv dWNzaS91Y3NpLmgKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuaAo+IEBAIC00 MDYsNCArNDA2LDI1IEBAIGludCB1Y3NpX3NlbmRfY29tbWFuZChzdHJ1Y3QgdWNzaSAqdWNzaSwg c3RydWN0Cj4gdWNzaV9jb250cm9sICpjdHJsLAo+IAo+ICB2b2lkIHVjc2lfYWx0bW9kZV91cGRh dGVfYWN0aXZlKHN0cnVjdCB1Y3NpX2Nvbm5lY3RvciAqY29uKTsKPiAKPiArI2lmIElTX0VOQUJM RUQoQ09ORklHX1RZUEVDX0RQX0FMVE1PREUpCj4gK3N0cnVjdCB0eXBlY19hbHRtb2RlICoKPiAr dWNzaV9yZWdpc3Rlcl9kaXNwbGF5cG9ydChzdHJ1Y3QgdWNzaV9jb25uZWN0b3IgKmNvbiwKPiAr CQkJICBib29sIG92ZXJyaWRlLCBpbnQgb2Zmc2V0LAo+ICsJCQkgIHN0cnVjdCB0eXBlY19hbHRt b2RlX2Rlc2MgKmRlc2MpOwo+ICsKPiArdm9pZCB1Y3NpX2Rpc3BsYXlwb3J0X3JlbW92ZV9wYXJ0 bmVyKHN0cnVjdCB0eXBlY19hbHRtb2RlICphZGV2KTsKPiArCj4gKyNlbHNlCj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IHR5cGVjX2FsdG1vZGUgKgo+ICt1Y3NpX3JlZ2lzdGVyX2Rpc3BsYXlwb3J0 KHN0cnVjdCB1Y3NpX2Nvbm5lY3RvciAqY29uLAo+ICsJCQkgIGJvb2wgb3ZlcnJpZGUsIGludCBv ZmZzZXQsCj4gKwkJCSAgc3RydWN0IHR5cGVjX2FsdG1vZGVfZGVzYyAqZGVzYykKPiArewo+ICsJ cmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICt1Y3NpX2Rpc3Bs YXlwb3J0X3JlbW92ZV9wYXJ0bmVyKHN0cnVjdCB0eXBlY19hbHRtb2RlICphZGV2KSB7IH0gI2Vu ZGlmCj4gKy8qIENPTkZJR19UWVBFQ19EUF9BTFRNT0RFICovCj4gKwo+ICAjZW5kaWYgLyogX19E UklWRVJfVVNCX1RZUEVDX1VDU0lfSCAqLwo+IC0tCj4gMi4yMC4xCg==