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: [v15,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Heikki Krogerus Message-Id: <20181102133142.GD6543@kuha.fi.intel.com> Date: Fri, 2 Nov 2018 15:31:42 +0200 To: Ajay Gupta Cc: wsa@the-dreams.de, peda@axentia.se, andriy.shevchenko@linux.intel.com, linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org List-ID: T24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMDk6MzY6NTlBTSAtMDcwMCwgQWpheSBHdXB0YSB3cm90 ZToKPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkcyBoYXZlIGEgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBj b250cm9sbGVyCj4gb3ZlciBJMkMgaW50ZXJmYWNlLgo+IAo+IFRoaXMgVUNTSSBJMkMgZHJpdmVy IHVzZXMgSTJDIGJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW5nCj4gd2l0aCBU eXBlLUMgY29udHJvbGxlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBamF5IEd1cHRhIDxhamF5Z0Bu dmlkaWEuY29tPgoKQWNrZWQtYnk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxp bnV4LmludGVsLmNvbT4KCj4gLS0tCj4gQ2hhbmdlcyBmcm9tIHYxIC0+IHYyCj4gCUZpeGVkIGlk ZW50YXRpb24gaW4gZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCj4gQ2hhbmdlcyBmcm9t IHYyIC0+IHYzCj4gCUZpeGVkIG1vc3Qgb2YgY29tbWVudHMgZnJvbSBIZWlra2kKPiAJUmVuYW1l IHVjc2lfaTJjX2NjZy5jIC0+IHVjc2lfY2NnLmMKPiBDaGFuZ2VzIGZyb20gdjMgLT4gdjQKPiAJ Rml4ZWQgY29tbWVudHMgZnJvbSBBbmR5Cj4gQ2hhbmdlcyBmcm9tIHY0IC0+IHY1Cj4gCUZpeGVk IGNvbW1lbnRzIGZyb20gQW5keQo+IENoYW5nZXMgZnJvbSB2NSAtPiB2Ngo+IAlGaXhlZCByZXZp ZXcgY29tbWVudHMgZnJvbSBHcmVnIAo+IENoYW5nZXMgZnJvbSB2NiAtPiB2Nwo+IAlOb25lCj4g Q2hhbmdlcyBmcm9tIHY3IC0+IHY4Cj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVy IAo+IAktIFJlbW92ZWQgZW1wdHkgU1RPUCBtZXNzYWdlCj4gCS0gVXNpbmcgc3RhY2sgbWVtb3J5 IGZvciBpMmNfdHJhbnNmZXIoKQo+IENoYW5nZXMgZnJvbSB2OCAtPiB2OQo+IAlOb25lCj4gQ2hh bmdlcyBmcm9tIHY5IC0+IHYxMAo+IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAK PiAJLSBVc2UgVUNTSSBtYWNyb3MKPiAJLSBDbGVhbnVwcwo+IENoYW5nZXMgZnJvbSB2MTAgLT4g djExCj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyIAo+IAktIENvbWJpbmVkIHR3 byB3cml0ZXMgaW50byBvbmUKPiAJLSBVc2VkIG9mZnNldG9mKCkgZm9yIHVjc2lfZGF0YSBzdHJ1 Y3QKPiBDaGFuZ2VzIGZyb20gdjExIC0+IHYxMgo+IAktIHNvbWUgY2xlYW51cAo+IENoYW5nZXMg ZnJvbSB2MTIgLT4gdjEzCj4gCS0gY2hhbmdlZCAidTggYnVmWzFdIiAtPiAidTggZGF0YSIKPiBD aGFuZ2VzIGZyb20gdjEzIC0+IHYxNAo+IAktIEZpeGVkIGNvbW1lbmQgZnJvbSBIZWlra2kgYW5k IEFuZHkKPiAJLSBBZGRlZCBpMmMgYWRhcHRlcnMgcXVpcmtzIGNoZWNrIGluIGNjZ19yZWFkCj4g CS0gUmVtb3ZlZCAiaXJxIiBmaWVsZCBmcm9tIHN0cnVjdCB1Y3NpX2NjZwo+IAktIFJlb3JnYW5p emUgZG8ge30gd2hpbGUgKCk7IGxvb3AKPiBDaGFuZ2VzIGZyb20gdjE0IC0+IHYxNQo+IAktIEZp eCB1bm5lY2Vzc2FyeSBjaGVjayBmb3IgImRhdGEiIGluIHdoaWxlICgpIGNvbmRpdGlvbgo+IAo+ ICBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcgICAgfCAgMTAgKwo+ICBkcml2ZXJzL3Vz Yi90eXBlYy91Y3NpL01ha2VmaWxlICAgfCAgIDIgKwo+ICBkcml2ZXJzL3VzYi90eXBlYy91Y3Np L3Vjc2lfY2NnLmMgfCAzMDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmls ZXMgY2hhbmdlZCwgMzE5IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi90eXBlYy91Y3NpL0tjb25maWcgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcKPiBp bmRleCBlMzZkNmM3M2M0YTQuLjc4MTE4ODgzZjk2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Vz Yi90eXBlYy91Y3NpL0tjb25maWcKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25m aWcKPiBAQCAtMjMsNiArMjMsMTYgQEAgY29uZmlnIFRZUEVDX1VDU0kKPiAgCj4gIGlmIFRZUEVD X1VDU0kKPiAgCj4gK2NvbmZpZyBVQ1NJX0NDRwo+ICsJdHJpc3RhdGUgIlVDU0kgSW50ZXJmYWNl IERyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4Igo+ICsJZGVwZW5kcyBvbiBJMkMKPiArCWhlbHAKPiAr CSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBVQ1NJIHN1cHBvcnQgb24gcGxhdGZvcm1zIHRoYXQgZXhw b3NlIGEKPiArCSAgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyIG92ZXIgSTJDIGludGVy ZmFjZS4KPiArCj4gKwkgIFRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCj4gKwkgIGNhbGxlZCB1Y3NpX2NjZy4KPiArCj4g IGNvbmZpZyBVQ1NJX0FDUEkKPiAgCXRyaXN0YXRlICJVQ1NJIEFDUEkgSW50ZXJmYWNlIERyaXZl ciIKPiAgCWRlcGVuZHMgb24gQUNQSQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91 Y3NpL01ha2VmaWxlIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZQo+IGluZGV4IDdh ZmJlYTUxMjIwNy4uMmY0OTAwYjI2MjEwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL3R5cGVj L3Vjc2kvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlCj4g QEAgLTgsMyArOCw1IEBAIHR5cGVjX3Vjc2kteQkJCTo9IHVjc2kubwo+ICB0eXBlY191Y3NpLSQo Q09ORklHX1RSQUNJTkcpCSs9IHRyYWNlLm8KPiAgCj4gIG9iai0kKENPTkZJR19VQ1NJX0FDUEkp CQkrPSB1Y3NpX2FjcGkubwo+ICsKPiArb2JqLSQoQ09ORklHX1VDU0lfQ0NHKQkJKz0gdWNzaV9j Y2cubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMgYi9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uZGU4YTQzYmRmZjY4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYwo+IEBAIC0wLDAgKzEsMzA3IEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFVDU0kgZHJp dmVyIGZvciBDeXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIKPiArICoKPiArICogQ29weXJp Z2h0IChDKSAyMDE3LTIwMTggTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk Lgo+ICsgKiBBdXRob3I6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Cj4gKyAqCj4gKyAq IFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9hY3Bp LmMKPiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+ICsjaW5jbHVk ZSAidWNzaS5oIgo+ICsKPiArc3RydWN0IHVjc2lfY2NnIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRl djsKPiArCXN0cnVjdCB1Y3NpICp1Y3NpOwo+ICsJc3RydWN0IHVjc2lfcHBtIHBwbTsKPiArCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIENDR1hfUkFCX0lO VFJfUkVHCQkJMHgwNgo+ICsjZGVmaW5lIENDR1hfUkFCX1VDU0lfQ09OVFJPTAkJCTB4MzkKPiAr I2RlZmluZSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0xfU1RBUlQJCUJJVCgwKQo+ICsjZGVmaW5lIEND R1hfUkFCX1VDU0lfQ09OVFJPTF9TVE9QCQlCSVQoMSkKPiArI2RlZmluZSBDQ0dYX1JBQl9VQ1NJ X0RBVEFfQkxPQ0sob2Zmc2V0KQkoMHhmMDAwIHwgKChvZmZzZXQpICYgMHhmZikpCj4gKwo+ICtz dGF0aWMgaW50IGNjZ19yZWFkKHN0cnVjdCB1Y3NpX2NjZyAqdWMsIHUxNiByYWIsIHU4ICpkYXRh LCB1MzIgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVu dDsKPiArCWNvbnN0IHN0cnVjdCBpMmNfYWRhcHRlcl9xdWlya3MgKnF1aXJrcyA9IGNsaWVudC0+ YWRhcHRlci0+cXVpcmtzOwo+ICsJdW5zaWduZWQgY2hhciBidWZbMl07Cj4gKwlzdHJ1Y3QgaTJj X21zZyBtc2dzW10gPSB7Cj4gKwkJewo+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKPiArCQkJ LmZsYWdzICA9IDB4MCwKPiArCQkJLmxlbgk9IHNpemVvZihidWYpLAo+ICsJCQkuYnVmCT0gYnVm LAo+ICsJCX0sCj4gKwkJewo+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKPiArCQkJLmZsYWdz ICA9IEkyQ19NX1JELAo+ICsJCQkuYnVmCT0gZGF0YSwKPiArCQl9LAo+ICsJfTsKPiArCXUzMiBy bGVuLCByZW1fbGVuID0gbGVuLCBtYXhfcmVhZF9sZW4gPSBsZW47Cj4gKwlpbnQgc3RhdHVzOwo+ ICsKPiArCS8qIGNoZWNrIGFueSBtYXhfcmVhZF9sZW4gbGltaXRhdGlvbiBvbiBpMmMgYWRhcHRl ciAqLwo+ICsJaWYgKHF1aXJrcyAmJiBxdWlya3MtPm1heF9yZWFkX2xlbikKPiArCQltYXhfcmVh ZF9sZW4gPSBxdWlya3MtPm1heF9yZWFkX2xlbjsKPiArCj4gKwl3aGlsZSAocmVtX2xlbiA+IDAp IHsKPiArCQltc2dzWzFdLmJ1ZiA9ICZkYXRhW2xlbiAtIHJlbV9sZW5dOwo+ICsJCXJsZW4gPSBt aW5fdCh1MTYsIHJlbV9sZW4sIG1heF9yZWFkX2xlbik7Cj4gKwkJbXNnc1sxXS5sZW4gPSBybGVu Owo+ICsJCXB1dF91bmFsaWduZWRfbGUxNihyYWIsIGJ1Zik7Cj4gKwkJc3RhdHVzID0gaTJjX3Ry YW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7Cj4gKwkJaWYg KHN0YXR1cyA8IDApIHsKPiArCQkJZGV2X2Vycih1Yy0+ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxl ZCAlZFxuIiwgc3RhdHVzKTsKPiArCQkJcmV0dXJuIHN0YXR1czsKPiArCQl9Cj4gKwkJcmFiICs9 IHJsZW47Cj4gKwkJcmVtX2xlbiAtPSBybGVuOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGNjZ193cml0ZShzdHJ1Y3QgdWNzaV9jY2cgKnVjLCB1MTYgcmFi LCB1OCAqZGF0YSwgdTMyIGxlbikKPiArewo+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHVjLT5jbGllbnQ7Cj4gKwl1bnNpZ25lZCBjaGFyICpidWY7Cj4gKwlzdHJ1Y3QgaTJjX21zZyBt c2dzW10gPSB7Cj4gKwkJewo+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKPiArCQkJLmZsYWdz ICA9IDB4MCwKPiArCQl9Cj4gKwl9Owo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlidWYgPSBremFs bG9jKGxlbiArIHNpemVvZihyYWIpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYnVmKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICsKPiArCXB1dF91bmFsaWduZWRfbGUxNihyYWIsIGJ1Zik7Cj4gKwlt ZW1jcHkoYnVmICsgc2l6ZW9mKHJhYiksIGRhdGEsIGxlbik7Cj4gKwo+ICsJbXNnc1swXS5sZW4g PSBsZW4gKyBzaXplb2YocmFiKTsKPiArCW1zZ3NbMF0uYnVmID0gYnVmOwo+ICsKPiArCXN0YXR1 cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykp Owo+ICsJaWYgKHN0YXR1cyA8IDApIHsKPiArCQlkZXZfZXJyKHVjLT5kZXYsICJpMmNfdHJhbnNm ZXIgZmFpbGVkICVkXG4iLCBzdGF0dXMpOwo+ICsJCWtmcmVlKGJ1Zik7Cj4gKwkJcmV0dXJuIHN0 YXR1czsKPiArCX0KPiArCj4gKwlrZnJlZShidWYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdWNzaV9jY2dfaW5pdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKQo+ICt7Cj4gKwl1 bnNpZ25lZCBpbnQgY291bnQgPSAxMDsKPiArCXU4IGRhdGE7Cj4gKwlpbnQgc3RhdHVzOwo+ICsK PiArCWRhdGEgPSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0xfU1RPUDsKPiArCXN0YXR1cyA9IGNjZ193 cml0ZSh1YywgQ0NHWF9SQUJfVUNTSV9DT05UUk9MLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKPiAr CWlmIChzdGF0dXMgPCAwKQo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwo+ICsJZGF0YSA9IENDR1hf UkFCX1VDU0lfQ09OVFJPTF9TVEFSVDsKPiArCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9S QUJfVUNTSV9DT05UUk9MLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKPiArCWlmIChzdGF0dXMgPCAw KQo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwo+ICsJLyoKPiArCSAqIEZsdXNoIENDR3ggUkVTUE9O U0UgcXVldWUgYnkgYWNraW5nIGludGVycnVwdHMuIEFib3ZlIHVjc2kgY29udHJvbAo+ICsJICog cmVnaXN0ZXIgd3JpdGUgd2lsbCBwdXNoIHJlc3BvbnNlIHdoaWNoIG11c3QgYmUgY2xlYXJlZC4K PiArCSAqLwo+ICsJZG8gewo+ICsJCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX1JBQl9JTlRS X1JFRywgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4gKwkJaWYgKHN0YXR1cyA8IDApCj4gKwkJCXJl dHVybiBzdGF0dXM7Cj4gKwo+ICsJCWlmICghZGF0YSkKPiArCQkJcmV0dXJuIDA7Cj4gKwo+ICsJ CXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXplb2Yo ZGF0YSkpOwo+ICsJCWlmIChzdGF0dXMgPCAwKQo+ICsJCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiAr CQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKPiArCX0gd2hpbGUgKC0tY291bnQpOwo+ICsK PiArCXJldHVybiAtRVRJTUVET1VUOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3Nl bmRfZGF0YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKQo+ICt7Cj4gKwl1OCAqcHBtID0gKHU4ICopdWMt PnBwbS5kYXRhOwo+ICsJaW50IHN0YXR1czsKPiArCXUxNiByYWI7Cj4gKwo+ICsJcmFiID0gQ0NH WF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIG1lc3NhZ2Vf b3V0KSk7Cj4gKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIHJhYiwgcHBtICsKPiArCQkJICAgb2Zm c2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9vdXQpLAo+ICsJCQkgICBzaXplb2YodWMt PnBwbS5kYXRhLT5tZXNzYWdlX291dCkpOwo+ICsJaWYgKHN0YXR1cyA8IDApCj4gKwkJcmV0dXJu IHN0YXR1czsKPiArCj4gKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFfQkxPQ0sob2Zmc2V0b2Yo c3RydWN0IHVjc2lfZGF0YSwgY3RybCkpOwo+ICsJcmV0dXJuIGNjZ193cml0ZSh1YywgcmFiLCBw cG0gKyBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjdHJsKSwKPiArCQkJIHNpemVvZih1Yy0+ cHBtLmRhdGEtPmN0cmwpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19yZWN2X2Rh dGEoc3RydWN0IHVjc2lfY2NnICp1YykKPiArewo+ICsJdTggKnBwbSA9ICh1OCAqKXVjLT5wcG0u ZGF0YTsKPiArCWludCBzdGF0dXM7Cj4gKwl1MTYgcmFiOwo+ICsKPiArCXJhYiA9IENDR1hfUkFC X1VDU0lfREFUQV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpKTsKPiArCXN0 YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsIHBwbSArIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEs IGNjaSksCj4gKwkJCSAgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+Y2NpKSk7Cj4gKwlpZiAoc3RhdHVz IDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCXJhYiA9IENDR1hfUkFCX1VDU0lfREFU QV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBtZXNzYWdlX2luKSk7Cj4gKwlyZXR1 cm4gY2NnX3JlYWQodWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVz c2FnZV9pbiksCj4gKwkJCXNpemVvZih1Yy0+cHBtLmRhdGEtPm1lc3NhZ2VfaW4pKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19hY2tfaW50ZXJydXB0KHN0cnVjdCB1Y3NpX2NjZyAq dWMpCj4gK3sKPiArCWludCBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBjaGFyIGRhdGE7Cj4gKwo+ICsJ c3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfUkFCX0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRh dGEpKTsKPiArCWlmIChzdGF0dXMgPCAwKQo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwo+ICsJcmV0 dXJuIGNjZ193cml0ZSh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXplb2YoZGF0YSkp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3N5bmMoc3RydWN0IHVjc2lfcHBtICpw cG0pCj4gK3sKPiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1 Y3QgdWNzaV9jY2csIHBwbSk7Cj4gKwlpbnQgc3RhdHVzOwo+ICsKPiArCXN0YXR1cyA9IHVjc2lf Y2NnX3JlY3ZfZGF0YSh1Yyk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVz Owo+ICsKPiArCS8qIGFjayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRvIHJ1biAq Lwo+ICsJcmV0dXJuIHVjc2lfY2NnX2Fja19pbnRlcnJ1cHQodWMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHVjc2lfY2NnX2NtZChzdHJ1Y3QgdWNzaV9wcG0gKnBwbSwgc3RydWN0IHVjc2lfY29u dHJvbCAqY3RybCkKPiArewo+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRhaW5lcl9vZihw cG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsKPiArCj4gKwlwcG0tPmRhdGEtPmN0cmwucmF3X2Nt ZCA9IGN0cmwtPnJhd19jbWQ7Cj4gKwlyZXR1cm4gdWNzaV9jY2dfc2VuZF9kYXRhKHVjKTsKPiAr fQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGNjZ19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjID0gZGF0YTsKPiArCj4gKwl1Y3Np X25vdGlmeSh1Yy0+dWNzaSk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHVjc2lfY2NnX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4g KwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjOwo+ICsJaW50 IHN0YXR1czsKPiArCXUxNiByYWI7Cj4gKwo+ICsJdWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnVjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXVjKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCXVjLT5wcG0uZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdWNz aV9kYXRhKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXVjLT5wcG0uZGF0YSkKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwl1Yy0+cHBtLmNtZCA9IHVjc2lfY2NnX2NtZDsKPiArCXVjLT5wcG0u c3luYyA9IHVjc2lfY2NnX3N5bmM7Cj4gKwl1Yy0+ZGV2ID0gZGV2Owo+ICsJdWMtPmNsaWVudCA9 IGNsaWVudDsKPiArCj4gKwkvKiByZXNldCBjY2cgZGV2aWNlIGFuZCBpbml0aWFsaXplIHVjc2kg Ki8KPiArCXN0YXR1cyA9IHVjc2lfY2NnX2luaXQodWMpOwo+ICsJaWYgKHN0YXR1cyA8IDApIHsK PiArCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3NpX2NjZ19pbml0IGZhaWxlZCAtICVkXG4iLCBzdGF0 dXMpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJc3RhdHVzID0gZGV2bV9yZXF1 ZXN0X3RocmVhZGVkX2lycShkZXYsIGNsaWVudC0+aXJxLCBOVUxMLAo+ICsJCQkJCSAgIGNjZ19p cnFfaGFuZGxlciwKPiArCQkJCQkgICBJUlFGX09ORVNIT1QgfCBJUlFGX1RSSUdHRVJfSElHSCwK PiArCQkJCQkgICBkZXZfbmFtZShkZXYpLCB1Yyk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ICsJ CWRldl9lcnIodWMtPmRldiwgInJlcXVlc3RfdGhyZWFkZWRfaXJxIGZhaWxlZCAtICVkXG4iLCBz dGF0dXMpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJdWMtPnVjc2kgPSB1Y3Np X3JlZ2lzdGVyX3BwbShkZXYsICZ1Yy0+cHBtKTsKPiArCWlmIChJU19FUlIodWMtPnVjc2kpKSB7 Cj4gKwkJZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9yZWdpc3Rlcl9wcG0gZmFpbGVkXG4iKTsKPiAr CQlyZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7Cj4gKwl9Cj4gKwo+ICsJcmFiID0gQ0NHWF9SQUJf VUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIHZlcnNpb24pKTsKPiAr CXN0YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsICh1OCAqKSh1Yy0+cHBtLmRhdGEpICsKPiArCQkJ ICBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCB2ZXJzaW9uKSwKPiArCQkJICBzaXplb2YodWMt PnBwbS5kYXRhLT52ZXJzaW9uKSk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ICsJCXVjc2lfdW5y ZWdpc3Rlcl9wcG0odWMtPnVjc2kpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJ aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdWMpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4g K3sKPiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsK PiArCj4gKwl1Y3NpX3VucmVnaXN0ZXJfcHBtKHVjLT51Y3NpKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHVjc2lfY2NnX2Rl dmljZV9pZFtdID0gewo+ICsJeyJjY2d4LXVjc2kiLCAwfSwKPiArCXt9Cj4gK307Cj4gK01PRFVM RV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y3NpX2NjZ19kZXZpY2VfaWQpOwo+ICsKPiArc3RhdGljIHN0 cnVjdCBpMmNfZHJpdmVyIHVjc2lfY2NnX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJ Lm5hbWUgPSAidWNzaV9jY2ciLAo+ICsJfSwKPiArCS5wcm9iZSA9IHVjc2lfY2NnX3Byb2JlLAo+ ICsJLnJlbW92ZSA9IHVjc2lfY2NnX3JlbW92ZSwKPiArCS5pZF90YWJsZSA9IHVjc2lfY2NnX2Rl dmljZV9pZCwKPiArfTsKPiArCj4gK21vZHVsZV9pMmNfZHJpdmVyKHVjc2lfY2NnX2RyaXZlcik7 Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOwo+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIlVDU0kgZHJpdmVyIGZvciBDeXByZXNzIENDR3ggVHlwZS1D IGNvbnRyb2xsZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IC0tIAo+IDIuMTcu MQoKdGhhbmtzLAo=