From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Subject: [PATCH 2/2] drm: Add new driver for MXSFB controller Date: Fri, 26 Aug 2016 16:27:42 +0200 Message-ID: <20160826142742.7236-2-marex@denx.de> References: <20160826142742.7236-1-marex@denx.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-out.m-online.net (mail-out.m-online.net [212.18.0.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 927D26EAD5 for ; Fri, 26 Aug 2016 14:38:05 +0000 (UTC) In-Reply-To: <20160826142742.7236-1-marex@denx.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , Fabio Estevam , Shawn Guo List-Id: dri-devel@lists.freedesktop.org QWRkIG5ldyBkcml2ZXIgZm9yIHRoZSBNWFNGQiBjb250cm9sbGVyIGZvdW5kIGluIGkuTVgyMy8y OC82U1ggLgpUaGUgTVhTRkIgY29udHJvbGxlciBpcyBhIHNpbXBsZSBmcmFtZWJ1ZmZlciBjb250 cm9sbGVyIHdpdGggb25lCnBhcmFsbGVsIExDRCBvdXRwdXQuIFVubGlrZSB0aGUgTVhTRkIgZmJk ZXYgZHJpdmVyIHRoYXQgaXMgdXNlZApvbiB0aGVzZSBzeXN0ZW1zIG5vdywgdGhpcyBkcml2ZXIg dXNlcyB0aGUgRFJNL0tNUyBmcmFtZXdvcmsuCgpTaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8 bWFyZXhAZGVueC5kZT4KQ2M6IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPgpD YzogRmFiaW8gRXN0ZXZhbSA8ZmFiaW8uZXN0ZXZhbUBueHAuY29tPgpDYzogU2hhd24gR3VvIDxz aGF3bmd1b0BrZXJuZWwub3JnPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICB8ICAgMiArCiBk cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9teHNmYi9LY29uZmlnICAgICAgfCAgMTggKysKIGRyaXZlcnMvZ3B1L2RybS9teHNmYi9NYWtl ZmlsZSAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2NydGMuYyB8IDM5 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v bXhzZmIvbXhzZmJfZHJ2LmMgIHwgMzI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5oICB8ICA1OCArKysrKysKIGRyaXZlcnMv Z3B1L2RybS9teHNmYi9teHNmYl9vdXQuYyAgfCAyNjQgKysrKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX3JlZ3MuaCB8IDExMiArKysrKysrKysrKwog MTAgZmlsZXMgY2hhbmdlZCwgMTE4MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL214c2ZiL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXhzZmIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXhzZmIvbXhzZmJfY3J0Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L214c2ZiL214c2ZiX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214 c2ZiL214c2ZiX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214c2Zi L214c2ZiX291dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL214c2ZiL214 c2ZiX3JlZ3MuaAoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXgg OGMyMDMyMy4uMzliMTZiNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5F UlMKQEAgLTc3ODEsNiArNzc4MSwxMiBAQCBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWtydWZr eS90dW5lcnMuZ2l0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL21lZGlhL3R1bmVycy9teGw1 MDA3dC4qCiAKK01YU0ZCIERSTSBEUklWRVIKK006CU1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRl PgorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2dwdS9kcm0vbXhzZmIvCitGOglEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9teHNmYi1kcm0udHh0CisKIE1ZUklDT00g TVlSSS0xMEcgMTBHYkUgRFJJVkVSIChNWVJJMTBHRSkKIE06CUh5b25nLVlvdWIgS2ltIDxoeWtp bUBteXJpLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZmMzNTcz MS4uNWIxZTdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI5MCwzICsyOTAsNSBAQCBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS9hcmMvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9L Y29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgorCitz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9teHNmYi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGJlNDNh ZmIuLmNiYjYzOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTgyLDMgKzgyLDQgQEAgb2JqLSQoQ09ORklHX0RS TV9GU0xfRENVKSArPSBmc2wtZGN1Lwogb2JqLSQoQ09ORklHX0RSTV9FVE5BVklWKSArPSBldG5h dml2Lwogb2JqLSQoQ09ORklHX0RSTV9BUkNQR1UpKz0gYXJjLwogb2JqLXkJCQkrPSBoaXNpbGlj b24vCitvYmotJChDT05GSUdfRFJNX01YU0ZCKQkrPSBteHNmYi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9teHNmYi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL0tjb25maWcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2Y2I1OQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2Nv bmZpZyBEUk1fTVhTCisJYm9vbAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBzZWxl Y3QgZHJpdmVycyBmb3IgTVhTIEZCIGRldmljZXMKKworY29uZmlnIERSTV9NWFNGQgorCXRyaXN0 YXRlICJpLk1YMjMvaS5NWDI4L2kuTVg2U1ggTVhTRkIgTENEIGNvbnRyb2xsZXIiCisJZGVwZW5k cyBvbiBEUk0gJiYgT0YKKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlzZWxlY3QgRFJNX01YUwor CXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0ZCX0hFTFBFUgorCXNlbGVj dCBEUk1fS01TX0NNQV9IRUxQRVIKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91 IGhhdmUgYW4gaS5NWDIzL2kuTVgyOC9pLk1YNlNYIE1YU0ZCCisJICBMQ0QgY29udHJvbGxlci4K KworCSAgSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG14c2ZiLgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL214c2ZiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1 N2YzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvTWFrZWZpbGUK QEAgLTAsMCArMSwyIEBACitteHNmYi15IDo9IG14c2ZiX2Rydi5vIG14c2ZiX2NydGMubyBteHNm Yl9vdXQubworb2JqLSQoQ09ORklHX0RSTV9NWFNGQikJKz0gbXhzZmIubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9teHNm Yi9teHNmYl9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyZTJh MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9jcnRjLmMK QEAgLTAsMCArMSwzOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWFyZWsgVmFzdXQg PG1hcmV4QGRlbnguZGU+CisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvdmlk ZW8vZmJkZXYvbXhzZmIuYyA6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVlcmdlbiBCZWlzZXJ0 LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWlj b25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw OCBFbWJlZGRlZCBBbGxleSBTb2x1dGlvbnMsIEluYyBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc2lt cGxlZmIuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2luY2x1ZGUgIm14c2Zi X2Rydi5oIgorI2luY2x1ZGUgIm14c2ZiX3JlZ3MuaCIKKworc3RhdGljIHZvaWQgbXhzZmJfZW5h YmxlX2F4aV9jbGsoc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYikKK3sKKwlpZiAobXhz ZmItPmNsa19heGkpCisJCWNsa19wcmVwYXJlX2VuYWJsZShteHNmYi0+Y2xrX2F4aSk7Cit9CisK K3N0YXRpYyB2b2lkIG14c2ZiX2Rpc2FibGVfYXhpX2NsayhzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZh dGUgKm14c2ZiKQoreworCWlmIChteHNmYi0+Y2xrX2F4aSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKG14c2ZiLT5jbGtfYXhpKTsKK30KKworc3RhdGljIHUzMiBzZXRfaHN5bmNfcHVsc2Vfd2lk dGgoc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYiwgdTMyIHZhbCkKK3sKKwlyZXR1cm4g KHZhbCAmIG14c2ZiLT5kZXZkYXRhLT5oc193ZHRoX21hc2spIDw8CisJCW14c2ZiLT5kZXZkYXRh LT5oc193ZHRoX3NoaWZ0OworfQorCitzdGF0aWMgc3RydWN0IHNpbXBsZWZiX2Zvcm1hdCBzdXBw b3J0ZWRfZm9ybWF0c1tdID0gU0lNUExFRkJfRk9STUFUUzsKKworLyoKKyAqIFNldHVwIHRoZSBN WFNGQiByZWdpc3RlcnMgZm9yIGRlY29kaW5nIHRoZSBwaXhlbHMgb3V0IG9mIHRoZSBmcmFtZWJ1 ZmZlcgorICovCitzdGF0aWMgaW50IG14c2ZiX3NldF9waXhlbF9mbXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBjcnRjLT5kZXY7CisJc3RydWN0 IG14c2ZiX2RybV9wcml2YXRlICpteHNmYiA9IGNydGNfdG9fbXhzZmJfcHJpdihjcnRjKTsKKwlz dHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0ICpmb3JtYXQgPSBOVUxMOworCXUzMiBwaXhlbF9mb3JtYXQs IGN0cmw7CisJaW50IGk7CisKKwlwaXhlbF9mb3JtYXQgPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ ZmItPnBpeGVsX2Zvcm1hdDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRl ZF9mb3JtYXRzKTsgaSsrKSB7CisJCWlmIChzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2MgPT0g cGl4ZWxfZm9ybWF0KQorCQkJZm9ybWF0ID0gJnN1cHBvcnRlZF9mb3JtYXRzW2ldOworCX0KKwor CWlmIChXQVJOX09OKCFmb3JtYXQpKQorCQlyZXR1cm4gMDsKKworCWN0cmwgPSBDVFJMX0JZUEFT U19DT1VOVCB8IENUUkxfTUFTVEVSOworCisJLyoKKwkgKiBXQVJOSU5HOiBUaGUgYnVzIHdpZHRo LCBDVFJMX1NFVF9CVVNfV0lEVEgoKSwgaXMgY29uZmlndXJlZCB0bworCSAqIG1hdGNoIHRoZSBz ZWxlY3RlZCBtb2RlIGhlcmUuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hbAorCSAqIE1Y U0ZCIGRyaXZlciwgd2hpY2ggaGFkIHRoZSBvcHRpb24gdG8gY29uZmlndXJlIHRoZSBidXMgd2lk dGgKKwkgKiB0byBhcmJpdHJhcnkgdmFsdWUuIFRoaXMgbGltaXRhdGlvbiBzaG91bGQgbm90IHBv c2UgYW4gaXNzdWUuCisJICovCisKKwlzd2l0Y2ggKGZvcm1hdC0+Zm91cmNjKSB7CisJY2FzZSBE Uk1fRk9STUFUX1JHQjU2NToKKwkJZGV2X2RiZyhkcm0tPmRldiwgIlNldHRpbmcgdXAgUkdCNTY1 IG1vZGVcbiIpOworCQljdHJsIHw9IENUUkxfU0VUX0JVU19XSURUSChTVE1MQ0RJRl8xNkJJVCk7 CisJCWN0cmwgfD0gQ1RSTF9TRVRfV09SRF9MRU5HVEgoMCk7CisJCXdyaXRlbChDVFJMMV9TRVRf QllURV9QQUNLQUdJTkcoMHhmKSwgbXhzZmItPmJhc2UgKyBMQ0RDX0NUUkwxKTsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlkZXZfZGJnKGRybS0+ZGV2LCAiU2V0dGlu ZyB1cCBYUkdCODg4OCBtb2RlXG4iKTsKKwkJY3RybCB8PSBDVFJMX1NFVF9CVVNfV0lEVEgoU1RN TENESUZfMjRCSVQpOworCQljdHJsIHw9IENUUkxfU0VUX1dPUkRfTEVOR1RIKDMpOworCQkvKiBE byBub3QgdXNlIHBhY2tlZCBwaXhlbHMgPSBvbmUgcGl4ZWwgcGVyIHdvcmQgaW5zdGVhZCAqLwor CQl3cml0ZWwoQ1RSTDFfU0VUX0JZVEVfUEFDS0FHSU5HKDB4NyksIG14c2ZiLT5iYXNlICsgTENE Q19DVFJMMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHJtLT5kZXYsICJVbmhh bmRsZWQgY29sb3IgZm9ybWF0ICVzXG4iLAorCQkJZm9ybWF0LT5uYW1lKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJd3JpdGVsKGN0cmwsIG14c2ZiLT5iYXNlICsgTENEQ19DVFJMKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXhzZmJfZW5hYmxlX2NvbnRyb2xsZXIoc3RydWN0 IG14c2ZiX2RybV9wcml2YXRlICpteHNmYikKK3sKKwl1MzIgcmVnOworCisJaWYgKG14c2ZiLT5j bGtfZGlzcF9heGkpCisJCWNsa19wcmVwYXJlX2VuYWJsZShteHNmYi0+Y2xrX2Rpc3BfYXhpKTsK KwljbGtfcHJlcGFyZV9lbmFibGUobXhzZmItPmNsayk7CisJbXhzZmJfZW5hYmxlX2F4aV9jbGso bXhzZmIpOworCisJLyogSWYgaXQgd2FzIGRpc2FibGVkLCByZS1lbmFibGUgdGhlIG1vZGUgYWdh aW4gKi8KKwl3cml0ZWwoQ1RSTF9ET1RDTEtfTU9ERSwgbXhzZmItPmJhc2UgKyBMQ0RDX0NUUkwg KyBSRUdfU0VUKTsKKworCS8qIEVuYWJsZSB0aGUgU1lOQyBzaWduYWxzIGZpcnN0LCB0aGVuIHRo ZSBETUEgZW5naW5lICovCisJcmVnID0gcmVhZGwobXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDQp OworCXJlZyB8PSBWRENUUkw0X1NZTkNfU0lHTkFMU19PTjsKKwl3cml0ZWwocmVnLCBteHNmYi0+ YmFzZSArIExDRENfVkRDVFJMNCk7CisKKwl3cml0ZWwoQ1RSTF9SVU4sIG14c2ZiLT5iYXNlICsg TENEQ19DVFJMICsgUkVHX1NFVCk7CisKKwlteHNmYi0+ZW5hYmxlZCA9IDE7Cit9CisKK3N0YXRp YyB2b2lkIG14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUg Km14c2ZiKQoreworCXUzMiByZWc7CisKKwkvKgorCSAqIEV2ZW4gaWYgd2UgZGlzYWJsZSB0aGUg Y29udHJvbGxlciBoZXJlLCBpdCB3aWxsIHN0aWxsIGNvbnRpbnVlCisJICogdW50aWwgaXRzIEZJ Rk9zIGFyZSBydW5uaW5nIG91dCBvZiBkYXRhCisJICovCisJd3JpdGVsKENUUkxfRE9UQ0xLX01P REUsIG14c2ZiLT5iYXNlICsgTENEQ19DVFJMICsgUkVHX0NMUik7CisKKwlyZWFkbF9wb2xsX3Rp bWVvdXQobXhzZmItPmJhc2UgKyBMQ0RDX0NUUkwsIHJlZywgIShyZWcgJiBDVFJMX1JVTiksCisJ CQkgICAwLCAxMDAwKTsKKworCXJlZyA9IHJlYWRsKG14c2ZiLT5iYXNlICsgTENEQ19WRENUUkw0 KTsKKwlyZWcgJj0gflZEQ1RSTDRfU1lOQ19TSUdOQUxTX09OOworCXdyaXRlbChyZWcsIG14c2Zi LT5iYXNlICsgTENEQ19WRENUUkw0KTsKKworCW14c2ZiX2Rpc2FibGVfYXhpX2NsayhteHNmYik7 CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobXhzZmItPmNsayk7CisJaWYgKG14c2ZiLT5jbGtf ZGlzcF9heGkpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShteHNmYi0+Y2xrX2Rpc3BfYXhpKTsK KworCW14c2ZiLT5lbmFibGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgbXhzZmJfY3J0Y19tb2Rl X3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXhzZmJfZHJtX3By aXZhdGUgKm14c2ZiID0gY3J0Y190b19teHNmYl9wcml2KGNydGMpOworCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCWNvbnN0IHUzMiBi dXNfZmxhZ3MgPSBteHNmYi0+b3V0cHV0LmNvbm5lY3Rvci5kaXNwbGF5X2luZm8uYnVzX2ZsYWdz OworCXUzMiB2ZGN0cmwwLCB2c3luY19wdWxzZV9sZW4sIGhzeW5jX3B1bHNlX2xlbjsKKwlib29s IHJlZW5hYmxlID0gZmFsc2U7CisJaW50IGVycjsKKworCS8qCisJICogSXQgc2VlbXMsIHlvdSBj YW4ndCByZS1wcm9ncmFtIHRoZSBjb250cm9sbGVyIGlmIGl0IGlzIHN0aWxsCisJICogcnVubmlu Zy4gVGhpcyBtYXkgbGVhZCB0byBzaGlmdGVkIHBpY3R1cmVzIChGSUZPIGlzc3VlPyksIHNvCisJ ICogZmlyc3Qgc3RvcCB0aGUgY29udHJvbGxlciBhbmQgZHJhaW4gaXRzIEZJRk9zLgorCSAqLwor CWlmIChteHNmYi0+ZW5hYmxlZCkgeworCQlyZWVuYWJsZSA9IHRydWU7CisJCW14c2ZiX2Rpc2Fi bGVfY29udHJvbGxlcihteHNmYik7CisJfQorCisJbXhzZmJfZW5hYmxlX2F4aV9jbGsobXhzZmIp OworCisJLyogQ2xlYXIgdGhlIEZJRk9zICovCisJd3JpdGVsKENUUkwxX0ZJRk9fQ0xFQVIsIG14 c2ZiLT5iYXNlICsgTENEQ19DVFJMMSArIFJFR19TRVQpOworCisJZXJyID0gbXhzZmJfc2V0X3Bp eGVsX2ZtdChjcnRjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwljbGtfc2V0X3JhdGUobXhz ZmItPmNsaywgbS0+Y3J0Y19jbG9jayAqIDEwMDApOworCisJd3JpdGVsKFRSQU5TRkVSX0NPVU5U X1NFVF9WQ09VTlQobS0+Y3J0Y192ZGlzcGxheSkgfAorCSAgICAgICBUUkFOU0ZFUl9DT1VOVF9T RVRfSENPVU5UKG0tPmNydGNfaGRpc3BsYXkpLAorCSAgICAgICBteHNmYi0+YmFzZSArIG14c2Zi LT5kZXZkYXRhLT50cmFuc2Zlcl9jb3VudCk7CisKKwl2c3luY19wdWxzZV9sZW4gPSBtLT5jcnRj X3ZzeW5jX2VuZCAtIG0tPmNydGNfdnN5bmNfc3RhcnQ7CisKKwl2ZGN0cmwwID0gVkRDVFJMMF9F TkFCTEVfUFJFU0VOVCB8CS8qIEFsd2F5cyBpbiBET1RDTE9DSyBtb2RlICovCisJCSAgVkRDVFJM MF9WU1lOQ19QRVJJT0RfVU5JVCB8CisJCSAgVkRDVFJMMF9WU1lOQ19QVUxTRV9XSURUSF9VTklU IHwKKwkJICBWRENUUkwwX1NFVF9WU1lOQ19QVUxTRV9XSURUSCh2c3luY19wdWxzZV9sZW4pOwor CWlmIChtLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQl2ZGN0cmwwIHw9IFZEQ1RS TDBfSFNZTkNfQUNUX0hJR0g7CisJaWYgKG0tPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMp CisJCXZkY3RybDAgfD0gVkRDVFJMMF9WU1lOQ19BQ1RfSElHSDsKKwlpZiAoYnVzX2ZsYWdzICYg RFJNX0JVU19GTEFHX0RFX0hJR0gpCisJCXZkY3RybDAgfD0gVkRDVFJMMF9FTkFCTEVfQUNUX0hJ R0g7CisJaWYgKGJ1c19mbGFncyAmIERSTV9CVVNfRkxBR19QSVhEQVRBX05FR0VER0UpCisJCXZk Y3RybDAgfD0gVkRDVFJMMF9ET1RDTEtfQUNUX0ZBTExJTkc7CisKKwl3cml0ZWwodmRjdHJsMCwg bXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDApOworCisJLyogRnJhbWUgbGVuZ3RoIGluIGxpbmVz LiAqLworCXdyaXRlbChtLT5jcnRjX3Z0b3RhbCwgbXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDEp OworCisJLyogTGluZSBsZW5ndGggaW4gdW5pdHMgb2YgY2xvY2tzIG9yIHBpeGVscy4gKi8KKwlo c3luY19wdWxzZV9sZW4gPSBtLT5jcnRjX2hzeW5jX2VuZCAtIG0tPmNydGNfaHN5bmNfc3RhcnQ7 CisJd3JpdGVsKHNldF9oc3luY19wdWxzZV93aWR0aChteHNmYiwgaHN5bmNfcHVsc2VfbGVuKSB8 CisJICAgICAgIFZEQ1RSTDJfU0VUX0hTWU5DX1BFUklPRChtLT5jcnRjX2h0b3RhbCksCisJICAg ICAgIG14c2ZiLT5iYXNlICsgTENEQ19WRENUUkwyKTsKKworCXdyaXRlbChTRVRfSE9SX1dBSVRf Q05UKG0tPmNydGNfaGJsYW5rX2VuZCAtIG0tPmNydGNfaHN5bmNfZW5kKSB8CisJICAgICAgIFNF VF9WRVJUX1dBSVRfQ05UKG0tPmNydGNfdmJsYW5rX2VuZCAtIG0tPmNydGNfdnN5bmNfZW5kKSwK KwkgICAgICAgbXhzZmItPmJhc2UgKyBMQ0RDX1ZEQ1RSTDMpOworCisJd3JpdGVsKFNFVF9ET1RD TEtfSF9WQUxJRF9EQVRBX0NOVChtLT5oZGlzcGxheSksCisJICAgICAgIG14c2ZiLT5iYXNlICsg TENEQ19WRENUUkw0KTsKKworCW14c2ZiX2Rpc2FibGVfYXhpX2NsayhteHNmYik7CisKKwlpZiAo cmVlbmFibGUpCisJCW14c2ZiX2VuYWJsZV9jb250cm9sbGVyKG14c2ZiKTsKK30KKworc3RhdGlj IHZvaWQgbXhzZmJfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVj dCBteHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIgPSBjcnRjX3RvX214c2ZiX3ByaXYoY3J0Yyk7CisK KwlteHNmYl9jcnRjX21vZGVfc2V0X25vZmIoY3J0Yyk7CisJbXhzZmJfZW5hYmxlX2NvbnRyb2xs ZXIobXhzZmIpOworfQorCitzdGF0aWMgdm9pZCBteHNmYl9jcnRjX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBteHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIgPSBjcnRj X3RvX214c2ZiX3ByaXYoY3J0Yyk7CisKKwlpZiAoIWNydGMtPnN0YXRlLT5hY3RpdmUpCisJCXJl dHVybjsKKworCW14c2ZiX2Rpc2FibGVfY29udHJvbGxlcihteHNmYik7Cit9CisKK3N0YXRpYyBp bnQgbXhzZmJfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG14c2ZiX2RybV9wcml2 YXRlICpteHNmYiA9IGNydGNfdG9fbXhzZmJfcHJpdihjcnRjKTsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwlsb25nIHJhdGUsIGNsa19y YXRlID0gbW9kZS0+Y2xvY2sgKiAxMDAwOworCisJaWYgKCFtb2RlLT5jbG9jaykKKwkJcmV0dXJu IDA7CisKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUobXhzZmItPmNsaywgY2xrX3JhdGUpOworCS8q IGNsb2NrIHJlcXVpcmVkIGJ5IG1vZGUgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZSAqLworCWlm IChyYXRlICE9IGNsa19yYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBteHNmYl9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7CisKKwlp ZiAoZXZlbnQpIHsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKworCQlzcGluX2xvY2tf aXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCQlpZiAoZHJtX2NydGNfdmJsYW5rX2dldChj cnRjKSA9PSAwKQorCQkJZHJtX2NydGNfYXJtX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJ CWVsc2UKKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsKKwkJc3Bp bl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCX0KK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbXhzZmJfY3J0Y19oZWxwZXJfZnVuY3Mg PSB7CisJLm1vZGVfc2V0CT0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0LAorCS5tb2RlX3NldF9i YXNlCT0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0X2Jhc2UsCisJLm1vZGVfc2V0X25vZmIJPSBt eHNmYl9jcnRjX21vZGVfc2V0X25vZmIsCisJLmVuYWJsZQkJPSBteHNmYl9jcnRjX2VuYWJsZSwK KwkuZGlzYWJsZQk9IG14c2ZiX2NydGNfZGlzYWJsZSwKKwkucHJlcGFyZQk9IG14c2ZiX2NydGNf ZGlzYWJsZSwKKwkuY29tbWl0CQk9IG14c2ZiX2NydGNfZW5hYmxlLAorCS5hdG9taWNfY2hlY2sJ PSBteHNmYl9jcnRjX2F0b21pY19jaGVjaywKKwkuYXRvbWljX2JlZ2luCT0gbXhzZmJfY3J0Y19h dG9taWNfYmVnaW4sCit9OworCitzdGF0aWMgdm9pZCBteHNmYl9wbGFuZV9hdG9taWNfdXBkYXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBteHNmYl9kcm1fcHJpdmF0ZSAqbXhzZmIgPSBwbGFuZS0+ ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07CisKKwlp ZiAoIXBsYW5lLT5zdGF0ZS0+Y3J0YyB8fCAhcGxhbmUtPnN0YXRlLT5mYikKKwkJcmV0dXJuOwor CisJZ2VtID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihwbGFuZS0+c3RhdGUtPmZiLCAwKTsKKwor CW14c2ZiX2VuYWJsZV9heGlfY2xrKG14c2ZiKTsKKwl3cml0ZWwoZ2VtLT5wYWRkciwgbXhzZmIt PmJhc2UgKyBteHNmYi0+ZGV2ZGF0YS0+bmV4dF9idWYpOworCW14c2ZiX2Rpc2FibGVfYXhpX2Ns ayhteHNmYik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5j cyBteHNmYl9wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY191cGRhdGUJPSBteHNmYl9w bGFuZV9hdG9taWNfdXBkYXRlLAorfTsKKworc3RhdGljIHZvaWQgbXhzZmJfcGxhbmVfZGVzdHJv eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlkcm1fcGxhbmVfaGVscGVyX2Rpc2FibGUo cGxhbmUpOworCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfZnVuY3MgbXhzZmJfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFu ZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUJCT0g ZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveQkJPSBteHNmYl9wbGFu ZV9kZXN0cm95LAorCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJ LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNh dGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfcGxh bmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICpteHNmYl9w bGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG14c2ZiX2RybV9w cml2YXRlICpteHNmYiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wbGFuZSAqcGxh bmUgPSBOVUxMOworCXUzMiBmb3JtYXRzW0FSUkFZX1NJWkUoc3VwcG9ydGVkX2Zvcm1hdHMpXSwg aTsKKwlpbnQgcmV0OworCisJcGxhbmUgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigq cGxhbmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBsYW5lKQorCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKTsg aSsrKQorCQlmb3JtYXRzW2ldID0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0uZm91cmNjOworCisJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIDB4ZmYsICZteHNmYl9wbGFu ZV9mdW5jcywKKwkJCQkgICAgICAgZm9ybWF0cywgQVJSQVlfU0laRShmb3JtYXRzKSwKKwkJCQkg ICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZt X2tmcmVlKGRybS0+ZGV2LCBwbGFuZSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJ ZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZteHNmYl9wbGFuZV9oZWxwZXJfZnVuY3MpOwor CW14c2ZiLT5wbGFuZSA9IHBsYW5lOworCisJcmV0dXJuIHBsYW5lOworfQorCitzdGF0aWMgdm9p ZCBteHNmYl9jcnRjX2NsZWFudXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCW14c2ZiX2Ny dGNfZGlzYWJsZShjcnRjKTsKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG14c2ZiX2NydGNfZnVuY3MgPSB7CisJLmRlc3Ry b3kJCT0gbXhzZmJfY3J0Y19jbGVhbnVwLAorCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVs cGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2Zs aXAsCisJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlLAorfTsKKworaW50IG14c2ZiX3NldHVwX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKK3sKKwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5OworCWludCByZXQ7CisKKwlwcmltYXJ5ID0g bXhzZmJfcGxhbmVfaW5pdChkcm0pOworCWlmIChJU19FUlIocHJpbWFyeSkpCisJCXJldHVybiBQ VFJfRVJSKHByaW1hcnkpOworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0s ICZteHNmYi0+Y3J0YywgcHJpbWFyeSwgTlVMTCwKKwkJCQkJJm14c2ZiX2NydGNfZnVuY3MsIE5V TEwpOworCWlmIChyZXQpIHsKKwkJbXhzZmJfcGxhbmVfZGVzdHJveShwcmltYXJ5KTsKKwkJZGV2 bV9rZnJlZShkcm0tPmRldiwgcHJpbWFyeSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Ny dGNfaGVscGVyX2FkZCgmbXhzZmItPmNydGMsICZteHNmYl9jcnRjX2hlbHBlcl9mdW5jcyk7CisJ cmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfZHJ2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbXhzZmJfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYmJjODIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9teHNmYi9teHNmYl9kcnYuYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxNiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KKyAqCisgKiBUaGlzIGNvZGUg aXMgYmFzZWQgb24gZHJpdmVycy92aWRlby9mYmRldi9teHNmYi5jIDoKKyAqIENvcHlyaWdodCAo QykgMjAxMCBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIw MDgtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgor CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVkZSAibXhzZmJfZHJ2LmgiCisjaW5jbHVk ZSAibXhzZmJfcmVncy5oIgorCitlbnVtIG14c2ZiX2RldnR5cGUgeworCU1YU0ZCX1YzLAorCU1Y U0ZCX1Y0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHNmYl9kZXZkYXRhIG14c2ZiX2Rl dmRhdGFbXSA9IHsKKwlbTVhTRkJfVjNdID0geworCQkudHJhbnNmZXJfY291bnQJPSBMQ0RDX1Yz X1RSQU5TRkVSX0NPVU5ULAorCQkuY3VyX2J1Zgk9IExDRENfVjNfQ1VSX0JVRiwKKwkJLm5leHRf YnVmCT0gTENEQ19WM19ORVhUX0JVRiwKKwkJLmRlYnVnMAkJPSBMQ0RDX1YzX0RFQlVHMCwKKwkJ LmhzX3dkdGhfbWFzawk9IDB4ZmYsCisJCS5oc193ZHRoX3NoaWZ0CT0gMjQsCisJCS5pcHZlcnNp b24JPSAzLAorCX0sCisJW01YU0ZCX1Y0XSA9IHsKKwkJLnRyYW5zZmVyX2NvdW50CT0gTENEQ19W NF9UUkFOU0ZFUl9DT1VOVCwKKwkJLmN1cl9idWYJPSBMQ0RDX1Y0X0NVUl9CVUYsCisJCS5uZXh0 X2J1Zgk9IExDRENfVjRfTkVYVF9CVUYsCisJCS5kZWJ1ZzAJCT0gTENEQ19WNF9ERUJVRzAsCisJ CS5oc193ZHRoX21hc2sJPSAweDNmZmYsCisJCS5oc193ZHRoX3NoaWZ0CT0gMTgsCisJCS5pcHZl cnNpb24JPSA0LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBteHNmYl9mYl9vdXRwdXRfcG9sbF9j aGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG14c2ZiX2RybV9wcml2 YXRlICpteHNmYiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAobXhzZmItPmZiZGV2KSB7CisJ CWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudChteHNmYi0+ZmJkZXYpOworCX0gZWxzZSB7CisJ CW14c2ZiLT5mYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdChkcm0sIDMyLAorCQkJCQlkcm0tPm1v ZGVfY29uZmlnLm51bV9jcnRjLAorCQkJCQlkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3Ip OworCQlpZiAoSVNfRVJSKG14c2ZiLT5mYmRldikpCisJCQlteHNmYi0+ZmJkZXYgPSBOVUxMOwor CX0KK30KKworc3RhdGljIGludCBteHNmYl9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLCBib29sIG5v bmJsb2NrKQoreworCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoZGV2LCBzdGF0ZSwg ZmFsc2UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBt eHNmYl9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlCQk9IGRybV9mYl9jbWFfY3Jl YXRlLAorCS5vdXRwdXRfcG9sbF9jaGFuZ2VkCT0gbXhzZmJfZmJfb3V0cHV0X3BvbGxfY2hhbmdl ZCwKKwkuYXRvbWljX2NoZWNrCQk9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNf Y29tbWl0CQk9IG14c2ZiX2F0b21pY19jb21taXQsCit9OworCitzdGF0aWMgaW50IG14c2ZiX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ZGV2KTsK KwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiOworCXN0cnVjdCByZXNvdXJjZSAqcmVz OworCWludCByZXQ7CisKKwlteHNmYiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yo Km14c2ZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFteHNmYikKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlkcm0tPmRldl9wcml2YXRlID0gbXhzZmI7CisJbXhzZmItPmRldmRhdGEgPSAmbXhzZmJfZGV2 ZGF0YVtwZGV2LT5pZF9lbnRyeS0+ZHJpdmVyX2RhdGFdOworCisJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlteHNmYi0+YmFzZSA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZShkcm0tPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG14c2ZiLT5iYXNl KSkKKwkJcmV0dXJuIFBUUl9FUlIobXhzZmItPmJhc2UpOworCisJbXhzZmItPmNsayA9IGRldm1f Y2xrX2dldChkcm0tPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihteHNmYi0+Y2xrKSkKKwkJcmV0 dXJuIFBUUl9FUlIobXhzZmItPmNsayk7CisKKwlteHNmYi0+Y2xrX2F4aSA9IGRldm1fY2xrX2dl dChkcm0tPmRldiwgImF4aSIpOworCWlmIChJU19FUlIobXhzZmItPmNsa19heGkpKQorCQlteHNm Yi0+Y2xrX2F4aSA9IE5VTEw7CisKKwlteHNmYi0+Y2xrX2Rpc3BfYXhpID0gZGV2bV9jbGtfZ2V0 KGRybS0+ZGV2LCAiZGlzcF9heGkiKTsKKwlpZiAoSVNfRVJSKG14c2ZiLT5jbGtfZGlzcF9heGkp KQorCQlteHNmYi0+Y2xrX2Rpc3BfYXhpID0gTlVMTDsKKworCXJldCA9IGRtYV9zZXRfbWFza19h bmRfY29oZXJlbnQoZHJtLT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlwbV9ydW50aW1lX2VuYWJsZShkcm0tPmRldik7CisKKwlyZXQgPSBkcm1f dmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlpZiAocmV0IDwg MCkgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4i KTsKKwkJZ290byBlcnJfdmJsYW5rOworCX0KKworCS8qIE1vZGVzZXQgaW5pdCAqLworCWRybV9t b2RlX2NvbmZpZ19pbml0KGRybSk7CisKKwlyZXQgPSBteHNmYl9jcmVhdGVfb3V0cHV0cyhkcm0p OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRl IG91dHB1dHNcbiIpOworCQlnb3RvIGVycl92Ymxhbms7CisJfQorCisJcmV0ID0gbXhzZmJfc2V0 dXBfY3J0Yyhkcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJGYWls ZWQgdG8gY3JlYXRlIGNydGNcbiIpOworCQlnb3RvIGVycl92Ymxhbms7CisJfQorCisJZHJtLT5t b2RlX2NvbmZpZy5taW5fd2lkdGgJPSBNWFNGQl9NSU5fWFJFUzsKKwlkcm0tPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQJPSBNWFNGQl9NSU5fWVJFUzsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0 aAk9IE1YU0ZCX01BWF9YUkVTOworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodAk9IE1YU0ZC X01BWF9ZUkVTOworCWRybS0+bW9kZV9jb25maWcuZnVuY3MJCT0gJm14c2ZiX21vZGVfY29uZmln X2Z1bmNzOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBkcm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisK Kwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHJtKTsKKworCXJldHVybiAwOworCitlcnJfdmJs YW5rOgorCXBtX3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCBteHNmYl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlz dHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWlm IChteHNmYi0+ZmJkZXYpCisJCWRybV9mYmRldl9jbWFfZmluaShteHNmYi0+ZmJkZXYpOworCisJ ZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAo ZHJtKTsKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKworCWRybS0+ZGV2X3ByaXZhdGUgPSBO VUxMOworCisJcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQg bXhzZmJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG14c2Zi X2RybV9wcml2YXRlICpteHNmYiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZfY21h X3Jlc3RvcmVfbW9kZShteHNmYi0+ZmJkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyBmb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJ PSBkcm1fb3BlbiwKKwkucmVsZWFzZQk9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bAk9 IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGRybV9j b21wYXRfaW9jdGwsCisjZW5kaWYKKwkucG9sbAkJPSBkcm1fcG9sbCwKKwkucmVhZAkJPSBkcm1f cmVhZCwKKwkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAorCS5tbWFwCQk9IGRybV9nZW1fY21hX21t YXAsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXhzZmJfZHJpdmVyID0geworCS5k cml2ZXJfZmVhdHVyZXMJPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfAorCQkJCSAgRFJJ VkVSX1BSSU1FIHwgRFJJVkVSX0FUT01JQywKKwkubGFzdGNsb3NlCQk9IG14c2ZiX2xhc3RjbG9z ZSwKKwkuZ2VtX2ZyZWVfb2JqZWN0CT0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCisJLmdlbV92 bV9vcHMJCT0gJmRybV9nZW1fY21hX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUJCT0gZHJtX2dlbV9j bWFfZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldAk9IGRybV9nZW1fY21hX2R1bWJfbWFw X29mZnNldCwKKwkuZHVtYl9kZXN0cm95CQk9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5wcmlt ZV9oYW5kbGVfdG9fZmQJPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRf dG9faGFuZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBv cnQJPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydAk9IGRybV9nZW1f cHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJp bWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9j bWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcAkJPSBkcm1fZ2VtX2Nt YV9wcmltZV92bWFwLAorCS5nZW1fcHJpbWVfdnVubWFwCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVu bWFwLAorCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAorCS5mb3Bz CT0gJmZvcHMsCisJLm5hbWUJPSAibXhzZmItZHJtIiwKKwkuZGVzYwk9ICJNWFNGQiBDb250cm9s bGVyIERSTSIsCisJLmRhdGUJPSAiMjAxNjA4MjQiLAorCS5tYWpvcgk9IDEsCisJLm1pbm9yCT0g MCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIG14c2ZiX2Rl dnR5cGVbXSA9IHsKKwl7IC5uYW1lID0gImlteDIzLWZiIiwgLmRyaXZlcl9kYXRhID0gTVhTRkJf VjMsIH0sCisJeyAubmFtZSA9ICJpbXgyOC1mYiIsIC5kcml2ZXJfZGF0YSA9IE1YU0ZCX1Y0LCB9 LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0s IG14c2ZiX2RldnR5cGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteHNm Yl9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxpbXgyMy1sY2RpZiIsIC5kYXRh ID0gJm14c2ZiX2RldnR5cGVbMF0sIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14MjgtbGNk aWYiLCAuZGF0YSA9ICZteHNmYl9kZXZ0eXBlWzFdLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQor fTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14c2ZiX2R0X2lkcyk7CisKK3N0YXRpYyBpbnQg bXhzZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJCW9m X21hdGNoX2RldmljZShteHNmYl9kdF9pZHMsICZwZGV2LT5kZXYpOworCWludCByZXQ7CisKKwlp ZiAoIXBkZXYtPmRldi5vZl9ub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9pZCkK KwkJcGRldi0+aWRfZW50cnkgPSBvZl9pZC0+ZGF0YTsKKworCWRybSA9IGRybV9kZXZfYWxsb2Mo Jm14c2ZiX2RyaXZlciwgJnBkZXYtPmRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5PTUVN OworCisJcmV0ID0gbXhzZmJfbG9hZChkcm0sIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Zy ZWU7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfdW5sb2FkOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcl9hbGwoZHJtKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgYWxsIGNvbXBvbmVudHNc biIpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5y ZWdpc3RlcjoKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKK2Vycl91bmxvYWQ6CisJbXhzZmJf dW5sb2FkKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IG14c2ZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKKworCW11dGV4X2xvY2soJmRybS0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9j b25uZWN0b3JfdW5yZWdpc3Rlcl9hbGwoZHJtKTsKKwltdXRleF91bmxvY2soJmRybS0+bW9kZV9j b25maWcubXV0ZXgpOworCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJbXhzZmJfdW5sb2Fk KGRybSk7CisJZHJtX2Rldl91bnJlZihkcm0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14c2ZiX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gbXhzZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBteHNmYl9yZW1vdmUsCisJLmlkX3RhYmxlCT0g bXhzZmJfZGV2dHlwZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQkJPSAibXhzZmIiLAorCQkub2Zf bWF0Y2hfdGFibGUJPSBteHNmYl9kdF9pZHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9k cml2ZXIobXhzZmJfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWFyZWsgVmFz dXQgPG1hcmV4QGRlbnguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNWFMg RFJNL0tNUyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9t eHNmYl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmExZTM0Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX2Rydi5oCkBAIC0w LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWFyZWsgVmFzdXQgPG1hcmV4 QGRlbnguZGU+CisgKgorICogaS5NWDIzL2kuTVgyOC9pLk1YNlNYIE1YU0ZCIExDRCBjb250cm9s bGVyIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTVhTRkJfRFJWX0hfXworI2RlZmluZSBfX01YU0ZC X0RSVl9IX18KKworc3RydWN0IG14c2ZiX2RldmRhdGEgeworCXVuc2lnbmVkIGludAkgdHJhbnNm ZXJfY291bnQ7CisJdW5zaWduZWQgaW50CSBjdXJfYnVmOworCXVuc2lnbmVkIGludAkgbmV4dF9i dWY7CisJdW5zaWduZWQgaW50CSBkZWJ1ZzA7CisJdW5zaWduZWQgaW50CSBoc193ZHRoX21hc2s7 CisJdW5zaWduZWQgaW50CSBoc193ZHRoX3NoaWZ0OworCXVuc2lnbmVkIGludAkgaXB2ZXJzaW9u OworfTsKKworc3RydWN0IG14c2ZiX3JnYl9vdXRwdXQgeworCXN0cnVjdCBkcm1fY29ubmVjdG9y CWNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIJZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX3Bh bmVsCSpwYW5lbDsKK307CisKK3N0cnVjdCBteHNmYl9kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGNs awkJKmNsazsKKwlzdHJ1Y3QgY2xrCQkqY2xrX2F4aTsKKwlzdHJ1Y3QgY2xrCQkqY2xrX2Rpc3Bf YXhpOworCXZvaWQgX19pb21lbQkJKmJhc2U7CS8qIHJlZ2lzdGVycyAqLworCisJc3RydWN0IGRy bV9mYmRldl9jbWEJKmZiZGV2OworCXN0cnVjdCBkcm1fY3J0YwkJY3J0YzsKKwlzdHJ1Y3QgZHJt X3BsYW5lCSpwbGFuZTsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQkqc3RhdGU7CisKKwlzdHJ1 Y3QgbXhzZmJfcmdiX291dHB1dAlvdXRwdXQ7CisKKwljb25zdCBzdHJ1Y3QgbXhzZmJfZGV2ZGF0 YSAqZGV2ZGF0YTsKKwlib29sIGVuYWJsZWQ7Cit9OworCisjZGVmaW5lIGNydGNfdG9fbXhzZmJf cHJpdih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IG14c2ZiX2RybV9wcml2YXRlLCBjcnRjKQor CitpbnQgbXhzZmJfc2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBteHNm Yl9jcmVhdGVfb3V0cHV0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgbXhzZmJfc2V0 X3NjYW5vdXQoc3RydWN0IG14c2ZiX2RybV9wcml2YXRlICpteHNmYik7CisKKyNlbmRpZiAvKiBf X01YU0ZCX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNm Yl9vdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYl9vdXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmM0YjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL214c2ZiL214c2ZiX291dC5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgorICoKKyAqIFRoaXMg Y29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNf b3V0cHV0LmMgOgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRyYXBoYW5kbGVyCisgKiBDb3B5cmln aHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBdG1lbAor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJteHNmYl9kcnYu aCIKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXhzZmJfcmdiX291dHB1dCAqCitkcm1fY29ubmVj dG9yX3RvX214c2ZiX3JnYl9vdXRwdXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IG14c2ZiX3JnYl9vdXRw dXQsCisJCQkgICAgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXhzZmJf cmdiX291dHB1dCAqCitkcm1fZW5jb2Rlcl90b19teHNmYl9yZ2Jfb3V0cHV0KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVj dCBteHNmYl9yZ2Jfb3V0cHV0LCBlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgbXhzZmJfcmdi X2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3Qg bXhzZmJfcmdiX291dHB1dCAqcmdiID0KKwkJCWRybV9lbmNvZGVyX3RvX214c2ZiX3JnYl9vdXRw dXQoZW5jb2Rlcik7CisKKwlpZiAocmdiLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfcHJlcGFyZShy Z2ItPnBhbmVsKTsKKwkJZHJtX3BhbmVsX2VuYWJsZShyZ2ItPnBhbmVsKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIG14c2ZiX3JnYl9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQoreworCXN0cnVjdCBteHNmYl9yZ2Jfb3V0cHV0ICpyZ2IgPQorCQkJZHJtX2VuY29k ZXJfdG9fbXhzZmJfcmdiX291dHB1dChlbmNvZGVyKTsKKworCWlmIChyZ2ItPnBhbmVsKSB7CisJ CWRybV9wYW5lbF9kaXNhYmxlKHJnYi0+cGFuZWwpOworCQlkcm1fcGFuZWxfdW5wcmVwYXJlKHJn Yi0+cGFuZWwpOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdAorZHJtX2VuY29kZXJfaGVs cGVyX2Z1bmNzIG14c2ZiX3BhbmVsX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5kaXNhYmxl CT0gbXhzZmJfcmdiX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxlCQk9IG14c2ZiX3JnYl9lbmNv ZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyB2b2lkIG14c2ZiX3JnYl9lbmNvZGVyX2Rlc3Ryb3ko c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5j b2Rlcik7CisJbWVtc2V0KGVuY29kZXIsIDAsIHNpemVvZigqZW5jb2RlcikpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG14c2ZiX3BhbmVsX2VuY29kZXJfZnVu Y3MgPSB7CisJLmRlc3Ryb3kgPSBteHNmYl9yZ2JfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3Rh dGljIGludCBteHNmYl9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlzdHJ1Y3QgbXhzZmJfcmdiX291dHB1dCAqcmdiID0KKwkJCWRybV9jb25uZWN0 b3JfdG9fbXhzZmJfcmdiX291dHB1dChjb25uZWN0b3IpOworCisJaWYgKHJnYi0+cGFuZWwpCisJ CXJldHVybiByZ2ItPnBhbmVsLT5mdW5jcy0+Z2V0X21vZGVzKHJnYi0+cGFuZWwpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZmJfcmdiX21vZGVfdmFsaWQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkK K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqCitteHNmYl9y Z2JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3Ry dWN0IG14c2ZiX3JnYl9vdXRwdXQgKnJnYiA9CisJCQlkcm1fY29ubmVjdG9yX3RvX214c2ZiX3Jn Yl9vdXRwdXQoY29ubmVjdG9yKTsKKworCXJldHVybiAmcmdiLT5lbmNvZGVyOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0Citkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBteHNmYl9wYW5lbF9j b25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBteHNmYl9wYW5lbF9nZXRf bW9kZXMsCisJLm1vZGVfdmFsaWQgPSBteHNmYl9yZ2JfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNv ZGVyID0gbXhzZmJfcmdiX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25u ZWN0b3Jfc3RhdHVzCitteHNmYl9wYW5lbF9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IG14c2ZiX3JnYl9vdXRw dXQgKnJnYiA9CisJCQlkcm1fY29ubmVjdG9yX3RvX214c2ZiX3JnYl9vdXRwdXQoY29ubmVjdG9y KTsKKworCWlmIChyZ2ItPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQ7CisKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRp YyB2b2lkIG14c2ZiX3BhbmVsX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IG14c2ZiX3JnYl9vdXRwdXQgKnJnYiA9CisJCQlkcm1f Y29ubmVjdG9yX3RvX214c2ZiX3JnYl9vdXRwdXQoY29ubmVjdG9yKTsKKworCWlmIChyZ2ItPnBh bmVsKQorCQlkcm1fcGFuZWxfZGV0YWNoKHJnYi0+cGFuZWwpOworCisJZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyBteHNmYl9wYW5lbF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMJCQk9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QJCQk9IG14c2ZiX3BhbmVsX2Nv bm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMJCT0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95CQk9IG14c2ZiX3BhbmVsX2Nvbm5lY3Rvcl9kZXN0 cm95LAorCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5h dG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxp Y2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXhzZmJfY2hlY2tfZW5k cG9pbnQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQljb25zdCBzdHJ1Y3Qgb2ZfZW5kcG9p bnQgKmVwKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCAqb2JqOworCisJbnAg PSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwLT5sb2NhbF9ub2RlKTsKKworCW9i aiA9IG9mX2RybV9maW5kX3BhbmVsKG5wKTsKKwlpZiAoIW9iaikKKwkJb2JqID0gb2ZfZHJtX2Zp bmRfYnJpZGdlKG5wKTsKKworCW9mX25vZGVfcHV0KG5wKTsKKworCXJldHVybiBvYmogPyAwIDog LUVQUk9CRV9ERUZFUjsKK30KKworc3RhdGljIGludCBteHNmYl9hdHRhY2hfZW5kcG9pbnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkgY29uc3Qgc3RydWN0IG9mX2VuZHBvaW50ICplcCkK K3sKKwlzdHJ1Y3QgbXhzZmJfZHJtX3ByaXZhdGUgKm14c2ZiID0gZHJtLT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgbXhzZmJfcmdiX291dHB1dCAqb3V0cHV0ID0gJm14c2ZiLT5vdXRwdXQ7CisJc3Ry dWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlOworCWludCByZXQ7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRk KCZvdXRwdXQtPmVuY29kZXIsCisJCQkgICAgICAgJm14c2ZiX3BhbmVsX2VuY29kZXJfaGVscGVy X2Z1bmNzKTsKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJm91dHB1dC0+ZW5jb2RlciwK KwkJCSAgICAgICAmbXhzZmJfcGFuZWxfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9E RV9FTkNPREVSX05PTkUsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlvdXRw dXQtPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSAweDE7CisKKwlucCA9IG9mX2dyYXBoX2dldF9y ZW1vdGVfcG9ydF9wYXJlbnQoZXAtPmxvY2FsX25vZGUpOworCisJcmV0ID0gLUVQUk9CRV9ERUZF UjsKKworCXBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwobnApOworCWlmIChwYW5lbCkgeworCQlv Zl9ub2RlX3B1dChucCk7CisJCW91dHB1dC0+Y29ubmVjdG9yLmRwbXMgPSBEUk1fTU9ERV9EUE1T X09GRjsKKwkJb3V0cHV0LT5jb25uZWN0b3IucG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NP Tk5FQ1Q7CisJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmb3V0cHV0LT5jb25uZWN0b3IsCisJ CQkJJm14c2ZiX3BhbmVsX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29u bmVjdG9yX2luaXQoZHJtLCAmb3V0cHV0LT5jb25uZWN0b3IsCisJCQkJCSAmbXhzZmJfcGFuZWxf Y29ubmVjdG9yX2Z1bmNzLAorCQkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pOworCQlp ZiAocmV0KQorCQkJZ290byBlcnJfZW5jb2Rlcl9jbGVhbnVwOworCisJCWRybV9tb2RlX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcigmb3V0cHV0LT5jb25uZWN0b3IsCisJCQkJCQkgICZvdXRwdXQt PmVuY29kZXIpOworCisJCXJldCA9IGRybV9wYW5lbF9hdHRhY2gocGFuZWwsICZvdXRwdXQtPmNv bm5lY3Rvcik7CisJCWlmIChyZXQpIHsKKwkJCWRybV9jb25uZWN0b3JfY2xlYW51cCgmb3V0cHV0 LT5jb25uZWN0b3IpOworCQkJZ290byBlcnJfZW5jb2Rlcl9jbGVhbnVwOworCQl9CisKKwkJb3V0 cHV0LT5wYW5lbCA9IHBhbmVsOworCisJCXJldHVybiAwOworCX0KKworCWJyaWRnZSA9IG9mX2Ry bV9maW5kX2JyaWRnZShucCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKGJyaWRnZSkgewor CQlvdXRwdXQtPmVuY29kZXIuYnJpZGdlID0gYnJpZGdlOworCQlicmlkZ2UtPmVuY29kZXIgPSAm b3V0cHV0LT5lbmNvZGVyOworCQlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChkcm0sIGJyaWRnZSk7 CisJCWlmICghcmV0KQorCQkJcmV0dXJuIDA7CisJfQorCitlcnJfZW5jb2Rlcl9jbGVhbnVwOgor CWRybV9lbmNvZGVyX2NsZWFudXAoJm91dHB1dC0+ZW5jb2Rlcik7CisKKwlyZXR1cm4gcmV0Owor fQorCitpbnQgbXhzZmJfY3JlYXRlX291dHB1dHMoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwX25wID0gTlVMTDsKKwlzdHJ1Y3Qgb2ZfZW5kcG9pbnQg ZXA7CisJaW50IHJldDsKKworCWZvcl9lYWNoX2VuZHBvaW50X29mX25vZGUoZHJtLT5kZXYtPm9m X25vZGUsIGVwX25wKSB7CisJCXJldCA9IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGVwX25wLCAm ZXApOworCQlpZiAoIXJldCkKKwkJCXJldCA9IG14c2ZiX2NoZWNrX2VuZHBvaW50KGRybSwgJmVw KTsKKworCQlpZiAocmV0KSB7CisJCQlvZl9ub2RlX3B1dChlcF9ucCk7CisJCQlyZXR1cm4gcmV0 OworCQl9CisJfQorCisJZm9yX2VhY2hfZW5kcG9pbnRfb2Zfbm9kZShkcm0tPmRldi0+b2Zfbm9k ZSwgZXBfbnApIHsKKwkJcmV0ID0gb2ZfZ3JhcGhfcGFyc2VfZW5kcG9pbnQoZXBfbnAsICZlcCk7 CisJCWlmICghcmV0KQorCQkJcmV0ID0gbXhzZmJfYXR0YWNoX2VuZHBvaW50KGRybSwgJmVwKTsK KworCQlpZiAocmV0KSB7CisJCQlvZl9ub2RlX3B1dChlcF9ucCk7CisJCQlyZXR1cm4gcmV0Owor CQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhz ZmIvbXhzZmJfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX3JlZ3MuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWEwMDZhCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2ZiX3JlZ3MuaApAQCAtMCwwICsxLDExMiBAQAor LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Cisg KiBDb3B5cmlnaHQgKEMpIDIwMTYgTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+CisgKgorICog aS5NWDIzL2kuTVgyOC9pLk1YNlNYIE1YU0ZCIExDRCBjb250cm9sbGVyIGRyaXZlci4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIF9fTVhTRkJfUkVHU19IX18KKyNkZWZpbmUgX19NWFNGQl9SRUdTX0hfXworCisjZGVm aW5lIFJFR19TRVQJNAorI2RlZmluZSBSRUdfQ0xSCTgKKworI2RlZmluZSBMQ0RDX0NUUkwJCQkw eDAwCisjZGVmaW5lIExDRENfQ1RSTDEJCQkweDEwCisjZGVmaW5lIExDRENfVjNfVFJBTlNGRVJf Q09VTlQJCTB4MjAKKyNkZWZpbmUgTENEQ19WNF9UUkFOU0ZFUl9DT1VOVAkJMHgzMAorI2RlZmlu ZSBMQ0RDX1Y0X0NVUl9CVUYJCQkweDQwCisjZGVmaW5lIExDRENfVjRfTkVYVF9CVUYJCTB4NTAK KyNkZWZpbmUgTENEQ19WM19DVVJfQlVGCQkJMHgzMAorI2RlZmluZSBMQ0RDX1YzX05FWFRfQlVG CQkweDQwCisjZGVmaW5lIExDRENfVkRDVFJMMAkJCTB4NzAKKyNkZWZpbmUgTENEQ19WRENUUkwx CQkJMHg4MAorI2RlZmluZSBMQ0RDX1ZEQ1RSTDIJCQkweDkwCisjZGVmaW5lIExDRENfVkRDVFJM MwkJCTB4YTAKKyNkZWZpbmUgTENEQ19WRENUUkw0CQkJMHhiMAorI2RlZmluZSBMQ0RDX1Y0X0RF QlVHMAkJCTB4MWQwCisjZGVmaW5lIExDRENfVjNfREVCVUcwCQkJMHgxZjAKKworI2RlZmluZSBD VFJMX1NGVFJTVAkJCSgxIDw8IDMxKQorI2RlZmluZSBDVFJMX0NMS0dBVEUJCQkoMSA8PCAzMCkK KyNkZWZpbmUgQ1RSTF9CWVBBU1NfQ09VTlQJCSgxIDw8IDE5KQorI2RlZmluZSBDVFJMX1ZTWU5D X01PREUJCQkoMSA8PCAxOCkKKyNkZWZpbmUgQ1RSTF9ET1RDTEtfTU9ERQkJKDEgPDwgMTcpCisj ZGVmaW5lIENUUkxfREFUQV9TRUxFQ1QJCSgxIDw8IDE2KQorI2RlZmluZSBDVFJMX1NFVF9CVVNf V0lEVEgoeCkJCSgoKHgpICYgMHgzKSA8PCAxMCkKKyNkZWZpbmUgQ1RSTF9HRVRfQlVTX1dJRFRI KHgpCQkoKCh4KSA+PiAxMCkgJiAweDMpCisjZGVmaW5lIENUUkxfU0VUX1dPUkRfTEVOR1RIKHgp CQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgQ1RSTF9HRVRfV09SRF9MRU5HVEgoeCkJCSgo KHgpID4+IDgpICYgMHgzKQorI2RlZmluZSBDVFJMX01BU1RFUgkJCSgxIDw8IDUpCisjZGVmaW5l IENUUkxfREYxNgkJCSgxIDw8IDMpCisjZGVmaW5lIENUUkxfREYxOAkJCSgxIDw8IDIpCisjZGVm aW5lIENUUkxfREYyNAkJCSgxIDw8IDEpCisjZGVmaW5lIENUUkxfUlVOCQkJKDEgPDwgMCkKKwor I2RlZmluZSBDVFJMMV9GSUZPX0NMRUFSCQkoMSA8PCAyMSkKKyNkZWZpbmUgQ1RSTDFfU0VUX0JZ VEVfUEFDS0FHSU5HKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgQ1RSTDFfR0VUX0JZ VEVfUEFDS0FHSU5HKHgpCSgoKHgpID4+IDE2KSAmIDB4ZikKKworI2RlZmluZSBUUkFOU0ZFUl9D T1VOVF9TRVRfVkNPVU5UKHgpCSgoKHgpICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUgVFJBTlNG RVJfQ09VTlRfR0VUX1ZDT1VOVCh4KQkoKCh4KSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIFRS QU5TRkVSX0NPVU5UX1NFVF9IQ09VTlQoeCkJKCh4KSAmIDB4ZmZmZikKKyNkZWZpbmUgVFJBTlNG RVJfQ09VTlRfR0VUX0hDT1VOVCh4KQkoKHgpICYgMHhmZmZmKQorCisjZGVmaW5lIFZEQ1RSTDBf RU5BQkxFX1BSRVNFTlQJCSgxIDw8IDI4KQorI2RlZmluZSBWRENUUkwwX1ZTWU5DX0FDVF9ISUdI CQkoMSA8PCAyNykKKyNkZWZpbmUgVkRDVFJMMF9IU1lOQ19BQ1RfSElHSAkJKDEgPDwgMjYpCisj ZGVmaW5lIFZEQ1RSTDBfRE9UQ0xLX0FDVF9GQUxMSU5HCSgxIDw8IDI1KQorI2RlZmluZSBWRENU UkwwX0VOQUJMRV9BQ1RfSElHSAkJKDEgPDwgMjQpCisjZGVmaW5lIFZEQ1RSTDBfVlNZTkNfUEVS SU9EX1VOSVQJKDEgPDwgMjEpCisjZGVmaW5lIFZEQ1RSTDBfVlNZTkNfUFVMU0VfV0lEVEhfVU5J VAkoMSA8PCAyMCkKKyNkZWZpbmUgVkRDVFJMMF9IQUxGX0xJTkUJCSgxIDw8IDE5KQorI2RlZmlu ZSBWRENUUkwwX0hBTEZfTElORV9NT0RFCQkoMSA8PCAxOCkKKyNkZWZpbmUgVkRDVFJMMF9TRVRf VlNZTkNfUFVMU0VfV0lEVEgoeCkgKCh4KSAmIDB4M2ZmZmYpCisjZGVmaW5lIFZEQ1RSTDBfR0VU X1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQorCisjZGVmaW5lIFZEQ1RSTDJf U0VUX0hTWU5DX1BFUklPRCh4KQkoKHgpICYgMHgzZmZmZikKKyNkZWZpbmUgVkRDVFJMMl9HRVRf SFNZTkNfUEVSSU9EKHgpCSgoeCkgJiAweDNmZmZmKQorCisjZGVmaW5lIFZEQ1RSTDNfTVVYX1NZ TkNfU0lHTkFMUwkoMSA8PCAyOSkKKyNkZWZpbmUgVkRDVFJMM19WU1lOQ19PTkxZCQkoMSA8PCAy OCkKKyNkZWZpbmUgU0VUX0hPUl9XQUlUX0NOVCh4KQkJKCgoeCkgJiAweGZmZikgPDwgMTYpCisj ZGVmaW5lIEdFVF9IT1JfV0FJVF9DTlQoeCkJCSgoKHgpID4+IDE2KSAmIDB4ZmZmKQorI2RlZmlu ZSBTRVRfVkVSVF9XQUlUX0NOVCh4KQkJKCh4KSAmIDB4ZmZmZikKKyNkZWZpbmUgR0VUX1ZFUlRf V0FJVF9DTlQoeCkJCSgoeCkgJiAweGZmZmYpCisKKyNkZWZpbmUgVkRDVFJMNF9TRVRfRE9UQ0xL X0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgMjkpIC8qIHY0IG9ubHkgKi8KKyNkZWZpbmUgVkRDVFJM NF9HRVRfRE9UQ0xLX0RMWSh4KQkoKCh4KSA+PiAyOSkgJiAweDcpIC8qIHY0IG9ubHkgKi8KKyNk ZWZpbmUgVkRDVFJMNF9TWU5DX1NJR05BTFNfT04JCSgxIDw8IDE4KQorI2RlZmluZSBTRVRfRE9U Q0xLX0hfVkFMSURfREFUQV9DTlQoeCkJKCh4KSAmIDB4M2ZmZmYpCisKKyNkZWZpbmUgREVCVUcw X0hTWU5DCQkJKDEgPCAyNikKKyNkZWZpbmUgREVCVUcwX1ZTWU5DCQkJKDEgPCAyNSkKKworI2Rl ZmluZSBNWFNGQl9NSU5fWFJFUwkJCTEyMAorI2RlZmluZSBNWFNGQl9NSU5fWVJFUwkJCTEyMAor I2RlZmluZSBNWFNGQl9NQVhfWFJFUwkJCTB4ZmZmZgorI2RlZmluZSBNWFNGQl9NQVhfWVJFUwkJ CTB4ZmZmZgorCisjZGVmaW5lIFJFRCAwCisjZGVmaW5lIEdSRUVOIDEKKyNkZWZpbmUgQkxVRSAy CisjZGVmaW5lIFRSQU5TUCAzCisKKyNkZWZpbmUgU1RNTENESUZfOEJJVCAgMSAvKiBwaXhlbCBk YXRhIGJ1cyB0byB0aGUgZGlzcGxheSBpcyBvZiA4IGJpdCB3aWR0aCAqLworI2RlZmluZSBTVE1M Q0RJRl8xNkJJVCAwIC8qIHBpeGVsIGRhdGEgYnVzIHRvIHRoZSBkaXNwbGF5IGlzIG9mIDE2IGJp dCB3aWR0aCAqLworI2RlZmluZSBTVE1MQ0RJRl8xOEJJVCAyIC8qIHBpeGVsIGRhdGEgYnVzIHRv IHRoZSBkaXNwbGF5IGlzIG9mIDE4IGJpdCB3aWR0aCAqLworI2RlZmluZSBTVE1MQ0RJRl8yNEJJ VCAzIC8qIHBpeGVsIGRhdGEgYnVzIHRvIHRoZSBkaXNwbGF5IGlzIG9mIDI0IGJpdCB3aWR0aCAq LworCisjZGVmaW5lIE1YU0ZCX1NZTkNfREFUQV9FTkFCTEVfSElHSF9BQ1QJKDEgPDwgNikKKyNk ZWZpbmUgTVhTRkJfU1lOQ19ET1RDTEtfRkFMTElOR19BQ1QJKDEgPDwgNykgLyogbmVnYXRpdmUg ZWRnZSBzYW1wbGluZyAqLworCisjZW5kaWYgLyogX19NWFNGQl9SRUdTX0hfXyAqLwotLSAKMi45 LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=