From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v5 1/2] drm/bridge: Add Cadence DSI driver Date: Thu, 18 Jan 2018 14:43:08 +0100 Message-ID: <20180118134309.13123-1-boris.brezillon@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Archit Taneja , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Cc: Thomas Petazzoni , "Menon, Nishanth" , Pawel Moll , Ian Campbell , Simon Hatliff , Mark Rutland , Jyri Sarha , Rob Herring , Alan Douglas , Tomi Valkeinen , Boris Brezillon , Suresh Punnoose , Kumar Gala , Maxime Ripard , Richard Sproul , devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org QWRkIGEgZHJpdmVyIGZvciBDYWRlbmNlIERQSSAtPiBEU0kgYnJpZGdlLgoKVGhpcyBkcml2ZXIg b25seSBzdXBwb3J0IGEgc3Vic2V0IG9mIENhZGVuY2UgRFNJIGJyaWRnZSBjYXBhYmlsaXRpZXMu CgpIZXJlIGlzIGEgbm9uLWV4aGF1c3RpdmUgbGlzdCBvZiBtaXNzaW5nIGZlYXR1cmVzOgogKiBi dXJzdCBtb2RlCiAqIERQSFkgaW5pdC9jb25maWd1cmF0aW9uIHN0ZXBzCiAqIHN1cHBvcnQgZm9y IGFkZGl0aW9uYWwgaW5wdXQgaW50ZXJmYWNlcyAoU0RJIGlucHV0KQoKU2lnbmVkLW9mZi1ieTog Qm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgpSZXZp ZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KQWNrZWQtYnk6IEVy aWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0tLQpIZWxsbywKClRoaXMgdmVyc2lvbiBpcyBz dGlsbCBtaXNzaW5nIERQSFkgY29uZmlnL2luaXQgY29kZSwgbWFpbmx5IGJlY2F1c2UgSQpkb24n dCBoYXZlIGEgRFBIWSAoZWl0aGVyIHJlYWwgb3IgZW11bGF0ZWQpIHRvIHRlc3Qgd2l0aC4gQnV0 IEknbQp3b3JraW5nIG9uIGEgRFBIWSBhYnN0cmFjdGlvbiBsYXllciB0byBoZWxwIGV4dHJhY3Qg Y29tbW9uIERQSFkKb3BlcmF0aW9ucyBvdXQgb2YgRFNJIGRyaXZlcnMgc28gdGhhdCBEUEhZIGRy aXZlcnMgY2FuIGJlIHVzZWQgb3V0c2lkZQpvZiB0aGUgRFJNIHdvcmxkIChJIGtub3cgRC1QSFlz IGNhbiBiZSB1c2VkIHdpdGggQ1NJIHdoaWNoIGJlbG9uZ3MgaW4KVjRMKS4KClJlZ2FyZHMsCgpC b3JpcwoKVGhpcyB2ZXJzaW9uIGlzIHN0aWxsIG1pc3NpbmcKQ2hhbmdlcyBpbiB2NToKLSBBZGQg cnVudGltZSBQTSBzdXBwb3J0CgpDaGFuZ2VzIGluIHY0OgotIEZpeCB0eXBvcwotIFJlbmFtZSBj bGtzIGFzIHN1Z2dlc3RlZCBieSBUb21pCi0gRml4IERTSSBzZXR1cCBkb25lIGluIGNkbnNfZHNp X2JyaWRnZV9lbmFibGUoKQotIEFkZCBhIHByZWNpc2lvbiBhYm91dCB3aGVyZSB0aGlzIGJyaWRn ZSBpcyBzdXBwb3NlZCB0byB1c2VkIHRvIHRoZQogIEtjb25maWcgZW50cnkKLSBMZXQgRFJNX0NE TlNfRFNJIHNlbGVjdCBEUk1fUEFORUxfQlJJREdFCi0gUmVtb3ZlIHRoZSBJUCB2ZXJzaW9uIGZy b20gdGhlIERUIGNvbXBhdGlibGUgbmFtZQotIEFkYXB0IHJlZ2lzdGVyIHRoZSBsYXlvdXQgdG8g bWF0Y2ggdGhlIG9uZSB1c2VkIGluIHRoZSBsYXN0IHJldmlzaW9uCiAgb2YgdGhlIElQIChob3Bl ZnVsbHkgdGhlIGZpbmFsIHZlcnNpb24pCgpDaGFuZ2VzIGluIHYzOgotIHJlcGxhY2UgbWFnaWMg dmFsdWVzIGJ5IHJlYWwgdGltaW5nIGNhbGN1bGF0aW9uLiBUaGUgRFBIWSBQTEwgY2xvY2sKICBp cyBzdGlsbCBoYXJkY29kZWQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmtpbmcgRFBIWSBibG9j ayB5ZXQsIGFuZAogIHRoaXMgaXMgdGhlIHBpZWNlIG9mIEhXIHdlIG5lZWQgdG8gZHluYW1pY2Fs bHkgY29uZmlndXJlIHRoZSBQTEwKICByYXRlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IHJlZnJlc2gg cmF0ZSBhbmQgdGhlIHJlc29sdXRpb24uCi0gcGFyc2UgRFNJIGRldmljZXMgcmVwcmVzZW50ZWQg d2l0aCB0aGUgT0YtZ3JhcGguIFRoaXMgaXMgbmVlZGVkIHRvCiAgc3VwcG9ydCBEU0kgZGV2aWNl cyBjb250cm9sbGVkIHRocm91Z2ggYW4gZXh0ZXJuYWwgYnVzIGxpa2UgSTJDIG9yCiAgU1BJLgot IHVzZSB0aGUgRFJNIHBhbmVsLWJyaWRnZSBpbmZyYXN0cnVjdHVyZSB0byBzaW1wbGlmeSB0aGUg RFJNIHBhbmVsCiAgbG9naWMKCkNoYW5nZXMgaW4gdjI6Ci0gcmViYXNlIG9uIHY0LjEyLXJjMSBh bmQgYWRhcHQgdG8gZHJpdmVyIHRvIHRoZSBkcm1fYnJpZGdlIEFQSSBjaGFuZ2VzCi0gcmV0dXJu IHRoZSBjb3JyZWN0IGVycm9yIHdoZW4gZGV2bV9jbGtfZ2V0KHN5c2NsaykgZmFpbHMKLSBhZGQg bWlzc2luZyBkZXBlbmRzIG9uIE9GIGFuZCBzZWxlY3QgRFJNX1BBTkVMIGluIHRoZSBLY29uZmln IGVudHJ5CgpEU0kgcnVudGltZSBQTQotLS0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp ZyAgICB8ICAgMTAgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgIHwgICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMgfCAxMTIzICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTEzNCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5j CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4IDNiOTlkNWEwNmMxNi4uYWNkNWI2YjlmZmM5IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnCkBAIC0yNSw2ICsyNSwxNiBAQCBjb25maWcgRFJNX0FOQUxP R0lYX0FOWDc4WFgKIAkgIHRoZSBIRE1JIG91dHB1dCBvZiBhbiBhcHBsaWNhdGlvbiBwcm9jZXNz b3IgdG8gTXlEUAogCSAgb3IgRGlzcGxheVBvcnQuCiAKK2NvbmZpZyBEUk1fQ0ROU19EU0kKKwl0 cmlzdGF0ZSAiQ2FkZW5jZSBEUEkvRFNJIGJyaWRnZSIKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIK KwlzZWxlY3QgRFJNX01JUElfRFNJCisJc2VsZWN0IERSTV9QQU5FTF9CUklER0UKKwlkZXBlbmRz IG9uIE9GCisJaGVscAorCSAgU3VwcG9ydCBDYWRlbmNlIERQSSB0byBEU0kgYnJpZGdlLiBUaGlz IGlzIGFuIGludGVybmFsCisJICBicmlkZ2UgYW5kIGlzIG1lYW50IHRvIGJlIGRpcmVjdGx5IGVt YmVkZGVkIGluIGEgU29DLgorCiBjb25maWcgRFJNX0RVTUJfVkdBX0RBQwogCXRyaXN0YXRlICJE dW1iIFZHQSBEQUMgQnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBPRgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKaW5kZXggZTNkNWViMDMxZjE4Li5hMGZiZjBmZTVmNjkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfQU5Y NzhYWCkgKz0gYW5hbG9naXgtYW54Nzh4eC5vCitvYmotJChDT05GSUdfRFJNX0NETlNfRFNJKSAr PSBjZG5zLWRzaS5vCiBvYmotJChDT05GSUdfRFJNX0RVTUJfVkdBX0RBQykgKz0gZHVtYi12Z2Et ZGFjLm8KIG9iai0kKENPTkZJR19EUk1fTFZEU19FTkNPREVSKSArPSBsdmRzLWVuY29kZXIubwog b2JqLSQoQ09ORklHX0RSTV9NRUdBQ0hJUFNfU1REUFhYWFhfR0VfQjg1MFYzX0ZXKSArPSBtZWdh Y2hpcHMtc3RkcHh4eHgtZ2UtYjg1MHYzLWZ3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvY2Rucy1kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1kc2kuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM3Zjk5OTUyMjY0MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1kc2kuYwpAQCAtMCww ICsxLDExMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQ6IDIwMTcgQ2FkZW5jZSBEZXNpZ24gU3lzdGVt cywgSW5jLgorICoKKyAqIEF1dGhvcjogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25A ZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdl Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f bWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8dmlkZW8v bWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51 eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorCisjZGVmaW5l IElQX0NPTkYJCQkJMHgwCisjZGVmaW5lIFNQX0hTX0ZJRk9fREVQVEgoeCkJCSgoKHgpICYgR0VO TUFTSygzMCwgMjYpKSA+PiAyNikKKyNkZWZpbmUgU1BfTFBfRklGT19ERVBUSCh4KQkJKCgoeCkg JiBHRU5NQVNLKDI1LCAyMSkpID4+IDIxKQorI2RlZmluZSBWUlNfRklGT19ERVBUSCh4KQkJKCgo eCkgJiBHRU5NQVNLKDIwLCAxNikpID4+IDE2KQorI2RlZmluZSBESVJDTURfRklGT19ERVBUSCh4 KQkJKCgoeCkgJiBHRU5NQVNLKDE1LCAxMykpID4+IDEzKQorI2RlZmluZSBTRElfSUZBQ0VfMzIJ CQlCSVQoMTIpCisjZGVmaW5lIElOVEVSTkFMX0RBVEFQQVRIXzMyCQkoMCA8PCAxMCkKKyNkZWZp bmUgSU5URVJOQUxfREFUQVBBVEhfMTYJCSgxIDw8IDEwKQorI2RlZmluZSBJTlRFUk5BTF9EQVRB UEFUSF84CQkoMyA8PCAxMCkKKyNkZWZpbmUgSU5URVJOQUxfREFUQVBBVEhfU0laRQkJKCh4KSAm IEdFTk1BU0soMTEsIDEwKSkKKyNkZWZpbmUgTlVNX0lGQUNFKHgpCQkJKCgoKHgpICYgR0VOTUFT Syg5LCA4KSkgPj4gOCkgKyAxKQorI2RlZmluZSBNQVhfTEFORV9OQih4KQkJCSgoKHgpICYgR0VO TUFTSyg3LCA2KSkgPj4gNikKKyNkZWZpbmUgUlhfRklGT19ERVBUSCh4KQkJKCh4KSAmIEdFTk1B U0soNSwgMCkpCisKKyNkZWZpbmUgTUNUTF9NQUlOX0RBVEFfQ1RMCQkweDQKKyNkZWZpbmUgVEVf TUlQSV9QT0xMSU5HX0VOCQlCSVQoMjUpCisjZGVmaW5lIFRFX0hXX1BPTExJTkdfRU4JCUJJVCgy NCkKKyNkZWZpbmUgRElTUF9FT1RfR0VOCQkJQklUKDE4KQorI2RlZmluZSBIT1NUX0VPVF9HRU4J CQlCSVQoMTcpCisjZGVmaW5lIERJU1BfR0VOX0NIRUNLU1VNCQlCSVQoMTYpCisjZGVmaW5lIERJ U1BfR0VOX0VDQwkJCUJJVCgxNSkKKyNkZWZpbmUgQlRBX0VOCQkJCUJJVCgxNCkKKyNkZWZpbmUg UkVBRF9FTgkJCQlCSVQoMTMpCisjZGVmaW5lIFJFR19URV9FTgkJCUJJVCgxMikKKyNkZWZpbmUg SUZfVEVfRU4oeCkJCQlCSVQoOCArICh4KSkKKyNkZWZpbmUgVFZHX1NFTAkJCQlCSVQoNikKKyNk ZWZpbmUgVklEX0VOCQkJCUJJVCg1KQorI2RlZmluZSBJRl9WSURfU0VMRUNUKHgpCQkoKHgpIDw8 IDIpCisjZGVmaW5lIElGX1ZJRF9TRUxFQ1RfTUFTSwkJR0VOTUFTSygzLCAyKQorI2RlZmluZSBJ Rl9WSURfTU9ERQkJCUJJVCgxKQorI2RlZmluZSBMSU5LX0VOCQkJCUJJVCgwKQorCisjZGVmaW5l IE1DVExfTUFJTl9QSFlfQ1RMCQkweDgKKyNkZWZpbmUgSFNfSU5WRVJUX0RBVCh4KQkJQklUKDE5 ICsgKCh4KSAqIDIpKQorI2RlZmluZSBTV0FQX1BJTlNfREFUKHgpCQlCSVQoMTggKyAoKHgpICog MikpCisjZGVmaW5lIEhTX0lOVkVSVF9DTEsJCQlCSVQoMTcpCisjZGVmaW5lIFNXQVBfUElOU19D TEsJCQlCSVQoMTYpCisjZGVmaW5lIEhTX1NLRVdDQUxfRU4JCQlCSVQoMTUpCisjZGVmaW5lIFdB SVRfQlVSU1RfVElNRSh4KQkJKCh4KSA8PCAxMCkKKyNkZWZpbmUgREFUQV9VTFBNX0VOKHgpCQkJ QklUKDYgKyAoeCkpCisjZGVmaW5lIENMS19VTFBNX0VOCQkJQklUKDUpCisjZGVmaW5lIENMS19D T05USU5VT1VTCQkJQklUKDQpCisjZGVmaW5lIERBVEFfTEFORV9FTih4KQkJCUJJVCgoeCkgLSAx KQorCisjZGVmaW5lIE1DVExfTUFJTl9FTgkJCTB4YworI2RlZmluZSBEQVRBX0ZPUkNFX1NUT1AJ CQlCSVQoMTcpCisjZGVmaW5lIENMS19GT1JDRV9TVE9QCQkJQklUKDE2KQorI2RlZmluZSBJRl9F Tih4KQkJCUJJVCgxMyArICh4KSkKKyNkZWZpbmUgREFUQV9MQU5FX1VMUE1fUkVRKGwpCQlCSVQo OSArIChsKSkKKyNkZWZpbmUgQ0xLX0xBTkVfVUxQTV9SRVEJCUJJVCg4KQorI2RlZmluZSBEQVRB X0xBTkVfU1RBUlQoeCkJCUJJVCg0ICsgKHgpKQorI2RlZmluZSBDTEtfTEFORV9FTgkJCUJJVCgz KQorI2RlZmluZSBQTExfU1RBUlQJCQlCSVQoMCkKKworI2RlZmluZSBNQ1RMX0RQSFlfQ0ZHMAkJ CTB4MTAKKyNkZWZpbmUgRFBIWV9DX1JTVEIJCQlCSVQoMjApCisjZGVmaW5lIERQSFlfRF9SU1RC KHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgRFBIWV9QTExfUEROCQkJQklUKDEwKQorI2RlZmlu ZSBEUEhZX0NNTl9QRE4JCQlCSVQoOSkKKyNkZWZpbmUgRFBIWV9DX1BETgkJCUJJVCg4KQorI2Rl ZmluZSBEUEhZX0RfUEROKHgpCQkJKCh4KSA8PCA0KQorI2RlZmluZSBEUEhZX1BMTF9QU08JCQlC SVQoMSkKKyNkZWZpbmUgRFBIWV9DTU5fUFNPCQkJQklUKDApCisKKyNkZWZpbmUgTUNUTF9EUEhZ X1RJTUVPVVQxCQkweDE0CisjZGVmaW5lIEhTVFhfVElNRU9VVCh4KQkJCSgoeCkgPDwgNCkKKyNk ZWZpbmUgSFNUWF9USU1FT1VUX01BWAkJR0VOTUFTSygyMSwgNCkKKyNkZWZpbmUgQ0xLX0RJVih4 KQkJCSh4KQorI2RlZmluZSBDTEtfRElWX01BWAkJCUdFTk1BU0soMywgMCkKKworI2RlZmluZSBN Q1RMX0RQSFlfVElNRU9VVDIJCTB4MTgKKyNkZWZpbmUgTFBSWF9USU1FT1VUKHgpCQkJKHgpCisK KyNkZWZpbmUgTUNUTF9VTFBPVVRfVElNRQkJMHgxYworI2RlZmluZSBEQVRBX0xBTkVfVUxQT1VU X1RJTUUoeCkJKCh4KSA8PCA5KQorI2RlZmluZSBDTEtfTEFORV9VTFBPVVRfVElNRSh4KQkJKHgp CisKKyNkZWZpbmUgTUNUTF8zRFZJREVPX0NUTAkJMHgyMAorI2RlZmluZSBWSURfVlNZTkNfM0Rf RU4JCQlCSVQoNykKKyNkZWZpbmUgVklEX1ZTWU5DXzNEX0xSCQkJQklUKDUpCisjZGVmaW5lIFZJ RF9WU1lOQ18zRF9TRUNPTkRfRU4JCUJJVCg0KQorI2RlZmluZSBWSURfVlNZTkNfM0RGT1JNQVRf TElORQkJKDAgPDwgMikKKyNkZWZpbmUgVklEX1ZTWU5DXzNERk9STUFUX0ZSQU1FCSgxIDw8IDIp CisjZGVmaW5lIFZJRF9WU1lOQ18zREZPUk1BVF9QSVhFTAkoMiA8PCAyKQorI2RlZmluZSBWSURf VlNZTkNfM0RNT0RFX09GRgkJMAorI2RlZmluZSBWSURfVlNZTkNfM0RNT0RFX1BPUlRSQUlUCTEK KyNkZWZpbmUgVklEX1ZTWU5DXzNETU9ERV9MQU5EU0NBUEUJMgorCisjZGVmaW5lIE1DVExfTUFJ Tl9TVFMJCQkweDI0CisjZGVmaW5lIE1DVExfTUFJTl9TVFNfQ1RMCQkweDEzMAorI2RlZmluZSBN Q1RMX01BSU5fU1RTX0NMUgkJMHgxNTAKKyNkZWZpbmUgTUNUTF9NQUlOX1NUU19GTEFHCQkweDE3 MAorI2RlZmluZSBIU19TS0VXQ0FMX0RPTkUJCQlCSVQoMTEpCisjZGVmaW5lIElGX1VOVEVSTV9Q S1RfRVJSKHgpCQlCSVQoOCArICh4KSkKKyNkZWZpbmUgTFBSWF9USU1FT1VUX0VSUgkJQklUKDcp CisjZGVmaW5lIEhTVFhfVElNRU9VVF9FUlIJCUJJVCg2KQorI2RlZmluZSBEQVRBX0xBTkVfUkRZ KGwpCQlCSVQoMiArIChsKSkKKyNkZWZpbmUgQ0xLX0xBTkVfUkRZCQkJQklUKDEpCisjZGVmaW5l IFBMTF9MT0NLRUQJCQlCSVQoMCkKKworI2RlZmluZSBNQ1RMX0RQSFlfRVJSCQkJMHgyOAorI2Rl ZmluZSBNQ1RMX0RQSFlfRVJSX0NUTDEJCTB4MTQ4CisjZGVmaW5lIE1DVExfRFBIWV9FUlJfQ0xS CQkweDE2OAorI2RlZmluZSBNQ1RMX0RQSFlfRVJSX0ZMQUcJCTB4MTg4CisjZGVmaW5lIEVSUl9D T05UX0xQKHgsIGwpCQlCSVQoMTggKyAoKHgpICogNCkgKyAobCkpCisjZGVmaW5lIEVSUl9DT05U Uk9MKGwpCQkJQklUKDE0ICsgKGwpKQorI2RlZmluZSBFUlJfU1lORVNDKGwpCQkJQklUKDEwICsg KGwpKQorI2RlZmluZSBFUlJfRVNDKGwpCQkJQklUKDYgKyAobCkpCisKKyNkZWZpbmUgTUNUTF9E UEhZX0VSUl9DVEwyCQkweDE0YworI2RlZmluZSBFUlJfQ09OVF9MUF9FREdFKHgsIGwpCQlCSVQo MTIgKyAoKHgpICogNCkgKyAobCkpCisjZGVmaW5lIEVSUl9DT05UUk9MX0VER0UobCkJCUJJVCg4 ICsgKGwpKQorI2RlZmluZSBFUlJfU1lOX0VTQ19FREdFKGwpCQlCSVQoNCArIChsKSkKKyNkZWZp bmUgRVJSX0VTQ19FREdFKGwpCQkJQklUKDAgKyAobCkpCisKKyNkZWZpbmUgTUNUTF9MQU5FX1NU UwkJCTB4MmMKKyNkZWZpbmUgUFBJX0NfVFhfUkVBRFlfSFMJCUJJVCgxOCkKKyNkZWZpbmUgRFBI WV9QTExfTE9DSwkJCUJJVCgxNykKKyNkZWZpbmUgUFBJX0RfUlhfVUxQU19FU0MoeCkJCSgoKHgp ICYgR0VOTUFTSygxNSwgMTIpKSA+PiAxMikKKyNkZWZpbmUgTEFORV9TVEFURV9TVEFSVAkJMAor I2RlZmluZSBMQU5FX1NUQVRFX0lETEUJCQkxCisjZGVmaW5lIExBTkVfU1RBVEVfV1JJVEUJCTIK KyNkZWZpbmUgTEFORV9TVEFURV9VTFBNCQkJMworI2RlZmluZSBMQU5FX1NUQVRFX1JFQUQJCQk0 CisjZGVmaW5lIERBVEFfTEFORV9TVEFURShsLCB2YWwpCQlcCisJKCgodmFsKSA+PiAoMiArIDIg KiAobCkgKyAoKGwpID8gMSA6IDApKSkgJiBHRU5NQVNLKChsKSA/IDEgOiAyLCAwKSkKKyNkZWZp bmUgQ0xLX0xBTkVfU1RBVEVfSFMJCTIKKyNkZWZpbmUgQ0xLX0xBTkVfU1RBVEUodmFsKQkJKCh2 YWwpICYgR0VOTUFTSygxLCAwKSkKKworI2RlZmluZSBEU0NfTU9ERV9DVEwJCQkweDMwCisjZGVm aW5lIERTQ19NT0RFX0VOCQkJQklUKDApCisKKyNkZWZpbmUgRFNDX0NNRF9TRU5ECQkJMHgzNAor I2RlZmluZSBEU0NfU0VORF9QUFMJCQlCSVQoMCkKKyNkZWZpbmUgRFNDX0VYRUNVVEVfUVVFVUUJ CUJJVCgxKQorCisjZGVmaW5lIERTQ19QUFNfV1JEQVQJCQkweDM4CisKKyNkZWZpbmUgRFNDX01P REVfU1RTCQkJMHgzYworI2RlZmluZSBEU0NfUFBTX0RPTkUJCQlCSVQoMSkKKyNkZWZpbmUgRFND X0VYRUNfRE9ORQkJCUJJVCgyKQorCisjZGVmaW5lIENNRF9NT0RFX0NUTAkJCTB4NzAKKyNkZWZp bmUgSUZfTFBfRU4oeCkJCQlCSVQoOSArICh4KSkKKyNkZWZpbmUgSUZfVkNIQU5fSUQoeCwgYykJ CSgoYykgPDwgKCh4KSAqIDIpKQorCisjZGVmaW5lIENNRF9NT0RFX0NUTDIJCQkweDc0CisjZGVm aW5lIFRFX1RJTUVPVVQoeCkJCQkoKHgpIDw8IDExKQorI2RlZmluZSBGSUxMX1ZBTFVFKHgpCQkJ KCh4KSA8PCAzKQorI2RlZmluZSBBUkJfSUZfV0lUSF9ISUdIRVNUX1BSSU9SSVRZKHgpCSgoeCkg PDwgMSkKKyNkZWZpbmUgQVJCX1JPVU5EX1JPQklOX01PREUJCUJJVCgwKQorCisjZGVmaW5lIENN RF9NT0RFX1NUUwkJCTB4NzgKKyNkZWZpbmUgQ01EX01PREVfU1RTX0NUTAkJMHgxMzQKKyNkZWZp bmUgQ01EX01PREVfU1RTX0NMUgkJMHgxNTQKKyNkZWZpbmUgQ01EX01PREVfU1RTX0ZMQUcJCTB4 MTc0CisjZGVmaW5lIEVSUl9JRl9VTkRFUlJVTih4KQkJQklUKDQgKyAoeCkpCisjZGVmaW5lIEVS Ul9VTldBTlRFRF9SRUFECQlCSVQoMykKKyNkZWZpbmUgRVJSX1RFX01JU1MJCQlCSVQoMikKKyNk ZWZpbmUgRVJSX05PX1RFCQkJQklUKDEpCisjZGVmaW5lIENTTV9SVU5OSU5HCQkJQklUKDApCisK KyNkZWZpbmUgRElSRUNUX0NNRF9TRU5ECQkJMHg4MAorCisjZGVmaW5lIERJUkVDVF9DTURfTUFJ Tl9TRVRUSU5HUwkweDg0CisjZGVmaW5lIFRSSUdHRVJfVkFMKHgpCQkJKCh4KSA8PCAyNSkKKyNk ZWZpbmUgQ01EX0xQX0VOCQkJQklUKDI0KQorI2RlZmluZSBDTURfU0laRSh4KQkJCSgoeCkgPDwg MTYpCisjZGVmaW5lIENNRF9WQ0hBTl9JRCh4KQkJCSgoeCkgPDwgMTQpCisjZGVmaW5lIENNRF9E QVRBVFlQRSh4KQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgQ01EX0xPTkcJCQlCSVQoMykKKyNkZWZp bmUgV1JJVEVfQ01ECQkJMAorI2RlZmluZSBSRUFEX0NNRAkJCTEKKyNkZWZpbmUgVEVfUkVRCQkJ CTQKKyNkZWZpbmUgVFJJR0dFUl9SRVEJCQk1CisjZGVmaW5lIEJUQV9SRVEJCQkJNgorCisjZGVm aW5lIERJUkVDVF9DTURfU1RTCQkJMHg4OAorI2RlZmluZSBESVJFQ1RfQ01EX1NUU19DVEwJCTB4 MTM4CisjZGVmaW5lIERJUkVDVF9DTURfU1RTX0NMUgkJMHgxNTgKKyNkZWZpbmUgRElSRUNUX0NN RF9TVFNfRkxBRwkJMHgxNzgKKyNkZWZpbmUgUkNWRF9BQ0tfVkFMKHZhbCkJCSgodmFsKSA+PiAx NikKKyNkZWZpbmUgUkNWRF9UUklHR0VSX1ZBTCh2YWwpCQkoKCh2YWwpICYgR0VOTUFTSygxNCwg MTEpKSA+PiAxMSkKKyNkZWZpbmUgUkVBRF9DT01QTEVURURfV0lUSF9FUlIJCUJJVCgxMCkKKyNk ZWZpbmUgQlRBX0ZJTklTSEVECQkJQklUKDkpCisjZGVmaW5lIEJUQV9DT01QTEVURUQJCQlCSVQo OCkKKyNkZWZpbmUgVEVfUkNWRAkJCQlCSVQoNykKKyNkZWZpbmUgVFJJR0dFUl9SQ1ZECQkJQklU KDYpCisjZGVmaW5lIEFDS19XSVRIX0VSUl9SQ1ZECQlCSVQoNSkKKyNkZWZpbmUgQUNLX1JDVkQJ CQlCSVQoNCkKKyNkZWZpbmUgUkVBRF9DT01QTEVURUQJCQlCSVQoMykKKyNkZWZpbmUgVFJJR0dF Ul9DT01QTEVURUQJCUJJVCgyKQorI2RlZmluZSBXUklURV9DT01QTEVURUQJCQlCSVQoMSkKKyNk ZWZpbmUgU0VORElOR19DTUQJCQlCSVQoMCkKKworI2RlZmluZSBESVJFQ1RfQ01EX1NUT1BfUkVB RAkJMHg4YworCisjZGVmaW5lIERJUkVDVF9DTURfV1JEQVRBCQkweDkwCisKKyNkZWZpbmUgRElS RUNUX0NNRF9GSUZPX1JTVAkJMHg5NAorCisjZGVmaW5lIERJUkVDVF9DTURfUkREQVRBCQkweGEw CisKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9QUk9QUwkJMHhhNAorI2RlZmluZSBSRF9EQ1MJCQkJ QklUKDE4KQorI2RlZmluZSBSRF9WQ0hBTl9JRCh2YWwpCQkoKCh2YWwpID4+IDE2KSAmIEdFTk1B U0soMSwgMCkpCisjZGVmaW5lIFJEX1NJWkUodmFsKQkJCSgodmFsKSAmIEdFTk1BU0soMTUsIDAp KQorCisjZGVmaW5lIERJUkVDVF9DTURfUkRfU1RTCQkweGE4CisjZGVmaW5lIERJUkVDVF9DTURf UkRfU1RTX0NUTAkJMHgxM2MKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9TVFNfQ0xSCQkweDE1Ywor I2RlZmluZSBESVJFQ1RfQ01EX1JEX1NUU19GTEFHCQkweDE3YworI2RlZmluZSBFUlJfRU9UX1dJ VEhfRVJSCQlCSVQoOCkKKyNkZWZpbmUgRVJSX01JU1NJTkdfRU9UCQkJQklUKDcpCisjZGVmaW5l IEVSUl9XUk9OR19MRU5HVEgJCUJJVCg2KQorI2RlZmluZSBFUlJfT1ZFUlNJWkUJCQlCSVQoNSkK KyNkZWZpbmUgRVJSX1JFQ0VJVkUJCQlCSVQoNCkKKyNkZWZpbmUgRVJSX1VOREVDT0RBQkxFCQkJ QklUKDMpCisjZGVmaW5lIEVSUl9DSEVDS1NVTQkJCUJJVCgyKQorI2RlZmluZSBFUlJfVU5DT1JS RUNUQUJMRQkJQklUKDEpCisjZGVmaW5lIEVSUl9GSVhFRAkJCUJJVCgwKQorCisjZGVmaW5lIFZJ RF9NQUlOX0NUTAkJCTB4YjAKKyNkZWZpbmUgVklEX0lHTk9SRV9NSVNTX1ZTWU5DCQlCSVQoMzEp CisjZGVmaW5lIFZJRF9GSUVMRF9TVwkJCUJJVCgyOCkKKyNkZWZpbmUgVklEX0lOVEVSTEFDRURf RU4JCUJJVCgyNykKKyNkZWZpbmUgUkVDT1ZFUllfTU9ERSh4KQkJKCh4KSA8PCAyNSkKKyNkZWZp bmUgUkVDT1ZFUllfTU9ERV9ORVhUX0hTWU5DCTAKKyNkZWZpbmUgUkVDT1ZFUllfTU9ERV9ORVhU X1NUT1BfUE9JTlQJMgorI2RlZmluZSBSRUNPVkVSWV9NT0RFX05FWFRfVlNZTkMJMworI2RlZmlu ZSBSRUdfQkxLRU9MX01PREUoeCkJCSgoeCkgPDwgMjMpCisjZGVmaW5lIFJFR19CTEtMSU5FX01P REUoeCkJCSgoeCkgPDwgMjEpCisjZGVmaW5lIFJFR19CTEtfTU9ERV9OVUxMX1BLVAkJMAorI2Rl ZmluZSBSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUCTEKKyNkZWZpbmUgUkVHX0JMS19NT0RFX0xQ CQkJMgorI2RlZmluZSBTWU5DX1BVTFNFX0hPUklaT05UQUwJCUJJVCgyMCkKKyNkZWZpbmUgU1lO Q19QVUxTRV9BQ1RJVkUJCUJJVCgxOSkKKyNkZWZpbmUgQlVSU1RfTU9ERQkJCUJJVCgxOCkKKyNk ZWZpbmUgVklEX1BJWEVMX01PREVfTUFTSwkJR0VOTUFTSygxNywgMTQpCisjZGVmaW5lIFZJRF9Q SVhFTF9NT0RFX1JHQjU2NQkJKDAgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjY2 Nl9QQUNLRUQJKDEgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjY2NgkJKDIgPDwg MTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjg4OAkJKDMgPDwgMTQpCisjZGVmaW5lIFZJ RF9QSVhFTF9NT0RFX1JHQjEwMTAxMAkoNCA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVf UkdCMTIxMjEyCSg1IDw8IDE0KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjAJCSg4IDw8 IDE0KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjJfUEFDS0VECSg5IDw8IDE0KQorI2Rl ZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjIJCSgxMCA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVM X01PREVfWVVWNDIyXzI0QgkoMTEgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX0RTQ19D T01QCQkoMTIgPDwgMTQpCisjZGVmaW5lIFZJRF9EQVRBVFlQRSh4KQkJCSgoeCkgPDwgOCkKKyNk ZWZpbmUgVklEX1ZJUlRDSEFOX0lEKGlmYWNlLCB4KQkoKHgpIDw8ICg0ICsgKGlmYWNlKSAqIDIp KQorI2RlZmluZSBTVE9QX01PREUoeCkJCQkoKHgpIDw8IDIpCisjZGVmaW5lIFNUQVJUX01PREUo eCkJCQkoeCkKKworI2RlZmluZSBWSURfVlNJWkUxCQkJMHhiNAorI2RlZmluZSBWRlBfTEVOKHgp CQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgVkJQX0xFTih4KQkJCSgoeCkgPDwgNikKKyNkZWZpbmUg VlNBX0xFTih4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9WU0laRTIJCQkweGI4CisjZGVmaW5lIFZB Q1RfTEVOKHgpCQkJKHgpCisKKyNkZWZpbmUgVklEX0hTSVpFMQkJCTB4YzAKKyNkZWZpbmUgSEZQ X0xFTih4KQkJCSgoeCkgPDwgMjApCisjZGVmaW5lIEhCUF9MRU4oeCkJCQkoKHgpIDw8IDEwKQor I2RlZmluZSBIU0FfTEVOKHgpCQkJKHgpCisKKyNkZWZpbmUgVklEX0hTSVpFMgkJCTB4YzQKKyNk ZWZpbmUgSEFDVF9MRU4oeCkJCQkoeCkKKworI2RlZmluZSBWSURfQkxLU0laRTEJCQkweGNjCisj ZGVmaW5lIEJMS19FT0xfUEtUX0xFTih4KQkJKCh4KSA8PCAxNSkKKyNkZWZpbmUgQkxLX0xJTkVf RVZFTlRfUEtUX0xFTih4KQkoeCkKKworI2RlZmluZSBWSURfQkxLU0laRTIJCQkweGQwCisjZGVm aW5lIEJMS19MSU5FX1BVTFNFX1BLVF9MRU4oeCkJKHgpCisKKyNkZWZpbmUgVklEX1BLVF9USU1F CQkJMHhkOAorI2RlZmluZSBCTEtfRU9MX0RVUkFUSU9OKHgpCQkoeCkKKworI2RlZmluZSBWSURf RFBIWV9USU1FCQkJMHhkYworI2RlZmluZSBSRUdfV0FLRVVQX1RJTUUoeCkJCSgoeCkgPDwgMTcp CisjZGVmaW5lIFJFR19MSU5FX0RVUkFUSU9OKHgpCQkoeCkKKworI2RlZmluZSBWSURfRVJSX0NP TE9SMQkJCTB4ZTAKKyNkZWZpbmUgQ09MX0dSRUVOKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUg Q09MX1JFRCh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9FUlJfQ09MT1IyCQkJMHhlNAorI2RlZmlu ZSBQQURfVkFMKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgQ09MX0JMVUUoeCkJCQkoeCkKKwor I2RlZmluZSBWSURfVlBPUwkJCTB4ZTgKKyNkZWZpbmUgTElORV9WQUwodmFsKQkJCSgoKHZhbCkg JiBHRU5NQVNLKDE0LCAyKSkgPj4gMikKKyNkZWZpbmUgTElORV9QT1ModmFsKQkJCSgodmFsKSAm IEdFTk1BU0soMSwgMCkpCisKKyNkZWZpbmUgVklEX0hQT1MJCQkweGVjCisjZGVmaW5lIEhPUkla X1ZBTCh2YWwpCQkJKCgodmFsKSAmIEdFTk1BU0soMTcsIDMpKSA+PiAzKQorI2RlZmluZSBIT1JJ Wl9QT1ModmFsKQkJCSgodmFsKSAmIEdFTk1BU0soMiwgMCkpCisKKyNkZWZpbmUgVklEX01PREVf U1RTCQkJMHhmMAorI2RlZmluZSBWSURfTU9ERV9TVFNfQ1RMCQkweDE0MAorI2RlZmluZSBWSURf TU9ERV9TVFNfQ0xSCQkweDE2MAorI2RlZmluZSBWSURfTU9ERV9TVFNfRkxBRwkJMHgxODAKKyNk ZWZpbmUgVlNHX1JFQ09WRVJZCQkJQklUKDEwKQorI2RlZmluZSBFUlJfVlJTX1dST05HX0xFTgkJ QklUKDkpCisjZGVmaW5lIEVSUl9MT05HX1JFQUQJCQlCSVQoOCkKKyNkZWZpbmUgRVJSX0xJTkVf V1JJVEUJCQlCSVQoNykKKyNkZWZpbmUgRVJSX0JVUlNUX1dSSVRFCQkJQklUKDYpCisjZGVmaW5l IEVSUl9TTUFMTF9IRUlHSFQJCUJJVCg1KQorI2RlZmluZSBFUlJfU01BTExfTEVOCQkJQklUKDQp CisjZGVmaW5lIEVSUl9NSVNTSU5HX1ZTWU5DCQlCSVQoMykKKyNkZWZpbmUgRVJSX01JU1NJTkdf SFNZTkMJCUJJVCgyKQorI2RlZmluZSBFUlJfTUlTU0lOR19EQVRBCQlCSVQoMSkKKyNkZWZpbmUg VlNHX1JVTk5JTkcJCQlCSVQoMCkKKworI2RlZmluZSBWSURfVkNBX1NFVFRJTkcxCQkweGY0Cisj ZGVmaW5lIEJVUlNUX0xQCQkJQklUKDE2KQorI2RlZmluZSBNQVhfQlVSU1RfTElNSVQoeCkJCSh4 KQorCisjZGVmaW5lIFZJRF9WQ0FfU0VUVElORzIJCTB4ZjgKKyNkZWZpbmUgTUFYX0xJTkVfTElN SVQoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIEVYQUNUX0JVUlNUX0xJTUlUKHgpCQkoeCkKKwor I2RlZmluZSBUVkdfQ1RMCQkJCTB4ZmMKKyNkZWZpbmUgVFZHX1NUUklQRV9TSVpFKHgpCQkoKHgp IDw8IDUpCisjZGVmaW5lIFRWR19NT0RFX01BU0sJCQlHRU5NQVNLKDQsIDMpCisjZGVmaW5lIFRW R19NT0RFX1NJTkdMRV9DT0xPUgkJKDAgPDwgMykKKyNkZWZpbmUgVFZHX01PREVfVlNUUklQRVMJ CSgyIDw8IDMpCisjZGVmaW5lIFRWR19NT0RFX0hTVFJJUEVTCQkoMyA8PCAzKQorI2RlZmluZSBU VkdfU1RPUE1PREVfTUFTSwkJR0VOTUFTSygyLCAxKQorI2RlZmluZSBUVkdfU1RPUE1PREVfRU9G CQkoMCA8PCAxKQorI2RlZmluZSBUVkdfU1RPUE1PREVfRU9MCQkoMSA8PCAxKQorI2RlZmluZSBU VkdfU1RPUE1PREVfTk9XCQkoMiA8PCAxKQorI2RlZmluZSBUVkdfUlVOCQkJCUJJVCgwKQorCisj ZGVmaW5lIFRWR19JTUdfU0laRQkJCTB4MTAwCisjZGVmaW5lIFRWR19OQkxJTkVTKHgpCQkJKCh4 KSA8PCAxNikKKyNkZWZpbmUgVFZHX0xJTkVfU0laRSh4KQkJKHgpCisKKyNkZWZpbmUgVFZHX0NP TE9SMQkJCTB4MTA0CisjZGVmaW5lIFRWR19DT0wxX0dSRUVOKHgpCQkoKHgpIDw8IDEyKQorI2Rl ZmluZSBUVkdfQ09MMV9SRUQoeCkJCQkoeCkKKworI2RlZmluZSBUVkdfQ09MT1IxX0JJUwkJCTB4 MTA4CisjZGVmaW5lIFRWR19DT0wxX0JMVUUoeCkJCSh4KQorCisjZGVmaW5lIFRWR19DT0xPUjIJ CQkweDEwYworI2RlZmluZSBUVkdfQ09MMl9HUkVFTih4KQkJKCh4KSA8PCAxMikKKyNkZWZpbmUg VFZHX0NPTDJfUkVEKHgpCQkJKHgpCisKKyNkZWZpbmUgVFZHX0NPTE9SMl9CSVMJCQkweDExMAor I2RlZmluZSBUVkdfQ09MMl9CTFVFKHgpCQkoeCkKKworI2RlZmluZSBUVkdfU1RTCQkJCTB4MTE0 CisjZGVmaW5lIFRWR19TVFNfQ1RMCQkJMHgxNDQKKyNkZWZpbmUgVFZHX1NUU19DTFIJCQkweDE2 NAorI2RlZmluZSBUVkdfU1RTX0ZMQUcJCQkweDE4NAorI2RlZmluZSBUVkdfU1RTX1JVTk5JTkcJ CQlCSVQoMCkKKworI2RlZmluZSBTVFNfQ1RMX0VER0UoZSkJCQkoKGUpIDw8IDE2KQorCisjZGVm aW5lIERQSFlfTEFORVNfTUFQCQkJMHgxOTgKKyNkZWZpbmUgREFUX1JFTUFQX0NGRyhiLCBsKQkJ KChsKSA8PCAoKGIpICogOCkpCisKKyNkZWZpbmUgRFBJX0lSUV9FTgkJCTB4MWEwCisjZGVmaW5l IERQSV9JUlFfQ0xSCQkJMHgxYTQKKyNkZWZpbmUgRFBJX0lSUV9TVFMJCQkweDFhOAorI2RlZmlu ZSBQSVhFTF9CVUZfT1ZFUkZMT1cJCUJJVCgwKQorCisjZGVmaW5lIERQSV9DRkcJCQkJMHgxYWMK KyNkZWZpbmUgRFBJX0NGR19GSUZPX0RFUFRIKHgpCQkoKHgpID4+IDE2KQorI2RlZmluZSBEUElf Q0ZHX0ZJRk9fTEVWRUwoeCkJCSgoeCkgJiBHRU5NQVNLKDE1LCAwKSkKKworI2RlZmluZSBURVNU X0dFTkVSSUMJCQkweDFmMAorI2RlZmluZSBURVNUX1NUQVRVUyh4KQkJCSgoeCkgPj4gMTYpCisj ZGVmaW5lIFRFU1RfQ1RSTCh4KQkJCSh4KQorCisjZGVmaW5lIElEX1JFRwkJCQkweDFmYworI2Rl ZmluZSBSRVZfVkVORE9SX0lEKHgpCQkoKCh4KSAmIEdFTk1BU0soMzEsIDIwKSkgPj4gMjApCisj ZGVmaW5lIFJFVl9QUk9EVUNUX0lEKHgpCQkoKCh4KSAmIEdFTk1BU0soMTksIDEyKSkgPj4gMTIp CisjZGVmaW5lIFJFVl9IVyh4KQkJCSgoKHgpICYgR0VOTUFTSygxMSwgOCkpID4+IDgpCisjZGVm aW5lIFJFVl9NQUpPUih4KQkJCSgoKHgpICYgR0VOTUFTSyg3LCA0KSkgPj4gNCkKKyNkZWZpbmUg UkVWX01JTk9SKHgpCQkJKCh4KSAmIEdFTk1BU0soMywgMCkpCisKKyNkZWZpbmUgRFNJX09VVFBV VF9QT1JUCQkJMAorI2RlZmluZSBEU0lfSU5QVVRfUE9SVChpbnB1dGlkKQkJKDEgKyAoaW5wdXRp ZCkpCisKK3N0cnVjdCBjZG5zX2RzaV9vdXRwdXQgeworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlOworfTsKKworZW51bSBjZG5zX2RzaV9pbnB1dF9pZCB7CisJQ0ROU19TRElfSU5QVVQsCisJ Q0ROU19EUElfSU5QVVQsCisJQ0ROU19EU0NfSU5QVVQsCit9OworCitzdHJ1Y3QgY2Ruc19kc2lf aW5wdXQgeworCWVudW0gY2Ruc19kc2lfaW5wdXRfaWQgaWQ7CisJc3RydWN0IGRybV9icmlkZ2Ug YnJpZGdlOworfTsKKworc3RydWN0IGNkbnNfZHNpIHsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBi YXNlOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgaW5wdXQ7 CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCBvdXRwdXQ7CisJdW5zaWduZWQgaW50IGRpcmVjdF9j bWRfZmlmb19kZXB0aDsKKwl1bnNpZ25lZCBpbnQgcnhfZmlmb19kZXB0aDsKKwlzdHJ1Y3QgY29t cGxldGlvbiBkaXJlY3RfY21kX2NvbXA7CisJc3RydWN0IGNsayAqZHNpX3BfY2xrOworCXN0cnVj dCByZXNldF9jb250cm9sICpkc2lfcF9yc3Q7CisJc3RydWN0IGNsayAqZHNpX3N5c19jbGs7CisJ Ym9vbCBsaW5rX2luaXRpYWxpemVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Ruc19k c2kgKmlucHV0X3RvX2RzaShzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0KQoreworCXJldHVy biBjb250YWluZXJfb2YoaW5wdXQsIHN0cnVjdCBjZG5zX2RzaSwgaW5wdXQpOworfQorCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBjZG5zX2RzaSAqdG9fY2Ruc19kc2koc3RydWN0IG1pcGlfZHNpX2hv c3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBzdHJ1Y3QgY2Ruc19kc2ks IGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqCiticmlk Z2VfdG9fY2Ruc19kc2lfaW5wdXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGNkbnNfZHNpX2lucHV0LCBicmlkZ2UpOwor fQorCitzdGF0aWMgaW50IGNkbnNfZHNpX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gYnJpZGdlX3RvX2Nk bnNfZHNpX2lucHV0KGJyaWRnZSk7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBpbnB1dF90b19k c2koaW5wdXQpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91dHB1 dDsKKworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShicmlkZ2UtPmRldiwgRFJJVkVSX0FU T01JQykpIHsKKwkJZGV2X2Vycihkc2ktPmJhc2UuZGV2LAorCQkJImNkbnMtZHNpIGRyaXZlciBp cyBvbmx5IGNvbXBhdGlibGUgd2l0aCBEUk0gZGV2aWNlcyBzdXBwb3J0aW5nIGF0b21pYyB1cGRh dGVzIik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIGRybV9icmlkZ2VfYXR0 YWNoKGJyaWRnZS0+ZW5jb2Rlciwgb3V0cHV0LT5icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRp YyBlbnVtIGRybV9tb2RlX3N0YXR1cworY2Ruc19kc2lfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSBicmlkZ2VfdG9fY2Ru c19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGlucHV0X3RvX2Rz aShpbnB1dCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0 OworCWludCBicHA7CisKKwkvKgorCSAqIFZGUF9EU0kgc2hvdWxkIGJlIGxlc3MgdGhhbiBWRlBf RFBJIGFuZCBWRlBfRFNJIHNob3VsZCBiZSBhdAorCSAqIGxlYXN0IDEuCisJICovCisJaWYgKG1v ZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCA8IDIpCisJCXJldHVybiBNT0RFX1ZfSUxMRUdB TDsKKworCS8qIFZTQV9EU0kgPSBWU0FfRFBJIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDIuICovCisJ aWYgKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0IDwgMikKKwkJcmV0dXJuIE1P REVfVl9JTExFR0FMOworCisJLyogSEFDVCBtdXN0IGJlIDMyLWJpdHMgYWxpZ25lZC4gKi8KKwli cHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKG91dHB1dC0+ZGV2LT5mb3JtYXQpOwor CWlmICgobW9kZS0+aGRpc3BsYXkgKiBicHApICUgMzIpCisJCXJldHVybiBNT0RFX0hfSUxMRUdB TDsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgdm9pZCBjZG5zX2RzaV9icmlkZ2Vf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBjZG5zX2RzaV9p bnB1dCAqaW5wdXQgPSBicmlkZ2VfdG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3Qg Y2Ruc19kc2kgKmRzaSA9IGlucHV0X3RvX2RzaShpbnB1dCk7CisJdTMyIHZhbDsKKworCXZhbCA9 IHJlYWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisJdmFsICY9IH4oSUZfVklE X1NFTEVDVF9NQVNLIHwgSUZfVklEX01PREUgfCBWSURfRU4gfCBIT1NUX0VPVF9HRU4gfAorCQkg RElTUF9FT1RfR0VOKTsKKwl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9D VEwpOworCisJdmFsID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKSAmIH5JRl9FTihp bnB1dC0+aWQpOworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7CisJcG1f cnVudGltZV9wdXQoZHNpLT5iYXNlLmRldik7Cit9CisKKyNkZWZpbmUgRFNJX0hCUF9GUkFNRV9P VkVSSEVBRAkJMTIKKyNkZWZpbmUgRFNJX0hTQV9GUkFNRV9PVkVSSEVBRAkJMTQKKyNkZWZpbmUg RFNJX0hGUF9GUkFNRV9PVkVSSEVBRAkJNgorI2RlZmluZSBEU0lfSFNTX1ZTU19WU0VfRlJBTUVf T1ZFUkhFQUQJNAorI2RlZmluZSBEU0lfQkxBTktJTkdfRlJBTUVfT1ZFUkhFQUQJNgorI2RlZmlu ZSBEU0lfTlVMTF9GUkFNRV9PVkVSSEVBRAkJNgorI2RlZmluZSBEU0lfRU9UX1BLVF9TSVpFCQk0 CisKKyNkZWZpbmUgUkVHX1dBS0VVUF9USU1FX05TCQk4MDAKKyNkZWZpbmUgRFBIWV9QTExfUkFU RV9IWgkJMTA4MDAwMDAwCisKK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2luaXRfbGluayhzdHJ1Y3Qg Y2Ruc19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNp LT5vdXRwdXQ7CisJdW5zaWduZWQgbG9uZyBzeXNjbGtfcGVyaW9kLCB1bHBvdXQ7CisJdTMyIHZh bDsKKwlpbnQgaTsKKworCWlmIChkc2ktPmxpbmtfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwor CXZhbCA9IDA7CisJZm9yIChpID0gMTsgaSA8IG91dHB1dC0+ZGV2LT5sYW5lczsgaSsrKQorCQl2 YWwgfD0gREFUQV9MQU5FX0VOKGkpOworCisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykpCisJCXZhbCB8PSBDTEtfQ09OVElOVU9V UzsKKworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RMKTsKKworCS8q IFVMUE9VVCBzaG91bGQgYmUgc2V0IHRvIDFtcyBhbmQgaXMgZXhwcmVzc2VkIGluIHN5c2NsayBj eWNsZXMuICovCisJc3lzY2xrX3BlcmlvZCA9IE5TRUNfUEVSX1NFQyAvIGNsa19nZXRfcmF0ZShk c2ktPmRzaV9zeXNfY2xrKTsKKwl1bHBvdXQgPSBESVZfUk9VTkRfVVAoTlNFQ19QRVJfTVNFQywg c3lzY2xrX3BlcmlvZCk7CisJd3JpdGVsKENMS19MQU5FX1VMUE9VVF9USU1FKHVscG91dCkgfCBE QVRBX0xBTkVfVUxQT1VUX1RJTUUodWxwb3V0KSwKKwkgICAgICAgZHNpLT5yZWdzICsgTUNUTF9V TFBPVVRfVElNRSk7CisKKwl3cml0ZWwoTElOS19FTiwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RB VEFfQ1RMKTsKKworCXZhbCA9IENMS19MQU5FX0VOIHwgUExMX1NUQVJUOworCWZvciAoaSA9IDA7 IGkgPCBvdXRwdXQtPmRldi0+bGFuZXM7IGkrKykKKwkJdmFsIHw9IERBVEFfTEFORV9TVEFSVChp KTsKKworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7CisKKwluZGVsYXko MTAwKTsKKwlkc2ktPmxpbmtfaW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBj ZG5zX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3Ry dWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9IGJyaWRnZV90b19jZG5zX2RzaV9pbnB1dChicmlk Z2UpOworCXVuc2lnbmVkIGxvbmcgZHBoeV9wbGxfcGVyaW9kLCB0eF9ieXRlX3BlcmlvZCwgZHBo eV9wbGxfcmF0ZTsKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGlucHV0X3RvX2RzaShpbnB1dCk7 CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0OworCXUzMiBo c2l6ZTAsIGhzYSwgaGxpbmUsIHRtcCwgcmVnX3dha2V1cCwgZGl2OworCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlOworCWludCBicHAsIG5sYW5lczsKKworCWlmIChXQVJOX09OKHBtX3J1 bnRpbWVfZ2V0X3N5bmMoZHNpLT5iYXNlLmRldikgPCAwKSkKKwkJcmV0dXJuOworCisJY2Ruc19k c2lfaW5pdF9saW5rKGRzaSk7CisKKwltb2RlID0gJmJyaWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+c3Rh dGUtPmFkanVzdGVkX21vZGU7CisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChv dXRwdXQtPmRldi0+Zm9ybWF0KTsKKwlubGFuZXMgPSBvdXRwdXQtPmRldi0+bGFuZXM7CisKKwlp ZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVM U0UpCisJCXRtcCA9IG1vZGUtPmNydGNfaHRvdGFsIC0gbW9kZS0+Y3J0Y19oc3luY19lbmQ7CisJ ZWxzZQorCQl0bXAgPSBtb2RlLT5jcnRjX2h0b3RhbCAtIG1vZGUtPmNydGNfaHN5bmNfc3RhcnQ7 CisJdG1wID0gRElWX1JPVU5EX1VQKHRtcCAqIGJwcCwgOCk7CisJdG1wID0gdG1wIDwgRFNJX0hC UF9GUkFNRV9PVkVSSEVBRCA/IDAgOiB0bXAgLSBEU0lfSEJQX0ZSQU1FX09WRVJIRUFEOworCWhz aXplMCA9IEhCUF9MRU4odG1wKTsKKworCXRtcCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBt b2RlLT5jcnRjX2hkaXNwbGF5OworCXRtcCA9IERJVl9ST1VORF9VUCh0bXAgKiBicHAsIDgpOwor CXRtcCA9IHRtcCA8IERTSV9IRlBfRlJBTUVfT1ZFUkhFQUQgPyAwIDogdG1wIC0gRFNJX0hGUF9G UkFNRV9PVkVSSEVBRDsKKwloc2l6ZTAgfD0gSEZQX0xFTih0bXApOworCisJaWYgKG91dHB1dC0+ ZGV2LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKQorCQl0bXAg PSBtb2RlLT5jcnRjX2hzeW5jX2VuZCAtIG1vZGUtPmNydGNfaHN5bmNfc3RhcnQ7CisJZWxzZQor CQl0bXAgPSAwOworCXRtcCA9IERJVl9ST1VORF9VUCh0bXAgKiBicHAsIDgpOworCXRtcCA9IHRt cCA8IERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQgPyAwIDogdG1wIC0gRFNJX0hTQV9GUkFNRV9PVkVS SEVBRDsKKwloc2EgPSB0bXA7CisJaHNpemUwIHw9IEhTQV9MRU4odG1wKTsKKworCXdyaXRlbCho c2l6ZTAsIGRzaS0+cmVncyArIFZJRF9IU0laRTEpOworCXdyaXRlbChESVZfUk9VTkRfVVAobW9k ZS0+Y3J0Y19oZGlzcGxheSAqIGJwcCwgOCksCisJICAgICAgIGRzaS0+cmVncyArIFZJRF9IU0la RTIpOworCisJd3JpdGVsKFZCUF9MRU4obW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3Zz eW5jX2VuZCAtIDEpIHwKKwkgICAgICAgVkZQX0xFTihtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0g bW9kZS0+Y3J0Y192ZGlzcGxheSkgfAorCSAgICAgICBWU0FfTEVOKG1vZGUtPmNydGNfdnN5bmNf ZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCArIDEpLAorCSAgICAgICBkc2ktPnJlZ3MgKyBW SURfVlNJWkUxKTsKKwl3cml0ZWwobW9kZS0+Y3J0Y192ZGlzcGxheSwgZHNpLT5yZWdzICsgVklE X1ZTSVpFMik7CisKKwlobGluZSA9IERJVl9ST1VORF9VUChtb2RlLT5jcnRjX2h0b3RhbCAqIGJw cCwgOCk7CisJdG1wID0gaGxpbmUgLQorCSAgICAgIChoc2EgKyBEU0lfQkxBTktJTkdfRlJBTUVf T1ZFUkhFQUQgKyBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEKTsKKwl3cml0ZWwoQkxLX0xJTkVfUFVM U0VfUEtUX0xFTih0bXApLCBkc2ktPnJlZ3MgKyBWSURfQkxLU0laRTIpOworCWlmIChvdXRwdXQt PmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJd3Jp dGVsKE1BWF9MSU5FX0xJTUlUKHRtcCAtIERTSV9OVUxMX0ZSQU1FX09WRVJIRUFEKSwKKwkJICAg ICAgIGRzaS0+cmVncyArIFZJRF9WQ0FfU0VUVElORzIpOworCisJdG1wID0gaGxpbmUgLQorCSAg ICAgIChEU0lfSFNTX1ZTU19WU0VfRlJBTUVfT1ZFUkhFQUQgKyBEU0lfQkxBTktJTkdfRlJBTUVf T1ZFUkhFQUQpOworCXdyaXRlbChCTEtfTElORV9FVkVOVF9QS1RfTEVOKHRtcCksIGRzaS0+cmVn cyArIFZJRF9CTEtTSVpFMSk7CisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJ X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQl3cml0ZWwoTUFYX0xJTkVfTElNSVQodG1w IC0gRFNJX05VTExfRlJBTUVfT1ZFUkhFQUQpLAorCQkgICAgICAgZHNpLT5yZWdzICsgVklEX1ZD QV9TRVRUSU5HMik7CisKKwl0bXAgPSBESVZfUk9VTkRfVVAoaGxpbmUsIG5sYW5lcykgLSBESVZf Uk9VTkRfVVAoaHNhLCBubGFuZXMpOworCisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQpKQorCQl0bXAgLT0gRElWX1JPVU5EX1VQKERTSV9F T1RfUEtUX1NJWkUsIG5sYW5lcyk7CisKKwlkcGh5X3BsbF9yYXRlID0gKG1vZGUtPmNydGNfY2xv Y2sgKiAxMDAwICogYnBwKSAvIChubGFuZXMgKiA4KTsKKwkvKgorCSAqIFRPRE86IE9uY2Ugd2Ug aGF2ZSBhIHNldHVwIHdpdGggYSBEUEhZIGJsb2NrLCB3ZSBzaG91bGQgY29uZmlndXJlCisJICog dGhlIERQSFkgUExMIHRvIGdlbmVyYXRlIHNvbWV0aGluZyBjbG9zZSB0byB3aGF0IHdlIG5lZWQu IFVudGlsCisJICogdGhlbiwgd2UgY29uc2lkZXIgdGhlIERQSFkgYmxvY2sgYWx3YXlzIG91dHB1 dHMgZXhhY3RseSB0aGUgcmF0ZQorCSAqIHdlIGV4cGVjdC4KKwkgKi8KKwlkcGh5X3BsbF9wZXJp b2QgPSBOU0VDX1BFUl9TRUMgLyBkcGh5X3BsbF9yYXRlOworCXR4X2J5dGVfcGVyaW9kID0gKGRw aHlfcGxsX3BlcmlvZCAqIDIpIC8gODsKKwlyZWdfd2FrZXVwID0gUkVHX1dBS0VVUF9USU1FX05T IC8gZHBoeV9wbGxfcGVyaW9kOworCXdyaXRlbChSRUdfV0FLRVVQX1RJTUUocmVnX3dha2V1cCkg fCBSRUdfTElORV9EVVJBVElPTih0bXApLAorCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfRFBIWV9U SU1FKTsKKworCS8qCisJICogSFNUWCBhbmQgTFBSWCB0aW1lb3V0cyBhcmUgYm90aCBleHByZXNz ZWQgaW4gVFggYnl0ZSBjbGsgY3ljbGVzIGFuZAorCSAqIGJvdGggc2hvdWxkIGJlIHNldCB0byBh dCBsZWFzdCB0aGUgdGltZSBpdCB0YWtlcyB0byB0cmFuc21pdCBhCisJICogZnJhbWUuCisJICov CisJdG1wID0gTlNFQ19QRVJfU0VDIC8gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisJdG1wIC89 IHR4X2J5dGVfcGVyaW9kOworCisJZm9yIChkaXYgPSAwOyBkaXYgPD0gQ0xLX0RJVl9NQVg7IGRp disrKSB7CisJCWlmICh0bXAgPD0gSFNUWF9USU1FT1VUX01BWCkKKwkJCWJyZWFrOworCisJCXRt cCA+Pj0gMTsKKwl9CisKKwlpZiAodG1wID4gSFNUWF9USU1FT1VUX01BWCkKKwkJdG1wID0gSFNU WF9USU1FT1VUX01BWDsKKworCXdyaXRlbChDTEtfRElWKGRpdikgfCBIU1RYX1RJTUVPVVQodG1w KSwKKwkgICAgICAgZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQxKTsKKworCXdyaXRlbChM UFJYX1RJTUVPVVQodG1wKSwgZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQyKTsKKworCWlm IChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJc3dp dGNoIChvdXRwdXQtPmRldi0+Zm9ybWF0KSB7CisJCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoK KwkJCXRtcCA9IFZJRF9QSVhFTF9NT0RFX1JHQjg4OCB8CisJCQkgICAgICBWSURfREFUQVRZUEUo TUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8yNCk7CisJCQlicmVhazsKKworCQljYXNlIE1J UElfRFNJX0ZNVF9SR0I2NjY6CisJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I2NjYgfAorCQkJ ICAgICAgVklEX0RBVEFUWVBFKE1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xOCk7CisJCQli cmVhazsKKworCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQkJdG1wID0gVklE X1BJWEVMX01PREVfUkdCNjY2X1BBQ0tFRCB8CisJCQkgICAgICBWSURfREFUQVRZUEUoTUlQSV9E U0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8xOCk7CisJCQlicmVhazsKKworCQljYXNlIE1JUElfRFNJ X0ZNVF9SR0I1NjU6CisJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I1NjUgfAorCQkJICAgICAg VklEX0RBVEFUWVBFKE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTYpOworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZHNpLT5iYXNlLmRldiwgIlVuc3VwcG9ydGVkIERT SSBmb3JtYXRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKG91dHB1dC0+ZGV2LT5tb2Rl X2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKQorCQkJdG1wIHw9IFNZTkNf UFVMU0VfQUNUSVZFIHwgU1lOQ19QVUxTRV9IT1JJWk9OVEFMOworCisJCXRtcCB8PSBSRUdfQkxL TElORV9NT0RFKFJFR19CTEtfTU9ERV9CTEFOS0lOR19QS1QpIHwKKwkJICAgICAgIFJFR19CTEtF T0xfTU9ERShSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUKSB8CisJCSAgICAgICBSRUNPVkVSWV9N T0RFKFJFQ09WRVJZX01PREVfTkVYVF9IU1lOQykgfAorCQkgICAgICAgVklEX0lHTk9SRV9NSVNT X1ZTWU5DOworCisJCXdyaXRlbCh0bXAsIGRzaS0+cmVncyArIFZJRF9NQUlOX0NUTCk7CisJfQor CisJdG1wID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKwl0bXAgJj0g fihJRl9WSURfU0VMRUNUX01BU0sgfCBIT1NUX0VPVF9HRU4gfCBJRl9WSURfTU9ERSk7CisKKwlp ZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfRU9UX1BBQ0tFVCkp CisJCXRtcCB8PSBIT1NUX0VPVF9HRU47CisKKwlpZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9NT0RFX1ZJREVPKQorCQl0bXAgfD0gSUZfVklEX01PREUgfCBJRl9WSURfU0VM RUNUKGlucHV0LT5pZCkgfCBWSURfRU47CisKKwl3cml0ZWwodG1wLCBkc2ktPnJlZ3MgKyBNQ1RM X01BSU5fREFUQV9DVEwpOworCisJdG1wID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VO KSB8IElGX0VOKGlucHV0LT5pZCk7CisJd3JpdGVsKHRtcCwgZHNpLT5yZWdzICsgTUNUTF9NQUlO X0VOKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGNkbnNfZHNp X2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gY2Ruc19kc2lfYnJpZGdlX2F0dGFjaCwKKwku bW9kZV92YWxpZCA9IGNkbnNfZHNpX2JyaWRnZV9tb2RlX3ZhbGlkLAorCS5kaXNhYmxlID0gY2Ru c19kc2lfYnJpZGdlX2Rpc2FibGUsCisJLmVuYWJsZSA9IGNkbnNfZHNpX2JyaWRnZV9lbmFibGUs Cit9OworCitzdGF0aWMgaW50IGNkbnNfZHNpX2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAq aG9zdCwKKwkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2Ru c19kc2kgKmRzaSA9IHRvX2NkbnNfZHNpKGhvc3QpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQg Km91dHB1dCA9ICZkc2ktPm91dHB1dDsKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0g JmRzaS0+aW5wdXQ7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCByZXQ7CisKKwkvKgor CSAqIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBjb25uZWN0aW5nIHNldmVyYWwgRFNJIGRl dmljZXMgdG8gdGhlCisJICogc2FtZSBob3N0LiBJbiBvcmRlciB0byBzdXBwb3J0IHRoYXQgd2Un ZCBuZWVkIHRoZSBEUk0gYnJpZGdlCisJICogZnJhbWV3b3JrIHRvIGFsbG93IGR5bmFtaWMgcmVj b25maWd1cmF0aW9uIG9mIHRoZSBicmlkZ2UgY2hhaW4uCisJICovCisJaWYgKG91dHB1dC0+ZGV2 KQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogV2UgZG8gbm90IHN1cHBvcnQgYnVyc3QgbW9kZSB5 ZXQuICovCisJaWYgKGRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1Qp CisJCXJldHVybiAtRU5PVFNVUFA7CisKKwkvKgorCSAqIFRoZSBob3N0IDwtPiBkZXZpY2UgbGlu ayBtaWdodCBiZSBkZXNjcmliZWQgdXNpbmcgYW4gT0YtZ3JhcGgKKwkgKiByZXByZXNlbnRhdGlv biwgaW4gdGhpcyBjYXNlIHdlIGV4dHJhY3QgdGhlIGRldmljZSBvZl9ub2RlIGZyb20KKwkgKiB0 aGlzIHJlcHJlc2VudGF0aW9uLCBvdGhlcndpc2Ugd2UgdXNlIGRzaWRldi0+ZGV2Lm9mX25vZGUg d2hpY2gKKwkgKiBzaG91bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgY29yZS4KKwkgKi8KKwlu cCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmJhc2UuZGV2LT5vZl9ub2RlLCBEU0lf T1VUUFVUX1BPUlQsCisJCQkJICAgICAgZGV2LT5jaGFubmVsKTsKKwlpZiAoIW5wKQorCQlucCA9 IG9mX25vZGVfZ2V0KGRldi0+ZGV2Lm9mX25vZGUpOworCisJcGFuZWwgPSBvZl9kcm1fZmluZF9w YW5lbChucCk7CisJaWYgKHBhbmVsKSB7CisJCWJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRk KHBhbmVsLCBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKwl9IGVsc2UgeworCQlicmlkZ2UgPSBv Zl9kcm1fZmluZF9icmlkZ2UoZGV2LT5kZXYub2Zfbm9kZSk7CisJCWlmICghYnJpZGdlKQorCQkJ YnJpZGdlID0gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlvZl9ub2RlX3B1dChucCk7CisKKwlp ZiAoSVNfRVJSKGJyaWRnZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihicmlkZ2UpOworCQlkZXZfZXJy KGhvc3QtPmRldiwgImZhaWxlZCB0byBhZGQgRFNJIGRldmljZSAlcyAoZXJyID0gJWQpIiwKKwkJ CWRldi0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvdXRwdXQtPmRldiA9IGRl djsKKwlvdXRwdXQtPmJyaWRnZSA9IGJyaWRnZTsKKwlvdXRwdXQtPnBhbmVsID0gcGFuZWw7CisK KwkvKgorCSAqIFRoZSBEU0kgb3V0cHV0IGhhcyBiZWVuIHByb3Blcmx5IGNvbmZpZ3VyZWQsIHdl IGNhbiBub3cgc2FmZWx5CisJICogcmVnaXN0ZXIgdGhlIGlucHV0IHRvIHRoZSBicmlkZ2UgZnJh bWV3b3JrIHNvIHRoYXQgaXQgY2FuIHRha2UgcGxhY2UKKwkgKiBpbiBhIGRpc3BsYXkgcGlwZWxp bmUuCisJICovCisJZHJtX2JyaWRnZV9hZGQoJmlucHV0LT5icmlkZ2UpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpo b3N0LAorCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5z X2RzaSAqZHNpID0gdG9fY2Ruc19kc2koaG9zdCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAq b3V0cHV0ID0gJmRzaS0+b3V0cHV0OworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSAm ZHNpLT5pbnB1dDsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZpbnB1dC0+YnJpZGdlKTsKKwlpZiAo b3V0cHV0LT5wYW5lbCkKKwkJZHJtX3BhbmVsX2JyaWRnZV9yZW1vdmUob3V0cHV0LT5icmlkZ2Up OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjZG5zX2RzaV9pbnRlcnJ1 cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGRhdGE7 CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisJdTMyIGZsYWcsIGN0bDsKKworCWZsYWcg PSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19GTEFHKTsKKwlpZiAoZmxhZykgewor CQljdGwgPSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCQljdGwgJj0g fmZsYWc7CisJCXdyaXRlbChjdGwsIGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTX0NUTCk7CisJ CWNvbXBsZXRlKCZkc2ktPmRpcmVjdF9jbWRfY29tcCk7CisJCXJldCA9IElSUV9IQU5ETEVEOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNkbnNfZHNpX3RyYW5zZmVy KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lf bXNnICptc2cpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSB0b19jZG5zX2RzaShob3N0KTsK Kwl1MzIgY21kLCBzdHMsIHZhbCwgd2FpdCA9IFdSSVRFX0NPTVBMRVRFRCwgY3RsID0gMDsKKwlz dHJ1Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0LCBpLCB0eF9sZW4sIHJ4X2xl bjsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoaG9zdC0+ZGV2KTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCWNkbnNfZHNpX2luaXRfbGluayhkc2kpOworCisJcmV0ID0g bWlwaV9kc2lfY3JlYXRlX3BhY2tldCgmcGFja2V0LCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8g b3V0OworCisJdHhfbGVuID0gbXNnLT50eF9idWYgPyBtc2ctPnR4X2xlbiA6IDA7CisJcnhfbGVu ID0gbXNnLT5yeF9idWYgPyBtc2ctPnJ4X2xlbiA6IDA7CisKKwkvKiBGb3IgcmVhZCBvcGVyYXRp b25zLCB0aGUgbWF4aW11bSBUWCBsZW4gaXMgMi4gKi8KKwlpZiAocnhfbGVuICYmIHR4X2xlbiA+ IDIpIHsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUWCBsZW4g aXMgbGltaXRlZCBieSB0aGUgQ01EIEZJRk8gZGVwdGguICovCisJaWYgKHR4X2xlbiA+IGRzaS0+ ZGlyZWN0X2NtZF9maWZvX2RlcHRoKSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7 CisJfQorCisJLyogUlggbGVuIGlzIGxpbWl0ZWQgYnkgdGhlIFJYIEZJRk8gZGVwdGguICovCisJ aWYgKHJ4X2xlbiA+IGRzaS0+cnhfZmlmb19kZXB0aCkgeworCQlyZXQgPSAtRU5PVFNVUFA7CisJ CWdvdG8gb3V0OworCX0KKworCWNtZCA9IENNRF9TSVpFKHR4X2xlbikgfCBDTURfVkNIQU5fSUQo bXNnLT5jaGFubmVsKSB8CisJICAgICAgQ01EX0RBVEFUWVBFKG1zZy0+dHlwZSk7CisKKwlpZiAo bXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNKQorCQljbWQgfD0gQ01EX0xQX0VOOwor CisJaWYgKG1pcGlfZHNpX3BhY2tldF9mb3JtYXRfaXNfbG9uZyhtc2ctPnR5cGUpKQorCQljbWQg fD0gQ01EX0xPTkc7CisKKwlpZiAocnhfbGVuKSB7CisJCWNtZCB8PSBSRUFEX0NNRDsKKwkJd2Fp dCA9IFJFQURfQ09NUExFVEVEX1dJVEhfRVJSIHwgUkVBRF9DT01QTEVURUQ7CisJCWN0bCA9IFJF QURfRU4gfCBCVEFfRU47CisJfSBlbHNlIGlmIChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JF UV9BQ0spIHsKKwkJY21kIHw9IEJUQV9SRVE7CisJCXdhaXQgPSBBQ0tfV0lUSF9FUlJfUkNWRCB8 IEFDS19SQ1ZEOworCQljdGwgPSBCVEFfRU47CisJfQorCisJd3JpdGVsKHJlYWRsKGRzaS0+cmVn cyArIE1DVExfTUFJTl9EQVRBX0NUTCkgfCBjdGwsCisJICAgICAgIGRzaS0+cmVncyArIE1DVExf TUFJTl9EQVRBX0NUTCk7CisKKwl3cml0ZWwoY21kLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX01B SU5fU0VUVElOR1MpOworCisJZm9yIChpID0gMDsgaSA8IHR4X2xlbjsgaSArPSA0KSB7CisJCWNv bnN0IHU4ICpidWYgPSBtc2ctPnR4X2J1ZjsKKwkJaW50IGo7CisKKwkJdmFsID0gMDsKKwkJZm9y IChqID0gMDsgaiA8IDQgJiYgaiArIGkgPCB0eF9sZW47IGorKykKKwkJCXZhbCB8PSAodTMyKWJ1 ZltpICsgal0gPDwgKDggKiBqKTsKKworCQl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBESVJFQ1Rf Q01EX1dSREFUQSk7CisJfQorCisJLyogQ2xlYXIgc3RhdHVzIGZsYWdzIGJlZm9yZSBzZW5kaW5n IHRoZSBjb21tYW5kLiAqLworCXdyaXRlbCh3YWl0LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NU U19DTFIpOworCXdyaXRlbCh3YWl0LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOwor CXJlaW5pdF9jb21wbGV0aW9uKCZkc2ktPmRpcmVjdF9jbWRfY29tcCk7CisJd3JpdGVsKDAsIGRz aS0+cmVncyArIERJUkVDVF9DTURfU0VORCk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJmRzaS0+ZGlyZWN0X2NtZF9jb21wLAorCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAp KTsKKworCXN0cyA9IHJlYWRsKGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTKTsKKwl3cml0ZWwo d2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ0xSKTsKKwl3cml0ZWwoMCwgZHNpLT5y ZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RMKTsKKworCXdyaXRlbChyZWFkbChkc2ktPnJlZ3MgKyBN Q1RMX01BSU5fREFUQV9DVEwpICYgfmN0bCwKKwkgICAgICAgZHNpLT5yZWdzICsgTUNUTF9NQUlO X0RBVEFfQ1RMKTsKKworCS8qIFdlIGRpZCBub3QgcmVjZWl2ZSB0aGUgZXZlbnRzIHdlIHdlcmUg d2FpdGluZyBmb3IuICovCisJaWYgKCEoc3RzICYgd2FpdCkpIHsKKwkJcmV0ID0gLUVUSU1FRE9V VDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUkVBRCBvZiBXUklURSB3aXRoIEFDSyBmYWlsZWQu ICovCisJaWYgKHN0cyAmIChSRUFEX0NPTVBMRVRFRF9XSVRIX0VSUiB8IEFDS19XSVRIX0VSUl9S Q1ZEKSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgcnhfbGVuOyBpICs9IDQpIHsKKwkJdTggKmJ1ZiA9IG1zZy0+cnhfYnVmOworCQlpbnQgajsK KworCQl2YWwgPSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1JEREFUQSk7CisJCWZvciAo aiA9IDA7IGogPCA0ICYmIGogKyBpIDwgcnhfbGVuOyBqKyspCisJCQlidWZbaSArIGpdID0gdmFs ID4+ICg4ICogaik7CisJfQorCitvdXQ6CisJcG1fcnVudGltZV9wdXQoaG9zdC0+ZGV2KTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGNk bnNfZHNpX29wcyA9IHsKKwkuYXR0YWNoID0gY2Ruc19kc2lfYXR0YWNoLAorCS5kZXRhY2ggPSBj ZG5zX2RzaV9kZXRhY2gsCisJLnRyYW5zZmVyID0gY2Ruc19kc2lfdHJhbnNmZXIsCit9OworCitz dGF0aWMgaW50IGNkbnNfZHNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGNkbnNfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJlc2V0X2NvbnRyb2xf ZGVhc3NlcnQoZHNpLT5kc2lfcF9yc3QpOworCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRzaV9w X2Nsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZHNpX3N5c19jbGspOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRzaV9zeXNfY2xrKTsKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHNpLT5kc2lfcF9jbGspOworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+ZHNpX3Bf cnN0KTsKKwlkc2ktPmxpbmtfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIFVOSVZFUlNBTF9ERVZfUE1fT1BTKGNkbnNfZHNpX3BtX29wcywgY2Ruc19kc2lfc3Vz cGVuZCwgY2Ruc19kc2lfcmVzdW1lLAorCQkJICAgIE5VTEwpOworCitzdGF0aWMgaW50IGNkbnNf ZHNpX2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBj ZG5zX2RzaSAqZHNpOworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQ7CisJc3RydWN0IHJl c291cmNlICpyZXM7CisJaW50IHJldCwgaXJxOworCXUzMiB2YWw7CisKKwlkc2kgPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2kpOwor CisJaW5wdXQgPSAmZHNpLT5pbnB1dDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKQorCQlyZXR1cm4g UFRSX0VSUihkc2ktPnJlZ3MpOworCisJZHNpLT5kc2lfcF9jbGsgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgImRzaV9wX2NsayIpOworCWlmIChJU19FUlIoZHNpLT5kc2lfcF9jbGspKQorCQly ZXR1cm4gUFRSX0VSUihkc2ktPmRzaV9wX2Nsayk7CisKKwlkc2ktPmRzaV9wX3JzdCA9IGRldm1f cmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKCZwZGV2LT5kZXYsCisJCQkJCQkJ CSJkc2lfcF9yc3QiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNpX3BfcnN0KSkKKwkJcmV0dXJuIFBU Ul9FUlIoZHNpLT5kc2lfcF9yc3QpOworCisJZHNpLT5kc2lfc3lzX2NsayA9IGRldm1fY2xrX2dl dCgmcGRldi0+ZGV2LCAiZHNpX3N5c19jbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNpX3N5c19j bGspKQorCQlyZXR1cm4gUFRSX0VSUihkc2ktPmRzaV9zeXNfY2xrKTsKKworCWlycSA9IHBsYXRm b3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2lfcF9jbGspOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2lfc3lzX2Nsayk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGlzYWJsZV9wY2xrOworCisJdmFsID0gcmVhZGwoZHNp LT5yZWdzICsgSURfUkVHKTsKKwlpZiAoUkVWX1ZFTkRPUl9JRCh2YWwpICE9IDB4Y2FkKSB7CisJ CWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgdmVuZG9yIGlkXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJdmFsID0gcmVhZGwoZHNpLT5yZWdzICsgSVBfQ09ORik7CisJZHNpLT5k aXJlY3RfY21kX2ZpZm9fZGVwdGggPSAxIDw8IChESVJDTURfRklGT19ERVBUSCh2YWwpICsgMik7 CisJZHNpLT5yeF9maWZvX2RlcHRoID0gUlhfRklGT19ERVBUSCh2YWwpOworCWluaXRfY29tcGxl dGlvbigmZHNpLT5kaXJlY3RfY21kX2NvbXApOworCisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1D VExfTUFJTl9EQVRBX0NUTCk7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7 CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RMKTsKKworCS8qCisJICog V2Ugb25seSBzdXBwb3J0IHRoZSBEUEkgaW5wdXQsIHNvIGZvcmNlIGlucHV0LT5pZCB0bworCSAq IENETlNfRFBJX0lOUFVULgorCSAqLworCWlucHV0LT5pZCA9IENETlNfRFBJX0lOUFVUOworCWlu cHV0LT5icmlkZ2UuZnVuY3MgPSAmY2Ruc19kc2lfYnJpZGdlX2Z1bmNzOworCWlucHV0LT5icmlk Z2Uub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCisJLyogTWFzayBhbGwgaW50ZXJydXB0 cyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIElSUSBoYW5kbGVyLiAqLworCXdyaXRlbCgwLCBkc2kt PnJlZ3MgKyBNQ1RMX01BSU5fU1RTX0NUTCk7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExf RFBIWV9FUlJfQ1RMMSk7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIENNRF9NT0RFX1NUU19DVEwp OworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCXdyaXRlbCgw LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1JEX1NUU19DVEwpOworCXdyaXRlbCgwLCBkc2ktPnJl Z3MgKyBWSURfTU9ERV9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgVFZHX1NUU19D VEwpOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBEUElfSVJRX0VOKTsKKwlyZXQgPSBkZXZtX3Jl cXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgY2Ruc19kc2lfaW50ZXJydXB0LCAwLAorCQkJICAg ICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBkc2kpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rp c2FibGVfcGNsazsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCWRzaS0+YmFz ZS5kZXYgPSAmcGRldi0+ZGV2OworCWRzaS0+YmFzZS5vcHMgPSAmY2Ruc19kc2lfb3BzOworCisJ cmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5iYXNlKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9kaXNhYmxlX3J1bnRpbWVfcG07CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5kc2lfcF9jbGspOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX3J1bnRpbWVfcG06CisJ cG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCitlcnJfZGlzYWJsZV9wY2xrOgorCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRzaV9wX2Nsayk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGNkbnNfZHNpX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmJhc2UpOworCXBtX3J1bnRp bWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBjZG5zX2RzaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGli bGUgPSAiY2Rucyxkc2kiIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgY2Ruc19kc2lfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSAgPSBjZG5zX2RzaV9k cm1fcHJvYmUsCisJLnJlbW92ZSA9IGNkbnNfZHNpX2RybV9yZW1vdmUsCisJLmRyaXZlciA9IHsK KwkJLm5hbWUgICA9ICJjZG5zLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGNkbnNfZHNpX29m X21hdGNoLAorCQkucG0gPSAmY2Ruc19kc2lfcG1fb3BzLAorCX0sCit9OworbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihjZG5zX2RzaV9wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJC b3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIkNhZGVuY2UgRFNJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpjZG5zLWRzaSIpOworCi0tIAoyLjExLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=