From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCHv6 1/3] drm: add support for DisplayPort CEC-Tunneling-over-AUX Date: Wed, 27 Jun 2018 20:57:12 +0300 Message-ID: <20180627175712.GH20518@intel.com> References: <20180612111831.58210-1-hverkuil@xs4all.nl> <20180612111831.58210-2-hverkuil@xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A2F06E316 for ; Wed, 27 Jun 2018 17:57:20 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180612111831.58210-2-hverkuil@xs4all.nl> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hans Verkuil Cc: Carlos Santa , Daniel Vetter , dri-devel@lists.freedesktop.org, Hans Verkuil , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBKdW4gMTIsIDIwMTggYXQgMDE6MTg6MjlQTSArMDIwMCwgSGFucyBWZXJrdWlsIHdy b3RlOgo+IEZyb206IEhhbnMgVmVya3VpbCA8aGFucy52ZXJrdWlsQGNpc2NvLmNvbT4KPiAKPiBU aGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIERpc3BsYXlQb3J0IENFQy1UdW5uZWxpbmctb3Zlci1B VVgKPiBmZWF0dXJlIHRoYXQgaXMgcGFydCBvZiB0aGUgRGlzcGxheVBvcnQgMS4zIHN0YW5kYXJk Lgo+IAo+IFVuZm9ydHVuYXRlbHksIG5vdCBhbGwgRGlzcGxheVBvcnQvVVNCLUMgdG8gSERNSSBh ZGFwdGVycyB3aXRoIGEKPiBjaGlwIHRoYXQgaGFzIHRoaXMgY2FwYWJpbGl0eSBhY3R1YWxseSBo b29rIHVwIHRoZSBDRUMgcGluLCBzbwo+IGV2ZW4gdGhvdWdoIGEgQ0VDIGRldmljZSBpcyBjcmVh dGVkLCBpdCBtYXkgbm90IGFjdHVhbGx5IHdvcmsuCj4gCj4gU2lnbmVkLW9mZi1ieTogSGFucyBW ZXJrdWlsIDxoYW5zLnZlcmt1aWxAY2lzY28uY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyAgICAgICAgIHwgIDEwICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfY2VjLmMgICAgfCA0MjMgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxw ZXIuYyB8ICAgMSArCj4gIGluY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCAgICAgfCAgNTYgKysr KysKPiAgNSBmaWxlcyBjaGFuZ2VkLCA0OTEgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9jZWMuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggZGVl ZWZhN2ExNzczLi5kNjM4NzY0MjVjZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0xMjEsNiArMTIxLDE2 IEBAIGNvbmZpZyBEUk1fTE9BRF9FRElEX0ZJUk1XQVJFCj4gIAkgIGRlZmF1bHQgY2FzZSBpcyBO LiBEZXRhaWxzIGFuZCBpbnN0cnVjdGlvbnMgaG93IHRvIGJ1aWxkIHlvdXIgb3duCj4gIAkgIEVE SUQgZGF0YSBhcmUgZ2l2ZW4gaW4gRG9jdW1lbnRhdGlvbi9FRElEL0hPV1RPLnR4dC4KPiAgCj4g K2NvbmZpZyBEUk1fRFBfQ0VDCj4gKwlib29sICJFbmFibGUgRGlzcGxheVBvcnQgQ0VDLVR1bm5l bGluZy1vdmVyLUFVWCBIRE1JIHN1cHBvcnQiCj4gKwlzZWxlY3QgQ0VDX0NPUkUKPiArCWhlbHAK PiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBIRE1JIENFQyBz dXBwb3J0IGZvcgo+ICsJICBEaXNwbGF5UG9ydC9VU0ItQyB0byBIRE1JIGFkYXB0ZXJzLgo+ICsK PiArCSAgTm90ZTogbm90IGFsbCBhZGFwdGVycyBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgYW5kIGV2 ZW4gZm9yIHRob3NlCj4gKwkgIHRoYXQgZG8gc3VwcG9ydCB0aGlzIHRoZXkgb2Z0ZW4gZG8gbm90 IGhvb2sgdXAgdGhlIENFQyBwaW4uCj4gKwo+ICBjb25maWcgRFJNX1RUTQo+ICAJdHJpc3RhdGUK PiAgCWRlcGVuZHMgb24gRFJNICYmIE1NVQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA1MDA5M2ZmNDQ3OWIu LmM3ODc0ODFjMjUwMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtNDEsNiArNDEsNyBAQCBkcm1fa21z X2hlbHBlci0kKENPTkZJR19EUk1fUEFORUxfQlJJREdFKSArPSBicmlkZ2UvcGFuZWwubwo+ICBk cm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVs cGVyLm8KPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBk cm1fZmJfY21hX2hlbHBlci5vCj4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhf Q0hBUkRFVikgKz0gZHJtX2RwX2F1eF9kZXYubwo+ICtkcm1fa21zX2hlbHBlci0kKENPTkZJR19E Uk1fRFBfQ0VDKSArPSBkcm1fZHBfY2VjLm8KPiAgCj4gIG9iai0kKENPTkZJR19EUk1fS01TX0hF TFBFUikgKz0gZHJtX2ttc19oZWxwZXIubwo+ICBvYmotJChDT05GSUdfRFJNX0RFQlVHX01NX1NF TEZURVNUKSArPSBzZWxmdGVzdHMvCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfY2VjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2NlYy5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU1NWE5ZmNhM2ZlZgo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2NlYy5jCj4gQEAgLTAsMCArMSw0MjMgQEAK PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogRGlzcGxh eVBvcnQgQ0VDLVR1bm5lbGluZy1vdmVyLUFVWCBzdXBwb3J0Cj4gKyAqCj4gKyAqIENvcHlyaWdo dCAyMDE4IENpc2NvIFN5c3RlbXMsIEluYy4gYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmln aHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPG1lZGlhL2NlYy5oPgo+ ICsKPiArLyoKPiArICogVW5mb3J0dW5hdGVseSBpdCB0dXJucyBvdXQgdGhhdCB3ZSBoYXZlIGEg Y2hpY2tlbi1hbmQtZWdnIHNpdHVhdGlvbgo+ICsgKiBoZXJlLiBRdWl0ZSBhIGZldyBhY3RpdmUg KG1pbmktKURQLXRvLUhETUkgb3IgVVNCLUMtdG8tSERNSSBhZGFwdGVycwo+ICsgKiBoYXZlIGEg Y29udmVydGVyIGNoaXAgdGhhdCBzdXBwb3J0cyBDRUMtVHVubmVsaW5nLW92ZXItQVVYICh1c3Vh bGx5IHRoZQo+ICsgKiBQYXJhZGUgUFMxNzYpLCBidXQgdGhleSBkbyBub3Qgd2lyZSB1cCB0aGUg Q0VDIHBpbiwgdGh1cyBtYWtpbmcgQ0VDCj4gKyAqIHVzZWxlc3MuCj4gKyAqCj4gKyAqIFNhZGx5 IHRoZXJlIGlzIG5vIHdheSBmb3IgdGhpcyBkcml2ZXIgdG8ga25vdyB0aGlzLiBXaGF0IGhhcHBl bnMgaXMKPiArICogdGhhdCBhIC9kZXYvY2VjWCBkZXZpY2UgaXMgY3JlYXRlZCB0aGF0IGlzIGlz b2xhdGVkIGFuZCB1bmFibGUgdG8gc2VlCj4gKyAqIGFueSBvZiB0aGUgb3RoZXIgQ0VDIGRldmlj ZXMuIFF1aXRlIGxpdGVyYWxseSB0aGUgQ0VDIHdpcmUgaXMgY3V0Cj4gKyAqIChvciBpbiB0aGlz IGNhc2UsIG5ldmVyIGNvbm5lY3RlZCBpbiB0aGUgZmlyc3QgcGxhY2UpLgo+ICsgKgo+ICsgKiBU aGUgcmVhc29uIHNvIGZldyBhZGFwdGVycyBzdXBwb3J0IHRoaXMgaXMgdGhhdCB0aGlzIHR1bm5l bGluZyBwcm90b2NvbAo+ICsgKiB3YXMgbmV2ZXIgc3VwcG9ydGVkIGJ5IGFueSBPUy4gU28gdGhl cmUgd2FzIG5vIGVhc3kgd2F5IG9mIHRlc3RpbmcgaXQsCj4gKyAqIGFuZCBubyBpbmNlbnRpdmUg dG8gY29ycmVjdGx5IHdpcmUgdXAgdGhlIENFQyBwaW4uCj4gKyAqCj4gKyAqIEhvcGVmdWxseSBi eSBjcmVhdGluZyB0aGlzIGRyaXZlciBpdCB3aWxsIGJlIGVhc2llciBmb3IgdmVuZG9ycyB0bwo+ ICsgKiBmaW5hbGx5IGZpeCB0aGVpciBhZGFwdGVycyBhbmQgdGVzdCB0aGUgQ0VDIGZ1bmN0aW9u YWxpdHkuCj4gKyAqCj4gKyAqIEkga2VlcCBhIGxpc3Qgb2Yga25vd24gd29ya2luZyBhZGFwdGVy cyBoZXJlOgo+ICsgKgo+ICsgKiBodHRwczovL2h2ZXJrdWlsLmhvbWUueHM0YWxsLm5sL2NlYy1z dGF0dXMudHh0Cj4gKyAqCj4gKyAqIFBsZWFzZSBtYWlsIG1lIChodmVya3VpbEB4czRhbGwubmwp IGlmIHlvdSBmaW5kIGFuIGFkYXB0ZXIgdGhhdCB3b3Jrcwo+ICsgKiBhbmQgaXMgbm90IHlldCBs aXN0ZWQgdGhlcmUuCj4gKyAqCj4gKyAqIE5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRh dGlvbiBkb2VzIG5vdCBzdXBwb3J0IENFQyBvdmVyIGFuIE1TVCBodWIuCj4gKyAqIEFzIGZhciBh cyBJIGNhbiBzZWUgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGRlZmluZWQgaW4gdGhlIERpc3BsYXlQ b3J0Cj4gKyAqIHN0YW5kYXJkIHRvIHRyYW5zcG9ydCBDRUMgaW50ZXJydXB0cyBvdmVyIGFuIE1T VCBkZXZpY2UuIEl0IG1pZ2h0IGJlCj4gKyAqIHBvc3NpYmxlIHRvIGRvIHRoaXMgdGhyb3VnaCBw b2xsaW5nLCBidXQgSSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gZ2V0IHRoYXQKPiArICogdG8gd29y ay4KPiArICovCj4gKwo+ICsvKioKPiArICogRE9DOiBkcCBjZWMgaGVscGVycwo+ICsgKgo+ICsg KiBUaGVzZSBmdW5jdGlvbnMgdGFrZSBjYXJlIG9mIHN1cHBvcnRpbmcgdGhlIENFQy1UdW5uZWxp bmctb3Zlci1BVVgKPiArICogZmVhdHVyZSBvZiBEaXNwbGF5UG9ydC10by1IRE1JIGFkYXB0ZXJz Lgo+ICsgKi8KPiArCj4gKy8qCj4gKyAqIFdoZW4gdGhlIEVESUQgaXMgdW5zZXQgYmVjYXVzZSB0 aGUgSFBEIHdlbnQgbG93LCB0aGVuIHRoZSBDRUMgRFBDRCByZWdpc3RlcnMKPiArICogdHlwaWNh bGx5IGNhbiBubyBsb25nZXIgYmUgcmVhZCAodHJ1ZSBmb3IgYSBEUC10by1IRE1JIGFkYXB0ZXIg c2luY2UgaXQgaXMKPiArICogcG93ZXJlZCBieSB0aGUgSFBEKS4gSG93ZXZlciwgc29tZSBkaXNw bGF5cyB0b2dnbGUgdGhlIEhQRCBvZmYgYW5kIG9uIGZvciBhCj4gKyAqIHNob3J0IHBlcmlvZCBm b3Igb25lIHJlYXNvbiBvciBhbm90aGVyLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSB0aGUgQ0VDIGFk YXB0ZXIKPiArICogdG8gYmUgcmVtb3ZlZCBhbmQgYWRkZWQgYWdhaW4sIGV2ZW4gdGhvdWdoIG5v dGhpbmcgZWxzZSBjaGFuZ2VkLgo+ICsgKgo+ICsgKiBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgc2V0 cyBhIGRlbGF5IGluIHNlY29uZHMgYmVmb3JlIHRoZSBDRUMgYWRhcHRlciBpcwo+ICsgKiBhY3R1 YWxseSB1bnJlZ2lzdGVyZWQuIE9ubHkgaWYgdGhlIEhQRCBkb2VzIG5vdCByZXR1cm4gd2l0aGlu IHRoYXQgdGltZSB3aWxsCj4gKyAqIHRoZSBDRUMgYWRhcHRlciBiZSB1bnJlZ2lzdGVyZWQuCgpB bmQgd2hhdGV2ZXIgaXMgdHJ5aW5nIHRvIGRvIGNlYyBpcyBoYXBweSB3aXRoIHRoZSBkcGNkIGFj Y2Vzc2VzCmZhaWxpbmcgZHVyaW5nIHRoYXQgdGltZT8KCj4gKyAqCj4gKyAqIElmIGl0IGlzIHNl dCB0byAwLCB0aGVuIHRoZSBDRUMgYWRhcHRlciB3aWxsIG5ldmVyIGJlIHVucmVnaXN0ZXJlZCBm b3IgYXMKPiArICogbG9uZyBhcyB0aGUgY29ubmVjdG9yIHJlbWFpbnMgcmVnaXN0ZXJlZC4KPiAr ICoKPiArICogTm90ZSB0aGF0IGZvciBpbnRlZ3JhdGVkIEhETUkgYnJhbmNoIGRldmljZXMgdGhh dCBzdXBwb3J0IENFQyB0aGUgRFBDRAo+ICsgKiByZWdpc3RlcnMgcmVtYWluIGF2YWlsYWJsZSBl dmVuIGlmIHRoZSBIUEQgZ29lcyBsb3cgc2luY2UgaXQgaXMgbm90IHBvd2VyZWQKPiArICogYnkg dGhlIEhQRC4gSW4gdGhhdCBjYXNlIHRoZSBDRUMgYWRhcHRlciB3aWxsIG5ldmVyIGJlIHVucmVn aXN0ZXJlZCBkdXJpbmcKPiArICogdGhlIGxpZmUgdGltZSBvZiB0aGUgY29ubmVjdG9yLiBBdCBs ZWFzdCwgdGhpcyBpcyB0aGUgdGhlb3J5IHNpbmNlIEkgZG8gbm90Cj4gKyAqIGhhdmUgaGFyZHdh cmUgd2l0aCBhbiBpbnRlZ3JhdGVkIEhETUkgYnJhbmNoIGRldmljZSB0aGF0IHN1cHBvcnRzIENF Qy4KPiArICovCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX2RwX2NlY191bnJlZ2lzdGVyX2Rl bGF5ID0gMTsKPiArbW9kdWxlX3BhcmFtKGRybV9kcF9jZWNfdW5yZWdpc3Rlcl9kZWxheSwgdWlu dCwgMDYwMCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoZHJtX2RwX2NlY191bnJlZ2lzdGVyX2RlbGF5 LCAiQ0VDIHVucmVnaXN0ZXIgZGVsYXkgaW4gc2Vjb25kcywgMCA9PSBuZXZlciB1bnJlZ2lzdGVy Iik7Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9kcF9jZWNfYWRhcF9lbmFibGUoc3RydWN0IGNlY19h ZGFwdGVyICphZGFwLCBib29sIGVuYWJsZSkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1 eCA9IGNlY19nZXRfZHJ2ZGF0YShhZGFwKTsKPiArCXUzMiB2YWwgPSBlbmFibGUgPyBEUF9DRUNf VFVOTkVMSU5HX0VOQUJMRSA6IDA7Cj4gKwlzc2l6ZV90IGVyciA9IDA7Cj4gKwo+ICsJZXJyID0g ZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwgRFBfQ0VDX1RVTk5FTElOR19DT05UUk9MLCB2YWwpOwo+ ICsJcmV0dXJuIChlbmFibGUgJiYgZXJyIDwgMCkgPyBlcnIgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGRybV9kcF9jZWNfYWRhcF9sb2dfYWRkcihzdHJ1Y3QgY2VjX2FkYXB0ZXIgKmFkYXAs IHU4IGFkZHIpCj4gK0kgdGhpbmsgSSBsb29rZWQgYXQgdGhlIGRwY2QgZGV0YWlzIGxhc3QgdGlt ZSBhcm91bmQuIHsKPiArCXN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSBjZWNfZ2V0X2RydmRhdGEo YWRhcCk7Cj4gKwkvKiBCaXQgMTUgKGxvZ2ljYWwgYWRkcmVzcyAxNSkgc2hvdWxkIGFsd2F5cyBi ZSBzZXQgKi8KPiArCXUxNiBsYV9tYXNrID0gMSA8PCBDRUNfTE9HX0FERFJfQlJPQURDQVNUOwo+ ICsJdTggbWFza1syXTsKPiArCXNzaXplX3QgZXJyOwo+ICsKPiArCWlmIChhZGRyICE9IENFQ19M T0dfQUREUl9JTlZBTElEKQo+ICsJCWxhX21hc2sgfD0gYWRhcC0+bG9nX2FkZHJzLmxvZ19hZGRy X21hc2sgfCAoMSA8PCBhZGRyKTsKPiArCW1hc2tbMF0gPSBsYV9tYXNrICYgMHhmZjsKPiArCW1h c2tbMV0gPSBsYV9tYXNrID4+IDg7Cj4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZShhdXgsIERQ X0NFQ19MT0dJQ0FMX0FERFJFU1NfTUFTSywgbWFzaywgMik7Cj4gKwlyZXR1cm4gKGFkZHIgIT0g Q0VDX0xPR19BRERSX0lOVkFMSUQgJiYgZXJyIDwgMCkgPyBlcnIgOiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRybV9kcF9jZWNfYWRhcF90cmFuc21pdChzdHJ1Y3QgY2VjX2FkYXB0ZXIgKmFk YXAsIHU4IGF0dGVtcHRzLAo+ICsJCQkJICAgIHUzMiBzaWduYWxfZnJlZV90aW1lLCBzdHJ1Y3Qg Y2VjX21zZyAqbXNnKQoKJ21zZycgY291bGQgYmUgY29uc3QgcGVyaGFwcz8KCj4gK3sKPiArCXN0 cnVjdCBkcm1fZHBfYXV4ICphdXggPSBjZWNfZ2V0X2RydmRhdGEoYWRhcCk7Cj4gKwl1bnNpZ25l ZCBpbnQgcmV0cmllcyA9IG1pbig1LCBhdHRlbXB0cyAtIDEpOwo+ICsJc3NpemVfdCBlcnI7Cj4g Kwo+ICsJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGUoYXV4LCBEUF9DRUNfVFhfTUVTU0FHRV9CVUZG RVIsCj4gKwkJCQltc2ctPm1zZywgbXNnLT5sZW4pOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZWIoYXV4LCBEUF9DRUNfVFhf TUVTU0FHRV9JTkZPLAo+ICsJCQkJIChtc2ctPmxlbiAtIDEpIHwgKHJldHJpZXMgPDwgNCkgfAo+ ICsJCQkJIERQX0NFQ19UWF9NRVNTQUdFX1NFTkQpOwo+ICsJcmV0dXJuIGVyciA8IDAgPyBlcnIg OiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9kcF9jZWNfYWRhcF9tb25pdG9yX2FsbF9l bmFibGUoc3RydWN0IGNlY19hZGFwdGVyICphZGFwLAo+ICsJCQkJCSAgICAgIGJvb2wgZW5hYmxl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gY2VjX2dldF9kcnZkYXRhKGFkYXAp Owo+ICsJc3NpemVfdCBlcnI7Cj4gKwl1OCB2YWw7Cj4gKwo+ICsJaWYgKCEoYWRhcC0+Y2FwYWJp bGl0aWVzICYgQ0VDX0NBUF9NT05JVE9SX0FMTCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZXJy ID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9DRUNfVFVOTkVMSU5HX0NPTlRST0wsICZ2YWwp Owo+ICsJaWYgKGVyciA+PSAwKSB7Cj4gKwkJaWYgKGVuYWJsZSkKPiArCQkJdmFsIHw9IERQX0NF Q19TTk9PUElOR19FTkFCTEU7Cj4gKwkJZWxzZQo+ICsJCQl2YWwgJj0gfkRQX0NFQ19TTk9PUElO R19FTkFCTEU7Cj4gKwkJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwgRFBfQ0VDX1RVTk5F TElOR19DT05UUk9MLCB2YWwpOwo+ICsJfQo+ICsJcmV0dXJuIChlbmFibGUgJiYgZXJyIDwgMCkg PyBlcnIgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1fZHBfY2VjX2FkYXBfc3RhdHVz KHN0cnVjdCBjZWNfYWRhcHRlciAqYWRhcCwKPiArCQkJCSAgIHN0cnVjdCBzZXFfZmlsZSAqZmls ZSkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1eCA9IGNlY19nZXRfZHJ2ZGF0YShhZGFw KTsKPiArCXN0cnVjdCBkcm1fZHBfZGVzYyBkZXNjOwo+ICsJc3RydWN0IGRybV9kcF9kcGNkX2lk ZW50ICppZCA9ICZkZXNjLmlkZW50Owo+ICsKPiArCWlmIChkcm1fZHBfcmVhZF9kZXNjKGF1eCwg JmRlc2MsIHRydWUpKQo+ICsJCXJldHVybjsKPiArCXNlcV9wcmludGYoZmlsZSwgIk9VSTogJSpw ZEhcbiIsCj4gKwkJICAgKGludClzaXplb2YoaWQtPm91aSksIGlkLT5vdWkpOwo+ICsJc2VxX3By aW50ZihmaWxlLCAiSUQ6ICUqcEVcbiIsCj4gKwkJICAgKGludClzdHJubGVuKGlkLT5kZXZpY2Vf aWQsIHNpemVvZihpZC0+ZGV2aWNlX2lkKSksCj4gKwkJICAgaWQtPmRldmljZV9pZCk7Cj4gKwlz ZXFfcHJpbnRmKGZpbGUsICJIVyBSZXY6ICVkLiVkXG4iLCBpZC0+aHdfcmV2ID4+IDQsIGlkLT5o d19yZXYgJiAweGYpOwo+ICsJLyoKPiArCSAqIFNob3cgdGhpcyBib3RoIGluIGRlY2ltYWwgYW5k IGhleDogYXQgbGVhc3Qgb25lIHZlbmRvcgo+ICsJICogYWx3YXlzIHJlcG9ydHMgdGhpcyBpbiBo ZXguCj4gKwkgKi8KPiArCXNlcV9wcmludGYoZmlsZSwgIkZXL1NXIFJldjogJWQuJWQgKDB4JTAy eC4weCUwMngpXG4iLAo+ICsJCSAgIGlkLT5zd19tYWpvcl9yZXYsIGlkLT5zd19taW5vcl9yZXYs Cj4gKwkJICAgaWQtPnN3X21ham9yX3JldiwgaWQtPnN3X21pbm9yX3Jldik7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2VjX2FkYXBfb3BzIGRybV9kcF9jZWNfYWRhcF9vcHMgPSB7 Cj4gKwkuYWRhcF9lbmFibGUgPSBkcm1fZHBfY2VjX2FkYXBfZW5hYmxlLAo+ICsJLmFkYXBfbG9n X2FkZHIgPSBkcm1fZHBfY2VjX2FkYXBfbG9nX2FkZHIsCj4gKwkuYWRhcF90cmFuc21pdCA9IGRy bV9kcF9jZWNfYWRhcF90cmFuc21pdCwKPiArCS5hZGFwX21vbml0b3JfYWxsX2VuYWJsZSA9IGRy bV9kcF9jZWNfYWRhcF9tb25pdG9yX2FsbF9lbmFibGUsCj4gKwkuYWRhcF9zdGF0dXMgPSBkcm1f ZHBfY2VjX2FkYXBfc3RhdHVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkcm1fZHBfY2VjX3Jl Y2VpdmVkKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXN0cnVjdCBjZWNfYWRhcHRl ciAqYWRhcCA9IGF1eC0+Y2VjX2FkYXA7Cj4gKwlzdHJ1Y3QgY2VjX21zZyBtc2c7Cj4gKwl1OCBy eF9tc2dfaW5mbzsKPiArCXNzaXplX3QgZXJyOwo+ICsKPiArCWVyciA9IGRybV9kcF9kcGNkX3Jl YWRiKGF1eCwgRFBfQ0VDX1JYX01FU1NBR0VfSU5GTywgJnJ4X21zZ19pbmZvKTsKPiArCWlmIChl cnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJaWYgKCEocnhfbXNnX2luZm8gJiBEUF9D RUNfUlhfTUVTU0FHRV9FTkRFRCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJbXNnLmxlbiA9IChy eF9tc2dfaW5mbyAmIERQX0NFQ19SWF9NRVNTQUdFX0xFTl9NQVNLKSArIDE7Cj4gKwllcnIgPSBk cm1fZHBfZHBjZF9yZWFkKGF1eCwgRFBfQ0VDX1JYX01FU1NBR0VfQlVGRkVSLCBtc2cubXNnLCBt c2cubGVuKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJY2VjX3Jl Y2VpdmVkX21zZyhhZGFwLCAmbXNnKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkcm1fZHBfY2VjX2hhbmRsZV9pcnEoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ ICsJc3RydWN0IGNlY19hZGFwdGVyICphZGFwID0gYXV4LT5jZWNfYWRhcDsKPiArCXU4IGZsYWdz Owo+ICsKPiArCWlmIChkcm1fZHBfZHBjZF9yZWFkYihhdXgsIERQX0NFQ19UVU5ORUxJTkdfSVJR X0ZMQUdTLCAmZmxhZ3MpIDwgMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGZsYWdzICYgRFBf Q0VDX1JYX01FU1NBR0VfSU5GT19WQUxJRCkKPiArCQlkcm1fZHBfY2VjX3JlY2VpdmVkKGF1eCk7 Cj4gKwo+ICsJaWYgKGZsYWdzICYgRFBfQ0VDX1RYX01FU1NBR0VfU0VOVCkKPiArCQljZWNfdHJh bnNtaXRfYXR0ZW1wdF9kb25lKGFkYXAsIENFQ19UWF9TVEFUVVNfT0spOwo+ICsJZWxzZSBpZiAo ZmxhZ3MgJiBEUF9DRUNfVFhfTElORV9FUlJPUikKPiArCQljZWNfdHJhbnNtaXRfYXR0ZW1wdF9k b25lKGFkYXAsIENFQ19UWF9TVEFUVVNfRVJST1IgfAo+ICsJCQkJCQlDRUNfVFhfU1RBVFVTX01B WF9SRVRSSUVTKTsKPiArCWVsc2UgaWYgKGZsYWdzICYKPiArCQkgKERQX0NFQ19UWF9BRERSRVNT X05BQ0tfRVJST1IgfCBEUF9DRUNfVFhfREFUQV9OQUNLX0VSUk9SKSkKPiArCQljZWNfdHJhbnNt aXRfYXR0ZW1wdF9kb25lKGFkYXAsIENFQ19UWF9TVEFUVVNfTkFDSyB8Cj4gKwkJCQkJCUNFQ19U WF9TVEFUVVNfTUFYX1JFVFJJRVMpOwo+ICsJZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwgRFBfQ0VD X1RVTk5FTElOR19JUlFfRkxBR1MsIGZsYWdzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRybV9k cF9jZWNfaXJxKCkgLSBoYW5kbGUgQ0VDIGludGVycnVwdCwgaWYgYW55Cj4gKyAqIEBhdXg6IERp c3BsYXlQb3J0IEFVWCBjaGFubmVsCj4gKyAqCj4gKyAqIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBo YW5kbGluZyBhbiBJUlFfSFBEIHJlcXVlc3QuIElmIENFQy10dW5uZWxpbmctb3Zlci1BVVgKPiAr ICogaXMgcHJlc2VudCwgdGhlbiBpdCB3aWxsIGNoZWNrIGZvciBhIENFQ19JUlEgYW5kIGhhbmRs ZSBpdCBhY2NvcmRpbmdseS4KPiArICovCj4gK3ZvaWQgZHJtX2RwX2NlY19pcnEoc3RydWN0IGRy bV9kcF9hdXggKmF1eCkKPiArewo+ICsJdTggY2VjX2lycTsKPiArCWludCByZXQ7Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmYXV4LT5jZWNfbXV0ZXgpOwo+ICsJaWYgKCFhdXgtPmNlY19hZGFwKQo+ICsJ CWdvdG8gdW5sb2NrOwo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfREVW SUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUl9FU0kxLAo+ICsJCQkJJmNlY19pcnEpOwo+ICsJaWYgKHJl dCA8IDAgfHwgIShjZWNfaXJxICYgRFBfQ0VDX0lSUSkpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ ICsJZHJtX2RwX2NlY19oYW5kbGVfaXJxKGF1eCk7Cj4gKwlkcm1fZHBfZHBjZF93cml0ZWIoYXV4 LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SX0VTSTEsIERQX0NFQ19JUlEpOwo+ICt1bmxv Y2s6Cj4gKwltdXRleF91bmxvY2soJmF1eC0+Y2VjX211dGV4KTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9kcF9jZWNfaXJxKTsKPiArCj4gK3N0YXRpYyBib29sIGRybV9kcF9jZWNfY2FwKHN0 cnVjdCBkcm1fZHBfYXV4ICphdXgsIHU4ICpjZWNfY2FwKQo+ICt7Cj4gKwl1OCBjYXAgPSAwOwo+ ICsKPiArCWlmIChkcm1fZHBfZHBjZF9yZWFkYihhdXgsIERQX0NFQ19UVU5ORUxJTkdfQ0FQQUJJ TElUWSwgJmNhcCkgIT0gMSB8fAo+ICsJICAgICEoY2FwICYgRFBfQ0VDX1RVTk5FTElOR19DQVBB QkxFKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlpZiAoY2VjX2NhcCkKPiArCQkqY2VjX2NhcCA9 IGNhcDsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDYWxsZWQgaWYgdGhl IEhQRCB3YXMgbG93IGZvciBtb3JlIHRoYW4gZHJtX2RwX2NlY191bnJlZ2lzdGVyX2RlbGF5Cj4g KyAqIHNlY29uZHMuIFRoaXMgdW5yZWdpc3RlcnMgdGhlIENFQyBhZGFwdGVyLgo+ICsgKi8KPiAr c3RhdGljIHZvaWQgZHJtX2RwX2NlY191bnJlZ2lzdGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gY29udGFpbmVyX29mKHdv cmssIHN0cnVjdCBkcm1fZHBfYXV4LAo+ICsJCQkJCSAgICAgIGNlY191bnJlZ2lzdGVyX3dvcmsu d29yayk7Cj4gKwo+ICsJaWYgKCFhdXgtPmNlY19hZGFwKQo+ICsJCXJldHVybjsKPiArCW11dGV4 X2xvY2soJmF1eC0+Y2VjX211dGV4KTsKPiArCWNlY191bnJlZ2lzdGVyX2FkYXB0ZXIoYXV4LT5j ZWNfYWRhcCk7Cj4gKwlhdXgtPmNlY19hZGFwID0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmYXV4 LT5jZWNfbXV0ZXgpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBIG5ldyBFRElEIGlzIHNldC4gSWYg dGhlcmUgaXMgbm8gQ0VDIGFkYXB0ZXIsIHRoZW4gY3JlYXRlIG9uZS4gSWYKPiArICogdGhlcmUg d2FzIGEgQ0VDIGFkYXB0ZXIsIHRoZW4gY2hlY2sgaWYgdGhlIENFQyBhZGFwdGVyIHByb3BlcnRp ZXMKPiArICogd2VyZSB1bmNoYW5nZWQgYW5kIGp1c3QgdXBkYXRlIHRoZSBDRUMgcGh5c2ljYWwg YWRkcmVzcy4gT3RoZXJ3aXNlCj4gKyAqIHVucmVnaXN0ZXIgdGhlIG9sZCBDRUMgYWRhcHRlciBh bmQgY3JlYXRlIGEgbmV3IG9uZS4KPiArICovCj4gK3ZvaWQgZHJtX2RwX2NlY19zZXRfZWRpZChz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZWRpZCAqZWRpZCkKCidlZGlkJyBjYW4gYmUg Y29uc3QuCgo+ICt7Cj4gKwl1MzIgY2VjX2NhcHMgPSBDRUNfQ0FQX0RFRkFVTFRTIHwgQ0VDX0NB UF9ORUVEU19IUEQ7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2xhcyA9IDE7Cj4gKwl1OCBjYXA7Cj4g Kwo+ICsjaWZuZGVmIENPTkZJR19NRURJQV9DRUNfUkMKPiArCS8qCj4gKwkgKiBDRUNfQ0FQX1JD IGlzIHBhcnQgb2YgQ0VDX0NBUF9ERUZBVUxUUywgYnV0IGl0IGlzIHN0cmlwcGVkIGJ5Cj4gKwkg KiBjZWNfYWxsb2NhdGVfYWRhcHRlcigpIGlmIENPTkZJR19NRURJQV9DRUNfUkMgaXMgdW5kZWZp bmVkLgo+ICsJICoKPiArCSAqIERvIHRoaXMgaGVyZSBhcyB3ZWxsIHRvIGVuc3VyZSB0aGUgdGVz dHMgYWdhaW5zdCBjZWNfY2FwcyBhcmUKPiArCSAqIGNvcnJlY3QuCj4gKwkgKi8KPiArCWNlY19j YXBzICY9IH5DRUNfQ0FQX1JDOwo+ICsjZW5kaWYKPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3lu YygmYXV4LT5jZWNfdW5yZWdpc3Rlcl93b3JrKTsKPiArCj4gKwltdXRleF9sb2NrKCZhdXgtPmNl Y19tdXRleCk7Cj4gKwlpZiAoIWRybV9kcF9jZWNfY2FwKGF1eCwgJmNhcCkpIHsKPiArCQkvKiBD RUMgaXMgbm90IHN1cHBvcnRlZCwgdW5yZWdpc3RlciBhbnkgZXhpc3RpbmcgYWRhcHRlciAqLwo+ ICsJCWNlY191bnJlZ2lzdGVyX2FkYXB0ZXIoYXV4LT5jZWNfYWRhcCk7Cj4gKwkJYXV4LT5jZWNf YWRhcCA9IE5VTEw7Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNhcCAmIERQ X0NFQ19TTk9PUElOR19DQVBBQkxFKQo+ICsJCWNlY19jYXBzIHw9IENFQ19DQVBfTU9OSVRPUl9B TEw7Cj4gKwlpZiAoY2FwICYgRFBfQ0VDX01VTFRJUExFX0xBX0NBUEFCTEUpCj4gKwkJbnVtX2xh cyA9IENFQ19NQVhfTE9HX0FERFJTOwo+ICsKPiArCWlmIChhdXgtPmNlY19hZGFwKSB7Cj4gKwkJ aWYgKGF1eC0+Y2VjX2FkYXAtPmNhcGFiaWxpdGllcyA9PSBjZWNfY2FwcyAmJgo+ICsJCSAgICBh dXgtPmNlY19hZGFwLT5hdmFpbGFibGVfbG9nX2FkZHJzID09IG51bV9sYXMpIHsKPiArCQkJLyog VW5jaGFuZ2VkLCBzbyBqdXN0IHNldCB0aGUgcGh5cyBhZGRyICovCj4gKwkJCWNlY19zX3BoeXNf YWRkcl9mcm9tX2VkaWQoYXV4LT5jZWNfYWRhcCwgZWRpZCk7Cj4gKwkJCWdvdG8gdW5sb2NrOwo+ ICsJCX0KPiArCQkvKgo+ICsJCSAqIFRoZSBjYXBhYmlsaXRpZXMgY2hhbmdlZCwgc28gdW5yZWdp c3RlciB0aGUgb2xkCj4gKwkJICogYWRhcHRlciBmaXJzdC4KPiArCQkgKi8KPiArCQljZWNfdW5y ZWdpc3Rlcl9hZGFwdGVyKGF1eC0+Y2VjX2FkYXApOwo+ICsJfQo+ICsKPiArCS8qIENyZWF0ZSBh IG5ldyBhZGFwdGVyICovCj4gKwlhdXgtPmNlY19hZGFwID0gY2VjX2FsbG9jYXRlX2FkYXB0ZXIo JmRybV9kcF9jZWNfYWRhcF9vcHMsCj4gKwkJCQkJICAgICBhdXgsIGF1eC0+Y2VjX25hbWUsIGNl Y19jYXBzLAo+ICsJCQkJCSAgICAgbnVtX2xhcyk7Cj4gKwlpZiAoSVNfRVJSKGF1eC0+Y2VjX2Fk YXApKSB7Cj4gKwkJYXV4LT5jZWNfYWRhcCA9IE5VTEw7Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9 Cj4gKwlpZiAoY2VjX3JlZ2lzdGVyX2FkYXB0ZXIoYXV4LT5jZWNfYWRhcCwgYXV4LT5jZWNfcGFy ZW50KSkgewo+ICsJCWNlY19kZWxldGVfYWRhcHRlcihhdXgtPmNlY19hZGFwKTsKPiArCQlhdXgt PmNlY19hZGFwID0gTlVMTDsKPiArCX0gZWxzZSB7Cj4gKwkJLyoKPiArCQkgKiBVcGRhdGUgdGhl IHBoeXMgYWRkciBmb3IgdGhlIG5ldyBDRUMgYWRhcHRlci4gV2hlbiBjYWxsZWQKPiArCQkgKiBm cm9tIGRybV9kcF9jZWNfcmVnaXN0ZXJfY29ubmVjdG9yKCkgZWRpZCA9PSBOVUxMLCBzbyBpbgo+ ICsJCSAqIHRoYXQgY2FzZSB0aGUgcGh5cyBhZGRyIGlzIGp1c3QgaW52YWxpZGF0ZWQuCj4gKwkJ ICovCj4gKwkJY2VjX3NfcGh5c19hZGRyX2Zyb21fZWRpZChhdXgtPmNlY19hZGFwLCBlZGlkKTsK PiArCX0KPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZhdXgtPmNlY19tdXRleCk7Cj4gK30K PiArRVhQT1JUX1NZTUJPTChkcm1fZHBfY2VjX3NldF9lZGlkKTsKPiArCj4gKy8qCj4gKyAqIFRo ZSBFRElEIGRpc2FwcGVhcmVkIChsaWtlbHkgYmVjYXVzZSBvZiB0aGUgSFBEIGdvaW5nIGRvd24p Lgo+ICsgKi8KPiArdm9pZCBkcm1fZHBfY2VjX3Vuc2V0X2VkaWQoc3RydWN0IGRybV9kcF9hdXgg KmF1eCkKPiArewo+ICsJbXV0ZXhfbG9jaygmYXV4LT5jZWNfbXV0ZXgpOwo+ICsJaWYgKCFhdXgt PmNlY19hZGFwKQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsJY2VjX3BoeXNfYWRkcl9pbnZhbGlkYXRl KGF1eC0+Y2VjX2FkYXApOwo+ICsJLyoKPiArCSAqIFdlJ3JlIGRvbmUgaWYgd2Ugd2FudCB0byBr ZWVwIHRoZSBDRUMgZGV2aWNlCj4gKwkgKiAoZHJtX2RwX2NlY191bnJlZ2lzdGVyX2RlbGF5IGlz IDApIG9yIGlmIHRoZSBEUENEIHN0aWxsIGluZGljYXRlcwo+ICsJICogdGhlIENFQyBjYXBhYmls aXR5IChleHBlY3RlZCBmb3IgYW4gaW50ZWdyYXRlZCBIRE1JIGJyYW5jaCBkZXZpY2UpLgo+ICsJ ICovCj4gKwlpZiAoIWRybV9kcF9jZWNfdW5yZWdpc3Rlcl9kZWxheSB8fCBkcm1fZHBfY2VjX2Nh cChhdXgsIE5VTEwpKQo+ICsJCWdvdG8gdW5sb2NrOwoKVGhlIGRybV9kcF9jZWNfdW5yZWdpc3Rl cl9kZWxheSBzZW1hbnRpY3Mgc2VlbSBhIGJpdCB1bm5hdHVyYWwgdG8gbWUuCkkgdGhpbmsgPT0w IC0+IG5vIGRlbGF5LCA8MCAtPiBpbmZpbml0ZSBkZWxheSB3b3VsZCBtYWtlIG1vcmUgc2Vuc2Uu CkFsdGhvdWdoIHdlIGFscmVhZHkgaGF2ZSB0aGUgZXhhY3Qgb3Bwb3NpdGUgd2l0aCB0aGUgdmJs YW5rX29mZmRlbGF5IGZvcgpzb21lIGhpc3RvcmljYWwgcmVhc29uIDooCgo+ICsKPiArCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmYXV4LT5jZWNfdW5yZWdpc3Rlcl93b3JrKTsKClRoaXMgbG9v a3MgbGlrZSBhIHBvdGVudGlhbCBkZWFkbG9jayB0byBtZS4KCj4gKwlpZiAoYXV4LT5jZWNfYWRh cCkgewo+ICsJCS8qIHNhbml0eSBjaGVjayAqLwo+ICsJCWlmIChkcm1fZHBfY2VjX3VucmVnaXN0 ZXJfZGVsYXkgPiA2MDApCj4gKwkJCWRybV9kcF9jZWNfdW5yZWdpc3Rlcl9kZWxheSA9IDYwMDsK PiArCQkvKgo+ICsJCSAqIFVucmVnaXN0ZXIgdGhlIENFQyBhZGFwdGVyIGFmdGVyIGRybV9kcF9j ZWNfdW5yZWdpc3Rlcl9kZWxheQo+ICsJCSAqIHNlY29uZHMuIFRoaXMgdG8gZGVib3VuY2Ugc2hv cnQgSFBEIG9mZi1hbmQtb24gY3ljbGVzIGZyb20KPiArCQkgKiBkaXNwbGF5cy4KPiArCQkgKi8K PiArCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmF1eC0+Y2VjX3VucmVnaXN0ZXJfd29yaywKPiAr CQkJCSAgICAgIGRybV9kcF9jZWNfdW5yZWdpc3Rlcl9kZWxheSAqIEhaKTsKPiArCX0KPiArdW5s b2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZhdXgtPmNlY19tdXRleCk7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChkcm1fZHBfY2VjX3Vuc2V0X2VkaWQpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9kcF9jZWNf cmVnaXN0ZXJfY29ubmVjdG9yKCkgLSByZWdpc3RlciBhIG5ldyBjb25uZWN0b3IKPiArICogQGF1 eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICogQG5hbWU6IG5hbWUgb2YgdGhlIENFQyBk ZXZpY2UKPiArICogQHBhcmVudDogcGFyZW50IGRldmljZQo+ICsgKgo+ICsgKiBBIG5ldyBjb25u ZWN0b3Igd2FzIHJlZ2lzdGVyZWQgd2l0aCBhc3NvY2lhdGVkIENFQyBhZGFwdGVyIG5hbWUgYW5k Cj4gKyAqIENFQyBhZGFwdGVyIHBhcmVudCBkZXZpY2UuIEFmdGVyIHJlZ2lzdGVyaW5nIHRoZSBu YW1lIGFuZCBwYXJlbnQKPiArICogZHJtX2RwX2NlY19zZXRfZWRpZCgpIGlzIGNhbGxlZCB0byBj aGVjayBpZiB0aGUgY29ubmVjdG9yIHN1cHBvcnRzCj4gKyAqIENFQyBhbmQgdG8gcmVnaXN0ZXIg YSBDRUMgYWRhcHRlciBpZiB0aGF0IGlzIHRoZSBjYXNlLgo+ICsgKi8KPiArdm9pZCBkcm1fZHBf Y2VjX3JlZ2lzdGVyX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBjb25zdCBjaGFy ICpuYW1lLAo+ICsJCQkJc3RydWN0IGRldmljZSAqcGFyZW50KQo+ICt7Cj4gKwlXQVJOX09OKGF1 eC0+Y2VjX2FkYXApOwo+ICsJYXV4LT5jZWNfbmFtZSA9IG5hbWU7Cj4gKwlhdXgtPmNlY19wYXJl bnQgPSBwYXJlbnQ7Cj4gKwlJTklUX0RFTEFZRURfV09SSygmYXV4LT5jZWNfdW5yZWdpc3Rlcl93 b3JrLCBkcm1fZHBfY2VjX3VucmVnaXN0ZXJfd29yayk7Cj4gKwo+ICsJZHJtX2RwX2NlY19zZXRf ZWRpZChhdXgsIE5VTEwpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2NlY19yZWdpc3Rl cl9jb25uZWN0b3IpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9kcF9jZWNfdW5yZWdpc3Rlcl9jb25u ZWN0b3IoKSAtIHVucmVnaXN0ZXIgdGhlIENFQyBhZGFwdGVyLCBpZiBhbnkKPiArICogQGF1eDog RGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICovCj4gK3ZvaWQgZHJtX2RwX2NlY191bnJlZ2lz dGVyX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICt7Cj4gKwlpZiAoIWF1eC0+ Y2VjX2FkYXApCj4gKwkJcmV0dXJuOwo+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhdXgt PmNlY191bnJlZ2lzdGVyX3dvcmspOwo+ICsJY2VjX3VucmVnaXN0ZXJfYWRhcHRlcihhdXgtPmNl Y19hZGFwKTsKPiArCWF1eC0+Y2VjX2FkYXAgPSBOVUxMOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2RwX2NlY191bnJlZ2lzdGVyX2Nvbm5lY3Rvcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5j Cj4gaW5kZXggZmZlMTRlYzNlN2YyLi5lNmIwZTA4ZWUwYWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBf aGVscGVyLmMKPiBAQCAtMTA3Myw2ICsxMDczLDcgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2F1eF9j cmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHZvaWQgZHJtX2RwX2F1eF9pbml0 KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gIHsKPiAgCW11dGV4X2luaXQoJmF1eC0+aHdfbXV0 ZXgpOwo+ICsJbXV0ZXhfaW5pdCgmYXV4LT5jZWNfbXV0ZXgpOwo+ICAJSU5JVF9XT1JLKCZhdXgt PmNyY193b3JrLCBkcm1fZHBfYXV4X2NyY193b3JrKTsKPiAgCj4gIAlhdXgtPmRkYy5hbGdvID0g JmRybV9kcF9pMmNfYWxnbzsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCj4gaW5kZXggNjI5MDNiYWUwMjIxLi40 MTVhYzUyZTg1OTkgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCj4g KysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCj4gQEAgLTEwNjIsNiArMTA2Miw5IEBA IHN0cnVjdCBkcm1fZHBfYXV4X21zZyB7Cj4gIAlzaXplX3Qgc2l6ZTsKPiAgfTsKPiAgCj4gK3N0 cnVjdCBjZWNfYWRhcHRlcjsKPiArc3RydWN0IGVkaWQ7Cj4gKwo+ICAvKioKPiAgICogc3RydWN0 IGRybV9kcF9hdXggLSBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbAo+ICAgKiBAbmFtZTogdXNlci12 aXNpYmxlIG5hbWUgb2YgdGhpcyBBVVggY2hhbm5lbCBhbmQgdGhlIEkyQy1vdmVyLUFVWCBhZGFw dGVyCj4gQEAgLTExMjAsNiArMTEyMywyNiBAQCBzdHJ1Y3QgZHJtX2RwX2F1eCB7Cj4gIAkgKiBA aTJjX2RlZmVyX2NvdW50OiBDb3VudHMgSTJDIERFRkVScywgdXNlZCBmb3IgRFAgdmFsaWRhdGlv bi4KPiAgCSAqLwo+ICAJdW5zaWduZWQgaTJjX2RlZmVyX2NvdW50Owo+ICsJLyoqCj4gKwkgKiBA Y2VjX211dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSBjZWNfIGZpZWxkcwo+ICsJICovCj4gKwlz dHJ1Y3QgbXV0ZXggY2VjX211dGV4Owo+ICsJLyoqCj4gKwkgKiBAY2VjX2FkYXA6IHRoZSBDRUMg YWRhcHRlciBmb3IgQ0VDLVR1bm5lbGluZy1vdmVyLUFVWCBzdXBwb3J0Lgo+ICsJICovCj4gKwlz dHJ1Y3QgY2VjX2FkYXB0ZXIgKmNlY19hZGFwOwo+ICsJLyoqCj4gKwkgKiBAY2VjX25hbWU6IG5h bWUgb2YgdGhlIENFQyBhZGFwdGVyCj4gKwkgKi8KPiArCWNvbnN0IGNoYXIgKmNlY19uYW1lOwo+ ICsJLyoqCj4gKwkgKiBAY2VjX3BhcmVudDogcGFyZW50IGRldmljZSBvZiB0aGUgQ0VDIGFkYXB0 ZXIKPiArCSAqLwo+ICsJc3RydWN0IGRldmljZSAqY2VjX3BhcmVudDsKPiArCS8qKgo+ICsJICog QGNlY191bnJlZ2lzdGVyX3dvcms6IHVucmVnaXN0ZXIgdGhlIENFQyBhZGFwdGVyCj4gKwkgKi8K PiArCXN0cnVjdCBkZWxheWVkX3dvcmsgY2VjX3VucmVnaXN0ZXJfd29yazsKCidzdHJ1Y3QgeyAu Li4gfSBjZWM7JyBjb3VsZCBiZSBhIGRlY2VudCBpZGVhIGhlcmUuCgpJIHRoaW5rIEkgbG9va2Vk IGF0IHRoZSBkcGNkIGRldGFpcyBsYXN0IHRpbWUgYXJvdW5kIHNvIEknbGwgbm90IGJvdGhlcgp0 aGlzIHRpbWUgYXJvdW5kIHdpdGggdGhhdC4gQXBhcnQgZnJvbSB0aGUgcG9zc2libGUgZGVhZGxv Y2sgSSB0aGluawp0aGlzIGlzIGxvb2tpbmcgcHJldHR5IGdvb2QuCgo+ICB9Owo+ICAKPiAgc3Np emVfdCBkcm1fZHBfZHBjZF9yZWFkKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHVuc2lnbmVkIGlu dCBvZmZzZXQsCj4gQEAgLTEyNDIsNCArMTI2NSwzNyBAQCBkcm1fZHBfaGFzX3F1aXJrKGNvbnN0 IHN0cnVjdCBkcm1fZHBfZGVzYyAqZGVzYywgZW51bSBkcm1fZHBfcXVpcmsgcXVpcmspCj4gIAly ZXR1cm4gZGVzYy0+cXVpcmtzICYgQklUKHF1aXJrKTsKPiAgfQo+ICAKPiArI2lmZGVmIENPTkZJ R19EUk1fRFBfQ0VDCj4gK3ZvaWQgZHJtX2RwX2NlY19pcnEoc3RydWN0IGRybV9kcF9hdXggKmF1 eCk7Cj4gK3ZvaWQgZHJtX2RwX2NlY19yZWdpc3Rlcl9jb25uZWN0b3Ioc3RydWN0IGRybV9kcF9h dXggKmF1eCwgY29uc3QgY2hhciAqbmFtZSwKPiArCQkJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQp Owo+ICt2b2lkIGRybV9kcF9jZWNfdW5yZWdpc3Rlcl9jb25uZWN0b3Ioc3RydWN0IGRybV9kcF9h dXggKmF1eCk7Cj4gK3ZvaWQgZHJtX2RwX2NlY19zZXRfZWRpZChzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4LCBzdHJ1Y3QgZWRpZCAqZWRpZCk7Cj4gK3ZvaWQgZHJtX2RwX2NlY191bnNldF9lZGlkKHN0 cnVjdCBkcm1fZHBfYXV4ICphdXgpOwo+ICsjZWxzZQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJt X2RwX2NlY19pcnEoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgZHJtX2RwX2NlY19yZWdpc3Rlcl9jb25uZWN0b3Ioc3RydWN0IGRybV9k cF9hdXggKmF1eCwKPiArCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAo+ICsJCQkJCSAgICAg IHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgZHJtX2RwX2NlY191bnJlZ2lzdGVyX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4 KQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZHBfY2VjX3NldF9lZGlk KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsCj4gKwkJCQkgICAgICAgc3RydWN0IGVkaWQgKmVkaWQp Cj4gK3sKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRybV9kcF9jZWNfdW5zZXRfZWRp ZChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICt7Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiAg I2VuZGlmIC8qIF9EUk1fRFBfSEVMUEVSX0hfICovCj4gLS0gCj4gMi4xNy4wCgotLSAKVmlsbGUg U3lyasOkbMOkCkludGVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=