From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH 15/22] drm/i915: Split setting of vswing and pre_emph levels to separate file Date: Fri, 23 Oct 2015 13:01:58 +0300 Message-ID: <1445594525-7174-16-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1445594525-7174-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id BA517721CD for ; Fri, 23 Oct 2015 03:02:47 -0700 (PDT) In-Reply-To: <1445594525-7174-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, jim.bride@linux.intel.com, sivakumar.thulasimani@intel.com Cc: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzLCBqdXN0IG1vdmluZyBjb2RlIGFyb3VuZC4KCnYyOiBSZWJh c2UKClNpZ25lZC1vZmYtYnk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29u c2VsdmFuLmRlLm9saXZlaXJhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHAuYyAgICAgICAgICAgICAgIHwgNTE3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX3NpZ25hbF9sZXZlbHMuYyB8IDUzNCArKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAg ICAgICAgICAgIHwgICA3ICsKIDQgZmlsZXMgY2hhbmdlZCwgNTQyIGluc2VydGlvbnMoKyksIDUx NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcF9zaWduYWxfbGV2ZWxzLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDA4NTFkZTA3 Li45Y2Y5OTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtNzksNiArNzksNyBAQCBpOTE1LXkg Kz0gZHZvX2NoNzAxNy5vIFwKIAkgIGludGVsX2RkaS5vIFwKIAkgIGludGVsX2RwX2xpbmtfdHJh aW5pbmcubyBcCiAJICBpbnRlbF9kcF9tc3QubyBcCisJICBpbnRlbF9kcF9zaWduYWxfbGV2ZWxz Lm8gXAogCSAgaW50ZWxfZHAubyBcCiAJICBpbnRlbF9kc2kubyBcCiAJICBpbnRlbF9kc2lfcGFu ZWxfdmJ0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggNTM0NGRlNC4uMTIzNjc5MSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0xMTEsMTMgKzExMSw2IEBAIHN0YXRpYyBib29s IGlzX2VkcChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCXJldHVybiBpbnRlbF9kaWdfcG9y dC0+YmFzZS50eXBlID09IElOVEVMX09VVFBVVF9FRFA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJt X2RldmljZSAqaW50ZWxfZHBfdG9fZGV2KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0J c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9y dChpbnRlbF9kcCk7Ci0KLQlyZXR1cm4gaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7Ci19 Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2F0dGFjaGVkX2RwKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJcmV0dXJuIGVuY190b19pbnRlbF9kcCgmaW50ZWxf YXR0YWNoZWRfZW5jb2Rlcihjb25uZWN0b3IpLT5iYXNlKTsKQEAgLTMwNTgsNTE2ICszMDUxLDYg QEAgaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVp bnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS18KIAkJCQkgICAgICAgRFBfTElOS19TVEFUVVNfU0la RSkgPT0gRFBfTElOS19TVEFUVVNfU0laRTsKIH0KIAotLyogVGhlc2UgYXJlIHNvdXJjZS1zcGVj aWZpYyB2YWx1ZXMuICovCi11aW50OF90Ci1pbnRlbF9kcF92b2x0YWdlX21heChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90 b19kZXYoaW50ZWxfZHApOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Ci0JZW51bSBwb3J0IHBvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9k cCktPnBvcnQ7Ci0KLQlpZiAoSVNfQlJPWFRPTihkZXYpKQotCQlyZXR1cm4gRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8zOwotCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkp IHsKLQkJaWYgKGRldl9wcml2LT5lZHBfbG93X3Zzd2luZyAmJiBwb3J0ID09IFBPUlRfQSkKLQkJ CXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM7Ci0JCXJldHVybiBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI7Ci0JfSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldikp Ci0JCXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM7Ci0JZWxzZSBpZiAoSVNf R0VONyhkZXYpICYmIHBvcnQgPT0gUE9SVF9BKQotCQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19MRVZFTF8yOwotCWVsc2UgaWYgKEhBU19QQ0hfQ1BUKGRldikgJiYgcG9ydCAhPSBQT1JU X0EpCi0JCXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM7Ci0JZWxzZQotCQly ZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOwotfQotCi11aW50OF90Ci1pbnRl bF9kcF9wcmVfZW1waGFzaXNfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVpbnQ4X3Qg dm9sdGFnZV9zd2luZykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9f ZGV2KGludGVsX2RwKTsKLQllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KS0+cG9ydDsKLQotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KSB7Ci0JCXN3aXRjaCAo dm9sdGFnZV9zd2luZyAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8zOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKLQkJCXJl dHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTEVWRUxfMjoKLQkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOwotCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKLQkJCXJldHVybiBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8wOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzA7Ci0JCX0KLQl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2KSB8fCBJU19CUk9BRFdF TEwoZGV2KSkgewotCQlzd2l0Y2ggKHZvbHRhZ2Vfc3dpbmcgJiBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX01BU0spIHsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQly ZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMzsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzE6Ci0JCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjsKLQkJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6Ci0JCQlyZXR1cm4gRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMTsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6 Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDsKLQkJfQot CX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Ci0JCXN3aXRjaCAodm9sdGFnZV9zd2lu ZyAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRB R0VfU1dJTkdfTEVWRUxfMDoKLQkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOwot CQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKLQkJCXJldHVybiBEUF9UUkFJ Tl9QUkVfRU1QSF9MRVZFTF8yOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxf MjoKLQkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOwotCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8wOwotCQl9Ci0JfSBlbHNlIGlmIChJU19HRU43KGRldikgJiYgcG9ydCA9 PSBQT1JUX0EpIHsKLQkJc3dpdGNoICh2b2x0YWdlX3N3aW5nICYgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19NQVNLKSB7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgotCQkJ cmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8xOgotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoK LQkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOwotCQlkZWZhdWx0OgotCQkJcmV0 dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA7Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2gg KHZvbHRhZ2Vfc3dpbmcgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQkJY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VN UEhfTEVWRUxfMjsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQly ZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzI6Ci0JCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMTsKLQkJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1 cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHVpbnQz Ml90IHZsdl9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKLQlz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9Ci0JCXRvX2ludGVsX2NydGMoZHBvcnQtPmJh c2UuYmFzZS5jcnRjKTsKLQl1bnNpZ25lZCBsb25nIGRlbXBoX3JlZ192YWx1ZSwgcHJlZW1waF9y ZWdfdmFsdWUsCi0JCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlOwotCXVpbnQ4X3QgdHJhaW5fc2V0 ID0gaW50ZWxfZHAtPnRyYWluX3NldFswXTsKLQllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2 X2Rwb3J0X3RvX2NoYW5uZWwoZHBvcnQpOwotCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsK LQotCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spIHsKLQlj YXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Ci0JCXByZWVtcGhfcmVnX3ZhbHVlID0gMHgw MDA0MDAwOwotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFT SykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlbXBoX3Jl Z192YWx1ZSA9IDB4MkI0MDU1NTU7Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTUy QUI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6 Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQwOwotCQkJdW5pcXRyYW5zY2FsZV9yZWdf dmFsdWUgPSAweDU1NDhCODNBOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19MRVZFTF8yOgotCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjI0NTU1NTsKLQkJCXVuaXF0 cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTYwQjgzQTsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkI0MDU1 NTU7Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU5OERBM0E7Ci0JCQlicmVhazsK LQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMToKLQkJcHJlZW1waF9yZWdfdmFsdWUgPSAweDAwMDIwMDA7Ci0JCXN3 aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7Ci0JCWNhc2Ug RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgotCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgy QjQwNDA0MDsKLQkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTUyQjgzQTsKLQkJCWJy ZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKLQkJCWRlbXBoX3Jl Z192YWx1ZSA9IDB4MkI0MDQ4NDg7Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU4 MEI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6 Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQwOwotCQkJdW5pcXRyYW5zY2FsZV9yZWdf dmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsK LQkJfQotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6Ci0JCXByZWVt cGhfcmVnX3ZhbHVlID0gMHgwMDAwMDAwOwotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMDoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIzMDU1NTU7Ci0JCQl1bmlxdHJhbnNjYWxl X3JlZ192YWx1ZSA9IDB4NTU3MEI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCMkI0MDQwOwotCQkJ dW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7Ci0JCWRlZmF1 bHQ6Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzM6Ci0JCXByZWVtcGhfcmVnX3ZhbHVlID0gMHgwMDA2MDAwOwotCQlzd2l0Y2ggKHRy YWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MUI0MDU1NTU7 Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTVBRERBM0E7Ci0JCQlicmVhazsKLQkJ ZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVy biAwOwotCX0KLQotCW11dGV4X2xvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKLQl2bHZfZHBpb193 cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1RYX0RXNShwb3J0KSwgMHgwMDAwMDAwMCk7Ci0Jdmx2 X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9UWF9EVzQocG9ydCksIGRlbXBoX3JlZ192 YWx1ZSk7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9UWF9EVzIocG9ydCks Ci0JCQkgdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUpOwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBWTFZfVFhfRFczKHBvcnQpLCAweDBDNzgyMDQwKTsKLQl2bHZfZHBpb193cml0ZShk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDU19EVzExKHBvcnQpLCAweDAwMDMwMDAwKTsKLQl2bHZfZHBp b193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDU19EVzkocG9ydCksIHByZWVtcGhfcmVnX3Zh bHVlKTsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1RYX0RXNShwb3J0KSwg MHg4MDAwMDAwMCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgY2h2X25lZWRfdW5pcV90cmFuc19zY2FsZSh1aW50OF90 IHRyYWluX3NldCkKLXsKLQlyZXR1cm4gKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJ U19NQVNLKSA9PSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wICYmCi0JCSh0cmFpbl9zZXQgJiBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spID09IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMzsKLX0KLQotc3RhdGljIHVpbnQzMl90IGNodl9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3Rv X2RldihpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkcG9ydCA9IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoZHBvcnQtPmJhc2UuYmFzZS5jcnRjKTsKLQl1MzIgZGVlbXBoX3JlZ192YWx1 ZSwgbWFyZ2luX3JlZ192YWx1ZSwgdmFsOwotCXVpbnQ4X3QgdHJhaW5fc2V0ID0gaW50ZWxfZHAt PnRyYWluX3NldFswXTsKLQllbnVtIGRwaW9fY2hhbm5lbCBjaCA9IHZsdl9kcG9ydF90b19jaGFu bmVsKGRwb3J0KTsKLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaW50IGk7 Ci0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0J Y2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJ TkdfTEVWRUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7Ci0JCQltYXJnaW5fcmVnX3Zh bHVlID0gNTI7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVM XzE6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4OwotCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDc3 OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOgotCQkJ ZGVlbXBoX3JlZ192YWx1ZSA9IDEyODsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMDI7Ci0JCQli cmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCQlkZWVtcGhf cmVnX3ZhbHVlID0gMTI4OwotCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDE1NDsKLQkJCS8qIEZJWE1F IGV4dHJhIHRvIHNldCBmb3IgMTIwMCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1 cm4gMDsKLQkJfQotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6Ci0J CXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7Ci0JCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgotCQkJZGVlbXBoX3JlZ192YWx1ZSA9 IDg1OwotCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDc4OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDg1OwotCQkJ bWFyZ2luX3JlZ192YWx1ZSA9IDExNjsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRB R0VfU1dJTkdfTEVWRUxfMjoKLQkJCWRlZW1waF9yZWdfdmFsdWUgPSA4NTsKLQkJCW1hcmdpbl9y ZWdfdmFsdWUgPSAxNTQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCQl9 Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoKLQkJc3dpdGNoICh0 cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQkJY2FzZSBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gNjQ7Ci0JCQlt YXJnaW5fcmVnX3ZhbHVlID0gMTA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8xOgotCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDY0OwotCQkJbWFyZ2luX3Jl Z192YWx1ZSA9IDE1NDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JCX0K LQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgotCQlzd2l0Y2ggKHRy YWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUgPSA0MzsKLQkJCW1h cmdpbl9yZWdfdmFsdWUgPSAxNTQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAw OwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCW11dGV4X2xv Y2soJmRldl9wcml2LT5zYl9sb2NrKTsKLQotCS8qIENsZWFyIGNhbGMgaW5pdCAqLwotCXZhbCA9 IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNoKSk7Ci0JdmFs ICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19U WDFfVFgzKTsKLQl2YWwgJj0gfihEUElPX1BDU19UWDFERUVNUF9NQVNLIHwgRFBJT19QQ1NfVFgy REVFTVBfTUFTSyk7Ci0JdmFsIHw9IERQSU9fUENTX1RYMURFRU1QXzlQNSB8IERQSU9fUENTX1RY MkRFRU1QXzlQNTsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RX MTAoY2gpLCB2YWwpOwotCi0JaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIp IHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAo Y2gpKTsKLQkJdmFsICY9IH4oRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1Nf U1dJTkdfQ0FMQ19UWDFfVFgzKTsKLQkJdmFsICY9IH4oRFBJT19QQ1NfVFgxREVFTVBfTUFTSyB8 IERQSU9fUENTX1RYMkRFRU1QX01BU0spOwotCQl2YWwgfD0gRFBJT19QQ1NfVFgxREVFTVBfOVA1 IHwgRFBJT19QQ1NfVFgyREVFTVBfOVA1OwotCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgVkxWX1BDUzIzX0RXMTAoY2gpLCB2YWwpOwotCX0KLQotCXZhbCA9IHZsdl9kcGlvX3JlYWQo ZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpKTsKLQl2YWwgJj0gfihEUElPX1BDU19U WDFNQVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKLQl2YWwgfD0gRFBJT19Q Q1NfVFgxTUFSR0lOXzAwMCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7Ci0Jdmx2X2RwaW9fd3Jp dGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzkoY2gpLCB2YWwpOwotCi0JaWYgKGludGVs X2NydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA+IDIpIHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCkpOwotCQl2YWwgJj0gfihEUElPX1BDU19U WDFNQVJHSU5fTUFTSyB8IERQSU9fUENTX1RYMk1BUkdJTl9NQVNLKTsKLQkJdmFsIHw9IERQSU9f UENTX1RYMU1BUkdJTl8wMDAgfCBEUElPX1BDU19UWDJNQVJHSU5fMDAwOwotCQl2bHZfZHBpb193 cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXOShjaCksIHZhbCk7Ci0JfQotCi0JLyog UHJvZ3JhbSBzd2luZyBkZWVtcGggKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+Y29u ZmlnLT5sYW5lX2NvdW50OyBpKyspIHsKLQkJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwg cGlwZSwgQ0hWX1RYX0RXNChjaCwgaSkpOwotCQl2YWwgJj0gfkRQSU9fU1dJTkdfREVFTVBIOVA1 X01BU0s7Ci0JCXZhbCB8PSBkZWVtcGhfcmVnX3ZhbHVlIDw8IERQSU9fU1dJTkdfREVFTVBIOVA1 X1NISUZUOwotCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXNChjaCwg aSksIHZhbCk7Ci0JfQotCi0JLyogUHJvZ3JhbSBzd2luZyBtYXJnaW4gKi8KLQlmb3IgKGkgPSAw OyBpIDwgaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50OyBpKyspIHsKLQkJdmFsID0gdmx2 X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXMihjaCwgaSkpOwotCi0JCXZhbCAm PSB+RFBJT19TV0lOR19NQVJHSU4wMDBfTUFTSzsKLQkJdmFsIHw9IG1hcmdpbl9yZWdfdmFsdWUg PDwgRFBJT19TV0lOR19NQVJHSU4wMDBfU0hJRlQ7Ci0KLQkJLyoKLQkJICogU3VwcG9zZWRseSB0 aGlzIHZhbHVlIHNob3VsZG4ndCBtYXR0ZXIgd2hlbiB1bmlxdWUgdHJhbnNpdGlvbgotCQkgKiBz Y2FsZSBpcyBkaXNhYmxlZCwgYnV0IGluIGZhY3QgaXQgZG9lcyBtYXR0ZXIuIExldCdzIGp1c3QK LQkJICogYWx3YXlzIHByb2dyYW0gdGhlIHNhbWUgdmFsdWUgYW5kIGhvcGUgaXQncyBPSy4KLQkJ ICovCi0JCXZhbCAmPSB+KDB4ZmYgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUKTsKLQkJ dmFsIHw9IDB4OWEgPDwgRFBJT19VTklRX1RSQU5TX1NDQUxFX1NISUZUOwotCi0JCXZsdl9kcGlv X3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSwgdmFsKTsKLQl9Ci0KLQkv KgotCSAqIFRoZSBkb2N1bWVudCBzYWlkIGl0IG5lZWRzIHRvIHNldCBiaXQgMjcgZm9yIGNoMCBh bmQgYml0IDI2Ci0JICogZm9yIGNoMS4gTWlnaHQgYmUgYSB0eXBvIGluIHRoZSBkb2MuCi0JICog Rm9yIG5vdywgZm9yIHRoaXMgdW5pcXVlIHRyYW5zaXRpb24gc2NhbGUgc2VsZWN0aW9uLCBzZXQg Yml0Ci0JICogMjcgZm9yIGNoMCBhbmQgY2gxLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBpbnRl bF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgewotCQl2YWwgPSB2bHZfZHBpb19yZWFk KGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFczKGNoLCBpKSk7Ci0JCWlmIChjaHZfbmVlZF91bmlx X3RyYW5zX3NjYWxlKHRyYWluX3NldCkpCi0JCQl2YWwgfD0gRFBJT19UWF9VTklRX1RSQU5TX1ND QUxFX0VOOwotCQllbHNlCi0JCQl2YWwgJj0gfkRQSU9fVFhfVU5JUV9UUkFOU19TQ0FMRV9FTjsK LQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9UWF9EVzMoY2gsIGkpLCB2YWwp OwotCX0KLQotCS8qIFN0YXJ0IHN3aW5nIGNhbGN1bGF0aW9uICovCi0JdmFsID0gdmx2X2RwaW9f cmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpKTsKLQl2YWwgfD0gRFBJT19Q Q1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgzOwotCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCksIHZhbCk7Ci0K LQlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50ID4gMikgewotCQl2YWwgPSB2bHZf ZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOwotCQl2YWwgfD0g RFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDBfVFgyIHwgRFBJT19QQ1NfU1dJTkdfQ0FMQ19UWDFfVFgz OwotCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzIzX0RXMTAoY2gpLCB2 YWwpOwotCX0KLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuNF9zaWduYWxfbGV2ZWxzKHVpbnQ4X3QgdHJh aW5fc2V0KQotewotCXVpbnQzMl90CXNpZ25hbF9sZXZlbHMgPSAwOwotCi0Jc3dpdGNoICh0cmFp bl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQljYXNlIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMDoKLQlkZWZhdWx0OgotCQlzaWduYWxfbGV2ZWxzIHw9IERQX1ZP TFRBR0VfMF80OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxf MToKLQkJc2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfNjsKLQkJYnJlYWs7Ci0JY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9M VEFHRV8wXzg7Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8z OgotCQlzaWduYWxfbGV2ZWxzIHw9IERQX1ZPTFRBR0VfMV8yOwotCQlicmVhazsKLQl9Ci0Jc3dp dGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykgewotCWNhc2UgRFBf VFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQlkZWZhdWx0OgotCQlzaWduYWxfbGV2ZWxzIHw9IERQ X1BSRV9FTVBIQVNJU18wOwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzE6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzNfNTsKLQkJYnJlYWs7Ci0J Y2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgotCQlzaWduYWxfbGV2ZWxzIHw9IERQX1BS RV9FTVBIQVNJU182OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM6 Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzlfNTsKLQkJYnJlYWs7Ci0JfQot CXJldHVybiBzaWduYWxfbGV2ZWxzOwotfQotCi0vKiBHZW42J3MgRFAgdm9sdGFnZSBzd2luZyBh bmQgcHJlLWVtcGhhc2lzIGNvbnRyb2wgKi8KLXN0YXRpYyB1aW50MzJfdAotZ2VuNl9lZHBfc2ln bmFsX2xldmVscyh1aW50OF90IHRyYWluX3NldCkKLXsKLQlpbnQgc2lnbmFsX2xldmVscyA9IHRy YWluX3NldCAmIChEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0sgfAotCQkJCQkgRFBfVFJBSU5f UFJFX0VNUEhBU0lTX01BU0spOwotCXN3aXRjaCAoc2lnbmFsX2xldmVscykgewotCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoK LQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzA6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZfMERCX1NOQl9COwot CWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhf TEVWRUxfMToKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzNfNURCX1NOQl9COwotCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVW RUxfMjoKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzI6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZfNkRCX1NO Ql9COwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMToKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiB8IERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl82MDBfODAw TVZfM181REJfU05CX0I7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19M RVZFTF8zIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQkJcmV0dXJuIEVEUF9MSU5LX1RS QUlOXzgwMF8xMjAwTVZfMERCX1NOQl9COwotCWRlZmF1bHQ6Ci0JCURSTV9ERUJVR19LTVMoIlVu c3VwcG9ydGVkIHZvbHRhZ2Ugc3dpbmcvcHJlLWVtcGhhc2lzIGxldmVsOiIKLQkJCSAgICAgICIw eCV4XG4iLCBzaWduYWxfbGV2ZWxzKTsKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBN Vl8wREJfU05CX0I7Ci0JfQotfQotCi0vKiBHZW43J3MgRFAgdm9sdGFnZSBzd2luZyBhbmQgcHJl LWVtcGhhc2lzIGNvbnRyb2wgKi8KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19lZHBfc2lnbmFsX2xl dmVscyh1aW50OF90IHRyYWluX3NldCkKLXsKLQlpbnQgc2lnbmFsX2xldmVscyA9IHRyYWluX3Nl dCAmIChEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0sgfAotCQkJCQkgRFBfVFJBSU5fUFJFX0VN UEhBU0lTX01BU0spOwotCXN3aXRjaCAoc2lnbmFsX2xldmVscykgewotCWNhc2UgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQkJcmV0 dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzBEQl9JVkI7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlyZXR1cm4gRURQ X0xJTktfVFJBSU5fNDAwTVZfM181REJfSVZCOwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoKLQkJcmV0dXJuIEVEUF9MSU5L X1RSQUlOXzQwME1WXzZEQl9JVkI7Ci0KLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMSB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJ Tl82MDBNVl8wREJfSVZCOwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwg RFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1W XzNfNURCX0lWQjsKLQotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBf VFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzgwME1WXzBE Ql9JVkI7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8xOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwTVZfM181REJfSVZC OwotCi0JZGVmYXVsdDoKLQkJRFJNX0RFQlVHX0tNUygiVW5zdXBwb3J0ZWQgdm9sdGFnZSBzd2lu Zy9wcmUtZW1waGFzaXMgbGV2ZWw6IgotCQkJICAgICAgIjB4JXhcbiIsIHNpZ25hbF9sZXZlbHMp OwotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNTAwTVZfMERCX0lWQjsKLQl9Ci19Ci0KLXZvaWQK LWludGVsX2RwX3NldF9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17 Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7Ci0JZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXVp bnQzMl90IHNpZ25hbF9sZXZlbHMsIG1hc2sgPSAwOwotCXVpbnQ4X3QgdHJhaW5fc2V0ID0gaW50 ZWxfZHAtPnRyYWluX3NldFswXTsKLQotCWlmIChIQVNfRERJKGRldikpIHsKLQkJc2lnbmFsX2xl dmVscyA9IGRkaV9zaWduYWxfbGV2ZWxzKGludGVsX2RwKTsKLQotCQlpZiAoSVNfQlJPWFRPTihk ZXYpKQotCQkJc2lnbmFsX2xldmVscyA9IDA7Ci0JCWVsc2UKLQkJCW1hc2sgPSBERElfQlVGX0VN UF9NQVNLOwotCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXYpKSB7Ci0JCXNpZ25hbF9sZXZl bHMgPSBjaHZfc2lnbmFsX2xldmVscyhpbnRlbF9kcCk7Ci0JfSBlbHNlIGlmIChJU19WQUxMRVlW SUVXKGRldikpIHsKLQkJc2lnbmFsX2xldmVscyA9IHZsdl9zaWduYWxfbGV2ZWxzKGludGVsX2Rw KTsKLQl9IGVsc2UgaWYgKElTX0dFTjcoZGV2KSAmJiBwb3J0ID09IFBPUlRfQSkgewotCQlzaWdu YWxfbGV2ZWxzID0gZ2VuN19lZHBfc2lnbmFsX2xldmVscyh0cmFpbl9zZXQpOwotCQltYXNrID0g RURQX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLX0lWQjsKLQl9IGVsc2UgaWYgKElTX0dFTjYoZGV2 KSAmJiBwb3J0ID09IFBPUlRfQSkgewotCQlzaWduYWxfbGV2ZWxzID0gZ2VuNl9lZHBfc2lnbmFs X2xldmVscyh0cmFpbl9zZXQpOwotCQltYXNrID0gRURQX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL X1NOQjsKLQl9IGVsc2UgewotCQlzaWduYWxfbGV2ZWxzID0gZ2VuNF9zaWduYWxfbGV2ZWxzKHRy YWluX3NldCk7Ci0JCW1hc2sgPSBEUF9WT0xUQUdFX01BU0sgfCBEUF9QUkVfRU1QSEFTSVNfTUFT SzsKLQl9Ci0KLQlpZiAobWFzaykKLQkJRFJNX0RFQlVHX0tNUygiVXNpbmcgc2lnbmFsIGxldmVs cyAlMDh4XG4iLCBzaWduYWxfbGV2ZWxzKTsKLQotCURSTV9ERUJVR19LTVMoIlVzaW5nIHZzd2lu ZyBsZXZlbCAlZFxuIiwKLQkJdHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNL KTsKLQlEUk1fREVCVUdfS01TKCJVc2luZyBwcmUtZW1waGFzaXMgbGV2ZWwgJWRcbiIsCi0JCSh0 cmFpbl9zZXQgJiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykgPj4KLQkJCURQX1RSQUlOX1BS RV9FTVBIQVNJU19TSElGVCk7Ci0KLQlpbnRlbF9kcC0+RFAgPSAoaW50ZWxfZHAtPkRQICYgfm1h c2spIHwgc2lnbmFsX2xldmVsczsKLQotCUk5MTVfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcs IGludGVsX2RwLT5EUCk7Ci0JUE9TVElOR19SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLX0K LQogdm9pZAogaW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwKIAkJCQkgICAgICAgdWludDhfdCBkcF90cmFpbl9wYXQpCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9zaWduYWxfbGV2ZWxzLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9zaWduYWxfbGV2ZWxzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxNmRkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX3NpZ25hbF9sZXZlbHMuYwpAQCAtMCwwICsxLDUzNCBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUg ImludGVsX2Rydi5oIgorCisvKiBUaGVzZSBhcmUgc291cmNlLXNwZWNpZmljIHZhbHVlcy4gKi8K K3VpbnQ4X3QKK2ludGVsX2RwX3ZvbHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+cG9ydDsKKworCWlm IChJU19CUk9YVE9OKGRldikpCisJCXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVM XzM7CisJZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkgeworCQlpZiAoZGV2X3By aXYtPmVkcF9sb3dfdnN3aW5nICYmIHBvcnQgPT0gUE9SVF9BKQorCQkJcmV0dXJuIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzsKKwkJcmV0dXJuIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMjsKKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkKKwkJcmV0dXJuIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzsKKwllbHNlIGlmIChJU19HRU43KGRldikgJiYgcG9y dCA9PSBQT1JUX0EpCisJCXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI7CisJ ZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2KSAmJiBwb3J0ICE9IFBPUlRfQSkKKwkJcmV0dXJuIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzsKKwllbHNlCisJCXJldHVybiBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX0xFVkVMXzI7Cit9CisKK3VpbnQ4X3QKK2ludGVsX2RwX3ByZV9lbXBoYXNp c19tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCB2b2x0YWdlX3N3aW5nKQor eworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwor CWVudW0gcG9ydCBwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5wb3J0OworCisJaWYg KElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpIHsKKwkJc3dpdGNoICh2b2x0YWdlX3N3aW5nICYg RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19MRVZFTF8wOgorCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM7CisJCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJcmV0dXJuIERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzI7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOgor CQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE7CisJCWNhc2UgRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8zOgorCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA7 CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDsKKwkJfQor CX0gZWxzZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7CisJCXN3 aXRjaCAodm9sdGFnZV9zd2luZyAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCXJldHVybiBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8zOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToK KwkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOworCQljYXNlIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMjoKKwkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJZGVmYXVsdDoKKwkJ CXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOworCQl9CisJfSBlbHNlIGlmIChJU19W QUxMRVlWSUVXKGRldikpIHsKKwkJc3dpdGNoICh2b2x0YWdlX3N3aW5nICYgRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8w OgorCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM7CisJCWNhc2UgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzI7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOgorCQkJcmV0dXJuIERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19M RVZFTF8zOgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA7 CisJCX0KKwl9IGVsc2UgaWYgKElTX0dFTjcoZGV2KSAmJiBwb3J0ID09IFBPUlRfQSkgeworCQlz d2l0Y2ggKHZvbHRhZ2Vfc3dpbmcgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKKwkJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6CisJCQlyZXR1cm4gRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMjsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6 CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOgorCQkJcmV0dXJuIERQX1RS QUlOX1BSRV9FTVBIX0xFVkVMXzE7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMDsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAodm9sdGFnZV9zd2luZyAm IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTEVWRUxfMDoKKwkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOworCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCXJldHVybiBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8yOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoK KwkJCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOworCQljYXNlIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8wOworCQl9CisJfQorfQorCitzdGF0aWMgdWludDMyX3Qgdmx2X3NpZ25hbF9s ZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmRwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOworCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0KKwkJdG9faW50ZWxfY3J0YyhkcG9ydC0+YmFzZS5iYXNlLmNydGMpOwor CXVuc2lnbmVkIGxvbmcgZGVtcGhfcmVnX3ZhbHVlLCBwcmVlbXBoX3JlZ192YWx1ZSwKKwkJdW5p cXRyYW5zY2FsZV9yZWdfdmFsdWU7CisJdWludDhfdCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJh aW5fc2V0WzBdOworCWVudW0gZHBpb19jaGFubmVsIHBvcnQgPSB2bHZfZHBvcnRfdG9fY2hhbm5l bChkcG9ydCk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCisJc3dpdGNoICh0cmFp bl9zZXQgJiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykgeworCWNhc2UgRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMDoKKwkJcHJlZW1waF9yZWdfdmFsdWUgPSAweDAwMDQwMDA7CisJCXN3aXRj aCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQw NTU1NTsKKwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTJBQjgzQTsKKwkJCWJyZWFr OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlbXBoX3JlZ192 YWx1ZSA9IDB4MkI0MDQwNDA7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU0OEI4 M0E7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6CisJ CQlkZW1waF9yZWdfdmFsdWUgPSAweDJCMjQ1NTU1OworCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFs dWUgPSAweDU1NjBCODNBOworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8zOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQwNTU1NTsKKwkJCXVuaXF0cmFu c2NhbGVfcmVnX3ZhbHVlID0gMHg1NTk4REEzQTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ cmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x OgorCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwMjAwMDsKKwkJc3dpdGNoICh0cmFpbl9zZXQg JiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzA6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQwOworCQkJdW5p cXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1NTJCODNBOworCQkJYnJlYWs7CisJCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQw NDg0ODsKKwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTgwQjgzQTsKKwkJCWJyZWFr OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKKwkJCWRlbXBoX3JlZ192 YWx1ZSA9IDB4MkI0MDQwNDA7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTVBRERB M0E7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOwor CWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoKKwkJcHJlZW1waF9yZWdfdmFsdWUgPSAw eDAwMDAwMDA7CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19N QVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJZGVtcGhf cmVnX3ZhbHVlID0gMHgyQjMwNTU1NTsKKwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1 NTcwQjgzQTsKKwkJCWJyZWFrOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxf MToKKwkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIyQjQwNDA7CisJCQl1bmlxdHJhbnNjYWxlX3Jl Z192YWx1ZSA9IDB4NTVBRERBM0E7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAw OworCQl9CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMzoKKwkJcHJl ZW1waF9yZWdfdmFsdWUgPSAweDAwMDYwMDA7CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19M RVZFTF8wOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgxQjQwNTU1NTsKKwkJCXVuaXF0cmFuc2Nh bGVfcmVnX3ZhbHVlID0gMHg1NUFEREEzQTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0 dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJbXV0 ZXhfbG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBWTFZfVFhfRFc1KHBvcnQpLCAweDAwMDAwMDAwKTsKKwl2bHZfZHBpb193cml0ZShkZXZf cHJpdiwgcGlwZSwgVkxWX1RYX0RXNChwb3J0KSwgZGVtcGhfcmVnX3ZhbHVlKTsKKwl2bHZfZHBp b193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1RYX0RXMihwb3J0KSwKKwkJCSB1bmlxdHJhbnNj YWxlX3JlZ192YWx1ZSk7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9UWF9E VzMocG9ydCksIDB4MEM3ODIwNDApOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBW TFZfUENTX0RXMTEocG9ydCksIDB4MDAwMzAwMDApOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBWTFZfUENTX0RXOShwb3J0KSwgcHJlZW1waF9yZWdfdmFsdWUpOworCXZsdl9kcGlv X3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfVFhfRFc1KHBvcnQpLCAweDgwMDAwMDAwKTsKKwlt dXRleF91bmxvY2soJmRldl9wcml2LT5zYl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgYm9vbCBjaHZfbmVlZF91bmlxX3RyYW5zX3NjYWxlKHVpbnQ4X3QgdHJhaW5fc2V0KQorewor CXJldHVybiAodHJhaW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spID09IERQX1RS QUlOX1BSRV9FTVBIX0xFVkVMXzAgJiYKKwkJKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTUFTSykgPT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8zOworfQorCitzdGF0 aWMgdWludDMyX3QgY2h2X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK K3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhkcG9y dC0+YmFzZS5iYXNlLmNydGMpOworCXUzMiBkZWVtcGhfcmVnX3ZhbHVlLCBtYXJnaW5fcmVnX3Zh bHVlLCB2YWw7CisJdWludDhfdCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJhaW5fc2V0WzBdOwor CWVudW0gZHBpb19jaGFubmVsIGNoID0gdmx2X2Rwb3J0X3RvX2NoYW5uZWwoZHBvcnQpOworCWVu dW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpbnQgaTsKKworCXN3aXRjaCAodHJh aW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spIHsKKwljYXNlIERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzA6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJ ZGVlbXBoX3JlZ192YWx1ZSA9IDEyODsKKwkJCW1hcmdpbl9yZWdfdmFsdWUgPSA1MjsKKwkJCWJy ZWFrOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlZW1waF9y ZWdfdmFsdWUgPSAxMjg7CisJCQltYXJnaW5fcmVnX3ZhbHVlID0gNzc7CisJCQlicmVhazsKKwkJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6CisJCQlkZWVtcGhfcmVnX3ZhbHVl ID0gMTI4OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDEwMjsKKwkJCWJyZWFrOworCQljYXNlIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7 CisJCQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OworCQkJLyogRklYTUUgZXh0cmEgdG8gc2V0IGZv ciAxMjAwICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJCWJy ZWFrOworCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKKwkJc3dpdGNoICh0cmFpbl9z ZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKKwkJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzA6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gODU7CisJCQltYXJnaW5f cmVnX3ZhbHVlID0gNzg7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzE6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gODU7CisJCQltYXJnaW5fcmVnX3ZhbHVl ID0gMTE2OworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8y OgorCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDg1OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDE1NDsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2Fz ZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMDoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSA2NDsKKwkJCW1hcmdpbl9yZWdfdmFsdWUg PSAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6 CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gNjQ7CisJCQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0Owor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwljYXNl IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19M RVZFTF8wOgorCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDQzOworCQkJbWFyZ2luX3JlZ192YWx1ZSA9 IDE1NDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnNi X2xvY2spOworCisJLyogQ2xlYXIgY2FsYyBpbml0ICovCisJdmFsID0gdmx2X2RwaW9fcmVhZChk ZXZfcHJpdiwgcGlwZSwgVkxWX1BDUzAxX0RXMTAoY2gpKTsKKwl2YWwgJj0gfihEUElPX1BDU19T V0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDMpOworCXZhbCAm PSB+KERQSU9fUENTX1RYMURFRU1QX01BU0sgfCBEUElPX1BDU19UWDJERUVNUF9NQVNLKTsKKwl2 YWwgfD0gRFBJT19QQ1NfVFgxREVFTVBfOVA1IHwgRFBJT19QQ1NfVFgyREVFTVBfOVA1OworCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMDFfRFcxMChjaCksIHZhbCk7CisK KwlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5sYW5lX2NvdW50ID4gMikgeworCQl2YWwgPSB2bHZf ZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCkpOworCQl2YWwgJj0g fihEUElPX1BDU19TV0lOR19DQUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9U WDMpOworCQl2YWwgJj0gfihEUElPX1BDU19UWDFERUVNUF9NQVNLIHwgRFBJT19QQ1NfVFgyREVF TVBfTUFTSyk7CisJCXZhbCB8PSBEUElPX1BDU19UWDFERUVNUF85UDUgfCBEUElPX1BDU19UWDJE RUVNUF85UDU7CisJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcx MChjaCksIHZhbCk7CisJfQorCisJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwg VkxWX1BDUzAxX0RXOShjaCkpOworCXZhbCAmPSB+KERQSU9fUENTX1RYMU1BUkdJTl9NQVNLIHwg RFBJT19QQ1NfVFgyTUFSR0lOX01BU0spOworCXZhbCB8PSBEUElPX1BDU19UWDFNQVJHSU5fMDAw IHwgRFBJT19QQ1NfVFgyTUFSR0lOXzAwMDsKKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgVkxWX1BDUzAxX0RXOShjaCksIHZhbCk7CisKKwlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5s YW5lX2NvdW50ID4gMikgeworCQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBW TFZfUENTMjNfRFc5KGNoKSk7CisJCXZhbCAmPSB+KERQSU9fUENTX1RYMU1BUkdJTl9NQVNLIHwg RFBJT19QQ1NfVFgyTUFSR0lOX01BU0spOworCQl2YWwgfD0gRFBJT19QQ1NfVFgxTUFSR0lOXzAw MCB8IERQSU9fUENTX1RYMk1BUkdJTl8wMDA7CisJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBWTFZfUENTMjNfRFc5KGNoKSwgdmFsKTsKKwl9CisKKwkvKiBQcm9ncmFtIHN3aW5nIGRl ZW1waCAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9jcnRjLT5jb25maWctPmxhbmVfY291bnQ7 IGkrKykgeworCQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFc0 KGNoLCBpKSk7CisJCXZhbCAmPSB+RFBJT19TV0lOR19ERUVNUEg5UDVfTUFTSzsKKwkJdmFsIHw9 IGRlZW1waF9yZWdfdmFsdWUgPDwgRFBJT19TV0lOR19ERUVNUEg5UDVfU0hJRlQ7CisJCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfVFhfRFc0KGNoLCBpKSwgdmFsKTsKKwl9CisK KwkvKiBQcm9ncmFtIHN3aW5nIG1hcmdpbiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9jcnRj LT5jb25maWctPmxhbmVfY291bnQ7IGkrKykgeworCQl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBDSFZfVFhfRFcyKGNoLCBpKSk7CisKKwkJdmFsICY9IH5EUElPX1NXSU5HX01B UkdJTjAwMF9NQVNLOworCQl2YWwgfD0gbWFyZ2luX3JlZ192YWx1ZSA8PCBEUElPX1NXSU5HX01B UkdJTjAwMF9TSElGVDsKKworCQkvKgorCQkgKiBTdXBwb3NlZGx5IHRoaXMgdmFsdWUgc2hvdWxk bid0IG1hdHRlciB3aGVuIHVuaXF1ZSB0cmFuc2l0aW9uCisJCSAqIHNjYWxlIGlzIGRpc2FibGVk LCBidXQgaW4gZmFjdCBpdCBkb2VzIG1hdHRlci4gTGV0J3MganVzdAorCQkgKiBhbHdheXMgcHJv Z3JhbSB0aGUgc2FtZSB2YWx1ZSBhbmQgaG9wZSBpdCdzIE9LLgorCQkgKi8KKwkJdmFsICY9IH4o MHhmZiA8PCBEUElPX1VOSVFfVFJBTlNfU0NBTEVfU0hJRlQpOworCQl2YWwgfD0gMHg5YSA8PCBE UElPX1VOSVFfVFJBTlNfU0NBTEVfU0hJRlQ7CisKKwkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYs IHBpcGUsIENIVl9UWF9EVzIoY2gsIGkpLCB2YWwpOworCX0KKworCS8qCisJICogVGhlIGRvY3Vt ZW50IHNhaWQgaXQgbmVlZHMgdG8gc2V0IGJpdCAyNyBmb3IgY2gwIGFuZCBiaXQgMjYKKwkgKiBm b3IgY2gxLiBNaWdodCBiZSBhIHR5cG8gaW4gdGhlIGRvYy4KKwkgKiBGb3Igbm93LCBmb3IgdGhp cyB1bmlxdWUgdHJhbnNpdGlvbiBzY2FsZSBzZWxlY3Rpb24sIHNldCBiaXQKKwkgKiAyNyBmb3Ig Y2gwIGFuZCBjaDEuCisJICovCisJZm9yIChpID0gMDsgaSA8IGludGVsX2NydGMtPmNvbmZpZy0+ bGFuZV9jb3VudDsgaSsrKSB7CisJCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUs IENIVl9UWF9EVzMoY2gsIGkpKTsKKwkJaWYgKGNodl9uZWVkX3VuaXFfdHJhbnNfc2NhbGUodHJh aW5fc2V0KSkKKwkJCXZhbCB8PSBEUElPX1RYX1VOSVFfVFJBTlNfU0NBTEVfRU47CisJCWVsc2UK KwkJCXZhbCAmPSB+RFBJT19UWF9VTklRX1RSQU5TX1NDQUxFX0VOOworCQl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1RYX0RXMyhjaCwgaSksIHZhbCk7CisJfQorCisJLyogU3Rh cnQgc3dpbmcgY2FsY3VsYXRpb24gKi8KKwl2YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBw aXBlLCBWTFZfUENTMDFfRFcxMChjaCkpOworCXZhbCB8PSBEUElPX1BDU19TV0lOR19DQUxDX1RY MF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDM7CisJdmx2X2RwaW9fd3JpdGUoZGV2 X3ByaXYsIHBpcGUsIFZMVl9QQ1MwMV9EVzEwKGNoKSwgdmFsKTsKKworCWlmIChpbnRlbF9jcnRj LT5jb25maWctPmxhbmVfY291bnQgPiAyKSB7CisJCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3By aXYsIHBpcGUsIFZMVl9QQ1MyM19EVzEwKGNoKSk7CisJCXZhbCB8PSBEUElPX1BDU19TV0lOR19D QUxDX1RYMF9UWDIgfCBEUElPX1BDU19TV0lOR19DQUxDX1RYMV9UWDM7CisJCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUENTMjNfRFcxMChjaCksIHZhbCk7CisJfQorCisJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHVpbnQzMl90CitnZW40X3NpZ25hbF9sZXZlbHModWludDhfdCB0cmFpbl9zZXQpCit7CisJdWlu dDMyX3QJc2lnbmFsX2xldmVscyA9IDA7CisKKwlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZF TF8wOgorCWRlZmF1bHQ6CisJCXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8wXzQ7CisJCWJy ZWFrOworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQlzaWduYWxfbGV2 ZWxzIHw9IERQX1ZPTFRBR0VfMF82OworCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTEVWRUxfMjoKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfODsKKwkJYnJl YWs7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6CisJCXNpZ25hbF9sZXZl bHMgfD0gRFBfVk9MVEFHRV8xXzI7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHRyYWluX3NldCAm IERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9M RVZFTF8wOgorCWRlZmF1bHQ6CisJCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzA7 CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKKwkJc2lnbmFsX2xl dmVscyB8PSBEUF9QUkVfRU1QSEFTSVNfM181OworCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzI6CisJCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzY7CisJ CWJyZWFrOworCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMzoKKwkJc2lnbmFsX2xldmVs cyB8PSBEUF9QUkVfRU1QSEFTSVNfOV81OworCQlicmVhazsKKwl9CisJcmV0dXJuIHNpZ25hbF9s ZXZlbHM7Cit9CisKKy8qIEdlbjYncyBEUCB2b2x0YWdlIHN3aW5nIGFuZCBwcmUtZW1waGFzaXMg Y29udHJvbCAqLworc3RhdGljIHVpbnQzMl90CitnZW42X2VkcF9zaWduYWxfbGV2ZWxzKHVpbnQ4 X3QgdHJhaW5fc2V0KQoreworCWludCBzaWduYWxfbGV2ZWxzID0gdHJhaW5fc2V0ICYgKERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTUFTSyB8CisJCQkJCSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFT Syk7CisJc3dpdGNoIChzaWduYWxfbGV2ZWxzKSB7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgorCWNhc2UgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKKwkJcmV0 dXJuIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBNVl8wREJfU05CX0I7CisJY2FzZSBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgorCQlyZXR1 cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfM181REJfU05CX0I7CisJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoK KwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBNVl82REJfU05CX0I7CisJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgor CWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBfVFJBSU5fUFJFX0VNUEhf TEVWRUxfMToKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwMF84MDBNVl8zXzVEQl9TTkJfQjsK KwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiB8IERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzA6CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzMgfCBEUF9UUkFJ Tl9QUkVfRU1QSF9MRVZFTF8wOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwXzEyMDBNVl8w REJfU05CX0I7CisJZGVmYXVsdDoKKwkJRFJNX0RFQlVHX0tNUygiVW5zdXBwb3J0ZWQgdm9sdGFn ZSBzd2luZy9wcmUtZW1waGFzaXMgbGV2ZWw6IgorCQkJICAgICAgIjB4JXhcbiIsIHNpZ25hbF9s ZXZlbHMpOworCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzBEQl9TTkJfQjsKKwl9 Cit9CisKKy8qIEdlbjcncyBEUCB2b2x0YWdlIHN3aW5nIGFuZCBwcmUtZW1waGFzaXMgY29udHJv bCAqLworc3RhdGljIHVpbnQzMl90CitnZW43X2VkcF9zaWduYWxfbGV2ZWxzKHVpbnQ4X3QgdHJh aW5fc2V0KQoreworCWludCBzaWduYWxfbGV2ZWxzID0gdHJhaW5fc2V0ICYgKERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTUFTSyB8CisJCQkJCSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSyk7CisJ c3dpdGNoIChzaWduYWxfbGV2ZWxzKSB7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xF VkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgorCQlyZXR1cm4gRURQX0xJTktfVFJB SU5fNDAwTVZfMERCX0lWQjsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8 IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBN Vl8zXzVEQl9JVkI7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9U UkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfNkRC X0lWQjsKKworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMDoKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1WXzBEQl9JVkI7 CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8xOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNjAwTVZfM181REJfSVZCOworCisJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9M RVZFTF8wOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwTVZfMERCX0lWQjsKKwljYXNlIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6 CisJCXJldHVybiBFRFBfTElOS19UUkFJTl84MDBNVl8zXzVEQl9JVkI7CisKKwlkZWZhdWx0Ogor CQlEUk1fREVCVUdfS01TKCJVbnN1cHBvcnRlZCB2b2x0YWdlIHN3aW5nL3ByZS1lbXBoYXNpcyBs ZXZlbDoiCisJCQkgICAgICAiMHgleFxuIiwgc2lnbmFsX2xldmVscyk7CisJCXJldHVybiBFRFBf TElOS19UUkFJTl81MDBNVl8wREJfSVZCOworCX0KK30KKwordm9pZAoraW50ZWxfZHBfc2V0X3Np Z25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsK KwllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5wb3J0OworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJdWludDMyX3Qgc2lnbmFsX2xl dmVscywgbWFzayA9IDA7CisJdWludDhfdCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJhaW5fc2V0 WzBdOworCisJaWYgKEhBU19EREkoZGV2KSkgeworCQlzaWduYWxfbGV2ZWxzID0gZGRpX3NpZ25h bF9sZXZlbHMoaW50ZWxfZHApOworCisJCWlmIChJU19CUk9YVE9OKGRldikpCisJCQlzaWduYWxf bGV2ZWxzID0gMDsKKwkJZWxzZQorCQkJbWFzayA9IERESV9CVUZfRU1QX01BU0s7CisJfSBlbHNl IGlmIChJU19DSEVSUllWSUVXKGRldikpIHsKKwkJc2lnbmFsX2xldmVscyA9IGNodl9zaWduYWxf bGV2ZWxzKGludGVsX2RwKTsKKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgeworCQlz aWduYWxfbGV2ZWxzID0gdmx2X3NpZ25hbF9sZXZlbHMoaW50ZWxfZHApOworCX0gZWxzZSBpZiAo SVNfR0VONyhkZXYpICYmIHBvcnQgPT0gUE9SVF9BKSB7CisJCXNpZ25hbF9sZXZlbHMgPSBnZW43 X2VkcF9zaWduYWxfbGV2ZWxzKHRyYWluX3NldCk7CisJCW1hc2sgPSBFRFBfTElOS19UUkFJTl9W T0xfRU1QX01BU0tfSVZCOworCX0gZWxzZSBpZiAoSVNfR0VONihkZXYpICYmIHBvcnQgPT0gUE9S VF9BKSB7CisJCXNpZ25hbF9sZXZlbHMgPSBnZW42X2VkcF9zaWduYWxfbGV2ZWxzKHRyYWluX3Nl dCk7CisJCW1hc2sgPSBFRFBfTElOS19UUkFJTl9WT0xfRU1QX01BU0tfU05COworCX0gZWxzZSB7 CisJCXNpZ25hbF9sZXZlbHMgPSBnZW40X3NpZ25hbF9sZXZlbHModHJhaW5fc2V0KTsKKwkJbWFz ayA9IERQX1ZPTFRBR0VfTUFTSyB8IERQX1BSRV9FTVBIQVNJU19NQVNLOworCX0KKworCWlmICht YXNrKQorCQlEUk1fREVCVUdfS01TKCJVc2luZyBzaWduYWwgbGV2ZWxzICUwOHhcbiIsIHNpZ25h bF9sZXZlbHMpOworCisJRFJNX0RFQlVHX0tNUygiVXNpbmcgdnN3aW5nIGxldmVsICVkXG4iLAor CQl0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spOworCURSTV9ERUJVR19L TVMoIlVzaW5nIHByZS1lbXBoYXNpcyBsZXZlbCAlZFxuIiwKKwkJKHRyYWluX3NldCAmIERQX1RS QUlOX1BSRV9FTVBIQVNJU19NQVNLKSA+PgorCQkJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZU KTsKKworCWludGVsX2RwLT5EUCA9IChpbnRlbF9kcC0+RFAgJiB+bWFzaykgfCBzaWduYWxfbGV2 ZWxzOworCisJSTkxNV9XUklURShpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsK KwlQT1NUSU5HX1JFQUQoaW50ZWxfZHAtPm91dHB1dF9yZWcpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcnYuaAppbmRleCAzMDIxZTQwLi5kNzU4ZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aApAQCAtOTIyLDYgKzkyMiwxMyBAQCBkcF90b19kaWdfcG9ydChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQogCXJldHVybiBjb250YWluZXJfb2YoaW50ZWxfZHAsIHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQsIGRwKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2RldmljZSAqaW50 ZWxfZHBfdG9fZGV2KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7 CisKKwlyZXR1cm4gaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7Cit9CisKIHN0YXRpYyBp bmxpbmUgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqCiBoZG1pX3RvX2RpZ19wb3J0KHN0cnVj dCBpbnRlbF9oZG1pICppbnRlbF9oZG1pKQogewotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==