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 C63F6C433E9 for ; Wed, 27 Jan 2021 03:06:14 +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 815E6205F4 for ; Wed, 27 Jan 2021 03:06:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 815E6205F4 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 EB9D06E4F3; Wed, 27 Jan 2021 03:06:13 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id C13436E4E6 for ; Wed, 27 Jan 2021 03:06:11 +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-491-vqPwV0zxN9WC47n6YCDNcQ-1; Tue, 26 Jan 2021 22:06:08 -0500 X-MC-Unique: vqPwV0zxN9WC47n6YCDNcQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 53BC259; Wed, 27 Jan 2021 03:06:07 +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 5B33060C05; Wed, 27 Jan 2021 03:06:06 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 27 Jan 2021 13:05:45 +1000 Message-Id: <20210127030548.29296-8-airlied@gmail.com> In-Reply-To: <20210127030548.29296-1-airlied@gmail.com> References: <20210127030548.29296-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 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 IDljMmZlZTAxNzhmOC4uNDRiMDU0ZDVhOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTEzLDEwICsxMTMsNiBAQCBzdGF0aWMgdm9pZCBp OXh4X3NldF9waXBlY29uZihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSk7CiBzdGF0aWMgdm9pZCBpbGtfc2V0X3BpcGVjb25mKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGhzd19zZXRfcGlwZWNvbmYoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgYmR3X3Nl dF9waXBlbWlzYyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci1z dGF0aWMgdm9pZCB2bHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKLXN0YXRpYyB2 b2lkIGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGljIHZvaWQgaWxr X3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK IHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKQEAg LTU2OSwyMjQgKzU2NSw2IEBAIHN0YXRpYyB2b2lkIGFzc2VydF9wY2hfcG9ydHNfZGlzYWJsZWQo 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 dGVkX21hc2spCkBAIC01NzY3LDM1ICs1NTQ1LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfcGFuZWxf c2FuaXRpemVfc3NjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaXBlCi0JCXBpcGUpCi17Ci0JdTMyIHJlZ192YWw7Ci0KLQkvKgot CSAqIFBMTEIgb3BhbXAgYWx3YXlzIGNhbGlicmF0ZXMgdG8gbWF4IHZhbHVlIG9mIDB4M2YsIGZv cmNlIGVuYWJsZSBpdAotCSAqIGFuZCBzZXQgaXQgdG8gYSByZWFzb25hYmxlIHZhbHVlIGluc3Rl YWQuCi0JICovCi0JcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9Q TExfRFc5KDEpKTsKLQlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7Ci0JcmVnX3ZhbCB8PSAweDAwMDAw MDMwOwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOSgxKSwgcmVn X3ZhbCk7Ci0KLQlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1JF Rl9EVzEzKTsKLQlyZWdfdmFsICY9IDB4MDBmZmZmZmY7Ci0JcmVnX3ZhbCB8PSAweDhjMDAwMDAw OwotCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMsIHJlZ192YWwp OwotCi0JcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5 KDEpKTsKLQlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYs IHBpcGUsIFZMVl9QTExfRFc5KDEpLCByZWdfdmFsKTsKLQotCXJlZ192YWwgPSB2bHZfZHBpb19y ZWFkKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMpOwotCXJlZ192YWwgJj0gMHgwMGZmZmZm ZjsKLQlyZWdfdmFsIHw9IDB4YjAwMDAwMDA7Ci0Jdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBp cGUsIFZMVl9SRUZfRFcxMywgcmVnX3ZhbCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX3BjaF90 cmFuc2NvZGVyX3NldF9tX24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfbGlua19tX24gKm1fbikKIHsKQEAgLTU4OTEs MjY3ICs1NjQwLDYgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbV9uKGNvbnN0IHN0cnVjdCBpbnRlbF9j 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 aW50ZWxfZGlzcGxheS5oCmluZGV4IGMxNzZjMzFjM2VjMi4uMWUwNTA4YmVjM2U1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNTg1LDkgKzU4 NSw2IEBAIHZvaWQgaW50ZWxfY2xlYW51cF9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIHZvaWQgYXNzZXJ0X3BjaF90cmFuc2NvZGVyX2Rpc2FibGVkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAgZW51bSBwaXBlIHBpcGUpOwogCi1pbnQgdmx2X2Zv cmNlX3BsbF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBw aXBlLAotCQkgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpkcGxsKTsKLXZvaWQgdmx2X2ZvcmNlX3Bs bF9vZmYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7 CiBpbnQgbHB0X2dldF9pY2xraXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK IGJvb2wgaW50ZWxfZnV6enlfY2xvY2tfY2hlY2soaW50IGNsb2NrMSwgaW50IGNsb2NrMik7CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwppbmRleCA4YzEyZDUzNzU2MDcu LmRkMTM0ODM3MDdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwpA QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImludGVsX2RwX2F1eC5oIgogI2luY2x1ZGUgImlu dGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKICNpbmNsdWRlICJpbnRlbF9kcF9tc3QuaCIKKyNpbmNs dWRlICJpbnRlbF9kcGxsLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBpb19waHkuaCIKICNpbmNsdWRl ICJpbnRlbF9maWZvX3VuZGVycnVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuYwppbmRleCA3YmE3ZjMxNWFhZWUuLjE2 NmU5YTNhOGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcGxsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmMK QEAgLTMsMTEgKzMsMTMgQEAKICAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9u CiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJpbnRlbF9jcnRjLmgi CiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUgImludGVsX2Rpc3Bs YXkuaCIKICNpbmNsdWRlICJpbnRlbF9kcGxsLmgiCiAjaW5jbHVkZSAiaW50ZWxfbHZkcy5oIgog I2luY2x1ZGUgImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKIAog c3RydWN0IGludGVsX2xpbWl0IHsKIAlzdHJ1Y3QgewpAQCAtMTM2MSwzICsxMzYzLDUxMCBAQCBp bnRlbF9kcGxsX2luaXRfY2xvY2tfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiAJZWxzZQogCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2NvbXB1dGVfY2xvY2sgPSBpOHh4 X2NydGNfY29tcHV0ZV9jbG9jazsKIH0KKworc3RhdGljIGJvb2wgaTl4eF9oYXNfcHBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoSVNfSTgzMChkZXZfcHJpdikp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBJU19QSU5FVklFVyhkZXZfcHJpdikgfHwgSVNf TU9CSUxFKGRldl9wcml2KTsKK30KKwordm9pZCBpOXh4X2VuYWJsZV9wbGwoc3RydWN0IGludGVs X2NydGMgKmNydGMsCisJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjLT5iYXNlLmRldik7CisJaTkxNV9yZWdfdCByZWcgPSBEUExMKGNydGMtPnBpcGUpOworCXUz MiBkcGxsID0gY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsOworCWludCBpOworCisJYXNz ZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsK KworCS8qIFBMTCBpcyBwcm90ZWN0ZWQgYnkgcGFuZWwsIG1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUg aXQgKi8KKwlpZiAoaTl4eF9oYXNfcHBzKGRldl9wcml2KSkKKwkJYXNzZXJ0X3BhbmVsX3VubG9j a2VkKGRldl9wcml2LCBjcnRjLT5waXBlKTsKKworCS8qCisJICogQXBwYXJlbnRseSB3ZSBuZWVk IHRvIGhhdmUgVkdBIG1vZGUgZW5hYmxlZCBwcmlvciB0byBjaGFuZ2luZworCSAqIHRoZSBQMS9Q MiBkaXZpZGVycy4gT3RoZXJ3aXNlIHRoZSBEUExMIHdpbGwga2VlcCB1c2luZyB0aGUgb2xkCisJ ICogZGl2aWRlcnMsIGV2ZW4gdGhvdWdoIHRoZSByZWdpc3RlciB2YWx1ZSBkb2VzIGNoYW5nZS4K KwkgKi8KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCBkcGxsICYgfkRQTExfVkdBX01P REVfRElTKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCBkcGxsKTsKKworCS8qIFdh aXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDQpIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTExfTUQoY3J0Yy0+cGlw ZSksCisJCQkgICAgICAgY3J0Y19zdGF0ZS0+ZHBsbF9od19zdGF0ZS5kcGxsX21kKTsKKwl9IGVs c2UgeworCQkvKiBUaGUgcGl4ZWwgbXVsdGlwbGllciBjYW4gb25seSBiZSB1cGRhdGVkIG9uY2Ug dGhlCisJCSAqIERQTEwgaXMgZW5hYmxlZCBhbmQgdGhlIGNsb2NrcyBhcmUgc3RhYmxlLgorCQkg KgorCQkgKiBTbyB3cml0ZSBpdCBhZ2Fpbi4KKwkJICovCisJCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIGRwbGwpOworCX0KKworCS8qIFdlIGRvIHRoaXMgdGhyZWUgdGltZXMgZm9yIGx1 Y2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIGRwbGwpOworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJCXVkZWxheSgxNTApOyAvKiB3YWl0IGZvciB3YXJtdXAgKi8KKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHZsdl9wbGxiX3JlY2FsX29wYW1wKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkgZW51bSBwaXBlIHBpcGUpCit7CisJdTMyIHJlZ192YWw7CisKKwkvKgorCSAqIFBM TEIgb3BhbXAgYWx3YXlzIGNhbGlicmF0ZXMgdG8gbWF4IHZhbHVlIG9mIDB4M2YsIGZvcmNlIGVu YWJsZSBpdAorCSAqIGFuZCBzZXQgaXQgdG8gYSByZWFzb25hYmxlIHZhbHVlIGluc3RlYWQuCisJ ICovCisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5 KDEpKTsKKwlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7CisJcmVnX3ZhbCB8PSAweDAwMDAwMDMwOwor CXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXOSgxKSwgcmVnX3ZhbCk7 CisKKwlyZWdfdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgVkxWX1JFRl9EVzEz KTsKKwlyZWdfdmFsICY9IDB4MDBmZmZmZmY7CisJcmVnX3ZhbCB8PSAweDhjMDAwMDAwOworCXZs dl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMsIHJlZ192YWwpOworCisJ cmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc5KDEpKTsK KwlyZWdfdmFsICY9IDB4ZmZmZmZmMDA7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUs IFZMVl9QTExfRFc5KDEpLCByZWdfdmFsKTsKKworCXJlZ192YWwgPSB2bHZfZHBpb19yZWFkKGRl dl9wcml2LCBwaXBlLCBWTFZfUkVGX0RXMTMpOworCXJlZ192YWwgJj0gMHgwMGZmZmZmZjsKKwly ZWdfdmFsIHw9IDB4YjAwMDAwMDA7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZM Vl9SRUZfRFcxMywgcmVnX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIF92bHZfZW5hYmxlX3BsbChz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBl OworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHBpcGVfY29uZmlnLT5k cGxsX2h3X3N0YXRlLmRwbGwpOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBM TChwaXBlKSk7CisJdWRlbGF5KDE1MCk7CisKKwlpZiAoaW50ZWxfZGVfd2FpdF9mb3Jfc2V0KGRl dl9wcml2LCBEUExMKHBpcGUpLCBEUExMX0xPQ0tfVkxWLCAxKSkKKwkJZHJtX2VycigmZGV2X3By aXYtPmRybSwgIkRQTEwgJWQgZmFpbGVkIHRvIGxvY2tcbiIsIHBpcGUpOworfQorCit2b2lkIHZs dl9lbmFibGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBl ID0gY3J0Yy0+cGlwZTsKKworCWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlX2Nv bmZpZy0+Y3B1X3RyYW5zY29kZXIpOworCisJLyogUExMIGlzIHByb3RlY3RlZCBieSBwYW5lbCwg bWFrZSBzdXJlIHdlIGNhbiB3cml0ZSBpdCAqLworCWFzc2VydF9wYW5lbF91bmxvY2tlZChkZXZf cHJpdiwgcGlwZSk7CisKKwlpZiAocGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQ TExfVkNPX0VOQUJMRSkKKwkJX3Zsdl9lbmFibGVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwor CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMX01EKHBpcGUpLAorCQkgICAgICAgcGlwZV9j b25maWctPmRwbGxfaHdfc3RhdGUuZHBsbF9tZCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBEUExMX01EKHBpcGUpKTsKK30KKworCitzdGF0aWMgdm9pZCBfY2h2X2VuYWJsZV9w bGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+ cGlwZTsKKwllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0gdmx2X3BpcGVfdG9fY2hhbm5lbChwaXBl KTsKKwl1MzIgdG1wOworCisJdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKKworCS8qIEVuYWJsZSBi YWNrIHRoZSAxMGJpdCBjbG9jayB0byBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KKwl0bXAgPSB2bHZf ZHBpb19yZWFkKGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCkpOworCXRtcCB8PSBE UElPX0RDTEtQX0VOOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfQ01OX0RX MTQocG9ydCksIHRtcCk7CisKKwl2bHZfZHBpb19wdXQoZGV2X3ByaXYpOworCisJLyoKKwkgKiBO ZWVkIHRvIHdhaXQgPiAxMDBucyBiZXR3ZWVuIGRjbGtwIGNsb2NrIGVuYWJsZSBiaXQgYW5kIFBM TCBlbmFibGUuCisJICovCisJdWRlbGF5KDEpOworCisJLyogRW5hYmxlIFBMTCAqLworCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBEUExMKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0 ZS5kcGxsKTsKKworCS8qIENoZWNrIFBMTCBpcyBsb2NrZWQgKi8KKwlpZiAoaW50ZWxfZGVfd2Fp dF9mb3Jfc2V0KGRldl9wcml2LCBEUExMKHBpcGUpLCBEUExMX0xPQ0tfVkxWLCAxKSkKKwkJZHJt X2VycigmZGV2X3ByaXYtPmRybSwgIlBMTCAlZCBmYWlsZWQgdG8gbG9ja1xuIiwgcGlwZSk7Cit9 CisKK3ZvaWQgY2h2X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCisJYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3By aXYsIHBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2Rlcik7CisKKwkvKiBQTEwgaXMgcHJvdGVjdGVk IGJ5IHBhbmVsLCBtYWtlIHN1cmUgd2UgY2FuIHdyaXRlIGl0ICovCisJYXNzZXJ0X3BhbmVsX3Vu bG9ja2VkKGRldl9wcml2LCBwaXBlKTsKKworCWlmIChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0 ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxFKQorCQlfY2h2X2VuYWJsZV9wbGwoY3J0YywgcGlwZV9j b25maWcpOworCisJaWYgKHBpcGUgIT0gUElQRV9BKSB7CisJCS8qCisJCSAqIFdhUGl4ZWxSZXBl YXRNb2RlRml4Rm9yQzA6Y2h2CisJCSAqCisJCSAqIERQTExDTUQgaXMgQVdPTC4gVXNlIGNoaWNr ZW4gYml0cyB0byBwcm9wYWdhdGUKKwkJICogdGhlIHZhbHVlIGZyb20gRFBMTEJNRCB0byBlaXRo ZXIgcGlwZSBCIG9yIEMuCisJCSAqLworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JSNF9W TFYsIENCUl9EUExMQk1EX1BJUEUocGlwZSkpOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg RFBMTF9NRChQSVBFX0IpLAorCQkJICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRw bGxfbWQpOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ0JSNF9WTFYsIDApOworCQlkZXZf cHJpdi0+Y2h2X2RwbGxfbWRbcGlwZV0gPSBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxs X21kOworCisJCS8qCisJCSAqIERQTExCIFZHQSBtb2RlIGFsc28gc2VlbXMgdG8gY2F1c2UgcHJv YmxlbXMuCisJCSAqIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBpdCBkaXNhYmxlZC4KKwkJICovCisJ CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9w cml2LCBEUExMKFBJUEVfQikpICYKKwkJCSAgICAgRFBMTF9WR0FfTU9ERV9ESVMpID09IDApOwor CX0gZWxzZSB7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExMX01EKHBpcGUpLAorCQkJ ICAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmRwbGxfbWQpOworCQlpbnRlbF9kZV9w b3N0aW5nX3JlYWQoZGV2X3ByaXYsIERQTExfTUQocGlwZSkpOworCX0KK30KKwordm9pZCB2bHZf cHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCXUzMiBtZGl2 OworCXUzMiBiZXN0biwgYmVzdG0xLCBiZXN0bTIsIGJlc3RwMSwgYmVzdHAyOworCXUzMiBjb3Jl Y2xrLCByZWdfdmFsOworCisJLyogRW5hYmxlIFJlZmNsayAqLworCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCBEUExMKHBpcGUpLAorCQkgICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUu ZHBsbCAmIH4oRFBMTF9WQ09fRU5BQkxFIHwgRFBMTF9FWFRfQlVGRkVSX0VOQUJMRV9WTFYpKTsK KworCS8qIE5vIG5lZWQgdG8gYWN0dWFsbHkgc2V0IHVwIHRoZSBEUExMIHdpdGggRFNJICovCisJ aWYgKChwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgRFBMTF9WQ09fRU5BQkxFKSA9 PSAwKQorCQlyZXR1cm47CisKKwl2bHZfZHBpb19nZXQoZGV2X3ByaXYpOworCisJYmVzdG4gPSBw aXBlX2NvbmZpZy0+ZHBsbC5uOworCWJlc3RtMSA9IHBpcGVfY29uZmlnLT5kcGxsLm0xOworCWJl c3RtMiA9IHBpcGVfY29uZmlnLT5kcGxsLm0yOworCWJlc3RwMSA9IHBpcGVfY29uZmlnLT5kcGxs LnAxOworCWJlc3RwMiA9IHBpcGVfY29uZmlnLT5kcGxsLnAyOworCisJLyogU2VlIGVEUCBIRE1J IERQSU8gZHJpdmVyIHZiaW9zIG5vdGVzIGRvYyAqLworCisJLyogUExMIEIgbmVlZHMgc3BlY2lh bCBoYW5kbGluZyAqLworCWlmIChwaXBlID09IFBJUEVfQikKKwkJdmx2X3BsbGJfcmVjYWxfb3Bh bXAoZGV2X3ByaXYsIHBpcGUpOworCisJLyogU2V0IHVwIFR4IHRhcmdldCBmb3IgcGVyaW9kaWMg UmNvbXAgdXBkYXRlICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExf RFc5X0JDQVNULCAweDAxMDAwMDBmKTsKKworCS8qIERpc2FibGUgdGFyZ2V0IElSZWYgb24gUExM ICovCisJcmVnX3ZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc4 KHBpcGUpKTsKKwlyZWdfdmFsICY9IDB4MDBmZmZmZmY7CisJdmx2X2RwaW9fd3JpdGUoZGV2X3By aXYsIHBpcGUsIFZMVl9QTExfRFc4KHBpcGUpLCByZWdfdmFsKTsKKworCS8qIERpc2FibGUgZmFz dCBsb2NrICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIFZMVl9DTU5fRFcwLCAw eDYxMCk7CisKKwkvKiBTZXQgaWR0YWZjcmVjYWwgYmVmb3JlIFBMTCBpcyBlbmFibGVkICovCisJ bWRpdiA9ICgoYmVzdG0xIDw8IERQSU9fTTFESVZfU0hJRlQpIHwgKGJlc3RtMiAmIERQSU9fTTJE SVZfTUFTSykpOworCW1kaXYgfD0gKChiZXN0cDEgPDwgRFBJT19QMV9TSElGVCkgfCAoYmVzdHAy IDw8IERQSU9fUDJfU0hJRlQpKTsKKwltZGl2IHw9ICgoYmVzdG4gPDwgRFBJT19OX1NISUZUKSk7 CisJbWRpdiB8PSAoMSA8PCBEUElPX0tfU0hJRlQpOworCisJLyoKKwkgKiBQb3N0IGRpdmlkZXIg ZGVwZW5kcyBvbiBwaXhlbCBjbG9jayByYXRlLCBEQUMgdnMgZGlnaXRhbCAoYW5kIExWRFMsCisJ ICogYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCkuCisJICogTm90ZTogZG9uJ3QgdXNlIHRoZSBE QUMgcG9zdCBkaXZpZGVyIGFzIGl0IHNlZW1zIHVuc3RhYmxlLgorCSAqLworCW1kaXYgfD0gKERQ SU9fUE9TVF9ESVZfSERNSURQIDw8IERQSU9fUE9TVF9ESVZfU0hJRlQpOworCXZsdl9kcGlvX3dy aXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXMyhwaXBlKSwgbWRpdik7CisKKwltZGl2IHw9 IERQSU9fRU5BQkxFX0NBTElCUkFUSU9OOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBl LCBWTFZfUExMX0RXMyhwaXBlKSwgbWRpdik7CisKKwkvKiBTZXQgSEJSIGFuZCBSQlIgTFBGIGNv ZWZmaWNpZW50cyAqLworCWlmIChwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9PSAxNjIwMDAgfHwK KwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVUX0FOQUxP RykgfHwKKwkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShwaXBlX2NvbmZpZywgSU5URUxfT1VUUFVU X0hETUkpKQorCQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzEwKHBp cGUpLAorCQkJCSAweDAwOWYwMDAzKTsKKwllbHNlCisJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBWTFZfUExMX0RXMTAocGlwZSksCisJCQkJIDB4MDBkMDAwMGYpOworCisJaWYgKGlu dGVsX2NydGNfaGFzX2RwX2VuY29kZXIocGlwZV9jb25maWcpKSB7CisJCS8qIFVzZSBTU0Mgc291 cmNlICovCisJCWlmIChwaXBlID09IFBJUEVfQSkKKwkJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBWTFZfUExMX0RXNShwaXBlKSwKKwkJCQkJIDB4MGRmNDAwMDApOworCQllbHNlCisJ CQl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzUocGlwZSksCisJCQkJ CSAweDBkZjcwMDAwKTsKKwl9IGVsc2UgeyAvKiBIRE1JIG9yIFZHQSAqLworCQkvKiBVc2UgYmVu ZCBzb3VyY2UgKi8KKwkJaWYgKHBpcGUgPT0gUElQRV9BKQorCQkJdmx2X2RwaW9fd3JpdGUoZGV2 X3ByaXYsIHBpcGUsIFZMVl9QTExfRFc1KHBpcGUpLAorCQkJCQkgMHgwZGY3MDAwMCk7CisJCWVs c2UKKwkJCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNShwaXBlKSwK KwkJCQkJIDB4MGRmNDAwMDApOworCX0KKworCWNvcmVjbGsgPSB2bHZfZHBpb19yZWFkKGRldl9w cml2LCBwaXBlLCBWTFZfUExMX0RXNyhwaXBlKSk7CisJY29yZWNsayA9IChjb3JlY2xrICYgMHgw MDAwZmYwMCkgfCAweDAxYzAwMDAwOworCWlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKHBp cGVfY29uZmlnKSkKKwkJY29yZWNsayB8PSAweDAxMDAwMDAwOworCXZsdl9kcGlvX3dyaXRlKGRl dl9wcml2LCBwaXBlLCBWTFZfUExMX0RXNyhwaXBlKSwgY29yZWNsayk7CisKKwl2bHZfZHBpb193 cml0ZShkZXZfcHJpdiwgcGlwZSwgVkxWX1BMTF9EVzExKHBpcGUpLCAweDg3ODcxMDAwKTsKKwor CXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Cit9CisKK3ZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwor CWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwllbnVtIGRwaW9fY2hhbm5lbCBwb3J0ID0g dmx2X3BpcGVfdG9fY2hhbm5lbChwaXBlKTsKKwl1MzIgbG9vcGZpbHRlciwgdHJpYnVmX2NhbGNu dHI7CisJdTMyIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwgYmVzdHAxLCBiZXN0cDIsIGJlc3RtMl9m cmFjOworCXUzMiBkcGlvX3ZhbDsKKwlpbnQgdmNvOworCisJLyogRW5hYmxlIFJlZmNsayBhbmQg U1NDICovCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksCisJCSAgICAgICBw aXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5kcGxsICYgfkRQTExfVkNPX0VOQUJMRSk7CisKKwkv KiBObyBuZWVkIHRvIGFjdHVhbGx5IHNldCB1cCB0aGUgRFBMTCB3aXRoIERTSSAqLworCWlmICgo cGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUuZHBsbCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkK KwkJcmV0dXJuOworCisJYmVzdG4gPSBwaXBlX2NvbmZpZy0+ZHBsbC5uOworCWJlc3RtMl9mcmFj ID0gcGlwZV9jb25maWctPmRwbGwubTIgJiAweDNmZmZmZjsKKwliZXN0bTEgPSBwaXBlX2NvbmZp Zy0+ZHBsbC5tMTsKKwliZXN0bTIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5tMiA+PiAyMjsKKwliZXN0 cDEgPSBwaXBlX2NvbmZpZy0+ZHBsbC5wMTsKKwliZXN0cDIgPSBwaXBlX2NvbmZpZy0+ZHBsbC5w MjsKKwl2Y28gPSBwaXBlX2NvbmZpZy0+ZHBsbC52Y287CisJZHBpb192YWwgPSAwOworCWxvb3Bm aWx0ZXIgPSAwOworCisJdmx2X2RwaW9fZ2V0KGRldl9wcml2KTsKKworCS8qIHAxIGFuZCBwMiBk aXZpZGVyICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcxMyhw b3J0KSwKKwkJCTUgPDwgRFBJT19DSFZfUzFfRElWX1NISUZUIHwKKwkJCWJlc3RwMSA8PCBEUElP X0NIVl9QMV9ESVZfU0hJRlQgfAorCQkJYmVzdHAyIDw8IERQSU9fQ0hWX1AyX0RJVl9TSElGVCB8 CisJCQkxIDw8IERQSU9fQ0hWX0tfRElWX1NISUZUKTsKKworCS8qIEZlZWRiYWNrIHBvc3QtZGl2 aWRlciAtIG0yICovCisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFcw KHBvcnQpLCBiZXN0bTIpOworCisJLyogRmVlZGJhY2sgcmVmY2xrIGRpdmlkZXIgLSBuIGFuZCBt MSAqLworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2LCBwaXBlLCBDSFZfUExMX0RXMShwb3J0KSwK KwkJCURQSU9fQ0hWX00xX0RJVl9CWV8yIHwKKwkJCTEgPDwgRFBJT19DSFZfTl9ESVZfU0hJRlQp OworCisJLyogTTIgZnJhY3Rpb24gZGl2aXNpb24gKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJp diwgcGlwZSwgQ0hWX1BMTF9EVzIocG9ydCksIGJlc3RtMl9mcmFjKTsKKworCS8qIE0yIGZyYWN0 aW9uIGRpdmlzaW9uIGVuYWJsZSAqLworCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJp diwgcGlwZSwgQ0hWX1BMTF9EVzMocG9ydCkpOworCWRwaW9fdmFsICY9IH4oRFBJT19DSFZfRkVF REZXRF9HQUlOX01BU0sgfCBEUElPX0NIVl9GUkFDX0RJVl9FTik7CisJZHBpb192YWwgfD0gKDIg PDwgRFBJT19DSFZfRkVFREZXRF9HQUlOX1NISUZUKTsKKwlpZiAoYmVzdG0yX2ZyYWMpCisJCWRw aW9fdmFsIHw9IERQSU9fQ0hWX0ZSQUNfRElWX0VOOworCXZsdl9kcGlvX3dyaXRlKGRldl9wcml2 LCBwaXBlLCBDSFZfUExMX0RXMyhwb3J0KSwgZHBpb192YWwpOworCisJLyogUHJvZ3JhbSBkaWdp dGFsIGxvY2sgZGV0ZWN0IHRocmVzaG9sZCAqLworCWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChk ZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzkocG9ydCkpOworCWRwaW9fdmFsICY9IH4oRFBJT19D SFZfSU5UX0xPQ0tfVEhSRVNIT0xEX01BU0sgfAorCQkJCQlEUElPX0NIVl9JTlRfTE9DS19USFJF U0hPTERfU0VMX0NPQVJTRSk7CisJZHBpb192YWwgfD0gKDB4NSA8PCBEUElPX0NIVl9JTlRfTE9D S19USFJFU0hPTERfU0hJRlQpOworCWlmICghYmVzdG0yX2ZyYWMpCisJCWRwaW9fdmFsIHw9IERQ SU9fQ0hWX0lOVF9MT0NLX1RIUkVTSE9MRF9TRUxfQ09BUlNFOworCXZsdl9kcGlvX3dyaXRlKGRl dl9wcml2LCBwaXBlLCBDSFZfUExMX0RXOShwb3J0KSwgZHBpb192YWwpOworCisJLyogTG9vcCBm aWx0ZXIgKi8KKwlpZiAodmNvID09IDU0MDAwMDApIHsKKwkJbG9vcGZpbHRlciB8PSAoMHgzIDw8 IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDggPDwgRFBJ T19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgxIDw8IERQSU9fQ0hW X0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMHg5OworCX0gZWxzZSBpZiAo dmNvIDw9IDYyMDAwMDApIHsKKwkJbG9vcGZpbHRlciB8PSAoMHg1IDw8IERQSU9fQ0hWX1BST1Bf Q09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweEIgPDwgRFBJT19DSFZfSU5UX0NPRUZG X1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElG VCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMHg5OworCX0gZWxzZSBpZiAodmNvIDw9IDY0ODAwMDAp IHsKKwkJbG9vcGZpbHRlciB8PSAoMHg0IDw8IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOwor CQlsb29wZmlsdGVyIHw9ICgweDkgPDwgRFBJT19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJbG9v cGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hWX0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1Zl9j YWxjbnRyID0gMHg4OworCX0gZWxzZSB7CisJCS8qIE5vdCBzdXBwb3J0ZWQuIEFwcGx5IHRoZSBz YW1lIGxpbWl0cyBhcyBpbiB0aGUgbWF4IGNhc2UgKi8KKwkJbG9vcGZpbHRlciB8PSAoMHg0IDw8 IERQSU9fQ0hWX1BST1BfQ09FRkZfU0hJRlQpOworCQlsb29wZmlsdGVyIHw9ICgweDkgPDwgRFBJ T19DSFZfSU5UX0NPRUZGX1NISUZUKTsKKwkJbG9vcGZpbHRlciB8PSAoMHgzIDw8IERQSU9fQ0hW X0dBSU5fQ1RSTF9TSElGVCk7CisJCXRyaWJ1Zl9jYWxjbnRyID0gMDsKKwl9CisJdmx2X2RwaW9f d3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc2KHBvcnQpLCBsb29wZmlsdGVyKTsKKwor CWRwaW9fdmFsID0gdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwgQ0hWX1BMTF9EVzgocG9y dCkpOworCWRwaW9fdmFsICY9IH5EUElPX0NIVl9URENfVEFSR0VUX0NOVF9NQVNLOworCWRwaW9f dmFsIHw9ICh0cmlidWZfY2FsY250ciA8PCBEUElPX0NIVl9URENfVEFSR0VUX0NOVF9TSElGVCk7 CisJdmx2X2RwaW9fd3JpdGUoZGV2X3ByaXYsIHBpcGUsIENIVl9QTExfRFc4KHBvcnQpLCBkcGlv X3ZhbCk7CisKKwkvKiBBRkMgUmVjYWwgKi8KKwl2bHZfZHBpb193cml0ZShkZXZfcHJpdiwgcGlw ZSwgQ0hWX0NNTl9EVzE0KHBvcnQpLAorCQkJdmx2X2RwaW9fcmVhZChkZXZfcHJpdiwgcGlwZSwg Q0hWX0NNTl9EVzE0KHBvcnQpKSB8CisJCQlEUElPX0FGQ19SRUNBTCk7CisKKwl2bHZfZHBpb19w dXQoZGV2X3ByaXYpOworfQorCisvKioKKyAqIHZsdl9mb3JjZV9wbGxfb24gLSBmb3JjaWJseSBl bmFibGUganVzdCB0aGUgUExMCisgKiBAZGV2X3ByaXY6IGk5MTUgcHJpdmF0ZSBzdHJ1Y3R1cmUK KyAqIEBwaXBlOiBwaXBlIFBMTCB0byBlbmFibGUKKyAqIEBkcGxsOiBQTEwgY29uZmlndXJhdGlv bgorICoKKyAqIEVuYWJsZSB0aGUgUExMIGZvciBAcGlwZSB1c2luZyB0aGUgc3VwcGxpZWQgQGRw bGwgY29uZmlnLiBUbyBiZSB1c2VkCisgKiBpbiBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRoZSBQTEwg ZW5hYmxlZCBldmVuIHdoZW4gQHBpcGUgaXMgbm90IGdvaW5nIHRvCisgKiBiZSBlbmFibGVkLgor ICovCitpbnQgdmx2X2ZvcmNlX3BsbF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIGVudW0gcGlwZSBwaXBlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpkcGxsKQorewor CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3By aXYsIHBpcGUpOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZzsKKworCXBp cGVfY29uZmlnID0gaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhjcnRjKTsKKwlpZiAoIXBpcGVfY29u ZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2RlciA9 IChlbnVtIHRyYW5zY29kZXIpcGlwZTsKKwlwaXBlX2NvbmZpZy0+cGl4ZWxfbXVsdGlwbGllciA9 IDE7CisJcGlwZV9jb25maWctPmRwbGwgPSAqZHBsbDsKKworCWlmIChJU19DSEVSUllWSUVXKGRl dl9wcml2KSkgeworCQljaHZfY29tcHV0ZV9kcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwkJY2h2 X3ByZXBhcmVfcGxsKGNydGMsIHBpcGVfY29uZmlnKTsKKwkJY2h2X2VuYWJsZV9wbGwoY3J0Yywg cGlwZV9jb25maWcpOworCX0gZWxzZSB7CisJCXZsdl9jb21wdXRlX2RwbGwoY3J0YywgcGlwZV9j b25maWcpOworCQl2bHZfcHJlcGFyZV9wbGwoY3J0YywgcGlwZV9jb25maWcpOworCQl2bHZfZW5h YmxlX3BsbChjcnRjLCBwaXBlX2NvbmZpZyk7CisJfQorCisJa2ZyZWUocGlwZV9jb25maWcpOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmx2X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJdTMyIHZhbDsKKworCS8qIE1h a2Ugc3VyZSB0aGUgcGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0X3Bp cGVfZGlzYWJsZWQoZGV2X3ByaXYsIChlbnVtIHRyYW5zY29kZXIpcGlwZSk7CisKKwl2YWwgPSBE UExMX0lOVEVHUkFURURfUkVGX0NMS19WTFYgfAorCQlEUExMX1JFRl9DTEtfRU5BQkxFX1ZMViB8 IERQTExfVkdBX01PREVfRElTOworCWlmIChwaXBlICE9IFBJUEVfQSkKKwkJdmFsIHw9IERQTExf SU5URUdSQVRFRF9DUklfQ0xLX1ZMVjsKKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUExM KHBpcGUpLCB2YWwpOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBMTChwaXBl KSk7Cit9CisKK3ZvaWQgY2h2X2Rpc2FibGVfcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJZW51bSBkcGlvX2NoYW5uZWwgcG9ydCA9IHZs dl9waXBlX3RvX2NoYW5uZWwocGlwZSk7CisJdTMyIHZhbDsKKworCS8qIE1ha2Ugc3VyZSB0aGUg cGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0X3BpcGVfZGlzYWJsZWQo ZGV2X3ByaXYsIChlbnVtIHRyYW5zY29kZXIpcGlwZSk7CisKKwl2YWwgPSBEUExMX1NTQ19SRUZf Q0xLX0NIViB8CisJCURQTExfUkVGX0NMS19FTkFCTEVfVkxWIHwgRFBMTF9WR0FfTU9ERV9ESVM7 CisJaWYgKHBpcGUgIT0gUElQRV9BKQorCQl2YWwgfD0gRFBMTF9JTlRFR1JBVEVEX0NSSV9DTEtf VkxWOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQTEwocGlwZSksIHZhbCk7CisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKKworCXZsdl9kcGlvX2dl dChkZXZfcHJpdik7CisKKwkvKiBEaXNhYmxlIDEwYml0IGNsb2NrIHRvIGRpc3BsYXkgY29udHJv bGxlciAqLworCXZhbCA9IHZsdl9kcGlvX3JlYWQoZGV2X3ByaXYsIHBpcGUsIENIVl9DTU5fRFcx NChwb3J0KSk7CisJdmFsICY9IH5EUElPX0RDTEtQX0VOOworCXZsdl9kcGlvX3dyaXRlKGRldl9w cml2LCBwaXBlLCBDSFZfQ01OX0RXMTQocG9ydCksIHZhbCk7CisKKwl2bHZfZHBpb19wdXQoZGV2 X3ByaXYpOworfQorCit2b2lkIGk5eHhfZGlzYWJsZV9wbGwoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19p bnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUg PSBjcnRjLT5waXBlOworCisJLyogRG9uJ3QgZGlzYWJsZSBwaXBlIG9yIHBpcGUgUExMcyBpZiBu ZWVkZWQgKi8KKwlpZiAoSVNfSTgzMChkZXZfcHJpdikpCisJCXJldHVybjsKKworCS8qIE1ha2Ug c3VyZSB0aGUgcGlwZSBpc24ndCBzdGlsbCByZWx5aW5nIG9uIHVzICovCisJYXNzZXJ0X3BpcGVf ZGlzYWJsZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKKworCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBEUExMKHBpcGUpLCBEUExMX1ZHQV9NT0RFX0RJUyk7CisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKTsKK30KKworCisvKioKKyAq IHZsdl9mb3JjZV9wbGxfb2ZmIC0gZm9yY2libHkgZGlzYWJsZSBqdXN0IHRoZSBQTEwKKyAqIEBk ZXZfcHJpdjogaTkxNSBwcml2YXRlIHN0cnVjdHVyZQorICogQHBpcGU6IHBpcGUgUExMIHRvIGRp c2FibGUKKyAqCisgKiBEaXNhYmxlIHRoZSBQTEwgZm9yIEBwaXBlLiBUbyBiZSB1c2VkIGluIGNh c2VzIHdoZXJlIHdlIG5lZWQKKyAqIHRoZSBQTEwgZW5hYmxlZCBldmVuIHdoZW4gQHBpcGUgaXMg bm90IGdvaW5nIHRvIGJlIGVuYWJsZWQuCisgKi8KK3ZvaWQgdmx2X2ZvcmNlX3BsbF9vZmYoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCWNodl9kaXNhYmxlX3BsbChkZXZfcHJpdiwgcGlw ZSk7CisJZWxzZQorCQl2bHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwbGwuaAppbmRleCBjYWY0NjE1MDkyZTEuLjdm ZjRiMGQyOWVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcGxsLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcGxsLmgK QEAgLTEwLDYgKzEwLDcgQEAgc3RydWN0IGRwbGw7CiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsK IHN0cnVjdCBpbnRlbF9jcnRjOwogc3RydWN0IGludGVsX2NydGNfc3RhdGU7CitlbnVtIHBpcGU7 CiAKIHZvaWQgaW50ZWxfZHBsbF9pbml0X2Nsb2NrX2hvb2soc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKIGludCB2bHZfY2FsY19kcGxsX3BhcmFtcyhpbnQgcmVmY2xrLCBzdHJ1 Y3QgZHBsbCAqY2xvY2spOwpAQCAtMjAsNCArMjEsMjEgQEAgdm9pZCB2bHZfY29tcHV0ZV9kcGxs KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogdm9pZCBjaHZfY29tcHV0ZV9kcGxsKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAogCQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9j b25maWcpOwogCitpbnQgdmx2X2ZvcmNlX3BsbF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcGxsICpkcGxs KTsKK3ZvaWQgdmx2X2ZvcmNlX3BsbF9vZmYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIHBpcGUgcGlwZSk7Cit2b2lkIGk5eHhfZW5hYmxlX3BsbChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Cit2b2lkIHZsdl9lbmFibGVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKK3ZvaWQgY2h2 X2VuYWJsZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwordm9pZCB2bHZfZGlzYWJsZV9wbGwoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSk7Cit2b2lkIGNo dl9kaXNhYmxlX3BsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlw ZSBwaXBlKTsKK3ZvaWQgaTl4eF9kaXNhYmxlX3BsbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7Cit2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25m aWcpOwordm9pZCBjaHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCSAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKKwogI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYwppbmRleCBjNDg2N2E4MDIw YTUuLmYyMGJhNzFmNDMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9wcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bw cy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUgImludGVsX2RwLmgiCisjaW5jbHVkZSAiaW50 ZWxfZHBsbC5oIgogI2luY2x1ZGUgImludGVsX3Bwcy5oIgogCiBzdGF0aWMgdm9pZCB2bHZfc3Rl YWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLS0g CjIuMjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==