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: [v13,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Heikki Krogerus Message-Id: <20181025081743.GA30828@kuha.fi.intel.com> Date: Thu, 25 Oct 2018 11:17:43 +0300 To: Ajay Gupta Cc: "wsa@the-dreams.de" , "peda@axentia.se" , "linux-usb@vger.kernel.org" , "linux-i2c@vger.kernel.org" , Andy Shevchenko List-ID: SGksCgpPbiBUdWUsIE9jdCAyMywgMjAxOCBhdCAwNjo1Njo1OVBNICswMDAwLCBBamF5IEd1cHRh IHdyb3RlOgo+ID4gPiArCS8qIGkyYyBhZGFwdGVyIChjY2d4LXVjc2kpIGNhbiByZWFkIDQgYnl0 ZSBtYXggKi8KPiA+IAo+ID4gQnkgImkyYyBhZGFwdGVyIiBkbyB5b3UgbWVhbiB0aGlzIEN5cHJl c3MgQ0NHeCBjb250cm9sbGVyLCBvciB0aGUgTlZJRElBIEkyQwo+ID4gaG9zdCBhZGFwdGVyPwo+ IEl0IG1lYW4gTlZJRElBIEkyQyBob3N0IGFkYXB0ZXIgd2l0aCBuYW1lICJjY2d4LXVjc2kiCj4g IAo+ID4gPiArCXdoaWxlIChyZW1fbGVuID4gMCkgewo+ID4gPiArCQltc2dzWzFdLmJ1ZiA9ICZk YXRhW2xlbiAtIHJlbV9sZW5dOwo+ID4gPiArCQlybGVuID0gbWluX3QodTE2LCByZW1fbGVuLCA0 KTsKPiA+IAo+ID4gSSBndWVzcyB0aGlzIGlzIHdoZXJlIHlvdSBjaGVjayBmb3IgdGhhdCA0IGJ5 dGVzLgo+ID4gCj4gPiBJJ20gZ3Vlc3NpbmcgdGhpcyBsaW1pdGF0aW9uIGlzIGZvciB0aGUgTlZJ RElBIEkyQyBob3N0IGFkYXB0ZXIuCj4gQ29ycmVjdAo+IAo+ID4gSWYgdGhhdCBpcyB0aGUgY2Fz ZSB0aGFuIHRoaXMgZHJpdmVyIHJlYWxseSBzaG91bGQgbm90IGNhcmUgYWJvdXQgaXQuCj4gSSBn b3QgeW91ciBwb2ludCBidXQgbmVlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGdyYWNlZnVsbHkuCj4g Cj4gSSB0aGluayBiZXN0IHdheSB0byBoYW5kbGUgdGhpcyBpcyB0byBhZGQgYSBydW50aW1lIGNo ZWNrIHRvIGZpbmQgCj4gSTJDIGFkYXB0ZXIncyBxdWlyayBhbmQgdXNlIHF1aXJrcy0+bWF4X3Jl YWRfbGVuIG9mIHRoZSBhZGFwdGVyLgo+IEhvdyBkb2VzIGJlbG93IGxvb2s/Cj4gCj4gQEAgLTI0 Nyw2ICsyNDcsNyBAQCBzdHJ1Y3QgdWNzaV9jY2cgewo+ICBzdGF0aWMgaW50IGNjZ19yZWFkKHN0 cnVjdCB1Y3NpX2NjZyAqdWMsIHUxNiByYWIsIHU4ICpkYXRhLCB1MzIgbGVuKQo+ICB7Cj4gICAg ICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsKPiArICAgICAgIGNv bnN0IHN0cnVjdCBpMmNfYWRhcHRlcl9xdWlya3MgKnF1aXJrcyA9IGNsaWVudC0+YWRhcHRlci0+ cXVpcmtzOwo+ICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbMl07Cj4gICAgICAgICBzdHJ1Y3Qg aTJjX21zZyBtc2dzW10gPSB7Cj4gICAgICAgICAgICAgICAgIHsKPiBAQCAtMjYxLDEzICsyNjIs MTYgQEAgc3RhdGljIGludCBjY2dfcmVhZChzdHJ1Y3QgdWNzaV9jY2cgKnVjLCB1MTYgcmFiLCB1 OCAqZGF0YSwgdTMyIGxlbikKPiAgICAgICAgICAgICAgICAgICAgICAgICAuYnVmICAgID0gZGF0 YSwKPiAgICAgICAgICAgICAgICAgfSwKPiAgICAgICAgIH07Cj4gLSAgICAgICB1MzIgcmxlbiwg cmVtX2xlbiA9IGxlbjsKPiArICAgICAgIHUzMiBybGVuLCByZW1fbGVuID0gbGVuLCBtYXhfcmVh ZF9sZW4gPSBsZW47Cj4gICAgICAgICBpbnQgc3RhdHVzOwo+IAo+IC0gICAgICAgLyogaTJjIGFk YXB0ZXIgKGNjZ3gtdWNzaSkgY2FuIHJlYWQgNCBieXRlIG1heCAqLwo+ICsgICAgICAgLyogY2hl Y2sgYW55IG1heF9yZWFkX2xlbiBsaW1pdGF0aW9uIG9uIGkyYyBhZGFwdGVyICovCj4gKyAgICAg ICBpZiAocXVpcmtzICYmIHF1aXJrcy0+bWF4X3JlYWRfbGVuKQo+ICsgICAgICAgICAgICAgICBt YXhfcmVhZF9sZW4gPSBxdWlya3MtPm1heF9yZWFkX2xlbjsKPiArCj4gICAgICAgICB3aGlsZSAo cmVtX2xlbiA+IDApIHsKPiAgICAgICAgICAgICAgICAgbXNnc1sxXS5idWYgPSAmZGF0YVtsZW4g LSByZW1fbGVuXTsKPiAtICAgICAgICAgICAgICAgcmxlbiA9IG1pbl90KHUxNiwgcmVtX2xlbiwg NCk7Cj4gKyAgICAgICAgICAgICAgIHJsZW4gPSBtaW5fdCh1MTYsIHJlbV9sZW4sIG1heF9yZWFk X2xlbik7Cj4gICAgICAgICAgICAgICAgIG1zZ3NbMV0ubGVuID0gcmxlbjsKPiAgICAgICAgICAg ICAgICAgcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKPiAgICAgICAgICAgICAgICAgc3Rh dHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dz KSk7Cj4gCj4gPiBXZSBtb3N0IGxpa2VseSBuZWVkIHRvIHVzZSB0aGlzIGRyaXZlciBvbiBvdGhl ciBwbGF0Zm9ybXMgYXMgd2VsbAo+ID4gd2hlcmUgdGhlIEkyQyBob3N0IGlzIHNvbWV0aGluZyBl bHNlLgo+IENvcnJlY3QgYW5kIGFib3ZlIHNvbHV0aW9uIHdvdWxkIG5vdCBpbXBhY3Qgb3RoZXIg STJDIGhvc3QuCgpJIHN0aWxsIGRpZG4ndCB1bmRlcnN0YW5kIHdoeSBjYW4ndCB0aGlzIGp1c3Qg YmUgdGFrZW4gY2FyZSBvZiBpbiB5b3VyCkkyQyBob3N0IGRyaXZlcj8gV2h5IGNhbid0IHlvdSBq dXN0IHJlYWQgNCBieXRlcyBhdCBhIHRpbWUgaW4geW91cgptYXN0ZXJfeGZlciBob29rIHVudGls IHlvdSBoYXZlIHJlY2VpdmVkIGFzIG11Y2ggYXMgdGhlIG1lc3NhZ2UgaXMKYXNraW5nLCBhbmQg b25seSBhZnRlciB0aGF0IHJldHVybj8KCj4gPiA+ICsJCW1zZ3NbMV0ubGVuID0gcmxlbjsKPiA+ ID4gKwkJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKPiA+ID4gKwkJc3RhdHVzID0gaTJj X3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywKPiA+IEFSUkFZX1NJWkUobXNncykpOwo+ ID4gPiArCQlpZiAoc3RhdHVzIDwgMCkgewo+ID4gPiArCQkJZGV2X2Vycih1Yy0+ZGV2LCAiaTJj X3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKPiA+ID4gKwkJCXJldHVybiBzdGF0dXM7 Cj4gPiA+ICsJCX0KPiA+ID4gKwkJcmFiICs9IHJsZW47Cj4gPiA+ICsJCXJlbV9sZW4gLT0gcmxl bjsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArc3RhdGljIGludCBjY2dfd3JpdGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwg dTggKmRhdGEsIHUzMiBsZW4pCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHVjLT5jbGllbnQ7Cj4gPiA+ICsJdW5zaWduZWQgY2hhciAqYnVmOwo+ID4gPiArCXN0 cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKPiA+ID4gKwkJewo+ID4gPiArCQkJLmFkZHIJPSBjbGll bnQtPmFkZHIsCj4gPiA+ICsJCQkuZmxhZ3MgID0gMHgwLAo+ID4gPiArCQl9Cj4gPiA+ICsJfTsK PiA+ID4gKwlpbnQgc3RhdHVzOwo+ID4gPiArCj4gPiA+ICsJYnVmID0ga3phbGxvYyhsZW4gKyBz aXplb2YocmFiKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFidWYpCj4gPiA+ICsJCXJldHVy biAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsK PiA+ID4gKwltZW1jcHkoYnVmICsgc2l6ZW9mKHJhYiksIGRhdGEsIGxlbik7Cj4gPiA+ICsKPiA+ ID4gKwltc2dzWzBdLmxlbiA9IGxlbiArIHNpemVvZihyYWIpOwo+ID4gPiArCW1zZ3NbMF0uYnVm ID0gYnVmOwo+ID4gPiArCj4gPiA+ICsJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRh cHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7Cj4gPiA+ICsJaWYgKHN0YXR1cyA8IDApIHsK PiA+ID4gKwkJZGV2X2Vycih1Yy0+ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3Rh dHVzKTsKPiA+ID4gKwkJa2ZyZWUoYnVmKTsKPiA+ID4gKwkJcmV0dXJuIHN0YXR1czsKPiA+ID4g Kwl9Cj4gPiA+ICsKPiA+ID4gKwlrZnJlZShidWYpOwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiAr fQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2Nn ICp1Yykgewo+ID4gPiArCXVuc2lnbmVkIGludCBjb3VudCA9IDEwOwo+ID4gPiArCXU4IGRhdGE7 Cj4gPiA+ICsJaW50IHN0YXR1czsKPiA+ID4gKwo+ID4gPiArCWRhdGEgPSBDQ0dYX1JBQl9VQ1NJ X0NPTlRST0xfU1RPUDsKPiA+ID4gKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfUkFCX1VD U0lfQ09OVFJPTCwgJmRhdGEsCj4gPiBzaXplb2YoZGF0YSkpOwo+ID4gPiArCWlmIChzdGF0dXMg PCAwKQo+ID4gPiArCQlyZXR1cm4gc3RhdHVzOwo+ID4gPiArCj4gPiA+ICsJZGF0YSA9IENDR1hf UkFCX1VDU0lfQ09OVFJPTF9TVEFSVDsKPiA+ID4gKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIEND R1hfUkFCX1VDU0lfQ09OVFJPTCwgJmRhdGEsCj4gPiBzaXplb2YoZGF0YSkpOwo+ID4gPiArCWlm IChzdGF0dXMgPCAwKQo+ID4gPiArCQlyZXR1cm4gc3RhdHVzOwo+ID4gPiArCj4gPiA+ICsJLyoK PiA+ID4gKwkgKiBGbHVzaCBDQ0d4IFJFU1BPTlNFIHF1ZXVlIGJ5IGFja2luZyBpbnRlcnJ1cHRz LiBBYm92ZSB1Y3NpCj4gPiBjb250cm9sCj4gPiA+ICsJICogcmVnaXN0ZXIgd3JpdGUgd2lsbCBw dXNoIHJlc3BvbnNlIHdoaWNoIG11c3QgYmUgY2xlYXJlZC4KPiA+ID4gKwkgKi8KPiA+ID4gKwlz dGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXplb2YoZGF0 YSkpOwo+ID4gPiArCWlmIChzdGF0dXMgPCAwKQo+ID4gPiArCQlyZXR1cm4gc3RhdHVzOwo+ID4g PiArCWRvIHsKPiA+ID4gKwkJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9JTlRSX1JF RywgJmRhdGEsCj4gPiBzaXplb2YoZGF0YSkpOwo+ID4gPiArCQlpZiAoc3RhdHVzIDwgMCkKPiA+ ID4gKwkJCXJldHVybiBzdGF0dXM7Cj4gPiA+ICsKPiA+ID4gKwkJdXNsZWVwX3JhbmdlKDEwMDAw LCAxMTAwMCk7Cj4gPiA+ICsKPiA+ID4gKwkJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfUkFC X0lOVFJfUkVHLCAmZGF0YSwKPiA+IHNpemVvZihkYXRhKSk7Cj4gPiA+ICsJCWlmIChzdGF0dXMg PCAwKQo+ID4gPiArCQkJcmV0dXJuIHN0YXR1czsKPiA+ID4gKwl9IHdoaWxlICgoZGF0YSAhPSAw eDAwKSAmJiBjb3VudC0tKTsKPiA+IAo+ID4gV2hhdCdzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhh dCBjb3VudD8KPiBJdCBpcyBsaWtlIGEgcmV0cnkgY291bnQgdG8gY2xlYXIgaW50ZXJydXB0IHN0 YXR1cy4KPiAKPiA+IFNob3VsZG4ndCB5b3UgcmV0dXJuIC1FVElNRURPVVQgaWYgY291bnQgPT0g MD8KPiBZZXMuIEdvb2QgY2F0Y2guIERvZXMgdGhlIGJlbG93IGZpeCBsb29rcyBvaz8KPiAKPiAg ICAgICAgIGRvIHsKPiAgICAgICAgICAgICAgICAgc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dY X1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4gICAgICAgICAgICAgICAgIGlm IChzdGF0dXMgPCAwKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Cj4g Cj4gICAgICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApOwo+IAo+ICAgICAg ICAgICAgICAgICBzdGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRh LCBzaXplb2YoZGF0YSkpOwo+ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzIDwgMCkKPiAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwo+IAo+ICAgICAgICAgICAgICAgICBp ZiAoIWRhdGEpCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gICAgICAgICB9 IHdoaWxlIChkYXRhICYmIGNvdW50LS0pOwoKRG9lc24ndCB0aGF0IGNvbmRpdGlvbiBicmVhayBv dXQgb2YgdGhlIGxvb3AgaW1tZWRpYXRlbHk/Cgo+ICAgICAgICAgcmV0dXJuIC1FVElNRURPVVQ7 Cj4gIAo+ID4gU29tZXRoaW5nIGxpa2U6Cj4gPiAKPiA+ICAgICAgICAgLi4uCj4gPiAgICAgICAg IHdoaWxlIChjb3VudC0tKQo+ID4gCQlzdGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NHWF9SQUJfSU5U Ul9SRUcsICZkYXRhLAo+ID4gc2l6ZW9mKGRhdGEpKTsKPiA+IAkJaWYgKHN0YXR1cyA8IDApCj4g PiAJCQlyZXR1cm4gc3RhdHVzOwo+ID4gICAgICAgICAgICAgICAgIGlmICghZGF0YSkKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gCX0KPiA+IAo+ID4gICAgICAgICBy ZXR1cm4gLUVUSU1FRE9VVDsKPiA+IAo+ID4gT3IgZG9lcyB0aGUgY291bnQgb2YgMTAgaGF2ZSBz b21lIHNwZWNpZmljIG1lYW5pbmc/Cj4gPiAKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IGludCB1Y3NpX2NjZ19zZW5kX2RhdGEoc3RydWN0IHVjc2lfY2NnICp1Yykgewo+ID4gPiArCXU4 ICpwcG0gPSAodTggKil1Yy0+cHBtLmRhdGE7Cj4gPiA+ICsJaW50IHN0YXR1czsKPiA+ID4gKwl1 MTYgcmFiOwo+ID4gPiArCj4gPiA+ICsJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9m ZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsCj4gPiBtZXNzYWdlX291dCkpOwo+ID4gPiArCXN0YXR1 cyA9IGNjZ193cml0ZSh1YywgcmFiLCBwcG0gKwo+ID4gPiArCQkJICAgb2Zmc2V0b2Yoc3RydWN0 IHVjc2lfZGF0YSwgbWVzc2FnZV9vdXQpLAo+ID4gPiArCQkJICAgc2l6ZW9mKHVjLT5wcG0uZGF0 YS0+bWVzc2FnZV9vdXQpKTsKPiA+ID4gKwlpZiAoc3RhdHVzIDwgMCkKPiA+ID4gKwkJcmV0dXJu IHN0YXR1czsKPiA+ID4gKwo+ID4gPiArCXJhYiA9IENDR1hfUkFCX1VDU0lfREFUQV9CTE9DSyhv ZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjdHJsKSk7Cj4gPiA+ICsJcmV0dXJuIGNjZ193cml0 ZSh1YywgcmFiLCBwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjdHJsKSwKPiA+ID4g KwkJCSBzaXplb2YodWMtPnBwbS5kYXRhLT5jdHJsKSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVjdl9kYXRhKHN0cnVjdCB1Y3NpX2NjZyAqdWMpIHsKPiA+ ID4gKwl1OCAqcHBtID0gKHU4ICopdWMtPnBwbS5kYXRhOwo+ID4gPiArCWludCBzdGF0dXM7Cj4g PiA+ICsJdTE2IHJhYjsKPiA+ID4gKwo+ID4gPiArCXJhYiA9IENDR1hfUkFCX1VDU0lfREFUQV9C TE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpKTsKPiA+ID4gKwlzdGF0dXMgPSBj Y2dfcmVhZCh1YywgcmFiLCBwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpLAo+ ID4gPiArCQkJICBzaXplb2YodWMtPnBwbS5kYXRhLT5jY2kpKTsKPiA+ID4gKwlpZiAoc3RhdHVz IDwgMCkKPiA+ID4gKwkJcmV0dXJuIHN0YXR1czsKPiA+ID4gKwo+ID4gPiArCXJhYiA9IENDR1hf UkFCX1VDU0lfREFUQV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLAo+ID4gbWVzc2Fn ZV9pbikpOwo+ID4gPiArCXJldHVybiBjY2dfcmVhZCh1YywgcmFiLCBwcG0gKyBvZmZzZXRvZihz dHJ1Y3QgdWNzaV9kYXRhLCBtZXNzYWdlX2luKSwKPiA+ID4gKwkJCXNpemVvZih1Yy0+cHBtLmRh dGEtPm1lc3NhZ2VfaW4pKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB1Y3Np X2NjZ19hY2tfaW50ZXJydXB0KHN0cnVjdCB1Y3NpX2NjZyAqdWMpIHsKPiA+ID4gKwlpbnQgc3Rh dHVzOwo+ID4gPiArCXVuc2lnbmVkIGNoYXIgZGF0YTsKPiA+ID4gKwo+ID4gPiArCXN0YXR1cyA9 IGNjZ19yZWFkKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4g PiA+ICsJaWYgKHN0YXR1cyA8IDApCj4gPiA+ICsJCXJldHVybiBzdGF0dXM7Cj4gPiA+ICsKPiA+ ID4gKwlyZXR1cm4gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVv ZihkYXRhKSk7IH0KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19zeW5jKHN0cnVj dCB1Y3NpX3BwbSAqcHBtKSB7Cj4gPiA+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRhaW5l cl9vZihwcG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsKPiA+ID4gKwlpbnQgc3RhdHVzOwo+ID4g PiArCj4gPiA+ICsJc3RhdHVzID0gdWNzaV9jY2dfcmVjdl9kYXRhKHVjKTsKPiA+ID4gKwlpZiAo c3RhdHVzIDwgMCkKPiA+ID4gKwkJcmV0dXJuIHN0YXR1czsKPiA+ID4gKwo+ID4gPiArCS8qIGFj ayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRvIHJ1biAqLwo+ID4gPiArCXJldHVy biB1Y3NpX2NjZ19hY2tfaW50ZXJydXB0KHVjKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3Rh dGljIGludCB1Y3NpX2NjZ19jbWQoc3RydWN0IHVjc2lfcHBtICpwcG0sIHN0cnVjdCB1Y3NpX2Nv bnRyb2wKPiA+ID4gKypjdHJsKSB7Cj4gPiA+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRh aW5lcl9vZihwcG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsKPiA+ID4gKwo+ID4gPiArCXBwbS0+ ZGF0YS0+Y3RybC5yYXdfY21kID0gY3RybC0+cmF3X2NtZDsKPiA+ID4gKwlyZXR1cm4gdWNzaV9j Y2dfc2VuZF9kYXRhKHVjKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGlycXJldHVy bl90IGNjZ19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKSB7Cj4gPiA+ICsJc3RydWN0 IHVjc2lfY2NnICp1YyA9IGRhdGE7Cj4gPiA+ICsKPiA+ID4gKwl1Y3NpX25vdGlmeSh1Yy0+dWNz aSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwKPiA+ID4gKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ID4gPiArewo+ ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiA+ID4gKwlzdHJ1Y3Qg dWNzaV9jY2cgKnVjOwo+ID4gPiArCWludCBzdGF0dXM7Cj4gPiA+ICsJdTE2IHJhYjsKPiA+ID4g Kwo+ID4gPiArCXVjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1YyksIEdGUF9LRVJORUwp Owo+ID4gPiArCWlmICghdWMpCj4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ ICsJdWMtPnBwbS5kYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB1Y3NpX2Rh dGEpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCF1Yy0+cHBtLmRhdGEpCj4gPiA+ICsJ CXJldHVybiAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsJdWMtPnBwbS5jbWQgPSB1Y3NpX2NjZ19j bWQ7Cj4gPiA+ICsJdWMtPnBwbS5zeW5jID0gdWNzaV9jY2dfc3luYzsKPiA+ID4gKwl1Yy0+ZGV2 ID0gZGV2Owo+ID4gPiArCXVjLT5jbGllbnQgPSBjbGllbnQ7Cj4gPiA+ICsKPiA+ID4gKwkvKiBy ZXNldCBjY2cgZGV2aWNlIGFuZCBpbml0aWFsaXplIHVjc2kgKi8KPiA+ID4gKwlzdGF0dXMgPSB1 Y3NpX2NjZ19pbml0KHVjKTsKPiA+ID4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ID4gPiArCQlkZXZf ZXJyKHVjLT5kZXYsICJ1Y3NpX2NjZ19pbml0IGZhaWxlZCAtICVkXG4iLCBzdGF0dXMpOwo+ID4g PiArCQlyZXR1cm4gc3RhdHVzOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXVjLT5pcnEgPSBj bGllbnQtPmlycTsKPiA+ID4gKwo+ID4gPiArCXN0YXR1cyA9IGRldm1fcmVxdWVzdF90aHJlYWRl ZF9pcnEoZGV2LCB1Yy0+aXJxLCBOVUxMLAo+ID4gY2NnX2lycV9oYW5kbGVyLAo+ID4gPiArCQkJ CQkgICBJUlFGX09ORVNIT1QgfAo+ID4gSVJRRl9UUklHR0VSX0hJR0gsCj4gPiA+ICsJCQkJCSAg IGRldl9uYW1lKGRldiksIHVjKTsKPiA+ID4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ID4gPiArCQlk ZXZfZXJyKHVjLT5kZXYsICJyZXF1ZXN0X3RocmVhZGVkX2lycSBmYWlsZWQgLSAlZFxuIiwKPiA+ IHN0YXR1cyk7Cj4gPiA+ICsJCXJldHVybiBzdGF0dXM7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ ICsJdWMtPnVjc2kgPSB1Y3NpX3JlZ2lzdGVyX3BwbShkZXYsICZ1Yy0+cHBtKTsKPiA+ID4gKwlp ZiAoSVNfRVJSKHVjLT51Y3NpKSkgewo+ID4gPiArCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3NpX3Jl Z2lzdGVyX3BwbSBmYWlsZWRcbiIpOwo+ID4gPiArCQlyZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7 Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NL KG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsCj4gPiB2ZXJzaW9uKSk7Cj4gPiA+ICsJc3RhdHVz ID0gY2NnX3JlYWQodWMsIHJhYiwgKHU4ICopKHVjLT5wcG0uZGF0YSkgKwo+ID4gPiArCQkJICBv ZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCB2ZXJzaW9uKSwKPiA+ID4gKwkJCSAgc2l6ZW9mKHVj LT5wcG0uZGF0YS0+dmVyc2lvbikpOwo+ID4gPiArCWlmIChzdGF0dXMgPCAwKSB7Cj4gPiA+ICsJ CXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOwo+ID4gPiArCQlyZXR1cm4gc3RhdHVzOwo+ ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHVjKTsK PiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCB1Y3Np X2NjZ19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkgewo+ID4gPiArCXN0cnVjdCB1 Y3NpX2NjZyAqdWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiA+ID4gKwo+ID4gPiAr CXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9p ZCB1Y3NpX2NjZ19kZXZpY2VfaWRbXSA9IHsKPiA+ID4gKwl7ImNjZ3gtdWNzaSIsIDB9LAo+ID4g PiArCXt9Cj4gPiA+ICt9Owo+ID4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHVjc2lfY2Nn X2RldmljZV9pZCk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB1Y3Np X2NjZ19kcml2ZXIgPSB7Cj4gPiA+ICsJLmRyaXZlciA9IHsKPiA+ID4gKwkJLm5hbWUgPSAidWNz aV9jY2ciLAo+ID4gPiArCX0sCj4gPiA+ICsJLnByb2JlID0gdWNzaV9jY2dfcHJvYmUsCj4gPiA+ ICsJLnJlbW92ZSA9IHVjc2lfY2NnX3JlbW92ZSwKPiA+ID4gKwkuaWRfdGFibGUgPSB1Y3NpX2Nj Z19kZXZpY2VfaWQsCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICttb2R1bGVfaTJjX2RyaXZlcih1 Y3NpX2NjZ19kcml2ZXIpOwo+ID4gPiArCj4gPiA+ICtNT0RVTEVfQVVUSE9SKCJBamF5IEd1cHRh IDxhamF5Z0BudmlkaWEuY29tPiIpOwo+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJVQ1NJIGRy aXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyIik7Cj4gPiA+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Cj4gPiAKPiA+IEknbSBzdGlsbCB3b3JyaWVkIGFib3V0IGhvdyB0 aGlzIGRyaXZlciB3b3JrcyBvbiBvdGhlciBwbGF0Zm9ybXMuIEl0IGp1c3QgbG9va3MKPiA+IGxp a2UgeW91IGhhdmUgd3JpdHRlbiBjY2dfcmVhZC93cml0ZSgpIGZ1bmN0aW9ucyBmb3Igb25seSB5 b3VyIEkyQyBob3N0Lgo+ID4gCj4gPiBJIHdvdWxkIGZlZWwgbXVjaCBtb3JlIGNvbWZvcnRhYmxl IHdpdGggdGhpcyBpZiB5b3UgZm9yIGV4YW1wbGUgdXNlZCB0aG9zZQo+ID4gaTJjX3NtYnVzX3Jl YWQvd3JpdGUqKCkgaGVscGVycyBpbnN0ZWFkIG9mIHJhdyBpMmNfdHJhbnNmZXIoKS4KPiA+IEkg d291bGQgZXhwZWN0IHRoZW0gdG8gZm9yY2UgeW91IHRvIHdyaXRlIHlvdXIgaTJjIGhvc3QgZHJp dmVyLCBhcyB3ZWxsIGFzIHRoaXMKPiA+IGRyaXZlciwgaW4gYSBtb3JlIGdlbmVyaWMgZmFzaGlv bi4KPiAKPiBJMmNfc21idXNfcmVhZC93cml0ZSooKSB3aWxsIG5vdCB3b3JrIHdpdGggQ3lwcmVz cyBDQ0d4IGNvbnRyb2xsZXIgc2luY2UgQ0NHeAo+IHJlcXVpcmVzIDIgYnl0ZSBvZiBjb21tYW5k IGZvciBhbnkgcmVhZC93cml0ZSB0cmFuc2FjdGlvbi4gCj4gSTJjX3NtYnVzX3JlYWQvd3JpdGUq KCkgQVBJcyBzdXBwb3J0IG9ubHkgMSBieXRlIG9mIGNvbW1hbmQuCgpPSywgZ290IGl0LgoKCnRo YW5rcywK