From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH RFC v2 3/3] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Tue, 22 Sep 2015 21:09:51 +0300 Message-ID: <20150922180951.GV26517@intel.com> References: <1442361304-16740-1-git-send-email-rafael.antognolli@intel.com> <1442361304-16740-4-git-send-email-rafael.antognolli@intel.com> <20150922085951.GU3383@phenom.ffwll.local> <20150922174806.GA3178@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 57A866EAE3 for ; Tue, 22 Sep 2015 11:09:55 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150922174806.GA3178@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rafael Antognolli Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTA6NDg6MDZBTSAtMDcwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTA6NTk6NTFBTSArMDIwMCwgRGFu aWVsIFZldHRlciB3cm90ZToKPiA+IE9uIFR1ZSwgU2VwIDE1LCAyMDE1IGF0IDA0OjU1OjA0UE0g LTA3MDAsIFJhZmFlbCBBbnRvZ25vbGxpIHdyb3RlOgo+ID4gPiBUaGlzIG1vZHVsZSBpcyBoZWF2 aWx5IGJhc2VkIG9uIGkyYy1kZXYuIE9uY2UgbG9hZGVkLCBpdCBwcm92aWRlcyBvbmUKPiA+ID4g ZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBuYW1lZCBkcm1fYXV4LU4uCj4gPiA+IAo+ID4g PiBJdCdzIHBvc3NpYmxlIHRvIGtub3cgd2hpY2ggY29ubmVjdG9yIG93bnMgdGhpcyBhdXggY2hh bm5lbCBieSBsb29raW5nCj4gPiA+IGF0IHRoZSByZXNwZWN0aXZlIHN5c2ZzIC9zeXMvY2xhc3Mv ZHJtX2F1eC1kZXYvZHJtX2F1eC1OL2Nvbm5lY3RvciwgaWYKPiA+ID4gdGhlIGNvbm5lY3RvciBk ZXZpY2UgcG9pbnRlciB3YXMgY29ycmVjdGx5IHNldCBpbiB0aGUgYXV4IGhlbHBlciBzdHJ1Y3Qu Cj4gPiA+IAo+ID4gPiBUd28gbWFpbiBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVn aXN0ZXJzOiByZWFkIGFuZCB3cml0ZS4gVGhlCj4gPiA+IGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVy IHRvIGJlIHJlYWQgb3Igd3JpdHRlbiBpcyBnaXZlbiB1c2luZyBsc2Vlay4KPiA+ID4gUmVhZGlu ZyBvciB3cml0aW5nIGRvZXMgbm90IHVwZGF0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBmaWxlLgo+ID4g Cj4gPiBJIHRoaW5rIG5vdCB1cGRhdGluZyB0aGUgcmVhZCBwb3NpdGlvbiBpcyB2ZXJ5IHN1cnBy aXNpbmcuIFdvdWxkIGl0IGJlCj4gPiBoYXJkIHRvIGZpeCB0aGF0Pwo+IAo+IE5vLCBub3QgaGFy ZCBhdCBhbGwuIEJ1dCBJIGFzc3VtZSB0aGVuIEkgc2hvdWxkIHVwZGF0ZSB0aGUgd3JpdGUKPiBw b3NpdGlvbiB0b28sIHJpZ2h0Pwo+IAo+IEJUVywgaTJjLWRldiBkb2Vzbid0IHVwZGF0ZSBlaXRo ZXIgb2YgdGhlbSwgYnV0IEknbSBub3Qgc3VyZSB3aHkuCgpJIHRoaW5rIHRoZXJlJ3MganVzdCBu byBzdGFuZGFyZCBkZWZpbml0aW9uIG9mIHdoYXQgYW4gb2Zmc2V0IHdvdWxkIG1lYW4KZm9yIGFu IGkyYyBkZXZpY2UuIEZvciBzdGFuZGFyZCBlZXByb21zIGl0IHdvdWxkIHdvcmsgYXMgb25lIHdv dWxkIGV4cGVjdCwKYnV0IGdlbmVyYWxseSBpdCdzIGRldmljZSBzcGVjaWZpYy4KCj4gCj4gPiA+ IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9s bGlAaW50ZWwuY29tPgo+ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAg ICAgIHwgICA0ICsKPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgIHwgICAxICsK PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXV4LWRldi5jIHwgMzI2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAzMzEg aW5zZXJ0aW9ucygrKQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9k cm1fYXV4LWRldi5jCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gPiBpbmRleCAxYTBhOGRmLi5lYWU4 NDdjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gPiBAQCAtMjUsNiArMjUsMTAgQEAgY29uZmln IERSTV9NSVBJX0RTSQo+ID4gPiAgCWJvb2wKPiA+ID4gIAlkZXBlbmRzIG9uIERSTQo+ID4gPiAg Cj4gPiA+ICtjb25maWcgRFJNX0FVWF9DSEFSREVWCj4gPiA+ICsJdHJpc3RhdGUgIkRSTSBEUCBB VVggSW50ZXJmYWNlIgo+ID4gPiArCWRlcGVuZHMgb24gRFJNCj4gPiA+ICsKPiA+ID4gIGNvbmZp ZyBEUk1fS01TX0hFTFBFUgo+ID4gPiAgCXRyaXN0YXRlCj4gPiA+ICAJZGVwZW5kcyBvbiBEUk0K PiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQo+ID4gPiBpbmRleCA0NWU3NzE5Li5hMWE5NDMwNiAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+ID4gPiBAQCAtMzIsNiArMzIsNyBAQCBDRkxBR1NfZHJtX3RyYWNlX3BvaW50 cy5vIDo9IC1JJChzcmMpCj4gPiA+ICAKPiA+ID4gIG9iai0kKENPTkZJR19EUk0pCSs9IGRybS5v Cj4gPiA+ICBvYmotJChDT05GSUdfRFJNX01JUElfRFNJKSArPSBkcm1fbWlwaV9kc2kubwo+ID4g PiArb2JqLSQoQ09ORklHX0RSTV9BVVhfQ0hBUkRFVikgKz0gZHJtX2F1eC1kZXYubwo+ID4gPiAg b2JqLSQoQ09ORklHX0RSTV9UVE0pCSs9IHR0bS8KPiA+ID4gIG9iai0kKENPTkZJR19EUk1fVERG WCkJKz0gdGRmeC8KPiA+ID4gIG9iai0kKENPTkZJR19EUk1fUjEyOCkJKz0gcjEyOC8KPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXV4LWRldi5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9hdXgtZGV2LmMKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXgg MDAwMDAwMC4uZmNjMzM0YQo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fYXV4LWRldi5jCj4gPiA+IEBAIC0wLDAgKzEsMzI2IEBACj4gPiA+ICsvKgo+ ID4gPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiA+ID4gKyAqCj4g PiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ID4g KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gPiArICoKPiA+ID4gKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKPiA+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ID4gKyAqIFNvZnR3 YXJlLgo+ID4gPiArICoKPiA+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiA+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKPiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gPiArICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKPiA+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiA+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4gPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiA+ICsgKgo+ID4gPiArICogQXV0 aG9yczoKPiA+ID4gKyAqICAgIFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBp bnRlbC5jb20+Cj4gPiA+ICsgKgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gPiA+ICsj aW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gPiA+ICsjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X2RwX2hlbHBlci5oPgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4gPiArCj4g PiA+ICtzdHJ1Y3QgZHJtX2F1eF9kZXYgewo+ID4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK PiA+ID4gKwl1bnNpZ25lZCBpbmRleDsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKyNkZWZp bmUgRFJNX0FVWF9NSU5PUlMJMjU2Cj4gPiA+ICtzdGF0aWMgaW50IGRybV9hdXhfZGV2X2NvdW50 ID0gMDsKPiA+ID4gK3N0YXRpYyBMSVNUX0hFQUQoZHJtX2F1eF9kZXZfbGlzdCk7Cj4gPiA+ICtz dGF0aWMgREVGSU5FX1NQSU5MT0NLKGRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2F1eF9kZXYgKmRybV9hdXhfZGV2X2dldF9ieV9taW5vcih1 bnNpZ25lZCBpbmRleCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9k ZXY7Cj4gPiA+ICsKPiA+ID4gKwlzcGluX2xvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4g PiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShhdXhfZGV2LCAmZHJtX2F1eF9kZXZfbGlzdCwgbGlz dCkgewo+ID4gPiArCQlpZiAoYXV4X2Rldi0+aW5kZXggPT0gaW5kZXgpCj4gPiA+ICsJCQlnb3Rv IGZvdW5kOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWF1eF9kZXYgPSBOVUxMOwo+ID4gPiAr Zm91bmQ6Cj4gPiA+ICsJc3Bpbl91bmxvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiA+ ICsJcmV0dXJuIGF1eF9kZXY7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2F1eF9kZXYgKmRybV9hdXhfZGV2X2dldF9ieV9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1 eCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsK PiA+ID4gKwlzcGluX2xvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiA+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShhdXhfZGV2LCAmZHJtX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ID4gPiAr CQlpZiAoYXV4X2Rldi0+YXV4ID09IGF1eCkKPiA+ID4gKwkJCWdvdG8gZm91bmQ7Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICsJYXV4X2RldiA9IE5VTEw7Cj4gPiA+ICtmb3VuZDoKPiA+ID4gKwlz cGluX3VubG9jaygmZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ID4gKwlyZXR1cm4gYXV4X2Rl djsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0cnVjdCBkcm1fYXV4X2RldiAqZ2V0 X2ZyZWVfZHJtX2F1eF9kZXYoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsJaW50IGluZGV4Owo+ID4gPiAr Cj4gPiA+ICsJc3Bpbl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ID4gPiArCWluZGV4 ID0gZHJtX2F1eF9kZXZfY291bnQ7Cj4gPiA+ICsJc3Bpbl91bmxvY2soJmRybV9hdXhfZGV2X2xp c3RfbG9jayk7Cj4gPiA+ICsJaWYgKGluZGV4ID49IERSTV9BVVhfTUlOT1JTKSB7Cj4gPiA+ICsJ CXByaW50ayhLRVJOX0VSUiAiaTJjLWRldjogT3V0IG9mIGRldmljZSBtaW5vcnMgKCVkKVxuIiwK PiA+ID4gKwkJICAgICAgIGluZGV4KTsKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7 Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJYXV4X2RldiA9IGt6YWxsb2Moc2l6ZW9mKCphdXhf ZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4gPiArCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwlhdXhfZGV2LT5hdXggPSBhdXg7Cj4gPiA+ICsJYXV4 X2Rldi0+aW5kZXggPSBpbmRleDsKPiA+ID4gKwo+ID4gPiArCXNwaW5fbG9jaygmZHJtX2F1eF9k ZXZfbGlzdF9sb2NrKTsKPiA+ID4gKwlkcm1fYXV4X2Rldl9jb3VudCsrOwo+ID4gPiArCWxpc3Rf YWRkX3RhaWwoJmF1eF9kZXYtPmxpc3QsICZkcm1fYXV4X2Rldl9saXN0KTsKPiA+ID4gKwlzcGlu X3VubG9jaygmZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ID4gKwlyZXR1cm4gYXV4X2RldjsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgcmV0dXJuX2RybV9hdXhfZGV2KHN0 cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldikKPiA+ID4gK3sKPiA+ID4gKwlzcGluX2xvY2soJmRy bV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiA+ICsJbGlzdF9kZWwoJmF1eF9kZXYtPmxpc3QpOwo+ ID4gPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ID4gPiArCWtmcmVl KGF1eF9kZXYpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3NpemVfdCBuYW1lX3No b3coc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9hdXhfZGV2ICph dXhfZGV2ID0gZHJtX2F1eF9kZXZfZ2V0X2J5X21pbm9yKE1JTk9SKGRldi0+ZGV2dCkpOwo+ID4g PiArCj4gPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ID4g KwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYXV4X2Rldi0+YXV4LT5uYW1lKTsKPiA+ID4g K30KPiA+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTsKPiA+ID4gKwo+ID4gPiArc3Rh dGljIHNzaXplX3QgY29ubmVjdG9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArCQkJ ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRfYnlf bWlub3IoTUlOT1IoZGV2LT5kZXZ0KSk7Cj4gPiA+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1eDsK PiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpjb25uX2RldjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yID0gTlVMTDsKPiA+ID4gKwo+ID4gPiArCWlmICghYXV4X2RldikKPiA+ ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiA+ICsJYXV4ID0gYXV4X2Rldi0+YXV4Owo+ID4gPiAr CWNvbm5fZGV2ID0gYXV4LT5jb25uZWN0b3I7Cj4gPiA+ICsJaWYgKCFjb25uX2RldikKPiA+ID4g KwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7Cj4gPiA+ICsKPiA+ID4gKwljb25u ZWN0b3IgPSBkZXZfZ2V0X2RydmRhdGEoYXV4LT5jb25uZWN0b3IpOwo+ID4gPiArCj4gPiA+ICsJ cmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNvbm5lY3Rvci0+bmFtZSk7Cj4gPiA+ICt9Cj4g PiA+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8oY29ubmVjdG9yKTsKPiA+ID4gKwo+ID4gPiArc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRybV9hdXhfYXR0cnNbXSA9IHsKPiA+ID4gKwkmZGV2X2F0 dHJfbmFtZS5hdHRyLAo+ID4gPiArCSZkZXZfYXR0cl9jb25uZWN0b3IuYXR0ciwKPiA+ID4gKwlO VUxMLAo+ID4gPiArfTsKPiA+ID4gK0FUVFJJQlVURV9HUk9VUFMoZHJtX2F1eCk7Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgYXV4ZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbGUpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9y KGlub2RlKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsKPiA+ ID4gKwlhdXhfZGV2ID0gZHJtX2F1eF9kZXZfZ2V0X2J5X21pbm9yKG1pbm9yKTsKPiA+ID4gKwlp ZiAoIWF1eF9kZXYpCj4gPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gPiArCj4gPiA+ICsJZmls ZS0+cHJpdmF0ZV9kYXRhID0gYXV4X2RldjsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIHNzaXplX3QgYXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUs IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKPiA+ID4gKwkJCSAgIGxvZmZfdCAqb2Zm c2V0KQo+ID4gPiArewo+ID4gPiArCWNoYXIgKmxvY2FsYnVmOwo+ID4gPiArCXNzaXplX3QgcmVz Owo+ID4gPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKPiA+ID4gKwo+ID4gPiArCWxvY2FsYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBjb3VudCk7Cj4g PiA+ICsJaWYgKElTX0VSUihsb2NhbGJ1ZikpCj4gPiA+ICsJCXJldHVybiBQVFJfRVJSKGJ1Zik7 Cj4gPiA+ICsKPiA+ID4gKwlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1eCwgKm9m ZnNldCwgbG9jYWxidWYsIGNvdW50KTsKPiA+ID4gKwlpZiAocmVzIDwgMCkKPiA+ID4gKwkJZ290 byBmaW5pc2g7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoY29weV90b191c2VyKGJ1ZiwgbG9jYWxidWYs IHJlcykpCj4gPiA+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gPiA+ICsKPiA+ID4gK2ZpbmlzaDoKPiA+ ID4gKwlrZnJlZShsb2NhbGJ1Zik7Cj4gPiA+ICsJcmV0dXJuIHJlczsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIHNzaXplX3QgYXV4ZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBj b25zdCBjaGFyIF9fdXNlciAqYnVmLAo+ID4gPiArCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90 ICpvZmZzZXQpCj4gPiA+ICt7Cj4gPiA+ICsJY2hhciAqbG9jYWxidWY7Cj4gPiA+ICsJc3NpemVf dCByZXM7Cj4gPiA+ICsJc3RydWN0IGRybV9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOwo+ID4gPiArCj4gPiA+ICsJbG9jYWxidWYgPSBtZW1kdXBfdXNlcihidWYsIGNvdW50 KTsKPiA+ID4gKwlpZiAoSVNfRVJSKGxvY2FsYnVmKSkKPiA+ID4gKwkJcmV0dXJuIFBUUl9FUlIo YnVmKTsKPiA+ID4gKwo+ID4gPiArCXJlcyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYtPmF1 eCwgKm9mZnNldCwgbG9jYWxidWYsIGNvdW50KTsKPiA+ID4gKwlrZnJlZShsb2NhbGJ1Zik7Cj4g PiA+ICsKPiA+ID4gKwlyZXR1cm4gcmVzOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdXhkZXZfZm9wcyA9IHsKPiA+ID4gKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCj4gPiA+ICsJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVr LAo+ID4gPiArCS5yZWFkCQk9IGF1eGRldl9yZWFkLAo+ID4gPiArCS53cml0ZQkJPSBhdXhkZXZf d3JpdGUsCj4gPiA+ICsJLm9wZW4JCT0gYXV4ZGV2X29wZW4sCj4gPiA+ICt9Owo+ID4gPiArCj4g PiA+ICtzdGF0aWMgc3RydWN0IGNsYXNzICpkcm1fYXV4X2Rldl9jbGFzczsKPiA+ID4gK3N0YXRp YyBpbnQgZHJtX2Rldl9tYWpvciA9IC0xOwo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIHRvX2F1eGRl dihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9hdXhfZGV2LCBhdXgpCj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBpbnQgYXV4ZGV2X2F0dGFjaF9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCwg dm9pZCAqZGF0YSkKPiA+ID4gK3sKPiA+ID4gKwlpbnQgKm1ham9yID0gZGF0YTsKPiA+ID4gKwlz dHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsJaW50IHJlczsKPiA+ID4gKwo+ID4g PiArCWF1eF9kZXYgPSBnZXRfZnJlZV9kcm1fYXV4X2RldihhdXgpOwo+ID4gPiArCWlmIChJU19F UlIoYXV4X2RldikpCj4gPiA+ICsJCXJldHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ID4gPiArCj4g PiA+ICsJYXV4X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShkcm1fYXV4X2Rldl9jbGFzcywgYXV4 LT5kZXYsCj4gPiA+ICsJCQkJICAgICBNS0RFVigqbWFqb3IsIGF1eF9kZXYtPmluZGV4KSwgTlVM TCwKPiA+ID4gKwkJCQkgICAgICJkcm1fYXV4LSVkIiwgYXV4X2Rldi0+aW5kZXgpOwo+ID4gPiAr CWlmIChJU19FUlIoYXV4X2Rldi0+ZGV2KSkgewo+ID4gPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9k ZXYtPmRldik7Cj4gPiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ cHJfZGVidWcoImRybV9hdXgtZGV2OiBhdXggWyVzXSByZWdpc3RlcmVkIGFzIG1pbm9yICVkXG4i LAo+ID4gPiArCQkgYXV4LT5uYW1lLCBhdXhfZGV2LT5pbmRleCk7Cj4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ICtlcnJvcjoKPiA+ID4gKwlyZXR1cm5fZHJtX2F1eF9kZXYoYXV4X2Rldik7Cj4gPiA+ ICsJcmV0dXJuIHJlczsKPiA+ID4gKwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50 IGF1eGRldl9kZXRhY2hfYXV4KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHZvaWQgKmRhdGEpCj4g PiA+ICt7Cj4gPiA+ICsJaW50ICptYWpvciA9IGRhdGE7Cj4gPiA+ICsJaW50IG1pbm9yOwo+ID4g PiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiA+ID4gKwo+ID4gPiArCWF1eF9kZXYg PSBkcm1fYXV4X2Rldl9nZXRfYnlfYXV4KGF1eCk7Cj4gPiA+ICsJaWYgKCFhdXhfZGV2KSAvKiBh dHRhY2ggbXVzdCBoYXZlIGZhaWxlZCAqLwo+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gKwo+ID4g PiArCW1pbm9yID0gYXV4X2Rldi0+aW5kZXg7Cj4gPiA+ICsJcmV0dXJuX2RybV9hdXhfZGV2KGF1 eF9kZXYpOwo+ID4gPiArCWRldmljZV9kZXN0cm95KGRybV9hdXhfZGV2X2NsYXNzLCBNS0RFVigq bWFqb3IsIG1pbm9yKSk7Cj4gPiA+ICsKPiA+ID4gKwlwcl9kZWJ1ZygiZHJtX2F1eC1kZXY6IGF1 eCBbJXNdIHVucmVnaXN0ZXJlZFxuIiwgYXV4LT5uYW1lKTsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBhdXhkZXZfaW5mb3JtX2NiKGludCBhY3Rp b24sIHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiA+ICt7Cj4gPiA+ICsJc3dpdGNoIChhY3Rp b24pIHsKPiA+ID4gKwljYXNlIERSTV9EUF9BRERfQVVYOgo+ID4gPiArCQlyZXR1cm4gYXV4ZGV2 X2F0dGFjaF9hdXgoYXV4LCAmZHJtX2Rldl9tYWpvcik7Cj4gPiA+ICsJY2FzZSBEUk1fRFBfREVM X0FVWDoKPiA+ID4gKwkJcmV0dXJuIGF1eGRldl9kZXRhY2hfYXV4KGF1eCwgJmRybV9kZXZfbWFq b3IpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fYXV4X2Rldl9pbml0KHZvaWQpCj4gPiA+ICt7 Cj4gPiA+ICsJaW50IHJlczsKPiA+ID4gKwo+ID4gPiArCXByaW50ayhLRVJOX0lORk8gImRybSBk cCBhdXggL2RldiBlbnRyaWVzIGRyaXZlclxuIik7Cj4gPiA+ICsKPiA+ID4gKwlyZXMgPSByZWdp c3Rlcl9jaHJkZXYoMCwgImF1eCIsICZhdXhkZXZfZm9wcyk7Cj4gPiA+ICsJaWYgKHJlcyA8IDAp Cj4gPiA+ICsJCWdvdG8gb3V0Owo+ID4gPiArCWRybV9kZXZfbWFqb3IgPSByZXM7Cj4gPiA+ICsK PiA+ID4gKwlkcm1fYXV4X2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImRy bV9hdXgtZGV2Iik7Cj4gPiA+ICsJaWYgKElTX0VSUihkcm1fYXV4X2Rldl9jbGFzcykpIHsKPiA+ ID4gKwkJcmVzID0gUFRSX0VSUihkcm1fYXV4X2Rldl9jbGFzcyk7Cj4gPiA+ICsJCWdvdG8gb3V0 X3VucmVnX2NocmRldjsKPiA+ID4gKwl9Cj4gPiA+ICsJZHJtX2F1eF9kZXZfY2xhc3MtPmRldl9n cm91cHMgPSBkcm1fYXV4X2dyb3VwczsKPiA+ID4gKwo+ID4gPiArCS8qIEtlZXAgdHJhY2sgb2Yg RFAgYXV4IHRoYXQgd2lsbCBiZSBhZGRlZCBvciByZW1vdmVkIGxhdGVyICovCj4gPiA+ICsJZHJt X2RwX2F1eF9zZXRfYXV4X2RldigmYXV4ZGV2X2luZm9ybV9jYik7Cj4gPiA+ICsKPiA+ID4gKwkv KiBCaW5kIHRvIGFscmVhZHkgZXhpc3RpbmcgRFAgYXV4ICovCj4gPiA+ICsJcmVzID0gZHJtX2Rw X2F1eF9mb3JfZWFjaCgmZHJtX2Rldl9tYWpvciwgYXV4ZGV2X2F0dGFjaF9hdXgpOwo+ID4gPiAr Cj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gK291dF91bnJlZ19jaHJkZXY6Cj4gPiA+ ICsJdW5yZWdpc3Rlcl9jaHJkZXYoZHJtX2Rldl9tYWpvciwgImF1eCIpOwo+ID4gPiArb3V0Ogo+ ID4gPiArCXByaW50ayhLRVJOX0VSUiAiJXM6IERyaXZlciBJbml0aWFsaXNhdGlvbiBmYWlsZWRc biIsIF9fRklMRV9fKTsKPiA+ID4gKwlyZXR1cm4gcmVzOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2F1eF9kZXZfZXhpdCh2b2lkKQo+ID4gPiArewo+ID4g PiArCXByaW50ayhLRVJOX0lORk8gImRybSBkcCBhdXggL2RldiBlbnRyaWVzIGRyaXZlciAtIHVu bG9hZGluZ1xuIik7Cj4gPiA+ICsJZHJtX2RwX2F1eF9zZXRfYXV4X2RldihOVUxMKTsKPiA+ID4g Kwlkcm1fZHBfYXV4X2Zvcl9lYWNoKCZkcm1fZGV2X21ham9yLCBhdXhkZXZfZGV0YWNoX2F1eCk7 Cj4gPiA+ICsJY2xhc3NfZGVzdHJveShkcm1fYXV4X2Rldl9jbGFzcyk7Cj4gPiA+ICsJdW5yZWdp c3Rlcl9jaHJkZXYoZHJtX2Rldl9tYWpvciwgImF1eCIpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtNT0RVTEVfQVVUSE9SKCJSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50 ZWwuY29tPiIpOwo+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVYIC9kZXYgZW50 cmllcyBkcml2ZXIiKTsKPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiA+ID4gKwo+ID4g PiArbW9kdWxlX2luaXQoZHJtX2F1eF9kZXZfaW5pdCk7Cj4gPiA+ICttb2R1bGVfZXhpdChkcm1f YXV4X2Rldl9leGl0KTsKPiA+ID4gLS0gCj4gPiA+IDIuNC4zCj4gPiA+IAo+ID4gPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBkcmktZGV2ZWwg bWFpbGluZyBsaXN0Cj4gPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ID4g aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+ ID4gCj4gPiAtLSAKPiA+IERhbmllbCBWZXR0ZXIKPiA+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRl bCBDb3Jwb3JhdGlvbgo+ID4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gClZpbGxlIFN5cmrDpGzDpApJ bnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK