From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter 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:59:51 +0200 Message-ID: <20150922085951.GU3383@phenom.ffwll.local> References: <1442361304-16740-1-git-send-email-rafael.antognolli@intel.com> <1442361304-16740-4-git-send-email-rafael.antognolli@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1F4A6E257 for ; Tue, 22 Sep 2015 01:56:59 -0700 (PDT) Received: by wicgb1 with SMTP id gb1so149551373wic.1 for ; Tue, 22 Sep 2015 01:56:58 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1442361304-16740-4-git-send-email-rafael.antognolli@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 T24gVHVlLCBTZXAgMTUsIDIwMTUgYXQgMDQ6NTU6MDRQTSAtMDcwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNl IGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBu YW1lZCBkcm1fYXV4LU4uCj4gCj4gSXQncyBwb3NzaWJsZSB0byBrbm93IHdoaWNoIGNvbm5lY3Rv ciBvd25zIHRoaXMgYXV4IGNoYW5uZWwgYnkgbG9va2luZwo+IGF0IHRoZSByZXNwZWN0aXZlIHN5 c2ZzIC9zeXMvY2xhc3MvZHJtX2F1eC1kZXYvZHJtX2F1eC1OL2Nvbm5lY3RvciwgaWYKPiB0aGUg Y29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBjb3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVs cGVyIHN0cnVjdC4KPiAKPiBUd28gbWFpbiBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUg cmVnaXN0ZXJzOiByZWFkIGFuZCB3cml0ZS4gVGhlCj4gYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIg dG8gYmUgcmVhZCBvciB3cml0dGVuIGlzIGdpdmVuIHVzaW5nIGxzZWVrLgo+IFJlYWRpbmcgb3Ig d3JpdGluZyBkb2VzIG5vdCB1cGRhdGUgdGhlIG9mZnNldCBvZiB0aGUgZmlsZS4KCkkgdGhpbmsg bm90IHVwZGF0aW5nIHRoZSByZWFkIHBvc2l0aW9uIGlzIHZlcnkgc3VycHJpc2luZy4gV291bGQg aXQgYmUKaGFyZCB0byBmaXggdGhhdD8KLURhbmllbAoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBSYWZh ZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICB8ICAgNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdXgtZGV2LmMgfCAzMjYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hh bmdlZCwgMzMxIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9kcm1fYXV4LWRldi5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCAxYTBhOGRmLi5lYWU4NDdjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKPiBAQCAtMjUsNiArMjUsMTAgQEAgY29uZmlnIERSTV9NSVBJX0RTSQo+ICAJ Ym9vbAo+ICAJZGVwZW5kcyBvbiBEUk0KPiAgCj4gK2NvbmZpZyBEUk1fQVVYX0NIQVJERVYKPiAr CXRyaXN0YXRlICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiArCWRlcGVuZHMgb24gRFJNCj4gKwo+ ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiAgCXRyaXN0YXRlCj4gIAlkZXBlbmRzIG9uIERSTQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKPiBpbmRleCA0NWU3NzE5Li5hMWE5NDMwNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAt MzIsNiArMzIsNyBAQCBDRkxBR1NfZHJtX3RyYWNlX3BvaW50cy5vIDo9IC1JJChzcmMpCj4gIAo+ ICBvYmotJChDT05GSUdfRFJNKQkrPSBkcm0ubwo+ICBvYmotJChDT05GSUdfRFJNX01JUElfRFNJ KSArPSBkcm1fbWlwaV9kc2kubwo+ICtvYmotJChDT05GSUdfRFJNX0FVWF9DSEFSREVWKSArPSBk cm1fYXV4LWRldi5vCj4gIG9iai0kKENPTkZJR19EUk1fVFRNKQkrPSB0dG0vCj4gIG9iai0kKENP TkZJR19EUk1fVERGWCkJKz0gdGRmeC8KPiAgb2JqLSQoQ09ORklHX0RSTV9SMTI4KQkrPSByMTI4 Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F1eC1kZXYuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fYXV4LWRldi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi5mY2MzMzRhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f YXV4LWRldi5jCj4gQEAgLTAsMCArMSwzMjYgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIw MTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoK PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiAr ICogQXV0aG9yczoKPiArICogICAgUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxp QGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsj aW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+ Cj4gKwo+ICtzdHJ1Y3QgZHJtX2F1eF9kZXYgewo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ ICsJdW5zaWduZWQgaW5kZXg7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0 IGRldmljZSAqZGV2Owo+ICt9Owo+ICsKPiArI2RlZmluZSBEUk1fQVVYX01JTk9SUwkyNTYKPiAr c3RhdGljIGludCBkcm1fYXV4X2Rldl9jb3VudCA9IDA7Cj4gK3N0YXRpYyBMSVNUX0hFQUQoZHJt X2F1eF9kZXZfbGlzdCk7Cj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHJtX2F1eF9kZXZfbGlz dF9sb2NrKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2F1eF9kZXYgKmRybV9hdXhfZGV2X2dl dF9ieV9taW5vcih1bnNpZ25lZCBpbmRleCkKPiArewo+ICsJc3RydWN0IGRybV9hdXhfZGV2ICph dXhfZGV2Owo+ICsKPiArCXNwaW5fbG9jaygmZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCWxp c3RfZm9yX2VhY2hfZW50cnkoYXV4X2RldiwgJmRybV9hdXhfZGV2X2xpc3QsIGxpc3QpIHsKPiAr CQlpZiAoYXV4X2Rldi0+aW5kZXggPT0gaW5kZXgpCj4gKwkJCWdvdG8gZm91bmQ7Cj4gKwl9Cj4g Kwo+ICsJYXV4X2RldiA9IE5VTEw7Cj4gK2ZvdW5kOgo+ICsJc3Bpbl91bmxvY2soJmRybV9hdXhf ZGV2X2xpc3RfbG9jayk7Cj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCBkcm1fYXV4X2RldiAqZHJtX2F1eF9kZXZfZ2V0X2J5X2F1eChzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwo+ICsJc3Bp bl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShh dXhfZGV2LCAmZHJtX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ICsJCWlmIChhdXhfZGV2LT5hdXgg PT0gYXV4KQo+ICsJCQlnb3RvIGZvdW5kOwo+ICsJfQo+ICsKPiArCWF1eF9kZXYgPSBOVUxMOwo+ ICtmb3VuZDoKPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJcmV0 dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2F1eF9kZXYgKmdldF9m cmVlX2RybV9hdXhfZGV2KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXN0cnVjdCBk cm1fYXV4X2RldiAqYXV4X2RldjsKPiArCWludCBpbmRleDsKPiArCj4gKwlzcGluX2xvY2soJmRy bV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlpbmRleCA9IGRybV9hdXhfZGV2X2NvdW50Owo+ICsJ c3Bpbl91bmxvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlpZiAoaW5kZXggPj0gRFJN X0FVWF9NSU5PUlMpIHsKPiArCQlwcmludGsoS0VSTl9FUlIgImkyYy1kZXY6IE91dCBvZiBkZXZp Y2UgbWlub3JzICglZClcbiIsCj4gKwkJICAgICAgIGluZGV4KTsKPiArCQlyZXR1cm4gRVJSX1BU UigtRU5PREVWKTsKPiArCX0KPiArCj4gKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9k ZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYXV4X2RldikKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiArCWF1eF9kZXYtPmluZGV4ID0gaW5k ZXg7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJZHJtX2F1 eF9kZXZfY291bnQrKzsKPiArCWxpc3RfYWRkX3RhaWwoJmF1eF9kZXYtPmxpc3QsICZkcm1fYXV4 X2Rldl9saXN0KTsKPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJ cmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJldHVybl9kcm1fYXV4X2Rl dihzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYpCj4gK3sKPiArCXNwaW5fbG9jaygmZHJtX2F1 eF9kZXZfbGlzdF9sb2NrKTsKPiArCWxpc3RfZGVsKCZhdXhfZGV2LT5saXN0KTsKPiArCXNwaW5f dW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJa2ZyZWUoYXV4X2Rldik7Cj4gK30K PiArCj4gK3N0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJ CSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRfYnlfbWlub3IoTUlOT1Io ZGV2LT5kZXZ0KSk7Cj4gKwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJldHVybiAtRU5PREVWOwo+ ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGF1eF9kZXYtPmF1eC0+bmFtZSk7Cj4gK30K PiArc3RhdGljIERFVklDRV9BVFRSX1JPKG5hbWUpOwo+ICsKPiArc3RhdGljIHNzaXplX3QgY29u bmVjdG9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgICAgICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYg KmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRfYnlfbWlub3IoTUlOT1IoZGV2LT5kZXZ0KSk7Cj4g KwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0IGRldmljZSAqY29ubl9kZXY7Cj4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsKPiArCj4gKwlpZiAoIWF1 eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlhdXggPSBhdXhfZGV2LT5hdXg7Cj4gKwlj b25uX2RldiA9IGF1eC0+Y29ubmVjdG9yOwo+ICsJaWYgKCFjb25uX2RldikKPiArCQlyZXR1cm4g c3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKPiArCj4gKwljb25uZWN0b3IgPSBkZXZfZ2V0X2Ry dmRhdGEoYXV4LT5jb25uZWN0b3IpOwo+ICsKPiArCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4i LCBjb25uZWN0b3ItPm5hbWUpOwo+ICt9Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhjb25uZWN0 b3IpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRybV9hdXhfYXR0cnNbXSA9IHsK PiArCSZkZXZfYXR0cl9uYW1lLmF0dHIsCj4gKwkmZGV2X2F0dHJfY29ubmVjdG9yLmF0dHIsCj4g KwlOVUxMLAo+ICt9Owo+ICtBVFRSSUJVVEVfR1JPVVBTKGRybV9hdXgpOwo+ICsKPiArc3RhdGlj IGludCBhdXhkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkK PiArewo+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKPiArCXN0cnVjdCBk cm1fYXV4X2RldiAqYXV4X2RldjsKPiArCj4gKwlhdXhfZGV2ID0gZHJtX2F1eF9kZXZfZ2V0X2J5 X21pbm9yKG1pbm9yKTsKPiArCWlmICghYXV4X2RldikKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiAr Cj4gKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBhdXhfZGV2Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzc2l6ZV90IGF1eGRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9f dXNlciAqYnVmLCBzaXplX3QgY291bnQsCj4gKwkJCSAgIGxvZmZfdCAqb2Zmc2V0KQo+ICt7Cj4g KwljaGFyICpsb2NhbGJ1ZjsKPiArCXNzaXplX3QgcmVzOwo+ICsJc3RydWN0IGRybV9hdXhfZGV2 ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsKPiArCWxvY2FsYnVmID0gbWVtZHVw X3VzZXIoYnVmLCBjb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGxvY2FsYnVmKSkKPiArCQlyZXR1cm4g UFRSX0VSUihidWYpOwo+ICsKPiArCXJlcyA9IGRybV9kcF9kcGNkX3JlYWQoYXV4X2Rldi0+YXV4 LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgY291bnQpOwo+ICsJaWYgKHJlcyA8IDApCj4gKwkJZ290byBm aW5pc2g7Cj4gKwo+ICsJaWYgKGNvcHlfdG9fdXNlcihidWYsIGxvY2FsYnVmLCByZXMpKQo+ICsJ CXJlcyA9IC1FRkFVTFQ7Cj4gKwo+ICtmaW5pc2g6Cj4gKwlrZnJlZShsb2NhbGJ1Zik7Cj4gKwly ZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBhdXhkZXZfd3JpdGUoc3RydWN0 IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCj4gKwkJCSAgICBzaXplX3QgY291 bnQsIGxvZmZfdCAqb2Zmc2V0KQo+ICt7Cj4gKwljaGFyICpsb2NhbGJ1ZjsKPiArCXNzaXplX3Qg cmVzOwo+ICsJc3RydWN0IGRybV9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRh Owo+ICsKPiArCWxvY2FsYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBjb3VudCk7Cj4gKwlpZiAoSVNf RVJSKGxvY2FsYnVmKSkKPiArCQlyZXR1cm4gUFRSX0VSUihidWYpOwo+ICsKPiArCXJlcyA9IGRy bV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYtPmF1eCwgKm9mZnNldCwgbG9jYWxidWYsIGNvdW50KTsK PiArCWtmcmVlKGxvY2FsYnVmKTsKPiArCj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdXhkZXZfZm9wcyA9IHsKPiArCS5vd25l cgkJPSBUSElTX01PRFVMRSwKPiArCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKPiAr CS5yZWFkCQk9IGF1eGRldl9yZWFkLAo+ICsJLndyaXRlCQk9IGF1eGRldl93cml0ZSwKPiArCS5v cGVuCQk9IGF1eGRldl9vcGVuLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBjbGFzcyAqZHJt X2F1eF9kZXZfY2xhc3M7Cj4gK3N0YXRpYyBpbnQgZHJtX2Rldl9tYWpvciA9IC0xOwo+ICsKPiAr I2RlZmluZSB0b19hdXhkZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBkcm1fYXV4X2Rldiwg YXV4KQo+ICsKPiArc3RhdGljIGludCBhdXhkZXZfYXR0YWNoX2F1eChzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4LCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlpbnQgKm1ham9yID0gZGF0YTsKPiArCXN0cnVj dCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiArCWludCByZXM7Cj4gKwo+ICsJYXV4X2RldiA9IGdl dF9mcmVlX2RybV9hdXhfZGV2KGF1eCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYpKQo+ICsJCXJl dHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ICsKPiArCWF1eF9kZXYtPmRldiA9IGRldmljZV9jcmVh dGUoZHJtX2F1eF9kZXZfY2xhc3MsIGF1eC0+ZGV2LAo+ICsJCQkJICAgICBNS0RFVigqbWFqb3Is IGF1eF9kZXYtPmluZGV4KSwgTlVMTCwKPiArCQkJCSAgICAgImRybV9hdXgtJWQiLCBhdXhfZGV2 LT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYtPmRldikpIHsKPiArCQlyZXMgPSBQVFJf RVJSKGF1eF9kZXYtPmRldik7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlwcl9kZWJ1 ZygiZHJtX2F1eC1kZXY6IGF1eCBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gKwkJ IGF1eC0+bmFtZSwgYXV4X2Rldi0+aW5kZXgpOwo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJ cmV0dXJuX2RybV9hdXhfZGV2KGF1eF9kZXYpOwo+ICsJcmV0dXJuIHJlczsKPiArCj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgYXV4ZGV2X2RldGFjaF9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCwg dm9pZCAqZGF0YSkKPiArewo+ICsJaW50ICptYWpvciA9IGRhdGE7Cj4gKwlpbnQgbWlub3I7Cj4g KwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9hdXhf ZGV2X2dldF9ieV9hdXgoYXV4KTsKPiArCWlmICghYXV4X2RldikgLyogYXR0YWNoIG11c3QgaGF2 ZSBmYWlsZWQgKi8KPiArCQlyZXR1cm4gMDsKPiArCj4gKwltaW5vciA9IGF1eF9kZXYtPmluZGV4 Owo+ICsJcmV0dXJuX2RybV9hdXhfZGV2KGF1eF9kZXYpOwo+ICsJZGV2aWNlX2Rlc3Ryb3koZHJt X2F1eF9kZXZfY2xhc3MsIE1LREVWKCptYWpvciwgbWlub3IpKTsKPiArCj4gKwlwcl9kZWJ1Zygi ZHJtX2F1eC1kZXY6IGF1eCBbJXNdIHVucmVnaXN0ZXJlZFxuIiwgYXV4LT5uYW1lKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF1eGRldl9pbmZvcm1fY2IoaW50IGFjdGlv biwgc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICsJc3dpdGNoIChhY3Rpb24pIHsKPiAr CWNhc2UgRFJNX0RQX0FERF9BVVg6Cj4gKwkJcmV0dXJuIGF1eGRldl9hdHRhY2hfYXV4KGF1eCwg JmRybV9kZXZfbWFqb3IpOwo+ICsJY2FzZSBEUk1fRFBfREVMX0FVWDoKPiArCQlyZXR1cm4gYXV4 ZGV2X2RldGFjaF9hdXgoYXV4LCAmZHJtX2Rldl9tYWpvcik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IGRybV9hdXhfZGV2X2luaXQodm9pZCkK PiArewo+ICsJaW50IHJlczsKPiArCj4gKwlwcmludGsoS0VSTl9JTkZPICJkcm0gZHAgYXV4IC9k ZXYgZW50cmllcyBkcml2ZXJcbiIpOwo+ICsKPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigwLCAi YXV4IiwgJmF1eGRldl9mb3BzKTsKPiArCWlmIChyZXMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsJ ZHJtX2Rldl9tYWpvciA9IHJlczsKPiArCj4gKwlkcm1fYXV4X2Rldl9jbGFzcyA9IGNsYXNzX2Ny ZWF0ZShUSElTX01PRFVMRSwgImRybV9hdXgtZGV2Iik7Cj4gKwlpZiAoSVNfRVJSKGRybV9hdXhf ZGV2X2NsYXNzKSkgewo+ICsJCXJlcyA9IFBUUl9FUlIoZHJtX2F1eF9kZXZfY2xhc3MpOwo+ICsJ CWdvdG8gb3V0X3VucmVnX2NocmRldjsKPiArCX0KPiArCWRybV9hdXhfZGV2X2NsYXNzLT5kZXZf Z3JvdXBzID0gZHJtX2F1eF9ncm91cHM7Cj4gKwo+ICsJLyogS2VlcCB0cmFjayBvZiBEUCBhdXgg dGhhdCB3aWxsIGJlIGFkZGVkIG9yIHJlbW92ZWQgbGF0ZXIgKi8KPiArCWRybV9kcF9hdXhfc2V0 X2F1eF9kZXYoJmF1eGRldl9pbmZvcm1fY2IpOwo+ICsKPiArCS8qIEJpbmQgdG8gYWxyZWFkeSBl eGlzdGluZyBEUCBhdXggKi8KPiArCXJlcyA9IGRybV9kcF9hdXhfZm9yX2VhY2goJmRybV9kZXZf bWFqb3IsIGF1eGRldl9hdHRhY2hfYXV4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK291dF91 bnJlZ19jaHJkZXY6Cj4gKwl1bnJlZ2lzdGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7 Cj4gK291dDoKPiArCXByaW50ayhLRVJOX0VSUiAiJXM6IERyaXZlciBJbml0aWFsaXNhdGlvbiBm YWlsZWRcbiIsIF9fRklMRV9fKTsKPiArCXJldHVybiByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIF9fZXhpdCBkcm1fYXV4X2Rldl9leGl0KHZvaWQpCj4gK3sKPiArCXByaW50ayhLRVJOX0lO Rk8gImRybSBkcCBhdXggL2RldiBlbnRyaWVzIGRyaXZlciAtIHVubG9hZGluZ1xuIik7Cj4gKwlk cm1fZHBfYXV4X3NldF9hdXhfZGV2KE5VTEwpOwo+ICsJZHJtX2RwX2F1eF9mb3JfZWFjaCgmZHJt X2Rldl9tYWpvciwgYXV4ZGV2X2RldGFjaF9hdXgpOwo+ICsJY2xhc3NfZGVzdHJveShkcm1fYXV4 X2Rldl9jbGFzcyk7Cj4gKwl1bnJlZ2lzdGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7 Cj4gK30KPiArCj4gK01PRFVMRV9BVVRIT1IoIlJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50 b2dub2xsaUBpbnRlbC5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiRFJNIERQIEFVWCAv ZGV2IGVudHJpZXMgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArCj4gK21v ZHVsZV9pbml0KGRybV9hdXhfZGV2X2luaXQpOwo+ICttb2R1bGVfZXhpdChkcm1fYXV4X2Rldl9l eGl0KTsKPiAtLSAKPiAyLjQuMwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwg SW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK