From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 1/2] drm: Add SCDC helpers Date: Fri, 25 Sep 2015 11:29:27 +0300 Message-ID: <874miioqag.fsf@intel.com> References: <1443113495-32491-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 3FB346F01C for ; Fri, 25 Sep 2015 01:26:10 -0700 (PDT) In-Reply-To: <1443113495-32491-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCAyNCBTZXAgMjAxNSwgVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGdtYWls LmNvbT4gd3JvdGU6Cj4gRnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4K Pgo+IFNDREMgaXMgYSBtZWNoYW5pc20gZGVmaW5lZCBpbiB0aGUgSERNSSAyLjAgc3BlY2lmaWNh dGlvbiB0aGF0IGFsbG93cwo+IHRoZSBzb3VyY2UgYW5kIHNpbmsgZGV2aWNlcyB0byBjb21tdW5p Y2F0ZS4KPgo+IFRoaXMgY29tbWl0IGludHJvZHVjZXMgaGVscGVycyB0byBhY2Nlc3MgdGhlIFND REMgYW5kIHByb3ZpZGVzIHRoZQo+IHN5bWJvbGljIG5hbWVzIGZvciB0aGUgdmFyaW91cyByZWdp c3RlcnMgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KPgo+IFNpZ25lZC1vZmYtYnk6IFRo aWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Cj4gLS0tCj4gIERvY3VtZW50YXRpb24v RG9jQm9vay9kcm0udG1wbCAgICB8ICAgNiArKwo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAg ICAgICAgICAgfCAgIDQgKysKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgIHwg ICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9zY2RjX2hlbHBlci5jIHwgMTExICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX3NjZGNfaGVscGVy LmggICAgIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDUg ZmlsZXMgY2hhbmdlZCwgMjQ2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9kcm1fc2NkY19oZWxwZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9kcm0vZHJtX3NjZGNfaGVscGVyLmgKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L0RvY0Jvb2svZHJtLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKPiBpbmRl eCBiNGNjNmI3N2QzODIuLjMwNDViZTQ5MjEyNSAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9u L0RvY0Jvb2svZHJtLnRtcGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwK PiBAQCAtMjQxMCw2ICsyNDEwLDEyIEBAIHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAgIUVkcml2ZXJzL2dwdS9kcm0vZHJtX2hkY3BfaGVscGVyLmMKPiAgICAg IDwvc2VjdDI+Cj4gICAgICA8c2VjdDI+Cj4gKyAgICAgIDx0aXRsZT5TQ0RDIEhlbHBlciBGdW5j dGlvbnMgUmVmZXJlbmNlPC90aXRsZT4KPiArIVBkcml2ZXJzL2dwdS9kcm0vZHJtX3NjZGNfaGVs cGVyLmMgc2NkYyBoZWxwZXJzCj4gKyFJaW5jbHVkZS9kcm0vZHJtX3NjZGNfaGVscGVyLmgKPiAr IUVkcml2ZXJzL2dwdS9kcm0vZHJtX3NjZGNfaGVscGVyLmMKPiArICAgIDwvc2VjdDI+Cj4gKyAg ICA8c2VjdDI+Cj4gICAgICAgIDx0aXRsZT5FRElEIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNl PC90aXRsZT4KPiAgIUVkcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwo+ICAgICAgPC9zZWN0Mj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwo+IGluZGV4IGZiM2E4MTViNTNmNi4uNWRjMjMyNzhiZTI3IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK PiBAQCAtNjQsNiArNjQsMTAgQEAgY29uZmlnIERSTV9IRENQCj4gIAlib29sCj4gIAlkZXBlbmRz IG9uIERSTV9LTVNfSEVMUEVSCj4gIAo+ICtjb25maWcgRFJNX1NDREMKPiArCWJvb2wKPiArCWRl cGVuZHMgb24gRFJNX0tNU19IRUxQRVIKPiArCj4gIGNvbmZpZyBEUk1fTE9BRF9FRElEX0ZJUk1X QVJFCj4gIAlib29sICJBbGxvdyB0byBzcGVjaWZ5IGFuIEVESUQgZGF0YSBzZXQgaW5zdGVhZCBv ZiBwcm9iaW5nIGZvciBpdCIKPiAgCWRlcGVuZHMgb24gRFJNX0tNU19IRUxQRVIKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl Cj4gaW5kZXggYzRhMDJhMTgxMTE1Li5lMjJjM2RmZjRhZTUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAg LTIzLDYgKzIzLDcgQEAgZHJtLSQoQ09ORklHX09GKSArPSBkcm1fb2Yubwo+ICBkcm1fa21zX2hl bHBlci15IDo9IGRybV9jcnRjX2hlbHBlci5vIGRybV9kcF9oZWxwZXIubyBkcm1fcHJvYmVfaGVs cGVyLm8gXAo+ICAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3RvcG9sb2d5Lm8gZHJt X2F0b21pY19oZWxwZXIubwo+ICBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fSERDUCkgKz0g ZHJtX2hkY3BfaGVscGVyLm8KPiArZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX1NDREMpICs9 IGRybV9zY2RjX2hlbHBlci5vCj4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9MT0FEX0VE SURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwo+ICBkcm1fa21zX2hlbHBlci0kKENPTkZJ R19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8KPiAgZHJtX2ttc19oZWxw ZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBkcm1fZmJfY21hX2hlbHBlci5vCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc2NkY19oZWxwZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fc2NkY19oZWxwZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5kYmM5Yzc3MGY1YjQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9zY2RjX2hlbHBlci5jCj4gQEAgLTAsMCArMSwxMTEgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDE1IE5WSURJQSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQo+ICsgKiBu ZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucwo+ICsgKiBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF Ugo+ICsgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3NjZGNfaGVscGVyLmg+Cj4g Kwo+ICsvKioKPiArICogRE9DOiBzY2RjIGhlbHBlcnMKPiArICoKPiArICogU3RhdHVzIGFuZCBD b250cm9sIERhdGEgQ2hhbm5lbCAoU0NEQykgaXMgYSBtZWNoYW5pc20gaW50cm9kdWNlZCBieSB0 aGUKPiArICogSERNSSAyLjAgc3BlY2lmaWNhdGlvbi4gSXQgaXMgYSBwb2ludC10by1wb2ludCBw cm90b2NvbCB0aGF0IGFsbG93cyB0aGUKPiArICogSERNSSBzb3VyY2UgYW5kIEhETUkgc2luayB0 byBleGNoYW5nZSBkYXRhLiBUaGUgc2FtZSBJMkMgaW50ZXJmYWNlIHRoYXQKPiArICogaXMgdXNl ZCB0byBhY2Nlc3MgRURJRCBzZXJ2ZXMgYXMgdGhlIHRyYW5zcG9ydCBtZWNoYW5pc20gZm9yIFND REMuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBTQ0RDX0kyQ19TTEFWRV9BRERSRVNTIDB4NTQKPiAr Cj4gKy8qKgo+ICsgKiBkcm1fc2NkY19yZWFkIC0gcmVhZCBhIGJsb2NrIG9mIGRhdGEgZnJvbSBT Q0RDCj4gKyAqIEBhZGFwdGVyOiBJMkMgY29udHJvbGxlcgo+ICsgKiBAb2Zmc2V0OiBzdGFydCBv ZmZzZXQgb2YgYmxvY2sgdG8gcmVhZAo+ICsgKiBAYnVmZmVyOiByZXR1cm4gbG9jYXRpb24gZm9y IHRoZSBibG9jayB0byByZWFkCj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBibG9jayB0byByZWFk Cj4gKyAqCj4gKyAqIFJlYWRzIGEgYmxvY2sgb2YgZGF0YSBmcm9tIFNDREMsIHN0YXJ0aW5nIGF0 IGEgZ2l2ZW4gb2Zmc2V0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUgbnVtYmVyIG9m IGJ5dGVzIHJlYWQgZnJvbSBTQ0RDIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl Lgo+ICsgKi8KPiArc3NpemVfdCBkcm1fc2NkY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRh cHRlciwgdTggb2Zmc2V0LCB2b2lkICpidWZmZXIsCj4gKwkJICAgICAgc2l6ZV90IHNpemUpCj4g K3sKPiArCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl0gPSB7Cj4gKwkJewo+ICsJCQkuYWRkciA9IFND RENfSTJDX1NMQVZFX0FERFJFU1MsCj4gKwkJCS5mbGFncyA9IDAsCj4gKwkJCS5sZW4gPSAxLAo+ ICsJCQkuYnVmID0gJm9mZnNldCwKPiArCQl9LCB7Cj4gKwkJCS5hZGRyID0gU0NEQ19JMkNfU0xB VkVfQUREUkVTUywKPiArCQkJLmZsYWdzID0gSTJDX01fUkQsCj4gKwkJCS5sZW4gPSBzaXplLAo+ ICsJCQkuYnVmID0gYnVmZmVyLAo+ICsJCX0KPiArCX07Cj4gKwo+ICsJcmV0dXJuIGkyY190cmFu c2ZlcihhZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9zY2RjX3JlYWQpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9zY2RjX3dyaXRlIC0gd3Jp dGUgYSBibG9jayBvZiBkYXRhIHRvIFNDREMKPiArICogQGFkYXB0ZXI6IEkyQyBjb250cm9sbGVy Cj4gKyAqIEBvZmZzZXQ6IHN0YXJ0IG9mZnNldCBvZiBibG9jayB0byB3cml0ZQo+ICsgKiBAYnVm ZmVyOiBibG9jayBvZiBkYXRhIHRvIHdyaXRlCj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBibG9j ayB0byB3cml0ZQo+ICsgKgo+ICsgKiBXcml0ZXMgYSBibG9jayBvZiBkYXRhIHRvIFNDREMsIHN0 YXJ0aW5nIGF0IGEgZ2l2ZW4gb2Zmc2V0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUg bnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gU0NEQyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KPiArICovCj4gK3NzaXplX3QgZHJtX3NjZGNfd3JpdGUoc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyLCB1OCBvZmZzZXQsCj4gKwkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZl ciwgc2l6ZV90IHNpemUpCj4gK3sKPiArCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKPiArCQkuYWRk ciA9IFNDRENfSTJDX1NMQVZFX0FERFJFU1MsCj4gKwkJLmZsYWdzID0gMCwKPiArCQkubGVuID0g MSArIHNpemUsCj4gKwkJLmJ1ZiA9IE5VTEwsCj4gKwl9Owo+ICsJdm9pZCAqZGF0YTsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJZGF0YSA9IGttYWxsb2MoMSArIHNpemUsIEdGUF9LRVJORUwpOwoKSnVz dCBhIGRyaXZlLWJ5IGNvbW1lbnQgd2l0aG91dCBwcm9wZXIgcmV2aWV3Li4uIEdGUF9URU1QT1JB Ulk/CgpCUiwKSmFuaS4KCj4gKwlpZiAoIWRhdGEpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJbXNnLmJ1ZiA9IGRhdGE7Cj4gKwo+ICsJbWVtY3B5KGRhdGEsICZvZmZzZXQsIHNpemVvZihv ZmZzZXQpKTsKPiArCW1lbWNweShkYXRhICsgMSwgYnVmZmVyLCBzaXplKTsKPiArCj4gKwllcnIg PSBpMmNfdHJhbnNmZXIoYWRhcHRlciwgJm1zZywgMSk7Cj4gKwo+ICsJa2ZyZWUoZGF0YSk7Cj4g Kwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9zY2RjX3dyaXRlKTsK PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3NjZGNfaGVscGVyLmggYi9pbmNsdWRlL2Ry bS9kcm1fc2NkY19oZWxwZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi4zNjRjZjJhYTliMjUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9kcm0v ZHJtX3NjZGNfaGVscGVyLmgKPiBAQCAtMCwwICsxLDEyNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMTUgTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCj4gKyAqIG5leHQgcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zCj4gKyAqIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4gKyAqIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIERSTV9TQ0RDX0hF TFBFUl9ICj4gKyNkZWZpbmUgRFJNX1NDRENfSEVMUEVSX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51 eC9pMmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICsjZGVmaW5lIFNDRENf U0lOS19WRVJTSU9OIDB4MDEKPiArI2RlZmluZSBTQ0RDX1NPVVJDRV9WRVJTSU9OIDB4MDIKPiAr Cj4gKyNkZWZpbmUgU0NEQ19VUERBVEVfMCAweDEwCj4gKyNkZWZpbmUgU0NEQ19SRUFEX1JFUVVF U1RfVEVTVCAoMSA8PCAyKQo+ICsjZGVmaW5lIFNDRENfQ0VEX1VQREFURSAoMSA8PCAxKQo+ICsj ZGVmaW5lIFNDRENfU1RBVFVTX1VQREFURSAoMSA8PCAwKQo+ICsjZGVmaW5lIFNDRENfVVBEQVRF XzEgMHgxMQo+ICsKPiArI2RlZmluZSBTQ0RDX1RNRFNfQ09ORklHIDB4MjAKPiArI2RlZmluZSBT Q0RDX1RNRFNfQklUX0NMT0NLX1JBVElPX0JZXzQwICgxIDw8IDEpCj4gKyNkZWZpbmUgU0NEQ19U TURTX0JJVF9DTE9DS19SQVRJT19CWV8xMCAoMCA8PCAxKQo+ICsjZGVmaW5lIFNDRENfU0NSQU1C TElOR19FTkFCTEUgKDEgPDwgMCkKPiArI2RlZmluZSBTQ0RDX1NDUkFNQkxFUl9TVEFUVVMgMHgy MQo+ICsjZGVmaW5lIFNDRENfU0NSQU1CTElOR19TVEFUVVMgKDEgPDwgMCkKPiArCj4gKyNkZWZp bmUgU0NEQ19DT05GSUdfMCAweDMwCj4gKyNkZWZpbmUgU0NEQ19SRUFEX1JFUVVFU1RfRU5BQkxF ICgxIDw8IDApCj4gKwo+ICsjZGVmaW5lIFNDRENfU1RBVFVTX0ZMQUdTXzAgMHg0MAo+ICsjZGVm aW5lIFNDRENfQ0gyX0xPQ0sgKDEgPCAzKQo+ICsjZGVmaW5lIFNDRENfQ0gxX0xPQ0sgKDEgPCAy KQo+ICsjZGVmaW5lIFNDRENfQ0gwX0xPQ0sgKDEgPCAxKQo+ICsjZGVmaW5lIFNDRENfQ0hfTE9D S19NQVNLIChTQ0RDX0NIMl9MT0NLIHwgU0NEQ19DSDFfTE9DSyB8IFNDRENfQ0gwX0xPQ0spCj4g KyNkZWZpbmUgU0NEQ19DTE9DS19ERVRFQ1QgKDEgPDwgMCkKPiArI2RlZmluZSBTQ0RDX1NUQVRV U19GTEFHU18xIDB4NDEKPiArCj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzBfTCAweDUwCj4gKyNk ZWZpbmUgU0NEQ19FUlJfREVUXzBfSCAweDUxCj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzFfTCAw eDUyCj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzFfSCAweDUzCj4gKyNkZWZpbmUgU0NEQ19FUlJf REVUXzJfTCAweDU0Cj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzJfSCAweDU1Cj4gKyNkZWZpbmUg U0NEQ19DSEFOTkVMX1ZBTElEICgxIDw8IDcpCj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUX0NIRUNL U1VNIDB4NTYKPiArCj4gKyNkZWZpbmUgU0NEQ19URVNUX0NPTkZJR18wIDB4YzAKPiArI2RlZmlu ZSBTQ0RDX1RFU1RfUkVBRF9SRVFVRVNUICgxIDw8IDcpCj4gKyNkZWZpbmUgU0NEQ19URVNUX1JF QURfUkVRVUVTVF9ERUxBWSh4KSAoKHgpICYgMHg3ZikKPiArCj4gKyNkZWZpbmUgU0NEQ19NQU5V RkFDVFVSRVJfSUVFRV9PVUkgMHhkMAo+ICsjZGVmaW5lIFNDRENfTUFOVUZBQ1RVUkVSX0lFRUVf T1VJX1NJWkUgMwo+ICsjZGVmaW5lIFNDRENfREVWSUNFX0lEIDB4ZDMKPiArI2RlZmluZSBTQ0RD X0RFVklDRV9JRF9TSVpFIDgKPiArI2RlZmluZSBTQ0RDX0RFVklDRV9IQVJEV0FSRV9SRVZJU0lP TiAweGRiCj4gKyNkZWZpbmUgU0NEQ19ERVZJQ0VfSEFSRFdBUkVfUkVWSVNJT05fTUFKT1IoeCkg KCgoeCkgPj4gNCkgJiAweGYpCj4gKyNkZWZpbmUgU0NEQ19ERVZJQ0VfSEFSRFdBUkVfUkVWSVNJ T05fTUlOT1IoeCkgKCgoeCkgPj4gMCkgJiAweGYpCj4gKyNkZWZpbmUgU0NEQ19ERVZJQ0VfU09G VFdBUkVfTUFKT1JfUkVWSVNJT04gMHhkYwo+ICsjZGVmaW5lIFNDRENfREVWSUNFX1NPRlRXQVJF X01JTk9SX1JFVklTSU9OIDB4ZGQKPiArCj4gKyNkZWZpbmUgU0NEQ19NQU5VRkFDVFVSRVJfU1BF Q0lGSUMgMHhkZQo+ICsjZGVmaW5lIFNDRENfTUFOVUZBQ1RVUkVSX1NQRUNJRklDX1NJWkUgMzQK PiArCj4gK3NzaXplX3QgZHJtX3NjZGNfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIs IHU4IG9mZnNldCwgdm9pZCAqYnVmZmVyLAo+ICsJCSAgICAgIHNpemVfdCBzaXplKTsKPiArc3Np emVfdCBkcm1fc2NkY193cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IG9mZnNl dCwKPiArCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cj4gKwo+ICsv KioKPiArICogZHJtX3NjZGNfcmVhZGIgLSByZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSBTQ0RDCj4g KyAqIEBhZGFwdGVyOiBJMkMgYWRhcHRlcgo+ICsgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgcmVnaXN0 ZXIgdG8gcmVhZAo+ICsgKiBAdmFsdWU6IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIHJlZ2lzdGVy IHZhbHVlCj4gKyAqCj4gKyAqIFJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSBTQ0RDLiBUaGlzIGlz IGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlCj4gKyAqIGRybV9zY2RjX3JlYWQoKSBm dW5jdGlvbi4KPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQg ZHJtX3NjZGNfcmVhZGIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBvZmZzZXQsCj4g KwkJCQkgdTggKnZhbHVlKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX3NjZGNfcmVhZChhZGFwdGVyLCBv ZmZzZXQsIHZhbHVlLCBzaXplb2YoKnZhbHVlKSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1f c2NkY193cml0ZWIgLSB3cml0ZSBhIHNpbmdsZSBieXRlIHRvIFNDREMKPiArICogQGFkYXB0ZXI6 IEkyQyBhZGFwdGVyCj4gKyAqIEBvZmZzZXQ6IG9mZnNldCBvZiByZWdpc3RlciB0byByZWFkCj4g KyAqIEB2YWx1ZTogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgcmVnaXN0ZXIgdmFsdWUKPiArICoK PiArICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gU0NEQy4gVGhpcyBpcyBhIGNvbnZlbmllbmNl IHdyYXBwZXIgYXJvdW5kIHRoZQo+ICsgKiBkcm1fc2NkY193cml0ZSgpIGZ1bmN0aW9uLgo+ICsg Kgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fc2NkY193cml0 ZWIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBvZmZzZXQsCj4gKwkJCQkgIHU4IHZh bHVlKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX3NjZGNfd3JpdGUoYWRhcHRlciwgb2Zmc2V0LCAmdmFs dWUsIHNpemVvZih2YWx1ZSkpOwo+ICt9Cj4gKwo+ICsjZW5kaWYKPiAtLSAKPiAyLjUuMAo+Cj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2 ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApK YW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK