From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 1/9 v6] drm/i915: GuC-specific firmware loader Date: Wed, 12 Aug 2015 15:43:36 +0100 Message-ID: <1439390624-21724-2-git-send-email-david.s.gordon@intel.com> References: <1439390624-21724-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 933E36EB84 for ; Wed, 12 Aug 2015 07:43:51 -0700 (PDT) In-Reply-To: <1439390624-21724-1-git-send-email-david.s.gordon@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+CgpUaGlzIGZldGNoZXMgdGhlIHJlcXVp cmVkIGZpcm13YXJlIGltYWdlIGZyb20gdGhlIGZpbGVzeXN0ZW0sCnRoZW4gbG9hZHMgaXQgaW50 byB0aGUgR3VDJ3MgbWVtb3J5IHZpYSBhIGRlZGljYXRlZCBETUEgZW5naW5lLgoKVGhpcyBwYXRj aCBpcyBkZXJpdmVkIGZyb20gR3VDIGxvYWRpbmcgd29yayBvcmlnaW5hbGx5IGRvbmUgYnkKVmlu aXQgQXphZCBhbmQgQmVuIFdpZGF3c2t5LgoKdjI6CiAgICBWYXJpb3VzIGltcHJvdmVtZW50cyBw ZXIgcmV2aWV3IGNvbW1lbnRzIGJ5IENocmlzIFdpbHNvbgoKdjM6CiAgICBSZW1vdmVkICd3YWl0 JyBwYXJhbWV0ZXIgdG8gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSBhcyBmaXJtd2FyZQogICAgICAg IHByZWZldGNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdGhlIGNvbW1vbiBmaXJtd2FyZSBs b2FkZXIsCglwZXIgRGFuaWVsIFZldHRlcidzIHJlcXVlc3QuCiAgICBGaXJtd2FyZSBjaGVja2Vy IGNhbGxiYWNrIGZuIG5vdyByZXR1cm5zIGVycm5vIHJhdGhlciB0aGFuIGJvb2wuCgp2NDoKICAg IFNxdWFzaCB1Qy1pbmRlcGVuZGVudCBjb2RlIGludG8gR3VDLXNwZWNpZmMgbG9hZGVyIFtEYW5p ZWwgVmV0dGVyXQogICAgRG9uJ3Qga2VlcCB0aGUgZHJpdmVyIHdvcmtpbmcgKGJ5IGZhbGxpbmcg YmFjayB0byBleGVjbGlzdCBtb2RlKQogICAgICAgIGlmIEd1QyBmaXJtd2FyZSBsb2FkaW5nIGZh aWxzIFtEYW5pZWwgVmV0dGVyXQoKdjU6CiAgICBDbGFyaWZ5IFdPUENNLXJlbGF0ZWQgI2RlZmlu ZXMgW1RvbSBPJ1JvdXJrZV0KICAgIERlbGV0ZSBvYnNvbGV0ZSBjb2RlIG5vIGxvbmdlciByZXF1 aXJlZCB3aXRoIGN1cnJlbnQgaC93ICYgZi93CiAgICAgICAgW1RvbSBPJ1JvdXJrZV0KICAgIE1v dmUgdGhlIGNhbGwgdG8gaW50ZWxfZ3VjX3Vjb2RlX2luaXQoKSBsYXRlciwgc28gdGhhdCBpdCBj YW4KICAgICAgICBhbGxvY2F0ZSBHRU0gb2JqZWN0cywgYW5kIGhhdmUgaXQgZmV0Y2ggdGhlIGZp cm13YXJlOyB0aGVuCglpbnRlbF9ndWNfdWNvZGVfbG9hZCgpIGRvZXNuJ3QgbmVlZCB0byBmZXRj aCBpdCBsYXRlci4KICAgICAgICBbRGFuaWVsIFZldHRlcl0uCgp2NjoKICAgIFVwZGF0ZSBjb21t ZW50IGRlc2NyaWJpbmcgaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSBbVG9tIE8nUm91cmtlXQoKSXNz dWU6IFZJWi00ODg0ClNpZ25lZC1vZmYtYnk6IEFsZXggRGFpIDx5dS5kYWlAaW50ZWwuY29tPgpT aWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMyArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jICAgICAgICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICB8ICAxNiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19y ZWcuaCAgICAgfCAgMTcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAg ICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmggICAgICAgIHwgIDY3 ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmggICB8ICAgMyArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIHwgNTI5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDY1MCBpbnNlcnRpb25zKCsp LCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2d1Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX2xvYWRlci5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA5OThiNDY0Li42NWU1MmZh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtNDAsNiArNDAsOSBAQCBpOTE1LXkgKz0gaTkxNV9j bWRfcGFyc2VyLm8gXAogCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKIAkgIGludGVsX3VuY29yZS5v CiAKKyMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0CitpOTE1 LXkgKz0gaW50ZWxfZ3VjX2xvYWRlci5vCisKICMgYXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBz dGF0ZQogaTkxNS15ICs9IGludGVsX3JlbmRlcnN0YXRlX2dlbjYubyBcCiAJICBpbnRlbF9yZW5k ZXJzdGF0ZV9nZW43Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggYWIzN2QxMS4uMjE5 M2NjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC00MzUsNiArNDM1LDExIEBAIHN0YXRp YyBpbnQgaTkxNV9sb2FkX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCSAq IHdvcmtpbmcgaXJxcyBmb3IgZS5nLiBnbWJ1cyBhbmQgZHAgYXV4IHRyYW5zZmVycy4gKi8KIAlp bnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKIAorCS8qIGludGVsX2d1Y191Y29kZV9pbml0KCkgbmVl ZHMgdGhlIG11dGV4IHRvIGFsbG9jYXRlIEdFTSBvYmplY3RzICovCisJbXV0ZXhfbG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOworCWludGVsX2d1Y191Y29kZV9pbml0KGRldik7CisJbXV0ZXhfdW5s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKIAlyZXQgPSBpOTE1X2dlbV9pbml0KGRldik7CiAJ aWYgKHJldCkKIAkJZ290byBjbGVhbnVwX2lycTsKQEAgLTQ3Niw2ICs0ODEsOSBAQCBjbGVhbnVw X2dlbToKIAlpOTE1X2dlbV9jb250ZXh0X2ZpbmkoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+ c3RydWN0X211dGV4KTsKIGNsZWFudXBfaXJxOgorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211 dGV4KTsKKwlpbnRlbF9ndWNfdWNvZGVfZmluaShkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5z dHJ1Y3RfbXV0ZXgpOwogCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiBjbGVhbnVwX2dlbV9zdG9s ZW46CiAJaTkxNV9nZW1fY2xlYW51cF9zdG9sZW4oZGV2KTsKQEAgLTExMjgsNiArMTEzNiw3IEBA IGludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlmbHVzaF93 b3JrcXVldWUoZGV2X3ByaXYtPndxKTsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4 KTsKKwlpbnRlbF9ndWNfdWNvZGVfZmluaShkZXYpOwogCWk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1 ZmZlcihkZXYpOwogCWk5MTVfZ2VtX2NvbnRleHRfZmluaShkZXYpOwogCW11dGV4X3VubG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNjc0YjIyMy4u MGMwMTI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j bHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5j bHVkZSA8bGludXgvcG1fcW9zLmg+CisjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCiAKIC8qIEdlbmVy YWwgY3VzdG9taXphdGlvbjoKICAqLwpAQCAtMTcwNiw2ICsxNzA3LDggQEAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgdmdwdTsKIAorCXN0cnVj dCBpbnRlbF9ndWMgZ3VjOworCiAJc3RydWN0IGludGVsX2NzciBjc3I7CiAKIAkvKiBEaXNwbGF5 IENTUi1yZWxhdGVkIHByb3RlY3Rpb24gKi8KQEAgLTE5NTAsNiArMTk1MywxMSBAQCBzdGF0aWMg aW5saW5lIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfdG9faTkxNShzdHJ1Y3QgZGV2aWNl ICpkZXYpCiAJcmV0dXJuIHRvX2k5MTUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpndWNfdG9faTkxNShzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihndWMsIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlLCBndWMpOworfQorCiAvKiBJdGVyYXRlIG92ZXIgaW5pdGlhbGlzZWQgcmluZ3Mg Ki8KICNkZWZpbmUgZm9yX2VhY2hfcmluZyhyaW5nX18sIGRldl9wcml2X18sIGlfXykgXAogCWZv ciAoKGlfXykgPSAwOyAoaV9fKSA8IEk5MTVfTlVNX1JJTkdTOyAoaV9fKSsrKSBcCkBAIC0yNTU0 LDYgKzI1NjIsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKIAogI2RlZmluZSBIQVNf Q1NSKGRldikJKElTX1NLWUxBS0UoZGV2KSkKIAorI2RlZmluZSBIQVNfR1VDX1VDT0RFKGRldikJ KElTX0dFTjkoZGV2KSkKKyNkZWZpbmUgSEFTX0dVQ19TQ0hFRChkZXYpCShJU19HRU45KGRldikp CisKICNkZWZpbmUgSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldikgKElTX0hBU1dFTEwoZGV2KSB8 fCBcCiAJCQkJICAgIElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpCiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCmluZGV4IDFjNTQ2MDEuLjIzMjYzZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpA QCAtNDY4MCw2ICs0NjgwLDIyIEBAIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKIAkJCWdvdG8gb3V0OwogCX0KIAorCS8qIFdlIGNhbid0IGVuYWJsZSBjb250ZXh0cyB1 bnRpbCBhbGwgZmlybXdhcmUgaXMgbG9hZGVkICovCisJcmV0ID0gaW50ZWxfZ3VjX3Vjb2RlX2xv YWQoZGV2KTsKKwlpZiAocmV0KSB7CisJCS8qCisJCSAqIElmIHdlIGdvdCBhbiBlcnJvciBhbmQg R3VDIHN1Ym1pc3Npb24gaXMgZW5hYmxlZCwgbWFwCisJCSAqIHRoZSBlcnJvciB0byAtRUlPIHNv IHRoZSBHUFUgd2lsbCBiZSBkZWNsYXJlZCB3ZWRnZWQuCisJCSAqIE9UT0gsIGlmIHdlIGRpZG4n dCBpbnRlbmQgdG8gdXNlIHRoZSBHdUMgYW55d2F5LCBqdXN0CisJCSAqIGRpc2NhcmQgdGhlIGVy cm9yIGFuZCBjYXJyeSBvbi4KKwkJICovCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxp emUgR3VDLCBlcnJvciAlZCVzXG4iLCByZXQsCisJCQlpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lv biA/ICIiIDogIiAoaWdub3JlZCkiKTsKKwkJcmV0ID0gaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Np b24gPyAtRUlPIDogMDsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwogCS8qIE5vdyBp dCBpcyBzYWZlIHRvIGdvIGJhY2sgcm91bmQgYW5kIGRvIGV2ZXJ5dGhpbmcgZWxzZTogKi8KIAlm b3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNf cmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaAppbmRleCBjY2RjNmM4 Li44YzhlNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19yZWcuaApAQCAtMzgsMTAgKzM4 LDYgQEAKICNkZWZpbmUgICBHU19NSUFfU0hJRlQJCQkxNgogI2RlZmluZSAgIEdTX01JQV9NQVNL CQkJICAoMHgwNyA8PCBHU19NSUFfU0hJRlQpCiAKLSNkZWZpbmUgR1VDX1dPUENNX1NJWkUJCQkw eGMwNTAKLSNkZWZpbmUgICBHVUNfV09QQ01fU0laRV9WQUxVRSAgCSAgKDB4ODAgPDwgMTIpCS8q IDUxMktCICovCi0jZGVmaW5lIEdVQ19XT1BDTV9PRkZTRVQJCTB4ODAwMDAJCS8qIDUxMktCICov Ci0KICNkZWZpbmUgU09GVF9TQ1JBVENIKG4pCQkJKDB4YzE4MCArICgobikgKiA0KSkKIAogI2Rl ZmluZSBVT1NfUlNBX1NDUkFUQ0hfMAkJMHhjMjAwCkBAIC01NiwxMCArNTIsMTggQEAKICNkZWZp bmUgICBVT1NfTU9WRQkJCSAgKDE8PDQpCiAjZGVmaW5lICAgU1RBUlRfRE1BCQkJICAoMTw8MCkK ICNkZWZpbmUgRE1BX0dVQ19XT1BDTV9PRkZTRVQJCTB4YzM0MAorI2RlZmluZSAgIEdVQ19XT1BD TV9PRkZTRVRfVkFMVUUJICAweDgwMDAwCS8qIDUxMktCICovCisKKyNkZWZpbmUgR1VDX1dPUENN X1NJWkUJCQkweGMwNTAKKyNkZWZpbmUgICBHVUNfV09QQ01fU0laRV9WQUxVRSAgCSAgKDB4ODAg PDwgMTIpCS8qIDUxMktCICovCisKKy8qIEd1QyBhZGRyZXNzZXMgYmVsb3cgR1VDX1dPUENNX1RP UCBkb24ndCBtYXAgdGhyb3VnaCB0aGUgR1RUICovCisjZGVmaW5lCUdVQ19XT1BDTV9UT1AJCQko R1VDX1dPUENNX1NJWkVfVkFMVUUpCiAKICNkZWZpbmUgR0VOOF9HVF9QTV9DT05GSUcJCTB4MTM4 MTQwCisjZGVmaW5lIEdFTjlMUF9HVF9QTV9DT05GSUcJCTB4MTM4MTQwCiAjZGVmaW5lIEdFTjlf R1RfUE1fQ09ORklHCQkweDEzODE2YwotI2RlZmluZSAgIEdFTjhfR1RfRE9PUkJFTExfRU5BQkxF CSAgKDE8PDApCisjZGVmaW5lICAgR1RfRE9PUkJFTExfRU5BQkxFCQkgICgxPDwwKQogCiAjZGVm aW5lIEdFTjhfR1RDUgkJCTB4NDI3NAogI2RlZmluZSAgIEdFTjhfR1RDUl9JTlZBTElEQVRFCQkg ICgxPDwwKQpAQCAtODAsNyArODQsOCBAQAogCQkJCSBHVUNfRU5BQkxFX1JFQURfQ0FDSEVfTE9H SUMJCXwgXAogCQkJCSBHVUNfRU5BQkxFX01JQV9DQUNISU5HCQkJfCBcCiAJCQkJIEdVQ19FTkFC TEVfUkVBRF9DQUNIRV9GT1JfU1JBTV9EQVRBCXwgXAotCQkJCSBHVUNfRU5BQkxFX1JFQURfQ0FD SEVfRk9SX1dPUENNX0RBVEEpCisJCQkJIEdVQ19FTkFCTEVfUkVBRF9DQUNIRV9GT1JfV09QQ01f REFUQQl8IFwKKwkJCQkgR1VDX0VOQUJMRV9NSUFfQ0xPQ0tfR0FUSU5HKQogCiAjZGVmaW5lIEhP U1QyR1VDX0lOVEVSUlVQVAkJMHhjNGM4CiAjZGVmaW5lICAgSE9TVDJHVUNfVFJJR0dFUgkJICAo MTw8MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDY3ODZlOTQuLmQ1NGRjMmMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNjg3MSw3ICs2ODcxLDkgQEAgZW51bSBza2xfZGlzcF9w b3dlcl93ZWxscyB7CiAjZGVmaW5lICAgR0VOOV9QR0NUTF9TU0JfRVUzMTFfQUNLCSgxIDw8IDE0 KQogCiAjZGVmaW5lIEdFTjdfTUlTQ0NQQ1RMCQkJKDB4OTQyNCkKLSNkZWZpbmUgICBHRU43X0RP UF9DTE9DS19HQVRFX0VOQUJMRQkoMTw8MCkKKyNkZWZpbmUgICBHRU43X0RPUF9DTE9DS19HQVRF X0VOQUJMRQkJKDE8PDApCisjZGVmaW5lICAgR0VOOF9ET1BfQ0xPQ0tfR0FURV9DRkNMS19FTkFC TEUJKDE8PDIpCisjZGVmaW5lICAgR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxFCSgxPDw0 KQogCiAjZGVmaW5lIEdFTjhfR0FSQkNOVEwgICAgICAgICAgICAgICAgICAgMHhCMDA0CiAjZGVm aW5lICAgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSAgKDE8PDcpCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDZiNmQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaApAQCAtMCww ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZu ZGVmIF9JTlRFTF9HVUNfSF8KKyNkZWZpbmUgX0lOVEVMX0dVQ19IXworCisjaW5jbHVkZSAiaW50 ZWxfZ3VjX2Z3aWYuaCIKKyNpbmNsdWRlICJpOTE1X2d1Y19yZWcuaCIKKworZW51bSBpbnRlbF9n dWNfZndfc3RhdHVzIHsKKwlHVUNfRklSTVdBUkVfRkFJTCA9IC0xLAorCUdVQ19GSVJNV0FSRV9O T05FID0gMCwKKwlHVUNfRklSTVdBUkVfUEVORElORywKKwlHVUNfRklSTVdBUkVfU1VDQ0VTUwor fTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRhdGEgbmVl ZGVkIGR1cmluZyB0aGUgcHJvY2VzcworICogb2YgZmV0Y2hpbmcsIGNhY2hpbmcsIGFuZCBsb2Fk aW5nIHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIHRoZSBHdUMuCisgKi8KK3N0cnVjdCBpbnRlbF9n dWNfZncgeworCXN0cnVjdCBkcm1fZGV2aWNlICoJCWd1Y19kZXY7CisJY29uc3QgY2hhciAqCQkJ Z3VjX2Z3X3BhdGg7CisJc2l6ZV90CQkJCWd1Y19md19zaXplOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICoJZ3VjX2Z3X29iajsKKwllbnVtIGludGVsX2d1Y19md19zdGF0dXMJZ3VjX2Z3 X2ZldGNoX3N0YXR1czsKKwllbnVtIGludGVsX2d1Y19md19zdGF0dXMJZ3VjX2Z3X2xvYWRfc3Rh dHVzOworCisJdWludDE2X3QJCQlndWNfZndfbWFqb3Jfd2FudGVkOworCXVpbnQxNl90CQkJZ3Vj X2Z3X21pbm9yX3dhbnRlZDsKKwl1aW50MTZfdAkJCWd1Y19md19tYWpvcl9mb3VuZDsKKwl1aW50 MTZfdAkJCWd1Y19md19taW5vcl9mb3VuZDsKK307CisKK3N0cnVjdCBpbnRlbF9ndWMgeworCXN0 cnVjdCBpbnRlbF9ndWNfZncgZ3VjX2Z3OworCisJdWludDMyX3QgbG9nX2ZsYWdzOworfTsKKwor LyogaW50ZWxfZ3VjX2xvYWRlci5jICovCitleHRlcm4gdm9pZCBpbnRlbF9ndWNfdWNvZGVfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaW50ZWxfZ3VjX3Vjb2RlX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9ndWNfdWNvZGVf ZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBjb25zdCBjaGFyICppbnRlbF9n dWNfZndfc3RhdHVzX3JlcHIoZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHN0YXR1cyk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmgKaW5kZXggMThkN2YyMC4uMDZh YWQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCkBAIC0zMiw5ICszMiw4 IEBACiAgKiBFRElUSU5HIFRISVMgRklMRSBJUyBUSEVSRUZPUkUgTk9UIFJFQ09NTUVOREVEIC0g WU9VUiBDSEFOR0VTIE1BWSBCRSBMT1NULgogICovCiAKLSNkZWZpbmUgR0ZYQ09SRV9GQU1JTFlf R0VOOAkJMTEKICNkZWZpbmUgR0ZYQ09SRV9GQU1JTFlfR0VOOQkJMTIKLSNkZWZpbmUgR0ZYQ09S RV9GQU1JTFlfRk9SQ0VfVUxPTkcJMHg3ZmZmZmZmZgorI2RlZmluZSBHRlhDT1JFX0ZBTUlMWV9V TktOT1dOCQkweDdmZmZmZmZmCiAKICNkZWZpbmUgR1VDX0NUWF9QUklPUklUWV9DUklUSUNBTAkw CiAjZGVmaW5lIEdVQ19DVFhfUFJJT1JJVFlfSElHSAkJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX2xvYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjJj MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9h ZGVyLmMKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBBdXRob3JzOgorICogICAgVmluaXQgQXphZCA8dmluaXQuYXphZEBpbnRlbC5jb20+ CisgKiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+CisgKiAgICBEYXZlIEdvcmRv biA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgorICogICAgQWxleCBEYWkgPHl1LmRhaUBpbnRl bC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImk5MTVf ZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCisKKy8qKgorICogRE9DOiBHdUMKKyAqCisg KiBpbnRlbF9ndWM6CisgKiBUb3AgbGV2ZWwgc3RydWN0dXJlIG9mIGd1Yy4gSXQgaGFuZGxlcyBm aXJtd2FyZSBsb2FkaW5nIGFuZCBtYW5hZ2VzIGNsaWVudAorICogcG9vbCBhbmQgZG9vcmJlbGxz LiBpbnRlbF9ndWMgb3ducyBhIGk5MTVfZ3VjX2NsaWVudCB0byByZXBsYWNlIHRoZSBsZWdhY3kK KyAqIEV4ZWNMaXN0IHN1Ym1pc3Npb24uCisgKgorICogRmlybXdhcmUgdmVyc2lvbmluZzoKKyAq IFRoZSBmaXJtd2FyZSBidWlsZCBwcm9jZXNzIHdpbGwgZ2VuZXJhdGUgYSB2ZXJzaW9uIGhlYWRl ciBmaWxlIHdpdGggbWFqb3IgYW5kCisgKiBtaW5vciB2ZXJzaW9uIGRlZmluZWQuIFRoZSB2ZXJz aW9ucyBhcmUgYnVpbHQgaW50byBDU1MgaGVhZGVyIG9mIGZpcm13YXJlLgorICogaTkxNSBrZXJu ZWwgZHJpdmVyIHNldCB0aGUgbWluaW1hbCBmaXJtd2FyZSB2ZXJzaW9uIHJlcXVpcmVkIHBlciBw bGF0Zm9ybS4KKyAqIFRoZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24gcGFja2FnZSB3aWxsIGluc3Rh bGwgKHN5bWJvbGljIGxpbmspIHByb3BlciB2ZXJzaW9uCisgKiBvZiBmaXJtd2FyZS4KKyAqCisg KiBHdUMgYWRkcmVzcyBzcGFjZToKKyAqIEd1QyBkb2VzIG5vdCBhbGxvdyBhbnkgZ2Z4IEdHVFQg YWRkcmVzcyB0aGF0IGZhbGxzIGludG8gcmFuZ2UgWzAsIFdPUENNX1RPUCksCisgKiB3aGljaCBp cyByZXNlcnZlZCBmb3IgQm9vdCBST00sIFNSQU0gYW5kIFdPUENNLiBDdXJyZW50bHkgdGhpcyB0 b3AgYWRkcmVzcyBpcworICogNTEySy4gSW4gb3JkZXIgdG8gZXhjbHVkZSAwLTUxMksgYWRkcmVz cyBzcGFjZSBmcm9tIEdHVFQsIGFsbCBnZnggb2JqZWN0cworICogdXNlZCBieSBHdUMgaXMgcGlu bmVkIHdpdGggUElOX09GRlNFVF9CSUFTIGFsb25nIHdpdGggc2l6ZSBvZiBXT1BDTS4KKyAqCisg KiBGaXJtd2FyZSBsb2c6CisgKiBGaXJtd2FyZSBsb2cgaXMgZW5hYmxlZCBieSBzZXR0aW5nIGk5 MTUuZ3VjX2xvZ19sZXZlbCB0byBub24tbmVnYXRpdmUgbGV2ZWwuCisgKiBMb2cgZGF0YSBpcyBw cmludGVkIG91dCB2aWEgcmVhZGluZyBkZWJ1Z2ZzIGk5MTVfZ3VjX2xvZ19kdW1wLiBSZWFkaW5n IGZyb20KKyAqIGk5MTVfZ3VjX2xvYWRfc3RhdHVzIHdpbGwgcHJpbnQgb3V0IGZpcm13YXJlIGxv YWRpbmcgc3RhdHVzIGFuZCBzY3JhdGNoCisgKiByZWdpc3RlcnMgdmFsdWUuCisgKgorICovCisK KyNkZWZpbmUgSTkxNV9TS0xfR1VDX1VDT0RFICJpOTE1L3NrbF9ndWNfdmVyMy5iaW4iCitNT0RV TEVfRklSTVdBUkUoSTkxNV9TS0xfR1VDX1VDT0RFKTsKKworLyogVXNlci1mcmllbmRseSByZXBy ZXNlbnRhdGlvbiBvZiBhbiBlbnVtICovCitjb25zdCBjaGFyICppbnRlbF9ndWNfZndfc3RhdHVz X3JlcHIoZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1 cykgeworCWNhc2UgR1VDX0ZJUk1XQVJFX0ZBSUw6CisJCXJldHVybiAiRkFJTCI7CisJY2FzZSBH VUNfRklSTVdBUkVfTk9ORToKKwkJcmV0dXJuICJOT05FIjsKKwljYXNlIEdVQ19GSVJNV0FSRV9Q RU5ESU5HOgorCQlyZXR1cm4gIlBFTkRJTkciOworCWNhc2UgR1VDX0ZJUk1XQVJFX1NVQ0NFU1M6 CisJCXJldHVybiAiU1VDQ0VTUyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOISI7CisJ fQorfTsKKworc3RhdGljIHUzMiBnZXRfZ3R0eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKK3sKKwkvKiBYWFg6IEdUIHR5cGUgYmFzZWQgb24gUENJIGRldmljZSBJRD8gZmll bGQgc2VlbXMgdW51c2VkIGJ5IGZ3ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ2V0 X2NvcmVfZmFtaWx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzd2l0 Y2ggKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4pIHsKKwljYXNlIDk6CisJCXJldHVybiBHRlhD T1JFX0ZBTUlMWV9HRU45OworCisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJHVUM6IHVuc3VwcG9y dGVkIGNvcmUgZmFtaWx5XG4iKTsKKwkJcmV0dXJuIEdGWENPUkVfRkFNSUxZX1VOS05PV047CisJ fQorfQorCitzdGF0aWMgdm9pZCBzZXRfZ3VjX2luaXRfcGFyYW1zKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYt Pmd1YzsKKwl1MzIgcGFyYW1zW0dVQ19DVExfTUFYX0RXT1JEU107CisJaW50IGk7CisKKwltZW1z ZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOworCisJcGFyYW1zW0dVQ19DVExfREVWSUNF X0lORk9dIHw9CisJCShnZXRfZ3R0eXBlKGRldl9wcml2KSA8PCBHVUNfQ1RMX0dUVFlQRV9TSElG VCkgfAorCQkoZ2V0X2NvcmVfZmFtaWx5KGRldl9wcml2KSA8PCBHVUNfQ1RMX0NPUkVGQU1JTFlf U0hJRlQpOworCisJLyoKKwkgKiBHdUMgQVJBVCBpbmNyZW1lbnQgaXMgMTAgbnMuIEd1QyBkZWZh dWx0IHNjaGVkdWxlciBxdWFudHVtIGlzIG9uZQorCSAqIHNlY29uZC4gVGhpcyBBUkFSIGlzIGNh bGN1bGF0ZWQgYnk6CisJICogU2NoZWR1bGVyLVF1YW50dW0taW4tbnMgLyBBUkFULWluY3JlbWVu dC1pbi1ucyA9IDEwMDAwMDAwMDAgLyAxMAorCSAqLworCXBhcmFtc1tHVUNfQ1RMX0FSQVRfSElH SF0gPSAwOworCXBhcmFtc1tHVUNfQ1RMX0FSQVRfTE9XXSA9IDEwMDAwMDAwMDsKKworCXBhcmFt c1tHVUNfQ1RMX1dBXSB8PSBHVUNfQ1RMX1dBX1VLX0JZX0RSSVZFUjsKKworCXBhcmFtc1tHVUNf Q1RMX0ZFQVRVUkVdIHw9IEdVQ19DVExfRElTQUJMRV9TQ0hFRFVMRVIgfAorCQkJR1VDX0NUTF9W Q1MyX0VOQUJMRUQ7CisKKwlpZiAoaTkxNS5ndWNfbG9nX2xldmVsID49IDApIHsKKwkJcGFyYW1z W0dVQ19DVExfTE9HX1BBUkFNU10gPSBndWMtPmxvZ19mbGFnczsKKwkJcGFyYW1zW0dVQ19DVExf REVCVUddID0KKwkJCWk5MTUuZ3VjX2xvZ19sZXZlbCA8PCBHVUNfTE9HX1ZFUkJPU0lUWV9TSElG VDsKKwl9CisKKwlJOTE1X1dSSVRFKFNPRlRfU0NSQVRDSCgwKSwgMCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgR1VDX0NUTF9NQVhfRFdPUkRTOyBpKyspCisJCUk5MTVfV1JJVEUoU09GVF9TQ1JBVENI KDEgKyBpKSwgcGFyYW1zW2ldKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIEd1QyBzdGF0dXMgcmVn aXN0ZXIgKEdVQ19TVEFUVVMpIGFuZCBzdG9yZSBpdCBpbiB0aGUKKyAqIHNwZWNpZmllZCBsb2Nh dGlvbjsgdGhlbiByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgorICogdGhlIHZh bHVlIG1hdGNoZXMgZWl0aGVyIG9mIHR3byB2YWx1ZXMgcmVwcmVzZW50aW5nIGNvbXBsZXRpb24K KyAqIG9mIHRoZSBHdUMgYm9vdCBwcm9jZXNzLgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgcG9s bGluZyB0aGUgR3VDIHN0YXR1cyBpbiBhIHdhaXRfZm9yX2F0b21pYygpCisgKiBsb29wIGJlbG93 LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgZ3VjX3Vjb2RlX3Jlc3BvbnNlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgICB1MzIgKnN0YXR1cykKK3sKKwl1MzIg dmFsID0gSTkxNV9SRUFEKEdVQ19TVEFUVVMpOworCSpzdGF0dXMgPSB2YWw7CisJcmV0dXJuICgo dmFsICYgR1NfVUtFUk5FTF9NQVNLKSA9PSBHU19VS0VSTkVMX1JFQURZIHx8CisJCSh2YWwgJiBH U19VS0VSTkVMX01BU0spID09IEdTX1VLRVJORUxfTEFQSUNfRE9ORSk7Cit9CisKKy8qCisgKiBU cmFuc2ZlciB0aGUgZmlybXdhcmUgaW1hZ2UgdG8gUkFNIGZvciBleGVjdXRpb24gYnkgdGhlIG1p Y3JvY29udHJvbGxlci4KKyAqCisgKiBHdUMgRmlybXdhcmUgbGF5b3V0OgorICogKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCisgKiB8ICAgICAgICAgIENTUyBoZWFkZXIg ICAgICAgICAgIHwgIDEyOEIKKyAqIHwgY29udGFpbnMgbWFqb3IvbWlub3IgdmVyc2lvbiAgfAor ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCisgKiB8ICAgICAgICAg ICAgIHVDb2RlICAgICAgICAgICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKyAgLS0tLQorICogfCAgICAgICAgIFJTQSBzaWduYXR1cmUgICAgICAgICB8ICAyNTZCCisg KiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KKyAqIHwgICAgICAgICBS U0EgcHVibGljIEtleSAgICAgICAgfCAgMjU2QgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rICAtLS0tCisgKiB8ICAgICAgIFB1YmxpYyBrZXkgbW9kdWx1cyAgICAgIHwgICAg NEIKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQorICoKKyAqIEFy Y2hpdGVjdHVyYWxseSwgdGhlIERNQSBlbmdpbmUgaXMgYmlkaXJlY3Rpb25hbCwgYW5kIGNhbiBw b3RlbnRpYWxseSBldmVuCisgKiB0cmFuc2ZlciBiZXR3ZWVuIEdUVCBsb2NhdGlvbnMuIFRoaXMg ZnVuY3Rpb25hbGl0eSBpcyBsZWZ0IG91dCBvZiB0aGUgQVBJCisgKiBmb3Igbm93IGFzIHRoZXJl IGlzIG5vIG5lZWQgZm9yIGl0LgorICoKKyAqIE5vdGUgdGhhdCBHdUMgbmVlZHMgdGhlIENTUyBo ZWFkZXIgcGx1cyB1S2VybmVsIGNvZGUgdG8gYmUgY29waWVkIGJ5IHRoZQorICogRE1BIGVuZ2lu ZSBpbiBvbmUgb3BlcmF0aW9uLCB3aGVyZWFzIHRoZSBSU0Egc2lnbmF0dXJlIGlzIGxvYWRlZCB2 aWEgTU1JTy4KKyAqLworCisjZGVmaW5lIFVPU19DU1NfSEVBREVSX09GRlNFVAkJMAorI2RlZmlu ZSBVT1NfVkVSX01JTk9SX09GRlNFVAkJMHg0NAorI2RlZmluZSBVT1NfVkVSX01BSk9SX09GRlNF VAkJMHg0NgorI2RlZmluZSBVT1NfQ1NTX0hFQURFUl9TSVpFCQkweDgwCisjZGVmaW5lIFVPU19S U0FfU0lHX1NJWkUJCTB4MTAwCisjZGVmaW5lIFVPU19DU1NfU0lHTklOR19TSVpFCQkweDIwNAor CitzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2LT5n dWMuZ3VjX2Z3OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpmd19vYmogPSBndWNfZnct Pmd1Y19md19vYmo7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHNnX3RhYmxlICpz ZyA9IGZ3X29iai0+cGFnZXM7CisJdTMyIHN0YXR1cywgdWNvZGVfc2l6ZSwgcnNhW1VPU19SU0Ff U0lHX1NJWkUgLyBzaXplb2YodTMyKV07CisJaW50IGksIHJldCA9IDA7CisKKwkvKiB1Q29kZSBz aXplLCBhbHNvIGlzIHdoZXJlIFJTQSBzaWduYXR1cmUgc3RhcnRzICovCisJb2Zmc2V0ID0gdWNv ZGVfc2l6ZSA9IGd1Y19mdy0+Z3VjX2Z3X3NpemUgLSBVT1NfQ1NTX1NJR05JTkdfU0laRTsKKwlJ OTE1X1dSSVRFKERNQV9DT1BZX1NJWkUsIHVjb2RlX3NpemUpOworCisJLyogQ29weSBSU0Egc2ln bmF0dXJlIGZyb20gdGhlIGZ3IGltYWdlIHRvIEhXIGZvciB2ZXJpZmljYXRpb24gKi8KKwlzZ19w Y29weV90b19idWZmZXIoc2ctPnNnbCwgc2ctPm5lbnRzLCByc2EsIFVPU19SU0FfU0lHX1NJWkUs IG9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IFVPU19SU0FfU0lHX1NJWkUgLyBzaXplb2YodTMy KTsgaSsrKQorCQlJOTE1X1dSSVRFKFVPU19SU0FfU0NSQVRDSF8wICsgaSAqIHNpemVvZih1MzIp LCByc2FbaV0pOworCisJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5ldyBibG9i ICovCisJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGZ3X29iaik7CisJSTkxNV9X UklURShETUFfQUREUl8wX0xPVywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKKwlJOTE1X1dSSVRF KERNQV9BRERSXzBfSElHSCwgdXBwZXJfMzJfYml0cyhvZmZzZXQpICYgMHhGRkZGKTsKKworCS8q CisJICogU2V0IHRoZSBETUEgZGVzdGluYXRpb24uIEN1cnJlbnQgdUNvZGUgZXhwZWN0cyB0aGUg Y29kZSB0byBiZQorCSAqIGxvYWRlZCBhdCA4azsgbG9jYXRpb25zIGJlbG93IHRoaXMgYXJlIHVz ZWQgZm9yIHRoZSBzdGFjay4KKwkgKi8KKwlJOTE1X1dSSVRFKERNQV9BRERSXzFfTE9XLCAweDIw MDApOworCUk5MTVfV1JJVEUoRE1BX0FERFJfMV9ISUdILCBETUFfQUREUkVTU19TUEFDRV9XT1BD TSk7CisKKwkvKiBGaW5hbGx5IHN0YXJ0IHRoZSBETUEgKi8KKwlJOTE1X1dSSVRFKERNQV9DVFJM LCBfTUFTS0VEX0JJVF9FTkFCTEUoVU9TX01PVkUgfCBTVEFSVF9ETUEpKTsKKworCS8qCisJICog U3Bpbi13YWl0IGZvciB0aGUgRE1BIHRvIGNvbXBsZXRlICYgdGhlIEd1QyB0byBzdGFydCB1cC4K KwkgKiBOQjogRG9jcyByZWNvbW1lbmQgbm90IHVzaW5nIHRoZSBpbnRlcnJ1cHQgZm9yIGNvbXBs ZXRpb24uCisJICogTWVhc3VyZW1lbnRzIGluZGljYXRlIHRoaXMgc2hvdWxkIHRha2Ugbm8gbW9y ZSB0aGFuIDIwbXMsIHNvIGEKKwkgKiB0aW1lb3V0IGhlcmUgaW5kaWNhdGVzIHRoYXQgdGhlIEd1 QyBoYXMgZmFpbGVkIGFuZCBpcyB1bnVzYWJsZS4KKwkgKiAoSGlnaGVyIGxldmVscyBvZiB0aGUg ZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byBmYWxsIGJhY2sgdG8KKwkgKiBleGVjbGlzdCBtb2RlIGlm IHRoaXMgaGFwcGVucy4pCisJICovCisJcmV0ID0gd2FpdF9mb3JfYXRvbWljKGd1Y191Y29kZV9y ZXNwb25zZShkZXZfcHJpdiwgJnN0YXR1cyksIDEwMCk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJE TUEgc3RhdHVzIDB4JXgsIEd1QyBzdGF0dXMgMHgleFxuIiwKKwkJCUk5MTVfUkVBRChETUFfQ1RS TCksIHN0YXR1cyk7CisKKwlpZiAoKHN0YXR1cyAmIEdTX0JPT1RST01fTUFTSykgPT0gR1NfQk9P VFJPTV9SU0FfRkFJTEVEKSB7CisJCURSTV9FUlJPUigiR3VDIGZpcm13YXJlIHNpZ25hdHVyZSB2 ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0VYRUM7CisJfQorCisJRFJNX0RF QlVHX0RSSVZFUigicmV0dXJuaW5nICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIExvYWQgdGhlIEd1QyBmaXJtd2FyZSBibG9iIGludG8gdGhlIE1pbnV0ZUlBLgorICov CitzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5n dWNfZnc7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJaW50IHJl dDsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihndWNfZnctPmd1 Y19md19vYmosIGZhbHNlKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERUJVR19EUklWRVIoInNldC1k b21haW4gZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGk5 MTVfZ2VtX29ial9nZ3R0X3BpbihndWNfZnctPmd1Y19md19vYmosIDAsIDApOworCWlmIChyZXQp IHsKKwkJRFJNX0RFQlVHX0RSSVZFUigicGluIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwkvKiBJbnZhbGlkYXRlIEd1QyBUTEIgdG8gbGV0IEd1QyB0YWtlIHRoZSBs YXRlc3QgdXBkYXRlcyB0byBHVFQuICovCisJSTkxNV9XUklURShHRU44X0dUQ1IsIEdFTjhfR1RD Ul9JTlZBTElEQVRFKTsKKworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBG T1JDRVdBS0VfQUxMKTsKKworCS8qIGluaXQgV09QQ00gKi8KKwlJOTE1X1dSSVRFKEdVQ19XT1BD TV9TSVpFLCBHVUNfV09QQ01fU0laRV9WQUxVRSk7CisJSTkxNV9XUklURShETUFfR1VDX1dPUENN X09GRlNFVCwgR1VDX1dPUENNX09GRlNFVF9WQUxVRSk7CisKKwkvKiBFbmFibGUgTUlBIGNhY2hp bmcuIEd1QyBjbG9jayBnYXRpbmcgaXMgZGlzYWJsZWQuICovCisJSTkxNV9XUklURShHVUNfU0hJ TV9DT05UUk9MLCBHVUNfU0hJTV9DT05UUk9MX1ZBTFVFKTsKKworCS8qIFdhQzZEaXNhbGxvd0J5 R2Z4UGF1c2UqLworCUk5MTVfV1JJVEUoR0VONl9HRlhQQVVTRSwgMHgzMEZGRik7CisKKwlpZiAo SVNfQlJPWFRPTihkZXYpKQorCQlJOTE1X1dSSVRFKEdFTjlMUF9HVF9QTV9DT05GSUcsIEdUX0RP T1JCRUxMX0VOQUJMRSk7CisJZWxzZQorCQlJOTE1X1dSSVRFKEdFTjlfR1RfUE1fQ09ORklHLCBH VF9ET09SQkVMTF9FTkFCTEUpOworCisJaWYgKElTX0dFTjkoZGV2KSkgeworCQkvKiBET1AgQ2xv Y2sgR2F0aW5nIEVuYWJsZSBmb3IgR3VDIGNsb2NrcyAqLworCQlJOTE1X1dSSVRFKEdFTjdfTUlT Q0NQQ1RMLCAoR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxFIHwKKwkJCQkJICAgIEk5MTVf UkVBRChHRU43X01JU0NDUENUTCkpKTsKKworCQkvKiBhbGxvd3MgZm9yIDV1cyBiZWZvcmUgR1Qg Y2FuIGdvIHRvIFJDNiAqLworCQlJOTE1X1dSSVRFKEdVQ19BUkFUX0M2RElTLCAweDFGRik7CisJ fQorCisJc2V0X2d1Y19pbml0X3BhcmFtcyhkZXZfcHJpdik7CisKKwlyZXQgPSBndWNfdWNvZGVf eGZlcl9kbWEoZGV2X3ByaXYpOworCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3By aXYsIEZPUkNFV0FLRV9BTEwpOworCisJLyoKKwkgKiBXZSBrZWVwIHRoZSBvYmplY3QgcGFnZXMg Zm9yIHJldXNlIGR1cmluZyByZXN1bWUuIEJ1dCB3ZSBjYW4gdW5waW4gaXQKKwkgKiBub3cgdGhh dCBETUEgaGFzIGNvbXBsZXRlZCwgc28gaXQgZG9lc24ndCBjb250aW51ZSB0byB0YWtlIHVwIHNw YWNlLgorCSAqLworCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGd1Y19mdy0+Z3VjX2Z3X29i aik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGludGVsX2d1Y191Y29kZV9sb2FkKCkg LSBsb2FkIEd1QyB1Q29kZSBpbnRvIHRoZSBkZXZpY2UKKyAqIEBkZXY6CWRybSBkZXZpY2UKKyAq CisgKiBDYWxsZWQgZnJvbSBnZW1faW5pdF9odygpIGR1cmluZyBkcml2ZXIgbG9hZGluZyBhbmQg YWxzbyBhZnRlciBhIEdQVSByZXNldC4KKyAqCisgKiBUaGUgZmlybXdhcmUgaW1hZ2Ugc2hvdWxk IGhhdmUgYWxyZWFkeSBiZWVuIGZldGNoZWQgaW50byBtZW1vcnkgYnkgdGhlCisgKiBlYXJsaWVy IGNhbGwgdG8gaW50ZWxfZ3VjX3Vjb2RlX2luaXQoKSwgc28gaGVyZSB3ZSBuZWVkIG9ubHkgY2hl Y2sgdGhhdAorICogaXMgc3VjY2VlZGVkLCBhbmQgdGhlbiB0cmFuc2ZlciB0aGUgaW1hZ2UgdG8g dGhlIGgvdy4KKyAqCisgKiBSZXR1cm46CW5vbi16ZXJvIGNvZGUgb24gZXJyb3IKKyAqLworaW50 IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg aW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5ndWNfZnc7CisJaW50IGVyciA9 IDA7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgc3RhdHVzOiBmZXRjaCAlcywgbG9hZCAl c1xuIiwKKwkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0 YXR1cyksCisJCWludGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19sb2FkX3N0 YXR1cykpOworCisJaWYgKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9PSBHVUNfRklSTVdB UkVfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVz ID09IEdVQ19GSVJNV0FSRV9TVUNDRVNTICYmCisJICAgIGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3Rh dHVzID09IEdVQ19GSVJNV0FSRV9GQUlMKQorCQlyZXR1cm4gLUVOT0VYRUM7CisKKwlndWNfZnct Pmd1Y19md19sb2FkX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9QRU5ESU5HOworCisJRFJNX0RFQlVH X0RSSVZFUigiR3VDIGZ3IGZldGNoIHN0YXR1cyAlc1xuIiwKKwkJaW50ZWxfZ3VjX2Z3X3N0YXR1 c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cykpOworCisJc3dpdGNoIChndWNfZnct Pmd1Y19md19mZXRjaF9zdGF0dXMpIHsKKwljYXNlIEdVQ19GSVJNV0FSRV9GQUlMOgorCQkvKiBz b21ldGhpbmcgd2VudCB3cm9uZyA6KCAqLworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWw7CisK KwljYXNlIEdVQ19GSVJNV0FSRV9OT05FOgorCWNhc2UgR1VDX0ZJUk1XQVJFX1BFTkRJTkc6CisJ ZGVmYXVsdDoKKwkJLyogImNhbid0IGhhcHBlbiIgKi8KKwkJV0FSTl9PTkNFKDEsICJHdUMgZncg JXMgaW52YWxpZCBndWNfZndfZmV0Y2hfc3RhdHVzICVzIFslZF1cbiIsCisJCQlndWNfZnctPmd1 Y19md19wYXRoLAorCQkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2Zl dGNoX3N0YXR1cyksCisJCQlndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMpOworCQllcnIgPSAt RU5YSU87CisJCWdvdG8gZmFpbDsKKworCWNhc2UgR1VDX0ZJUk1XQVJFX1NVQ0NFU1M6CisJCWJy ZWFrOworCX0KKworCWVyciA9IGd1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKKwlpZiAoZXJyKQor CQlnb3RvIGZhaWw7CisKKwlndWNfZnctPmd1Y19md19sb2FkX3N0YXR1cyA9IEdVQ19GSVJNV0FS RV9TVUNDRVNTOworCisJRFJNX0RFQlVHX0RSSVZFUigiR3VDIGZ3IHN0YXR1czogZmV0Y2ggJXMs IGxvYWQgJXNcbiIsCisJCWludGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19m ZXRjaF9zdGF0dXMpLAorCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndf bG9hZF9zdGF0dXMpKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlmIChndWNfZnctPmd1Y19m d19sb2FkX3N0YXR1cyA9PSBHVUNfRklSTVdBUkVfUEVORElORykKKwkJZ3VjX2Z3LT5ndWNfZndf bG9hZF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyB2b2lkIGd1Y19md19mZXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50 ZWxfZ3VjX2Z3ICpndWNfZncpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK Kwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHU4ICpjc3NfaGVhZGVyOworCWNv bnN0IHNpemVfdCBtaW5zaXplID0gVU9TX0NTU19IRUFERVJfU0laRSArIFVPU19DU1NfU0lHTklO R19TSVpFOworCWNvbnN0IHNpemVfdCBtYXhzaXplID0gR1VDX1dPUENNX1NJWkVfVkFMVUUgKyBV T1NfQ1NTX1NJR05JTkdfU0laRQorCQkJLSAweDgwMDA7IC8qIDMyayByZXNlcnZlZCAoOEsgc3Rh Y2sgKyAyNGsgY29udGV4dCkgKi8KKwlpbnQgZXJyOworCisJRFJNX0RFQlVHX0RSSVZFUigiYmVm b3JlIHJlcXVlc3RpbmcgZmlybXdhcmU6IEd1QyBmdyBmZXRjaCBzdGF0dXMgJXNcbiIsCisJCWlu dGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMpKTsKKwor CWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBndWNfZnctPmd1Y19md19wYXRoLCAmZGV2LT5w ZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKwlpZiAoIWZ3KQorCQlnb3RvIGZh aWw7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCBHdUMgZncgZnJvbSAlcyBzdWNjZWVkZWQs IGZ3ICVwXG4iLAorCQlndWNfZnctPmd1Y19md19wYXRoLCBmdyk7CisJRFJNX0RFQlVHX0RSSVZF UigiZmlybXdhcmUgZmlsZSBzaXplICV6dSAobWluaW11bSAlenUsIG1heGltdW0gJXp1KVxuIiwK KwkJZnctPnNpemUsIG1pbnNpemUsIG1heHNpemUpOworCisJLyogQ2hlY2sgdGhlIHNpemUgb2Yg dGhlIGJsb2IgYmVmb2UgZXhhbWluaW5nIGJ1ZmZlciBjb250ZW50cyAqLworCWlmIChmdy0+c2l6 ZSA8IG1pbnNpemUgfHwgZnctPnNpemUgPiBtYXhzaXplKQorCQlnb3RvIGZhaWw7CisKKwkvKgor CSAqIFRoZSBHdUMgZmlybXdhcmUgaW1hZ2UgaGFzIHRoZSB2ZXJzaW9uIG51bWJlciBlbWJlZGRl ZCBhdCBhIHdlbGwta25vd24KKwkgKiBvZmZzZXQgd2l0aGluIHRoZSBmaXJtd2FyZSBibG9iOyBu b3RlIHRoYXQgbWFqb3IgLyBtaW5vciB2ZXJzaW9uIGFyZQorCSAqIFRXTyBieXRlcyBlYWNoIChp LmUuIHUxNiksIGFsdGhvdWdoIGFsbCBwb2ludGVycyBhbmQgb2Zmc2V0cyBhcmUgZGVmaW5lZAor CSAqIGluIHRlcm1zIG9mIGJ5dGVzICh1OCkuCisJICovCisJY3NzX2hlYWRlciA9IGZ3LT5kYXRh ICsgVU9TX0NTU19IRUFERVJfT0ZGU0VUOworCWd1Y19mdy0+Z3VjX2Z3X21ham9yX2ZvdW5kID0g Kih1MTYgKikoY3NzX2hlYWRlciArIFVPU19WRVJfTUFKT1JfT0ZGU0VUKTsKKwlndWNfZnctPmd1 Y19md19taW5vcl9mb3VuZCA9ICoodTE2ICopKGNzc19oZWFkZXIgKyBVT1NfVkVSX01JTk9SX09G RlNFVCk7CisKKwlpZiAoZ3VjX2Z3LT5ndWNfZndfbWFqb3JfZm91bmQgIT0gZ3VjX2Z3LT5ndWNf ZndfbWFqb3Jfd2FudGVkIHx8CisJICAgIGd1Y19mdy0+Z3VjX2Z3X21pbm9yX2ZvdW5kIDwgZ3Vj X2Z3LT5ndWNfZndfbWlub3Jfd2FudGVkKSB7CisJCURSTV9FUlJPUigiR3VDIGZpcm13YXJlIHZl cnNpb24gJWQuJWQsIHJlcXVpcmVkICVkLiVkXG4iLAorCQkJZ3VjX2Z3LT5ndWNfZndfbWFqb3Jf Zm91bmQsIGd1Y19mdy0+Z3VjX2Z3X21pbm9yX2ZvdW5kLAorCQkJZ3VjX2Z3LT5ndWNfZndfbWFq b3Jfd2FudGVkLCBndWNfZnctPmd1Y19md19taW5vcl93YW50ZWQpOworCQllcnIgPSAtRU5PRVhF QzsKKwkJZ290byBmYWlsOworCX0KKworCURSTV9ERUJVR19EUklWRVIoImZpcm13YXJlIHZlcnNp b24gJWQuJWQgT0sgKG1pbmltdW0gJWQuJWQpXG4iLAorCQkJZ3VjX2Z3LT5ndWNfZndfbWFqb3Jf Zm91bmQsIGd1Y19mdy0+Z3VjX2Z3X21pbm9yX2ZvdW5kLAorCQkJZ3VjX2Z3LT5ndWNfZndfbWFq b3Jfd2FudGVkLCBndWNfZnctPmd1Y19md19taW5vcl93YW50ZWQpOworCisJb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2RhdGEoZGV2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCWlm IChJU19FUlJfT1JfTlVMTChvYmopKSB7CisJCWVyciA9IG9iaiA/IFBUUl9FUlIob2JqKSA6IC1F Tk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlndWNfZnctPmd1Y19md19vYmogPSBvYmo7CisJ Z3VjX2Z3LT5ndWNfZndfc2l6ZSA9IGZ3LT5zaXplOworCisJRFJNX0RFQlVHX0RSSVZFUigiR3VD IGZ3IGZldGNoIHN0YXR1cyBTVUNDRVNTLCBvYmogJXBcbiIsCisJCQlndWNfZnctPmd1Y19md19v YmopOworCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3Rh dHVzID0gR1VDX0ZJUk1XQVJFX1NVQ0NFU1M7CisJcmV0dXJuOworCitmYWlsOgorCURSTV9ERUJV R19EUklWRVIoIkd1QyBmdyBmZXRjaCBzdGF0dXMgRkFJTDsgZXJyICVkLCBmdyAlcCwgb2JqICVw XG4iLAorCQllcnIsIGZ3LCBndWNfZnctPmd1Y19md19vYmopOworCURSTV9FUlJPUigiRmFpbGVk IHRvIGZldGNoIEd1QyBmaXJtd2FyZSBmcm9tICVzIChlcnJvciAlZClcbiIsCisJCSAgZ3VjX2Z3 LT5ndWNfZndfcGF0aCwgZXJyKTsKKworCW9iaiA9IGd1Y19mdy0+Z3VjX2Z3X29iajsKKwlpZiAo b2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwlndWNfZnct Pmd1Y19md19vYmogPSBOVUxMOworCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CQkvKiBPSyBldmVu IGlmIGZ3IGlzIE5VTEwgKi8KKwlndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMgPSBHVUNfRklS TVdBUkVfRkFJTDsKK30KKworLyoqCisgKiBpbnRlbF9ndWNfdWNvZGVfaW5pdCgpIC0gZGVmaW5l IHBhcmFtZXRlcnMgYW5kIGZldGNoIGZpcm13YXJlCisgKiBAZGV2Oglkcm0gZGV2aWNlCisgKgor ICogQ2FsbGVkIGVhcmx5IGR1cmluZyBkcml2ZXIgbG9hZCwgYnV0IGFmdGVyIEdFTSBpcyBpbml0 aWFsaXNlZC4KKyAqIFRoZSBkZXZpY2Ugc3RydWN0X211dGV4IG11c3QgYmUgaGVsZCBieSB0aGUg Y2FsbGVyLCBhcyB3ZSdyZQorICogZ29pbmcgdG8gYWxsb2NhdGUgYSBHRU0gb2JqZWN0IHRvIGhv bGQgdGhlIGZpcm13YXJlIGltYWdlLgorICoKKyAqIFRoZSBmaXJtd2FyZSB3aWxsIGJlIHRyYW5z ZmVycmVkIHRvIHRoZSBHdUMncyBtZW1vcnkgbGF0ZXIsCisgKiB3aGVuIGludGVsX2d1Y191Y29k ZV9sb2FkKCkgaXMgY2FsbGVkLgorICovCit2b2lkIGludGVsX2d1Y191Y29kZV9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2 X3ByaXYtPmd1Yy5ndWNfZnc7CisJY29uc3QgY2hhciAqZndfcGF0aDsKKworCWlmICghSEFTX0dV Q19TQ0hFRChkZXYpKQorCQlpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lvbiA9IGZhbHNlOworCisJ aWYgKCFIQVNfR1VDX1VDT0RFKGRldikpIHsKKwkJZndfcGF0aCA9IE5VTEw7CisJfSBlbHNlIGlm IChJU19TS1lMQUtFKGRldikpIHsKKwkJZndfcGF0aCA9IEk5MTVfU0tMX0dVQ19VQ09ERTsKKwkJ Z3VjX2Z3LT5ndWNfZndfbWFqb3Jfd2FudGVkID0gMzsKKwkJZ3VjX2Z3LT5ndWNfZndfbWlub3Jf d2FudGVkID0gMDsKKwl9IGVsc2UgeworCQlpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lvbiA9IGZh bHNlOworCQlmd19wYXRoID0gIiI7CS8qIHVua25vd24gZGV2aWNlICovCisJfQorCisJZ3VjX2Z3 LT5ndWNfZGV2ID0gZGV2OworCWd1Y19mdy0+Z3VjX2Z3X3BhdGggPSBmd19wYXRoOworCWd1Y19m dy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9OT05FOworCWd1Y19mdy0+Z3Vj X2Z3X2xvYWRfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX05PTkU7CisKKwlpZiAoZndfcGF0aCA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlpZiAoKmZ3X3BhdGggPT0gJ1wwJykgeworCQlEUk1fRVJST1Io Ik5vIEd1QyBmaXJtd2FyZSBrbm93biBmb3IgdGhpcyBwbGF0Zm9ybVxuIik7CisJCWd1Y19mdy0+ Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9GQUlMOworCQlyZXR1cm47CisJfQor CisJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX1BFTkRJTkc7CisJ RFJNX0RFQlVHX0RSSVZFUigiR3VDIGZpcm13YXJlIHBlbmRpbmcsIHBhdGggJXNcbiIsIGZ3X3Bh dGgpOworCWd1Y19md19mZXRjaChkZXYsIGd1Y19mdyk7CisJLyogc3RhdHVzIG11c3Qgbm93IGJl IEZBSUwgb3IgU1VDQ0VTUyAqLworfQorCisvKioKKyAqIGludGVsX2d1Y191Y29kZV9maW5pKCkg LSBjbGVhbiB1cCBhbGwgYWxsb2NhdGVkIHJlc291cmNlcworICogQGRldjoJZHJtIGRldmljZQor ICovCit2b2lkIGludGVsX2d1Y191Y29kZV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5ndWNfZnc7CisK KwlpZiAoZ3VjX2Z3LT5ndWNfZndfb2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgm Z3VjX2Z3LT5ndWNfZndfb2JqLT5iYXNlKTsKKwlndWNfZnctPmd1Y19md19vYmogPSBOVUxMOwor CisJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX05PTkU7Cit9Ci0t IAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK