From mboxrd@z Thu Jan 1 00:00:00 1970 From: yu.dai@intel.com Subject: [PATCH v2 11/18] drm/i915: Integration of GuC client Date: Fri, 3 Apr 2015 11:08:37 -0700 Message-ID: <1428084524-28437-12-git-send-email-yu.dai@intel.com> References: <1428084524-28437-1-git-send-email-yu.dai@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 9A7BF6EBBE for ; Fri, 3 Apr 2015 11:10:18 -0700 (PDT) In-Reply-To: <1428084524-28437-1-git-send-email-yu.dai@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+CgpJbXBsZW1lbnRhdGlvbiBvZiBHdUMg Y2xpZW50LiBBIEd1QyBjbGllbnQgaGFzIGl0cyBvd24gZG9vcmJlbGwKYW5kIHdvcmtxdWV1ZS4g SXQgbWFpbnRhaW5zIHRoZSBkb29yYmVsbCBjYWNoZSBsaW5lLCBwcm9jZXNzCmRlc2NyaXB0aW9u IG9iamVjdCBhbmQgd29yayBxdWV1ZSBpdGVtLgoKQSBkZWZhdWx0IGd1Y19jbGllbnQgaXMgY3Jl YXRlZCB0byBkbyB0aGUgaW4tb3JkZXIgbGVnYWN5IGV4ZWNsaXN0CnN1Ym1pc3Npb24uCgpJc3N1 ZTogVklaLTQ4ODQKU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAzICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgfCAgIDUgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmggICAgICAgICAgIHwgIDUyICsrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Y19jbGllbnQuYyAgICB8IDQ0NiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jICAg IHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zY2hlZHVsZXIuYyB8ICAy OSArLQogNiBmaWxlcyBjaGFuZ2VkLCA1MzkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfY2xpZW50 LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDUwYjIwNTcuLjA0MDc3MjAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC00Miw3ICs0Miw4IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc CiAKICMgYW5jaWxsaWFyeSBtaWNyb2NvbnRyb2xsZXIgc3VwcG9ydAogaTkxNS15ICs9IGludGVs X3VjX2xvYWRlci5vIFwKLQkgIGludGVsX2d1Y19sb2FkZXIubworCSAgaW50ZWxfZ3VjX2xvYWRl ci5vIFwKKwkgIGludGVsX2d1Y19jbGllbnQubwogCiAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5k ZXIgc3RhdGUKIGk5MTUteSArPSBpbnRlbF9yZW5kZXJzdGF0ZV9nZW42Lm8gXApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKaW5kZXggNDhmNTZkOS4uMjhhNDQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCkBAIC0xODQ3LDYgKzE4NDcsMTEgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3RvX2k5MTUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiB0b19pOTE1 KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZ3VjX3RvX2k5MTUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQoreworCXJldHVy biBjb250YWluZXJfb2YoZ3VjLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgZ3VjKTsKK30KKwog LyogSXRlcmF0ZSBvdmVyIGluaXRpYWxpc2VkIHJpbmdzICovCiAjZGVmaW5lIGZvcl9lYWNoX3Jp bmcocmluZ19fLCBkZXZfcHJpdl9fLCBpX18pIFwKIAlmb3IgKChpX18pID0gMDsgKGlfXykgPCBJ OTE1X05VTV9SSU5HUzsgKGlfXykrKykgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAppbmRleCBj N2YzZWQ2Li45NmQ5ZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaApAQCAtMjcsMTEgKzI3 LDM4IEBACiAjaW5jbHVkZSAiaW50ZWxfZ3VjX2FwaS5oIgogI2luY2x1ZGUgImludGVsX3VjX2xv YWRlci5oIgogCisjZGVmaW5lIEdVQ19EQl9TSVpFCVBBR0VfU0laRQorI2RlZmluZSBHVUNfV1Ff U0laRQkoUEFHRV9TSVpFICogMikKKworc3RydWN0IGk5MTVfZ3VjX2NsaWVudCB7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKmNsaWVudF9vYmo7CisJdTMyIHByaW9yaXR5OworCW9mZl90 IGRvb3JiZWxsX29mZnNldDsKKwlvZmZfdCBwcm9jX2Rlc2Nfb2Zmc2V0OworCW9mZl90IHdxX29m ZnNldDsKKwl1aW50MTZfdCBkb29yYmVsbF9pZDsKKwl1aW50MzJfdCBjdHhfaW5kZXg7CisJdWlu dDMyX3Qgd3Ffc2l6ZTsKK307CisKKyNkZWZpbmUgSTkxNV9NQVhfRE9PUkJFTExTCTI1NgorI2Rl ZmluZSBJTlZBTElEX0RPT1JCRUxMX0lECUk5MTVfTUFYX0RPT1JCRUxMUworCisjZGVmaW5lIElO VkFMSURfQ1RYX0lECQkoTUFYX0dVQ19HUFVfQ09OVEVYVFMrMSkKKwogc3RydWN0IGludGVsX2d1 YyB7CiAJc3RydWN0IGludGVsX3VjX2Z3IGd1Y19mdzsKIAogCS8qIEd1Qy1zcGVjaWZpYyBhZGRp dGlvbnMgKi8KKwlzcGlubG9ja190IGhvc3QyZ3VjX2xvY2s7CisKIAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqY3R4X3Bvb2xfb2JqOworCisJc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZXhl Y2J1Zl9jbGllbnQ7CisKKwlzdHJ1Y3QgaWRhIGN0eF9pZHM7CisJaW50IGRiX2NhY2hlbGluZTsK KwlERUNMQVJFX0JJVE1BUChkb29yYmVsbF9iaXRtYXAsIEk5MTVfTUFYX0RPT1JCRUxMUyk7CiB9 OwogCiAjZGVmaW5lIEdVQ19TVEFUVVMJCTB4YzAwMApAQCAtOTgsNiArMTI1LDIyIEBAIHN0cnVj dCBpbnRlbF9ndWMgewogCQkJCSBHVUNfRU5BQkxFX1JFQURfQ0FDSEVfRk9SX1NSQU1fREFUQSB8 IFwKIAkJCQkgR1VDX0VOQUJMRV9SRUFEX0NBQ0hFX0ZPUl9XT1BDTV9EQVRBKQogCisjZGVmaW5l IEhPU1QyR1VDX0lOVEVSUlVQVAkweGM0YzgKKyNkZWZpbmUgICBIT1NUMkdVQ19UUklHR0VSCSgx PDwwKQorCisjZGVmaW5lIERSQk1JU0MxCQkweDE5ODQKKyNkZWZpbmUgICBET09SQkVMTF9FTkFC TEUJKDE8PDApCisKKyNkZWZpbmUgR0VOOF9EUkJSRUdMKHgpICgweDEwMDAgKyAoeCkgKiA4KQor I2RlZmluZSAgIEdFTjhfRFJCX1ZBTElEICgxPDwwKQorI2RlZmluZSBHRU44X0RSQlJFR1UoeCkg KDB4MTAwMCArICh4KSAqIDggKyA0KQorCisjZGVmaW5lIEdFTjhfR1RfUE1fQ09ORklHCQkweDEz ODE0MAorI2RlZmluZSAgIEdFTjhfR1RfRE9PUkJFTExfRU5BQkxFCSgxPDwwKQorCisjZGVmaW5l IEdFTjhfR1RDUgkJMHg0Mjc0CisjZGVmaW5lICAgR0VOOF9HVENSX0lOVkFMSURBVEUJKDE8PDAp CisKIC8qIGludGVsX2d1Y19sb2FkZXIuYyAqLwogZXh0ZXJuIGludCBpbnRlbF9ndWNfbG9hZF91 Y29kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHdhaXQpOwogZXh0ZXJuIHZvaWQgaW50 ZWxfZ3VjX3Vjb2RlX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC0xMTMsNCArMTU2 LDEzIEBAIGludCBndWNfc2NoZWR1bGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK IHZvaWQgZ3VjX3NjaGVkdWxlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogYm9v bCBzYW5pdGl6ZV9lbmFibGVfZ3VjX3NjaGVkdWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CiAKKy8qIGludGVsX2d1Y19jbGllbnQuYyAqLworc3RydWN0IGk5MTVfZ3VjX2NsaWVudCoKK2k5 MTVfZ3VjX2NsaWVudF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcHJpb3JpdHkp Owordm9pZCBpOTE1X2d1Y19jbGllbnRfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ ICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpOworaW50IGk5MTVfZ3VjX2NsaWVudF9z dWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAorCQkJICAgc3RydWN0IGludGVs X2NvbnRleHQgKmN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOworCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19jbGllbnQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19jbGllbnQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTYzMjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2NsaWVudC5jCkBAIC0wLDAgKzEsNDQ2IEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvZmly bXdhcmUuaD4KKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2d1Yy5oIgor CisvKioKKyAqIERPQzogR3VDIENsaWVudAorICoKKyAqIGk5MTVfZ3VjX2NsaWVudDoKKyAqIFdl IHVzZSB0aGUgdGVybSBjbGllbnQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggY29udGV4dHMuIEEg aTkxNV9ndWNfY2xpZW50IGlzCisgKiBlcXVpdmFsZW50IHRvIEd1QyBvYmplY3QgZ3VjX2NvbnRl eHRfZGVzYy4gVGhpcyBjb250ZXh0IGRlc2NyaXB0b3IgaXMKKyAqIGFsbG9jYXRlZCBmcm9tIGEg cG9vbCBvZiAxMDI0IGVudHJpZXMuIEtlcm5lbCBkcml2ZXIgd2lsbCBhbGxvY2F0ZSBkb29yYmVs bAorICogYW5kIHdvcmtxdWV1ZSBmb3IgaXQuIEFsc28gdGhlIHByb2Nlc3MgZGVzY3JpcHRvciAo Z3VjX3Byb2Nlc3NfZGVzYyksIHdoaWNoCisgKiBpcyBtYXBwZWQgdG8gY2xpZW50IHNwYWNlLiBT byB0aGUgY2xpZW50IGNhbiB3cml0ZSBXb3JrIEl0ZW0gdGhlbiByaW5nIHRoZQorICogZG9vcmJl bGwuCisgKgorICogVG8gc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uLCB3ZSBhbGxvY2F0ZSBv bmUgZ2VtIG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbAorICogcGFnZXMgZm9yIGRvb3JiZWxsLCBw cm9jZXNzIGRlc2NyaXB0b3IgYW5kIHdvcmtxdWV1ZS4KKyAqCisgKiBUaGUgU2NyYXRjaCByZWdp c3RlcnM6CisgKiBUaGVyZSBhcmUgMTYgTU1JTy1iYXNlZCByZWdpc3RlcnMgc3RhcnQgZnJvbSAw eEMxODAuIFRoZSBrZXJuZWwgZHJpdmVyIHdyaXRlcworICogYSB2YWx1ZSB0byB0aGUgYWN0aW9u IHJlZ2lzdGVyIChTT0ZUX1NDUkFUQ0hfMCkgYWxvbmcgd2l0aCBhbnkgZGF0YS4gSXQgdGhlbgor ICogdHJpZ2dlcnMgYW4gaW50ZXJydXB0IG9uIHRoZSBHdUMgdmlhIGFub3RoZXIgcmVnaXN0ZXIg d3JpdGUgKDB4QzRDOCkuCisgKiBGaXJtd2FyZSB3cml0ZXMgYSBzdWNjZXNzL2ZhaWwgY29kZSBi YWNrIHRvIHRoZSBhY3Rpb24gcmVnaXN0ZXIgYWZ0ZXIKKyAqIHByb2Nlc3NlcyB0aGUgcmVxdWVz dC4gVGhlIGtlcm5lbCBkcml2ZXIgcG9sbHMgd2FpdGluZyBmb3IgdGhpcyB1cGRhdGUgYW5kCisg KiB0aGVuIHByb2NlZWRzLgorICogU2VlIGludGVsX2d1Y19hY3Rpb24oKQorICoKKyAqIERvb3Ji ZWxsczoKKyAqIERvb3JiZWxscyBhcmUgaW50ZXJydXB0cyB0byB1S2VybmVsLiBBIGRvb3JiZWxs IGlzIGEgc2luZ2xlIGNhY2hlIGxpbmUgKFFXKQorICogbWFwcGVkIGludG8gcHJvY2VzcyBzcGFj ZS4KKyAqCisgKi8KKworLyoKKyAqIFJlYWQgR3VDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyIChT T0ZUX1NDUkFUQ0hfMCkKKyAqIFJldHVybiB0cnVlIGlmIGl0IGNvbnRhaW5zIGEgcmVzcG9uc2Ug cmF0aGVyIHRoYW4gYSBjb21tYW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2d1Y19n ZXRfcmVzcG9uc2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgdTMy ICpzdGF0dXMpCit7CisJdTMyIHZhbCA9IEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMCkpOworCSpz dGF0dXMgPSB2YWw7CisJcmV0dXJuIEdVQzJIT1NUX0lTX1JFU1BPTlNFKHZhbCk7Cit9CisKK3N0 YXRpYyBpbnQgaW50ZWxfZ3VjX2FjdGlvbihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiAqZGF0 YSwgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNf dG9faTkxNShndWMpOworCXUzMiBzdGF0dXM7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmIChX QVJOX09OKGxlbiA8IDEgfHwgbGVuID4gMTUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5f bG9jaygmZGV2X3ByaXYtPmd1Yy5ob3N0Mmd1Y19sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykKKwkJSTkxNV9XUklURShTT0ZUX1NDUkFUQ0goaSksIGRhdGFbaV0pOworCisJUE9T VElOR19SRUFEKFNPRlRfU0NSQVRDSChpIC0gMSkpOworCisJSTkxNV9XUklURShIT1NUMkdVQ19J TlRFUlJVUFQsIEhPU1QyR1VDX1RSSUdHRVIpOworCisJcmV0ID0gd2FpdF9mb3JfYXRvbWljKGk5 MTVfZ3VjX2dldF9yZXNwb25zZShkZXZfcHJpdiwgJnN0YXR1cyksIDEwKTsKKwlpZiAoc3RhdHVz ICE9IEdVQzJIT1NUX1NUQVRVU19TVUNDRVNTKSB7CisJCS8qIGVpdGhlciBHdUMgZG9lc24ndCBy ZXNwb25zZSwgd2hpY2ggaXMgYSBUSU1FT1VULAorCQkgKiBvciBhIGZhaWx1cmUgY29kZSBpcyBy ZXR1cm5lZC4gKi8KKwkJaWYgKHJldCAhPSAtRVRJTUVET1VUKQorCQkJcmV0ID0gLUVJTzsKKwor CQlEUk1fRVJST1IoIkdVQzogaG9zdDJndWMgYWN0aW9uIDB4JVggZmFpbGVkLiByZXQ9JWQgIgor CQkJCSJzdGF0dXM9MHglMDhYIHJlc3BvbnNlPTB4JTA4WFxuIiwKKwkJCQlkYXRhWzBdLCByZXQs IHN0YXR1cywKKwkJCQlJOTE1X1JFQUQoU09GVF9TQ1JBVENIKDE1KSkpOworCX0KKworCXNwaW5f dW5sb2NrKCZkZXZfcHJpdi0+Z3VjLmhvc3QyZ3VjX2xvY2spOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgZ3VjX3JlbGVhc2VfY3R4X2Rlc2Moc3RydWN0IGludGVsX2d1YyAqZ3Vj LCB1aW50MzJfdCBpZCkKK3sKKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisJaWRh X3NpbXBsZV9yZW1vdmUoJmd1Yy0+Y3R4X2lkcywgaWQpOworCXNwaW5fdW5sb2NrKCZndWMtPmhv c3QyZ3VjX2xvY2spOworfQorCitzdGF0aWMgdWludDMyX3QgZ3VjX2Fzc2lnbl9jdHhfZGVzYyhz dHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJaW50IGlkOworCisJc3Bpbl9sb2NrKCZndWMtPmhv c3QyZ3VjX2xvY2spOworCWlkID0gaWRhX3NpbXBsZV9nZXQoJmd1Yy0+Y3R4X2lkcywgMCwKKwkJ CSAgICBNQVhfR1VDX0dQVV9DT05URVhUUywgR0ZQX0tFUk5FTCk7CisJc3Bpbl91bmxvY2soJmd1 Yy0+aG9zdDJndWNfbG9jayk7CisKKwlyZXR1cm4gKGlkIDwgMCkgPyBJTlZBTElEX0NUWF9JRCA6 ICh1aW50MzJfdClpZDsKK30KKworc3RhdGljIHZvaWQgZ3VjX3JlbGVhc2VfZG9vcmJlbGwoc3Ry dWN0IGludGVsX2d1YyAqZ3VjLCB1aW50MTZfdCBpZCkKK3sKKwlzcGluX2xvY2soJmd1Yy0+aG9z dDJndWNfbG9jayk7CisJYml0bWFwX2NsZWFyKGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBpZCwgMSk7 CisJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cit9CisKK3N0YXRpYyB1aW50MTZf dCBndWNfYXNzaWduX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHByaW9yaXR5 KQoreworCWNvbnN0IHVpbnQxNl90IHNpemUgPSBJOTE1X01BWF9ET09SQkVMTFM7CisJdWludDE2 X3QgaWQ7CisKKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwkvKiBUaGUgYml0 bWFwIGlzIHNwbGl0IGludG8gdHdvIGhhbHZlcyAtIGhpZ2ggYW5kIG5vcm1hbCBwcmlvcml0eS4g Ki8KKwlpZiAocHJpb3JpdHkgPD0gR1VDX0NUWF9QUklPUklUWV9ISUdIKSB7CisJCWlkID0gZmlu ZF9uZXh0X3plcm9fYml0KGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBzaXplLCBzaXplIC8gMik7CisJ CWlmIChpZCA9PSBzaXplKQorCQkJaWQgPSBJTlZBTElEX0RPT1JCRUxMX0lEOworCX0gZWxzZSB7 CisJCWlkID0gZmluZF9uZXh0X3plcm9fYml0KGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCBzaXplIC8g MiwgMCk7CisJCWlmIChpZCA9PSBzaXplIC8gMikKKwkJCWlkID0gSU5WQUxJRF9ET09SQkVMTF9J RDsKKwl9CisKKwlpZiAoaWQgIT0gSU5WQUxJRF9ET09SQkVMTF9JRCkKKwkJYml0bWFwX3NldChn dWMtPmRvb3JiZWxsX2JpdG1hcCwgaWQsIDEpOworCisJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJn dWNfbG9jayk7CisKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBvZmZfdCBndWNfc2VsZWN0X2Rv b3JiZWxsX2NhY2hlbGluZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJY29uc3QgaW50IGNh Y2hlbGluZV9zaXplID0gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplOworCWNvbnN0IGlu dCBjYWNoZWxpbmVfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBjYWNoZWxpbmVfc2l6ZTsKKwlvZmZf dCBvZmZzZXQ7CisKKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwkvKiBEb29y YmVsbCB1c2VzIHNpbmdsZSBjYWNoZSBsaW5lICovCisJb2Zmc2V0ID0gY2FjaGVsaW5lX3NpemUg KiBndWMtPmRiX2NhY2hlbGluZTsKKworCS8qIE1vdmluZyB0byBuZXh0IGNhY2hlIGxpbmUgdG8g cmVkdWNlIGNvbnRlbnRpb24gKi8KKwlndWMtPmRiX2NhY2hlbGluZSA9IChndWMtPmRiX2NhY2hl bGluZSArIDEpICUgY2FjaGVsaW5lX3Blcl9wYWdlOworCisJc3Bpbl91bmxvY2soJmd1Yy0+aG9z dDJndWNfbG9jayk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBpbml0X2N0 eF9kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCSAgc3RydWN0IGk5MTVfZ3VjX2NsaWVu dCAqY2xpZW50KQoreworCXN0cnVjdCBndWNfY29udGV4dF9kZXNjIGRlc2M7CisJc3RydWN0IHNn X3RhYmxlICpzZzsKKworCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCWRlc2Mu YXR0cmlidXRlID0gR1VDX0NUWF9ERVNDX0FUVFJfQUNUSVZFIHwgR1VDX0NUWF9ERVNDX0FUVFJf S0VSTkVMOworCWRlc2MuY29udGV4dF9pZCA9IGNsaWVudC0+Y3R4X2luZGV4OworCWRlc2MucHJp b3JpdHkgPSBjbGllbnQtPnByaW9yaXR5OworCWRlc2MuZW5naW5lc191c2VkID0gKDEgPDwgUkNT KSB8ICgxIDw8IFZDUykgfCAoMSA8PCBCQ1MpIHwKKwkJCSAgICAoMSA8PCBWRUNTKSB8ICgxIDw8 IFZDUzIpOyAvKiBhbGwgZW5naW5lcyAqLworCWRlc2MuZGJfaWQgPSBjbGllbnQtPmRvb3JiZWxs X2lkOworCisJLyoKKwkgKiBUaGUgQ1BVIGFkZHJlc3MgaXMgb25seSBuZWVkZWQgYXQgY2VydGFp biBwb2ludHMsIHNvIGttYXBfYXRvbWljIG9uCisJICogZGVtYW5kIGluc3RlYWQgb2Ygc3Rvcmlu ZyBpdCBpbiB0aGUgY3R4IGRlc2NyaXB0b3IuCisJICogWFhYOiBNYXkgbWFrZSBkZWJ1ZyBlYXNp ZXIgdG8gaGF2ZSBpdCBtYXBwZWQKKwkgKi8KKwlkZXNjLmRiX3RyaWdnZXJfY3B1ID0gMDsKKwlk ZXNjLmRiX3RyaWdnZXJfdWsgPSBjbGllbnQtPmRvb3JiZWxsX29mZnNldCArCisJCWk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldChjbGllbnQtPmNsaWVudF9vYmopOworCWRlc2MuZGJfdHJpZ2dlcl9w aHkgPSBjbGllbnQtPmRvb3JiZWxsX29mZnNldCArCisJCXNnX2RtYV9hZGRyZXNzKGNsaWVudC0+ Y2xpZW50X29iai0+cGFnZXMtPnNnbCk7CisKKwlkZXNjLnByb2Nlc3NfZGVzYyA9IGNsaWVudC0+ cHJvY19kZXNjX29mZnNldCArCisJCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjbGllbnQtPmNs aWVudF9vYmopOworCisJZGVzYy53cV9hZGRyID0gY2xpZW50LT53cV9vZmZzZXQgKworCQlpOTE1 X2dlbV9vYmpfZ2d0dF9vZmZzZXQoY2xpZW50LT5jbGllbnRfb2JqKTsKKworCWRlc2Mud3Ffc2l6 ZSA9IGNsaWVudC0+d3Ffc2l6ZTsKKworCS8qCisJICogWFhYOiBUYWtlIExSQ3MgZnJvbSBhbiBl eGlzdGluZyBpbnRlbF9jb250ZXh0IGlmIHRoaXMgaXMgbm90IGFuCisJICogSXNLTURDcmVhdGVk Q29udGV4dCBjbGllbnQKKwkgKi8KKwlkZXNjLmRlc2NfcHJpdmF0ZSA9ICh1aW50cHRyX3QpY2xp ZW50OworCisJLyogUG9vbCBjb250ZXh0IGlzIHBpbm5lZCBhbHJlYWR5ICovCisJc2cgPSBndWMt PmN0eF9wb29sX29iai0+cGFnZXM7CisJc2dfcGNvcHlfZnJvbV9idWZmZXIoc2ctPnNnbCwgc2ct Pm5lbnRzLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJICAgICBzaXplb2YoZGVzYykgKiBjbGll bnQtPmN0eF9pbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlfY3R4X2Rlc2Moc3RydWN0IGlu dGVsX2d1YyAqZ3VjLAorCQkJICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCit7CisJ c3RydWN0IGd1Y19jb250ZXh0X2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnOworCisJ bWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJc2cgPSBndWMtPmN0eF9wb29sX29i ai0+cGFnZXM7CisJc2dfcGNvcHlfZnJvbV9idWZmZXIoc2ctPnNnbCwgc2ctPm5lbnRzLCAmZGVz Yywgc2l6ZW9mKGRlc2MpLAorCQkJICAgICBzaXplb2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRl eCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcHJvY19kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywKKwkJCSAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZ3Vj X3Byb2Nlc3NfZGVzYyAqZGVzYzsKKwl2b2lkICpiYXNlOworCisJYmFzZSA9IGttYXBfYXRvbWlj KGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjbGllbnQtPmNsaWVudF9vYmosIDApKTsKKwlkZXNj ID0gYmFzZSArIGNsaWVudC0+cHJvY19kZXNjX29mZnNldDsKKworCW1lbXNldChkZXNjLCAwLCBz aXplb2YoKmRlc2MpKTsKKworCS8qCisJICogWFhYOiBwRG9vcmJlbGwgYW5kIFdRVkJhc2VBZGRy ZXNzIGFyZSBwb2ludGVycyBpbiBwcm9jZXNzIGFkZHJlc3MKKwkgKiBzcGFjZSBmb3IgcmluZzMg Y2xpZW50cyAoc2V0IHRoZW0gYXMgaW4gbW1hcF9pb2N0bCkgb3Iga2VybmVsCisJICogc3BhY2Ug Zm9yIGtlcm5lbCBjbGllbnRzIChtYXAgb24gZGVtYW5kIGluc3RlYWQ/IE1heSBtYWtlIGRlYnVn CisJICogZWFzaWVyIHRvIGhhdmUgaXQgbWFwcGVkKS4KKwkgKi8KKwlkZXNjLT53cV9iYXNlX2Fk ZHIgPSAwOworCWRlc2MtPmRiX2Jhc2VfYWRkciA9IDA7CisKKwlkZXNjLT5jb250ZXh0X2lkID0g Y2xpZW50LT5jdHhfaW5kZXg7CisJZGVzYy0+d3Ffc2l6ZV9ieXRlcyA9IGNsaWVudC0+d3Ffc2l6 ZTsKKwlkZXNjLT53cV9zdGF0dXMgPSBXUV9TVEFUVVNfQUNUSVZFOworCWRlc2MtPnByaW9yaXR5 ID0gY2xpZW50LT5wcmlvcml0eTsKKworCWt1bm1hcF9hdG9taWMoYmFzZSk7Cit9CisKK3N0YXRp YyBpbnQgaG9zdDJndWNfYWxsb2NhdGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAor CQkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKK3sKKwl1MzIgZGF0YVsy XTsKKworCWRhdGFbMF0gPSBIT1NUMkdVQ19BQ1RJT05fQUxMT0NBVEVfRE9PUkJFTEw7CisJZGF0 YVsxXSA9IGNsaWVudC0+Y3R4X2luZGV4OworCisJcmV0dXJuIGludGVsX2d1Y19hY3Rpb24oZ3Vj LCBkYXRhLCAyKTsKK30KKworc3RhdGljIGludCBob3N0Mmd1Y19yZWxlYXNlX2Rvb3JiZWxsKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCQkgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNs aWVudCkKK3sKKwl1MzIgZGF0YVsyXTsKKworCWRhdGFbMF0gPSBIT1NUMkdVQ19BQ1RJT05fREVB TExPQ0FURV9ET09SQkVMTDsKKwlkYXRhWzFdID0gY2xpZW50LT5jdHhfaW5kZXg7CisKKwlyZXR1 cm4gaW50ZWxfZ3VjX2FjdGlvbihndWMsIGRhdGEsIDIpOworfQorCitzdGF0aWMgdm9pZCBpbml0 X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCSAgc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqY2xpZW50KQoreworCXN0cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAqZG9vcmJlbGw7CisJ dm9pZCAqYmFzZTsKKworCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3Bh Z2UoY2xpZW50LT5jbGllbnRfb2JqLCAwKSk7CisJZG9vcmJlbGwgPSBiYXNlICsgY2xpZW50LT5k b29yYmVsbF9vZmZzZXQ7CisKKwlkb29yYmVsbC0+ZGJfc3RhdHVzID0gMTsKKwlkb29yYmVsbC0+ Y29va2llID0gMDsKKworCWt1bm1hcF9hdG9taWMoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRp c2FibGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAorCQkJICAgICBzdHJ1Y3QgaTkx NV9ndWNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwlzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3Ji ZWxsOworCXZvaWQgKmJhc2U7CisJaW50IGRyYnJlZyA9IEdFTjhfRFJCUkVHTChjbGllbnQtPmRv b3JiZWxsX2lkKTsKKwlpbnQgdmFsdWU7CisKKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9nZW1f b2JqZWN0X2dldF9wYWdlKGNsaWVudC0+Y2xpZW50X29iaiwgMCkpOworCWRvb3JiZWxsID0gYmFz ZSArIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0OworCisJZG9vcmJlbGwtPmRiX3N0YXR1cyA9IDA7 CisKKwlrdW5tYXBfYXRvbWljKGJhc2UpOworCisJSTkxNV9XUklURShkcmJyZWcsIEk5MTVfUkVB RChkcmJyZWcpICYgfkdFTjhfRFJCX1ZBTElEKTsKKworCXZhbHVlID0gSTkxNV9SRUFEKGRyYnJl Zyk7CisJV0FSTl9PTigodmFsdWUgJiBHRU44X0RSQl9WQUxJRCkgIT0gMCk7CisKKwlJOTE1X1dS SVRFKEdFTjhfRFJCUkVHVShjbGllbnQtPmRvb3JiZWxsX2lkKSwgMCk7CisJSTkxNV9XUklURShk cmJyZWcsIDApOworCisJLyogWFhYOiB3YWl0IGZvciBhbnkgaW50ZXJydXB0cyAqLworCS8qIFhY WDogd2FpdCBmb3Igd29ya3F1ZXVlIHRvIGRyYWluICovCit9CisKK3ZvaWQgaTkxNV9ndWNfY2xp ZW50X2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7 CisKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuOworCisJaWYgKGNsaWVudC0+ZG9vcmJlbGxfaWQg IT0gSU5WQUxJRF9ET09SQkVMTF9JRCkgeworCQlkaXNhYmxlX2Rvb3JiZWxsKGd1YywgY2xpZW50 KTsKKwkJaG9zdDJndWNfcmVsZWFzZV9kb29yYmVsbChndWMsIGNsaWVudCk7CisJCWd1Y19yZWxl YXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5kb29yYmVsbF9pZCk7CisJfQorCisJLyoKKwkgKiBY WFg6IHdhaXQgZm9yIGFueSBvdXRzdGFuZGluZyBzdWJtaXNzaW9ucyBiZWZvcmUgZnJlZWluZyBt ZW1vcnkuCisJICogQmUgc3VyZSB0byBkcm9wIGFueSBsb2NrcworCSAqLworCisJaW50ZWxfZ3Vj X3JlbGVhc2VfZ2VtX29iaihjbGllbnQtPmNsaWVudF9vYmopOworCisJaWYgKGNsaWVudC0+Y3R4 X2luZGV4ICE9IElOVkFMSURfQ1RYX0lEKSB7CisJCWZpbmlfY3R4X2Rlc2MoZ3VjLCBjbGllbnQp OworCQlndWNfcmVsZWFzZV9jdHhfZGVzYyhndWMsIGNsaWVudC0+Y3R4X2luZGV4KTsKKwl9CisK KwlrZnJlZShjbGllbnQpOworfQorCisvKioKKyAqIGk5MTVfZ3VjX2NsaWVudF9hbGxvYygpIC0g QWxsb2NhdGUgYW4gaTkxNV9ndWNfY2xpZW50CisgKiBAZGV2Oglkcm0gZGV2aWNlCisgKiBAcHJp b3JpdHk6CWZvdXIgbGV2ZWxzIHByaW9yaXR5IF9DUklUSUNBTCwgX0hJR0gsIF9OT1JNQUwgYW5k IF9MT1cKKyAqIAkJVGhlIGtlcm5lbCBjbGllbnQgdG8gcmVwbGFjZSBFeGVjTGlzdCBzdWJtaXNz aW9uIGlzIGNyZWF0ZWQgd2l0aAorICogCQlOT1JNQUwgcHJpb3JpdHkuIFByaW9yaXR5IG9mIGEg Y2xpZW50IGZvciBzY2hlZHVsZXIgY2FuIGJlIEhJR0gsCisgKiAJCXdoaWxlIGEgcHJlZW1wdGlv biBjb250ZXh0IGNhbiB1c2UgQ1JJVElDQUwuCisgKgorICogUmV0dXJuOglBbiBpOTE1X2d1Y19j bGllbnQgb2JqZWN0IGlmIHN1Y2Nlc3MuCisgKi8KK3N0cnVjdCBpOTE1X2d1Y19jbGllbnQqCitp OTE1X2d1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHByaW9yaXR5 KQoreworCXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMg Kmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7 CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFjbGllbnQpCisJCXJldHVybiBOVUxMOworCisJY2xpZW50LT5kb29yYmVsbF9pZCA9IElOVkFM SURfRE9PUkJFTExfSUQ7CisJY2xpZW50LT5wcmlvcml0eSA9IHByaW9yaXR5OworCisJY2xpZW50 LT5jdHhfaW5kZXggPSBndWNfYXNzaWduX2N0eF9kZXNjKGd1Yyk7CisJaWYgKGNsaWVudC0+Y3R4 X2luZGV4ID09IElOVkFMSURfQ1RYX0lEKQorCQlnb3RvIGVycjsKKworCS8qIFRoZSBmaXJzdCBw YWdlIGlzIGRvb3JiZWxsL3Byb2NfZGVzYy4gVHdvIGZvbGxvd2VkIHBhZ2VzIGFyZSB3cS4gKi8K KwlvYmogPSBpbnRlbF9ndWNfYWxsb2NhdGVfZ2VtX29iaihkZXYsIEdVQ19EQl9TSVpFICsgR1VD X1dRX1NJWkUpOworCWlmICghb2JqKQorCQlnb3RvIGVycjsKKworCWNsaWVudC0+Y2xpZW50X29i aiA9IG9iajsKKwljbGllbnQtPndxX29mZnNldCA9IEdVQ19EQl9TSVpFOworCWNsaWVudC0+d3Ff c2l6ZSA9IEdVQ19XUV9TSVpFOworCisJY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPSBndWNfc2Vs ZWN0X2Rvb3JiZWxsX2NhY2hlbGluZShndWMpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgZG9vcmJl bGwgb25seSByZXF1aXJlcyBhIHNpbmdsZSBjYWNoZWxpbmUsIHdlIGNhbiBzYXZlCisJICogc3Bh Y2UgYnkgcHV0dGluZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBkZXNjcmlwdG9yIGluIHRoZSBz YW1lCisJICogcGFnZS4gVXNlIHRoZSBoYWxmIG9mIHRoZSBwYWdlIHRoYXQgZG9lc24ndCBpbmNs dWRlIHRoZSBkb29yYmVsbC4KKwkgKi8KKwlpZiAoY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPj0g KEdVQ19EQl9TSVpFIC8gMikpCisJCWNsaWVudC0+cHJvY19kZXNjX29mZnNldCA9IDA7CisJZWxz ZQorCQljbGllbnQtPnByb2NfZGVzY19vZmZzZXQgPSAoR1VDX0RCX1NJWkUgLyAyKTsKKworCWNs aWVudC0+ZG9vcmJlbGxfaWQgPSBndWNfYXNzaWduX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5wcmlv cml0eSk7CisJaWYgKGNsaWVudC0+ZG9vcmJlbGxfaWQgPT0gSU5WQUxJRF9ET09SQkVMTF9JRCkK KwkJLyogWFhYOiBldmljdCBhIGRvb3JiZWxsIGluc3RlYWQgKi8KKwkJZ290byBlcnI7CisKKwlp bml0X2N0eF9kZXNjKGd1YywgY2xpZW50KTsKKwlpbml0X3Byb2NfZGVzYyhndWMsIGNsaWVudCk7 CisJaW5pdF9kb29yYmVsbChndWMsIGNsaWVudCk7CisKKwkvKiBJbnZhbGlkYXRlIEd1QyBUTEIg dG8gbGV0IEd1QyB0YWtlIHRoZSBsYXRlc3QgdXBkYXRlcyB0byBHVFQuICovCisJSTkxNV9XUklU RShHRU44X0dUQ1IsIEdFTjhfR1RDUl9JTlZBTElEQVRFKTsKKworCS8qIFhYWDogQW55IGNhY2hl IGZsdXNoZXMgbmVlZGVkPyBHZW5lcmFsIGRvbWFpbiBtZ210IGNhbGxzPyAqLworCisJaWYgKGhv c3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1YywgY2xpZW50KSkKKwkJZ290byBlcnI7CisKKwly ZXR1cm4gY2xpZW50OworCitlcnI6CisJaTkxNV9ndWNfY2xpZW50X2ZyZWUoZGV2LCBjbGllbnQp OworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGk5MTVfZ3VjX2NsaWVudF9zdWJtaXQoKSAt IFN1Ym1pdCBjb21tYW5kcyB0aHJvdWdoIEd1QworICogQGNsaWVudDoJdGhlIGd1YyBjbGllbnQg d2hlcmUgY29tbWFuZHMgd2lsbCBnbyB0aHJvdWdoCisgKiBAY3R4OglMUkMgd2hlcmUgY29tbWFu ZHMgY29tZSBmcm9tCisgKiBAcmluZzoJSFcgZW5naW5lIHRoYXQgd2lsbCBleGN1dGUgdGhlIGNv bW1hbmRzCisgKgorICogUmV0dXJuOgkwIGlmIHN1Y2NlZWQKKyAqLworaW50IGk5MTVfZ3VjX2Ns aWVudF9zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAorCQkJICAgc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Cit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWNfbG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMK aW5kZXggNDRkYzBiMy4uZGFmYWIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZ3VjX2xvYWRlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19s b2FkZXIuYwpAQCAtMjkyLDEyICsyOTIsMTkgQEAgc3RhdGljIGludCBndWNfbG9hZF91Y29kZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJLyogU2V0IE1NSU8vV0EgZm9yIEd1QyBpbml0ICov CiAKKwlJOTE1X1dSSVRFKERSQk1JU0MxLCBET09SQkVMTF9FTkFCTEUpOworCiAJLyogRW5hYmxl IE1JQSBjYWNoaW5nLiBHdUMgY2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkLiAqLwogCUk5MTVfV1JJ VEUoR1VDX1NISU1fQ09OVFJPTCwgR1VDX1NISU1fQ09OVFJPTF9WQUxVRSk7CiAKIAkvKiBXYUM2 RGlzYWxsb3dCeUdmeFBhdXNlKi8KIAlJOTE1X1dSSVRFKEdFTjZfR0ZYUEFVU0UsIDB4MzBGRkYp OwogCisJaWYgKElTX1NLWUxBS0UoZGV2KSkKKwkJSTkxNV9XUklURShHRU45X0dUX1BNX0NPTkZJ RywgR0VOOF9HVF9ET09SQkVMTF9FTkFCTEUpOworCWVsc2UKKwkJSTkxNV9XUklURShHRU44X0dU X1BNX0NPTkZJRywgR0VOOF9HVF9ET09SQkVMTF9FTkFCTEUpOworCiAJaWYgKElTX0dFTjkoZGV2 KSkgewogCQkvKiBET1AgQ2xvY2sgR2F0aW5nIEVuYWJsZSBmb3IgR3VDIGNsb2NrcyAqLwogCQlJ OTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RMLCAoR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxF IHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zY2hlZHVsZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zY2hlZHVsZXIuYwppbmRleCBlZDc0 NGZiLi5hNzhiNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf c2NoZWR1bGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3NjaGVkdWxl ci5jCkBAIC0zNiw2ICszNiw4IEBAIHZvaWQgZ3VjX3NjaGVkdWxlcl9maW5pKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCiAJaWYgKGN0eF9wb29sKSB7CiAJCWludGVsX2d1Y19yZWxlYXNlX2dlbV9v YmooY3R4X3Bvb2wpOwogCQlndWMtPmN0eF9wb29sX29iaiA9IE5VTEw7CisKKwkJaWRhX2Rlc3Ry b3koJmd1Yy0+Y3R4X2lkcyk7CiAJfQogfQogCkBAIC02MCwyMSArNjIsNDQgQEAgaW50IGd1Y19z Y2hlZHVsZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWlmICghZ3VjLT5jdHhfcG9v bF9vYmopCiAJCXJldHVybiAtRU5PTUVNOwogCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5n dWMuaG9zdDJndWNfbG9jayk7CisKKwlpZGFfaW5pdCgmZ3VjLT5jdHhfaWRzKTsKKworCW1lbXNl dChndWMtPmRvb3JiZWxsX2JpdG1hcCwgMCwgc2l6ZW9mKGd1Yy0+ZG9vcmJlbGxfYml0bWFwKSk7 CisJZ3VjLT5kYl9jYWNoZWxpbmUgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKIGludCBndWNfc2No ZWR1bGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CisKIAlpZiAoIWk5MTUuZW5hYmxlX2d1Y19zY2hlZHVs aW5nKQogCQlyZXR1cm4gMDsKIAotCS8qIFRPRE86IHBsYWNlaG9sZGVyIGZvciBndWMgc2NoZWR1 bGVyIGVuYWJsaW5nICovCisJLyogY2xpZW50IGZvciBleGVjYnVmIHN1Ym1pc3Npb24gKi8KKwln dWMtPmV4ZWNidWZfY2xpZW50ID0KKwkJCWk5MTVfZ3VjX2NsaWVudF9hbGxvYyhkZXYsIEdVQ19D VFhfUFJJT1JJVFlfTk9STUFMKTsKKwlpZiAoIWd1Yy0+ZXhlY2J1Zl9jbGllbnQpIHsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGV4ZWNidWYgZ3VjX2NsaWVudFxuIik7CisJCXJldHVy biAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCiB2b2lkIGd1Y19zY2hlZHVsZXJfZGlz YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCS8qIFRPRE86IHBsYWNlaG9sZGVyIGZv ciBndWMgc2NoZWR1bGVyIGRpc2FibGluZyAqLworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRl dl9wcml2LT5ndWM7CisKKwlpZiAoZ3VjLT5leGVjYnVmX2NsaWVudCkgeworCQlpOTE1X2d1Y19j bGllbnRfZnJlZShkZXYsIGd1Yy0+ZXhlY2J1Zl9jbGllbnQpOworCQlndWMtPmV4ZWNidWZfY2xp ZW50ID0gTlVMTDsKKwl9CiB9CiAKIGJvb2wgc2FuaXRpemVfZW5hYmxlX2d1Y19zY2hlZHVsaW5n KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK