From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH 02/13] drm/i915: Move ddi shared dpll code to intel_dpll_mgr.c Date: Fri, 26 Feb 2016 15:54:15 +0200 Message-ID: <1456494866-7665-3-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1456494866-7665-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 1BE8A6EAE7 for ; Fri, 26 Feb 2016 13:54:37 +0000 (UTC) In-Reply-To: <1456494866-7665-1-git-send-email-ander.conselvan.de.oliveira@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: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgoKU2lnbmVkLW9mZi1ieTogQW5kZXIgQ29uc2VsdmFuIGRl IE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jICAgICAgfCA0NzIgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3Iu YyB8IDQ3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgIHwgICAxIC0KIDMgZmlsZXMgY2hhbmdlZCwgNDcyIGlu c2VydGlvbnMoKyksIDQ3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCmlu ZGV4IDIxYTliODMuLmViNmI1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RkaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCkBAIC0yNDMw LDIzNSArMjQzMCw2IEBAIHN0YXRpYyB2b2lkIGludGVsX2Rpc2FibGVfZGRpKHN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQogCX0KIH0KIAotc3RhdGljIHZvaWQgaHN3X2RkaV93 cnBsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAg IHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsKQotewotCUk5MTVfV1JJVEUoV1JQTExfQ1RM KHBsbC0+aWQpLCBwbGwtPmNvbmZpZy5od19zdGF0ZS53cnBsbCk7Ci0JUE9TVElOR19SRUFEKFdS UExMX0NUTChwbGwtPmlkKSk7Ci0JdWRlbGF5KDIwKTsKLX0KLQotc3RhdGljIHZvaWQgaHN3X2Rk aV9zcGxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJc3Ry dWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwpCi17Ci0JSTkxNV9XUklURShTUExMX0NUTCwgcGxs LT5jb25maWcuaHdfc3RhdGUuc3BsbCk7Ci0JUE9TVElOR19SRUFEKFNQTExfQ1RMKTsKLQl1ZGVs YXkoMjApOwotfQotCi1zdGF0aWMgdm9pZCBoc3dfZGRpX3dycGxsX2Rpc2FibGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxs ICpwbGwpCi17Ci0JdWludDMyX3QgdmFsOwotCi0JdmFsID0gSTkxNV9SRUFEKFdSUExMX0NUTChw bGwtPmlkKSk7Ci0JSTkxNV9XUklURShXUlBMTF9DVEwocGxsLT5pZCksIHZhbCAmIH5XUlBMTF9Q TExfRU5BQkxFKTsKLQlQT1NUSU5HX1JFQUQoV1JQTExfQ1RMKHBsbC0+aWQpKTsKLX0KLQotc3Rh dGljIHZvaWQgaHN3X2RkaV9zcGxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAotCQkJCSBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKLXsKLQl1aW50MzJf dCB2YWw7Ci0KLQl2YWwgPSBJOTE1X1JFQUQoU1BMTF9DVEwpOwotCUk5MTVfV1JJVEUoU1BMTF9D VEwsIHZhbCAmIH5TUExMX1BMTF9FTkFCTEUpOwotCVBPU1RJTkdfUkVBRChTUExMX0NUTCk7Ci19 Ci0KLXN0YXRpYyBib29sIGhzd19kZGlfd3JwbGxfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxs ICpwbGwsCi0JCQkJICAgICAgIHN0cnVjdCBpbnRlbF9kcGxsX2h3X3N0YXRlICpod19zdGF0ZSkK LXsKLQl1aW50MzJfdCB2YWw7Ci0KLQlpZiAoIWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2Vu YWJsZWQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QTExTKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0J dmFsID0gSTkxNV9SRUFEKFdSUExMX0NUTChwbGwtPmlkKSk7Ci0JaHdfc3RhdGUtPndycGxsID0g dmFsOwotCi0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9Q TExTKTsKLQotCXJldHVybiB2YWwgJiBXUlBMTF9QTExfRU5BQkxFOwotfQotCi1zdGF0aWMgYm9v bCBoc3dfZGRpX3NwbGxfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCwKLQkJCQkgICAg ICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqaHdfc3RhdGUpCi17Ci0JdWludDMyX3QgdmFs OwotCi0JaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBQ T1dFUl9ET01BSU5fUExMUykpCi0JCXJldHVybiBmYWxzZTsKLQotCXZhbCA9IEk5MTVfUkVBRChT UExMX0NUTCk7Ci0JaHdfc3RhdGUtPnNwbGwgPSB2YWw7Ci0KLQlpbnRlbF9kaXNwbGF5X3Bvd2Vy X3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX1BMTFMpOwotCi0JcmV0dXJuIHZhbCAmIFNQTExf UExMX0VOQUJMRTsKLX0KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhzd19kZGlfcGxs X25hbWVzW10gPSB7Ci0JIldSUExMIDEiLAotCSJXUlBMTCAyIiwKLQkiU1BMTCIKLX07Ci0KLXN0 YXRpYyB2b2lkIGhzd19zaGFyZWRfZHBsbHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JaW50IGk7Ci0KLQlkZXZfcHJpdi0+bnVtX3NoYXJlZF9kcGxsID0gMzsK LQotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tp XS5pZCA9IGk7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0ubmFtZSA9IGhzd19kZGlfcGxs X25hbWVzW2ldOwotCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmRpc2FibGUgPSBoc3dfZGRp X3dycGxsX2Rpc2FibGU7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZW5hYmxlID0gaHN3 X2RkaV93cnBsbF9lbmFibGU7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZ2V0X2h3X3N0 YXRlID0KLQkJCWhzd19kZGlfd3JwbGxfZ2V0X2h3X3N0YXRlOwotCX0KLQotCS8qIFNQTEwgaXMg c3BlY2lhbCwgYnV0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFueXdheS4uICovCi0JZGV2X3By aXYtPnNoYXJlZF9kcGxsc1tpXS5pZCA9IGk7Ci0JZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5u YW1lID0gaHN3X2RkaV9wbGxfbmFtZXNbaV07Ci0JZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5k aXNhYmxlID0gaHN3X2RkaV9zcGxsX2Rpc2FibGU7Ci0JZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tp XS5lbmFibGUgPSBoc3dfZGRpX3NwbGxfZW5hYmxlOwotCWRldl9wcml2LT5zaGFyZWRfZHBsbHNb aV0uZ2V0X2h3X3N0YXRlID0gaHN3X2RkaV9zcGxsX2dldF9od19zdGF0ZTsKLQotfQotCi1zdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IHNrbF9kZGlfcGxsX25hbWVzW10gPSB7Ci0JIkRQTEwgMSIs Ci0JIkRQTEwgMiIsCi0JIkRQTEwgMyIsCi19OwotCi1zdHJ1Y3Qgc2tsX2RwbGxfcmVncyB7Ci0J aTkxNV9yZWdfdCBjdGwsIGNmZ2NyMSwgY2ZnY3IyOwotfTsKLQotLyogdGhpcyBhcnJheSBpcyBp bmRleGVkIGJ5IHRoZSAqc2hhcmVkKiBwbGwgaWQgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ts X2RwbGxfcmVncyBza2xfZHBsbF9yZWdzWzNdID0gewotCXsKLQkJLyogRFBMTCAxICovCi0JCS5j dGwgPSBMQ1BMTDJfQ1RMLAotCQkuY2ZnY3IxID0gRFBMTF9DRkdDUjEoU0tMX0RQTEwxKSwKLQkJ LmNmZ2NyMiA9IERQTExfQ0ZHQ1IyKFNLTF9EUExMMSksCi0JfSwKLQl7Ci0JCS8qIERQTEwgMiAq LwotCQkuY3RsID0gV1JQTExfQ1RMKDApLAotCQkuY2ZnY3IxID0gRFBMTF9DRkdDUjEoU0tMX0RQ TEwyKSwKLQkJLmNmZ2NyMiA9IERQTExfQ0ZHQ1IyKFNLTF9EUExMMiksCi0JfSwKLQl7Ci0JCS8q IERQTEwgMyAqLwotCQkuY3RsID0gV1JQTExfQ1RMKDEpLAotCQkuY2ZnY3IxID0gRFBMTF9DRkdD UjEoU0tMX0RQTEwzKSwKLQkJLmNmZ2NyMiA9IERQTExfQ0ZHQ1IyKFNLTF9EUExMMyksCi0JfSwK LX07Ci0KLXN0YXRpYyB2b2lkIHNrbF9kZGlfcGxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwp Ci17Ci0JdWludDMyX3QgdmFsOwotCXVuc2lnbmVkIGludCBkcGxsOwotCWNvbnN0IHN0cnVjdCBz a2xfZHBsbF9yZWdzICpyZWdzID0gc2tsX2RwbGxfcmVnczsKLQotCS8qIERQTEwwIGlzIG5vdCBw YXJ0IG9mIHRoZSBzaGFyZWQgRFBMTHMsIHNvIHBsbC0+aWQgaXMgMCBmb3IgRFBMTDEgKi8KLQlk cGxsID0gcGxsLT5pZCArIDE7Ci0KLQl2YWwgPSBJOTE1X1JFQUQoRFBMTF9DVFJMMSk7Ci0KLQl2 YWwgJj0gfihEUExMX0NUUkwxX0hETUlfTU9ERShkcGxsKSB8IERQTExfQ1RSTDFfU1NDKGRwbGwp IHwKLQkJIERQTExfQ1RSTDFfTElOS19SQVRFX01BU0soZHBsbCkpOwotCXZhbCB8PSBwbGwtPmNv bmZpZy5od19zdGF0ZS5jdHJsMSA8PCAoZHBsbCAqIDYpOwotCi0JSTkxNV9XUklURShEUExMX0NU UkwxLCB2YWwpOwotCVBPU1RJTkdfUkVBRChEUExMX0NUUkwxKTsKLQotCUk5MTVfV1JJVEUocmVn c1twbGwtPmlkXS5jZmdjcjEsIHBsbC0+Y29uZmlnLmh3X3N0YXRlLmNmZ2NyMSk7Ci0JSTkxNV9X UklURShyZWdzW3BsbC0+aWRdLmNmZ2NyMiwgcGxsLT5jb25maWcuaHdfc3RhdGUuY2ZnY3IyKTsK LQlQT1NUSU5HX1JFQUQocmVnc1twbGwtPmlkXS5jZmdjcjEpOwotCVBPU1RJTkdfUkVBRChyZWdz W3BsbC0+aWRdLmNmZ2NyMik7Ci0KLQkvKiB0aGUgZW5hYmxlIGJpdCBpcyBhbHdheXMgYml0IDMx ICovCi0JSTkxNV9XUklURShyZWdzW3BsbC0+aWRdLmN0bCwKLQkJICAgSTkxNV9SRUFEKHJlZ3Nb cGxsLT5pZF0uY3RsKSB8IExDUExMX1BMTF9FTkFCTEUpOwotCi0JaWYgKHdhaXRfZm9yKEk5MTVf UkVBRChEUExMX1NUQVRVUykgJiBEUExMX0xPQ0soZHBsbCksIDUpKQotCQlEUk1fRVJST1IoIkRQ TEwgJWQgbm90IGxvY2tlZFxuIiwgZHBsbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNrbF9kZGlfcGxs X2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCXN0cnVjdCBp bnRlbF9zaGFyZWRfZHBsbCAqcGxsKQotewotCWNvbnN0IHN0cnVjdCBza2xfZHBsbF9yZWdzICpy ZWdzID0gc2tsX2RwbGxfcmVnczsKLQotCS8qIHRoZSBlbmFibGUgYml0IGlzIGFsd2F5cyBiaXQg MzEgKi8KLQlJOTE1X1dSSVRFKHJlZ3NbcGxsLT5pZF0uY3RsLAotCQkgICBJOTE1X1JFQUQocmVn c1twbGwtPmlkXS5jdGwpICYgfkxDUExMX1BMTF9FTkFCTEUpOwotCVBPU1RJTkdfUkVBRChyZWdz W3BsbC0+aWRdLmN0bCk7Ci19Ci0KLXN0YXRpYyBib29sIHNrbF9kZGlfcGxsX2dldF9od19zdGF0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaW50 ZWxfc2hhcmVkX2RwbGwgKnBsbCwKLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9kcGxsX2h3X3N0YXRl ICpod19zdGF0ZSkKLXsKLQl1aW50MzJfdCB2YWw7Ci0JdW5zaWduZWQgaW50IGRwbGw7Ci0JY29u c3Qgc3RydWN0IHNrbF9kcGxsX3JlZ3MgKnJlZ3MgPSBza2xfZHBsbF9yZWdzOwotCWJvb2wgcmV0 OwotCi0JaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBQ T1dFUl9ET01BSU5fUExMUykpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldCA9IGZhbHNlOwotCi0J LyogRFBMTDAgaXMgbm90IHBhcnQgb2YgdGhlIHNoYXJlZCBEUExMcywgc28gcGxsLT5pZCBpcyAw IGZvciBEUExMMSAqLwotCWRwbGwgPSBwbGwtPmlkICsgMTsKLQotCXZhbCA9IEk5MTVfUkVBRChy ZWdzW3BsbC0+aWRdLmN0bCk7Ci0JaWYgKCEodmFsICYgTENQTExfUExMX0VOQUJMRSkpCi0JCWdv dG8gb3V0OwotCi0JdmFsID0gSTkxNV9SRUFEKERQTExfQ1RSTDEpOwotCWh3X3N0YXRlLT5jdHJs MSA9ICh2YWwgPj4gKGRwbGwgKiA2KSkgJiAweDNmOwotCi0JLyogYXZvaWQgcmVhZGluZyBiYWNr IHN0YWxlIHZhbHVlcyBpZiBIRE1JIG1vZGUgaXMgbm90IGVuYWJsZWQgKi8KLQlpZiAodmFsICYg RFBMTF9DVFJMMV9IRE1JX01PREUoZHBsbCkpIHsKLQkJaHdfc3RhdGUtPmNmZ2NyMSA9IEk5MTVf UkVBRChyZWdzW3BsbC0+aWRdLmNmZ2NyMSk7Ci0JCWh3X3N0YXRlLT5jZmdjcjIgPSBJOTE1X1JF QUQocmVnc1twbGwtPmlkXS5jZmdjcjIpOwotCX0KLQlyZXQgPSB0cnVlOwotCi1vdXQ6Ci0JaW50 ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QTExTKTsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNrbF9zaGFyZWRfZHBsbHNfaW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50IGk7Ci0KLQlkZXZfcHJpdi0+bnVt X3NoYXJlZF9kcGxsID0gMzsKLQotCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX3NoYXJl ZF9kcGxsOyBpKyspIHsKLQkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5pZCA9IGk7Ci0JCWRl dl9wcml2LT5zaGFyZWRfZHBsbHNbaV0ubmFtZSA9IHNrbF9kZGlfcGxsX25hbWVzW2ldOwotCQlk ZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmRpc2FibGUgPSBza2xfZGRpX3BsbF9kaXNhYmxlOwot CQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmVuYWJsZSA9IHNrbF9kZGlfcGxsX2VuYWJsZTsK LQkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5nZXRfaHdfc3RhdGUgPQotCQkJc2tsX2RkaV9w bGxfZ2V0X2h3X3N0YXRlOwotCX0KLX0KLQogc3RhdGljIHZvaWQgYnJveHRvbl9waHlfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgIGVudW0gZHBpb19waHkg cGh5KQogewpAQCAtMjc4MywyNDkgKzI1NTQsNiBAQCB2b2lkIGJyb3h0b25fZGRpX3BoeV91bmlu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlJOTE1X1dSSVRFKEJYVF9QX0NSX0dUX0RJU1Bf UFdST04sIDApOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ4dF9kZGlfcGxsX25h bWVzW10gPSB7Ci0JIlBPUlQgUExMIEEiLAotCSJQT1JUIFBMTCBCIiwKLQkiUE9SVCBQTEwgQyIs Ci19OwotCi1zdGF0aWMgdm9pZCBieHRfZGRpX3BsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAotCQkJCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsKQotewot CXVpbnQzMl90IHRlbXA7Ci0JZW51bSBwb3J0IHBvcnQgPSAoZW51bSBwb3J0KXBsbC0+aWQ7CS8q IDE6MSBwb3J0LT5QTEwgbWFwcGluZyAqLwotCi0JdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9Q TExfRU5BQkxFKHBvcnQpKTsKLQl0ZW1wICY9IH5QT1JUX1BMTF9SRUZfU0VMOwotCS8qIE5vbi1T U0MgcmVmZXJlbmNlICovCi0JSTkxNV9XUklURShCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpLCB0 ZW1wKTsKLQotCS8qIERpc2FibGUgMTAgYml0IGNsb2NrICovCi0JdGVtcCA9IEk5MTVfUkVBRChC WFRfUE9SVF9QTExfRUJCXzQocG9ydCkpOwotCXRlbXAgJj0gflBPUlRfUExMXzEwQklUX0NMS19F TkFCTEU7Ci0JSTkxNV9XUklURShCWFRfUE9SVF9QTExfRUJCXzQocG9ydCksIHRlbXApOwotCi0J LyogV3JpdGUgUDEgJiBQMiAqLwotCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMX0VCQl8w KHBvcnQpKTsKLQl0ZW1wICY9IH4oUE9SVF9QTExfUDFfTUFTSyB8IFBPUlRfUExMX1AyX01BU0sp OwotCXRlbXAgfD0gcGxsLT5jb25maWcuaHdfc3RhdGUuZWJiMDsKLQlJOTE1X1dSSVRFKEJYVF9Q T1JUX1BMTF9FQkJfMChwb3J0KSwgdGVtcCk7Ci0KLQkvKiBXcml0ZSBNMiBpbnRlZ2VyICovCi0J dGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgMCkpOwotCXRlbXAgJj0gflBPUlRf UExMX00yX01BU0s7Ci0JdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5wbGwwOwotCUk5MTVf V1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDApLCB0ZW1wKTsKLQotCS8qIFdyaXRlIE4gKi8KLQl0 ZW1wID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCAxKSk7Ci0JdGVtcCAmPSB+UE9SVF9Q TExfTl9NQVNLOwotCXRlbXAgfD0gcGxsLT5jb25maWcuaHdfc3RhdGUucGxsMTsKLQlJOTE1X1dS SVRFKEJYVF9QT1JUX1BMTChwb3J0LCAxKSwgdGVtcCk7Ci0KLQkvKiBXcml0ZSBNMiBmcmFjdGlv biAqLwotCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDIpKTsKLQl0ZW1wICY9 IH5QT1JUX1BMTF9NMl9GUkFDX01BU0s7Ci0JdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5w bGwyOwotCUk5MTVfV1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDIpLCB0ZW1wKTsKLQotCS8qIFdy aXRlIE0yIGZyYWN0aW9uIGVuYWJsZSAqLwotCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExM KHBvcnQsIDMpKTsKLQl0ZW1wICY9IH5QT1JUX1BMTF9NMl9GUkFDX0VOQUJMRTsKLQl0ZW1wIHw9 IHBsbC0+Y29uZmlnLmh3X3N0YXRlLnBsbDM7Ci0JSTkxNV9XUklURShCWFRfUE9SVF9QTEwocG9y dCwgMyksIHRlbXApOwotCi0JLyogV3JpdGUgY29lZmYgKi8KLQl0ZW1wID0gSTkxNV9SRUFEKEJY VF9QT1JUX1BMTChwb3J0LCA2KSk7Ci0JdGVtcCAmPSB+UE9SVF9QTExfUFJPUF9DT0VGRl9NQVNL OwotCXRlbXAgJj0gflBPUlRfUExMX0lOVF9DT0VGRl9NQVNLOwotCXRlbXAgJj0gflBPUlRfUExM X0dBSU5fQ1RMX01BU0s7Ci0JdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5wbGw2OwotCUk5 MTVfV1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDYpLCB0ZW1wKTsKLQotCS8qIFdyaXRlIGNhbGli cmF0aW9uIHZhbCAqLwotCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDgpKTsK LQl0ZW1wICY9IH5QT1JUX1BMTF9UQVJHRVRfQ05UX01BU0s7Ci0JdGVtcCB8PSBwbGwtPmNvbmZp Zy5od19zdGF0ZS5wbGw4OwotCUk5MTVfV1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDgpLCB0ZW1w KTsKLQotCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDkpKTsKLQl0ZW1wICY9 IH5QT1JUX1BMTF9MT0NLX1RIUkVTSE9MRF9NQVNLOwotCXRlbXAgfD0gcGxsLT5jb25maWcuaHdf c3RhdGUucGxsOTsKLQlJOTE1X1dSSVRFKEJYVF9QT1JUX1BMTChwb3J0LCA5KSwgdGVtcCk7Ci0K LQl0ZW1wID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCAxMCkpOwotCXRlbXAgJj0gflBP UlRfUExMX0RDT19BTVBfT1ZSX0VOX0g7Ci0JdGVtcCAmPSB+UE9SVF9QTExfRENPX0FNUF9NQVNL OwotCXRlbXAgfD0gcGxsLT5jb25maWcuaHdfc3RhdGUucGxsMTA7Ci0JSTkxNV9XUklURShCWFRf UE9SVF9QTEwocG9ydCwgMTApLCB0ZW1wKTsKLQotCS8qIFJlY2FsaWJyYXRlIHdpdGggbmV3IHNl dHRpbmdzICovCi0JdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTExfRUJCXzQocG9ydCkpOwot CXRlbXAgfD0gUE9SVF9QTExfUkVDQUxJQlJBVEU7Ci0JSTkxNV9XUklURShCWFRfUE9SVF9QTExf RUJCXzQocG9ydCksIHRlbXApOwotCXRlbXAgJj0gflBPUlRfUExMXzEwQklUX0NMS19FTkFCTEU7 Ci0JdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5lYmI0OwotCUk5MTVfV1JJVEUoQlhUX1BP UlRfUExMX0VCQl80KHBvcnQpLCB0ZW1wKTsKLQotCS8qIEVuYWJsZSBQTEwgKi8KLQl0ZW1wID0g STkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9ydCkpOwotCXRlbXAgfD0gUE9SVF9QTExf RU5BQkxFOwotCUk5MTVfV1JJVEUoQlhUX1BPUlRfUExMX0VOQUJMRShwb3J0KSwgdGVtcCk7Ci0J UE9TVElOR19SRUFEKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9ydCkpOwotCi0JaWYgKHdhaXRfZm9y X2F0b21pY191cygoSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9ydCkpICYKLQkJCVBP UlRfUExMX0xPQ0spLCAyMDApKQotCQlEUk1fRVJST1IoIlBMTCAlZCBub3QgbG9ja2VkXG4iLCBw b3J0KTsKLQotCS8qCi0JICogV2hpbGUgd2Ugd3JpdGUgdG8gdGhlIGdyb3VwIHJlZ2lzdGVyIHRv IHByb2dyYW0gYWxsIGxhbmVzIGF0IG9uY2Ugd2UKLQkgKiBjYW4gcmVhZCBvbmx5IGxhbmUgcmVn aXN0ZXJzIGFuZCB3ZSBwaWNrIGxhbmVzIDAvMSBmb3IgdGhhdC4KLQkgKi8KLQl0ZW1wID0gSTkx NV9SRUFEKEJYVF9QT1JUX1BDU19EVzEyX0xOMDEocG9ydCkpOwotCXRlbXAgJj0gfkxBTkVfU1RB R0dFUl9NQVNLOwotCXRlbXAgJj0gfkxBTkVTVEFHR0VSX1NUUkFQX09WUkQ7Ci0JdGVtcCB8PSBw bGwtPmNvbmZpZy5od19zdGF0ZS5wY3NkdzEyOwotCUk5MTVfV1JJVEUoQlhUX1BPUlRfUENTX0RX MTJfR1JQKHBvcnQpLCB0ZW1wKTsKLX0KLQotc3RhdGljIHZvaWQgYnh0X2RkaV9wbGxfZGlzYWJs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCXN0cnVjdCBpbnRlbF9z aGFyZWRfZHBsbCAqcGxsKQotewotCWVudW0gcG9ydCBwb3J0ID0gKGVudW0gcG9ydClwbGwtPmlk OwkvKiAxOjEgcG9ydC0+UExMIG1hcHBpbmcgKi8KLQl1aW50MzJfdCB0ZW1wOwotCi0JdGVtcCA9 IEk5MTVfUkVBRChCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpKTsKLQl0ZW1wICY9IH5QT1JUX1BM TF9FTkFCTEU7Ci0JSTkxNV9XUklURShCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpLCB0ZW1wKTsK LQlQT1NUSU5HX1JFQUQoQlhUX1BPUlRfUExMX0VOQUJMRShwb3J0KSk7Ci19Ci0KLXN0YXRpYyBi b29sIGJ4dF9kZGlfcGxsX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCQkJCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsLAotCQkJCQlzdHJ1Y3Qg aW50ZWxfZHBsbF9od19zdGF0ZSAqaHdfc3RhdGUpCi17Ci0JZW51bSBwb3J0IHBvcnQgPSAoZW51 bSBwb3J0KXBsbC0+aWQ7CS8qIDE6MSBwb3J0LT5QTEwgbWFwcGluZyAqLwotCXVpbnQzMl90IHZh bDsKLQlib29sIHJldDsKLQotCWlmICghaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxl ZChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX1BMTFMpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQg PSBmYWxzZTsKLQotCXZhbCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpKTsK LQlpZiAoISh2YWwgJiBQT1JUX1BMTF9FTkFCTEUpKQotCQlnb3RvIG91dDsKLQotCWh3X3N0YXRl LT5lYmIwID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FQkJfMChwb3J0KSk7Ci0JaHdfc3RhdGUt PmViYjAgJj0gUE9SVF9QTExfUDFfTUFTSyB8IFBPUlRfUExMX1AyX01BU0s7Ci0KLQlod19zdGF0 ZS0+ZWJiNCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTExfRUJCXzQocG9ydCkpOwotCWh3X3N0YXRl LT5lYmI0ICY9IFBPUlRfUExMXzEwQklUX0NMS19FTkFCTEU7Ci0KLQlod19zdGF0ZS0+cGxsMCA9 IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgMCkpOwotCWh3X3N0YXRlLT5wbGwwICY9IFBP UlRfUExMX00yX01BU0s7Ci0KLQlod19zdGF0ZS0+cGxsMSA9IEk5MTVfUkVBRChCWFRfUE9SVF9Q TEwocG9ydCwgMSkpOwotCWh3X3N0YXRlLT5wbGwxICY9IFBPUlRfUExMX05fTUFTSzsKLQotCWh3 X3N0YXRlLT5wbGwyID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCAyKSk7Ci0JaHdfc3Rh dGUtPnBsbDIgJj0gUE9SVF9QTExfTTJfRlJBQ19NQVNLOwotCi0JaHdfc3RhdGUtPnBsbDMgPSBJ OTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDMpKTsKLQlod19zdGF0ZS0+cGxsMyAmPSBQT1JU X1BMTF9NMl9GUkFDX0VOQUJMRTsKLQotCWh3X3N0YXRlLT5wbGw2ID0gSTkxNV9SRUFEKEJYVF9Q T1JUX1BMTChwb3J0LCA2KSk7Ci0JaHdfc3RhdGUtPnBsbDYgJj0gUE9SVF9QTExfUFJPUF9DT0VG Rl9NQVNLIHwKLQkJCSAgUE9SVF9QTExfSU5UX0NPRUZGX01BU0sgfAotCQkJICBQT1JUX1BMTF9H QUlOX0NUTF9NQVNLOwotCi0JaHdfc3RhdGUtPnBsbDggPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExM KHBvcnQsIDgpKTsKLQlod19zdGF0ZS0+cGxsOCAmPSBQT1JUX1BMTF9UQVJHRVRfQ05UX01BU0s7 Ci0KLQlod19zdGF0ZS0+cGxsOSA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgOSkpOwot CWh3X3N0YXRlLT5wbGw5ICY9IFBPUlRfUExMX0xPQ0tfVEhSRVNIT0xEX01BU0s7Ci0KLQlod19z dGF0ZS0+cGxsMTAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDEwKSk7Ci0JaHdfc3Rh dGUtPnBsbDEwICY9IFBPUlRfUExMX0RDT19BTVBfT1ZSX0VOX0ggfAotCQkJICAgUE9SVF9QTExf RENPX0FNUF9NQVNLOwotCi0JLyoKLQkgKiBXaGlsZSB3ZSB3cml0ZSB0byB0aGUgZ3JvdXAgcmVn aXN0ZXIgdG8gcHJvZ3JhbSBhbGwgbGFuZXMgYXQgb25jZSB3ZQotCSAqIGNhbiByZWFkIG9ubHkg bGFuZSByZWdpc3RlcnMuIFdlIGNvbmZpZ3VyZSBhbGwgbGFuZXMgdGhlIHNhbWUgd2F5LCBzbwot CSAqIGhlcmUganVzdCByZWFkIG91dCBsYW5lcyAwLzEgYW5kIG91dHB1dCBhIG5vdGUgaWYgbGFu ZXMgMi8zIGRpZmZlci4KLQkgKi8KLQlod19zdGF0ZS0+cGNzZHcxMiA9IEk5MTVfUkVBRChCWFRf UE9SVF9QQ1NfRFcxMl9MTjAxKHBvcnQpKTsKLQlpZiAoSTkxNV9SRUFEKEJYVF9QT1JUX1BDU19E VzEyX0xOMjMocG9ydCkpICE9IGh3X3N0YXRlLT5wY3NkdzEyKQotCQlEUk1fREVCVUdfRFJJVkVS KCJsYW5lIHN0YWdnZXIgY29uZmlnIGRpZmZlcmVudCBmb3IgbGFuZSAwMSAoJTA4eCkgYW5kIDIz ICglMDh4KVxuIiwKLQkJCQkgaHdfc3RhdGUtPnBjc2R3MTIsCi0JCQkJIEk5MTVfUkVBRChCWFRf UE9SVF9QQ1NfRFcxMl9MTjIzKHBvcnQpKSk7Ci0JaHdfc3RhdGUtPnBjc2R3MTIgJj0gTEFORV9T VEFHR0VSX01BU0sgfCBMQU5FU1RBR0dFUl9TVFJBUF9PVlJEOwotCi0JcmV0ID0gdHJ1ZTsKLQot b3V0OgotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExM Uyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBieHRfc2hhcmVkX2RwbGxzX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludCBpOwotCi0JZGV2 X3ByaXYtPm51bV9zaGFyZWRfZHBsbCA9IDM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYt Pm51bV9zaGFyZWRfZHBsbDsgaSsrKSB7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uaWQg PSBpOwotCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLm5hbWUgPSBieHRfZGRpX3BsbF9uYW1l c1tpXTsKLQkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5kaXNhYmxlID0gYnh0X2RkaV9wbGxf ZGlzYWJsZTsKLQkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5lbmFibGUgPSBieHRfZGRpX3Bs bF9lbmFibGU7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZ2V0X2h3X3N0YXRlID0KLQkJ CWJ4dF9kZGlfcGxsX2dldF9od19zdGF0ZTsKLQl9Ci19Ci0KLXZvaWQgaW50ZWxfZGRpX3BsbF9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCB2YWwgPSBJOTE1X1JFQUQo TENQTExfQ1RMKTsKLQotCWlmIChJU19TS1lMQUtFKGRldikgfHwgSVNfS0FCWUxBS0UoZGV2KSkK LQkJc2tsX3NoYXJlZF9kcGxsc19pbml0KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19CUk9YVE9O KGRldikpCi0JCWJ4dF9zaGFyZWRfZHBsbHNfaW5pdChkZXZfcHJpdik7Ci0JZWxzZQotCQloc3df c2hhcmVkX2RwbGxzX2luaXQoZGV2X3ByaXYpOwotCi0JaWYgKElTX1NLWUxBS0UoZGV2KSB8fCBJ U19LQUJZTEFLRShkZXYpKSB7Ci0JCWludCBjZGNsa19mcmVxOwotCi0JCWNkY2xrX2ZyZXEgPSBk ZXZfcHJpdi0+ZGlzcGxheS5nZXRfZGlzcGxheV9jbG9ja19zcGVlZChkZXYpOwotCQlkZXZfcHJp di0+c2tsX2Jvb3RfY2RjbGsgPSBjZGNsa19mcmVxOwotCQlpZiAoc2tsX3Nhbml0aXplX2NkY2xr KGRldl9wcml2KSkKLQkJCURSTV9ERUJVR19LTVMoIlNhbml0aXplZCBjZGNsayBwcm9ncmFtbWVk IGJ5IHByZS1vc1xuIik7Ci0JCWlmICghKEk5MTVfUkVBRChMQ1BMTDFfQ1RMKSAmIExDUExMX1BM TF9FTkFCTEUpKQotCQkJRFJNX0VSUk9SKCJMQ1BMTDEgaXMgZGlzYWJsZWRcbiIpOwotCX0gZWxz ZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7Ci0JCWJyb3h0b25faW5pdF9jZGNsayhkZXYpOwotCQli cm94dG9uX2RkaV9waHlfaW5pdChkZXYpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRoZSBMQ1BM TCByZWdpc3RlciBzaG91bGQgYmUgdHVybmVkIG9uIGJ5IHRoZSBCSU9TLiBGb3Igbm93Ci0JCSAq IGxldCdzIGp1c3QgY2hlY2sgaXRzIHN0YXRlIGFuZCBwcmludCBlcnJvcnMgaW4gY2FzZQotCQkg KiBzb21ldGhpbmcgaXMgd3JvbmcuICBEb24ndCBldmVuIHRyeSB0byB0dXJuIGl0IG9uLgotCQkg Ki8KLQotCQlpZiAodmFsICYgTENQTExfQ0RfU09VUkNFX0ZDTEspCi0JCQlEUk1fRVJST1IoIkNE Q0xLIHNvdXJjZSBpcyBub3QgTENQTExcbiIpOwotCi0JCWlmICh2YWwgJiBMQ1BMTF9QTExfRElT QUJMRSkKLQkJCURSTV9FUlJPUigiTENQTEwgaXMgZGlzYWJsZWRcbiIpOwotCX0KLX0KLQogdm9p ZCBpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKIHsKIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwbGxfbWdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcGxsX21nci5jCmlu ZGV4IGQ3ZWJhYzYuLjZiZTBjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwbGxfbWdyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3Iu YwpAQCAtMzUzLDYgKzM1Myw0NzggQEAgc3RhdGljIHZvaWQgaWJ4X3BjaF9kcGxsX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhzd19kZGlfd3JwbGxf ZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBzdHJ1 Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKK3sKKwlJOTE1X1dSSVRFKFdSUExMX0NUTChwbGwt PmlkKSwgcGxsLT5jb25maWcuaHdfc3RhdGUud3JwbGwpOworCVBPU1RJTkdfUkVBRChXUlBMTF9D VEwocGxsLT5pZCkpOworCXVkZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhzd19kZGlfc3Bs bF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCXN0cnVjdCBp bnRlbF9zaGFyZWRfZHBsbCAqcGxsKQoreworCUk5MTVfV1JJVEUoU1BMTF9DVEwsIHBsbC0+Y29u ZmlnLmh3X3N0YXRlLnNwbGwpOworCVBPU1RJTkdfUkVBRChTUExMX0NUTCk7CisJdWRlbGF5KDIw KTsKK30KKworc3RhdGljIHZvaWQgaHN3X2RkaV93cnBsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxs KQoreworCXVpbnQzMl90IHZhbDsKKworCXZhbCA9IEk5MTVfUkVBRChXUlBMTF9DVEwocGxsLT5p ZCkpOworCUk5MTVfV1JJVEUoV1JQTExfQ1RMKHBsbC0+aWQpLCB2YWwgJiB+V1JQTExfUExMX0VO QUJMRSk7CisJUE9TVElOR19SRUFEKFdSUExMX0NUTChwbGwtPmlkKSk7Cit9CisKK3N0YXRpYyB2 b2lkIGhzd19kZGlfc3BsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwpCit7CisJdWludDMyX3QgdmFs OworCisJdmFsID0gSTkxNV9SRUFEKFNQTExfQ1RMKTsKKwlJOTE1X1dSSVRFKFNQTExfQ1RMLCB2 YWwgJiB+U1BMTF9QTExfRU5BQkxFKTsKKwlQT1NUSU5HX1JFQUQoU1BMTF9DVEwpOworfQorCitz dGF0aWMgYm9vbCBoc3dfZGRpX3dycGxsX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxs LAorCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqaHdfc3RhdGUpCit7CisJ dWludDMyX3QgdmFsOworCisJaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVk KGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExMUykpCisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9 IEk5MTVfUkVBRChXUlBMTF9DVEwocGxsLT5pZCkpOworCWh3X3N0YXRlLT53cnBsbCA9IHZhbDsK KworCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExMUyk7 CisKKwlyZXR1cm4gdmFsICYgV1JQTExfUExMX0VOQUJMRTsKK30KKworc3RhdGljIGJvb2wgaHN3 X2RkaV9zcGxsX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJICAgICAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwsCisJCQkJICAgICAgc3Ry dWN0IGludGVsX2RwbGxfaHdfc3RhdGUgKmh3X3N0YXRlKQoreworCXVpbnQzMl90IHZhbDsKKwor CWlmICghaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgUE9XRVJf RE9NQUlOX1BMTFMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwl2YWwgPSBJOTE1X1JFQUQoU1BMTF9D VEwpOworCWh3X3N0YXRlLT5zcGxsID0gdmFsOworCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo ZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QTExTKTsKKworCXJldHVybiB2YWwgJiBTUExMX1BMTF9F TkFCTEU7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoc3dfZGRpX3BsbF9uYW1l c1tdID0geworCSJXUlBMTCAxIiwKKwkiV1JQTEwgMiIsCisJIlNQTEwiCit9OworCitzdGF0aWMg dm9pZCBoc3dfc2hhcmVkX2RwbGxzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQoreworCWludCBpOworCisJZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbCA9IDM7CisKKwlm b3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uaWQg PSBpOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLm5hbWUgPSBoc3dfZGRpX3BsbF9uYW1l c1tpXTsKKwkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5kaXNhYmxlID0gaHN3X2RkaV93cnBs bF9kaXNhYmxlOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmVuYWJsZSA9IGhzd19kZGlf d3JwbGxfZW5hYmxlOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmdldF9od19zdGF0ZSA9 CisJCQloc3dfZGRpX3dycGxsX2dldF9od19zdGF0ZTsKKwl9CisKKwkvKiBTUExMIGlzIHNwZWNp YWwsIGJ1dCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbnl3YXkuLiAqLworCWRldl9wcml2LT5z aGFyZWRfZHBsbHNbaV0uaWQgPSBpOworCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0ubmFtZSA9 IGhzd19kZGlfcGxsX25hbWVzW2ldOworCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZGlzYWJs ZSA9IGhzd19kZGlfc3BsbF9kaXNhYmxlOworCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZW5h YmxlID0gaHN3X2RkaV9zcGxsX2VuYWJsZTsKKwlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmdl dF9od19zdGF0ZSA9IGhzd19kZGlfc3BsbF9nZXRfaHdfc3RhdGU7CisKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKiBjb25zdCBza2xfZGRpX3BsbF9uYW1lc1tdID0geworCSJEUExMIDEiLAorCSJE UExMIDIiLAorCSJEUExMIDMiLAorfTsKKworc3RydWN0IHNrbF9kcGxsX3JlZ3MgeworCWk5MTVf cmVnX3QgY3RsLCBjZmdjcjEsIGNmZ2NyMjsKK307CisKKy8qIHRoaXMgYXJyYXkgaXMgaW5kZXhl ZCBieSB0aGUgKnNoYXJlZCogcGxsIGlkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNrbF9kcGxs X3JlZ3Mgc2tsX2RwbGxfcmVnc1szXSA9IHsKKwl7CisJCS8qIERQTEwgMSAqLworCQkuY3RsID0g TENQTEwyX0NUTCwKKwkJLmNmZ2NyMSA9IERQTExfQ0ZHQ1IxKFNLTF9EUExMMSksCisJCS5jZmdj cjIgPSBEUExMX0NGR0NSMihTS0xfRFBMTDEpLAorCX0sCisJeworCQkvKiBEUExMIDIgKi8KKwkJ LmN0bCA9IFdSUExMX0NUTCgwKSwKKwkJLmNmZ2NyMSA9IERQTExfQ0ZHQ1IxKFNLTF9EUExMMiks CisJCS5jZmdjcjIgPSBEUExMX0NGR0NSMihTS0xfRFBMTDIpLAorCX0sCisJeworCQkvKiBEUExM IDMgKi8KKwkJLmN0bCA9IFdSUExMX0NUTCgxKSwKKwkJLmNmZ2NyMSA9IERQTExfQ0ZHQ1IxKFNL TF9EUExMMyksCisJCS5jZmdjcjIgPSBEUExMX0NGR0NSMihTS0xfRFBMTDMpLAorCX0sCit9Owor CitzdGF0aWMgdm9pZCBza2xfZGRpX3BsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsKQorewor CXVpbnQzMl90IHZhbDsKKwl1bnNpZ25lZCBpbnQgZHBsbDsKKwljb25zdCBzdHJ1Y3Qgc2tsX2Rw bGxfcmVncyAqcmVncyA9IHNrbF9kcGxsX3JlZ3M7CisKKwkvKiBEUExMMCBpcyBub3QgcGFydCBv ZiB0aGUgc2hhcmVkIERQTExzLCBzbyBwbGwtPmlkIGlzIDAgZm9yIERQTEwxICovCisJZHBsbCA9 IHBsbC0+aWQgKyAxOworCisJdmFsID0gSTkxNV9SRUFEKERQTExfQ1RSTDEpOworCisJdmFsICY9 IH4oRFBMTF9DVFJMMV9IRE1JX01PREUoZHBsbCkgfCBEUExMX0NUUkwxX1NTQyhkcGxsKSB8CisJ CSBEUExMX0NUUkwxX0xJTktfUkFURV9NQVNLKGRwbGwpKTsKKwl2YWwgfD0gcGxsLT5jb25maWcu aHdfc3RhdGUuY3RybDEgPDwgKGRwbGwgKiA2KTsKKworCUk5MTVfV1JJVEUoRFBMTF9DVFJMMSwg dmFsKTsKKwlQT1NUSU5HX1JFQUQoRFBMTF9DVFJMMSk7CisKKwlJOTE1X1dSSVRFKHJlZ3NbcGxs LT5pZF0uY2ZnY3IxLCBwbGwtPmNvbmZpZy5od19zdGF0ZS5jZmdjcjEpOworCUk5MTVfV1JJVEUo cmVnc1twbGwtPmlkXS5jZmdjcjIsIHBsbC0+Y29uZmlnLmh3X3N0YXRlLmNmZ2NyMik7CisJUE9T VElOR19SRUFEKHJlZ3NbcGxsLT5pZF0uY2ZnY3IxKTsKKwlQT1NUSU5HX1JFQUQocmVnc1twbGwt PmlkXS5jZmdjcjIpOworCisJLyogdGhlIGVuYWJsZSBiaXQgaXMgYWx3YXlzIGJpdCAzMSAqLwor CUk5MTVfV1JJVEUocmVnc1twbGwtPmlkXS5jdGwsCisJCSAgIEk5MTVfUkVBRChyZWdzW3BsbC0+ aWRdLmN0bCkgfCBMQ1BMTF9QTExfRU5BQkxFKTsKKworCWlmICh3YWl0X2ZvcihJOTE1X1JFQUQo RFBMTF9TVEFUVVMpICYgRFBMTF9MT0NLKGRwbGwpLCA1KSkKKwkJRFJNX0VSUk9SKCJEUExMICVk IG5vdCBsb2NrZWRcbiIsIGRwbGwpOworfQorCitzdGF0aWMgdm9pZCBza2xfZGRpX3BsbF9kaXNh YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3QgaW50ZWxf c2hhcmVkX2RwbGwgKnBsbCkKK3sKKwljb25zdCBzdHJ1Y3Qgc2tsX2RwbGxfcmVncyAqcmVncyA9 IHNrbF9kcGxsX3JlZ3M7CisKKwkvKiB0aGUgZW5hYmxlIGJpdCBpcyBhbHdheXMgYml0IDMxICov CisJSTkxNV9XUklURShyZWdzW3BsbC0+aWRdLmN0bCwKKwkJICAgSTkxNV9SRUFEKHJlZ3NbcGxs LT5pZF0uY3RsKSAmIH5MQ1BMTF9QTExfRU5BQkxFKTsKKwlQT1NUSU5HX1JFQUQocmVnc1twbGwt PmlkXS5jdGwpOworfQorCitzdGF0aWMgYm9vbCBza2xfZGRpX3BsbF9nZXRfaHdfc3RhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgc3RydWN0IGludGVsX3No YXJlZF9kcGxsICpwbGwsCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqaHdf c3RhdGUpCit7CisJdWludDMyX3QgdmFsOworCXVuc2lnbmVkIGludCBkcGxsOworCWNvbnN0IHN0 cnVjdCBza2xfZHBsbF9yZWdzICpyZWdzID0gc2tsX2RwbGxfcmVnczsKKwlib29sIHJldDsKKwor CWlmICghaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgUE9XRVJf RE9NQUlOX1BMTFMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXQgPSBmYWxzZTsKKworCS8qIERQ TEwwIGlzIG5vdCBwYXJ0IG9mIHRoZSBzaGFyZWQgRFBMTHMsIHNvIHBsbC0+aWQgaXMgMCBmb3Ig RFBMTDEgKi8KKwlkcGxsID0gcGxsLT5pZCArIDE7CisKKwl2YWwgPSBJOTE1X1JFQUQocmVnc1tw bGwtPmlkXS5jdGwpOworCWlmICghKHZhbCAmIExDUExMX1BMTF9FTkFCTEUpKQorCQlnb3RvIG91 dDsKKworCXZhbCA9IEk5MTVfUkVBRChEUExMX0NUUkwxKTsKKwlod19zdGF0ZS0+Y3RybDEgPSAo dmFsID4+IChkcGxsICogNikpICYgMHgzZjsKKworCS8qIGF2b2lkIHJlYWRpbmcgYmFjayBzdGFs ZSB2YWx1ZXMgaWYgSERNSSBtb2RlIGlzIG5vdCBlbmFibGVkICovCisJaWYgKHZhbCAmIERQTExf Q1RSTDFfSERNSV9NT0RFKGRwbGwpKSB7CisJCWh3X3N0YXRlLT5jZmdjcjEgPSBJOTE1X1JFQUQo cmVnc1twbGwtPmlkXS5jZmdjcjEpOworCQlod19zdGF0ZS0+Y2ZnY3IyID0gSTkxNV9SRUFEKHJl Z3NbcGxsLT5pZF0uY2ZnY3IyKTsKKwl9CisJcmV0ID0gdHJ1ZTsKKworb3V0OgorCWludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExMUyk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBza2xfc2hhcmVkX2RwbGxzX2luaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBpOworCisJZGV2X3ByaXYtPm51bV9zaGFy ZWRfZHBsbCA9IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBs bDsgaSsrKSB7CisJCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uaWQgPSBpOworCQlkZXZfcHJp di0+c2hhcmVkX2RwbGxzW2ldLm5hbWUgPSBza2xfZGRpX3BsbF9uYW1lc1tpXTsKKwkJZGV2X3By aXYtPnNoYXJlZF9kcGxsc1tpXS5kaXNhYmxlID0gc2tsX2RkaV9wbGxfZGlzYWJsZTsKKwkJZGV2 X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5lbmFibGUgPSBza2xfZGRpX3BsbF9lbmFibGU7CisJCWRl dl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZ2V0X2h3X3N0YXRlID0KKwkJCXNrbF9kZGlfcGxsX2dl dF9od19zdGF0ZTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnh0X2RkaV9w bGxfbmFtZXNbXSA9IHsKKwkiUE9SVCBQTEwgQSIsCisJIlBPUlQgUExMIEIiLAorCSJQT1JUIFBM TCBDIiwKK307CisKK3N0YXRpYyB2b2lkIGJ4dF9kZGlfcGxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwp Cit7CisJdWludDMyX3QgdGVtcDsKKwllbnVtIHBvcnQgcG9ydCA9IChlbnVtIHBvcnQpcGxsLT5p ZDsJLyogMToxIHBvcnQtPlBMTCBtYXBwaW5nICovCisKKwl0ZW1wID0gSTkxNV9SRUFEKEJYVF9Q T1JUX1BMTF9FTkFCTEUocG9ydCkpOworCXRlbXAgJj0gflBPUlRfUExMX1JFRl9TRUw7CisJLyog Tm9uLVNTQyByZWZlcmVuY2UgKi8KKwlJOTE1X1dSSVRFKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9y dCksIHRlbXApOworCisJLyogRGlzYWJsZSAxMCBiaXQgY2xvY2sgKi8KKwl0ZW1wID0gSTkxNV9S RUFEKEJYVF9QT1JUX1BMTF9FQkJfNChwb3J0KSk7CisJdGVtcCAmPSB+UE9SVF9QTExfMTBCSVRf Q0xLX0VOQUJMRTsKKwlJOTE1X1dSSVRFKEJYVF9QT1JUX1BMTF9FQkJfNChwb3J0KSwgdGVtcCk7 CisKKwkvKiBXcml0ZSBQMSAmIFAyICovCisJdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTExf RUJCXzAocG9ydCkpOworCXRlbXAgJj0gfihQT1JUX1BMTF9QMV9NQVNLIHwgUE9SVF9QTExfUDJf TUFTSyk7CisJdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5lYmIwOworCUk5MTVfV1JJVEUo QlhUX1BPUlRfUExMX0VCQl8wKHBvcnQpLCB0ZW1wKTsKKworCS8qIFdyaXRlIE0yIGludGVnZXIg Ki8KKwl0ZW1wID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCAwKSk7CisJdGVtcCAmPSB+ UE9SVF9QTExfTTJfTUFTSzsKKwl0ZW1wIHw9IHBsbC0+Y29uZmlnLmh3X3N0YXRlLnBsbDA7CisJ STkxNV9XUklURShCWFRfUE9SVF9QTEwocG9ydCwgMCksIHRlbXApOworCisJLyogV3JpdGUgTiAq LworCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDEpKTsKKwl0ZW1wICY9IH5Q T1JUX1BMTF9OX01BU0s7CisJdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5wbGwxOworCUk5 MTVfV1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDEpLCB0ZW1wKTsKKworCS8qIFdyaXRlIE0yIGZy YWN0aW9uICovCisJdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgMikpOworCXRl bXAgJj0gflBPUlRfUExMX00yX0ZSQUNfTUFTSzsKKwl0ZW1wIHw9IHBsbC0+Y29uZmlnLmh3X3N0 YXRlLnBsbDI7CisJSTkxNV9XUklURShCWFRfUE9SVF9QTEwocG9ydCwgMiksIHRlbXApOworCisJ LyogV3JpdGUgTTIgZnJhY3Rpb24gZW5hYmxlICovCisJdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9S VF9QTEwocG9ydCwgMykpOworCXRlbXAgJj0gflBPUlRfUExMX00yX0ZSQUNfRU5BQkxFOworCXRl bXAgfD0gcGxsLT5jb25maWcuaHdfc3RhdGUucGxsMzsKKwlJOTE1X1dSSVRFKEJYVF9QT1JUX1BM TChwb3J0LCAzKSwgdGVtcCk7CisKKwkvKiBXcml0ZSBjb2VmZiAqLworCXRlbXAgPSBJOTE1X1JF QUQoQlhUX1BPUlRfUExMKHBvcnQsIDYpKTsKKwl0ZW1wICY9IH5QT1JUX1BMTF9QUk9QX0NPRUZG X01BU0s7CisJdGVtcCAmPSB+UE9SVF9QTExfSU5UX0NPRUZGX01BU0s7CisJdGVtcCAmPSB+UE9S VF9QTExfR0FJTl9DVExfTUFTSzsKKwl0ZW1wIHw9IHBsbC0+Y29uZmlnLmh3X3N0YXRlLnBsbDY7 CisJSTkxNV9XUklURShCWFRfUE9SVF9QTEwocG9ydCwgNiksIHRlbXApOworCisJLyogV3JpdGUg Y2FsaWJyYXRpb24gdmFsICovCisJdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwg OCkpOworCXRlbXAgJj0gflBPUlRfUExMX1RBUkdFVF9DTlRfTUFTSzsKKwl0ZW1wIHw9IHBsbC0+ Y29uZmlnLmh3X3N0YXRlLnBsbDg7CisJSTkxNV9XUklURShCWFRfUE9SVF9QTEwocG9ydCwgOCks IHRlbXApOworCisJdGVtcCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgOSkpOworCXRl bXAgJj0gflBPUlRfUExMX0xPQ0tfVEhSRVNIT0xEX01BU0s7CisJdGVtcCB8PSBwbGwtPmNvbmZp Zy5od19zdGF0ZS5wbGw5OworCUk5MTVfV1JJVEUoQlhUX1BPUlRfUExMKHBvcnQsIDkpLCB0ZW1w KTsKKworCXRlbXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDEwKSk7CisJdGVtcCAm PSB+UE9SVF9QTExfRENPX0FNUF9PVlJfRU5fSDsKKwl0ZW1wICY9IH5QT1JUX1BMTF9EQ09fQU1Q X01BU0s7CisJdGVtcCB8PSBwbGwtPmNvbmZpZy5od19zdGF0ZS5wbGwxMDsKKwlJOTE1X1dSSVRF KEJYVF9QT1JUX1BMTChwb3J0LCAxMCksIHRlbXApOworCisJLyogUmVjYWxpYnJhdGUgd2l0aCBu ZXcgc2V0dGluZ3MgKi8KKwl0ZW1wID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FQkJfNChwb3J0 KSk7CisJdGVtcCB8PSBQT1JUX1BMTF9SRUNBTElCUkFURTsKKwlJOTE1X1dSSVRFKEJYVF9QT1JU X1BMTF9FQkJfNChwb3J0KSwgdGVtcCk7CisJdGVtcCAmPSB+UE9SVF9QTExfMTBCSVRfQ0xLX0VO QUJMRTsKKwl0ZW1wIHw9IHBsbC0+Y29uZmlnLmh3X3N0YXRlLmViYjQ7CisJSTkxNV9XUklURShC WFRfUE9SVF9QTExfRUJCXzQocG9ydCksIHRlbXApOworCisJLyogRW5hYmxlIFBMTCAqLworCXRl bXAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMX0VOQUJMRShwb3J0KSk7CisJdGVtcCB8PSBQT1JU X1BMTF9FTkFCTEU7CisJSTkxNV9XUklURShCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpLCB0ZW1w KTsKKwlQT1NUSU5HX1JFQUQoQlhUX1BPUlRfUExMX0VOQUJMRShwb3J0KSk7CisKKwlpZiAod2Fp dF9mb3JfYXRvbWljX3VzKChJOTE1X1JFQUQoQlhUX1BPUlRfUExMX0VOQUJMRShwb3J0KSkgJgor CQkJUE9SVF9QTExfTE9DSyksIDIwMCkpCisJCURSTV9FUlJPUigiUExMICVkIG5vdCBsb2NrZWRc biIsIHBvcnQpOworCisJLyoKKwkgKiBXaGlsZSB3ZSB3cml0ZSB0byB0aGUgZ3JvdXAgcmVnaXN0 ZXIgdG8gcHJvZ3JhbSBhbGwgbGFuZXMgYXQgb25jZSB3ZQorCSAqIGNhbiByZWFkIG9ubHkgbGFu ZSByZWdpc3RlcnMgYW5kIHdlIHBpY2sgbGFuZXMgMC8xIGZvciB0aGF0LgorCSAqLworCXRlbXAg PSBJOTE1X1JFQUQoQlhUX1BPUlRfUENTX0RXMTJfTE4wMShwb3J0KSk7CisJdGVtcCAmPSB+TEFO RV9TVEFHR0VSX01BU0s7CisJdGVtcCAmPSB+TEFORVNUQUdHRVJfU1RSQVBfT1ZSRDsKKwl0ZW1w IHw9IHBsbC0+Y29uZmlnLmh3X3N0YXRlLnBjc2R3MTI7CisJSTkxNV9XUklURShCWFRfUE9SVF9Q Q1NfRFcxMl9HUlAocG9ydCksIHRlbXApOworfQorCitzdGF0aWMgdm9pZCBieHRfZGRpX3BsbF9k aXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJc3RydWN0IGlu dGVsX3NoYXJlZF9kcGxsICpwbGwpCit7CisJZW51bSBwb3J0IHBvcnQgPSAoZW51bSBwb3J0KXBs bC0+aWQ7CS8qIDE6MSBwb3J0LT5QTEwgbWFwcGluZyAqLworCXVpbnQzMl90IHRlbXA7CisKKwl0 ZW1wID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9ydCkpOworCXRlbXAgJj0gflBP UlRfUExMX0VOQUJMRTsKKwlJOTE1X1dSSVRFKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9ydCksIHRl bXApOworCVBPU1RJTkdfUkVBRChCWFRfUE9SVF9QTExfRU5BQkxFKHBvcnQpKTsKK30KKworc3Rh dGljIGJvb2wgYnh0X2RkaV9wbGxfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKKwkJCQkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwsCisJCQkJCXN0 cnVjdCBpbnRlbF9kcGxsX2h3X3N0YXRlICpod19zdGF0ZSkKK3sKKwllbnVtIHBvcnQgcG9ydCA9 IChlbnVtIHBvcnQpcGxsLT5pZDsJLyogMToxIHBvcnQtPlBMTCBtYXBwaW5nICovCisJdWludDMy X3QgdmFsOworCWJvb2wgcmV0OworCisJaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9l bmFibGVkKGRldl9wcml2LCBQT1dFUl9ET01BSU5fUExMUykpCisJCXJldHVybiBmYWxzZTsKKwor CXJldCA9IGZhbHNlOworCisJdmFsID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FTkFCTEUocG9y dCkpOworCWlmICghKHZhbCAmIFBPUlRfUExMX0VOQUJMRSkpCisJCWdvdG8gb3V0OworCisJaHdf c3RhdGUtPmViYjAgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMX0VCQl8wKHBvcnQpKTsKKwlod19z dGF0ZS0+ZWJiMCAmPSBQT1JUX1BMTF9QMV9NQVNLIHwgUE9SVF9QTExfUDJfTUFTSzsKKworCWh3 X3N0YXRlLT5lYmI0ID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTF9FQkJfNChwb3J0KSk7CisJaHdf c3RhdGUtPmViYjQgJj0gUE9SVF9QTExfMTBCSVRfQ0xLX0VOQUJMRTsKKworCWh3X3N0YXRlLT5w bGwwID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCAwKSk7CisJaHdfc3RhdGUtPnBsbDAg Jj0gUE9SVF9QTExfTTJfTUFTSzsKKworCWh3X3N0YXRlLT5wbGwxID0gSTkxNV9SRUFEKEJYVF9Q T1JUX1BMTChwb3J0LCAxKSk7CisJaHdfc3RhdGUtPnBsbDEgJj0gUE9SVF9QTExfTl9NQVNLOwor CisJaHdfc3RhdGUtPnBsbDIgPSBJOTE1X1JFQUQoQlhUX1BPUlRfUExMKHBvcnQsIDIpKTsKKwlo d19zdGF0ZS0+cGxsMiAmPSBQT1JUX1BMTF9NMl9GUkFDX01BU0s7CisKKwlod19zdGF0ZS0+cGxs MyA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgMykpOworCWh3X3N0YXRlLT5wbGwzICY9 IFBPUlRfUExMX00yX0ZSQUNfRU5BQkxFOworCisJaHdfc3RhdGUtPnBsbDYgPSBJOTE1X1JFQUQo QlhUX1BPUlRfUExMKHBvcnQsIDYpKTsKKwlod19zdGF0ZS0+cGxsNiAmPSBQT1JUX1BMTF9QUk9Q X0NPRUZGX01BU0sgfAorCQkJICBQT1JUX1BMTF9JTlRfQ09FRkZfTUFTSyB8CisJCQkgIFBPUlRf UExMX0dBSU5fQ1RMX01BU0s7CisKKwlod19zdGF0ZS0+cGxsOCA9IEk5MTVfUkVBRChCWFRfUE9S VF9QTEwocG9ydCwgOCkpOworCWh3X3N0YXRlLT5wbGw4ICY9IFBPUlRfUExMX1RBUkdFVF9DTlRf TUFTSzsKKworCWh3X3N0YXRlLT5wbGw5ID0gSTkxNV9SRUFEKEJYVF9QT1JUX1BMTChwb3J0LCA5 KSk7CisJaHdfc3RhdGUtPnBsbDkgJj0gUE9SVF9QTExfTE9DS19USFJFU0hPTERfTUFTSzsKKwor CWh3X3N0YXRlLT5wbGwxMCA9IEk5MTVfUkVBRChCWFRfUE9SVF9QTEwocG9ydCwgMTApKTsKKwlo d19zdGF0ZS0+cGxsMTAgJj0gUE9SVF9QTExfRENPX0FNUF9PVlJfRU5fSCB8CisJCQkgICBQT1JU X1BMTF9EQ09fQU1QX01BU0s7CisKKwkvKgorCSAqIFdoaWxlIHdlIHdyaXRlIHRvIHRoZSBncm91 cCByZWdpc3RlciB0byBwcm9ncmFtIGFsbCBsYW5lcyBhdCBvbmNlIHdlCisJICogY2FuIHJlYWQg b25seSBsYW5lIHJlZ2lzdGVycy4gV2UgY29uZmlndXJlIGFsbCBsYW5lcyB0aGUgc2FtZSB3YXks IHNvCisJICogaGVyZSBqdXN0IHJlYWQgb3V0IGxhbmVzIDAvMSBhbmQgb3V0cHV0IGEgbm90ZSBp ZiBsYW5lcyAyLzMgZGlmZmVyLgorCSAqLworCWh3X3N0YXRlLT5wY3NkdzEyID0gSTkxNV9SRUFE KEJYVF9QT1JUX1BDU19EVzEyX0xOMDEocG9ydCkpOworCWlmIChJOTE1X1JFQUQoQlhUX1BPUlRf UENTX0RXMTJfTE4yMyhwb3J0KSkgIT0gaHdfc3RhdGUtPnBjc2R3MTIpCisJCURSTV9ERUJVR19E UklWRVIoImxhbmUgc3RhZ2dlciBjb25maWcgZGlmZmVyZW50IGZvciBsYW5lIDAxICglMDh4KSBh bmQgMjMgKCUwOHgpXG4iLAorCQkJCSBod19zdGF0ZS0+cGNzZHcxMiwKKwkJCQkgSTkxNV9SRUFE KEJYVF9QT1JUX1BDU19EVzEyX0xOMjMocG9ydCkpKTsKKwlod19zdGF0ZS0+cGNzZHcxMiAmPSBM QU5FX1NUQUdHRVJfTUFTSyB8IExBTkVTVEFHR0VSX1NUUkFQX09WUkQ7CisKKwlyZXQgPSB0cnVl OworCitvdXQ6CisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJ Tl9QTExTKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJ4dF9zaGFyZWRfZHBs bHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IGk7CisK KwlkZXZfcHJpdi0+bnVtX3NoYXJlZF9kcGxsID0gMzsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZf cHJpdi0+bnVtX3NoYXJlZF9kcGxsOyBpKyspIHsKKwkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tp XS5pZCA9IGk7CisJCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0ubmFtZSA9IGJ4dF9kZGlfcGxs X25hbWVzW2ldOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmRpc2FibGUgPSBieHRfZGRp X3BsbF9kaXNhYmxlOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmVuYWJsZSA9IGJ4dF9k ZGlfcGxsX2VuYWJsZTsKKwkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5nZXRfaHdfc3RhdGUg PQorCQkJYnh0X2RkaV9wbGxfZ2V0X2h3X3N0YXRlOworCX0KK30KKworc3RhdGljIHZvaWQgaW50 ZWxfZGRpX3BsbF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCB2YWwg PSBJOTE1X1JFQUQoTENQTExfQ1RMKTsKKworCWlmIChJU19TS1lMQUtFKGRldikgfHwgSVNfS0FC WUxBS0UoZGV2KSkKKwkJc2tsX3NoYXJlZF9kcGxsc19pbml0KGRldl9wcml2KTsKKwllbHNlIGlm IChJU19CUk9YVE9OKGRldikpCisJCWJ4dF9zaGFyZWRfZHBsbHNfaW5pdChkZXZfcHJpdik7CisJ ZWxzZQorCQloc3dfc2hhcmVkX2RwbGxzX2luaXQoZGV2X3ByaXYpOworCisJaWYgKElTX1NLWUxB S0UoZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSB7CisJCWludCBjZGNsa19mcmVxOworCisJCWNk Y2xrX2ZyZXEgPSBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfZGlzcGxheV9jbG9ja19zcGVlZChkZXYp OworCQlkZXZfcHJpdi0+c2tsX2Jvb3RfY2RjbGsgPSBjZGNsa19mcmVxOworCQlpZiAoc2tsX3Nh bml0aXplX2NkY2xrKGRldl9wcml2KSkKKwkJCURSTV9ERUJVR19LTVMoIlNhbml0aXplZCBjZGNs ayBwcm9ncmFtbWVkIGJ5IHByZS1vc1xuIik7CisJCWlmICghKEk5MTVfUkVBRChMQ1BMTDFfQ1RM KSAmIExDUExMX1BMTF9FTkFCTEUpKQorCQkJRFJNX0VSUk9SKCJMQ1BMTDEgaXMgZGlzYWJsZWRc biIpOworCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihkZXYpKSB7CisJCWJyb3h0b25faW5pdF9jZGNs ayhkZXYpOworCQlicm94dG9uX2RkaV9waHlfaW5pdChkZXYpOworCX0gZWxzZSB7CisJCS8qCisJ CSAqIFRoZSBMQ1BMTCByZWdpc3RlciBzaG91bGQgYmUgdHVybmVkIG9uIGJ5IHRoZSBCSU9TLiBG b3Igbm93CisJCSAqIGxldCdzIGp1c3QgY2hlY2sgaXRzIHN0YXRlIGFuZCBwcmludCBlcnJvcnMg aW4gY2FzZQorCQkgKiBzb21ldGhpbmcgaXMgd3JvbmcuICBEb24ndCBldmVuIHRyeSB0byB0dXJu IGl0IG9uLgorCQkgKi8KKworCQlpZiAodmFsICYgTENQTExfQ0RfU09VUkNFX0ZDTEspCisJCQlE Uk1fRVJST1IoIkNEQ0xLIHNvdXJjZSBpcyBub3QgTENQTExcbiIpOworCisJCWlmICh2YWwgJiBM Q1BMTF9QTExfRElTQUJMRSkKKwkJCURSTV9FUlJPUigiTENQTEwgaXMgZGlzYWJsZWRcbiIpOwor CX0KK30KKwogdm9pZCBpbnRlbF9zaGFyZWRfZHBsbF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggNDg3MTZiYS4uOTZlODRkMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTEwMDcsNyArMTAwNyw2IEBAIHZvaWQgaHN3X2Zk aV9saW5rX3RyYWluKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB2b2lkIGludGVsX2RkaV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0KTsKIGVudW0gcG9ydCBpbnRl bF9kZGlfZ2V0X2VuY29kZXJfcG9ydChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2Rl cik7CiBib29sIGludGVsX2RkaV9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIsIGVudW0gcGlwZSAqcGlwZSk7Ci12b2lkIGludGVsX2RkaV9wbGxfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVyX2Z1bmMo c3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgaW50ZWxfZGRpX2Rpc2FibGVfdHJhbnNjb2Rl cl9mdW5jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAgICAgZW51 bSB0cmFuc2NvZGVyIGNwdV90cmFuc2NvZGVyKTsKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK