From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v8 1/2] drm/bridge: Add Cadence DSI driver Date: Sat, 21 Apr 2018 09:08:45 +0200 Message-ID: <20180421070846.10330-1-boris.brezillon@bootlin.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: "Menon, Nishanth" , Mark Rutland , Rafal Ciepiela , Pawel Moll , Ian Campbell , Maxime Ripard , Simon Hatliff , Boris Brezillon , Kumar Gala , Jyri Sarha , Rob Herring , Alan Douglas , Tomi Valkeinen , Thomas Petazzoni , Suresh Punnoose , Richard Sproul , devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org QWRkIGEgZHJpdmVyIGZvciBDYWRlbmNlIERQSSAtPiBEU0kgYnJpZGdlLgoKVGhpcyBkcml2ZXIg b25seSBzdXBwb3J0IGEgc3Vic2V0IG9mIENhZGVuY2UgRFNJIGJyaWRnZSBjYXBhYmlsaXRpZXMu CgpUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQvZGVidWdnZWQgaW4gYSBzaW11bGF0ZWQgZW52 aXJvbm1lbnQgd2hpY2gKZXhwbGFpbnMgd2h5IHNvbWUgb2YgdGhlIGZlYXR1cmVzIGFyZSBtaXNz aW5nLiAgSGVyZSBpcyBhCm5vbi1leGhhdXN0aXZlIGxpc3Qgb2YgbWlzc2luZyBmZWF0dXJlczoK ICogYnVyc3QgbW9kZQogKiBEUEhZIGluaXQvY29uZmlndXJhdGlvbiBzdGVwcwogKiBzdXBwb3J0 IGZvciBhZGRpdGlvbmFsIGlucHV0IGludGVyZmFjZXMgKFNESSBpbnB1dCkKCkRTSSBjb21tYW5k cyBhbmQgbm9uLWJ1cnN0IHZpZGVvIG1vZGUgaGF2ZSBiZWVuIHRlc3RlZC4KClNpZ25lZC1vZmYt Ynk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgpSZXZpZXdl ZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KQWNrZWQtYnk6IEVyaWMg QW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ClJldmlld2VkLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNo aXR0QGNvZGVhdXJvcmEub3JnPgotLS0KQ2hhbmdlcyBpbiB2ODoKLSBVcGRhdGUgbXkgZW1haWwg YWRkcmVzcwoKQ2hhbmdlcyBpbiB2NzoKLSBVc2UgRElWX1JPVU5EX1VQX1VMTCgpIHRvIGZpeCBh IGJ1aWxkIGVycm9yIG9uIGFybSAzMi1iaXQKLSBBZGQgQXJjaGl0J3MgUi1iCgpDaGFuZ2VzIGlu IHY2OgotIFVzZSBTUERYIGhlYWRlcgotIERvIG5vdCBlbmFibGUgdGhlIHN5c19jbGsgaW4gdGhl IHByb2JlIGZ1bmN0aW9uCi0gUmVtb3ZlIHVubmVlZGVkIHVkZWxheSgpCi0gQWRkIGEgZnVuY3Rp b24gdG8gbWFrZSBzdXJlIHRoZSBQTEwgYW5kIHBpeGVsIGNsb2NrIGFyZSBjbG9zZSBlbm91Z2gK ICB0byBiZSByZWNvdmVyYWJsZSBpZiB0aGV5IGRvbid0IG1hdGNoIGV4YWN0bHkKLSBBZGQgdGhl IERQSFkgaW5pdCBzZXF1ZW5jZSB1c2VkIGluIHNpbXVsYXRpb24gKGxpa2VseSB0byBiZSBkaWZm ZXJlbnQKICBiYXNlZCBvbiBlYWNoIFNvQyBpbnRlZ3JhdGlvbikKCkNoYW5nZXMgaW4gdjU6Ci0g QWRkIHJ1bnRpbWUgUE0gc3VwcG9ydAoKQ2hhbmdlcyBpbiB2NDoKLSBGaXggdHlwb3MKLSBSZW5h bWUgY2xrcyBhcyBzdWdnZXN0ZWQgYnkgVG9taQotIEZpeCBEU0kgc2V0dXAgZG9uZSBpbiBjZG5z X2RzaV9icmlkZ2VfZW5hYmxlKCkKLSBBZGQgYSBwcmVjaXNpb24gYWJvdXQgd2hlcmUgdGhpcyBi cmlkZ2UgaXMgc3VwcG9zZWQgdG8gdXNlZCB0byB0aGUKICBLY29uZmlnIGVudHJ5Ci0gTGV0IERS TV9DRE5TX0RTSSBzZWxlY3QgRFJNX1BBTkVMX0JSSURHRQotIFJlbW92ZSB0aGUgSVAgdmVyc2lv biBmcm9tIHRoZSBEVCBjb21wYXRpYmxlIG5hbWUKLSBBZGFwdCByZWdpc3RlciB0aGUgbGF5b3V0 IHRvIG1hdGNoIHRoZSBvbmUgdXNlZCBpbiB0aGUgbGFzdCByZXZpc2lvbgogIG9mIHRoZSBJUCAo aG9wZWZ1bGx5IHRoZSBmaW5hbCB2ZXJzaW9uKQoKQ2hhbmdlcyBpbiB2MzoKLSByZXBsYWNlIG1h Z2ljIHZhbHVlcyBieSByZWFsIHRpbWluZyBjYWxjdWxhdGlvbi4gVGhlIERQSFkgUExMIGNsb2Nr CiAgaXMgc3RpbGwgaGFyZGNvZGVkIHNpbmNlIHdlIGRvbid0IGhhdmUgYSB3b3JraW5nIERQSFkg YmxvY2sgeWV0LCBhbmQKICB0aGlzIGlzIHRoZSBwaWVjZSBvZiBIVyB3ZSBuZWVkIHRvIGR5bmFt aWNhbGx5IGNvbmZpZ3VyZSB0aGUgUExMCiAgcmF0ZSBiYXNlZCBvbiB0aGUgZGlzcGxheSByZWZy ZXNoIHJhdGUgYW5kIHRoZSByZXNvbHV0aW9uLgotIHBhcnNlIERTSSBkZXZpY2VzIHJlcHJlc2Vu dGVkIHdpdGggdGhlIE9GLWdyYXBoLiBUaGlzIGlzIG5lZWRlZCB0bwogIHN1cHBvcnQgRFNJIGRl dmljZXMgY29udHJvbGxlZCB0aHJvdWdoIGFuIGV4dGVybmFsIGJ1cyBsaWtlIEkyQyBvcgogIFNQ SS4KLSB1c2UgdGhlIERSTSBwYW5lbC1icmlkZ2UgaW5mcmFzdHJ1Y3R1cmUgdG8gc2ltcGxpZnkg dGhlIERSTSBwYW5lbAogIGxvZ2ljCgpDaGFuZ2VzIGluIHYyOgotIHJlYmFzZSBvbiB2NC4xMi1y YzEgYW5kIGFkYXB0IHRvIGRyaXZlciB0byB0aGUgZHJtX2JyaWRnZSBBUEkgY2hhbmdlcwotIHJl dHVybiB0aGUgY29ycmVjdCBlcnJvciB3aGVuIGRldm1fY2xrX2dldChzeXNjbGspIGZhaWxzCi0g YWRkIG1pc3NpbmcgZGVwZW5kcyBvbiBPRiBhbmQgc2VsZWN0IERSTV9QQU5FTCBpbiB0aGUgS2Nv bmZpZyBlbnRyeQoKRFNJIHJ1bnRpbWUgUE0KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tj b25maWcgICAgfCAgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICB8ICAg IDEgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5jIHwgMTYyMyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE2MzQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1k c2kuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCA0MmM5YzJkMTM3NTIuLjFkNzVkM2ExZjk1 MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIERSTV9B TkFMT0dJWF9BTlg3OFhYCiAJICB0aGUgSERNSSBvdXRwdXQgb2YgYW4gYXBwbGljYXRpb24gcHJv Y2Vzc29yIHRvIE15RFAKIAkgIG9yIERpc3BsYXlQb3J0LgogCitjb25maWcgRFJNX0NETlNfRFNJ CisJdHJpc3RhdGUgIkNhZGVuY2UgRFBJL0RTSSBicmlkZ2UiCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfQlJJREdFCisJZGVw ZW5kcyBvbiBPRgorCWhlbHAKKwkgIFN1cHBvcnQgQ2FkZW5jZSBEUEkgdG8gRFNJIGJyaWRnZS4g VGhpcyBpcyBhbiBpbnRlcm5hbAorCSAgYnJpZGdlIGFuZCBpcyBtZWFudCB0byBiZSBkaXJlY3Rs eSBlbWJlZGRlZCBpbiBhIFNvQy4KKwogY29uZmlnIERSTV9EVU1CX1ZHQV9EQUMKIAl0cmlzdGF0 ZSAiRHVtYiBWR0EgREFDIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlCmluZGV4IGZkOTBiMTZhNjVjMC4uMzVmODhkNDhlYzIwIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCiBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFgpICs9IGFuYWxvZ2l4 LWFueDc4eHgubworb2JqLSQoQ09ORklHX0RSTV9DRE5TX0RTSSkgKz0gY2Rucy1kc2kubwogb2Jq LSQoQ09ORklHX0RSTV9EVU1CX1ZHQV9EQUMpICs9IGR1bWItdmdhLWRhYy5vCiBvYmotJChDT05G SUdfRFJNX0xWRFNfRU5DT0RFUikgKz0gbHZkcy1lbmNvZGVyLm8KIG9iai0kKENPTkZJR19EUk1f TUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykgKz0gbWVnYWNoaXBzLXN0ZHB4eHh4LWdl LWI4NTB2My1mdy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNp LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMjU1ZmMzZTFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKQEAgLTAsMCArMSwxNjIzIEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodDogMjAxNyBD YWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yOiBCb3JpcyBCcmV6aWxs b24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgor I2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXku aD4KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9y ZXNldC5oPgorCisjZGVmaW5lIElQX0NPTkYJCQkJMHgwCisjZGVmaW5lIFNQX0hTX0ZJRk9fREVQ VEgoeCkJCSgoKHgpICYgR0VOTUFTSygzMCwgMjYpKSA+PiAyNikKKyNkZWZpbmUgU1BfTFBfRklG T19ERVBUSCh4KQkJKCgoeCkgJiBHRU5NQVNLKDI1LCAyMSkpID4+IDIxKQorI2RlZmluZSBWUlNf RklGT19ERVBUSCh4KQkJKCgoeCkgJiBHRU5NQVNLKDIwLCAxNikpID4+IDE2KQorI2RlZmluZSBE SVJDTURfRklGT19ERVBUSCh4KQkJKCgoeCkgJiBHRU5NQVNLKDE1LCAxMykpID4+IDEzKQorI2Rl ZmluZSBTRElfSUZBQ0VfMzIJCQlCSVQoMTIpCisjZGVmaW5lIElOVEVSTkFMX0RBVEFQQVRIXzMy CQkoMCA8PCAxMCkKKyNkZWZpbmUgSU5URVJOQUxfREFUQVBBVEhfMTYJCSgxIDw8IDEwKQorI2Rl ZmluZSBJTlRFUk5BTF9EQVRBUEFUSF84CQkoMyA8PCAxMCkKKyNkZWZpbmUgSU5URVJOQUxfREFU QVBBVEhfU0laRQkJKCh4KSAmIEdFTk1BU0soMTEsIDEwKSkKKyNkZWZpbmUgTlVNX0lGQUNFKHgp CQkJKCgoKHgpICYgR0VOTUFTSyg5LCA4KSkgPj4gOCkgKyAxKQorI2RlZmluZSBNQVhfTEFORV9O Qih4KQkJCSgoKHgpICYgR0VOTUFTSyg3LCA2KSkgPj4gNikKKyNkZWZpbmUgUlhfRklGT19ERVBU SCh4KQkJKCh4KSAmIEdFTk1BU0soNSwgMCkpCisKKyNkZWZpbmUgTUNUTF9NQUlOX0RBVEFfQ1RM CQkweDQKKyNkZWZpbmUgVEVfTUlQSV9QT0xMSU5HX0VOCQlCSVQoMjUpCisjZGVmaW5lIFRFX0hX X1BPTExJTkdfRU4JCUJJVCgyNCkKKyNkZWZpbmUgRElTUF9FT1RfR0VOCQkJQklUKDE4KQorI2Rl ZmluZSBIT1NUX0VPVF9HRU4JCQlCSVQoMTcpCisjZGVmaW5lIERJU1BfR0VOX0NIRUNLU1VNCQlC SVQoMTYpCisjZGVmaW5lIERJU1BfR0VOX0VDQwkJCUJJVCgxNSkKKyNkZWZpbmUgQlRBX0VOCQkJ CUJJVCgxNCkKKyNkZWZpbmUgUkVBRF9FTgkJCQlCSVQoMTMpCisjZGVmaW5lIFJFR19URV9FTgkJ CUJJVCgxMikKKyNkZWZpbmUgSUZfVEVfRU4oeCkJCQlCSVQoOCArICh4KSkKKyNkZWZpbmUgVFZH X1NFTAkJCQlCSVQoNikKKyNkZWZpbmUgVklEX0VOCQkJCUJJVCg1KQorI2RlZmluZSBJRl9WSURf U0VMRUNUKHgpCQkoKHgpIDw8IDIpCisjZGVmaW5lIElGX1ZJRF9TRUxFQ1RfTUFTSwkJR0VOTUFT SygzLCAyKQorI2RlZmluZSBJRl9WSURfTU9ERQkJCUJJVCgxKQorI2RlZmluZSBMSU5LX0VOCQkJ CUJJVCgwKQorCisjZGVmaW5lIE1DVExfTUFJTl9QSFlfQ1RMCQkweDgKKyNkZWZpbmUgSFNfSU5W RVJUX0RBVCh4KQkJQklUKDE5ICsgKCh4KSAqIDIpKQorI2RlZmluZSBTV0FQX1BJTlNfREFUKHgp CQlCSVQoMTggKyAoKHgpICogMikpCisjZGVmaW5lIEhTX0lOVkVSVF9DTEsJCQlCSVQoMTcpCisj ZGVmaW5lIFNXQVBfUElOU19DTEsJCQlCSVQoMTYpCisjZGVmaW5lIEhTX1NLRVdDQUxfRU4JCQlC SVQoMTUpCisjZGVmaW5lIFdBSVRfQlVSU1RfVElNRSh4KQkJKCh4KSA8PCAxMCkKKyNkZWZpbmUg REFUQV9VTFBNX0VOKHgpCQkJQklUKDYgKyAoeCkpCisjZGVmaW5lIENMS19VTFBNX0VOCQkJQklU KDUpCisjZGVmaW5lIENMS19DT05USU5VT1VTCQkJQklUKDQpCisjZGVmaW5lIERBVEFfTEFORV9F Tih4KQkJCUJJVCgoeCkgLSAxKQorCisjZGVmaW5lIE1DVExfTUFJTl9FTgkJCTB4YworI2RlZmlu ZSBEQVRBX0ZPUkNFX1NUT1AJCQlCSVQoMTcpCisjZGVmaW5lIENMS19GT1JDRV9TVE9QCQkJQklU KDE2KQorI2RlZmluZSBJRl9FTih4KQkJCUJJVCgxMyArICh4KSkKKyNkZWZpbmUgREFUQV9MQU5F X1VMUE1fUkVRKGwpCQlCSVQoOSArIChsKSkKKyNkZWZpbmUgQ0xLX0xBTkVfVUxQTV9SRVEJCUJJ VCg4KQorI2RlZmluZSBEQVRBX0xBTkVfU1RBUlQoeCkJCUJJVCg0ICsgKHgpKQorI2RlZmluZSBD TEtfTEFORV9FTgkJCUJJVCgzKQorI2RlZmluZSBQTExfU1RBUlQJCQlCSVQoMCkKKworI2RlZmlu ZSBNQ1RMX0RQSFlfQ0ZHMAkJCTB4MTAKKyNkZWZpbmUgRFBIWV9DX1JTVEIJCQlCSVQoMjApCisj ZGVmaW5lIERQSFlfRF9SU1RCKHgpCQkJR0VOTUFTSygxNSArICh4KSwgMTYpCisjZGVmaW5lIERQ SFlfUExMX1BETgkJCUJJVCgxMCkKKyNkZWZpbmUgRFBIWV9DTU5fUEROCQkJQklUKDkpCisjZGVm aW5lIERQSFlfQ19QRE4JCQlCSVQoOCkKKyNkZWZpbmUgRFBIWV9EX1BETih4KQkJCUdFTk1BU0so MyArICh4KSwgNCkKKyNkZWZpbmUgRFBIWV9BTExfRF9QRE4JCQlHRU5NQVNLKDcsIDQpCisjZGVm aW5lIERQSFlfUExMX1BTTwkJCUJJVCgxKQorI2RlZmluZSBEUEhZX0NNTl9QU08JCQlCSVQoMCkK KworI2RlZmluZSBNQ1RMX0RQSFlfVElNRU9VVDEJCTB4MTQKKyNkZWZpbmUgSFNUWF9USU1FT1VU KHgpCQkJKCh4KSA8PCA0KQorI2RlZmluZSBIU1RYX1RJTUVPVVRfTUFYCQlHRU5NQVNLKDE3LCAw KQorI2RlZmluZSBDTEtfRElWKHgpCQkJKHgpCisjZGVmaW5lIENMS19ESVZfTUFYCQkJR0VOTUFT SygzLCAwKQorCisjZGVmaW5lIE1DVExfRFBIWV9USU1FT1VUMgkJMHgxOAorI2RlZmluZSBMUFJY X1RJTUVPVVQoeCkJCQkoeCkKKworI2RlZmluZSBNQ1RMX1VMUE9VVF9USU1FCQkweDFjCisjZGVm aW5lIERBVEFfTEFORV9VTFBPVVRfVElNRSh4KQkoKHgpIDw8IDkpCisjZGVmaW5lIENMS19MQU5F X1VMUE9VVF9USU1FKHgpCQkoeCkKKworI2RlZmluZSBNQ1RMXzNEVklERU9fQ1RMCQkweDIwCisj ZGVmaW5lIFZJRF9WU1lOQ18zRF9FTgkJCUJJVCg3KQorI2RlZmluZSBWSURfVlNZTkNfM0RfTFIJ CQlCSVQoNSkKKyNkZWZpbmUgVklEX1ZTWU5DXzNEX1NFQ09ORF9FTgkJQklUKDQpCisjZGVmaW5l IFZJRF9WU1lOQ18zREZPUk1BVF9MSU5FCQkoMCA8PCAyKQorI2RlZmluZSBWSURfVlNZTkNfM0RG T1JNQVRfRlJBTUUJKDEgPDwgMikKKyNkZWZpbmUgVklEX1ZTWU5DXzNERk9STUFUX1BJWEVMCSgy IDw8IDIpCisjZGVmaW5lIFZJRF9WU1lOQ18zRE1PREVfT0ZGCQkwCisjZGVmaW5lIFZJRF9WU1lO Q18zRE1PREVfUE9SVFJBSVQJMQorI2RlZmluZSBWSURfVlNZTkNfM0RNT0RFX0xBTkRTQ0FQRQky CisKKyNkZWZpbmUgTUNUTF9NQUlOX1NUUwkJCTB4MjQKKyNkZWZpbmUgTUNUTF9NQUlOX1NUU19D VEwJCTB4MTMwCisjZGVmaW5lIE1DVExfTUFJTl9TVFNfQ0xSCQkweDE1MAorI2RlZmluZSBNQ1RM X01BSU5fU1RTX0ZMQUcJCTB4MTcwCisjZGVmaW5lIEhTX1NLRVdDQUxfRE9ORQkJCUJJVCgxMSkK KyNkZWZpbmUgSUZfVU5URVJNX1BLVF9FUlIoeCkJCUJJVCg4ICsgKHgpKQorI2RlZmluZSBMUFJY X1RJTUVPVVRfRVJSCQlCSVQoNykKKyNkZWZpbmUgSFNUWF9USU1FT1VUX0VSUgkJQklUKDYpCisj ZGVmaW5lIERBVEFfTEFORV9SRFkobCkJCUJJVCgyICsgKGwpKQorI2RlZmluZSBDTEtfTEFORV9S RFkJCQlCSVQoMSkKKyNkZWZpbmUgUExMX0xPQ0tFRAkJCUJJVCgwKQorCisjZGVmaW5lIE1DVExf RFBIWV9FUlIJCQkweDI4CisjZGVmaW5lIE1DVExfRFBIWV9FUlJfQ1RMMQkJMHgxNDgKKyNkZWZp bmUgTUNUTF9EUEhZX0VSUl9DTFIJCTB4MTY4CisjZGVmaW5lIE1DVExfRFBIWV9FUlJfRkxBRwkJ MHgxODgKKyNkZWZpbmUgRVJSX0NPTlRfTFAoeCwgbCkJCUJJVCgxOCArICgoeCkgKiA0KSArIChs KSkKKyNkZWZpbmUgRVJSX0NPTlRST0wobCkJCQlCSVQoMTQgKyAobCkpCisjZGVmaW5lIEVSUl9T WU5FU0MobCkJCQlCSVQoMTAgKyAobCkpCisjZGVmaW5lIEVSUl9FU0MobCkJCQlCSVQoNiArIChs KSkKKworI2RlZmluZSBNQ1RMX0RQSFlfRVJSX0NUTDIJCTB4MTRjCisjZGVmaW5lIEVSUl9DT05U X0xQX0VER0UoeCwgbCkJCUJJVCgxMiArICgoeCkgKiA0KSArIChsKSkKKyNkZWZpbmUgRVJSX0NP TlRST0xfRURHRShsKQkJQklUKDggKyAobCkpCisjZGVmaW5lIEVSUl9TWU5fRVNDX0VER0UobCkJ CUJJVCg0ICsgKGwpKQorI2RlZmluZSBFUlJfRVNDX0VER0UobCkJCQlCSVQoMCArIChsKSkKKwor I2RlZmluZSBNQ1RMX0xBTkVfU1RTCQkJMHgyYworI2RlZmluZSBQUElfQ19UWF9SRUFEWV9IUwkJ QklUKDE4KQorI2RlZmluZSBEUEhZX1BMTF9MT0NLCQkJQklUKDE3KQorI2RlZmluZSBQUElfRF9S WF9VTFBTX0VTQyh4KQkJKCgoeCkgJiBHRU5NQVNLKDE1LCAxMikpID4+IDEyKQorI2RlZmluZSBM QU5FX1NUQVRFX1NUQVJUCQkwCisjZGVmaW5lIExBTkVfU1RBVEVfSURMRQkJCTEKKyNkZWZpbmUg TEFORV9TVEFURV9XUklURQkJMgorI2RlZmluZSBMQU5FX1NUQVRFX1VMUE0JCQkzCisjZGVmaW5l IExBTkVfU1RBVEVfUkVBRAkJCTQKKyNkZWZpbmUgREFUQV9MQU5FX1NUQVRFKGwsIHZhbCkJCVwK KwkoKCh2YWwpID4+ICgyICsgMiAqIChsKSArICgobCkgPyAxIDogMCkpKSAmIEdFTk1BU0soKGwp ID8gMSA6IDIsIDApKQorI2RlZmluZSBDTEtfTEFORV9TVEFURV9IUwkJMgorI2RlZmluZSBDTEtf TEFORV9TVEFURSh2YWwpCQkoKHZhbCkgJiBHRU5NQVNLKDEsIDApKQorCisjZGVmaW5lIERTQ19N T0RFX0NUTAkJCTB4MzAKKyNkZWZpbmUgRFNDX01PREVfRU4JCQlCSVQoMCkKKworI2RlZmluZSBE U0NfQ01EX1NFTkQJCQkweDM0CisjZGVmaW5lIERTQ19TRU5EX1BQUwkJCUJJVCgwKQorI2RlZmlu ZSBEU0NfRVhFQ1VURV9RVUVVRQkJQklUKDEpCisKKyNkZWZpbmUgRFNDX1BQU19XUkRBVAkJCTB4 MzgKKworI2RlZmluZSBEU0NfTU9ERV9TVFMJCQkweDNjCisjZGVmaW5lIERTQ19QUFNfRE9ORQkJ CUJJVCgxKQorI2RlZmluZSBEU0NfRVhFQ19ET05FCQkJQklUKDIpCisKKyNkZWZpbmUgQ01EX01P REVfQ1RMCQkJMHg3MAorI2RlZmluZSBJRl9MUF9FTih4KQkJCUJJVCg5ICsgKHgpKQorI2RlZmlu ZSBJRl9WQ0hBTl9JRCh4LCBjKQkJKChjKSA8PCAoKHgpICogMikpCisKKyNkZWZpbmUgQ01EX01P REVfQ1RMMgkJCTB4NzQKKyNkZWZpbmUgVEVfVElNRU9VVCh4KQkJCSgoeCkgPDwgMTEpCisjZGVm aW5lIEZJTExfVkFMVUUoeCkJCQkoKHgpIDw8IDMpCisjZGVmaW5lIEFSQl9JRl9XSVRIX0hJR0hF U1RfUFJJT1JJVFkoeCkJKCh4KSA8PCAxKQorI2RlZmluZSBBUkJfUk9VTkRfUk9CSU5fTU9ERQkJ QklUKDApCisKKyNkZWZpbmUgQ01EX01PREVfU1RTCQkJMHg3OAorI2RlZmluZSBDTURfTU9ERV9T VFNfQ1RMCQkweDEzNAorI2RlZmluZSBDTURfTU9ERV9TVFNfQ0xSCQkweDE1NAorI2RlZmluZSBD TURfTU9ERV9TVFNfRkxBRwkJMHgxNzQKKyNkZWZpbmUgRVJSX0lGX1VOREVSUlVOKHgpCQlCSVQo NCArICh4KSkKKyNkZWZpbmUgRVJSX1VOV0FOVEVEX1JFQUQJCUJJVCgzKQorI2RlZmluZSBFUlJf VEVfTUlTUwkJCUJJVCgyKQorI2RlZmluZSBFUlJfTk9fVEUJCQlCSVQoMSkKKyNkZWZpbmUgQ1NN X1JVTk5JTkcJCQlCSVQoMCkKKworI2RlZmluZSBESVJFQ1RfQ01EX1NFTkQJCQkweDgwCisKKyNk ZWZpbmUgRElSRUNUX0NNRF9NQUlOX1NFVFRJTkdTCTB4ODQKKyNkZWZpbmUgVFJJR0dFUl9WQUwo eCkJCQkoKHgpIDw8IDI1KQorI2RlZmluZSBDTURfTFBfRU4JCQlCSVQoMjQpCisjZGVmaW5lIENN RF9TSVpFKHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgQ01EX1ZDSEFOX0lEKHgpCQkJKCh4KSA8 PCAxNCkKKyNkZWZpbmUgQ01EX0RBVEFUWVBFKHgpCQkJKCh4KSA8PCA4KQorI2RlZmluZSBDTURf TE9ORwkJCUJJVCgzKQorI2RlZmluZSBXUklURV9DTUQJCQkwCisjZGVmaW5lIFJFQURfQ01ECQkJ MQorI2RlZmluZSBURV9SRVEJCQkJNAorI2RlZmluZSBUUklHR0VSX1JFUQkJCTUKKyNkZWZpbmUg QlRBX1JFUQkJCQk2CisKKyNkZWZpbmUgRElSRUNUX0NNRF9TVFMJCQkweDg4CisjZGVmaW5lIERJ UkVDVF9DTURfU1RTX0NUTAkJMHgxMzgKKyNkZWZpbmUgRElSRUNUX0NNRF9TVFNfQ0xSCQkweDE1 OAorI2RlZmluZSBESVJFQ1RfQ01EX1NUU19GTEFHCQkweDE3OAorI2RlZmluZSBSQ1ZEX0FDS19W QUwodmFsKQkJKCh2YWwpID4+IDE2KQorI2RlZmluZSBSQ1ZEX1RSSUdHRVJfVkFMKHZhbCkJCSgo KHZhbCkgJiBHRU5NQVNLKDE0LCAxMSkpID4+IDExKQorI2RlZmluZSBSRUFEX0NPTVBMRVRFRF9X SVRIX0VSUgkJQklUKDEwKQorI2RlZmluZSBCVEFfRklOSVNIRUQJCQlCSVQoOSkKKyNkZWZpbmUg QlRBX0NPTVBMRVRFRAkJCUJJVCg4KQorI2RlZmluZSBURV9SQ1ZECQkJCUJJVCg3KQorI2RlZmlu ZSBUUklHR0VSX1JDVkQJCQlCSVQoNikKKyNkZWZpbmUgQUNLX1dJVEhfRVJSX1JDVkQJCUJJVCg1 KQorI2RlZmluZSBBQ0tfUkNWRAkJCUJJVCg0KQorI2RlZmluZSBSRUFEX0NPTVBMRVRFRAkJCUJJ VCgzKQorI2RlZmluZSBUUklHR0VSX0NPTVBMRVRFRAkJQklUKDIpCisjZGVmaW5lIFdSSVRFX0NP TVBMRVRFRAkJCUJJVCgxKQorI2RlZmluZSBTRU5ESU5HX0NNRAkJCUJJVCgwKQorCisjZGVmaW5l IERJUkVDVF9DTURfU1RPUF9SRUFECQkweDhjCisKKyNkZWZpbmUgRElSRUNUX0NNRF9XUkRBVEEJ CTB4OTAKKworI2RlZmluZSBESVJFQ1RfQ01EX0ZJRk9fUlNUCQkweDk0CisKKyNkZWZpbmUgRElS RUNUX0NNRF9SRERBVEEJCTB4YTAKKworI2RlZmluZSBESVJFQ1RfQ01EX1JEX1BST1BTCQkweGE0 CisjZGVmaW5lIFJEX0RDUwkJCQlCSVQoMTgpCisjZGVmaW5lIFJEX1ZDSEFOX0lEKHZhbCkJCSgo KHZhbCkgPj4gMTYpICYgR0VOTUFTSygxLCAwKSkKKyNkZWZpbmUgUkRfU0laRSh2YWwpCQkJKCh2 YWwpICYgR0VOTUFTSygxNSwgMCkpCisKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9TVFMJCTB4YTgK KyNkZWZpbmUgRElSRUNUX0NNRF9SRF9TVFNfQ1RMCQkweDEzYworI2RlZmluZSBESVJFQ1RfQ01E X1JEX1NUU19DTFIJCTB4MTVjCisjZGVmaW5lIERJUkVDVF9DTURfUkRfU1RTX0ZMQUcJCTB4MTdj CisjZGVmaW5lIEVSUl9FT1RfV0lUSF9FUlIJCUJJVCg4KQorI2RlZmluZSBFUlJfTUlTU0lOR19F T1QJCQlCSVQoNykKKyNkZWZpbmUgRVJSX1dST05HX0xFTkdUSAkJQklUKDYpCisjZGVmaW5lIEVS Ul9PVkVSU0laRQkJCUJJVCg1KQorI2RlZmluZSBFUlJfUkVDRUlWRQkJCUJJVCg0KQorI2RlZmlu ZSBFUlJfVU5ERUNPREFCTEUJCQlCSVQoMykKKyNkZWZpbmUgRVJSX0NIRUNLU1VNCQkJQklUKDIp CisjZGVmaW5lIEVSUl9VTkNPUlJFQ1RBQkxFCQlCSVQoMSkKKyNkZWZpbmUgRVJSX0ZJWEVECQkJ QklUKDApCisKKyNkZWZpbmUgVklEX01BSU5fQ1RMCQkJMHhiMAorI2RlZmluZSBWSURfSUdOT1JF X01JU1NfVlNZTkMJCUJJVCgzMSkKKyNkZWZpbmUgVklEX0ZJRUxEX1NXCQkJQklUKDI4KQorI2Rl ZmluZSBWSURfSU5URVJMQUNFRF9FTgkJQklUKDI3KQorI2RlZmluZSBSRUNPVkVSWV9NT0RFKHgp CQkoKHgpIDw8IDI1KQorI2RlZmluZSBSRUNPVkVSWV9NT0RFX05FWFRfSFNZTkMJMAorI2RlZmlu ZSBSRUNPVkVSWV9NT0RFX05FWFRfU1RPUF9QT0lOVAkyCisjZGVmaW5lIFJFQ09WRVJZX01PREVf TkVYVF9WU1lOQwkzCisjZGVmaW5lIFJFR19CTEtFT0xfTU9ERSh4KQkJKCh4KSA8PCAyMykKKyNk ZWZpbmUgUkVHX0JMS0xJTkVfTU9ERSh4KQkJKCh4KSA8PCAyMSkKKyNkZWZpbmUgUkVHX0JMS19N T0RFX05VTExfUEtUCQkwCisjZGVmaW5lIFJFR19CTEtfTU9ERV9CTEFOS0lOR19QS1QJMQorI2Rl ZmluZSBSRUdfQkxLX01PREVfTFAJCQkyCisjZGVmaW5lIFNZTkNfUFVMU0VfSE9SSVpPTlRBTAkJ QklUKDIwKQorI2RlZmluZSBTWU5DX1BVTFNFX0FDVElWRQkJQklUKDE5KQorI2RlZmluZSBCVVJT VF9NT0RFCQkJQklUKDE4KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9NQVNLCQlHRU5NQVNLKDE3 LCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCNTY1CQkoMCA8PCAxNCkKKyNkZWZpbmUg VklEX1BJWEVMX01PREVfUkdCNjY2X1BBQ0tFRAkoMSA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVM X01PREVfUkdCNjY2CQkoMiA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCODg4CQko MyA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCMTAxMDEwCSg0IDw8IDE0KQorI2Rl ZmluZSBWSURfUElYRUxfTU9ERV9SR0IxMjEyMTIJKDUgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhF TF9NT0RFX1lVVjQyMAkJKDggPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1lVVjQyMl9Q QUNLRUQJKDkgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1lVVjQyMgkJKDEwIDw8IDE0 KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjJfMjRCCSgxMSA8PCAxNCkKKyNkZWZpbmUg VklEX1BJWEVMX01PREVfRFNDX0NPTVAJCSgxMiA8PCAxNCkKKyNkZWZpbmUgVklEX0RBVEFUWVBF KHgpCQkJKCh4KSA8PCA4KQorI2RlZmluZSBWSURfVklSVENIQU5fSUQoaWZhY2UsIHgpCSgoeCkg PDwgKDQgKyAoaWZhY2UpICogMikpCisjZGVmaW5lIFNUT1BfTU9ERSh4KQkJCSgoeCkgPDwgMikK KyNkZWZpbmUgU1RBUlRfTU9ERSh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9WU0laRTEJCQkweGI0 CisjZGVmaW5lIFZGUF9MRU4oeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZSBWQlBfTEVOKHgpCQkJ KCh4KSA8PCA2KQorI2RlZmluZSBWU0FfTEVOKHgpCQkJKHgpCisKKyNkZWZpbmUgVklEX1ZTSVpF MgkJCTB4YjgKKyNkZWZpbmUgVkFDVF9MRU4oeCkJCQkoeCkKKworI2RlZmluZSBWSURfSFNJWkUx CQkJMHhjMAorI2RlZmluZSBIQlBfTEVOKHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgSFNBX0xF Tih4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9IU0laRTIJCQkweGM0CisjZGVmaW5lIEhGUF9MRU4o eCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBIQUNUX0xFTih4KQkJCSh4KQorCisjZGVmaW5lIFZJ RF9CTEtTSVpFMQkJCTB4Y2MKKyNkZWZpbmUgQkxLX0VPTF9QS1RfTEVOKHgpCQkoKHgpIDw8IDE1 KQorI2RlZmluZSBCTEtfTElORV9FVkVOVF9QS1RfTEVOKHgpCSh4KQorCisjZGVmaW5lIFZJRF9C TEtTSVpFMgkJCTB4ZDAKKyNkZWZpbmUgQkxLX0xJTkVfUFVMU0VfUEtUX0xFTih4KQkoeCkKKwor I2RlZmluZSBWSURfUEtUX1RJTUUJCQkweGQ4CisjZGVmaW5lIEJMS19FT0xfRFVSQVRJT04oeCkJ CSh4KQorCisjZGVmaW5lIFZJRF9EUEhZX1RJTUUJCQkweGRjCisjZGVmaW5lIFJFR19XQUtFVVBf VElNRSh4KQkJKCh4KSA8PCAxNykKKyNkZWZpbmUgUkVHX0xJTkVfRFVSQVRJT04oeCkJCSh4KQor CisjZGVmaW5lIFZJRF9FUlJfQ09MT1IxCQkJMHhlMAorI2RlZmluZSBDT0xfR1JFRU4oeCkJCQko KHgpIDw8IDEyKQorI2RlZmluZSBDT0xfUkVEKHgpCQkJKHgpCisKKyNkZWZpbmUgVklEX0VSUl9D T0xPUjIJCQkweGU0CisjZGVmaW5lIFBBRF9WQUwoeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZSBD T0xfQkxVRSh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9WUE9TCQkJMHhlOAorI2RlZmluZSBMSU5F X1ZBTCh2YWwpCQkJKCgodmFsKSAmIEdFTk1BU0soMTQsIDIpKSA+PiAyKQorI2RlZmluZSBMSU5F X1BPUyh2YWwpCQkJKCh2YWwpICYgR0VOTUFTSygxLCAwKSkKKworI2RlZmluZSBWSURfSFBPUwkJ CTB4ZWMKKyNkZWZpbmUgSE9SSVpfVkFMKHZhbCkJCQkoKCh2YWwpICYgR0VOTUFTSygxNywgMykp ID4+IDMpCisjZGVmaW5lIEhPUklaX1BPUyh2YWwpCQkJKCh2YWwpICYgR0VOTUFTSygyLCAwKSkK KworI2RlZmluZSBWSURfTU9ERV9TVFMJCQkweGYwCisjZGVmaW5lIFZJRF9NT0RFX1NUU19DVEwJ CTB4MTQwCisjZGVmaW5lIFZJRF9NT0RFX1NUU19DTFIJCTB4MTYwCisjZGVmaW5lIFZJRF9NT0RF X1NUU19GTEFHCQkweDE4MAorI2RlZmluZSBWU0dfUkVDT1ZFUlkJCQlCSVQoMTApCisjZGVmaW5l IEVSUl9WUlNfV1JPTkdfTEVOCQlCSVQoOSkKKyNkZWZpbmUgRVJSX0xPTkdfUkVBRAkJCUJJVCg4 KQorI2RlZmluZSBFUlJfTElORV9XUklURQkJCUJJVCg3KQorI2RlZmluZSBFUlJfQlVSU1RfV1JJ VEUJCQlCSVQoNikKKyNkZWZpbmUgRVJSX1NNQUxMX0hFSUdIVAkJQklUKDUpCisjZGVmaW5lIEVS Ul9TTUFMTF9MRU4JCQlCSVQoNCkKKyNkZWZpbmUgRVJSX01JU1NJTkdfVlNZTkMJCUJJVCgzKQor I2RlZmluZSBFUlJfTUlTU0lOR19IU1lOQwkJQklUKDIpCisjZGVmaW5lIEVSUl9NSVNTSU5HX0RB VEEJCUJJVCgxKQorI2RlZmluZSBWU0dfUlVOTklORwkJCUJJVCgwKQorCisjZGVmaW5lIFZJRF9W Q0FfU0VUVElORzEJCTB4ZjQKKyNkZWZpbmUgQlVSU1RfTFAJCQlCSVQoMTYpCisjZGVmaW5lIE1B WF9CVVJTVF9MSU1JVCh4KQkJKHgpCisKKyNkZWZpbmUgVklEX1ZDQV9TRVRUSU5HMgkJMHhmOAor I2RlZmluZSBNQVhfTElORV9MSU1JVCh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgRVhBQ1RfQlVS U1RfTElNSVQoeCkJCSh4KQorCisjZGVmaW5lIFRWR19DVEwJCQkJMHhmYworI2RlZmluZSBUVkdf U1RSSVBFX1NJWkUoeCkJCSgoeCkgPDwgNSkKKyNkZWZpbmUgVFZHX01PREVfTUFTSwkJCUdFTk1B U0soNCwgMykKKyNkZWZpbmUgVFZHX01PREVfU0lOR0xFX0NPTE9SCQkoMCA8PCAzKQorI2RlZmlu ZSBUVkdfTU9ERV9WU1RSSVBFUwkJKDIgPDwgMykKKyNkZWZpbmUgVFZHX01PREVfSFNUUklQRVMJ CSgzIDw8IDMpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9NQVNLCQlHRU5NQVNLKDIsIDEpCisjZGVm aW5lIFRWR19TVE9QTU9ERV9FT0YJCSgwIDw8IDEpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9FT0wJ CSgxIDw8IDEpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9OT1cJCSgyIDw8IDEpCisjZGVmaW5lIFRW R19SVU4JCQkJQklUKDApCisKKyNkZWZpbmUgVFZHX0lNR19TSVpFCQkJMHgxMDAKKyNkZWZpbmUg VFZHX05CTElORVMoeCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBUVkdfTElORV9TSVpFKHgpCQko eCkKKworI2RlZmluZSBUVkdfQ09MT1IxCQkJMHgxMDQKKyNkZWZpbmUgVFZHX0NPTDFfR1JFRU4o eCkJCSgoeCkgPDwgMTIpCisjZGVmaW5lIFRWR19DT0wxX1JFRCh4KQkJCSh4KQorCisjZGVmaW5l IFRWR19DT0xPUjFfQklTCQkJMHgxMDgKKyNkZWZpbmUgVFZHX0NPTDFfQkxVRSh4KQkJKHgpCisK KyNkZWZpbmUgVFZHX0NPTE9SMgkJCTB4MTBjCisjZGVmaW5lIFRWR19DT0wyX0dSRUVOKHgpCQko KHgpIDw8IDEyKQorI2RlZmluZSBUVkdfQ09MMl9SRUQoeCkJCQkoeCkKKworI2RlZmluZSBUVkdf Q09MT1IyX0JJUwkJCTB4MTEwCisjZGVmaW5lIFRWR19DT0wyX0JMVUUoeCkJCSh4KQorCisjZGVm aW5lIFRWR19TVFMJCQkJMHgxMTQKKyNkZWZpbmUgVFZHX1NUU19DVEwJCQkweDE0NAorI2RlZmlu ZSBUVkdfU1RTX0NMUgkJCTB4MTY0CisjZGVmaW5lIFRWR19TVFNfRkxBRwkJCTB4MTg0CisjZGVm aW5lIFRWR19TVFNfUlVOTklORwkJCUJJVCgwKQorCisjZGVmaW5lIFNUU19DVExfRURHRShlKQkJ CSgoZSkgPDwgMTYpCisKKyNkZWZpbmUgRFBIWV9MQU5FU19NQVAJCQkweDE5OAorI2RlZmluZSBE QVRfUkVNQVBfQ0ZHKGIsIGwpCQkoKGwpIDw8ICgoYikgKiA4KSkKKworI2RlZmluZSBEUElfSVJR X0VOCQkJMHgxYTAKKyNkZWZpbmUgRFBJX0lSUV9DTFIJCQkweDFhNAorI2RlZmluZSBEUElfSVJR X1NUUwkJCTB4MWE4CisjZGVmaW5lIFBJWEVMX0JVRl9PVkVSRkxPVwkJQklUKDApCisKKyNkZWZp bmUgRFBJX0NGRwkJCQkweDFhYworI2RlZmluZSBEUElfQ0ZHX0ZJRk9fREVQVEgoeCkJCSgoeCkg Pj4gMTYpCisjZGVmaW5lIERQSV9DRkdfRklGT19MRVZFTCh4KQkJKCh4KSAmIEdFTk1BU0soMTUs IDApKQorCisjZGVmaW5lIFRFU1RfR0VORVJJQwkJCTB4MWYwCisjZGVmaW5lIFRFU1RfU1RBVFVT KHgpCQkJKCh4KSA+PiAxNikKKyNkZWZpbmUgVEVTVF9DVFJMKHgpCQkJKHgpCisKKyNkZWZpbmUg SURfUkVHCQkJCTB4MWZjCisjZGVmaW5lIFJFVl9WRU5ET1JfSUQoeCkJCSgoKHgpICYgR0VOTUFT SygzMSwgMjApKSA+PiAyMCkKKyNkZWZpbmUgUkVWX1BST0RVQ1RfSUQoeCkJCSgoKHgpICYgR0VO TUFTSygxOSwgMTIpKSA+PiAxMikKKyNkZWZpbmUgUkVWX0hXKHgpCQkJKCgoeCkgJiBHRU5NQVNL KDExLCA4KSkgPj4gOCkKKyNkZWZpbmUgUkVWX01BSk9SKHgpCQkJKCgoeCkgJiBHRU5NQVNLKDcs IDQpKSA+PiA0KQorI2RlZmluZSBSRVZfTUlOT1IoeCkJCQkoKHgpICYgR0VOTUFTSygzLCAwKSkK KworI2RlZmluZSBEU0lfT1VUUFVUX1BPUlQJCQkwCisjZGVmaW5lIERTSV9JTlBVVF9QT1JUKGlu cHV0aWQpCQkoMSArIChpbnB1dGlkKSkKKworI2RlZmluZSBEU0lfSEJQX0ZSQU1FX09WRVJIRUFE CQkxMgorI2RlZmluZSBEU0lfSFNBX0ZSQU1FX09WRVJIRUFECQkxNAorI2RlZmluZSBEU0lfSEZQ X0ZSQU1FX09WRVJIRUFECQk2CisjZGVmaW5lIERTSV9IU1NfVlNTX1ZTRV9GUkFNRV9PVkVSSEVB RAk0CisjZGVmaW5lIERTSV9CTEFOS0lOR19GUkFNRV9PVkVSSEVBRAk2CisjZGVmaW5lIERTSV9O VUxMX0ZSQU1FX09WRVJIRUFECQk2CisjZGVmaW5lIERTSV9FT1RfUEtUX1NJWkUJCTQKKworI2Rl ZmluZSBSRUdfV0FLRVVQX1RJTUVfTlMJCTgwMAorI2RlZmluZSBEUEhZX1BMTF9SQVRFX0haCQkx MDgwMDAwMDAKKworLyogRFBIWSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFBIWV9QTUFfQ01OKHJl ZykJCShyZWcpCisjZGVmaW5lIERQSFlfUE1BX0xDTEsocmVnKQkJKDB4MTAwICsgKHJlZykpCisj ZGVmaW5lIERQSFlfUE1BX0xEQVRBKGxhbmUsIHJlZykJKDB4MjAwICsgKChsYW5lKSAqIDB4MTAw KSArIChyZWcpKQorI2RlZmluZSBEUEhZX1BNQV9SQ0xLKHJlZykJCSgweDYwMCArIChyZWcpKQor I2RlZmluZSBEUEhZX1BNQV9SREFUQShsYW5lLCByZWcpCSgweDcwMCArICgobGFuZSkgKiAweDEw MCkgKyAocmVnKSkKKyNkZWZpbmUgRFBIWV9QQ1MocmVnKQkJCSgweGIwMCArIChyZWcpKQorCisj ZGVmaW5lIERQSFlfQ01OX1NTTQkJCURQSFlfUE1BX0NNTigweDIwKQorI2RlZmluZSBEUEhZX0NN Tl9TU01fRU4JCQlCSVQoMCkKKyNkZWZpbmUgRFBIWV9DTU5fVFhfTU9ERV9FTgkJQklUKDkpCisK KyNkZWZpbmUgRFBIWV9DTU5fUFdNCQkJRFBIWV9QTUFfQ01OKDB4NDApCisjZGVmaW5lIERQSFlf Q01OX1BXTV9ESVYoeCkJCSgoeCkgPDwgMjApCisjZGVmaW5lIERQSFlfQ01OX1BXTV9MT1coeCkJ CSgoeCkgPDwgMTApCisjZGVmaW5lIERQSFlfQ01OX1BXTV9ISUdIKHgpCQkoeCkKKworI2RlZmlu ZSBEUEhZX0NNTl9GQkRJVgkJCURQSFlfUE1BX0NNTigweDRjKQorI2RlZmluZSBEUEhZX0NNTl9G QkRJVl9WQUwobG93LCBoaWdoKQkoKChoaWdoKSA8PCAxMSkgfCAoKGxvdykgPDwgMjIpKQorI2Rl ZmluZSBEUEhZX0NNTl9GQkRJVl9GUk9NX1JFRwkJKEJJVCgxMCkgfCBCSVQoMjEpKQorCisjZGVm aW5lIERQSFlfQ01OX09QSVBESVYJCURQSFlfUE1BX0NNTigweDUwKQorI2RlZmluZSBEUEhZX0NN Tl9JUERJVl9GUk9NX1JFRwkJQklUKDApCisjZGVmaW5lIERQSFlfQ01OX0lQRElWKHgpCQkoKHgp IDw8IDEpCisjZGVmaW5lIERQSFlfQ01OX09QRElWX0ZST01fUkVHCQlCSVQoNikKKyNkZWZpbmUg RFBIWV9DTU5fT1BESVYoeCkJCSgoeCkgPDwgNykKKworI2RlZmluZSBEUEhZX1BTTV9DRkcJCQlE UEhZX1BDUygweDQpCisjZGVmaW5lIERQSFlfUFNNX0NGR19GUk9NX1JFRwkJQklUKDApCisjZGVm aW5lIERQSFlfUFNNX0NMS19ESVYoeCkJCSgoeCkgPDwgMSkKKworc3RydWN0IGNkbnNfZHNpX291 dHB1dCB7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsOworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cit9OworCitlbnVtIGNkbnNfZHNp X2lucHV0X2lkIHsKKwlDRE5TX1NESV9JTlBVVCwKKwlDRE5TX0RQSV9JTlBVVCwKKwlDRE5TX0RT Q19JTlBVVCwKK307CisKK3N0cnVjdCBjZG5zX2RwaHlfY2ZnIHsKKwl1OCBwbGxfaXBkaXY7CisJ dTggcGxsX29wZGl2OworCXUxNiBwbGxfZmJkaXY7CisJdW5zaWduZWQgbG9uZyBsYW5lX2JwczsK Kwl1bnNpZ25lZCBpbnQgbmxhbmVzOworfTsKKworc3RydWN0IGNkbnNfZHNpX2NmZyB7CisJdW5z aWduZWQgaW50IGhmcDsKKwl1bnNpZ25lZCBpbnQgaHNhOworCXVuc2lnbmVkIGludCBoYnA7CisJ dW5zaWduZWQgaW50IGhhY3Q7CisJdW5zaWduZWQgaW50IGh0b3RhbDsKK307CisKK3N0cnVjdCBj ZG5zX2RwaHk7CisKK2VudW0gY2Ruc19kcGh5X2Nsa19sYW5lX2NmZyB7CisJRFBIWV9DTEtfQ0ZH X0xFRlRfRFJJVkVTX0FMTCA9IDAsCisJRFBIWV9DTEtfQ0ZHX0xFRlRfRFJJVkVTX1JJR0hUID0g MSwKKwlEUEhZX0NMS19DRkdfTEVGVF9EUklWRVNfTEVGVCA9IDIsCisJRFBIWV9DTEtfQ0ZHX1JJ R0hUX0RSSVZFU19BTEwgPSAzLAorfTsKKworc3RydWN0IGNkbnNfZHBoeV9vcHMgeworCWludCAo KnByb2JlKShzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5KTsKKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qg Y2Ruc19kcGh5ICpkcGh5KTsKKwl2b2lkICgqc2V0X3BzbV9kaXYpKHN0cnVjdCBjZG5zX2RwaHkg KmRwaHksIHU4IGRpdik7CisJdm9pZCAoKnNldF9jbGtfbGFuZV9jZmcpKHN0cnVjdCBjZG5zX2Rw aHkgKmRwaHksCisJCQkJIGVudW0gY2Ruc19kcGh5X2Nsa19sYW5lX2NmZyBjZmcpOworCXZvaWQg KCpzZXRfcGxsX2NmZykoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwKKwkJCSAgICBjb25zdCBzdHJ1 Y3QgY2Ruc19kcGh5X2NmZyAqY2ZnKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3dha2V1cF90aW1l X25zKShzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5KTsKK307CisKK3N0cnVjdCBjZG5zX2RwaHkgewor CXN0cnVjdCBjZG5zX2RwaHlfY2ZnIGNmZzsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0 IGNsayAqcHNtX2NsazsKKwlzdHJ1Y3QgY2xrICpwbGxfcmVmX2NsazsKKwljb25zdCBzdHJ1Y3Qg Y2Ruc19kcGh5X29wcyAqb3BzOworfTsKKworc3RydWN0IGNkbnNfZHNpX2lucHV0IHsKKwllbnVt IGNkbnNfZHNpX2lucHV0X2lkIGlkOworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKK307CisK K3N0cnVjdCBjZG5zX2RzaSB7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgYmFzZTsKKwl2b2lkIF9f aW9tZW0gKnJlZ3M7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0IGlucHV0OworCXN0cnVjdCBjZG5z X2RzaV9vdXRwdXQgb3V0cHV0OworCXVuc2lnbmVkIGludCBkaXJlY3RfY21kX2ZpZm9fZGVwdGg7 CisJdW5zaWduZWQgaW50IHJ4X2ZpZm9fZGVwdGg7CisJc3RydWN0IGNvbXBsZXRpb24gZGlyZWN0 X2NtZF9jb21wOworCXN0cnVjdCBjbGsgKmRzaV9wX2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJv bCAqZHNpX3BfcnN0OworCXN0cnVjdCBjbGsgKmRzaV9zeXNfY2xrOworCWJvb2wgbGlua19pbml0 aWFsaXplZDsKKwlzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5OworfTsKKworc3RhdGljIGlubGluZSBz dHJ1Y3QgY2Ruc19kc2kgKmlucHV0X3RvX2RzaShzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0 KQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5wdXQsIHN0cnVjdCBjZG5zX2RzaSwgaW5wdXQp OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZG5zX2RzaSAqdG9fY2Ruc19kc2koc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBzdHJ1 Y3QgY2Ruc19kc2ksIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZG5zX2RzaV9p bnB1dCAqCiticmlkZ2VfdG9fY2Ruc19kc2lfaW5wdXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGNkbnNfZHNpX2lucHV0 LCBicmlkZ2UpOworfQorCitzdGF0aWMgaW50IGNkbnNfZHNpX2dldF9kcGh5X3BsbF9jZmcoc3Ry dWN0IGNkbnNfZHBoeSAqZHBoeSwKKwkJCQkgICAgIHN0cnVjdCBjZG5zX2RwaHlfY2ZnICpjZmcs CisJCQkJICAgICB1bnNpZ25lZCBpbnQgZHBpX2h0b3RhbCwKKwkJCQkgICAgIHVuc2lnbmVkIGlu dCBkcGlfYnBwLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGRwaV9oeiwKKwkJCQkgICAgIHVuc2ln bmVkIGludCBkc2lfaHRvdGFsLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGRzaV9ubGFuZXMsCisJ CQkJICAgICB1bnNpZ25lZCBpbnQgKmRzaV9oZnBfZXh0KQoreworCXU2NCBkbGFuZV9icHMsIGRs YW5lX2Jwc19tYXgsIGZiZGl2LCBmYmRpdl9tYXgsIGFkal9kc2lfaHRvdGFsOworCXVuc2lnbmVk IGxvbmcgcGxsX3JlZl9oeiA9IGNsa19nZXRfcmF0ZShkcGh5LT5wbGxfcmVmX2Nsayk7CisKKwlt ZW1zZXQoY2ZnLCAwLCBzaXplb2YoKmNmZykpOworCisJY2ZnLT5ubGFuZXMgPSBkc2lfbmxhbmVz OworCisJaWYgKHBsbF9yZWZfaHogPCA5NjAwMDAwIHx8IHBsbF9yZWZfaHogPj0gMTUwMDAwMDAw KQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChwbGxfcmVmX2h6IDwgMTkyMDAwMDApCisJ CWNmZy0+cGxsX2lwZGl2ID0gMTsKKwllbHNlIGlmIChwbGxfcmVmX2h6IDwgMzg0MDAwMDApCisJ CWNmZy0+cGxsX2lwZGl2ID0gMjsKKwllbHNlIGlmIChwbGxfcmVmX2h6IDwgNzY4MDAwMDApCisJ CWNmZy0+cGxsX2lwZGl2ID0gNDsKKwllbHNlCisJCWNmZy0+cGxsX2lwZGl2ID0gODsKKworCS8q CisJICogTWFrZSBzdXJlIERTSSBodG90YWwgaXMgYWxpZ25lZCBvbiBhIGxhbmUgYm91bmRhcnkg d2hlbiBjYWxjdWxhdGluZworCSAqIHRoZSBleHBlY3RlZCBkYXRhIHJhdGUuIFRoaXMgaXMgZG9u ZSBieSBleHRlbmRpbmcgSEZQIGluIGNhc2Ugb2YKKwkgKiBtaXNhbGlnbm1lbnQuCisJICovCisJ YWRqX2RzaV9odG90YWwgPSBkc2lfaHRvdGFsOworCWlmIChkc2lfaHRvdGFsICUgZHNpX25sYW5l cykKKwkJYWRqX2RzaV9odG90YWwgKz0gZHNpX25sYW5lcyAtIChkc2lfaHRvdGFsICUgZHNpX25s YW5lcyk7CisKKwlkbGFuZV9icHMgPSAodTY0KWRwaV9oeiAqIGFkal9kc2lfaHRvdGFsOworCisJ LyogZGF0YSByYXRlIGluIGJ5dGVzL3NlYyBpcyBub3QgYW4gaW50ZWdlciwgcmVmdXNlIHRoZSBt b2RlLiAqLworCWlmIChkb19kaXYoZGxhbmVfYnBzLCBkc2lfbmxhbmVzICogZHBpX2h0b3RhbCkp CisJCXJldHVybiAtRUlOVkFMOworCisJLyogZGF0YSByYXRlIHdhcyBpbiBieXRlcy9zZWMsIGNv bnZlcnQgdG8gYml0cy9zZWMuICovCisJZGxhbmVfYnBzICo9IDg7CisKKwlpZiAoZGxhbmVfYnBz ID4gMjUwMDAwMDAwMFVMIHx8IGRsYW5lX2JwcyA8IDE2MDAwMDAwMFVMKQorCQlyZXR1cm4gLUVJ TlZBTDsKKwllbHNlIGlmIChkbGFuZV9icHMgPj0gMTI1MDAwMDAwMCkKKwkJY2ZnLT5wbGxfb3Bk aXYgPSAxOworCWVsc2UgaWYgKGRsYW5lX2JwcyA+PSA2MzAwMDAwMDApCisJCWNmZy0+cGxsX29w ZGl2ID0gMjsKKwllbHNlIGlmIChkbGFuZV9icHMgPj0gMzIwMDAwMDAwKQorCQljZmctPnBsbF9v cGRpdiA9IDQ7CisJZWxzZSBpZiAoZGxhbmVfYnBzID49IDE2MDAwMDAwMCkKKwkJY2ZnLT5wbGxf b3BkaXYgPSA4OworCisJLyoKKwkgKiBBbGxvdyBhIGRldmlhdGlvbiBvZiAwLjIlIG9uIHRoZSBw ZXItbGFuZSBkYXRhIHJhdGUgdG8gdHJ5IHRvCisJICogcmVjb3ZlciBhIHBvdGVudGlhbCBtaXNt YXRjaCBiZXR3ZWVuIERQSSBhbmQgUFBJIGNsa3MuCisJICovCisJZGxhbmVfYnBzX21heCA9IGRs YW5lX2JwcyArIERJVl9ST1VORF9ET1dOX1VMTChkbGFuZV9icHMsIDUwMCk7CisJZmJkaXZfbWF4 ID0gRElWX1JPVU5EX0RPV05fVUxMKGRsYW5lX2Jwc19tYXggKiAyICoKKwkJCQkgICAgICAgY2Zn LT5wbGxfb3BkaXYgKiBjZmctPnBsbF9pcGRpdiwKKwkJCQkgICAgICAgcGxsX3JlZl9oeik7CisJ ZmJkaXYgPSBESVZfUk9VTkRfVVBfVUxMKGRsYW5lX2JwcyAqIDIgKiBjZmctPnBsbF9vcGRpdiAq CisJCQkJIGNmZy0+cGxsX2lwZGl2LAorCQkJCSBwbGxfcmVmX2h6KTsKKworCS8qCisJICogSXRl cmF0ZSBvdmVyIGFsbCBhY2NlcHRhYmxlIGZiZGl2IGFuZCB0cnkgdG8gZmluZCBhbiBhZGp1c3Rl ZCBEU0kKKwkgKiBodG90YWwgbGVuZ3RoIHByb3ZpZGluZyBhbiBleGFjdCBtYXRjaC4KKwkgKgor CSAqIE5vdGUgdGhhdCB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgZXZlbiB0cmlja2llciBieSByZWx5 aW5nIG9uIHRoZSBmYWN0CisJICogdGhhdCBhIG5ldyBsaW5lIGlzIG5vdCBuZWNlc3NhcmlseSBh bGlnbmVkIG9uIGEgbGFuZSBib3VuZGFyeSwgc28sCisJICogYnkgbWFraW5nIGFkal9kc2lfaHRv dGFsIG5vbiBhbGlnbmVkIG9uIGEgZHNpX2xhbmVzIHdlIGNhbiBpbXByb3ZlIGEKKwkgKiBiaXQg dGhlIHByZWNpc2lvbi4gV2l0aCB0aGlzLCB0aGUgc3RlcCB3b3VsZCBiZQorCSAqCisJICoJcGxs X3JlZl9oeiAvICgyICogb3BkaXYgKiBpcGRpdiAqIG5sYW5lcykKKwkgKgorCSAqIGluc3RlYWQg b2YKKwkgKgorCSAqCXBsbF9yZWZfaHogLyAoMiAqIG9wZGl2ICogaXBkaXYpCisJICoKKwkgKiBU aGUgZHJhd2JhY2sgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gbWFr ZSBzdXJlIHRoZQorCSAqIG51bWJlciBvciBsaW5lcyBpcyBhIG11bHRpcGxlIG9mIHRoZSByZWFs aWdubWVudCBwZXJpb2RpY2l0eSB3aGljaCBpcworCSAqIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJl ciBvZiBsYW5lcyBhbmQgdGhlIG9yaWdpbmFsIG1pc2FsaWdubWVudC4gRm9yCisJICogZXhhbXBs ZSwgZm9yIE5MQU5FUyA9IDQgYW5kIEhUT1RBTCAlIE5MQU5FUyA9IDMsIGl0IHRha2VzIDQgbGlu ZXMKKwkgKiB0byByZWFsaWduIG9uIGEgbGFuZToKKwkgKiBMSU5FIDA6IGV4cGVjdGVkIG51bWJl ciBvZiBieXRlcywgc3RhcnRzIGVtaXR0aW5nIGZpcnN0IGJ5dGUgb2YKKwkgKgkgICBMSU5FIDEg b24gTEFORSAzCisJICogTElORSAxOiBleHBlY3RlZCBudW1iZXIgb2YgYnl0ZXMsIHN0YXJ0cyBl bWl0dGluZyBmaXJzdCAyIGJ5dGVzIG9mCisJICoJICAgTElORSAyIG9uIExBTkVTIDIgYW5kIDMK KwkgKiBMSU5FIDI6IGV4cGVjdGVkIG51bWJlciBvZiBieXRlcywgc3RhcnRzIGVtaXR0aW5nIGZp cnN0IDMgYnl0ZXMgb2YKKwkgKgkgICBvZiBMSU5FIDMgb24gTEFORVMgMSwgMiBhbmQgMworCSAq IExJTkUgMzogb25lIGJ5dGUgbGVzcywgbm93IHRoaW5ncyBhcmUgcmVhbGlnbmVkIG9uIExBTkUg MCBmb3IgTElORSA0CisJICoKKwkgKiBJIGZpZ3VyZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5IHdh cyBub3Qgd29ydGggdGhlIGJlbmVmaXQsIGJ1dCBpZgorCSAqIHNvbWVvbmUgcmVhbGx5IGhhcyB1 bmZpeGFibGUgbWlzbWF0Y2gsIHRoYXQgd291bGQgYmUgc29tZXRoaW5nIHRvCisJICogaW52ZXN0 aWdhdGUuCisJICovCisJZm9yICg7IGZiZGl2IDw9IGZiZGl2X21heDsgZmJkaXYrKykgeworCQl1 MzIgcmVtOworCisJCWFkal9kc2lfaHRvdGFsID0gKHU2NClmYmRpdiAqIHBsbF9yZWZfaHogKiBk c2lfbmxhbmVzICoKKwkJCQkgZHBpX2h0b3RhbDsKKworCQkvKgorCQkgKiBEbyB0aGUgZGl2aXNp b24gaW4gMiBzdGVwcyB0byBhdm9pZCBhbiBvdmVyZmxvdyBvbiB0aGUKKwkJICogZGl2aWRlci4K KwkJICovCisJCXJlbSA9IGRvX2RpdihhZGpfZHNpX2h0b3RhbCwgZHBpX2h6KTsKKwkJaWYgKHJl bSkKKwkJCWNvbnRpbnVlOworCisJCXJlbSA9IGRvX2RpdihhZGpfZHNpX2h0b3RhbCwKKwkJCSAg ICAgY2ZnLT5wbGxfb3BkaXYgKiBjZmctPnBsbF9pcGRpdiAqIDIgKiA4KTsKKwkJaWYgKHJlbSkK KwkJCWNvbnRpbnVlOworCisJCWNmZy0+cGxsX2ZiZGl2ID0gZmJkaXY7CisJCSpkc2lfaGZwX2V4 dCA9IGFkal9kc2lfaHRvdGFsIC0gZHNpX2h0b3RhbDsKKwkJYnJlYWs7CisJfQorCisJLyogTm8g bWF0Y2gsIGxldCdzIGp1c3QgcmVqZWN0IHRoZSBkaXNwbGF5IG1vZGUuICovCisJaWYgKCFjZmct PnBsbF9mYmRpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbGFuZV9icHMgPSBESVZfUk9VTkRf RE9XTl9VTEwoKHU2NClkcGlfaHogKiBhZGpfZHNpX2h0b3RhbCAqIDgsCisJCQkJICAgICAgIGRz aV9ubGFuZXMgKiBkcGlfaHRvdGFsKTsKKwljZmctPmxhbmVfYnBzID0gZGxhbmVfYnBzOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kcGh5X3NldHVwX3BzbShzdHJ1Y3QgY2Ru c19kcGh5ICpkcGh5KQoreworCXVuc2lnbmVkIGxvbmcgcHNtX2Nsa19oeiA9IGNsa19nZXRfcmF0 ZShkcGh5LT5wc21fY2xrKTsKKwl1bnNpZ25lZCBsb25nIHBzbV9kaXY7CisKKwlpZiAoIXBzbV9j bGtfaHogfHwgcHNtX2Nsa19oeiA+IDEwMDAwMDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlw c21fZGl2ID0gRElWX1JPVU5EX0NMT1NFU1QocHNtX2Nsa19oeiwgMTAwMDAwMCk7CisJaWYgKGRw aHktPm9wcy0+c2V0X3BzbV9kaXYpCisJCWRwaHktPm9wcy0+c2V0X3BzbV9kaXYoZHBoeSwgcHNt X2Rpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2Ruc19kcGh5X3NldF9jbGtf bGFuZV9jZmcoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwKKwkJCQkgICAgICAgZW51bSBjZG5zX2Rw aHlfY2xrX2xhbmVfY2ZnIGNmZykKK3sKKwlpZiAoZHBoeS0+b3BzLT5zZXRfY2xrX2xhbmVfY2Zn KQorCQlkcGh5LT5vcHMtPnNldF9jbGtfbGFuZV9jZmcoZHBoeSwgY2ZnKTsKK30KKworc3RhdGlj IHZvaWQgY2Ruc19kcGh5X3NldF9wbGxfY2ZnKHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksCisJCQkJ ICBjb25zdCBzdHJ1Y3QgY2Ruc19kcGh5X2NmZyAqY2ZnKQoreworCWlmIChkcGh5LT5vcHMtPnNl dF9wbGxfY2ZnKQorCQlkcGh5LT5vcHMtPnNldF9wbGxfY2ZnKGRwaHksIGNmZyk7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNkbnNfZHBoeV9nZXRfd2FrZXVwX3RpbWVfbnMoc3RydWN0IGNk bnNfZHBoeSAqZHBoeSkKK3sKKwlyZXR1cm4gZHBoeS0+b3BzLT5nZXRfd2FrZXVwX3RpbWVfbnMo ZHBoeSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHBpX3RvX2RzaV90aW1pbmcodW5zaWdu ZWQgaW50IGRwaV90aW1pbmcsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGRwaV9icHAsCisJCQkJ ICAgICAgdW5zaWduZWQgaW50IGRzaV9wa3Rfb3ZlcmhlYWQpCit7CisJdW5zaWduZWQgaW50IGRz aV90aW1pbmcgPSBESVZfUk9VTkRfVVAoZHBpX3RpbWluZyAqIGRwaV9icHAsIDgpOworCisJaWYg KGRzaV90aW1pbmcgPCBkc2lfcGt0X292ZXJoZWFkKQorCQlkc2lfdGltaW5nID0gMDsKKwllbHNl CisJCWRzaV90aW1pbmcgLT0gZHNpX3BrdF9vdmVyaGVhZDsKKworCXJldHVybiBkc2lfdGltaW5n OworfQorCitzdGF0aWMgaW50IGNkbnNfZHNpX21vZGUyY2ZnKHN0cnVjdCBjZG5zX2RzaSAqZHNp LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAg c3RydWN0IGNkbnNfZHNpX2NmZyAqZHNpX2NmZywKKwkJCSAgICAgc3RydWN0IGNkbnNfZHBoeV9j ZmcgKmRwaHlfY2ZnLAorCQkJICAgICBib29sIG1vZGVfdmFsaWRfY2hlY2spCit7CisJdW5zaWdu ZWQgbG9uZyBkc2lfaHRvdGFsID0gMCwgZHNpX2hzc19oc2FfaHNlX2hicCA9IDA7CisJc3RydWN0 IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0OworCXVuc2lnbmVkIGludCBk c2lfaGZwX2V4dCA9IDAsIGRwaV9oZnAsIHRtcDsKKwlib29sIHN5bmNfcHVsc2UgPSBmYWxzZTsK KwlpbnQgYnBwLCBubGFuZXMsIHJldDsKKworCW1lbXNldChkc2lfY2ZnLCAwLCBzaXplb2YoKmRz aV9jZmcpKTsKKworCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVf VklERU9fU1lOQ19QVUxTRSkKKwkJc3luY19wdWxzZSA9IHRydWU7CisKKwlicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKG91dHB1dC0+ZGV2LT5mb3JtYXQpOworCW5sYW5lcyA9IG91 dHB1dC0+ZGV2LT5sYW5lczsKKworCWlmIChtb2RlX3ZhbGlkX2NoZWNrKQorCQl0bXAgPSBtb2Rl LT5odG90YWwgLQorCQkgICAgICAoc3luY19wdWxzZSA/IG1vZGUtPmhzeW5jX2VuZCA6IG1vZGUt PmhzeW5jX3N0YXJ0KTsKKwllbHNlCisJCXRtcCA9IG1vZGUtPmNydGNfaHRvdGFsIC0KKwkJICAg ICAgKHN5bmNfcHVsc2UgPworCQkgICAgICAgbW9kZS0+Y3J0Y19oc3luY19lbmQgOiBtb2RlLT5j cnRjX2hzeW5jX3N0YXJ0KTsKKworCWRzaV9jZmctPmhicCA9IGRwaV90b19kc2lfdGltaW5nKHRt cCwgYnBwLCBEU0lfSEJQX0ZSQU1FX09WRVJIRUFEKTsKKwlkc2lfaHRvdGFsICs9IGRzaV9jZmct PmhicCArIERTSV9IQlBfRlJBTUVfT1ZFUkhFQUQ7CisJZHNpX2hzc19oc2FfaHNlX2hicCArPSBk c2lfY2ZnLT5oYnAgKyBEU0lfSEJQX0ZSQU1FX09WRVJIRUFEOworCisJaWYgKHN5bmNfcHVsc2Up IHsKKwkJaWYgKG1vZGVfdmFsaWRfY2hlY2spCisJCQl0bXAgPSBtb2RlLT5oc3luY19lbmQgLSBt b2RlLT5oc3luY19zdGFydDsKKwkJZWxzZQorCQkJdG1wID0gbW9kZS0+Y3J0Y19oc3luY19lbmQg LSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCisJCWRzaV9jZmctPmhzYSA9IGRwaV90b19kc2lf dGltaW5nKHRtcCwgYnBwLAorCQkJCQkJIERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQpOworCQlkc2lf aHRvdGFsICs9IGRzaV9jZmctPmhzYSArIERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQ7CisJCWRzaV9o c3NfaHNhX2hzZV9oYnAgKz0gZHNpX2NmZy0+aHNhICsgRFNJX0hTQV9GUkFNRV9PVkVSSEVBRDsK Kwl9CisKKwlkc2lfY2ZnLT5oYWN0ID0gZHBpX3RvX2RzaV90aW1pbmcobW9kZV92YWxpZF9jaGVj ayA/CisJCQkJCSAgbW9kZS0+aGRpc3BsYXkgOiBtb2RlLT5jcnRjX2hkaXNwbGF5LAorCQkJCQkg IGJwcCwgMCk7CisJZHNpX2h0b3RhbCArPSBkc2lfY2ZnLT5oYWN0OworCisJaWYgKG1vZGVfdmFs aWRfY2hlY2spCisJCWRwaV9oZnAgPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5 OworCWVsc2UKKwkJZHBpX2hmcCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5jcnRj X2hkaXNwbGF5OworCisJZHNpX2NmZy0+aGZwID0gZHBpX3RvX2RzaV90aW1pbmcoZHBpX2hmcCwg YnBwLCBEU0lfSEZQX0ZSQU1FX09WRVJIRUFEKTsKKwlkc2lfaHRvdGFsICs9IGRzaV9jZmctPmhm cCArIERTSV9IRlBfRlJBTUVfT1ZFUkhFQUQ7CisKKwlpZiAobW9kZV92YWxpZF9jaGVjaykKKwkJ cmV0ID0gY2Ruc19kc2lfZ2V0X2RwaHlfcGxsX2NmZyhkc2ktPmRwaHksIGRwaHlfY2ZnLAorCQkJ CQkJbW9kZS0+aHRvdGFsLCBicHAsCisJCQkJCQltb2RlLT5jbG9jayAqIDEwMDAsCisJCQkJCQlk c2lfaHRvdGFsLCBubGFuZXMsCisJCQkJCQkmZHNpX2hmcF9leHQpOworCWVsc2UKKwkJcmV0ID0g Y2Ruc19kc2lfZ2V0X2RwaHlfcGxsX2NmZyhkc2ktPmRwaHksIGRwaHlfY2ZnLAorCQkJCQkJbW9k ZS0+Y3J0Y19odG90YWwsIGJwcCwKKwkJCQkJCW1vZGUtPmNydGNfY2xvY2sgKiAxMDAwLAorCQkJ CQkJZHNpX2h0b3RhbCwgbmxhbmVzLAorCQkJCQkJJmRzaV9oZnBfZXh0KTsKKworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlkc2lfY2ZnLT5oZnAgKz0gZHNpX2hmcF9leHQ7CisJZHNpX2h0 b3RhbCArPSBkc2lfaGZwX2V4dDsKKwlkc2lfY2ZnLT5odG90YWwgPSBkc2lfaHRvdGFsOworCisJ LyoKKwkgKiBNYWtlIHN1cmUgRFBJKEhGUCkgPiBEU0koSFNTK0hTQStIU0UrSEJQKSB0byBndWFy YW50ZWUgdGhhdCB0aGUgRklGTworCSAqIGlzIGVtcHR5IGJlZm9yZSB3ZSBzdGFydCBhIHJlY2Vp dmluZyBhIG5ldyBsaW5lIG9uIHRoZSBEUEkKKwkgKiBpbnRlcmZhY2UuCisJICovCisJaWYgKCh1 NjQpZHBoeV9jZmctPmxhbmVfYnBzICogZHBpX2hmcCAqIG5sYW5lcyA8CisJICAgICh1NjQpZHNp X2hzc19oc2FfaHNlX2hicCAqCisJICAgIChtb2RlX3ZhbGlkX2NoZWNrID8gbW9kZS0+Y2xvY2sg OiBtb2RlLT5jcnRjX2Nsb2NrKSAqIDEwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSBicmlkZ2Vf dG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGlucHV0 X3RvX2RzaShpbnB1dCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+ b3V0cHV0OworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGJyaWRnZS0+ZGV2LCBEUklW RVJfQVRPTUlDKSkgeworCQlkZXZfZXJyKGRzaS0+YmFzZS5kZXYsCisJCQkiY2Rucy1kc2kgZHJp dmVyIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIERSTSBkZXZpY2VzIHN1cHBvcnRpbmcgYXRvbWlj IHVwZGF0ZXMiKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gZHJtX2JyaWRn ZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBvdXRwdXQtPmJyaWRnZSwgYnJpZGdlKTsKK30KKwor c3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitjZG5zX2RzaV9icmlkZ2VfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9IGJyaWRnZV90 b19jZG5zX2RzaV9pbnB1dChicmlkZ2UpOworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gaW5wdXRf dG9fZHNpKGlucHV0KTsKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5v dXRwdXQ7CisJc3RydWN0IGNkbnNfZHBoeV9jZmcgZHBoeV9jZmc7CisJc3RydWN0IGNkbnNfZHNp X2NmZyBkc2lfY2ZnOworCWludCBicHAsIG5sYW5lcywgcmV0OworCisJLyoKKwkgKiBWRlBfRFNJ IHNob3VsZCBiZSBsZXNzIHRoYW4gVkZQX0RQSSBhbmQgVkZQX0RTSSBzaG91bGQgYmUgYXQKKwkg KiBsZWFzdCAxLgorCSAqLworCWlmIChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQgPCAy KQorCQlyZXR1cm4gTU9ERV9WX0lMTEVHQUw7CisKKwkvKiBWU0FfRFNJID0gVlNBX0RQSSBhbmQg bXVzdCBiZSBhdCBsZWFzdCAyLiAqLworCWlmIChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3lu Y19zdGFydCA8IDIpCisJCXJldHVybiBNT0RFX1ZfSUxMRUdBTDsKKworCS8qIEhBQ1QgbXVzdCBi ZSAzMi1iaXRzIGFsaWduZWQuICovCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2Jw cChvdXRwdXQtPmRldi0+Zm9ybWF0KTsKKwlpZiAoKG1vZGUtPmhkaXNwbGF5ICogYnBwKSAlIDMy KQorCQlyZXR1cm4gTU9ERV9IX0lMTEVHQUw7CisKKwlubGFuZXMgPSBvdXRwdXQtPmRldi0+bGFu ZXM7CisKKwlyZXQgPSBjZG5zX2RzaV9tb2RlMmNmZyhkc2ksIG1vZGUsICZkc2lfY2ZnLCAmZHBo eV9jZmcsIHRydWUpOworCWlmIChyZXQpCisJCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOworCisJ cmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2JyaWRnZV9kaXNhYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICpp bnB1dCA9IGJyaWRnZV90b19jZG5zX2RzaV9pbnB1dChicmlkZ2UpOworCXN0cnVjdCBjZG5zX2Rz aSAqZHNpID0gaW5wdXRfdG9fZHNpKGlucHV0KTsKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwo ZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKwl2YWwgJj0gfihJRl9WSURfU0VMRUNU X01BU0sgfCBJRl9WSURfTU9ERSB8IFZJRF9FTiB8IEhPU1RfRU9UX0dFTiB8CisJCSBESVNQX0VP VF9HRU4pOworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisK Kwl2YWwgPSByZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pICYgfklGX0VOKGlucHV0LT5p ZCk7CisJd3JpdGVsKHZhbCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKTsKKwlwbV9ydW50aW1l X3B1dChkc2ktPmJhc2UuZGV2KTsKK30KKworc3RhdGljIHZvaWQgY2Ruc19kc2lfaHNfaW5pdChz dHJ1Y3QgY2Ruc19kc2kgKmRzaSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNkbnNfZHBoeV9jZmcg KmRwaHlfY2ZnKQoreworCXUzMiBzdGF0dXM7CisKKwkvKgorCSAqIFBvd2VyIGFsbCBpbnRlcm5h bCBEUEhZIGJsb2NrcyBkb3duIGFuZCBtYWludGFpbiB0aGVpciByZXNldCBsaW5lCisJICogYXNz ZXJ0ZWQgYmVmb3JlIGNoYW5naW5nIHRoZSBEUEhZIGNvbmZpZy4KKwkgKi8KKwl3cml0ZWwoRFBI WV9DTU5fUFNPIHwgRFBIWV9QTExfUFNPIHwgRFBIWV9BTExfRF9QRE4gfCBEUEhZX0NfUEROIHwK KwkgICAgICAgRFBIWV9DTU5fUEROIHwgRFBIWV9QTExfUEROLAorCSAgICAgICBkc2ktPnJlZ3Mg KyBNQ1RMX0RQSFlfQ0ZHMCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgaW50ZXJuYWwgUFNN IGNsayBkaXZpZGVyIHNvIHRoYXQgdGhlIERQSFkgaGFzIGEKKwkgKiAxTUh6IGNsayAob3Igc29t ZXRoaW5nIGNsb3NlKS4KKwkgKi8KKwlXQVJOX09OX09OQ0UoY2Ruc19kcGh5X3NldHVwX3BzbShk c2ktPmRwaHkpKTsKKworCS8qCisJICogQ29uZmlndXJlIGF0dGFjaCBjbGsgbGFuZXMgdG8gZGF0 YSBsYW5lczogdGhlIERQSFkgaGFzIDIgY2xrIGxhbmVzCisJICogYW5kIDggZGF0YSBsYW5lcywg ZWFjaCBjbGsgbGFuZSBjYW4gYmUgYXR0YWNoZSBkaWZmZXJlbnQgc2V0IG9mCisJICogZGF0YSBs YW5lcy4gVGhlIDIgZ3JvdXBzIGFyZSBuYW1lZCAnbGVmdCcgYW5kICdyaWdodCcsIHNvIGhlcmUg d2UKKwkgKiBqdXN0IHNheSB0aGF0IHdlIHdhbnQgdGhlICdsZWZ0JyBjbGsgbGFuZSB0byBkcml2 ZSB0aGUgJ2xlZnQnIGRhdGEKKwkgKiBsYW5lcy4KKwkgKi8KKwljZG5zX2RwaHlfc2V0X2Nsa19s YW5lX2NmZyhkc2ktPmRwaHksIERQSFlfQ0xLX0NGR19MRUZUX0RSSVZFU19MRUZUKTsKKworCS8q CisJICogQ29uZmlndXJlIHRoZSBEUEhZIFBMTCB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0 ZSB0aGUgVFggYnl0ZQorCSAqIGNsay4KKwkgKi8KKwljZG5zX2RwaHlfc2V0X3BsbF9jZmcoZHNp LT5kcGh5LCBkcGh5X2NmZyk7CisKKwkvKiBTdGFydCBUWCBzdGF0ZSBtYWNoaW5lLiAqLworCXdy aXRlbChEUEhZX0NNTl9TU01fRU4gfCBEUEhZX0NNTl9UWF9NT0RFX0VOLAorCSAgICAgICBkc2kt PmRwaHktPnJlZ3MgKyBEUEhZX0NNTl9TU00pOworCisJLyogQWN0aXZhdGUgdGhlIFBMTCBhbmQg d2FpdCB1bnRpbCBpdCdzIGxvY2tlZC4gKi8KKwl3cml0ZWwoUExMX0xPQ0tFRCwgZHNpLT5yZWdz ICsgTUNUTF9NQUlOX1NUU19DTFIpOworCXdyaXRlbChEUEhZX0NNTl9QU08gfCBEUEhZX0FMTF9E X1BETiB8IERQSFlfQ19QRE4gfCBEUEhZX0NNTl9QRE4sCisJICAgICAgIGRzaS0+cmVncyArIE1D VExfRFBIWV9DRkcwKTsKKwlXQVJOX09OX09OQ0UocmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+cmVn cyArIE1DVExfTUFJTl9TVFMsIHN0YXR1cywKKwkJCQkJc3RhdHVzICYgUExMX0xPQ0tFRCwgMTAw LCAxMDApKTsKKwkvKiBEZS1hc3NlcnQgZGF0YSBhbmQgY2xvY2sgcmVzZXQgbGluZXMuICovCisJ d3JpdGVsKERQSFlfQ01OX1BTTyB8IERQSFlfQUxMX0RfUEROIHwgRFBIWV9DX1BETiB8IERQSFlf Q01OX1BETiB8CisJICAgICAgIERQSFlfRF9SU1RCKGRwaHlfY2ZnLT5ubGFuZXMpIHwgRFBIWV9D X1JTVEIsCisJICAgICAgIGRzaS0+cmVncyArIE1DVExfRFBIWV9DRkcwKTsKK30KKworc3RhdGlj IHZvaWQgY2Ruc19kc2lfaW5pdF9saW5rKHN0cnVjdCBjZG5zX2RzaSAqZHNpKQoreworCXN0cnVj dCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91dHB1dDsKKwl1bnNpZ25lZCBsb25n IHN5c2Nsa19wZXJpb2QsIHVscG91dDsKKwl1MzIgdmFsOworCWludCBpOworCisJaWYgKGRzaS0+ bGlua19pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJdmFsID0gMDsKKwlmb3IgKGkgPSAxOyBp IDwgb3V0cHV0LT5kZXYtPmxhbmVzOyBpKyspCisJCXZhbCB8PSBEQVRBX0xBTkVfRU4oaSk7CisK KwlpZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX0NMT0NLX05PTl9DT05U SU5VT1VTKSkKKwkJdmFsIHw9IENMS19DT05USU5VT1VTOworCisJd3JpdGVsKHZhbCwgZHNpLT5y ZWdzICsgTUNUTF9NQUlOX1BIWV9DVEwpOworCisJLyogVUxQT1VUIHNob3VsZCBiZSBzZXQgdG8g MW1zIGFuZCBpcyBleHByZXNzZWQgaW4gc3lzY2xrIGN5Y2xlcy4gKi8KKwlzeXNjbGtfcGVyaW9k ID0gTlNFQ19QRVJfU0VDIC8gY2xrX2dldF9yYXRlKGRzaS0+ZHNpX3N5c19jbGspOworCXVscG91 dCA9IERJVl9ST1VORF9VUChOU0VDX1BFUl9NU0VDLCBzeXNjbGtfcGVyaW9kKTsKKwl3cml0ZWwo Q0xLX0xBTkVfVUxQT1VUX1RJTUUodWxwb3V0KSB8IERBVEFfTEFORV9VTFBPVVRfVElNRSh1bHBv dXQpLAorCSAgICAgICBkc2ktPnJlZ3MgKyBNQ1RMX1VMUE9VVF9USU1FKTsKKworCXdyaXRlbChM SU5LX0VOLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwpOworCisJdmFsID0gQ0xLX0xB TkVfRU4gfCBQTExfU1RBUlQ7CisJZm9yIChpID0gMDsgaSA8IG91dHB1dC0+ZGV2LT5sYW5lczsg aSsrKQorCQl2YWwgfD0gREFUQV9MQU5FX1NUQVJUKGkpOworCisJd3JpdGVsKHZhbCwgZHNpLT5y ZWdzICsgTUNUTF9NQUlOX0VOKTsKKworCWRzaS0+bGlua19pbml0aWFsaXplZCA9IHRydWU7Cit9 CisKK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gYnJpZGdlX3RvX2Nk bnNfZHNpX2lucHV0KGJyaWRnZSk7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBpbnB1dF90b19k c2koaW5wdXQpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91dHB1 dDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlzdHJ1Y3QgY2Ruc19kcGh5X2Nm ZyBkcGh5X2NmZzsKKwl1bnNpZ25lZCBsb25nIHR4X2J5dGVfcGVyaW9kOworCXN0cnVjdCBjZG5z X2RzaV9jZmcgZHNpX2NmZzsKKwl1MzIgdG1wLCByZWdfd2FrZXVwLCBkaXY7CisJaW50IGJwcCwg bmxhbmVzOworCisJaWYgKFdBUk5fT04ocG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmJhc2UuZGV2 KSA8IDApKQorCQlyZXR1cm47CisKKwltb2RlID0gJmJyaWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+c3Rh dGUtPmFkanVzdGVkX21vZGU7CisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChv dXRwdXQtPmRldi0+Zm9ybWF0KTsKKwlubGFuZXMgPSBvdXRwdXQtPmRldi0+bGFuZXM7CisKKwlX QVJOX09OX09OQ0UoY2Ruc19kc2lfbW9kZTJjZmcoZHNpLCBtb2RlLCAmZHNpX2NmZywgJmRwaHlf Y2ZnLCBmYWxzZSkpOworCisJY2Ruc19kc2lfaHNfaW5pdChkc2ksICZkcGh5X2NmZyk7CisJY2Ru c19kc2lfaW5pdF9saW5rKGRzaSk7CisKKwl3cml0ZWwoSEJQX0xFTihkc2lfY2ZnLmhicCkgfCBI U0FfTEVOKGRzaV9jZmcuaHNhKSwKKwkgICAgICAgZHNpLT5yZWdzICsgVklEX0hTSVpFMSk7CisJ d3JpdGVsKEhGUF9MRU4oZHNpX2NmZy5oZnApIHwgSEFDVF9MRU4oZHNpX2NmZy5oYWN0KSwKKwkg ICAgICAgZHNpLT5yZWdzICsgVklEX0hTSVpFMik7CisKKwl3cml0ZWwoVkJQX0xFTihtb2RlLT5j cnRjX3Z0b3RhbCAtIG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gMSkgfAorCSAgICAgICBWRlBfTEVO KG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSB8CisJICAgICAg IFZTQV9MRU4obW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsg MSksCisJICAgICAgIGRzaS0+cmVncyArIFZJRF9WU0laRTEpOworCXdyaXRlbChtb2RlLT5jcnRj X3ZkaXNwbGF5LCBkc2ktPnJlZ3MgKyBWSURfVlNJWkUyKTsKKworCXRtcCA9IGRzaV9jZmcuaHRv dGFsIC0KKwkgICAgICAoZHNpX2NmZy5oc2EgKyBEU0lfQkxBTktJTkdfRlJBTUVfT1ZFUkhFQUQg KworCSAgICAgICBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEKTsKKwl3cml0ZWwoQkxLX0xJTkVfUFVM U0VfUEtUX0xFTih0bXApLCBkc2ktPnJlZ3MgKyBWSURfQkxLU0laRTIpOworCWlmIChvdXRwdXQt PmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJd3Jp dGVsKE1BWF9MSU5FX0xJTUlUKHRtcCAtIERTSV9OVUxMX0ZSQU1FX09WRVJIRUFEKSwKKwkJICAg ICAgIGRzaS0+cmVncyArIFZJRF9WQ0FfU0VUVElORzIpOworCisJdG1wID0gZHNpX2NmZy5odG90 YWwgLQorCSAgICAgIChEU0lfSFNTX1ZTU19WU0VfRlJBTUVfT1ZFUkhFQUQgKyBEU0lfQkxBTktJ TkdfRlJBTUVfT1ZFUkhFQUQpOworCXdyaXRlbChCTEtfTElORV9FVkVOVF9QS1RfTEVOKHRtcCks IGRzaS0+cmVncyArIFZJRF9CTEtTSVpFMSk7CisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVfZmxh Z3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQl3cml0ZWwoTUFYX0xJTkVf TElNSVQodG1wIC0gRFNJX05VTExfRlJBTUVfT1ZFUkhFQUQpLAorCQkgICAgICAgZHNpLT5yZWdz ICsgVklEX1ZDQV9TRVRUSU5HMik7CisKKwl0bXAgPSBESVZfUk9VTkRfVVAoZHNpX2NmZy5odG90 YWwsIG5sYW5lcykgLQorCSAgICAgIERJVl9ST1VORF9VUChkc2lfY2ZnLmhzYSwgbmxhbmVzKTsK KworCWlmICghKG91dHB1dC0+ZGV2LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9FT1RfUEFD S0VUKSkKKwkJdG1wIC09IERJVl9ST1VORF9VUChEU0lfRU9UX1BLVF9TSVpFLCBubGFuZXMpOwor CisJdHhfYnl0ZV9wZXJpb2QgPSBESVZfUk9VTkRfRE9XTl9VTEwoKHU2NClOU0VDX1BFUl9TRUMg KiA4LAorCQkJCQkgICAgZHBoeV9jZmcubGFuZV9icHMpOworCXJlZ193YWtldXAgPSBjZG5zX2Rw aHlfZ2V0X3dha2V1cF90aW1lX25zKGRzaS0+ZHBoeSkgLworCQkgICAgIHR4X2J5dGVfcGVyaW9k OworCXdyaXRlbChSRUdfV0FLRVVQX1RJTUUocmVnX3dha2V1cCkgfCBSRUdfTElORV9EVVJBVElP Tih0bXApLAorCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfRFBIWV9USU1FKTsKKworCS8qCisJICog SFNUWCBhbmQgTFBSWCB0aW1lb3V0cyBhcmUgYm90aCBleHByZXNzZWQgaW4gVFggYnl0ZSBjbGsg Y3ljbGVzIGFuZAorCSAqIGJvdGggc2hvdWxkIGJlIHNldCB0byBhdCBsZWFzdCB0aGUgdGltZSBp dCB0YWtlcyB0byB0cmFuc21pdCBhCisJICogZnJhbWUuCisJICovCisJdG1wID0gTlNFQ19QRVJf U0VDIC8gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisJdG1wIC89IHR4X2J5dGVfcGVyaW9kOwor CisJZm9yIChkaXYgPSAwOyBkaXYgPD0gQ0xLX0RJVl9NQVg7IGRpdisrKSB7CisJCWlmICh0bXAg PD0gSFNUWF9USU1FT1VUX01BWCkKKwkJCWJyZWFrOworCisJCXRtcCA+Pj0gMTsKKwl9CisKKwlp ZiAodG1wID4gSFNUWF9USU1FT1VUX01BWCkKKwkJdG1wID0gSFNUWF9USU1FT1VUX01BWDsKKwor CXdyaXRlbChDTEtfRElWKGRpdikgfCBIU1RYX1RJTUVPVVQodG1wKSwKKwkgICAgICAgZHNpLT5y ZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQxKTsKKworCXdyaXRlbChMUFJYX1RJTUVPVVQodG1wKSwg ZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQyKTsKKworCWlmIChvdXRwdXQtPmRldi0+bW9k ZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJc3dpdGNoIChvdXRwdXQtPmRldi0+ Zm9ybWF0KSB7CisJCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJCXRtcCA9IFZJRF9QSVhF TF9NT0RFX1JHQjg4OCB8CisJCQkgICAgICBWSURfREFUQVRZUEUoTUlQSV9EU0lfUEFDS0VEX1BJ WEVMX1NUUkVBTV8yNCk7CisJCQlicmVhazsKKworCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6 CisJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I2NjYgfAorCQkJICAgICAgVklEX0RBVEFUWVBF KE1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xOCk7CisJCQlicmVhazsKKworCQljYXNlIE1J UElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQkJdG1wID0gVklEX1BJWEVMX01PREVfUkdCNjY2 X1BBQ0tFRCB8CisJCQkgICAgICBWSURfREFUQVRZUEUoTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NU UkVBTV8xOCk7CisJCQlicmVhazsKKworCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCQl0 bXAgPSBWSURfUElYRUxfTU9ERV9SR0I1NjUgfAorCQkJICAgICAgVklEX0RBVEFUWVBFKE1JUElf RFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ CWRldl9lcnIoZHNpLT5iYXNlLmRldiwgIlVuc3VwcG9ydGVkIERTSSBmb3JtYXRcbiIpOworCQkJ cmV0dXJuOworCQl9CisKKwkJaWYgKG91dHB1dC0+ZGV2LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lf TU9ERV9WSURFT19TWU5DX1BVTFNFKQorCQkJdG1wIHw9IFNZTkNfUFVMU0VfQUNUSVZFIHwgU1lO Q19QVUxTRV9IT1JJWk9OVEFMOworCisJCXRtcCB8PSBSRUdfQkxLTElORV9NT0RFKFJFR19CTEtf TU9ERV9CTEFOS0lOR19QS1QpIHwKKwkJICAgICAgIFJFR19CTEtFT0xfTU9ERShSRUdfQkxLX01P REVfQkxBTktJTkdfUEtUKSB8CisJCSAgICAgICBSRUNPVkVSWV9NT0RFKFJFQ09WRVJZX01PREVf TkVYVF9IU1lOQykgfAorCQkgICAgICAgVklEX0lHTk9SRV9NSVNTX1ZTWU5DOworCisJCXdyaXRl bCh0bXAsIGRzaS0+cmVncyArIFZJRF9NQUlOX0NUTCk7CisJfQorCisJdG1wID0gcmVhZGwoZHNp LT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKwl0bXAgJj0gfihJRl9WSURfU0VMRUNUX01B U0sgfCBIT1NUX0VPVF9HRU4gfCBJRl9WSURfTU9ERSk7CisKKwlpZiAoIShvdXRwdXQtPmRldi0+ bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfRU9UX1BBQ0tFVCkpCisJCXRtcCB8PSBIT1NUX0VP VF9HRU47CisKKwlpZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJ REVPKQorCQl0bXAgfD0gSUZfVklEX01PREUgfCBJRl9WSURfU0VMRUNUKGlucHV0LT5pZCkgfCBW SURfRU47CisKKwl3cml0ZWwodG1wLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwpOwor CisJdG1wID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKSB8IElGX0VOKGlucHV0LT5p ZCk7CisJd3JpdGVsKHRtcCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGNkbnNfZHNpX2JyaWRnZV9mdW5jcyA9IHsK KwkuYXR0YWNoID0gY2Ruc19kc2lfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV92YWxpZCA9IGNkbnNf ZHNpX2JyaWRnZV9tb2RlX3ZhbGlkLAorCS5kaXNhYmxlID0gY2Ruc19kc2lfYnJpZGdlX2Rpc2Fi bGUsCisJLmVuYWJsZSA9IGNkbnNfZHNpX2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50 IGNkbnNfZHNpX2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgIHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IHRvX2Nk bnNfZHNpKGhvc3QpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91 dHB1dDsKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gJmRzaS0+aW5wdXQ7CisJc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCByZXQ7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBk byBub3Qgc3VwcG9ydCBjb25uZWN0aW5nIHNldmVyYWwgRFNJIGRldmljZXMgdG8gdGhlCisJICog c2FtZSBob3N0LiBJbiBvcmRlciB0byBzdXBwb3J0IHRoYXQgd2UnZCBuZWVkIHRoZSBEUk0gYnJp ZGdlCisJICogZnJhbWV3b3JrIHRvIGFsbG93IGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRo ZSBicmlkZ2UgY2hhaW4uCisJICovCisJaWYgKG91dHB1dC0+ZGV2KQorCQlyZXR1cm4gLUVCVVNZ OworCisJLyogV2UgZG8gbm90IHN1cHBvcnQgYnVyc3QgbW9kZSB5ZXQuICovCisJaWYgKGRldi0+ bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpCisJCXJldHVybiAtRU5PVFNV UFA7CisKKwkvKgorCSAqIFRoZSBob3N0IDwtPiBkZXZpY2UgbGluayBtaWdodCBiZSBkZXNjcmli ZWQgdXNpbmcgYW4gT0YtZ3JhcGgKKwkgKiByZXByZXNlbnRhdGlvbiwgaW4gdGhpcyBjYXNlIHdl IGV4dHJhY3QgdGhlIGRldmljZSBvZl9ub2RlIGZyb20KKwkgKiB0aGlzIHJlcHJlc2VudGF0aW9u LCBvdGhlcndpc2Ugd2UgdXNlIGRzaWRldi0+ZGV2Lm9mX25vZGUgd2hpY2gKKwkgKiBzaG91bGQg aGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgY29yZS4KKwkgKi8KKwlucCA9IG9mX2dyYXBoX2dldF9y ZW1vdGVfbm9kZShkc2ktPmJhc2UuZGV2LT5vZl9ub2RlLCBEU0lfT1VUUFVUX1BPUlQsCisJCQkJ ICAgICAgZGV2LT5jaGFubmVsKTsKKwlpZiAoIW5wKQorCQlucCA9IG9mX25vZGVfZ2V0KGRldi0+ ZGV2Lm9mX25vZGUpOworCisJcGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChucCk7CisJaWYgKHBh bmVsKSB7CisJCWJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLCBEUk1fTU9ERV9D T05ORUNUT1JfRFNJKTsKKwl9IGVsc2UgeworCQlicmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2Uo ZGV2LT5kZXYub2Zfbm9kZSk7CisJCWlmICghYnJpZGdlKQorCQkJYnJpZGdlID0gRVJSX1BUUigt RUlOVkFMKTsKKwl9CisKKwlvZl9ub2RlX3B1dChucCk7CisKKwlpZiAoSVNfRVJSKGJyaWRnZSkp IHsKKwkJcmV0ID0gUFRSX0VSUihicmlkZ2UpOworCQlkZXZfZXJyKGhvc3QtPmRldiwgImZhaWxl ZCB0byBhZGQgRFNJIGRldmljZSAlcyAoZXJyID0gJWQpIiwKKwkJCWRldi0+bmFtZSwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlvdXRwdXQtPmRldiA9IGRldjsKKwlvdXRwdXQtPmJyaWRn ZSA9IGJyaWRnZTsKKwlvdXRwdXQtPnBhbmVsID0gcGFuZWw7CisKKwkvKgorCSAqIFRoZSBEU0kg b3V0cHV0IGhhcyBiZWVuIHByb3Blcmx5IGNvbmZpZ3VyZWQsIHdlIGNhbiBub3cgc2FmZWx5CisJ ICogcmVnaXN0ZXIgdGhlIGlucHV0IHRvIHRoZSBicmlkZ2UgZnJhbWV3b3JrIHNvIHRoYXQgaXQg Y2FuIHRha2UgcGxhY2UKKwkgKiBpbiBhIGRpc3BsYXkgcGlwZWxpbmUuCisJICovCisJZHJtX2Jy aWRnZV9hZGQoJmlucHV0LT5icmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg Y2Ruc19kc2lfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gdG9fY2Ru c19kc2koaG9zdCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0 cHV0OworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSAmZHNpLT5pbnB1dDsKKworCWRy bV9icmlkZ2VfcmVtb3ZlKCZpbnB1dC0+YnJpZGdlKTsKKwlpZiAob3V0cHV0LT5wYW5lbCkKKwkJ ZHJtX3BhbmVsX2JyaWRnZV9yZW1vdmUob3V0cHV0LT5icmlkZ2UpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjZG5zX2RzaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAq ZGF0YSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGRhdGE7CisJaXJxcmV0dXJuX3QgcmV0 ID0gSVJRX05PTkU7CisJdTMyIGZsYWcsIGN0bDsKKworCWZsYWcgPSByZWFkbChkc2ktPnJlZ3Mg KyBESVJFQ1RfQ01EX1NUU19GTEFHKTsKKwlpZiAoZmxhZykgeworCQljdGwgPSByZWFkbChkc2kt PnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCQljdGwgJj0gfmZsYWc7CisJCXdyaXRlbChj dGwsIGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTX0NUTCk7CisJCWNvbXBsZXRlKCZkc2ktPmRp cmVjdF9jbWRfY29tcCk7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNkbnNfZHNpX3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9o b3N0ICpob3N0LAorCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJc3Ry dWN0IGNkbnNfZHNpICpkc2kgPSB0b19jZG5zX2RzaShob3N0KTsKKwl1MzIgY21kLCBzdHMsIHZh bCwgd2FpdCA9IFdSSVRFX0NPTVBMRVRFRCwgY3RsID0gMDsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFj a2V0IHBhY2tldDsKKwlpbnQgcmV0LCBpLCB0eF9sZW4sIHJ4X2xlbjsKKworCXJldCA9IHBtX3J1 bnRpbWVfZ2V0X3N5bmMoaG9zdC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KworCWNkbnNfZHNpX2luaXRfbGluayhkc2kpOworCisJcmV0ID0gbWlwaV9kc2lfY3JlYXRlX3Bh Y2tldCgmcGFja2V0LCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJdHhfbGVuID0g bXNnLT50eF9idWYgPyBtc2ctPnR4X2xlbiA6IDA7CisJcnhfbGVuID0gbXNnLT5yeF9idWYgPyBt c2ctPnJ4X2xlbiA6IDA7CisKKwkvKiBGb3IgcmVhZCBvcGVyYXRpb25zLCB0aGUgbWF4aW11bSBU WCBsZW4gaXMgMi4gKi8KKwlpZiAocnhfbGVuICYmIHR4X2xlbiA+IDIpIHsKKwkJcmV0ID0gLUVO T1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUWCBsZW4gaXMgbGltaXRlZCBieSB0aGUg Q01EIEZJRk8gZGVwdGguICovCisJaWYgKHR4X2xlbiA+IGRzaS0+ZGlyZWN0X2NtZF9maWZvX2Rl cHRoKSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUlggbGVu IGlzIGxpbWl0ZWQgYnkgdGhlIFJYIEZJRk8gZGVwdGguICovCisJaWYgKHJ4X2xlbiA+IGRzaS0+ cnhfZmlmb19kZXB0aCkgeworCQlyZXQgPSAtRU5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwor CWNtZCA9IENNRF9TSVpFKHR4X2xlbikgfCBDTURfVkNIQU5fSUQobXNnLT5jaGFubmVsKSB8CisJ ICAgICAgQ01EX0RBVEFUWVBFKG1zZy0+dHlwZSk7CisKKwlpZiAobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19VU0VfTFBNKQorCQljbWQgfD0gQ01EX0xQX0VOOworCisJaWYgKG1pcGlfZHNpX3Bh Y2tldF9mb3JtYXRfaXNfbG9uZyhtc2ctPnR5cGUpKQorCQljbWQgfD0gQ01EX0xPTkc7CisKKwlp ZiAocnhfbGVuKSB7CisJCWNtZCB8PSBSRUFEX0NNRDsKKwkJd2FpdCA9IFJFQURfQ09NUExFVEVE X1dJVEhfRVJSIHwgUkVBRF9DT01QTEVURUQ7CisJCWN0bCA9IFJFQURfRU4gfCBCVEFfRU47CisJ fSBlbHNlIGlmIChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spIHsKKwkJY21kIHw9 IEJUQV9SRVE7CisJCXdhaXQgPSBBQ0tfV0lUSF9FUlJfUkNWRCB8IEFDS19SQ1ZEOworCQljdGwg PSBCVEFfRU47CisJfQorCisJd3JpdGVsKHJlYWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRB X0NUTCkgfCBjdGwsCisJICAgICAgIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisK Kwl3cml0ZWwoY21kLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX01BSU5fU0VUVElOR1MpOworCisJ Zm9yIChpID0gMDsgaSA8IHR4X2xlbjsgaSArPSA0KSB7CisJCWNvbnN0IHU4ICpidWYgPSBtc2ct PnR4X2J1ZjsKKwkJaW50IGo7CisKKwkJdmFsID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IDQgJiYg aiArIGkgPCB0eF9sZW47IGorKykKKwkJCXZhbCB8PSAodTMyKWJ1ZltpICsgal0gPDwgKDggKiBq KTsKKworCQl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1dSREFUQSk7CisJfQor CisJLyogQ2xlYXIgc3RhdHVzIGZsYWdzIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kLiAqLwor CXdyaXRlbCh3YWl0LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DTFIpOworCXdyaXRlbCh3 YWl0LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCXJlaW5pdF9jb21wbGV0aW9u KCZkc2ktPmRpcmVjdF9jbWRfY29tcCk7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIERJUkVDVF9D TURfU0VORCk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRzaS0+ZGlyZWN0X2Nt ZF9jb21wLAorCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKworCXN0cyA9IHJlYWRs KGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTKTsKKwl3cml0ZWwod2FpdCwgZHNpLT5yZWdzICsg RElSRUNUX0NNRF9TVFNfQ0xSKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9T VFNfQ1RMKTsKKworCXdyaXRlbChyZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwp ICYgfmN0bCwKKwkgICAgICAgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKworCS8q IFdlIGRpZCBub3QgcmVjZWl2ZSB0aGUgZXZlbnRzIHdlIHdlcmUgd2FpdGluZyBmb3IuICovCisJ aWYgKCEoc3RzICYgd2FpdCkpIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXQ7CisJ fQorCisJLyogJ1JFQUQnIG9yICdXUklURSB3aXRoIEFDSycgZmFpbGVkLiAqLworCWlmIChzdHMg JiAoUkVBRF9DT01QTEVURURfV0lUSF9FUlIgfCBBQ0tfV0lUSF9FUlJfUkNWRCkpIHsKKwkJcmV0 ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJ4X2xlbjsgaSAr PSA0KSB7CisJCXU4ICpidWYgPSBtc2ctPnJ4X2J1ZjsKKwkJaW50IGo7CisKKwkJdmFsID0gcmVh ZGwoZHNpLT5yZWdzICsgRElSRUNUX0NNRF9SRERBVEEpOworCQlmb3IgKGogPSAwOyBqIDwgNCAm JiBqICsgaSA8IHJ4X2xlbjsgaisrKQorCQkJYnVmW2kgKyBqXSA9IHZhbCA+PiAoOCAqIGopOwor CX0KKworb3V0OgorCXBtX3J1bnRpbWVfcHV0KGhvc3QtPmRldik7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBjZG5zX2RzaV9vcHMgPSB7 CisJLmF0dGFjaCA9IGNkbnNfZHNpX2F0dGFjaCwKKwkuZGV0YWNoID0gY2Ruc19kc2lfZGV0YWNo LAorCS50cmFuc2ZlciA9IGNkbnNfZHNpX3RyYW5zZmVyLAorfTsKKworc3RhdGljIGludCBjZG5z X2RzaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5zX2RzaSAqZHNp ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRzaS0+ ZHNpX3BfcnN0KTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2lfcF9jbGspOworCWNsa19w cmVwYXJlX2VuYWJsZShkc2ktPmRzaV9zeXNfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5kcGh5LT5wc21fY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kcGh5LT5wbGxfcmVm X2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9zdXNwZW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZHBoeS0+cGxsX3JlZl9j bGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRwaHktPnBzbV9jbGspOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPmRzaV9zeXNfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoZHNpLT5kc2lfcF9jbGspOworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+ZHNpX3BfcnN0 KTsKKwlkc2ktPmxpbmtfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIFVOSVZFUlNBTF9ERVZfUE1fT1BTKGNkbnNfZHNpX3BtX29wcywgY2Ruc19kc2lfc3VzcGVu ZCwgY2Ruc19kc2lfcmVzdW1lLAorCQkJICAgIE5VTEwpOworCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBjZG5zX2RwaHlfcmVmX2dldF93YWtldXBfdGltZV9ucyhzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5 KQoreworCS8qIERlZmF1bHQgd2FrZXVwIHRpbWUgaXMgODAwIG5zIChpbiBhIHNpbXVsYXRlZCBl bnZpcm9ubWVudCkuICovCisJcmV0dXJuIDgwMDsKK30KKworc3RhdGljIHZvaWQgY2Ruc19kcGh5 X3JlZl9zZXRfcGxsX2NmZyhzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5LAorCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBjZG5zX2RwaHlfY2ZnICpjZmcpCit7CisJdTMyIGZiZGl2X2xvdywgZmJkaXZfaGln aDsKKworCWZiZGl2X2xvdyA9IChjZmctPnBsbF9mYmRpdiAvIDQpIC0gMjsKKwlmYmRpdl9oaWdo ID0gY2ZnLT5wbGxfZmJkaXYgLSBmYmRpdl9sb3cgLSAyOworCisJd3JpdGVsKERQSFlfQ01OX0lQ RElWX0ZST01fUkVHIHwgRFBIWV9DTU5fT1BESVZfRlJPTV9SRUcgfAorCSAgICAgICBEUEhZX0NN Tl9JUERJVihjZmctPnBsbF9pcGRpdikgfAorCSAgICAgICBEUEhZX0NNTl9PUERJVihjZmctPnBs bF9vcGRpdiksCisJICAgICAgIGRwaHktPnJlZ3MgKyBEUEhZX0NNTl9PUElQRElWKTsKKwl3cml0 ZWwoRFBIWV9DTU5fRkJESVZfRlJPTV9SRUcgfAorCSAgICAgICBEUEhZX0NNTl9GQkRJVl9WQUwo ZmJkaXZfbG93LCBmYmRpdl9oaWdoKSwKKwkgICAgICAgZHBoeS0+cmVncyArIERQSFlfQ01OX0ZC RElWKTsKKwl3cml0ZWwoRFBIWV9DTU5fUFdNX0hJR0goNikgfCBEUEhZX0NNTl9QV01fTE9XKDB4 MTAxKSB8CisJICAgICAgIERQSFlfQ01OX1BXTV9ESVYoMHg4KSwKKwkgICAgICAgZHBoeS0+cmVn cyArIERQSFlfQ01OX1BXTSk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9yZWZfc2V0X3Bz bV9kaXYoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwgdTggZGl2KQoreworCXdyaXRlbChEUEhZX1BT TV9DRkdfRlJPTV9SRUcgfCBEUEhZX1BTTV9DTEtfRElWKGRpdiksCisJICAgICAgIGRwaHktPnJl Z3MgKyBEUEhZX1BTTV9DRkcpOworfQorCisvKgorICogVGhpcyBpcyB0aGUgcmVmZXJlbmNlIGlt cGxlbWVudGF0aW9uIG9mIERQSFkgaG9va3MuIFNwZWNpZmljIGludGVncmF0aW9uIG9mCisgKiB0 aGlzIElQIG1heSBoYXZlIHRvIHJlLWltcGxlbWVudCBzb21lIG9mIHRoZW0gZGVwZW5kaW5nIG9u IGhvdyB0aGV5IGRlY2lkZWQKKyAqIHRvIHdpcmUgdGhpbmdzIGluIHRoZSBTb0MuCisgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY2Ruc19kcGh5X29wcyByZWZfZHBoeV9vcHMgPSB7CisJLmdldF93 YWtldXBfdGltZV9ucyA9IGNkbnNfZHBoeV9yZWZfZ2V0X3dha2V1cF90aW1lX25zLAorCS5zZXRf cGxsX2NmZyA9IGNkbnNfZHBoeV9yZWZfc2V0X3BsbF9jZmcsCisJLnNldF9wc21fZGl2ID0gY2Ru c19kcGh5X3JlZl9zZXRfcHNtX2RpdiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIGNkbnNfZHBoeV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiY2Rucyxk cGh5IiwgLmRhdGEgPSAmcmVmX2RwaHlfb3BzIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsK Kworc3RhdGljIHN0cnVjdCBjZG5zX2RwaHkgKmNkbnNfZHBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwor CXN0cnVjdCBjZG5zX2RwaHkgKmRwaHk7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOwor CXN0cnVjdCByZXNvdXJjZSByZXM7CisJaW50IHJldDsKKworCXJldCA9IG9mX3BhcnNlX3BoYW5k bGVfd2l0aF9hcmdzKHBkZXYtPmRldi5vZl9ub2RlLCAicGh5cyIsCisJCQkJCSAiI3BoeS1jZWxs cyIsIDAsICZhcmdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwor CW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShjZG5zX2RwaHlfb2ZfbWF0Y2gsIGFyZ3MubnApOworCWlm ICghbWF0Y2ggfHwgIW1hdGNoLT5kYXRhKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor CWRwaHkgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcGh5KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFkcGh5KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRwaHktPm9w cyA9IG1hdGNoLT5kYXRhOworCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShhcmdzLm5w LCAwLCAmcmVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJZHBoeS0+ cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCAmcmVzKTsKKwlpZiAoSVNf RVJSKGRwaHktPnJlZ3MpKQorCQlyZXR1cm4gRVJSX0NBU1QoZHBoeS0+cmVncyk7CisKKwlkcGh5 LT5wc21fY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKGFyZ3MubnAsICJwc20iKTsKKwlpZiAoSVNf RVJSKGRwaHktPnBzbV9jbGspKQorCQlyZXR1cm4gRVJSX0NBU1QoZHBoeS0+cHNtX2Nsayk7CisK KwlkcGh5LT5wbGxfcmVmX2NsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShhcmdzLm5wLCAicGxsX3Jl ZiIpOworCWlmIChJU19FUlIoZHBoeS0+cGxsX3JlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIo ZHBoeS0+cGxsX3JlZl9jbGspOworCQlnb3RvIGVycl9wdXRfcHNtX2NsazsKKwl9CisKKwlpZiAo ZHBoeS0+b3BzLT5wcm9iZSkgeworCQlyZXQgPSBkcGh5LT5vcHMtPnByb2JlKGRwaHkpOworCQlp ZiAocmV0KQorCQkJZ290byBlcnJfcHV0X3BsbF9yZWZfY2xrOworCX0KKworCXJldHVybiBkcGh5 OworCitlcnJfcHV0X3BsbF9yZWZfY2xrOgorCWNsa19wdXQoZHBoeS0+cGxsX3JlZl9jbGspOwor CitlcnJfcHV0X3BzbV9jbGs6CisJY2xrX3B1dChkcGh5LT5wc21fY2xrKTsKKworCXJldHVybiBF UlJfUFRSKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9yZW1vdmUoc3RydWN0IGNk bnNfZHBoeSAqZHBoeSkKK3sKKwlpZiAoZHBoeS0+b3BzLT5yZW1vdmUpCisJCWRwaHktPm9wcy0+ cmVtb3ZlKGRwaHkpOworCisJY2xrX3B1dChkcGh5LT5wbGxfcmVmX2Nsayk7CisJY2xrX3B1dChk cGh5LT5wc21fY2xrKTsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9kcm1fcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaTsKKwlzdHJ1 Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBy ZXQsIGlycTsKKwl1MzIgdmFsOworCisJZHNpID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNp emVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOwor CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKworCWlucHV0ID0gJmRzaS0+aW5w dXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0s IDApOworCWRzaS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMp OworCWlmIChJU19FUlIoZHNpLT5yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5yZWdzKTsK KworCWRzaS0+ZHNpX3BfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJkc2lfcF9jbGsi KTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHNpX3BfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5k c2lfcF9jbGspOworCisJZHNpLT5kc2lfcF9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29w dGlvbmFsX2V4Y2x1c2l2ZSgmcGRldi0+ZGV2LAorCQkJCQkJCQkiZHNpX3BfcnN0Iik7CisJaWYg KElTX0VSUihkc2ktPmRzaV9wX3JzdCkpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+ZHNpX3BfcnN0 KTsKKworCWRzaS0+ZHNpX3N5c19jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImRzaV9z eXNfY2xrIik7CisJaWYgKElTX0VSUihkc2ktPmRzaV9zeXNfY2xrKSkKKwkJcmV0dXJuIFBUUl9F UlIoZHNpLT5kc2lfc3lzX2Nsayk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDAp OworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJZHNpLT5kcGh5ID0gY2Ruc19kcGh5 X3Byb2JlKHBkZXYpOworCWlmIChJU19FUlIoZHNpLT5kcGh5KSkKKwkJcmV0dXJuIFBUUl9FUlIo ZHNpLT5kcGh5KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRzaV9wX2Nsayk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVtb3ZlX2RwaHk7CisKKwl2YWwgPSByZWFkbChkc2kt PnJlZ3MgKyBJRF9SRUcpOworCWlmIChSRVZfVkVORE9SX0lEKHZhbCkgIT0gMHhjYWQpIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCB2ZW5kb3IgaWRcbiIpOworCQlyZXQgPSAtRUlO VkFMOworCQlnb3RvIGVycl9kaXNhYmxlX3BjbGs7CisJfQorCisJdmFsID0gcmVhZGwoZHNpLT5y ZWdzICsgSVBfQ09ORik7CisJZHNpLT5kaXJlY3RfY21kX2ZpZm9fZGVwdGggPSAxIDw8IChESVJD TURfRklGT19ERVBUSCh2YWwpICsgMik7CisJZHNpLT5yeF9maWZvX2RlcHRoID0gUlhfRklGT19E RVBUSCh2YWwpOworCWluaXRfY29tcGxldGlvbigmZHNpLT5kaXJlY3RfY21kX2NvbXApOworCisJ d3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisJd3JpdGVsKDAsIGRz aS0+cmVncyArIE1DVExfTUFJTl9FTik7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJ Tl9QSFlfQ1RMKTsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IHRoZSBEUEkgaW5wdXQsIHNv IGZvcmNlIGlucHV0LT5pZCB0bworCSAqIENETlNfRFBJX0lOUFVULgorCSAqLworCWlucHV0LT5p ZCA9IENETlNfRFBJX0lOUFVUOworCWlucHV0LT5icmlkZ2UuZnVuY3MgPSAmY2Ruc19kc2lfYnJp ZGdlX2Z1bmNzOworCWlucHV0LT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOwor CisJLyogTWFzayBhbGwgaW50ZXJydXB0cyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIElSUSBoYW5k bGVyLiAqLworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fU1RTX0NUTCk7CisJd3Jp dGVsKDAsIGRzaS0+cmVncyArIE1DVExfRFBIWV9FUlJfQ1RMMSk7CisJd3JpdGVsKDAsIGRzaS0+ cmVncyArIENNRF9NT0RFX1NUU19DVEwpOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBESVJFQ1Rf Q01EX1NUU19DVEwpOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1JEX1NUU19D VEwpOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBWSURfTU9ERV9TVFNfQ1RMKTsKKwl3cml0ZWwo MCwgZHNpLT5yZWdzICsgVFZHX1NUU19DVEwpOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBEUElf SVJRX0VOKTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgY2Ruc19k c2lfaW50ZXJydXB0LCAwLAorCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBkc2kpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2Rpc2FibGVfcGNsazsKKworCXBtX3J1bnRpbWVfZW5hYmxl KCZwZGV2LT5kZXYpOworCWRzaS0+YmFzZS5kZXYgPSAmcGRldi0+ZGV2OworCWRzaS0+YmFzZS5v cHMgPSAmY2Ruc19kc2lfb3BzOworCisJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNp LT5iYXNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kaXNhYmxlX3J1bnRpbWVfcG07CisKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kc2lfcF9jbGspOworCisJcmV0dXJuIDA7CisKK2Vy cl9kaXNhYmxlX3J1bnRpbWVfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwor CitlcnJfZGlzYWJsZV9wY2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRzaV9wX2Ns ayk7CisKK2Vycl9yZW1vdmVfZHBoeToKKwljZG5zX2RwaHlfcmVtb3ZlKGRzaS0+ZHBoeSk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNkbnNfZHNpX2RybV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2kt PmJhc2UpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwljZG5zX2RwaHlfcmVt b3ZlKGRzaS0+ZHBoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgY2Ruc19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImNk bnMsZHNpIiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNk bnNfZHNpX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgID0gY2Ruc19kc2lfZHJtX3Byb2Jl LAorCS5yZW1vdmUgPSBjZG5zX2RzaV9kcm1fcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1l ICAgPSAiY2Rucy1kc2kiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBjZG5zX2RzaV9vZl9tYXRjaCwK KwkJLnBtID0gJmNkbnNfZHNpX3BtX29wcywKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIoY2Ruc19kc2lfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQm9yaXMgQnJl emlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJ T04oIkNhZGVuY2UgRFNJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxF X0FMSUFTKCJwbGF0Zm9ybTpjZG5zLWRzaSIpOworCi0tIAoyLjE0LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=