From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v8 1/5] drm: xlnx: Xilinx DRM KMS module Date: Mon, 18 Feb 2019 01:33:02 +0200 Message-ID: <20190217233302.GA25462@pendragon.ideasonboard.com> References: <1531015538-32268-1-git-send-email-hyun.kwon@xilinx.com> <1531015538-32268-2-git-send-email-hyun.kwon@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1531015538-32268-2-git-send-email-hyun.kwon@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hyun Kwon Cc: devicetree@vger.kernel.org, Rob Herring , Michal Simek , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: devicetree@vger.kernel.org SGkgSHl1bgoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCgpPbiBTYXQsIEp1bCAwNywgMjAxOCBh dCAwNzowNTozNFBNIC0wNzAwLCBIeXVuIEt3b24gd3JvdGU6Cj4gWGlsaW54IGhhcyB2YXJpb3Vz IHBsYXRmb3JtcyBmb3IgZGlzcGxheSwgd2hlcmUgdXNlcnMgY2FuIGNyZWF0ZQo+IHVzaW5nIG11 bHRpcGxlIElQcyBpbiB0aGUgcHJvZ3JhbW1hYmxlIEZQR0EgZmFicmljLCBvciB3aGVyZQo+IHNv bWUgaGFyZGVuZWQgcGlwZWxpbmUgaXMgYXZhaWxhYmxlIG9uIHRoZSBjaGlwLiBGdXJ0aGVybW9y ZSwKPiBoYXJkZW5lZCBwaXBlbGluZSBjYW4gYWxzbyBpbnRlcmFjdCB3aXRoIHNvZnQgbG9naWNz IGluIEZQR0EuCj4gCj4gVGhlIFhpbGlueCBEUk0gS01TIG1vZHVsZSBpcyB0byBpbnRlZ3JhdGUg bXVsdGlwbGUgc3ViZGV2aWNlcyBhbmQKPiB0byByZXByZXNlbnQgdGhlIGVudGlyZSBwaXBlbGlu ZSBhcyBhIHNpbmdsZSBEUk0gZGV2aWNlLiBUaGUgbW9kdWxlCj4gaW5jbHVkZXMgaGVscGVyIChl eCwgZnJhbWVidWZmZXIgYW5kIGdlbSBoZWxwZXJzKSBhbmQgZ2x1ZSBsb2dpYwo+IChleCwgY3J0 YyBpbnRlcmZhY2UpIGZ1bmN0aW9ucy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5 dW4ua3dvbkB4aWxpbnguY29tPgo+IEFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPgo+IC0tLQo+IHY3Cj4gLSBVbmJpbmQgYXMgY29tcG9uZW50IGluIHNodXRk b3duCj4gLSBSZWdpc3RlciByZWxlYXNlIGNhbGxiYWNrIGZvciBtYXN0ZXIgZGV2aWNlCj4gdjYK PiAtIEZpeCB0aGUgZnVuY3Rpb24gZGVzYyBmb3IgcGlwZWxpbmUgY2FsbHMKPiAtIFJlYmFzZSBv biBkcm0tbWlzYy1uZXh0Cj4gLSBGaXggdHlwb3MgaW4gZG9jdW1lbnRhdGlvbgo+IC0gTWF0Y2gg dHlwZXMgZm9yIHJldHVybiBhbmQgaW50ZXJuYWwgdmFyaWFibGVzCj4gLSBSZW1vdmUgdXNlIG9m ICd0bXAnIHZhcmlhYmxlcwo+IC0gUHJvdGVjdCBhbnkgY3J0YyBsaXN0IGl0ZXJhdGlvbiB3aXRo IG11dGV4Cj4gLSBSZW1vdmUgYSBjaGVjayBmb3IgZHJtIGRldmljZSBpbiBjcnRjIHVucmVnaXN0 cmF0aW9uCj4gLSBTcGxpdCB0aGUgY3J0YyBvcHMgYXMgYSBzZXBhcmF0ZSBzdHJ1Y3QgdG8gY29u c3RpZnkKPiAtIEVtYmVkIHhsbnhfY3J0Y19oZWxwZXIgaW50byB4bG54X2RybQo+IC0gTW92ZSB0 b194bG54X2NydGMgbWFjcm8gY2xvc2UgdG8geGxueF9jcnRjCj4gLSBSZW1vdmUgdW5uZWVkZWQg aW5jbHVkZQo+IC0gUmVwbGFjZSBjdXN0b20gdnJlcyBtb2R1bGUgcGFyYW0gd2l0aCBDT05GSUdf RFJNX0ZCREVWX09WRVJBTExPQwo+IC0gUmVuYW1lIGNydGMgdG8gY3J0Y19oZWxwZXIgdG8gbWFr ZSBpdCBjbGVhcmVyCj4gLSBVc2UgJ0RSTSBkZXZpY2UnIGluc3RlYWQgb2YgJ0RSTSBjb3JlJwo+ IC0gUmVtb3ZlIHVudXNlZCBmdW5jdGlvbiwgeGxueF9nZXRfZm9ybWF0KCkKPiAtIFVzZSBkZXZp Y2UgaW5zdGVhZCBvZiBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBsb2dpY2FsIG1hc3Rlcgo+IC0g SW5saW5lIHhsbnhfb2ZfY29tcG9uZW50X3Byb2JlKCkKPiAtIFVzZSBvZl9nZXRfcGFyZW50KCkK PiAtIFJlbW92ZSB0aGUgcG9ydCBiaW5kaW5nIGhhbmRsaW5nIGluIHRoZSBkcml2ZXIKPiAtIERv IGNvbXBsZXRlIGZvcndhcmQtZGVjbGFyYXRpb25zIGluIGhlYWRlcnMKPiAtIENvbnN0aWZ5IGFs bCBmdW5jdGlvbiBwb2ludGVycwo+IC0gVXNlIHRoZSBkZWZhdWx0IGlvY3RsIGZyb20gZmIgaGVs cGVyCj4gLSBSZXR1cm4gdGhlIG1pbmltdW0gcGl0Y2ggYWx3YXlzCj4gLSBDbGVhbiB1cCB0aGUg ZHVwbGljYXRlIGxpY2Vuc2UgcGFyYWdyYXBocwo+IC0gR2V0IGNvbW1vbiBiaXRzIGZvciBkbWEg bWFzayBpbnN0ZWFkIG9mIG1pbmltdW0gdmFsdWUKPiAtIFJlbW92ZSBkdW1teSBmdW5jdGlvbiBk ZWNsYXJhdGlvbiBmcm9tIGhlYWRlcgo+IC0gRml4IGEgdHlwbyBpbiB0aGUgY29tbWl0IG1lc3Nh Z2Ugd2l0aCBzb21lIHJlLW9yZ2FuaXphdGlvbgo+IHY1Cj4gLSBSZWRlZmluZSB4bG54X3BpcGVs aW5lX2luaXQoKQo+IHY0Cj4gLSBGaXggYSBidWcgaW4gb2YgZ3JhcGggYmluZGluZyBoYW5kbGlu Zwo+IC0gUmVtb3ZlIHZibGFuayBjYWxsYmFja3MgZnJvbSB4bG54X2NydGMKPiAtIFJlbW92ZSB0 aGUgZHQgYmluZGluZy4gVGhpcyBtb2R1bGUgYmVjb21lcyBtb3JlIGxpa2UgYSBsaWJyYXJ5Lgo+ IC0gUmVwaHJhc2UgdGhlIGNvbW1pdCBtZXNzYWdlCj4gdjMKPiAtIEFkZCBMYXVyZW50IGFzIGEg bWFpbnRhaW5lcgo+IC0gRml4IG11bHRpcGxlLXJlZmVyZW5jZSBvbiBnZW0gb2JqZWN0cwo+IHYy Cj4gLSBDaGFuZ2UgdGhlIFNQRFggaWRlbnRpZmllciBmb3JtYXQKPiAtIE1lcmdlIHBhdGNoZXMo Y3J0YywgZ2VtLCBmYikgaW50byBzaW5nbGUgb25lCj4gdjIgb2YgeGxueF9kcnYKPiAtIFJlbmFt ZSBrbXMgdG8gZGlzcGxheSBpbiB4bG54X2Rydgo+IC0gUmVwbGFjZSBzb21lIHhsbnggc3BlY2lm aWMgZmIgaGVscGVyIHdpdGggY29tbW9uIGhlbHBlcnMgaW4geGxueF9kcnYKPiAtIERvbid0IHNl dCB0aGUgY29tbWl0IHRhaWwgY2FsbGJhY2sgaW4geGxueF9kcnYKPiAtIFN1cHBvcnQgJ3BvcnRz JyBncmFwaCBiaW5kaW5nIGluIHhsbnhfZHJ2Cj4gdjIgb2YgeGxueF9mYgo+IC0gUmVtb3ZlIHdy YXBwZXJzIGluIHhsbnhfZmIKPiAtIFJlcGxhY2Ugc29tZSBmdW5jdGlvbnMgd2l0aCBkcm0gY29y ZSBoZWxwZXJzIGluIHhsbnhfZmIKPiAtLS0KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAg ICAgICAgICAgICAgfCAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICB8 ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyAgICAgfCAgMTIgKysKPiAgZHJpdmVycy9ncHUvZHJt L3hsbngvTWFrZWZpbGUgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Ny dGMuYyB8IDE0MiArKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0 Yy5oIHwgIDgzICsrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMgIHwg NDMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2Rydi5oICB8ICAyMyArKysKPiAgZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9mYi5jICAgfCAyNDkgKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0veGxueC94bG54X2ZiLmggICB8ICAyNyArKysKPiAgZHJpdmVycy9ncHUvZHJtL3hsbngveGxu eF9nZW0uYyAgfCAgMzYgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oICB8 ICAyMSArKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMDQwIGluc2VydGlvbnMoKykKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS94bG54L3hsbnhfZmIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9mYi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v eGxueC94bG54X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2dlbS5oCgpbc25pcF0KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54 L3hsbnhfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjA2ZjFkNzAKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMKPiBAQCAtMCwwICsxLDE0MiBA QAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxp bnggRFJNIGNydGMgZHJpdmVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4 IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3 b25AeGlsaW54LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KCmRybVAu aCBpcyBkZXByZWNhdGVkLCB5b3Ugc2hvdWxkIGluc3RlYWQgaW5jbHVkZSB0aGUgYnJva2VuLWRv d24gRFJNCmhlYWRlcnMgKGFuZCB0aGUgcmVxdWlyZWQgb3RoZXIgTGludXggaGVhZGVycykuIFRo aXMgaG9sZHMgdHJ1ZSBmb3IgdGhlCm90aGVyIGZpbGVzIGluIHRoaXMgc2VyaWVzLCBhbmQgZm9y IGFsbCB0aGUgb3RoZXIgcGF0Y2hlcy4KCj4gKyNpbmNsdWRlICJ4bG54X2NydGMuaCIKPiArI2lu Y2x1ZGUgInhsbnhfZHJ2LmgiCj4gKwo+ICsvKgo+ICsgKiBPdmVydmlldwo+ICsgKiAtLS0tLS0t LQo+ICsgKgo+ICsgKiBUaGUgWGlsaW54IENSVEMgbGF5ZXIgaXMgdG8gZW5hYmxlIHRoZSBjdXN0 b20gaW50ZXJmYWNlIHRvIENSVEMgZHJpdmVycy4KPiArICogVGhlIGludGVyZmFjZSBpcyB1c2Vk IGJ5IFhpbGlueCBEUk0gZHJpdmVyIHdoZXJlIGl0IG5lZWRzIENSVEMKPiArICogZnVuY3Rpb25h bGl0eS4gQ1JUQyBkcml2ZXJzIHNob3VsZCBhdHRhY2ggdGhlIGRlc2lyZWQgY2FsbGJhY2tzCj4g KyAqIHRvIHN0cnVjdCB4bG54X2NydGMgYW5kIHJlZ2lzdGVyIHRoZSB4bG54X2NydGMgd2l0aCBj b3JyZXNwb25kaW5nCj4gKyAqIGRybV9kZXZpY2UuIEl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIENS VEMgZHJpdmVycyByZWdpc3RlciBhbGwgY2FsbGJhY2tzCj4gKyAqIGV2ZW4gdGhvdWdoIG1hbnkg b2YgdGhlbSBhcmUgb3B0aW9uYWwuCj4gKyAqIFRoZSBDUlRDIGhlbHBlciBzaW1wbHkgd2Fsa3Mg dGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBDUlRDIGRldmljZSwKPiArICogYW5kIGNhbGxzIHRoZSBj YWxsYmFja3MuCj4gKyAqLwo+ICsKPiArdW5zaWduZWQgaW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0 X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpCgpIb3cgYWJvdXQgcmVuYW1p bmcgZ2V0X2FsaWduIHRvIGdldF9hbGlnbm1lbnQsIGhlcmUgYW5kIGV2ZXJ5d2hlcmUgZWxzZSA/ Cgo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ICsJdW5zaWduZWQgaW50IGFsaWdu ID0gMTsKPiArCj4gKwltdXRleF9sb2NrKCZoZWxwZXItPmxvY2spOwo+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeShjcnRjLCAmaGVscGVyLT54bG54X2NydGNzLCBsaXN0KSB7Cj4gKwkJaWYgKGNydGMt Pm9wcy0+Z2V0X2FsaWduKQo+ICsJCQlhbGlnbiA9IEFMSUdOKGFsaWduLCBjcnRjLT5vcHMtPmdl dF9hbGlnbihjcnRjKSk7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4g Kwo+ICsJcmV0dXJuIGFsaWduOwo+ICt9Cj4gKwo+ICt1NjQgeGxueF9jcnRjX2hlbHBlcl9nZXRf ZG1hX21hc2soc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiArewo+ICsJc3RydWN0 IHhsbnhfY3J0YyAqY3J0YzsKPiArCXU2NCBtYXNrID0gRE1BX0JJVF9NQVNLKHNpemVvZihkbWFf YWRkcl90KSAqIDgpOwo+ICsKPiArCW11dGV4X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArCQlp ZiAoY3J0Yy0+b3BzLT5nZXRfZG1hX21hc2spCj4gKwkJCW1hc2sgJj0gY3J0Yy0+b3BzLT5nZXRf ZG1hX21hc2soY3J0Yyk7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4g Kwo+ICsJcmV0dXJuIG1hc2s7Cj4gK30KPiArCj4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9t YXhfd2lkdGgoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKCldvdWxkIGl0IG1ha2Ug c2Vuc2UgdG8gbWVyZ2UgdGhlIGdldF9tYXhfd2lkdGggYW5kIGdldF9tYXhfaGVpZ2h0CmZ1bmN0 aW9ucyBpbnRvIGEgZ2V0X21heF9zaXplIGZ1bmN0aW9uLCBnaXZlbiB0aGF0IHRoZXkgYXJlIGJv dGggdXNlZCBpbgphIHNpbmdsZSBsb2NhdGlvbiA/Cgo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9jcnRj ICpjcnRjOwo+ICsJaW50IHdpZHRoID0gUzMyX01BWDsKPiArCj4gKwltdXRleF9sb2NrKCZoZWxw ZXItPmxvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVscGVyLT54bG54X2Ny dGNzLCBsaXN0KSB7Cj4gKwkJaWYgKGNydGMtPm9wcy0+Z2V0X21heF93aWR0aCkKPiArCQkJd2lk dGggPSBtaW4od2lkdGgsIGNydGMtPm9wcy0+Z2V0X21heF93aWR0aChjcnRjKSk7Cj4gKwl9Cj4g KwltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHdpZHRoOwo+ICt9 Cj4gKwo+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X2hlaWdodChzdHJ1Y3QgeGxueF9j cnRjX2hlbHBlciAqaGVscGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ICsJ aW50IGhlaWdodCA9IFMzMl9NQVg7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5sb2NrKTsK PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkg ewo+ICsJCWlmIChjcnRjLT5vcHMtPmdldF9tYXhfaGVpZ2h0KQo+ICsJCQloZWlnaHQgPSBtaW4o aGVpZ2h0LCBjcnRjLT5vcHMtPmdldF9tYXhfaGVpZ2h0KGNydGMpKTsKPiArCX0KPiArCW11dGV4 X3VubG9jaygmaGVscGVyLT5sb2NrKTsKPiArCj4gKwlyZXR1cm4gaGVpZ2h0Owo+ICt9Cj4gKwo+ ICt1MzIgeGxueF9jcnRjX2hlbHBlcl9nZXRfZm9ybWF0KHN0cnVjdCB4bG54X2NydGNfaGVscGVy ICpoZWxwZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1MzIgcmVzdWx0 ID0gMCwgZm9ybWF0Owo+ICsKPiArCW11dGV4X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArCQlp ZiAoY3J0Yy0+b3BzLT5nZXRfZm9ybWF0KSB7Cj4gKwkJCWZvcm1hdCA9IGNydGMtPm9wcy0+Z2V0 X2Zvcm1hdChjcnRjKTsKPiArCQkJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gZm9ybWF0KSB7Cj4g KwkJCQltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4gKwkJCQlyZXR1cm4gMDsKPiArCQkJ fQo+ICsJCQlyZXN1bHQgPSBmb3JtYXQ7Cj4gKwkJfQo+ICsJfQo+ICsJbXV0ZXhfdW5sb2NrKCZo ZWxwZXItPmxvY2spOwo+ICsKPiArCXJldHVybiByZXN1bHQ7Cj4gK30KPiArCj4gK3ZvaWQgeGxu eF9jcnRjX2hlbHBlcl9pbml0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpCj4gK3sK PiArCUlOSVRfTElTVF9IRUFEKCZoZWxwZXItPnhsbnhfY3J0Y3MpOwo+ICsJbXV0ZXhfaW5pdCgm aGVscGVyLT5sb2NrKTsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfaGVscGVyX2Zpbmkoc3Ry dWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiArewo+ICsJaWYgKFdBUk5fT04oIWxpc3Rf ZW1wdHkoJmhlbHBlci0+eGxueF9jcnRjcykpKQo+ICsJCXJldHVybjsKCkkgd291bGRuJ3QgcmV0 dXJuIGVhcmx5LCB3ZSdyZSBsaWtlbHkgc2NyZXdlZCBhbnl3YXkgaWYgdGhpcyBoYXBwZW5zLCBz bwpJIHRoaW5rIHlvdSBjYW4gYXMgd2VsbCBkZXN0cm95IHRoZSBtdXRleC4KCj4gKwo+ICsJbXV0 ZXhfZGVzdHJveSgmaGVscGVyLT5sb2NrKTsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfcmVn aXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0YykKPiAr ewo+ICsJc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlciA9IHhsbnhfZ2V0X2NydGNfaGVs cGVyKGRybSk7CgpEbyB3ZSByZWFsbHkgbmVlZCB4bG54X2dldF9jcnRjX2hlbHBlcigpID8gQ2Fu J3QgdGhpcyBmdW5jdGlvbiBhY2Nlc3MKeGxueF9kcm0gZGlyZWN0bHkgPyBJIHVuZGVyc3RhbmQg eW91IG1heSBub3Qgd2FudCB0byBleHBvc2UgdGhlCmludGVybmFscyBvZiB4bG54X2RybSB0byB0 aGUgeGxueF9jcnRjIGltcGxlbWVudGF0aW9ucywgYnV0IEkgZG9uJ3Qgc2VlCmEgcmVhc29uIG5v dCB0byBleHBvc2UgaXQgdG8geGxueF9jcnRjLmMuCgo+ICsKPiArCW11dGV4X2xvY2soJmhlbHBl ci0+bG9jayk7Cj4gKwlsaXN0X2FkZF90YWlsKCZjcnRjLT5saXN0LCAmaGVscGVyLT54bG54X2Ny dGNzKTsKPiArCW11dGV4X3VubG9jaygmaGVscGVyLT5sb2NrKTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MX0dQTCh4bG54X2NydGNfcmVnaXN0ZXIpOwo+ICsKPiArdm9pZCB4bG54X2NydGNfdW5yZWdp c3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKQo+ICt7 Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyID0geGxueF9nZXRfY3J0Y19oZWxw ZXIoZHJtKTsKPiArCj4gKwltdXRleF9sb2NrKCZoZWxwZXItPmxvY2spOwo+ICsJbGlzdF9kZWwo JmNydGMtPmxpc3QpOwo+ICsJbXV0ZXhfdW5sb2NrKCZoZWxwZXItPmxvY2spOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKHhsbnhfY3J0Y191bnJlZ2lzdGVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54 X2NydGMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTZiNWY1OQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaAo+ IEBAIC0wLDAgKzEsODMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogWGlsaW54IERSTSBjcnRjIGhlYWRlcgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0 IChDKSAyMDE3IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBX b28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfWExO WF9DUlRDX0hfCj4gKyNkZWZpbmUgX1hMTlhfQ1JUQ19IXwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgv bXV0ZXguaD4KPiArCj4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ICtzdHJ1Y3QgeGxueF9jcnRjOwo+ ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB4bG54X2NydGNfb3BzIC0gWGlsaW54IENSVEMgb3BlcmF0 aW9ucwo+ICsgKiBAZ2V0X2FsaWduOiBHZXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBD UlRDIGRldmljZQo+ICsgKiBAZ2V0X2RtYV9tYXNrOiBHZXQgdGhlIGRtYSBtYXNrIG9mIENSVEMg ZGV2aWNlCj4gKyAqIEBnZXRfbWF4X3dpZHRoOiBHZXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHdp ZHRoCj4gKyAqIEBnZXRfbWF4X2hlaWdodDogR2V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBoZWln aHQKPiArICogQGdldF9mb3JtYXQ6IEdldCB0aGUgY3VycmVudCBmb3JtYXQgb2YgQ1JUQyBkZXZp Y2UKCiJjdXJyZW50IGZvcm1hdCIgc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGUgZm9ybWF0IGNhbiBj aGFuZ2UsIHdoaWxlIEkKZG9uJ3QgdGhpbmsgeW91IHN1cHBvcnQgdGhpcy4gSXMgdGhhdCBjb3Jy ZWN0ID8gSWYgc28gSSB3b3VsZCBtYWtlIHRoYXQKY2xlYXIgaW4gdGhlIGZpZWxkIGRlc2NyaXB0 aW9uLgoKPiArICovCj4gK3N0cnVjdCB4bG54X2NydGNfb3BzIHsKPiArCXVuc2lnbmVkIGludCAo KmdldF9hbGlnbikoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwl1NjQgKCpnZXRfZG1hX21h c2spKHN0cnVjdCB4bG54X2NydGMgKmNydGMpOwo+ICsJaW50ICgqZ2V0X21heF93aWR0aCkoc3Ry dWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwlpbnQgKCpnZXRfbWF4X2hlaWdodCkoc3RydWN0IHhs bnhfY3J0YyAqY3J0Yyk7Cj4gKwl1MzIgKCpnZXRfZm9ybWF0KShzdHJ1Y3QgeGxueF9jcnRjICpj cnRjKTsKCkNvdWxkbid0IHdlIHJlcGxhY2UgYWxsIHRob3NlIG9wZXJhdGlvbnMgd2l0aCBjb3Jy ZXNwb25kaW5nIGludGVnZXIKZmllbGRzIGluIHN0cnVjdCB4bG54X2NydGMgPyBUaGV5IHNlZW0g dG8gYWxsIGJlIGZpeGVkLgoKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgeGxueF9jcnRj IC0gWGlsaW54IENSVEMgZGV2aWNlCj4gKyAqIEBjcnRjOiBEUk0gQ1JUQyBkZXZpY2UKPiArICog QGxpc3Q6IGxpc3Qgbm9kZSBmb3IgWGlsaW54IENSVEMgZGV2aWNlIGxpc3QKPiArICogQG9wczog WGlsaW54IENSVEMgb3BzCj4gKyAqLwo+ICtzdHJ1Y3QgeGxueF9jcnRjIHsKPiArCXN0cnVjdCBk cm1fY3J0YyBjcnRjOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJY29uc3Qgc3RydWN0 IHhsbnhfY3J0Y19vcHMgKm9wczsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhs bnhfY3J0YyAqdG9feGxueF9jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJcmV0 dXJuIGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3QgeGxueF9jcnRjLCBjcnRjKTsKPiArfQo+ICsK PiArLyoKPiArICogSGVscGVyIGZ1bmN0aW9uczogdXNlZCB3aXRoaW4gWGxueCBEUk0KPiArICov Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgLSBYaWxpbnggQ1JUQyBo ZWxwZXIKPiArICogQHhsbnhfY3J0Y3M6IGxpc3Qgb2YgWGlsaW54IENSVEMgZGV2aWNlcwo+ICsg KiBAbG9jazogbG9jayB0byBwcm90ZWN0IEB4bG54X2NydGNzCj4gKyAqLwo+ICtzdHJ1Y3QgeGxu eF9jcnRjX2hlbHBlciB7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHhsbnhfY3J0Y3M7Cj4gKwlzdHJ1 Y3QgbXV0ZXggbG9jazsgLyogbG9jayBmb3IgQHhsbnhfY3J0Y3MgKi8KPiArfTsKCklmIHlvdSBh Y2Nlc3MgdGhlIGludGVybmFscyBvZiB4bG54X2RybSBpbiB4bG54X2NydGMuYyBhcyBhZHZpc2Vk IGFib3ZlLAp5b3UgY2FuIGlubGluZSB0aGUgdHdvIGZpZWxkcyBpbiBzdHJ1Y3QgeGxueF9kcm0g YW5kIHJlbW92ZSB0aGlzCnN0cnVjdHVyZS4gSSB0aGluayBpdCB3aWxsIHNpbXBsaWZ5IHRoZSBj b2RlLgoKPiArdW5zaWduZWQgaW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4 bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICt1NjQgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1h X21hc2soc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNf aGVscGVyX2dldF9tYXhfd2lkdGgoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4g K2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVs cGVyICpoZWxwZXIpOwo+ICt1MzIgeGxueF9jcnRjX2hlbHBlcl9nZXRfZm9ybWF0KHN0cnVjdCB4 bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICsKPiArdm9pZCB4bG54X2NydGNfaGVscGVyX2lu aXQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK3ZvaWQgeGxueF9jcnRjX2hl bHBlcl9maW5pKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICsKPiArLyoKPiAr ICogQ1JUQyByZWdpc3RyYXRpb246IHVzZWQgYnkgb3RoZXIgc3ViLWRyaXZlciBtb2R1bGVzCj4g KyAqLwo+ICsKPiArdm9pZCB4bG54X2NydGNfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQgeGxueF9jcnRjX3VucmVnaXN0ZXIo c3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwo+ICsj ZW5kaWYgLyogX1hMTlhfQ1JUQ19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v eGxueC94bG54X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWFkMmRjMgo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5jCj4gQEAgLTAsMCArMSw0MzMg QEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogWGls aW54IERSTSBLTVMgRHJpdmVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4 IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3 b25AeGlsaW54LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9u ZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Rt YS1idWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv b2ZfZ3JhcGguaD4KPiArCj4gKyNpbmNsdWRlICJ4bG54X2NydGMuaCIKPiArI2luY2x1ZGUgInhs bnhfZmIuaCIKPiArI2luY2x1ZGUgInhsbnhfZ2VtLmgiCj4gKwo+ICsjZGVmaW5lIERSSVZFUl9O QU1FCSJ4bG54Igo+ICsjZGVmaW5lIERSSVZFUl9ERVNDCSJYaWxpbnggRFJNIEtNUyBEcml2ZXIi Cj4gKyNkZWZpbmUgRFJJVkVSX0RBVEUJIjIwMTMwNTA5Igo+ICsjZGVmaW5lIERSSVZFUl9NQUpP UgkxCj4gKyNkZWZpbmUgRFJJVkVSX01JTk9SCTAKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgeGxu eF9kcm0gLSBYaWxpbnggRFJNIHByaXZhdGUgZGF0YQo+ICsgKiBAZHJtOiBEUk0gZGV2aWNlCj4g KyAqIEBjcnRjX2hlbHBlcjogSGVscGVyIHRvIGFjY2VzcyBYaWxpbnggQ1JUQ3MKPiArICogQGZi OiBEUk0gZmIgaGVscGVyCj4gKyAqIEBtYXN0ZXI6IGxvZ2ljYWwgbWFzdGVyIGRldmljZSBmb3Ig cGlwZWxpbmUKPiArICogQHN1c3BlbmRfc3RhdGU6IGF0b21pYyBzdGF0ZSBmb3Igc3VzcGVuZCAv IHJlc3VtZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfZHJtIHsKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm07Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciBjcnRjX2hlbHBlcjsKPiArCXN0cnVj dCBkcm1fZmJfaGVscGVyICpmYjsKPiArCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKPiArCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAq IHhsbnhfZ2V0X2NydGNfaGVscGVyIC0gUmV0dXJuIHRoZSBjcnRjIGhlbHBlciBpbnN0YW5jZQo+ ICsgKiBAZHJtOiBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybjogdGhlIGNydGMgaGVscGVy IGluc3RhbmNlCj4gKyAqLwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9nZXRfY3J0 Y19oZWxwZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IHhsbnhfZHJt ICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJcmV0dXJuICZ4bG54X2RybS0+ Y3J0Y19oZWxwZXI7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2dldF9hbGlnbiAtIFJldHVy biB0aGUgYWxpZ24gcmVxdWlyZW1lbnQgdGhyb3VnaCBDUlRDIGhlbHBlcgo+ICsgKiBAZHJtOiBE Uk0gZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybjogdGhlIGFsaWdubWVudCByZXF1aXJlbWVudAo+ ICsgKi8KPiArdW5zaWduZWQgaW50IHhsbnhfZ2V0X2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pCgpUaGlzIGlzIGEgdmVyeSBnZW5lcmljIG5hbWUsIHdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8g cmVuYW1lIHRoZSBmdW5jdGlvbgp0byB4bG54X2RybV9nZXRfYWxpZ24oKSB0byBhdm9pZCBuYW1l IGNvbGxpc2lvbnMgPyBJdCBjb3VsZCBtYWtlIHNlbnNlCnRvIHJlbmFtZSBvdGhlciBmdW5jdGlv bnMgYWNjb3JkaW5nbHkgdG8gc3RhbmRhcmRpemUgb24gdGhlIHhsbnhfZHJtXwpwcmVmaXggKGF0 IGxlYXN0IHdoZW4gdGhlcmUncyBubyBvdGhlciBwcmVmaXggc3VjaCBhcyB4bG54X2NydGNfKS4K Cj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ ICsKPiArCXJldHVybiB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbigmeGxueF9kcm0tPmNydGNf aGVscGVyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9vdXRwdXRfcG9sbF9jaGFuZ2Vk KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9k cm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCWlmICh4bG54X2RybS0+ZmIpCj4gKwkJZHJt X2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KHhsbnhfZHJtLT5mYik7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHhsbnhfbW9kZV9jb25maWdfZnVu Y3MgPSB7Cj4gKwkuZmJfY3JlYXRlCQk9IHhsbnhfZmJfY3JlYXRlLAo+ICsJLm91dHB1dF9wb2xs X2NoYW5nZWQJPSB4bG54X291dHB1dF9wb2xsX2NoYW5nZWQsCj4gKwkuYXRvbWljX2NoZWNrCQk9 IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ICsJLmF0b21pY19jb21taXQJCT0gZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9tb2RlX2NvbmZp Z19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAq eGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KmNydGNfaGVscGVyID0gJnhsbnhfZHJtLT5jcnRjX2hlbHBlcjsKPiArCj4gKwlkcm0tPm1vZGVf Y29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAw Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPQo+ICsJCXhsbnhfY3J0Y19oZWxwZXJf Z2V0X21heF93aWR0aChjcnRjX2hlbHBlcik7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWln aHQgPQo+ICsJCXhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF9oZWlnaHQoY3J0Y19oZWxwZXIpOwoK VGhpcyByZXN0cmljdHMgdGhlIGZyYW1lYnVmZmVyIHNpemUgdG8gdGhlIG1heGltdW0gQ1JUQyBz aXplLCB3aGljaApwcmV2ZW50cyBjcmVhdGluZyBhIHNpbmdsZSBmcmFtZWJ1ZmZlciB0aGF0IHNw YW5zIG11bHRpcGxlIENSVENzLiBJc24ndAp0aGF0IGEgcHJvYmxlbSA/Cgo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB4bG54X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4g KwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlp ZiAoeGxueF9kcm0tPmZiKQo+ICsJCWRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlX3Vu bG9ja2VkKHhsbnhfZHJtLT5mYik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIHhsbnhfZm9wcyA9IHsKPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiAr CS5vcGVuCQk9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSwKPiArCS51bmxv Y2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKPiArCS5tbWFwCQk9IGRybV9nZW1fY21hX21tYXAsCj4g KwkucG9sbAkJPSBkcm1fcG9sbCwKPiArCS5yZWFkCQk9IGRybV9yZWFkLAo+ICsjaWZkZWYgQ09O RklHX0NPTVBBVAo+ICsJLmNvbXBhdF9pb2N0bAk9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRp Zgo+ICsJLmxsc2VlawkJPSBub29wX2xsc2VlaywKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2RyaXZlciB4bG54X2RybV9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1cmVzCQk9IERS SVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8Cj4gKwkJCQkJICBEUklWRVJfQVRPTUlDIHwgRFJJ VkVSX1BSSU1FLAo+ICsJLmxhc3RjbG9zZQkJCT0geGxueF9sYXN0Y2xvc2UsCj4gKwo+ICsJLnBy aW1lX2hhbmRsZV90b19mZAkJPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKPiArCS5wcmlt ZV9mZF90b19oYW5kbGUJCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gKwkuZ2VtX3By aW1lX2V4cG9ydAkJPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiArCS5nZW1fcHJpbWVfaW1wb3J0 CQk9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJCT0g ZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2df dGFibGUJPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1l X3ZtYXAJCQk9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2VtX3ByaW1lX3Z1bm1hcAkJ PSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4gKwkuZ2VtX3ByaW1lX21tYXAJCQk9IGRybV9n ZW1fY21hX3ByaW1lX21tYXAsCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0CQk9IGRybV9nZW1fY21hX2Zy ZWVfb2JqZWN0LAo+ICsJLmdlbV92bV9vcHMJCQk9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCj4gKwku ZHVtYl9jcmVhdGUJCQk9IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKPiArCS5kdW1iX2Rlc3Ry b3kJCQk9IGRybV9nZW1fZHVtYl9kZXN0cm95LAo+ICsKPiArCS5mb3BzCQkJCT0gJnhsbnhfZm9w cywKPiArCj4gKwkubmFtZQkJCQk9IERSSVZFUl9OQU1FLAo+ICsJLmRlc2MJCQkJPSBEUklWRVJf REVTQywKPiArCS5kYXRlCQkJCT0gRFJJVkVSX0RBVEUsCj4gKwkubWFqb3IJCQkJPSBEUklWRVJf TUFKT1IsCj4gKwkubWlub3IJCQkJPSBEUklWRVJfTUlOT1IsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHhsbnhfYmluZChzdHJ1Y3QgZGV2aWNlICptYXN0ZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54 X2RybSAqeGxueF9kcm07Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJY29uc3Qgc3Ry dWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbzsKPiArCWludCByZXQ7Cj4gKwl1MzIgZm9ybWF0Owo+ ICsKPiArCWRybSA9IGRybV9kZXZfYWxsb2MoJnhsbnhfZHJtX2RyaXZlciwgbWFzdGVyLT5wYXJl bnQpOwo+ICsJaWYgKElTX0VSUihkcm0pKQo+ICsJCXJldHVybiBQVFJfRVJSKGRybSk7Cj4gKwo+ ICsJeGxueF9kcm0gPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqeGxueF9kcm0pLCBH RlBfS0VSTkVMKTsKPiArCWlmICgheGxueF9kcm0pIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJ CWdvdG8gZXJyX2RybTsKPiArCX0KPiArCj4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ ICsJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZ4bG54X21vZGVfY29uZmlnX2Z1bmNzOwo+ICsK PiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIDEpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRl dl9lcnIobWFzdGVyLT5wYXJlbnQsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIpOwo+ ICsJCWdvdG8gZXJyX3hsbnhfZHJtOwo+ICsJfQo+ICsKPiArCWRybS0+aXJxX2VuYWJsZWQgPSAx Owo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IHhsbnhfZHJtOwo+ICsJeGxueF9kcm0tPmRybSA9IGRy bTsKPiArCXhsbnhfZHJtLT5tYXN0ZXIgPSBtYXN0ZXI7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xs X2luaXQoZHJtKTsKPiArCWRldl9zZXRfZHJ2ZGF0YShtYXN0ZXIsIHhsbnhfZHJtKTsKPiArCj4g Kwl4bG54X2NydGNfaGVscGVyX2luaXQoJnhsbnhfZHJtLT5jcnRjX2hlbHBlcik7Cj4gKwo+ICsJ cmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKG1hc3RlciwgZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJ Z290byBlcnJfY3J0YzsKPiArCj4gKwl4bG54X21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiArCWRy bV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ICsJZG1hX3NldF9tYXNrKGRybS0+ZGV2LAo+ICsJ CSAgICAgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1hX21hc2soJnhsbnhfZHJtLT5jcnRjX2hlbHBl cikpOwo+ICsKPiArCWZvcm1hdCA9IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Zvcm1hdCgmeGxueF9k cm0tPmNydGNfaGVscGVyKTsKPiArCWluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm9ybWF0KTsKPiAr CWlmIChpbmZvICYmIGluZm8tPmRlcHRoICYmIGluZm8tPmNwcFswXSkgewo+ICsJCXVuc2lnbmVk IGludCBhbGlnbjsKPiArCj4gKwkJYWxpZ24gPSB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbigm eGxueF9kcm0tPmNydGNfaGVscGVyKTsKPiArCQl4bG54X2RybS0+ZmIgPSB4bG54X2ZiX2luaXQo ZHJtLCBpbmZvLT5jcHBbMF0gKiA4LCAxLCBhbGlnbik7Cj4gKwkJaWYgKElTX0VSUih4bG54X2Ry bS0+ZmIpKSB7Cj4gKwkJCWRldl9lcnIobWFzdGVyLT5wYXJlbnQsCj4gKwkJCQkiZmFpbGVkIHRv IGluaXRpYWxpemUgZHJtIGZiXG4iKTsKPiArCQkJeGxueF9kcm0tPmZiID0gTlVMTDsKPiArCQl9 Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIGZiZGV2IGVtdWxhdGlvbiBpcyBvcHRpb25hbCAqLwo+ICsJ CWRldl9pbmZvKG1hc3Rlci0+cGFyZW50LCAiZmJkZXYgaXMgbm90IGluaXRpYWxpemVkXG4iKTsK PiArCX0KPiArCj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gKwlpZiAocmV0 IDwgMCkKPiArCQlnb3RvIGVycl9mYjsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9mYjoK PiArCWlmICh4bG54X2RybS0+ZmIpCj4gKwkJeGxueF9mYl9maW5pKHhsbnhfZHJtLT5mYik7Cj4g Kwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiArZXJyX2NydGM6Cj4gKwl4 bG54X2NydGNfaGVscGVyX2ZpbmkoJnhsbnhfZHJtLT5jcnRjX2hlbHBlcik7Cj4gK2Vycl94bG54 X2RybToKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gK2Vycl9kcm06Cj4gKwlk cm1fZGV2X3VucmVmKGRybSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB4bG54X3VuYmluZChzdHJ1Y3QgZGV2aWNlICptYXN0ZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54 X2RybSAqeGxueF9kcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSB4bG54X2RybS0+ZHJtOwo+ICsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihk cm0pOwo+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiArCQl4bG54X2ZiX2ZpbmkoeGxueF9kcm0tPmZi KTsKPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKG1hc3RlciwgZHJtKTsKPiArCXhsbnhfY3J0Y19o ZWxwZXJfZmluaSgmeGxueF9kcm0tPmNydGNfaGVscGVyKTsKPiArCWRybV9rbXNfaGVscGVyX3Bv bGxfZmluaShkcm0pOwo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCWRybV9k ZXZfdW5yZWYoZHJtKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRf bWFzdGVyX29wcyB4bG54X21hc3Rlcl9vcHMgPSB7Cj4gKwkuYmluZAk9IHhsbnhfYmluZCwKPiAr CS51bmJpbmQJPSB4bG54X3VuYmluZCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgeGxueF9jb21w YXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJcmV0dXJuIGRl di0+b2Zfbm9kZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhsbnhfcHJvYmUoc3Ry dWN0IGRldmljZSAqbWFzdGVyX2RldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbWFz dGVyX2Rldi0+cGFyZW50Owo+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxM Owo+ICsKPiArCWlmICghZGV2LT5vZl9ub2RlKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWNvbXBvbmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCB4bG54X2NvbXBhcmVfb2Ys IGRldi0+b2Zfbm9kZSk7Cj4gKwo+ICsJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhf bWF0Y2gobWFzdGVyX2RldiwgJnhsbnhfbWFzdGVyX29wcywKPiArCQkJCQkgICAgICAgbWF0Y2gp OwoKSSdtIG5vdCBzdXJlIHRvIHVuZGVyc3RhbmQgd2hhdCB5b3UncmUgZG9pbmcgaGVyZS4gWW91 J3JlIHJlZ2lzdGVyaW5nIGEKY29tcG9uZW50IG1hc3RlciBmb3IgdGhlIHhsbngtZHJtIGRldmlj ZSB3aXRoIGEgc2luZ2xlIGNvbXBvbmVudCBtYXRjaCwgZm9yIHRoZQpwYXJlbnQgb2YgdGhlIHhs bngtZHJtIGRldmljZS4gVGhlIHhsbngtZHJtIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggYSBj YWxsIHRvCnhsbnhfZHJtX3BpcGVsaW5lX2luaXQoKSwgd2hpY2ggaXMgdGhpcyBzZXJpZXMgaXMg Y2FsbGVkIGZyb20KenlucW1wX2Rwc3ViX3Byb2JlKCkgb25seSwgYW5kIHlvdSByZWdpc3RlciB0 aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQgaW4gdGhlCnNhbWUgZnVuY3Rpb24uIFRoaXMgc2Vl bXMgdmVyeSBjb252b2x1dGVkIHRvIG1lLCBjYW4ndCB0aGlzIGJlIGltcGxlbWVudGVkIGluIGEK bXVjaCBzaW1wbGVyIHdheSA/IEkgdGhpbmsgd2UgY291bGQganVzdCBpbml0aWFsaXplIHRoZSB6 eW5xbXBfZGlzcCBhbmQKenlucW1wX2RwIHN5bmNocm9ub3VzbHkgZnJvbSB0aGUgenlucW1wX2Rw c3ViIHByb2JlIGZ1bmN0aW9uIHdpdGhvdXQgbmVlZGluZwp0aGUgY29tcG9uZW50IGZyYW1ld29y ayBhdCBhbGwuIERvIHlvdSBlbnZpc2lvbiB0aGUgenlucW1wX2Rpc3AgYW5kIHp5bnFtcF9kcApw YXJ0cyB0byBiZSByZXVzZWQgaW4gb3RoZXIgZGlzcGxheSBwaXBlbGluZXMsIG9yIHdpbGwgdGhl eSBhbHdheXMgYmUgY29tYmluZWQKdG9nZXRoZXIgaW4genlucW1wX2Rwc3ViID8KCkkgd291bGQg YWxzbyBzYXkgdGhhdCBpZiB0aGUgY29tcG9uZW50IGlzIGEgcGFyZW50IG9mIHRoZSBjb21wb25l bnQgbWFzdGVyLAp5b3UncmUgbGlrZWx5IGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gQ29tcG9uZW50 IGFyZSBzdXBwb3NlZCB0byByZXByZXNlbnQgcGllY2VzCm9mIHRoZSB3aG9sZSBEUk0gZGV2aWNl LCBhbmQgYXMgc3VjaCBzaG91bGQgYmUgY2hpbGRyZW4gb2YgdGhlIG1hc3Rlciwgb3IKc29tZXRp bWVzIHBvc3NpYmx5IHVucmVsYXRlZCBkZXZpY2VzLgoKPiArfQo+ICsKPiArc3RhdGljIGludCB4 bG54X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9tYXN0ZXJf ZGVsKGRldiwgJnhsbnhfbWFzdGVyX29wcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgeGxueF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCWNvbXBv bmVudF9tYXN0ZXJfZGVsKGRldiwgJnhsbnhfbWFzdGVyX29wcyk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK PiArewo+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHhsbnhfZHJtLT5kcm07Cj4gKwo+ICsJZHJt X2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7Cj4gKwo+ICsJeGxueF9kcm0tPnN1c3BlbmRf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9zdXNwZW5kKGRybSk7Cj4gKwlpZiAoSVNfRVJSKHhs bnhfZHJtLT5zdXNwZW5kX3N0YXRlKSkgewo+ICsJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxl KGRybSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoeGxueF9kcm0tPnN1c3BlbmRfc3RhdGUpOwo+ICsJ fQoKWW91IGNhbiB1c2UgdGhlIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfc3VzcGVuZCgpIGFuZApk cm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZSgpIGZ1bmN0aW9ucywgcmVtb3ZpbmcgdGhlIG5l ZWQgdG8gdHJhY2sKc3VzcGVuZF9zdGF0ZSBtYW51YWxseSBpbiB4bG54X2RybS4KCj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9y ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhf ZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g eGxueF9kcm0tPmRybTsKPiArCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoZHJtLCB4bG54 X2RybS0+c3VzcGVuZF9zdGF0ZSk7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0p Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9w bV9vcHMgeGxueF9wbV9vcHMgPSB7Cj4gKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh4bG54X3Bt X3N1c3BlbmQsIHhsbnhfcG1fcmVzdW1lKQo+ICt9Owo+ICsKPiArc3RhdGljIGludCB4bG54X2Ry dl9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2 KQo+ICt7Cj4gKwlyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgZHJ2LT5uYW1lLCBzdHJs ZW4oZHJ2LT5uYW1lKSk7Cj4gK30KPiArCj4gK3N0cnVjdCBidXNfdHlwZSB4bG54X2RyaXZlcl9i dXNfdHlwZSA9IHsKPiArCS5uYW1lICAgPSAieGxueC1kcm0tYnVzIiwKPiArCS5tYXRjaCAgPSAm eGxueF9kcnZfYnVzX21hdGNoLAo+ICt9OwoKV2h5IGRvIHlvdSBuZWVkIGEgY3VzdG9tIGJ1cyA/ IENhbid0IHlvdSBqdXN0IHVzZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGgKYSBwbGF0Zm9ybV9kcml2 ZXIgYW5kIHJlbW92ZSBhbGwgdGhlIGNvZGUgYmVsb3cgPyBJcyB0aGVyZSBhIHJlYXNvbiBub3QK dG8gZG8gc28gPwoKPiArc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHhsbnhfZHJpdmVyID0g ewo+ICsJLnByb2JlCQk9IHhsbnhfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IHhsbnhfcmVtb3ZlLAo+ ICsJLnNodXRkb3duCT0geGxueF9zaHV0ZG93biwKPiArCS5uYW1lCQk9ICJ4bG54LWRybSIsCj4g KwkucG0JCT0gJnhsbnhfcG1fb3BzLAo+ICsJLmJ1cwkJPSAmeGxueF9kcml2ZXJfYnVzX3R5cGUs Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gK307Cj4gKwo+ICsvKiBiaXRtYXAgZm9yIG1h c3RlciBpZCAqLwo+ICtzdGF0aWMgdTMyIHhsbnhfbWFzdGVyX2lkcyA9IEdFTk1BU0soMzEsIDAp Owo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9tYXN0ZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gK3sKPiArCWtmcmVlKGRldik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2RybV9w aXBlbGluZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgZHJtIHBpcGVsaW5lIGZvciB0aGUgZGV2aWNl Cj4gKyAqIEBkZXY6IFRoZSBkZXZpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgZHJtIHBpcGVsaW5lIGRl dmljZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBkcm0gcGlwZWxp bmUgZGV2aWNlLCBzdHJ1Y3QgZHJtX2RldmljZSwKPiArICogb24gQGRldiBieSBjcmVhdGluZyBh IGxvZ2ljYWwgbWFzdGVyIGRldmljZS4gVGhlIGxvZ2ljYWwgZGV2aWNlIGFjdHMKPiArICogYXMg YSBtYXN0ZXIgZGV2aWNlIHRvIGJpbmQgc2xhdmUgZGV2aWNlcyBhbmQgcmVwcmVzZW50cyB0aGUg ZW50aXJlCj4gKyAqIHBpcGVsaW5lLgo+ICsgKiBUaGUgbG9naWNhbCBtYXN0ZXIgdXNlcyB0aGUg cG9ydCBiaW5kaW5ncyBvZiB0aGUgY2FsbGluZyBkZXZpY2UgdG8KPiArICogZmlndXJlIG91dCB0 aGUgcGlwZWxpbmUgdG9wb2xvZ3kuCj4gKyAqCj4gKyAqIFJldHVybjogdGhlIGxvZ2ljYWwgbWFz dGVyIGRldmljZSBpZiB0aGUgZHJtIGRldmljZSBpcyBpbml0aWFsaXplZAo+ICsgKiBvbiBAZGV2 LiBFcnJvciBjb2RlIG90aGVyd2lzZS4KPiArICovCj4gK3N0cnVjdCBkZXZpY2UgKnhsbnhfZHJt X3BpcGVsaW5lX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICptYXN0ZXI7Cj4gKwlpbnQgaWQsIHJldDsKPiArCj4gKwlpZCA9IGZmcyh4bG54X21hc3Rlcl9p ZHMpOwo+ICsJaWYgKCFpZCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiArCj4gKwlt YXN0ZXIgPSBremFsbG9jKHNpemVvZigqbWFzdGVyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW1h c3RlcikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCWRldmljZV9pbml0aWFsaXpl KG1hc3Rlcik7Cj4gKwltYXN0ZXItPnBhcmVudCA9IGRldjsKPiArCW1hc3Rlci0+YnVzID0gJnhs bnhfZHJpdmVyX2J1c190eXBlOwo+ICsJbWFzdGVyLT5yZWxlYXNlID0geGxueF9tYXN0ZXJfcmVs ZWFzZTsKPiArCj4gKwlyZXQgPSBkZXZfc2V0X25hbWUobWFzdGVyLCAieGxueC1kcm0uJWQiLCBp ZCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2tmcmVlOwo+ICsKPiArCXJldCA9IGRldmlj ZV9hZGQobWFzdGVyKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfa2ZyZWU7Cj4gKwo+ICsJ eGxueF9tYXN0ZXJfaWRzICY9IH5CSVQobWFzdGVyLT5pZCk7Cj4gKwlyZXR1cm4gbWFzdGVyOwo+ ICsKPiArZXJyX2tmcmVlOgo+ICsJa2ZyZWUobWFzdGVyKTsKPiArCXJldHVybiBFUlJfUFRSKHJl dCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9kcm1fcGlwZWxpbmVfaW5pdCk7Cj4g Kwo+ICsvKioKPiArICogeGxueF9kcm1fcGlwZWxpbmVfZXhpdCAtIFJlbGVhc2UgdGhlIGRybSBw aXBlbGluZSBmb3IgdGhlIGRldmljZQo+ICsgKiBAbWFzdGVyOiBUaGUgbWFzdGVyIHBpcGVsaW5l IGRldmljZSB0byByZWxlYXNlCj4gKyAqCj4gKyAqIFJlbGVhc2UgdGhlIGxvZ2ljYWwgcGlwZWxp bmUgZGV2aWNlIHJldHVybmVkIGJ5IHhsbnhfZHJtX3BpcGVsaW5lX2luaXQoKS4KPiArICovCj4g K3ZvaWQgeGxueF9kcm1fcGlwZWxpbmVfZXhpdChzdHJ1Y3QgZGV2aWNlICptYXN0ZXIpCj4gK3sK PiArCXhsbnhfbWFzdGVyX2lkcyB8PSBCSVQobWFzdGVyLT5pZCk7Cj4gKwlkZXZpY2VfdW5yZWdp c3RlcihtYXN0ZXIpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfZHJtX3BpcGVsaW5l X2V4aXQpOwo+ICsKPiArc3RhdGljIGludCBfX2luaXQgeGxueF9kcm1fZHJ2X2luaXQodm9pZCkK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBidXNfcmVnaXN0ZXIoJnhsbnhfZHJpdmVy X2J1c190eXBlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBk cml2ZXJfcmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsKPiArCWlmIChyZXQpIHsKPiArCQlidXNfdW5y ZWdpc3RlcigmeGxueF9kcml2ZXJfYnVzX3R5cGUpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54X2RybV9k cnZfZXhpdCh2b2lkKQo+ICt7Cj4gKwlidXNfdW5yZWdpc3RlcigmeGxueF9kcml2ZXJfYnVzX3R5 cGUpOwo+ICsJZHJpdmVyX3VucmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsKPiArfQo+ICsKPiArbW9k dWxlX2luaXQoeGxueF9kcm1fZHJ2X2luaXQpOwo+ICttb2R1bGVfZXhpdCh4bG54X2RybV9kcnZf ZXhpdCk7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKPiArTU9EVUxFX0RF U0NSSVBUSU9OKCJYaWxpbnggRFJNIEtNUyBEcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uYjM4ZmYyYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2Rydi5oCj4gQEAgLTAsMCArMSwyMyBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIEtNUyBIZWFkZXIg Zm9yIFhpbGlueAo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCBYaWxpbngs IEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bmtAeGlsaW54LmNv bT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0RSVl9IXwo+ICsjZGVmaW5lIF9YTE5YX0RS Vl9IXwo+ICsKPiArc3RydWN0IGRldmljZTsKPiArc3RydWN0IGRybV9kZXZpY2U7Cj4gK3N0cnVj dCB4bG54X2NydGNfaGVscGVyOwo+ICsKPiArc3RydWN0IGRldmljZSAqeGxueF9kcm1fcGlwZWxp bmVfaW5pdChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwo+ICt2b2lkIHhsbnhfZHJtX3BpcGVsaW5l X2V4aXQoc3RydWN0IGRldmljZSAqcGlwZWxpbmUpOwo+ICsKPiArdW5zaWduZWQgaW50IHhsbnhf Z2V0X2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hl bHBlciAqeGxueF9nZXRfY3J0Y19oZWxwZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gKwo+ ICsjZW5kaWYgLyogX1hMTlhfRFJWX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS94bG54L3hsbnhfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOGU4YWIxNAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiBAQCAtMCwwICsxLDI0OSBA QAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxp bnggRFJNIEtNUyBGcmFtZWJ1ZmZlciBoZWxwZXIKPiArICoKPiArICogIENvcHlyaWdodCAoQykg MjAxNSAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3 b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBCYXNlZCBvbiBkcm1fZmJfY21h X2hlbHBlci5jCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQW5hbG9nIERldmljZSBJ bmMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVs cGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KPiAr Cj4gKyNpbmNsdWRlICJ4bG54X2Rydi5oIgo+ICsjaW5jbHVkZSAieGxueF9mYi5oIgo+ICsKPiAr I2RlZmluZSBYTE5YX01BWF9QTEFORVMJNAoKVGhpcyBpc24ndCB1c2VkLgoKPiArc3RydWN0IHhs bnhfZmJkZXYgewo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgZmJfaGVscGVyOwo+ICsJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwl1bnNpZ25lZCBpbnQgYWxpZ247Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4bG54X2ZiZGV2ICp0b19mYmRldihzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGZiX2hlbHBl ciwgc3RydWN0IHhsbnhfZmJkZXYsIGZiX2hlbHBlcik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIHhsbnhfZmJfZnVuY3MgPSB7Cj4gKwkuZGVz dHJveQk9IGRybV9nZW1fZmJfZGVzdHJveSwKPiArCS5jcmVhdGVfaGFuZGxlCT0gZHJtX2dlbV9m Yl9jcmVhdGVfaGFuZGxlLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBmYl9vcHMgeGxueF9m YmRldl9vcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkuZmJfZmlsbHJlY3QJ PSBzeXNfZmlsbHJlY3QsCj4gKwkuZmJfY29weWFyZWEJPSBzeXNfY29weWFyZWEsCj4gKwkuZmJf aW1hZ2VibGl0CT0gc3lzX2ltYWdlYmxpdCwKPiArCURSTV9GQl9IRUxQRVJfREVGQVVMVF9PUFMs Cj4gK307Cj4gKwo+ICsvKioKPiArICogeGxueF9mYmRldl9jcmVhdGUgLSBDcmVhdGUgdGhlIGZi ZGV2IHdpdGggYSBmcmFtZWJ1ZmZlcgo+ICsgKiBAZmJfaGVscGVyOiBmYiBoZWxwZXIgc3RydWN0 dXJlCj4gKyAqIEBzaXplOiBmcmFtZWJ1ZmZlciBzaXplIGluZm8KPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2NyZWF0ZSgpLgoKVGhlIGZiZGV2IGNv bXBhdGliaWxpdHkgbGF5ZXIgaGFzIGJlZW4gaW1wcm92ZWQgaW4gRFJNLCBpcyB0aGVyZSBhIHdh eQp5b3UgY291bGQgdXNlIGRybV9mYmRldl9nZW5lcmljX3NldHVwKCkgaW5zdGVhZCBvZiByZWlt cGxlbWVudGluZyBmYmRldgpjcmVhdGUgeW91cnNlbGYgPwoKPiArICogUmV0dXJuOiAwIGlmIHN1 Y2Nlc3NmdWwsIG9yIHRoZSBlcnJvciBjb2RlLgo+ICsgKi8KPiArc3RhdGljIGludCB4bG54X2Zi ZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICsJCQkgICAgIHN0 cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZSkKPiArewo+ICsJc3RydWN0IHhs bnhfZmJkZXYgKmZiZGV2ID0gdG9fZmJkZXYoZmJfaGVscGVyKTsKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBmYl9oZWxwZXItPmRldjsKPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg Km9iajsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJdW5zaWduZWQgaW50IGJ5 dGVzX3Blcl9waXhlbDsKPiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ICsJc3RydWN0IGZiX2lu Zm8gKmZiaTsKPiArCXNpemVfdCBieXRlczsKPiArCWludCByZXQ7Cj4gKwo+ICsJZGV2X2RiZyhk cm0tPmRldiwgInN1cmZhY2Ugd2lkdGgoJWQpLCBoZWlnaHQoJWQpIGFuZCBicHAoJWQpXG4iLAo+ ICsJCXNpemUtPnN1cmZhY2Vfd2lkdGgsIHNpemUtPnN1cmZhY2VfaGVpZ2h0LCBzaXplLT5zdXJm YWNlX2JwcCk7Cj4gKwo+ICsJYnl0ZXNfcGVyX3BpeGVsID0gRElWX1JPVU5EX1VQKHNpemUtPnN1 cmZhY2VfYnBwLCA4KTsKPiArCWJ5dGVzID0gQUxJR04oc2l6ZS0+c3VyZmFjZV93aWR0aCAqIGJ5 dGVzX3Blcl9waXhlbCwgZmJkZXYtPmFsaWduKTsKPiArCWJ5dGVzICo9IHNpemUtPnN1cmZhY2Vf aGVpZ2h0Owo+ICsKPiArCW9iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShkcm0sIGJ5dGVzKTsKPiAr CWlmIChJU19FUlIob2JqKSkKPiArCQlyZXR1cm4gUFRSX0VSUihvYmopOwo+ICsKPiArCWZiaSA9 IGZyYW1lYnVmZmVyX2FsbG9jKDAsIGRybS0+ZGV2KTsKPiArCWlmICghZmJpKSB7Cj4gKwkJZGV2 X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlciBpbmZvLlxuIik7 Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9kcm1fZ2VtX2NtYV9mcmVlX29iamVj dDsKPiArCX0KPiArCj4gKwlmYmRldi0+ZmIgPSBkcm1fZ2VtX2ZiZGV2X2ZiX2NyZWF0ZShkcm0s IHNpemUsIGZiZGV2LT5hbGlnbiwgJm9iai0+YmFzZSwKPiArCQkJCQkgICAgJnhsbnhfZmJfZnVu Y3MpOwoKQXMgeGxueF9mYl9mdW5jcyBpcyBpZGVudGljYWwgdG8gZHJtX2dlbV9mYl9mdW5jcyB5 b3UgY2FuIHBhc3MgTlVMTCBhcwp0aGUgbGFzdCBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbi4K Cj4gKwlpZiAoSVNfRVJSKGZiZGV2LT5mYikpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFp bGVkIHRvIGFsbG9jYXRlIERSTSBmcmFtZWJ1ZmZlci5cbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIo ZmJkZXYtPmZiKTsKPiArCQlnb3RvIGVycl9mcmFtZWJ1ZmZlcl9yZWxlYXNlOwo+ICsJfQo+ICsK PiArCWZiID0gZmJkZXYtPmZiOwo+ICsJZmJfaGVscGVyLT5mYiA9IGZiOwo+ICsJZmJfaGVscGVy LT5mYmRldiA9IGZiaTsKPiArCWZiaS0+cGFyID0gZmJfaGVscGVyOwo+ICsJZmJpLT5mbGFncyA9 IEZCSU5GT19GTEFHX0RFRkFVTFQ7Cj4gKwlmYmktPmZib3BzID0gJnhsbnhfZmJkZXZfb3BzOwo+ ICsKPiArCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgMjU2LCAwKTsKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9yIG1h cC5cbiIpOwo+ICsJCWdvdG8gZXJyX2ZiX2Rlc3Ryb3k7Cj4gKwl9Cj4gKwo+ICsJZHJtX2ZiX2hl bHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRjaGVzWzBdLCBmYi0+Zm9ybWF0LT5kZXB0aCk7Cj4g Kwlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGZiaSwgZmJfaGVscGVyLCBzaXplLT5mYl93aWR0aCwg c2l6ZS0+ZmJfaGVpZ2h0KTsKPiArCj4gKwlvZmZzZXQgPSBmYmktPnZhci54b2Zmc2V0ICogYnl0 ZXNfcGVyX3BpeGVsOwo+ICsJb2Zmc2V0ICs9IGZiaS0+dmFyLnlvZmZzZXQgKiBmYi0+cGl0Y2hl c1swXTsKPiArCj4gKwlkcm0tPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSAocmVzb3VyY2Vfc2l6ZV90 KW9iai0+cGFkZHI7Cj4gKwlmYmktPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKShvYmot PnZhZGRyICsgb2Zmc2V0KTsKPiArCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9u Zykob2JqLT5wYWRkciArIG9mZnNldCk7Cj4gKwlmYmktPnNjcmVlbl9zaXplID0gYnl0ZXM7Cj4g KwlmYmktPmZpeC5zbWVtX2xlbiA9IGJ5dGVzOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJy X2ZiX2Rlc3Ryb3k6Cj4gKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rlcl9wcml2YXRlKGZiKTsK PiArCWRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gK2Vycl9mcmFtZWJ1ZmZlcl9yZWxlYXNlOgo+ ICsJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwo+ICtlcnJfZHJtX2dlbV9jbWFfZnJlZV9vYmpl Y3Q6Cj4gKwlkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCgmb2JqLT5iYXNlKTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB4 bG54X2ZiX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5mYl9wcm9iZSA9IHhsbnhfZmJkZXZfY3JlYXRl LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0 aWFsaXplcyB0aGUgWGlsaW54IGZyYW1lYnVmZmVyCgpVbmxlc3MgSSdtIG1pc3Rha2VuIHRoaXMg ZnVuY3Rpb24gZGVhbHMgd2l0aCBmYmRldiBjb21wYXRpYmlsaXR5LCBub3QKZHJtX2ZyYW11ZmZl ci4gSSB3b3VsZCBzL2ZiL2ZiZGV2LyBmb3IgY2xhcml0eS4gSWRlYWxseSB0aGUgZnVuY3Rpb24K c2hvdWxkIGJlIHJlbW92ZWQgY29tcGxldGVseSBhbmQgdGhlIGRyaXZlciBzaG91bGQgdXNlCmRy bV9mYmRldl9nZW5lcmljX3NldHVwKCkgaW5zdGVhZC4KCj4gKyAqIEBkcm06IERSTSBkZXZpY2UK PiArICogQHByZWZlcnJlZF9icHA6IHByZWZlcnJlZCBiaXRzIHBlciBwaXhlbCBmb3IgdGhlIGRl dmljZQo+ICsgKiBAbWF4X2Nvbm5fY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3RvcnMK PiArICogQGFsaWduOiBhbGlnbm1lbnQgdmFsdWUgZm9yIHBpdGNoCj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9pbml0KCkuCj4gKyAqCj4gKyAqIFJl dHVybjogYSBuZXdseSBhbGxvY2F0ZWQgZHJtX2ZiX2hlbHBlciBzdHJ1Y3Qgb3IgYSBFUlJfUFRS Lgo+ICsgKi8KPiArc3RydWN0IGRybV9mYl9oZWxwZXIgKgo+ICt4bG54X2ZiX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAsCj4gKwkgICAgIHVuc2lnbmVkIGlu dCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWduKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxu eF9mYmRldiAqZmJkZXY7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+ICsJ aW50IHJldDsKPiArCj4gKwlmYmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpmYmRldiksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFmYmRldikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g KwlmYmRldi0+YWxpZ24gPSBhbGlnbjsKPiArCWZiX2hlbHBlciA9ICZmYmRldi0+ZmJfaGVscGVy Owo+ICsJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRybSwgZmJfaGVscGVyLCAmeGxueF9mYl9oZWxw ZXJfZnVuY3MpOwo+ICsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdChkcm0sIGZiX2hlbHBl ciwgbWF4X2Nvbm5fY291bnQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRybS0+ ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiIGhlbHBlci5cbiIpOwo+ICsJCWdvdG8g ZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2Fs bF9jb25uZWN0b3JzKGZiX2hlbHBlcik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIo ZHJtLT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3RvcnMuXG4iKTsKPiArCQlnb3RvIGVycl9k cm1fZmJfaGVscGVyX2Zpbmk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0 aWFsX2NvbmZpZyhmYl9oZWxwZXIsIHByZWZlcnJlZF9icHApOwo+ICsJaWYgKHJldCA8IDApIHsK PiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBpbml0aWFsIGh3IGNvbmZpZ3Vy YXRpb24uXG4iKTsKPiArCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGZiX2hlbHBlcjsKPiArCj4gK2Vycl9kcm1fZmJfaGVscGVyX2Zpbmk6Cj4gKwlk cm1fZmJfaGVscGVyX2ZpbmkoZmJfaGVscGVyKTsKPiArZXJyX2ZyZWU6Cj4gKwlrZnJlZShmYmRl dik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeGxueF9m YmRldl9kZWZpb19maW5pIC0gRnJlZSB0aGUgZGVmaW8gZmIKPiArICogQGZiaTogZmJfaW5mbyBz dHJ1Y3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21h X2RlZmlvX2ZpbmkoKS4KPiArICovCj4gK3N0YXRpYyB2b2lkIHhsbnhfZmJkZXZfZGVmaW9fZmlu aShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQo+ICt7Cj4gKwlpZiAoIWZiaS0+ZmJkZWZpbykKPiArCQly ZXR1cm47Cj4gKwo+ICsJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChmYmkpOwo+ICsJa2ZyZWUoZmJp LT5mYmRlZmlvKTsKPiArCWtmcmVlKGZiaS0+ZmJvcHMpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog eGxueF9mYmRldl9maW5pIC0gRnJlZSB0aGUgWGlsaW54IGZyYW1lYnVmZmVyCj4gKyAqIEBmYl9o ZWxwZXI6IGRybV9mYl9oZWxwZXIgc3RydWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMg YmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9maW5pKCkuCj4gKyAqLwo+ICt2b2lkIHhsbnhfZmJfZmlu aShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9m YmRldiAqZmJkZXYgPSB0b19mYmRldihmYl9oZWxwZXIpOwo+ICsKPiArCWRybV9mYl9oZWxwZXJf dW5yZWdpc3Rlcl9mYmkoJmZiZGV2LT5mYl9oZWxwZXIpOwo+ICsJaWYgKGZiZGV2LT5mYl9oZWxw ZXIuZmJkZXYpCj4gKwkJeGxueF9mYmRldl9kZWZpb19maW5pKGZiZGV2LT5mYl9oZWxwZXIuZmJk ZXYpOwo+ICsKPiArCWlmIChmYmRldi0+ZmJfaGVscGVyLmZiKQo+ICsJCWRybV9mcmFtZWJ1ZmZl cl9yZW1vdmUoZmJkZXYtPmZiX2hlbHBlci5mYik7Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9maW5p KCZmYmRldi0+ZmJfaGVscGVyKTsKPiArCWtmcmVlKGZiZGV2KTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIHhsbnhfZmJfY3JlYXRlIC0gKHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgKiktPmZi X2NyZWF0ZSBjYWxsYmFjawo+ICsgKiBAZHJtOiBEUk0gZGV2aWNlCj4gKyAqIEBmaWxlX3ByaXY6 IGRybSBmaWxlIHByaXZhdGUgZGF0YQo+ICsgKiBAbW9kZV9jbWQ6IG1vZGUgY29tbWFuZCBmb3Ig ZmIgY3JlYXRpb24KPiArICoKPiArICogVGhpcyBmdW5jdGlvbnMgY3JlYXRlcyBhIGRybV9mcmFt ZWJ1ZmZlciB3aXRoIHhsbnhfZmJfZnVuY3MgZm9yIGdpdmVuIG1vZGUKPiArICogQG1vZGVfY21k LiBUaGlzIGZ1bmN0aW9ucyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0aGUgZmJfY3JlYXRl IGNhbGxiYWNrCj4gKyAqIGZ1bmN0aW9uIG9mIGRybV9tb2RlX2NvbmZpZ19mdW5jcy4KCkknZCBz YXkgInRvIGJlIHVzZWQgYXMgdGhlIGRybV9tb2RlX2NvbmZpZ19mdW5jcy0+ZmJfY3JlYXRlKCkg aGFuZGxlciIuCgo+ICsgKiBSZXR1cm46IGEgZHJtX2ZyYW1lYnVmZmVyIG9iamVjdCBpZiBzdWNj ZXNzZnVsLCBvcgo+ICsgKiBFUlJfUFRSIGZyb20gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5j cygpLgo+ICsgKi8KPiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gK3hsbnhfZmJfY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJ ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKPiArewo+ICsJ cmV0dXJuIGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZnVuY3MoZHJtLCBmaWxlX3ByaXYsIG1vZGVf Y21kLAo+ICsJCQkJCSAgICAmeGxueF9mYl9mdW5jcyk7Cj4gK30KCllvdSBjYW4gcmVwbGFjZSB4 bG54X2ZiX2NyZWF0ZSgpIHdpdGggZHJtX2dlbV9mYl9jcmVhdGUoKSBhcyB4bG54X2ZiX2Z1bmNz IGlzCmlkZW50aWNhbCB0byBkcm1fZ2VtX2ZiX2Z1bmNzLgoKVW5sZXNzIHRoZXJlJ3MgYSByZWFz b24gdGhhdCB3b3VsZCBwcmV2ZW50IHVzYWdlIG9mCmRybV9mYmRldl9nZW5lcmljX3NldHVwKCks IHRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5IDotKSBUaGUKZmIgcG9pbnRlciBp biB4bG54X2RybSBjb3VsZCB0aGVuIGJlIHJlbW92ZWQgdG9vLgoKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9m Yi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lNDE3MzhlCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaAo+IEBAIC0w LDAgKzEsMjcgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoK PiArICogWGlsaW54IERSTSBLTVMgRnJhbWVidWZmZXIgaGVscGVyIGhlYWRlcgo+ICsgKgo+ICsg KiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1 dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqLwo+ICsKPiAr I2lmbmRlZiBfWExOWF9GQl9IXwo+ICsjZGVmaW5lIF9YTE5YX0ZCX0hfCj4gKwo+ICtzdHJ1Y3Qg ZHJtX2RldmljZTsKPiArc3RydWN0IGRybV9maWxlOwo+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsK CmIgY29tZXMgYmVmb3JlIGkgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIDotKQoKPiArc3RydWN0IGRy bV9mcmFtZWJ1ZmZlcjsKPiArc3RydWN0IGRybV9tb2RlX2ZiX2NtZDI7Cj4gKwo+ICtzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICoKPiAreGxueF9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkgICAgICAgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKTsKPiArc3RydWN0IGRybV9mYl9oZWxwZXIgKgo+ICt4 bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAsCj4g KwkgICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCwgdW5zaWduZWQgaW50IGFsaWduKTsK PiArdm9pZCB4bG54X2ZiX2Zpbmkoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7Cj4g Kwo+ICsjZW5kaWYgLyogX1hMTlhfRkJfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjY3NDhkYzEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uYwo+IEBAIC0wLDAgKzEs MzYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICog WGlsaW54IERSTSBLTVMgR0VNIGhlbHBlcgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1 IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8 aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAi eGxueF9kcnYuaCIKPiArI2luY2x1ZGUgInhsbnhfZ2VtLmgiCj4gKwo+ICsvKgo+ICsgKiB4bG54 X2dlbV9jbWFfZHVtYl9jcmVhdGUgLSAoc3RydWN0IGRybV9kcml2ZXIpLT5kdW1iX2NyZWF0ZSBj YWxsYmFjawo+ICsgKiBAZmlsZV9wcml2OiBkcm1fZmlsZSBvYmplY3QKPiArICogQGRybTogRFJN IG9iamVjdAo+ICsgKiBAYXJnczogaW5mbyBmb3IgZHVtYiBzY2Fub3V0IGJ1ZmZlciBjcmVhdGlv bgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkdW1iX2NyZWF0ZSBjYWxsYmFjayBv ZiBkcm1fZHJpdmVyIHN0cnVjdC4gU2ltcGx5Cj4gKyAqIGl0IHdyYXBzIGFyb3VuZCBkcm1fZ2Vt X2NtYV9kdW1iX2NyZWF0ZSgpIGFuZCBzZXRzIHRoZSBwaXRjaCB2YWx1ZQo+ICsgKiBieSByZXRy aWV2aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UuCgpUaGlzIGlzbid0IGVudGlyZWx5IGFj Y3VyYXRlLCB0aGUgZnVuY3Rpb24gZG9lc24ndCByZXRyaWV2ZSBhIHZhbHVlIGZyb20KdGhlIGRl dmljZS4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgPwoKVGhpcyBmdW5jdGlvbiBpcyB0aGUgZHJt X2RyaXZlci5kdW1iX2NyZWF0ZSgpIGNhbGxiYWNrIGhhbmRsZXIuIEl0IHdyYXBzCnRoZSBEUk0g R0VNIENNQSBoZWxwZXIgaW1wbGVtZW50YXRpb24gYW5kIGNvbXB1dGVzIHRoZSBwaXRjaCBiYXNl ZCBvbiB0aGUKYWxpZ25tZW50IGNvbnN0cmFpbnRzIHJldHJpZXZlZCBmcm9tIHRoZSBDUlRDIGRy aXZlci4KCj4gKyAqIFJldHVybjogVGhlIHJldHVybiB2YWx1ZSBmcm9tIGRybV9nZW1fY21hX2R1 bWJfY3JlYXRlKCkKPiArICovCj4gK2ludCB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gKwkJCSAgICAg c3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQg cGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOwo+ICsKPiAr CWFyZ3MtPnBpdGNoID0gQUxJR04ocGl0Y2gsIHhsbnhfZ2V0X2FsaWduKGRybSkpOwo+ICsKPiAr CXJldHVybiBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZV9pbnRlcm5hbChmaWxlX3ByaXYsIGRybSwg YXJncyk7Cj4gK30KCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=