From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [RFC] drm: Add Grain Media GM12U320 kms driver Date: Thu, 1 Jun 2017 13:59:34 +0200 Message-ID: <20170601115934.4265-2-hdegoede@redhat.com> References: <20170601115934.4265-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 453346E348 for ; Thu, 1 Jun 2017 11:59:39 +0000 (UTC) In-Reply-To: <20170601115934.4265-1-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , Jani Nikula , Sean Paul , David Airlie Cc: =?UTF-8?q?Marco=20Diego=20Aur=C3=A9lio=20Mesquita?= , Hans de Goede , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org R3JhaW4tbWVkaWEgR00xMlUzMjAgYmFzZWQgZGV2aWNlcyBhcmUgbWluaSB2aWRlbyBwcm9qZWN0 b3JzIHVzaW5nIFVTQiBmb3IKYm90aCBwb3dlciBhbmQgdmlkZW8gZGF0YSB0cmFuc3BvcnQuCgpU aGlzIGNvbW1pdCBhZGRzIGEga21zIGRyaXZlciBmb3IgdGhlc2UgZGV2aWNlcywgaW5jbHVkaW5n IHByaW1lIHN1cHBvcnQuCgpUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgdWRs IGttcyBkcml2ZXIsIGFuZCB0aGUgZ20xMnUzMjAKZmIgZHJpdmVyIGJ5IFZpYWNoZXNsYXYgTnVy bWVraGFtaXRvdiA8c2xhdnJuQHlhbmRleC5ydT4uCgpTaWduZWQtb2ZmLWJ5OiBIYW5zIGRlIEdv ZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmln ICAgICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvTWFrZWZpbGUg ICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2Nv bm5lY3Rvci5jIHwgMTQ4ICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUz MjBfZG1hYnVmLmMgICAgfCAyODMgKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbTEy dTMyMC9nbTEydTMyMF9kcnYuYyAgICAgICB8IDE1NyArKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2dtMTJ1MzIwL2dtMTJ1MzIwX2Rydi5oICAgICAgIHwgMTI5ICsrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9nbTEydTMyMC9nbTEydTMyMF9lbmNvZGVyLmMgICB8ICA3NSArKysrCiBkcml2ZXJzL2dw dS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZmIuYyAgICAgICAgfCAzNDMgKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9nZW0uYyAgICAgICB8IDIzNyAr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMgICAg ICB8IDUwNiArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtMTJ1 MzIwL2dtMTJ1MzIwX21vZGVzZXQuYyAgIHwgMTQzICsrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2Vk LCAyMDQ4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v Z20xMnUzMjAvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEy dTMyMC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMy MC9nbTEydTMyMF9jb25uZWN0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9nbTEydTMyMC9nbTEydTMyMF9kbWFidWYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9lbmNvZGVyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZmIuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9nZW0uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfbW9kZXNldC5j CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwNTNjM2JkZDFm ZTUuLmUxOTczYWZjNDI4YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5F UlMKQEAgLTQ0MjMsNiArNDQyMywxMiBAQCBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvZ3B1L2Ry bS9ub3V2ZWF1LwogRjoJaW5jbHVkZS91YXBpL2RybS9ub3V2ZWF1X2RybS5oCiAKK0RSTSBEUklW RVJTIEZPUiBHUkFJTi1NRURJQSBHTTEyVTMyMAorTToJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVA cmVkaGF0LmNvbT4KK0w6CWRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKK1M6CVN1cHBv cnRlZAorRjoJZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwLworCiBEUk0gRFJJVkVSUyBGT1IgTlZJ RElBIFRFR1JBCiBNOglUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAZ21haWwuY29tPgog TDoJZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA3OGQ3ZmMwZWJi NTcuLjQ2ODk4YzRkZDBkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysr IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI3NCw2ICsyNzQsOCBAQCBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9tZXNvbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS90 aW55ZHJtL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25m aWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0CiAKIG1lbnVjb25maWcgRFJNX0xFR0FD WQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCmluZGV4IDU5ZjBmOWI2OTZlYi4uY2RlYzQxYzUyZTkxIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBA IC05NiwzICs5Niw0IEBAIG9iai15CQkJKz0gaGlzaWxpY29uLwogb2JqLSQoQ09ORklHX0RSTV9a VEUpCSs9IHp0ZS8KIG9iai0kKENPTkZJR19EUk1fTVhTRkIpCSs9IG14c2ZiLwogb2JqLSQoQ09O RklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLworb2JqLSQoQ09ORklHX0RSTV9HTTEyVTMyMCkg Kz0gZ20xMnUzMjAvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNjcyNzRjYjI5MWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorY29uZmlnIERS TV9HTTEyVTMyMAorCXRyaXN0YXRlICJHcmFpbiBNZWRpYSBHTTEyVTMyMCBiYXNlZCBtaW5pIHBy b2plY3RvcnMiCisJZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIFVTQl9TVVBQT1JUCisJZGVw ZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJc2VsZWN0IFVTQgorCXNlbGVjdCBEUk1fS01TX0hF TFBFUgorCWhlbHAKKwkgIFRoaXMgaXMgYSBLTVMgZHJpdmVyIGZvciBHcmFpbiBNZWRpYSBHTTEy VTMyMCBiYXNlZCB1c2IgbWluaSB2aWRlbworCSAgcHJvamVjdG9ycywgc3VjaCBhcyB0aGUgQWNl ciBDMTIwLgorCSAgU2F5IE0vWSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyB2aWEg ZHJtL2ttcyBpbnRlcmZhY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIw L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjIzNDQ3Mzk2N2IyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAor Y2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KKworZ20xMnUzMjAteSA6PQlnbTEydTMyMF9kcnYu byBnbTEydTMyMF9tb2Rlc2V0Lm8gZ20xMnUzMjBfY29ubmVjdG9yLm8gXAorCQlnbTEydTMyMF9l bmNvZGVyLm8gZ20xMnUzMjBfbWFpbi5vIGdtMTJ1MzIwX2ZiLm8gXAorCQlnbTEydTMyMF9nZW0u byBnbTEydTMyMF9kbWFidWYubworCitvYmotJChDT05GSUdfRFJNX0dNMTJVMzIwKSArPSBnbTEy dTMyMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfY29u bmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfY29ubmVjdG9yLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wNDJkYTA3YzE2YzIKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfY29ubmVj dG9yLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBS ZWQgSGF0IEluYy4KKyAqCisgKiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2Vk IGluIHBhcnRzIG9uIHRoZSBnbTEydTMyMCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIw MTMgVmlhY2hlc2xhdiBOdXJtZWtoYW1pdG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJp Z2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5 cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICog Q29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4K KyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENP UFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+CisjaW5jbHVkZSAiZ20xMnUzMjBfZHJ2LmgiCisKKy8qCisgKiBOb3RlIHRo aXMgYXNzdW1lcyB0aGlzIGRyaXZlciBpcyBvbmx5IGV2ZXIgdXNlZCB3aXRoIHRoZSBBY2VyIEMx MjAsIGlmIHdlCisgKiBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgZGV2aWNlcyB0aGUgdmVuZG9yIGFu ZCBtb2RlbCBzaG91bGQgYmUgcGFyYW1ldGVyaXplZC4KKyAqLworc3RhdGljIHN0cnVjdCBlZGlk IGdtMTJ1MzIwX2VkaWQgPSB7CisJLmhlYWRlcgkJPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYs IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfSwKKwkubWZnX2lkCQk9IHsgMHgwNCwgMHg3MiB9LAkv KiAiQUNSIiAqLworCS5wcm9kX2NvZGUJPSB7IDB4MjAsIDB4YzEgfSwJLyogQzEyMGggKi8KKwku bWZnX3dlZWsJPSAxLAorCS5tZmdfeWVhcgk9IDEsCisJLnZlcnNpb24JPSAxLAkJCS8qIEVESUQg MS4zICovCisJLnJldmlzaW9uCT0gMywJCQkvKiBFRElEIDEuMyAqLworCS5pbnB1dAkJPSAweDgw LAkJCS8qIERpZ2l0YWwgaW5wdXQgKi8KKwkuZmVhdHVyZXMJPSAweDAyLAkJCS8qIFByZWYgdGlt aW5nIGluIERURCAxICovCisJLnN0YW5kYXJkX3RpbWluZ3MgPSB7IHsgMSwgMSB9LCB7IDEsIDEg fSwgeyAxLCAxIH0sIHsgMSwgMSB9LAorCQkJICAgICAgeyAxLCAxIH0sIHsgMSwgMSB9LCB7IDEs IDEgfSwgeyAxLCAxIH0gfSwKKwkuZGV0YWlsZWRfdGltaW5ncyA9IHsgeworCQkucGl4ZWxfY2xv Y2sgPSAzMzgzLAorCQkvKiBoYWN0aXZlID0gODUyLCBoYmxhbmsgPSAyNTYgKi8KKwkJLmRhdGEu cGl4ZWxfZGF0YS5oYWN0aXZlX2xvID0gMHg1NCwKKwkJLmRhdGEucGl4ZWxfZGF0YS5oYmxhbmtf bG8gPSAweDAwLAorCQkuZGF0YS5waXhlbF9kYXRhLmhhY3RpdmVfaGJsYW5rX2hpID0gMHgzMSwK KwkJLyogdmFjdGl2ZSA9IDQ4MCwgdmJsYW5rID0gMjggKi8KKwkJLmRhdGEucGl4ZWxfZGF0YS52 YWN0aXZlX2xvID0gMHhlMCwKKwkJLmRhdGEucGl4ZWxfZGF0YS52YmxhbmtfbG8gPSAweDFjLAor CQkuZGF0YS5waXhlbF9kYXRhLnZhY3RpdmVfdmJsYW5rX2hpID0gMHgxMCwKKwkJLyogaHN5bmMg b2Zmc2V0IDQwIHB3IDEyOCwgdnN5bmMgb2Zmc2V0IDEgcHcgNCAqLworCQkuZGF0YS5waXhlbF9k YXRhLmhzeW5jX29mZnNldF9sbyA9IDB4MjgsCisJCS5kYXRhLnBpeGVsX2RhdGEuaHN5bmNfcHVs c2Vfd2lkdGhfbG8gPSAweDgwLAorCQkuZGF0YS5waXhlbF9kYXRhLnZzeW5jX29mZnNldF9wdWxz ZV93aWR0aF9sbyA9IDB4MTQsCisJCS5kYXRhLnBpeGVsX2RhdGEuaHN5bmNfdnN5bmNfb2Zmc2V0 X3B1bHNlX3dpZHRoX2hpID0gMHgwMCwKKwkJLyogRGlnaXRhbCBzZXBhcmF0ZSBzeW5jcywgaHN5 bmMrLCB2c3luYysgKi8KKwkJLmRhdGEucGl4ZWxfZGF0YS5taXNjID0gMHgxZSwKKwl9LCB7CisJ CS5waXhlbF9jbG9jayA9IDAsCisJCS5kYXRhLm90aGVyX2RhdGEudHlwZSA9IDB4ZmQsIC8qIE1v bml0b3IgcmFuZ2VzICovCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5taW5fdmZyZXEg PSA1OSwKKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1heF92ZnJlcSA9IDYxLAorCQku ZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UubWluX2hmcmVxX2toeiA9IDI5LAorCQkuZGF0YS5v dGhlcl9kYXRhLmRhdGEucmFuZ2UubWF4X2hmcmVxX2toeiA9IDMyLAorCQkuZGF0YS5vdGhlcl9k YXRhLmRhdGEucmFuZ2UucGl4ZWxfY2xvY2tfbWh6ID0gNCwgLyogNDAgTUh6ICovCisJCS5kYXRh Lm90aGVyX2RhdGEuZGF0YS5yYW5nZS5mbGFncyA9IDAsCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0 YS5yYW5nZS5mb3JtdWxhLmN2dCA9IHsKKwkJCTB4YTAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAs IDB4MjAsIDB4MjAgfSwKKwl9LCB7CisJCS5waXhlbF9jbG9jayA9IDAsCisJCS5kYXRhLm90aGVy X2RhdGEudHlwZSA9IDB4ZmMsIC8qIE1vZGVsIHN0cmluZyAqLworCQkuZGF0YS5vdGhlcl9kYXRh LmRhdGEuc3RyLnN0ciA9IHsKKwkJCSdDJywgJzEnLCAnMicsICcwJywgJ1AnLCAncicsICdvJywg J2onLCAnZScsICdjJywKKwkJCSd0JywgJ28nLCAncicgfSwKKwl9LCB7CisJCS5waXhlbF9jbG9j ayA9IDAsCisJCS5kYXRhLm90aGVyX2RhdGEudHlwZSA9IDB4ZmUsIC8qIFVuc3BlY2lmaWVkIHRl eHQgLyBwYWRkaW5nICovCisJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5zdHIuc3RyID0geworCQkJ J1xuJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKwkJCScg JywgJyAnLCAgJyAnIH0sCisJfSB9LAorCS5jaGVja3N1bSA9IDB4NDAsCit9OworCitzdGF0aWMg aW50IGdtMTJ1MzIwX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsICZn bTEydTMyMF9lZGlkKTsKKwlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgJmdt MTJ1MzIwX2VkaWQpOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworZ20x MnUzMjBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2Up Cit7CisJaWYgKGRybV9kZXZpY2VfaXNfdW5wbHVnZ2VkKGNvbm5lY3Rvci0+ZGV2KSkKKwkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyKgorZ20xMnUz MjBfYmVzdF9zaW5nbGVfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCWludCBlbmNfaWQgPSBjb25uZWN0b3ItPmVuY29kZXJfaWRzWzBdOworCisJcmV0dXJuIGRy bV9lbmNvZGVyX2ZpbmQoY29ubmVjdG9yLT5kZXYsIGVuY19pZCk7Cit9CisKK3N0YXRpYyBpbnQg Z20xMnUzMjBfY29ubmVjdG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCQkJICAg dWludDY0X3QgdmFsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF9j b25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRy bV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51 cChjb25uZWN0b3IpOworCWtmcmVlKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZ20xMnUzMjBfaGVscGVyX2Z1bmNzID0gewor CS5nZXRfbW9kZXMgPSBnbTEydTMyMF9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGdtMTJ1 MzIwX2Jlc3Rfc2luZ2xlX2VuY29kZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfZnVuY3MgZ20xMnUzMjBfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJt X2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gZ20xMnUzMjBfZGV0ZWN0LAorCS5m aWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5k ZXN0cm95ID0gZ20xMnUzMjBfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9IGdt MTJ1MzIwX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCit9OworCitpbnQgZ20xMnUzMjBfY29ubmVj dG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWNv bm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2Nvbm5lY3Rv cl9pbml0KGRldiwgY29ubmVjdG9yLCAmZ20xMnUzMjBfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAg RFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChj b25uZWN0b3IsICZnbTEydTMyMF9oZWxwZXJfZnVuY3MpOworCisJZHJtX2Nvbm5lY3Rvcl9yZWdp c3Rlcihjb25uZWN0b3IpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25u ZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZG1hYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfZG1hYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5iNTU4NjFlODMyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20x MnUzMjAvZ20xMnUzMjBfZG1hYnVmLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBCYXNlZCBv biB0aGUgdWRsIGRtYWJ1ZiBjb2RlOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQ2hy b21pdW0gT1MgQXV0aG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0 ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgImdtMTJ1MzIwX2Rydi5oIgor I2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgor CitzdHJ1Y3QgZ20xMnUzMjBfZHJtX2RtYWJ1Zl9hdHRhY2htZW50IHsKKwlzdHJ1Y3Qgc2dfdGFi bGUgc2d0OworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKKwlib29sIGlzX21hcHBlZDsK K307CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfYXR0YWNoX2RtYV9idWYoc3RydWN0IGRtYV9idWYg KmRtYWJ1ZiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBnbTEydTMyMF9kcm1fZG1hYnVmX2F0 dGFjaG1lbnQgKmdtMTJ1MzIwX2F0dGFjaDsKKworCURSTV9ERUJVR19QUklNRSgiW0RFVjolc10g c2l6ZTolemRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5z aXplKTsKKworCWdtMTJ1MzIwX2F0dGFjaCA9IGt6YWxsb2Moc2l6ZW9mKCpnbTEydTMyMF9hdHRh Y2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdtMTJ1MzIwX2F0dGFjaCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlnbTEydTMyMF9hdHRhY2gtPmRpciA9IERNQV9OT05FOworCWF0dGFjaC0+cHJpdiA9 IGdtMTJ1MzIwX2F0dGFjaDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMy MF9kZXRhY2hfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSAgICBzdHJ1Y3Qg ZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RybV9kbWFi dWZfYXR0YWNobWVudCAqZ20xMnUzMjBfYXR0YWNoID0gYXR0YWNoLT5wcml2OworCXN0cnVjdCBz Z190YWJsZSAqc2d0OworCisJaWYgKCFnbTEydTMyMF9hdHRhY2gpCisJCXJldHVybjsKKworCURS TV9ERUJVR19QUklNRSgiW0RFVjolc10gc2l6ZTolemRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2 KSwKKwkJCWF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCXNndCA9ICZnbTEydTMyMF9hdHRhY2gt PnNndDsKKworCWlmIChnbTEydTMyMF9hdHRhY2gtPmRpciAhPSBETUFfTk9ORSkKKwkJZG1hX3Vu bWFwX3NnKGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywKKwkJCQlnbTEydTMyMF9h dHRhY2gtPmRpcik7CisKKwlzZ19mcmVlX3RhYmxlKHNndCk7CisJa2ZyZWUoZ20xMnUzMjBfYXR0 YWNoKTsKKwlhdHRhY2gtPnByaXYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxl ICpnbTEydTMyMF9tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gs CisJCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBnbTEy dTMyMF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKmdtMTJ1MzIwX2F0dGFjaCA9IGF0dGFjaC0+cHJp djsKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqID0gdG9fZ20xMnUzMjBfYm8oYXR0 YWNoLT5kbWFidWYtPnByaXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2Uu ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqcmQsICp3cjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNn dCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHBhZ2VfY291bnQ7CisJaW50IG5lbnRz LCByZXQ7CisKKwlEUk1fREVCVUdfUFJJTUUoIltERVY6JXNdIHNpemU6JXpkIGRpcj0lZFxuIiwg ZGV2X25hbWUoYXR0YWNoLT5kZXYpLAorCQkJYXR0YWNoLT5kbWFidWYtPnNpemUsIGRpcik7CisK KwkvKiBqdXN0IHJldHVybiBjdXJyZW50IHNndCBpZiBhbHJlYWR5IHJlcXVlc3RlZC4gKi8KKwlp ZiAoZ20xMnUzMjBfYXR0YWNoLT5kaXIgPT0gZGlyICYmIGdtMTJ1MzIwX2F0dGFjaC0+aXNfbWFw cGVkKQorCQlyZXR1cm4gJmdtMTJ1MzIwX2F0dGFjaC0+c2d0OworCisJaWYgKCFvYmotPnBhZ2Vz KSB7CisJCXJldCA9IGdtMTJ1MzIwX2dlbV9nZXRfcGFnZXMob2JqKTsKKwkJaWYgKHJldCkgewor CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHBhZ2VzLlxuIik7CisJCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCQl9CisJfQorCisJcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9T SVpFOworCW9iai0+c2cgPSBkcm1fcHJpbWVfcGFnZXNfdG9fc2cob2JqLT5wYWdlcywgcGFnZV9j b3VudCk7CisJaWYgKElTX0VSUihvYmotPnNnKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh bGxvY2F0ZSBzZ3QuXG4iKTsKKwkJcmV0dXJuIEVSUl9DQVNUKG9iai0+c2cpOworCX0KKworCXNn dCA9ICZnbTEydTMyMF9hdHRhY2gtPnNndDsKKworCXJldCA9IHNnX2FsbG9jX3RhYmxlKHNndCwg b2JqLT5zZy0+b3JpZ19uZW50cywgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBhbGxvYyBzZ3QuXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmQgPSBvYmotPnNn LT5zZ2w7CisJd3IgPSBzZ3QtPnNnbDsKKwlmb3IgKGkgPSAwOyBpIDwgc2d0LT5vcmlnX25lbnRz OyArK2kpIHsKKwkJc2dfc2V0X3BhZ2Uod3IsIHNnX3BhZ2UocmQpLCByZC0+bGVuZ3RoLCByZC0+ b2Zmc2V0KTsKKwkJcmQgPSBzZ19uZXh0KHJkKTsKKwkJd3IgPSBzZ19uZXh0KHdyKTsKKwl9CisK KwlpZiAoZGlyICE9IERNQV9OT05FKSB7CisJCW5lbnRzID0gZG1hX21hcF9zZyhhdHRhY2gtPmRl diwgc2d0LT5zZ2wsIHNndC0+b3JpZ19uZW50cywgZGlyKTsKKwkJaWYgKCFuZW50cykgeworCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHNnbCB3aXRoIGlvbW11LlxuIik7CisJCQlzZ19mcmVl X3RhYmxlKHNndCk7CisJCQlzZ3QgPSBFUlJfUFRSKC1FSU8pOworCQkJZ290byBlcnJfdW5sb2Nr OworCQl9CisJfQorCisJZ20xMnUzMjBfYXR0YWNoLT5pc19tYXBwZWQgPSB0cnVlOworCWdtMTJ1 MzIwX2F0dGFjaC0+ZGlyID0gZGlyOworCWF0dGFjaC0+cHJpdiA9IGdtMTJ1MzIwX2F0dGFjaDsK KworZXJyX3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1 cm4gc2d0OworfQorCitzdGF0aWMgdm9pZCBnbTEydTMyMF91bm1hcF9kbWFfYnVmKHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwK KwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJLyogTm90aGluZyB0byBk by4gKi8KKwlEUk1fREVCVUdfUFJJTUUoIltERVY6JXNdIHNpemU6JXpkIGRpcjolZFxuIiwgZGV2 X25hbWUoYXR0YWNoLT5kZXYpLAorCQkJYXR0YWNoLT5kbWFidWYtPnNpemUsIGRpcik7Cit9CisK K3N0YXRpYyB2b2lkICpnbTEydTMyMF9kbWFidWZfa21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1 ZiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0pCit7CisJLyogVE9ETyAqLworCisJcmV0 dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpnbTEydTMyMF9kbWFidWZfa21hcF9hdG9taWMo c3RydWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2VfbnVtKQor eworCS8qIFRPRE8gKi8KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBnbTEydTMy MF9kbWFidWZfa3VubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAorCQkJCSAgIHVuc2lnbmVk IGxvbmcgcGFnZV9udW0sIHZvaWQgKmFkZHIpCit7CisJLyogVE9ETyAqLworfQorCitzdGF0aWMg dm9pZCBnbTEydTMyMF9kbWFidWZfa3VubWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1 ZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBhZ2VfbnVtLAorCQkJCQkgIHZvaWQgKmFkZHIpCit7 CisJLyogVE9ETyAqLworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX2RtYWJ1Zl9tbWFwKHN0cnVj dCBkbWFfYnVmICpkbWFfYnVmLAorCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorewor CS8qIFRPRE8gKi8KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9i dWZfb3BzIGdtMTJ1MzIwX2RtYWJ1Zl9vcHMgPSB7CisJLmF0dGFjaAkJCT0gZ20xMnUzMjBfYXR0 YWNoX2RtYV9idWYsCisJLmRldGFjaAkJCT0gZ20xMnUzMjBfZGV0YWNoX2RtYV9idWYsCisJLm1h cF9kbWFfYnVmCQk9IGdtMTJ1MzIwX21hcF9kbWFfYnVmLAorCS51bm1hcF9kbWFfYnVmCQk9IGdt MTJ1MzIwX3VubWFwX2RtYV9idWYsCisJLm1hcAkJCT0gZ20xMnUzMjBfZG1hYnVmX2ttYXAsCisJ Lm1hcF9hdG9taWMJCT0gZ20xMnUzMjBfZG1hYnVmX2ttYXBfYXRvbWljLAorCS51bm1hcAkJCT0g Z20xMnUzMjBfZG1hYnVmX2t1bm1hcCwKKwkudW5tYXBfYXRvbWljCQk9IGdtMTJ1MzIwX2RtYWJ1 Zl9rdW5tYXBfYXRvbWljLAorCS5tbWFwCQkJPSBnbTEydTMyMF9kbWFidWZfbW1hcCwKKwkucmVs ZWFzZQkJPSBkcm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlLAorfTsKKworc3RydWN0IGRtYV9idWYgKmdt MTJ1MzIwX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAg IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpCit7CisJREVGSU5FX0RNQV9C VUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOworCisJZXhwX2luZm8ub3BzID0gJmdtMTJ1MzIwX2Rt YWJ1Zl9vcHM7CisJZXhwX2luZm8uc2l6ZSA9IG9iai0+c2l6ZTsKKwlleHBfaW5mby5mbGFncyA9 IGZsYWdzOworCWV4cF9pbmZvLnByaXYgPSBvYmo7CisKKwlyZXR1cm4gZHJtX2dlbV9kbWFidWZf ZXhwb3J0KGRldiwgJmV4cF9pbmZvKTsKK30KKworc3RhdGljIGludCBnbTEydTMyMF9wcmltZV9j cmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgc2l6ZV90IHNpemUsIHN0cnVjdCBz Z190YWJsZSAqc2csCisJCQkJIHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICoqb2JqX3ApCit7 CisJc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgbnBhZ2VzOworCisJbnBh Z2VzID0gc2l6ZSAvIFBBR0VfU0laRTsKKworCSpvYmpfcCA9IE5VTEw7CisJb2JqID0gZ20xMnUz MjBfZ2VtX2FsbG9jX29iamVjdChkZXYsIG5wYWdlcyAqIFBBR0VfU0laRSk7CisJaWYgKCFvYmop CisJCXJldHVybiAtRU5PTUVNOworCisJb2JqLT5zZyA9IHNnOworCW9iai0+cGFnZXMgPSBkcm1f bWFsbG9jX2FiKG5wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwlpZiAob2JqLT5wYWdl cyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigib2JqIHBhZ2VzIGlzIE5VTEwgJWRcbiIsIG5wYWdl cyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRybV9wcmltZV9zZ190b19wYWdlX2FkZHJf YXJyYXlzKHNnLCBvYmotPnBhZ2VzLCBOVUxMLCBucGFnZXMpOworCisJKm9ial9wID0gb2JqOwor CXJldHVybiAwOworfQorCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdtMTJ1MzIwX2dlbV9wcmlt ZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgZG1hX2J1ZiAq ZG1hX2J1ZikKK3sKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CisJc3RydWN0 IHNnX3RhYmxlICpzZzsKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqdW9iajsKKwlpbnQg cmV0OworCisJLyogbmVlZCB0byBhdHRhY2ggKi8KKwlnZXRfZGV2aWNlKGRldi0+ZGV2KTsKKwlh dHRhY2ggPSBkbWFfYnVmX2F0dGFjaChkbWFfYnVmLCBkZXYtPmRldik7CisJaWYgKElTX0VSUihh dHRhY2gpKSB7CisJCXB1dF9kZXZpY2UoZGV2LT5kZXYpOworCQlyZXR1cm4gRVJSX0NBU1QoYXR0 YWNoKTsKKwl9CisKKwlnZXRfZG1hX2J1ZihkbWFfYnVmKTsKKworCXNnID0gZG1hX2J1Zl9tYXBf YXR0YWNobWVudChhdHRhY2gsIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoSVNfRVJSKHNnKSkg eworCQlyZXQgPSBQVFJfRVJSKHNnKTsKKwkJZ290byBmYWlsX2RldGFjaDsKKwl9CisKKwlyZXQg PSBnbTEydTMyMF9wcmltZV9jcmVhdGUoZGV2LCBkbWFfYnVmLT5zaXplLCBzZywgJnVvYmopOwor CWlmIChyZXQpCisJCWdvdG8gZmFpbF91bm1hcDsKKworCXVvYmotPmJhc2UuaW1wb3J0X2F0dGFj aCA9IGF0dGFjaDsKKwl1b2JqLT5mbGFncyA9IEdNMTJVMzIwX0JPX1dDOworCisJcmV0dXJuICZ1 b2JqLT5iYXNlOworCitmYWlsX3VubWFwOgorCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRh Y2gsIHNnLCBETUFfQklESVJFQ1RJT05BTCk7CitmYWlsX2RldGFjaDoKKwlkbWFfYnVmX2RldGFj aChkbWFfYnVmLCBhdHRhY2gpOworCWRtYV9idWZfcHV0KGRtYV9idWYpOworCXB1dF9kZXZpY2Uo ZGV2LT5kZXYpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5lYjFlNTJhOWI0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfZHJ2LmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTItMjAxNiBSZWQgSGF0IEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRo aXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSAiZ20xMnUzMjBfZHJ2LmgiCisKK3N0YXRpYyBpbnQgZ20xMnUz MjBfZHJpdmVyX3NldF9idXNpZChzdHJ1Y3QgZHJtX2RldmljZSAqZCwgc3RydWN0IGRybV9tYXN0 ZXIgKm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0 aW9uc19zdHJ1Y3QgZ20xMnUzMjBfZ2VtX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSBnbTEydTMyMF9n ZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92 bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdtMTJ1 MzIwX2RyaXZlcl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJt X29wZW4sCisJLm1tYXAgPSBnbTEydTMyMF9kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9s bCwKKwkucmVhZCA9IGRybV9yZWFkLAorCS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKKwku cmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3Rs LAorCS5sbHNlZWsgPSBub29wX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZl ciBkcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVS X0dFTSB8IERSSVZFUl9QUklNRSwKKwkubG9hZCA9IGdtMTJ1MzIwX2RyaXZlcl9sb2FkLAorCS51 bmxvYWQgPSBnbTEydTMyMF9kcml2ZXJfdW5sb2FkLAorCS5zZXRfYnVzaWQgPSBnbTEydTMyMF9k cml2ZXJfc2V0X2J1c2lkLAorCisJLyogZ2VtIGhvb2tzICovCisJLmdlbV9mcmVlX29iamVjdCA9 IGdtMTJ1MzIwX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZnbTEydTMyMF9nZW1f dm1fb3BzLAorCisJLmR1bWJfY3JlYXRlID0gZ20xMnUzMjBfZHVtYl9jcmVhdGUsCisJLmR1bWJf bWFwX29mZnNldCA9IGdtMTJ1MzIwX2dlbV9tbWFwLAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2Vt X2R1bWJfZGVzdHJveSwKKwkuZm9wcyA9ICZnbTEydTMyMF9kcml2ZXJfZm9wcywKKworCS5wcmlt ZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRf dG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBv cnQgPSBnbTEydTMyMF9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfaW1wb3J0ID0gZ20x MnUzMjBfZ2VtX3ByaW1lX2ltcG9ydCwKKworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2Mg PSBEUklWRVJfREVTQywKKwkuZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9N QUpPUiwKKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFU Q0hMRVZFTCwKK307CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX3Byb2JlKHN0cnVjdCB1c2Jf aW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9p ZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2 KGludGVyZmFjZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlpbnQgcjsKKworCS8qCisJ ICogVGhlIGdtMTJ1MzIwIHByZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtIGFzIDIgdXNiIG1h c3Mtc3RvcmFnZQorCSAqIGludGVyZmFjZXMsIGZvciB0aGUgc2Vjb25kIG9uZSB3ZSBwcm9jZWVk IHN1Y2Nlc3N1bGx5IHdpdGggYmluZGluZywKKwkgKiBidXQgb3RoZXJ3aXNlIGlnbm9yZSBpdC4K KwkgKi8KKwlpZiAoaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVt YmVyICE9IDApCisJCXJldHVybiAwOworCisJZGV2ID0gZHJtX2Rldl9hbGxvYygmZHJpdmVyLCAm aW50ZXJmYWNlLT5kZXYpOworCWlmIChJU19FUlIoZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGV2 KTsKKworCXIgPSBkcm1fZGV2X3JlZ2lzdGVyKGRldiwgKHVuc2lnbmVkIGxvbmcpdWRldik7CisJ aWYgKHIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwg ZGV2KTsKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgZ20xMnUzMjAgb24gbWlub3IgJWRcbiIsIGRl di0+cHJpbWFyeS0+aW5kZXgpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlOgorCWRybV9kZXZf dW5yZWYoZGV2KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfdXNiX2Rp c2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCFkZXYp CisJCXJldHVybjsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkZXYpOworCWdtMTJ1 MzIwX2ZiZGV2X3VucGx1ZyhkZXYpOworCWdtMTJ1MzIwX3N0b3BfZmJfdXBkYXRlKGRldik7CisJ ZHJtX3VucGx1Z19kZXYoZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitpbnQgZ20xMnUz MjBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBwbV9tZXNzYWdlX3Qg bWVzc2FnZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShp bnRlcmZhY2UpOworCisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCisJZ20xMnUzMjBfc3RvcF9m Yl91cGRhdGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdtMTJ1MzIwX3Jlc3VtZShzdHJ1 Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7 CisKKwlnbTEydTMyMF9zZXRfZWNvbW9kZShkZXYpOworCWdtMTJ1MzIwX3N0YXJ0X2ZiX3VwZGF0 ZShkZXYpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rldmlj ZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDFkZTEsIDB4YzEwMikgfSwKKwl7 fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3Ry dWN0IHVzYl9kcml2ZXIgZ20xMnUzMjBfZHJpdmVyID0geworCS5uYW1lID0gImdtMTJ1MzIwIiwK KwkucHJvYmUgPSBnbTEydTMyMF91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnbTEydTMyMF91 c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBpZF90YWJsZSwKKyNpZmRlZiBDT05GSUdfUE0K Kwkuc3VzcGVuZCA9IGdtMTJ1MzIwX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdtMTJ1MzIwX3Jlc3Vt ZSwKKwkucmVzZXRfcmVzdW1lID0gZ20xMnUzMjBfcmVzdW1lLAorI2VuZGlmCit9OworCittb2R1 bGVfdXNiX2RyaXZlcihnbTEydTMyMF9kcml2ZXIpOworTU9EVUxFX0FVVEhPUigiSGFucyBkZSBH b2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjg5NTVhMmFkNzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9kcnYuaApAQCAtMCwwICsxLDEyOSBAQAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFJlZCBIYXQgSW5jLgorICoKKyAqIEJhc2VkIGlu IHBhcnRzIG9uIHRoZSB1ZGwgY29kZS4gQmFzZWQgaW4gcGFydHMgb24gdGhlIGdtMTJ1MzIwIGZi IGRyaXZlcjoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBWaWFjaGVzbGF2IE51cm1la2hhbWl0b3Yg PHNsYXZybkB5YW5kZXgucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUm9iZXJ0byBEZSBJb3Jp cyA8cm9iZXJ0b0B1bmJpdC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYXlhIEt1bWFyIDxq YXlha3VtYXIubGttbEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQmVybmllIFRo b21wc29uIDxiZXJuaWVAcGx1Z2FibGUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkg b2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgR00x MlUzMjBfRFJWX0gKKyNkZWZpbmUgR00xMlUzMjBfRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L3Vz Yi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0u aD4KKworI2RlZmluZSBEUklWRVJfTkFNRQkJImdtMTJ1MzIwIgorI2RlZmluZSBEUklWRVJfREVT QwkJIkdyYWluIE1lZGlhIEdNMTJVMzIwIFVTQiBwcm9qZWN0b3IgZGlzcGxheSIKKyNkZWZpbmUg RFJJVkVSX0RBVEUJCSIyMDE1MDEwNyIKKworI2RlZmluZSBEUklWRVJfTUFKT1IJCTAKKyNkZWZp bmUgRFJJVkVSX01JTk9SCQkwCisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKKworI2RlZmlu ZSBHTTEyVTMyMF9CT19DQUNIRUFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgR00xMlUzMjBfQk9fV0MJ CSgxIDw8IDEpCisKKy8qCisgKiBUaGUgRExQIGhhcyBhbiBhY3R1YWwgd2lkdGggb2YgODU0IHBp eGVscywgYnV0IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUKKyAqIG9mIDQsIGJyZWFraW5nIHRoaW5n cyBsZWZ0IGFuZCByaWdodCwgc28gd2UgZXhwb3J0IGEgd2lkdGggb2YgODUyLgorICovCisjZGVm aW5lIEdNMTJVMzIwX1VTRVJfV0lEVEgJODUyCisjZGVmaW5lIEdNMTJVMzIwX1JFQUxfV0lEVEgJ ODU0CisjZGVmaW5lIEdNMTJVMzIwX0hFSUdIVAkJNDgwCisKKyNkZWZpbmUgR00xMlUzMjBfQkxP Q0tfQ09VTlQJMjAKKworc3RydWN0IGdtMTJ1MzIwX2RldmljZTsKKworc3RydWN0IGdtMTJ1MzIw X2ZiZGV2OworCitzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CisJ c3RydWN0IGdtMTJ1MzIwX2ZiZGV2ICpmYmRldjsKKwl1bnNpZ25lZCBjaGFyICpjbWRfYnVmOwor CXVuc2lnbmVkIGNoYXIgKmRhdGFfYnVmW0dNMTJVMzIwX0JMT0NLX0NPVU5UXTsKKwlzdHJ1Y3Qg eworCQlib29sIHJ1bjsKKwkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOworCQlzdHJ1 Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwkJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CisJCXN0cnVj dCBtdXRleCBsb2NrOworCQlzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiOworCQlpbnQg eDE7CisJCWludCB4MjsKKwkJaW50IHkxOworCQlpbnQgeTI7CisJfSBmYl91cGRhdGU7Cit9Owor CitzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJh c2U7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICp2bWFwcGluZzsKKwlzdHJ1Y3Qgc2df dGFibGUgKnNnOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKyNkZWZpbmUgdG9fZ20xMnUz MjBfYm8oeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0LCBiYXNl KQorCitzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgeworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgYmFzZTsKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworfTsKKworI2RlZmlu ZSB0b19nbTEydTMyMF9mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGdtMTJ1MzIwX2ZyYW1l YnVmZmVyLCBiYXNlKQorCisvKiBtb2Rlc2V0ICovCitpbnQgZ20xMnUzMjBfbW9kZXNldF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9tb2Rlc2V0X2NsZWFudXAo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgZ20xMnUzMjBfY29ubmVjdG9yX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp OworCitzdHJ1Y3QgZHJtX2VuY29kZXIgKmdtMTJ1MzIwX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKKworaW50IGdtMTJ1MzIwX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordm9pZCBnbTEydTMyMF9kcml2ZXJfdW5s b2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQgZ20xMnUzMjBfZmJkZXZfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgZ20xMnUzMjBfZmJkZXZfY2xlYW51cChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgZ20xMnUzMjBfZmJkZXZfdW5wbHVnKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCitnbTEydTMyMF9mYl91 c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpOworCitp bnQgZ20xMnUzMjBfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdz KTsKK2ludCBnbTEydTMyMF9nZW1fbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAq b2Zmc2V0KTsKKworc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKgorZ20xMnUzMjBfZ2VtX2Fs bG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGdt MTJ1MzIwX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwor c3RydWN0IGRtYV9idWYgKmdtMTJ1MzIwX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdz KTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ20xMnUzMjBfZ2VtX3ByaW1lX2ltcG9ydChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKTsKKwor aW50IGdtMTJ1MzIwX2dlbV9nZXRfcGFnZXMoc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9i aik7Cit2b2lkIGdtMTJ1MzIwX2dlbV9wdXRfcGFnZXMoc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmpl Y3QgKm9iaik7CitpbnQgZ20xMnUzMjBfZ2VtX3ZtYXAoc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmpl Y3QgKm9iaik7Cit2b2lkIGdtMTJ1MzIwX2dlbV92dW5tYXAoc3RydWN0IGdtMTJ1MzIwX2dlbV9v YmplY3QgKm9iaik7CitpbnQgZ20xMnUzMjBfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgZ20xMnUzMjBfZ2VtX2ZhdWx0KHN0 cnVjdCB2bV9mYXVsdCAqdm1mKTsKKwordm9pZCBnbTEydTMyMF9mYl9tYXJrX2RpcnR5KHN0cnVj dCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgaW50IHgxLCBpbnQgeDIsIGludCB5 MSwgaW50IHkyKTsKK3ZvaWQgZ20xMnUzMjBfc3RhcnRfZmJfdXBkYXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwordm9pZCBnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKK2ludCBnbTEydTMyMF9zZXRfZWNvbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUz MjBfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2VuY29kZXIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA4NWYwNWIwNjY3NAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9lbmNv ZGVyLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFJl ZCBIYXQgSW5jLgorICoKKyAqIEJhc2VkIGluIHBhcnRzIG9uIHRoZSB1ZGwgY29kZS4gQmFzZWQg aW4gcGFydHMgb24gdGhlIGdtMTJ1MzIwIGZiIGRyaXZlcjoKKyAqIENvcHlyaWdodCAoQykgMjAx MyBWaWFjaGVzbGF2IE51cm1la2hhbWl0b3YgPHNsYXZybkB5YW5kZXgucnU+CisgKiBDb3B5cmln aHQgKEMpIDIwMDkgUm9iZXJ0byBEZSBJb3JpcyA8cm9iZXJ0b0B1bmJpdC5pdD4KKyAqIENvcHly aWdodCAoQykgMjAwOSBKYXlhIEt1bWFyIDxqYXlha3VtYXIubGttbEBnbWFpbC5jb20+CisgKiBD b3B5cmlnaHQgKEMpIDIwMDkgQmVybmllIFRob21wc29uIDxiZXJuaWVAcGx1Z2FibGUuY29tPgor ICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09Q WUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBk ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlICJnbTEy dTMyMF9kcnYuaCIKKworLyogZHVtbXkgZW5jb2RlciAqLworc3RhdGljIHZvaWQgZ20xMnUzMjBf ZW5jX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVy X2NsZWFudXAoZW5jb2Rlcik7CisJa2ZyZWUoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGdt MTJ1MzIwX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9 CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2VuY29kZXJfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2VuY29kZXJfY29tbWl0 KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKK30KKworc3RhdGljIHZvaWQgZ20xMnUz MjBfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqdXN0ZWRfbW9kZSkKK3sKK30KKworc3RhdGljIHZvaWQKK2dtMTJ1MzIwX2VuY29kZXJf ZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQoreworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBnbTEydTMyMF9oZWxwZXJf ZnVuY3MgPSB7CisJLmRwbXMgPSBnbTEydTMyMF9lbmNvZGVyX2RwbXMsCisJLnByZXBhcmUgPSBn bTEydTMyMF9lbmNvZGVyX3ByZXBhcmUsCisJLm1vZGVfc2V0ID0gZ20xMnUzMjBfZW5jb2Rlcl9t b2RlX3NldCwKKwkuY29tbWl0ID0gZ20xMnUzMjBfZW5jb2Rlcl9jb21taXQsCisJLmRpc2FibGUg PSBnbTEydTMyMF9lbmNvZGVyX2Rpc2FibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2Z1bmNzIGdtMTJ1MzIwX2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGdtMTJ1 MzIwX2VuY19kZXN0cm95LAorfTsKKworc3RydWN0IGRybV9lbmNvZGVyICpnbTEydTMyMF9lbmNv ZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXI7CisKKwllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9lbmNvZGVy KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbmNvZGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWRybV9l bmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmZ20xMnUzMjBfZW5jX2Z1bmNzLAorCQkJIERSTV9N T0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVy LCAmZ20xMnUzMjBfaGVscGVyX2Z1bmNzKTsKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDE7 CisJcmV0dXJuIGVuY29kZXI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9mYi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGI3NjA1Zjc2YWY5Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX2ZiLmMK QEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0 IEluYy4KKyAqCisgKiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2VkIGluIHBh cnRzIG9uIHRoZSBnbTEydTMyMCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVmlh Y2hlc2xhdiBOdXJtZWtoYW1pdG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJpZ2h0IChD KSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQg KEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJp Z2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisg KiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcg aW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSAiZ20xMnUzMjBfZHJ2LmgiCisKKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5o PgorCitzdHJ1Y3QgZ20xMnUzMjBfZmJkZXYgeworCXN0cnVjdCBkcm1fZmJfaGVscGVyIGhlbHBl cjsKKwlzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgZmI7Cit9OworCit2b2lkIGdtMTJ1MzIw X2ZiX21hcmtfZGlydHkoc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICBp bnQgeDEsIGludCB4MiwgaW50IHkxLCBpbnQgeTIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGZiLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBO VUxMOworCWJvb2wgd2FrZXVwID0gZmFsc2U7CisKKwltdXRleF9sb2NrKCZnbTEydTMyMC0+ZmJf dXBkYXRlLmxvY2spOworCisJaWYgKGdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgIT0gZmIpIHsKKwkJ Z20xMnUzMjAtPmZiX3VwZGF0ZS54MSA9IHgxOworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLngyID0g eDI7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUueTEgPSB5MTsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0 ZS55MiA9IHkyOworCQlvbGRfZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiOworCQlnbTEydTMy MC0+ZmJfdXBkYXRlLmZiID0gZmI7CisJCWRybV9mcmFtZWJ1ZmZlcl9yZWZlcmVuY2UoJmdtMTJ1 MzIwLT5mYl91cGRhdGUuZmItPmJhc2UpOworCQl3YWtldXAgPSB0cnVlOworCX0gZWxzZSB7CisJ CWdtMTJ1MzIwLT5mYl91cGRhdGUueDEgPSBtaW4oZ20xMnUzMjAtPmZiX3VwZGF0ZS54MSwgeDEp OworCQlnbTEydTMyMC0+ZmJfdXBkYXRlLngyID0gbWF4KGdtMTJ1MzIwLT5mYl91cGRhdGUueDIs IHgyKTsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS55MSA9IG1pbihnbTEydTMyMC0+ZmJfdXBkYXRl LnkxLCB5MSk7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUueTIgPSBtYXgoZ20xMnUzMjAtPmZiX3Vw ZGF0ZS55MiwgeTIpOworCX0KKworCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5s b2NrKTsKKworCWlmICh3YWtldXApCisJCXdha2VfdXAoJmdtMTJ1MzIwLT5mYl91cGRhdGUud2Fp dHEpOworCisJaWYgKG9sZF9mYikKKwkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKCZvbGRf ZmItPmJhc2UpOworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX2ZiX29wZW4oc3RydWN0IGZiX2lu Zm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXYgPSBp bmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBmYmRldi0+ZmIuYmFzZS5kZXY7 CisKKwkvKiBJZiB0aGUgVVNCIGRldmljZSBpcyBnb25lLCB3ZSBkb24ndCBhY2NlcHQgbmV3IG9w ZW5zICovCisJaWYgKGRybV9kZXZpY2VfaXNfdW5wbHVnZ2VkKGRkZXYpKQorCQlyZXR1cm4gLUVO T0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBnbTEydTMyMF9m Yl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJRFJNX0ZCX0hFTFBFUl9ERUZBVUxU X09QUywKKwkuZmJfZmlsbHJlY3QgPSBkcm1fZmJfaGVscGVyX3N5c19maWxscmVjdCwKKwkuZmJf Y29weWFyZWEgPSBkcm1fZmJfaGVscGVyX3N5c19jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0g ZHJtX2ZiX2hlbHBlcl9zeXNfaW1hZ2VibGl0LAorCS5mYl9vcGVuID0gZ20xMnUzMjBfZmJfb3Bl biwKK307CisKKyNpZmRlZiBDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTgorc3RhdGljIHN0cnVj dCBmYl9kZWZlcnJlZF9pbyBnbTEydTMyMF9mYl9kZWZpbyA9IHsKKwkuZGVsYXkgPSBIWiAvIDMw LAorCS5kZWZlcnJlZF9pbyA9IGRybV9mYl9oZWxwZXJfZGVmZXJyZWRfaW8sCit9OworI2VuZGlm CisKK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNlcl9mcmFtZWJ1ZmZlcl9kaXJ0eShzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpkcm1fZmIsCisJCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJ CQkJICAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCQkgICBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHMsCisJCQkJCSAgIHVuc2lnbmVkIG51bV9jbGlwcykKK3sKKwlzdHJ1 Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiID0gdG9fZ20xMnUzMjBfZmIoZHJtX2ZiKTsKKwlp bnQgeDEsIHgyLCB5MSwgeTI7CisKKwlpZiAobnVtX2NsaXBzID09IDApCisJCXJldHVybiAwOwor CisJeDEgPSBjbGlwcy0+eDE7CisJeDIgPSBjbGlwcy0+eDI7CisJeTEgPSBjbGlwcy0+eTE7CisJ eTIgPSBjbGlwcy0+eTI7CisKKwl3aGlsZSAoLS1udW1fY2xpcHMpIHsKKwkJY2xpcHMrKzsKKwkJ eDEgPSBtaW5fdChpbnQsIHgxLCAoaW50KWNsaXBzLT54MSk7CisJCXgyID0gbWF4X3QoaW50LCB4 MiwgKGludCljbGlwcy0+eDIpOworCQl5MSA9IG1pbl90KGludCwgeTEsIChpbnQpY2xpcHMtPnkx KTsKKwkJeTIgPSBtYXhfdChpbnQsIHkyLCAoaW50KWNsaXBzLT55Mik7CisJfQorCisJZ20xMnUz MjBfZmJfbWFya19kaXJ0eShmYiwgeDEsIHgyLCB5MSwgeTIpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGdtMTJ1MzIwX3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpkcm1fZmIpCit7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyICpm YiA9IHRvX2dtMTJ1MzIwX2ZiKGRybV9mYik7CisKKwlpZiAoZmItPm9iaikKKwkJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmZiLT5vYmotPmJhc2UpOworCisJZHJtX2ZyYW1l YnVmZmVyX2NsZWFudXAoZHJtX2ZiKTsKKwlrZnJlZShmYik7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGdtMTJ1MzIwZmJfZnVuY3MgPSB7CisJLmRlc3Ry b3kgPSBnbTEydTMyMF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3ksCisJLmRpcnR5ID0gZ20xMnUz MjBfdXNlcl9mcmFtZWJ1ZmZlcl9kaXJ0eSwKK307CisKK3N0YXRpYyBpbnQKK2dtMTJ1MzIwX2Zy YW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGdtMTJ1 MzIwX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIg Km1vZGVfY21kLAorCQkJICBzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKQoreworCWlu dCByZXQ7CisKKwlmYi0+b2JqID0gb2JqOworCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVj dChkZXYsICZmYi0+YmFzZSwgbW9kZV9jbWQpOworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0 KGRldiwgJmZiLT5iYXNlLCAmZ20xMnUzMjBmYl9mdW5jcyk7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBnbTEydTMyMGZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVy LAorCQkJICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzKQorewor CXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXYgPQorCQljb250YWluZXJfb2YoaGVscGVyLCBz dHJ1Y3QgZ20xMnUzMjBfZmJkZXYsIGhlbHBlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGZiZGV2LT5oZWxwZXIuZGV2OworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmRybV9mYjsKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZDsK KwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworCXVpbnQzMl90IHNpemU7CisJaW50 IHJldCA9IDA7CisKKwlpZiAoc2l6ZXMtPnN1cmZhY2VfYnBwID09IDI0KQorCQlzaXplcy0+c3Vy ZmFjZV9icHAgPSAzMjsKKworCW1vZGVfY21kLndpZHRoID0gc2l6ZXMtPnN1cmZhY2Vfd2lkdGg7 CisJbW9kZV9jbWQuaGVpZ2h0ID0gc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0OworCW1vZGVfY21kLnBp dGNoZXNbMF0gPSBtb2RlX2NtZC53aWR0aCAqICgoc2l6ZXMtPnN1cmZhY2VfYnBwICsgNykgLyA4 KTsKKworCW1vZGVfY21kLnBpeGVsX2Zvcm1hdCA9IGRybV9tb2RlX2xlZ2FjeV9mYl9mb3JtYXQo c2l6ZXMtPnN1cmZhY2VfYnBwLAorCQkJCQkJCSAgc2l6ZXMtPnN1cmZhY2VfZGVwdGgpOworCisJ c2l6ZSA9IG1vZGVfY21kLnBpdGNoZXNbMF0gKiBtb2RlX2NtZC5oZWlnaHQ7CisJc2l6ZSA9IEFM SUdOKHNpemUsIFBBR0VfU0laRSk7CisKKwlvYmogPSBnbTEydTMyMF9nZW1fYWxsb2Nfb2JqZWN0 KGRldiwgc2l6ZSk7CisJaWYgKCFvYmopCisJCWdvdG8gb3V0OworCisJcmV0ID0gZ20xMnUzMjBf Z2VtX3ZtYXAob2JqKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHZtYXAg ZmJcbiIpOworCQlnb3RvIG91dF9nZnJlZTsKKwl9CisKKwlpbmZvID0gZHJtX2ZiX2hlbHBlcl9h bGxvY19mYmkoaGVscGVyKTsKKwlpZiAoSVNfRVJSKGluZm8pKSB7CisJCXJldCA9IFBUUl9FUlIo aW5mbyk7CisJCWdvdG8gb3V0X2dmcmVlOworCX0KKwlpbmZvLT5wYXIgPSBmYmRldjsKKworCXJl dCA9IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmZmJkZXYtPmZiLCAmbW9kZV9jbWQs IG9iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ2ZyZWU7CisKKwlkcm1fZmIgPSAmZmJkZXYt PmZiLmJhc2U7CisKKwlmYmRldi0+aGVscGVyLmZiID0gZHJtX2ZiOworCisJc3RyY3B5KGluZm8t PmZpeC5pZCwgImdtMTJ1MzIwZHJtZmIiKTsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gZmJkZXYt PmZiLm9iai0+dm1hcHBpbmc7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKKwlpbmZvLT5m aXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZiZGV2LT5mYi5vYmotPnZtYXBwaW5nOwor CisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVU OworCWluZm8tPmZib3BzID0gJmdtMTJ1MzIwX2ZiX29wczsKKwlkcm1fZmJfaGVscGVyX2ZpbGxf Zml4KGluZm8sIGRybV9mYi0+cGl0Y2hlc1swXSwgZHJtX2ZiLT5mb3JtYXQtPmRlcHRoKTsKKwlk cm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sICZmYmRldi0+aGVscGVyLAorCQkJICAgICAgIHNp emVzLT5mYl93aWR0aCwgc2l6ZXMtPmZiX2hlaWdodCk7CisjaWZkZWYgQ09ORklHX0RSTV9GQkRF Vl9FTVVMQVRJT04KKwlpbmZvLT5mYmRlZmlvID0gJmdtMTJ1MzIwX2ZiX2RlZmlvOworCWZiX2Rl ZmVycmVkX2lvX2luaXQoaW5mbyk7CisjZW5kaWYKKworCURSTV9ERUJVR19LTVMoImFsbG9jYXRl ZCAlZHglZCB2bWFsICVwXG4iLAorCQkgICAgICBkcm1fZmItPndpZHRoLCBkcm1fZmItPmhlaWdo dCwKKwkJICAgICAgZmJkZXYtPmZiLm9iai0+dm1hcHBpbmcpOworCisJcmV0dXJuIHJldDsKKwor b3V0X2dmcmVlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZmYmRldi0+ ZmIub2JqLT5iYXNlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgZ20xMnUzMjBfZmJfaGVscGVyX2Z1bmNzID0geworCS5m Yl9wcm9iZSA9IGdtMTJ1MzIwZmJfY3JlYXRlLAorfTsKKworc3RhdGljIHZvaWQgZ20xMnUzMjBf ZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBnbTEy dTMyMF9mYmRldiAqZmJkZXYpCit7CisjaWZkZWYgQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04K KwlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGZiZGV2LT5oZWxwZXIuZmJkZXYpOworI2VuZGlmCisJ ZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaSgmZmJkZXYtPmhlbHBlcik7CisJZHJtX2ZiX2hl bHBlcl9maW5pKCZmYmRldi0+aGVscGVyKTsKKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rlcl9w cml2YXRlKCZmYmRldi0+ZmIuYmFzZSk7CisJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoJmZiZGV2 LT5mYi5iYXNlKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmZmJkZXYt PmZiLm9iai0+YmFzZSk7Cit9CisKK2ludCBnbTEydTMyMF9mYmRldl9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCBnbTEydTMyMF9mYmRldiAqZmJkZXY7CisJaW50IHJldDsK KworCWZiZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdtMTJ1MzIwX2ZiZGV2KSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFmYmRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnbTEydTMyMC0+ZmJk ZXYgPSBmYmRldjsKKworCWRybV9mYl9oZWxwZXJfcHJlcGFyZShkZXYsICZmYmRldi0+aGVscGVy LCAmZ20xMnUzMjBfZmJfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5p dChkZXYsICZmYmRldi0+aGVscGVyLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwly ZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoJmZiZGV2LT5oZWxw ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmluaTsKKworCS8qIGRpc2FibGUgYWxsIHRoZSBwb3Nz aWJsZSBvdXRwdXRzL2NydGNzIGJlZm9yZSBlbnRlcmluZyBLTVMgbW9kZSAqLworCWRybV9oZWxw ZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CisKKwlyZXQgPSBkcm1fZmJfaGVscGVy X2luaXRpYWxfY29uZmlnKCZmYmRldi0+aGVscGVyLCAzMik7CisJaWYgKHJldCkKKwkJZ290byBm aW5pOworCisJcmV0dXJuIDA7CisKK2Zpbmk6CisJZHJtX2ZiX2hlbHBlcl9maW5pKCZmYmRldi0+ aGVscGVyKTsKK2ZyZWU6CisJa2ZyZWUoZmJkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQg Z20xMnUzMjBfZmJkZXZfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgh Z20xMnUzMjAtPmZiZGV2KQorCQlyZXR1cm47CisKKwlnbTEydTMyMF9mYmRldl9kZXN0cm95KGRl diwgZ20xMnUzMjAtPmZiZGV2KTsKKwlrZnJlZShnbTEydTMyMC0+ZmJkZXYpOworCWdtMTJ1MzIw LT5mYmRldiA9IE5VTEw7Cit9CisKK3ZvaWQgZ20xMnUzMjBfZmJkZXZfdW5wbHVnKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBk ZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFnbTEydTMyMC0+ZmJkZXYpCisJCXJldHVybjsKKwor CWRybV9mYl9oZWxwZXJfdW5saW5rX2ZiaSgmZ20xMnUzMjAtPmZiZGV2LT5oZWxwZXIpOworfQor CitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKK2dtMTJ1MzIwX2ZiX3VzZXJfZmJfY3JlYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkg ICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCit7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGdtMTJ1MzIwX2ZyYW1lYnVmZmVyICpmYjsKKwlp bnQgcmV0OworCXVpbnQzMl90IHNpemU7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAo ZmlsZSwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlzaXplID0gbW9kZV9jbWQtPnBpdGNoZXNbMF0gKiBtb2Rl X2NtZC0+aGVpZ2h0OworCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOworCisJaWYgKHNp emUgPiBvYmotPnNpemUpIHsKKwkJRFJNX0VSUk9SKCJvYmplY3Qgc2l6ZSBub3Qgc3VmZmljaWVu dCBmb3IgZmIgJWQgJXp1ICVkICVkXG4iLAorCQkJICBzaXplLCBvYmotPnNpemUsIG1vZGVfY21k LT5waXRjaGVzWzBdLAorCQkJICBtb2RlX2NtZC0+aGVpZ2h0KTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisJfQorCisJZmIgPSBremFsbG9jKHNpemVvZigqZmIpLCBHRlBfS0VSTkVMKTsK KwlpZiAoZmIgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBn bTEydTMyMF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgZmIsIG1vZGVfY21kLCB0b19nbTEydTMyMF9i byhvYmopKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGZiKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisJfQorCXJldHVybiAmZmItPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAv Z20xMnUzMjBfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43 YmM1NzZmYWUxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAv Z20xMnUzMjBfZ2VtLmMKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTItMjAxNiBSZWQgSGF0IEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMg YXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlICJnbTEydTMyMF9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5o PgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKworc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmpl Y3QgKgorZ20xMnUzMjBfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz aXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworCisJb2Jq ID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCWlmIChvYmogPT0gTlVMTCkK KwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZvYmotPmJh c2UsIHNpemUpICE9IDApIHsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ b2JqLT5mbGFncyA9IEdNMTJVMzIwX0JPX0NBQ0hFQUJMRTsKKwlyZXR1cm4gb2JqOworfQorCitz dGF0aWMgaW50IGdtMTJ1MzIwX2dlbV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHVpbnQ2NF90IHNpemUsIHVpbnQzMl90ICpo YW5kbGVfcCkKK3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7 CisJdTMyIGhhbmRsZTsKKworCXNpemUgPSByb3VuZHVwKHNpemUsIFBBR0VfU0laRSk7CisKKwlv YmogPSBnbTEydTMyMF9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgc2l6ZSk7CisJaWYgKG9iaiA9PSBO VUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShm aWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxlKTsKKwlpZiAocmV0KSB7CisJCWRybV9nZW1fb2JqZWN0 X3JlbGVhc2UoJm9iai0+YmFzZSk7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQor CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+YmFzZSk7CisJKmhh bmRsZV9wID0gaGFuZGxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdm1f Y2FjaGVfYXR0cihzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqLAorCQkJCSBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlEUk1fREVCVUdfS01TKCJmbGFncyA9IDB4JXhcbiIs IG9iai0+ZmxhZ3MpOworCisJLyogbm9uLWNhY2hlYWJsZSBhcyBkZWZhdWx0LiAqLworCWlmIChv YmotPmZsYWdzICYgR00xMlUzMjBfQk9fQ0FDSEVBQkxFKSB7CisJCXZtYS0+dm1fcGFnZV9wcm90 ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKKwl9IGVsc2UgaWYgKG9iai0+Zmxh Z3MgJiBHTTEyVTMyMF9CT19XQykgeworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9CisJCQlwZ3Byb3Rf d3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOworCX0gZWxzZSB7 CisJCXZtYS0+dm1fcGFnZV9wcm90ID0KKwkJCXBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2Vf cHJvdCh2bWEtPnZtX2ZsYWdzKSk7CisJfQorfQorCitpbnQgZ20xMnUzMjBfZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVj dCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlhcmdzLT5waXRjaCA9IGFyZ3MtPndp ZHRoICogRElWX1JPVU5EX1VQKGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBp dGNoICogYXJncy0+aGVpZ2h0OworCXJldHVybiBnbTEydTMyMF9nZW1fY3JlYXRlKGZpbGUsIGRl diwKKwkJCSAgICAgIGFyZ3MtPnNpemUsICZhcmdzLT5oYW5kbGUpOworfQorCitpbnQgZ20xMnUz MjBfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsK Kwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOworCisJdXBkYXRlX3ZtX2NhY2hlX2F0dHIo dG9fZ20xMnUzMjBfYm8odm1hLT52bV9wcml2YXRlX2RhdGEpLCB2bWEpOworCisJcmV0dXJuIHJl dDsKK30KKworaW50IGdtMTJ1MzIwX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sK KwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOworCXN0cnVjdCBnbTEydTMy MF9nZW1fb2JqZWN0ICpvYmogPSB0b19nbTEydTMyMF9ibyh2bWEtPnZtX3ByaXZhdGVfZGF0YSk7 CisJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBy ZXQgPSAwOworCisJcGFnZV9vZmZzZXQgPSAodm1mLT5hZGRyZXNzIC0gdm1hLT52bV9zdGFydCkg Pj4gUEFHRV9TSElGVDsKKworCWlmICghb2JqLT5wYWdlcykKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJ R0JVUzsKKworCXBhZ2UgPSBvYmotPnBhZ2VzW3BhZ2Vfb2Zmc2V0XTsKKwlyZXQgPSB2bV9pbnNl cnRfcGFnZSh2bWEsIHZtZi0+YWRkcmVzcywgcGFnZSk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNl IC1FQUdBSU46CisJY2FzZSAwOgorCWNhc2UgLUVSRVNUQVJUU1lTOgorCQlyZXR1cm4gVk1fRkFV TFRfTk9QQUdFOworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKKwlkZWZh dWx0OgorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCX0KK30KKworaW50IGdtMTJ1MzIwX2dl bV9nZXRfcGFnZXMoc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qg cGFnZSAqKnBhZ2VzOworCisJaWYgKG9iai0+cGFnZXMpCisJCXJldHVybiAwOworCisJcGFnZXMg PSBkcm1fZ2VtX2dldF9wYWdlcygmb2JqLT5iYXNlKTsKKwlpZiAoSVNfRVJSKHBhZ2VzKSkKKwkJ cmV0dXJuIFBUUl9FUlIocGFnZXMpOworCisJb2JqLT5wYWdlcyA9IHBhZ2VzOworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgZ20xMnUzMjBfZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgZ20xMnUzMjBfZ2Vt X29iamVjdCAqb2JqKQoreworCWlmIChvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkgeworCQlkcm1f ZnJlZV9sYXJnZShvYmotPnBhZ2VzKTsKKwkJb2JqLT5wYWdlcyA9IE5VTEw7CisJCXJldHVybjsK Kwl9CisKKwlkcm1fZ2VtX3B1dF9wYWdlcygmb2JqLT5iYXNlLCBvYmotPnBhZ2VzLCBmYWxzZSwg ZmFsc2UpOworCW9iai0+cGFnZXMgPSBOVUxMOworfQorCitpbnQgZ20xMnUzMjBfZ2VtX3ZtYXAo c3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpbnQgcGFnZV9jb3VudCA9IG9i ai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOworCWludCByZXQ7CisKKwlpZiAob2JqLT5iYXNlLmlt cG9ydF9hdHRhY2gpIHsKKwkJb2JqLT52bWFwcGluZyA9IGRtYV9idWZfdm1hcChvYmotPmJhc2Uu aW1wb3J0X2F0dGFjaC0+ZG1hYnVmKTsKKwkJaWYgKCFvYmotPnZtYXBwaW5nKQorCQkJcmV0dXJu IC1FTk9NRU07CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGdtMTJ1MzIwX2dlbV9nZXRfcGFn ZXMob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJb2JqLT52bWFwcGluZyA9IHZt YXAob2JqLT5wYWdlcywgcGFnZV9jb3VudCwgMCwgUEFHRV9LRVJORUwpOworCWlmICghb2JqLT52 bWFwcGluZykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ20xMnUz MjBfZ2VtX3Z1bm1hcChzdHJ1Y3QgZ20xMnUzMjBfZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChv YmotPmJhc2UuaW1wb3J0X2F0dGFjaCkgeworCQlkbWFfYnVmX3Z1bm1hcChvYmotPmJhc2UuaW1w b3J0X2F0dGFjaC0+ZG1hYnVmLCBvYmotPnZtYXBwaW5nKTsKKwkJcmV0dXJuOworCX0KKworCXZ1 bm1hcChvYmotPnZtYXBwaW5nKTsKKworCWdtMTJ1MzIwX2dlbV9wdXRfcGFnZXMob2JqKTsKK30K Kwordm9pZCBnbTEydTMyMF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW1fb2JqKQoreworCXN0cnVjdCBnbTEydTMyMF9nZW1fb2JqZWN0ICpvYmogPSB0b19nbTEydTMy MF9ibyhnZW1fb2JqKTsKKworCWlmIChvYmotPnZtYXBwaW5nKQorCQlnbTEydTMyMF9nZW1fdnVu bWFwKG9iaik7CisKKwlpZiAoZ2VtX29iai0+aW1wb3J0X2F0dGFjaCkgeworCQlkcm1fcHJpbWVf Z2VtX2Rlc3Ryb3koZ2VtX29iaiwgb2JqLT5zZyk7CisJCXB1dF9kZXZpY2UoZ2VtX29iai0+ZGV2 LT5kZXYpOworCX0KKworCWlmIChvYmotPnBhZ2VzKQorCQlnbTEydTMyMF9nZW1fcHV0X3BhZ2Vz KG9iaik7CisKKwlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZzZXQoZ2VtX29iaik7Cit9CisKKy8qIHRo ZSBkdW1iIGludGVyZmFjZSBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgR0VNIHN0cmFpZ2h0IE1NQVAK KyAgIGludGVyZmFjZSwgaXQgZXhwZWN0cyB0byBkbyBNTUFQIG9uIHRoZSBkcm0gZmQsIGxpa2Ug bm9ybWFsICovCitpbnQgZ20xMnUzMjBfZ2VtX21tYXAoc3RydWN0IGRybV9maWxlICpmaWxlLCBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90 ICpvZmZzZXQpCit7CisJc3RydWN0IGdtMTJ1MzIwX2dlbV9vYmplY3QgKmdvYmo7CisJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7CisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRs ZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2Nr OworCX0KKwlnb2JqID0gdG9fZ20xMnUzMjBfYm8ob2JqKTsKKworCXJldCA9IGdtMTJ1MzIwX2dl bV9nZXRfcGFnZXMoZ29iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gZHJtX2dl bV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpv ZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJmdvYmotPmJhc2Uudm1hX25vZGUpOwor CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmdvYmotPmJhc2UpOwordW5sb2Nr OgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjBfbWFpbi5jIGIvZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjZiOWFiOWQ2ZDE1YgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9nbTEydTMyMC9nbTEydTMyMF9tYWluLmMKQEAgLTAsMCArMSw1MDYgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBSZWQgSGF0IEluYy4KKyAqCisgKiBCYXNl ZCBpbiBwYXJ0cyBvbiB0aGUgdWRsIGNvZGUuIEJhc2VkIGluIHBhcnRzIG9uIHRoZSBnbTEydTMy MCBmYiBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVmlhY2hlc2xhdiBOdXJtZWtoYW1p dG92IDxzbGF2cm5AeWFuZGV4LnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUg SW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1h ciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5p ZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUg PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgImdtMTJ1 MzIwX2Rydi5oIgorCitzdGF0aWMgYm9vbCBlY29fbW9kZTsKK21vZHVsZV9wYXJhbShlY29fbW9k ZSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVjb19tb2RlLCAiVHVybiBvbiBFY28g bW9kZSAobGVzcyBicmlnaHQsIG1vcmUgc2lsZW50KSIpOworCisjZGVmaW5lIE1JU0NfUkNWX0VQ VAkJCTEKKyNkZWZpbmUgREFUQV9SQ1ZfRVBUCQkJMgorI2RlZmluZSBEQVRBX1NORF9FUFQJCQkz CisjZGVmaW5lIE1JU0NfU05EX0VQVAkJCTQKKworI2RlZmluZSBEQVRBX0JMT0NLX0hFQURFUl9T SVpFCQk4NAorI2RlZmluZSBEQVRBX0JMT0NLX0NPTlRFTlRfU0laRQkJNjQ1MTIKKyNkZWZpbmUg REFUQV9CTE9DS19GT09URVJfU0laRQkJMjAKKyNkZWZpbmUgREFUQV9CTE9DS19TSVpFCQkJKERB VEFfQkxPQ0tfSEVBREVSX1NJWkUgKyBcCisJCQkJCSBEQVRBX0JMT0NLX0NPTlRFTlRfU0laRSAr IFwKKwkJCQkJIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUpCisjZGVmaW5lIERBVEFfTEFTVF9CTE9D S19DT05URU5UX1NJWkUJNDAzMgorI2RlZmluZSBEQVRBX0xBU1RfQkxPQ0tfU0laRQkJKERBVEFf QkxPQ0tfSEVBREVSX1NJWkUgKyBcCisJCQkJCSBEQVRBX0xBU1RfQkxPQ0tfQ09OVEVOVF9TSVpF ICsgXAorCQkJCQkgREFUQV9CTE9DS19GT09URVJfU0laRSkKKworI2RlZmluZSBDTURfU0laRQkJ CTMxCisjZGVmaW5lIFJFQURfU1RBVFVTX1NJWkUJCTEzCisjZGVmaW5lIE1JU0NfVkFMVUVfU0la RQkJCTQKKworI2RlZmluZSBDTURfVElNRU9VVAkJCTIwMAorI2RlZmluZSBEQVRBX1RJTUVPVVQJ CQkxMDAwCisjZGVmaW5lIElETEVfVElNRU9VVAkJCTIwMDAKKyNkZWZpbmUgRklSU1RfRlJBTUVf VElNRU9VVAkJMjAwMAorCisjZGVmaW5lIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EJCTB4ZmYKKyNk ZWZpbmUgTUlTQ19SRVFfR0VUX1NFVF9FQ09fQgkJMHgzNQorLyogV2luZG93cyBkcml2ZXIgZG9l cyBvbmNlIGV2ZXJ0IHNlY29uZCwgd2l0aCB3aXRoIGFyZyBkID0gMSwgb3RoZXJzIDAgKi8KKyNk ZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjFfQQkJMHhmZgorI2RlZmluZSBNSVNDX1JFUV9VTktOT1dO MV9CCQkweDM4CisvKiBXaW5kb3dzIGRyaXZlciBkb2VzIHRoaXMgb24gaW5pdCwgd2l0aCBhcmcg YSwgYiA9IDAsIGMgPSAweGEwLCBkID0gNCAqLworI2RlZmluZSBNSVNDX1JFUV9VTktOT1dOMl9B CQkweGE1CisjZGVmaW5lIE1JU0NfUkVRX1VOS05PV04yX0IJCTB4MDAKKworc3RhdGljIGNvbnN0 IGNoYXIgY21kX2RhdGFbQ01EX1NJWkVdID0geworCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgxMCwgMHhmZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDgw LCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisK K3N0YXRpYyBjb25zdCBjaGFyIGNtZF9kcmF3W0NNRF9TSVpFXSA9IHsKKwkweDU1LCAweDUzLCAw eDQyLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ZmUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhk MSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwCit9OworCitzdGF0aWMgY29uc3QgY2hhciBjbWRfbWlzY1tDTURfU0laRV0gPSB7CisJ MHg1NSwgMHg1MywgMHg0MiwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAw eDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDEwLCAweGZkLAorCTB4MDAsIDB4MDAsIDB4 MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YV9ibG9ja19o ZWFkZXJbREFUQV9CTE9DS19IRUFERVJfU0laRV0gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor CTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4MTQsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgxNSwgMHgwMCwgMHgw MCwgMHhmYywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGRiCit9OworCitzdGF0 aWMgY29uc3QgY2hhciBkYXRhX2xhc3RfYmxvY2tfaGVhZGVyW0RBVEFfQkxPQ0tfSEVBREVSX1NJ WkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKKwkweGZiLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAorCTB4MmEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YzAsIDB4MGYsIDB4MDAsIDB4MDAsCisJMHgw MSwgMHgwMCwgMHgwMCwgMHhkNworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YV9ibG9ja19m b290ZXJbREFUQV9CTE9DS19GT09URVJfU0laRV0gPSB7CisJMHhmYiwgMHgxNCwgMHgwMiwgMHgy MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NGYKK307CisKK3N0YXRp YyBpbnQgZ20xMnUzMjBfdXNiX2FsbG9jKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIw KQoreworCWludCBpLCBibG9ja19zaXplOworCWNvbnN0IGNoYXIgKmhkcjsKKworCWdtMTJ1MzIw LT5jbWRfYnVmID0ga21hbGxvYyhDTURfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbTEydTMy MC0+Y21kX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgR00xMlUz MjBfQkxPQ0tfQ09VTlQ7IGkrKykgeworCQlpZiAoaSA9PSBHTTEyVTMyMF9CTE9DS19DT1VOVCAt IDEpIHsKKwkJCWJsb2NrX3NpemUgPSBEQVRBX0xBU1RfQkxPQ0tfU0laRTsKKwkJCWhkciA9IGRh dGFfbGFzdF9ibG9ja19oZWFkZXI7CisJCX0gZWxzZSB7CisJCQlibG9ja19zaXplID0gREFUQV9C TE9DS19TSVpFOworCQkJaGRyID0gZGF0YV9ibG9ja19oZWFkZXI7CisJCX0KKworCQlnbTEydTMy MC0+ZGF0YV9idWZbaV0gPSBremFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAo IWdtMTJ1MzIwLT5kYXRhX2J1ZltpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweShn bTEydTMyMC0+ZGF0YV9idWZbaV0sIGhkciwgREFUQV9CTE9DS19IRUFERVJfU0laRSk7CisJCW1l bWNweShnbTEydTMyMC0+ZGF0YV9idWZbaV0gKworCQkJCShibG9ja19zaXplIC0gREFUQV9CTE9D S19GT09URVJfU0laRSksCisJCSAgICAgICBkYXRhX2Jsb2NrX2Zvb3RlciwgREFUQV9CTE9DS19G T09URVJfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIw X3VzYl9mcmVlKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQoreworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IEdNMTJVMzIwX0JMT0NLX0NPVU5UOyBpKyspCisJCWtmcmVlKGdt MTJ1MzIwLT5kYXRhX2J1ZltpXSk7CisKKwlrZnJlZShnbTEydTMyMC0+Y21kX2J1Zik7Cit9CisK K3N0YXRpYyBpbnQgZ20xMnUzMjBfbWlzY19yZXF1ZXN0KHN0cnVjdCBnbTEydTMyMF9kZXZpY2Ug KmdtMTJ1MzIwLAorCQkJCSB1OCByZXFfYSwgdTggcmVxX2IsCisJCQkJIHU4IGFyZ19hLCB1OCBh cmdfYiwgdTggYXJnX2MsIHU4IGFyZ19kKQoreworCWludCByZXQsIGxlbjsKKwl1OCAqYnVmLCB2 YWw7CisKKwlidWYgPSBrbWFsbG9jKENNRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikK KwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoYnVmLCAmY21kX21pc2MsIENNRF9TSVpFKTsK KwlidWZbMjBdID0gcmVxX2E7CisJYnVmWzIxXSA9IHJlcV9iOworCWJ1ZlsyMl0gPSBhcmdfYTsK KwlidWZbMjNdID0gYXJnX2I7CisJYnVmWzI0XSA9IGFyZ19jOworCWJ1ZlsyNV0gPSBhcmdfZDsK KworCS8qIFNlbmQgcmVxdWVzdCAqLworCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRl diwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19TTkRfRVBUKSwK KwkJCSAgIGJ1ZiwgQ01EX1NJWkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwlpZiAocmV0IHx8IGxl biAhPSBDTURfU0laRSkgeworCQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4g cmVxLiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBsZWF2ZTsKKwl9 CisKKwkvKiBSZWFkIHZhbHVlICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2 LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2LCBNSVNDX1JDVl9FUFQpLAor CQkJICAgYnVmLCBNSVNDX1ZBTFVFX1NJWkUsICZsZW4sIERBVEFfVElNRU9VVCk7CisJaWYgKHJl dCB8fCBsZW4gIT0gTUlTQ19WQUxVRV9TSVpFKSB7CisJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2 LT5kZXYsICJNaXNjLiB2YWx1ZSBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJ Z290byBsZWF2ZTsKKwl9CisJdmFsID0gYnVmWzBdOworCisJLyogUmVhZCBzdGF0dXMgKi8KKwly ZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUo Z20xMnUzMjAtPnVkZXYsIE1JU0NfUkNWX0VQVCksCisJCQkgICBidWYsIFJFQURfU1RBVFVTX1NJ WkUsICZsZW4sIENNRF9USU1FT1VUKTsKKwlpZiAocmV0IHx8IGxlbiAhPSBSRUFEX1NUQVRVU19T SVpFKSB7CisJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYsICJNaXNjLiBzdGF0dXMgZXJy b3IgJWRcbiIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gbGVhdmU7CisJfQorCisJcmV0 ID0gdmFsOworbGVhdmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGdt MTJ1MzIwXzMyYnBwX3RvXzI0YnBwX3BhY2tlZCh1OCAqZHN0LCB1OCAqc3JjLCBpbnQgbGVuKQor eworCXdoaWxlIChsZW4tLSkgeworCQkqZHN0KysgPSAqc3JjKys7CisJCSpkc3QrKyA9ICpzcmMr KzsKKwkJKmRzdCsrID0gKnNyYysrOworCQlzcmMrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdt MTJ1MzIwX2NvcHlfZmJfdG9fYmxvY2tzKHN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIs CisJCQkJICAgICAgIGludCB4MSwgaW50IHgyLCBpbnQgeTEsIGludCB5MikKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZmItPmJhc2UuZGV2OworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2Ug KmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgYmxvY2ssIGRzdF9vZmZzZXQsIGxl biwgcmVtYWluLCByZXQ7CisJdTggKnNyYzsKKworCWlmIChmYi0+b2JqLT5iYXNlLmltcG9ydF9h dHRhY2gpIHsKKwkJcmV0ID0gZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKAorCQkJZmItPm9iai0+ YmFzZS5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChyZXQp IHsKKwkJCURSTV9FUlJPUigiZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzIGVycjogJWRcbiIsIHJl dCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoIWZiLT5vYmotPnZtYXBwaW5nKSB7CisJ CXJldCA9IGdtMTJ1MzIwX2dlbV92bWFwKGZiLT5vYmopOworCQlpZiAocmV0KSB7CisJCQlEUk1f RVJST1IoImZhaWxlZCB0byB2bWFwIGZiOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZW5kX2NwdV9h Y2Nlc3M7CisJCX0KKwl9CisKKwlzcmMgPSBmYi0+b2JqLT52bWFwcGluZyArIHkxICogZmItPmJh c2UucGl0Y2hlc1swXSArIHgxICogNDsKKworCXgxICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0g R00xMlUzMjBfVVNFUl9XSURUSCkgLyAyOworCXgyICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0g R00xMlUzMjBfVVNFUl9XSURUSCkgLyAyOworCisJZm9yICg7IHkxIDwgeTI7IHkxKyspIHsKKwkJ cmVtYWluID0gMDsKKwkJbGVuID0gKHgyIC0geDEpICogMzsKKwkJZHN0X29mZnNldCA9ICh5MSAq IEdNMTJVMzIwX1JFQUxfV0lEVEggKyB4MSkgKiAzOworCQlibG9jayA9IGRzdF9vZmZzZXQgLyBE QVRBX0JMT0NLX0NPTlRFTlRfU0laRTsKKwkJZHN0X29mZnNldCAlPSBEQVRBX0JMT0NLX0NPTlRF TlRfU0laRTsKKworCQlpZiAoKGRzdF9vZmZzZXQgKyBsZW4pID4gREFUQV9CTE9DS19DT05URU5U X1NJWkUpIHsKKwkJCXJlbWFpbiA9IGRzdF9vZmZzZXQgKyBsZW4gLSBEQVRBX0JMT0NLX0NPTlRF TlRfU0laRTsKKwkJCWxlbiA9IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFIC0gZHN0X29mZnNldDsK KwkJfQorCisJCWRzdF9vZmZzZXQgKz0gREFUQV9CTE9DS19IRUFERVJfU0laRTsKKwkJbGVuIC89 IDM7CisKKwkJZ20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2VkKAorCQkJZ20xMnUzMjAtPmRh dGFfYnVmW2Jsb2NrXSArIGRzdF9vZmZzZXQsCisJCQlzcmMsIGxlbik7CisKKwkJaWYgKHJlbWFp bikgeworCQkJYmxvY2srKzsKKwkJCWRzdF9vZmZzZXQgPSBEQVRBX0JMT0NLX0hFQURFUl9TSVpF OworCQkJZ20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2VkKAorCQkJCWdtMTJ1MzIwLT5kYXRh X2J1ZltibG9ja10gKyBkc3Rfb2Zmc2V0LAorCQkJCXNyYyArIGxlbiAqIDQsIHJlbWFpbiAvIDMp OworCQl9CisJCXNyYyArPSBmYi0+YmFzZS5waXRjaGVzWzBdOworCX0KKworZW5kX2NwdV9hY2Nl c3M6CisJaWYgKGZiLT5vYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkgeworCQlyZXQgPSBkbWFfYnVm X2VuZF9jcHVfYWNjZXNzKAorCQkJZmItPm9iai0+YmFzZS5pbXBvcnRfYXR0YWNoLT5kbWFidWYs IERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChyZXQpCisJCQlEUk1fRVJST1IoImRtYV9idWZfZW5k X2NwdV9hY2Nlc3MgZXJyOiAlZFxuIiwgcmV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ20xMnUz MjBfZmJfdXBkYXRlX3JlYWR5KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQorewor CWludCByZXQ7CisKKwltdXRleF9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCXJl dCA9ICFnbTEydTMyMC0+ZmJfdXBkYXRlLnJ1biB8fCBnbTEydTMyMC0+ZmJfdXBkYXRlLmZiICE9 IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfZmJfdXBkYXRlX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIw ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnbTEydTMyMF9kZXZpY2UsIGZiX3VwZGF0 ZS53b3JrKTsKKwlpbnQgZHJhd19zdGF0dXNfdGltZW91dCA9IEZJUlNUX0ZSQU1FX1RJTUVPVVQ7 CisJaW50IGJsb2NrLCBibG9ja19zaXplLCBsZW4sIHgxLCB4MiwgeTEsIHkyOworCXN0cnVjdCBn bTEydTMyMF9mcmFtZWJ1ZmZlciAqZmI7CisJaW50IGZyYW1lID0gMDsKKwlpbnQgcmV0ID0gMDsK KworCXdoaWxlIChnbTEydTMyMC0+ZmJfdXBkYXRlLnJ1bikgeworCQltdXRleF9sb2NrKCZnbTEy dTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCQlmYiA9IGdtMTJ1MzIwLT5mYl91cGRhdGUuZmI7CisJ CXgxID0gZ20xMnUzMjAtPmZiX3VwZGF0ZS54MTsKKwkJeDIgPSBnbTEydTMyMC0+ZmJfdXBkYXRl LngyOworCQl5MSA9IGdtMTJ1MzIwLT5mYl91cGRhdGUueTE7CisJCXkyID0gZ20xMnUzMjAtPmZi X3VwZGF0ZS55MjsKKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiA9IE5VTEw7CisJCW11dGV4X3Vu bG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKworCQlpZiAoZmIpIHsKKwkJCWdtMTJ1 MzIwX2NvcHlfZmJfdG9fYmxvY2tzKGZiLCB4MSwgeDIsIHkxLCB5Mik7CisJCQlkcm1fZnJhbWVi dWZmZXJfdW5yZWZlcmVuY2UoJmZiLT5iYXNlKTsKKwkJfQorCisJCWZvciAoYmxvY2sgPSAwOyBi bG9jayA8IEdNMTJVMzIwX0JMT0NLX0NPVU5UOyBibG9jaysrKSB7CisJCQlpZiAoYmxvY2sgPT0g R00xMlUzMjBfQkxPQ0tfQ09VTlQgLSAxKQorCQkJCWJsb2NrX3NpemUgPSBEQVRBX0xBU1RfQkxP Q0tfU0laRTsKKwkJCWVsc2UKKwkJCQlibG9ja19zaXplID0gREFUQV9CTE9DS19TSVpFOworCisJ CQkvKiBTZW5kIGRhdGEgY29tbWFuZCB0byBkZXZpY2UgKi8KKwkJCW1lbWNweShnbTEydTMyMC0+ Y21kX2J1ZiwgY21kX2RhdGEsIENNRF9TSVpFKTsKKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzhdID0g YmxvY2tfc2l6ZSAmIDB4ZmY7CisJCQlnbTEydTMyMC0+Y21kX2J1Zls5XSA9IGJsb2NrX3NpemUg Pj4gODsKKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzIwXSA9IDB4ZmMgLSBibG9jayAqIDQ7CisJCQln bTEydTMyMC0+Y21kX2J1ZlsyMV0gPSBibG9jayB8IChmcmFtZSA8PCA3KTsKKworCQkJcmV0ID0g dXNiX2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMy MC0+dWRldiwgREFUQV9TTkRfRVBUKSwKKwkJCQlnbTEydTMyMC0+Y21kX2J1ZiwgQ01EX1NJWkUs ICZsZW4sCisJCQkJQ01EX1RJTUVPVVQpOworCQkJaWYgKHJldCB8fCBsZW4gIT0gQ01EX1NJWkUp CisJCQkJZ290byBlcnI7CisKKwkJCS8qIFNlbmQgZGF0YSBibG9jayB0byBkZXZpY2UgKi8KKwkJ CXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUo Z20xMnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCksCisJCQkJZ20xMnUzMjAtPmRhdGFfYnVmW2Js b2NrXSwgYmxvY2tfc2l6ZSwKKwkJCQkmbGVuLCBEQVRBX1RJTUVPVVQpOworCQkJaWYgKHJldCB8 fCBsZW4gIT0gYmxvY2tfc2l6ZSkKKwkJCQlnb3RvIGVycjsKKworCQkJLyogUmVhZCBzdGF0dXMg Ki8KKwkJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCQl1c2JfcmN2YnVs a3BpcGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfUkNWX0VQVCksCisJCQkJZ20xMnUzMjAtPmNtZF9i dWYsIFJFQURfU1RBVFVTX1NJWkUsICZsZW4sCisJCQkJQ01EX1RJTUVPVVQpOworCQkJaWYgKHJl dCB8fCBsZW4gIT0gUkVBRF9TVEFUVVNfU0laRSkKKwkJCQlnb3RvIGVycjsKKwkJfQorCisJCS8q IFNlbmQgZHJhdyBjb21tYW5kIHRvIGRldmljZSAqLworCQltZW1jcHkoZ20xMnUzMjAtPmNtZF9i dWYsIGNtZF9kcmF3LCBDTURfU0laRSk7CisJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+ dWRldiwKKwkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9TTkRfRVBUKSwK KwkJCWdtMTJ1MzIwLT5jbWRfYnVmLCBDTURfU0laRSwgJmxlbiwgQ01EX1RJTUVPVVQpOworCQlp ZiAocmV0IHx8IGxlbiAhPSBDTURfU0laRSkKKwkJCWdvdG8gZXJyOworCisJCS8qIFJlYWQgc3Rh dHVzICovCisJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKKwkJCXVzYl9yY3Zi dWxrcGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9SQ1ZfRVBUKSwKKwkJCWdtMTJ1MzIwLT5jbWRf YnVmLCBSRUFEX1NUQVRVU19TSVpFLCAmbGVuLAorCQkJZHJhd19zdGF0dXNfdGltZW91dCk7CisJ CWlmIChyZXQgfHwgbGVuICE9IFJFQURfU1RBVFVTX1NJWkUpCisJCQlnb3RvIGVycjsKKworCQlk cmF3X3N0YXR1c190aW1lb3V0ID0gQ01EX1RJTUVPVVQ7CisJCWZyYW1lID0gIWZyYW1lOworCisJ CS8qCisJCSAqIFdlIG11c3QgZHJhdyBhIGZyYW1lIGV2ZXJ5IDJzIG90aGVyd2lzZSB0aGUgcHJv amVjdG9yCisJCSAqIHN3aXRjaGVzIGJhY2sgdG8gc2hvd2luZyBpdHMgbG9nby4KKwkJICovCisJ CXdhaXRfZXZlbnRfdGltZW91dChnbTEydTMyMC0+ZmJfdXBkYXRlLndhaXRxLAorCQkJCSAgIGdt MTJ1MzIwX2ZiX3VwZGF0ZV9yZWFkeShnbTEydTMyMCksCisJCQkJICAgbXNlY3NfdG9famlmZmll cyhJRExFX1RJTUVPVVQpKTsKKwl9CisJcmV0dXJuOworZXJyOgorCS8qIERvIG5vdCBsb2cgZXJy b3JzIGNhdXNlZCBieSBtb2R1bGUgdW5sb2FkIG9yIGRldmljZSB1bnBsdWcgKi8KKwlpZiAocmV0 ICE9IC1FQ09OTlJFU0VUICYmIHJldCAhPSAtRVNIVVRET1dOKQorCQlkZXZfZXJyKCZnbTEydTMy MC0+dWRldi0+ZGV2LCAiRnJhbWUgdXBkYXRlIGVycm9yOiAlZFxuIiwgcmV0KTsKK30KKwordm9p ZCBnbTEydTMyMF9zdGFydF9mYl91cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlt dXRleF9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCWdtMTJ1MzIwLT5mYl91cGRh dGUucnVuID0gdHJ1ZTsKKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7 CisKKwlxdWV1ZV93b3JrKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EsICZnbTEydTMyMC0+ZmJf dXBkYXRlLndvcmspOworfQorCit2b2lkIGdtMTJ1MzIwX3N0b3BfZmJfdXBkYXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBk ZXYtPmRldl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2Nr KTsKKwlnbTEydTMyMC0+ZmJfdXBkYXRlLnJ1biA9IGZhbHNlOworCW11dGV4X3VubG9jaygmZ20x MnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKKworCXdha2VfdXAoJmdtMTJ1MzIwLT5mYl91cGRhdGUu d2FpdHEpOworCWNhbmNlbF93b3JrX3N5bmMoJmdtMTJ1MzIwLT5mYl91cGRhdGUud29yayk7CisK KwltdXRleF9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOworCWlmIChnbTEydTMyMC0+ ZmJfdXBkYXRlLmZiKSB7CisJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZSgmZ20xMnUzMjAt PmZiX3VwZGF0ZS5mYi0+YmFzZSk7CisJCWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIgPSBOVUxMOwor CX0KKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cit9CisKK2ludCBn bTEydTMyMF9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25n IGZsYWdzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gKHZvaWQgKilmbGFnczsKKwlz dHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwor CURSTV9ERUJVRygiXG4iKTsKKwlnbTEydTMyMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnbTEy dTMyMF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdtMTJ1MzIwKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWdtMTJ1MzIwLT51ZGV2ID0gdWRldjsKKwlnbTEydTMyMC0+ZGRldiA9IGRldjsK KwlkZXYtPmRldl9wcml2YXRlID0gZ20xMnUzMjA7CisKKwlJTklUX1dPUksoJmdtMTJ1MzIwLT5m Yl91cGRhdGUud29yaywgZ20xMnUzMjBfZmJfdXBkYXRlX3dvcmspOworCW11dGV4X2luaXQoJmdt MTJ1MzIwLT5mYl91cGRhdGUubG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZ20xMnUzMjAt PmZiX3VwZGF0ZS53YWl0cSk7CisKKwlyZXQgPSBnbTEydTMyMF9zZXRfZWNvbW9kZShkZXYpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrcSA9IGNy ZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSSVZFUl9OQU1FKTsKKwlpZiAoIWdtMTJ1MzIw LT5mYl91cGRhdGUud29ya3EpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQor CisJcmV0ID0gZ20xMnUzMjBfdXNiX2FsbG9jKGdtMTJ1MzIwKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl93cTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlyZXQgPSBnbTEydTMyMF9tb2Rlc2V0X2lu aXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91c2I7CisKKwlyZXQgPSBnbTEydTMyMF9m YmRldl9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbW9kZXNldDsKKworCXJldCA9 IGRybV92YmxhbmtfaW5pdChkZXYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZiOworCisJ Z20xMnUzMjBfc3RhcnRfZmJfdXBkYXRlKGRldik7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZiOgor CWdtMTJ1MzIwX2ZiZGV2X2NsZWFudXAoZGV2KTsKK2Vycl9tb2Rlc2V0OgorCWdtMTJ1MzIwX21v ZGVzZXRfY2xlYW51cChkZXYpOworZXJyX3VzYjoKKwlnbTEydTMyMF91c2JfZnJlZShnbTEydTMy MCk7CitlcnJfd3E6CisJZGVzdHJveV93b3JrcXVldWUoZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3Jr cSk7CitlcnI6CisJa2ZyZWUoZ20xMnUzMjApOworCURSTV9FUlJPUigiJWRcbiIsIHJldCk7CisJ cmV0dXJuIHJldDsKK30KKwordm9pZCBnbTEydTMyMF9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYt PmRldl9wcml2YXRlOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CisJZ20xMnUzMjBfZmJk ZXZfY2xlYW51cChkZXYpOworCWdtMTJ1MzIwX21vZGVzZXRfY2xlYW51cChkZXYpOworCWdtMTJ1 MzIwX3VzYl9mcmVlKGdtMTJ1MzIwKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShnbTEydTMyMC0+ZmJf dXBkYXRlLndvcmtxKTsKKwlrZnJlZShnbTEydTMyMCk7Cit9CisKK2ludCBnbTEydTMyMF9zZXRf ZWNvbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnbTEydTMyMF9kZXZp Y2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiBnbTEydTMyMF9taXNj X3JlcXVlc3QoZ20xMnUzMjAsIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EsCisJCQkJICAgICBNSVND X1JFUV9HRVRfU0VUX0VDT19CLCAweDAxIC8qIHNldCAqLywKKwkJCQkgICAgIGVjb19tb2RlID8g MHgwMSA6IDB4MDAsIDB4MDAsIDB4MDEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2dtMTJ1MzIwL2dtMTJ1MzIwX21vZGVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9n bTEydTMyMF9tb2Rlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5iYjMxMjIyOTVkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvZ20xMnUzMjBfbW9kZXNldC5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDEyLTIwMTYgUmVkIEhhdCBJbmMuCisgKgorICogQmFzZWQgaW4gcGFydHMgb24gdGhl IHVkbCBjb2RlLiBCYXNlZCBpbiBwYXJ0cyBvbiB0aGUgZ20xMnUzMjAgZmIgZHJpdmVyOgorICog Q29weXJpZ2h0IChDKSAyMDEzIFZpYWNoZXNsYXYgTnVybWVraGFtaXRvdiA8c2xhdnJuQHlhbmRl eC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVu Yml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21s QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5p ZUBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIu IFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hp dmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSAiZ20xMnUzMjBf ZHJ2LmgiCisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NydGNfZHBtcyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsIGludCBtb2RlKQoreworfQorCitzdGF0aWMgaW50IGdtMTJ1MzIwX2NydGNfbW9kZV9z ZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKKwkJ CQkgIGludCB4LCBpbnQgeSwKKwkJCQkgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikK KworeworCXN0cnVjdCBnbTEydTMyMF9mcmFtZWJ1ZmZlciAqZmIgPSB0b19nbTEydTMyMF9mYihj cnRjLT5wcmltYXJ5LT5mYik7CisKKwlnbTEydTMyMF9mYl9tYXJrX2RpcnR5KGZiLCAwLCBHTTEy VTMyMF9VU0VSX1dJRFRILCAwLCBHTTEyVTMyMF9IRUlHSFQpOworCXJldHVybiAwOworfQorCisK K3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7Cit9CisKK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKKwlrZnJlZShjcnRjKTsKK30K Kworc3RhdGljIGludCBnbTEydTMyMF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2ZiLAorCQkJCSAgIHN0cnVj dCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAorCQkJCSAgIHVpbnQzMl90IHBhZ2Vf ZmxpcF9mbGFncywKKwkJCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkK K3sKKwlzdHJ1Y3QgZ20xMnUzMjBfZnJhbWVidWZmZXIgKmZiID0gdG9fZ20xMnUzMjBfZmIoZHJt X2ZiKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisKKwlnbTEydTMyMF9mYl9tYXJrX2RpcnR5KGZiLCAwLCBHTTEyVTMyMF9VU0VS X1dJRFRILCAwLCBHTTEyVTMyMF9IRUlHSFQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ ZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmIChldmVudCkKKwkJZHJtX2NydGNfc2VuZF92Ymxhbmtf ZXZlbnQoY3J0YywgZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRf bG9jaywgZmxhZ3MpOworCisJY3J0Yy0+cHJpbWFyeS0+ZmIgPSBkcm1fZmI7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKK3sKK30KKworc3RhdGljIHZvaWQgZ20xMnUzMjBfY3J0Y19jb21taXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCWdtMTJ1MzIwX2NydGNfZHBtcyhjcnRjLCBEUk1fTU9ERV9E UE1TX09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3Mg Z20xMnUzMjBfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gZ20xMnUzMjBfY3J0Y19kcG1zLAor CS5tb2RlX3NldCA9IGdtMTJ1MzIwX2NydGNfbW9kZV9zZXQsCisJLnByZXBhcmUgPSBnbTEydTMy MF9jcnRjX3ByZXBhcmUsCisJLmNvbW1pdCA9IGdtMTJ1MzIwX2NydGNfY29tbWl0LAorCS5kaXNh YmxlID0gZ20xMnUzMjBfY3J0Y19kaXNhYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19mdW5jcyBnbTEydTMyMF9jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnID0gZHJt X2NydGNfaGVscGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBnbTEydTMyMF9jcnRjX2Rlc3Ry b3ksCisJLnBhZ2VfZmxpcCA9IGdtMTJ1MzIwX2NydGNfcGFnZV9mbGlwLAorfTsKKworc3RhdGlj IGludCBnbTEydTMyMF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgZHJtX2NydGMgKmNydGM7CisKKwljcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9j cnRjKSArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGRybV9jb25uZWN0b3IgKiksIEdGUF9LRVJO RUwpOworCWlmIChjcnRjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2NydGNf aW5pdChkZXYsIGNydGMsICZnbTEydTMyMF9jcnRjX2Z1bmNzKTsKKwlkcm1fY3J0Y19oZWxwZXJf YWRkKGNydGMsICZnbTEydTMyMF9oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIGdtMTJ1MzIwX21vZGVfZnVu Y3MgPSB7CisJLmZiX2NyZWF0ZSA9IGdtMTJ1MzIwX2ZiX3VzZXJfZmJfY3JlYXRlLAorCS5vdXRw dXRfcG9sbF9jaGFuZ2VkID0gTlVMTCwKK307CisKK2ludCBnbTEydTMyMF9tb2Rlc2V0X2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7 CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOworCisJZGV2LT5tb2RlX2NvbmZpZy5taW5f d2lkdGggPSBHTTEyVTMyMF9VU0VSX1dJRFRIOworCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdo dCA9IEdNMTJVMzIwX0hFSUdIVDsKKworCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gMjA0 ODsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4OworCisJZGV2LT5tb2RlX2Nv bmZpZy5wcmVmZXJfc2hhZG93ID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0 aCA9IDI0OworCisJZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZnbTEydTMyMF9tb2RlX2Z1bmNz OworCisJZ20xMnUzMjBfY3J0Y19pbml0KGRldik7CisKKwllbmNvZGVyID0gZ20xMnUzMjBfZW5j b2Rlcl9pbml0KGRldik7CisKKwlnbTEydTMyMF9jb25uZWN0b3JfaW5pdChkZXYsIGVuY29kZXIp OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ20xMnUzMjBfbW9kZXNldF9jbGVhbnVwKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKK30K LS0gCjIuMTMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==