From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerry Han Subject: [PATCH] [v1,2/2] drm/panel:Add Boe Himax8279d MIPI-DSI LCD panel Date: Fri, 22 Feb 2019 10:32:08 +0800 Message-ID: <1550802728-17842-1-git-send-email-hanxu5@huaqin.corp-partner.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 57F3D88810 for ; Fri, 22 Feb 2019 02:32:37 +0000 (UTC) Received: by mail-pg1-x543.google.com with SMTP id r124so386504pgr.3 for ; Thu, 21 Feb 2019 18:32:37 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Jerry Han List-Id: dri-devel@lists.freedesktop.org QWRkIHBhbmVsIGRyaXZlciBmb3IgaXQuCgpTaWduZWQtb2ZmLWJ5OiBKZXJyeSBIYW4gPGhhbnh1 NUBodWFxaW4uY29ycC1wYXJ0bmVyLmdvb2dsZS5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcgICAgICAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LWJvZS1oaW1heDgyNzlkLmMgfCA1OTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZp bGVzIGNoYW5nZWQsIDYxMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLWJvZS1oaW1heDgyNzlkLmMKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGIyZjcxMGUuLjM4ZTI4ODEgMTAwNjQ0Ci0tLSBh L01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00NjM2LDYgKzQ2MzYsMTIgQEAgUzoJ TWFpbnRhaW5lZAogRjoJZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vaWxpOTIyNS5jCiBGOglEb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9pbGl0ZWssaWxpOTIyNS50eHQK IAorRFJNIERSSVZFUiBGT1IgQk9FIEhJTUFYODI3OUQgUEFORUxTCitNOglKZXJyeSBIYW4gPGhh bnh1NUBodWFxaW4uY29ycC1wYXJ0bmVyLmdvb2dsZS5jb20+CitTOglNYWludGFpbmVkCitGOglk cml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtYm9lLWhpbWF4ODI3OWQuYworRjoJRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvYm9lLGhpbWF4ODI3OWQudHh0 CisKIERSTSBEUklWRVIgRk9SIElOVEVMIEk4MTAgVklERU8gQ0FSRFMKIFM6CU9ycGhhbiAvIE9i c29sZXRlCiBGOglkcml2ZXJzL2dwdS9kcm0vaTgxMC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXgg NjAyMGMzMC4uZTVkY2ZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE4Niw0ICsxODYsMTUg QEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWCiAJICBTYXkgWSBoZXJlIGlmIHlv dSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgKIAkgIFNUNzc4OVYgY29u dHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCiAKK2NvbmZpZyBEUk1fUEFORUxfQk9FX0hJ TUFYODI3OUQKKwl0cmlzdGF0ZSAiQm9lIEhpbWF4ODI3OWQgcGFuZWwiCisJZGVwZW5kcyBvbiBP RgorCWRlcGVuZHMgb24gRFJNX01JUElfRFNJCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1Nf REVWSUNFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9y dCBmb3IgU2FtZSB0eXBlCisJICBURlQtTENEIG1vZHVsZXMuIFRoZSBwYW5lbCBoYXMgYSAxMjAw eDE5MjAgcmVzb2x1dGlvbiBhbmQgdXNlcworCSAgMjQgYml0IFJHQiBwZXIgcGl4ZWwuIEl0IHBy b3ZpZGVzIGEgTUlQSSBEU0kgaW50ZXJmYWNlIHRvCisJICB0aGUgaG9zdCBhbmQgaGFzIGEgYnVp bHQtaW4gTEVEIGJhY2tsaWdodC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCmluZGV4 IDVjY2FhYTkuLjhhMzY1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDQg QEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBwYW5lbC1zZWlrby00 M3d2ZjFnLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IHBh bmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFMw NDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KIG9iai0kKENPTkZJR19EUk1f UEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5vCitvYmot JChDT05GSUdfRFJNX1BBTkVMX0JPRV9ISU1BWDgyNzlEKSArPSBwYW5lbC1ib2UtaGltYXg4Mjc5 ZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtYm9lLWhpbWF4ODI3 OWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1ib2UtaGltYXg4Mjc5ZC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODhiZGQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtYm9lLWhpbWF4ODI3OWQuYwpAQCAtMCwwICsx LDU5MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTksIEh1YXFpbiBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgor I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlf ZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlw aV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK3N0cnVjdCBkc2lfY21kX2Rl c2MgeworCWNoYXIgd2FpdDsKKwljaGFyIGNtZDsKKwljaGFyIGxlbjsKKwljaGFyICpwYXlsb2Fk OworfTsKKworc3RydWN0IGRzaV9wYW5lbF9jbWRzIHsKKwljaGFyICpidWY7CisJaW50IGJsZW47 CisJc3RydWN0IGRzaV9jbWRfZGVzYyAqY21kczsKKwlpbnQgY21kX2NudDsKK307CisKK3N0cnVj dCBwYW5lbF9pbmZvIHsKKwlzdHJ1Y3QgZHJtX3BhbmVsIGJhc2U7CisJc3RydWN0IG1pcGlfZHNp X2RldmljZSAqbGluazsKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisJ c3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpwcDMzMDAw X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqcHAxODAwMF9ncGlvOworCisJdTMyIHJzdF9zZXFb MTBdOworCXUzMiByc3Rfc2VxX2xlbjsKKworCXN0cnVjdCBkc2lfcGFuZWxfY21kcyAqb25fY21k czsKKwlzdHJ1Y3QgZHNpX3BhbmVsX2NtZHMgKm9mZl9jbWRzOworCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlCSpwYW5lbF9kaXNwbGF5X21vZGU7CisKKwl1bnNpZ25lZCBpbnQgcGFuZWxfd2lkdGhf bW07CisJdW5zaWduZWQgaW50IHBhbmVsX2hlaWdodF9tbTsKKwl1bnNpZ25lZCBpbnQgcGVyX2Nv bG9yX2NoYW5uZWw7CisKKwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0 YXRpYyBpbnQgZHNpX3BhcnNlX3Jlc2V0X3NlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1MzIg cnN0X3NlcVsxMF0sCisJCXUzMiAqcnN0X2xlbiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQg bnVtID0gMCwgaTsKKwlpbnQgcmM7CisJc3RydWN0IHByb3BlcnR5ICpkYXRhOworCXUzMiB0bXBb MTBdOworCSpyc3RfbGVuID0gMDsKKwlkYXRhID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgbmFtZSwg Jm51bSk7CisKKwludW0gLz0gc2l6ZW9mKHUzMik7CisJaWYgKCFkYXRhIHx8ICFudW0gfHwgbnVt ID4gMTAgfHwgbnVtICUgMikgeworCQlwcl9lcnIoIiVzOiVkLCBlcnJvciByZWFkaW5nICVzLCBs ZW5ndGggZm91bmQgPSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIG5hbWUsIG51bSk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJy YXkobnAsIG5hbWUsIHRtcCwgbnVtKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCIlczolZCwgZXJy b3IgcmVhZGluZyAlcywgcmMgPSAlZFxuIiwKKwkJCQkJX19mdW5jX18sIF9fTElORV9fLCBuYW1l LCByYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW07ICsr aSkgeworCQlyc3Rfc2VxW2ldID0gdG1wW2ldOworCQkqcnN0X2xlbiA9IG51bTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3NzaXplX3QgbWlwaV9kc2lfZGNzX3dyaXRlX2RlbGF5KHN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaSwgdTggY21kLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVu LCBzaXplX3QgdGltZSkKK3sKKwlzc2l6ZV90IHJldDsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0 ID0gbWlwaV9kc2lfZGNzX3dyaXRlKGRzaSwgY21kLCBOVUxMLCAwKTsKKwllbHNlCisJCXJldCA9 IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIGNtZCwgZGF0YSwgbGVuKTsKKworCW1zbGVlcCh0aW1l KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY21kcyhzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkc2lfZGV2aWNlLAorCQkJCQlzdHJ1Y3QgZHNpX3BhbmVsX2NtZHMgKmlu aXRfY21kcykKK3sKKwlzdHJ1Y3QgZHNpX2NtZF9kZXNjICpvbmVfY21kID0gaW5pdF9jbWRzLT5j bWRzOworCWludCBpID0gMDsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGluaXRfY21k cy0+Y21kX2NudDsgaSsrKSB7CisJCWlmIChvbmVfY21kID09IE5VTEwpCisJCQlyZXR1cm4gLUVJ TlZBTDsKKworCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfZGVsYXkoZHNpX2RldmljZSwKKwkJ CQlvbmVfY21kLT5jbWQsIG9uZV9jbWQtPnBheWxvYWQsCisJCQkJb25lX2NtZC0+bGVuLCBvbmVf Y21kLT53YWl0KTsKKwkJb25lX2NtZCsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgcGFyc2VfZGNzX2NtZHMoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQlzdHJ1Y3Qg ZHNpX3BhbmVsX2NtZHMgKnBjbWRzLCBjaGFyICpjbWRfa2V5KQoreworCWNvbnN0IGNoYXIgKmRh dGE7CisJaW50IGJsZW4gPSAwLCBsZW4sIGNudCA9IDA7CisJY2hhciAqYnVmLCAqYnA7CisJc3Ry dWN0IGRzaV9jbWRfZGVzYyAqdGVtcF9jbWQ7CisKKwlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG5w LCBjbWRfa2V5LCAmYmxlbik7CisJaWYgKCFkYXRhKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCwg a2V5PSVzXG4iLCBfX2Z1bmNfXywgY21kX2tleSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGNoYXIpICogYmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFi dWYpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KGJ1ZiwgZGF0YSwgYmxlbik7CisKKwkv KiBzY2FuIGRjcyBjb21tYW5kcyAqLworCWJwID0gYnVmOworCWxlbiA9IGJsZW47CisKKwkvKiBn ZXQgaG93IG11Y2ggY21kIGNudCAgKi8KKwl3aGlsZSAobGVuID4gMCkgeworCQljbnQrKzsKKwkJ bGVuID0gbGVuIC0gKihicCk7CisJCWJwID0gYnAgKyAqKGJwKTsKKwl9CisKKwlwY21kcy0+Y21k X2NudCA9IGNudDsKKworCXBjbWRzLT5jbWRzID0ga2NhbGxvYyhjbnQsIHNpemVvZihzdHJ1Y3Qg ZHNpX2NtZF9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY21kcy0+Y21kcykKKwkJcmV0dXJu IC1FTk9NRU07CisJdGVtcF9jbWQgPSBwY21kcy0+Y21kczsKKworCWJwID0gYnVmOworCWxlbiA9 IGJsZW47CisKKwl3aGlsZSAoY250ICE9IDApIHsKKwkJdGVtcF9jbWQtPndhaXQgPSAqKGJwKzEp OworCQl0ZW1wX2NtZC0+Y21kID0gKihicCsyKTsKKwkJdGVtcF9jbWQtPmxlbiA9ICooYnApIC0g MzsKKwkJdGVtcF9jbWQtPnBheWxvYWQgPSBicCArIDM7CisKKwkJY250LS07CisJCXRlbXBfY21k Kys7CisJCWJwID0gYnAgKyAqKGJwKTsKKwl9CisKKwlwY21kcy0+YnVmID0gYnVmOworCXBjbWRz LT5ibGVuID0gYmxlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhbmVsX3BhcnNl X2R0KHN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBh bmVsc19ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyYW1ldGVyX25vZGU7CisJc3RhdGlj IGNvbnN0IGNoYXIgKmxjZF9uYW1lOworCXN0YXRpYyBjb25zdCBjaGFyICpwYW5lbF9wYXJhbWV0 ZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZTsKKwlzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlCSpkc2lfZGV2aWNlID0gcGluZm8tPmxpbms7CisJaW50IHJldCA9IDA7CisJ dTMyCXRtcDsKKworCXBhbmVsc19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInBh bmVscyIpOworCWlmICghcGFuZWxzX25vZGUpIHsKKwkJcHJfZXJyKCJHZXQgcGFuZWxzIG5vZGUg RmFpbCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwYW5lbF9wYXJhbWV0ZXIgPSBv Zl9nZXRfcHJvcGVydHkocGFuZWxzX25vZGUsICJwYW5lbC1wYXJhbWV0ZXIiLCBOVUxMKTsKKwlp ZiAoIXBhbmVsX3BhcmFtZXRlcikgeworCQlwcl9lcnIoIkdldCBwYW5lbCBwYXJhbWV0ZXIgRmFp bCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwYXJhbWV0ZXJfbm9kZSA9IG9mX2Zp bmRfbm9kZV9ieV9uYW1lKHBhbmVsc19ub2RlLCBwYW5lbF9wYXJhbWV0ZXIpOworCWlmICghcGFy YW1ldGVyX25vZGUpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZ2V0IGxjZCBuYW1lICovCisJ bGNkX25hbWUgPSBvZl9nZXRfcHJvcGVydHkocGFyYW1ldGVyX25vZGUsICJkc2ktcGFuZWwtbmFt ZSIsIE5VTEwpOworCWlmICghbGNkX25hbWUpIHsKKwkJcHJfZXJyKCJHZXQgbGNkX25hbWUgRmFp bCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJfaW5mbygiJXM6IExjZCBOYW1lID0g JXNcbiIsIF9fZnVuY19fLCBsY2RfbmFtZSk7CisKKwkvKiBnZXQgbGNkIGluaXQgY29kZSAqLwor CXBpbmZvLT5vbl9jbWRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzaV9wYW5lbF9jbWRzKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCEocGluZm8tPm9uX2NtZHMpKQorCQlyZXR1cm4gLUVOT01FTTsK KworCXJldCA9IHBhcnNlX2Rjc19jbWRzKHBhcmFtZXRlcl9ub2RlLCBwaW5mby0+b25fY21kcywg ImRzaS1vbi1jb21tYW5kIik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJHZXQgRHNpIG9u IGNvbW1hbmQgRmFpbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGdldCBsY2Qg b2ZmIGNvZGUgKi8KKwlwaW5mby0+b2ZmX2NtZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHNp X3BhbmVsX2NtZHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIShwaW5mby0+b2ZmX2NtZHMpKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBhcnNlX2Rjc19jbWRzKHBhcmFtZXRlcl9ub2RlLCBw aW5mby0+b2ZmX2NtZHMsCisJCQkiZHNpLW9mZi1jb21tYW5kIik7CisJaWYgKHJldCA8IDApIHsK KwkJcHJfZXJyKCJHZXQgRHNpIG9mZiBjb21tYW5kIEZhaWxcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwkvKiBnZXQgUG9yY2ggICovCisJZGlzcGxheV9tb2RlID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpc3BsYXlf bW9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGluZm8tPnBhbmVsX2Rpc3BsYXlfbW9kZSA9IGRp c3BsYXlfbW9kZTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFtZXRlcl9ub2Rl LCAiZHNpLXBpeGVsLWNsayIsICZ0bXApOworCWRpc3BsYXlfbW9kZS0+Y2xvY2sgPSAoIXJldCA/ IHRtcCA6IDApOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFyYW1ldGVyX25vZGUs CisJCQkiZHNpLXBhbmVsLWh6b3Jpem9udGFsIiwgJnRtcCk7CisJZGlzcGxheV9tb2RlLT5oZGlz cGxheSA9ICghcmV0ID8gdG1wIDogMCk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihw YXJhbWV0ZXJfbm9kZSwgImRzaS1oLWZyb250LXBvcmNoIiwgJnRtcCk7CisJdG1wID0gKCFyZXQg PyB0bXAgOiAwKTsKKwlkaXNwbGF5X21vZGUtPmhzeW5jX3N0YXJ0ID0gZGlzcGxheV9tb2RlLT5o ZGlzcGxheSArIHRtcDsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFtZXRlcl9u b2RlLCAiZHNpLWgtYmFjay1wb3JjaCIsICZ0bXApOworCXRtcCA9ICghcmV0ID8gdG1wIDogMCk7 CisJZGlzcGxheV9tb2RlLT5oc3luY19lbmQgPSBkaXNwbGF5X21vZGUtPmhzeW5jX3N0YXJ0ICsg dG1wOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFyYW1ldGVyX25vZGUsICJkc2kt aC1wdWxzZS13aWR0aCIsICZ0bXApOworCXRtcCA9ICghcmV0ID8gdG1wIDogMCk7CisJZGlzcGxh eV9tb2RlLT5odG90YWwgPSBkaXNwbGF5X21vZGUtPmhzeW5jX2VuZCArIHRtcDsKKworCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFtZXRlcl9ub2RlLCAiZHNpLXBhbmVsLXZlcnRpY2Fs IiwgJnRtcCk7CisJZGlzcGxheV9tb2RlLT52ZGlzcGxheSA9ICghcmV0ID8gdG1wIDogMCk7CisK KwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYXJhbWV0ZXJfbm9kZSwgImRzaS12LWZyb250 LXBvcmNoIiwgJnRtcCk7CisJdG1wID0gKCFyZXQgPyB0bXAgOiAwKTsKKwlkaXNwbGF5X21vZGUt PnZzeW5jX3N0YXJ0ID0gZGlzcGxheV9tb2RlLT52ZGlzcGxheSArIHRtcDsKKworCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFtZXRlcl9ub2RlLCAiZHNpLXYtYmFjay1wb3JjaCIsICZ0 bXApOworCXRtcCA9ICghcmV0ID8gdG1wIDogMCk7CisJZGlzcGxheV9tb2RlLT52c3luY19lbmQg PSBkaXNwbGF5X21vZGUtPnZzeW5jX3N0YXJ0ICsgdG1wOworCisJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIocGFyYW1ldGVyX25vZGUsICJkc2ktdi1wdWxzZS13aWR0aCIsICZ0bXApOworCXRt cCA9ICghcmV0ID8gdG1wIDogMCk7CisJZGlzcGxheV9tb2RlLT52dG90YWwgPSBkaXNwbGF5X21v ZGUtPnZzeW5jX2VuZCArIHRtcDsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFt ZXRlcl9ub2RlLCAiZHNpLXBhbmVsLXJlZnJlc2giLCAmdG1wKTsKKwlkaXNwbGF5X21vZGUtPnZy ZWZyZXNoID0gKCFyZXQgPyB0bXAgOiAwKTsKKworCS8qIGdldCBsYW5zICovCisJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIocGFyYW1ldGVyX25vZGUsICJkc2ktcGFuZWwtbGFuZXMiLCAmdG1w KTsKKwlkc2lfZGV2aWNlLT5sYW5lcyAgPSAoIXJldCA/IHRtcCA6IDApOworCisJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIocGFyYW1ldGVyX25vZGUsICJkc2ktcGFuZWwtZm9ybWF0IiwgJnRt cCk7CisJZHNpX2RldmljZS0+Zm9ybWF0ID0gKCFyZXQgPyB0bXAgOiAwKTsKKworCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKHBhcmFtZXRlcl9ub2RlLAorCQkJImRzaS1wYW5lbC1tb2RlLWZs YWdzIiwgJnRtcCk7CisJZHNpX2RldmljZS0+bW9kZV9mbGFncyA9ICghcmV0ID8gdG1wIDogMCk7 CisKKwkvKiBnZXQgV3hIICovCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFyYW1ldGVy X25vZGUsICJkc2ktcGFuZWwtd2lkdGgtbW0iLCAmdG1wKTsKKwlwaW5mby0+cGFuZWxfd2lkdGhf bW0gID0gKCFyZXQgPyB0bXAgOiAwKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBh cmFtZXRlcl9ub2RlLCAiZHNpLXBhbmVsLWhlaWdodC1tbSIsICZ0bXApOworCXBpbmZvLT5wYW5l bF9oZWlnaHRfbW0gID0gKCFyZXQgPyB0bXAgOiAwKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKHBhcmFtZXRlcl9ub2RlLCAicGVyLWNvbG9yLWNoYW5uZWwiLCAmdG1wKTsKKwlwaW5m by0+cGVyX2NvbG9yX2NoYW5uZWwgPSAoIXJldCA/IHRtcCA6IDApOworCisJLyogcmVzZXQgdGlt ZSAqLworCXJldCA9IGRzaV9wYXJzZV9yZXNldF9zZXEocGFyYW1ldGVyX25vZGUsIHBpbmZvLT5y c3Rfc2VxLAorCQkJCSYocGluZm8tPnJzdF9zZXFfbGVuKSwgImRzaS1yZXNldC1zZXF1ZW5jZSIp OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IHBhbmVsX2luZm8gKnRvX3BhbmVsX2luZm8oc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IHBhbmVsX2lu Zm8sIGJhc2UpOworfQorCitzdGF0aWMgaW50IHBhbmVsX2Rpc2FibGUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBpbmZvID0gdG9fcGFuZWxfaW5mbyhw YW5lbCk7CisKKwlpZiAoIXBpbmZvLT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWJhY2tsaWdo dF9kaXNhYmxlKHBpbmZvLT5iYWNrbGlnaHQpOworCisJcGluZm8tPmVuYWJsZWQgPSBmYWxzZTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhbmVsX3VucHJlcGFyZShzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9p bmZvKHBhbmVsKTsKKwlpbnQgZXJyOworCisJaWYgKCFwaW5mby0+cHJlcGFyZWQpCisJCXJldHVy biAwOworCisJZXJyID0gd3JpdGVfY21kcyhwaW5mby0+bGluaywgcGluZm8tPm9mZl9jbWRzKTsK KwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHBhbmVsLT5kZXYsCisJCQkJImZhaWxlZCB0byBz ZW5kIERDUyBPZmYgQ29kZTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJdXNs ZWVwX3JhbmdlKDEwMDAsIDEwMDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+ cmVzZXRfZ3BpbywgMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5wcDMzMDAw X2dwaW8sIDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAxODAwMF9ncGlv LCAwKTsKKworCXBpbmZvLT5wcmVwYXJlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcGFuZWxfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1 Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKKwlpbnQgZXJyLCBp OworCisJaWYgKHBpbmZvLT5wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwlncGlvZF9zZXRfdmFs dWVfY2Fuc2xlZXAocGluZm8tPnBwMTgwMDBfZ3BpbywgMSk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKHBpbmZvLT5wcDMzMDAwX2dwaW8sIDEpOworCisJLyogcmVzZXQgc2VxdWVuY2UgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgcGluZm8tPnJzdF9zZXFfbGVuOyArK2kpIHsKKwkJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5yZXNldF9ncGlvLCBwaW5mby0+cnN0X3NlcVtpXSk7CisJ CWlmIChwaW5mby0+cnN0X3NlcVsrK2ldKQorCQkJdXNsZWVwX3JhbmdlKHBpbmZvLT5yc3Rfc2Vx W2ldICogMTAwMCwKKwkJCQkJCXBpbmZvLT5yc3Rfc2VxW2ldICogMTAwMCk7CisJfQorCisJLyog c2VuZCBpbml0IGNvZGUgKi8KKwllcnIgPSB3cml0ZV9jbWRzKHBpbmZvLT5saW5rLCBwaW5mby0+ b25fY21kcyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihwYW5lbC0+ZGV2LAorCQkJCSJm YWlsZWQgdG8gc2VuZCBEQ1MgSW5pdCBDb2RlOiAlZFxuIiwgZXJyKTsKKwkJZ290byBwb3dlcm9m ZjsKKwl9CisKKwlwaW5mby0+cHJlcGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7CisKK3Bvd2Vy b2ZmOgorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cmVzZXRfZ3BpbywgMCk7CisJ Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5wcDMzMDAwX2dwaW8sIDApOworCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAxODAwMF9ncGlvLCAwKTsKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgaW50IHBhbmVsX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKKwlp bnQgcmV0OworCisJaWYgKHBpbmZvLT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGJh Y2tsaWdodF9lbmFibGUocGluZm8tPmJhY2tsaWdodCk7CisJaWYgKHJldCkgeworCQlEUk1fREVW X0VSUk9SKHBhbmVsLT5kcm0tPmRldiwKKwkJCSAgICAgICJGYWlsZWQgdG8gZW5hYmxlIGJhY2ts aWdodCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaW5mby0+ZW5hYmxlZCA9 IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYW5lbF9nZXRfbW9kZXMoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBpbmZvID0gdG9f cGFuZWxfaW5mbyhwYW5lbCk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwlp ZiAoIXBpbmZvLT5wYW5lbF9kaXNwbGF5X21vZGUpIHsKKwkJcHJfZXJyKCJHZXQgcGFuZWxfZGlz cGxheV9tb2RlIGZhaWwhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1vZGUgPSBkcm1fbW9k ZV9kdXBsaWNhdGUocGFuZWwtPmRybSwgcGluZm8tPnBhbmVsX2Rpc3BsYXlfbW9kZSk7CisJaWYg KCFtb2RlKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGFkZCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwlkcm1fbW9kZV9wcm9i ZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOworCisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLndpZHRoX21tID0gcGluZm8tPnBhbmVsX3dpZHRoX21tOworCXBhbmVsLT5jb25u ZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBwaW5mby0+cGFuZWxfaGVpZ2h0X21tOwor CXBhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSBwaW5mby0+cGVyX2NvbG9yX2No YW5uZWw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxf ZnVuY3MgcGFuZWxfZnVuY3MgPSB7CisJLmRpc2FibGUgPSBwYW5lbF9kaXNhYmxlLAorCS51bnBy ZXBhcmUgPSBwYW5lbF91bnByZXBhcmUsCisJLnByZXBhcmUgPSBwYW5lbF9wcmVwYXJlLAorCS5l bmFibGUgPSBwYW5lbF9lbmFibGUsCisJLmdldF9tb2RlcyA9IHBhbmVsX2dldF9tb2RlcywKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBhbmVsX29mX21hdGNoW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJib2UsaGltYXg4Mjc5ZCIsIH0sCisJeyB9Cit9OworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgcGFuZWxfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHBhbmVsX2Fk ZChzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBp bmZvLT5saW5rLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgZXJyOworCisJ cGluZm8tPnBwMzMwMDBfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwKKwkJCQkJ CQkicHAzMzAwMCIsCisJCQkJCQkJR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIocGluZm8t PnBwMzMwMDBfZ3BpbykpIHsKKwkJZXJyID0gUFRSX0VSUihwaW5mby0+cHAzMzAwMF9ncGlvKTsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBwMzMwMDAgZ3BpbzogJWRcbiIsIGVycik7 CisJCXBpbmZvLT5wcDMzMDAwX2dwaW8gPSBOVUxMOworCX0KKworCXBpbmZvLT5wcDE4MDAwX2dw aW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsCisJCQkJCQkJInBwMTgwMDAiLAorCQkJ CQkJCUdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKHBpbmZvLT5wcDE4MDAwX2dwaW8pKSB7 CisJCWVyciA9IFBUUl9FUlIocGluZm8tPnBwMTgwMDBfZ3Bpbyk7CisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCBwcDE4MDAwIGdwaW86ICVkXG4iLCBlcnIpOworCQlwaW5mby0+cHAxODAw MF9ncGlvID0gTlVMTDsKKwl9CisKKwlwaW5mby0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0 X29wdGlvbmFsKGRldiwgImVuYWJsZSIsCisJCQkJCQkJR1BJT0RfT1VUX0hJR0gpOworCWlmIChJ U19FUlIocGluZm8tPnJlc2V0X2dwaW8pKSB7CisJCWVyciA9IFBUUl9FUlIocGluZm8tPnJlc2V0 X2dwaW8pOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW86ICVkXG4i LCBlcnIpOworCQlwaW5mby0+cmVzZXRfZ3BpbyA9IE5VTEw7CisJfQorCisJbnAgPSBvZl9wYXJz ZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgImJhY2tsaWdodCIsIDApOworCWlmIChucCkgeworCQlw aW5mby0+YmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZShucCk7CisJCW9mX25v ZGVfcHV0KG5wKTsKKworCQlpZiAoIXBpbmZvLT5iYWNrbGlnaHQpCisJCQlyZXR1cm4gLUVQUk9C RV9ERUZFUjsKKwl9CisKKwlkcm1fcGFuZWxfaW5pdCgmcGluZm8tPmJhc2UpOworCXBpbmZvLT5i YXNlLmZ1bmNzID0gJnBhbmVsX2Z1bmNzOworCXBpbmZvLT5iYXNlLmRldiA9ICZwaW5mby0+bGlu ay0+ZGV2OworCisJZXJyID0gZHJtX3BhbmVsX2FkZCgmcGluZm8tPmJhc2UpOworCWlmIChlcnIg PCAwKQorCQlnb3RvIHB1dF9iYWNrbGlnaHQ7CisKKwlyZXR1cm4gMDsKKworcHV0X2JhY2tsaWdo dDoKKwlwdXRfZGV2aWNlKCZwaW5mby0+YmFja2xpZ2h0LT5kZXYpOworCisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIHZvaWQgcGFuZWxfZGVsKHN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbykKK3sK KwlpZiAocGluZm8tPmJhc2UuZGV2KQorCQlkcm1fcGFuZWxfcmVtb3ZlKCZwaW5mby0+YmFzZSk7 CisKKwlwdXRfZGV2aWNlKCZwaW5mby0+YmFja2xpZ2h0LT5kZXYpOworfQorCitzdGF0aWMgaW50 IHBhbmVsX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgcGFu ZWxfaW5mbyAqcGluZm87CisJaW50IGVycjsKKworCXBpbmZvID0gZGV2bV9remFsbG9jKCZkc2kt PmRldiwgc2l6ZW9mKCpwaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcGluZm8pCisJCXJldHVy biAtRU5PTUVNOworCisJcGluZm8tPmxpbmsgPSBkc2k7CisJcGFuZWxfcGFyc2VfZHQocGluZm8p OworCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgcGluZm8pOworCisJZXJyID0gcGFuZWxfYWRk KHBpbmZvKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBtaXBpX2Rz aV9hdHRhY2goZHNpKTsKK30KKworc3RhdGljIGludCBwYW5lbF9yZW1vdmUoc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbyA9IG1pcGlfZHNp X2dldF9kcnZkYXRhKGRzaSk7CisJaW50IGVycjsKKworCWVyciA9IHBhbmVsX3VucHJlcGFyZSgm cGluZm8tPmJhc2UpOworCWlmIChlcnIgPCAwKQorCQlEUk1fREVWX0VSUk9SKCZkc2ktPmRldiwg ImZhaWxlZCB0byB1bnByZXBhcmUgcGFuZWw6ICVkXG4iLAorCQkJICAgICAgZXJyKTsKKworCWVy ciA9IHBhbmVsX2Rpc2FibGUoJnBpbmZvLT5iYXNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RF Vl9FUlJPUigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBwYW5lbDogJWRcbiIsIGVycik7 CisKKwllcnIgPSBtaXBpX2RzaV9kZXRhY2goZHNpKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RF Vl9FUlJPUigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVkXG4i LAorCQkJICAgICAgZXJyKTsKKworCWRybV9wYW5lbF9kZXRhY2goJnBpbmZvLT5iYXNlKTsKKwlw YW5lbF9kZWwocGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhbmVsX3No dXRkb3duKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5m byAqcGluZm8gPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJcGFuZWxfdW5wcmVwYXJl KCZwaW5mby0+YmFzZSk7CisJcGFuZWxfZGlzYWJsZSgmcGluZm8tPmJhc2UpOworfQorCitzdGF0 aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBwYW5lbF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsK KwkJLm5hbWUgPSAicGFuZWwtaW5ub2x1eC1vdGE3MjkwYiIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IHBhbmVsX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gcGFuZWxfcHJvYmUsCisJLnJlbW92ZSA9 IHBhbmVsX3JlbW92ZSwKKwkuc2h1dGRvd24gPSBwYW5lbF9zaHV0ZG93biwKK307Cittb2R1bGVf bWlwaV9kc2lfZHJpdmVyKHBhbmVsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkplcnJ5IEhh biA8aGFueHU1QGh1YXFpbi5jb3JwLXBhcnRuZXIuZ29vZ2xlLmNvbT4iKTsKK01PRFVMRV9ERVND UklQVElPTigiQm9lIEhpbWF4ODI3OWQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs