From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5CC3AC433FE for ; Fri, 11 Dec 2020 07:29:49 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F289223B26 for ; Fri, 11 Dec 2020 07:29:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F289223B26 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 82CA46EC70; Fri, 11 Dec 2020 07:29:44 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC05F6EC88 for ; Fri, 11 Dec 2020 07:29:36 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-210-3K_1u7aiP_SWH-jDJVEMGQ-1; Fri, 11 Dec 2020 02:29:33 -0500 X-MC-Unique: 3K_1u7aiP_SWH-jDJVEMGQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D32046D521 for ; Fri, 11 Dec 2020 07:29:32 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 459A260862 for ; Fri, 11 Dec 2020 07:29:32 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 11 Dec 2020 17:29:18 +1000 Message-Id: <20201211072922.19101-8-airlied@gmail.com> In-Reply-To: <20201211072922.19101-1-airlied@gmail.com> References: <20201211072922.19101-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 07/11] drm/i915: split fdi code out from intel_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMganVzdCByZWZhY3Rv cnMgb3V0IHRoZSBmZGkgY29kZSB0byBhIHNlcGFyYXRlIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBE YXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCA2ODUgKy0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDkgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYyAgICAgIHwgNjgzICsrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5oICAgICAgfCAgMjEg KwogNSBmaWxlcyBjaGFuZ2VkLCA3MTcgaW5zZXJ0aW9ucygrKSwgNjgyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRp LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2ZkaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA1ZDUzM2RlMTYzMzUuLmM0NmMxOWE0ZTgz MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIwNiw2ICsyMDYsNyBAQCBpOTE1LXkgKz0gXAog CWRpc3BsYXkvaW50ZWxfZHBsbF9tZ3IubyBcCiAJZGlzcGxheS9pbnRlbF9kc2IubyBcCiAJZGlz cGxheS9pbnRlbF9mYmMubyBcCisJZGlzcGxheS9pbnRlbF9mZGkubyBcCiAJZGlzcGxheS9pbnRl bF9maWZvX3VuZGVycnVuLm8gXAogCWRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcCiAJZGlz cGxheS9pbnRlbF9nbG9iYWxfc3RhdGUubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IGEwZDljZDdiNGUzNC4uYjU4MjExNGE5ZDYzIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNzQsNiAr NzQsNyBAQAogI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRl bF9kcF9saW5rX3RyYWluaW5nLmgiCiAjaW5jbHVkZSAiaW50ZWxfZmJjLmgiCisjaW5jbHVkZSAi aW50ZWxfZmRpLmgiCiAjaW5jbHVkZSAiaW50ZWxfZmJkZXYuaCIKICNpbmNsdWRlICJpbnRlbF9m aWZvX3VuZGVycnVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKQEAgLTE3Miwx NiArMTczLDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2N6Y2xrKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIAkJZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwogfQogCi0vKiB1 bml0cyBvZiAxMDBNSHogKi8KLXN0YXRpYyB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCWlmIChIQVNfRERJKGRldl9wcml2KSkKLQkJ cmV0dXJuIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrOyAvKiBTUExMICovCi0JZWxzZQotCQlyZXR1 cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsKLX0KLQogLyogV0EgRGlzcGxheSAjMDgyNzogR2Vu OTphbGwgKi8KIHN0YXRpYyB2b2lkCiBza2xfd2FfODI3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsIGJvb2wgZW5hYmxlKQpAQCAtMzc2Niw1MzIgKzM3 NTcsNiBAQCBzdGF0aWMgdm9pZCBpY2xfc2V0X3BpcGVfY2hpY2tlbihzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKIAlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUElQRV9DSElDS0VOKHBpcGUpLCB0 bXApOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0J ZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1w OwotCi0JLyogZW5hYmxlIG5vcm1hbCB0cmFpbiAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7 Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKElTX0lWWUJSSURH RShkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7Ci0JCXRl bXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORV9JVkIgfCBGRElfVFhfRU5IQU5DRV9GUkFNRV9FTkFC TEU7Ci0JfSBlbHNlIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8 PSBGRElfTElOS19UUkFJTl9OT05FIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOwotCX0K LQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCXJlZyA9IEZESV9SWF9D VEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKEhB U19QQ0hfQ1BUKGRldl9wcml2KSkgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJO X01BU0tfQ1BUOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PUk1BTF9DUFQ7Ci0JfSBlbHNl IHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19U UkFJTl9OT05FOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJ X1JYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFKTsKLQotCS8qIHdhaXQgb25lIGlkbGUgcGF0dGVybiB0 aW1lICovCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgx MDAwKTsKLQotCS8qIElWQiB3YW50cyBlcnJvciBjb3JyZWN0aW9uIGVuYWJsZWQgKi8KLQlpZiAo SVNfSVZZQlJJREdFKGRldl9wcml2KSkKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywK LQkJICAgICAgICAgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19F UlJDX0VOQUJMRSB8IEZESV9GRV9FUlJDX0VOQUJMRSk7Ci19Ci0KLS8qIFRoZSBGREkgbGluayB0 cmFpbmluZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KLXN0YXRpYyB2b2lkIGlsa19m ZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlpOTE1 X3JlZ190IHJlZzsKLQl1MzIgdGVtcCwgdHJpZXM7Ci0KLQkvKiBGREkgbmVlZHMgYml0cyBmcm9t IHBpcGUgZmlyc3QgKi8KLQlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRl LT5jcHVfdHJhbnNjb2Rlcik7Ci0KLQkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0 IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKLQkgICBmb3IgdHJhaW4gcmVzdWx0ICovCi0J cmVnID0gRkRJX1JYX0lNUihwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKLQl0ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7Ci0JdGVtcCAmPSB+RkRJX1JYX0JJ VF9MT0NLOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCWludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQkvKiBlbmFibGUgQ1BVIEZE SSBUWCBhbmQgUENIIEZESSBSWCAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lE VEhfTUFTSzsKLQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5l cyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX1BBVFRFUk5fMTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJ X1RYX0VOQUJMRSk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0J dGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JLyogSXJvbmxha2Ugd29ya2Fyb3Vu ZCwgZW5hYmxlIGNsb2NrIHBvaW50ZXIgYWZ0ZXIgRkRJIGVuYWJsZSovCi0JaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAotCQkgICAgICAgRkRJX1JYX1BIQVNF X1NZTkNfUE9JTlRFUl9PVlIpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJ Q0tFTihwaXBlKSwKLQkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJ X1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTik7Ci0KLQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwot CWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKLQkJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJ X1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKLQotCQlpZiAoKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sp KSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4i KTsKLQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xP Q0spOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHRyaWVzID09IDUpCi0JCWRybV9lcnIoJmRl dl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBmYWlsIVxuIik7Ci0KLQkvKiBUcmFpbiAyICovCi0J cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8yOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwot Ci0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJ TktfVFJBSU5fUEFUVEVSTl8yOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAp OwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTAp OwotCi0JcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKLQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1 OyB0cmllcysrKSB7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Ci0K LQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKLQkJCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsCi0JCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwotCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMiBkb25lLlxuIik7Ci0JCQli cmVhazsKLQkJfQotCX0KLQlpZiAodHJpZXMgPT0gNSkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRy bSwgIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRkRJIHRyYWluIGRvbmVcbiIpOwotCi19Ci0KLXN0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRp X3RyYWluX3BhcmFtW10gPSB7Ci0JRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9CLAotCUZE SV9MSU5LX1RSQUlOXzQwME1WXzZEQl9TTkJfQiwKLQlGRElfTElOS19UUkFJTl82MDBNVl8zXzVE Ql9TTkJfQiwKLQlGRElfTElOS19UUkFJTl84MDBNVl8wREJfU05CX0IsCi19OwotCi0vKiBUaGUg RkRJIGxpbmsgdHJhaW5pbmcgZnVuY3Rpb25zIGZvciBTTkIvQ291Z2FycG9pbnQuICovCi1zdGF0 aWMgdm9pZCBnZW42X2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJ CWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBl OwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1wLCBpLCByZXRyeTsKLQotCS8qIFRyYWluIDE6 IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAotCSAg IGZvciB0cmFpbiByZXN1bHQgKi8KLQlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOwotCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9D SzsKLQl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0J dWRlbGF5KDE1MCk7Ci0KLQkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLwot CXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7Ci0JdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKLQl0ZW1wIHw9IEZESV9E UF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktf VFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Ci0JLyogU05CLUIgKi8KLQl0ZW1wIHw9IEZE SV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQjsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg RkRJX1JYX01JU0MocGlwZSksCi0JCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9S WF9GRElfREVMQVlfOTApOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7 Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKLQl9IGVsc2UgewotCQl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9OT05FOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQl9 Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwot Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwot Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwot CQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fVk9MX0VNUF9NQVNLOwotCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtp XTsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoNTAwKTsKLQotCQlmb3IgKHJl dHJ5ID0gMDsgcmV0cnkgPCA1OyByZXRyeSsrKSB7Ci0JCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUp OwotCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Ci0JCQlpZiAodGVt cCAmIEZESV9SWF9CSVRfTE9DSykgewotCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs Ci0JCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsKLQkJCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKLQkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7Ci0JCQkJYnJl YWs7Ci0JCQl9Ci0JCQl1ZGVsYXkoNTApOwotCQl9Ci0JCWlmIChyZXRyeSA8IDUpCi0JCQlicmVh azsKLQl9Ci0JaWYgKGkgPT0gNCkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFp biAxIGZhaWwhXG4iKTsKLQotCS8qIFRyYWluIDIgKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUp OwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Ci0JaWYg KElTX0dFTihkZXZfcHJpdiwgNikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VN UF9NQVNLOwotCQkvKiBTTkItQiAqLwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBE Ql9TTkJfQjsKLQl9Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQly ZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwotCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktf VFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJO XzJfQ1BUOwotCX0gZWxzZSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JCXRl bXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKLQl1ZGVsYXkoMTUwKTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVnID0g RkRJX1RYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKLQkJdGVtcCB8PSBzbmJf Yl9mZGlfdHJhaW5fcGFyYW1baV07Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRl bXApOwotCi0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5 KDUwMCk7Ci0KLQkJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewotCQkJcmVn ID0gRkRJX1JYX0lJUihwaXBlKTsKLQkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIs IHRlbXApOwotCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKLQkJCQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVnLAotCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xf TE9DSyk7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAgICAiRkRJIHRy YWluIDIgZG9uZS5cbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDUwKTsKLQkJfQot CQlpZiAocmV0cnkgPCA1KQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IDQpCi0JCWRybV9lcnIo JmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMiBmYWlsIVxuIik7Ci0KLQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Ci19Ci0KLS8qIE1hbnVhbCBsaW5r IHRyYWluaW5nIGZvciBJdnkgQnJpZGdlIEEwIHBhcnRzICovCi1zdGF0aWMgdm9pZCBpdmJfbWFu dWFsX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwot CWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1wLCBpLCBqOwotCi0JLyogVHJhaW4gMTogdW1hc2sg RkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0Ci0JICAgZm9yIHRy YWluIHJlc3VsdCAqLwotCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7Ci0JdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwotCXRl bXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXko MTUwKTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZvcmUg bGluayB0cmFpbiAweCV4XG4iLAotCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRkRJX1JY X0lJUihwaXBlKSkpOwotCi0JLyogVHJ5IGVhY2ggdnN3aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0 aW5nIHR3aWNlIGJlZm9yZSBtb3Zpbmcgb24gKi8KLQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0la RShzbmJfYl9mZGlfdHJhaW5fcGFyYW0pICogMjsgaisrKSB7Ci0JCS8qIGRpc2FibGUgZmlyc3Qg aW4gY2FzZSB3ZSBuZWVkIHRvIHJldHJ5ICovCi0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0J CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH4oRkRJX0xJ TktfVFJBSU5fQVVUTyB8IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCKTsKLQkJdGVtcCAmPSB+RkRJ X1RYX0VOQUJMRTsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJ cmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX0FVVE87Ci0JCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgJj0gfkZESV9SWF9FTkFCTEU7Ci0J CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JCS8qIGVuYWJsZSBDUFUg RkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCi0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JCXRl bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH5GRElfRFBfUE9S VF9XSURUSF9NQVNLOwotCQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZk aV9sYW5lcyk7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lWQjsKLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwotCQl0ZW1wIHw9IHNuYl9iX2ZkaV90 cmFpbl9wYXJhbVtqLzJdOwotCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lOQzsKLQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9FTkFCTEUpOwotCi0JCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKLQkJCSAgICAgICBGRElfUlhf VFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElfREVMQVlfOTApOwotCi0JCXJlZyA9IEZESV9SWF9D VEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7Ci0JCXRlbXAgfD0gRkRJX0NPTVBPU0lU RV9TWU5DOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VO QUJMRSk7Ci0KLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVs YXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKysp IHsKLQkJCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJ UiAweCV4XG4iLCB0ZW1wKTsKLQotCQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKLQkJ CSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsK LQkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAotCQkJCQkgICAgICAgdGVtcCB8IEZE SV9SWF9CSVRfTE9DSyk7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAg ICAiRkRJIHRyYWluIDEgZG9uZSwgbGV2ZWwgJWkuXG4iLAotCQkJCQkgICAgaSk7Ci0JCQkJYnJl YWs7Ci0JCQl9Ci0JCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLwotCQl9Ci0JCWlm IChpID09IDQpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiRkRJ IHRyYWluIDEgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKLQkJCWNvbnRpbnVlOwotCQl9 Ci0KLQkJLyogVHJhaW4gMiAqLwotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Tk9ORV9JVkI7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKLQkJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0g fkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJB SU5fUEFUVEVSTl8yX0NQVDsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7 Ci0KLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoMik7 IC8qIHNob3VsZCBiZSAxLjV1cyAqLwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJ CXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4 XG4iLCB0ZW1wKTsKLQotCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0sgfHwKLQkJCSAg ICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsK LQkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAotCQkJCQkgICAgICAgdGVtcCB8IEZE SV9SWF9TWU1CT0xfTE9DSyk7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJ CSAgICAiRkRJIHRyYWluIDIgZG9uZSwgbGV2ZWwgJWkuXG4iLAotCQkJCQkgICAgaSk7Ci0JCQkJ Z290byB0cmFpbl9kb25lOwotCQkJfQotCQkJdWRlbGF5KDIpOyAvKiBzaG91bGQgYmUgMS41dXMg Ki8KLQkJfQotCQlpZiAoaSA9PSA0KQotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkJICAgICJGREkgdHJhaW4gMiBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOwotCX0KLQot dHJhaW5fZG9uZToKLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25l LlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGlsa19mZGlfcGxsX2VuYWJsZShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGludGVsX2NydGMtPmJhc2UuZGV2 KTsKLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7 Ci0JdTMyIHRlbXA7Ci0KLQkvKiBlbmFibGUgUENIIEZESSBSWCBQTEwsIHdhaXQgd2FybXVwIHBs dXMgRE1JIGxhdGVuY3kgKi8KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfihGRElfRFBfUE9SVF9XSURUSF9N QVNLIHwgKDB4NyA8PCAxNikpOwotCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0 ZS0+ZmRpX2xhbmVzKTsKLQl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09O RihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9QTExfRU5BQkxFKTsKLQotCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMjAwKTsKLQotCS8qIFN3aXRjaCBmcm9t IFJhd2NsayB0byBQQ0RjbGsgKi8KLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1BDRENMSyk7Ci0K LQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDIwMCk7Ci0K LQkvKiBFbmFibGUgQ1BVIEZESSBUWCBQTEwsIGFsd2F5cyBvbiBmb3IgSXJvbmxha2UgKi8KLQly ZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwotCWlmICgodGVtcCAmIEZESV9UWF9QTExfRU5BQkxFKSA9PSAwKSB7Ci0JCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfUExMX0VOQUJMRSk7Ci0KLQkJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoMTAwKTsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkIGlsa19mZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2Uu ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsK LQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0J dTMyIHRlbXA7Ci0KLQkvKiBTd2l0Y2ggZnJvbSBQQ0RjbGsgdG8gUmF3Y2xrICovCi0JcmVnID0g RkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK LQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9QQ0RDTEspOwotCi0J LyogRGlzYWJsZSBDUFUgRkRJIFRYIFBMTCAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0J dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfVFhfUExMX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQlyZWcgPSBGRElfUlhf Q1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1JYX1BMTF9FTkFCTEUpOwotCi0J LyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KLQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDEwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGls a19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRlbXA7Ci0KLQkv KiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBDSCBGREkgcnggKi8KLQlyZWcgPSBGRElfVFhfQ1RM KHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7Ci0JaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsK LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH4oMHg3IDw8 IDE2KTsKLQl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkg JiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTAwKTsKLQotCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRp c2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLwotCWlmIChIQVNfUENIX0lC WChkZXZfcHJpdikpCi0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihw aXBlKSwKLQkJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7Ci0KLQkvKiBz dGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsK LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpZiAoSEFTX1BDSF9DUFQo ZGV2X3ByaXYpKSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7 Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKLQl9IGVsc2UgewotCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMTsKLQl9Ci0JLyogQlBDIGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBp biBQSVBFQ09ORiAqLwotCXRlbXAgJj0gfigweDA3IDw8IDE2KTsKLQl0ZW1wIHw9IChpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwg MTE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlpbnRlbF9kZV9w b3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDEwMCk7Ci19Ci0KIGJvb2wgaW50 ZWxfaGFzX3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKQEAgLTY2OTgsMTQzICs2MTYzLDYgQEAgc3Rh dGljIHZvaWQgaW50ZWxfY29ubmVjdG9yX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcGlwZV9yZXF1aXJlZF9mZGlf bGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0JaWYgKGNydGNf c3RhdGUtPmh3LmVuYWJsZSAmJiBjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCi0JCXJldHVy biBjcnRjX3N0YXRlLT5mZGlfbGFuZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBp bGtfY2hlY2tfZmRpX2xhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBl LAotCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKm90aGVyX2NydGM7Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm90 aGVyX2NydGNfc3RhdGU7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJICAgICJj aGVja2luZyBmZGkgY29uZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAotCQkgICAgcGlwZV9u YW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQlpZiAocGlwZV9jb25maWctPmZk aV9sYW5lcyA+IDQpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgImlu dmFsaWQgZmRpIGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAotCQkJICAgIHBp cGVfbmFtZShwaXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3By aXYpKSB7Ci0JCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgewotCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJvbmx5IDIgbGFuZXMgb24gaGFzd2VsbCwgcmVx dWlyZWQ6ICVpIGxhbmVzXG4iLAotCQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQkJ CXJldHVybiAtRUlOVkFMOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlp ZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAyKQotCQlyZXR1cm4gMDsKLQotCS8qIEl2 eWJyaWRnZSAzIHBpcGUgaXMgcmVhbGx5IGNvbXBsaWNhdGVkICovCi0Jc3dpdGNoIChwaXBlKSB7 Ci0JY2FzZSBQSVBFX0E6Ci0JCXJldHVybiAwOwotCWNhc2UgUElQRV9COgotCQlpZiAocGlwZV9j b25maWctPmZkaV9sYW5lcyA8PSAyKQotCQkJcmV0dXJuIDA7Ci0KLQkJb3RoZXJfY3J0YyA9IGlu dGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBQSVBFX0MpOwotCQlvdGhlcl9jcnRjX3N0 YXRlID0KLQkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7 Ci0JCWlmIChJU19FUlIob3RoZXJfY3J0Y19zdGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihvdGhl cl9jcnRjX3N0YXRlKTsKLQotCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3RoZXJfY3J0 Y19zdGF0ZSkgPiAwKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAg ImludmFsaWQgc2hhcmVkIGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBsYW5lc1xuIiwK LQkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQkJCXJl dHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAwOwotCWNhc2UgUElQRV9DOgotCQlpZiAocGlw ZV9jb25maWctPmZkaV9sYW5lcyA+IDIpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAotCQkJCSAgICAib25seSAyIGxhbmVzIG9uIHBpcGUgJWM6IHJlcXVpcmVkICVpIGxhbmVzXG4i LAotCQkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwotCQkJ cmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9y X3BpcGUoZGV2X3ByaXYsIFBJUEVfQik7Ci0JCW90aGVyX2NydGNfc3RhdGUgPQotCQkJaW50ZWxf YXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKLQkJaWYgKElTX0VSUihv dGhlcl9jcnRjX3N0YXRlKSkKLQkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3RhdGUpOwot Ci0JCWlmIChwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDIpIHsK LQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiZmRpIGxpbmsgQiB1c2Vz IHRvbyBtYW55IGxhbmVzIHRvIGVuYWJsZSBsaW5rIENcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7 Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotfQotCi0jZGVmaW5l IFJFVFJZIDEKLXN0YXRpYyBpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKLQkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7Ci0JY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3 LmFkanVzdGVkX21vZGU7Ci0JaW50IGxhbmUsIGxpbmtfYncsIGZkaV9kb3RjbG9jaywgcmV0Owot CWJvb2wgbmVlZHNfcmVjb21wdXRlID0gZmFsc2U7Ci0KLXJldHJ5OgotCS8qIEZESSBpcyBhIGJp bmFyeSBzaWduYWwgcnVubmluZyBhdCB+Mi43R0h6LCBlbmNvZGluZwotCSAqIGVhY2ggb3V0cHV0 IG9jdGV0IGFzIDEwIGJpdHMuIFRoZSBhY3R1YWwgZnJlcXVlbmN5Ci0JICogaXMgc3RvcmVkIGFz IGEgZGl2aWRlciBpbnRvIGEgMTAwTUh6IGNsb2NrLCBhbmQgdGhlCi0JICogbW9kZSBwaXhlbCBj bG9jayBpcyBzdG9yZWQgaW4gdW5pdHMgb2YgMUtIei4KLQkgKiBIZW5jZSB0aGUgYncgb2YgZWFj aCBsYW5lIGluIHRlcm1zIG9mIHRoZSBtb2RlIHNpZ25hbAotCSAqIGlzOgotCSAqLwotCWxpbmtf YncgPSBpbnRlbF9mZGlfbGlua19mcmVxKGk5MTUsIHBpcGVfY29uZmlnKTsKLQotCWZkaV9kb3Rj bG9jayA9IGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2s7Ci0KLQlsYW5lID0gaWxrX2dldF9sYW5l c19yZXF1aXJlZChmZGlfZG90Y2xvY2ssIGxpbmtfYncsCi0JCQkJICAgICAgcGlwZV9jb25maWct PnBpcGVfYnBwKTsKLQotCXBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOwotCi0JaW50ZWxf bGlua19jb21wdXRlX21fbihwaXBlX2NvbmZpZy0+cGlwZV9icHAsIGxhbmUsIGZkaV9kb3RjbG9j aywKLQkJCSAgICAgICBsaW5rX2J3LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZhbHNlLCBmYWxz ZSk7Ci0KLQlyZXQgPSBpbGtfY2hlY2tfZmRpX2xhbmVzKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwg cGlwZV9jb25maWcpOwotCWlmIChyZXQgPT0gLUVERUFETEspCi0JCXJldHVybiByZXQ7Ci0KLQlp ZiAocmV0ID09IC1FSU5WQUwgJiYgcGlwZV9jb25maWctPnBpcGVfYnBwID4gNiozKSB7Ci0JCXBp cGVfY29uZmlnLT5waXBlX2JwcCAtPSAyKjM7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCi0J CQkgICAgImZkaSBsaW5rIGJ3IGNvbnN0cmFpbnQsIHJlZHVjaW5nIHBpcGUgYnBwIHRvICVpXG4i LAotCQkJICAgIHBpcGVfY29uZmlnLT5waXBlX2JwcCk7Ci0JCW5lZWRzX3JlY29tcHV0ZSA9IHRy dWU7Ci0JCXBpcGVfY29uZmlnLT5id19jb25zdHJhaW5lZCA9IHRydWU7Ci0KLQkJZ290byByZXRy eTsKLQl9Ci0KLQlpZiAobmVlZHNfcmVjb21wdXRlKQotCQlyZXR1cm4gUkVUUlk7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCiBib29sIGhzd19jcnRjX3N0YXRlX2lwc19jYXBhYmxlKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwpAQCAtMTEzNjksNyAr MTA2OTcsNyBAQCBpbnRlbF9tb2Rlc2V0X3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlLAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChyZXQgPT0gUkVUUlkpIHsK KwlpZiAocmV0ID09IEk5MTVfRElTUExBWV9DT05GSUdfUkVUUlkpIHsKIAkJaWYgKGRybV9XQVJO KCZpOTE1LT5kcm0sICFyZXRyeSwKIAkJCSAgICAgImxvb3AgaW4gcGlwZSBjb25maWd1cmF0aW9u IGNvbXB1dGF0aW9uXG4iKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTUxNjgsMTQgKzE0NDk2 LDcgQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXlfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2Ny dGNfZGlzYWJsZTsKIAl9CiAKLQlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSkgewotCQlkZXZfcHJp di0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGlsa19mZGlfbGlua190cmFpbjsKLQl9IGVsc2Ug aWYgKElTX0dFTihkZXZfcHJpdiwgNikpIHsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtf dHJhaW4gPSBnZW42X2ZkaV9saW5rX3RyYWluOwotCX0gZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRl dl9wcml2KSkgewotCQkvKiBGSVhNRTogZGV0ZWN0IEIwKyBzdGVwcGluZyBhbmQgdXNlIGF1dG8g dHJhaW5pbmcgKi8KLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpdmJfbWFu dWFsX2ZkaV9saW5rX3RyYWluOwotCX0KKwlpbnRlbF9mZGlfaW5pdF9ob29rKGRldl9wcml2KTsK IAogCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXku Y29tbWl0X21vZGVzZXRfZW5hYmxlcyA9IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaApp bmRleCA2ZDRjYTVlYmMzMjAuLjJjY2YwYWQ3ZmFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKQEAgLTE4MTYsNCArMTgxNiwx MyBAQCBzdGF0aWMgaW5saW5lIHUzMiBpOXh4X2RwbGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAq ZHBsbCkKIAlyZXR1cm4gZHBsbC0+biA8PCAxNiB8IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsK IH0KIAorc3RhdGljIGlubGluZSB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKnBpcGVfY29uZmlnKQoreworCWlmIChIQVNfRERJKGRldl9wcml2KSkKKwkJcmV0dXJu IHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrOyAvKiBTUExMICovCisJZWxzZQorCQlyZXR1cm4gZGV2 X3ByaXYtPmZkaV9wbGxfZnJlcTsKK30KKwogI2VuZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlfVFlQ RVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2ZkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIyZWI5NmFlMTBhMgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMKQEAgLTAs MCArMSw2ODMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSAiaW50ZWxfYXRv bWljLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVs X2ZkaS5oIgorCisvKiB1bml0cyBvZiAxMDBNSHogKi8KK3N0YXRpYyBpbnQgcGlwZV9yZXF1aXJl ZF9mZGlfbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaWYg KGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJiBjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCisJ CXJldHVybiBjcnRjX3N0YXRlLT5mZGlfbGFuZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpbGtfY2hlY2tfZmRpX2xhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlw ZSBwaXBlLAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7 CisJc3RydWN0IGludGVsX2NydGMgKm90aGVyX2NydGM7CisJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm90aGVyX2NydGNfc3RhdGU7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJ ICAgICJjaGVja2luZyBmZGkgY29uZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAorCQkgICAg cGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwlpZiAocGlwZV9jb25m aWctPmZkaV9sYW5lcyA+IDQpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkg ICAgImludmFsaWQgZmRpIGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAorCQkJ ICAgIHBpcGVfbmFtZShwaXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwo ZGV2X3ByaXYpKSB7CisJCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgeworCQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJvbmx5IDIgbGFuZXMgb24gaGFzd2Vs bCwgcmVxdWlyZWQ6ICVpIGxhbmVzXG4iLAorCQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVz KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9 CisKKwlpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAyKQorCQlyZXR1cm4gMDsKKwor CS8qIEl2eWJyaWRnZSAzIHBpcGUgaXMgcmVhbGx5IGNvbXBsaWNhdGVkICovCisJc3dpdGNoIChw aXBlKSB7CisJY2FzZSBQSVBFX0E6CisJCXJldHVybiAwOworCWNhc2UgUElQRV9COgorCQlpZiAo cGlwZV9jb25maWctPmZkaV9sYW5lcyA8PSAyKQorCQkJcmV0dXJuIDA7CisKKwkJb3RoZXJfY3J0 YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBQSVBFX0MpOworCQlvdGhlcl9j cnRjX3N0YXRlID0KKwkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJf Y3J0Yyk7CisJCWlmIChJU19FUlIob3RoZXJfY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VS UihvdGhlcl9jcnRjX3N0YXRlKTsKKworCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3Ro ZXJfY3J0Y19zdGF0ZSkgPiAwKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJ CQkgICAgImludmFsaWQgc2hhcmVkIGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBsYW5l c1xuIiwKKwkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsK KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHVybiAwOworCWNhc2UgUElQRV9DOgorCQlp ZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDIpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAorCQkJCSAgICAib25seSAyIGxhbmVzIG9uIHBpcGUgJWM6IHJlcXVpcmVkICVpIGxh bmVzXG4iLAorCQkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2Ny dGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQik7CisJCW90aGVyX2NydGNfc3RhdGUgPQorCQkJ aW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKKwkJaWYgKElT X0VSUihvdGhlcl9jcnRjX3N0YXRlKSkKKwkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3Rh dGUpOworCisJCWlmIChwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+ IDIpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiZmRpIGxpbmsg QiB1c2VzIHRvbyBtYW55IGxhbmVzIHRvIGVuYWJsZSBsaW5rIENcbiIpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitp bnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywK KwkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7CisJ aW50IGxhbmUsIGxpbmtfYncsIGZkaV9kb3RjbG9jaywgcmV0OworCWJvb2wgbmVlZHNfcmVjb21w dXRlID0gZmFsc2U7CisKK3JldHJ5OgorCS8qIEZESSBpcyBhIGJpbmFyeSBzaWduYWwgcnVubmlu ZyBhdCB+Mi43R0h6LCBlbmNvZGluZworCSAqIGVhY2ggb3V0cHV0IG9jdGV0IGFzIDEwIGJpdHMu IFRoZSBhY3R1YWwgZnJlcXVlbmN5CisJICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRvIGEg MTAwTUh6IGNsb2NrLCBhbmQgdGhlCisJICogbW9kZSBwaXhlbCBjbG9jayBpcyBzdG9yZWQgaW4g dW5pdHMgb2YgMUtIei4KKwkgKiBIZW5jZSB0aGUgYncgb2YgZWFjaCBsYW5lIGluIHRlcm1zIG9m IHRoZSBtb2RlIHNpZ25hbAorCSAqIGlzOgorCSAqLworCWxpbmtfYncgPSBpbnRlbF9mZGlfbGlu a19mcmVxKGk5MTUsIHBpcGVfY29uZmlnKTsKKworCWZkaV9kb3RjbG9jayA9IGFkanVzdGVkX21v ZGUtPmNydGNfY2xvY2s7CisKKwlsYW5lID0gaWxrX2dldF9sYW5lc19yZXF1aXJlZChmZGlfZG90 Y2xvY2ssIGxpbmtfYncsCisJCQkJICAgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKKworCXBp cGVfY29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOworCisJaW50ZWxfbGlua19jb21wdXRlX21fbihw aXBlX2NvbmZpZy0+cGlwZV9icHAsIGxhbmUsIGZkaV9kb3RjbG9jaywKKwkJCSAgICAgICBsaW5r X2J3LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZhbHNlLCBmYWxzZSk7CisKKwlyZXQgPSBpbGtf Y2hlY2tfZmRpX2xhbmVzKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgcGlwZV9jb25maWcpOworCWlm IChyZXQgPT0gLUVERUFETEspCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ID09IC1FSU5WQUwg JiYgcGlwZV9jb25maWctPnBpcGVfYnBwID4gNiozKSB7CisJCXBpcGVfY29uZmlnLT5waXBlX2Jw cCAtPSAyKjM7CisJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCisJCQkgICAgImZkaSBsaW5rIGJ3 IGNvbnN0cmFpbnQsIHJlZHVjaW5nIHBpcGUgYnBwIHRvICVpXG4iLAorCQkJICAgIHBpcGVfY29u ZmlnLT5waXBlX2JwcCk7CisJCW5lZWRzX3JlY29tcHV0ZSA9IHRydWU7CisJCXBpcGVfY29uZmln LT5id19jb25zdHJhaW5lZCA9IHRydWU7CisKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAobmVl ZHNfcmVjb21wdXRlKQorCQlyZXR1cm4gSTkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWTsKKworCXJl dHVybiByZXQ7Cit9CisKK3ZvaWQgaW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCWVu dW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsK KworCS8qIGVuYWJsZSBub3JtYWwgdHJhaW4gKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwor CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChJU19JVllCUklER0Uo ZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOworCQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxF OworCX0gZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fTk9ORSB8IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKKwl9CisJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhfQ1RM KHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChIQVNf UENIX0NQVChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9N QVNLX0NQVDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT1JNQUxfQ1BUOworCX0gZWxzZSB7 CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJB SU5fTk9ORTsKKwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9S WF9FTkhBTkNFX0ZSQU1FX0VOQUJMRSk7CisKKwkvKiB3YWl0IG9uZSBpZGxlIHBhdHRlcm4gdGlt ZSAqLworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAw MCk7CisKKwkvKiBJVkIgd2FudHMgZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCisJaWYgKElT X0lWWUJSSURHRShkZXZfcHJpdikpCisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJ CQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19FUlJDX0VOQUJM RSB8IEZESV9GRV9FUlJDX0VOQUJMRSk7Cit9CisKKy8qIFRoZSBGREkgbGluayB0cmFpbmluZyBm dW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KK3N0YXRpYyB2b2lkIGlsa19mZGlfbGlua190 cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkZXYpOworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJl ZzsKKwl1MzIgdGVtcCwgdHJpZXM7CisKKwkvKiBGREkgbmVlZHMgYml0cyBmcm9tIHBpcGUgZmly c3QgKi8KKwlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJh bnNjb2Rlcik7CisKKwkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9s b2NrIGFuZCBiaXRfbG9jayBiaXQKKwkgICBmb3IgdHJhaW4gcmVzdWx0ICovCisJcmVnID0gRkRJ X1JYX0lNUihwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0 ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7CisJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwor CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCWludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJdWRlbGF5KDE1MCk7CisKKwkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQg UENIIEZESSBSWCAqLworCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsK Kwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRF Uk5fMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJM RSk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJdGVtcCB8PSBG RElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCB8IEZESV9SWF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOworCXVkZWxheSgxNTApOworCisJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5hYmxl IGNsb2NrIHBvaW50ZXIgYWZ0ZXIgRkRJIGVuYWJsZSovCisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAorCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9J TlRFUl9PVlIpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBl KSwKKwkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BIQVNF X1NZTkNfUE9JTlRFUl9FTik7CisKKwlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCWZvciAodHJp ZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAw eCV4XG4iLCB0ZW1wKTsKKworCQlpZiAoKHRlbXAgJiBGRElfUlhfQklUX0xPQ0spKSB7CisJCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKKwkJCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOworCQkJ YnJlYWs7CisJCX0KKwl9CisJaWYgKHRyaWVzID09IDUpCisJCWRybV9lcnIoJmRldl9wcml2LT5k cm0sICJGREkgdHJhaW4gMSBmYWlsIVxuIik7CisKKwkvKiBUcmFpbiAyICovCisJcmVnID0gRkRJ X1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFU VEVSTl8yOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJcmVnID0g RkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK Kwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8yOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJcmVn ID0gRkRJX1JYX0lJUihwaXBlKTsKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysr KSB7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisKKwkJaWYgKHRl bXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKKwkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsCisJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOworCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMiBkb25lLlxuIik7CisJCQlicmVhazsKKwkJ fQorCX0KKwlpZiAodHJpZXMgPT0gNSkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0 cmFpbiAyIGZhaWwhXG4iKTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRy YWluIGRvbmVcbiIpOworCit9CisKK3N0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRpX3RyYWluX3Bh cmFtW10gPSB7CisJRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9CLAorCUZESV9MSU5LX1RS QUlOXzQwME1WXzZEQl9TTkJfQiwKKwlGRElfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQiwK KwlGRElfTElOS19UUkFJTl84MDBNVl8wREJfU05CX0IsCit9OworCisvKiBUaGUgRkRJIGxpbmsg dHJhaW5pbmcgZnVuY3Rpb25zIGZvciBTTkIvQ291Z2FycG9pbnQuICovCitzdGF0aWMgdm9pZCBn ZW42X2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCWNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5MTVf cmVnX3QgcmVnOworCXUzMiB0ZW1wLCBpLCByZXRyeTsKKworCS8qIFRyYWluIDE6IHVtYXNrIEZE SSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAorCSAgIGZvciB0cmFp biByZXN1bHQgKi8KKwlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKKwl0ZW1w ICY9IH5GRElfUlhfQklUX0xPQ0s7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDE1 MCk7CisKKwkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLworCXJlZyA9IEZE SV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJ dGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKKwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJ RFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9O RTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl0ZW1wICY9IH5GRElfTElO S19UUkFJTl9WT0xfRU1QX01BU0s7CisJLyogU05CLUIgKi8KKwl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOXzQwME1WXzBEQl9TTkJfQjsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1w IHwgRkRJX1RYX0VOQUJMRSk7CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX01J U0MocGlwZSksCisJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElfREVM QVlfOTApOworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7CisJCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8xX0NQVDsKKwl9IGVsc2UgeworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJ Tl9OT05FOworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl9CisJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOworCisJaW50ZWxf ZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Vk9MX0VNUF9NQVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKKwkJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoNTAwKTsKKworCQlmb3IgKHJldHJ5ID0gMDsg cmV0cnkgPCA1OyByZXRyeSsrKSB7CisJCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCQkJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisJCQlpZiAodGVtcCAmIEZESV9S WF9CSVRfTE9DSykgeworCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkJCSAg ICAgICB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKKwkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7CisJCQkJYnJlYWs7CisJCQl9 CisJCQl1ZGVsYXkoNTApOworCQl9CisJCWlmIChyZXRyeSA8IDUpCisJCQlicmVhazsKKwl9CisJ aWYgKGkgPT0gNCkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZhaWwh XG4iKTsKKworCS8qIFRyYWluIDIgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X05PTkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7CisJaWYgKElTX0dFTihk ZXZfcHJpdiwgNikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwor CQkvKiBTTkItQiAqLworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQjsK Kwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElf UlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlm IChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFU VEVSTl9NQVNLX0NQVDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOwor CX0gZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJ X0xJTktfVFJBSU5fUEFUVEVSTl8yOworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wKTsKKworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVs YXkoMTUwKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmVnID0gRkRJX1RYX0NU TChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKKwkJdGVtcCB8PSBzbmJfYl9mZGlfdHJh aW5fcGFyYW1baV07CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJ CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdWRlbGF5KDUwMCk7CisK KwkJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgeworCQkJcmVnID0gRkRJX1JY X0lJUihwaXBlKTsKKwkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwor CQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKKwkJCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7CisJ CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRyYWluIDIgZG9u ZS5cbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJdWRlbGF5KDUwKTsKKwkJfQorCQlpZiAocmV0 cnkgPCA1KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDQpCisJCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJGREkgdHJhaW4gMiBmYWlsIVxuIik7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cit9CisKKy8qIE1hbnVhbCBsaW5rIHRyYWluaW5n IGZvciBJdnkgQnJpZGdlIEEwIHBhcnRzICovCitzdGF0aWMgdm9pZCBpdmJfbWFudWFsX2ZkaV9s aW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5MTVfcmVn X3QgcmVnOworCXUzMiB0ZW1wLCBpLCBqOworCisJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIElu dGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0CisJICAgZm9yIHRyYWluIHJlc3Vs dCAqLworCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOworCXRlbXAgJj0gfkZE SV9SWF9CSVRfTE9DSzsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKwor CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKwor CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZvcmUgbGluayB0cmFp biAweCV4XG4iLAorCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRkRJX1JYX0lJUihwaXBl KSkpOworCisJLyogVHJ5IGVhY2ggdnN3aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0aW5nIHR3aWNl IGJlZm9yZSBtb3Zpbmcgb24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzbmJfYl9m ZGlfdHJhaW5fcGFyYW0pICogMjsgaisrKSB7CisJCS8qIGRpc2FibGUgZmlyc3QgaW4gY2FzZSB3 ZSBuZWVkIHRvIHJldHJ5ICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJBSU5f QVVUTyB8IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCKTsKKwkJdGVtcCAmPSB+RkRJX1RYX0VOQUJM RTsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJcmVnID0gRkRJ X1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJ CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX0FVVE87CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgJj0gfkZESV9SWF9FTkFCTEU7CisJCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFu ZCBQQ0ggRkRJIFJYICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9N QVNLOworCQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7 CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lWQjsKKwkJdGVtcCAmPSB+RkRJ X0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJh bVtqLzJdOworCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lOQzsKKwkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9FTkFCTEUpOworCisJCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQ Ml80OCB8IEZESV9SWF9GRElfREVMQVlfOTApOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7 CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7CisJCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5DOwor CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7CisK KwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoMSk7IC8q IHNob3VsZCBiZSAwLjV1cyAqLworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJl ZyA9IEZESV9SWF9JSVIocGlwZSk7CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4i LCB0ZW1wKTsKKworCQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKKwkJCSAgICAoaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsKKwkJCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRf TE9DSyk7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRy YWluIDEgZG9uZSwgbGV2ZWwgJWkuXG4iLAorCQkJCQkgICAgaSk7CisJCQkJYnJlYWs7CisJCQl9 CisJCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLworCQl9CisJCWlmIChpID09IDQp IHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiRkRJIHRyYWluIDEg ZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyog VHJhaW4gMiAqLworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7 CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKKwkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8yX0NQVDsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoMik7IC8qIHNob3Vs ZCBiZSAxLjV1cyAqLworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJlZyA9IEZE SV9SWF9JSVIocGlwZSk7CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK KwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1w KTsKKworCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0sgfHwKKwkJCSAgICAoaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsKKwkJCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1C T0xfTE9DSyk7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJ IHRyYWluIDIgZG9uZSwgbGV2ZWwgJWkuXG4iLAorCQkJCQkgICAgaSk7CisJCQkJZ290byB0cmFp bl9kb25lOworCQkJfQorCQkJdWRlbGF5KDIpOyAvKiBzaG91bGQgYmUgMS41dXMgKi8KKwkJfQor CQlpZiAoaSA9PSA0KQorCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJG REkgdHJhaW4gMiBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOworCX0KKwordHJhaW5fZG9u ZToKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cit9 CisKK3ZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBw aXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsKKwor CS8qIGVuYWJsZSBQQ0ggRkRJIFJYIFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5jeSAq LworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZyk7CisJdGVtcCAmPSB+KEZESV9EUF9QT1JUX1dJRFRIX01BU0sgfCAoMHg3IDw8IDE2 KSk7CisJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwor CXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVD T05GX0JQQ19NQVNLKSA8PCAxMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1w IHwgRkRJX1JYX1BMTF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOworCXVkZWxheSgyMDApOworCisJLyogU3dpdGNoIGZyb20gUmF3Y2xrIHRvIFBDRGNs ayAqLworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUENEQ0xLKTsKKworCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMjAwKTsKKworCS8qIEVuYWJsZSBDUFUg RkRJIFRYIFBMTCwgYWx3YXlzIG9uIGZvciBJcm9ubGFrZSAqLworCXJlZyA9IEZESV9UWF9DVEwo cGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaWYgKCh0ZW1w ICYgRkRJX1RYX1BMTF9FTkFCTEUpID09IDApIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCB8IEZESV9UWF9QTExfRU5BQkxFKTsKKworCQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7CisJCXVkZWxheSgxMDApOworCX0KK30KKwordm9pZCBpbGtfZmRp X3BsbF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBpbnRl bF9jcnRjLT5waXBlOworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wOworCisJLyogU3dpdGNo IGZyb20gUENEY2xrIHRvIFJhd2NsayAqLworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCAmIH5GRElfUENEQ0xLKTsKKworCS8qIERpc2FibGUgQ1BVIEZESSBUWCBQ TEwgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJ X1RYX1BMTF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcp OworCXVkZWxheSgxMDApOworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wICYgfkZESV9SWF9QTExfRU5BQkxFKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3Mg dG8gdHVybiBvZmYuICovCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwor CXVkZWxheSgxMDApOworfQorCit2b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaTkxNV9y ZWdfdCByZWc7CisJdTMyIHRlbXA7CisKKwkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBDSCBG REkgcnggKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+ RkRJX1RYX0VOQUJMRSk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwor CisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwl0ZW1wICY9IH4oMHg3IDw8IDE2KTsKKwl0ZW1wIHw9IChpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7CisJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsKKwor CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAwKTsKKwor CS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3du aW5nIEZESSAqLworCWlmIChIQVNfUENIX0lCWChkZXZfcHJpdikpCisJCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfUEhBU0Vf U1lOQ19QT0lOVEVSX09WUik7CisKKwkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICovCisJ cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8xOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwor CisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFU VEVSTl8xX0NQVDsKKwl9IGVsc2UgeworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwor CQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl9CisJLyogQlBDIGluIEZESSBy eCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAqLworCXRlbXAgJj0gfigweDA3 IDw8IDE2KTsKKwl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBl KSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJ dWRlbGF5KDEwMCk7Cit9CisKK3ZvaWQKK2ludGVsX2ZkaV9pbml0X2hvb2soc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7CisJ CWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaWxrX2ZkaV9saW5rX3RyYWluOwor CX0gZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5m ZGlfbGlua190cmFpbiA9IGdlbjZfZmRpX2xpbmtfdHJhaW47CisJfSBlbHNlIGlmIChJU19JVllC UklER0UoZGV2X3ByaXYpKSB7CisJCS8qIEZJWE1FOiBkZXRlY3QgQjArIHN0ZXBwaW5nIGFuZCB1 c2UgYXV0byB0cmFpbmluZyAqLworCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9 IGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW47CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZmRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li43NDQxZmIxY2UzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2ZkaS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgorICovCisKKyNpZm5kZWYgX0lOVEVMX0ZESV9IXworI2RlZmluZSBfSU5URUxfRkRJX0hfCisK K3N0cnVjdCBpbnRlbF9jcnRjOworc3RydWN0IGludGVsX2NydGNfc3RhdGU7CisKKyNkZWZpbmUg STkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWSAxCitpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKKwkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZyk7Cit2b2lkIGludGVsX2ZkaV9ub3JtYWxfdHJhaW4oc3RydWN0IGlu dGVsX2NydGMgKmNydGMpOwordm9pZCBpbGtfZmRpX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMg KmNydGMpOwordm9pZCBpbGtfZmRpX3BsbF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjKTsKK3ZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKTsKK3ZvaWQgaW50ZWxfZmRpX2luaXRfaG9vayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisjZW5kaWYKLS0gCjIuMjcuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==