From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: [PATCH v3 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Fri, 28 Jun 2019 17:36:15 +0300 Message-ID: <20190628143635.22066-4-imre.deak@intel.com> References: <20190628143635.22066-1-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5956B6E936 for ; Fri, 28 Jun 2019 14:36:49 +0000 (UTC) In-Reply-To: <20190628143635.22066-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: Jani Nikula , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org TW92ZSB0aGUgVHlwZUMgcG9ydCBoYW5kbGluZyBmdW5jdGlvbnMgdG8gYSBuZXcgZmlsZSBmb3Ig Y2xhcml0eS4KCldoaWxlIGF0IGl0OgotIHMvaWNsX3RjX3BvcnRfY29ubmVjdGVkKCkvaW50ZWxf dGNfcG9ydF9jb25uZWN0ZWQoKS8KICBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoKSwgd2lsbCBiZSB1 bmV4cG9ydGVkIGxhdGVyLgoKLSBzL2ludGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVfY291 bnQoKS8KICAgIGludGVsX3RjX3BvcnRfZmlhX21heF9sYW5lX2NvdW50KCkvCiAgSXQncyB1c2Vk IGZvciBIRE1JIGxlZ2FjeSBtb2RlIHRvby4KCi0gU2ltcGxpZnkgZnVuY3Rpb24gaW50ZXJmYWNl cyBieSBwYXNzaW5nIG9ubHkgZGlnX3BvcnQgdG8gdGhlbS4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdl cy4KCnYyOgotIEZpeCBjaGVja3BhdGNoIGlzc3VlczogKzEvLTEgZW1wdHkgbGluZXMgaW4gaW50 ZWxfdGMuYyBhbmQgYWRkCiAgbWlzc2luZyBTUERYIHRvIGludGVsX3RjLmguIChKYW5pKQoKQ2M6 IEFuaW1lc2ggTWFubmEgPGFuaW1lc2gubWFubmFAaW50ZWwuY29tPgpDYzogUGF1bG8gWmFub25p IDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CkNjOiBKb3PDqSBSb2JlcnRvIGRlIFNvdXphIDxq b3NlLnNvdXphQGludGVsLmNvbT4KQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5j b20+ClNpZ25lZC1vZmYtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KQWNrZWQt Ynk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBKb3PD qSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2RwLmMgIHwgMjI3ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCAgfCAgIDIgLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF90Yy5jICB8IDIzMCArKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5oICB8ICAxOCArKwogNiBmaWxl cyBjaGFuZ2VkLCAyNTYgaW5zZXJ0aW9ucygrKSwgMjMwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuaAoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKaW5kZXggM2JkOGYwMzQ5YThhLi44MmM0OWFkMTYzNjEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCkBAIC0xNzUsNyArMTc1LDggQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2lu dGVsX292ZXJsYXkubyBcCiAJZGlzcGxheS9pbnRlbF9wc3IubyBcCiAJZGlzcGxheS9pbnRlbF9x dWlya3MubyBcCi0JZGlzcGxheS9pbnRlbF9zcHJpdGUubworCWRpc3BsYXkvaW50ZWxfc3ByaXRl Lm8gXAorCWRpc3BsYXkvaW50ZWxfdGMubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlz cGxheS9pbnRlbF9hY3BpLm8gXAogCWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKaW5kZXggNzkyNWExNzZmOTAwLi5kMDZmMTIx MjgxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRp LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwpAQCAtNDUs NiArNDUsNyBAQAogI2luY2x1ZGUgImludGVsX2xzcGNvbi5oIgogI2luY2x1ZGUgImludGVsX3Bh bmVsLmgiCiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCisjaW5jbHVkZSAiaW50ZWxfdGMuaCIKICNp bmNsdWRlICJpbnRlbF92ZHNjLmgiCiAKIHN0cnVjdCBkZGlfYnVmX3RyYW5zIHsKQEAgLTM5MTcs NyArMzkxOCw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZGRpX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAogc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3Vz cGVuZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICpkaWdfcG9ydCA9IGVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2 KTsKIAogCWludGVsX2RwX2VuY29kZXJfc3VzcGVuZChlbmNvZGVyKTsKIApAQCAtMzkyNyw3ICsz OTI3LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlcikKIAkgKiBldmVuIGlmIHRoZSBzaW5rIGhhcyBkaXNhcHBlYXJl ZCB3aGlsZSBiZWluZyBzdXNwZW5kZWQuCiAJICovCiAJaWYgKGRpZ19wb3J0LT50Y19sZWdhY3lf cG9ydCkKLQkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGk5MTUsIGRpZ19wb3J0KTsKKwkJaWNsX3Rj X3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfZGRpX2Vu Y29kZXJfcmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jb2RlcikKQEAgLTM5NDksNyAr Mzk0OSw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQogCWludGVsX2RwX2VuY29kZXJfZmx1c2hfd29yayhlbmNvZGVy KTsKIAogCWlmIChpbnRlbF9wb3J0X2lzX3RjKGk5MTUsIGRpZ19wb3J0LT5iYXNlLnBvcnQpKQot CQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoaTkxNSwgZGlnX3BvcnQpOworCQlpY2xfdGNfcGh5X2Rp c2Nvbm5lY3QoZGlnX3BvcnQpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlr ZnJlZShkaWdfcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKaW5k ZXggNDMzNmRmNDZmZTc4Li4zNDhjNzBiNzU0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2RwLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJpbnRlbF9wYW5lbC5o IgogI2luY2x1ZGUgImludGVsX3Bzci5oIgogI2luY2x1ZGUgImludGVsX3NpZGViYW5kLmgiCisj aW5jbHVkZSAiaW50ZWxfdGMuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCiAKICNkZWZpbmUg RFBfRFBSWF9FU0lfTEVOIDE0CkBAIC0yMTEsNDYgKzIxMiwxMyBAQCBzdGF0aWMgaW50IGludGVs X2RwX21heF9jb21tb25fcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCXJldHVybiBp bnRlbF9kcC0+Y29tbW9uX3JhdGVzW2ludGVsX2RwLT5udW1fY29tbW9uX3JhdGVzIC0gMV07CiB9 CiAKLXN0YXRpYyBpbnQgaW50ZWxfZHBfZ2V0X2ZpYV9zdXBwb3J0ZWRfbGFuZV9jb3VudChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRp Z19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwotCWVudW0g dGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJh c2UucG9ydCk7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JdTMyIGxhbmVfaW5mbzsKLQot CWlmICh0Y19wb3J0ID09IFBPUlRfVENfTk9ORSB8fCBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19Q T1JUX1RZUEVDKQotCQlyZXR1cm4gNDsKLQotCWxhbmVfaW5mbyA9IDA7Ci0Jd2l0aF9pbnRlbF9k aXNwbGF5X3Bvd2VyKGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLCB3YWtlcmVm KQotCQlsYW5lX2luZm8gPSAoSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAmCi0JCQkgICAg IERQX0xBTkVfQVNTSUdOTUVOVF9NQVNLKHRjX3BvcnQpKSA+PgotCQkJCURQX0xBTkVfQVNTSUdO TUVOVF9TSElGVCh0Y19wb3J0KTsKLQotCXN3aXRjaCAobGFuZV9pbmZvKSB7Ci0JZGVmYXVsdDoK LQkJTUlTU0lOR19DQVNFKGxhbmVfaW5mbyk7Ci0JY2FzZSAxOgotCWNhc2UgMjoKLQljYXNlIDQ6 Ci0JY2FzZSA4OgotCQlyZXR1cm4gMTsKLQljYXNlIDM6Ci0JY2FzZSAxMjoKLQkJcmV0dXJuIDI7 Ci0JY2FzZSAxNToKLQkJcmV0dXJuIDQ7Ci0JfQotfQotCiAvKiBUaGVvcmV0aWNhbCBtYXggYmV0 d2VlbiBzb3VyY2UgYW5kIHNpbmsgKi8KIHN0YXRpYyBpbnQgaW50ZWxfZHBfbWF4X2NvbW1vbl9s YW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CiAJc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CiAJ aW50IHNvdXJjZV9tYXggPSBpbnRlbF9kaWdfcG9ydC0+bWF4X2xhbmVzOwogCWludCBzaW5rX21h eCA9IGRybV9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcC0+ZHBjZCk7Ci0JaW50IGZpYV9tYXgg PSBpbnRlbF9kcF9nZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2NvdW50KGludGVsX2RwKTsKKwlpbnQg ZmlhX21heCA9IGludGVsX3RjX3BvcnRfZmlhX21heF9sYW5lX2NvdW50KGludGVsX2RpZ19wb3J0 KTsKIAogCXJldHVybiBtaW4zKHNvdXJjZV9tYXgsIHNpbmtfbWF4LCBmaWFfbWF4KTsKIH0KQEAg LTUyMzIsMTk1ICs1MjAwLDYgQEAgc3RhdGljIGJvb2wgaWNsX2NvbWJvX3BvcnRfY29ubmVjdGVk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gSTkxNV9SRUFEKFNE RUlTUikgJiBTREVfRERJX0hPVFBMVUdfSUNQKHBvcnQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hh ciAqdGNfdHlwZV9uYW1lKGVudW0gdGNfcG9ydF90eXBlIHR5cGUpCi17Ci0Jc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCBuYW1lc1tdID0gewotCQlbVENfUE9SVF9VTktOT1dOXSA9ICJ1bmtub3du IiwKLQkJW1RDX1BPUlRfTEVHQUNZXSA9ICJsZWdhY3kiLAotCQlbVENfUE9SVF9UWVBFQ10gPSAi dHlwZWMiLAotCQlbVENfUE9SVF9UQlRdID0gInRidCIsCi0JfTsKLQotCWlmIChXQVJOX09OKHR5 cGUgPj0gQVJSQVlfU0laRShuYW1lcykpKQotCQl0eXBlID0gVENfUE9SVF9VTktOT1dOOwotCi0J cmV0dXJuIG5hbWVzW3R5cGVdOwotfQotCi1zdGF0aWMgdm9pZCBpY2xfdXBkYXRlX3RjX3BvcnRf dHlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgIHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAotCQkJCSAgICBib29sIGlzX2xlZ2Fj eSwgYm9vbCBpc190eXBlYywgYm9vbCBpc190YnQpCi17Ci0JZW51bSBwb3J0IHBvcnQgPSBpbnRl bF9kaWdfcG9ydC0+YmFzZS5wb3J0OwotCWVudW0gdGNfcG9ydF90eXBlIG9sZF90eXBlID0gaW50 ZWxfZGlnX3BvcnQtPnRjX3R5cGU7Ci0KLQlXQVJOX09OKGlzX2xlZ2FjeSArIGlzX3R5cGVjICsg aXNfdGJ0ICE9IDEpOwotCi0JaWYgKGlzX2xlZ2FjeSkKLQkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5 cGUgPSBUQ19QT1JUX0xFR0FDWTsKLQllbHNlIGlmIChpc190eXBlYykKLQkJaW50ZWxfZGlnX3Bv cnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RZUEVDOwotCWVsc2UgaWYgKGlzX3RidCkKLQkJaW50ZWxf ZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RCVDsKLQllbHNlCi0JCXJldHVybjsKLQotCS8q IFR5cGVzIGFyZSBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lLiAqLwotCVdB Uk5fT04ob2xkX3R5cGUgIT0gVENfUE9SVF9VTktOT1dOICYmCi0JCW9sZF90eXBlICE9IGludGVs X2RpZ19wb3J0LT50Y190eXBlKTsKLQotCWlmIChvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+ dGNfdHlwZSkKLQkJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBoYXMgVEMgdHlwZSAlc1xuIiwgcG9y dF9uYW1lKHBvcnQpLAotCQkJICAgICAgdGNfdHlwZV9uYW1lKGludGVsX2RpZ19wb3J0LT50Y190 eXBlKSk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGZpcnN0IHBh cnQgb2YgdGhlIENvbm5lY3QgRmxvdyBkZXNjcmliZWQgYnkgb3VyCi0gKiBzcGVjaWZpY2F0aW9u LCBHZW4xMSBUeXBlQyBQcm9ncmFtbWluZyBjaGFwdGVyLiBUaGUgcmVzdCBvZiB0aGUgZmxvdyAo cmVhZGluZwotICogbGFuZXMsIEVESUQsIGV0YykgaXMgZG9uZSBhcyBuZWVkZWQgaW4gdGhlIHR5 cGljYWwgcGxhY2VzLgotICoKLSAqIFVubGlrZSB0aGUgb3RoZXIgcG9ydHMsIHR5cGUtQyBwb3J0 cyBhcmUgbm90IGF2YWlsYWJsZSB0byB1c2UgYXMgc29vbiBhcyB3ZQotICogZ2V0IGEgaG90cGx1 Zy4gVGhlIHR5cGUtQyBQSFlzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBjb250cm9s bGVyczoKLSAqIGRpc3BsYXksIFVTQiwgZXRjLiBBcyBhIHJlc3VsdCwgaGFuZHNoYWtpbmcgdGhy b3VnaCBGSUEgaXMgcmVxdWlyZWQgYXJvdW5kCi0gKiBjb25uZWN0IGFuZCBkaXNjb25uZWN0IHRv IGNsZWFubHkgdHJhbnNmZXIgb3duZXJzaGlwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kCi0gKiBz ZXQgdGhlIHR5cGUtQyBwb3dlciBzdGF0ZS4KLSAqCi0gKiBXZSBjb3VsZCBvcHQgdG8gb25seSBk byB0aGUgY29ubmVjdCBmbG93IHdoZW4gd2UgYWN0dWFsbHkgdHJ5IHRvIHVzZSB0aGUgQVVYCi0g KiBjaGFubmVscyBvciBkbyBhIG1vZGVzZXQsIHRoZW4gaW1tZWRpYXRlbHkgcnVuIHRoZSBkaXNj b25uZWN0IGZsb3cgYWZ0ZXIKLSAqIHVzYWdlLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wbGljYXRp b25zIG9uIHRoaXMgZm9yIGEgZHluYW1pYyBlbnZpcm9ubWVudDoKLSAqIHRoaW5ncyBtYXkgZ28g YXdheSBvciBjaGFuZ2UgYmVoaW5kIG91ciBiYWNrcy4gU28gZm9yIG5vdyBvdXIgZHJpdmVyIGlz Ci0gKiBhbHdheXMgdHJ5aW5nIHRvIGFjcXVpcmUgb3duZXJzaGlwIG9mIHRoZSBjb250cm9sbGVy IGFzIHNvb24gYXMgaXQgZ2V0cyBhbgotICogaW50ZXJydXB0IChvciBwb2xscyBzdGF0ZSBhbmQg c2VlcyBhIHBvcnQgaXMgY29ubmVjdGVkKSBhbmQgb25seSBnaXZlcyBpdAotICogYmFjayB3aGVu IGl0IHNlZXMgYSBkaXNjb25uZWN0LiBJbXBsZW1lbnRhdGlvbiBvZiBhIG1vcmUgZmluZS1ncmFp bmVkIG1vZGVsCi0gKiB3aWxsIHJlcXVpcmUgYSBsb3Qgb2YgY29vcmRpbmF0aW9uIHdpdGggdXNl ciBzcGFjZSBhbmQgdGhvcm91Z2ggdGVzdGluZyBmb3IKLSAqIHRoZSBleHRyYSBwb3NzaWJsZSBj YXNlcy4KLSAqLwotc3RhdGljIGJvb2wgaWNsX3RjX3BoeV9jb25uZWN0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICpkaWdfcG9ydCkKLXsKLQllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMo ZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOwotCXUzMiB2YWw7Ci0KLQlpZiAoZGlnX3Bv cnQtPnRjX3R5cGUgIT0gVENfUE9SVF9MRUdBQ1kgJiYKLQkgICAgZGlnX3BvcnQtPnRjX3R5cGUg IT0gVENfUE9SVF9UWVBFQykKLQkJcmV0dXJuIHRydWU7Ci0KLQl2YWwgPSBJOTE1X1JFQUQoUE9S VF9UWF9ERkxFWERQUE1TKTsKLQlpZiAoISh2YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfQ09NUExF VEVEKHRjX3BvcnQpKSkgewotCQlEUk1fREVCVUdfS01TKCJEUCBQSFkgZm9yIFRDIHBvcnQgJWQg bm90IHJlYWR5XG4iLCB0Y19wb3J0KTsKLQkJV0FSTl9PTihkaWdfcG9ydC0+dGNfbGVnYWN5X3Bv cnQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBi ZSBjYWxsZWQgbWFueSB0aW1lcyBpbiBhIHJvdyB3aXRob3V0IGFuIEhQRCBldmVudAotCSAqIGlu IGJldHdlZW4sIHNvIHRyeSB0byBhdm9pZCB0aGUgd3JpdGUgd2hlbiB3ZSBjYW4uCi0JICovCi0J dmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUENTU1MpOwotCWlmICghKHZhbCAmIERQX1BI WV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KSkpIHsKLQkJdmFsIHw9IERQX1BIWV9NT0RF X1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKLQkJSTkxNV9XUklURShQT1JUX1RYX0RGTEVYRFBD U1NTLCB2YWwpOwotCX0KLQotCS8qCi0JICogTm93IHdlIGhhdmUgdG8gcmUtY2hlY2sgdGhlIGxp dmUgc3RhdGUsIGluIGNhc2UgdGhlIHBvcnQgcmVjZW50bHkKLQkgKiBiZWNhbWUgZGlzY29ubmVj dGVkLiBOb3QgbmVjZXNzYXJ5IGZvciBsZWdhY3kgbW9kZS4KLQkgKi8KLQlpZiAoZGlnX3BvcnQt PnRjX3R5cGUgPT0gVENfUE9SVF9UWVBFQyAmJgotCSAgICAhKEk5MTVfUkVBRChQT1JUX1RYX0RG TEVYRFBTUCkgJiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpKSkgewotCQlEUk1fREVCVUdfS01T KCJUQyBQSFkgJWQgc3VkZGVuIGRpc2Nvbm5lY3QuXG4iLCB0Y19wb3J0KTsKLQkJaWNsX3RjX3Bo eV9kaXNjb25uZWN0KGRldl9wcml2LCBkaWdfcG9ydCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K LQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFNlZSB0aGUgY29tbWVudCBhdCB0aGUgY29ubmVj dCBmdW5jdGlvbi4gVGhpcyBpbXBsZW1lbnRzIHRoZSBEaXNjb25uZWN0Ci0gKiBGbG93LgotICov Ci12b2lkIGljbF90Y19waHlfZGlzY29ubmVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKLXsKLQll bnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0 LT5iYXNlLnBvcnQpOwotCi0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVU5LTk9X TikKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBUQlQgZGlzY29ubmVjdGlvbiBmbG93IGlzIHJlYWQg dGhlIGxpdmUgc3RhdHVzLCB3aGF0IHdhcyBkb25lIGluCi0JICogY2FsbGVyLgotCSAqLwotCWlm IChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1RZUEVDIHx8Ci0JICAgIGRpZ19wb3J0LT50 Y190eXBlID09IFRDX1BPUlRfTEVHQUNZKSB7Ci0JCXUzMiB2YWw7Ci0KLQkJdmFsID0gSTkxNV9S RUFEKFBPUlRfVFhfREZMRVhEUENTU1MpOwotCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NUQVRVU19O T1RfU0FGRSh0Y19wb3J0KTsKLQkJSTkxNV9XUklURShQT1JUX1RYX0RGTEVYRFBDU1NTLCB2YWwp OwotCX0KLQotCURSTV9ERUJVR19LTVMoIlBvcnQgJWMgVEMgdHlwZSAlcyBkaXNjb25uZWN0ZWRc biIsCi0JCSAgICAgIHBvcnRfbmFtZShkaWdfcG9ydC0+YmFzZS5wb3J0KSwKLQkJICAgICAgdGNf dHlwZV9uYW1lKGRpZ19wb3J0LT50Y190eXBlKSk7Ci0KLQlkaWdfcG9ydC0+dGNfdHlwZSA9IFRD X1BPUlRfVU5LTk9XTjsKLX0KLQotLyoKLSAqIFRoZSB0eXBlLUMgcG9ydHMgYXJlIGRpZmZlcmVu dCBiZWNhdXNlIGV2ZW4gd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQsIHRoZXkgbWF5Ci0gKiBub3Qg YmUgYXZhaWxhYmxlL3VzYWJsZSBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyOiBzZWUgdGhlIGNvbW1l bnQgb24KLSAqIGljbF90Y19waHlfY29ubmVjdCgpLiBTbyBpbiBvdXIgZHJpdmVyIGluc3RlYWQg b2YgYWRkaW5nIHRoZSBhZGRpdGlvbmFsCi0gKiBjb25jZXB0IG9mICJ1c2FibGUiIGFuZCBtYWtl IGV2ZXJ5dGhpbmcgY2hlY2sgZm9yICJjb25uZWN0ZWQgYW5kIHVzYWJsZSIgd2UKLSAqIGRlZmlu ZSBhIHBvcnQgYXMgImNvbm5lY3RlZCIgd2hlbiBpdCBpcyBub3Qgb25seSBjb25uZWN0ZWQsIGJ1 dCBhbHNvIHdoZW4gaXQKLSAqIGlzIHVzYWJsZSBieSB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyLiBU aGF0IG1haW50YWlucyB0aGUgb2xkIGFzc3VtcHRpb24gdGhhdAotICogY29ubmVjdGVkIHBvcnRz IGFyZSB1c2FibGUsIGFuZCBhdm9pZHMgZXhwb3NpbmcgdG8gdGhlIHVzZXJzIG9iamVjdHMgdGhl eQotICogY2FuJ3QgcmVhbGx5IHVzZS4KLSAqLwotc3RhdGljIGJvb2wgaWNsX3RjX3BvcnRfY29u bmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgIHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KQotewotCWVudW0gcG9ydCBwb3J0ID0g aW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsKLQllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVs X3BvcnRfdG9fdGMoZGV2X3ByaXYsIHBvcnQpOwotCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywg aXNfdGJ0OwotCXUzMiBkcHNwOwotCi0JLyoKLQkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdh Y3kgcG9ydCBIUEQsIGJ1dCBWQlQgZGlkbid0IG1hcmsgdGhlIHBvcnQgYXMKLQkgKiBsZWdhY3ku IFRyZWF0IHRoZSBwb3J0IGFzIGxlZ2FjeSBmcm9tIG5vdyBvbi4KLQkgKi8KLQlpZiAoIWludGVs X2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCAmJgotCSAgICBJOTE1X1JFQUQoU0RFSVNSKSAmIFNE RV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KSkgewotCQlEUk1fRVJST1IoIlZCVCBpbmNvcnJlY3Rs eSBjbGFpbXMgcG9ydCAlYyBpcyBub3QgVHlwZUMgbGVnYWN5XG4iLAotCQkJICBwb3J0X25hbWUo cG9ydCkpOwotCQlpbnRlbF9kaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQgPSB0cnVlOwotCX0KLQlp c19sZWdhY3kgPSBpbnRlbF9kaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQ7Ci0KLQkvKgotCSAqIFRo ZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBJU1IgYml0cyBmb3IgZGV0ZWN0 aW5nCi0JICogYmV0d2VlbiBUQyBhbmQgVEJULiBXZSBzaG91bGQgdXNlIERGTEVYRFBTUC4KLQkg Ki8KLQlkcHNwID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKTsKLQlpc190eXBlYyA9IGRw c3AgJiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpOwotCWlzX3RidCA9IGRwc3AgJiBUQ19MSVZF X1NUQVRFX1RCVCh0Y19wb3J0KTsKLQotCWlmICghaXNfbGVnYWN5ICYmICFpc190eXBlYyAmJiAh aXNfdGJ0KSB7Ci0JCWljbF90Y19waHlfZGlzY29ubmVjdChkZXZfcHJpdiwgaW50ZWxfZGlnX3Bv cnQpOwotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShk ZXZfcHJpdiwgaW50ZWxfZGlnX3BvcnQsIGlzX2xlZ2FjeSwgaXNfdHlwZWMsCi0JCQkJaXNfdGJ0 KTsKLQotCWlmICghaWNsX3RjX3BoeV9jb25uZWN0KGRldl9wcml2LCBpbnRlbF9kaWdfcG9ydCkp Ci0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgYm9vbCBpY2xf ZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJh c2UuZGV2KTsKQEAgLTU0MjksNyArNTIwOCw3IEBAIHN0YXRpYyBib29sIGljbF9kaWdpdGFsX3Bv cnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogCWlmIChpbnRlbF9w b3J0X2lzX2NvbWJvcGh5KGRldl9wcml2LCBlbmNvZGVyLT5wb3J0KSkKIAkJcmV0dXJuIGljbF9j b21ib19wb3J0X2Nvbm5lY3RlZChkZXZfcHJpdiwgZGlnX3BvcnQpOwogCWVsc2UgaWYgKGludGVs X3BvcnRfaXNfdGMoZGV2X3ByaXYsIGVuY29kZXItPnBvcnQpKQotCQlyZXR1cm4gaWNsX3RjX3Bv cnRfY29ubmVjdGVkKGRldl9wcml2LCBkaWdfcG9ydCk7CisJCXJldHVybiBpbnRlbF90Y19wb3J0 X2Nvbm5lY3RlZChkaWdfcG9ydCk7CiAJZWxzZQogCQlNSVNTSU5HX0NBU0UoZW5jb2Rlci0+aHBk X3Bpbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaAppbmRleCBkYTcw YjFhNDFjODMuLjY1N2JiYjFmNWVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHAuaApAQCAtMTEyLDggKzExMiw2IEBAIGJvb2wgaW50ZWxfZHBfZ2V0X2NvbG9yaW1ldHJ5 X3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIGludCBpbnRlbF9kcF9saW5rX3Jl cXVpcmVkKGludCBwaXhlbF9jbG9jaywgaW50IGJwcCk7CiBpbnQgaW50ZWxfZHBfbWF4X2RhdGFf cmF0ZShpbnQgbWF4X2xpbmtfY2xvY2ssIGludCBtYXhfbGFuZXMpOwogYm9vbCBpbnRlbF9kaWdp dGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsKLXZvaWQg aWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KTsKIAogc3RhdGljIGlu bGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfZHBfdW51c2VkX2xhbmVfbWFzayhpbnQgbGFuZV9jb3Vu dCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRmYTllYTY5NWQ1MQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYwpAQCAtMCwwICsxLDIz MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImludGVsX2Rpc3BsYXku aCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX3RjLmgiCisKK3N0YXRp YyBjb25zdCBjaGFyICp0Y190eXBlX25hbWUoZW51bSB0Y19wb3J0X3R5cGUgdHlwZSkKK3sKKwlz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10gPSB7CisJCVtUQ19QT1JUX1VOS05PV05d ID0gInVua25vd24iLAorCQlbVENfUE9SVF9MRUdBQ1ldID0gImxlZ2FjeSIsCisJCVtUQ19QT1JU X1RZUEVDXSA9ICJ0eXBlYyIsCisJCVtUQ19QT1JUX1RCVF0gPSAidGJ0IiwKKwl9OworCisJaWYg KFdBUk5fT04odHlwZSA+PSBBUlJBWV9TSVpFKG5hbWVzKSkpCisJCXR5cGUgPSBUQ19QT1JUX1VO S05PV047CisKKwlyZXR1cm4gbmFtZXNbdHlwZV07Cit9CisKK2ludCBpbnRlbF90Y19wb3J0X2Zp YV9tYXhfbGFuZV9jb3VudChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5i YXNlLmJhc2UuZGV2KTsKKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMo ZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVm OworCXUzMiBsYW5lX2luZm87CisKKwlpZiAodGNfcG9ydCA9PSBQT1JUX1RDX05PTkUgfHwgZGln X3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9UWVBFQykKKwkJcmV0dXJuIDQ7CisKKwlsYW5lX2lu Zm8gPSAwOworCXdpdGhfaW50ZWxfZGlzcGxheV9wb3dlcihkZXZfcHJpdiwgUE9XRVJfRE9NQUlO X0RJU1BMQVlfQ09SRSwgd2FrZXJlZikKKwkJbGFuZV9pbmZvID0gKEk5MTVfUkVBRChQT1JUX1RY X0RGTEVYRFBTUCkgJgorCQkJICAgICBEUF9MQU5FX0FTU0lHTk1FTlRfTUFTSyh0Y19wb3J0KSkg Pj4KKwkJCQlEUF9MQU5FX0FTU0lHTk1FTlRfU0hJRlQodGNfcG9ydCk7CisKKwlzd2l0Y2ggKGxh bmVfaW5mbykgeworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShsYW5lX2luZm8pOworCWNhc2Ug MToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJcmV0dXJuIDE7CisJY2FzZSAzOgor CWNhc2UgMTI6CisJCXJldHVybiAyOworCWNhc2UgMTU6CisJCXJldHVybiA0OworCX0KK30KKwor LyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgQ29u bmVjdCBGbG93IGRlc2NyaWJlZCBieSBvdXIKKyAqIHNwZWNpZmljYXRpb24sIEdlbjExIFR5cGVD IFByb2dyYW1taW5nIGNoYXB0ZXIuIFRoZSByZXN0IG9mIHRoZSBmbG93IChyZWFkaW5nCisgKiBs YW5lcywgRURJRCwgZXRjKSBpcyBkb25lIGFzIG5lZWRlZCBpbiB0aGUgdHlwaWNhbCBwbGFjZXMu CisgKgorICogVW5saWtlIHRoZSBvdGhlciBwb3J0cywgdHlwZS1DIHBvcnRzIGFyZSBub3QgYXZh aWxhYmxlIHRvIHVzZSBhcyBzb29uIGFzIHdlCisgKiBnZXQgYSBob3RwbHVnLiBUaGUgdHlwZS1D IFBIWXMgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGNvbnRyb2xsZXJzOgorICogZGlz cGxheSwgVVNCLCBldGMuIEFzIGEgcmVzdWx0LCBoYW5kc2hha2luZyB0aHJvdWdoIEZJQSBpcyBy ZXF1aXJlZCBhcm91bmQKKyAqIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgdG8gY2xlYW5seSB0cmFu c2ZlciBvd25lcnNoaXAgd2l0aCB0aGUgY29udHJvbGxlciBhbmQKKyAqIHNldCB0aGUgdHlwZS1D IHBvd2VyIHN0YXRlLgorICoKKyAqIFdlIGNvdWxkIG9wdCB0byBvbmx5IGRvIHRoZSBjb25uZWN0 IGZsb3cgd2hlbiB3ZSBhY3R1YWxseSB0cnkgdG8gdXNlIHRoZSBBVVgKKyAqIGNoYW5uZWxzIG9y IGRvIGEgbW9kZXNldCwgdGhlbiBpbW1lZGlhdGVseSBydW4gdGhlIGRpc2Nvbm5lY3QgZmxvdyBh ZnRlcgorICogdXNhZ2UsIGJ1dCB0aGVyZSBhcmUgc29tZSBpbXBsaWNhdGlvbnMgb24gdGhpcyBm b3IgYSBkeW5hbWljIGVudmlyb25tZW50OgorICogdGhpbmdzIG1heSBnbyBhd2F5IG9yIGNoYW5n ZSBiZWhpbmQgb3VyIGJhY2tzLiBTbyBmb3Igbm93IG91ciBkcml2ZXIgaXMKKyAqIGFsd2F5cyB0 cnlpbmcgdG8gYWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIGNvbnRyb2xsZXIgYXMgc29vbiBhcyBp dCBnZXRzIGFuCisgKiBpbnRlcnJ1cHQgKG9yIHBvbGxzIHN0YXRlIGFuZCBzZWVzIGEgcG9ydCBp cyBjb25uZWN0ZWQpIGFuZCBvbmx5IGdpdmVzIGl0CisgKiBiYWNrIHdoZW4gaXQgc2VlcyBhIGRp c2Nvbm5lY3QuIEltcGxlbWVudGF0aW9uIG9mIGEgbW9yZSBmaW5lLWdyYWluZWQgbW9kZWwKKyAq IHdpbGwgcmVxdWlyZSBhIGxvdCBvZiBjb29yZGluYXRpb24gd2l0aCB1c2VyIHNwYWNlIGFuZCB0 aG9yb3VnaCB0ZXN0aW5nIGZvcgorICogdGhlIGV4dHJhIHBvc3NpYmxlIGNhc2VzLgorICovCitz dGF0aWMgYm9vbCBpY2xfdGNfcGh5X2Nvbm5lY3Qoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7CisJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRl bF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKKwl1MzIgdmFsOwor CisJaWYgKGRpZ19wb3J0LT50Y190eXBlICE9IFRDX1BPUlRfTEVHQUNZICYmCisJICAgIGRpZ19w b3J0LT50Y190eXBlICE9IFRDX1BPUlRfVFlQRUMpCisJCXJldHVybiB0cnVlOworCisJdmFsID0g STkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFBNUyk7CisJaWYgKCEodmFsICYgRFBfUEhZX01PREVf U1RBVFVTX0NPTVBMRVRFRCh0Y19wb3J0KSkpIHsKKwkJRFJNX0RFQlVHX0tNUygiRFAgUEhZIGZv ciBUQyBwb3J0ICVkIG5vdCByZWFkeVxuIiwgdGNfcG9ydCk7CisJCVdBUk5fT04oZGlnX3BvcnQt PnRjX2xlZ2FjeV9wb3J0KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogVGhpcyBm dW5jdGlvbiBtYXkgYmUgY2FsbGVkIG1hbnkgdGltZXMgaW4gYSByb3cgd2l0aG91dCBhbiBIUEQg ZXZlbnQKKwkgKiBpbiBiZXR3ZWVuLCBzbyB0cnkgdG8gYXZvaWQgdGhlIHdyaXRlIHdoZW4gd2Ug Y2FuLgorCSAqLworCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBDU1NTKTsKKwlpZiAo ISh2YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCkpKSB7CisJCXZhbCB8 PSBEUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7CisJCUk5MTVfV1JJVEUoUE9S VF9UWF9ERkxFWERQQ1NTUywgdmFsKTsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBoYXZlIHRvIHJl LWNoZWNrIHRoZSBsaXZlIHN0YXRlLCBpbiBjYXNlIHRoZSBwb3J0IHJlY2VudGx5CisJICogYmVj YW1lIGRpc2Nvbm5lY3RlZC4gTm90IG5lY2Vzc2FyeSBmb3IgbGVnYWN5IG1vZGUuCisJICovCisJ aWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVFlQRUMgJiYKKwkgICAgIShJOTE1X1JF QUQoUE9SVF9UWF9ERkxFWERQU1ApICYgVENfTElWRV9TVEFURV9UQyh0Y19wb3J0KSkpIHsKKwkJ RFJNX0RFQlVHX0tNUygiVEMgUEhZICVkIHN1ZGRlbiBkaXNjb25uZWN0LlxuIiwgdGNfcG9ydCk7 CisJCWljbF90Y19waHlfZGlzY29ubmVjdChkaWdfcG9ydCk7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlZSB0aGUgY29tbWVudCBhdCB0aGUgY29u bmVjdCBmdW5jdGlvbi4gVGhpcyBpbXBsZW1lbnRzIHRoZSBEaXNjb25uZWN0CisgKiBGbG93Lgor ICovCit2b2lkIGljbF90Y19waHlfZGlzY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICpkaWdfcG9ydCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2KTsKKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGlu dGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOworCisJaWYgKGRp Z19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVU5LTk9XTikKKwkJcmV0dXJuOworCisJLyoKKwkg KiBUQlQgZGlzY29ubmVjdGlvbiBmbG93IGlzIHJlYWQgdGhlIGxpdmUgc3RhdHVzLCB3aGF0IHdh cyBkb25lIGluCisJICogY2FsbGVyLgorCSAqLworCWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBU Q19QT1JUX1RZUEVDIHx8CisJICAgIGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfTEVHQUNZ KSB7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUENTU1Mp OworCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKKwkJSTkx NV9XUklURShQT1JUX1RYX0RGTEVYRFBDU1NTLCB2YWwpOworCX0KKworCURSTV9ERUJVR19LTVMo IlBvcnQgJWMgVEMgdHlwZSAlcyBkaXNjb25uZWN0ZWRcbiIsCisJCSAgICAgIHBvcnRfbmFtZShk aWdfcG9ydC0+YmFzZS5wb3J0KSwKKwkJICAgICAgdGNfdHlwZV9uYW1lKGRpZ19wb3J0LT50Y190 eXBlKSk7CisKKwlkaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsKK30KKworc3Rh dGljIHZvaWQgaWNsX3VwZGF0ZV90Y19wb3J0X3R5cGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdf cG9ydCwKKwkJCQkgICAgYm9vbCBpc19sZWdhY3ksIGJvb2wgaXNfdHlwZWMsIGJvb2wgaXNfdGJ0 KQoreworCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsKKwllbnVt IHRjX3BvcnRfdHlwZSBvbGRfdHlwZSA9IGludGVsX2RpZ19wb3J0LT50Y190eXBlOworCisJV0FS Tl9PTihpc19sZWdhY3kgKyBpc190eXBlYyArIGlzX3RidCAhPSAxKTsKKworCWlmIChpc19sZWdh Y3kpCisJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9MRUdBQ1k7CisJZWxzZSBp ZiAoaXNfdHlwZWMpCisJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9UWVBFQzsK KwllbHNlIGlmIChpc190YnQpCisJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9U QlQ7CisJZWxzZQorCQlyZXR1cm47CisKKwkvKiBUeXBlcyBhcmUgbm90IHN1cHBvc2VkIHRvIGJl IGNoYW5nZWQgYXQgcnVudGltZS4gKi8KKwlXQVJOX09OKG9sZF90eXBlICE9IFRDX1BPUlRfVU5L Tk9XTiAmJgorCQlvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSk7CisKKwlpZiAo b2xkX3R5cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpCisJCURSTV9ERUJVR19LTVMoIlBv cnQgJWMgaGFzIFRDIHR5cGUgJXNcbiIsIHBvcnRfbmFtZShwb3J0KSwKKwkJCSAgICAgIHRjX3R5 cGVfbmFtZShpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSkpOworfQorCisvKgorICogVGhlIHR5cGUt QyBwb3J0cyBhcmUgZGlmZmVyZW50IGJlY2F1c2UgZXZlbiB3aGVuIHRoZXkgYXJlIGNvbm5lY3Rl ZCwgdGhleSBtYXkKKyAqIG5vdCBiZSBhdmFpbGFibGUvdXNhYmxlIGJ5IHRoZSBncmFwaGljcyBk cml2ZXI6IHNlZSB0aGUgY29tbWVudCBvbgorICogaWNsX3RjX3BoeV9jb25uZWN0KCkuIFNvIGlu IG91ciBkcml2ZXIgaW5zdGVhZCBvZiBhZGRpbmcgdGhlIGFkZGl0aW9uYWwKKyAqIGNvbmNlcHQg b2YgInVzYWJsZSIgYW5kIG1ha2UgZXZlcnl0aGluZyBjaGVjayBmb3IgImNvbm5lY3RlZCBhbmQg dXNhYmxlIiB3ZQorICogZGVmaW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVuIGl0IGlzIG5v dCBvbmx5IGNvbm5lY3RlZCwgYnV0IGFsc28gd2hlbiBpdAorICogaXMgdXNhYmxlIGJ5IHRoZSBy ZXN0IG9mIHRoZSBkcml2ZXIuIFRoYXQgbWFpbnRhaW5zIHRoZSBvbGQgYXNzdW1wdGlvbiB0aGF0 CisgKiBjb25uZWN0ZWQgcG9ydHMgYXJlIHVzYWJsZSwgYW5kIGF2b2lkcyBleHBvc2luZyB0byB0 aGUgdXNlcnMgb2JqZWN0cyB0aGV5CisgKiBjYW4ndCByZWFsbHkgdXNlLgorICovCitib29sIGlu dGVsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3Bv cnQtPmJhc2UuYmFzZS5kZXYpOworCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2UucG9y dDsKKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIHBv cnQpOworCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywgaXNfdGJ0OworCXUzMiBkcHNwOworCisJ LyoKKwkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdhY3kgcG9ydCBIUEQsIGJ1dCBWQlQgZGlk bid0IG1hcmsgdGhlIHBvcnQgYXMKKwkgKiBsZWdhY3kuIFRyZWF0IHRoZSBwb3J0IGFzIGxlZ2Fj eSBmcm9tIG5vdyBvbi4KKwkgKi8KKwlpZiAoIWRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCAmJgor CSAgICBJOTE1X1JFQUQoU0RFSVNSKSAmIFNERV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KSkgewor CQlEUk1fRVJST1IoIlZCVCBpbmNvcnJlY3RseSBjbGFpbXMgcG9ydCAlYyBpcyBub3QgVHlwZUMg bGVnYWN5XG4iLAorCQkJICBwb3J0X25hbWUocG9ydCkpOworCQlkaWdfcG9ydC0+dGNfbGVnYWN5 X3BvcnQgPSB0cnVlOworCX0KKwlpc19sZWdhY3kgPSBkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQ7 CisKKwkvKgorCSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBJU1Ig Yml0cyBmb3IgZGV0ZWN0aW5nCisJICogYmV0d2VlbiBUQyBhbmQgVEJULiBXZSBzaG91bGQgdXNl IERGTEVYRFBTUC4KKwkgKi8KKwlkcHNwID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKTsK Kwlpc190eXBlYyA9IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpOworCWlzX3RidCA9 IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RCVCh0Y19wb3J0KTsKKworCWlmICghaXNfbGVnYWN5ICYm ICFpc190eXBlYyAmJiAhaXNfdGJ0KSB7CisJCWljbF90Y19waHlfZGlzY29ubmVjdChkaWdfcG9y dCk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWljbF91cGRhdGVfdGNfcG9ydF90eXBlKGRl dl9wcml2LCBkaWdfcG9ydCwgaXNfbGVnYWN5LCBpc190eXBlYywKKwkJCQlpc190YnQpOworCisJ aWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGlnX3BvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF90Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGM2NTY3NTM5NGU1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5oCkBA IC0wLDAgKzEsMTggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19J TlRFTF9UQ19IX18KKyNkZWZpbmUgX19JTlRFTF9UQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisKK3N0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7CisKK3ZvaWQgaWNsX3RjX3BoeV9k aXNjb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KTsKKworYm9vbCBp bnRlbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCk7CitpbnQgaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291bnQoc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQpOworCisjZW5kaWYgLyogX19JTlRFTF9UQ19IX18gKi8KLS0g CjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4