From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Tue, 4 Jun 2019 17:58:06 +0300 Message-ID: <20190604145826.16424-4-imre.deak@intel.com> References: <20190604145826.16424-1-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 63508897DC for ; Tue, 4 Jun 2019 14:59:18 +0000 (UTC) In-Reply-To: <20190604145826.16424-1-imre.deak@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org TW92ZSB0aGUgVHlwZUMgcG9ydCBoYW5kbGluZyBmdW5jdGlvbnMgdG8gYSBuZXcgZmlsZSBmb3Ig Y2xhcml0eS4KCldoaWxlIGF0IGl0OgotIHMvaWNsX3RjX3BvcnRfY29ubmVjdGVkKCkvaW50ZWxf dGNfcG9ydF9jb25uZWN0ZWQoKS8KICBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoKSwgd2lsbCBiZSB1 bmV4cG9ydGVkIGxhdGVyLgoKLSBzL2ludGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVfY291 bnQoKS9pbnRlbF90Y19wb3J0X2ZpYV9tYXhfbGFuZV9jb3VudCgpLwogIEl0J3MgdXNlZCBmb3Ig SERNSSBsZWdhY3kgbW9kZSB0b28uCgotIFNpbXBsaWZ5IGZ1bmN0aW9uIGludGVyZmFjZXMgYnkg cGFzc2luZyBvbmx5IGRpZ19wb3J0IHRvIHRoZW0uCgpObyBmdW5jdGlvbmFsIGNoYW5nZXMuCgpD YzogQW5pbWVzaCBNYW5uYSA8YW5pbWVzaC5tYW5uYUBpbnRlbC5jb20+CkNjOiBQYXVsbyBaYW5v bmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291emEg PGpvc2Uuc291emFAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVh a0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAg ICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0IHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jICAgICAgICAgIHwgICA2ICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jICAgICAgICAgICB8IDIyNyArLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmggICAgICAgICAg IHwgICAyIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmMgICAgICAgICAgIHwgMjMw ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmgg ICAgICAgICAgIHwgIDEzICsrCiA3IGZpbGVzIGNoYW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAy MzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3RjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGMwYTdiMjk5NDA3Ny4uNzRjNGQxMWQ4M2Vi IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTcxLDcgKzE3MSw4IEBAIGk5MTUteSArPSBpbnRl bF9hdWRpby5vIFwKIAkgIGludGVsX3Bzci5vIFwKIAkgIGludGVsX3F1aXJrcy5vIFwKIAkgIGlu dGVsX3NpZGViYW5kLm8gXAotCSAgaW50ZWxfc3ByaXRlLm8KKwkgIGludGVsX3Nwcml0ZS5vIFwK KwkgIGludGVsX3RjLm8KIGk5MTUtJChDT05GSUdfQUNQSSkJCSs9IGludGVsX2FjcGkubyBpbnRl bF9vcHJlZ2lvbi5vCiBpOTE1LSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pCSs9IGludGVs X2ZiZGV2Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUuaGVh ZGVyLXRlc3QgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdAppbmRl eCA2ZWYzYjY0N2FjNjUuLmU4MGU4ZTQ1YjA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUuaGVhZGVyLXRlc3QKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUuaGVhZGVyLXRlc3QKQEAgLTU4LDYgKzU4LDcgQEAgaGVhZGVyX3Rlc3QgOj0gXAogCWlu dGVsX3Nkdm8uaCBcCiAJaW50ZWxfc2lkZWJhbmQuaCBcCiAJaW50ZWxfc3ByaXRlLmggXAorCWlu dGVsX3RjLmggXAogCWludGVsX3R2LmggXAogCWludGVsX3VuY29yZS5oIFwKIAlpbnRlbF92ZHNj LmggXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwppbmRleCAzNTBlYWY1NGYwMWYuLjVhMWM5ODQz ODM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNs dWRlICJpbnRlbF9sc3Bjb24uaCIKICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgogI2luY2x1ZGUg ImludGVsX3Bzci5oIgorI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmRz Yy5oIgogCiBzdHJ1Y3QgZGRpX2J1Zl90cmFucyB7CkBAIC0zOTA0LDcgKzM5MDUsNiBAQCBzdGF0 aWMgaW50IGludGVsX2RkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKIHN0YXRpYyB2b2lkIGludGVsX2RkaV9lbmNvZGVyX3N1c3BlbmQoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQgPSBlbmNfdG9fZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOwotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CiAKIAlpbnRlbF9kcF9l bmNvZGVyX3N1c3BlbmQoZW5jb2Rlcik7CiAKQEAgLTM5MTQsNyArMzkxNCw3IEBAIHN0YXRpYyB2 b2lkIGludGVsX2RkaV9lbmNvZGVyX3N1c3BlbmQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIpCiAJICogZXZlbiBpZiB0aGUgc2luayBoYXMgZGlzYXBwZWFyZWQgd2hpbGUgYmVpbmcgc3Vz cGVuZGVkLgogCSAqLwogCWlmIChkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQpCi0JCWljbF90Y19w aHlfZGlzY29ubmVjdChpOTE1LCBkaWdfcG9ydCk7CisJCWljbF90Y19waHlfZGlzY29ubmVjdChk aWdfcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX2RkaV9lbmNvZGVyX3Jlc2V0KHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuY29kZXIpCkBAIC0zOTM2LDcgKzM5MzYsNyBAQCBzdGF0aWMg dm9pZCBpbnRlbF9kZGlfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKIAlpbnRlbF9kcF9lbmNvZGVyX2ZsdXNoX3dvcmsoZW5jb2Rlcik7CiAKIAlpZiAoaW50ZWxf cG9ydF9pc190YyhpOTE1LCBkaWdfcG9ydC0+YmFzZS5wb3J0KSkKLQkJaWNsX3RjX3BoeV9kaXNj b25uZWN0KGk5MTUsIGRpZ19wb3J0KTsKKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0 KTsKIAogCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CiAJa2ZyZWUoZGlnX3BvcnQpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggMjRiNTZiMmE3NmM4Li5iNjkzMTBiZDk5MTQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgImludGVs X3BhbmVsLmgiCiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfc2lkZWJh bmQuaCIKKyNpbmNsdWRlICJpbnRlbF90Yy5oIgogI2luY2x1ZGUgImludGVsX3Zkc2MuaCIKIAog I2RlZmluZSBEUF9EUFJYX0VTSV9MRU4gMTQKQEAgLTIxMSw0NiArMjEyLDEzIEBAIHN0YXRpYyBp bnQgaW50ZWxfZHBfbWF4X2NvbW1vbl9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiAJ cmV0dXJuIGludGVsX2RwLT5jb21tb25fcmF0ZXNbaW50ZWxfZHAtPm51bV9jb21tb25fcmF0ZXMg LSAxXTsKIH0KIAotc3RhdGljIGludCBpbnRlbF9kcF9nZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2Nv dW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7 Ci0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdf cG9ydC0+YmFzZS5wb3J0KTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQl1MzIgbGFuZV9p bmZvOwotCi0JaWYgKHRjX3BvcnQgPT0gUE9SVF9UQ19OT05FIHx8IGRpZ19wb3J0LT50Y190eXBl ICE9IFRDX1BPUlRfVFlQRUMpCi0JCXJldHVybiA0OwotCi0JbGFuZV9pbmZvID0gMDsKLQl3aXRo X2ludGVsX2Rpc3BsYXlfcG93ZXIoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUs IHdha2VyZWYpCi0JCWxhbmVfaW5mbyA9IChJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYK LQkJCSAgICAgRFBfTEFORV9BU1NJR05NRU5UX01BU0sodGNfcG9ydCkpID4+Ci0JCQkJRFBfTEFO RV9BU1NJR05NRU5UX1NISUZUKHRjX3BvcnQpOwotCi0Jc3dpdGNoIChsYW5lX2luZm8pIHsKLQlk ZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UobGFuZV9pbmZvKTsKLQljYXNlIDE6Ci0JY2FzZSAyOgot CWNhc2UgNDoKLQljYXNlIDg6Ci0JCXJldHVybiAxOwotCWNhc2UgMzoKLQljYXNlIDEyOgotCQly ZXR1cm4gMjsKLQljYXNlIDE1OgotCQlyZXR1cm4gNDsKLQl9Ci19Ci0KIC8qIFRoZW9yZXRpY2Fs IG1heCBiZXR3ZWVuIHNvdXJjZSBhbmQgc2luayAqLwogc3RhdGljIGludCBpbnRlbF9kcF9tYXhf Y29tbW9uX2xhbmVfY291bnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKIAlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsKIAlpbnQgc291cmNlX21heCA9IGludGVsX2RpZ19wb3J0LT5tYXhfbGFuZXM7CiAJaW50 IHNpbmtfbWF4ID0gZHJtX2RwX21heF9sYW5lX2NvdW50KGludGVsX2RwLT5kcGNkKTsKLQlpbnQg ZmlhX21heCA9IGludGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVfY291bnQoaW50ZWxfZHAp OworCWludCBmaWFfbWF4ID0gaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291bnQoaW50ZWxf ZGlnX3BvcnQpOwogCiAJcmV0dXJuIG1pbjMoc291cmNlX21heCwgc2lua19tYXgsIGZpYV9tYXgp OwogfQpAQCAtNTIzMSwxOTUgKzUxOTksNiBAQCBzdGF0aWMgYm9vbCBpY2xfY29tYm9fcG9ydF9j b25uZWN0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiBJOTE1 X1JFQUQoU0RFSVNSKSAmIFNERV9ERElfSE9UUExVR19JQ1AocG9ydCk7CiB9CiAKLXN0YXRpYyBj b25zdCBjaGFyICp0Y190eXBlX25hbWUoZW51bSB0Y19wb3J0X3R5cGUgdHlwZSkKLXsKLQlzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10gPSB7Ci0JCVtUQ19QT1JUX1VOS05PV05dID0g InVua25vd24iLAotCQlbVENfUE9SVF9MRUdBQ1ldID0gImxlZ2FjeSIsCi0JCVtUQ19QT1JUX1RZ UEVDXSA9ICJ0eXBlYyIsCi0JCVtUQ19QT1JUX1RCVF0gPSAidGJ0IiwKLQl9OwotCi0JaWYgKFdB Uk5fT04odHlwZSA+PSBBUlJBWV9TSVpFKG5hbWVzKSkpCi0JCXR5cGUgPSBUQ19QT1JUX1VOS05P V047Ci0KLQlyZXR1cm4gbmFtZXNbdHlwZV07Ci19Ci0KLXN0YXRpYyB2b2lkIGljbF91cGRhdGVf dGNfcG9ydF90eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICAg c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCi0JCQkJICAgIGJvb2wg aXNfbGVnYWN5LCBib29sIGlzX3R5cGVjLCBib29sIGlzX3RidCkKLXsKLQllbnVtIHBvcnQgcG9y dCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7Ci0JZW51bSB0Y19wb3J0X3R5cGUgb2xkX3R5 cGUgPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZTsKLQotCVdBUk5fT04oaXNfbGVnYWN5ICsgaXNf dHlwZWMgKyBpc190YnQgIT0gMSk7Ci0KLQlpZiAoaXNfbGVnYWN5KQotCQlpbnRlbF9kaWdfcG9y dC0+dGNfdHlwZSA9IFRDX1BPUlRfTEVHQUNZOwotCWVsc2UgaWYgKGlzX3R5cGVjKQotCQlpbnRl bF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVFlQRUM7Ci0JZWxzZSBpZiAoaXNfdGJ0KQot CQlpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVEJUOwotCWVsc2UKLQkJcmV0dXJu OwotCi0JLyogVHlwZXMgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUu ICovCi0JV0FSTl9PTihvbGRfdHlwZSAhPSBUQ19QT1JUX1VOS05PV04gJiYKLQkJb2xkX3R5cGUg IT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpOwotCi0JaWYgKG9sZF90eXBlICE9IGludGVsX2Rp Z19wb3J0LT50Y190eXBlKQotCQlEUk1fREVCVUdfS01TKCJQb3J0ICVjIGhhcyBUQyB0eXBlICVz XG4iLCBwb3J0X25hbWUocG9ydCksCi0JCQkgICAgICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3Bv cnQtPnRjX3R5cGUpKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUg Zmlyc3QgcGFydCBvZiB0aGUgQ29ubmVjdCBGbG93IGRlc2NyaWJlZCBieSBvdXIKLSAqIHNwZWNp ZmljYXRpb24sIEdlbjExIFR5cGVDIFByb2dyYW1taW5nIGNoYXB0ZXIuIFRoZSByZXN0IG9mIHRo ZSBmbG93IChyZWFkaW5nCi0gKiBsYW5lcywgRURJRCwgZXRjKSBpcyBkb25lIGFzIG5lZWRlZCBp biB0aGUgdHlwaWNhbCBwbGFjZXMuCi0gKgotICogVW5saWtlIHRoZSBvdGhlciBwb3J0cywgdHlw ZS1DIHBvcnRzIGFyZSBub3QgYXZhaWxhYmxlIHRvIHVzZSBhcyBzb29uIGFzIHdlCi0gKiBnZXQg YSBob3RwbHVnLiBUaGUgdHlwZS1DIFBIWXMgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxl IGNvbnRyb2xsZXJzOgotICogZGlzcGxheSwgVVNCLCBldGMuIEFzIGEgcmVzdWx0LCBoYW5kc2hh a2luZyB0aHJvdWdoIEZJQSBpcyByZXF1aXJlZCBhcm91bmQKLSAqIGNvbm5lY3QgYW5kIGRpc2Nv bm5lY3QgdG8gY2xlYW5seSB0cmFuc2ZlciBvd25lcnNoaXAgd2l0aCB0aGUgY29udHJvbGxlciBh bmQKLSAqIHNldCB0aGUgdHlwZS1DIHBvd2VyIHN0YXRlLgotICoKLSAqIFdlIGNvdWxkIG9wdCB0 byBvbmx5IGRvIHRoZSBjb25uZWN0IGZsb3cgd2hlbiB3ZSBhY3R1YWxseSB0cnkgdG8gdXNlIHRo ZSBBVVgKLSAqIGNoYW5uZWxzIG9yIGRvIGEgbW9kZXNldCwgdGhlbiBpbW1lZGlhdGVseSBydW4g dGhlIGRpc2Nvbm5lY3QgZmxvdyBhZnRlcgotICogdXNhZ2UsIGJ1dCB0aGVyZSBhcmUgc29tZSBp bXBsaWNhdGlvbnMgb24gdGhpcyBmb3IgYSBkeW5hbWljIGVudmlyb25tZW50OgotICogdGhpbmdz IG1heSBnbyBhd2F5IG9yIGNoYW5nZSBiZWhpbmQgb3VyIGJhY2tzLiBTbyBmb3Igbm93IG91ciBk cml2ZXIgaXMKLSAqIGFsd2F5cyB0cnlpbmcgdG8gYWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIGNv bnRyb2xsZXIgYXMgc29vbiBhcyBpdCBnZXRzIGFuCi0gKiBpbnRlcnJ1cHQgKG9yIHBvbGxzIHN0 YXRlIGFuZCBzZWVzIGEgcG9ydCBpcyBjb25uZWN0ZWQpIGFuZCBvbmx5IGdpdmVzIGl0Ci0gKiBi YWNrIHdoZW4gaXQgc2VlcyBhIGRpc2Nvbm5lY3QuIEltcGxlbWVudGF0aW9uIG9mIGEgbW9yZSBm aW5lLWdyYWluZWQgbW9kZWwKLSAqIHdpbGwgcmVxdWlyZSBhIGxvdCBvZiBjb29yZGluYXRpb24g d2l0aCB1c2VyIHNwYWNlIGFuZCB0aG9yb3VnaCB0ZXN0aW5nIGZvcgotICogdGhlIGV4dHJhIHBv c3NpYmxlIGNhc2VzLgotICovCi1zdGF0aWMgYm9vbCBpY2xfdGNfcGh5X2Nvbm5lY3Qoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgIHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmRpZ19wb3J0KQotewotCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9y dF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJhc2UucG9ydCk7Ci0JdTMyIHZhbDsKLQotCWlm IChkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX0xFR0FDWSAmJgotCSAgICBkaWdfcG9ydC0+ dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVDKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXZhbCA9IEk5MTVf UkVBRChQT1JUX1RYX0RGTEVYRFBQTVMpOwotCWlmICghKHZhbCAmIERQX1BIWV9NT0RFX1NUQVRV U19DT01QTEVURUQodGNfcG9ydCkpKSB7Ci0JCURSTV9ERUJVR19LTVMoIkRQIFBIWSBmb3IgVEMg cG9ydCAlZCBub3QgcmVhZHlcbiIsIHRjX3BvcnQpOwotCQlXQVJOX09OKGRpZ19wb3J0LT50Y19s ZWdhY3lfcG9ydCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgZnVuY3Rp b24gbWF5IGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQgYW4gSFBEIGV2ZW50 Ci0JICogaW4gYmV0d2Vlbiwgc28gdHJ5IHRvIGF2b2lkIHRoZSB3cml0ZSB3aGVuIHdlIGNhbi4K LQkgKi8KLQl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Ci0JaWYgKCEodmFs ICYgRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpKSkgewotCQl2YWwgfD0gRFBf UEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpOwotCQlJOTE1X1dSSVRFKFBPUlRfVFhf REZMRVhEUENTU1MsIHZhbCk7Ci0JfQotCi0JLyoKLQkgKiBOb3cgd2UgaGF2ZSB0byByZS1jaGVj ayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2FzZSB0aGUgcG9ydCByZWNlbnRseQotCSAqIGJlY2FtZSBk aXNjb25uZWN0ZWQuIE5vdCBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBtb2RlLgotCSAqLwotCWlmIChk aWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1RZUEVDICYmCi0JICAgICEoSTkxNV9SRUFEKFBP UlRfVFhfREZMRVhEUFNQKSAmIFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCkpKSB7Ci0JCURSTV9E RUJVR19LTVMoIlRDIFBIWSAlZCBzdWRkZW4gZGlzY29ubmVjdC5cbiIsIHRjX3BvcnQpOwotCQlp Y2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGV2X3ByaXYsIGRpZ19wb3J0KTsKLQkJcmV0dXJuIGZhbHNl OwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogU2VlIHRoZSBjb21tZW50IGF0IHRo ZSBjb25uZWN0IGZ1bmN0aW9uLiBUaGlzIGltcGxlbWVudHMgdGhlIERpc2Nvbm5lY3QKLSAqIEZs b3cuCi0gKi8KLXZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKLQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 KQotewotCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwg ZGlnX3BvcnQtPmJhc2UucG9ydCk7Ci0KLQlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENfUE9S VF9VTktOT1dOKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFRCVCBkaXNjb25uZWN0aW9uIGZsb3cg aXMgcmVhZCB0aGUgbGl2ZSBzdGF0dXMsIHdoYXQgd2FzIGRvbmUgaW4KLQkgKiBjYWxsZXIuCi0J ICovCi0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVFlQRUMgfHwKLQkgICAgZGln X3BvcnQtPnRjX3R5cGUgPT0gVENfUE9SVF9MRUdBQ1kpIHsKLQkJdTMyIHZhbDsKLQotCQl2YWwg PSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Ci0JCXZhbCAmPSB+RFBfUEhZX01PREVf U1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpOwotCQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENT U1MsIHZhbCk7Ci0JfQotCi0JRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBUQyB0eXBlICVzIGRpc2Nv bm5lY3RlZFxuIiwKLQkJICAgICAgcG9ydF9uYW1lKGRpZ19wb3J0LT5iYXNlLnBvcnQpLAotCQkg ICAgICB0Y190eXBlX25hbWUoZGlnX3BvcnQtPnRjX3R5cGUpKTsKLQotCWRpZ19wb3J0LT50Y190 eXBlID0gVENfUE9SVF9VTktOT1dOOwotfQotCi0vKgotICogVGhlIHR5cGUtQyBwb3J0cyBhcmUg ZGlmZmVyZW50IGJlY2F1c2UgZXZlbiB3aGVuIHRoZXkgYXJlIGNvbm5lY3RlZCwgdGhleSBtYXkK LSAqIG5vdCBiZSBhdmFpbGFibGUvdXNhYmxlIGJ5IHRoZSBncmFwaGljcyBkcml2ZXI6IHNlZSB0 aGUgY29tbWVudCBvbgotICogaWNsX3RjX3BoeV9jb25uZWN0KCkuIFNvIGluIG91ciBkcml2ZXIg aW5zdGVhZCBvZiBhZGRpbmcgdGhlIGFkZGl0aW9uYWwKLSAqIGNvbmNlcHQgb2YgInVzYWJsZSIg YW5kIG1ha2UgZXZlcnl0aGluZyBjaGVjayBmb3IgImNvbm5lY3RlZCBhbmQgdXNhYmxlIiB3ZQot ICogZGVmaW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVuIGl0IGlzIG5vdCBvbmx5IGNvbm5l Y3RlZCwgYnV0IGFsc28gd2hlbiBpdAotICogaXMgdXNhYmxlIGJ5IHRoZSByZXN0IG9mIHRoZSBk cml2ZXIuIFRoYXQgbWFpbnRhaW5zIHRoZSBvbGQgYXNzdW1wdGlvbiB0aGF0Ci0gKiBjb25uZWN0 ZWQgcG9ydHMgYXJlIHVzYWJsZSwgYW5kIGF2b2lkcyBleHBvc2luZyB0byB0aGUgdXNlcnMgb2Jq ZWN0cyB0aGV5Ci0gKiBjYW4ndCByZWFsbHkgdXNlLgotICovCi1zdGF0aWMgYm9vbCBpY2xfdGNf cG9ydF9jb25uZWN0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAg c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCi17Ci0JZW51bSBwb3J0 IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5wb3J0OwotCWVudW0gdGNfcG9ydCB0Y19wb3J0 ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgcG9ydCk7Ci0JYm9vbCBpc19sZWdhY3ksIGlz X3R5cGVjLCBpc190YnQ7Ci0JdTMyIGRwc3A7Ci0KLQkvKgotCSAqIENvbXBsYWluIGlmIHdlIGdv dCBhIGxlZ2FjeSBwb3J0IEhQRCwgYnV0IFZCVCBkaWRuJ3QgbWFyayB0aGUgcG9ydCBhcwotCSAq IGxlZ2FjeS4gVHJlYXQgdGhlIHBvcnQgYXMgbGVnYWN5IGZyb20gbm93IG9uLgotCSAqLwotCWlm ICghaW50ZWxfZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0ICYmCi0JICAgIEk5MTVfUkVBRChTREVJ U1IpICYgU0RFX1RDX0hPVFBMVUdfSUNQKHRjX3BvcnQpKSB7Ci0JCURSTV9FUlJPUigiVkJUIGlu Y29ycmVjdGx5IGNsYWltcyBwb3J0ICVjIGlzIG5vdCBUeXBlQyBsZWdhY3lcbiIsCi0JCQkgIHBv cnRfbmFtZShwb3J0KSk7Ci0JCWludGVsX2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCA9IHRydWU7 Ci0JfQotCWlzX2xlZ2FjeSA9IGludGVsX2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydDsKLQotCS8q Ci0JICogVGhlIHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgdGhlIElTUiBiaXRzIGZv ciBkZXRlY3RpbmcKLQkgKiBiZXR3ZWVuIFRDIGFuZCBUQlQuIFdlIHNob3VsZCB1c2UgREZMRVhE UFNQLgotCSAqLwotCWRwc3AgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApOwotCWlzX3R5 cGVjID0gZHBzcCAmIFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCk7Ci0JaXNfdGJ0ID0gZHBzcCAm IFRDX0xJVkVfU1RBVEVfVEJUKHRjX3BvcnQpOwotCi0JaWYgKCFpc19sZWdhY3kgJiYgIWlzX3R5 cGVjICYmICFpc190YnQpIHsKLQkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRldl9wcml2LCBpbnRl bF9kaWdfcG9ydCk7Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWljbF91cGRhdGVfdGNfcG9y dF90eXBlKGRldl9wcml2LCBpbnRlbF9kaWdfcG9ydCwgaXNfbGVnYWN5LCBpc190eXBlYywKLQkJ CQlpc190YnQpOwotCi0JaWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGV2X3ByaXYsIGludGVsX2Rp Z19wb3J0KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBi b29sIGljbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5j b2Rlci0+YmFzZS5kZXYpOwpAQCAtNTQyOCw3ICs1MjA3LDcgQEAgc3RhdGljIGJvb2wgaWNsX2Rp Z2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCiAJaWYg KGludGVsX3BvcnRfaXNfY29tYm9waHkoZGV2X3ByaXYsIGVuY29kZXItPnBvcnQpKQogCQlyZXR1 cm4gaWNsX2NvbWJvX3BvcnRfY29ubmVjdGVkKGRldl9wcml2LCBkaWdfcG9ydCk7CiAJZWxzZSBp ZiAoaW50ZWxfcG9ydF9pc190YyhkZXZfcHJpdiwgZW5jb2Rlci0+cG9ydCkpCi0JCXJldHVybiBp Y2xfdGNfcG9ydF9jb25uZWN0ZWQoZGV2X3ByaXYsIGRpZ19wb3J0KTsKKwkJcmV0dXJuIGludGVs X3RjX3BvcnRfY29ubmVjdGVkKGRpZ19wb3J0KTsKIAllbHNlCiAJCU1JU1NJTkdfQ0FTRShlbmNv ZGVyLT5ocGRfcGluKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmgKaW5kZXggZGE3MGIxYTQxYzgz Li42NTdiYmIxZjVlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuaApAQCAtMTEyLDggKzExMiw2 IEBAIGJvb2wgaW50ZWxfZHBfZ2V0X2NvbG9yaW1ldHJ5X3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsKIGludCBpbnRlbF9kcF9saW5rX3JlcXVpcmVkKGludCBwaXhlbF9jbG9jaywg aW50IGJwcCk7CiBpbnQgaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShpbnQgbWF4X2xpbmtfY2xvY2ss IGludCBtYXhfbGFuZXMpOwogYm9vbCBpbnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsKLXZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmRpZ19wb3J0KTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxf ZHBfdW51c2VkX2xhbmVfbWFzayhpbnQgbGFuZV9jb3VudCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90 Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2ExYjU4NzA5NDVm Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuYwpAQCAt MCwwICsxLDIzMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlICJpbnRlbF9k aXNwbGF5LmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF90Yy5oIgor CitzdGF0aWMgY29uc3QgY2hhciAqdGNfdHlwZV9uYW1lKGVudW0gdGNfcG9ydF90eXBlIHR5cGUp Cit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0geworCQlbVENfUE9SVF9V TktOT1dOXSA9ICJ1bmtub3duIiwKKwkJW1RDX1BPUlRfTEVHQUNZXSA9ICJsZWdhY3kiLAorCQlb VENfUE9SVF9UWVBFQ10gPSAidHlwZWMiLAorCQlbVENfUE9SVF9UQlRdID0gInRidCIsCisJfTsK KworCWlmIChXQVJOX09OKHR5cGUgPj0gQVJSQVlfU0laRShuYW1lcykpKQorCQl0eXBlID0gVENf UE9SVF9VTktOT1dOOworCisJcmV0dXJuIG5hbWVzW3R5cGVdOworfQorCitpbnQgaW50ZWxfdGNf cG9ydF9maWFfbWF4X2xhbmVfY291bnQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdf cG9ydC0+YmFzZS5iYXNlLmRldik7CisJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0 X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKKwlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKKwl1MzIgbGFuZV9pbmZvOworCisJaWYgKHRjX3BvcnQgPT0gUE9SVF9UQ19OT05F IHx8IGRpZ19wb3J0LT50Y190eXBlICE9IFRDX1BPUlRfVFlQRUMpCisJCXJldHVybiA0OworCisJ bGFuZV9pbmZvID0gMDsKKwl3aXRoX2ludGVsX2Rpc3BsYXlfcG93ZXIoZGV2X3ByaXYsIFBPV0VS X0RPTUFJTl9ESVNQTEFZX0NPUkUsIHdha2VyZWYpCisJCWxhbmVfaW5mbyA9IChJOTE1X1JFQUQo UE9SVF9UWF9ERkxFWERQU1ApICYKKwkJCSAgICAgRFBfTEFORV9BU1NJR05NRU5UX01BU0sodGNf cG9ydCkpID4+CisJCQkJRFBfTEFORV9BU1NJR05NRU5UX1NISUZUKHRjX3BvcnQpOworCisJc3dp dGNoIChsYW5lX2luZm8pIHsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UobGFuZV9pbmZvKTsK KwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCXJldHVybiAxOworCWNh c2UgMzoKKwljYXNlIDEyOgorCQlyZXR1cm4gMjsKKwljYXNlIDE1OgorCQlyZXR1cm4gNDsKKwl9 Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGZpcnN0IHBhcnQgb2Yg dGhlIENvbm5lY3QgRmxvdyBkZXNjcmliZWQgYnkgb3VyCisgKiBzcGVjaWZpY2F0aW9uLCBHZW4x MSBUeXBlQyBQcm9ncmFtbWluZyBjaGFwdGVyLiBUaGUgcmVzdCBvZiB0aGUgZmxvdyAocmVhZGlu ZworICogbGFuZXMsIEVESUQsIGV0YykgaXMgZG9uZSBhcyBuZWVkZWQgaW4gdGhlIHR5cGljYWwg cGxhY2VzLgorICoKKyAqIFVubGlrZSB0aGUgb3RoZXIgcG9ydHMsIHR5cGUtQyBwb3J0cyBhcmUg bm90IGF2YWlsYWJsZSB0byB1c2UgYXMgc29vbiBhcyB3ZQorICogZ2V0IGEgaG90cGx1Zy4gVGhl IHR5cGUtQyBQSFlzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBjb250cm9sbGVyczoK KyAqIGRpc3BsYXksIFVTQiwgZXRjLiBBcyBhIHJlc3VsdCwgaGFuZHNoYWtpbmcgdGhyb3VnaCBG SUEgaXMgcmVxdWlyZWQgYXJvdW5kCisgKiBjb25uZWN0IGFuZCBkaXNjb25uZWN0IHRvIGNsZWFu bHkgdHJhbnNmZXIgb3duZXJzaGlwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kCisgKiBzZXQgdGhl IHR5cGUtQyBwb3dlciBzdGF0ZS4KKyAqCisgKiBXZSBjb3VsZCBvcHQgdG8gb25seSBkbyB0aGUg Y29ubmVjdCBmbG93IHdoZW4gd2UgYWN0dWFsbHkgdHJ5IHRvIHVzZSB0aGUgQVVYCisgKiBjaGFu bmVscyBvciBkbyBhIG1vZGVzZXQsIHRoZW4gaW1tZWRpYXRlbHkgcnVuIHRoZSBkaXNjb25uZWN0 IGZsb3cgYWZ0ZXIKKyAqIHVzYWdlLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wbGljYXRpb25zIG9u IHRoaXMgZm9yIGEgZHluYW1pYyBlbnZpcm9ubWVudDoKKyAqIHRoaW5ncyBtYXkgZ28gYXdheSBv ciBjaGFuZ2UgYmVoaW5kIG91ciBiYWNrcy4gU28gZm9yIG5vdyBvdXIgZHJpdmVyIGlzCisgKiBh bHdheXMgdHJ5aW5nIHRvIGFjcXVpcmUgb3duZXJzaGlwIG9mIHRoZSBjb250cm9sbGVyIGFzIHNv b24gYXMgaXQgZ2V0cyBhbgorICogaW50ZXJydXB0IChvciBwb2xscyBzdGF0ZSBhbmQgc2VlcyBh IHBvcnQgaXMgY29ubmVjdGVkKSBhbmQgb25seSBnaXZlcyBpdAorICogYmFjayB3aGVuIGl0IHNl ZXMgYSBkaXNjb25uZWN0LiBJbXBsZW1lbnRhdGlvbiBvZiBhIG1vcmUgZmluZS1ncmFpbmVkIG1v ZGVsCisgKiB3aWxsIHJlcXVpcmUgYSBsb3Qgb2YgY29vcmRpbmF0aW9uIHdpdGggdXNlciBzcGFj ZSBhbmQgdGhvcm91Z2ggdGVzdGluZyBmb3IKKyAqIHRoZSBleHRyYSBwb3NzaWJsZSBjYXNlcy4K KyAqLworc3RhdGljIGJvb2wgaWNsX3RjX3BoeV9jb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOworCWVudW0gdGNfcG9ydCB0Y19wb3J0 ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJhc2UucG9ydCk7CisJdTMy IHZhbDsKKworCWlmIChkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX0xFR0FDWSAmJgorCSAg ICBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVDKQorCQlyZXR1cm4gdHJ1ZTsKKwor CXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBQTVMpOworCWlmICghKHZhbCAmIERQX1BI WV9NT0RFX1NUQVRVU19DT01QTEVURUQodGNfcG9ydCkpKSB7CisJCURSTV9ERUJVR19LTVMoIkRQ IFBIWSBmb3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIsIHRjX3BvcnQpOworCQlXQVJOX09OKGRp Z19wb3J0LT50Y19sZWdhY3lfcG9ydCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAq IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQg YW4gSFBEIGV2ZW50CisJICogaW4gYmV0d2Vlbiwgc28gdHJ5IHRvIGF2b2lkIHRoZSB3cml0ZSB3 aGVuIHdlIGNhbi4KKwkgKi8KKwl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7 CisJaWYgKCEodmFsICYgRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpKSkgewor CQl2YWwgfD0gRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpOworCQlJOTE1X1dS SVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgaGF2 ZSB0byByZS1jaGVjayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2FzZSB0aGUgcG9ydCByZWNlbnRseQor CSAqIGJlY2FtZSBkaXNjb25uZWN0ZWQuIE5vdCBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBtb2RlLgor CSAqLworCWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1RZUEVDICYmCisJICAgICEo STkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAmIFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCkp KSB7CisJCURSTV9ERUJVR19LTVMoIlRDIFBIWSAlZCBzdWRkZW4gZGlzY29ubmVjdC5cbiIsIHRj X3BvcnQpOworCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTZWUgdGhlIGNvbW1lbnQgYXQg dGhlIGNvbm5lY3QgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50cyB0aGUgRGlzY29ubmVjdAorICog Rmxvdy4KKyAqLwordm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7CisJZW51bSB0Y19wb3J0IHRjX3Bv cnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKKwor CWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1VOS05PV04pCisJCXJldHVybjsKKwor CS8qCisJICogVEJUIGRpc2Nvbm5lY3Rpb24gZmxvdyBpcyByZWFkIHRoZSBsaXZlIHN0YXR1cywg d2hhdCB3YXMgZG9uZSBpbgorCSAqIGNhbGxlci4KKwkgKi8KKwlpZiAoZGlnX3BvcnQtPnRjX3R5 cGUgPT0gVENfUE9SVF9UWVBFQyB8fAorCSAgICBkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JU X0xFR0FDWSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVY RFBDU1NTKTsKKwkJdmFsICY9IH5EUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7 CisJCUk5MTVfV1JJVEUoUE9SVF9UWF9ERkxFWERQQ1NTUywgdmFsKTsKKwl9CisKKwlEUk1fREVC VUdfS01TKCJQb3J0ICVjIFRDIHR5cGUgJXMgZGlzY29ubmVjdGVkXG4iLAorCQkgICAgICBwb3J0 X25hbWUoZGlnX3BvcnQtPmJhc2UucG9ydCksCisJCSAgICAgIHRjX3R5cGVfbmFtZShkaWdfcG9y dC0+dGNfdHlwZSkpOworCisJZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1VOS05PV047Cit9 CisKK3N0YXRpYyB2b2lkIGljbF91cGRhdGVfdGNfcG9ydF90eXBlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50 ZWxfZGlnX3BvcnQsCisJCQkJICAgIGJvb2wgaXNfbGVnYWN5LCBib29sIGlzX3R5cGVjLCBib29s IGlzX3RidCkKK3sKKwllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7 CisJZW51bSB0Y19wb3J0X3R5cGUgb2xkX3R5cGUgPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZTsK KworCVdBUk5fT04oaXNfbGVnYWN5ICsgaXNfdHlwZWMgKyBpc190YnQgIT0gMSk7CisKKwlpZiAo aXNfbGVnYWN5KQorCQlpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfTEVHQUNZOwor CWVsc2UgaWYgKGlzX3R5cGVjKQorCQlpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRf VFlQRUM7CisJZWxzZSBpZiAoaXNfdGJ0KQorCQlpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRD X1BPUlRfVEJUOworCWVsc2UKKwkJcmV0dXJuOworCisJLyogVHlwZXMgYXJlIG5vdCBzdXBwb3Nl ZCB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUuICovCisJV0FSTl9PTihvbGRfdHlwZSAhPSBUQ19Q T1JUX1VOS05PV04gJiYKKwkJb2xkX3R5cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpOwor CisJaWYgKG9sZF90eXBlICE9IGludGVsX2RpZ19wb3J0LT50Y190eXBlKQorCQlEUk1fREVCVUdf S01TKCJQb3J0ICVjIGhhcyBUQyB0eXBlICVzXG4iLCBwb3J0X25hbWUocG9ydCksCisJCQkgICAg ICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpKTsKK30KKworCisvKgorICog VGhlIHR5cGUtQyBwb3J0cyBhcmUgZGlmZmVyZW50IGJlY2F1c2UgZXZlbiB3aGVuIHRoZXkgYXJl IGNvbm5lY3RlZCwgdGhleSBtYXkKKyAqIG5vdCBiZSBhdmFpbGFibGUvdXNhYmxlIGJ5IHRoZSBn cmFwaGljcyBkcml2ZXI6IHNlZSB0aGUgY29tbWVudCBvbgorICogaWNsX3RjX3BoeV9jb25uZWN0 KCkuIFNvIGluIG91ciBkcml2ZXIgaW5zdGVhZCBvZiBhZGRpbmcgdGhlIGFkZGl0aW9uYWwKKyAq IGNvbmNlcHQgb2YgInVzYWJsZSIgYW5kIG1ha2UgZXZlcnl0aGluZyBjaGVjayBmb3IgImNvbm5l Y3RlZCBhbmQgdXNhYmxlIiB3ZQorICogZGVmaW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVu IGl0IGlzIG5vdCBvbmx5IGNvbm5lY3RlZCwgYnV0IGFsc28gd2hlbiBpdAorICogaXMgdXNhYmxl IGJ5IHRoZSByZXN0IG9mIHRoZSBkcml2ZXIuIFRoYXQgbWFpbnRhaW5zIHRoZSBvbGQgYXNzdW1w dGlvbiB0aGF0CisgKiBjb25uZWN0ZWQgcG9ydHMgYXJlIHVzYWJsZSwgYW5kIGF2b2lkcyBleHBv c2luZyB0byB0aGUgdXNlcnMgb2JqZWN0cyB0aGV5CisgKiBjYW4ndCByZWFsbHkgdXNlLgorICov Citib29sIGludGVsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ19wb3J0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOworCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQt PmJhc2UucG9ydDsKKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2 X3ByaXYsIHBvcnQpOworCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywgaXNfdGJ0OworCXUzMiBk cHNwOworCisJLyoKKwkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdhY3kgcG9ydCBIUEQsIGJ1 dCBWQlQgZGlkbid0IG1hcmsgdGhlIHBvcnQgYXMKKwkgKiBsZWdhY3kuIFRyZWF0IHRoZSBwb3J0 IGFzIGxlZ2FjeSBmcm9tIG5vdyBvbi4KKwkgKi8KKwlpZiAoIWRpZ19wb3J0LT50Y19sZWdhY3lf cG9ydCAmJgorCSAgICBJOTE1X1JFQUQoU0RFSVNSKSAmIFNERV9UQ19IT1RQTFVHX0lDUCh0Y19w b3J0KSkgeworCQlEUk1fRVJST1IoIlZCVCBpbmNvcnJlY3RseSBjbGFpbXMgcG9ydCAlYyBpcyBu b3QgVHlwZUMgbGVnYWN5XG4iLAorCQkJICBwb3J0X25hbWUocG9ydCkpOworCQlkaWdfcG9ydC0+ dGNfbGVnYWN5X3BvcnQgPSB0cnVlOworCX0KKwlpc19sZWdhY3kgPSBkaWdfcG9ydC0+dGNfbGVn YWN5X3BvcnQ7CisKKwkvKgorCSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5n IHRoZSBJU1IgYml0cyBmb3IgZGV0ZWN0aW5nCisJICogYmV0d2VlbiBUQyBhbmQgVEJULiBXZSBz aG91bGQgdXNlIERGTEVYRFBTUC4KKwkgKi8KKwlkcHNwID0gSTkxNV9SRUFEKFBPUlRfVFhfREZM RVhEUFNQKTsKKwlpc190eXBlYyA9IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpOwor CWlzX3RidCA9IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RCVCh0Y19wb3J0KTsKKworCWlmICghaXNf bGVnYWN5ICYmICFpc190eXBlYyAmJiAhaXNfdGJ0KSB7CisJCWljbF90Y19waHlfZGlzY29ubmVj dChkaWdfcG9ydCk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWljbF91cGRhdGVfdGNfcG9y dF90eXBlKGRldl9wcml2LCBkaWdfcG9ydCwgaXNfbGVnYWN5LCBpc190eXBlYywKKwkJCQlpc190 YnQpOworCisJaWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGlnX3BvcnQpKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NGM2MmFjNGExNjIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5oCkBAIC0wLDAgKzEsMTMgQEAK KyNpZm5kZWYgX19JTlRFTF9UQ19IX18KKyNkZWZpbmUgX19JTlRFTF9UQ19IX18KKworI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7CisKK3ZvaWQg aWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 KTsKKworYm9vbCBpbnRlbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9w b3J0ICpkaWdfcG9ydCk7CitpbnQgaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291bnQoc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpOworCisjZW5kaWYgLyogX19JTlRFTF9U Q19IX18gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4