From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rafael Antognolli 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 10:48:06 -0700 Message-ID: <20150922174806.GA3178@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 965D16E1C5 for ; Tue, 22 Sep 2015 10:51:57 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150922085951.GU3383@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTA6NTk6NTFBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUdWUsIFNlcCAxNSwgMjAxNSBhdCAwNDo1NTowNFBNIC0wNzAwLCBSYWZhZWwg QW50b2dub2xsaSB3cm90ZToKPiA+IFRoaXMgbW9kdWxlIGlzIGhlYXZpbHkgYmFzZWQgb24gaTJj LWRldi4gT25jZSBsb2FkZWQsIGl0IHByb3ZpZGVzIG9uZQo+ID4gZGV2IG5vZGUgcGVyIERQIEFV WCBjaGFubmVsLCBuYW1lZCBkcm1fYXV4LU4uCj4gPiAKPiA+IEl0J3MgcG9zc2libGUgdG8ga25v dyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tpbmcKPiA+IGF0 IHRoZSByZXNwZWN0aXZlIHN5c2ZzIC9zeXMvY2xhc3MvZHJtX2F1eC1kZXYvZHJtX2F1eC1OL2Nv bm5lY3RvciwgaWYKPiA+IHRoZSBjb25uZWN0b3IgZGV2aWNlIHBvaW50ZXIgd2FzIGNvcnJlY3Rs eSBzZXQgaW4gdGhlIGF1eCBoZWxwZXIgc3RydWN0Lgo+ID4gCj4gPiBUd28gbWFpbiBvcGVyYXRp b25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVnaXN0ZXJzOiByZWFkIGFuZCB3cml0ZS4gVGhlCj4g PiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4g dXNpbmcgbHNlZWsuCj4gPiBSZWFkaW5nIG9yIHdyaXRpbmcgZG9lcyBub3QgdXBkYXRlIHRoZSBv ZmZzZXQgb2YgdGhlIGZpbGUuCj4gCj4gSSB0aGluayBub3QgdXBkYXRpbmcgdGhlIHJlYWQgcG9z aXRpb24gaXMgdmVyeSBzdXJwcmlzaW5nLiBXb3VsZCBpdCBiZQo+IGhhcmQgdG8gZml4IHRoYXQ/ CgpObywgbm90IGhhcmQgYXQgYWxsLiBCdXQgSSBhc3N1bWUgdGhlbiBJIHNob3VsZCB1cGRhdGUg dGhlIHdyaXRlCnBvc2l0aW9uIHRvbywgcmlnaHQ/CgpCVFcsIGkyYy1kZXYgZG9lc24ndCB1cGRh dGUgZWl0aGVyIG9mIHRoZW0sIGJ1dCBJJ20gbm90IHN1cmUgd2h5LgoKPiA+IAo+ID4gU2lnbmVk LW9mZi1ieTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4K PiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgIHwgICA0ICsKPiA+ICBk cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2RybV9hdXgtZGV2LmMgfCAzMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAzMzEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2F1eC1kZXYuYwo+ID4gCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp Zwo+ID4gaW5kZXggMWEwYThkZi4uZWFlODQ3YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gQEAgLTI1 LDYgKzI1LDEwIEBAIGNvbmZpZyBEUk1fTUlQSV9EU0kKPiA+ICAJYm9vbAo+ID4gIAlkZXBlbmRz IG9uIERSTQo+ID4gIAo+ID4gK2NvbmZpZyBEUk1fQVVYX0NIQVJERVYKPiA+ICsJdHJpc3RhdGUg IkRSTSBEUCBBVVggSW50ZXJmYWNlIgo+ID4gKwlkZXBlbmRzIG9uIERSTQo+ID4gKwo+ID4gIGNv bmZpZyBEUk1fS01TX0hFTFBFUgo+ID4gIAl0cmlzdGF0ZQo+ID4gIAlkZXBlbmRzIG9uIERSTQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+ID4gaW5kZXggNDVlNzcxOS4uYTFhOTQzMDYgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+ID4gQEAgLTMyLDYgKzMyLDcgQEAgQ0ZMQUdTX2RybV90cmFjZV9wb2ludHMubyA6PSAtSSQo c3JjKQo+ID4gIAo+ID4gIG9iai0kKENPTkZJR19EUk0pCSs9IGRybS5vCj4gPiAgb2JqLSQoQ09O RklHX0RSTV9NSVBJX0RTSSkgKz0gZHJtX21pcGlfZHNpLm8KPiA+ICtvYmotJChDT05GSUdfRFJN X0FVWF9DSEFSREVWKSArPSBkcm1fYXV4LWRldi5vCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9UVE0p CSs9IHR0bS8KPiA+ICBvYmotJChDT05GSUdfRFJNX1RERlgpCSs9IHRkZngvCj4gPiAgb2JqLSQo Q09ORklHX0RSTV9SMTI4KQkrPSByMTI4Lwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXV4LWRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdXgtZGV2LmMKPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5mY2MzMzRhCj4gPiAtLS0gL2Rldi9u dWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F1eC1kZXYuYwo+ID4gQEAgLTAsMCAr MSwzMjYgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0 aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK PiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICogICAgUmFmYWVsIEFu dG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiA+ICsgKgo+ID4gKyAqLwo+ ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZnMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiAr Cj4gPiArc3RydWN0IGRybV9hdXhfZGV2IHsKPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ ID4gKwl1bnNpZ25lZCBpbmRleDsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1eDsKPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2Owo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBEUk1fQVVYX01J Tk9SUwkyNTYKPiA+ICtzdGF0aWMgaW50IGRybV9hdXhfZGV2X2NvdW50ID0gMDsKPiA+ICtzdGF0 aWMgTElTVF9IRUFEKGRybV9hdXhfZGV2X2xpc3QpOwo+ID4gK3N0YXRpYyBERUZJTkVfU1BJTkxP Q0soZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9h dXhfZGV2ICpkcm1fYXV4X2Rldl9nZXRfYnlfbWlub3IodW5zaWduZWQgaW5kZXgpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiArCj4gPiArCXNwaW5fbG9jaygm ZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShhdXhfZGV2 LCAmZHJtX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ID4gKwkJaWYgKGF1eF9kZXYtPmluZGV4ID09 IGluZGV4KQo+ID4gKwkJCWdvdG8gZm91bmQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJYXV4X2RldiA9 IE5VTEw7Cj4gPiArZm91bmQ6Cj4gPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xv Y2spOwo+ID4gKwlyZXR1cm4gYXV4X2RldjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBkcm1fYXV4X2RldiAqZHJtX2F1eF9kZXZfZ2V0X2J5X2F1eChzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9hdXhfZGV2ICphdXhfZGV2Owo+ID4gKwo+ID4g KwlzcGluX2xvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkoYXV4X2RldiwgJmRybV9hdXhfZGV2X2xpc3QsIGxpc3QpIHsKPiA+ICsJCWlmIChhdXhf ZGV2LT5hdXggPT0gYXV4KQo+ID4gKwkJCWdvdG8gZm91bmQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ YXV4X2RldiA9IE5VTEw7Cj4gPiArZm91bmQ6Cj4gPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rl dl9saXN0X2xvY2spOwo+ID4gKwlyZXR1cm4gYXV4X2RldjsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHN0cnVjdCBkcm1fYXV4X2RldiAqZ2V0X2ZyZWVfZHJtX2F1eF9kZXYoc3RydWN0IGRybV9k cF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiA+ ICsJaW50IGluZGV4Owo+ID4gKwo+ID4gKwlzcGluX2xvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9j ayk7Cj4gPiArCWluZGV4ID0gZHJtX2F1eF9kZXZfY291bnQ7Cj4gPiArCXNwaW5fdW5sb2NrKCZk cm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ID4gKwlpZiAoaW5kZXggPj0gRFJNX0FVWF9NSU5PUlMp IHsKPiA+ICsJCXByaW50ayhLRVJOX0VSUiAiaTJjLWRldjogT3V0IG9mIGRldmljZSBtaW5vcnMg KCVkKVxuIiwKPiA+ICsJCSAgICAgICBpbmRleCk7Cj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5P REVWKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9k ZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4gPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiA+ICsJYXV4X2Rldi0+aW5k ZXggPSBpbmRleDsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2sp Owo+ID4gKwlkcm1fYXV4X2Rldl9jb3VudCsrOwo+ID4gKwlsaXN0X2FkZF90YWlsKCZhdXhfZGV2 LT5saXN0LCAmZHJtX2F1eF9kZXZfbGlzdCk7Cj4gPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rl dl9saXN0X2xvY2spOwo+ID4gKwlyZXR1cm4gYXV4X2RldjsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgcmV0dXJuX2RybV9hdXhfZGV2KHN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldikK PiA+ICt7Cj4gPiArCXNwaW5fbG9jaygmZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiA+ICsJbGlz dF9kZWwoJmF1eF9kZXYtPmxpc3QpOwo+ID4gKwlzcGluX3VubG9jaygmZHJtX2F1eF9kZXZfbGlz dF9sb2NrKTsKPiA+ICsJa2ZyZWUoYXV4X2Rldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBz c2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArCQkJIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2F1 eF9kZXYgKmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRfYnlfbWlub3IoTUlOT1IoZGV2LT5kZXZ0 KSk7Cj4gPiArCj4gPiArCWlmICghYXV4X2RldikKPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4g KwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYXV4X2Rldi0+YXV4LT5uYW1lKTsKPiA+ICt9 Cj4gPiArc3RhdGljIERFVklDRV9BVFRSX1JPKG5hbWUpOwo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6 ZV90IGNvbm5lY3Rvcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICsJCQkgICAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGRybV9hdXhfZGV2ICphdXhfZGV2ID0gZHJtX2F1eF9kZXZfZ2V0X2J5X21pbm9yKE1JTk9SKGRl di0+ZGV2dCkpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ID4gKwlzdHJ1Y3QgZGV2 aWNlICpjb25uX2RldjsKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5V TEw7Cj4gPiArCj4gPiArCWlmICghYXV4X2RldikKPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4g KwlhdXggPSBhdXhfZGV2LT5hdXg7Cj4gPiArCWNvbm5fZGV2ID0gYXV4LT5jb25uZWN0b3I7Cj4g PiArCWlmICghY29ubl9kZXYpCj4gPiArCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4i KTsKPiA+ICsKPiA+ICsJY29ubmVjdG9yID0gZGV2X2dldF9kcnZkYXRhKGF1eC0+Y29ubmVjdG9y KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNvbm5lY3Rvci0+bmFt ZSk7Cj4gPiArfQo+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhjb25uZWN0b3IpOwo+ID4gKwo+ ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkcm1fYXV4X2F0dHJzW10gPSB7Cj4gPiArCSZk ZXZfYXR0cl9uYW1lLmF0dHIsCj4gPiArCSZkZXZfYXR0cl9jb25uZWN0b3IuYXR0ciwKPiA+ICsJ TlVMTCwKPiA+ICt9Owo+ID4gK0FUVFJJQlVURV9HUk9VUFMoZHJtX2F1eCk7Cj4gPiArCj4gPiAr c3RhdGljIGludCBhdXhkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlsZSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Cj4g PiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGRy bV9hdXhfZGV2X2dldF9ieV9taW5vcihtaW5vcik7Cj4gPiArCWlmICghYXV4X2RldikKPiA+ICsJ CXJldHVybiAtRU5PREVWOwo+ID4gKwo+ID4gKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBhdXhfZGV2 Owo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3QgYXV4ZGV2 X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwK PiA+ICsJCQkgICBsb2ZmX3QgKm9mZnNldCkKPiA+ICt7Cj4gPiArCWNoYXIgKmxvY2FsYnVmOwo+ ID4gKwlzc2l6ZV90IHJlczsKPiA+ICsJc3RydWN0IGRybV9hdXhfZGV2ICphdXhfZGV2ID0gZmls ZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwo+ID4gKwlsb2NhbGJ1ZiA9IG1lbWR1cF91c2VyKGJ1Ziwg Y291bnQpOwo+ID4gKwlpZiAoSVNfRVJSKGxvY2FsYnVmKSkKPiA+ICsJCXJldHVybiBQVFJfRVJS KGJ1Zik7Cj4gPiArCj4gPiArCXJlcyA9IGRybV9kcF9kcGNkX3JlYWQoYXV4X2Rldi0+YXV4LCAq b2Zmc2V0LCBsb2NhbGJ1ZiwgY291bnQpOwo+ID4gKwlpZiAocmVzIDwgMCkKPiA+ICsJCWdvdG8g ZmluaXNoOwo+ID4gKwo+ID4gKwlpZiAoY29weV90b191c2VyKGJ1ZiwgbG9jYWxidWYsIHJlcykp Cj4gPiArCQlyZXMgPSAtRUZBVUxUOwo+ID4gKwo+ID4gK2ZpbmlzaDoKPiA+ICsJa2ZyZWUobG9j YWxidWYpOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVf dCBhdXhkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYs Cj4gPiArCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCj4gPiArewo+ID4gKwlj aGFyICpsb2NhbGJ1ZjsKPiA+ICsJc3NpemVfdCByZXM7Cj4gPiArCXN0cnVjdCBkcm1fYXV4X2Rl diAqYXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiA+ICsKPiA+ICsJbG9jYWxidWYgPSBt ZW1kdXBfdXNlcihidWYsIGNvdW50KTsKPiA+ICsJaWYgKElTX0VSUihsb2NhbGJ1ZikpCj4gPiAr CQlyZXR1cm4gUFRSX0VSUihidWYpOwo+ID4gKwo+ID4gKwlyZXMgPSBkcm1fZHBfZHBjZF93cml0 ZShhdXhfZGV2LT5hdXgsICpvZmZzZXQsIGxvY2FsYnVmLCBjb3VudCk7Cj4gPiArCWtmcmVlKGxv Y2FsYnVmKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJlczsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2X2ZvcHMgPSB7Cj4gPiArCS5vd25l cgkJPSBUSElTX01PRFVMRSwKPiA+ICsJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAo+ ID4gKwkucmVhZAkJPSBhdXhkZXZfcmVhZCwKPiA+ICsJLndyaXRlCQk9IGF1eGRldl93cml0ZSwK PiA+ICsJLm9wZW4JCT0gYXV4ZGV2X29wZW4sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3Ry dWN0IGNsYXNzICpkcm1fYXV4X2Rldl9jbGFzczsKPiA+ICtzdGF0aWMgaW50IGRybV9kZXZfbWFq b3IgPSAtMTsKPiA+ICsKPiA+ICsjZGVmaW5lIHRvX2F1eGRldihkKSBjb250YWluZXJfb2YoZCwg c3RydWN0IGRybV9hdXhfZGV2LCBhdXgpCj4gPiArCj4gPiArc3RhdGljIGludCBhdXhkZXZfYXR0 YWNoX2F1eChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJ aW50ICptYWpvciA9IGRhdGE7Cj4gPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiA+ ICsJaW50IHJlczsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGdldF9mcmVlX2RybV9hdXhfZGV2KGF1 eCk7Cj4gPiArCWlmIChJU19FUlIoYXV4X2RldikpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihhdXhf ZGV2KTsKPiA+ICsKPiA+ICsJYXV4X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShkcm1fYXV4X2Rl dl9jbGFzcywgYXV4LT5kZXYsCj4gPiArCQkJCSAgICAgTUtERVYoKm1ham9yLCBhdXhfZGV2LT5p bmRleCksIE5VTEwsCj4gPiArCQkJCSAgICAgImRybV9hdXgtJWQiLCBhdXhfZGV2LT5pbmRleCk7 Cj4gPiArCWlmIChJU19FUlIoYXV4X2Rldi0+ZGV2KSkgewo+ID4gKwkJcmVzID0gUFRSX0VSUihh dXhfZGV2LT5kZXYpOwo+ID4gKwkJZ290byBlcnJvcjsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwcl9k ZWJ1ZygiZHJtX2F1eC1kZXY6IGF1eCBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4g PiArCQkgYXV4LT5uYW1lLCBhdXhfZGV2LT5pbmRleCk7Cj4gPiArCXJldHVybiAwOwo+ID4gK2Vy cm9yOgo+ID4gKwlyZXR1cm5fZHJtX2F1eF9kZXYoYXV4X2Rldik7Cj4gPiArCXJldHVybiByZXM7 Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYXV4ZGV2X2RldGFjaF9hdXgoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCwgdm9pZCAqZGF0YSkKPiA+ICt7Cj4gPiArCWludCAqbWFqb3Ig PSBkYXRhOwo+ID4gKwlpbnQgbWlub3I7Cj4gPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2Rl djsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGRybV9hdXhfZGV2X2dldF9ieV9hdXgoYXV4KTsKPiA+ ICsJaWYgKCFhdXhfZGV2KSAvKiBhdHRhY2ggbXVzdCBoYXZlIGZhaWxlZCAqLwo+ID4gKwkJcmV0 dXJuIDA7Cj4gPiArCj4gPiArCW1pbm9yID0gYXV4X2Rldi0+aW5kZXg7Cj4gPiArCXJldHVybl9k cm1fYXV4X2RldihhdXhfZGV2KTsKPiA+ICsJZGV2aWNlX2Rlc3Ryb3koZHJtX2F1eF9kZXZfY2xh c3MsIE1LREVWKCptYWpvciwgbWlub3IpKTsKPiA+ICsKPiA+ICsJcHJfZGVidWcoImRybV9hdXgt ZGV2OiBhdXggWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIGF1eC0+bmFtZSk7Cj4gPiArCXJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGF1eGRldl9pbmZvcm1fY2IoaW50IGFjdGlv biwgc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN3aXRjaCAoYWN0aW9uKSB7 Cj4gPiArCWNhc2UgRFJNX0RQX0FERF9BVVg6Cj4gPiArCQlyZXR1cm4gYXV4ZGV2X2F0dGFjaF9h dXgoYXV4LCAmZHJtX2Rldl9tYWpvcik7Cj4gPiArCWNhc2UgRFJNX0RQX0RFTF9BVVg6Cj4gPiAr CQlyZXR1cm4gYXV4ZGV2X2RldGFjaF9hdXgoYXV4LCAmZHJtX2Rldl9tYWpvcik7Cj4gPiArCX0K PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19pbml0 IGRybV9hdXhfZGV2X2luaXQodm9pZCkKPiA+ICt7Cj4gPiArCWludCByZXM7Cj4gPiArCj4gPiAr CXByaW50ayhLRVJOX0lORk8gImRybSBkcCBhdXggL2RldiBlbnRyaWVzIGRyaXZlclxuIik7Cj4g PiArCj4gPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigwLCAiYXV4IiwgJmF1eGRldl9mb3BzKTsK PiA+ICsJaWYgKHJlcyA8IDApCj4gPiArCQlnb3RvIG91dDsKPiA+ICsJZHJtX2Rldl9tYWpvciA9 IHJlczsKPiA+ICsKPiA+ICsJZHJtX2F1eF9kZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19N T0RVTEUsICJkcm1fYXV4LWRldiIpOwo+ID4gKwlpZiAoSVNfRVJSKGRybV9hdXhfZGV2X2NsYXNz KSkgewo+ID4gKwkJcmVzID0gUFRSX0VSUihkcm1fYXV4X2Rldl9jbGFzcyk7Cj4gPiArCQlnb3Rv IG91dF91bnJlZ19jaHJkZXY7Cj4gPiArCX0KPiA+ICsJZHJtX2F1eF9kZXZfY2xhc3MtPmRldl9n cm91cHMgPSBkcm1fYXV4X2dyb3VwczsKPiA+ICsKPiA+ICsJLyogS2VlcCB0cmFjayBvZiBEUCBh dXggdGhhdCB3aWxsIGJlIGFkZGVkIG9yIHJlbW92ZWQgbGF0ZXIgKi8KPiA+ICsJZHJtX2RwX2F1 eF9zZXRfYXV4X2RldigmYXV4ZGV2X2luZm9ybV9jYik7Cj4gPiArCj4gPiArCS8qIEJpbmQgdG8g YWxyZWFkeSBleGlzdGluZyBEUCBhdXggKi8KPiA+ICsJcmVzID0gZHJtX2RwX2F1eF9mb3JfZWFj aCgmZHJtX2Rldl9tYWpvciwgYXV4ZGV2X2F0dGFjaF9hdXgpOwo+ID4gKwo+ID4gKwlyZXR1cm4g MDsKPiA+ICsKPiA+ICtvdXRfdW5yZWdfY2hyZGV2Ogo+ID4gKwl1bnJlZ2lzdGVyX2NocmRldihk cm1fZGV2X21ham9yLCAiYXV4Iik7Cj4gPiArb3V0Ogo+ID4gKwlwcmludGsoS0VSTl9FUlIgIiVz OiBEcml2ZXIgSW5pdGlhbGlzYXRpb24gZmFpbGVkXG4iLCBfX0ZJTEVfXyk7Cj4gPiArCXJldHVy biByZXM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkcm1fYXV4X2Rldl9l eGl0KHZvaWQpCj4gPiArewo+ID4gKwlwcmludGsoS0VSTl9JTkZPICJkcm0gZHAgYXV4IC9kZXYg ZW50cmllcyBkcml2ZXIgLSB1bmxvYWRpbmdcbiIpOwo+ID4gKwlkcm1fZHBfYXV4X3NldF9hdXhf ZGV2KE5VTEwpOwo+ID4gKwlkcm1fZHBfYXV4X2Zvcl9lYWNoKCZkcm1fZGV2X21ham9yLCBhdXhk ZXZfZGV0YWNoX2F1eCk7Cj4gPiArCWNsYXNzX2Rlc3Ryb3koZHJtX2F1eF9kZXZfY2xhc3MpOwo+ ID4gKwl1bnJlZ2lzdGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7Cj4gPiArfQo+ID4g Kwo+ID4gK01PRFVMRV9BVVRIT1IoIlJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xs aUBpbnRlbC5jb20+Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVYIC9kZXYg ZW50cmllcyBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiArCj4gPiAr bW9kdWxlX2luaXQoZHJtX2F1eF9kZXZfaW5pdCk7Cj4gPiArbW9kdWxlX2V4aXQoZHJtX2F1eF9k ZXZfZXhpdCk7Cj4gPiAtLSAKPiA+IDIuNC4zCj4gPiAKPiA+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4g PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gCj4gLS0gCj4gRGFuaWVsIFZl dHRlcgo+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+IGh0dHA6Ly9ibG9n LmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==