From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shawn Guo Subject: [PATCH v3 2/3] drm: zte: add initial vou drm driver Date: Thu, 20 Oct 2016 15:30:24 +0800 Message-ID: <1476948625-8521-3-git-send-email-shawn.guo@linaro.org> References: <1476948625-8521-1-git-send-email-shawn.guo@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1476948625-8521-1-git-send-email-shawn.guo@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , David Airlie Cc: Mark Rutland , devicetree@vger.kernel.org, Baoyou Xie , Emil Velikov , dri-devel@lists.freedesktop.org, Rob Herring , Jun Nie , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SXQgYWRkcyB0aGUgaW5pdGlhbCBaVEUgVk9VIGRpc3BsYXkgY29udHJvbGxlciBEUk0gZHJpdmVy LiAgVGhlcmUgYXJlCnN0aWxsIHNvbWUgZmVhdHVyZXMgdG8gYmUgYWRkZWQsIGxpa2Ugb3Zlcmxh eSBwbGFuZSwgc2NhbGluZywgYW5kIG1vcmUKb3V0cHV0IGRldmljZXMgc3VwcG9ydC4gIEJ1dCBp dCdzIGFscmVhZHkgdXNlZnVsIHdpdGggZHVhbCBDUlRDcyBhbmQKSERNSSBtb25pdG9yIHdvcmtp bmcuCgpTaWduZWQtb2ZmLWJ5OiBTaGF3biBHdW8gPHNoYXduLmd1b0BsaW5hcm8ub3JnPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZyAg ICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUgICAgIHwgICA3ICsKIGRy aXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5jIHwgMjY3ICsrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5oIHwgIDM2ICsrCiBkcml2ZXJzL2dwdS9kcm0venRl L3p4X2hkbWkuYyAgICB8IDY3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYyAgIHwgMzc1ICsrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oICAgfCAgMjYgKysKIGRyaXZlcnMvZ3B1L2Ry bS96dGUvenhfdm91LmMgICAgIHwgNzk5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuaCAgICAgfCAgNDYgKysrCiAxMSBm aWxlcyBjaGFuZ2VkLCAyMjQ1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0venRlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0venRlL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96 eF9kcm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2Ry bV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfaGRtaS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDQ4MzA1OWEyMmIxYi4u YTkxZjhjZWNiZTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw4IEBAIHNvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZyIK KwogIyBLZWVwIGxlZ2FjeSBkcml2ZXJzIGxhc3QKIAogbWVudWNvbmZpZyBEUk1fTEVHQUNZCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKaW5kZXggMjVjNzIwNDU0MDE3Li5mMzI1MTc1MGM5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTg2 LDMgKzg2LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9GU0xfRENVKSArPSBmc2wtZGN1Lwogb2JqLSQo Q09ORklHX0RSTV9FVE5BVklWKSArPSBldG5hdml2Lwogb2JqLSQoQ09ORklHX0RSTV9BUkNQR1Up Kz0gYXJjLwogb2JqLXkJCQkrPSBoaXNpbGljb24vCitvYmotJChDT05GSUdfRFJNX1pURSkJKz0g enRlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL3p0ZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uNDA2NWIyODQwZjFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS9L Y29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIERSTV9aVEUKKwl0cmlzdGF0ZSAiRFJNIFN1 cHBvcnQgZm9yIFpURSBTb0NzIgorCWRlcGVuZHMgb24gRFJNICYmIEFSQ0hfWlgKKwlzZWxlY3Qg RFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9LTVNfRkJfSEVMUEVSCisJc2VsZWN0IERS TV9LTVNfSEVMUEVSCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBEUk0g b24gWlRFIFpYIFNvQ3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL3p0ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjY5OTE4MGJmZDU3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS96dGUvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACit6eGRybS15IDo9IFwKKwl6eF9k cm1fZHJ2Lm8gXAorCXp4X2hkbWkubyBcCisJenhfcGxhbmUubyBcCisJenhfdm91Lm8KKworb2Jq LSQoQ09ORklHX0RSTV9aVEUpICs9IHp4ZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS96dGUvenhfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDc2YTliOTJjZWEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuYwpAQCAtMCwwICsx LDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCisgKiBDb3B5cmlnaHQg MjAxNiBaVEUgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5j bHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKworI2luY2x1 ZGUgInp4X2RybV9kcnYuaCIKKyNpbmNsdWRlICJ6eF92b3UuaCIKKworc3RydWN0IHp4X2RybV9w cml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXY7Cit9OworCitzdGF0aWMgdm9p ZCB6eF9kcm1fZmJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQor eworCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlk cm1fZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQocHJpdi0+ZmJkZXYpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyB6eF9kcm1fbW9kZV9jb25maWdfZnVuY3Mg PSB7CisJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAorCS5vdXRwdXRfcG9sbF9jaGFu Z2VkID0genhfZHJtX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQsCisJLmF0b21pY19jaGVjayA9IGRy bV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0LAorfTsKKworc3RhdGljIHZvaWQgenhfZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJt X2RldmljZSAqZHJtKQoreworCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2 X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShwcml2LT5mYmRldik7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHp4X2RybV9mb3BzID0gewor CS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBk cm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisjaWZkZWYgQ09ORklH X0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLnBv bGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorCS5sbHNlZWsgPSBub29wX2xsc2Vl aywKKwkubW1hcCA9IGRybV9nZW1fY21hX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9k cml2ZXIgenhfZHJtX2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8 IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX1BSSU1FIHwKKwkJCSAgIERSSVZFUl9BVE9NSUMsCisJ Lmxhc3RjbG9zZSA9IHp4X2RybV9sYXN0Y2xvc2UsCisJLmdldF92YmxhbmtfY291bnRlciA9IGRy bV92Ymxhbmtfbm9faHdfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHp4X3ZvdV9lbmFibGVf dmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHp4X3ZvdV9kaXNhYmxlX3ZibGFuaywKKwkuZ2Vt X2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAm ZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5kdW1iX2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3Jl YXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCisJ LmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5wcmltZV9oYW5kbGVfdG9f ZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0g ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2Vt X3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0 LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3Rh YmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1w b3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAs CisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJLmdlbV9w cmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKwkuZm9wcyA9ICZ6eF9kcm1fZm9w cywKKwkubmFtZSA9ICJ6eC12b3UiLAorCS5kZXNjID0gIlpURSBWT1UgQ29udHJvbGxlciBEUk0i LAorCS5kYXRlID0gIjIwMTYwODExIiwKKwkubWFqb3IgPSAxLAorCS5taW5vciA9IDAsCit9Owor CitzdGF0aWMgaW50IHp4X2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlpbnQgcmV0 OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwp OworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm0gPSBkcm1fZGV2X2FsbG9j KCZ6eF9kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRybS0+ZGV2X3ByaXZhdGUgPSBwcml2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRybSk7CisK Kwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRo ID0gMTY7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMTY7CisJZHJtLT5tb2RlX2Nv bmZpZy5tYXhfd2lkdGggPSA0MDk2OworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQw OTY7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZ6eF9kcm1fbW9kZV9jb25maWdfZnVuY3M7 CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYmluZCBhbGwgY29tcG9uZW50czogJWRcbiIsIHJldCk7 CisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJfQorCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRy bSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gaW5pdCB2Ymxhbms6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF91 bmJpbmQ7CisJfQorCisJLyoKKwkgKiBXZSB3aWxsIG1hbmFnZSBpcnEgaGFuZGxlciBvbiBvdXIg b3duLiAgSW4gdGhpcyBjYXNlLCBpcnFfZW5hYmxlZAorCSAqIG5lZWQgdG8gYmUgdHJ1ZSBmb3Ig dXNpbmcgdmJsYW5rIGNvcmUgc3VwcG9ydC4KKwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1 ZTsKKworCWRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOworCWRybV9rbXNfaGVscGVyX3BvbGxf aW5pdChkcm0pOworCisJcHJpdi0+ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwg ZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0YywKKwkJCQkJIGRybS0+bW9kZV9jb25maWcubnVtX2Nv bm5lY3Rvcik7CisJaWYgKElTX0VSUihwcml2LT5mYmRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihw cml2LT5mYmRldik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgY21hIGZiZGV2OiAl ZFxuIiwgcmV0KTsKKwkJcHJpdi0+ZmJkZXYgPSBOVUxMOworCQlnb3RvIG91dF9wb2xsX2Zpbmk7 CisJfQorCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQpCisJCWdv dG8gb3V0X2ZiZGV2X2Zpbmk7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZiZGV2X2Zpbmk6CisJaWYg KHByaXYtPmZiZGV2KSB7CisJCWRybV9mYmRldl9jbWFfZmluaShwcml2LT5mYmRldik7CisJCXBy aXYtPmZiZGV2ID0gTlVMTDsKKwl9CitvdXRfcG9sbF9maW5pOgorCWRybV9rbXNfaGVscGVyX3Bv bGxfZmluaShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtX3ZibGFu a19jbGVhbnVwKGRybSk7CitvdXRfdW5iaW5kOgorCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwg ZHJtKTsKK291dF91bnJlZ2lzdGVyOgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRy bS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRybV9kZXZfdW5yZWYoZHJtKTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCB6eF9kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0 IHp4X2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWRybV9kZXZfdW5y ZWdpc3Rlcihkcm0pOworCWlmIChwcml2LT5mYmRldikgeworCQlkcm1fZmJkZXZfY21hX2Zpbmko cHJpdi0+ZmJkZXYpOworCQlwcml2LT5mYmRldiA9IE5VTEw7CisJfQorCWRybV9rbXNfaGVscGVy X3BvbGxfZmluaShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtX3Zi bGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworCWRl dl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRy bV9kZXZfdW5yZWYoZHJtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFz dGVyX29wcyB6eF9kcm1fbWFzdGVyX29wcyA9IHsKKwkuYmluZCA9IHp4X2RybV9iaW5kLAorCS51 bmJpbmQgPSB6eF9kcm1fdW5iaW5kLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVj dCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRh dGE7Cit9CisKK3N0YXRpYyBpbnQgenhfZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKnBhcmVudCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNo aWxkOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0Owor CisJcmV0ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUocGFyZW50LCBOVUxMLCBOVUxMLCBkZXYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zf bm9kZShwYXJlbnQsIGNoaWxkKSB7CisJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gs IGNvbXBhcmVfb2YsIGNoaWxkKTsKKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCX0KKworCXJldHVy biBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRldiwgJnp4X2RybV9tYXN0ZXJfb3Bz LCBtYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgenhfZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZ6eF9k cm1fbWFzdGVyX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHp4X2RybV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAienRlLHp4 Mjk2NzE4LXZvdSIsIH0sCisJeyAvKiBlbmQgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCB6eF9kcm1fb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6 eF9kcm1fcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSA9IHp4X2RybV9wcm9iZSwKKwkucmVt b3ZlID0genhfZHJtX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJ6eC1kcm0iLAor CQkub2ZfbWF0Y2hfdGFibGUJPSB6eF9kcm1fb2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcml2ZXJzW10gPSB7CisJJnp4X2NydGNfZHJpdmVyLAor CSZ6eF9oZG1pX2RyaXZlciwKKwkmenhfZHJtX3BsYXRmb3JtX2RyaXZlciwKK307CisKK3N0YXRp YyBpbnQgenhfZHJtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fcmVnaXN0ZXJfZHJp dmVycyhkcml2ZXJzLCBBUlJBWV9TSVpFKGRyaXZlcnMpKTsKK30KK21vZHVsZV9pbml0KHp4X2Ry bV9pbml0KTsKKworc3RhdGljIHZvaWQgenhfZHJtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV91 bnJlZ2lzdGVyX2RyaXZlcnMoZHJpdmVycywgQVJSQVlfU0laRShkcml2ZXJzKSk7Cit9Cittb2R1 bGVfZXhpdCh6eF9kcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNoYXduIEd1byA8c2hhd24u Z3VvQGxpbmFyby5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlpURSBaWCBWT1UgRFJNIGRy aXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU2NWNkMThhNmNiYQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5oCkBAIC0w LDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgorICogQ29weXJp Z2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICov CisKKyNpZm5kZWYgX19aWF9EUk1fRFJWX0hfXworI2RlZmluZSBfX1pYX0RSTV9EUlZfSF9fCisK K2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHp4X2NydGNfZHJpdmVyOworZXh0ZXJuIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenhfaGRtaV9kcml2ZXI7CisKK3N0YXRpYyBpbmxpbmUgdTMy IHp4X3JlYWRsKHZvaWQgX19pb21lbSAqcmVnKQoreworCXJldHVybiByZWFkbF9yZWxheGVkKHJl Zyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB6eF93cml0ZWwodm9pZCBfX2lvbWVtICpyZWcs IHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCByZWcpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgenhfd3JpdGVsX21hc2sodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIg dmFsKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSB6eF9yZWFkbChyZWcpOworCXRtcCA9ICh0bXAg JiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJenhfd3JpdGVsKHJlZywgdG1wKTsKK30KKworI2Vu ZGlmIC8qIF9fWlhfRFJNX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96 dGUvenhfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9oZG1pLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MWUxYzM3MTZlZDgKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2hkbWkuYwpAQCAtMCwwICsxLDY3OCBAQAorLyoK KyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCisgKiBDb3B5cmlnaHQgMjAxNiBaVEUgQ29y cG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5o PgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorCisjaW5jbHVkZSAienhfdm91LmgiCisKKyNkZWZpbmUgRlVOQ19TRUwJCQkweDAwMGIKKyNk ZWZpbmUgRlVOQ19IRE1JX0VOCQkJQklUKDApCisjZGVmaW5lIENMS1BXRAkJCQkweDAwMGQKKyNk ZWZpbmUgQ0xLUFdEX1BESURDSwkJCUJJVCgyKQorI2RlZmluZSBQV0RfU1JTVAkJCTB4MDAxMAor I2RlZmluZSBQMlRfQ1RSTAkJCTB4MDA2NgorI2RlZmluZSBQMlRfRENfUEtUX0VOCQkJQklUKDcp CisjZGVmaW5lIEwxX0lOVFJfU1RBVAkJCTB4MDA3ZQorI2RlZmluZSBMMV9JTlRSX1NUQVRfSU5U UjEJCUJJVCgwKQorI2RlZmluZSBJTlRSMV9TVEFUCQkJMHgwMDhmCisjZGVmaW5lIElOVFIxX01B U0sJCQkweDAwOTUKKyNkZWZpbmUgSU5UUjFfTU9OSVRPUl9ERVRFQ1QJCShCSVQoNSkgfCBCSVQo NikpCisjZGVmaW5lIFpYX0REQ19BRERSCQkJMHgwMGVkCisjZGVmaW5lIFpYX0REQ19TRUdNCQkJ MHgwMGVlCisjZGVmaW5lIFpYX0REQ19PRkZTRVQJCQkweDAwZWYKKyNkZWZpbmUgWlhfRERDX0RJ Tl9DTlQxCQkJMHgwMGYwCisjZGVmaW5lIFpYX0REQ19ESU5fQ05UMgkJCTB4MDBmMQorI2RlZmlu ZSBaWF9ERENfQ01ECQkJMHgwMGYzCisjZGVmaW5lIEREQ19DTURfTUFTSwkJCTB4ZgorI2RlZmlu ZSBERENfQ01EX0NMRUFSX0ZJRk8JCTB4OQorI2RlZmluZSBERENfQ01EX1NFUVVFTlRJQUxfUkVB RAkJMHgyCisjZGVmaW5lIFpYX0REQ19EQVRBCQkJMHgwMGY0CisjZGVmaW5lIFpYX0REQ19ET1VU X0NOVAkJCTB4MDBmNQorI2RlZmluZSBERENfRE9VVF9DTlRfTUFTSwkJMHgxZgorI2RlZmluZSBU RVNUX1RYQ1RSTAkJCTB4MDBmNworI2RlZmluZSBURVNUX1RYQ1RSTF9IRE1JX01PREUJCUJJVCgx KQorI2RlZmluZSBIRE1JQ1RMNAkJCTB4MDIzNQorI2RlZmluZSBUUElfSFBEX1JTRU4JCQkweDA2 M2IKKyNkZWZpbmUgVFBJX0hQRF9DT05ORUNUSU9OCQkoQklUKDEpIHwgQklUKDIpKQorI2RlZmlu ZSBUUElfSU5GT19GU0VMCQkJMHgwNmJmCisjZGVmaW5lIEZTRUxfQVZJCQkJMAorI2RlZmluZSBG U0VMX0dCRAkJCTEKKyNkZWZpbmUgRlNFTF9BVURJTwkJCTIKKyNkZWZpbmUgRlNFTF9TUEQJCQkz CisjZGVmaW5lIEZTRUxfTVBFRwkJCTQKKyNkZWZpbmUgRlNFTF9WU0lGCQkJNQorI2RlZmluZSBU UElfSU5GT19CMAkJCTB4MDZjMAorI2RlZmluZSBUUElfSU5GT19FTgkJCTB4MDZkZgorI2RlZmlu ZSBUUElfSU5GT19UUkFOU19FTgkJQklUKDcpCisjZGVmaW5lIFRQSV9JTkZPX1RSQU5TX1JQVAkJ QklUKDYpCisjZGVmaW5lIFRQSV9ERENfTUFTVEVSX0VOCQkweDA2ZjgKKyNkZWZpbmUgSFdfRERD X01BU1RFUgkJCUJJVCg3KQorCisjZGVmaW5lIFpYX0hETUlfSU5GT0ZSQU1FX1NJWkUJCTMxCisK KyNkZWZpbmUgRERDX1NFR01FTlRfQUREUgkJMHgzMAorCitzdHJ1Y3QgenhfaGRtaV9pMmMgewor CXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3Ry dWN0IHp4X2hkbWkgeworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgenhfaGRtaV9pMmMgKmRkYzsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwl2b2lkIF9faW9tZW0gKm1t aW87CisJc3RydWN0IGNsayAqY2VjX2NsazsKKwlzdHJ1Y3QgY2xrICpvc2NfY2xrOworCXN0cnVj dCBjbGsgKnhjbGs7CisJYm9vbCBzaW5rX2lzX2hkbWk7CisJYm9vbCBzaW5rX2hhc19hdWRpbzsK Kwljb25zdCBzdHJ1Y3Qgdm91X2luZiAqaW5mOworfTsKKworI2RlZmluZSB0b196eF9oZG1pKHgp IGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgenhfaGRtaSwgeCkKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2b3VfaW5mIHZvdV9pbmZfaGRtaSA9IHsKKwkuaWQgPSBWT1VfSERNSSwKKwkuZGF0YV9zZWwg PSBWT1VfWVVWNDQ0LAorCS5jbG9ja3NfZW5fYml0cyA9IEJJVCgyNCkgfCBCSVQoMTgpIHwgQklU KDYpLAorCS5jbG9ja3Nfc2VsX2JpdHMgPSBCSVQoMTMpIHwgQklUKDIpLAorfTsKKworc3RhdGlj IGlubGluZSB1OCBoZG1pX3JlYWRiKHN0cnVjdCB6eF9oZG1pICpoZG1pLCB1MTYgb2Zmc2V0KQor eworCXJldHVybiByZWFkbF9yZWxheGVkKGhkbWktPm1taW8gKyBvZmZzZXQgKiA0KTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGhkbWlfd3JpdGViKHN0cnVjdCB6eF9oZG1pICpoZG1pLCB1MTYg b2Zmc2V0LCB1OCB2YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBoZG1pLT5tbWlvICsgb2Zm c2V0ICogNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZG1pX3dyaXRlYl9tYXNrKHN0cnVj dCB6eF9oZG1pICpoZG1pLCB1MTYgb2Zmc2V0LAorCQkJCSAgICB1OCBtYXNrLCB1OCB2YWwpCit7 CisJdTggdG1wOworCisJdG1wID0gaGRtaV9yZWFkYihoZG1pLCBvZmZzZXQpOworCXRtcCA9ICh0 bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJaGRtaV93cml0ZWIoaGRtaSwgb2Zmc2V0LCB0 bXApOworfQorCitzdGF0aWMgaW50IHp4X2hkbWlfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCB6eF9o ZG1pICpoZG1pLAorCQkJCSAgIHVuaW9uIGhkbWlfaW5mb2ZyYW1lICpmcmFtZSwgdTggZnNlbCkK K3sKKwl1OCBidWZmZXJbWlhfSERNSV9JTkZPRlJBTUVfU0laRV07CisJaW50IG51bTsKKwlpbnQg aTsKKworCWhkbWlfd3JpdGViKGhkbWksIFRQSV9JTkZPX0ZTRUwsIGZzZWwpOworCisJbnVtID0g aGRtaV9pbmZvZnJhbWVfcGFjayhmcmFtZSwgYnVmZmVyLCBaWF9IRE1JX0lORk9GUkFNRV9TSVpF KTsKKwlpZiAobnVtIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgImZhaWxlZCB0byBwYWNr IGluZm9mcmFtZTogJWRcbiIsIG51bSk7CisJCXJldHVybiBudW07CisJfQorCisJZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKQorCQloZG1pX3dyaXRlYihoZG1pLCBUUElfSU5GT19CMCArIGksIGJ1 ZmZlcltpXSk7CisKKwloZG1pX3dyaXRlYl9tYXNrKGhkbWksIFRQSV9JTkZPX0VOLCBUUElfSU5G T19UUkFOU19SUFQsCisJCQkgVFBJX0lORk9fVFJBTlNfUlBUKTsKKwloZG1pX3dyaXRlYl9tYXNr KGhkbWksIFRQSV9JTkZPX0VOLCBUUElfSU5GT19UUkFOU19FTiwKKwkJCSBUUElfSU5GT19UUkFO U19FTik7CisKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IHp4X2hkbWlfY29uZmlnX3Zp ZGVvX3ZzaShzdHJ1Y3QgenhfaGRtaSAqaGRtaSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCit7CisJdW5pb24gaGRtaV9pbmZvZnJhbWUgZnJhbWU7CisJaW50IHJldDsK KworCXJldCA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZy YW1lLnZlbmRvci5oZG1pLAorCQkJCQkJCSAgbW9kZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGhkbWktPmRldiwgImZhaWxlZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZTogJWRcbiIsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHp4X2hkbWlfaW5mb2ZyYW1lX3RyYW5zKGhk bWksICZmcmFtZSwgRlNFTF9WU0lGKTsKK30KKworc3RhdGljIGludCB6eF9oZG1pX2NvbmZpZ192 aWRlb19hdmkoc3RydWN0IHp4X2hkbWkgKmhkbWksCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQoreworCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGZyYW1lOworCWludCByZXQ7 CisKKwlyZXQgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFt ZS5hdmksIG1vZGUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJmYWlsZWQg dG8gZ2V0IGF2aSBpbmZvZnJhbWU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CS8qIFdlIGFsd2F5cyB1c2UgWVVWNDQ0IGZvciBIRE1JIG91dHB1dC4gKi8KKwlmcmFtZS5hdmku Y29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQ7CisKKwlyZXR1cm4genhfaGRtaV9p bmZvZnJhbWVfdHJhbnMoaGRtaSwgJmZyYW1lLCBGU0VMX0FWSSk7Cit9CisKK3N0YXRpYyB2b2lk IHp4X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJ CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKK3sKKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IHRv X3p4X2hkbWkoZW5jb2Rlcik7CisKKwlpZiAoaGRtaS0+c2lua19pc19oZG1pKSB7CisJCXp4X2hk bWlfY29uZmlnX3ZpZGVvX2F2aShoZG1pLCBtb2RlKTsKKwkJenhfaGRtaV9jb25maWdfdmlkZW9f dnNpKGhkbWksIG1vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQgenhfaGRtaV9lbmNvZGVyX2Vu YWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHp4X2hkbWkgKmhk bWkgPSB0b196eF9oZG1pKGVuY29kZXIpOworCisJdm91X2luZl9lbmFibGUoaGRtaS0+aW5mLCBl bmNvZGVyLT5jcnRjKTsKK30KKworc3RhdGljIHZvaWQgenhfaGRtaV9lbmNvZGVyX2Rpc2FibGUo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1pID0g dG9fenhfaGRtaShlbmNvZGVyKTsKKworCXZvdV9pbmZfZGlzYWJsZShoZG1pLT5pbmYsIGVuY29k ZXItPmNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9m dW5jcyB6eF9oZG1pX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUJPSB6eF9oZG1p X2VuY29kZXJfZW5hYmxlLAorCS5kaXNhYmxlID0genhfaGRtaV9lbmNvZGVyX2Rpc2FibGUsCisJ Lm1vZGVfc2V0ID0genhfaGRtaV9lbmNvZGVyX21vZGVfc2V0LAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB6eF9oZG1pX2VuY29kZXJfZnVuY3MgPSB7CisJLmRl c3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIGludCB6eF9oZG1pX2Nv bm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlz dHJ1Y3QgenhfaGRtaSAqaGRtaSA9IHRvX3p4X2hkbWkoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRp ZCAqZWRpZDsKKwlpbnQgcmV0OworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZo ZG1pLT5kZGMtPmFkYXApOworCWlmICghZWRpZCkKKwkJcmV0dXJuIDA7CisKKwloZG1pLT5zaW5r X2lzX2hkbWkgPSBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsKKwloZG1pLT5zaW5rX2hh c19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKwlkcm1fbW9kZV9jb25u ZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwlyZXQgPSBkcm1f YWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwlrZnJlZShlZGlkKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworenhfaGRtaV9jb25uZWN0 b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlyZXR1cm4gTU9ERV9PSzsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB6eF9oZG1pX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHp4X2hkbWlfY29ubmVjdG9yX2dldF9t b2RlcywKKwkubW9kZV92YWxpZCA9IHp4X2hkbWlfY29ubmVjdG9yX21vZGVfdmFsaWQsCit9Owor CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworenhfaGRtaV9jb25uZWN0b3JfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3Ry dWN0IHp4X2hkbWkgKmhkbWkgPSB0b196eF9oZG1pKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gKGhk bWlfcmVhZGIoaGRtaSwgVFBJX0hQRF9SU0VOKSAmIFRQSV9IUERfQ09OTkVDVElPTikgPworCQlj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk OworfQorCitzdGF0aWMgdm9pZCB6eF9oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5l Y3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB6eF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9 IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3Qg PSB6eF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSB6eF9oZG1pX2Nvbm5lY3Rv cl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwK KwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IHp4X2hkbWlfcmVn aXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHp4X2hkbWkgKmhkbWkpCit7CisJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmhkbWktPmVuY29kZXI7CisKKwllbmNvZGVy LT5wb3NzaWJsZV9jcnRjcyA9IFZPVV9DUlRDX01BU0s7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRy bSwgZW5jb2RlciwgJnp4X2hkbWlfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVS X1RNRFMsIE5VTEwpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnp4X2hkbWlf ZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJaGRtaS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9D T05ORUNUT1JfUE9MTF9IUEQ7CisKKwlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmaGRtaS0+Y29u bmVjdG9yLCAmenhfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNU T1JfSERNSUEpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmaGRtaS0+Y29ubmVjdG9yLAor CQkJCSAmenhfaGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWRybV9tb2RlX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2RlcigmaGRtaS0+Y29ubmVjdG9yLCBlbmNvZGVyKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgenhfaGRtaV9pcnFfdGhyZWFkKGludCBpcnEs IHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IGRldl9pZDsKKworCWRy bV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5jb25uZWN0b3IuZGV2KTsKKworCXJldHVybiBJ UlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHp4X2hkbWlfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gZGV2X2lk OworCXU4IGxzdGF0OworCisJbHN0YXQgPSBoZG1pX3JlYWRiKGhkbWksIEwxX0lOVFJfU1RBVCk7 CisKKwkvKiBNb25pdG9yIGRldGVjdC9IUEQgaW50ZXJydXB0ICovCisJaWYgKGxzdGF0ICYgTDFf SU5UUl9TVEFUX0lOVFIxKSB7CisJCXU4IHN0YXQ7CisKKwkJc3RhdCA9IGhkbWlfcmVhZGIoaGRt aSwgSU5UUjFfU1RBVCk7CisJCWhkbWlfd3JpdGViKGhkbWksIElOVFIxX1NUQVQsIHN0YXQpOwor CisJCWlmIChzdGF0ICYgSU5UUjFfTU9OSVRPUl9ERVRFQ1QpCisJCQlyZXR1cm4gSVJRX1dBS0Vf VEhSRUFEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGludCB6eF9oZG1p X2kyY19yZWFkKHN0cnVjdCB6eF9oZG1pICpoZG1pLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQorewor CWludCBsZW4gPSBtc2ctPmxlbjsKKwl1OCAqYnVmID0gbXNnLT5idWY7CisJaW50IHJldHJ5ID0g MDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEJpdHMgWzk6OF0gb2YgYnl0ZXMgKi8KKwloZG1pX3dy aXRlYihoZG1pLCBaWF9ERENfRElOX0NOVDIsIChsZW4gPj4gOCkgJiAweGZmKTsKKwkvKiBCaXRz IFs3OjBdIG9mIGJ5dGVzICovCisJaGRtaV93cml0ZWIoaGRtaSwgWlhfRERDX0RJTl9DTlQxLCBs ZW4gJiAweGZmKTsKKworCS8qIENsZWFyIEZJRk8gKi8KKwloZG1pX3dyaXRlYl9tYXNrKGhkbWks IFpYX0REQ19DTUQsIEREQ19DTURfTUFTSywgRERDX0NNRF9DTEVBUl9GSUZPKTsKKworCS8qIEtp Y2sgb2ZmIHRoZSByZWFkICovCisJaGRtaV93cml0ZWJfbWFzayhoZG1pLCBaWF9ERENfQ01ELCBE RENfQ01EX01BU0ssCisJCQkgRERDX0NNRF9TRVFVRU5USUFMX1JFQUQpOworCisJd2hpbGUgKGxl biA+IDApIHsKKwkJaW50IGNudCwgaTsKKworCQkvKiBGSUZPIG5lZWRzIHNvbWUgdGltZSB0byBn ZXQgcmVhZHkgKi8KKwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CisKKwkJY250ID0gaGRtaV9y ZWFkYihoZG1pLCBaWF9ERENfRE9VVF9DTlQpICYgRERDX0RPVVRfQ05UX01BU0s7CisJCWlmIChj bnQgPT0gMCkgeworCQkJaWYgKCsrcmV0cnkgPiA1KSB7CisJCQkJZGV2X2VycihoZG1pLT5kZXYs ICJEREMgRklGTyByZWFkIHRpbWVkIG91dCEiKTsKKwkJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJ CWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY250 OyBpKyspCisJCQkqYnVmKysgPSBoZG1pX3JlYWRiKGhkbWksIFpYX0REQ19EQVRBKTsKKwkJbGVu IC09IGNudDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHp4X2hkbWlfaTJj X3dyaXRlKHN0cnVjdCB6eF9oZG1pICpoZG1pLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCS8q CisJICogVGhlIEREQyBJMkMgYWRhcHRlciBpcyBvbmx5IGZvciByZWFkaW5nIEVESUQgZGF0YSwg c28gd2UgYXNzdW1lCisJICogdGhhdCB0aGUgd3JpdGUgdG8gdGhpcyBhZGFwdGVyIG11c3QgYmUg dGhlIEVESUQgZGF0YSBvZmZzZXQuCisJICovCisJaWYgKChtc2ctPmxlbiAhPSAxKSB8fAorCSAg ICAoKG1zZy0+YWRkciAhPSBERENfQUREUikgJiYgKG1zZy0+YWRkciAhPSBERENfU0VHTUVOVF9B RERSKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1zZy0+YWRkciA9PSBERENfU0VHTUVO VF9BRERSKQorCQloZG1pX3dyaXRlYihoZG1pLCBaWF9ERENfU0VHTSwgbXNnLT5hZGRyIDw8IDEp OworCWVsc2UgaWYgKG1zZy0+YWRkciA9PSBERENfQUREUikKKwkJaGRtaV93cml0ZWIoaGRtaSwg WlhfRERDX0FERFIsIG1zZy0+YWRkciA8PCAxKTsKKworCWhkbWlfd3JpdGViKGhkbWksIFpYX0RE Q19PRkZTRVQsIG1zZy0+YnVmWzBdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp4 X2hkbWlfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAq bXNncywKKwkJCSAgICBpbnQgbnVtKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gaTJjX2dl dF9hZGFwZGF0YShhZGFwKTsKKwlzdHJ1Y3QgenhfaGRtaV9pMmMgKmRkYyA9IGhkbWktPmRkYzsK KwlpbnQgaSwgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRkYy0+bG9jayk7CisKKwkvKiBFbmFi bGUgRERDIG1hc3RlciBhY2Nlc3MgKi8KKwloZG1pX3dyaXRlYl9tYXNrKGhkbWksIFRQSV9ERENf TUFTVEVSX0VOLCBIV19ERENfTUFTVEVSLCBIV19ERENfTUFTVEVSKTsKKworCWZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworCQlkZXZfZGJnKGhkbWktPmRldiwgInhmZXI6IG51bTogJWQvJWQs IGxlbjogJWQsIGZsYWdzOiAlI3hcbiIsCisJCQlpICsgMSwgbnVtLCBtc2dzW2ldLmxlbiwgbXNn c1tpXS5mbGFncyk7CisKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9 IHp4X2hkbWlfaTJjX3JlYWQoaGRtaSwgJm1zZ3NbaV0pOworCQllbHNlCisJCQlyZXQgPSB6eF9o ZG1pX2kyY193cml0ZShoZG1pLCAmbXNnc1tpXSk7CisKKwkJaWYgKHJldCA8IDApCisJCQlicmVh azsKKwl9CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gbnVtOworCisJLyogRGlzYWJsZSBEREMgbWFz dGVyIGFjY2VzcyAqLworCWhkbWlfd3JpdGViX21hc2soaGRtaSwgVFBJX0REQ19NQVNURVJfRU4s IEhXX0REQ19NQVNURVIsIDApOworCisJbXV0ZXhfdW5sb2NrKCZkZGMtPmxvY2spOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHUzMiB6eF9oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRh cHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNf RU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHp4X2hkbWlfYWxn b3JpdGhtID0geworCS5tYXN0ZXJfeGZlcgk9IHp4X2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9u YWxpdHkJPSB6eF9oZG1pX2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCB6eF9oZG1pX2RkY19y ZWdpc3RlcihzdHJ1Y3QgenhfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXA7CisJc3RydWN0IHp4X2hkbWlfaTJjICpkZGM7CisJaW50IHJldDsKKworCWRkYyA9IGRldm1f a3phbGxvYyhoZG1pLT5kZXYsIHNpemVvZigqZGRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZGMp CisJCXJldHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGRjID0gZGRjOworCW11dGV4X2luaXQoJmRk Yy0+bG9jayk7CisKKwlhZGFwID0gJmRkYy0+YWRhcDsKKwlhZGFwLT5vd25lciA9IFRISVNfTU9E VUxFOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX0REQzsKKwlhZGFwLT5kZXYucGFyZW50ID0g aGRtaS0+ZGV2OworCWFkYXAtPmFsZ28gPSAmenhfaGRtaV9hbGdvcml0aG07CisJc25wcmludGYo YWRhcC0+bmFtZSwgc2l6ZW9mKGFkYXAtPm5hbWUpLCAienggaGRtaSBpMmMiKTsKKworCXJldCA9 IGkyY19hZGRfYWRhcHRlcihhZGFwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2 LCAiZmFpbGVkIHRvIGFkZCBJMkMgYWRhcHRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCBoZG1pKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCB6eF9oZG1pX3BoeV9zdGFydChzdHJ1Y3QgenhfaGRtaSAqaGRtaSkKK3sK KwkvKiBDb3B5IGZyb20gWlRFIEJTUCBjb2RlICovCisJaGRtaV93cml0ZWIoaGRtaSwgMHgyMjIs IDB4MCk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHgyMjQsIDB4NCk7CisJaGRtaV93cml0ZWIoaGRt aSwgMHg5MDksIDB4MCk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YjAsIDB4OTApOworCWhkbWlf d3JpdGViKGhkbWksIDB4N2IxLCAweDAwKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMiwgMHhh Nyk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YjgsIDB4YWEpOworCWhkbWlfd3JpdGViKGhkbWks IDB4N2IyLCAweGE3KTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMywgMHgwZik7CisJaGRtaV93 cml0ZWIoaGRtaSwgMHg3YjQsIDB4MGYpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2I1LCAweDU1 KTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdiNywgMHgwMyk7CisJaGRtaV93cml0ZWIoaGRtaSwg MHg3YjksIDB4MTIpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2JhLCAweDMyKTsKKwloZG1pX3dy aXRlYihoZG1pLCAweDdiYywgMHg2OCk7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YmUsIDB4NDAp OworCWhkbWlfd3JpdGViKGhkbWksIDB4N2JmLCAweDg0KTsKKwloZG1pX3dyaXRlYihoZG1pLCAw eDdjMSwgMHgwZik7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3YzgsIDB4MDIpOworCWhkbWlfd3Jp dGViKGhkbWksIDB4N2M5LCAweDAzKTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdjYSwgMHg0MCk7 CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3ZGMsIDB4MzEpOworCWhkbWlfd3JpdGViKGhkbWksIDB4 N2UyLCAweDA0KTsKKwloZG1pX3dyaXRlYihoZG1pLCAweDdlMCwgMHgwNik7CisJaGRtaV93cml0 ZWIoaGRtaSwgMHg3Y2IsIDB4NjgpOworCWhkbWlfd3JpdGViKGhkbWksIDB4N2Y5LCAweDAyKTsK KwloZG1pX3dyaXRlYihoZG1pLCAweDdiNiwgMHgwMik7CisJaGRtaV93cml0ZWIoaGRtaSwgMHg3 ZjMsIDB4MCk7Cit9CisKK3N0YXRpYyB2b2lkIHp4X2hkbWlfaHdfaW5pdChzdHJ1Y3QgenhfaGRt aSAqaGRtaSkKK3sKKwkvKiBTb2Z0d2FyZSByZXNldCAqLworCWhkbWlfd3JpdGViKGhkbWksIFBX RF9TUlNULCAxKTsKKworCS8qIEVuYWJsZSBwY2xrICovCisJaGRtaV93cml0ZWJfbWFzayhoZG1p LCBDTEtQV0QsIENMS1BXRF9QRElEQ0ssIENMS1BXRF9QRElEQ0spOworCisJLyogRW5hYmxlIEhE TUkgZm9yIFRYICovCisJaGRtaV93cml0ZWJfbWFzayhoZG1pLCBGVU5DX1NFTCwgRlVOQ19IRE1J X0VOLCBGVU5DX0hETUlfRU4pOworCisJLyogRW5hYmxlIGRlZXAgY29sb3IgcGFja2V0ICovCisJ aGRtaV93cml0ZWJfbWFzayhoZG1pLCBQMlRfQ1RSTCwgUDJUX0RDX1BLVF9FTiwgUDJUX0RDX1BL VF9FTik7CisKKwkvKiBFbmFibGUgSERNSS9NSEwgbW9kZSBmb3Igb3V0cHV0ICovCisJaGRtaV93 cml0ZWJfbWFzayhoZG1pLCBURVNUX1RYQ1RSTCwgVEVTVF9UWENUUkxfSERNSV9NT0RFLAorCQkJ IFRFU1RfVFhDVFJMX0hETUlfTU9ERSk7CisKKwkvKiBDb25maWd1cmUgcmVnX3FjX3NlbCAqLwor CWhkbWlfd3JpdGViKGhkbWksIEhETUlDVEw0LCAweDMpOworCisJLyogRW5hYmxlIGludGVycnVw dCAqLworCWhkbWlfd3JpdGViX21hc2soaGRtaSwgSU5UUjFfTUFTSywgSU5UUjFfTU9OSVRPUl9E RVRFQ1QsCisJCQkgSU5UUjFfTU9OSVRPUl9ERVRFQ1QpOworCisJLyogQ2xlYXIgcmVzZXQgZm9y IG5vcm1hbCBvcGVyYXRpb24gKi8KKwloZG1pX3dyaXRlYihoZG1pLCBQV0RfU1JTVCwgMCk7CisK KwkvKiBTdGFydCB1cCBwaHkgKi8KKwl6eF9oZG1pX3BoeV9zdGFydChoZG1pKTsKK30KKworc3Rh dGljIGludCB6eF9oZG1pX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt YXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRv X3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOwor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCB6eF9oZG1pICpoZG1pOworCWludCBpcnE7 CisJaW50IHJldDsKKworCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGV2 ID0gZGV2OworCWhkbWktPmRybSA9IGRybTsKKwloZG1pLT5pbmYgPSAmdm91X2luZl9oZG1pOwor CisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGRtaSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhkbWktPm1taW8gPSBkZXZtX2lvcmVt YXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoaGRtaS0+bW1pbykpIHsKKwkJcmV0 ID0gUFRSX0VSUihoZG1pLT5tbWlvKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVtYXAg aGRtaSByZWdpb246ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisK KwloZG1pLT5jZWNfY2xrID0gZGV2bV9jbGtfZ2V0KGhkbWktPmRldiwgIm9zY19jZWMiKTsKKwlp ZiAoSVNfRVJSKGhkbWktPmNlY19jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+Y2VjX2Ns ayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjZWNfY2xrOiAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pLT5vc2NfY2xrID0gZGV2bV9jbGtfZ2V0KGhkbWkt PmRldiwgIm9zY19jbGsiKTsKKwlpZiAoSVNfRVJSKGhkbWktPm9zY19jbGspKSB7CisJCXJldCA9 IFBUUl9FUlIoaGRtaS0+b3NjX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBv c2NfY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pLT54Y2xrID0g ZGV2bV9jbGtfZ2V0KGhkbWktPmRldiwgInhjbGsiKTsKKwlpZiAoSVNfRVJSKGhkbWktPnhjbGsp KSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+eGNsayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGdldCB4Y2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl6eF9oZG1p X2h3X2luaXQoaGRtaSk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2VjX2Ns ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgY2VjX2Ns azogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGhkbWktPm9zY19jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZW5hYmxlIG9zY19jbGs6ICVkXG4iLCByZXQpOworCQlnb3RvIGRpc2FibGVfY2VjX2Ns azsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+eGNsayk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgeGNsazogJWRcbiIsIHJldCk7 CisJCWdvdG8gZGlzYWJsZV9vc2NfY2xrOworCX0KKworCisJcmV0ID0genhfaGRtaV9kZGNfcmVn aXN0ZXIoaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdp c3RlciBkZGM6ICVkXG4iLCByZXQpOworCQlnb3RvIGRpc2FibGVfeGNsazsKKwl9CisKKwlyZXQg PSB6eF9oZG1pX3JlZ2lzdGVyKGRybSwgaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byByZWdpc3RlciBoZG1pOiAlZFxuIiwgcmV0KTsKKwkJZ290byBkaXNhYmxl X3hjbGs7CisJfQorCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGlycSwg enhfaGRtaV9pcnFfaGFuZGxlciwKKwkJCQkJenhfaGRtaV9pcnFfdGhyZWFkLCBJUlFGX1NIQVJF RCwKKwkJCQkJZGV2X25hbWUoZGV2KSwgaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byByZXF1ZXN0IHRocmVhZGVkIGlycTogJWRcbiIsIHJldCk7CisJCWdvdG8g ZGlzYWJsZV94Y2xrOworCX0KKworCXJldHVybiAwOworCitkaXNhYmxlX3hjbGs6CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGhkbWktPnhjbGspOworZGlzYWJsZV9vc2NfY2xrOgorCWNsa19kaXNh YmxlX3VucHJlcGFyZShoZG1pLT5vc2NfY2xrKTsKK2Rpc2FibGVfY2VjX2NsazoKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaGRtaS0+Y2VjX2Nsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgenhfaGRtaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt YXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+eGNsayk7 CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPm9zY19jbGspOworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShoZG1pLT5jZWNfY2xrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25l bnRfb3BzIHp4X2hkbWlfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IHp4X2hkbWlfYmluZCwK KwkudW5iaW5kID0genhfaGRtaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IHp4X2hkbWlfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gY29tcG9uZW50X2Fk ZCgmcGRldi0+ZGV2LCAmenhfaGRtaV9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGludCB6 eF9oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVu dF9kZWwoJnBkZXYtPmRldiwgJnp4X2hkbWlfY29tcG9uZW50X29wcyk7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp4X2hkbWlfb2ZfbWF0Y2hbXSA9 IHsKKwl7IC5jb21wYXRpYmxlID0gInp0ZSx6eDI5NjcxOC1oZG1pIiwgfSwKKwl7IC8qIGVuZCAq LyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHp4X2hkbWlfb2ZfbWF0Y2gpOworCitz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHp4X2hkbWlfZHJpdmVyID0geworCS5wcm9iZSA9IHp4X2hk bWlfcHJvYmUsCisJLnJlbW92ZSA9IHp4X2hkbWlfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5u YW1lID0gInp4LWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSB6eF9oZG1pX29mX21hdGNoLAor CX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jIGIvZHJp dmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uZmRhYjE3MTViZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3p0ZS96eF9wbGFuZS5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IDIw MTYgTGluYXJvIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCisjaW5jbHVkZSAienhf ZHJtX2Rydi5oIgorI2luY2x1ZGUgInp4X3BsYW5lLmgiCisjaW5jbHVkZSAienhfdm91LmgiCisK Ky8qIEdMIHJlZ2lzdGVycyAqLworI2RlZmluZSBHTF9DVFJMMAkJCTB4MDAKKyNkZWZpbmUgR0xf VVBEQVRFCQkJQklUKDUpCisjZGVmaW5lIEdMX0NUUkwxCQkJMHgwNAorI2RlZmluZSBHTF9EQVRB X0ZNVF9TSElGVAkJMAorI2RlZmluZSBHTF9EQVRBX0ZNVF9NQVNLCQkoMHhmIDw8IEdMX0RBVEFf Rk1UX1NISUZUKQorI2RlZmluZSBHTF9GTVRfQVJHQjg4ODgJCQkwCisjZGVmaW5lIEdMX0ZNVF9S R0I4ODgJCQkxCisjZGVmaW5lIEdMX0ZNVF9SR0I1NjUJCQkyCisjZGVmaW5lIEdMX0ZNVF9BUkdC MTU1NQkJCTMKKyNkZWZpbmUgR0xfRk1UX0FSR0I0NDQ0CQkJNAorI2RlZmluZSBHTF9DVFJMMgkJ CTB4MDgKKyNkZWZpbmUgR0xfR0xPQkFMX0FMUEhBX1NISUZUCQk4CisjZGVmaW5lIEdMX0dMT0JB TF9BTFBIQV9NQVNLCQkoMHhmZiA8PCBHTF9HTE9CQUxfQUxQSEFfU0hJRlQpCisjZGVmaW5lIEdM X0NUUkwzCQkJMHgwYworI2RlZmluZSBHTF9TQ0FMRVJfQllQQVNTX01PREUJCUJJVCgwKQorI2Rl ZmluZSBHTF9TVFJJREUJCQkweDE4CisjZGVmaW5lIEdMX0FERFIJCQkJMHgxYworI2RlZmluZSBH TF9TUkNfU0laRQkJCTB4MzgKKyNkZWZpbmUgR0xfU1JDX1dfU0hJRlQJCQkxNgorI2RlZmluZSBH TF9TUkNfV19NQVNLCQkJKDB4M2ZmZiA8PCBHTF9TUkNfV19TSElGVCkKKyNkZWZpbmUgR0xfU1JD X0hfU0hJRlQJCQkwCisjZGVmaW5lIEdMX1NSQ19IX01BU0sJCQkoMHgzZmZmIDw8IEdMX1NSQ19I X1NISUZUKQorI2RlZmluZSBHTF9QT1NfU1RBUlQJCQkweDljCisjZGVmaW5lIEdMX1BPU19FTkQJ CQkweGEwCisjZGVmaW5lIEdMX1BPU19YX1NISUZUCQkJMTYKKyNkZWZpbmUgR0xfUE9TX1hfTUFT SwkJCSgweDFmZmYgPDwgR0xfUE9TX1hfU0hJRlQpCisjZGVmaW5lIEdMX1BPU19ZX1NISUZUCQkJ MAorI2RlZmluZSBHTF9QT1NfWV9NQVNLCQkJKDB4MWZmZiA8PCBHTF9QT1NfWV9TSElGVCkKKwor I2RlZmluZSBHTF9TUkNfVyh4KQkoKCh4KSA8PCBHTF9TUkNfV19TSElGVCkgJiBHTF9TUkNfV19N QVNLKQorI2RlZmluZSBHTF9TUkNfSCh4KQkoKCh4KSA8PCBHTF9TUkNfSF9TSElGVCkgJiBHTF9T UkNfSF9NQVNLKQorI2RlZmluZSBHTF9QT1NfWCh4KQkoKCh4KSA8PCBHTF9QT1NfWF9TSElGVCkg JiBHTF9QT1NfWF9NQVNLKQorI2RlZmluZSBHTF9QT1NfWSh4KQkoKCh4KSA8PCBHTF9QT1NfWV9T SElGVCkgJiBHTF9QT1NfWV9NQVNLKQorCisvKiBDU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIENT Q19DVFJMMAkJCTB4MzAKKyNkZWZpbmUgQ1NDX0NPVl9NT0RFX1NISUZUCQkxNgorI2RlZmluZSBD U0NfQ09WX01PREVfTUFTSwkJKDB4ZmZmZiA8PCBDU0NfQ09WX01PREVfU0hJRlQpCisjZGVmaW5l IENTQ19CVDYwMV9JTUFHRV9SR0IyWUNCQ1IJMAorI2RlZmluZSBDU0NfQlQ2MDFfSU1BR0VfWUNC Q1IyUkdCCTEKKyNkZWZpbmUgQ1NDX0JUNjAxX1ZJREVPX1JHQjJZQ0JDUgkyCisjZGVmaW5lIENT Q19CVDYwMV9WSURFT19ZQ0JDUjJSR0IJMworI2RlZmluZSBDU0NfQlQ3MDlfSU1BR0VfUkdCMllD QkNSCTQKKyNkZWZpbmUgQ1NDX0JUNzA5X0lNQUdFX1lDQkNSMlJHQgk1CisjZGVmaW5lIENTQ19C VDcwOV9WSURFT19SR0IyWUNCQ1IJNgorI2RlZmluZSBDU0NfQlQ3MDlfVklERU9fWUNCQ1IyUkdC CTcKKyNkZWZpbmUgQ1NDX0JUMjAyMF9JTUFHRV9SR0IyWUNCQ1IJOAorI2RlZmluZSBDU0NfQlQy MDIwX0lNQUdFX1lDQkNSMlJHQgk5CisjZGVmaW5lIENTQ19CVDIwMjBfVklERU9fUkdCMllDQkNS CTEwCisjZGVmaW5lIENTQ19CVDIwMjBfVklERU9fWUNCQ1IyUkdCCTExCisjZGVmaW5lIENTQ19X T1JLX0VOQUJMRQkJCUJJVCgwKQorCisvKiBSU1ogcmVnaXN0ZXJzICovCisjZGVmaW5lIFJTWl9T UkNfQ0ZHCQkJMHgwMAorI2RlZmluZSBSU1pfREVTVF9DRkcJCQkweDA0CisjZGVmaW5lIFJTWl9F TkFCTEVfQ0ZHCQkJMHgxNAorCisjZGVmaW5lIFJTWl9WRVJfU0hJRlQJCQkxNgorI2RlZmluZSBS U1pfVkVSX01BU0sJCQkoMHhmZmZmIDw8IFJTWl9WRVJfU0hJRlQpCisjZGVmaW5lIFJTWl9IT1Jf U0hJRlQJCQkwCisjZGVmaW5lIFJTWl9IT1JfTUFTSwkJCSgweGZmZmYgPDwgUlNaX0hPUl9TSElG VCkKKworI2RlZmluZSBSU1pfVkVSKHgpCSgoKHgpIDw8IFJTWl9WRVJfU0hJRlQpICYgUlNaX1ZF Ul9NQVNLKQorI2RlZmluZSBSU1pfSE9SKHgpCSgoKHgpIDw8IFJTWl9IT1JfU0hJRlQpICYgUlNa X0hPUl9NQVNLKQorCisvKiBIQlNDIHJlZ2lzdGVycyAqLworI2RlZmluZSBIQlNDX1NBVFVSQVRJ T04JCQkweDAwCisjZGVmaW5lIEhCU0NfSFVFCQkJMHgwNAorI2RlZmluZSBIQlNDX0JSSUdIVAkJ CTB4MDgKKyNkZWZpbmUgSEJTQ19DT05UUkFTVAkJCTB4MGMKKyNkZWZpbmUgSEJTQ19USFJFU0hP TERfQ09MMQkJMHgxMAorI2RlZmluZSBIQlNDX1RIUkVTSE9MRF9DT0wyCQkweDE0CisjZGVmaW5l IEhCU0NfVEhSRVNIT0xEX0NPTDMJCTB4MTgKKyNkZWZpbmUgSEJTQ19DVFJMMAkJCTB4MjgKKyNk ZWZpbmUgSEJTQ19DVFJMX0VOCQkJQklUKDIpCisKK3N0cnVjdCB6eF9wbGFuZSB7CisJc3RydWN0 IGRybV9wbGFuZSBwbGFuZTsKKwl2b2lkIF9faW9tZW0gKmxheWVyOworCXZvaWQgX19pb21lbSAq Y3NjOworCXZvaWQgX19pb21lbSAqaGJzYzsKKwl2b2lkIF9faW9tZW0gKnJzejsKK307CisKKyNk ZWZpbmUgdG9fenhfcGxhbmUocGxhbmUpCWNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IHp4X3Bs YW5lLCBwbGFuZSkKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdsX2Zvcm1hdHNbXSA9IHsKKwlE Uk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9S R0I4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9BUkdCMTU1NSwKKwlEUk1f Rk9STUFUX0FSR0I0NDQ0LAorfTsKKworc3RhdGljIGludCB6eF9nbF9wbGFuZV9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmZiOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBsYW5lX3N0YXRlLT5jcnRjOwor CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xp cDsKKworCWlmICghY3J0YyB8fCAhZmIpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAorCQkJ CQkJCWNydGMpOworCWlmIChXQVJOX09OKCFjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwkvKiBwbGFuZSBtdXN0IG1hdGNoIGNydGMgZW5hYmxlIHN0YXRlICovCisJaWYgKGNydGNf c3RhdGUtPmVuYWJsZSAhPSAhIXBsYW5lX3N0YXRlLT5jcnRjKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCS8qIG5vdGhpbmcgdG8gY2hlY2sgd2hlbiBkaXNhYmxpbmcgb3IgZGlzYWJsZWQgKi8KKwlp ZiAoIWNydGNfc3RhdGUtPmVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwljbGlwLngxID0gMDsKKwlj bGlwLnkxID0gMDsKKwljbGlwLngyID0gY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlzcGxh eTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxheTsKKworCXJl dHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3N0YXRlKHBsYW5lX3N0YXRlLCAmY2xpcCwKKwkJ CQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9I RUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIGlu dCB6eF9nbF9nZXRfZm10KHVpbnQzMl90IGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgewor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJ CXJldHVybiBHTF9GTVRfQVJHQjg4ODg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0 dXJuIEdMX0ZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIEdM X0ZNVF9SR0I1NjU7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCQlyZXR1cm4gR0xfRk1U X0FSR0IxNTU1OworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKKwkJcmV0dXJuIEdMX0ZNVF9B UkdCNDQ0NDsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgcGl4ZWwgZm9ybWF0 ICVkXG4iLCBmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB6eF9nbF9zZXRfdXBkYXRlKHN0cnVjdCB6eF9wbGFuZSAqenBsYW5lKQoreworCXZv aWQgX19pb21lbSAqbGF5ZXIgPSB6cGxhbmUtPmxheWVyOworCisJenhfd3JpdGVsX21hc2sobGF5 ZXIgKyBHTF9DVFJMMCwgR0xfVVBEQVRFLCBHTF9VUERBVEUpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgenhfZ2xfcnN6X3NldF91cGRhdGUoc3RydWN0IHp4X3BsYW5lICp6cGxhbmUpCit7CisJ enhfd3JpdGVsKHpwbGFuZS0+cnN6ICsgUlNaX0VOQUJMRV9DRkcsIDEpOworfQorCit2b2lkIHp4 X3BsYW5lX3NldF91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IHp4 X3BsYW5lICp6cGxhbmUgPSB0b196eF9wbGFuZShwbGFuZSk7CisKKwl6eF9nbF9yc3pfc2V0X3Vw ZGF0ZSh6cGxhbmUpOworCXp4X2dsX3NldF91cGRhdGUoenBsYW5lKTsKK30KKworc3RhdGljIHZv aWQgenhfZ2xfcnN6X3NldHVwKHN0cnVjdCB6eF9wbGFuZSAqenBsYW5lLCB1MzIgc3JjX3csIHUz MiBzcmNfaCwKKwkJCSAgICB1MzIgZHN0X3csIHUzMiBkc3RfaCkKK3sKKwl2b2lkIF9faW9tZW0g KnJzeiA9IHpwbGFuZS0+cnN6OworCisJenhfd3JpdGVsKHJzeiArIFJTWl9TUkNfQ0ZHLCBSU1pf VkVSKHNyY19oIC0gMSkgfCBSU1pfSE9SKHNyY193IC0gMSkpOworCXp4X3dyaXRlbChyc3ogKyBS U1pfREVTVF9DRkcsIFJTWl9WRVIoZHN0X2ggLSAxKSB8IFJTWl9IT1IoZHN0X3cgLSAxKSk7CisK Kwl6eF9nbF9yc3pfc2V0X3VwZGF0ZSh6cGxhbmUpOworfQorCitzdGF0aWMgdm9pZCB6eF9nbF9w bGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgIHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgenhfcGxhbmUgKnpw bGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lLT5zdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsK Kwl2b2lkIF9faW9tZW0gKmxheWVyID0genBsYW5lLT5sYXllcjsKKwl2b2lkIF9faW9tZW0gKmNz YyA9IHpwbGFuZS0+Y3NjOworCXZvaWQgX19pb21lbSAqaGJzYyA9IHpwbGFuZS0+aGJzYzsKKwl1 MzIgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7CisJdTMyIGRzdF94LCBkc3RfeSwgZHN0X3cs IGRzdF9oOworCXVuc2lnbmVkIGludCBkZXB0aCwgYnBwOworCXVpbnQzMl90IGZvcm1hdDsKKwlk bWFfYWRkcl90IHBhZGRyOworCXUzMiBzdHJpZGU7CisJaW50IGZtdDsKKworCWlmICghZmIpCisJ CXJldHVybjsKKworCWZvcm1hdCA9IGZiLT5waXhlbF9mb3JtYXQ7CisJc3RyaWRlID0gZmItPnBp dGNoZXNbMF07CisKKwlzcmNfeCA9IHBsYW5lLT5zdGF0ZS0+c3JjX3ggPj4gMTY7CisJc3JjX3kg PSBwbGFuZS0+c3RhdGUtPnNyY195ID4+IDE2OworCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNf dyA+PiAxNjsKKwlzcmNfaCA9IHBsYW5lLT5zdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwlkc3RfeCA9 IHBsYW5lLT5zdGF0ZS0+Y3J0Y194OworCWRzdF95ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisJ ZHN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKKwlkc3RfaCA9IHBsYW5lLT5zdGF0ZS0+Y3J0 Y19oOworCisJZHJtX2ZiX2dldF9icHBfZGVwdGgoZm9ybWF0LCAmZGVwdGgsICZicHApOworCisJ Y21hX29iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOworCXBhZGRyID0gY21hX29i ai0+cGFkZHIgKyBmYi0+b2Zmc2V0c1swXTsKKwlwYWRkciArPSBzcmNfeSAqIHN0cmlkZSArIHNy Y194ICogYnBwIC8gODsKKwl6eF93cml0ZWwobGF5ZXIgKyBHTF9BRERSLCBwYWRkcik7CisKKwkv KiBTZXQgdXAgc291cmNlIGhlaWdodC93aWR0aCByZWdpc3RlciAqLworCXp4X3dyaXRlbChsYXll ciArIEdMX1NSQ19TSVpFLCBHTF9TUkNfVyhzcmNfdykgfCBHTF9TUkNfSChzcmNfaCkpOworCisJ LyogU2V0IHVwIHN0YXJ0IHBvc2l0aW9uIHJlZ2lzdGVyICovCisJenhfd3JpdGVsKGxheWVyICsg R0xfUE9TX1NUQVJULCBHTF9QT1NfWChkc3RfeCkgfCBHTF9QT1NfWShkc3RfeSkpOworCisJLyog U2V0IHVwIGVuZCBwb3NpdGlvbiByZWdpc3RlciAqLworCXp4X3dyaXRlbChsYXllciArIEdMX1BP U19FTkQsCisJCSAgR0xfUE9TX1goZHN0X3ggKyBkc3RfdykgfCBHTF9QT1NfWShkc3RfeSArIGRz dF9oKSk7CisKKwkvKiBTZXQgdXAgc3RyaWRlIHJlZ2lzdGVyICovCisJenhfd3JpdGVsKGxheWVy ICsgR0xfU1RSSURFLCBzdHJpZGUgJiAweGZmZmYpOworCisJLyogU2V0IHVwIGdyYXBoaWMgbGF5 ZXIgZGF0YSBmb3JtYXQgKi8KKwlmbXQgPSB6eF9nbF9nZXRfZm10KGZvcm1hdCk7CisJaWYgKGZt dCA+PSAwKQorCQl6eF93cml0ZWxfbWFzayhsYXllciArIEdMX0NUUkwxLCBHTF9EQVRBX0ZNVF9N QVNLLAorCQkJICAgICAgIGZtdCA8PCBHTF9EQVRBX0ZNVF9TSElGVCk7CisKKwkvKiBJbml0aWFs aXplIGdsb2JhbCBhbHBoYSB3aXRoIGEgc2FuZSB2YWx1ZSAqLworCXp4X3dyaXRlbF9tYXNrKGxh eWVyICsgR0xfQ1RSTDIsIEdMX0dMT0JBTF9BTFBIQV9NQVNLLAorCQkgICAgICAgMHhmZiA8PCBH TF9HTE9CQUxfQUxQSEFfU0hJRlQpOworCisJLyogU2V0dXAgQ1NDIGZvciB0aGUgR0wgKi8KKwlp ZiAoZHN0X2ggPiA3MjApCisJCXp4X3dyaXRlbF9tYXNrKGNzYyArIENTQ19DVFJMMCwgQ1NDX0NP Vl9NT0RFX01BU0ssCisJCQkgICAgICAgQ1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUiA8PCBDU0Nf Q09WX01PREVfU0hJRlQpOworCWVsc2UKKwkJenhfd3JpdGVsX21hc2soY3NjICsgQ1NDX0NUUkww LCBDU0NfQ09WX01PREVfTUFTSywKKwkJCSAgICAgICBDU0NfQlQ2MDFfSU1BR0VfUkdCMllDQkNS IDw8IENTQ19DT1ZfTU9ERV9TSElGVCk7CisJenhfd3JpdGVsX21hc2soY3NjICsgQ1NDX0NUUkww LCBDU0NfV09SS19FTkFCTEUsIENTQ19XT1JLX0VOQUJMRSk7CisKKwkvKiBBbHdheXMgdXNlIHNj YWxlciBzaW5jZSBpdCBleGlzdHMgKHNldCBmb3Igbm90IGJ5cGFzcykgKi8KKwl6eF93cml0ZWxf bWFzayhsYXllciArIEdMX0NUUkwzLCBHTF9TQ0FMRVJfQllQQVNTX01PREUsCisJCSAgICAgICBH TF9TQ0FMRVJfQllQQVNTX01PREUpOworCisJenhfZ2xfcnN6X3NldHVwKHpwbGFuZSwgc3JjX3cs IHNyY19oLCBkc3RfdywgZHN0X2gpOworCisJLyogRW5hYmxlIEhCU0MgYmxvY2sgKi8KKwl6eF93 cml0ZWxfbWFzayhoYnNjICsgSEJTQ19DVFJMMCwgSEJTQ19DVFJMX0VOLCBIQlNDX0NUUkxfRU4p OworCisJenhfZ2xfc2V0X3VwZGF0ZSh6cGxhbmUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgenhfZ2xfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5h dG9taWNfY2hlY2sgPSB6eF9nbF9wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUg PSB6eF9nbF9wbGFuZV9hdG9taWNfdXBkYXRlLAorfTsKKworc3RhdGljIHZvaWQgenhfcGxhbmVf ZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlkcm1fcGxhbmVfaGVscGVyX2Rp c2FibGUocGxhbmUpOworCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgenhfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9w bGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9 IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSB6eF9wbGFuZV9k ZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0 YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rl c3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgdm9pZCB6eF9wbGFuZV9oYnNjX2luaXQoc3RydWN0 IHp4X3BsYW5lICp6cGxhbmUpCit7CisJdm9pZCBfX2lvbWVtICpoYnNjID0genBsYW5lLT5oYnNj OworCisJLyoKKwkgKiAgSW5pdGlhbGl6ZSBIQlNDIGJsb2NrIHdpdGggYSBzYW5lIGNvbmZpZ3Vy YXRpb24gcGVyIHJlY29tbWVkYXRpb24KKwkgKiAgZnJvbSBaVEUgQlNQIGNvZGUuCisJICovCisJ enhfd3JpdGVsKGhic2MgKyBIQlNDX1NBVFVSQVRJT04sIDB4MjAwKTsKKwl6eF93cml0ZWwoaGJz YyArIEhCU0NfSFVFLCAweDApOworCXp4X3dyaXRlbChoYnNjICsgSEJTQ19CUklHSFQsIDB4MCk7 CisJenhfd3JpdGVsKGhic2MgKyBIQlNDX0NPTlRSQVNULCAweDIwMCk7CisKKwl6eF93cml0ZWwo aGJzYyArIEhCU0NfVEhSRVNIT0xEX0NPTDEsICgweDNhYyA8PCAxNikgfCAweDQwKTsKKwl6eF93 cml0ZWwoaGJzYyArIEhCU0NfVEhSRVNIT0xEX0NPTDIsICgweDNjMCA8PCAxNikgfCAweDQwKTsK Kwl6eF93cml0ZWwoaGJzYyArIEhCU0NfVEhSRVNIT0xEX0NPTDMsICgweDNjMCA8PCAxNikgfCAw eDQwKTsKK30KKworc3RydWN0IGRybV9wbGFuZSAqenhfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHp4X2xheWVyX2RhdGEg KmRhdGEsCisJCQkJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKQoreworCWNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfaGVscGVyX2Z1bmNzICpoZWxwZXI7CisJc3RydWN0IHp4X3BsYW5lICp6cGxhbmU7 CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJY29uc3QgdWludDMyX3QgKmZvcm1hdHM7CisJ dW5zaWduZWQgaW50IGZvcm1hdF9jb3VudDsKKwlpbnQgcmV0OworCisJenBsYW5lID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCp6cGxhbmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpwbGFuZSkK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwbGFuZSA9ICZ6cGxhbmUtPnBsYW5lOwor CisJenBsYW5lLT5sYXllciA9IGRhdGEtPmxheWVyOworCXpwbGFuZS0+aGJzYyA9IGRhdGEtPmhi c2M7CisJenBsYW5lLT5jc2MgPSBkYXRhLT5jc2M7CisJenBsYW5lLT5yc3ogPSBkYXRhLT5yc3o7 CisKKwl6eF9wbGFuZV9oYnNjX2luaXQoenBsYW5lKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNh c2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToKKwkJaGVscGVyID0gJnp4X2dsX3BsYW5lX2hlbHBl cl9mdW5jczsKKwkJZm9ybWF0cyA9IGdsX2Zvcm1hdHM7CisJCWZvcm1hdF9jb3VudCA9IEFSUkFZ X1NJWkUoZ2xfZm9ybWF0cyk7CisJCWJyZWFrOworCWNhc2UgRFJNX1BMQU5FX1RZUEVfT1ZFUkxB WToKKwkJLyogVE9ETzogYWRkIHZpZGVvIGxheWVyICh2bCkgc3VwcG9ydCAqLworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwl9CisKKwlyZXQgPSBkcm1f dW5pdmVyc2FsX3BsYW5lX2luaXQoZHJtLCBwbGFuZSwgVk9VX0NSVENfTUFTSywKKwkJCQkgICAg ICAgJnp4X3BsYW5lX2Z1bmNzLCBmb3JtYXRzLCBmb3JtYXRfY291bnQsCisJCQkJICAgICAgIHR5 cGUsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCB1 bml2ZXJzYWwgcGxhbmU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0K KworCWRybV9wbGFuZV9oZWxwZXJfYWRkKHBsYW5lLCBoZWxwZXIpOworCisJcmV0dXJuIHBsYW5l OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oIGIvZHJpdmVy cy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uMmI4MmNkNTU4ZDlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3p0ZS96eF9wbGFuZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNiBM aW5hcm8gTHRkLgorICogQ29weXJpZ2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19aWF9QTEFORV9IX18KKyNkZWZpbmUg X19aWF9QTEFORV9IX18KKworc3RydWN0IHp4X2xheWVyX2RhdGEgeworCXZvaWQgX19pb21lbSAq bGF5ZXI7CisJdm9pZCBfX2lvbWVtICpjc2M7CisJdm9pZCBfX2lvbWVtICpoYnNjOworCXZvaWQg X19pb21lbSAqcnN6OworfTsKKworc3RydWN0IGRybV9wbGFuZSAqenhfcGxhbmVfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHp4X2xh eWVyX2RhdGEgKmRhdGEsCisJCQkJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsKK3ZvaWQgenhf cGxhbmVfc2V0X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7CisKKyNlbmRpZiAvKiBf X1pYX1BMQU5FX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3Uu YyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi42NzZjNzUwZDYwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0venRlL3p4X3ZvdS5jCkBAIC0wLDAgKzEsNzk5IEBACisvKgorICogQ29weXJpZ2h0 IDIwMTYgTGluYXJvIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5o PgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJ6eF9kcm1fZHJ2 LmgiCisjaW5jbHVkZSAienhfcGxhbmUuaCIKKyNpbmNsdWRlICJ6eF92b3UuaCIKKworLyogU3Vi LW1vZHVsZSBvZmZzZXQgKi8KKyNkZWZpbmUgTUFJTl9HTF9PRkZTRVQJCQkweDEzMAorI2RlZmlu ZSBNQUlOX0NTQ19PRkZTRVQJCQkweDU4MAorI2RlZmluZSBNQUlOX0hCU0NfT0ZGU0VUCQkweDgy MAorI2RlZmluZSBNQUlOX1JTWl9PRkZTRVQJCQkweDYwMCAvKiBPVEZQUFUgc3ViLW1vZHVsZSAq LworCisjZGVmaW5lIEFVWF9HTF9PRkZTRVQJCQkweDIwMAorI2RlZmluZSBBVVhfQ1NDX09GRlNF VAkJCTB4NWQwCisjZGVmaW5lIEFVWF9IQlNDX09GRlNFVAkJCTB4ODYwCisjZGVmaW5lIEFVWF9S U1pfT0ZGU0VUCQkJMHg4MDAKKworLyogT1NEIChHUENfR0xPQkFMKSByZWdpc3RlcnMgKi8KKyNk ZWZpbmUgT1NEX0lOVF9TVEEJCQkweDA0CisjZGVmaW5lIE9TRF9JTlRfQ0xSU1RBCQkJMHgwOAor I2RlZmluZSBPU0RfSU5UX01TSwkJCTB4MGMKKyNkZWZpbmUgT1NEX0lOVF9BVVhfVVBUCQkJQklU KDE0KQorI2RlZmluZSBPU0RfSU5UX01BSU5fVVBUCQlCSVQoMTMpCisjZGVmaW5lIE9TRF9JTlRf R0wxX0xCVwkJCUJJVCgxMCkKKyNkZWZpbmUgT1NEX0lOVF9HTDBfTEJXCQkJQklUKDkpCisjZGVm aW5lIE9TRF9JTlRfVkwyX0xCVwkJCUJJVCg4KQorI2RlZmluZSBPU0RfSU5UX1ZMMV9MQlcJCQlC SVQoNykKKyNkZWZpbmUgT1NEX0lOVF9WTDBfTEJXCQkJQklUKDYpCisjZGVmaW5lIE9TRF9JTlRf QlVTX0VSUgkJCUJJVCgzKQorI2RlZmluZSBPU0RfSU5UX0NGR19FUlIJCQlCSVQoMikKKyNkZWZp bmUgT1NEX0lOVF9FUlJPUiAoXAorCU9TRF9JTlRfR0wxX0xCVyB8IE9TRF9JTlRfR0wwX0xCVyB8 IFwKKwlPU0RfSU5UX1ZMMl9MQlcgfCBPU0RfSU5UX1ZMMV9MQlcgfCBPU0RfSU5UX1ZMMF9MQlcg fCBcCisJT1NEX0lOVF9CVVNfRVJSIHwgT1NEX0lOVF9DRkdfRVJSIFwKKykKKyNkZWZpbmUgT1NE X0lOVF9FTkFCTEUgKE9TRF9JTlRfRVJST1IgfCBPU0RfSU5UX0FVWF9VUFQgfCBPU0RfSU5UX01B SU5fVVBUKQorI2RlZmluZSBPU0RfQ1RSTDAJCQkweDEwCisjZGVmaW5lIE9TRF9DVFJMMF9HTDBf RU4JCUJJVCg3KQorI2RlZmluZSBPU0RfQ1RSTDBfR0wwX1NFTAkJQklUKDYpCisjZGVmaW5lIE9T RF9DVFJMMF9HTDFfRU4JCUJJVCg1KQorI2RlZmluZSBPU0RfQ1RSTDBfR0wxX1NFTAkJQklUKDQp CisjZGVmaW5lIE9TRF9SU1RfQ0xSCQkJMHgxYworI2RlZmluZSBSU1RfUEVSX0ZSQU1FCQkJQklU KDE5KQorCisvKiBNYWluL0F1eCBjaGFubmVsIHJlZ2lzdGVycyAqLworI2RlZmluZSBPU0RfTUFJ Tl9DSE4JCQkweDQ3MAorI2RlZmluZSBPU0RfQVVYX0NITgkJCTB4NGQwCisjZGVmaW5lIENITl9D VFJMMAkJCTB4MDAKKyNkZWZpbmUgQ0hOX0VOQUJMRQkJCUJJVCgwKQorI2RlZmluZSBDSE5fQ1RS TDEJCQkweDA0CisjZGVmaW5lIENITl9TQ1JFRU5fV19TSElGVAkJMTgKKyNkZWZpbmUgQ0hOX1ND UkVFTl9XX01BU0sJCSgweDFmZmYgPDwgQ0hOX1NDUkVFTl9XX1NISUZUKQorI2RlZmluZSBDSE5f U0NSRUVOX0hfU0hJRlQJCTUKKyNkZWZpbmUgQ0hOX1NDUkVFTl9IX01BU0sJCSgweDFmZmYgPDwg Q0hOX1NDUkVFTl9IX1NISUZUKQorI2RlZmluZSBDSE5fVVBEQVRFCQkJMHgwOAorCisvKiBUSU1J TkdfQ1RSTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVElNSU5HX1RDX0VOQUJMRQkJMHgwNAorI2Rl ZmluZSBBVVhfVENfRU4JCQlCSVQoMSkKKyNkZWZpbmUgTUFJTl9UQ19FTgkJCUJJVCgwKQorI2Rl ZmluZSBGSVJfTUFJTl9BQ1RJVkUJCQkweDA4CisjZGVmaW5lIEZJUl9BVVhfQUNUSVZFCQkJMHgw YworI2RlZmluZSBWX0FDVElWRV9TSElGVAkJCTE2CisjZGVmaW5lIFZfQUNUSVZFX01BU0sJCQko MHhmZmZmIDw8IFZfQUNUSVZFX1NISUZUKQorI2RlZmluZSBIX0FDVElWRV9TSElGVAkJCTAKKyNk ZWZpbmUgSF9BQ1RJVkVfTUFTSwkJCSgweGZmZmYgPDwgSF9BQ1RJVkVfU0hJRlQpCisjZGVmaW5l IEZJUl9NQUlOX0hfVElNSU5HCQkweDEwCisjZGVmaW5lIEZJUl9NQUlOX1ZfVElNSU5HCQkweDE0 CisjZGVmaW5lIEZJUl9BVVhfSF9USU1JTkcJCTB4MTgKKyNkZWZpbmUgRklSX0FVWF9WX1RJTUlO RwkJMHgxYworI2RlZmluZSBTWU5DX1dJREVfU0hJRlQJCQkyMgorI2RlZmluZSBTWU5DX1dJREVf TUFTSwkJCSgweDNmZiA8PCBTWU5DX1dJREVfU0hJRlQpCisjZGVmaW5lIEJBQ0tfUE9SQ0hfU0hJ RlQJCTExCisjZGVmaW5lIEJBQ0tfUE9SQ0hfTUFTSwkJCSgweDdmZiA8PCBCQUNLX1BPUkNIX1NI SUZUKQorI2RlZmluZSBGUk9OVF9QT1JDSF9TSElGVAkJMAorI2RlZmluZSBGUk9OVF9QT1JDSF9N QVNLCQkoMHg3ZmYgPDwgRlJPTlRfUE9SQ0hfU0hJRlQpCisjZGVmaW5lIFRJTUlOR19DVFJMCQkJ MHgyMAorI2RlZmluZSBBVVhfUE9MX1NISUZUCQkJMworI2RlZmluZSBBVVhfUE9MX01BU0sJCQko MHg3IDw8IEFVWF9QT0xfU0hJRlQpCisjZGVmaW5lIE1BSU5fUE9MX1NISUZUCQkJMAorI2RlZmlu ZSBNQUlOX1BPTF9NQVNLCQkJKDB4NyA8PCBNQUlOX1BPTF9TSElGVCkKKyNkZWZpbmUgUE9MX0RF X1NISUZUCQkJMgorI2RlZmluZSBQT0xfVlNZTkNfU0hJRlQJCQkxCisjZGVmaW5lIFBPTF9IU1lO Q19TSElGVAkJCTAKKyNkZWZpbmUgVElNSU5HX0lOVF9DVFJMCQkJMHgyNAorI2RlZmluZSBUSU1J TkdfSU5UX1NUQVRFCQkweDI4CisjZGVmaW5lIFRJTUlOR19JTlRfQVVYX0ZSQU1FCQlCSVQoMykK KyNkZWZpbmUgVElNSU5HX0lOVF9NQUlOX0ZSQU1FCQlCSVQoMSkKKyNkZWZpbmUgVElNSU5HX0lO VF9BVVhfRlJBTUVfU0VMX1ZTVwkoMHgyIDw8IDEwKQorI2RlZmluZSBUSU1JTkdfSU5UX01BSU5f RlJBTUVfU0VMX1ZTVwkoMHgyIDw8IDYpCisjZGVmaW5lIFRJTUlOR19JTlRfRU5BQkxFIChcCisJ VElNSU5HX0lOVF9NQUlOX0ZSQU1FX1NFTF9WU1cgfCBUSU1JTkdfSU5UX0FVWF9GUkFNRV9TRUxf VlNXIHwgXAorCVRJTUlOR19JTlRfTUFJTl9GUkFNRSB8IFRJTUlOR19JTlRfQVVYX0ZSQU1FIFwK KykKKyNkZWZpbmUgVElNSU5HX01BSU5fU0hJRlQJCTB4MmMKKyNkZWZpbmUgVElNSU5HX0FVWF9T SElGVAkJMHgzMAorI2RlZmluZSBIX1NISUZUX1ZBTAkJCTB4MDA0OAorI2RlZmluZSBUSU1JTkdf TUFJTl9QSV9TSElGVAkJMHg2OAorI2RlZmluZSBUSU1JTkdfQVVYX1BJX1NISUZUCQkweDZjCisj ZGVmaW5lIEhfUElfU0hJRlRfVkFMCQkJMHgwMDBmCisKKyNkZWZpbmUgVl9BQ1RJVkUoeCkJKCgo eCkgPDwgVl9BQ1RJVkVfU0hJRlQpICYgVl9BQ1RJVkVfTUFTSykKKyNkZWZpbmUgSF9BQ1RJVkUo eCkJKCgoeCkgPDwgSF9BQ1RJVkVfU0hJRlQpICYgSF9BQ1RJVkVfTUFTSykKKworI2RlZmluZSBT WU5DX1dJREUoeCkJKCgoeCkgPDwgU1lOQ19XSURFX1NISUZUKSAmIFNZTkNfV0lERV9NQVNLKQor I2RlZmluZSBCQUNLX1BPUkNIKHgpCSgoKHgpIDw8IEJBQ0tfUE9SQ0hfU0hJRlQpICYgQkFDS19Q T1JDSF9NQVNLKQorI2RlZmluZSBGUk9OVF9QT1JDSCh4KQkoKCh4KSA8PCBGUk9OVF9QT1JDSF9T SElGVCkgJiBGUk9OVF9QT1JDSF9NQVNLKQorCisvKiBEVFJDIHJlZ2lzdGVycyAqLworI2RlZmlu ZSBEVFJDX0YwX0NUUkwJCQkweDJjCisjZGVmaW5lIERUUkNfRjFfQ1RSTAkJCTB4NWMKKyNkZWZp bmUgRFRSQ19ERUNPTVBSRVNTX0JZUEFTUwkJQklUKDE3KQorI2RlZmluZSBEVFJDX0RFVElMRV9D VFJMCQkweDY4CisjZGVmaW5lIFRJTEUyUkFTVEVTQ0FOX0JZUEFTU19NT0RFCUJJVCgzMCkKKyNk ZWZpbmUgREVUSUxFX0FSSURSX01PREVfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZSBERVRJTEVf QVJJRF9BTEwJCQkwCisjZGVmaW5lIERFVElMRV9BUklEX0lOX0FSSURSCQkxCisjZGVmaW5lIERF VElMRV9BUklEX0JZUF9CVVRfQVJJRFIJMgorI2RlZmluZSBERVRJTEVfQVJJRF9JTl9BUklEUjIJ CTMKKyNkZWZpbmUgRFRSQ19BUklECQkJMHg2YworI2RlZmluZSBEVFJDX0FSSUQzX1NISUZUCQky NAorI2RlZmluZSBEVFJDX0FSSUQzX01BU0sJCQkoMHhmZiA8PCBEVFJDX0FSSUQzX1NISUZUKQor I2RlZmluZSBEVFJDX0FSSUQyX1NISUZUCQkxNgorI2RlZmluZSBEVFJDX0FSSUQyX01BU0sJCQko MHhmZiA8PCBEVFJDX0FSSUQyX1NISUZUKQorI2RlZmluZSBEVFJDX0FSSUQxX1NISUZUCQk4Cisj ZGVmaW5lIERUUkNfQVJJRDFfTUFTSwkJCSgweGZmIDw8IERUUkNfQVJJRDFfU0hJRlQpCisjZGVm aW5lIERUUkNfQVJJRDBfU0hJRlQJCTAKKyNkZWZpbmUgRFRSQ19BUklEMF9NQVNLCQkJKDB4ZmYg PDwgRFRSQ19BUklEMF9TSElGVCkKKyNkZWZpbmUgRFRSQ19ERUMyRERSX0FSSUQJCTB4NzAKKwor I2RlZmluZSBEVFJDX0FSSUQzKHgpCSgoKHgpIDw8IERUUkNfQVJJRDNfU0hJRlQpICYgRFRSQ19B UklEM19NQVNLKQorI2RlZmluZSBEVFJDX0FSSUQyKHgpCSgoKHgpIDw8IERUUkNfQVJJRDJfU0hJ RlQpICYgRFRSQ19BUklEMl9NQVNLKQorI2RlZmluZSBEVFJDX0FSSUQxKHgpCSgoKHgpIDw8IERU UkNfQVJJRDFfU0hJRlQpICYgRFRSQ19BUklEMV9NQVNLKQorI2RlZmluZSBEVFJDX0FSSUQwKHgp CSgoKHgpIDw8IERUUkNfQVJJRDBfU0hJRlQpICYgRFRSQ19BUklEMF9NQVNLKQorCisvKiBWT1Vf Q1RSTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVk9VX0lORl9FTgkJCTB4MDAKKyNkZWZpbmUgVk9V X0lORl9DSF9TRUwJCQkweDA0CisjZGVmaW5lIFZPVV9JTkZfREFUQV9TRUwJCTB4MDgKKyNkZWZp bmUgVk9VX1NPRlRfUlNUCQkJMHgxNAorI2RlZmluZSBWT1VfQ0xLX1NFTAkJCTB4MTgKKyNkZWZp bmUgVk9VX0NMS19HTDFfU0VMCQkJQklUKDUpCisjZGVmaW5lIFZPVV9DTEtfR0wwX1NFTAkJCUJJ VCg0KQorI2RlZmluZSBWT1VfQ0xLX1JFUUVOCQkJMHgyMAorI2RlZmluZSBWT1VfQ0xLX0VOCQkJ MHgyNAorCisvKiBPVEZQUFVfQ1RSTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT1RGUFBVX1JTWl9E QVRBX1NPVVJDRQkJMHgwNAorCisjZGVmaW5lIEdMX05VTQkJCQkyCisjZGVmaW5lIFZMX05VTQkJ CQkzCisKK2VudW0gdm91X2Nobl90eXBlIHsKKwlWT1VfQ0hOX01BSU4sCisJVk9VX0NITl9BVVgs Cit9OworCitzdHJ1Y3QgenhfY3J0Y19yZWdzIHsKKwl1MzIgZmlyX2FjdGl2ZTsKKwl1MzIgZmly X2h0aW1pbmc7CisJdTMyIGZpcl92dGltaW5nOworCXUzMiB0aW1pbmdfc2hpZnQ7CisJdTMyIHRp bWluZ19waV9zaGlmdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgenhfY3J0Y19yZWdzIG1h aW5fY3J0Y19yZWdzID0geworCS5maXJfYWN0aXZlID0gRklSX01BSU5fQUNUSVZFLAorCS5maXJf aHRpbWluZyA9IEZJUl9NQUlOX0hfVElNSU5HLAorCS5maXJfdnRpbWluZyA9IEZJUl9NQUlOX1Zf VElNSU5HLAorCS50aW1pbmdfc2hpZnQgPSBUSU1JTkdfTUFJTl9TSElGVCwKKwkudGltaW5nX3Bp X3NoaWZ0ID0gVElNSU5HX01BSU5fUElfU0hJRlQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHp4X2NydGNfcmVncyBhdXhfY3J0Y19yZWdzID0geworCS5maXJfYWN0aXZlID0gRklSX0FVWF9B Q1RJVkUsCisJLmZpcl9odGltaW5nID0gRklSX0FVWF9IX1RJTUlORywKKwkuZmlyX3Z0aW1pbmcg PSBGSVJfQVVYX1ZfVElNSU5HLAorCS50aW1pbmdfc2hpZnQgPSBUSU1JTkdfQVVYX1NISUZULAor CS50aW1pbmdfcGlfc2hpZnQgPSBUSU1JTkdfQVVYX1BJX1NISUZULAorfTsKKworc3RydWN0IHp4 X2NydGNfYml0cyB7CisJdTMyIHBvbGFyaXR5X21hc2s7CisJdTMyIHBvbGFyaXR5X3NoaWZ0Owor CXUzMiB0Y19lbmFibGU7CisJdTMyIGdsX2VuYWJsZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgenhfY3J0Y19iaXRzIG1haW5fY3J0Y19iaXRzID0geworCS5wb2xhcml0eV9tYXNrID0gTUFJ Tl9QT0xfTUFTSywKKwkucG9sYXJpdHlfc2hpZnQgPSBNQUlOX1BPTF9TSElGVCwKKwkudGNfZW5h YmxlID0gTUFJTl9UQ19FTiwKKwkuZ2xfZW5hYmxlID0gT1NEX0NUUkwwX0dMMF9FTiwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgenhfY3J0Y19iaXRzIGF1eF9jcnRjX2JpdHMgPSB7CisJLnBv bGFyaXR5X21hc2sgPSBBVVhfUE9MX01BU0ssCisJLnBvbGFyaXR5X3NoaWZ0ID0gQVVYX1BPTF9T SElGVCwKKwkudGNfZW5hYmxlID0gQVVYX1RDX0VOLAorCS5nbF9lbmFibGUgPSBPU0RfQ1RSTDBf R0wxX0VOLAorfTsKKworc3RydWN0IHp4X2NydGMgeworCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwor CXN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnk7CisJc3RydWN0IHp4X3ZvdV9odyAqdm91OworCXZv aWQgX19pb21lbSAqY2hucmVnOworCWNvbnN0IHN0cnVjdCB6eF9jcnRjX3JlZ3MgKnJlZ3M7CisJ Y29uc3Qgc3RydWN0IHp4X2NydGNfYml0cyAqYml0czsKKwllbnVtIHZvdV9jaG5fdHlwZSBjaG5f dHlwZTsKKwlzdHJ1Y3QgY2xrICpwaXhjbGs7Cit9OworCisjZGVmaW5lIHRvX3p4X2NydGMoeCkg Y29udGFpbmVyX29mKHgsIHN0cnVjdCB6eF9jcnRjLCBjcnRjKQorCitzdHJ1Y3Qgenhfdm91X2h3 IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpvc2Q7CisJdm9pZCBfX2lv bWVtICp0aW1pbmc7CisJdm9pZCBfX2lvbWVtICp2b3VjdGw7CisJdm9pZCBfX2lvbWVtICpvdGZw cHU7CisJdm9pZCBfX2lvbWVtICpkdHJjOworCXN0cnVjdCBjbGsgKmF4aV9jbGs7CisJc3RydWN0 IGNsayAqcHB1X2NsazsKKwlzdHJ1Y3QgY2xrICptYWluX2NsazsKKwlzdHJ1Y3QgY2xrICphdXhf Y2xrOworCXN0cnVjdCB6eF9jcnRjICptYWluX2NydGM7CisJc3RydWN0IHp4X2NydGMgKmF1eF9j cnRjOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgenhfdm91X2h3ICpjcnRjX3RvX3ZvdShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9fenhf Y3J0YyhjcnRjKTsKKworCXJldHVybiB6Y3J0Yy0+dm91OworfQorCit2b2lkIHZvdV9pbmZfZW5h YmxlKGNvbnN0IHN0cnVjdCB2b3VfaW5mICppbmYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgenhfY3J0YyAqemNydGMgPSB0b196eF9jcnRjKGNydGMpOworCXN0cnVjdCB6eF92 b3VfaHcgKnZvdSA9IHpjcnRjLT52b3U7CisJYm9vbCBpc19tYWluID0gemNydGMtPmNobl90eXBl ID09IFZPVV9DSE5fTUFJTjsKKwl1MzIgZGF0YV9zZWxfc2hpZnQgPSBpbmYtPmlkIDw8IDE7CisK KwkvKiBTZWxlY3QgZGF0YSBmb3JtYXQgKi8KKwl6eF93cml0ZWxfbWFzayh2b3UtPnZvdWN0bCAr IFZPVV9JTkZfREFUQV9TRUwsIDB4MyA8PCBkYXRhX3NlbF9zaGlmdCwKKwkJICAgICAgIGluZi0+ ZGF0YV9zZWwgPDwgZGF0YV9zZWxfc2hpZnQpOworCisJLyogU2VsZWN0IGNoYW5uZWwgKi8KKwl6 eF93cml0ZWxfbWFzayh2b3UtPnZvdWN0bCArIFZPVV9JTkZfQ0hfU0VMLCAweDEgPDwgaW5mLT5p ZCwKKwkJICAgICAgIHpjcnRjLT5jaG5fdHlwZSA8PCBpbmYtPmlkKTsKKworCS8qIFNlbGVjdCBp bnRlcmZhY2UgY2xvY2tzICovCisJenhfd3JpdGVsX21hc2sodm91LT52b3VjdGwgKyBWT1VfQ0xL X1NFTCwgaW5mLT5jbG9ja3Nfc2VsX2JpdHMsCisJCSAgICAgICBpc19tYWluID8gMCA6IGluZi0+ Y2xvY2tzX3NlbF9iaXRzKTsKKworCS8qIEVuYWJsZSBpbnRlcmZhY2UgY2xvY2tzICovCisJenhf d3JpdGVsX21hc2sodm91LT52b3VjdGwgKyBWT1VfQ0xLX0VOLCBpbmYtPmNsb2Nrc19lbl9iaXRz LAorCQkgICAgICAgaW5mLT5jbG9ja3NfZW5fYml0cyk7CisKKwkvKiBFbmFibGUgdGhlIGRldmlj ZSAqLworCXp4X3dyaXRlbF9tYXNrKHZvdS0+dm91Y3RsICsgVk9VX0lORl9FTiwgMSA8PCBpbmYt PmlkLCAxIDw8IGluZi0+aWQpOworfQorCit2b2lkIHZvdV9pbmZfZGlzYWJsZShjb25zdCBzdHJ1 Y3Qgdm91X2luZiAqaW5mLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHp4X3Zv dV9odyAqdm91ID0gY3J0Y190b192b3UoY3J0Yyk7CisKKwkvKiBEaXNhYmxlIHRoZSBkZXZpY2Ug Ki8KKwl6eF93cml0ZWxfbWFzayh2b3UtPnZvdWN0bCArIFZPVV9JTkZfRU4sIDEgPDwgaW5mLT5p ZCwgMCk7CisKKwkvKiBEaXNhYmxlIGludGVyZmFjZSBjbG9ja3MgKi8KKwl6eF93cml0ZWxfbWFz ayh2b3UtPnZvdWN0bCArIFZPVV9DTEtfRU4sIGluZi0+Y2xvY2tzX2VuX2JpdHMsIDApOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgdm91X2Nobl9zZXRfdXBkYXRlKHN0cnVjdCB6eF9jcnRjICp6 Y3J0YykKK3sKKwl6eF93cml0ZWwoemNydGMtPmNobnJlZyArIENITl9VUERBVEUsIDEpOworfQor CitzdGF0aWMgdm9pZCB6eF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGU7CisJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9fenhfY3J0YyhjcnRjKTsKKwlzdHJ1Y3Qg enhfdm91X2h3ICp2b3UgPSB6Y3J0Yy0+dm91OworCWNvbnN0IHN0cnVjdCB6eF9jcnRjX3JlZ3Mg KnJlZ3MgPSB6Y3J0Yy0+cmVnczsKKwljb25zdCBzdHJ1Y3QgenhfY3J0Y19iaXRzICpiaXRzID0g emNydGMtPmJpdHM7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwl1MzIgcG9sID0gMDsKKwl1MzIg dmFsOworCWludCByZXQ7CisKKwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAm dm0pOworCisJLyogU2V0IHVwIHRpbWluZyBwYXJhbWV0ZXJzICovCisJdmFsID0gVl9BQ1RJVkUo dm0udmFjdGl2ZSAtIDEpOworCXZhbCB8PSBIX0FDVElWRSh2bS5oYWN0aXZlIC0gMSk7CisJenhf d3JpdGVsKHZvdS0+dGltaW5nICsgcmVncy0+ZmlyX2FjdGl2ZSwgdmFsKTsKKworCXZhbCA9IFNZ TkNfV0lERSh2bS5oc3luY19sZW4gLSAxKTsKKwl2YWwgfD0gQkFDS19QT1JDSCh2bS5oYmFja19w b3JjaCAtIDEpOworCXZhbCB8PSBGUk9OVF9QT1JDSCh2bS5oZnJvbnRfcG9yY2ggLSAxKTsKKwl6 eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT5maXJfaHRpbWluZywgdmFsKTsKKworCXZhbCA9 IFNZTkNfV0lERSh2bS52c3luY19sZW4gLSAxKTsKKwl2YWwgfD0gQkFDS19QT1JDSCh2bS52YmFj a19wb3JjaCAtIDEpOworCXZhbCB8PSBGUk9OVF9QT1JDSCh2bS52ZnJvbnRfcG9yY2ggLSAxKTsK Kwl6eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT5maXJfdnRpbWluZywgdmFsKTsKKworCS8q IFNldCB1cCBwb2xhcml0aWVzICovCisJaWYgKHZtLmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lO Q19MT1cpCisJCXBvbCB8PSAxIDw8IFBPTF9WU1lOQ19TSElGVDsKKwlpZiAodm0uZmxhZ3MgJiBE SVNQTEFZX0ZMQUdTX0hTWU5DX0xPVykKKwkJcG9sIHw9IDEgPDwgUE9MX0hTWU5DX1NISUZUOwor CisJenhfd3JpdGVsX21hc2sodm91LT50aW1pbmcgKyBUSU1JTkdfQ1RSTCwgYml0cy0+cG9sYXJp dHlfbWFzaywKKwkJICAgICAgIHBvbCA8PCBiaXRzLT5wb2xhcml0eV9zaGlmdCk7CisKKwkvKiBT ZXR1cCBTSElGVCByZWdpc3RlciBieSBmb2xsb3dpbmcgd2hhdCBaVEUgQlNQIGRvZXMgKi8KKwl6 eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT50aW1pbmdfc2hpZnQsIEhfU0hJRlRfVkFMKTsK Kwl6eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT50aW1pbmdfcGlfc2hpZnQsIEhfUElfU0hJ RlRfVkFMKTsKKworCS8qIEVuYWJsZSBUSU1JTkdfQ1RSTCAqLworCXp4X3dyaXRlbF9tYXNrKHZv dS0+dGltaW5nICsgVElNSU5HX1RDX0VOQUJMRSwgYml0cy0+dGNfZW5hYmxlLAorCQkgICAgICAg Yml0cy0+dGNfZW5hYmxlKTsKKworCS8qIENvbmZpZ3VyZSBjaGFubmVsIHNjcmVlbiBzaXplICov CisJenhfd3JpdGVsX21hc2soemNydGMtPmNobnJlZyArIENITl9DVFJMMSwgQ0hOX1NDUkVFTl9X X01BU0ssCisJCSAgICAgICB2bS5oYWN0aXZlIDw8IENITl9TQ1JFRU5fV19TSElGVCk7CisJenhf d3JpdGVsX21hc2soemNydGMtPmNobnJlZyArIENITl9DVFJMMSwgQ0hOX1NDUkVFTl9IX01BU0ss CisJCSAgICAgICB2bS52YWN0aXZlIDw8IENITl9TQ1JFRU5fSF9TSElGVCk7CisKKwkvKiBVcGRh dGUgY2hhbm5lbCAqLworCXZvdV9jaG5fc2V0X3VwZGF0ZSh6Y3J0Yyk7CisKKwkvKiBFbmFibGUg Y2hhbm5lbCAqLworCXp4X3dyaXRlbF9tYXNrKHpjcnRjLT5jaG5yZWcgKyBDSE5fQ1RSTDAsIENI Tl9FTkFCTEUsIENITl9FTkFCTEUpOworCisJLyogRW5hYmxlIEdyYXBoaWMgTGF5ZXIgKi8KKwl6 eF93cml0ZWxfbWFzayh2b3UtPm9zZCArIE9TRF9DVFJMMCwgYml0cy0+Z2xfZW5hYmxlLAorCQkg ICAgICAgYml0cy0+Z2xfZW5hYmxlKTsKKworCWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKKwor CXJldCA9IGNsa19zZXRfcmF0ZSh6Y3J0Yy0+cGl4Y2xrLCBtb2RlLT5jbG9jayAqIDEwMDApOwor CWlmIChyZXQpIHsKKwkJZGV2X3dhcm4odm91LT5kZXYsICJmYWlsZWQgdG8gc2V0IHBpeGNsayBy YXRlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZSh6Y3J0Yy0+cGl4Y2xrKTsKKwlpZiAocmV0KQorCQlkZXZfd2Fybih2b3UtPmRldiwgImZh aWxlZCB0byBlbmFibGUgcGl4Y2xrOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgenhf Y3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgenhfY3J0YyAq emNydGMgPSB0b196eF9jcnRjKGNydGMpOworCWNvbnN0IHN0cnVjdCB6eF9jcnRjX2JpdHMgKmJp dHMgPSB6Y3J0Yy0+Yml0czsKKwlzdHJ1Y3Qgenhfdm91X2h3ICp2b3UgPSB6Y3J0Yy0+dm91Owor CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHpjcnRjLT5waXhjbGspOworCisJZHJtX2NydGNfdmJs YW5rX29mZihjcnRjKTsKKworCS8qIERpc2FibGUgR3JhcGhpYyBMYXllciAqLworCXp4X3dyaXRl bF9tYXNrKHZvdS0+b3NkICsgT1NEX0NUUkwwLCBiaXRzLT5nbF9lbmFibGUsIDApOworCisJLyog RGlzYWJsZSBjaGFubmVsICovCisJenhfd3JpdGVsX21hc2soemNydGMtPmNobnJlZyArIENITl9D VFJMMCwgQ0hOX0VOQUJMRSwgMCk7CisKKwkvKiBEaXNhYmxlIFRJTUlOR19DVFJMICovCisJenhf d3JpdGVsX21hc2sodm91LT50aW1pbmcgKyBUSU1JTkdfVENfRU5BQkxFLCBiaXRzLT50Y19lbmFi bGUsIDApOworfQorCitzdGF0aWMgdm9pZCB6eF9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3Ry dWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7 CisKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisKKwljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxM OworCisJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlpZiAoZHJtX2Ny dGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKQorCQlkcm1fY3J0Y19hcm1fdmJsYW5rX2V2ZW50KGNy dGMsIGV2ZW50KTsKKwllbHNlCisJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2 ZW50KTsKKwlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHp4X2NydGNfaGVscGVyX2Z1 bmNzID0geworCS5lbmFibGUgPSB6eF9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHp4X2NydGNf ZGlzYWJsZSwKKwkuYXRvbWljX2JlZ2luID0genhfY3J0Y19hdG9taWNfYmVnaW4sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHp4X2NydGNfZnVuY3MgPSB7CisJLmRl c3Ryb3kgPSBkcm1fY3J0Y19jbGVhbnVwLAorCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxw ZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlw LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3Rh dGUsCit9OworCitzdGF0aWMgaW50IHp4X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBzdHJ1Y3Qgenhfdm91X2h3ICp2b3UsCisJCQllbnVtIHZvdV9jaG5fdHlwZSBjaG5fdHlwZSkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB2b3UtPmRldjsKKwlzdHJ1Y3QgenhfbGF5ZXJfZGF0 YSBkYXRhOworCXN0cnVjdCB6eF9jcnRjICp6Y3J0YzsKKwlpbnQgcmV0OworCisJemNydGMgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnpjcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6Y3J0 YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl6Y3J0Yy0+dm91ID0gdm91OworCXpjcnRjLT5jaG5f dHlwZSA9IGNobl90eXBlOworCisJaWYgKGNobl90eXBlID09IFZPVV9DSE5fTUFJTikgeworCQlk YXRhLmxheWVyID0gdm91LT5vc2QgKyBNQUlOX0dMX09GRlNFVDsKKwkJZGF0YS5jc2MgPSB2b3Ut Pm9zZCArIE1BSU5fQ1NDX09GRlNFVDsKKwkJZGF0YS5oYnNjID0gdm91LT5vc2QgKyBNQUlOX0hC U0NfT0ZGU0VUOworCQlkYXRhLnJzeiA9IHZvdS0+b3RmcHB1ICsgTUFJTl9SU1pfT0ZGU0VUOwor CQl6Y3J0Yy0+Y2hucmVnID0gdm91LT5vc2QgKyBPU0RfTUFJTl9DSE47CisJCXpjcnRjLT5yZWdz ID0gJm1haW5fY3J0Y19yZWdzOworCQl6Y3J0Yy0+Yml0cyA9ICZtYWluX2NydGNfYml0czsKKwl9 IGVsc2UgeworCQlkYXRhLmxheWVyID0gdm91LT5vc2QgKyBBVVhfR0xfT0ZGU0VUOworCQlkYXRh LmNzYyA9IHZvdS0+b3NkICsgQVVYX0NTQ19PRkZTRVQ7CisJCWRhdGEuaGJzYyA9IHZvdS0+b3Nk ICsgQVVYX0hCU0NfT0ZGU0VUOworCQlkYXRhLnJzeiA9IHZvdS0+b3RmcHB1ICsgQVVYX1JTWl9P RkZTRVQ7CisJCXpjcnRjLT5jaG5yZWcgPSB2b3UtPm9zZCArIE9TRF9BVVhfQ0hOOworCQl6Y3J0 Yy0+cmVncyA9ICZhdXhfY3J0Y19yZWdzOworCQl6Y3J0Yy0+Yml0cyA9ICZhdXhfY3J0Y19iaXRz OworCX0KKworCXpjcnRjLT5waXhjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAoY2huX3R5cGUgPT0g Vk9VX0NITl9NQUlOKSA/CisJCQkJCSAgIm1haW5fd2NsayIgOiAiYXV4X3djbGsiKTsKKwlpZiAo SVNfRVJSKHpjcnRjLT5waXhjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoemNydGMtPnBpeGNsayk7 CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwaXggY2xrOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwl6Y3J0Yy0+cHJpbWFyeSA9IHp4X3BsYW5lX2luaXQoZHJtLCBk ZXYsICZkYXRhLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZiAoSVNfRVJSKHpjcnRjLT5w cmltYXJ5KSkgeworCQlyZXQgPSBQVFJfRVJSKHpjcnRjLT5wcmltYXJ5KTsKKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gaW5pdCBwcmltYXJ5IHBsYW5lOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJnpjcnRj LT5jcnRjLCB6Y3J0Yy0+cHJpbWFyeSwgTlVMTCwKKwkJCQkJJnp4X2NydGNfZnVuY3MsIE5VTEwp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBkcm0gY3J0Yzog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2NydGNfaGVscGVyX2FkZCgm emNydGMtPmNydGMsICZ6eF9jcnRjX2hlbHBlcl9mdW5jcyk7CisKKwlpZiAoY2huX3R5cGUgPT0g Vk9VX0NITl9NQUlOKQorCQl2b3UtPm1haW5fY3J0YyA9IHpjcnRjOworCWVsc2UKKwkJdm91LT5h dXhfY3J0YyA9IHpjcnRjOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGRybV9jcnRjICp6eF9maW5kX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHBpcGUp Cit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWludCBpID0gMDsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY3J0YywgJmRybS0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQlpZiAo aSsrID09IHBpcGUpCisJCQlyZXR1cm4gY3J0YzsKKworCXJldHVybiBOVUxMOworfQorCitpbnQg enhfdm91X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50 IHBpcGUpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCB6eF92b3VfaHcgKnZv dTsKKworCWNydGMgPSB6eF9maW5kX2NydGMoZHJtLCBwaXBlKTsKKwlpZiAoIWNydGMpCisJCXJl dHVybiAwOworCisJdm91ID0gY3J0Y190b192b3UoY3J0Yyk7CisKKwlpZiAocGlwZSA9PSAwKQor CQl6eF93cml0ZWxfbWFzayh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfQ1RSTCwKKwkJCSAgICAg ICBUSU1JTkdfSU5UX01BSU5fRlJBTUUsIFRJTUlOR19JTlRfTUFJTl9GUkFNRSk7CisJZWxzZQor CQl6eF93cml0ZWxfbWFzayh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfQ1RSTCwKKwkJCSAgICAg ICBUSU1JTkdfSU5UX0FVWF9GUkFNRSwgVElNSU5HX0lOVF9BVVhfRlJBTUUpOworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgenhfdm91X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1 Y3Qgenhfdm91X2h3ICp2b3U7CisKKwljcnRjID0genhfZmluZF9jcnRjKGRybSwgcGlwZSk7CisJ aWYgKCFjcnRjKQorCQlyZXR1cm47CisKKwl2b3UgPSBjcnRjX3RvX3ZvdShjcnRjKTsKKworCWlm IChwaXBlID09IDApCisJCXp4X3dyaXRlbF9tYXNrKHZvdS0+dGltaW5nICsgVElNSU5HX0lOVF9D VFJMLAorCQkJICAgICAgIFRJTUlOR19JTlRfTUFJTl9GUkFNRSwgMCk7CisJZWxzZQorCQl6eF93 cml0ZWxfbWFzayh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfQ1RSTCwKKwkJCSAgICAgICBUSU1J TkdfSU5UX0FVWF9GUkFNRSwgMCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2b3VfaXJxX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9 IGRldl9pZDsKKwl1MzIgc3RhdGU7CisKKwkvKiBIYW5kbGUgVElNSU5HX0NUUkwgZnJhbWUgaW50 ZXJydXB0cyAqLworCXN0YXRlID0genhfcmVhZGwodm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX1NU QVRFKTsKKwl6eF93cml0ZWwodm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX1NUQVRFLCBzdGF0ZSk7 CisKKwlpZiAoc3RhdGUgJiBUSU1JTkdfSU5UX01BSU5fRlJBTUUpCisJCWRybV9jcnRjX2hhbmRs ZV92YmxhbmsoJnZvdS0+bWFpbl9jcnRjLT5jcnRjKTsKKworCWlmIChzdGF0ZSAmIFRJTUlOR19J TlRfQVVYX0ZSQU1FKQorCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZ2b3UtPmF1eF9jcnRjLT5j cnRjKTsKKworCS8qIEhhbmRsZSBPU0QgaW50ZXJydXB0cyAqLworCXN0YXRlID0genhfcmVhZGwo dm91LT5vc2QgKyBPU0RfSU5UX1NUQSk7CisJenhfd3JpdGVsKHZvdS0+b3NkICsgT1NEX0lOVF9D TFJTVEEsIHN0YXRlKTsKKworCWlmIChzdGF0ZSAmIE9TRF9JTlRfTUFJTl9VUFQpIHsKKwkJdm91 X2Nobl9zZXRfdXBkYXRlKHZvdS0+bWFpbl9jcnRjKTsKKwkJenhfcGxhbmVfc2V0X3VwZGF0ZSh2 b3UtPm1haW5fY3J0Yy0+cHJpbWFyeSk7CisJfQorCisJaWYgKHN0YXRlICYgT1NEX0lOVF9BVVhf VVBUKSB7CisJCXZvdV9jaG5fc2V0X3VwZGF0ZSh2b3UtPmF1eF9jcnRjKTsKKwkJenhfcGxhbmVf c2V0X3VwZGF0ZSh2b3UtPmF1eF9jcnRjLT5wcmltYXJ5KTsKKwl9CisKKwlpZiAoc3RhdGUgJiBP U0RfSU5UX0VSUk9SKQorCQlkZXZfZXJyKHZvdS0+ZGV2LCAiT1NEIEVSUk9SOiAweCUwOHghXG4i LCBzdGF0ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHZvdV9k dHJjX2luaXQoc3RydWN0IHp4X3ZvdV9odyAqdm91KQoreworCS8qIENsZWFyIGJpdCBmb3IgYnlw YXNzIGJ5IElEICovCisJenhfd3JpdGVsX21hc2sodm91LT5kdHJjICsgRFRSQ19ERVRJTEVfQ1RS TCwKKwkJICAgICAgIFRJTEUyUkFTVEVTQ0FOX0JZUEFTU19NT0RFLCAwKTsKKworCS8qIFNlbGVj dCBBUklEUiBtb2RlICovCisJenhfd3JpdGVsX21hc2sodm91LT5kdHJjICsgRFRSQ19ERVRJTEVf Q1RSTCwgREVUSUxFX0FSSURSX01PREVfTUFTSywKKwkJICAgICAgIERFVElMRV9BUklEX0lOX0FS SURSKTsKKworCS8qIEJ5cGFzcyBkZWNvbXByZXNzaW9uIGZvciBib3RoIGZyYW1lcyAqLworCXp4 X3dyaXRlbF9tYXNrKHZvdS0+ZHRyYyArIERUUkNfRjBfQ1RSTCwgRFRSQ19ERUNPTVBSRVNTX0JZ UEFTUywKKwkJICAgICAgIERUUkNfREVDT01QUkVTU19CWVBBU1MpOworCXp4X3dyaXRlbF9tYXNr KHZvdS0+ZHRyYyArIERUUkNfRjFfQ1RSTCwgRFRSQ19ERUNPTVBSRVNTX0JZUEFTUywKKwkJICAg ICAgIERUUkNfREVDT01QUkVTU19CWVBBU1MpOworCisJLyogU2V0IHVwIEFSSUQgcmVnaXN0ZXIg Ki8KKwl6eF93cml0ZWwodm91LT5kdHJjICsgRFRSQ19BUklELCBEVFJDX0FSSUQzKDB4ZikgfCBE VFJDX0FSSUQyKDB4ZSkgfAorCQkgIERUUkNfQVJJRDEoMHhmKSB8IERUUkNfQVJJRDAoMHhlKSk7 Cit9CisKK3N0YXRpYyB2b2lkIHZvdV9od19pbml0KHN0cnVjdCB6eF92b3VfaHcgKnZvdSkKK3sK KwkvKiBTZXQgR0wwIHRvIG1haW4gY2hhbm5lbCBhbmQgR0wxIHRvIGF1eCBjaGFubmVsICovCisJ enhfd3JpdGVsX21hc2sodm91LT5vc2QgKyBPU0RfQ1RSTDAsIE9TRF9DVFJMMF9HTDBfU0VMLCAw KTsKKwl6eF93cml0ZWxfbWFzayh2b3UtPm9zZCArIE9TRF9DVFJMMCwgT1NEX0NUUkwwX0dMMV9T RUwsCisJCSAgICAgICBPU0RfQ1RSTDBfR0wxX1NFTCk7CisKKwkvKiBSZWxlYXNlIHJlc2V0IGZv ciBhbGwgVk9VIG1vZHVsZXMgKi8KKwl6eF93cml0ZWwodm91LT52b3VjdGwgKyBWT1VfU09GVF9S U1QsIH4wKTsKKworCS8qIFNlbGVjdCBtYWluIGNsb2NrIGZvciBHTDAgYW5kIGF1eCBjbG9jayBm b3IgR0wxIG1vZHVsZSAqLworCXp4X3dyaXRlbF9tYXNrKHZvdS0+dm91Y3RsICsgVk9VX0NMS19T RUwsIFZPVV9DTEtfR0wwX1NFTCwgMCk7CisJenhfd3JpdGVsX21hc2sodm91LT52b3VjdGwgKyBW T1VfQ0xLX1NFTCwgVk9VX0NMS19HTDFfU0VMLAorCQkgICAgICAgVk9VX0NMS19HTDFfU0VMKTsK KworCS8qIEVuYWJsZSBjbG9jayBhdXRvLWdhdGluZyBmb3IgYWxsIFZPVSBtb2R1bGVzICovCisJ enhfd3JpdGVsKHZvdS0+dm91Y3RsICsgVk9VX0NMS19SRVFFTiwgfjApOworCisJLyogRW5hYmxl IGFsbCBWT1UgbW9kdWxlIGNsb2NrcyAqLworCXp4X3dyaXRlbCh2b3UtPnZvdWN0bCArIFZPVV9D TEtfRU4sIH4wKTsKKworCS8qIENsZWFyIGJvdGggT1NEIGFuZCBUSU1JTkdfQ1RSTCBpbnRlcnJ1 cHQgc3RhdGUgKi8KKwl6eF93cml0ZWwodm91LT5vc2QgKyBPU0RfSU5UX0NMUlNUQSwgfjApOwor CXp4X3dyaXRlbCh2b3UtPnRpbWluZyArIFRJTUlOR19JTlRfU1RBVEUsIH4wKTsKKworCS8qIEVu YWJsZSBPU0QgYW5kIFRJTUlOR19DVFJMIGludGVycnJ1cHRzICovCisJenhfd3JpdGVsKHZvdS0+ b3NkICsgT1NEX0lOVF9NU0ssIE9TRF9JTlRfRU5BQkxFKTsKKwl6eF93cml0ZWwodm91LT50aW1p bmcgKyBUSU1JTkdfSU5UX0NUUkwsIFRJTUlOR19JTlRfRU5BQkxFKTsKKworCS8qIFNlbGVjdCBH UEMgYXMgaW5wdXQgdG8gZ2wvdmwgc2NhbGVyIGFzIGEgc2FuZSBkZWZhdWx0IHNldHRpbmcgKi8K Kwl6eF93cml0ZWwodm91LT5vdGZwcHUgKyBPVEZQUFVfUlNaX0RBVEFfU09VUkNFLCAweDJhKTsK KworCS8qCisJICogTmVlZHMgdG8gcmVzZXQgY2hhbm5lbCBhbmQgbGF5ZXIgbG9naWMgcGVyIGZy YW1lIHdoZW4gZnJhbWUgc3RhcnRzCisJICogdG8gZ2V0IFZPVSB3b3JrIHByb3Blcmx5LgorCSAq LworCXp4X3dyaXRlbF9tYXNrKHZvdS0+b3NkICsgT1NEX1JTVF9DTFIsIFJTVF9QRVJfRlJBTUUs IFJTVF9QRVJfRlJBTUUpOworCisJdm91X2R0cmNfaW5pdCh2b3UpOworfQorCitzdGF0aWMgaW50 IHp4X2NydGNfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZv cm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0 IHp4X3ZvdV9odyAqdm91OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50 IHJldDsKKworCXZvdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdm91KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCF2b3UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm9zZCIpOworCXZvdS0+b3Nk ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHZvdS0+b3Nk KSkgeworCQlyZXQgPSBQVFJfRVJSKHZvdS0+b3NkKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gcmVtYXAgb3NkIHJlZ2lvbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwg InRpbWluZ19jdHJsIik7CisJdm91LT50aW1pbmcgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZXMpOworCWlmIChJU19FUlIodm91LT50aW1pbmcpKSB7CisJCXJldCA9IFBUUl9FUlIodm91 LT50aW1pbmcpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZW1hcCB0aW1pbmdfY3RybCBy ZWdpb246ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlcyA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJkdHJjIik7CisJdm91 LT5kdHJjID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHZv dS0+ZHRyYykpIHsKKwkJcmV0ID0gUFRSX0VSUih2b3UtPmR0cmMpOworCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byByZW1hcCBkdHJjIHJlZ2lvbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09V UkNFX01FTSwgInZvdV9jdHJsIik7CisJdm91LT52b3VjdGwgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoZGV2LCByZXMpOworCWlmIChJU19FUlIodm91LT52b3VjdGwpKSB7CisJCXJldCA9IFBUUl9F UlIodm91LT52b3VjdGwpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZW1hcCB2b3VfY3Ry bCByZWdpb246ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJvdGZwcHUiKTsK Kwl2b3UtPm90ZnBwdSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElT X0VSUih2b3UtPm90ZnBwdSkpIHsKKwkJcmV0ID0gUFRSX0VSUih2b3UtPm90ZnBwdSk7CisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbWFwIG90ZnBwdSByZWdpb246ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJ aWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwl2b3UtPmF4aV9jbGsgPSBkZXZtX2Nsa19n ZXQoZGV2LCAiYWNsayIpOworCWlmIChJU19FUlIodm91LT5heGlfY2xrKSkgeworCQlyZXQgPSBQ VFJfRVJSKHZvdS0+YXhpX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBheGlf Y2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2b3UtPnBwdV9jbGsgPSBk ZXZtX2Nsa19nZXQoZGV2LCAicHB1X3djbGsiKTsKKwlpZiAoSVNfRVJSKHZvdS0+cHB1X2Nsaykp IHsKKwkJcmV0ID0gUFRSX0VSUih2b3UtPnBwdV9jbGspOworCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBnZXQgcHB1X2NsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHZvdS0+YXhpX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgYXhpX2NsazogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJY2xrX3ByZXBhcmVfZW5hYmxlKHZvdS0+cHB1X2Nsayk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgcHB1X2NsazogJWRcbiIsIHJl dCk7CisJCWdvdG8gZGlzYWJsZV9heGlfY2xrOworCX0KKworCXZvdS0+ZGV2ID0gZGV2OworCWRl dl9zZXRfZHJ2ZGF0YShkZXYsIHZvdSk7CisKKwl2b3VfaHdfaW5pdCh2b3UpOworCisJcmV0ID0g ZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgdm91X2lycV9oYW5kbGVyLCAwLCAienhfdm91Iiwg dm91KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0 IHZvdSBpcnE6ICVkXG4iLCByZXQpOworCQlnb3RvIGRpc2FibGVfcHB1X2NsazsKKwl9CisKKwly ZXQgPSB6eF9jcnRjX2luaXQoZHJtLCB2b3UsIFZPVV9DSE5fTUFJTik7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IG1haW4gY2hhbm5lbCBjcnRjOiAlZFxuIiwg cmV0KTsKKwkJZ290byBkaXNhYmxlX3BwdV9jbGs7CisJfQorCisJcmV0ID0genhfY3J0Y19pbml0 KGRybSwgdm91LCBWT1VfQ0hOX0FVWCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBpbml0IGF1eCBjaGFubmVsIGNydGM6ICVkXG4iLCByZXQpOworCQlnb3RvIGRpc2Fi bGVfcHB1X2NsazsKKwl9CisKKwlyZXR1cm4gMDsKKworZGlzYWJsZV9wcHVfY2xrOgorCWNsa19k aXNhYmxlX3VucHJlcGFyZSh2b3UtPnBwdV9jbGspOworZGlzYWJsZV9heGlfY2xrOgorCWNsa19k aXNhYmxlX3VucHJlcGFyZSh2b3UtPmF4aV9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIHp4X2NydGNfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgenhfdm91X2h3ICp2b3UgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2b3UtPmF4aV9j bGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2b3UtPnBwdV9jbGspOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgenhfY3J0Y19jb21wb25lbnRfb3BzID0geworCS5i aW5kID0genhfY3J0Y19iaW5kLAorCS51bmJpbmQgPSB6eF9jcnRjX3VuYmluZCwKK307CisKK3N0 YXRpYyBpbnQgenhfY3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ6eF9jcnRjX2NvbXBvbmVudF9vcHMp OworfQorCitzdGF0aWMgaW50IHp4X2NydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmenhfY3J0Y19jb21wb25lbnRf b3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg enhfY3J0Y19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAienRlLHp4Mjk2NzE4LWRw YyIsIH0sCisJeyAvKiBlbmQgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eF9j cnRjX29mX21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF9jcnRjX2RyaXZlciA9 IHsKKwkucHJvYmUgPSB6eF9jcnRjX3Byb2JlLAorCS5yZW1vdmUgPSB6eF9jcnRjX3JlbW92ZSwK KwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJ6eC1jcnRjIiwKKwkJLm9mX21hdGNoX3RhYmxlCT0g enhfY3J0Y19vZl9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96 dGUvenhfdm91LmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3ZvdS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzQ5ZTA2Y2Q4NmY0Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICog Q29weXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KKyAqIENvcHlyaWdodCAyMDE2IFpURSBDb3Jwb3Jh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fWlhfVk9V X0hfXworI2RlZmluZSBfX1pYX1ZPVV9IX18KKworI2RlZmluZSBWT1VfQ1JUQ19NQVNLCQkweDMK KworLyogVk9VIG91dHB1dCBpbnRlcmZhY2VzICovCitlbnVtIHZvdV9pbmZfaWQgeworCVZPVV9I RE1JCT0gMCwKKwlWT1VfUkdCX0xDRAk9IDEsCisJVk9VX1RWX0VOQwk9IDIsCisJVk9VX01JUElf RFNJCT0gMywKKwlWT1VfTFZEUwk9IDQsCisJVk9VX1ZHQQkJPSA1LAorfTsKKworZW51bSB2b3Vf aW5mX2RhdGFfc2VsIHsKKwlWT1VfWVVWNDQ0CT0gMCwKKwlWT1VfUkdCXzEwMTAxMAk9IDEsCisJ Vk9VX1JHQl84ODgJPSAyLAorCVZPVV9SR0JfNjY2CT0gMywKK307CisKK3N0cnVjdCB2b3VfaW5m IHsKKwllbnVtIHZvdV9pbmZfaWQgaWQ7CisJZW51bSB2b3VfaW5mX2RhdGFfc2VsIGRhdGFfc2Vs OworCXUzMiBjbG9ja3NfZW5fYml0czsKKwl1MzIgY2xvY2tzX3NlbF9iaXRzOworfTsKKwordm9p ZCB2b3VfaW5mX2VuYWJsZShjb25zdCBzdHJ1Y3Qgdm91X2luZiAqaW5mLCBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOwordm9pZCB2b3VfaW5mX2Rpc2FibGUoY29uc3Qgc3RydWN0IHZvdV9pbmYgKmlu Ziwgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKworaW50IHp4X3ZvdV9lbmFibGVfdmJsYW5rKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgenhfdm91X2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsK KworI2VuZGlmIC8qIF9fWlhfVk9VX0hfXyAqLwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=