From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v3 1/2] drm/bridge: Add Cadence DSI driver Date: Thu, 31 Aug 2017 17:55:18 +0200 Message-ID: <20170831155519.3704-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: David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, Archit Taneja Cc: Mark Rutland , devicetree@vger.kernel.org, Cyprian Wronka , Thomas Petazzoni , Pawel Moll , Ian Campbell , Simon Hatliff , Tomi Valkeinen , Jyri Sarha , Alan Douglas , Rob Herring , Boris Brezillon , Kumar Gala , Maxime Ripard , Richard Sproul , Neil Webb List-Id: devicetree@vger.kernel.org QWRkIGEgZHJpdmVyIGZvciBDYWRlbmNlIERQSSAtPiBEU0kgYnJpZGdlLgoKVGhpcyBkcml2ZXIg b25seSBzdXBwb3J0IGEgc3Vic2V0IG9mIENhZGVuY2UgRFNJIGJyaWRnZSBjYXBhYmlsaXRpZXMu CgpIZXJlIGlzIGEgbm9uLWV4aGF1c3RpdmUgbGlzdCBvZiBtaXNzaW5nIGZlYXR1cmVzOgogKiBi dXJzdCBtb2RlCiAqIGR5bmFtaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgRFBIWSBiYXNlZCBvbiB0 aGUKICogc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBpbnB1dCBpbnRlcmZhY2VzIChTREkgaW5wdXQp CgpTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVs ZWN0cm9ucy5jb20+Ci0tLQpDaGFuZ2VzIGluIHYzOgotIHJlcGxhY2UgbWFnaWMgdmFsdWVzIGJ5 IHJlYWwgdGltaW5nIGNhbGN1bGF0aW9uLiBUaGUgRFBIWSBQTEwgY2xvY2sKICBpcyBzdGlsbCBo YXJkY29kZWQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmtpbmcgRFBIWSBibG9jayB5ZXQsIGFu ZAogIHRoaXMgaXMgdGhlIHBpZWNlIG9mIEhXIHdlIG5lZWQgdG8gZHluYW1pY2FsbHkgY29uZmln dXJlIHRoZSBQTEwKICByYXRlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IHJlZnJlc2ggcmF0ZSBhbmQg dGhlIHJlc29sdXRpb24uCi0gcGFyc2UgRFNJIGRldmljZXMgcmVwcmVzZW50ZWQgd2l0aCB0aGUg T0YtZ3JhcGguIFRoaXMgaXMgbmVlZGVkIHRvCiAgc3VwcG9ydCBEU0kgZGV2aWNlcyBjb250cm9s bGVkIHRocm91Z2ggYW4gZXh0ZXJuYWwgYnVzIGxpa2UgSTJDIG9yCiAgU1BJLgotIHVzZSB0aGUg RFJNIHBhbmVsLWJyaWRnZSBpbmZyYXN0cnVjdHVyZSB0byBzaW1wbGlmeSB0aGUgRFJNIHBhbmVs CiAgbG9naWMKCkNoYW5nZXMgaW4gdjI6Ci0gcmViYXNlIG9uIHY0LjEyLXJjMSBhbmQgYWRhcHQg dG8gZHJpdmVyIHRvIHRoZSBkcm1fYnJpZGdlIEFQSSBjaGFuZ2VzCi0gcmV0dXJuIHRoZSBjb3Jy ZWN0IGVycm9yIHdoZW4gZGV2bV9jbGtfZ2V0KHN5c2NsaykgZmFpbHMKLSBhZGQgbWlzc2luZyBk ZXBlbmRzIG9uIE9GIGFuZCBzZWxlY3QgRFJNX1BBTkVMIGluIHRoZSBLY29uZmlnIGVudHJ5Ci0t LQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgIHwgICAgOSArCiBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL01ha2VmaWxlICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv Y2Rucy1kc2kuYyB8IDEwOTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MyBmaWxlcyBjaGFuZ2VkLCAxMTAwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5k ZXggYWRmOWFlMGUwYjdjLi44OGMzMjRiMTJlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKQEAg LTI1LDYgKzI1LDE1IEBAIGNvbmZpZyBEUk1fQU5BTE9HSVhfQU5YNzhYWAogCSAgdGhlIEhETUkg b3V0cHV0IG9mIGFuIGFwcGxpY2F0aW9uIHByb2Nlc3NvciB0byBNeURQCiAJICBvciBEaXNwbGF5 UG9ydC4KIAorY29uZmlnIERSTV9DRE5TX0RTSQorCXRyaXN0YXRlICJDYWRlbmNlIERQSS9EU0kg YnJpZGdlIgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlz ZWxlY3QgRFJNX1BBTkVMCisJZGVwZW5kcyBvbiBPRgorCWhlbHAKKwkgIFN1cHBvcnQgQ2FkZW5j ZSBEUEkgdG8gRFNJIGJyaWRnZS4KKwogY29uZmlnIERSTV9EVU1CX1ZHQV9EQUMKIAl0cmlzdGF0 ZSAiRHVtYiBWR0EgREFDIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlCmluZGV4IGRlZmNmMWU3Y2ExYy4uNzdiNjVlOGVjZjU5IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lY X0FOWDc4WFgpICs9IGFuYWxvZ2l4LWFueDc4eHgubworb2JqLSQoQ09ORklHX0RSTV9DRE5TX0RT SSkgKz0gY2Rucy1kc2kubwogb2JqLSQoQ09ORklHX0RSTV9EVU1CX1ZHQV9EQUMpICs9IGR1bWIt dmdhLWRhYy5vCiBvYmotJChDT05GSUdfRFJNX0xWRFNfRU5DT0RFUikgKz0gbHZkcy1lbmNvZGVy Lm8KIG9iai0kKENPTkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykgKz0g bWVnYWNoaXBzLXN0ZHB4eHh4LWdlLWI4NTB2My1mdy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNp LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNWRjMjZjOTBiMjAK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKQEAg LTAsMCArMSwxMDkwIEBACisvKgorICogQ29weXJpZ2h0OiAyMDE3IENhZGVuY2UgRGVzaWduIFN5 c3RlbXMsIEluYy4KKyAqCisgKiBBdXRob3I6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemls bG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisg KiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisK KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Jy aWRnZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPHZp ZGVvL21pcGlfZGlzcGxheS5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2Rl ZmluZSBJUF9DT05GCQkJCTB4MAorI2RlZmluZSBTUF9IU19GSUZPX0RFUFRIKHgpCQkoKCh4KSAm IEdFTk1BU0soMzAsIDI2KSkgPj4gMjYpCisjZGVmaW5lIFNQX0xQX0ZJRk9fREVQVEgoeCkJCSgo KHgpICYgR0VOTUFTSygyNSwgMjEpKSA+PiAyMSkKKyNkZWZpbmUgVlJTX0ZJRk9fREVQVEgoeCkJ CQkoKCh4KSAmIEdFTk1BU0soMjAsIDE2KSkgPj4gMTYpCisjZGVmaW5lIERJUkNNRF9GSUZPX0RF UFRIKHgpCQkoKCh4KSAmIEdFTk1BU0soMTUsIDEzKSkgPj4gMTMpCisjZGVmaW5lIFNESV9JRkFD RV8zMgkJCUJJVCgxMikKKyNkZWZpbmUgSU5URVJOQUxfREFUQVBBVEhfMzIJCSgwIDw8IDEwKQor I2RlZmluZSBJTlRFUk5BTF9EQVRBUEFUSF8xNgkJKDEgPDwgMTApCisjZGVmaW5lIElOVEVSTkFM X0RBVEFQQVRIXzgJCSgzIDw8IDEwKQorI2RlZmluZSBJTlRFUk5BTF9EQVRBUEFUSF9TSVpFCQko KHgpICYgR0VOTUFTSygxMSwgMTApKQorI2RlZmluZSBJTlRFUk5BTF9EQVRBUEFUSF8zMgkJKDAg PDwgMTApCisjZGVmaW5lIElOVEVSTkFMX0RBVEFQQVRIXzE2CQkoMSA8PCAxMCkKKyNkZWZpbmUg SU5URVJOQUxfREFUQVBBVEhfOAkJKDMgPDwgMTApCisjZGVmaW5lIE5VTV9JRkFDRSh4KQkJCSgo KCh4KSAmIEdFTk1BU0soOSwgOCkpID4+IDgpICsgMSkKKyNkZWZpbmUgTUFYX0xBTkVfTkIoeCkJ CQkoKCh4KSAmIEdFTk1BU0soNywgNikpID4+IDYpCisjZGVmaW5lIFJYX0ZJRk9fREVQVEgoeCkJ CSgoeCkgJiBHRU5NQVNLKDUsIDApKQorCisjZGVmaW5lIE1DVExfTUFJTl9EQVRBX0NUTAkJMHg0 CisjZGVmaW5lIFRFX01JUElfUE9MTElOR19FTgkJQklUKDI1KQorI2RlZmluZSBURV9IV19QT0xM SU5HX0VOCQlCSVQoMjQpCisjZGVmaW5lIERJU1BfRU9UX0dFTgkJCUJJVCgxOCkKKyNkZWZpbmUg SE9TVF9FT1RfR0VOCQkJQklUKDE3KQorI2RlZmluZSBESVNQX0dFTl9DSEVDS1NVTQkJQklUKDE2 KQorI2RlZmluZSBESVNQX0dFTl9FQ0MJCQlCSVQoMTUpCisjZGVmaW5lIEJUQV9FTgkJCQlCSVQo MTQpCisjZGVmaW5lIFJFQURfRU4JCQkJQklUKDEzKQorI2RlZmluZSBSRUdfVEVfRU4JCQlCSVQo MTIpCisjZGVmaW5lIElGX1RFX0VOKHgpCQkJQklUKDggKyAoeCkpCisjZGVmaW5lIFRCR19TRUwJ CQkJQklUKDcpCisjZGVmaW5lIFRWR19TRUwJCQkJQklUKDYpCisjZGVmaW5lIFZJRF9FTgkJCQlC SVQoNSkKKyNkZWZpbmUgSUZfVklEX1NFTEVDVCh4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBJRl9W SURfU0VMRUNUX01BU0sJCUdFTk1BU0soNCwgMikKKyNkZWZpbmUgSUZfVklEX01PREUJCQlCSVQo MSkKKyNkZWZpbmUgTElOS19FTgkJCQlCSVQoMCkKKworI2RlZmluZSBNQ1RMX01BSU5fUEhZX0NU TAkJMHg4CisjZGVmaW5lIENMS19GT1JDRV9TVE9QCQkJQklUKDE0KQorI2RlZmluZSBXQUlUX0JV UlNUX1RJTUUoeCkJCSgoeCkgPDwgMTApCisjZGVmaW5lIERBVEFfVUxQTV9FTih4KQkJCUJJVCg2 ICsgKHgpKQorI2RlZmluZSBDTEtfVUxQTV9FTgkJCUJJVCg1KQorI2RlZmluZSBDTEtfQ09OVElO VU9VUwkJCUJJVCg0KQorI2RlZmluZSBEQVRBX0ZPUkNFX1NUT1AJCQlCSVQoMykKKyNkZWZpbmUg REFUQV9MQU5FX0VOKHgpCQkJQklUKCh4KSAtIDEpCisKKyNkZWZpbmUgTUNUTF9MQU5FX1NUUwkJ CTB4MTAKKyNkZWZpbmUgTEFORV9TVEFURV9TVEFSVAkJMAorI2RlZmluZSBMQU5FX1NUQVRFX0lE TEUJCQkxCisjZGVmaW5lIExBTkVfU1RBVEVfV1JJVEUJCTIKKyNkZWZpbmUgTEFORV9TVEFURV9V TFBNCQkJMworI2RlZmluZSBMQU5FX1NUQVRFX1JFQUQJCQk0CisjZGVmaW5lIERBVEFfTEFORV9T VEFURShsLCB2YWwpCQlcCisJKCgodmFsKSA+PiAoMiArIDIgKiAobCkgKyAoKGwpID8gMSA6IDAp KSkgJiBHRU5NQVNLKChsKSA/IDEgOiAyLCAwKSkKKyNkZWZpbmUgQ0xLX0xBTkVfU1RBVEVfSFMJ CTIKKyNkZWZpbmUgQ0xLX0xBTkVfU1RBVEUodmFsKQkJKCh2YWwpICYgR0VOTUFTSygxLCAwKSkK KworI2RlZmluZSBNQ1RMX0RQSFlfVElNRU9VVDEJCTB4MTQKKyNkZWZpbmUgQ0xLX0RJVih4KQkJ CSh4KQorI2RlZmluZSBDTEtfRElWX01BWAkJCUdFTk1BU0soMywgMCkKKyNkZWZpbmUgSFNUWF9U SU1FT1VUKHgpCQkJKCh4KSA8PCA0KQorI2RlZmluZSBIU1RYX1RJTUVPVVRfTUFYCQlHRU5NQVNL KDIxLCA0KQorCisjZGVmaW5lIE1DVExfRFBIWV9USU1FT1VUMgkJMHgxOAorI2RlZmluZSBMUFJY X1RJTUVPVVQoeCkJCQkoeCkKKworI2RlZmluZSBNQ1RMX1VMUE9VVF9USU1FCQkweDFjCisjZGVm aW5lIERBVEFfTEFORV9VTFBPVVRfVElNRSh4KQkoKHgpIDw8IDkpCisjZGVmaW5lIENMS19MQU5F X1VMUE9VVF9USU1FKHgpCQkoeCkKKworI2RlZmluZSBNQ1RMX0RQSFlfU1RBVElDCQkweDIwCisj ZGVmaW5lIElOVkVSVF9EQVRBX0hTKGwpCQlCSVQoKGwpICogKDIgKyAxKSArIDEpCisjZGVmaW5l IFNXQVBfREFUQV9QSU5TKGwpCQlCSVQoKGwpICogKDIgKyAxKSkKKyNkZWZpbmUgSU5WRVJUX0NM S19IUwkJCUJJVCgxKQorI2RlZmluZSBTV0FQX0NMS19QSU5TCQkJQklUKDApCisKKyNkZWZpbmUg TUNUTF9NQUlOX0VOCQkJMHgyNAorI2RlZmluZSBJRl9FTih4KQkJCUJJVCgxMyArICh4KSkKKyNk ZWZpbmUgREFUQV9MQU5FX1VMUE1fUkVRKGwpCQlCSVQoOSArIChsKSkKKyNkZWZpbmUgQ0xLX0xB TkVfVUxQTV9SRVEJCUJJVCg4KQorI2RlZmluZSBEQVRBX0xBTkVfU1RBUlQoeCkJCUJJVCg0ICsg KHgpKQorI2RlZmluZSBDTEtfTEFORV9FTgkJCUJJVCgzKQorI2RlZmluZSBQTExfU1RBUlQJCQlC SVQoMCkKKworI2RlZmluZSBNQ1RMX01BSU5fU1RTCQkJMHgyOAorI2RlZmluZSBNQ1RMX01BSU5f U1RTX0NUTAkJMHgxMzAKKyNkZWZpbmUgTUNUTF9NQUlOX1NUU19DTFIJCTB4MTUwCisjZGVmaW5l IE1DVExfTUFJTl9TVFNfRkxBRwkJMHgxNzAKKyNkZWZpbmUgSUZfVU5URVJNX1BLVF9FUlIoeCkJ CUJJVCg4ICsgKHgpKQorI2RlZmluZSBMUFJYX1RJTUVPVVRfRVJSCQlCSVQoNykKKyNkZWZpbmUg SFNUWF9USU1FT1VUX0VSUgkJQklUKDYpCisjZGVmaW5lIERBVEFfTEFORV9SRFkobCkJCUJJVCgy ICsgKGwpKQorI2RlZmluZSBDTEtfTEFORV9SRFkJCQlCSVQoMSkKKyNkZWZpbmUgUExMX0xPQ0tF RAkJCUJJVCgwKQorCisjZGVmaW5lIE1DVExfRFBIWV9FUlIJCQkweDJjCisjZGVmaW5lIE1DVExf RFBIWV9FUlJfQ1RMMQkJMHgxNDgKKyNkZWZpbmUgTUNUTF9EUEhZX0VSUl9DTFIJCTB4MTY4Cisj ZGVmaW5lIE1DVExfRFBIWV9FUlJfRkxBRwkJMHgxODgKKyNkZWZpbmUgRVJSX0NPTlRfTFAoeCwg bCkJCUJJVCgxOCArICgoeCkgKiA0KSArIChsKSkKKyNkZWZpbmUgRVJSX0NPTlRST0wobCkJCQlC SVQoMTQgKyAobCkpCisjZGVmaW5lIEVSUl9TWU5FU0MobCkJCQlCSVQoMTAgKyAobCkpCisjZGVm aW5lIEVSUl9FU0MobCkJCQlCSVQoNiArIChsKSkKKworI2RlZmluZSBNQ1RMX0RQSFlfRVJSX0NU TDIJCTB4MTRjCisjZGVmaW5lIEVSUl9DT05UX0xQX0VER0UoeCwgbCkJCUJJVCgxMiArICgoeCkg KiA0KSArIChsKSkKKyNkZWZpbmUgRVJSX0NPTlRST0xfRURHRShsKQkJQklUKDggKyAobCkpCisj ZGVmaW5lIEVSUl9TWU5fRVNDX0VER0UobCkJCUJJVCg0ICsgKGwpKQorI2RlZmluZSBFUlJfRVND X0VER0UobCkJCQlCSVQoMCArIChsKSkKKworI2RlZmluZSBDTURfTU9ERV9DVEwJCQkweDcwCisj ZGVmaW5lIElGX1ZDSEFOX0lEKHgsIGMpCQkoKGMpIDw8ICgoeCkgKiAyKSkKKyNkZWZpbmUgSUZf TFBfRU4oeCkJCQlCSVQoOSArICh4KSkKKworI2RlZmluZSBDTURfTU9ERV9DVEwyCQkJMHg3NAor I2RlZmluZSBURV9USU1FT1VUKHgpCQkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgRklMTF9WQUxVRSh4 KQkJCSgoeCkgPDwgMykKKyNkZWZpbmUgQVJCX0lGX1dJVEhfSElHSEVTVF9QUklPUklUWSh4KQko KHgpIDw8IDEpCisjZGVmaW5lIEFSQl9ST1VORF9ST0JJTl9NT0RFCQlCSVQoMCkKKworI2RlZmlu ZSBDTURfTU9ERV9TVFMJCQkweDc4CisjZGVmaW5lIENNRF9NT0RFX1NUU19DVEwJCTB4MTM0Cisj ZGVmaW5lIENNRF9NT0RFX1NUU19DTFIJCTB4MTU0CisjZGVmaW5lIENNRF9NT0RFX1NUU19GTEFH CQkweDE3NAorI2RlZmluZSBFUlJfSUZfVU5ERVJSVU4oeCkJCUJJVCg0ICsgKHgpKQorI2RlZmlu ZSBFUlJfVU5XQU5URURfUkVBRAkJQklUKDMpCisjZGVmaW5lIEVSUl9URV9NSVNTCQkJQklUKDIp CisjZGVmaW5lIEVSUl9OT19URQkJCUJJVCgxKQorI2RlZmluZSBDU01fUlVOTklORwkJCUJJVCgw KQorCisjZGVmaW5lIERJUkVDVF9DTURfU0VORAkJCTB4ODAKKworI2RlZmluZSBESVJFQ1RfQ01E X01BSU5fU0VUVElOR1MJMHg4NAorI2RlZmluZSBUUklHR0VSX1ZBTCh4KQkJCSgoeCkgPDwgMjUp CisjZGVmaW5lIENNRF9MUF9FTgkJCUJJVCgyNCkKKyNkZWZpbmUgQ01EX1NJWkUoeCkJCQkoKHgp IDw8IDE2KQorI2RlZmluZSBDTURfVkNIQU5fSUQoeCkJCQkoKHgpIDw8IDE0KQorI2RlZmluZSBD TURfREFUQVRZUEUoeCkJCQkoKHgpIDw8IDgpCisjZGVmaW5lIENNRF9MT05HCQkJQklUKDMpCisj ZGVmaW5lIFdSSVRFX0NNRAkJCTAKKyNkZWZpbmUgUkVBRF9DTUQJCQkxCisjZGVmaW5lIFRFX1JF UQkJCQk0CisjZGVmaW5lIFRSSUdHRVJfUkVRCQkJNQorI2RlZmluZSBCVEFfUkVRCQkJCTYKKwor I2RlZmluZSBESVJFQ1RfQ01EX1NUUwkJCTB4ODgKKyNkZWZpbmUgRElSRUNUX0NNRF9TVFNfQ1RM CQkweDEzOAorI2RlZmluZSBESVJFQ1RfQ01EX1NUU19DTFIJCTB4MTU4CisjZGVmaW5lIERJUkVD VF9DTURfU1RTX0ZMQUcJCTB4MTc4CisjZGVmaW5lIFJDVkRfQUNLX1ZBTCh2YWwpCQkoKHZhbCkg Pj4gMTYpCisjZGVmaW5lIFJDVkRfVFJJR0dFUl9WQUwodmFsKQkJKCgodmFsKSAmIEdFTk1BU0so MTQsIDExKSkgPj4gMTEpCisjZGVmaW5lIFJFQURfQ09NUExFVEVEX1dJVEhfRVJSCQlCSVQoMTAp CisjZGVmaW5lIEJUQV9GSU5JU0hFRAkJCUJJVCg5KQorI2RlZmluZSBCVEFfQ09NUExFVEVECQkJ QklUKDgpCisjZGVmaW5lIFRFX1JDVkQJCQkJQklUKDcpCisjZGVmaW5lIFRSSUdHRVJfUkNWRAkJ CUJJVCg2KQorI2RlZmluZSBBQ0tfV0lUSF9FUlJfUkNWRAkJQklUKDUpCisjZGVmaW5lIEFDS19S Q1ZECQkJQklUKDQpCisjZGVmaW5lIFJFQURfQ09NUExFVEVECQkJQklUKDMpCisjZGVmaW5lIFRS SUdHRVJfQ09NUExFVEVECQlCSVQoMikKKyNkZWZpbmUgV1JJVEVfQ09NUExFVEVECQkJQklUKDEp CisjZGVmaW5lIFNFTkRJTkdfQ01ECQkJQklUKDApCisKKyNkZWZpbmUgRElSRUNUX0NNRF9TVE9Q X1JFQUQJCTB4OGMKKworI2RlZmluZSBESVJFQ1RfQ01EX1dSREFUQQkJMHg5MAorI2RlZmluZSBX UkRBVCh4LCB2YWwpCQkJKCh2YWwpIDw8ICgoeCkgKiA4KSkKKworI2RlZmluZSBESVJFQ1RfQ01E X0ZJRk9fUlNUCQkweDk0CisKKyNkZWZpbmUgRElSRUNUX0NNRF9SRERBVEEJCTB4YTAKKyNkZWZp bmUgUkREQVQoeCwgdmFsKQkJCSgoKHZhbCkgPj4gKCh4KSAqIDgpKSAmIEdFTk1BU0soNywgMCkp CisKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9QUk9QUwkJMHhhNAorI2RlZmluZSBSRF9EQ1MJCQkJ QklUKDE4KQorI2RlZmluZSBSRF9WQ0hBTl9JRCh2YWwpCQkoKCh2YWwpID4+IDE2KSAmIEdFTk1B U0soMSwgMCkpCisjZGVmaW5lIFJEX1NJWkUodmFsKQkJCSgodmFsKSAmIEdFTk1BU0soMTUsIDAp KQorCisjZGVmaW5lIERJUkVDVF9DTURfUkRfU1RTCQkweGE4CisjZGVmaW5lIERJUkVDVF9DTURf UkRfU1RTX0NUTAkJMHgxM2MKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9TVFNfQ0xSCQkweDE1Ywor I2RlZmluZSBESVJFQ1RfQ01EX1JEX1NUU19GTEFHCQkweDE3YworI2RlZmluZSBFUlJfRU9UX1dJ VEhfRVJSCQlCSVQoOCkKKyNkZWZpbmUgRVJSX01JU1NJTkdfRU9UCQkJQklUKDcpCisjZGVmaW5l IEVSUl9XUk9OR19MRU5HVEgJCUJJVCg2KQorI2RlZmluZSBFUlJfT1ZFUlNJWkUJCQlCSVQoNSkK KyNkZWZpbmUgRVJSX1JFQ0VJVkUJCQlCSVQoNCkKKyNkZWZpbmUgRVJSX1VOREVDT0RBQkxFCQkJ QklUKDMpCisjZGVmaW5lIEVSUl9DSEVDS1NVTQkJCUJJVCgyKQorI2RlZmluZSBFUlJfVU5DT1JS RUNUQUJMRQkJQklUKDEpCisjZGVmaW5lIEVSUl9GSVhFRAkJCUJJVCgwKQorCisjZGVmaW5lIFZJ RF9NQUlOX0NUTAkJCTB4YjAKKyNkZWZpbmUgVklEX0ZJRUxEX1NXCQkJQklUKDI4KQorI2RlZmlu ZSBWSURfSU5URVJMQUNFRF9FTgkJQklUKDI3KQorI2RlZmluZSBSRUNPVkVSWV9NT0RFKHgpCQko KHgpIDw8IDI1KQorI2RlZmluZSBSRUNPVkVSWV9NT0RFX05FWFRfSFNZTkMJMAorI2RlZmluZSBS RUNPVkVSWV9NT0RFX05FWFRfU1RPUF9QT0lOVAkyCisjZGVmaW5lIFJFQ09WRVJZX01PREVfTkVY VF9WU1lOQwkzCisjZGVmaW5lIFJFR19CTEtFT0xfTU9ERSh4KQkJKCh4KSA8PCAyMykKKyNkZWZp bmUgUkVHX0JMS0xJTkVfTU9ERSh4KQkJKCh4KSA8PCAyMSkKKyNkZWZpbmUgUkVHX0JMS19NT0RF X05VTExfUEtUCQkwCisjZGVmaW5lIFJFR19CTEtfTU9ERV9CTEFOS0lOR19QS1QJMQorI2RlZmlu ZSBSRUdfQkxLX01PREVfTFAJCQkyCisjZGVmaW5lIFNZTkNfUFVMU0VfSE9SSVpPTlRBTAkJQklU KDIwKQorI2RlZmluZSBTWU5DX1BVTFNFX0FDVElWRQkJQklUKDE5KQorI2RlZmluZSBCVVJTVF9N T0RFCQkJQklUKDE4KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9NQVNLCQlHRU5NQVNLKDE3LCAx NCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCNTY1CQkoMCA8PCAxNCkKKyNkZWZpbmUgVklE X1BJWEVMX01PREVfUkdCNjY2X1BBQ0tFRAkoMSA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01P REVfUkdCNjY2CQkoMiA8PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCODg4CQkoMyA8 PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCMTAxMDEwCSg0IDw8IDE0KQorI2RlZmlu ZSBWSURfUElYRUxfTU9ERV9SR0IxMjEyMTIJKDUgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9N T0RFX1lVVjQyMAkJKDggPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1lVVjQyMl9QQUNL RUQJKDkgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1lVVjQyMgkJKDEwIDw8IDE0KQor I2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjJfMjRCCSgxMSA8PCAxNCkKKyNkZWZpbmUgVklE X0RBVEFUWVBFKHgpCQkJKCh4KSA8PCA4KQorI2RlZmluZSBWSURfVklSVENIQU5fSUQoaWZhY2Us IHgpCSgoeCkgPDwgKDQgKyAoaWZhY2UpICogMikpCisjZGVmaW5lIFNUT1BfTU9ERSh4KQkJCSgo eCkgPDwgMikKKyNkZWZpbmUgU1RBUlRfTU9ERSh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9WU0la RTEJCQkweGI0CisjZGVmaW5lIFZGUF9MRU4oeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZSBWQlBf TEVOKHgpCQkJKCh4KSA8PCA2KQorI2RlZmluZSBWU0FfTEVOKHgpCQkJKHgpCisKKyNkZWZpbmUg VklEX1ZTSVpFMgkJCTB4YjgKKyNkZWZpbmUgVkFDVF9MRU4oeCkJCQkoeCkKKworI2RlZmluZSBW SURfSFNJWkUxCQkJMHhjMAorI2RlZmluZSBIRlBfTEVOKHgpCQkJKCh4KSA8PCAyMCkKKyNkZWZp bmUgSEJQX0xFTih4KQkJCSgoeCkgPDwgMTApCisjZGVmaW5lIEhTQV9MRU4oeCkJCQkoeCkKKwor I2RlZmluZSBWSURfSFNJWkUyCQkJMHhjNAorI2RlZmluZSBIQUNUX0xFTih4KQkJCSh4KQorCisj ZGVmaW5lIFZJRF9CTEtTSVpFMQkJCTB4Y2MKKyNkZWZpbmUgQkxLX0VPTF9QS1RfTEVOKHgpCQko KHgpIDw8IDE1KQorI2RlZmluZSBCTEtfTElORV9FVkVOVF9QS1RfTEVOKHgpCSh4KQorCisjZGVm aW5lIFZJRF9CTEtTSVpFMgkJCTB4ZDAKKyNkZWZpbmUgQkxLX0xJTkVfUFVMU0VfUEtUX0xFTih4 KQkoeCkKKworI2RlZmluZSBWSURfUEtUX1RJTUUJCQkweGQ4CisjZGVmaW5lIEJMS19FT0xfRFVS QVRJT04oeCkJCSh4KQorCisjZGVmaW5lIFZJRF9EUEhZX1RJTUUJCQkweGRjCisjZGVmaW5lIFJF R19XQUtFVVBfVElNRSh4KQkJKCh4KSA8PCAxNykKKyNkZWZpbmUgUkVHX0xJTkVfRFVSQVRJT04o eCkJCSh4KQorCisjZGVmaW5lIFZJRF9FUlJfQ09MT1IxCQkJMHhlMAorI2RlZmluZSBDT0xfR1JF RU4oeCkJCQkoKHgpIDw8IDEyKQorI2RlZmluZSBDT0xfUkVEKHgpCQkJKHgpCisKKyNkZWZpbmUg VklEX0VSUl9DT0xPUjIJCQkweGU0CisjZGVmaW5lIFBBRF9WQUwoeCkJCQkoKHgpIDw8IDEyKQor I2RlZmluZSBDT0xfQkxVRSh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9WUE9TCQkJMHhlOAorI2Rl ZmluZSBMSU5FX1ZBTCh2YWwpCQkJKCgodmFsKSAmIEdFTk1BU0soMTQsIDIpKSA+PiAyKQorI2Rl ZmluZSBMSU5FX1BPUyh2YWwpCQkJKCh2YWwpICYgR0VOTUFTSygxLCAwKSkKKworI2RlZmluZSBW SURfSFBPUwkJCTB4ZWMKKyNkZWZpbmUgSE9SSVpfVkFMKHZhbCkJCQkoKCh2YWwpICYgR0VOTUFT SygxNywgMykpID4+IDMpCisjZGVmaW5lIEhPUklaX1BPUyh2YWwpCQkJKCh2YWwpICYgR0VOTUFT SygyLCAwKSkKKworI2RlZmluZSBWSURfTU9ERV9TVFMJCQkweGYwCisjZGVmaW5lIFZJRF9NT0RF X1NUU19DVEwJCTB4MTQwCisjZGVmaW5lIFZJRF9NT0RFX1NUU19DTFIJCTB4MTYwCisjZGVmaW5l IFZJRF9NT0RFX1NUU19GTEFHCQkweDE4MAorI2RlZmluZSBWU0dfUkVDT1ZFUlkJCQlCSVQoMTAp CisjZGVmaW5lIEVSUl9WUlNfV1JPTkdfTEVOCQlCSVQoOSkKKyNkZWZpbmUgRVJSX0xPTkdfUkVB RAkJCUJJVCg4KQorI2RlZmluZSBFUlJfTElORV9XUklURQkJCUJJVCg3KQorI2RlZmluZSBFUlJf QlVSU1RfV1JJVEUJCQlCSVQoNikKKyNkZWZpbmUgRVJSX1NNQUxMX0hFSUdIVAkJQklUKDUpCisj ZGVmaW5lIEVSUl9TTUFMTF9MRU4JCQlCSVQoNCkKKyNkZWZpbmUgRVJSX01JU1NJTkdfVlNZTkMJ CUJJVCgzKQorI2RlZmluZSBFUlJfTUlTU0lOR19IU1lOQwkJQklUKDIpCisjZGVmaW5lIEVSUl9N SVNTSU5HX0RBVEEJCUJJVCgxKQorI2RlZmluZSBWU0dfUlVOTklORwkJCUJJVCgwKQorCisjZGVm aW5lIFZJRF9WQ0FfU0VUVElORzEJCTB4ZjQKKyNkZWZpbmUgQlVSU1RfTFAJCQlCSVQoMTYpCisj ZGVmaW5lIE1BWF9CVVJTVF9MSU1JVCh4KQkJKHgpCisKKyNkZWZpbmUgVklEX1ZDQV9TRVRUSU5H MgkJMHhmOAorI2RlZmluZSBNQVhfTElORV9MSU1JVCh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUg RVhBQ1RfQlVSU1RfTElNSVQoeCkJCSh4KQorCisjZGVmaW5lIFRWR19DVEwJCQkJMHhmYworI2Rl ZmluZSBUVkdfU1RSSVBFX1NJWkUoeCkJCSgoeCkgPDwgNSkKKyNkZWZpbmUgVFZHX01PREVfTUFT SwkJCUdFTk1BU0soNCwgMykKKyNkZWZpbmUgVFZHX01PREVfU0lOR0xFX0NPTE9SCQkoMCA8PCAz KQorI2RlZmluZSBUVkdfTU9ERV9WU1RSSVBFUwkJKDIgPDwgMykKKyNkZWZpbmUgVFZHX01PREVf SFNUUklQRVMJCSgzIDw8IDMpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9NQVNLCQlHRU5NQVNLKDIs IDEpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9FT0YJCSgwIDw8IDEpCisjZGVmaW5lIFRWR19TVE9Q TU9ERV9FT0wJCSgxIDw8IDEpCisjZGVmaW5lIFRWR19TVE9QTU9ERV9OT1cJCSgyIDw8IDEpCisj ZGVmaW5lIFRWR19SVU4JCQkJQklUKDApCisKKyNkZWZpbmUgVFZHX0lNR19TSVpFCQkJMHgxMDAK KyNkZWZpbmUgVFZHX05CTElORVMoeCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBUVkdfTElORV9T SVpFKHgpCQkoeCkKKworI2RlZmluZSBUVkdfQ09MT1IxCQkJMHgxMDQKKyNkZWZpbmUgVFZHX0NP TDFfR1JFRU4oeCkJCSgoeCkgPDwgMTIpCisjZGVmaW5lIFRWR19DT0wxX1JFRCh4KQkJCSh4KQor CisjZGVmaW5lIFRWR19DT0xPUjFfQklTCQkJMHgxMDgKKyNkZWZpbmUgVFZHX0NPTDFfQkxVRSh4 KQkJKHgpCisKKyNkZWZpbmUgVFZHX0NPTE9SMgkJCTB4MTBjCisjZGVmaW5lIFRWR19DT0wyX0dS RUVOKHgpCQkoKHgpIDw8IDEyKQorI2RlZmluZSBUVkdfQ09MMl9SRUQoeCkJCQkoeCkKKworI2Rl ZmluZSBUVkdfQ09MT1IyX0JJUwkJCTB4MTEwCisjZGVmaW5lIFRWR19DT0wyX0JMVUUoeCkJCSh4 KQorCisjZGVmaW5lIFRWR19TVFMJCQkJMHgxMTQKKyNkZWZpbmUgVFZHX1NUU19SVU5OSU5HCQkJ QklUKDApCisKKyNkZWZpbmUgVEJHX0NUTAkJCQkweDExOAorI2RlZmluZSBUQkdfTU9ERV9NQVNL CQkJR0VOTUFTSyg0LCAzKQorI2RlZmluZSBUQkdfTU9ERV9TVEFSVF8xQl9TVE9QCQkoMCA8PCAz KQorI2RlZmluZSBUQkdfTU9ERV9TVEFSVF8yQl9TVE9QCQkoMSA8PCAzKQorI2RlZmluZSBUQkdf TU9ERV9TVEFSVF9CVVJTVF9DTlRfU1RPUAkoMiA8PCAzKQorI2RlZmluZSBUQkdfTU9ERV9TVEFS VF9CVVJTVF9TVE9QCSgzIDw8IDMpCisjZGVmaW5lIFRCR19EQVRBX1NFTAkJCUJJVCgyKQorI2Rl ZmluZSBUQkdfSFNfUkVRCQkJQklUKDEpCisjZGVmaW5lIFRCR19TVEFSVAkJCUJJVCgwKQorCisj ZGVmaW5lIFRCR19TRVRUSU5HMQkJCTB4MTFjCisjZGVmaW5lIFRCR19TRVRUSU5HMgkJCTB4MTIw CisKKyNkZWZpbmUgVEJHX1NUUwkJCQkweDEyNAorI2RlZmluZSBUQkdfU1RTX1JVTk5JTkcJCQlC SVQoMCkKKworI2RlZmluZSBUVkdfVEJHX1NUU19DVEwJCQkweDE0NAorI2RlZmluZSBUVkdfVEJH X1NUU19DTFIJCQkweDE2NAorI2RlZmluZSBUVkdfVEJHX1NUU19GTEFHCQkweDE4NAorI2RlZmlu ZSBUVkdfVEJHX1NUU19UQkdfUlVOTklORwkJQklUKDEpCisjZGVmaW5lIFRWR19UQkdfU1RTX1RW R19SVU5OSU5HCQlCSVQoMCkKKworI2RlZmluZSBTVFNfQ1RMX0VER0UoZSkJCQkoKGUpIDw8IDE2 KQorCisjZGVmaW5lIERQSFlfTEFORVNfTUFQCQkJMHgxOTgKKyNkZWZpbmUgREFUX1JFTUFQX0NG RyhiLCBsKQkJKChsKSA8PCAoKGIpICogOCkpCisKKyNkZWZpbmUgRFBJX0lSUV9FTgkJCTB4MWEw CisjZGVmaW5lIERQSV9JUlFfQ0xSCQkJMHgxYTQKKyNkZWZpbmUgRFBJX0lSUV9TVFMJCQkweDFh OAorI2RlZmluZSBQSVhFTF9CVUZfT1ZFUkZMT1cJCUJJVCgwKQorCisjZGVmaW5lIERQSV9DRkcJ CQkJMHgxYWMKKyNkZWZpbmUgRFBJX0NGR19GSUZPX0xFVkVMKHgpCQkoKHgpICYgR0VOTUFTSygx NSwgMCkpCisjZGVmaW5lIERQSV9DRkdfRklGT19ERVBUSCh4KQkJKCh4KSA+PiAxNikKKworI2Rl ZmluZSBEUEhZX0NGRzAJCQkweDFiMAorI2RlZmluZSBEUEhZX0NfUlNUQgkJCUJJVCgyMCkKKyNk ZWZpbmUgRFBIWV9EX1JTVEIoeCkJCQkoKHgpIDw8IDE2KQorI2RlZmluZSBEUEhZX1RJRl9GT1JD RV9XUklURQkJQklUKDEyKQorI2RlZmluZSBEUEhZX1BMTF9QRE4JCQlCSVQoMTApCisjZGVmaW5l IERQSFlfQ01OX1BETgkJCUJJVCg5KQorI2RlZmluZSBEUEhZX0NfUEROCQkJQklUKDgpCisjZGVm aW5lIERQSFlfRF9QRE4oeCkJCQkoKHgpIDw8IDQpCisjZGVmaW5lIERQSFlfUExMX1BTTwkJCUJJ VCgxKQorI2RlZmluZSBEUEhZX0NNTl9QU08JCQlCSVQoMCkKKworI2RlZmluZSBEUEhZX0NGRzEJ CQkweDFiNAorI2RlZmluZSBQREhZX1BMTF9PUERJVih4KQkJKCh4KSA8PCAyMCkKKyNkZWZpbmUg UERIWV9QTExfSVBESVYoeCkJCSgoeCkgPDwgMTIpCisjZGVmaW5lIFBESFlfUExMX0ZCRElWKHgp CQkoeCkKKworI2RlZmluZSBEUEhZX1BMTF9UTV9MTwkJCTB4MWI4CisjZGVmaW5lIERQSFlfUExM X1RNX01JRAkJCTB4MWJjCisjZGVmaW5lIERQSFlfUExMX1RNX0hJCQkJMHgxYzAKKworI2RlZmlu ZSBEUEhZX1NUQVRVUwkJCTB4MWM0CisjZGVmaW5lIFBQSV9EX1JYX1VMUFNfRVNDKHgpCQkoKHgp ID4+IDEyKQorI2RlZmluZSBQUElfQ19UWF9SRUFEWV9IUwkJQklUKDgpCisjZGVmaW5lIFBQSV9Q TExfTE9DSwkJCUJJVCg3KQorI2RlZmluZSBQUElfUExMX0NPQVJTRQkJCUJJVCg2KQorI2RlZmlu ZSBQUElfUExMX0NPQVJTRV9DT0RFKHgpCQkoKHgpICYgR0VOTUFTSyg1LCAwKSkKKworI2RlZmlu ZSBEUEhZX0JJU1QJCQkweDFjOAorI2RlZmluZSBQU09fQllQQVNTX0NUWF9FTgkJQklUKDEyKQor I2RlZmluZSBQU09fQllQQVNTX1RYX0VOKGwpCQlCSVQoOCArIChsKSkKKyNkZWZpbmUgQklTVF9D VFhfRU4JCQlCSVQoNCkKKyNkZWZpbmUgQklTVF9UWF9FTihsKQkJCUJJVChsKQorCisjZGVmaW5l IFRFU1RfR0VORVJJQwkJCTB4MWNjCisjZGVmaW5lIFRFU1RfU1RBVFVTKHgpCQkJKCh4KSA+PiAx NikKKyNkZWZpbmUgVEVTVF9DVFJMKHgpCQkJKHgpCisKKyNkZWZpbmUgSURfUkVHCQkJCTB4MWYw CisjZGVmaW5lIFJFVl9WRU5ET1JfSUQoeCkJCSgoKHgpICYgR0VOTUFTSygzMSwgMjApKSA+PiAy MCkKKyNkZWZpbmUgUkVWX1BST0RVQ1RfSUQoeCkJCSgoKHgpICYgR0VOTUFTSygxOSwgMTIpKSA+ PiAxMikKKyNkZWZpbmUgUkVWX0hXKHgpCQkJKCgoeCkgJiBHRU5NQVNLKDExLCA4KSkgPj4gOCkK KyNkZWZpbmUgUkVWX01BSk9SKHgpCQkJKCgoeCkgJiBHRU5NQVNLKDcsIDQpKSA+PiA0KQorI2Rl ZmluZSBSRVZfTUlOT1IoeCkJCQkoKHgpICYgR0VOTUFTSygzLCAwKSkKKworI2RlZmluZSBEU0lf T1VUUFVUX1BPUlQJCQkwCisjZGVmaW5lIERTSV9JTlBVVF9QT1JUKGlucHV0aWQpCQkoMSArIChp bnB1dGlkKSkKKworc3RydWN0IGNkbnNfZHNpX291dHB1dCB7CisJc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZGV2OworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2U7Cit9OworCitlbnVtIGNkbnNfZHNpX2lucHV0X2lkIHsKKwlDRE5TX0RQSV9JTlBV VCA9IDAsCit9OworCitzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgeworCWVudW0gY2Ruc19kc2lfaW5w dXRfaWQgaWQ7CisJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOworfTsKKworc3RydWN0IGNkbnNf ZHNpIHsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBiYXNlOworCXZvaWQgX19pb21lbSAqcmVnczsK KwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgaW5wdXQ7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCBv dXRwdXQ7CisJdW5zaWduZWQgaW50IGRpcmVjdF9jbWRfZmlmb19kZXB0aDsKKwl1bnNpZ25lZCBp bnQgcnhfZmlmb19kZXB0aDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkaXJlY3RfY21kX2NvbXA7CisJ c3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xrICpzeXNjbGs7Cit9OworCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBjZG5zX2RzaSAqaW5wdXRfdG9fZHNpKHN0cnVjdCBjZG5zX2RzaV9pbnB1dCAq aW5wdXQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbnB1dCwgc3RydWN0IGNkbnNfZHNpLCBp bnB1dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNkbnNfZHNpICp0b19jZG5zX2RzaShz dHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3Qs IHN0cnVjdCBjZG5zX2RzaSwgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNkbnNf ZHNpX2lucHV0ICoKK2JyaWRnZV90b19jZG5zX2RzaV9pbnB1dChzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQoreworCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgY2Ruc19kc2lf aW5wdXQsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfYnJpZGdlX2F0dGFjaChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5w dXQgPSBicmlkZ2VfdG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3QgY2Ruc19kc2kg KmRzaSA9IGlucHV0X3RvX2RzaShpbnB1dCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0 cHV0ID0gJmRzaS0+b3V0cHV0OworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGJyaWRn ZS0+ZGV2LCBEUklWRVJfQVRPTUlDKSkgeworCQlkZXZfZXJyKGRzaS0+YmFzZS5kZXYsCisJCQki Y2Rucy1kc2kgZHJpdmVyIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIERSTSBkZXZpY2VzIHN1cHBv cnRpbmcgYXRvbWljIHVwZGF0ZXMiKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlyZXR1 cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBvdXRwdXQtPmJyaWRnZSwgYnJp ZGdlKTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitjZG5zX2RzaV9icmlkZ2Vf bW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1 dCA9IGJyaWRnZV90b19jZG5zX2RzaV9pbnB1dChicmlkZ2UpOworCXN0cnVjdCBjZG5zX2RzaSAq ZHNpID0gaW5wdXRfdG9fZHNpKGlucHV0KTsKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRw dXQgPSAmZHNpLT5vdXRwdXQ7CisJaW50IGJwcDsKKworCS8qCisJICogVkZQX0RTSSBzaG91bGQg YmUgbGVzcyB0aGFuIFZGUF9EUEkgYW5kIFZGUF9EU0kgc2hvdWxkIGJlIGF0CisJICogbGVhc3Qg MS4KKwkgKi8KKwlpZiAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kIDwgMikKKwkJcmV0 dXJuIE1PREVfVl9JTExFR0FMOworCisJLyogVlNBX0RTSSA9IFZTQV9EUEkgYW5kIG11c3QgYmUg YXQgbGVhc3QgMi4gKi8KKwlpZiAobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQg PCAyKQorCQlyZXR1cm4gTU9ERV9WX0lMTEVHQUw7CisKKwkvKiBIQUNUIG11c3QgYmUgYSAzMi1i aXRzIGFsaWduZWQuICovCisJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChvdXRw dXQtPmRldi0+Zm9ybWF0KTsKKwlpZiAoKG1vZGUtPmhkaXNwbGF5ICogYnBwKSAlIDMyKQorCQly ZXR1cm4gTU9ERV9IX0lMTEVHQUw7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHZv aWQgY2Ruc19kc2lfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK KwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gYnJpZGdlX3RvX2NkbnNfZHNpX2lucHV0 KGJyaWRnZSk7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBpbnB1dF90b19kc2koaW5wdXQpOwor CXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwp OworCXZhbCAmPSB+KElGX1ZJRF9TRUxFQ1RfTUFTSyB8IElGX1ZJRF9NT0RFIHwgVklEX0VOIHwg SE9TVF9FT1RfR0VOIHwKKwkJIERJU1BfRU9UX0dFTik7CisJd3JpdGVsKHZhbCwgZHNpLT5yZWdz ICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKworCXZhbCA9IHJlYWRsKGRzaS0+cmVncyArIE1DVExf TUFJTl9FTikgJiB+SUZfRU4oaW5wdXQtPmlkKTsKKwl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBN Q1RMX01BSU5fRU4pOworfQorCisjZGVmaW5lIERTSV9IQlBfRlJBTUVfT1ZFUkhFQUQJCTEyCisj ZGVmaW5lIERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQJCTE0CisjZGVmaW5lIERTSV9IRlBfRlJBTUVf T1ZFUkhFQUQJCTYKKyNkZWZpbmUgRFNJX0hTU19WU1NfVlNFX0ZSQU1FX09WRVJIRUFECTQKKyNk ZWZpbmUgRFNJX0JMQU5LSU5HX0ZSQU1FX09WRVJIRUFECTYKKyNkZWZpbmUgRFNJX05VTExfRlJB TUVfT1ZFUkhFQUQJCTYKKyNkZWZpbmUgRFNJX0VPVF9QS1RfU0laRQkJNAorCisjZGVmaW5lIFJF R19XQUtFVVBfVElNRV9OUwkJODAwCisjZGVmaW5lIERQSFlfUExMX1JBVEVfSFoJCTEwODAwMDAw MAorCitzdGF0aWMgdm9pZCBjZG5zX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCit7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9IGJyaWRnZV90b19j ZG5zX2RzaV9pbnB1dChicmlkZ2UpOworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gaW5wdXRfdG9f ZHNpKGlucHV0KTsKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRw dXQ7CisJdTMyIGhzaXplMCwgaHNhLCBobGluZSwgdG1wLCByZWdfd2FrZXVwLCBkaXY7CisJdW5z aWduZWQgbG9uZyBkcGh5X3BsbF9wZXJpb2QsIHR4X2J5dGVfcGVyaW9kOworCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlOworCWludCBicHAsIG5sYW5lczsKKworCW1vZGUgPSAmYnJpZGdl LT5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwlicHAgPSBtaXBpX2RzaV9w aXhlbF9mb3JtYXRfdG9fYnBwKG91dHB1dC0+ZGV2LT5mb3JtYXQpOworCW5sYW5lcyA9IG91dHB1 dC0+ZGV2LT5sYW5lczsKKworCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJ X01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJdG1wID0gbW9kZS0+Y3J0Y19odG90YWwgLSBtb2Rl LT5jcnRjX2hzeW5jX2VuZDsKKwllbHNlCisJCXRtcCA9IG1vZGUtPmNydGNfaHRvdGFsIC0gbW9k ZS0+Y3J0Y19oc3luY19zdGFydDsKKwl0bXAgPSAodG1wICogYnBwKSAvIDg7CisJdG1wID0gdG1w IDwgRFNJX0hCUF9GUkFNRV9PVkVSSEVBRCA/IDAgOiB0bXAgLSBEU0lfSEJQX0ZSQU1FX09WRVJI RUFEOworCWhzaXplMCA9IEhCUF9MRU4odG1wKTsKKworCXRtcCA9IG1vZGUtPmNydGNfaHN5bmNf c3RhcnQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5OworCXRtcCA9ICh0bXAgKiBicHApIC8gODsKKwl0 bXAgPSB0bXAgPCBEU0lfSEZQX0ZSQU1FX09WRVJIRUFEID8gMCA6IHRtcCAtIERTSV9IRlBfRlJB TUVfT1ZFUkhFQUQ7CisJaHNpemUwIHw9IEhGUF9MRU4odG1wKTsKKworCWlmIChvdXRwdXQtPmRl di0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJdG1wID0g bW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCWVsc2UKKwkJ dG1wID0gMDsKKwl0bXAgPSAodG1wICogOCkgLyBicHA7CisJdG1wID0gdG1wIDwgRFNJX0hTQV9G UkFNRV9PVkVSSEVBRCA/IDAgOiB0bXAgLSBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEOworCWhzYSA9 IHRtcDsKKwloc2l6ZTAgfD0gSFNBX0xFTih0bXApOworCisJd3JpdGVsKGhzaXplMCwgZHNpLT5y ZWdzICsgVklEX0hTSVpFMSk7CisJd3JpdGVsKChtb2RlLT5jcnRjX2hkaXNwbGF5ICogYnBwKSAv IDgsIGRzaS0+cmVncyArIFZJRF9IU0laRTIpOworCisJd3JpdGVsKFZCUF9MRU4obW9kZS0+Y3J0 Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEpIHwKKwkgICAgICAgVkZQX0xFTiht b2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192ZGlzcGxheSkgfAorCSAgICAgICBW U0FfTEVOKG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCksCisJ ICAgICAgIGRzaS0+cmVncyArIFZJRF9WU0laRTEpOworCXdyaXRlbChtb2RlLT5jcnRjX3ZkaXNw bGF5LCBkc2ktPnJlZ3MgKyBWSURfVlNJWkUyKTsKKworCWhsaW5lID0gKG1vZGUtPmNydGNfaHRv dGFsICogYnBwKSAvIDg7CisJdG1wID0gaGxpbmUgLSBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEOwor CWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19Q VUxTRSkKKwkJdG1wIC09IGhzYSArIERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQ7CisKKwl3cml0ZWwo QkxLX0xJTkVfUFVMU0VfUEtUX0xFTih0bXApLCBkc2ktPnJlZ3MgKyBWSURfQkxLU0laRTIpOwor CWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19Q VUxTRSkKKwkJd3JpdGVsKE1BWF9MSU5FX0xJTUlUKHRtcCAtIERTSV9OVUxMX0ZSQU1FX09WRVJI RUFEKSwKKwkJICAgICAgIGRzaS0+cmVncyArIFZJRF9WQ0FfU0VUVElORzIpOworCisJdG1wID0g aGxpbmUgLQorCSAgICAgIChEU0lfSFNTX1ZTU19WU0VfRlJBTUVfT1ZFUkhFQUQgKyBEU0lfQkxB TktJTkdfRlJBTUVfT1ZFUkhFQUQpOworCXdyaXRlbChCTEtfTElORV9FVkVOVF9QS1RfTEVOKHRt cCksIGRzaS0+cmVncyArIFZJRF9CTEtTSVpFMSk7CisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVf ZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQl3cml0ZWwoTUFYX0xJ TkVfTElNSVQodG1wIC0gRFNJX05VTExfRlJBTUVfT1ZFUkhFQUQpLAorCQkgICAgICAgZHNpLT5y ZWdzICsgVklEX1ZDQV9TRVRUSU5HMik7CisKKwl0bXAgPSBESVZfUk9VTkRfVVAoaGxpbmUsIG5s YW5lcykgLSBESVZfUk9VTkRfVVAoaHNhLCBubGFuZXMpOworCisJaWYgKCEob3V0cHV0LT5kZXYt Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQpKQorCQl0bXAgLT0gRElWX1JP VU5EX1VQKERTSV9FT1RfUEtUX1NJWkUsIG5sYW5lcyk7CisKKwlkcGh5X3BsbF9wZXJpb2QgPSBO U0VDX1BFUl9TRUMgLyBEUEhZX1BMTF9SQVRFX0haOworCXR4X2J5dGVfcGVyaW9kID0gKGRwaHlf cGxsX3BlcmlvZCAqIDIpIC8gODsKKwlyZWdfd2FrZXVwID0gUkVHX1dBS0VVUF9USU1FX05TIC8g ZHBoeV9wbGxfcGVyaW9kOworCXdyaXRlbChSRUdfV0FLRVVQX1RJTUUocmVnX3dha2V1cCkgfCBS RUdfTElORV9EVVJBVElPTih0bXApLAorCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfRFBIWV9USU1F KTsKKworCS8qCisJICogSFNUWCBhbmQgTFBSWCB0aW1lb3V0cyBhcmUgYm90aCBleHByZXNzZWQg aW4gVFggYnl0ZSBjbGsgY3ljbGVzIGFuZAorCSAqIGJvdGggc2hvdWxkIGJlIHNldCB0byBhdCBs ZWFzdCB0aGUgdGltZSBpdCB0YWtlcyB0byB0cmFuc21pdCBhCisJICogZnJhbWUuCisJICovCisJ dG1wID0gTlNFQ19QRVJfU0VDIC8gbW9kZS0+dnJlZnJlc2g7CisJdG1wIC89IHR4X2J5dGVfcGVy aW9kOworCisJZm9yIChkaXYgPSAwOyBkaXYgPD0gQ0xLX0RJVl9NQVg7IGRpdisrKSB7CisJCWlm ICh0bXAgPD0gSFNUWF9USU1FT1VUX01BWCkKKwkJCWJyZWFrOworCisJCXRtcCA+Pj0gMTsKKwl9 CisKKwlpZiAodG1wID4gSFNUWF9USU1FT1VUX01BWCkKKwkJdG1wID0gSFNUWF9USU1FT1VUX01B WDsKKworCXdyaXRlbChDTEtfRElWKGRpdikgfCBIU1RYX1RJTUVPVVQodG1wKSwKKwkgICAgICAg ZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQxKTsKKworCXdyaXRlbChMUFJYX1RJTUVPVVQo dG1wKSwgZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQyKTsKKworCWlmIChvdXRwdXQtPmRl di0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJc3dpdGNoIChvdXRwdXQt PmRldi0+Zm9ybWF0KSB7CisJCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJCXRtcCA9IFZJ RF9QSVhFTF9NT0RFX1JHQjg4OCB8CisJCQkgICAgICBWSURfREFUQVRZUEUoTUlQSV9EU0lfUEFD S0VEX1BJWEVMX1NUUkVBTV8yNCk7CisJCQlicmVhazsKKworCQljYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjY6CisJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I2NjYgfAorCQkJICAgICAgVklEX0RB VEFUWVBFKE1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xOCk7CisJCQlicmVhazsKKworCQlj YXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQkJdG1wID0gVklEX1BJWEVMX01PREVf UkdCNjY2X1BBQ0tFRCB8CisJCQkgICAgICBWSURfREFUQVRZUEUoTUlQSV9EU0lfUEFDS0VEX1BJ WEVMX1NUUkVBTV8xOCk7CisJCQlicmVhazsKKworCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6 CisJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I2NjZfUEFDS0VEIHwKKwkJCSAgICAgIFZJRF9E QVRBVFlQRShNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzE2KTsKKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRzaS0+YmFzZS5kZXYsICJVbnN1cHBvcnRlZCBEU0kgZm9y bWF0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFn cyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJCXRtcCB8PSBTWU5DX1BVTFNF X0FDVElWRSB8IFNZTkNfUFVMU0VfSE9SSVpPTlRBTDsKKworCQl0bXAgfD0gUkVHX0JMS0xJTkVf TU9ERShSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUKSB8CisJCSAgICAgICBSRUdfQkxLRU9MX01P REUoUkVHX0JMS19NT0RFX0JMQU5LSU5HX1BLVCkgfAorCQkgICAgICAgUkVDT1ZFUllfTU9ERShS RUNPVkVSWV9NT0RFX05FWFRfSFNZTkMpOworCisJCXdyaXRlbCh0bXAsIGRzaS0+cmVncyArIFZJ RF9NQUlOX0NUTCk7CisJfQorCisJdG1wID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RB VEFfQ1RMKTsKKwl0bXAgJj0gfihJRl9WSURfU0VMRUNUX01BU0sgfCBIT1NUX0VPVF9HRU4gfCBJ Rl9WSURfTU9ERSk7CisKKwlpZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJ X01PREVfRU9UX1BBQ0tFVCkpCisJCXRtcCB8PSBIT1NUX0VPVF9HRU47CisKKwlpZiAob3V0cHV0 LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKQorCQl0bXAgfD0gSUZfVklE X01PREUgfCBJRl9WSURfU0VMRUNUKGlucHV0LT5pZCkgfCBWSURfRU47CisKKwl3cml0ZWwodG1w LCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwpOworCisJdG1wID0gcmVhZGwoZHNpLT5y ZWdzICsgTUNUTF9NQUlOX0VOKSB8IElGX0VOKGlucHV0LT5pZCk7CisJd3JpdGVsKHRtcCwgZHNp LT5yZWdzICsgTUNUTF9NQUlOX0VOKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJp ZGdlX2Z1bmNzIGNkbnNfZHNpX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gY2Ruc19kc2lf YnJpZGdlX2F0dGFjaCwKKwkubW9kZV92YWxpZCA9IGNkbnNfZHNpX2JyaWRnZV9tb2RlX3ZhbGlk LAorCS5kaXNhYmxlID0gY2Ruc19kc2lfYnJpZGdlX2Rpc2FibGUsCisJLmVuYWJsZSA9IGNkbnNf ZHNpX2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IGNkbnNfZHNpX2luaXRfbGluayhz dHJ1Y3QgY2Ruc19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQg PSAmZHNpLT5vdXRwdXQ7CisJdW5zaWduZWQgbG9uZyBzeXNjbGtfcGVyaW9kLCB1bHBvdXQ7CisJ dTMyIHZhbDsKKwlpbnQgaTsKKworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfU1RB VElDKTsKKworCXZhbCA9IDA7CisJZm9yIChpID0gMTsgaSA8IG91dHB1dC0+ZGV2LT5sYW5lczsg aSsrKQorCQl2YWwgfD0gREFUQV9MQU5FX0VOKGkpOworCisJaWYgKCEob3V0cHV0LT5kZXYtPm1v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykpCisJCXZhbCB8PSBDTEtf Q09OVElOVU9VUzsKKworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RM KTsKKworCS8qIFVMUE9VVCBzaG91bGQgYmUgc2V0IHRvIDFtcyBhbmQgaXMgZXhwcmVzc2VkIGlu IHN5c2NsayBjeWNsZXMuICovCisJc3lzY2xrX3BlcmlvZCA9IE5TRUNfUEVSX1NFQyAvIGNsa19n ZXRfcmF0ZShkc2ktPnN5c2Nsayk7CisJdWxwb3V0ID0gRElWX1JPVU5EX1VQKE5TRUNfUEVSX01T RUMsIHN5c2Nsa19wZXJpb2QpOworCXdyaXRlbChDTEtfTEFORV9VTFBPVVRfVElNRSh1bHBvdXQp IHwgREFUQV9MQU5FX1VMUE9VVF9USU1FKHVscG91dCksCisJICAgICAgIGRzaS0+cmVncyArIE1D VExfVUxQT1VUX1RJTUUpOworCisJd3JpdGVsKExJTktfRU4sIGRzaS0+cmVncyArIE1DVExfTUFJ Tl9EQVRBX0NUTCk7CisKKwl2YWwgPSBDTEtfTEFORV9FTiB8IFBMTF9TVEFSVDsKKwlmb3IgKGkg PSAwOyBpIDwgb3V0cHV0LT5kZXYtPmxhbmVzOyBpKyspCisJCXZhbCB8PSBEQVRBX0xBTkVfU1RB UlQoaSk7CisKKwl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOworCisJbmRl bGF5KDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9hdHRhY2go c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSB0b19jZG5zX2RzaShob3N0KTsKKwlz dHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7CisJc3RydWN0IGNk bnNfZHNpX2lucHV0ICppbnB1dCA9ICZkc2ktPmlucHV0OworCXN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2U7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRldmljZV9ub2RlICpu cDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgY29u bmVjdGluZyBzZXZlcmFsIERTSSBkZXZpY2VzIHRvIHRoZQorCSAqIHNhbWUgaG9zdC4gSW4gb3Jk ZXIgdG8gc3VwcG9ydCB0aGF0IHdlJ2QgbmVlZCB0aGUgRFJNIGJyaWRnZQorCSAqIGZyYW1ld29y ayB0byBhbGxvdyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0aGUgYnJpZGdlIGNoYWluLgor CSAqLworCWlmIChvdXRwdXQtPmRldikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFdlIGRvIG5v dCBzdXBwb3J0IGJ1cnN0IG1vZGUgeWV0LiAqLworCWlmIChkZXYtPm1vZGVfZmxhZ3MgJiBNSVBJ X0RTSV9NT0RFX1ZJREVPX0JVUlNUKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJLyoKKwkgKiBU aGUgaG9zdCA8LT4gZGV2aWNlIGxpbmsgbWlnaHQgYmUgZGVzY3JpYmVkIHVzaW5nIGFuIE9GLWdy YXBoCisJICogcmVwcmVzZW50YXRpb24sIGluIHRoaXMgY2FzZSB3ZSBleHRyYWN0IHRoZSBkZXZp Y2Ugb2Zfbm9kZSBmcm9tCisJICogdGhpcyByZXByZXNlbnRhdGlvbiwgb3RoZXJ3aXNlIHdlIHVz ZSBkc2lkZXYtPmRldi5vZl9ub2RlIHdoaWNoCisJICogc2hvdWxkIGhhdmUgYmVlbiBmaWxsZWQg YnkgdGhlIGNvcmUuCisJICovCisJbnAgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5i YXNlLmRldi0+b2Zfbm9kZSwgRFNJX09VVFBVVF9QT1JULAorCQkJCSAgICAgIGRldi0+Y2hhbm5l bCk7CisJaWYgKCFucCkKKwkJbnAgPSBvZl9ub2RlX2dldChkZXYtPmRldi5vZl9ub2RlKTsKKwor CXBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwobnApOworCWlmIChwYW5lbCkgeworCQlicmlkZ2Ug PSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJ fSBlbHNlIHsKKwkJYnJpZGdlID0gb2ZfZHJtX2ZpbmRfYnJpZGdlKGRldi0+ZGV2Lm9mX25vZGUp OworCQlpZiAoIWJyaWRnZSkKKwkJCWJyaWRnZSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJ b2Zfbm9kZV9wdXQobnApOworCisJaWYgKElTX0VSUihicmlkZ2UpKSB7CisJCXJldCA9IFBUUl9F UlIoYnJpZGdlKTsKKwkJZGV2X2Vycihob3N0LT5kZXYsICJmYWlsZWQgdG8gYWRkIERTSSBkZXZp Y2UgJXMgKGVyciA9ICVkKSIsCisJCQlkZXYtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJb3V0cHV0LT5kZXYgPSBkZXY7CisJb3V0cHV0LT5icmlkZ2UgPSBicmlkZ2U7CisJb3V0 cHV0LT5wYW5lbCA9IHBhbmVsOworCisJcmV0ID0gY2Ruc19kc2lfaW5pdF9saW5rKGRzaSk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfcnN0X291dHB1dDsKKworCS8qCisJICogVGhlIERTSSBvdXRw dXQgaGFzIGJlZW4gcHJvcGVybHkgY29uZmlndXJlZCwgd2UgY2FuIG5vdyBzYWZlbHkKKwkgKiBy ZWdpc3RlciB0aGUgaW5wdXQgdG8gdGhlIGJyaWRnZSBmcmFtZXdvcmsgc28gdGhhdCBpdCBjYW4g dGFrZSBwbGFjZQorCSAqIGluIGEgZGlzcGxheSBwaXBlbGluZS4KKwkgKi8KKwlkcm1fYnJpZGdl X2FkZCgmaW5wdXQtPmJyaWRnZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JzdF9vdXRwdXQ6CisJ aWYgKHBhbmVsKQorCQlkcm1fcGFuZWxfYnJpZGdlX3JlbW92ZShicmlkZ2UpOworCisJb3V0cHV0 LT5icmlkZ2UgPSBOVUxMOworCW91dHB1dC0+cGFuZWwgPSBOVUxMOworCW91dHB1dC0+ZGV2ID0g TlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfZGV0YWNoKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gdG9fY2Ruc19kc2koaG9zdCk7CisJc3Ry dWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0OworCXN0cnVjdCBjZG5z X2RzaV9pbnB1dCAqaW5wdXQgPSAmZHNpLT5pbnB1dDsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZp bnB1dC0+YnJpZGdlKTsKKwlpZiAob3V0cHV0LT5wYW5lbCkKKwkJZHJtX3BhbmVsX2JyaWRnZV9y ZW1vdmUob3V0cHV0LT5icmlkZ2UpOworCisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJ Tl9FTik7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisJd3Jp dGVsKDAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RMKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgY2Ruc19kc2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRh dGEpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBkYXRhOworCWlycXJldHVybl90IHJldCA9 IElSUV9OT05FOworCXUzMiBmbGFnLCBjdGw7CisKKwlmbGFnID0gcmVhZGwoZHNpLT5yZWdzICsg RElSRUNUX0NNRF9TVFNfRkxBRyk7CisJaWYgKGZsYWcpIHsKKwkJY3RsID0gcmVhZGwoZHNpLT5y ZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RMKTsKKwkJY3RsICY9IH5mbGFnOworCQl3cml0ZWwoY3Rs LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCQljb21wbGV0ZSgmZHNpLT5kaXJl Y3RfY21kX2NvbXApOworCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgc3NpemVfdCBjZG5zX2RzaV90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqaG9zdCwKKwkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQoreworCXN0cnVj dCBjZG5zX2RzaSAqZHNpID0gdG9fY2Ruc19kc2koaG9zdCk7CisJdTMyIGNtZCwgc3RzLCB2YWws IHdhaXQgPSBXUklURV9DT01QTEVURUQsIGN0bCA9IDA7CisJc3RydWN0IG1pcGlfZHNpX3BhY2tl dCBwYWNrZXQ7CisJaW50IHJldCwgaSwgdHhfbGVuLCByeF9sZW47CisKKwlyZXQgPSBtaXBpX2Rz aV9jcmVhdGVfcGFja2V0KCZwYWNrZXQsIG1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXR4X2xlbiA9IG1zZy0+dHhfYnVmID8gbXNnLT50eF9sZW4gOiAwOworCXJ4X2xlbiA9IG1z Zy0+cnhfYnVmID8gbXNnLT5yeF9sZW4gOiAwOworCisJLyogRm9yIHJlYWQgb3BlcmF0aW9ucywg dGhlIG1heGltdW0gVFggbGVuIGlzIDIuICovCisJaWYgKHJ4X2xlbiAmJiB0eF9sZW4gPiAyKQor CQlyZXR1cm4gLUVOT1RTVVBQOworCisJLyogVFggbGVuIGlzIGxpbWl0ZWQgYnkgdGhlIENNRCBG SUZPIGRlcHRoLiAqLworCWlmICh0eF9sZW4gPiBkc2ktPmRpcmVjdF9jbWRfZmlmb19kZXB0aCkK KwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCS8qIFJYIGxlbiBpcyBsaW1pdGVkIGJ5IHRoZSBSWCBG SUZPIGRlcHRoLiAqLworCWlmIChyeF9sZW4gPiBkc2ktPnJ4X2ZpZm9fZGVwdGgpCisJCXJldHVy biAtRU5PVFNVUFA7CisKKwljbWQgPSBDTURfU0laRSh0eF9sZW4pIHwgQ01EX1ZDSEFOX0lEKG1z Zy0+Y2hhbm5lbCkgfAorCSAgICAgIENNRF9EQVRBVFlQRShtc2ctPnR5cGUpOworCisJaWYgKG1z Zy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkKKwkJY21kIHw9IENNRF9MUF9FTjsKKwor CWlmIChtaXBpX2RzaV9wYWNrZXRfZm9ybWF0X2lzX2xvbmcobXNnLT50eXBlKSkKKwkJY21kIHw9 IENNRF9MT05HOworCisJaWYgKHJ4X2xlbikgeworCQljbWQgfD0gUkVBRF9DTUQ7CisJCXdhaXQg PSBSRUFEX0NPTVBMRVRFRF9XSVRIX0VSUiB8IFJFQURfQ09NUExFVEVEOworCQljdGwgPSBSRUFE X0VOIHwgQlRBX0VOOworCX0gZWxzZSBpZiAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFf QUNLKSB7CisJCWNtZCB8PSBCVEFfUkVROworCQl3YWl0ID0gQUNLX1dJVEhfRVJSX1JDVkQgfCBB Q0tfUkNWRDsKKwkJY3RsID0gQlRBX0VOOworCX0KKworCXdyaXRlbChyZWFkbChkc2ktPnJlZ3Mg KyBNQ1RMX01BSU5fREFUQV9DVEwpIHwgY3RsLAorCSAgICAgICBkc2ktPnJlZ3MgKyBNQ1RMX01B SU5fREFUQV9DVEwpOworCisJd3JpdGVsKGNtZCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9NQUlO X1NFVFRJTkdTKTsKKworCWZvciAoaSA9IDA7IGkgPCB0eF9sZW47IGkgKz0gNCkgeworCQljb25z dCB1OCAqYnVmID0gbXNnLT50eF9idWY7CisJCWludCBqOworCisJCXZhbCA9IDA7CisJCWZvciAo aiA9IDA7IGogPCA0ICYmIGogKyBpIDwgdHhfbGVuOyBqKyspCisJCQl2YWwgfD0gKHUzMilidWZb aSArIGpdIDw8ICg4ICogaik7CisKKwkJd3JpdGVsKHZhbCwgZHNpLT5yZWdzICsgRElSRUNUX0NN RF9XUkRBVEEpOworCX0KKworCS8qIENsZWFyIHN0YXR1cyBmbGFncyBiZWZvcmUgc2VuZGluZyB0 aGUgY29tbWFuZC4gKi8KKwl3cml0ZWwod2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNf Q0xSKTsKKwl3cml0ZWwod2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RMKTsKKwly ZWluaXRfY29tcGxldGlvbigmZHNpLT5kaXJlY3RfY21kX2NvbXApOworCXdyaXRlbCgwLCBkc2kt PnJlZ3MgKyBESVJFQ1RfQ01EX1NFTkQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0 KCZkc2ktPmRpcmVjdF9jbWRfY29tcCwKKwkJCQkgICAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7 CisKKwlzdHMgPSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUUyk7CisJd3JpdGVsKHdh aXQsIGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTX0NMUik7CisJd3JpdGVsKDAsIGRzaS0+cmVn cyArIERJUkVDVF9DTURfU1RTX0NUTCk7CisKKwl3cml0ZWwocmVhZGwoZHNpLT5yZWdzICsgTUNU TF9NQUlOX0RBVEFfQ1RMKSAmIH5jdGwsCisJICAgICAgIGRzaS0+cmVncyArIE1DVExfTUFJTl9E QVRBX0NUTCk7CisKKwkvKiBXZSBkaWQgbm90IHJlY2VpdmUgdGhlIGV2ZW50cyB3ZSB3ZXJlIHdh aXRpbmcgZm9yLiAqLworCWlmICghKHN0cyAmIHdhaXQpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsK KworCS8qIFJFQUQgb2YgV1JJVEUgd2l0aCBBQ0sgZmFpbGVkLiAqLworCWlmIChzdHMgJiAoUkVB RF9DT01QTEVURURfV0lUSF9FUlIgfCBBQ0tfV0lUSF9FUlJfUkNWRCkpCisJCXJldHVybiAtRUlP OworCisJZm9yIChpID0gMDsgaSA8IHJ4X2xlbjsgaSArPSA0KSB7CisJCXU4ICpidWYgPSBtc2ct PnJ4X2J1ZjsKKwkJaW50IGo7CisKKwkJdmFsID0gcmVhZGwoZHNpLT5yZWdzICsgRElSRUNUX0NN RF9SRERBVEEpOworCQlmb3IgKGogPSAwOyBqIDwgNCAmJiBqICsgaSA8IHJ4X2xlbjsgaisrKQor CQkJYnVmW2kgKyBqXSA9IHZhbCA+PiAoOCAqIGopOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIGNkbnNfZHNpX29wcyA9IHsKKwku YXR0YWNoID0gY2Ruc19kc2lfYXR0YWNoLAorCS5kZXRhY2ggPSBjZG5zX2RzaV9kZXRhY2gsCisJ LnRyYW5zZmVyID0gY2Ruc19kc2lfdHJhbnNmZXIsCit9OworCitzdGF0aWMgaW50IGNkbnNfZHNp X2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjZG5z X2RzaSAqZHNpOworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQ7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJaW50IHJldCwgaXJxOworCXUzMiB2YWw7CisKKwlkc2kgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzaSkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlpbnB1dCA9ICZkc2ktPmlucHV0OworCisJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+ cmVncykpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+cmVncyk7CisKKwlkc2ktPnBjbGsgPSBkZXZt X2Nsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGNsaykpCisJ CXJldHVybiBQVFJfRVJSKGRzaS0+cGNsayk7CisKKwlkc2ktPnN5c2NsayA9IGRldm1fY2xrX2dl dCgmcGRldi0+ZGV2LCAic3lzY2xrIik7CisJaWYgKElTX0VSUihkc2ktPnN5c2NsaykpCisJCXJl dHVybiBQVFJfRVJSKGRzaS0+c3lzY2xrKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5wY2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+c3lzY2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9k aXNfcGNsazsKKworCXZhbCA9IHJlYWRsKGRzaS0+cmVncyArIElEX1JFRyk7CisJaWYgKFJFVl9W RU5ET1JfSUQodmFsKSAhPSAweGNhZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlk IHZlbmRvciBpZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IHJlYWRsKGRz aS0+cmVncyArIElQX0NPTkYpOworCWRzaS0+ZGlyZWN0X2NtZF9maWZvX2RlcHRoID0gMSA8PCAo RElSQ01EX0ZJRk9fREVQVEgodmFsKSArIDIpOworCWRzaS0+cnhfZmlmb19kZXB0aCA9IFJYX0ZJ Rk9fREVQVEgodmFsKTsKKwlpbml0X2NvbXBsZXRpb24oJmRzaS0+ZGlyZWN0X2NtZF9jb21wKTsK KworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwpOworCXdyaXRlbCgw LCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RM X01BSU5fUEhZX0NUTCk7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCB0aGUgRFBJIGlucHV0 LCBzbyBmb3JjZSBpbnB1dC0+aWQgdG8KKwkgKiBDRE5TX0RQSV9JTlBVVC4KKwkgKi8KKwlpbnB1 dC0+aWQgPSBDRE5TX0RQSV9JTlBVVDsKKwlpbnB1dC0+YnJpZGdlLmZ1bmNzID0gJmNkbnNfZHNp X2JyaWRnZV9mdW5jczsKKwlpbnB1dC0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9k ZTsKKworCS8qIE1hc2sgYWxsIGludGVycnVwdHMgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBJUlEg aGFuZGxlci4gKi8KKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX1NUU19DVEwpOwor CXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfRVJSX0NUTDEpOworCXdyaXRlbCgwLCBk c2ktPnJlZ3MgKyBDTURfTU9ERV9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElS RUNUX0NNRF9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9SRF9T VFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgVklEX01PREVfU1RTX0NUTCk7CisJd3Jp dGVsKDAsIGRzaS0+cmVncyArIFRWR19UQkdfU1RTX0NUTCk7CisJd3JpdGVsKDAsIGRzaS0+cmVn cyArIERQSV9JUlFfRU4pOworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJx LCBjZG5zX2RzaV9pbnRlcnJ1cHQsIDAsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiks IGRzaSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGlzX3N5c2NsazsKKworCWRzaS0+YmFzZS5k ZXYgPSAmcGRldi0+ZGV2OworCWRzaS0+YmFzZS5vcHMgPSAmY2Ruc19kc2lfb3BzOworCisJcmV0 ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5iYXNlKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9kaXNfc3lzY2xrOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKwor CXJldHVybiAwOworCitlcnJfZGlzX3N5c2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5zeXNjbGspOworCitlcnJfZGlzX3BjbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ cGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNkbnNfZHNpX2RybV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRz aSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lz dGVyKCZkc2ktPmJhc2UpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnN5c2Nsayk7CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2Ruc19kc2lfb2ZfbWF0Y2hbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gImNkbnMsZHNpLTEuMy4xIiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnNfZHNpX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJv YmUgID0gY2Ruc19kc2lfZHJtX3Byb2JlLAorCS5yZW1vdmUgPSBjZG5zX2RzaV9kcm1fcmVtb3Zl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgPSAiY2Rucy1kc2kiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBjZG5zX2RzaV9vZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIo Y2Ruc19kc2lfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQm9yaXMgQnJlemls bG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJDYWRlbmNlIERTSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01P RFVMRV9BTElBUygicGxhdGZvcm06Y2Rucy1kc2kiKTsKKwotLSAKMi4xMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK