From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 6/9] drm/xen-front: Introduce DRM/KMS virtual display driver Date: Mon, 5 Mar 2018 10:13:35 +0100 Message-ID: <20180305091335.GH22212__18865.6110004105$1520241158$gmane$org@phenom.ffwll.local> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-7-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1esmBj-0002ZX-Pg for xen-devel@lists.xenproject.org; Mon, 05 Mar 2018 09:13:44 +0000 Received: by mail-wm0-x243.google.com with SMTP id t74so14340087wme.3 for ; Mon, 05 Mar 2018 01:13:40 -0800 (PST) Content-Disposition: inline In-Reply-To: <1519200222-20623-7-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, airlied@linux.ie, gustavo@padovan.org, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, seanpaul@chromium.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBGZWIgMjEsIDIwMTggYXQgMTA6MDM6MzlBTSArMDIwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IAo+IEltcGxlbWVudCBlc3NlbnRpYWwgaW5pdGlh bGl6YXRpb24gb2YgdGhlIGRpc3BsYXkgZHJpdmVyOgo+ICAgLSBpbnRyb2R1Y2UgcmVxdWlyZWQg ZGF0YSBzdHJ1Y3R1cmVzCj4gICAtIGhhbmRsZSBEUk0vS01TIGRyaXZlciByZWdpc3RyYXRpb24K PiAgIC0gcGVyZm9ybSBiYXNpYyBEUk0gZHJpdmVyIGluaXRpYWxpemF0aW9uCj4gICAtIHJlZ2lz dGVyIGRyaXZlciBvbiBiYWNrZW5kIGNvbm5lY3Rpb24KPiAgIC0gcmVtb3ZlIGRyaXZlciBvbiBi YWNrZW5kIGRpc2Nvbm5lY3QKPiAgIC0gaW50cm9kdWNlIGVzc2VudGlhbCBjYWxsYmFja3MgcmVx dWlyZWQgYnkgRFJNL0tNUyBjb3JlCj4gICAtIGludHJvZHVjZSBlc3NlbnRpYWwgY2FsbGJhY2tz IHJlcXVpcmVkIGZvciBmcm9udGVuZCBvcGVyYXRpb25zCj4gCj4gU2lnbmVkLW9mZi1ieTogT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwo+ ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYyAgICAgfCAxNjkgKysrKysrKysr KysrKysrKysrKysrKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaCAg ICAgfCAgMjQgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMg fCAyMTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250X2Rydi5oIHwgIDYwICsrKysrKysrKwo+ICA1IGZpbGVzIGNoYW5n ZWQsIDQ2MiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmgKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS94 ZW4vTWFrZWZpbGUKPiBpbmRleCBmMTgyM2NiNTk2YzUuLmQzMDY4MjAyNTkwZiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3hlbi9NYWtlZmlsZQo+IEBAIC0xLDYgKzEsNyBAQAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCj4gIAo+ICBkcm1feGVuX2Zyb250LW9ianMgOj0geGVuX2RybV9mcm9udC5v IFwKPiArCQkgICAgICB4ZW5fZHJtX2Zyb250X2Rydi5vIFwKPiAgCQkgICAgICB4ZW5fZHJtX2Zy b250X2V2dGNobmwubyBcCj4gIAkJICAgICAgeGVuX2RybV9mcm9udF9zaGJ1Zi5vIFwKPiAgCQkg ICAgICB4ZW5fZHJtX2Zyb250X2NmZy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMK PiBpbmRleCAwZDk0ZmYyNzJkYTMuLjhkZTg4ZTM1OWQ1ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udC5jCj4gQEAgLTE4LDYgKzE4LDggQEAKPiAgCj4gICNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ICAKPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsKPiAgI2luY2x1 ZGUgPHhlbi9wbGF0Zm9ybV9wY2kuaD4KPiAgI2luY2x1ZGUgPHhlbi94ZW4uaD4KPiAgI2luY2x1 ZGUgPHhlbi94ZW5idXMuaD4KPiBAQCAtMjUsMTUgKzI3LDE2MSBAQAo+ICAjaW5jbHVkZSA8eGVu L2ludGVyZmFjZS9pby9kaXNwbGlmLmg+Cj4gIAo+ICAjaW5jbHVkZSAieGVuX2RybV9mcm9udC5o Igo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIKPiAgI2luY2x1ZGUgInhlbl9kcm1f ZnJvbnRfZXZ0Y2hubC5oIgo+ICAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+ICAK PiArc3RhdGljIGludCBiZV9tb2RlX3NldChzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUgKnBpcGVsaW5lLCB1aW50MzJfdCB4LAo+ICsJCXVpbnQzMl90IHksIHVpbnQzMl90IHdpZHRo LCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGJwcCwKPiArCQl1aW50NjRfdCBmYl9jb29raWUp Cj4gKwo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiZV9kYnVmX2Ny ZWF0ZV9pbnQoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQl1aW50 NjRfdCBkYnVmX2Nvb2tpZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1 aW50MzJfdCBicHAsIHVpbnQ2NF90IHNpemUsIHN0cnVjdCBwYWdlICoqcGFnZXMsCj4gKwkJc3Ry dWN0IHNnX3RhYmxlICpzZ3QpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGJlX2RidWZfY3JlYXRlX2Zyb21fc2d0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm8sCj4gKwkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50 MzJfdCBoZWlnaHQsCj4gKwkJdWludDMyX3QgYnBwLCB1aW50NjRfdCBzaXplLCBzdHJ1Y3Qgc2df dGFibGUgKnNndCkKPiArewo+ICsJcmV0dXJuIGJlX2RidWZfY3JlYXRlX2ludChmcm9udF9pbmZv LCBkYnVmX2Nvb2tpZSwgd2lkdGgsIGhlaWdodCwKPiArCQkJYnBwLCBzaXplLCBOVUxMLCBzZ3Qp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJlX2RidWZfY3JlYXRlX2Zyb21fcGFnZXMoc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQl1aW50NjRfdCBkYnVmX2Nvb2tp ZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1aW50MzJfdCBicHAsIHVp bnQ2NF90IHNpemUsIHN0cnVjdCBwYWdlICoqcGFnZXMpCj4gK3sKPiArCXJldHVybiBiZV9kYnVm X2NyZWF0ZV9pbnQoZnJvbnRfaW5mbywgZGJ1Zl9jb29raWUsIHdpZHRoLCBoZWlnaHQsCj4gKwkJ CWJwcCwgc2l6ZSwgcGFnZXMsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJlX2RidWZf ZGVzdHJveShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCXVpbnQ2 NF90IGRidWZfY29va2llKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBiZV9mYl9hdHRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiAr CQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwgdWludDY0X3QgZmJfY29va2llLCB1aW50MzJfdCB3aWR0 aCwKPiArCQl1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKPiArewo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYmVfZmJfZGV0YWNoKHN0cnVjdCB4ZW5f ZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJdWludDY0X3QgZmJfY29va2llKQo+ICt7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiZV9wYWdlX2ZsaXAoc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywgaW50IGNvbm5faWR4LAo+ICsJCXVpbnQ2 NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHhlbl9kcm1fZHJ2X3VubG9hZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZv KQo+ICt7Cj4gKwlpZiAoZnJvbnRfaW5mby0+eGJfZGV2LT5zdGF0ZSAhPSBYZW5idXNTdGF0ZVJl Y29uZmlndXJpbmcpCj4gKwkJcmV0dXJuOwo+ICsKPiArCURSTV9ERUJVRygiQ2FuIHRyeSByZW1v dmluZyBkcml2ZXIgbm93XG4iKTsKPiArCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZnJvbnRfaW5mby0+ eGJfZGV2LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7Cj4gK30KPiArCj4gIHN0YXRpYyBzdHJ1 Y3QgeGVuX2RybV9mcm9udF9vcHMgZnJvbnRfb3BzID0gewo+IC0JLyogcGxhY2Vob2xkZXIgZm9y IG5vdyAqLwo+ICsJLm1vZGVfc2V0ID0gYmVfbW9kZV9zZXQsCj4gKwkuZGJ1Zl9jcmVhdGVfZnJv bV9wYWdlcyA9IGJlX2RidWZfY3JlYXRlX2Zyb21fcGFnZXMsCj4gKwkuZGJ1Zl9jcmVhdGVfZnJv bV9zZ3QgPSBiZV9kYnVmX2NyZWF0ZV9mcm9tX3NndCwKPiArCS5kYnVmX2Rlc3Ryb3kgPSBiZV9k YnVmX2Rlc3Ryb3ksCj4gKwkuZmJfYXR0YWNoID0gYmVfZmJfYXR0YWNoLAo+ICsJLmZiX2RldGFj aCA9IGJlX2ZiX2RldGFjaCwKPiArCS5wYWdlX2ZsaXAgPSBiZV9wYWdlX2ZsaXAsCj4gKwkuZHJt X2xhc3RfY2xvc2UgPSB4ZW5fZHJtX2Rydl91bmxvYWQsCj4gK307CgpUaGlzIGxvb2tzIGxpa2Ug YSBtaWRsYXllci9EUk0tYWJzdHJhY3Rpb24gaW4geW91ciBkcml2ZXIuIFBsZWFzZSByZW1vdmUs CmFuZCBpbnN0ZWFkIGRpcmVjdGx5IGhvb2sgeW91ciB4ZW4tZnJvbnQgY29kZSBpbnRvIHRoZSBy ZWxldmFudCBkcm0KY2FsbGJhY2tzLgoKSW4gZ2VuZXJhbCBhbHNvIHBscyBtYWtlIHN1cmUgeW91 IGRvbid0IGltcGxlbWVudCBkdW1teSBjYWxsYmFja3MgdGhhdCBkbwpub3RoaW5nLCB3ZSd2ZSB0 cmllZCByZWFsbHkgaGFyZCB0byBtYWtlIHRoZW0gYWxsIG9wdGlvbmFsIGluIHRoZSBkcm0KaW5m cmFzdHJ1Y3R1cmUuCi1EYW5pZWwKCj4gKwo+ICtzdGF0aWMgaW50IHhlbl9kcm1fZHJ2X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCS8qCj4gKwkgKiBUaGUgZGV2 aWNlIGlzIG5vdCBzcGF3biBmcm9tIGEgZGV2aWNlIHRyZWUsIHNvIGFyY2hfc2V0dXBfZG1hX29w cwo+ICsJICogaXMgbm90IGNhbGxlZCwgdGh1cyBsZWF2aW5nIHRoZSBkZXZpY2Ugd2l0aCBkdW1t eSBETUEgb3BzLgo+ICsJICogVGhpcyBtYWtlcyB0aGUgZGV2aWNlIHJldHVybiBlcnJvciBvbiBQ UklNRSBidWZmZXIgaW1wb3J0LCB3aGljaAo+ICsJICogaXMgbm90IGNvcnJlY3Q6IHRvIGZpeCB0 aGlzIGNhbGwgb2ZfZG1hX2NvbmZpZ3VyZSgpIHdpdGggYSBOVUxMCj4gKwkgKiBub2RlIHRvIHNl dCBkZWZhdWx0IERNQSBvcHMuCj4gKwkgKi8KPiArCW9mX2RtYV9jb25maWd1cmUoJnBkZXYtPmRl diwgTlVMTCk7Cj4gKwlyZXR1cm4geGVuX2RybV9mcm9udF9kcnZfcHJvYmUocGRldiwgJmZyb250 X29wcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGVuX2RybV9kcnZfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXJldHVybiB4ZW5fZHJtX2Zyb250X2Rydl9y ZW1vdmUocGRldik7Cj4gK30KPiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyB4ZW5f ZHJtX2Zyb250X3BsYXRmb3JtX2luZm8gPSB7Cj4gKwkubmFtZSA9IFhFTkRJU1BMX0RSSVZFUl9O QU1FLAo+ICsJLmlkID0gMCwKPiArCS5udW1fcmVzID0gMCwKPiArCS5kbWFfbWFzayA9IERNQV9C SVRfTUFTSygzMiksCj4gIH07Cj4gIAo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4 ZW5fZHJtX2Zyb250X2Zyb250X2luZm8gPSB7Cj4gKwkucHJvYmUJCT0geGVuX2RybV9kcnZfcHJv YmUsCj4gKwkucmVtb3ZlCQk9IHhlbl9kcm1fZHJ2X3JlbW92ZSwKPiArCS5kcml2ZXIJCT0gewo+ ICsJCS5uYW1lCT0gWEVORElTUExfRFJJVkVSX05BTUUsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3Rh dGljIHZvaWQgeGVuX2RybV9kcnZfZGVpbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm8pCj4gK3sKPiArCWlmICghZnJvbnRfaW5mby0+ZHJtX3BkcnZfcmVnaXN0ZXJlZCkK PiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGZyb250X2luZm8tPmRybV9wZGV2KQo+ICsJCXBsYXRm b3JtX2RldmljZV91bnJlZ2lzdGVyKGZyb250X2luZm8tPmRybV9wZGV2KTsKPiArCj4gKwlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeGVuX2RybV9mcm9udF9mcm9udF9pbmZvKTsKPiArCWZy b250X2luZm8tPmRybV9wZHJ2X3JlZ2lzdGVyZWQgPSBmYWxzZTsKPiArCWZyb250X2luZm8tPmRy bV9wZGV2ID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fZHJtX2Rydl9pbml0KHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCj4gK3sKPiArCWludCByZXQ7Cj4g Kwo+ICsJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4ZW5fZHJtX2Zyb250X2Zyb250 X2luZm8pOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlmcm9udF9p bmZvLT5kcm1fcGRydl9yZWdpc3RlcmVkID0gdHJ1ZTsKPiArCS8qIHBhc3MgY2FyZCBjb25maWd1 cmF0aW9uIHZpYSBwbGF0Zm9ybSBkYXRhICovCj4gKwl4ZW5fZHJtX2Zyb250X3BsYXRmb3JtX2lu Zm8uZGF0YSA9ICZmcm9udF9pbmZvLT5jZmc7Cj4gKwl4ZW5fZHJtX2Zyb250X3BsYXRmb3JtX2lu Zm8uc2l6ZV9kYXRhID0gc2l6ZW9mKGZyb250X2luZm8tPmNmZyk7Cj4gKwo+ICsJZnJvbnRfaW5m by0+ZHJtX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgKPiArCQkJJnhlbl9k cm1fZnJvbnRfcGxhdGZvcm1faW5mbyk7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZnJvbnRfaW5m by0+ZHJtX3BkZXYpKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgIiBYRU5E SVNQTF9EUklWRVJfTkFNRSAiIFBWIERSTSBkcml2ZXJcbiIpOwo+ICsJCWZyb250X2luZm8tPmRy bV9wZGV2ID0gTlVMTDsKPiArCQl4ZW5fZHJtX2Rydl9kZWluaXQoZnJvbnRfaW5mbyk7Cj4gKwkJ cmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRp YyB2b2lkIHhlbl9kcnZfcmVtb3ZlX2ludGVybmFsKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8g KmZyb250X2luZm8pCj4gIHsKPiArCXhlbl9kcm1fZHJ2X2RlaW5pdChmcm9udF9pbmZvKTsKPiAg CXhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9mcmVlX2FsbChmcm9udF9pbmZvKTsKPiAgfQo+ICAKPiBA QCAtNTksMTMgKzIwNywyNyBAQCBzdGF0aWMgaW50IGJhY2tlbmRfb25faW5pdHdhaXQoc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKPiAgc3RhdGljIGludCBiYWNrZW5kX29u X2Nvbm5lY3RlZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKQo+ICB7Cj4g IAl4ZW5fZHJtX2Zyb250X2V2dGNobmxfc2V0X3N0YXRlKGZyb250X2luZm8sIEVWVENITkxfU1RB VEVfQ09OTkVDVEVEKTsKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIHhlbl9kcm1fZHJ2X2luaXQo ZnJvbnRfaW5mbyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGJhY2tlbmRfb25fZGlzY29ubmVj dGVkKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCj4gIHsKPiArCWJvb2wg cmVtb3ZlZCA9IHRydWU7Cj4gKwo+ICsJaWYgKGZyb250X2luZm8tPmRybV9wZGV2KSB7Cj4gKwkJ aWYgKHhlbl9kcm1fZnJvbnRfZHJ2X2lzX3VzZWQoZnJvbnRfaW5mby0+ZHJtX3BkZXYpKSB7Cj4g KwkJCURSTV9XQVJOKCJEUk0gZHJpdmVyIHN0aWxsIGluIHVzZSwgZGVmZXJyaW5nIHJlbW92YWxc biIpOwo+ICsJCQlyZW1vdmVkID0gZmFsc2U7Cj4gKwkJfSBlbHNlCj4gKwkJCXhlbl9kcnZfcmVt b3ZlX2ludGVybmFsKGZyb250X2luZm8pOwo+ICsJfQo+ICsKPiAgCXhlbl9kcm1fZnJvbnRfZXZ0 Y2hubF9zZXRfc3RhdGUoZnJvbnRfaW5mbywgRVZUQ0hOTF9TVEFURV9ESVNDT05ORUNURUQpOwo+ IC0JeGVuYnVzX3N3aXRjaF9zdGF0ZShmcm9udF9pbmZvLT54Yl9kZXYsIFhlbmJ1c1N0YXRlSW5p dGlhbGlzaW5nKTsKPiArCj4gKwlpZiAocmVtb3ZlZCkKPiArCQl4ZW5idXNfc3dpdGNoX3N0YXRl KGZyb250X2luZm8tPnhiX2RldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpOwo+ICsJZWxzZQo+ ICsJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZnJvbnRfaW5mby0+eGJfZGV2LCBYZW5idXNTdGF0ZVJl Y29uZmlndXJpbmcpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBiYWNrZW5kX29uX2NoYW5nZWQo c3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiwKPiBAQCAtMTQ4LDYgKzMxMCw3IEBAIHN0YXRp YyBpbnQgeGVuX2Rydl9wcm9iZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJfZGV2LAo+ICAKPiAg CWZyb250X2luZm8tPnhiX2RldiA9IHhiX2RldjsKPiAgCXNwaW5fbG9ja19pbml0KCZmcm9udF9p bmZvLT5pb19sb2NrKTsKPiArCWZyb250X2luZm8tPmRybV9wZHJ2X3JlZ2lzdGVyZWQgPSBmYWxz ZTsKPiAgCWRldl9zZXRfZHJ2ZGF0YSgmeGJfZGV2LT5kZXYsIGZyb250X2luZm8pOwo+ICAJcmV0 dXJuIHhlbmJ1c19zd2l0Y2hfc3RhdGUoeGJfZGV2LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7 Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250Lmgg Yi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaAo+IGluZGV4IDEzZjIyNzM2YWUw Mi4uOWVkNWJmYjI0OGQwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKPiBA QCAtMTksNiArMTksOCBAQAo+ICAjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9IXwo+ICAjZGVmaW5l IF9fWEVOX0RSTV9GUk9OVF9IXwo+ICAKPiArI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+ Cj4gKwo+ICAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jZmcuaCIKPiAgCj4gICNpZm5kZWYgR1JB TlRfSU5WQUxJRF9SRUYKPiBAQCAtMzAsMTYgKzMyLDM4IEBACj4gICNkZWZpbmUgR1JBTlRfSU5W QUxJRF9SRUYJMAo+ICAjZW5kaWYKPiAgCj4gK3N0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBl bGluZTsKPiArCj4gIHN0cnVjdCB4ZW5fZHJtX2Zyb250X29wcyB7Cj4gKwlpbnQgKCptb2RlX3Nl dCkoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKPiArCQkJdWlu dDMyX3QgeCwgdWludDMyX3QgeSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiAr CQkJdWludDMyX3QgYnBwLCB1aW50NjRfdCBmYl9jb29raWUpOwo+ICsJaW50ICgqZGJ1Zl9jcmVh dGVfZnJvbV9wYWdlcykoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiAr CQkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQs Cj4gKwkJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7 Cj4gKwlpbnQgKCpkYnVmX2NyZWF0ZV9mcm9tX3NndCkoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5m byAqZnJvbnRfaW5mbywKPiArCQkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRo LCB1aW50MzJfdCBoZWlnaHQsCj4gKwkJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3Ry dWN0IHNnX3RhYmxlICpzZ3QpOwo+ICsJaW50ICgqZGJ1Zl9kZXN0cm95KShzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSk7Cj4g KwlpbnQgKCpmYl9hdHRhY2gpKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8s Cj4gKwkJCXVpbnQ2NF90IGRidWZfY29va2llLCB1aW50NjRfdCBmYl9jb29raWUsCj4gKwkJCXVp bnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCk7Cj4g KwlpbnQgKCpmYl9kZXRhY2gpKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8s Cj4gKwkJCXVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4gKwlpbnQgKCpwYWdlX2ZsaXApKHN0cnVjdCB4 ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJCWludCBjb25uX2lkeCwgdWludDY0 X3QgZmJfY29va2llKTsKPiAgCS8qIENBVVRJT04hIHRoaXMgaXMgY2FsbGVkIHdpdGggYSBzcGlu X2xvY2sgaGVsZCEgKi8KPiAgCXZvaWQgKCpvbl9mcmFtZV9kb25lKShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2LAo+ICAJCQlpbnQgY29ubl9pZHgsIHVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4g Kwl2b2lkICgqZHJtX2xhc3RfY2xvc2UpKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250 X2luZm8pOwo+ICB9Owo+ICAKPiAgc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyB7Cj4gIAlzdHJ1 Y3QgeGVuYnVzX2RldmljZSAqeGJfZGV2Owo+ICAJLyogdG8gcHJvdGVjdCBkYXRhIGJldHdlZW4g YmFja2VuZCBJTyBjb2RlIGFuZCBpbnRlcnJ1cHQgaGFuZGxlciAqLwo+ICAJc3BpbmxvY2tfdCBp b19sb2NrOwo+ICsJYm9vbCBkcm1fcGRydl9yZWdpc3RlcmVkOwo+ICAJLyogdmlydHVhbCBEUk0g cGxhdGZvcm0gZGV2aWNlICovCj4gIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkcm1fcGRldjsK PiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iMzc2NGQ1ZWQwZjYKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jCj4gQEAg LTAsMCArMSwyMTEgQEAKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ ICsgKgo+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgo+ICsgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4g KyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4gKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVr c2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dl bS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVk ZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jZmcuaCIKPiAr I2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZHJ2LmgiCj4gKwo+ICtzdGF0aWMgaW50IGR1bWJfY3Jl YXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKPiArCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gK3sKPiArCXJldHVybiAtRUlOVkFM Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZv ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRybV9pbmZvLT5mcm9udF9vcHMtPmRi dWZfZGVzdHJveShkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJeGVuX2RybV9mcm9udF9kYnVm X3RvX2Nvb2tpZShvYmopKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb25fZnJhbWVfZG9uZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCWludCBjb25uX2lkeCwgdWludDY0X3Qg ZmJfY29va2llKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxhc3RjbG9zZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAq ZHJtX2luZm8gPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRybV9pbmZvLT5mcm9udF9vcHMt PmRybV9sYXN0X2Nsb3NlKGRybV9pbmZvLT5mcm9udF9pbmZvKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBnZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCj4gK3sKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNn X3RhYmxlICpwcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g K3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpwcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQlz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsIHN0cnVjdCBzZ190YWJsZSAqc2d0KQo+ ICt7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBwcmltZV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHZvaWQgKnZhZGRyKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcHJpbWVfbW1hcChzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sK PiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyB4ZW5kcm1fZm9wcyA9IHsKPiArCS5vd25lciAgICAgICAgICA9IFRISVNfTU9E VUxFLAo+ICsJLm9wZW4gICAgICAgICAgID0gZHJtX29wZW4sCj4gKwkucmVsZWFzZSAgICAgICAg PSBkcm1fcmVsZWFzZSwKPiArCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKPiArI2lmZGVm IENPTkZJR19DT01QQVQKPiArCS5jb21wYXRfaW9jdGwgICA9IGRybV9jb21wYXRfaW9jdGwsCj4g KyNlbmRpZgo+ICsJLnBvbGwgICAgICAgICAgID0gZHJtX3BvbGwsCj4gKwkucmVhZCAgICAgICAg ICAgPSBkcm1fcmVhZCwKPiArCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKPiArCS5tbWFw ICAgICAgICAgICA9IGdlbV9tbWFwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCB4ZW5fZHJtX3ZtX29wcyA9IHsKPiArCS5vcGVuICAgICAgICAg ICA9IGRybV9nZW1fdm1fb3BlbiwKPiArCS5jbG9zZSAgICAgICAgICA9IGRybV9nZW1fdm1fY2xv c2UsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2RyaXZlciB4ZW5fZHJtX2RyaXZlciA9IHsKPiAr CS5kcml2ZXJfZmVhdHVyZXMgICAgICAgICAgID0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RFU0VU IHwKPiArCQkJCSAgICAgRFJJVkVSX1BSSU1FIHwgRFJJVkVSX0FUT01JQywKPiArCS5sYXN0Y2xv c2UgICAgICAgICAgICAgICAgID0gbGFzdGNsb3NlLAo+ICsJLmdlbV9mcmVlX29iamVjdF91bmxv Y2tlZCAgPSBmcmVlX29iamVjdCwKPiArCS5nZW1fdm1fb3BzICAgICAgICAgICAgICAgID0gJnhl bl9kcm1fdm1fb3BzLAo+ICsJLnByaW1lX2hhbmRsZV90b19mZCAgICAgICAgPSBkcm1fZ2VtX3By aW1lX2hhbmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgICAgICAgID0gZHJtX2dl bV9wcmltZV9mZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydCAgICAgICAgICA9IGRy bV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9leHBvcnQgICAgICAgICAgPSBkcm1f Z2VtX3ByaW1lX2V4cG9ydCwKPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlICAgID0gcHJpbWVf Z2V0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBwcmltZV9pbXBv cnRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX3ZtYXAgICAgICAgICAgICA9IHByaW1lX3ZtYXAs Cj4gKwkuZ2VtX3ByaW1lX3Z1bm1hcCAgICAgICAgICA9IHByaW1lX3Z1bm1hcCwKPiArCS5nZW1f cHJpbWVfbW1hcCAgICAgICAgICAgID0gcHJpbWVfbW1hcCwKPiArCS5kdW1iX2NyZWF0ZSAgICAg ICAgICAgICAgID0gZHVtYl9jcmVhdGUsCj4gKwkuZm9wcyAgICAgICAgICAgICAgICAgICAgICA9 ICZ4ZW5kcm1fZm9wcywKPiArCS5uYW1lICAgICAgICAgICAgICAgICAgICAgID0gInhlbmRybS1k dSIsCj4gKwkuZGVzYyAgICAgICAgICAgICAgICAgICAgICA9ICJYZW4gUFYgRFJNIERpc3BsYXkg VW5pdCIsCj4gKwkuZGF0ZSAgICAgICAgICAgICAgICAgICAgICA9ICIyMDE2MTEwOSIsCj4gKwku bWFqb3IgICAgICAgICAgICAgICAgICAgICA9IDEsCj4gKwkubWlub3IgICAgICAgICAgICAgICAg ICAgICA9IDAsCj4gK307Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9kcnZfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9vcHMgKmZy b250X29wcykKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmcgPSBkZXZfZ2V0 X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8g KmRybV9pbmZvOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiArCWludCByZXQ7Cj4gKwo+ ICsJRFJNX0lORk8oIkNyZWF0aW5nICVzXG4iLCB4ZW5fZHJtX2RyaXZlci5kZXNjKTsKPiArCj4g Kwlkcm1faW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRybV9pbmZvKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRybV9pbmZvKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWRybV9pbmZvLT5mcm9udF9vcHMgPSBmcm9udF9vcHM7Cj4gKwlkcm1faW5mby0+ZnJvbnRf b3BzLT5vbl9mcmFtZV9kb25lID0gb25fZnJhbWVfZG9uZTsKPiArCWRybV9pbmZvLT5mcm9udF9p bmZvID0gY2ZnLT5mcm9udF9pbmZvOwo+ICsKPiArCWRldiA9IGRybV9kZXZfYWxsb2MoJnhlbl9k cm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiArCWlmICghZGV2KQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCWRybV9pbmZvLT5kcm1fZGV2ID0gZGV2Owo+ICsKPiArCWRybV9pbmZvLT5jZmcg PSBjZmc7Cj4gKwlkZXYtPmRldl9wcml2YXRlID0gZHJtX2luZm87Cj4gKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBkcm1faW5mbyk7Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRl diwgY2ZnLT5udW1fY29ubmVjdG9ycyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmssIHJldCAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCWRldi0+aXJxX2VuYWJsZWQgPSAxOwo+ICsKPiArCXJldCA9IGRy bV9kZXZfcmVnaXN0ZXIoZGV2LCAwKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmYWlsX3JlZ2lz dGVyOwo+ICsKPiArCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5v ciAlZFxuIiwKPiArCQkJeGVuX2RybV9kcml2ZXIubmFtZSwgeGVuX2RybV9kcml2ZXIubWFqb3Is Cj4gKwkJCXhlbl9kcm1fZHJpdmVyLm1pbm9yLCB4ZW5fZHJtX2RyaXZlci5wYXRjaGxldmVsLAo+ ICsJCQl4ZW5fZHJtX2RyaXZlci5kYXRlLCBkZXYtPnByaW1hcnktPmluZGV4KTsKPiArCj4gKwly ZXR1cm4gMDsKPiArCj4gK2ZhaWxfcmVnaXN0ZXI6Cj4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGV2 KTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5m byA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGRybV9pbmZvLT5kcm1fZGV2Owo+ICsKPiArCWlmIChkZXYpIHsKPiArCQlkcm1fZGV2X3Vu cmVnaXN0ZXIoZGV2KTsKPiArCQlkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkZXYpOwo+ICsJ CWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7Cj4gKwkJZHJtX2Rldl91bnJlZihkZXYpOwo+ ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2Jvb2wgeGVuX2RybV9mcm9udF9kcnZfaXNf dXNlZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKwo+ICsJaWYgKCFkcm1faW5mbykKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJZGV2ID0gZHJtX2luZm8tPmRybV9kZXY7Cj4gKwlpZiAoIWRl dikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyoKPiArCSAqIEZJWE1FOiB0aGUgY29kZSBi ZWxvdyBtdXN0IGJlIHByb3RlY3RlZCBieSBkcm1fZ2xvYmFsX211dGV4LAo+ICsJICogYnV0IGl0 IGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVzLiBBbnl3YXlzIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRp b24sCj4gKwkgKiBidXQgd2Ugd2lsbCByZS10cnkuCj4gKwkgKi8KPiArCXJldHVybiBkZXYtPm9w ZW5fY291bnQgIT0gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2 LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWFhNDc2NTM1 YzEzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9m cm9udF9kcnYuaAo+IEBAIC0wLDAgKzEsNjAgQEAKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1 YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKPiArICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqCj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4g KyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoK PiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiAr ICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfRFJWX0hf Cj4gKyNkZWZpbmUgX19YRU5fRFJNX0ZST05UX0RSVl9IXwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVu X2RybV9mcm9udF9jZmcuaCIKPiArCj4gK3N0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGlu ZSB7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm87Cj4gKwo+ICsJ aW50IGluZGV4Owo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gewo+ ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKPiArCXN0cnVjdCB4ZW5f ZHJtX2Zyb250X29wcyAqZnJvbnRfb3BzOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7 Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZzsKPiArfTsKPiArCj4gK3N0YXRpYyBp bmxpbmUgdWludDY0X3QgeGVuX2RybV9mcm9udF9mYl90b19jb29raWUoCj4gKwkJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXJldHVybiAodWludDY0X3QpZmI7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgeGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZSgK PiArCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK3sKPiArCXJldHVybiAodWlu dDY0X3QpZ2VtX29iajsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZHJ2X3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfb3Bz ICpmcm9udF9vcHMpOwo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZHJ2X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKPiArCj4gK2Jvb2wgeGVuX2RybV9mcm9udF9kcnZfaXNf dXNlZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKPiArCj4gKyNlbmRpZiAvKiBfX1hF Tl9EUk1fRlJPTlRfRFJWX0hfICovCj4gKwo+IC0tIAo+IDIuNy40Cj4gCj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBs aXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRl cgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwu Y2gKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=