From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: [v2 4/6] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Wed, 23 May 2018 18:46:18 -0600 Message-ID: <20180524004620.23828-5-sameer.goel@linaro.org> References: <20180524004620.23828-1-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fLeP2-0001F3-Fu for xen-devel@lists.xenproject.org; Thu, 24 May 2018 00:46:48 +0000 Received: by mail-pl0-x244.google.com with SMTP id n10-v6so14046880plp.0 for ; Wed, 23 May 2018 17:46:45 -0700 (PDT) In-Reply-To: <20180524004620.23828-1-sameer.goel@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, roger.pau@citrix.com, shankerd@codeaurora.org, Sameer Goel List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIgZm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBU aGUgaW50ZW50IGhlcmUKaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxl LgotIEdsdWUgY29kZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGJyaWRnZSB0aGUgQVBJIGNhbGxz LgotIENhbGxlZCBMaW51eCBmdW5jdGlvbnMgZnJvbSB0aGUgWGVuIElPTU1VIGZ1bmN0aW9uIGNh bGxzLgotIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjogY29tbWVudCAq LwotIHhlbi9saW51eF9jb21wYXQ6IEFkZCBhIExpbnV4IGNvbXBhdCBoZWFkZXIKICBGb3IgcG9y dGluZyBmaWxlcyBkaXJlY3RseSBmcm9tIExpbnV4IGl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgZnVu Y3Rpb24gbWFwcGluZwogIGRlZmluaXRpb25zIGZyb20gTGludXggdG8gWGVuLiBUaGlzIGZpbGUg YWRkcyBjb21tb24gQVBJIGZ1bmN0aW9ucyBhbmQKICBvdGhlciBkZWZpbmVzIHRoYXQgYXJlIG5l ZWRlZCBmb3IgcG9ydGluZyBhcm0gU01NVSBkcml2ZXJzLgoKU2lnbmVkLW9mZi1ieTogU2FtZWVy IEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Ci0tLQogeGVuL2FyY2gvYXJtL3AybS5jICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vZHJpdmVycy9LY29uZmlnICAgICAgICAgICAg ICAgICAgIHwgICAyICsKIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnICAgfCAg IDggKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlICB8ICAgMSArCiB4ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jIHwgOTM0ICsrKysrKysrKysrKysrKysr KysrKysrKystCiB4ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmggICAgICAgIHwgIDg0ICsr KwogNiBmaWxlcyBjaGFuZ2VkLCAxMDAxIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCiBj cmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oCgpkaWZmIC0t Z2l0IGEveGVuL2FyY2gvYXJtL3AybS5jIGIveGVuL2FyY2gvYXJtL3AybS5jCmluZGV4IGQ0M2Mz YWE4OTYuLjM4YWE5ZjAwYzEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9wMm0uYworKysgYi94 ZW4vYXJjaC9hcm0vcDJtLmMKQEAgLTE0NTQsNiArMTQ1NCw3IEBAIGVycjoKIHN0YXRpYyB2b2lk IF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZ19vbmUodm9pZCAqZGF0YSkKIHsKICAgICB1bnNpZ25l ZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisgICAgLyogU01NVXYzIFMyIGNmZyB2 dGNyIHJldXNlcyB0aGUgZm9sbG93aW5nIHZhbHVlICovCiAgICAgV1JJVEVfU1lTUkVHMzIodmFs LCBWVENSX0VMMik7CiAgICAgaXNiKCk7CiB9CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9LY29u ZmlnIGIveGVuL2RyaXZlcnMvS2NvbmZpZwppbmRleCBkYjk0MzkzZjQ3Li41OWNhMDBmODUwIDEw MDY0NAotLS0gYS94ZW4vZHJpdmVycy9LY29uZmlnCisrKyBiL3hlbi9kcml2ZXJzL0tjb25maWcK QEAgLTE1LDQgKzE1LDYgQEAgc291cmNlICJkcml2ZXJzL3ZpZGVvL0tjb25maWciCiBjb25maWcg SEFTX1ZQQ0kKIAlib29sCiAKK3NvdXJjZSAiZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZp ZyIKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tj b25maWcgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jZGE4OTlmNjA4Ci0tLSAvZGV2L251bGwKKysrIGIv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKQEAgLTAsMCArMSw4IEBACisKK2Nv bmZpZyBBUk1fU01NVV92MworCWJvb2wgIkFSTSBTTU1VdjMgU3VwcG9ydCIKKwlkZXBlbmRzIG9u IEFSTV82NAorCWhlbHAKKwkgU3VwcG9ydCBmb3IgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBBUk0g U3lzdGVtIE1NVSBhcmNoaXRlY3R1cmUKKwkgdmVyc2lvbiAzLgorCmRpZmYgLS1naXQgYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC9hcm0vTWFrZWZpbGUKaW5kZXggZjRjZDI2ZTE1ZC4uZTE0NzMyYjU1YyAxMDA2NDQKLS0tIGEv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCisrKyBiL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL2FybS9NYWtlZmlsZQpAQCAtMSwyICsxLDMgQEAKIG9iai15ICs9IGlvbW11Lm8K IG9iai15ICs9IHNtbXUubworb2JqLSQoQ09ORklHX0FSTV9TTU1VX3YzKSArPSBzbW11LXYzLm8K ZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMgYi94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCmluZGV4IGU2N2JhNmM0MGYuLmRmODE2 MjY3ODUgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMK KysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwpAQCAtMTgsMjggKzE4 LDQxNCBAQAogICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KICAq CiAgKiBUaGlzIGRyaXZlciBpcyBwb3dlcmVkIGJ5IGJhZCBjb2ZmZWUgYW5kIGJvbWJheSBtaXgu CisgKgorICoKKyAqIEJhc2VkIG9uIExpbnV4IGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwor ICogPT4gY29tbWl0IDdhYTg2MTlhNjZhZWE1MmIxNDVlMDRjYmFiNGY4ZDZhNGU1ZjNmM2IKKyAq CisgKiBYZW4gbW9kaWZpY2F0aW9uczoKKyAqIFNhbWVlciBHb2VsIDxzYW1lZXIuZ29lbEBsaW5h cm8ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNp bmNsdWRlIDxsaW51eC9hY3BpX2lvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2lu Y2x1ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Ci0jaW5jbHVk ZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8 bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9h ZGRyZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KLQotI2luY2x1 ZGUgImlvLXBndGFibGUuaCIKKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2luY2x1ZGUgPHhlbi9j b25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vZGVsYXkuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4K KyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5jbHVkZSA8eGVuL2lycS5oPgorI2luY2x1ZGUgPHhl bi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vbGludXhfY29tcGF0Lmg+CisjaW5jbHVkZSA8eGVuL2xp c3QuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+CisjaW5j bHVkZSA8eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8eGVuL3NpemVzLmg+CisjaW5jbHVkZSA8eGVu L3ZtYXAuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfaW9ydC5oPgorI2luY2x1ZGUgPGFzbS9hdG9t aWMuaD4KKyNpbmNsdWRlIDxhc20vZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5j bHVkZSA8YXNtL3BsYXRmb3JtLmg+CisKKy8qIEFsaWFzIHRvIFhlbiBkZXZpY2UgdHJlZSBoZWxw ZXJzICovCisjZGVmaW5lIGRldmljZV9ub2RlIGR0X2RldmljZV9ub2RlCisjZGVmaW5lIG9mX3Bo YW5kbGVfYXJncyBkdF9waGFuZGxlX2FyZ3MKKyNkZWZpbmUgb2ZfZGV2aWNlX2lkIGR0X2Rldmlj ZV9tYXRjaAorI2RlZmluZSBvZl9tYXRjaF9ub2RlIGR0X21hdGNoX25vZGUKKyNkZWZpbmUgb2Zf cHJvcGVydHlfcmVhZF91MzIobnAsIHBuYW1lLCBvdXQpICghZHRfcHJvcGVydHlfcmVhZF91MzIo bnAsIHBuYW1lLCBvdXQpKQorI2RlZmluZSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wgZHRfcHJvcGVy dHlfcmVhZF9ib29sCisjZGVmaW5lIG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzIGR0X3BhcnNl X3BoYW5kbGVfd2l0aF9hcmdzCisKKy8qIFhlbjogSGVscGVycyB0byBnZXQgZGV2aWNlIE1NSU8g YW5kIElSUXMgKi8KK3N0cnVjdCByZXNvdXJjZSB7CisJdTY0IGFkZHI7CisJdTY0IHNpemU7CisJ dW5zaWduZWQgaW50IHR5cGU7Cit9OworCisjZGVmaW5lIHJlc291cmNlX3NpemUocmVzKSAoKHJl cyktPnNpemUpCisKKyNkZWZpbmUgcGxhdGZvcm1fZGV2aWNlIGRldmljZQorCisjZGVmaW5lIElP UkVTT1VSQ0VfTUVNIDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMQorCitzdGF0aWMgc3RydWN0 IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAgICAgIHVuc2lnbmVk IGludCBudW0pCit7CisJLyoKKwkgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJldHdlZW4g MiBjYWxscyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UuCisJICogSXQncyBxdWl0ZSB1Z2x5IGJ1 dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBjb2RlIGluIHRoZSBwYXJ0CisJICogaW1wb3J0 ZWQgZnJvbSBMaW51eAorCSAqLworCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOworCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAq bm9kZV9zbW11X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXMudHlwZSA9IHR5cGU7CisKKwlz d2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VSQ0VfTUVNOgorCQlpZiAocGRldi0+dHlwZSA9 PSBERVZfQUNQSSkgeworCQkJcmV0ID0gMTsKKwkJCWlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9k ZTsKKwkJCW5vZGVfc21tdV9kYXRhID0KKwkJCQkoc3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICop aW9ydF9ub2RlLT5ub2RlX2RhdGE7CisKKwkJCWlmIChub2RlX3NtbXVfZGF0YSAhPSBOVUxMKSB7 CisJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVfZGF0YS0+YmFzZV9hZGRyZXNzOworCQkJCXJlcy5z aXplID0gU1pfMTI4SzsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0ID0g ZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAorCQkJCQkJICAgICZy ZXMuYWRkciwgJnJlcy5zaXplKTsKKwkJfQorCisJCXJldHVybiAoKHJldCkgPyBOVUxMIDogJnJl cyk7CisKKwljYXNlIElPUkVTT1VSQ0VfSVJROgorCQkvKiBBQ1BJIGNhc2Ugbm90IGltcGxlbWVu dGVkIGFzIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvciBpdCAqLworCQlyZXQgPSBwbGF0Zm9ybV9n ZXRfaXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVy biBOVUxMOworCisJCXJlcy5hZGRyID0gcmV0OworCQlyZXMuc2l6ZSA9IDE7CisKKwkJcmV0dXJu ICZyZXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQg cGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29u c3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKKwlz dHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKKwlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVf djMgKm5vZGVfc21tdV9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKHBkZXYtPnR5cGUgPT0g REVWX0FDUEkpIHsKKwkJaW9ydF9ub2RlID0gcGRldi0+YWNwaV9ub2RlOworCQlub2RlX3NtbXVf ZGF0YSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsK KworCQlpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJjbXAobmFtZSwg ImV2ZW50cSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5ldmVudF9nc2l2OworCQkJZWxz ZSBpZiAoIXN0cmNtcChuYW1lLCAicHJpcSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5w cmlfZ3NpdjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3luYyIpKQorCQkJCXJl dCA9IG5vZGVfc21tdV9kYXRhLT5zeW5jX2dzaXY7CisJCQllbHNlIGlmICghc3RyY21wKG5hbWUs ICJnZXJyb3IiKSkKKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2OworCQkJZWxz ZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlkdHByb3AgPSBkdF9maW5k X3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVycnVwdC1uYW1lcyIsIE5VTEwpOworCQlp ZiAoIWR0cHJvcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghZHRwcm9wLT52YWx1ZSkK KwkJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogWGVu OiBIZWxwZXJzIGZvciBETUEgYWxsb2NhdGlvbi4gSnVzdCB0aGUgZnVuY3Rpb24gbmFtZSBpcyBy ZXVzZWQgZm9yCisgKiBwb3J0aW5nIGNvZGUgdGhlc2UgYWxsb2NhdGlvbiBhcmUgbm90IG1hbmFn ZWQgYWxsb2NhdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCAqZG1hbV9hbGxvY19jb2hlcmVudChz dHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hh bmRsZSwgZ2ZwX3QgZ2ZwKQoreworCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgYWxpZ25t ZW50ID0gc2l6ZTsKKworCS8qCisJICogX3h6YWxsb2MgcmVxdWlyZXMgdGhhdCB0aGUgKGFsaWdu ICYgKGFsaWduIC0xKSkgPSAwLiBNb3N0IG9mIHRoZQorCSAqIGFsbG9jYXRpb25zIGluIFNNTVUg Y29kZSBzaG91bGQgc2VuZCB0aGUgcmlnaHQgdmFsdWUgZm9yIHNpemUuIEluCisJICogY2FzZSB0 aGlzIGlzIG5vdCB0cnVlIHByaW50IGEgd2FybmluZyBhbmQgYWxpZ24gdG8gdGhlIHNpemUgb2Yg YQorCSAqICh2b2lkICopCisJICovCisJaWYgKHNpemUgJiAoc2l6ZSAtIDEpKSB7CisJCWRldl93 YXJuKGRldiwgIkZpeGluZyBhbGlnbm1lbnQgZm9yIHRoZSBETUEgYnVmZmVyXG4iKTsKKwkJYWxp Z25tZW50ID0gc2l6ZW9mKHZvaWQgKik7CisJfQorCisJdmFkZHIgPSBfeHphbGxvYyhzaXplLCBh bGlnbm1lbnQpOworCWlmICghdmFkZHIpIHsKKwkJZGV2X2VycihkZXYsICJETUEgYWxsb2NhdGlv biBmYWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkqZG1hX2hhbmRsZSA9IHZpcnRf dG9fbWFkZHIodmFkZHIpOworCisJcmV0dXJuIHZhZGRyOworfQorCisKK3N0YXRpYyB2b2lkIGRt YW1fZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2 YWRkciwKKwkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwl4ZnJlZSh2YWRkcik7Cit9CisK Ky8qIFhlbjogU3R1YiBvdXQgRE1BIGRvbWFpbiByZWxhdGVkIGZ1bmN0aW9ucyAqLworI2RlZmlu ZSBpb21tdV9nZXRfZG1hX2Nvb2tpZShkb20pIDAKKyNkZWZpbmUgaW9tbXVfcHV0X2RtYV9jb29r aWUoZG9tKQorCisvKiBYZW46IFN0dWIgb3V0IG1vZHVsZSBwYXJhbSByZWxhdGVkIGZ1bmN0aW9u ICovCisjZGVmaW5lIG1vZHVsZV9wYXJhbV9uYW1lZChhLCBiLCBjLCBkKQorI2RlZmluZSBNT0RV TEVfUEFSTV9ERVNDKGEsIGIpCisKKyNkZWZpbmUgZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChk LCBiKSAwCisKKyNkZWZpbmUgb2ZfZG1hX2lzX2NvaGVyZW50KG4pIDAKKworI2RlZmluZSBNT0RV TEVfREVWSUNFX1RBQkxFKHR5cGUsIG5hbWUpCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmRldm1f aW9yZW1hcF9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCByZXNv dXJjZSAqcmVzKQoreworCXZvaWQgX19pb21lbSAqcHRyOworCisJaWYgKCFyZXMgfHwgcmVzLT50 eXBlICE9IElPUkVTT1VSQ0VfTUVNKSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJj ZVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXB0ciA9IGlvcmVtYXBf bm9jYWNoZShyZXMtPmFkZHIsIHJlcy0+c2l6ZSk7CisJaWYgKCFwdHIpIHsKKwkJZGV2X2Vycihk ZXYsCisJCQkiaW9yZW1hcCBmYWlsZWQgKGFkZHIgMHglIlBSSXg2NCIgc2l6ZSAweCUiUFJJeDY0 IilcbiIsCisJCQlyZXMtPmFkZHIsIHJlcy0+c2l6ZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCX0KKworCXJldHVybiBwdHI7Cit9CisKKy8qIFhlbjogQ29tcGF0aWJpbGl0eSBkZWZp bmUgZm9yIGlvbW11X2RvbWFpbl9nZW9tZXRyeS4qLworc3RydWN0IGlvbW11X2RvbWFpbl9nZW9t ZXRyeSB7CisJZG1hX2FkZHJfdCBhcGVydHVyZV9zdGFydDsgLyogRmlyc3QgYWRkcmVzcyB0aGF0 IGNhbiBiZSBtYXBwZWQgICAgKi8KKwlkbWFfYWRkcl90IGFwZXJ0dXJlX2VuZDsgICAvKiBMYXN0 IGFkZHJlc3MgdGhhdCBjYW4gYmUgbWFwcGVkICAgICAqLworCWJvb2wgZm9yY2VfYXBlcnR1cmU7 ICAgICAgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4gbWFwcGFibGUgcmFuZ2U/ICovCit9OworCisK Ky8qIFhlbjogVHlwZSBkZWZpbml0aW9ucyBmb3IgaW9tbXVfZG9tYWluICovCisjZGVmaW5lIElP TU1VX0RPTUFJTl9VTk1BTkFHRUQgMAorI2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKKyNkZWZp bmUgSU9NTVVfRE9NQUlOX0lERU5USVRZIDIKKworLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4g Ki8KK3N0cnVjdCBpb21tdV9kb21haW4geworCS8qIFJ1bnRpbWUgU01NVSBjb25maWd1cmF0aW9u IGZvciB0aGlzIGlvbW11X2RvbWFpbiAqLworCXN0cnVjdCBhcm1fc21tdV9kb21haW4JCSpwcml2 OworCXVuc2lnbmVkIGludCB0eXBlOworCisJLyogRHVtbXkgY29tcGF0aWJpbGl0eSBkZWZpbmVz ICovCisJdW5zaWduZWQgbG9uZyBwZ3NpemVfYml0bWFwOworCXN0cnVjdCBpb21tdV9kb21haW5f Z2VvbWV0cnkgZ2VvbWV0cnk7CisKKwlhdG9taWNfdCByZWY7CisJLyoKKwkgKiBVc2VkIHRvIGxp bmsgaW9tbXVfZG9tYWluIGNvbnRleHRzIGZvciBhIHNhbWUgZG9tYWluLgorCSAqIFRoZXJlIGlz IGF0IGxlYXN0IG9uZSBwZXItU01NVSB0byB1c2VkIGJ5IHRoZSBkb21haW4uCisJICovCisJc3Ry dWN0IGxpc3RfaGVhZAkJbGlzdDsKK307CisKKy8qIFhlbjogRGVzY3JpYmVzIGluZm9ybWF0aW9u IHJlcXVpcmVkIGZvciBhIFhlbiBkb21haW4gKi8KK3N0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWlu IHsKKwlzcGlubG9ja190CQkJbG9jazsKKwkvKiBMaXN0IG9mIGlvbW11IGRvbWFpbnMgYXNzb2Np YXRlZCB0byB0aGlzIGRvbWFpbiAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWNvbnRleHRzOworfTsK KworLyoKKyAqIFhlbjogSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBkZXZpY2Ugc3RvcmVkIGluIGRl di0+YXJjaGRhdGEuaW9tbXUKKyAqCisgKiBUaGUgZGV2LT5hcmNoZGF0YS5pb21tdSBzdG9yZXMg dGhlIGlvbW11X2RvbWFpbiAocnVudGltZSBjb25maWd1cmF0aW9uIG9mCisgKiB0aGUgU01NVSku CisgKi8KK3N0cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlIHsKKwlzdHJ1Y3QgaW9tbXVfZG9tYWlu ICpkb21haW47Cit9OworCisvKgorICogWGVuOiBpb19wZ3RhYmxlIGNvbXBhdGliaWxpdHkgZGVm aW5lcy4KKyAqIE1vc3Qgb2YgdGhlc2UgYXJlIHRvIHBvcnQgaW4gdGhlIFMxIHRyYW5zbGF0aW9u IGNvZGUgYXMgaXMuCisgKi8KK3N0cnVjdCBpb19wZ3RhYmxlX29wcyB7Cit9OworCitzdHJ1Y3Qg aW9tbXVfZ2F0aGVyX29wcyB7CisJdm9pZCAoKnRsYl9mbHVzaF9hbGwpKHZvaWQgKmNvb2tpZSk7 CisJdm9pZCAoKnRsYl9hZGRfZmx1c2gpKHVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUs IHNpemVfdCBncmFudWxlLAorCQkJICAgICAgYm9vbCBsZWFmLCB2b2lkICpjb29raWUpOworCXZv aWQgKCp0bGJfc3luYykodm9pZCAqY29va2llKTsKK307CisKK3N0cnVjdCBpb19wZ3RhYmxlX2Nm ZyB7CisJLyoKKwkgKiBJT19QR1RBQkxFX1FVSVJLX0FSTV9OUzogKEFSTSBmb3JtYXRzKSBTZXQg TlMgYW5kIE5TVEFCTEUgYml0cyBpbgorCSAqCXN0YWdlIDEgUFRFcywgZm9yIGhhcmR3YXJlIHdo aWNoIGluc2lzdHMgb24gdmFsaWRhdGluZyB0aGVtCisJICoJZXZlbiBpbglub24tc2VjdXJlIHN0 YXRlIHdoZXJlIHRoZXkgc2hvdWxkIG5vcm1hbGx5IGJlIGlnbm9yZWQuCisJICoKKwkgKiBJT19Q R1RBQkxFX1FVSVJLX05PX1BFUk1TOiBJZ25vcmUgdGhlIElPTU1VX1JFQUQsIElPTU1VX1dSSVRF IGFuZAorCSAqCUlPTU1VX05PRVhFQyBmbGFncyBhbmQgbWFwIGV2ZXJ5dGhpbmcgd2l0aCBmdWxs IGFjY2VzcywgZm9yCisJICoJaGFyZHdhcmUgd2hpY2ggZG9lcyBub3QgaW1wbGVtZW50IHRoZSBw ZXJtaXNzaW9ucyBvZiBhIGdpdmVuCisJICoJZm9ybWF0LCBhbmQvb3IgcmVxdWlyZXMgc29tZSBm b3JtYXQtc3BlY2lmaWMgZGVmYXVsdCB2YWx1ZS4KKwkgKgorCSAqIElPX1BHVEFCTEVfUVVJUktf VExCSV9PTl9NQVA6IElmIHRoZSBmb3JtYXQgZm9yYmlkcyBjYWNoaW5nIGludmFsaWQKKwkgKgko dW5tYXBwZWQpIGVudHJpZXMgYnV0IHRoZSBoYXJkd2FyZSBtaWdodCBkbyBzbyBhbnl3YXksIHBl cmZvcm0KKwkgKglUTEIgbWFpbnRlbmFuY2Ugd2hlbiBtYXBwaW5nIGFzIHdlbGwgYXMgd2hlbiB1 bm1hcHBpbmcuCisJICoKKwkgKiBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCOiAoQVJNIHY3 cyBmb3JtYXQpIFNldCBiaXQgOSBpbiBhbGwKKwkgKglQVEVzLCBmb3IgTWVkaWF0ZWsgSU9NTVVz IHdoaWNoIHRyZWF0IGl0IGFzIGEgMzNyZCBhZGRyZXNzIGJpdAorCSAqCXdoZW4gdGhlIFNvQyBp cyBpbiAiNEdCIG1vZGUiIGFuZCB0aGV5IGNhbiBvbmx5IGFjY2VzcyB0aGUgaGlnaAorCSAqCXJl bWFwIG9mIERSQU0gKDB4MV8wMDAwMDAwMCB0byAweDFfZmZmZmZmZmYpLgorCSAqCisJICogSU9f UEdUQUJMRV9RVUlSS19OT19ETUE6IEd1YXJhbnRlZXMgdGhhdCB0aGUgdGFibGVzIHdpbGwgb25s eSBldmVyCisJICoJYmUgYWNjZXNzZWQgYnkgYSBmdWxseSBjYWNoZS1jb2hlcmVudCBJT01NVSBv ciBDUFUgKGUuZy4gZm9yIGEKKwkgKglzb2Z0d2FyZS1lbXVsYXRlZCBJT01NVSksIHN1Y2ggdGhh dCBwYWdldGFibGUgdXBkYXRlcyBuZWVkIG5vdAorCSAqCWJlIHRyZWF0ZWQgYXMgZXhwbGljaXQg RE1BIGRhdGEuCisJICovCisJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9OUwkJQklUKDAp CisJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TCUJJVCgxKQorCSNkZWZpbmUgSU9f UEdUQUJMRV9RVUlSS19UTEJJX09OX01BUAlCSVQoMikKKwkjZGVmaW5lIElPX1BHVEFCTEVfUVVJ UktfQVJNX01US180R0IJQklUKDMpCisJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX05PX0RNQQkJ QklUKDQpCisJdW5zaWduZWQgbG9uZwkJCXF1aXJrczsKKwl1bnNpZ25lZCBsb25nCQkJcGdzaXpl X2JpdG1hcDsKKwl1bnNpZ25lZCBpbnQJCQlpYXM7CisJdW5zaWduZWQgaW50CQkJb2FzOworCWNv bnN0IHN0cnVjdCBpb21tdV9nYXRoZXJfb3BzCSp0bGI7CisJc3RydWN0IGRldmljZQkJCSppb21t dV9kZXY7CisKKwkvKiBMb3ctbGV2ZWwgZGF0YSBzcGVjaWZpYyB0byB0aGUgdGFibGUgZm9ybWF0 ICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTY0CXR0YnJbMl07CisJCQl1NjQJdGNyOwor CQkJdTY0CW1haXJbMl07CisJCX0gYXJtX2xwYWVfczFfY2ZnOworCisJCXN0cnVjdCB7CisJCQl1 NjQJdnR0YnI7CisJCQl1NjQJdnRjcjsKKwkJfSBhcm1fbHBhZV9zMl9jZmc7CisKKwkJc3RydWN0 IHsKKwkJCXUzMgl0dGJyWzJdOworCQkJdTMyCXRjcjsKKwkJCXUzMglubXJyOworCQkJdTMyCXBy cnI7CisJCX0gYXJtX3Y3c19jZmc7CisJfTsKK307CisKK2VudW0gaW9fcGd0YWJsZV9mbXQgewor CUFSTV8zMl9MUEFFX1MxLAorCUFSTV8zMl9MUEFFX1MyLAorCUFSTV82NF9MUEFFX1MxLAorCUFS TV82NF9MUEFFX1MyLAorCUFSTV9WN1MsCisJSU9fUEdUQUJMRV9OVU1fRk1UUywKK307CisKKy8q CisgKiBYZW46IFRoZSBwZ3RhYmxlX29wcyBhcmUgdXNlZCBieSB0aGUgUzEgdHJhbnNsYXRpb25z LCBzbyByZXR1cm4gdGhlIGR1bW15CisgKiBhZGRyZXNzLgorICovCisjZGVmaW5lIGFsbG9jX2lv X3BndGFibGVfb3BzKGYsIGMsIG8pICgoc3RydWN0IGlvX3BndGFibGVfb3BzICopMHgxKQorI2Rl ZmluZSBmcmVlX2lvX3BndGFibGVfb3BzKG8pCisKKy8qIFhlbjogRGVmaW5lIHdyYXBwZXIgZm9y IHJlcXVlc3RpbmcgSVJRcyAqLworI2RlZmluZSBJUlFGX09ORVNIT1QgMAorCit0eXBlZGVmIHZv aWQgKCppcnFfaGFuZGxlcl90KShpbnQsIHZvaWQgKiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKik7 CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldm1fcmVxdWVzdF9pcnEoc3RydWN0IGRldmljZSAqZGV2 LCB1bnNpZ25lZCBpbnQgaXJxLAorCQkJCSAgIGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdW5zaWdu ZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgICBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZf aWQpCit7CisJLyoKKwkgKiBTTU1VdjMgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQgd2lyZWQg aW50ZXJydXB0IG91dHB1dHMgdGhhdCBhcmUKKwkgKiBlZGdlLXRyaWdnZXJlZC4gU2V0IHRoZSBp cnEgdHlwZSBhcyBwZXIgdGhlIHNwZWMuCisJICovCisJaXJxX3NldF90eXBlKGlycSwgSVJRX1RZ UEVfRURHRV9CT1RIKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmbGFncywgaGFuZGxl ciwgZGV2bmFtZSwgZGV2X2lkKTsKK30KKworLyoKKyAqIFhlbiBkb2VzIG5vdCBoYXZlIGEgY29u Y2VwdCBvZiB0aHJlYWRlZCBpcnEsIGJ1dCB3ZSBjYW4gdXNlIHRhc2tsZXRzIHRvCisgKiBhY2hp ZXZlIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkgYXMgbmVlZGVkLgorICovCitpbnQgZGV2bV9y ZXF1ZXN0X3RocmVhZGVkX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpcnEs IGlycV9oYW5kbGVyX3QgaGFuZGxlciwKKwkJCSAgICAgIGlycV9oYW5kbGVyX3QgdGhyZWFkX2Zu LCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwg dm9pZCAqZGV2X2lkKQoreworCXJldHVybiBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCB0aHJl YWRfZm4sIGlycWZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworfQorCisvKiBYZW46IFRoZSBtdXRl eCBpcyB1c2VkIG9ubHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIHNvIHRoZSB0eXBlY2FzdCBpcyBz YWZlICovCisjZGVmaW5lIG11dGV4IHNwaW5sb2NrCisjZGVmaW5lIG11dGV4X2luaXQgc3Bpbl9s b2NrX2luaXQKKyNkZWZpbmUgbXV0ZXhfbG9jayBzcGluX2xvY2sKKyNkZWZpbmUgbXV0ZXhfdW5s b2NrIHNwaW5fdW5sb2NrCisKKyNkZWZpbmUgcmVhZHhfcG9sbF90aW1lb3V0KG9wLCBhZGRyLCB2 YWwsIGNvbmQsIHNsZWVwX3VzLCB0aW1lb3V0X3VzKSBcCisoeyBcCisJc190aW1lX3QgZGVhZGxp bmUgPSBOT1coKSArIE1JQ1JPU0VDUyh0aW1lb3V0X3VzKTsgXAorCWZvciAoOzspIHsgXAorCQko dmFsKSA9IG9wKGFkZHIpOyBcCisJCWlmIChjb25kKSBcCisJCQlicmVhazsgXAorCQlpZiAoTk9X KCkgPiBkZWFkbGluZSkgeyBcCisJCQkodmFsKSA9IG9wKGFkZHIpOyBcCisJCQlicmVhazsgXAor CQl9IFwKKwl1ZGVsYXkoc2xlZXBfdXMpOyBcCisJfSBcCisJKGNvbmQpID8gMCA6IC1FVElNRURP VVQ7IFwKK30pCisKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYWRkciwgdmFs LCBjb25kLCBkZWxheV91cywgdGltZW91dF91cykgXAorCXJlYWR4X3BvbGxfdGltZW91dChyZWFk bF9yZWxheGVkLCBhZGRyLCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKQorCisjZGVm aW5lIFZBX0JJVFMgMCAvKiBPbmx5IG5lZWRlZCBmb3IgUzEgdHJhbnNsYXRpb25zICovCiAKIC8q IE1NSU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFSTV9TTU1VX0lEUjAJCQkweDAKQEAgLTQzMyw2 ICs4MTksNyBAQCBlbnVtIHByaV9yZXNwIHsKIAlQUklfUkVTUF9TVUNDLAogfTsKIAorI2lmIDAg LyogWGVuOiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAqLwogZW51bSBhcm1fc21t dV9tc2lfaW5kZXggewogCUVWVFFfTVNJX0lOREVYLAogCUdFUlJPUl9NU0lfSU5ERVgsCkBAIC00 NTcsNiArODQ0LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IGFybV9zbW11X21zaV9jZmdbQVJNX1NN TVVfTUFYX01TSVNdWzNdID0gewogCQlBUk1fU01NVV9QUklRX0lSUV9DRkcyLAogCX0sCiB9Owor I2VuZGlmCiAKIHN0cnVjdCBhcm1fc21tdV9jbWRxX2VudCB7CiAJLyogQ29tbW9uIGZpZWxkcyAq LwpAQCAtNTYxLDYgKzk0OSw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewogCXUxNgkJCQl2 bWlkOwogCXU2NAkJCQl2dHRicjsKIAl1NjQJCQkJdnRjcjsKKwkvKiBYZW46IERvbWFpbiBhc3Nv Y2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBkb21haW4JCQkqZG9tYWlu OwogfTsKIAogc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewpAQCAtNjM1LDkgKzEwMjUsMjUg QEAgc3RydWN0IGFybV9zbW11X2RldmljZSB7CiAJc3RydWN0IGFybV9zbW11X3N0cnRhYl9jZmcJ c3RydGFiX2NmZzsKIAogCS8qIElPTU1VIGNvcmUgY29kZSBoYW5kbGUgKi8KKyNpZiAwIC8qWGVu OiBHZW5lcmljIGlvbW11X2RldmljZSByZWYgbm90IG5lZWRlZCBoZXJlICovCiAJc3RydWN0IGlv bW11X2RldmljZQkJaW9tbXU7CisjZW5kaWYKKwkvKiBYZW46IE5lZWQgdG8ga2VlcCBhIGxpc3Qg b2YgU01NVSBkZXZpY2VzICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBkZXZp Y2VzOworCS8qIFhlbjogVGFza2xldHMgZm9yIGhhbmRsaW5nIGV2dHMvZmF1bHRzIGFuZCBwY2kg cGFnZSByZXF1ZXN0IElSUXMqLworCXN0cnVjdCB0YXNrbGV0CQkJZXZ0cV90YXNrbGV0OworCXN0 cnVjdCB0YXNrbGV0CQkJcHJpcV90YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0CQkJY29tYmluZWRf aXJxX3Rhc2tsZXQ7CiB9OwogCisvKiBYZW46IEtlZXAgYSBsaXN0IG9mIGRldmljZXMgYXNzb2Np YXRlZCB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFybV9zbW11 X2RldmljZXNfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGFybV9zbW11X2RldmljZXMpOworLyog WGVuOiBIZWxwZXIgZm9yIGZpbmRpbmcgYSBkZXZpY2UgdXNpbmcgZndub2RlICovCitzdGF0aWMK K3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmZ3bm9kZSk7CisKKwogLyogU01NVSBwcml2YXRlIGRhdGEgZm9yIGVhY2gg bWFzdGVyICovCiBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgewogCXN0cnVjdCBhcm1fc21t dV9kZXZpY2UJCSpzbW11OwpAQCAtMTIzMiw3ICsxNjM4LDcgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfaGFuZGxlX3BwcihzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1NjQgKmV2dCkKIAog CWRldl9pbmZvKHNtbXUtPmRldiwgInVuZXhwZWN0ZWQgUFJJIHJlcXVlc3QgcmVjZWl2ZWQ6XG4i KTsKIAlkZXZfaW5mbyhzbW11LT5kZXYsCi0JCSAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNd ICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgMHglMDE2bGx4XG4iLAorCQkgIlx0 c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBp b3ZhICUjIiBQUkl4NjQgIlxuIiwKIAkJIHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3QgPyAiTCIgOiAi IiwKIAkJIGV2dFswXSAmIFBSSVFfMF9QRVJNX1BSSVYgPyAiIiA6ICJ1biIsCiAJCSBldnRbMF0g JiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCkBAIC0xMzQyLDEwICsxNzQ4LDIwIEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9jb21iaW5lZF9pcnFfdGhyZWFkKGludCBpcnEsIHZv aWQgKmRldikKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKy8qIFhlbjogRm9yd2FyZCBkZWZp bmUgZm9yIGNvbWJpbmVkX2lycSB0YXNrbGV0ICovCitzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21i aW5lZF9pcnFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7CisKIHN0YXRpYyBpcnFyZXR1cm5f dCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCiB7CisJ LyogWGVuOiBOZWVkIGFuIHNtbXUgcmVmZXJlbmNlIHRvIHNjaGVkdWxlIHRoZSB0YXNrbGV0ICov CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICopZGV2OworCiAJYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIoaXJxLCBkZXYpOwogCWFybV9zbW11 X2NtZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsKKworCS8qWGVuOiBObyB0aHJlYWRlZCBpcnEu IFNvLCBzY2hlZHVsZSB0aGUgcmlnaHQgdGFza2xldCovCisJdGFza2xldF9zY2hlZHVsZSgmKHNt bXUtPmNvbWJpbmVkX2lycV90YXNrbGV0KSk7CisKIAlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwog fQogCkBAIC0xMzU4LDYgKzE3NzQsNjkgQEAgc3RhdGljIHZvaWQgX19hcm1fc21tdV90bGJfc3lu YyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogCWFybV9zbW11X2NtZHFfaXNzdWVfY21k KHNtbXUsICZjbWQpOwogfQogCisvKgorICogWGVuOiBEZWZpbmUgdGhlIElSUSBoYW5kbGVycyBh bmQgdGFza2xldHMgZm9yIHhlbi4gVGhlIGxpbnV4IGZ1bmN0aW9ucworICogd291bGQgYmUgbW9k aWZpZWQgdG8gdXNlIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIGNvZGUu CisgKi8KKworc3RhdGljIHZvaWQgYXJtX3NtbXVfZXZ0cV90YXNrbGV0KHVuc2lnbmVkIGxvbmcg ZGV2KQoreworCS8qIFRoZSBJUlEgbnVtYmVyIGlzIG5vdCByZWxldmVudCBmb3IgdGhlIGV2dHEg dGhyZWFkIHByb2Nlc3NpbmcgKi8KKwlhcm1fc21tdV9ldnRxX3RocmVhZCgwLCAodm9pZCAqKWRl dik7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zbW11X3ByaXFfdGFza2xldCh1bnNpZ25lZCBsb25n IGRldikKK3sKKwkvKiBUaGUgSVJRIG51bWJlciBpcyBub3QgcmVsZXZlbnQgZm9yIHRoZSBwcmlx IHRocmVhZCBwcm9jZXNzaW5nICovCisJYXJtX3NtbXVfcHJpcV90aHJlYWQoMCwgKHZvaWQgKilk ZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21iaW5lZF9pcnFfdGFza2xldCh1bnNp Z25lZCBsb25nIGRldikKK3sKKwkvKiBUaGUgSVJRIG51bWJlciBpcyBub3QgcmVsZXZlbnQgZm9y IHRoZSBjb21iaW5lZCBpcnEgaGFuZGxlci4qLworCWFybV9zbW11X2NvbWJpbmVkX2lycV90aHJl YWQoMCwgKHZvaWQgKilkZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRxX3RocmVh ZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKilkZXY7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+ZXZ0cV90YXNr bGV0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zbW11X3ByaXFfdGhyZWFkX3hlbihpbnQgaXJx LCB2b2lkICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQorewor CXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSAoc3RydWN0IGFybV9zbW11X2RldmljZSAq KWRldjsKKworCXRhc2tsZXRfc2NoZWR1bGUoJihzbW11LT5wcmlxX3Rhc2tsZXQpKTsKK30KKwor c3RhdGljIHZvaWQgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXJfeGVuKGludCBpcnEsIHZvaWQg KmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3Nt bXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21t dV9nZXJyb3JfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKwlhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpcnEs IGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hl bihpbnQgaXJxLCB2b2lkICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpy ZWdzKQoreworCWFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyKGlycSwgZGV2KTsKK30KKwor I2RlZmluZSBhcm1fc21tdV9ldnRxX3RocmVhZCBhcm1fc21tdV9ldnRxX3RocmVhZF94ZW4KKyNk ZWZpbmUgYXJtX3NtbXVfcHJpcV90aHJlYWQgYXJtX3NtbXVfcHJpcV90aHJlYWRfeGVuCisjZGVm aW5lIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVy X3hlbgorI2RlZmluZSBhcm1fc21tdV9nZXJyb3JfaGFuZGxlciBhcm1fc21tdV9nZXJyb3JfaGFu ZGxlcl94ZW4KKyNkZWZpbmUgYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIgYXJtX3NtbXVf Y29tYmluZWRfaXJxX2hhbmRsZXJfeGVuCisKIHN0YXRpYyB2b2lkIGFybV9zbW11X3RsYl9zeW5j KHZvaWQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9 IGNvb2tpZTsKQEAgLTE0MTUsNiArMTg5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVf Z2F0aGVyX29wcyBhcm1fc21tdV9nYXRoZXJfb3BzID0gewogCS50bGJfc3luYwk9IGFybV9zbW11 X3RsYl9zeW5jLAogfTsKIAorI2lmIDAgLypYZW46IFVudXNlZCBmdW5jdGlvbmFsaXR5ICovCiAv KiBJT01NVSBBUEkgKi8KIHN0YXRpYyBib29sIGFybV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9j YXAgY2FwKQogewpAQCAtMTQyNyw2ICsxOTA3LDcgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVfY2Fw YWJsZShlbnVtIGlvbW11X2NhcCBjYXApCiAJCXJldHVybiBmYWxzZTsKIAl9CiB9CisjZW5kaWYK IAogc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNp Z25lZCB0eXBlKQogewpAQCAtMTU0Niw5ICsyMDI3LDE2IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVf ZG9tYWluX2ZpbmFsaXNlX3MyKHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluLAog CWlmICh2bWlkIDwgMCkKIAkJcmV0dXJuIHZtaWQ7CiAKLQljZmctPnZtaWQJPSAodTE2KXZtaWQ7 Ci0JY2ZnLT52dHRicgk9IHBndGJsX2NmZy0+YXJtX2xwYWVfczJfY2ZnLnZ0dGJyOwotCWNmZy0+ dnRjcgk9IHBndGJsX2NmZy0+YXJtX2xwYWVfczJfY2ZnLnZ0Y3I7CisJLyoKKwkgKiBYZW46IEdl dCB0aGUgdHRiciBhbmQgdnRjciB2YWx1ZXMKKwkgKiB2dHRicjogVGhpcyBpcyBhIHNoYXJlZCB2 YWx1ZSB3aXRoIHRoZSBkb21haW4gcGFnZSB0YWJsZQorCSAqIHZ0Y3I6IFRoZSBUQ1Igc2V0dGlu Z3MgYXJlIHRoZSBzYW1lIGFzIENQVSBzaW5jZSB0aGUgcGFnZQorCSAqIHRhYmxlcyBhcmUgc2hh cmVkCisJICovCisKKwljZmctPnZtaWQJPSB2bWlkOworCWNmZy0+dnR0YnIJPSBwYWdlX3RvX21h ZGRyKGNmZy0+ZG9tYWluLT5hcmNoLnAybS5yb290KTsKKwljZmctPnZ0Y3IJPSBSRUFEX1NZU1JF RzMyKFZUQ1JfRUwyKSAmIFNUUlRBQl9TVEVfMl9WVENSX01BU0s7CiAJcmV0dXJuIDA7CiB9CiAK QEAgLTE2MDQsNiArMjA5Miw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNl KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIAlpZiAoc21tdS0+ZmVhdHVyZXMgJiBBUk1f U01NVV9GRUFUX0NPSEVSRU5DWSkKIAkJcGd0YmxfY2ZnLnF1aXJrcyA9IElPX1BHVEFCTEVfUVVJ UktfTk9fRE1BOwogCisJLyogWGVuOiBwZ3RibF9vcHMgZ2V0cyBhbiBpbnZhbGlkIGFkZHJlc3Mg Ki8KIAlwZ3RibF9vcHMgPSBhbGxvY19pb19wZ3RhYmxlX29wcyhmbXQsICZwZ3RibF9jZmcsIHNt bXVfZG9tYWluKTsKIAlpZiAoIXBndGJsX29wcykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNzIx LDYgKzIyMTAsNyBAQCBvdXRfdW5sb2NrOgogCXJldHVybiByZXQ7CiB9CiAKKyNpZiAwIC8qIFhl bjogVW51c2VkIGZ1bmN0aW9uYWxpdHkgKi8KIHN0YXRpYyBpbnQgYXJtX3NtbXVfbWFwKHN0cnVj dCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQkJcGh5c19hZGRy X3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKIHsKQEAgLTE3NzIsNiArMjI2Miw3IEBA IHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmZ3bm9kZSkKIAlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGRldiA/IGRl dl9nZXRfZHJ2ZGF0YShkZXYpIDogTlVMTDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgYm9vbCBhcm1f c21tdV9zaWRfaW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkK IHsKQEAgLTE3ODMsNyArMjI3NCwxNCBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRfaW5fcmFu Z2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKIAlyZXR1cm4gc2lkIDwg bGltaXQ7CiB9CiAKKy8qIFhlbjogVW51c2VkICovCisjaWYgMAogc3RhdGljIHN0cnVjdCBpb21t dV9vcHMgYXJtX3NtbXVfb3BzOworI2VuZGlmCisKKy8qIFhlbjogUmVkZWZpbmUgYXJtX3NtbXVf b3BzIHRvIHdoYXQgZndzcGVjIHNob3VsZCBldmFsdWF0ZSAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBpb21tdV9vcHMgYXJtX3NtbXVfaW9tbXVfb3BzOworI2RlZmluZSBhcm1fc21tdV9vcHMgYXJt X3NtbXVfaW9tbXVfb3BzCiAKIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiB7CkBAIC0xNzkxLDggKzIyODksMTEgQEAgc3RhdGljIGludCBhcm1fc21t dV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11OwogCXN0cnVjdCBhcm1fc21tdV9tYXN0ZXJfZGF0YSAqbWFzdGVyOwogCXN0cnVjdCBp b21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldi0+aW9tbXVfZndzcGVjOworI2lmIDAgLypYZW46IGlv bW11X2dyb3VwIGlzIG5vdCBuZWVkZWQgKi8KIAlzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwOwor I2VuZGlmCiAKKwkvKiBYZW46IGZ3c3BlYy0+b3BzIGFyZSBub3QgbmVlZGVkICovCiAJaWYgKCFm d3NwZWMgfHwgZndzcGVjLT5vcHMgIT0gJmFybV9zbW11X29wcykKIAkJcmV0dXJuIC1FTk9ERVY7 CiAJLyoKQEAgLTE4MzAsNiArMjMzMSwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZp Y2Uoc3RydWN0IGRldmljZSAqZGV2KQogCQl9CiAJfQogCisvKgorICogWGVuOiBEbyBub3QgbmVl ZCBhbiBpb21tdSBncm91cCBhcyB0aGUgc3RyZWFtIGRhdGEgaXMgY2FycmllZCBieSB0aGUgU01N VQorICogbWFzdGVyIGRldmljZSBvYmplY3QKKyAqLworI2lmIDAKIAlncm91cCA9IGlvbW11X2dy b3VwX2dldF9mb3JfZGV2KGRldik7CiAJaWYgKCFJU19FUlIoZ3JvdXApKSB7CiAJCWlvbW11X2dy b3VwX3B1dChncm91cCk7CkBAIC0xODM3LDggKzIzNDMsMTYgQEAgc3RhdGljIGludCBhcm1fc21t dV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAl9CiAKIAlyZXR1cm4gUFRSX0VSUl9P Ul9aRVJPKGdyb3VwKTsKKyNlbmRpZgorCXJldHVybiAwOwogfQogCisvKgorICogWGVuOiBXZSBj YW4gcG90ZW50aWFsbHkgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uIGFuZCBkZXN0cm95IGEgZGV2aWNl LiBUaGlzCisgKiB3aWxsIGJlIHJlbGV2YW50IGZvciBQQ0kgaG90cGx1Zy4gU28sIHdpbGwgYmUg aW1wbGVtZW50ZWQgYXMgbmVlZGVkIGFmdGVyCisgKiBwYXNzdGhyb3VnaCBzdXBwb3J0IGlzIGF2 YWlsYWJsZS4KKyAqLworI2lmIDAKIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRl di0+aW9tbXVfZndzcGVjOwpAQCAtMTk3NCw2ICsyNDg4LDcgQEAgc3RhdGljIHN0cnVjdCBpb21t dV9vcHMgYXJtX3NtbXVfb3BzID0gewogCS5wdXRfcmVzdl9yZWdpb25zCT0gYXJtX3NtbXVfcHV0 X3Jlc3ZfcmVnaW9ucywKIAkucGdzaXplX2JpdG1hcAkJPSAtMVVMLCAvKiBSZXN0cmljdGVkIGR1 cmluZyBkZXZpY2UgYXR0YWNoICovCiB9OworI2VuZGlmCiAKIC8qIFByb2JpbmcgYW5kIGluaXRp YWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBhcm1fc21tdV9pbml0X29uZV9xdWV1 ZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LApAQCAtMjE4Miw2ICsyNjk3LDcgQEAgc3Rh dGljIGludCBhcm1fc21tdV91cGRhdGVfZ2JwYShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11 LCB1MzIgc2V0LCB1MzIgY2xyKQogCQkJCQkgIDEsIEFSTV9TTU1VX1BPTExfVElNRU9VVF9VUyk7 CiB9CiAKKyNpZiAwIC8qIFhlbjogVGhlcmUgaXMgbm8gTVNJIHN1cHBvcnQgYXMgeWV0ICovCiBz dGF0aWMgdm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkYXRhOwpAQCAtMjI0NywxMiArMjc2MywxNSBAQCBzdGF0aWMgdm9pZCBhcm1f c21tdV9zZXR1cF9tc2lzKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJLyogQWRkIGNh bGxiYWNrIHRvIGZyZWUgTVNJcyBvbiB0ZWFyZG93biAqLwogCWRldm1fYWRkX2FjdGlvbihkZXYs IGFybV9zbW11X2ZyZWVfbXNpcywgZGV2KTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBhcm1f c21tdV9zZXR1cF91bmlxdWVfaXJxcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogewog CWludCBpcnEsIHJldDsKIAorI2lmIDAgLypYZW46IENhbm5vdCBzZXR1cCBtc2lzIGZvciBub3cg Ki8KIAlhcm1fc21tdV9zZXR1cF9tc2lzKHNtbXUpOworI2VuZGlmCiAKIAkvKiBSZXF1ZXN0IGlu dGVycnVwdCBsaW5lcyAqLwogCWlycSA9IHNtbXUtPmV2dHEucS5pcnE7CkBAIC0yMzE2LDkgKzI4 MzUsMTMgQEAgc3RhdGljIGludCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXUpCiAJCSAqIENhdml1bSBUaHVuZGVyWDIgaW1wbGVtZW50YXRpb24gZG9lc24n dCBub3Qgc3VwcG9ydCB1bmlxdWUKIAkJICogaXJxIGxpbmVzLiBVc2Ugc2luZ2xlIGlycSBsaW5l IGZvciBhbGwgdGhlIFNNTVV2MyBpbnRlcnJ1cHRzLgogCQkgKi8KLQkJcmV0ID0gZGV2bV9yZXF1 ZXN0X3RocmVhZGVkX2lycShzbW11LT5kZXYsIGlycSwKKwkJLyoKKwkJICogWGVuOiBEb2VzIG5v dCBzdXBwb3J0IHRocmVhZGVkIGlycXMsIHNvIHNlcmlhbGlzZSB0aGUgc2V0dXAuCisJCSAqIFRo aXMgaXMgdGhlIHNhbWUgZm9yIHByaXMgYW5kIGV2ZW50IGludGVycnVwdCBsaW5lcyBvbiBvdGhl cgorCQkgKiBzeXN0ZW1zCisJCSAqLworCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHNtbXUtPmRl diwgaXJxLAogCQkJCQlhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlciwKLQkJCQkJYXJtX3Nt bXVfY29tYmluZWRfaXJxX3RocmVhZCwKIAkJCQkJSVJRRl9PTkVTSE9ULAogCQkJCQkiYXJtLXNt bXUtdjMtY29tYmluZWQtaXJxIiwgc21tdSk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMjQ1Miw2ICsy OTc1LDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUsIGJvb2wgYnlwYXNzKQogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIFhl bjogSW5pdGlhbGl6ZSB0YXNrbGV0cyAqLworCXRhc2tsZXRfaW5pdCgmc21tdS0+ZXZ0cV90YXNr bGV0LCBhcm1fc21tdV9ldnRxX3Rhc2tsZXQsCisJCQkodW5zaWduZWQgbG9uZylzbW11KTsKKwl0 YXNrbGV0X2luaXQoJnNtbXUtPnByaXFfdGFza2xldCwgYXJtX3NtbXVfcHJpcV90YXNrbGV0LAor CQkJKHVuc2lnbmVkIGxvbmcpc21tdSk7CisJdGFza2xldF9pbml0KCZzbW11LT5jb21iaW5lZF9p cnFfdGFza2xldCwgYXJtX3NtbXVfY29tYmluZWRfaXJxX3Rhc2tsZXQsCisJCQkodW5zaWduZWQg bG9uZylzbW11KTsKIAogCS8qIEVuYWJsZSB0aGUgU01NVSBpbnRlcmZhY2UsIG9yIGVuc3VyZSBi eXBhc3MgKi8KIAlpZiAoIWJ5cGFzcyB8fCBkaXNhYmxlX2J5cGFzcykgewpAQCAtMjU0Miw4ICsz MDcyLDE0IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKnNtbXUpCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfU1RB TExTOwogCX0KIAorLyoKKyAqIFhlbjogQmxvY2sgc3RhZ2UgMSB0cmFuc2xhdGlvbnMuIEJ5IGRv aW5nIHRoaXMgaGVyZSB3ZSBkbyBub3QgbmVlZCB0byBzZXQgdGhlCisgKiBkb21haW4tPnN0YWdl IGV4cGxpY2l0bHkuCisgKi8KKyNpZiAwCiAJaWYgKHJlZyAmIElEUjBfUzFQKQogCQlzbW11LT5m ZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MxOworI2VuZGlmCiAKIAlpZiAocmVnICYg SURSMF9TMlApCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzI7CkBA IC0yNjE2LDEwICszMTUyLDEyIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2Jl KHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJaWYgKHJlZyAmIElEUjVfR1JBTjRLKQog CQlzbW11LT5wZ3NpemVfYml0bWFwIHw9IFNaXzRLIHwgU1pfMk0gfCBTWl8xRzsKIAorI2lmIDAg LyogWGVuOiBTTU1VIG9wcyBkbyBub3QgaGF2ZSBhIHBnc2l6ZV9iaXRtYXAgbWVtYmVyIGZvciBY ZW4gKi8KIAlpZiAoYXJtX3NtbXVfb3BzLnBnc2l6ZV9iaXRtYXAgPT0gLTFVTCkKIAkJYXJtX3Nt bXVfb3BzLnBnc2l6ZV9iaXRtYXAgPSBzbW11LT5wZ3NpemVfYml0bWFwOwogCWVsc2UKIAkJYXJt X3NtbXVfb3BzLnBnc2l6ZV9iaXRtYXAgfD0gc21tdS0+cGdzaXplX2JpdG1hcDsKKyNlbmRpZgog CiAJLyogT3V0cHV0IGFkZHJlc3Mgc2l6ZSAqLwogCXN3aXRjaCAocmVnICYgSURSNV9PQVNfTUFT SyA8PCBJRFI1X09BU19TSElGVCkgewpAQCAtMjY4MCw3ICszMjE4LDggQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfYWNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAog CXN0cnVjdCBkZXZpY2UgKmRldiA9IHNtbXUtPmRldjsKIAlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUg Km5vZGU7CiAKLQlub2RlID0gKihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKiopZGV2X2dldF9wbGF0 ZGF0YShkZXYpOworCS8qIFhlbjogTW9kaWZpY2F0aW9uIHRvIGdldCBpb3J0X25vZGUgKi8KKwlu b2RlID0gKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqKWRldi0+YWNwaV9ub2RlOwogCiAJLyogUmV0 cmlldmUgU01NVXYzIHNwZWNpZmljIGRhdGEgKi8KIAlpb3J0X3NtbXUgPSAoc3RydWN0IGFjcGlf aW9ydF9zbW11X3YzICopbm9kZS0+bm9kZV9kYXRhOwpAQCAtMjcwMyw3ICszMjQyLDcgQEAgc3Rh dGljIGlubGluZSBpbnQgYXJtX3NtbXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2R0X3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJICAgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2Ug KnNtbXUpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBwZGV2OwogCXUzMiBjZWxsczsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIApAQCAt MjcxNiw2ICszMjU1LDcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAogCXBhcnNlX2RyaXZlcl9vcHRpb25zKHNtbXUp OwogCisJLyogWGVuOiBvZl9kbWFfaXNfY29oZXJlbnQgaXMgYSBzdHViIHRpbGwgZHQgc3VwcG9y dCBpcyBpbnRyb2R1Y2VkICovCiAJaWYgKG9mX2RtYV9pc19jb2hlcmVudChkZXYtPm9mX25vZGUp KQogCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX0NPSEVSRU5DWTsKIApAQCAtMjcz NCw5ICszMjc0LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGlycSwgcmV0OwogCXN0cnVjdCByZXNvdXJj ZSAqcmVzOworI2lmIDAgLypYZW46IERvIG5vdCBuZWVkIHRvIHNldHVwIHN5c2ZzICovCiAJcmVz b3VyY2Vfc2l6ZV90IGlvYWRkcjsKKyNlbmRpZgogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXU7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBwZGV2Oy8qIFhlbjogZGV2IGlzIGlnbm9yZWQgKi8KIAlib29sIGJ5cGFzczsKIAogCXNt bXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKQEAgLTI3 NjMsNyArMzMwNSw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWRldl9lcnIoZGV2LCAiTU1JTyByZWdpb24gdG9vIHNt YWxsICglcHIpXG4iLCByZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisjaWYgMCAvKlhlbjog RG8gbm90IG5lZWQgdG8gc2V0dXAgc3lzZnMgKi8KIAlpb2FkZHIgPSByZXMtPnN0YXJ0OworI2Vu ZGlmCiAKIAlzbW11LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKIAlp ZiAoSVNfRVJSKHNtbXUtPmJhc2UpKQpAQCAtMjgwMiwxMyArMzM0NiwxOCBAQCBzdGF0aWMgaW50 IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQly ZXR1cm4gcmV0OwogCiAJLyogUmVjb3JkIG91ciBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8K KwkvKiBYZW46IFNNTVUgaXMgbm90IHRyZWF0ZWQgYSBhIHBsYXRmb3JtIGRldmljZSovCisjaWYg MAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNtbXUpOworI2VuZGlmCiAKIAkvKiBSZXNl dCB0aGUgZGV2aWNlICovCiAJcmV0ID0gYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHNtbXUsIGJ5cGFz cyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorLyogWGVuOiBOb3QgY3JlYXRpbmcgYW4g SU9NTVUgZGV2aWNlIGxpc3QgZm9yIFhlbiAqLworI2lmIDAKIAkvKiBBbmQgd2UncmUgdXAuIEdv IGdvIGdvISAqLwogCXJldCA9IGlvbW11X2RldmljZV9zeXNmc19hZGQoJnNtbXUtPmlvbW11LCBk ZXYsIE5VTEwsCiAJCQkJICAgICAic21tdTMuJXBhIiwgJmlvYWRkcik7CkBAIC0yODQ0LDkgKzMz OTMsMjAgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQorI2VuZGlmCisJ LyoKKwkgKiBYZW46IEtlZXAgYSBsaXN0IG9mIGFsbCBwcm9iZWQgZGV2aWNlcy4gVGhpcyB3aWxs IGJlIHVzZWQgdG8gcXVlcnkKKwkgKiB0aGUgc21tdSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBmd25v ZGUuCisJICovCisJSU5JVF9MSVNUX0hFQUQoJnNtbXUtPmRldmljZXMpOworCXNwaW5fbG9jaygm YXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKKwlsaXN0X2FkZCgmc21tdS0+ZGV2aWNlcywgJmFybV9z bW11X2RldmljZXMpOworCXNwaW5fdW5sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwogCXJl dHVybiAwOwogfQogCisvKiBYZW46IFVudXNlZCBmdW5jdGlvbiAqLworI2lmIDAKIHN0YXRpYyBp bnQgYXJtX3NtbXVfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQog ewogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKQEAgLTI4NjAsNiArMzQyMCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2RldmljZV9z aHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWFybV9zbW11X2Rldmlj ZV9yZW1vdmUocGRldik7CiB9CisjZW5kaWYKKwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBhcm1fc21tdV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXJtLHNt bXUtdjMiLCB9LApAQCAtMjg2Nyw2ICszNDI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBhcm1fc21tdV9vZl9tYXRjaCk7CiAKKyNpZiAwCiBzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBhcm1fc21tdV9kcml2ZXIgPSB7CiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJCT0gImFy bS1zbW11LXYzIiwKQEAgLTI4ODMsMyArMzQ0NiwzMTYgQEAgSU9NTVVfT0ZfREVDTEFSRShhcm1f c21tdXYzLCAiYXJtLHNtbXUtdjMiLCBOVUxMKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSU9NTVUg QVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01NVXYzIGltcGxlbWVudGF0aW9ucyIpOwogTU9EVUxF X0FVVEhPUigiV2lsbCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+Iik7CiBNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7CisjZW5kaWYKKworLyoqKioqIFN0YXJ0IG9mIFhlbiBzcGVjaWZpYyBj b2RlICoqKioqLworCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVz aF9hbGwoc3RydWN0IGRvbWFpbiAqZCkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAq c21tdV9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKwlzdHJ1Y3QgaW9tbXVfZG9t YWluICpjZmc7CisKKwlzcGluX2xvY2soJnNtbXVfZG9tYWluLT5sb2NrKTsKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGNmZywgJnNtbXVfZG9tYWluLT5jb250ZXh0cywgbGlzdCkgeworCQkvKgorCQkg KiBPbmx5IGludmFsaWRhdGUgdGhlIGNvbnRleHQgd2hlbiBTTU1VIGlzIHByZXNlbnQuCisJCSAq IFRoaXMgaXMgYmVjYXVzZSB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiBpcyBkZWxheWVkCisJ CSAqIHVudGlsIGEgbWFzdGVyIGhhcyBiZWVuIGFkZGVkLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5 KCFBQ0NFU1NfT05DRShjZmctPnByaXYtPnNtbXUpKSkKKwkJCWNvbnRpbnVlOworCQlhcm1fc21t dV90bGJfaW52X2NvbnRleHQoY2ZnLT5wcml2KTsKKwl9CisJc3Bpbl91bmxvY2soJnNtbXVfZG9t YWluLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJt X3NtbXVfaW90bGJfZmx1c2goc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJICAgICB1bnNpZ25lZCBs b25nIGdmbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgcGFnZV9jb3VudCkKK3sKKwlyZXR1cm4g YXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQpOworfQorCitzdGF0aWMgc3RydWN0IGlvbW11X2Rv bWFpbiAqYXJtX3NtbXVfZ2V0X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwlzdHJ1Y3Qg YXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11OworCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluOworCisJeGVuX2Rv bWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2OworCisJc21tdSA9IGFybV9zbW11X2dldF9i eV9md25vZGUoZGV2LT5pb21tdV9md3NwZWMtPmlvbW11X2Z3bm9kZSk7CisJaWYgKCFzbW11KQor CQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIHRoZSAmeGVuX2RvbWFpbi0+ Y29udGV4dHMgdG8gbG9jYXRlIGEgY29udGV4dAorCSAqIGFzc2lnbmVkIHRvIHRoaXMgU01NVQor CSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmeGVuX2RvbWFpbi0+Y29udGV4dHMs IGxpc3QpIHsKKwkJc21tdV9kb21haW4gPSB0b19zbW11X2RvbWFpbihkb21haW4pOworCQlpZiAo c21tdV9kb21haW4tPnNtbXUgPT0gc21tdSkKKwkJCXJldHVybiBkb21haW47CisJfQorCisJcmV0 dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWlu KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKK3sKKwlsaXN0X2RlbCgmZG9tYWluLT5saXN0 KTsKKwlhcm1fc21tdV9kb21haW5fZnJlZShkb21haW4pOworfQorCitzdGF0aWMgaW50IGFybV9z bW11X2Fzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgdTggZGV2Zm4sCisJCQkgICAgICAgc3Ry dWN0IGRldmljZSAqZGV2LCB1MzIgZmxhZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW47CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21h aW47CisJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJtX3NtbXU7CisKKwl4ZW5fZG9tYWluID0g ZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisKKwlpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpIHsK KwkJZGV2LT5hcmNoZGF0YS5pb21tdSA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kZXZp Y2UpOworCQlpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisKKwlyZXQgPSBhcm1fc21tdV9hZGRfZGV2aWNlKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKwkvKgorCSAqIENoZWNr IHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgeGVuIGRv bWFpbgorCSAqIHVuZGVyIHRoZSBzYW1lIFNNTVUKKwkgKi8KKwlkb21haW4gPSBhcm1fc21tdV9n ZXRfZG9tYWluKGQsIGRldik7CisJaWYgKCFkb21haW4pIHsKKworCQlkb21haW4gPSBhcm1fc21t dV9kb21haW5fYWxsb2MoSU9NTVVfRE9NQUlOX0RNQSk7CisJCWlmICghZG9tYWluKSB7CisJCQly ZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlhcm1fc21tdSA9IHRvX3NtbXVf ZG9tYWluKGRvbWFpbik7CisJCWFybV9zbW11LT5zMl9jZmcuZG9tYWluID0gZDsKKworCQkvKiBD aGFpbiB0aGUgbmV3IGNvbnRleHQgdG8gdGhlIGRvbWFpbiAqLworCQlsaXN0X2FkZCgmZG9tYWlu LT5saXN0LCAmeGVuX2RvbWFpbi0+Y29udGV4dHMpOworCisJfQorCisJcmV0ID0gYXJtX3NtbXVf YXR0YWNoX2Rldihkb21haW4sIGRldik7CisJaWYgKHJldCkgeworCQlpZiAoZG9tYWluLT5yZWYu Y291bnRlciA9PSAwKQorCQkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsK Kwl9IGVsc2UgeworCQlhdG9taWNfaW5jKCZkb21haW4tPnJlZik7CisJfQorCitvdXQ6CisJc3Bp bl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9t YWluKGQsIGRldik7CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47CisJ c3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4p OworCisJeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2OworCisJaWYgKCFhcm1f c21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiAhPSBkKSB7CisJCWRldl9lcnIoZGV2LCAi IG5vdCBhdHRhY2hlZCB0byBkb21haW4gJWRcbiIsIGQtPmRvbWFpbl9pZCk7CisJCXJldHVybiAt RVNSQ0g7CisJfQorCisJc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworCWFybV9zbW11 X2RldGFjaF9kZXYoZGV2KTsKKwlhdG9taWNfZGVjKCZkb21haW4tPnJlZik7CisKKwlpZiAoZG9t YWluLT5yZWYuY291bnRlciA9PSAwKQorCQlhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihk b21haW4pOworCisJc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfcmVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKnMs IHN0cnVjdCBkb21haW4gKnQsCisJCQkJIHU4IGRldmZuLCAgc3RydWN0IGRldmljZSAqZGV2KQor eworCWludCByZXQgPSAwOworCisJLyogRG9uJ3QgYWxsb3cgcmVtYXBwaW5nIG9uIG90aGVyIGRv bWFpbiB0aGFuIGh3ZG9tICovCisJaWYgKHQgJiYgdCAhPSBoYXJkd2FyZV9kb21haW4pCisJCXJl dHVybiAtRVBFUk07CisKKwlpZiAodCA9PSBzKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGFybV9z bW11X2RlYXNzaWduX2RldihzLCBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlp ZiAodCkgeworCQkvKiBObyBmbGFncyBhcmUgZGVmaW5lZCBmb3IgQVJNLiAqLworCQlyZXQgPSBh cm1fc21tdV9hc3NpZ25fZGV2KHQsIGRldmZuLCBkZXYsIDApOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcm1fc21tdV9pb21t dV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXN0cnVjdCBhcm1fc21tdV94ZW5f ZG9tYWluICp4ZW5fZG9tYWluOworCisJeGVuX2RvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGFybV9z bW11X3hlbl9kb21haW4pOworCWlmICgheGVuX2RvbWFpbikKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlzcGluX2xvY2tfaW5pdCgmeGVuX2RvbWFpbi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnhl bl9kb21haW4tPmNvbnRleHRzKTsKKworCWRvbV9pb21tdShkKS0+YXJjaC5wcml2ID0geGVuX2Rv bWFpbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2h3ZG9tX2luaXQgYXJtX3Nt bXVfaW9tbXVfaHdkb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworfQorCitzdGF0aWMgdm9p ZCBhcm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24oc3RydWN0IGRvbWFpbiAqZCkKK3sKKwlz dHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJj aC5wcml2OworCisJQVNTRVJUKGxpc3RfZW1wdHkoJnhlbl9kb21haW4tPmNvbnRleHRzKSk7CisJ eGZyZWUoeGVuX2RvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11 X21hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLAorCQkJdW5zaWdu ZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlwMm1fdHlwZV90IHQ7CisKKwkv KgorCSAqIEdyYW50IG1hcHBpbmdzIGNhbiBiZSB1c2VkIGZvciBETUEgcmVxdWVzdHMuIFRoZSBk ZXZfYnVzX2FkZHIKKwkgKiByZXR1cm5lZCBieSB0aGUgaHlwZXJjYWxsIGlzIHRoZSBNRk4gKG5v dCB0aGUgSVBBKS4gRm9yIGRldmljZQorCSAqIHByb3RlY3RlZCBieSBhbiBJT01NVSwgWGVuIG5l ZWRzIHRvIGFkZCBhIDE6MSBtYXBwaW5nIGluIHRoZSBkb21haW4KKwkgKiBwMm0gdG8gYWxsb3cg RE1BIHJlcXVlc3QgdG8gd29yay4KKwkgKiBUaGlzIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgZG9t YWluIGlzIGRpcmVjdGVkIG1hcHBlZC4gSGVuY2UgdGhpcworCSAqIGZ1bmN0aW9uIHNob3VsZCBv bmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgorCSAqLworCUJVR19P TighaXNfZG9tYWluX2RpcmVjdF9tYXBwZWQoZCkpOworCUJVR19PTihtZm4gIT0gZ2ZuKTsKKwor CS8qIFdlIG9ubHkgc3VwcG9ydCByZWFkYWJsZSBhbmQgd3JpdGFibGUgZmxhZ3MgKi8KKwlpZiAo IShmbGFncyAmIChJT01NVUZfcmVhZGFibGUgfCBJT01NVUZfd3JpdGFibGUpKSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwl0ID0gKGZsYWdzICYgSU9NTVVGX3dyaXRhYmxlKSA/IHAybV9pb21tdV9t YXBfcncgOiBwMm1faW9tbXVfbWFwX3JvOworCisJLyoKKwkgKiBUaGUgZnVuY3Rpb24gZ3Vlc3Rf cGh5c21hcF9hZGRfZW50cnkgcmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFwcGluZworCSAqIGlmIHRo ZXJlIGlzIGFscmVhZHkgb25lLi4uCisJICovCisJcmV0dXJuIGd1ZXN0X3BoeXNtYXBfYWRkX2Vu dHJ5KGQsIF9nZm4oZ2ZuKSwgX21mbihtZm4pLCAwLCB0KTsKK30KKworc3RhdGljIGludCBfX211 c3RfY2hlY2sgYXJtX3NtbXVfdW5tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBs b25nIGdmbikKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBi eSBnbnR0YWIgY29kZSB3aGVuIHRoZSBkb21haW4KKwkgKiBpcyBkaXJlY3QgbWFwcGVkCisJICov CisJaWYgKCFpc19kb21haW5fZGlyZWN0X21hcHBlZChkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlyZXR1cm4gZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4oZ2Zu KSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11 X29wcyA9IHsKKwkuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAorCS5od2RvbV9p bml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKKwkudGVhcmRvd24gPSBhcm1fc21tdV9p b21tdV9kb21haW5fdGVhcmRvd24sCisJLmlvdGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1 c2gsCisJLmlvdGxiX2ZsdXNoX2FsbCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKKwkuYXNz aWduX2RldmljZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCisJLnJlYXNzaWduX2RldmljZSA9IGFy bV9zbW11X3JlYXNzaWduX2RldiwKKwkubWFwX3BhZ2UgPSBhcm1fc21tdV9tYXBfcGFnZSwKKwku dW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2UsCit9OworCitzdGF0aWMKK3N0cnVjdCBh cm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmZ3bm9kZSkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gTlVMTDsKKwor CXNwaW5fbG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHNtbXUsICZhcm1fc21tdV9kZXZpY2VzLCBkZXZpY2VzKSB7CisJCWlmIChzbW11LT5kZXYtPmZ3 bm9kZSA9PSBmd25vZGUpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmFybV9zbW11X2Rl dmljZXNfbG9jayk7CisKKwlyZXR1cm4gc21tdTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgYXJt X3NtbXVfZHRfaW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKmRldiwKKwkJCQkgICBjb25zdCB2 b2lkICpkYXRhKQoreworCWludCByYzsKKworCS8qCisJICogRXZlbiBpZiB0aGUgZGV2aWNlIGNh bid0IGJlIGluaXRpYWxpemVkLCB3ZSBkb24ndCB3YW50IHRvCisJICogZ2l2ZSB0aGUgU01NVSBk ZXZpY2UgdG8gZG9tMC4KKwkgKi8KKwlkdF9kZXZpY2Vfc2V0X3VzZWRfYnkoZGV2LCBET01JRF9Y RU4pOworCisJcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoZHRfdG9fZGV2KGRldikpOworCWlm IChyYykKKwkJcmV0dXJuIHJjOworCisJaW9tbXVfc2V0X29wcygmYXJtX3NtbXVfaW9tbXVfb3Bz KTsKKworCXJldHVybiAwOworfQorCitEVF9ERVZJQ0VfU1RBUlQoc21tdXYzLCAiQVJNIFNNTVUg VjMiLCBERVZJQ0VfSU9NTVUpCisJLmR0X21hdGNoID0gYXJtX3NtbXVfb2ZfbWF0Y2gsCisJLmlu aXQgPSBhcm1fc21tdV9kdF9pbml0LAorRFRfREVWSUNFX0VORAorCisjaWZkZWYgQ09ORklHX0FD UEkKKy8qIFNldCB1cCB0aGUgSU9NTVUgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFybV9zbW11X2Fj cGlfaW5pdChjb25zdCB2b2lkICpkYXRhKQoreworCWludCByYzsKKworCXJjID0gYXJtX3NtbXVf ZGV2aWNlX3Byb2JlKChzdHJ1Y3QgZGV2aWNlICopZGF0YSk7CisJaWYgKHJjKQorCQlyZXR1cm4g cmM7CisKKwlpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOworCXJldHVybiAwOwor fQorCitBQ1BJX0RFVklDRV9TVEFSVChhc21tdXYzLCAiQVJNIFNNTVUgVjMiLCBERVZJQ0VfSU9N TVUpCisJLmNsYXNzX3R5cGUgPSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzLAorCS5pbml0ID0gYXJt X3NtbXVfYWNwaV9pbml0LAorQUNQSV9ERVZJQ0VfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv eGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oIGIveGVuL2luY2x1ZGUveGVuL2xpbnV4X2Nv bXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgwMzdiZTBhM2UK LS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKQEAgLTAs MCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5jbHVkZS94ZW4vbGludXhf Y29tcGF0LmgKKyAqCisgKiBDb21wYXRpYmlsaXR5IGRlZmluZXMgZm9yIHBvcnRpbmcgY29kZSBm cm9tIExpbnV4IHRvIFhlbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBMaW5hcm8gTGltaXRl ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9fWEVO X0xJTlVYX0NPTVBBVF9IX18KKyNkZWZpbmUgX19YRU5fTElOVVhfQ09NUEFUX0hfXworCisjaW5j bHVkZSA8YXNtL3R5cGVzLmg+CisKK3R5cGVkZWYgcGFkZHJfdCBwaHlzX2FkZHJfdDsKK3R5cGVk ZWYgcGFkZHJfdCBkbWFfYWRkcl90OworCit0eXBlZGVmIHVuc2lnbmVkIGludCBnZnBfdDsKKyNk ZWZpbmUgR0ZQX0tFUk5FTCAwCisjZGVmaW5lIF9fR0ZQX1pFUk8gMHgwMVUKKworLyogSGVscGVy cyBmb3IgSVJRIGZ1bmN0aW9ucyAqLworI2RlZmluZSBmcmVlX2lycSByZWxlYXNlX2lycQorCitl bnVtIGlycXJldHVybiB7CisgICAgSVJRX05PTkUsCisgICAgSVJRX0hBTkRMRUQsCisgICAgSVJR X1dBS0VfVEhSRUFELAorfTsKKwordHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsK KworLyogRGV2aWNlIGxvZ2dlciBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZt dCwgLi4uKSBwcmludGsoWEVOTE9HX0RFQlVHIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5l IGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19JTkZPIGZtdCwgIyMgX19W QV9BUkdTX18pCisjZGVmaW5lIGRldl93YXJuKGRldiwgZm10LCAuLi4pIHByaW50ayhYRU5MT0df V0FSTklORyBmbXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZfZXJyKGRldiwgZm10LCAu Li4pIHByaW50ayhYRU5MT0dfRVJSIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl9p bmZvKGRldiwgZm10LCAuLi4pIHByaW50ayhYRU5MT0dfSU5GTyBmbXQsICMjIF9fVkFfQVJHU19f KQorCisjZGVmaW5lIGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGV2LCBmbXQsIC4uLikgICAgICAgICAg ICAgICAgICBcCisgICAgIHByaW50ayhYRU5MT0dfRVJSIGZtdCwgIyMgX19WQV9BUkdTX18pCisK KyNkZWZpbmUgZGV2X25hbWUoZGV2KSBkdF9ub2RlX2Z1bGxfbmFtZShkZXZfdG9fZHQoZGV2KSkK KworLyogQWxpYXMgdG8gWGVuIGFsbG9jYXRpb24gaGVscGVycyAqLworI2RlZmluZSBrZnJlZSB4 ZnJlZQorI2RlZmluZSBrbWFsbG9jKHNpemUsIGZsYWdzKSAoe1wKKwl2b2lkICpfX3JldF9hbGxv YyA9IE5VTEw7IFwKKwlpZiAoZmxhZ3MgJiBfX0dGUF9aRVJPKSBcCisJCV9fcmV0X2FsbG9jID0g X3h6YWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpOyBcCisJZWxzZSBcCisJCV9fcmV0X2FsbG9j ID0gX3htYWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpOyBcCisJX19yZXRfYWxsb2M7IFwKK30p CisjZGVmaW5lIGt6YWxsb2Moc2l6ZSwgZmxhZ3MpICAgICAgICBfeHphbGxvYyhzaXplLCBzaXpl b2Yodm9pZCAqKSkKKyNkZWZpbmUgZGV2bV9remFsbG9jKGRldiwgc2l6ZSwgZmxhZ3MpICBfeHph bGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkKKyNkZWZpbmUga21hbGxvY19hcnJheShzaXplLCBu LCBmbGFncykgKHtcCisJdm9pZCAqX19yZXRfYWxsb2MgPSBOVUxMOyBcCisJaWYgKGZsYWdzICYg X19HRlBfWkVSTykgXAorCQlfX3JldF9hbGxvYyA9IF94emFsbG9jX2FycmF5KHNpemUsIHNpemVv Zih2b2lkICopLCBuKTsgXAorCWVsc2UgXAorCQlfX3JldF9hbGxvYyA9IF94bWFsbG9jX2FycmF5 KHNpemUsIHNpemVvZih2b2lkICopLCBuKTsgXAorCV9fcmV0X2FsbG9jOyBcCit9KQorCisvKiBB bGlhcyB0byBYZW4gdGltZSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUga3RpbWVfdCBzX3RpbWVfdAor I2RlZmluZSBrdGltZV9nZXQoKSAgICAgICAgICAgICAoTk9XKCkpCisjZGVmaW5lIGt0aW1lX2Fk ZF91cyh0LGkpICAgICAgICh0ICsgTUlDUk9TRUNTKGkpKQorI2RlZmluZSBrdGltZV9jb21wYXJl KHQsaSkgICAgICAodCA+IChpKSkKKworI2VuZGlmIC8qIF9fWEVOX0xJTlVYX0NPTVBBVF9IX18g Ki8KLS0gCjIuMTcuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2 ZWw=