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 15:00:54 +0300 Message-ID: <20150922120054.GM26517@intel.com> 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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 7317F6E620 for ; Tue, 22 Sep 2015 05:01:16 -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 d3JpdGluZyBkb2VzIG5vdCB1cGRhdGUgdGhlIG9mZnNldCBvZiB0aGUgZmlsZS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29t Pgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICB8ICAgNCArCj4gIGRyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9h dXgtZGV2LmMgfCAzMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIDMgZmlsZXMgY2hhbmdlZCwgMzMxIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXV4LWRldi5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCAxYTBh OGRmLi5lYWU4NDdjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjUsNiArMjUsMTAgQEAgY29uZmlnIERS TV9NSVBJX0RTSQo+ICAJYm9vbAo+ICAJZGVwZW5kcyBvbiBEUk0KPiAgCj4gK2NvbmZpZyBEUk1f QVVYX0NIQVJERVYKPiArCXRyaXN0YXRlICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiArCWRlcGVu ZHMgb24gRFJNCj4gKwo+ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiAgCXRyaXN0YXRlCj4gIAlk ZXBlbmRzIG9uIERSTQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA0NWU3NzE5Li5hMWE5NDMwNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKPiBAQCAtMzIsNiArMzIsNyBAQCBDRkxBR1NfZHJtX3RyYWNlX3BvaW50cy5vIDo9 IC1JJChzcmMpCj4gIAo+ICBvYmotJChDT05GSUdfRFJNKQkrPSBkcm0ubwo+ICBvYmotJChDT05G SUdfRFJNX01JUElfRFNJKSArPSBkcm1fbWlwaV9kc2kubwo+ICtvYmotJChDT05GSUdfRFJNX0FV WF9DSEFSREVWKSArPSBkcm1fYXV4LWRldi5vCj4gIG9iai0kKENPTkZJR19EUk1fVFRNKQkrPSB0 dG0vCj4gIG9iai0kKENPTkZJR19EUk1fVERGWCkJKz0gdGRmeC8KPiAgb2JqLSQoQ09ORklHX0RS TV9SMTI4KQkrPSByMTI4Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F1eC1k ZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXV4LWRldi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi5mY2MzMzRhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fYXV4LWRldi5jCj4gQEAgLTAsMCArMSwzMjYgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgUmFmYWVsIEFudG9nbm9sbGkgPHJh ZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGFzbS91 YWNjZXNzLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2F1eF9kZXYgewo+ICsJc3RydWN0IGxp c3RfaGVhZCBsaXN0Owo+ICsJdW5zaWduZWQgaW5kZXg7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICt9Owo+ICsKPiArI2RlZmluZSBEUk1fQVVY X01JTk9SUwkyNTYKPiArc3RhdGljIGludCBkcm1fYXV4X2Rldl9jb3VudCA9IDA7Cj4gK3N0YXRp YyBMSVNUX0hFQUQoZHJtX2F1eF9kZXZfbGlzdCk7Cj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0so ZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2F1eF9kZXYg KmRybV9hdXhfZGV2X2dldF9ieV9taW5vcih1bnNpZ25lZCBpbmRleCkKPiArewo+ICsJc3RydWN0 IGRybV9hdXhfZGV2ICphdXhfZGV2Owo+ICsKPiArCXNwaW5fbG9jaygmZHJtX2F1eF9kZXZfbGlz dF9sb2NrKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYXV4X2RldiwgJmRybV9hdXhfZGV2X2xp c3QsIGxpc3QpIHsKPiArCQlpZiAoYXV4X2Rldi0+aW5kZXggPT0gaW5kZXgpCj4gKwkJCWdvdG8g Zm91bmQ7Cj4gKwl9Cj4gKwo+ICsJYXV4X2RldiA9IE5VTEw7Cj4gK2ZvdW5kOgo+ICsJc3Bpbl91 bmxvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fYXV4X2RldiAqZHJtX2F1eF9kZXZfZ2V0X2J5X2F1eChz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9k ZXY7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShhdXhfZGV2LCAmZHJtX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ICsJCWlm IChhdXhfZGV2LT5hdXggPT0gYXV4KQo+ICsJCQlnb3RvIGZvdW5kOwo+ICsJfQo+ICsKPiArCWF1 eF9kZXYgPSBOVUxMOwo+ICtmb3VuZDoKPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0 X2xvY2spOwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2F1eF9kZXYgKmdldF9mcmVlX2RybV9hdXhfZGV2KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4g K3sKPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiArCWludCBpbmRleDsKPiArCj4g KwlzcGluX2xvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlpbmRleCA9IGRybV9hdXhf ZGV2X2NvdW50Owo+ICsJc3Bpbl91bmxvY2soJmRybV9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlp ZiAoaW5kZXggPj0gRFJNX0FVWF9NSU5PUlMpIHsKPiArCQlwcmludGsoS0VSTl9FUlIgImkyYy1k ZXY6IE91dCBvZiBkZXZpY2UgbWlub3JzICglZClcbiIsCj4gKwkJICAgICAgIGluZGV4KTsKPiAr CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiArCX0KPiArCj4gKwlhdXhfZGV2ID0ga3phbGxv YyhzaXplb2YoKmF1eF9kZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYXV4X2RldikKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiArCWF1eF9k ZXYtPmluZGV4ID0gaW5kZXg7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xv Y2spOwo+ICsJZHJtX2F1eF9kZXZfY291bnQrKzsKPiArCWxpc3RfYWRkX3RhaWwoJmF1eF9kZXYt Pmxpc3QsICZkcm1fYXV4X2Rldl9saXN0KTsKPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9s aXN0X2xvY2spOwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJl dHVybl9kcm1fYXV4X2RldihzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYpCj4gK3sKPiArCXNw aW5fbG9jaygmZHJtX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCWxpc3RfZGVsKCZhdXhfZGV2LT5s aXN0KTsKPiArCXNwaW5fdW5sb2NrKCZkcm1fYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJa2ZyZWUo YXV4X2Rldik7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsCj4gKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRf YnlfbWlub3IoTUlOT1IoZGV2LT5kZXZ0KSk7Cj4gKwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJl dHVybiAtRU5PREVWOwo+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGF1eF9kZXYtPmF1 eC0+bmFtZSk7Cj4gK30KPiArc3RhdGljIERFVklDRV9BVFRSX1JPKG5hbWUpOwo+ICsKPiArc3Rh dGljIHNzaXplX3QgY29ubmVjdG9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgICAg ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2F1eF9kZXYgKmF1eF9kZXYgPSBkcm1fYXV4X2Rldl9nZXRfYnlfbWlub3IoTUlOT1Io ZGV2LT5kZXZ0KSk7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0IGRldmlj ZSAqY29ubl9kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsK PiArCj4gKwlpZiAoIWF1eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlhdXggPSBhdXhf ZGV2LT5hdXg7Cj4gKwljb25uX2RldiA9IGF1eC0+Y29ubmVjdG9yOwo+ICsJaWYgKCFjb25uX2Rl dikKPiArCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKPiArCj4gKwljb25uZWN0 b3IgPSBkZXZfZ2V0X2RydmRhdGEoYXV4LT5jb25uZWN0b3IpOwo+ICsKPiArCXJldHVybiBzcHJp bnRmKGJ1ZiwgIiVzXG4iLCBjb25uZWN0b3ItPm5hbWUpOwo+ICt9Cj4gK3N0YXRpYyBERVZJQ0Vf QVRUUl9STyhjb25uZWN0b3IpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRybV9h dXhfYXR0cnNbXSA9IHsKPiArCSZkZXZfYXR0cl9uYW1lLmF0dHIsCj4gKwkmZGV2X2F0dHJfY29u bmVjdG9yLmF0dHIsCj4gKwlOVUxMLAo+ICt9Owo+ICtBVFRSSUJVVEVfR1JPVVBTKGRybV9hdXgp Owo+ICsKPiArc3RhdGljIGludCBhdXhkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2Rl KTsKPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsKPiArCj4gKwlhdXhfZGV2ID0gZHJt X2F1eF9kZXZfZ2V0X2J5X21pbm9yKG1pbm9yKTsKPiArCWlmICghYXV4X2RldikKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCj4gKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBhdXhfZGV2Owo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGF1eGRldl9yZWFkKHN0cnVjdCBmaWxl ICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCj4gKwkJCSAgIGxvZmZfdCAq b2Zmc2V0KQo+ICt7Cj4gKwljaGFyICpsb2NhbGJ1ZjsKPiArCXNzaXplX3QgcmVzOwo+ICsJc3Ry dWN0IGRybV9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsKPiArCWxv Y2FsYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBjb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGxvY2FsYnVm KSkKPiArCQlyZXR1cm4gUFRSX0VSUihidWYpOwo+ICsKPiArCXJlcyA9IGRybV9kcF9kcGNkX3Jl YWQoYXV4X2Rldi0+YXV4LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgY291bnQpOwo+ICsJaWYgKHJlcyA8 IDApCj4gKwkJZ290byBmaW5pc2g7CgpyZWFkL3dyaXRlIHdpbGwgbmVlZCB0byBkbyB0aGUgYWNj ZXNzIGluIDE2IGJ5dGUgY2h1bmtzLiBUaGF0J3MgdGhlIG1heAphbW91bnQgb2YgZGF0YSB0aGF0 IGNhbiBiZSB0cmFuc2ZlcnJlZCB3aXRoIGEgc2luZ2xlIEFVWCBvcGVyYXRpb24uIEkKc3VwcG9z ZSB0aGF0IHdvdWxkIGFsc28gYXZvaWQgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgbGFyZ2UgYnVm ZmVycwpzaW5jZSB5b3UgY2FuIGp1c3QgaGF2ZSBhIDE2IGJ5dGUgYnVmZmVyIG9uIHRoZSBzdGFj ayBhbmQga2VlcCByZXVzaW5nCml0IHdoaWxlIHlvdSBpdGVyYXRlIHRocm91Z2ggdGhlIHRvdGFs IGNvdW50LiBJJ20gbm90IHN1cmUgd2hhdCBhcmUKdGhlIGV4cGVjdGVkIHNlbWFudGljcyBvZiBy ZWFkL3dyaXRlIGlmIHlvdSBkbyBpdCBpbiBjaHVua3MgYW5kIGhpdAphIGNvcHlfe3RvLGZyb219 X3VzZXIoKSBmYWlsdXJlIHNvbWV3aGVyZSBkb3duIHRoZSBsaW5lLiBCdXQgSSBzdXBwb3NlCmFj Y2Vzc19vaygpIHVwZnJvbnQgZm9yIHRoZSB3aG9sZSB1c2VyIGJ1ZmZlciBjb3VsZCBhdm9pZCB0 aGF0IGlzc3VlLgoKQWxzbyB0aGUgc2l6ZSBvZiB0aGUgRFBDRCBhZGRyZXNzIHNwYWNlIGlzIDE8 PDIwIGJ5dGVzLCBzbyB5b3UnbGwgbmVlZCB0bwpsaW1pdCB0aGUgYWNjZXNzIHRvIHN0YXkgd2l0 aGluIHRoYXQuICdzaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKScKY2FuIGJlIHVzZWQgdG8g Z2V0IHRoZSBmaWxlIHNpemUsIHNvIHlvdSBzaG91bGQgYWxsb3cgdGhlIG9mZnNldCB0bwpyZWFj aCAxPDwyMCwgYnV0IG5vdCBiZXlvbmQuIHJlYWQvd3JpdGUgc2hvdWxkIHByb2Nlc3MgYXMgbXVj aCBtdWNoIG9mCnRoZSBkYXRhIHRoYXQgdGhleSBjYW4gZ2l2ZW4gdGhlIGN1cnJlbnQgZmlsZSBv ZmZzZXQsIGFuZCByZXR1cm4gaG93Cm1hbnkgYnl0ZXMgbWFkZSBpdCBpbi9vdXQgKGNhbiBhbHNv IGJlIDAgaWYgb2Zmc2V0IHdhcyBhbHJlYWR5IGF0IDE8PDIwKS4KCj4gKwo+ICsJaWYgKGNvcHlf dG9fdXNlcihidWYsIGxvY2FsYnVmLCByZXMpKQo+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gKwo+ICtm aW5pc2g6Cj4gKwlrZnJlZShsb2NhbGJ1Zik7Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3NpemVfdCBhdXhkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIg X191c2VyICpidWYsCj4gKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQo+ICt7 Cj4gKwljaGFyICpsb2NhbGJ1ZjsKPiArCXNzaXplX3QgcmVzOwo+ICsJc3RydWN0IGRybV9hdXhf ZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsKPiArCWxvY2FsYnVmID0gbWVt ZHVwX3VzZXIoYnVmLCBjb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGxvY2FsYnVmKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihidWYpOwo+ICsKPiArCXJlcyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYt PmF1eCwgKm9mZnNldCwgbG9jYWxidWYsIGNvdW50KTsKPiArCWtmcmVlKGxvY2FsYnVmKTsKPiAr Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBhdXhkZXZfZm9wcyA9IHsKPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiArCS5s bHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKPiArCS5yZWFkCQk9IGF1eGRldl9yZWFkLAo+ ICsJLndyaXRlCQk9IGF1eGRldl93cml0ZSwKPiArCS5vcGVuCQk9IGF1eGRldl9vcGVuLAo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBjbGFzcyAqZHJtX2F1eF9kZXZfY2xhc3M7Cj4gK3N0YXRp YyBpbnQgZHJtX2Rldl9tYWpvciA9IC0xOwo+ICsKPiArI2RlZmluZSB0b19hdXhkZXYoZCkgY29u dGFpbmVyX29mKGQsIHN0cnVjdCBkcm1fYXV4X2RldiwgYXV4KQo+ICsKPiArc3RhdGljIGludCBh dXhkZXZfYXR0YWNoX2F1eChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB2b2lkICpkYXRhKQo+ICt7 Cj4gKwlpbnQgKm1ham9yID0gZGF0YTsKPiArCXN0cnVjdCBkcm1fYXV4X2RldiAqYXV4X2RldjsK PiArCWludCByZXM7Cj4gKwo+ICsJYXV4X2RldiA9IGdldF9mcmVlX2RybV9hdXhfZGV2KGF1eCk7 Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYpKQo+ICsJCXJldHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ ICsKPiArCWF1eF9kZXYtPmRldiA9IGRldmljZV9jcmVhdGUoZHJtX2F1eF9kZXZfY2xhc3MsIGF1 eC0+ZGV2LAo+ICsJCQkJICAgICBNS0RFVigqbWFqb3IsIGF1eF9kZXYtPmluZGV4KSwgTlVMTCwK PiArCQkJCSAgICAgImRybV9hdXgtJWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJS KGF1eF9kZXYtPmRldikpIHsKPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9kZXYtPmRldik7Cj4gKwkJ Z290byBlcnJvcjsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiZHJtX2F1eC1kZXY6IGF1eCBbJXNd IHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gKwkJIGF1eC0+bmFtZSwgYXV4X2Rldi0+aW5k ZXgpOwo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuX2RybV9hdXhfZGV2KGF1eF9k ZXYpOwo+ICsJcmV0dXJuIHJlczsKPiArCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXV4ZGV2X2Rl dGFjaF9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCwgdm9pZCAqZGF0YSkKPiArewo+ICsJaW50 ICptYWpvciA9IGRhdGE7Cj4gKwlpbnQgbWlub3I7Cj4gKwlzdHJ1Y3QgZHJtX2F1eF9kZXYgKmF1 eF9kZXY7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9hdXhfZGV2X2dldF9ieV9hdXgoYXV4KTsKPiAr CWlmICghYXV4X2RldikgLyogYXR0YWNoIG11c3QgaGF2ZSBmYWlsZWQgKi8KPiArCQlyZXR1cm4g MDsKPiArCj4gKwltaW5vciA9IGF1eF9kZXYtPmluZGV4Owo+ICsJcmV0dXJuX2RybV9hdXhfZGV2 KGF1eF9kZXYpOwo+ICsJZGV2aWNlX2Rlc3Ryb3koZHJtX2F1eF9kZXZfY2xhc3MsIE1LREVWKCpt YWpvciwgbWlub3IpKTsKPiArCj4gKwlwcl9kZWJ1ZygiZHJtX2F1eC1kZXY6IGF1eCBbJXNdIHVu cmVnaXN0ZXJlZFxuIiwgYXV4LT5uYW1lKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGF1eGRldl9pbmZvcm1fY2IoaW50IGFjdGlvbiwgc3RydWN0IGRybV9kcF9hdXggKmF1 eCkKPiArewo+ICsJc3dpdGNoIChhY3Rpb24pIHsKPiArCWNhc2UgRFJNX0RQX0FERF9BVVg6Cj4g KwkJcmV0dXJuIGF1eGRldl9hdHRhY2hfYXV4KGF1eCwgJmRybV9kZXZfbWFqb3IpOwo+ICsJY2Fz ZSBEUk1fRFBfREVMX0FVWDoKPiArCQlyZXR1cm4gYXV4ZGV2X2RldGFjaF9hdXgoYXV4LCAmZHJt X2Rldl9tYWpvcik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgX19pbml0IGRybV9hdXhfZGV2X2luaXQodm9pZCkKPiArewo+ICsJaW50IHJlczsKPiArCj4g KwlwcmludGsoS0VSTl9JTkZPICJkcm0gZHAgYXV4IC9kZXYgZW50cmllcyBkcml2ZXJcbiIpOwo+ ICsKPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigwLCAiYXV4IiwgJmF1eGRldl9mb3BzKTsKPiAr CWlmIChyZXMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsJZHJtX2Rldl9tYWpvciA9IHJlczsKPiAr Cj4gKwlkcm1fYXV4X2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImRybV9h dXgtZGV2Iik7Cj4gKwlpZiAoSVNfRVJSKGRybV9hdXhfZGV2X2NsYXNzKSkgewo+ICsJCXJlcyA9 IFBUUl9FUlIoZHJtX2F1eF9kZXZfY2xhc3MpOwo+ICsJCWdvdG8gb3V0X3VucmVnX2NocmRldjsK PiArCX0KPiArCWRybV9hdXhfZGV2X2NsYXNzLT5kZXZfZ3JvdXBzID0gZHJtX2F1eF9ncm91cHM7 Cj4gKwo+ICsJLyogS2VlcCB0cmFjayBvZiBEUCBhdXggdGhhdCB3aWxsIGJlIGFkZGVkIG9yIHJl bW92ZWQgbGF0ZXIgKi8KPiArCWRybV9kcF9hdXhfc2V0X2F1eF9kZXYoJmF1eGRldl9pbmZvcm1f Y2IpOwo+ICsKPiArCS8qIEJpbmQgdG8gYWxyZWFkeSBleGlzdGluZyBEUCBhdXggKi8KPiArCXJl cyA9IGRybV9kcF9hdXhfZm9yX2VhY2goJmRybV9kZXZfbWFqb3IsIGF1eGRldl9hdHRhY2hfYXV4 KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK291dF91bnJlZ19jaHJkZXY6Cj4gKwl1bnJlZ2lz dGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7Cj4gK291dDoKPiArCXByaW50ayhLRVJO X0VSUiAiJXM6IERyaXZlciBJbml0aWFsaXNhdGlvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKPiAr CXJldHVybiByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkcm1fYXV4X2Rldl9l eGl0KHZvaWQpCj4gK3sKPiArCXByaW50ayhLRVJOX0lORk8gImRybSBkcCBhdXggL2RldiBlbnRy aWVzIGRyaXZlciAtIHVubG9hZGluZ1xuIik7Cj4gKwlkcm1fZHBfYXV4X3NldF9hdXhfZGV2KE5V TEwpOwo+ICsJZHJtX2RwX2F1eF9mb3JfZWFjaCgmZHJtX2Rldl9tYWpvciwgYXV4ZGV2X2RldGFj aF9hdXgpOwo+ICsJY2xhc3NfZGVzdHJveShkcm1fYXV4X2Rldl9jbGFzcyk7Cj4gKwl1bnJlZ2lz dGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7Cj4gK30KPiArCj4gK01PRFVMRV9BVVRI T1IoIlJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBpbnRlbC5jb20+Iik7Cj4g K01PRFVMRV9ERVNDUklQVElPTigiRFJNIERQIEFVWCAvZGV2IGVudHJpZXMgZHJpdmVyIik7Cj4g K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArCj4gK21vZHVsZV9pbml0KGRybV9hdXhfZGV2X2lu aXQpOwo+ICttb2R1bGVfZXhpdChkcm1fYXV4X2Rldl9leGl0KTsKPiAtLSAKPiAyLjQuMwo+IAo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRl dmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAK VmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=