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=-10.7 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,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 2B298C433DB for ; Thu, 21 Jan 2021 21:59:59 +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 D698623A5C for ; Thu, 21 Jan 2021 21:59:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D698623A5C 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 7046C6E96B; Thu, 21 Jan 2021 21:59:58 +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 E370B6E96B for ; Thu, 21 Jan 2021 21:59:53 +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-182-uXk1Rsj1O2ywCsp84x_w0Q-1; Thu, 21 Jan 2021 16:59:43 -0500 X-MC-Unique: uXk1Rsj1O2ywCsp84x_w0Q-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0DE8F100649B; Thu, 21 Jan 2021 21:59:40 +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 0D2BF19CB1; Thu, 21 Jan 2021 21:59:38 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 22 Jan 2021 07:59:20 +1000 Message-Id: <20210121215924.18964-8-airlied@gmail.com> In-Reply-To: <20210121215924.18964-1-airlied@gmail.com> References: <20210121215924.18964-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 07/10] drm/i915: migrate pll enable/disable code to intel_dpll.[ch] 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: , Cc: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgbW92ZXMgdGhlIG9s ZGVyIGk5eHgvdmx2L2NodiBlbmFibGUvZGlzYWJsZSB0byBkcGxsIGZpbGUuCgpTaWduZWQtb2Zm LWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyB8IDUxMiAtLS0tLS0tLS0tLS0tLS0t LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCB8ICAgMyAt CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgICAgICB8ICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYyAgICB8IDUwOSArKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5oICAg IHwgIDE4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMgICAgIHwg ICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgNTI5IGluc2VydGlvbnMoKyksIDUxNSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4 IDU2Y2E3MDIyODg4Ni4uN2E4NGUxOWJjOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTA5LDEwICsxMDksNiBAQCBzdGF0aWMgdm9pZCBp OXh4X3NldF9waXBlY29uZihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSk7CiBzdGF0aWMgdm9pZCBpbGtfc2V0X3BpcGVjb25mKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGhzd19zZXRfcGlwZWNvbmYoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgYmR3X3Nl dF9waXBlbWlzYyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci1z dGF0aWMgdm9pZCB2bHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKLXN0YXRpYyB2 b2lkIGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGljIHZvaWQgaWxr X3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK IHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKQEAg LTU2NSwyMjQgKzU2MSw2IEBAIHN0YXRpYyB2b2lkIGFzc2VydF9wY2hfcG9ydHNfZGlzYWJsZWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCWFzc2VydF9wY2hfaGRtaV9kaXNh YmxlZChkZXZfcHJpdiwgcGlwZSwgUE9SVF9ELCBQQ0hfSERNSUQpOwogfQogCi1zdGF0aWMgdm9p ZCBfdmx2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlw ZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMKHBp cGUpLCBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsKTsKLQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpOwotCXVkZWxheSgxNTApOwotCi0JaWYgKGludGVs X2RlX3dhaXRfZm9yX3NldChkZXZfcHJpdiwgRFBMTChwaXBlKSwgRFBMTF9MT0NLX1ZMViwgMSkp Ci0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJEUExMICVkIGZhaWxlZCB0byBsb2NrXG4iLCBw aXBlKTsKLX0KLQotc3RhdGljIHZvaWQgdmx2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMg KmNydGMsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Ci17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5i YXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCi0JYXNzZXJ0X3BpcGVf ZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2Rlcik7Ci0KLQkvKiBQ TEwgaXMgcHJvdGVjdGVkIGJ5IHBhbmVsLCBtYWtlIHN1cmUgd2UgY2FuIHdyaXRlIGl0ICovCi0J YXNzZXJ0X3BhbmVsX3VubG9ja2VkKGRldl9wcml2LCBwaXBlKTsKLQotCWlmIChwaXBlX2NvbmZp Zy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxFKQotCQlfdmx2X2VuYWJsZV9w bGwoY3J0YywgcGlwZV9jb25maWcpOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExf TUQocGlwZSksCi0JCSAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsK LQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTExfTUQocGlwZSkpOwotfQotCi0K LXN0YXRpYyB2b2lkIF9jaHZfZW5hYmxlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7 Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWVudW0gZHBpb19jaGFubmVsIHBvcnQg PSB2bHZfcGlwZV90b19jaGFubmVsKHBpcGUpOwotCXUzMiB0bXA7Ci0KLQl2bHZfZHBpb19nZXQo ZGV2X3ByaXYpOwotCi0JLyogRW5hYmxlIGJhY2sgdGhlIDEwYml0IGNsb2NrIHRvIGRpc3BsYXkg Y29udHJvbGxlciAqLwotCXRtcCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9D TU5fRFcxNChwb3J0KSk7Ci0JdG1wIHw9IERQSU9fRENMS1BfRU47Ci0Jdmx2X2RwaW9fd3JpdGUo ZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxNChwb3J0KSwgdG1wKTsKLQotCXZsdl9kcGlvX3B1 dChkZXZfcHJpdik7Ci0KLQkvKgotCSAqIE5lZWQgdG8gd2FpdCA+IDEwMG5zIGJldHdlZW4gZGNs a3AgY2xvY2sgZW5hYmxlIGJpdCBhbmQgUExMIGVuYWJsZS4KLQkgKi8KLQl1ZGVsYXkoMSk7Ci0K LQkvKiBFbmFibGUgUExMICovCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSks IHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwpOwotCi0JLyogQ2hlY2sgUExMIGlzIGxv Y2tlZCAqLwotCWlmIChpbnRlbF9kZV93YWl0X2Zvcl9zZXQoZGV2X3ByaXYsIERQTEwocGlwZSks IERQTExfTE9DS19WTFYsIDEpKQotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiUExMICVkIGZh aWxlZCB0byBsb2NrXG4iLCBwaXBlKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X2VuYWJsZV9wbGwo c3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBl OwotCi0JYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGVfY29uZmlnLT5jcHVfdHJh bnNjb2Rlcik7Ci0KLQkvKiBQTEwgaXMgcHJvdGVjdGVkIGJ5IHBhbmVsLCBtYWtlIHN1cmUgd2Ug Y2FuIHdyaXRlIGl0ICovCi0JYXNzZXJ0X3BhbmVsX3VubG9ja2VkKGRldl9wcml2LCBwaXBlKTsK LQotCWlmIChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxF KQotCQlfY2h2X2VuYWJsZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOwotCi0JaWYgKHBpcGUgIT0g UElQRV9BKSB7Ci0JCS8qCi0JCSAqIFdhUGl4ZWxSZXBlYXRNb2RlRml4Rm9yQzA6Y2h2Ci0JCSAq Ci0JCSAqIERQTExDTUQgaXMgQVdPTC4gVXNlIGNoaWNrZW4gYml0cyB0byBwcm9wYWdhdGUKLQkJ ICogdGhlIHZhbHVlIGZyb20gRFBMTEJNRCB0byBlaXRoZXIgcGlwZSBCIG9yIEMuCi0JCSAqLwot CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JSNF9WTFYsIENCUl9EUExMQk1EX1BJUEUocGlw ZSkpOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTF9NRChQSVBFX0IpLAotCQkJICAg ICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQpOwotCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgQ0JSNF9WTFYsIDApOwotCQlkZXZfcHJpdi0+Y2h2X2RwbGxfbWRbcGlwZV0g PSBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kOwotCi0JCS8qCi0JCSAqIERQTExC IFZHQSBtb2RlIGFsc28gc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMuCi0JCSAqIFdlIHNob3VsZCBh bHdheXMgaGF2ZSBpdCBkaXNhYmxlZC4KLQkJICovCi0JCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLAotCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUExMKFBJUEVfQikpICYKLQkJ CSAgICAgRFBMTF9WR0FfTU9ERV9ESVMpID09IDApOwotCX0gZWxzZSB7Ci0JCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBEUExMX01EKHBpcGUpLAotCQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxs X2h3X3N0YXRlLmRwbGxfbWQpOwotCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQ TExfTUQocGlwZSkpOwotCX0KLX0KLQotc3RhdGljIGJvb2wgaTl4eF9oYXNfcHBzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpZiAoSVNfSTgzMChkZXZfcHJpdikpCi0J CXJldHVybiBmYWxzZTsKLQotCXJldHVybiBJU19QSU5FVklFVyhkZXZfcHJpdikgfHwgSVNfTU9C SUxFKGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF9lbmFibGVfcGxsKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWk5MTVfcmVnX3QgcmVnID0gRFBMTChjcnRjLT5waXBlKTsK LQl1MzIgZHBsbCA9IGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbDsKLQlpbnQgaTsKLQot CWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rl cik7Ci0KLQkvKiBQTEwgaXMgcHJvdGVjdGVkIGJ5IHBhbmVsLCBtYWtlIHN1cmUgd2UgY2FuIHdy aXRlIGl0ICovCi0JaWYgKGk5eHhfaGFzX3BwcyhkZXZfcHJpdikpCi0JCWFzc2VydF9wYW5lbF91 bmxvY2tlZChkZXZfcHJpdiwgY3J0Yy0+cGlwZSk7Ci0KLQkvKgotCSAqIEFwcGFyZW50bHkgd2Ug bmVlZCB0byBoYXZlIFZHQSBtb2RlIGVuYWJsZWQgcHJpb3IgdG8gY2hhbmdpbmcKLQkgKiB0aGUg UDEvUDIgZGl2aWRlcnMuIE90aGVyd2lzZSB0aGUgRFBMTCB3aWxsIGtlZXAgdXNpbmcgdGhlIG9s ZAotCSAqIGRpdmlkZXJzLCBldmVuIHRob3VnaCB0aGUgcmVnaXN0ZXIgdmFsdWUgZG9lcyBjaGFu Z2UuCi0JICovCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgZHBsbCAmIH5EUExMX1ZH QV9NT0RFX0RJUyk7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgZHBsbCk7Ci0KLQkv KiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KLQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMX01EKGNydGMt PnBpcGUpLAotCQkJICAgICAgIGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCk7Ci0J fSBlbHNlIHsKLQkJLyogVGhlIHBpeGVsIG11bHRpcGxpZXIgY2FuIG9ubHkgYmUgdXBkYXRlZCBv bmNlIHRoZQotCQkgKiBEUExMIGlzIGVuYWJsZWQgYW5kIHRoZSBjbG9ja3MgYXJlIHN0YWJsZS4K LQkJICoKLQkJICogU28gd3JpdGUgaXQgYWdhaW4uCi0JCSAqLwotCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLCBkcGxsKTsKLQl9Ci0KLQkvKiBXZSBkbyB0aGlzIHRocmVlIHRpbWVzIGZv ciBsdWNrICovCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLCBkcGxsKTsKLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBy ZWcpOwotCQl1ZGVsYXkoMTUwKTsgLyogd2FpdCBmb3Igd2FybXVwICovCi0JfQotfQotCi1zdGF0 aWMgdm9pZCBpOXh4X2Rpc2FibGVfcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjX3N0YXRlLT51YXBpLmNydGMpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlw ZTsKLQotCS8qIERvbid0IGRpc2FibGUgcGlwZSBvciBwaXBlIFBMTHMgaWYgbmVlZGVkICovCi0J aWYgKElTX0k4MzAoZGV2X3ByaXYpKQotCQlyZXR1cm47Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIHBp cGUgaXNuJ3Qgc3RpbGwgcmVseWluZyBvbiB1cyAqLwotCWFzc2VydF9waXBlX2Rpc2FibGVkKGRl dl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rlcik7Ci0KLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgRFBMTChwaXBlKSwgRFBMTF9WR0FfTU9ERV9ESVMpOwotCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgRFBMTChwaXBlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9kaXNh YmxlX3BsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBl KQotewotCXUzMiB2YWw7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIHBpcGUgaXNuJ3Qgc3RpbGwgcmVs eWluZyBvbiB1cyAqLwotCWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCAoZW51bSB0cmFu c2NvZGVyKXBpcGUpOwotCi0JdmFsID0gRFBMTF9JTlRFR1JBVEVEX1JFRl9DTEtfVkxWIHwKLQkJ RFBMTF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKLQlpZiAocGlwZSAh PSBQSVBFX0EpCi0JCXZhbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7Ci0KLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwgdmFsKTsKLQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpOwotfQotCi1zdGF0aWMgdm9pZCBjaHZfZGlzYWJs ZV9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkK LXsKLQllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsK LQl1MzIgdmFsOwotCi0JLyogTWFrZSBzdXJlIHRoZSBwaXBlIGlzbid0IHN0aWxsIHJlbHlpbmcg b24gdXMgKi8KLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgKGVudW0gdHJhbnNjb2Rl cilwaXBlKTsKLQotCXZhbCA9IERQTExfU1NDX1JFRl9DTEtfQ0hWIHwKLQkJRFBMTF9SRUZfQ0xL X0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKLQlpZiAocGlwZSAhPSBQSVBFX0EpCi0J CXZhbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7Ci0KLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgRFBMTChwaXBlKSwgdmFsKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIERQTEwocGlwZSkpOwotCi0Jdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKLQotCS8qIERpc2Fi bGUgMTBiaXQgY2xvY2sgdG8gZGlzcGxheSBjb250cm9sbGVyICovCi0JdmFsID0gdmx2X2RwaW9f cmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzE0KHBvcnQpKTsKLQl2YWwgJj0gfkRQSU9f RENMS1BfRU47Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxNChw b3J0KSwgdmFsKTsKLQotCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Ci19Ci0KIHZvaWQgdmx2X3dh aXRfcG9ydF9yZWFkeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCiAJCQkgdW5zaWduZWQgaW50IGV4cGVj dGVkX21hc2spCkBAIC01NzI1LDM1ICs1NTAzLDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfcGFuZWxf c2FuaXRpemVfc3NjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaXBlCi0JCXBpcGUpCi17Ci0JdTMyIHJlZ192YWw7Ci0KLQkvKgot CSAqIFBMTEIgb3BhbXAgYWx3YXlzIGNhbGlicmF0ZXMgdG8gbWF4IHZhbHVlIG9mIDB4M2YsIGZv cmNlIGVuYWJsZSBpdAotCSAqIGFuZCBzZXQgaXQgdG8gYSByZWFzb25hYmxlIHZhbHVlIGluc3Rl YWQuCi0JICovCi0JcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9Q TExfRFc5KDEpKTsKLQlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7Ci0JcmVnX3ZhbCB8PSAweDAwMDAw MDMwOwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOSgxKSwgcmVn X3ZhbCk7Ci0KLQlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1JF Rl9EVzEzKTsKLQlyZWdfdmFsICY9IDB4MDBmZmZmZmY7Ci0JcmVnX3ZhbCB8PSAweDhjMDAwMDAw OwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMsIHJlZ192YWwp OwotCi0JcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5 KDEpKTsKLQlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYs IHBpcGUsIFZMVl9QTExfRFc5KDEpLCByZWdfdmFsKTsKLQotCXJlZ192YWwgPSB2bHZfZHBpb19y ZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMpOwotCXJlZ192YWwgJj0gMHgwMGZmZmZm ZjsKLQlyZWdfdmFsIHw9IDB4YjAwMDAwMDA7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIFZMVl9SRUZfRFcxMywgcmVnX3ZhbCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX3BjaF90 cmFuc2NvZGVyX3NldF9tX24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfbGlua19tX24gKm1fbikKIHsKQEAgLTU4NDks MjY3ICs1NTk4LDYgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbV9uKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLCBlbnVtIGxpbmtfbV9uX3MKIAkJaW50ZWxfY3B1X3RyYW5z Y29kZXJfc2V0X21fbihjcnRjX3N0YXRlLCBkcF9tX24sIGRwX20yX24yKTsKIH0KIAotc3RhdGlj IHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsK LQl1MzIgbWRpdjsKLQl1MzIgYmVzdG4sIGJlc3RtMSwgYmVzdG0yLCBiZXN0cDEsIGJlc3RwMjsK LQl1MzIgY29yZWNsaywgcmVnX3ZhbDsKLQotCS8qIEVuYWJsZSBSZWZjbGsgKi8KLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwKLQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxs X2h3X3N0YXRlLmRwbGwgJiB+KERQTExfVkNPX0VOQUJMRSB8IERQTExfRVhUX0JVRkZFUl9FTkFC TEVfVkxWKSk7Ci0KLQkvKiBObyBuZWVkIHRvIGFjdHVhbGx5IHNldCB1cCB0aGUgRFBMTCB3aXRo IERTSSAqLwotCWlmICgocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQTExfVkNP X0VOQUJMRSkgPT0gMCkKLQkJcmV0dXJuOwotCi0Jdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKLQot CWJlc3RuID0gcGlwZV9jb25maWctPmRwbGwubjsKLQliZXN0bTEgPSBwaXBlX2NvbmZpZy0+ZHBs bC5tMTsKLQliZXN0bTIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5tMjsKLQliZXN0cDEgPSBwaXBlX2Nv bmZpZy0+ZHBsbC5wMTsKLQliZXN0cDIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5wMjsKLQotCS8qIFNl ZSBlRFAgSERNSSBEUElPIGRyaXZlciB2YmlvcyBub3RlcyBkb2MgKi8KLQotCS8qIFBMTCBCIG5l ZWRzIHNwZWNpYWwgaGFuZGxpbmcgKi8KLQlpZiAocGlwZSA9PSBQSVBFX0IpCi0JCXZsdl9wbGxi X3JlY2FsX29wYW1wKGRldl9wcml2LCBwaXBlKTsKLQotCS8qIFNldCB1cCBUeCB0YXJnZXQgZm9y IHBlcmlvZGljIFJjb21wIHVwZGF0ZSAqLwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBl LCBWTFZfUExMX0RXOV9CQ0FTVCwgMHgwMTAwMDAwZik7Ci0KLQkvKiBEaXNhYmxlIHRhcmdldCBJ UmVmIG9uIFBMTCAqLwotCXJlZ192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBW TFZfUExMX0RXOChwaXBlKSk7Ci0JcmVnX3ZhbCAmPSAweDAwZmZmZmZmOwotCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOChwaXBlKSwgcmVnX3ZhbCk7Ci0KLQkvKiBE aXNhYmxlIGZhc3QgbG9jayAqLwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZf Q01OX0RXMCwgMHg2MTApOwotCi0JLyogU2V0IGlkdGFmY3JlY2FsIGJlZm9yZSBQTEwgaXMgZW5h YmxlZCAqLwotCW1kaXYgPSAoKGJlc3RtMSA8PCBEUElPX00xRElWX1NISUZUKSB8IChiZXN0bTIg JiBEUElPX00yRElWX01BU0spKTsKLQltZGl2IHw9ICgoYmVzdHAxIDw8IERQSU9fUDFfU0hJRlQp IHwgKGJlc3RwMiA8PCBEUElPX1AyX1NISUZUKSk7Ci0JbWRpdiB8PSAoKGJlc3RuIDw8IERQSU9f Tl9TSElGVCkpOwotCW1kaXYgfD0gKDEgPDwgRFBJT19LX1NISUZUKTsKLQotCS8qCi0JICogUG9z dCBkaXZpZGVyIGRlcGVuZHMgb24gcGl4ZWwgY2xvY2sgcmF0ZSwgREFDIHZzIGRpZ2l0YWwgKGFu ZCBMVkRTLAotCSAqIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IHRoYXQpLgotCSAqIE5vdGU6IGRvbid0 IHVzZSB0aGUgREFDIHBvc3QgZGl2aWRlciBhcyBpdCBzZWVtcyB1bnN0YWJsZS4KLQkgKi8KLQlt ZGl2IHw9IChEUElPX1BPU1RfRElWX0hETUlEUCA8PCBEUElPX1BPU1RfRElWX1NISUZUKTsKLQl2 bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzMocGlwZSksIG1kaXYpOwot Ci0JbWRpdiB8PSBEUElPX0VOQUJMRV9DQUxJQlJBVElPTjsKLQl2bHZfZHBpb193cml0ZShkZXZf cHJpdiwgcGlwZSwgVkxWX1BMTF9EVzMocGlwZSksIG1kaXYpOwotCi0JLyogU2V0IEhCUiBhbmQg UkJSIExQRiBjb2VmZmljaWVudHMgKi8KLQlpZiAocGlwZV9jb25maWctPnBvcnRfY2xvY2sgPT0g MTYyMDAwIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElOVEVMX09V VFBVVF9BTkFMT0cpIHx8Ci0JICAgIGludGVsX2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElO VEVMX09VVFBVVF9IRE1JKSkKLQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9Q TExfRFcxMChwaXBlKSwKLQkJCQkgMHgwMDlmMDAwMyk7Ci0JZWxzZQotCQl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzEwKHBpcGUpLAotCQkJCSAweDAwZDAwMDBmKTsK LQotCWlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKHBpcGVfY29uZmlnKSkgewotCQkvKiBV c2UgU1NDIHNvdXJjZSAqLwotCQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCQl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzUocGlwZSksCi0JCQkJCSAweDBkZjQwMDAwKTsK LQkJZWxzZQotCQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc1KHBp cGUpLAotCQkJCQkgMHgwZGY3MDAwMCk7Ci0JfSBlbHNlIHsgLyogSERNSSBvciBWR0EgKi8KLQkJ LyogVXNlIGJlbmQgc291cmNlICovCi0JCWlmIChwaXBlID09IFBJUEVfQSkKLQkJCXZsdl9kcGlv X3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNShwaXBlKSwKLQkJCQkJIDB4MGRmNzAw MDApOwotCQllbHNlCi0JCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9E VzUocGlwZSksCi0JCQkJCSAweDBkZjQwMDAwKTsKLQl9Ci0KLQljb3JlY2xrID0gdmx2X2RwaW9f cmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzcocGlwZSkpOwotCWNvcmVjbGsgPSAoY29y ZWNsayAmIDB4MDAwMGZmMDApIHwgMHgwMWMwMDAwMDsKLQlpZiAoaW50ZWxfY3J0Y19oYXNfZHBf ZW5jb2RlcihwaXBlX2NvbmZpZykpCi0JCWNvcmVjbGsgfD0gMHgwMTAwMDAwMDsKLQl2bHZfZHBp b193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzcocGlwZSksIGNvcmVjbGspOwotCi0J dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFcxMShwaXBlKSwgMHg4Nzg3 MTAwMCk7Ci0KLQl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBjaHZf cHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWVudW0gZHBp b19jaGFubmVsIHBvcnQgPSB2bHZfcGlwZV90b19jaGFubmVsKHBpcGUpOwotCXUzMiBsb29wZmls dGVyLCB0cmlidWZfY2FsY250cjsKLQl1MzIgYmVzdG4sIGJlc3RtMSwgYmVzdG0yLCBiZXN0cDEs IGJlc3RwMiwgYmVzdG0yX2ZyYWM7Ci0JdTMyIGRwaW9fdmFsOwotCWludCB2Y287Ci0KLQkvKiBF bmFibGUgUmVmY2xrIGFuZCBTU0MgKi8KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChw aXBlKSwKLQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgJiB+RFBMTF9W Q09fRU5BQkxFKTsKLQotCS8qIE5vIG5lZWQgdG8gYWN0dWFsbHkgc2V0IHVwIHRoZSBEUExMIHdp dGggRFNJICovCi0JaWYgKChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9W Q09fRU5BQkxFKSA9PSAwKQotCQlyZXR1cm47Ci0KLQliZXN0biA9IHBpcGVfY29uZmlnLT5kcGxs Lm47Ci0JYmVzdG0yX2ZyYWMgPSBwaXBlX2NvbmZpZy0+ZHBsbC5tMiAmIDB4M2ZmZmZmOwotCWJl c3RtMSA9IHBpcGVfY29uZmlnLT5kcGxsLm0xOwotCWJlc3RtMiA9IHBpcGVfY29uZmlnLT5kcGxs Lm0yID4+IDIyOwotCWJlc3RwMSA9IHBpcGVfY29uZmlnLT5kcGxsLnAxOwotCWJlc3RwMiA9IHBp cGVfY29uZmlnLT5kcGxsLnAyOwotCXZjbyA9IHBpcGVfY29uZmlnLT5kcGxsLnZjbzsKLQlkcGlv X3ZhbCA9IDA7Ci0JbG9vcGZpbHRlciA9IDA7Ci0KLQl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOwot Ci0JLyogcDEgYW5kIHAyIGRpdmlkZXIgKi8KLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgQ0hWX0NNTl9EVzEzKHBvcnQpLAotCQkJNSA8PCBEUElPX0NIVl9TMV9ESVZfU0hJRlQgfAot CQkJYmVzdHAxIDw8IERQSU9fQ0hWX1AxX0RJVl9TSElGVCB8Ci0JCQliZXN0cDIgPDwgRFBJT19D SFZfUDJfRElWX1NISUZUIHwKLQkJCTEgPDwgRFBJT19DSFZfS19ESVZfU0hJRlQpOwotCi0JLyog RmVlZGJhY2sgcG9zdC1kaXZpZGVyIC0gbTIgKi8KLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwg cGlwZSwgQ0hWX1BMTF9EVzAocG9ydCksIGJlc3RtMik7Ci0KLQkvKiBGZWVkYmFjayByZWZjbGsg ZGl2aWRlciAtIG4gYW5kIG0xICovCi0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENI Vl9QTExfRFcxKHBvcnQpLAotCQkJRFBJT19DSFZfTTFfRElWX0JZXzIgfAotCQkJMSA8PCBEUElP X0NIVl9OX0RJVl9TSElGVCk7Ci0KLQkvKiBNMiBmcmFjdGlvbiBkaXZpc2lvbiAqLwotCXZsdl9k cGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXMihwb3J0KSwgYmVzdG0yX2ZyYWMp OwotCi0JLyogTTIgZnJhY3Rpb24gZGl2aXNpb24gZW5hYmxlICovCi0JZHBpb192YWwgPSB2bHZf ZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXMyhwb3J0KSk7Ci0JZHBpb192YWwg Jj0gfihEUElPX0NIVl9GRUVERldEX0dBSU5fTUFTSyB8IERQSU9fQ0hWX0ZSQUNfRElWX0VOKTsK LQlkcGlvX3ZhbCB8PSAoMiA8PCBEUElPX0NIVl9GRUVERldEX0dBSU5fU0hJRlQpOwotCWlmIChi ZXN0bTJfZnJhYykKLQkJZHBpb192YWwgfD0gRFBJT19DSFZfRlJBQ19ESVZfRU47Ci0Jdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFczKHBvcnQpLCBkcGlvX3ZhbCk7Ci0K LQkvKiBQcm9ncmFtIGRpZ2l0YWwgbG9jayBkZXRlY3QgdGhyZXNob2xkICovCi0JZHBpb192YWwg PSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXOShwb3J0KSk7Ci0JZHBp b192YWwgJj0gfihEUElPX0NIVl9JTlRfTE9DS19USFJFU0hPTERfTUFTSyB8Ci0JCQkJCURQSU9f Q0hWX0lOVF9MT0NLX1RIUkVTSE9MRF9TRUxfQ09BUlNFKTsKLQlkcGlvX3ZhbCB8PSAoMHg1IDw8 IERQSU9fQ0hWX0lOVF9MT0NLX1RIUkVTSE9MRF9TSElGVCk7Ci0JaWYgKCFiZXN0bTJfZnJhYykK LQkJZHBpb192YWwgfD0gRFBJT19DSFZfSU5UX0xPQ0tfVEhSRVNIT0xEX1NFTF9DT0FSU0U7Ci0J dmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc5KHBvcnQpLCBkcGlvX3Zh bCk7Ci0KLQkvKiBMb29wIGZpbHRlciAqLwotCWlmICh2Y28gPT0gNTQwMDAwMCkgewotCQlsb29w ZmlsdGVyIHw9ICgweDMgPDwgRFBJT19DSFZfUFJPUF9DT0VGRl9TSElGVCk7Ci0JCWxvb3BmaWx0 ZXIgfD0gKDB4OCA8PCBEUElPX0NIVl9JTlRfQ09FRkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9 ICgweDEgPDwgRFBJT19DSFZfR0FJTl9DVFJMX1NISUZUKTsKLQkJdHJpYnVmX2NhbGNudHIgPSAw eDk7Ci0JfSBlbHNlIGlmICh2Y28gPD0gNjIwMDAwMCkgewotCQlsb29wZmlsdGVyIHw9ICgweDUg PDwgRFBJT19DSFZfUFJPUF9DT0VGRl9TSElGVCk7Ci0JCWxvb3BmaWx0ZXIgfD0gKDB4QiA8PCBE UElPX0NIVl9JTlRfQ09FRkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9ICgweDMgPDwgRFBJT19D SFZfR0FJTl9DVFJMX1NISUZUKTsKLQkJdHJpYnVmX2NhbGNudHIgPSAweDk7Ci0JfSBlbHNlIGlm ICh2Y28gPD0gNjQ4MDAwMCkgewotCQlsb29wZmlsdGVyIHw9ICgweDQgPDwgRFBJT19DSFZfUFJP UF9DT0VGRl9TSElGVCk7Ci0JCWxvb3BmaWx0ZXIgfD0gKDB4OSA8PCBEUElPX0NIVl9JTlRfQ09F RkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9ICgweDMgPDwgRFBJT19DSFZfR0FJTl9DVFJMX1NI SUZUKTsKLQkJdHJpYnVmX2NhbGNudHIgPSAweDg7Ci0JfSBlbHNlIHsKLQkJLyogTm90IHN1cHBv cnRlZC4gQXBwbHkgdGhlIHNhbWUgbGltaXRzIGFzIGluIHRoZSBtYXggY2FzZSAqLwotCQlsb29w ZmlsdGVyIHw9ICgweDQgPDwgRFBJT19DSFZfUFJPUF9DT0VGRl9TSElGVCk7Ci0JCWxvb3BmaWx0 ZXIgfD0gKDB4OSA8PCBEUElPX0NIVl9JTlRfQ09FRkZfU0hJRlQpOwotCQlsb29wZmlsdGVyIHw9 ICgweDMgPDwgRFBJT19DSFZfR0FJTl9DVFJMX1NISUZUKTsKLQkJdHJpYnVmX2NhbGNudHIgPSAw OwotCX0KLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzYocG9ydCks IGxvb3BmaWx0ZXIpOwotCi0JZHBpb192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBl LCBDSFZfUExMX0RXOChwb3J0KSk7Ci0JZHBpb192YWwgJj0gfkRQSU9fQ0hWX1REQ19UQVJHRVRf Q05UX01BU0s7Ci0JZHBpb192YWwgfD0gKHRyaWJ1Zl9jYWxjbnRyIDw8IERQSU9fQ0hWX1REQ19U QVJHRVRfQ05UX1NISUZUKTsKLQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BM TF9EVzgocG9ydCksIGRwaW9fdmFsKTsKLQotCS8qIEFGQyBSZWNhbCAqLwotCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCksCi0JCQl2bHZfZHBpb19yZWFk KGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCkpIHwKLQkJCURQSU9fQUZDX1JFQ0FM KTsKLQotCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Ci19Ci0KLS8qKgotICogdmx2X2ZvcmNlX3Bs bF9vbiAtIGZvcmNpYmx5IGVuYWJsZSBqdXN0IHRoZSBQTEwKLSAqIEBkZXZfcHJpdjogaTkxNSBw cml2YXRlIHN0cnVjdHVyZQotICogQHBpcGU6IHBpcGUgUExMIHRvIGVuYWJsZQotICogQGRwbGw6 IFBMTCBjb25maWd1cmF0aW9uCi0gKgotICogRW5hYmxlIHRoZSBQTEwgZm9yIEBwaXBlIHVzaW5n IHRoZSBzdXBwbGllZCBAZHBsbCBjb25maWcuIFRvIGJlIHVzZWQKLSAqIGluIGNhc2VzIHdoZXJl IHdlIG5lZWQgdGhlIFBMTCBlbmFibGVkIGV2ZW4gd2hlbiBAcGlwZSBpcyBub3QgZ29pbmcgdG8K LSAqIGJlIGVuYWJsZWQuCi0gKi8KLWludCB2bHZfZm9yY2VfcGxsX29uKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCSAgICAgY29uc3Qgc3RydWN0 IGRwbGwgKmRwbGwpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSBpbnRlbF9nZXRfY3J0 Y19mb3JfcGlwZShkZXZfcHJpdiwgcGlwZSk7Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBp cGVfY29uZmlnOwotCi0JcGlwZV9jb25maWcgPSBpbnRlbF9jcnRjX3N0YXRlX2FsbG9jKGNydGMp OwotCWlmICghcGlwZV9jb25maWcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGlwZV9jb25maWct PmNwdV90cmFuc2NvZGVyID0gKGVudW0gdHJhbnNjb2RlcilwaXBlOwotCXBpcGVfY29uZmlnLT5w aXhlbF9tdWx0aXBsaWVyID0gMTsKLQlwaXBlX2NvbmZpZy0+ZHBsbCA9ICpkcGxsOwotCi0JaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWNodl9jb21wdXRlX2RwbGwoY3J0YywgcGlw ZV9jb25maWcpOwotCQljaHZfcHJlcGFyZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOwotCQljaHZf ZW5hYmxlX3BsbChjcnRjLCBwaXBlX2NvbmZpZyk7Ci0JfSBlbHNlIHsKLQkJdmx2X2NvbXB1dGVf ZHBsbChjcnRjLCBwaXBlX2NvbmZpZyk7Ci0JCXZsdl9wcmVwYXJlX3BsbChjcnRjLCBwaXBlX2Nv bmZpZyk7Ci0JCXZsdl9lbmFibGVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKLQl9Ci0KLQlrZnJl ZShwaXBlX2NvbmZpZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB2bHZfZm9yY2VfcGxs X29mZiAtIGZvcmNpYmx5IGRpc2FibGUganVzdCB0aGUgUExMCi0gKiBAZGV2X3ByaXY6IGk5MTUg cHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIEBwaXBlOiBwaXBlIFBMTCB0byBkaXNhYmxlCi0gKgotICog RGlzYWJsZSB0aGUgUExMIGZvciBAcGlwZS4gVG8gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZSBu ZWVkCi0gKiB0aGUgUExMIGVuYWJsZWQgZXZlbiB3aGVuIEBwaXBlIGlzIG5vdCBnb2luZyB0byBi ZSBlbmFibGVkLgotICovCi12b2lkIHZsdl9mb3JjZV9wbGxfb2ZmKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCi17Ci0JaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKQotCQljaHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOwotCWVsc2UKLQkJ dmx2X2Rpc2FibGVfcGxsKGRldl9wcml2LCBwaXBlKTsKLX0KLQotCi0KIHN0YXRpYyB2b2lkIGlu dGVsX3NldF90cmFuc2NvZGVyX3RpbWluZ3MoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oCmluZGV4IGY0MjE0ZTE2MWE5ZC4uMWNjMTA3M2E4ZjY0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNTg2LDkgKzU4 Niw2IEBAIHZvaWQgaW50ZWxfY2xlYW51cF9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIHZvaWQgYXNzZXJ0X3BjaF90cmFuc2NvZGVyX2Rpc2FibGVkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAgZW51bSBwaXBlIHBpcGUpOwogCi1pbnQgdmx2X2Zv cmNlX3BsbF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBw aXBlLAotCQkgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpkcGxsKTsKLXZvaWQgdmx2X2ZvcmNlX3Bs bF9vZmYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7 CiBpbnQgbHB0X2dldF9pY2xraXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK IGJvb2wgaW50ZWxfZnV6enlfY2xvY2tfY2hlY2soaW50IGNsb2NrMSwgaW50IGNsb2NrMik7CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwppbmRleCA4YjljMjA1NTVmMGUu LmIxMzE2NGRkOGIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwpA QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImludGVsX2RwLmgiCiAjaW5jbHVkZSAiaW50ZWxf ZHBfbGlua190cmFpbmluZy5oIgogI2luY2x1ZGUgImludGVsX2RwX21zdC5oIgorI2luY2x1ZGUg ImludGVsX2RwbGwuaCIKICNpbmNsdWRlICJpbnRlbF9kcGlvX3BoeS5oIgogI2luY2x1ZGUgImlu dGVsX2ZpZm9fdW5kZXJydW4uaCIKICNpbmNsdWRlICJpbnRlbF9oZGNwLmgiCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5jCmluZGV4IDdiYTdmMzE1YWFlZS4uMTY2ZTlh M2E4YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw bGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYwpAQCAt MywxMSArMywxMyBAQAogICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KICAq LwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgImludGVsX2NydGMuaCIKICNp bmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5o IgogI2luY2x1ZGUgImludGVsX2RwbGwuaCIKICNpbmNsdWRlICJpbnRlbF9sdmRzLmgiCiAjaW5j bHVkZSAiaW50ZWxfcGFuZWwuaCIKKyNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgogCiBzdHJ1 Y3QgaW50ZWxfbGltaXQgewogCXN0cnVjdCB7CkBAIC0xMzYxLDMgKzEzNjMsNTEwIEBAIGludGVs X2RwbGxfaW5pdF9jbG9ja19ob29rKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAllbHNlCiAJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfY29tcHV0ZV9jbG9jayA9IGk4eHhfY3J0 Y19jb21wdXRlX2Nsb2NrOwogfQorCitzdGF0aWMgYm9vbCBpOXh4X2hhc19wcHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChJU19JODMwKGRldl9wcml2KSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIElTX1BJTkVWSUVXKGRldl9wcml2KSB8fCBJU19NT0JJ TEUoZGV2X3ByaXYpOworfQorCit2b2lkIGk5eHhfZW5hYmxlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMt PmJhc2UuZGV2KTsKKwlpOTE1X3JlZ190IHJlZyA9IERQTEwoY3J0Yy0+cGlwZSk7CisJdTMyIGRw bGwgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGw7CisJaW50IGk7CisKKwlhc3NlcnRf cGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOworCisJ LyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5lbCwgbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSBpdCAq LworCWlmIChpOXh4X2hhc19wcHMoZGV2X3ByaXYpKQorCQlhc3NlcnRfcGFuZWxfdW5sb2NrZWQo ZGV2X3ByaXYsIGNydGMtPnBpcGUpOworCisJLyoKKwkgKiBBcHBhcmVudGx5IHdlIG5lZWQgdG8g aGF2ZSBWR0EgbW9kZSBlbmFibGVkIHByaW9yIHRvIGNoYW5naW5nCisJICogdGhlIFAxL1AyIGRp dmlkZXJzLiBPdGhlcndpc2UgdGhlIERQTEwgd2lsbCBrZWVwIHVzaW5nIHRoZSBvbGQKKwkgKiBk aXZpZGVycywgZXZlbiB0aG91Z2ggdGhlIHJlZ2lzdGVyIHZhbHVlIGRvZXMgY2hhbmdlLgorCSAq LworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIGRwbGwgJiB+RFBMTF9WR0FfTU9ERV9E SVMpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIGRwbGwpOworCisJLyogV2FpdCBm b3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNCkgeworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTF9NRChjcnRjLT5waXBlKSwK KwkJCSAgICAgICBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQpOworCX0gZWxzZSB7 CisJCS8qIFRoZSBwaXhlbCBtdWx0aXBsaWVyIGNhbiBvbmx5IGJlIHVwZGF0ZWQgb25jZSB0aGUK KwkJICogRFBMTCBpcyBlbmFibGVkIGFuZCB0aGUgY2xvY2tzIGFyZSBzdGFibGUuCisJCSAqCisJ CSAqIFNvIHdyaXRlIGl0IGFnYWluLgorCQkgKi8KKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgZHBsbCk7CisJfQorCisJLyogV2UgZG8gdGhpcyB0aHJlZSB0aW1lcyBmb3IgbHVjayAq LworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgZHBsbCk7CisJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJ dWRlbGF5KDE1MCk7IC8qIHdhaXQgZm9yIHdhcm11cCAqLworCX0KK30KKworc3RhdGljIHZvaWQg dmx2X3BsbGJfcmVjYWxfb3BhbXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAor CQkJCSBlbnVtIHBpcGUgcGlwZSkKK3sKKwl1MzIgcmVnX3ZhbDsKKworCS8qCisJICogUExMQiBv cGFtcCBhbHdheXMgY2FsaWJyYXRlcyB0byBtYXggdmFsdWUgb2YgMHgzZiwgZm9yY2UgZW5hYmxl IGl0CisJICogYW5kIHNldCBpdCB0byBhIHJlYXNvbmFibGUgdmFsdWUgaW5zdGVhZC4KKwkgKi8K KwlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzkoMSkp OworCXJlZ192YWwgJj0gMHhmZmZmZmYwMDsKKwlyZWdfdmFsIHw9IDB4MDAwMDAwMzA7CisJdmx2 X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5KDEpLCByZWdfdmFsKTsKKwor CXJlZ192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMpOwor CXJlZ192YWwgJj0gMHgwMGZmZmZmZjsKKwlyZWdfdmFsIHw9IDB4OGMwMDAwMDA7CisJdmx2X2Rw aW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9SRUZfRFcxMywgcmVnX3ZhbCk7CisKKwlyZWdf dmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzkoMSkpOworCXJl Z192YWwgJj0gMHhmZmZmZmYwMDsKKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxW X1BMTF9EVzkoMSksIHJlZ192YWwpOworCisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3By aXYsIHBpcGUsIFZMVl9SRUZfRFcxMyk7CisJcmVnX3ZhbCAmPSAweDAwZmZmZmZmOworCXJlZ192 YWwgfD0gMHhiMDAwMDAwMDsKKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1JF Rl9EVzEzLCByZWdfdmFsKTsKK30KKworc3RhdGljIHZvaWQgX3Zsdl9lbmFibGVfcGxsKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisK KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwgcGlwZV9jb25maWctPmRwbGxf aHdfc3RhdGUuZHBsbCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBp cGUpKTsKKwl1ZGVsYXkoMTUwKTsKKworCWlmIChpbnRlbF9kZV93YWl0X2Zvcl9zZXQoZGV2X3By aXYsIERQTEwocGlwZSksIERQTExfTE9DS19WTFYsIDEpKQorCQlkcm1fZXJyKCZkZXZfcHJpdi0+ ZHJtLCAiRFBMTCAlZCBmYWlsZWQgdG8gbG9ja1xuIiwgcGlwZSk7Cit9CisKK3ZvaWQgdmx2X2Vu YWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBj cnRjLT5waXBlOworCisJYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGVfY29uZmln LT5jcHVfdHJhbnNjb2Rlcik7CisKKwkvKiBQTEwgaXMgcHJvdGVjdGVkIGJ5IHBhbmVsLCBtYWtl IHN1cmUgd2UgY2FuIHdyaXRlIGl0ICovCisJYXNzZXJ0X3BhbmVsX3VubG9ja2VkKGRldl9wcml2 LCBwaXBlKTsKKworCWlmIChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9W Q09fRU5BQkxFKQorCQlfdmx2X2VuYWJsZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOworCisJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExfTUQocGlwZSksCisJCSAgICAgICBwaXBlX2NvbmZp Zy0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIERQTExfTUQocGlwZSkpOworfQorCisKK3N0YXRpYyB2b2lkIF9jaHZfZW5hYmxlX3BsbChz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBl OworCWVudW0gZHBpb19jaGFubmVsIHBvcnQgPSB2bHZfcGlwZV90b19jaGFubmVsKHBpcGUpOwor CXUzMiB0bXA7CisKKwl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOworCisJLyogRW5hYmxlIGJhY2sg dGhlIDEwYml0IGNsb2NrIHRvIGRpc3BsYXkgY29udHJvbGxlciAqLworCXRtcCA9IHZsdl9kcGlv X3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxNChwb3J0KSk7CisJdG1wIHw9IERQSU9f RENMS1BfRU47CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxNChw b3J0KSwgdG1wKTsKKworCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7CisKKwkvKgorCSAqIE5lZWQg dG8gd2FpdCA+IDEwMG5zIGJldHdlZW4gZGNsa3AgY2xvY2sgZW5hYmxlIGJpdCBhbmQgUExMIGVu YWJsZS4KKwkgKi8KKwl1ZGVsYXkoMSk7CisKKwkvKiBFbmFibGUgUExMICovCisJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRw bGwpOworCisJLyogQ2hlY2sgUExMIGlzIGxvY2tlZCAqLworCWlmIChpbnRlbF9kZV93YWl0X2Zv cl9zZXQoZGV2X3ByaXYsIERQTEwocGlwZSksIERQTExfTE9DS19WTFYsIDEpKQorCQlkcm1fZXJy KCZkZXZfcHJpdi0+ZHJtLCAiUExMICVkIGZhaWxlZCB0byBsb2NrXG4iLCBwaXBlKTsKK30KKwor dm9pZCBjaHZfZW5hYmxlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7CisKKwlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwg cGlwZV9jb25maWctPmNwdV90cmFuc2NvZGVyKTsKKworCS8qIFBMTCBpcyBwcm90ZWN0ZWQgYnkg cGFuZWwsIG1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUgaXQgKi8KKwlhc3NlcnRfcGFuZWxfdW5sb2Nr ZWQoZGV2X3ByaXYsIHBpcGUpOworCisJaWYgKHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRw bGwgJiBEUExMX1ZDT19FTkFCTEUpCisJCV9jaHZfZW5hYmxlX3BsbChjcnRjLCBwaXBlX2NvbmZp Zyk7CisKKwlpZiAocGlwZSAhPSBQSVBFX0EpIHsKKwkJLyoKKwkJICogV2FQaXhlbFJlcGVhdE1v ZGVGaXhGb3JDMDpjaHYKKwkJICoKKwkJICogRFBMTENNRCBpcyBBV09MLiBVc2UgY2hpY2tlbiBi aXRzIHRvIHByb3BhZ2F0ZQorCQkgKiB0aGUgdmFsdWUgZnJvbSBEUExMQk1EIHRvIGVpdGhlciBw aXBlIEIgb3IgQy4KKwkJICovCisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBDQlI0X1ZMViwg Q0JSX0RQTExCTURfUElQRShwaXBlKSk7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExM X01EKFBJUEVfQiksCisJCQkgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9t ZCk7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBDQlI0X1ZMViwgMCk7CisJCWRldl9wcml2 LT5jaHZfZHBsbF9tZFtwaXBlXSA9IHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQ7 CisKKwkJLyoKKwkJICogRFBMTEIgVkdBIG1vZGUgYWxzbyBzZWVtcyB0byBjYXVzZSBwcm9ibGVt cy4KKwkJICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGl0IGRpc2FibGVkLgorCQkgKi8KKwkJZHJt X1dBUk5fT04oJmRldl9wcml2LT5kcm0sCisJCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IERQTEwoUElQRV9CKSkgJgorCQkJICAgICBEUExMX1ZHQV9NT0RFX0RJUykgPT0gMCk7CisJfSBl bHNlIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExfTUQocGlwZSksCisJCQkgICAg ICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCk7CisJCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgRFBMTF9NRChwaXBlKSk7CisJfQorfQorCit2b2lkIHZsdl9wcmVw YXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisJdTMyIG1kaXY7CisJ dTMyIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwgYmVzdHAxLCBiZXN0cDI7CisJdTMyIGNvcmVjbGss IHJlZ192YWw7CisKKwkvKiBFbmFibGUgUmVmY2xrICovCisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIERQTEwocGlwZSksCisJCSAgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxs ICYgfihEUExMX1ZDT19FTkFCTEUgfCBEUExMX0VYVF9CVUZGRVJfRU5BQkxFX1ZMVikpOworCisJ LyogTm8gbmVlZCB0byBhY3R1YWxseSBzZXQgdXAgdGhlIERQTEwgd2l0aCBEU0kgKi8KKwlpZiAo KHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgJiBEUExMX1ZDT19FTkFCTEUpID09IDAp CisJCXJldHVybjsKKworCXZsdl9kcGlvX2dldChkZXZfcHJpdik7CisKKwliZXN0biA9IHBpcGVf Y29uZmlnLT5kcGxsLm47CisJYmVzdG0xID0gcGlwZV9jb25maWctPmRwbGwubTE7CisJYmVzdG0y ID0gcGlwZV9jb25maWctPmRwbGwubTI7CisJYmVzdHAxID0gcGlwZV9jb25maWctPmRwbGwucDE7 CisJYmVzdHAyID0gcGlwZV9jb25maWctPmRwbGwucDI7CisKKwkvKiBTZWUgZURQIEhETUkgRFBJ TyBkcml2ZXIgdmJpb3Mgbm90ZXMgZG9jICovCisKKwkvKiBQTEwgQiBuZWVkcyBzcGVjaWFsIGhh bmRsaW5nICovCisJaWYgKHBpcGUgPT0gUElQRV9CKQorCQl2bHZfcGxsYl9yZWNhbF9vcGFtcChk ZXZfcHJpdiwgcGlwZSk7CisKKwkvKiBTZXQgdXAgVHggdGFyZ2V0IGZvciBwZXJpb2RpYyBSY29t cCB1cGRhdGUgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzlf QkNBU1QsIDB4MDEwMDAwMGYpOworCisJLyogRGlzYWJsZSB0YXJnZXQgSVJlZiBvbiBQTEwgKi8K KwlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzgocGlw ZSkpOworCXJlZ192YWwgJj0gMHgwMGZmZmZmZjsKKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwg cGlwZSwgVkxWX1BMTF9EVzgocGlwZSksIHJlZ192YWwpOworCisJLyogRGlzYWJsZSBmYXN0IGxv Y2sgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX0NNTl9EVzAsIDB4NjEw KTsKKworCS8qIFNldCBpZHRhZmNyZWNhbCBiZWZvcmUgUExMIGlzIGVuYWJsZWQgKi8KKwltZGl2 ID0gKChiZXN0bTEgPDwgRFBJT19NMURJVl9TSElGVCkgfCAoYmVzdG0yICYgRFBJT19NMkRJVl9N QVNLKSk7CisJbWRpdiB8PSAoKGJlc3RwMSA8PCBEUElPX1AxX1NISUZUKSB8IChiZXN0cDIgPDwg RFBJT19QMl9TSElGVCkpOworCW1kaXYgfD0gKChiZXN0biA8PCBEUElPX05fU0hJRlQpKTsKKwlt ZGl2IHw9ICgxIDw8IERQSU9fS19TSElGVCk7CisKKwkvKgorCSAqIFBvc3QgZGl2aWRlciBkZXBl bmRzIG9uIHBpeGVsIGNsb2NrIHJhdGUsIERBQyB2cyBkaWdpdGFsIChhbmQgTFZEUywKKwkgKiBi dXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGF0KS4KKwkgKiBOb3RlOiBkb24ndCB1c2UgdGhlIERBQyBw b3N0IGRpdmlkZXIgYXMgaXQgc2VlbXMgdW5zdGFibGUuCisJICovCisJbWRpdiB8PSAoRFBJT19Q T1NUX0RJVl9IRE1JRFAgPDwgRFBJT19QT1NUX0RJVl9TSElGVCk7CisJdmx2X2RwaW9fd3JpdGUo ZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFczKHBpcGUpLCBtZGl2KTsKKworCW1kaXYgfD0gRFBJ T19FTkFCTEVfQ0FMSUJSQVRJT047CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZM Vl9QTExfRFczKHBpcGUpLCBtZGl2KTsKKworCS8qIFNldCBIQlIgYW5kIFJCUiBMUEYgY29lZmZp Y2llbnRzICovCisJaWYgKHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID09IDE2MjAwMCB8fAorCSAg ICBpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSB8 fAorCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRfSERN SSkpCisJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXMTAocGlwZSks CisJCQkJIDB4MDA5ZjAwMDMpOworCWVsc2UKKwkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIFZMVl9QTExfRFcxMChwaXBlKSwKKwkJCQkgMHgwMGQwMDAwZik7CisKKwlpZiAoaW50ZWxf Y3J0Y19oYXNfZHBfZW5jb2RlcihwaXBlX2NvbmZpZykpIHsKKwkJLyogVXNlIFNTQyBzb3VyY2Ug Ki8KKwkJaWYgKHBpcGUgPT0gUElQRV9BKQorCQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIFZMVl9QTExfRFc1KHBpcGUpLAorCQkJCQkgMHgwZGY0MDAwMCk7CisJCWVsc2UKKwkJCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNShwaXBlKSwKKwkJCQkJIDB4 MGRmNzAwMDApOworCX0gZWxzZSB7IC8qIEhETUkgb3IgVkdBICovCisJCS8qIFVzZSBiZW5kIHNv dXJjZSAqLworCQlpZiAocGlwZSA9PSBQSVBFX0EpCisJCQl2bHZfZHBpb193cml0ZShkZXZfcHJp diwgcGlwZSwgVkxWX1BMTF9EVzUocGlwZSksCisJCQkJCSAweDBkZjcwMDAwKTsKKwkJZWxzZQor CQkJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc1KHBpcGUpLAorCQkJ CQkgMHgwZGY0MDAwMCk7CisJfQorCisJY29yZWNsayA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYs IHBpcGUsIFZMVl9QTExfRFc3KHBpcGUpKTsKKwljb3JlY2xrID0gKGNvcmVjbGsgJiAweDAwMDBm ZjAwKSB8IDB4MDFjMDAwMDA7CisJaWYgKGludGVsX2NydGNfaGFzX2RwX2VuY29kZXIocGlwZV9j b25maWcpKQorCQljb3JlY2xrIHw9IDB4MDEwMDAwMDA7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3By aXYsIHBpcGUsIFZMVl9QTExfRFc3KHBpcGUpLCBjb3JlY2xrKTsKKworCXZsdl9kcGlvX3dyaXRl KGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXMTEocGlwZSksIDB4ODc4NzEwMDApOworCisJdmx2 X2RwaW9fcHV0KGRldl9wcml2KTsKK30KKwordm9pZCBjaHZfcHJlcGFyZV9wbGwoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBp cGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWVudW0gZHBpb19jaGFubmVsIHBvcnQgPSB2bHZf cGlwZV90b19jaGFubmVsKHBpcGUpOworCXUzMiBsb29wZmlsdGVyLCB0cmlidWZfY2FsY250cjsK Kwl1MzIgYmVzdG4sIGJlc3RtMSwgYmVzdG0yLCBiZXN0cDEsIGJlc3RwMiwgYmVzdG0yX2ZyYWM7 CisJdTMyIGRwaW9fdmFsOworCWludCB2Y287CisKKwkvKiBFbmFibGUgUmVmY2xrIGFuZCBTU0Mg Ki8KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwKKwkJICAgICAgIHBpcGVf Y29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGwgJiB+RFBMTF9WQ09fRU5BQkxFKTsKKworCS8qIE5v IG5lZWQgdG8gYWN0dWFsbHkgc2V0IHVwIHRoZSBEUExMIHdpdGggRFNJICovCisJaWYgKChwaXBl X2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxFKSA9PSAwKQorCQly ZXR1cm47CisKKwliZXN0biA9IHBpcGVfY29uZmlnLT5kcGxsLm47CisJYmVzdG0yX2ZyYWMgPSBw aXBlX2NvbmZpZy0+ZHBsbC5tMiAmIDB4M2ZmZmZmOworCWJlc3RtMSA9IHBpcGVfY29uZmlnLT5k cGxsLm0xOworCWJlc3RtMiA9IHBpcGVfY29uZmlnLT5kcGxsLm0yID4+IDIyOworCWJlc3RwMSA9 IHBpcGVfY29uZmlnLT5kcGxsLnAxOworCWJlc3RwMiA9IHBpcGVfY29uZmlnLT5kcGxsLnAyOwor CXZjbyA9IHBpcGVfY29uZmlnLT5kcGxsLnZjbzsKKwlkcGlvX3ZhbCA9IDA7CisJbG9vcGZpbHRl ciA9IDA7CisKKwl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOworCisJLyogcDEgYW5kIHAyIGRpdmlk ZXIgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzEzKHBvcnQp LAorCQkJNSA8PCBEUElPX0NIVl9TMV9ESVZfU0hJRlQgfAorCQkJYmVzdHAxIDw8IERQSU9fQ0hW X1AxX0RJVl9TSElGVCB8CisJCQliZXN0cDIgPDwgRFBJT19DSFZfUDJfRElWX1NISUZUIHwKKwkJ CTEgPDwgRFBJT19DSFZfS19ESVZfU0hJRlQpOworCisJLyogRmVlZGJhY2sgcG9zdC1kaXZpZGVy IC0gbTIgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzAocG9y dCksIGJlc3RtMik7CisKKwkvKiBGZWVkYmFjayByZWZjbGsgZGl2aWRlciAtIG4gYW5kIG0xICov CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFcxKHBvcnQpLAorCQkJ RFBJT19DSFZfTTFfRElWX0JZXzIgfAorCQkJMSA8PCBEUElPX0NIVl9OX0RJVl9TSElGVCk7CisK KwkvKiBNMiBmcmFjdGlvbiBkaXZpc2lvbiAqLworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBw aXBlLCBDSFZfUExMX0RXMihwb3J0KSwgYmVzdG0yX2ZyYWMpOworCisJLyogTTIgZnJhY3Rpb24g ZGl2aXNpb24gZW5hYmxlICovCisJZHBpb192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBw aXBlLCBDSFZfUExMX0RXMyhwb3J0KSk7CisJZHBpb192YWwgJj0gfihEUElPX0NIVl9GRUVERldE X0dBSU5fTUFTSyB8IERQSU9fQ0hWX0ZSQUNfRElWX0VOKTsKKwlkcGlvX3ZhbCB8PSAoMiA8PCBE UElPX0NIVl9GRUVERldEX0dBSU5fU0hJRlQpOworCWlmIChiZXN0bTJfZnJhYykKKwkJZHBpb192 YWwgfD0gRFBJT19DSFZfRlJBQ19ESVZfRU47CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIENIVl9QTExfRFczKHBvcnQpLCBkcGlvX3ZhbCk7CisKKwkvKiBQcm9ncmFtIGRpZ2l0YWwg bG9jayBkZXRlY3QgdGhyZXNob2xkICovCisJZHBpb192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBDSFZfUExMX0RXOShwb3J0KSk7CisJZHBpb192YWwgJj0gfihEUElPX0NIVl9J TlRfTE9DS19USFJFU0hPTERfTUFTSyB8CisJCQkJCURQSU9fQ0hWX0lOVF9MT0NLX1RIUkVTSE9M RF9TRUxfQ09BUlNFKTsKKwlkcGlvX3ZhbCB8PSAoMHg1IDw8IERQSU9fQ0hWX0lOVF9MT0NLX1RI UkVTSE9MRF9TSElGVCk7CisJaWYgKCFiZXN0bTJfZnJhYykKKwkJZHBpb192YWwgfD0gRFBJT19D SFZfSU5UX0xPQ0tfVEhSRVNIT0xEX1NFTF9DT0FSU0U7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3By aXYsIHBpcGUsIENIVl9QTExfRFc5KHBvcnQpLCBkcGlvX3ZhbCk7CisKKwkvKiBMb29wIGZpbHRl ciAqLworCWlmICh2Y28gPT0gNTQwMDAwMCkgeworCQlsb29wZmlsdGVyIHw9ICgweDMgPDwgRFBJ T19DSFZfUFJPUF9DT0VGRl9TSElGVCk7CisJCWxvb3BmaWx0ZXIgfD0gKDB4OCA8PCBEUElPX0NI Vl9JTlRfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDEgPDwgRFBJT19DSFZfR0FJ Tl9DVFJMX1NISUZUKTsKKwkJdHJpYnVmX2NhbGNudHIgPSAweDk7CisJfSBlbHNlIGlmICh2Y28g PD0gNjIwMDAwMCkgeworCQlsb29wZmlsdGVyIHw9ICgweDUgPDwgRFBJT19DSFZfUFJPUF9DT0VG Rl9TSElGVCk7CisJCWxvb3BmaWx0ZXIgfD0gKDB4QiA8PCBEUElPX0NIVl9JTlRfQ09FRkZfU0hJ RlQpOworCQlsb29wZmlsdGVyIHw9ICgweDMgPDwgRFBJT19DSFZfR0FJTl9DVFJMX1NISUZUKTsK KwkJdHJpYnVmX2NhbGNudHIgPSAweDk7CisJfSBlbHNlIGlmICh2Y28gPD0gNjQ4MDAwMCkgewor CQlsb29wZmlsdGVyIHw9ICgweDQgPDwgRFBJT19DSFZfUFJPUF9DT0VGRl9TSElGVCk7CisJCWxv b3BmaWx0ZXIgfD0gKDB4OSA8PCBEUElPX0NIVl9JTlRfQ09FRkZfU0hJRlQpOworCQlsb29wZmls dGVyIHw9ICgweDMgPDwgRFBJT19DSFZfR0FJTl9DVFJMX1NISUZUKTsKKwkJdHJpYnVmX2NhbGNu dHIgPSAweDg7CisJfSBlbHNlIHsKKwkJLyogTm90IHN1cHBvcnRlZC4gQXBwbHkgdGhlIHNhbWUg bGltaXRzIGFzIGluIHRoZSBtYXggY2FzZSAqLworCQlsb29wZmlsdGVyIHw9ICgweDQgPDwgRFBJ T19DSFZfUFJPUF9DT0VGRl9TSElGVCk7CisJCWxvb3BmaWx0ZXIgfD0gKDB4OSA8PCBEUElPX0NI Vl9JTlRfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDMgPDwgRFBJT19DSFZfR0FJ Tl9DVFJMX1NISUZUKTsKKwkJdHJpYnVmX2NhbGNudHIgPSAwOworCX0KKwl2bHZfZHBpb193cml0 ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzYocG9ydCksIGxvb3BmaWx0ZXIpOworCisJZHBp b192YWwgPSB2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXOChwb3J0KSk7 CisJZHBpb192YWwgJj0gfkRQSU9fQ0hWX1REQ19UQVJHRVRfQ05UX01BU0s7CisJZHBpb192YWwg fD0gKHRyaWJ1Zl9jYWxjbnRyIDw8IERQSU9fQ0hWX1REQ19UQVJHRVRfQ05UX1NISUZUKTsKKwl2 bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzgocG9ydCksIGRwaW9fdmFs KTsKKworCS8qIEFGQyBSZWNhbCAqLworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBD SFZfQ01OX0RXMTQocG9ydCksCisJCQl2bHZfZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZf Q01OX0RXMTQocG9ydCkpIHwKKwkJCURQSU9fQUZDX1JFQ0FMKTsKKworCXZsdl9kcGlvX3B1dChk ZXZfcHJpdik7Cit9CisKKy8qKgorICogdmx2X2ZvcmNlX3BsbF9vbiAtIGZvcmNpYmx5IGVuYWJs ZSBqdXN0IHRoZSBQTEwKKyAqIEBkZXZfcHJpdjogaTkxNSBwcml2YXRlIHN0cnVjdHVyZQorICog QHBpcGU6IHBpcGUgUExMIHRvIGVuYWJsZQorICogQGRwbGw6IFBMTCBjb25maWd1cmF0aW9uCisg KgorICogRW5hYmxlIHRoZSBQTEwgZm9yIEBwaXBlIHVzaW5nIHRoZSBzdXBwbGllZCBAZHBsbCBj b25maWcuIFRvIGJlIHVzZWQKKyAqIGluIGNhc2VzIHdoZXJlIHdlIG5lZWQgdGhlIFBMTCBlbmFi bGVkIGV2ZW4gd2hlbiBAcGlwZSBpcyBub3QgZ29pbmcgdG8KKyAqIGJlIGVuYWJsZWQuCisgKi8K K2ludCB2bHZfZm9yY2VfcGxsX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg ZW51bSBwaXBlIHBpcGUsCisJCSAgICAgY29uc3Qgc3RydWN0IGRwbGwgKmRwbGwpCit7CisJc3Ry dWN0IGludGVsX2NydGMgKmNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwg cGlwZSk7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnOworCisJcGlwZV9j b25maWcgPSBpbnRlbF9jcnRjX3N0YXRlX2FsbG9jKGNydGMpOworCWlmICghcGlwZV9jb25maWcp CisJCXJldHVybiAtRU5PTUVNOworCisJcGlwZV9jb25maWctPmNwdV90cmFuc2NvZGVyID0gKGVu dW0gdHJhbnNjb2RlcilwaXBlOworCXBpcGVfY29uZmlnLT5waXhlbF9tdWx0aXBsaWVyID0gMTsK KwlwaXBlX2NvbmZpZy0+ZHBsbCA9ICpkcGxsOworCisJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKSB7CisJCWNodl9jb21wdXRlX2RwbGwoY3J0YywgcGlwZV9jb25maWcpOworCQljaHZfcHJl cGFyZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOworCQljaHZfZW5hYmxlX3BsbChjcnRjLCBwaXBl X2NvbmZpZyk7CisJfSBlbHNlIHsKKwkJdmx2X2NvbXB1dGVfZHBsbChjcnRjLCBwaXBlX2NvbmZp Zyk7CisJCXZsdl9wcmVwYXJlX3BsbChjcnRjLCBwaXBlX2NvbmZpZyk7CisJCXZsdl9lbmFibGVf cGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwl9CisKKwlrZnJlZShwaXBlX2NvbmZpZyk7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCB2bHZfZGlzYWJsZV9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwl1MzIgdmFsOworCisJLyogTWFrZSBz dXJlIHRoZSBwaXBlIGlzbid0IHN0aWxsIHJlbHlpbmcgb24gdXMgKi8KKwlhc3NlcnRfcGlwZV9k aXNhYmxlZChkZXZfcHJpdiwgKGVudW0gdHJhbnNjb2RlcilwaXBlKTsKKworCXZhbCA9IERQTExf SU5URUdSQVRFRF9SRUZfQ0xLX1ZMViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBM TF9WR0FfTU9ERV9ESVM7CisJaWYgKHBpcGUgIT0gUElQRV9BKQorCQl2YWwgfD0gRFBMTF9JTlRF R1JBVEVEX0NSSV9DTEtfVkxWOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlw ZSksIHZhbCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsK K30KKwordm9pZCBjaHZfZGlzYWJsZV9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2X3Bp cGVfdG9fY2hhbm5lbChwaXBlKTsKKwl1MzIgdmFsOworCisJLyogTWFrZSBzdXJlIHRoZSBwaXBl IGlzbid0IHN0aWxsIHJlbHlpbmcgb24gdXMgKi8KKwlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZf cHJpdiwgKGVudW0gdHJhbnNjb2RlcilwaXBlKTsKKworCXZhbCA9IERQTExfU1NDX1JFRl9DTEtf Q0hWIHwKKwkJRFBMTF9SRUZfQ0xLX0VOQUJMRV9WTFYgfCBEUExMX1ZHQV9NT0RFX0RJUzsKKwlp ZiAocGlwZSAhPSBQSVBFX0EpCisJCXZhbCB8PSBEUExMX0lOVEVHUkFURURfQ1JJX0NMS19WTFY7 CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRFBMTChwaXBlKSwgdmFsKTsKKwlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpOworCisJdmx2X2RwaW9fZ2V0KGRl dl9wcml2KTsKKworCS8qIERpc2FibGUgMTBiaXQgY2xvY2sgdG8gZGlzcGxheSBjb250cm9sbGVy ICovCisJdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX0NNTl9EVzE0KHBv cnQpKTsKKwl2YWwgJj0gfkRQSU9fRENMS1BfRU47CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYs IHBpcGUsIENIVl9DTU5fRFcxNChwb3J0KSwgdmFsKTsKKworCXZsdl9kcGlvX3B1dChkZXZfcHJp dik7Cit9CisKK3ZvaWQgaTl4eF9kaXNhYmxlX3BsbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGNy dGMtPnBpcGU7CisKKwkvKiBEb24ndCBkaXNhYmxlIHBpcGUgb3IgcGlwZSBQTExzIGlmIG5lZWRl ZCAqLworCWlmIChJU19JODMwKGRldl9wcml2KSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBzdXJl IHRoZSBwaXBlIGlzbid0IHN0aWxsIHJlbHlpbmcgb24gdXMgKi8KKwlhc3NlcnRfcGlwZV9kaXNh YmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOworCisJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIERQTExfVkdBX01PREVfRElTKTsKKwlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTEwocGlwZSkpOworfQorCisKKy8qKgorICogdmx2 X2ZvcmNlX3BsbF9vZmYgLSBmb3JjaWJseSBkaXNhYmxlIGp1c3QgdGhlIFBMTAorICogQGRldl9w cml2OiBpOTE1IHByaXZhdGUgc3RydWN0dXJlCisgKiBAcGlwZTogcGlwZSBQTEwgdG8gZGlzYWJs ZQorICoKKyAqIERpc2FibGUgdGhlIFBMTCBmb3IgQHBpcGUuIFRvIGJlIHVzZWQgaW4gY2FzZXMg d2hlcmUgd2UgbmVlZAorICogdGhlIFBMTCBlbmFibGVkIGV2ZW4gd2hlbiBAcGlwZSBpcyBub3Qg Z29pbmcgdG8gYmUgZW5hYmxlZC4KKyAqLwordm9pZCB2bHZfZm9yY2VfcGxsX29mZihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQoreworCWlmIChJU19D SEVSUllWSUVXKGRldl9wcml2KSkKKwkJY2h2X2Rpc2FibGVfcGxsKGRldl9wcml2LCBwaXBlKTsK KwllbHNlCisJCXZsdl9kaXNhYmxlX3BsbChkZXZfcHJpdiwgcGlwZSk7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBsbC5oCmluZGV4IGNhZjQ2MTUwOTJlMS4uN2ZmNGIw ZDI5ZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw bGwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuaApAQCAt MTAsNiArMTAsNyBAQCBzdHJ1Y3QgZHBsbDsKIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlOwogc3Ry dWN0IGludGVsX2NydGM7CiBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKK2VudW0gcGlwZTsKIAog dm9pZCBpbnRlbF9kcGxsX2luaXRfY2xvY2tfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogaW50IHZsdl9jYWxjX2RwbGxfcGFyYW1zKGludCByZWZjbGssIHN0cnVjdCBk cGxsICpjbG9jayk7CkBAIC0yMCw0ICsyMSwyMSBAQCB2b2lkIHZsdl9jb21wdXRlX2RwbGwoc3Ry dWN0IGludGVsX2NydGMgKmNydGMsCiB2b2lkIGNodl9jb21wdXRlX2RwbGwoc3RydWN0IGludGVs X2NydGMgKmNydGMsCiAJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZp Zyk7CiAKK2ludCB2bHZfZm9yY2VfcGxsX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgZW51bSBwaXBlIHBpcGUsCisJCSAgICAgY29uc3Qgc3RydWN0IGRwbGwgKmRwbGwpOwor dm9pZCB2bHZfZm9yY2VfcGxsX29mZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGVudW0gcGlwZSBwaXBlKTsKK3ZvaWQgaTl4eF9lbmFibGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KTsKK3ZvaWQgdmx2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwordm9pZCBjaHZfZW5h YmxlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cit2b2lkIHZsdl9kaXNhYmxlX3BsbChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKTsKK3ZvaWQgY2h2X2Rp c2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBp cGUpOwordm9pZCBpOXh4X2Rpc2FibGVfcGxsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKTsKK3ZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7 Cit2b2lkIGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOworCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jCmluZGV4IDU4ZWZmNjI4OWQxMi4u MGE5YjJhYmYyOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Bwcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMK QEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpbnRlbF9k aXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHAuaCIKKyNpbmNsdWRlICJpbnRlbF9k cGxsLmgiCiAjaW5jbHVkZSAiaW50ZWxfcHBzLmgiCiAKIHN0YXRpYyB2b2lkIHZsdl9zdGVhbF9w b3dlcl9zZXF1ZW5jZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotLSAKMi4y Ny4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK