From owner-freebsd-arm@FreeBSD.ORG Mon Apr 27 13:52:25 2015 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 6289D6F3 for ; Mon, 27 Apr 2015 13:52:25 +0000 (UTC) Received: from phabric-backend.isc.freebsd.org (phabric-backend.isc.freebsd.org [IPv6:2001:4f8:3:ffe0:406a:0:50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 35C00178A for ; Mon, 27 Apr 2015 13:52:25 +0000 (UTC) Received: from phabric-backend.isc.freebsd.org (phabric-backend.isc.freebsd.org [127.0.1.5]) by phabric-backend.isc.freebsd.org (8.14.9/8.14.9) with ESMTP id t3RDqPNn039930 for ; Mon, 27 Apr 2015 13:52:25 GMT (envelope-from daemon-user@phabric-backend.isc.freebsd.org) Received: (from daemon-user@localhost) by phabric-backend.isc.freebsd.org (8.14.9/8.14.9/Submit) id t3RDqPaf039929; Mon, 27 Apr 2015 13:52:25 GMT (envelope-from daemon-user) Date: Mon, 27 Apr 2015 13:52:25 +0000 To: freebsd-arm@freebsd.org From: "zbb (Zbigniew Bodek)" Subject: [Differential] [Request, 2, 082 lines] D2378: Introduce ITS support for ARM64 Message-ID: X-Priority: 3 Thread-Topic: D2378: Introduce ITS support for ARM64 X-Herald-Rules: <28>, <31>, <32>, <34>, <8> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: X-Phabricator-Cc: X-Phabricator-Cc: Thread-Index: ZTc3NjU2YTNlNjQxNDIwYzYxMmJlZjFmYzJm Precedence: bulk X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_3d0dd6449082dcf13167e54f7d0d6994" X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.20 List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Apr 2015 13:52:25 -0000 --b1_3d0dd6449082dcf13167e54f7d0d6994 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb created this revision. zbb added reviewers: emaste, imp, ian, andrew. zbb added a subscriber: freebsd-arm. zbb set the repository for this revision to rS FreeBSD src repository. Herald added subscribers: imp, andrew, emaste. Herald added a reviewer: manpages. REVISION SUMMARY Add ARM ITS (Interrupt Translation Services) support required to bring-up message signaled interrupts on some ARM64 platforms. Obtained from: Semihalf Sponsored by: The FreeBSD Foundation REPOSITORY rS FreeBSD src repository REVISION DETAIL https://reviews.freebsd.org/D2378 AFFECTED FILES sys/arm64/arm64/gic_v3.c sys/arm64/arm64/gic_v3_fdt.c sys/arm64/arm64/gic_v3_its.c sys/arm64/arm64/gic_v3_reg.h sys/arm64/arm64/gic_v3_var.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: zbb, emaste, imp, ian, andrew, brueffer, joel, wblock Cc: emaste, andrew, imp, freebsd-arm --b1_3d0dd6449082dcf13167e54f7d0d6994 Content-Type: text/x-patch; charset=utf-8; name="D2378.5025.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2378.5025.patch" ZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmggYi9zeXMvYXJtNjQvYXJt NjQvZ2ljX3YzX3Zhci5oCi0tLSBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmgKKysrIGIv c3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaApAQCAtMzIsNiArMzIsMTcgQEAKIAogI2RlZmlu ZQlHSUNfVjNfREVWU1RSCSJBUk0gR2VuZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciB2My4wIgog CisjZGVmaW5lCUxQSV9GTEFHU19DT05GX0ZMVVNICSgxVUwgPDwgMCkKKyNkZWZpbmUJTFBJX0NP TkZUQUJfU0laRQlQQUdFX1NJWkVfNjRLCisvKiAxIGJpdCBwZXIgTFBJICsgMSBLQiBtb3JlIGZv ciB0aGUgb2JsaWdhdG9yeSBQUEksIFNHSSwgU1BJIHN0dWZmICovCisjZGVmaW5lCUxQSV9QRU5E VEFCX1NJWkUJKChMUElfQ09ORlRBQl9TSVpFIC8gOCkgKyAweDQwMCkKKworc3RydWN0IHJlZGlz dF9scGlzIHsKKwl2bV9vZmZzZXRfdAkJY29uZl9iYXNlOworCXZtX29mZnNldF90CQlwZW5kX2Jh c2VbTUFYQ1BVXTsKKwl1aW50NjRfdAkJZmxhZ3M7Cit9OworCiBzdHJ1Y3QgZ2ljX3JlZGlzdHMg ewogCS8qCiAJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9uIGRlc2NyaXB0aW9uLgpAQCAtNDMsNiAr NTQsOCBAQAogCXVfaW50CQkJbnJlZ2lvbnM7CiAJLyogUGVyLUNQVSBSZS1EaXN0cmlidXRvciBo YW5kbGVyICovCiAJc3RydWN0IHJlc291cmNlCSoJcGNwdVtNQVhDUFVdOworCS8qIExQSXMgZGF0 YSAqLworCXN0cnVjdCByZWRpc3RfbHBpcwlscGlzOwogfTsKIAogc3RydWN0IGdpY192M19zb2Z0 YyB7CkBAIC03Miw2ICs4NSwxNjYgQEAKIHZvaWQgZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3Qs IHVfaW50KTsKIAogLyoKKyAqIElUUworICovCisjZGVmaW5lCUdJQ19WM19JVFNfREVWU1RSCSJB Uk0gR0lDIEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2aWNlIgorI2RlZmluZQlHSUNfVjNfSVRT X0NPTVBTVFIJImFybSxnaWMtdjMtaXRzIgorCisvKiBMUEkgY2h1bmsgb3duZWQgYnkgSVRTIGRl dmljZSAqLworc3RydWN0IGxwaV9jaHVuayB7CisJdV9pbnQJbHBpX2Jhc2U7CisJdV9pbnQJbHBp X251bTsKKwl1X2ludAlscGlfZnJlZTsJLyogRmlyc3QgZnJlZSBMUEkgaW4gc2V0ICovCit9Owor CisvKiBJVFMgZGV2aWNlICovCitzdHJ1Y3QgaXRzX2RldiB7CisJVEFJTFFfRU5UUlkoaXRzX2Rl dikJZW50cnk7CisJLyogUENJIGRldmljZSAqLworCWRldmljZV90CQlwY2lfZGV2OworCS8qIERl dmljZSBJRCAoaS5lLiBQQ0kgZGV2aWNlIElEKSAqLworCXVpbnQzMl90CQlkZXZpZDsKKwkvKiBM aXN0IG9mIGFzc2lnbmVkIExQSXMgKi8KKwlzdHJ1Y3QgbHBpX2NodW5rCWxwaXM7CisJLyogVmly dHVhbCBhZGRyZXNzIG9mIElUVCAqLworCXZtX29mZnNldF90CQlpdHQ7CisJLyogSW50ZXJydXB0 IGNvbGxlY3Rpb24gKi8KKwlzdHJ1Y3QgaXRzX2NvbCAqCWNvbDsKK307CitUQUlMUV9IRUFEKGl0 c19kZXZfbGlzdCwgaXRzX2Rldik7CisKKy8qIElUUyBwcml2YXRlIHRhYmxlIGRlc2NyaXB0aW9u ICovCitzdHJ1Y3QgaXRzX3B0YWIgeworCXZtX29mZnNldF90CXB0YWJfdmFkZHI7CS8qIFZpcnR1 YWwgQWRkcmVzcyBvZiB0YWJsZSAqLworCXNpemVfdAkJcHRhYl9wZ3N6OwkvKiBQYWdlIHNpemUg Ki8KKwlzaXplX3QJCXB0YWJfbnBhZ2VzOwkvKiBOdW1iZXIgb2YgcGFnZXMgKi8KK307CisKKy8q IElUUyBjb2xsZWN0aW9uIGRlc2NyaXB0aW9uLiAqLworc3RydWN0IGl0c19jb2wgeworCXVpbnQ2 NF90CWNvbF90YXJnZXQ7CS8qIFRhcmdldCBSZS1EaXN0cmlidXRvciAqLworCXVpbnQ2NF90CWNv bF9pZDsJCS8qIENvbGxlY3Rpb24gSUQgKi8KK307CisKKy8qIElUUyBjb21tYW5kLiBFYWNoIGNv bW1hbmQgaXMgMzIgYnl0ZXMgbG9uZyAqLworc3RydWN0IGl0c19jbWQgeworCXVpbnQ2NF90CWNt ZF9kd29yZFs0XTsJLyogSVRTIGNvbW1hbmQgZG91YmxlIHdvcmQgKi8KK307CisKKy8qIElUUyBj b21tYW5kcyBlbmNvZGluZyAqLworI2RlZmluZQlJVFNfQ01EX1NZTkMJCSgweDA1KQorI2RlZmlu ZQlJVFNfQ01EX01BUEQJCSgweDA4KQorI2RlZmluZQlJVFNfQ01EX01BUEMJCSgweDA5KQorI2Rl ZmluZQlJVFNfQ01EX01BUFZJCQkoMHgwYSkKKyNkZWZpbmUJSVRTX0NNRF9NQVBJCQkoMHgwYikK KyNkZWZpbmUJSVRTX0NNRF9JTlYJCSgweDBjKQorI2RlZmluZQlJVFNfQ01EX0lOVkFMTAkJKDB4 MGQpCisvKiBDb21tYW5kICovCisjZGVmaW5lCUNNRF9DT01NQU5EX01BU0sJKDB4RkZVTCkKKy8q IFBDSSBkZXZpY2UgSUQgKi8KKyNkZWZpbmUJQ01EX0RFVklEX1NISUZUCQkoMzIpCisjZGVmaW5l CUNNRF9ERVZJRF9NQVNLCQkoMHhGRkZGRkZGRlVMIDw8IENNRF9ERVZJRF9TSElGVCkKKy8qIFNp emUgb2YgSVJRIElEIGJpdGZpZWxkICovCisjZGVmaW5lCUNNRF9TSVpFX01BU0sJCSgweEZGVUwp CisvKiBWaXJ0dWFsIExQSSBJRCAqLworI2RlZmluZQlDTURfSURfTUFTSwkJKDB4RkZGRkZGRkZV TCkKKy8qIFBoeXNpY2FsIExQSSBJRCAqLworI2RlZmluZQlDTURfUElEX1NISUZUCQkoMzIpCisj ZGVmaW5lCUNNRF9QSURfTUFTSwkJKDB4RkZGRkZGRkZVTCA8PCBDTURfUElEX1NISUZUKQorLyog Q29sbGVjdGlvbiAqLworI2RlZmluZQlDTURfQ09MX01BU0sJCSgweEZGRkZVTCkKKy8qIFRhcmdl dCAoQ1BVIG9yIFJlLURpc3RyaWJ1dG9yKSAqLworI2RlZmluZQlDTURfVEFSR0VUX1NISUZUCSgx NikKKyNkZWZpbmUJQ01EX1RBUkdFVF9NQVNLCQkoMHhGRkZGRkZGRlVMIDw8IENNRF9UQVJHRVRf U0hJRlQpCisvKiBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gVGFibGUgYWRkcmVzcyAqLworI2RlZmlu ZQlDTURfSVRUX01BU0sJCSgweEZGRkZGRkZGRkYwMFVMKQorLyogVmFsaWQgY29tbWFuZCBiaXQg Ki8KKyNkZWZpbmUJQ01EX1ZBTElEX1NISUZUCQkoNjMpCisjZGVmaW5lCUNNRF9WQUxJRF9NQVNL CQkoMVVMIDw8IENNRF9WQUxJRF9TSElGVCkKKworLyoKKyAqIElUUyBjb21tYW5kIGRlc2NyaXB0 b3IuCisgKiBJZGVhIGZvciBjb21tYW5kIGRlc2NyaXB0aW9uIHBhc3NpbmcgdGFrZW4gZnJvbSBM aW51eC4KKyAqLworc3RydWN0IGl0c19jbWRfZGVzYyB7CisJdWludDhfdCBjbWRfdHlwZTsKKwor CXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpdHNfY29sICpjb2w7CisJCX0gY21kX2Rl c2Nfc3luYzsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19jb2wgKmNvbDsKKwkJCXVpbnQ4 X3QgdmFsaWQ7CisJCX0gY21kX2Rlc2NfbWFwYzsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0 c19kZXYgKml0c19kZXY7CisJCQl1aW50MzJfdCBwaWQ7CisJCQl1aW50MzJfdCBpZDsKKwkJfSBj bWRfZGVzY19tYXB2aTsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19kZXYgKml0c19kZXY7 CisJCQl1aW50MzJfdCBscGludW07CisJCX0gY21kX2Rlc2NfbWFwaTsKKworCQlzdHJ1Y3Qgewor CQkJc3RydWN0IGl0c19kZXYgKml0c19kZXY7CisJCQl1aW50OF90IHZhbGlkOworCQl9IGNtZF9k ZXNjX21hcGQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCQkJ dWludDMyX3QgbHBpbnVtOworCQl9IGNtZF9kZXNjX2ludjsKKworCQlzdHJ1Y3QgeworCQkJc3Ry dWN0IGl0c19jb2wgKmNvbDsKKwkJfSBjbWRfZGVzY19pbnZhbGw7CisJfTsKK307CisKKyNkZWZp bmUJSVRTX0NNRFFfU0laRQkJUEFHRV9TSVpFXzY0SworI2RlZmluZQlJVFNfQ01EUV9ORU5UUklF UwkoSVRTX0NNRFFfU0laRSAvIHNpemVvZihzdHJ1Y3QgaXRzX2NtZCkpCisKKyNkZWZpbmUJSVRT X0ZMQUdTX0NNRFFfRkxVU0gJKDFVTCA8PCAwKQorCisjZGVmaW5lCUlUU19UQVJHRVRfTk9ORQkJ MHhGQkFEQkVFRgorCitzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyB7CisJZGV2aWNlX3QJCWRldjsK KwlzdHJ1Y3QgcmVzb3VyY2UJKglpdHNfcmVzOworCisJc3RydWN0IGl0c19jbWQgKglpdHNfY21k cV9iYXNlOwkvKiBJVFMgY29tbWFuZCBxdWV1ZSBiYXNlICovCisJc3RydWN0IGl0c19jbWQgKglp dHNfY21kcV93cml0ZTsJLyogSVRTIGNvbW1hbmQgcXVldWUgd3JpdGUgcHRyICovCisJc3RydWN0 IGl0c19wdGFiCQlpdHNfcHRhYnNbR0lUU19CQVNFUl9OVU1dOy8qIElUUyBwcml2YXRlIHRhYmxl cyAqLworCXN0cnVjdCBpdHNfY29sICoJaXRzX2NvbHM7CS8qIFBlci1DUFUgY29sbGVjdGlvbnMg Ki8KKworCXVpbnQ2NF90CQlpdHNfZmxhZ3M7CisKKwlzdHJ1Y3QgaXRzX2Rldl9saXN0CWl0c19k ZXZfbGlzdDsKKworCXVuc2lnbmVkIGxvbmcgKgkJaXRzX2xwaV9iaXRtYXA7CisJdWludDMyX3QJ CWl0c19scGlfbWF4aWQ7CisKKwlzdHJ1Y3QgbXR4CQlpdHNfbXR4OworCXN0cnVjdCBtdHgJCWl0 c19zcGluX210eDsKK307CisKK2V4dGVybiBkZXZjbGFzc190IGdpY192M19pdHNfZGV2Y2xhc3M7 CisKK2ludCBnaWNfdjNfaXRzX2F0dGFjaChkZXZpY2VfdCk7CitpbnQgZ2ljX3YzX2l0c19kZXRh Y2goZGV2aWNlX3QpOworCitpbnQgZ2ljX3YzX2l0c19hbGxvY19tc2l4KGRldmljZV90LCBkZXZp Y2VfdCwgaW50ICopOworaW50IGdpY192M19pdHNfYWxsb2NfbXNpKGRldmljZV90LCBkZXZpY2Vf dCwgaW50LCBpbnQgKik7CitpbnQgZ2ljX3YzX2l0c19tYXBfbXNpeChkZXZpY2VfdCwgZGV2aWNl X3QsIGludCwgdWludDY0X3QgKiwgdWludDMyX3QgKik7CisKK3ZvaWQgbHBpX3VubWFza19pcnEo ZGV2aWNlX3QsIHVpbnQzMl90KTsKK3ZvaWQgbHBpX21hc2tfaXJxKGRldmljZV90LCB1aW50MzJf dCk7CisvKgogICogR0lDIERpc3RyaWJ1dG9yIGFjY2Vzc29ycy4KICAqIE5vdGljZSB0aGF0IG9u bHkgR0lDIHNvZmMgY2FuIGJlIHBhc3NlZC4KICAqLwpAQCAtMTA0LDQgKzI3NywyOCBAQAogCSAg ICByZWcsIHZhbCk7CQkJCVwKIH0pCiAKKyNkZWZpbmUJUENJX0RFVklEKHBjaV9kZXYpCQkJCVwK Kyh7CQkJCQkJCVwKKwkoKChwY2lfZ2V0X2RvbWFpbihwY2lfZGV2KSA+PiAyKSA8PCAxOSkgfAlc CisJICgocGNpX2dldF9kb21haW4ocGNpX2RldikgJSA0KSA8PCAxNikgfAlcCisJIChwY2lfZ2V0 X2J1cyhwY2lfZGV2KSA8PCA4KSB8CQkJXAorCSAocGNpX2dldF9zbG90KHBjaV9kZXYpIDw8IDMp IHwJCQlcCisJIChwY2lfZ2V0X2Z1bmN0aW9uKHBjaV9kZXYpIDw8IDApKTsJCVwKK30pCisKKy8q CisgKiBSZXF1ZXN0IG51bWJlciBvZiBtYXhpbXVtIE1TSS1YIHZlY3RvcnMgZm9yIHRoaXMgZGV2 aWNlLgorICogRGV2aWNlIGNhbiBhc2sgZm9yIGxlc3MgdmVjdG9ycyB0aGFuIG1heGltdW0gc3Vw cG9ydGVkIGJ1dCBub3QgbW9yZS4KKyAqLworI2RlZmluZQlQQ0lfTVNJWF9OVU0ocGNpX2RldikJ CQlcCisoewkJCQkJCVwKKwlzdHJ1Y3QgcGNpX2RldmluZm8gKmRpbmZvOwkJXAorCXBjaWNmZ3Jl Z3MgKmNmZzsJCQlcCisJCQkJCQlcCisJZGluZm8gPSBkZXZpY2VfZ2V0X2l2YXJzKHBjaV9kZXYp OwlcCisJY2ZnID0gJmRpbmZvLT5jZmc7CQkJXAorCQkJCQkJXAorCWNmZy0+bXNpeC5tc2l4X21z Z251bTsJCQlcCit9KQorCiAjZW5kaWYgLyogX0dJQ19WM19WQVJfSF8gKi8KZGlmZiAtLWdpdCBh L3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmggYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Jl Zy5oCi0tLSBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKKysrIGIvc3lzL2FybTY0L2Fy bTY0L2dpY192M19yZWcuaApAQCAtODYsMjAgKzg2LDI0OCBAQAogI2RlZmluZQlHSUNSX1BJRFIy X0FSQ0hfR0lDdjQJKDB4NDApCiAKIC8qIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisjZGVm aW5lCUdJQ1JfQ1RMUgkJR0lDRF9DVExSCisjZGVmaW5lCQlHSUNSX0NUTFJfTFBJX0VOQUJMRQko MSA8PCAwKQorCiAjZGVmaW5lCUdJQ1JfUElEUjIJCUdJQ0RfUElEUjIKIAogI2RlZmluZQlHSUNS X1RZUEVSCQkoMHgwMDA4KQorI2RlZmluZQlHSUNSX1RZUEVSX1BMUElTCSgxIDw8IDApCiAjZGVm aW5lCUdJQ1JfVFlQRVJfVkxQSVMJKDEgPDwgMSkKICNkZWZpbmUJR0lDUl9UWVBFUl9MQVNUCQko MSA8PCA0KQorI2RlZmluZQlHSUNSX1RZUEVSX0NQVU5VTV9TSElGVAk4CisjZGVmaW5lCUdJQ1Jf VFlQRVJfQ1BVTlVNX01BU0sJKDB4RkZGVUwgPDwgR0lDUl9UWVBFUl9DUFVOVU1fU0hJRlQpCisj ZGVmaW5lCUdJQ1JfVFlQRVJfQ1BVTlVNKHgpCVwKKwkgICAgKCgoeCkgJiBHSUNSX1RZUEVSX0NQ VU5VTV9NQVNLKSA+PiBHSUNSX1RZUEVSX0NQVU5VTV9TSElGVCkKIAogI2RlZmluZQlHSUNSX1dB S0VSCQkoMHgwMDE0KQogI2RlZmluZQlHSUNSX1dBS0VSX1BTCQkoMSA8PCAxKSAvKiBQcm9jZXNz b3Igc2xlZXAgKi8KICNkZWZpbmUJR0lDUl9XQUtFUl9DQQkJKDEgPDwgMikgLyogQ2hpbGRyZW4g YXNsZWVwICovCiAKKyNkZWZpbmUJR0lDUl9QUk9QQkFTRVIJCSgweDAwNzApCisjZGVmaW5lCQlH SUNSX1BST1BCQVNFUl9JREJJVFNfTUFTSwkweDFGVUwKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAq IDB4MCAtIERldmljZS1uR25SbkUKKyAqIDB4MSAtIE5vcm1hbCBJbm5lciBOb24tY2FjaGVhYmxl CisgKiAweDIgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICog MHgzIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NCAtIE5v cm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHg1IC0gTm9ybWFs IElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDYgLSBOb3JtYWwgSW5uZXIg UmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NyAtIE5v cm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICov CisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9TSElGVAk3CisjZGVmaW5lCQlHSUNSX1BS T1BCQVNFUl9DQUNIRV9EbkduUm5FCTB4MFVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNI RV9OSU4JMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXVAkweDJVTAor I2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVfTklSQVdCCTB4M1VMCisjZGVmaW5lCQlHSUNS X1BST1BCQVNFUl9DQUNIRV9OSVdBV1QJMHg0VUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NB Q0hFX05JV0FXQgkweDVVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVfTklSQVdBV1QJ MHg2VUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQVdCCTB4N1VMCisKKy8q CisgKiBTaGFyZWFiaWxpdHkKKyAqIDB4MCAtIE5vbi1zaGFyZWFibGUKKyAqIDB4MSAtIElubmVy LXNoYXJlYWJsZQorICogMHgyIC0gT3V0ZXItc2hhcmVhYmxlCisgKiAweDMgLSBSZXNlcnZlZC4g VGhyZWF0ZWQgYXMgMHgwCisgKi8KKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NIQVJFX1NISUZU CTEwCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9OUwkJMHgwVUwKKyNkZWZpbmUJCUdJ Q1JfUFJPUEJBU0VSX1NIQVJFX0lTCQkweDFVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfU0hB UkVfT1MJCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9SRVMJMHgzVUwKKyNk ZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NIQVJFX01BU0sJXAorCQkgICAgKDB4M1VMIDw8IEdJQ1Jf UFJPUEJBU0VSX1NIQVJFX1NISUZUKQorCisjZGVmaW5lCUdJQ1JfUEVOREJBU0VSCQkoMHgwMDc4 KQorLyoKKyAqIENhY2hlYWJpbGl0eQorICogMHgwIC0gRGV2aWNlLW5HblJuRQorICogMHgxIC0g Tm9ybWFsIElubmVyIE5vbi1jYWNoZWFibGUKKyAqIDB4MiAtIE5vcm1hbCBJbm5lciBSZWFkLWFs bG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDMgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0 ZSwgV3JpdGUtYmFjaworICogMHg0IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0 ZS10aHJvdWdoCisgKiAweDUgLSBOb3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJh Y2sKKyAqIDB4NiAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwg V3JpdGUtdGhyb3VnaAorICogMHg3IC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRl LWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKi8KKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hF X1NISUZUCTcKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX0RuR25SbkUJMHgwVUwKKyNk ZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JTgkweDFVTAorI2RlZmluZQkJR0lDUl9QRU5E QkFTRVJfQ0FDSEVfTklSQVdUCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9O SVJBV0IJMHgzVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JV0FXVAkweDRVTAor I2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfQ0FDSEVfTklXQVdCCTB4NVVMCisjZGVmaW5lCQlHSUNS X1BFTkRCQVNFUl9DQUNIRV9OSVJBV0FXVAkweDZVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJf Q0FDSEVfTklSQVdBV0IJMHg3VUwKKworLyoKKyAqIFNoYXJlYWJpbGl0eQorICogMHgwIC0gTm9u LXNoYXJlYWJsZQorICogMHgxIC0gSW5uZXItc2hhcmVhYmxlCisgKiAweDIgLSBPdXRlci1zaGFy ZWFibGUKKyAqIDB4MyAtIFJlc2VydmVkLiBUaHJlYXRlZCBhcyAweDAKKyAqLworI2RlZmluZQkJ R0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQJMTAKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX1NI QVJFX05TCQkweDBVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfSVMJCTB4MVVMCisj ZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9TSEFSRV9PUwkJMHgyVUwKKyNkZWZpbmUJCUdJQ1JfUEVO REJBU0VSX1NIQVJFX1JFUwkweDNVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfTUFT SwlcCisJCSAgICAoMHgzVUwgPDwgR0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQpCisKIC8qIFJl LWRpc3RyaWJ1dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLwogI2RlZmluZQlHSUNS X0lTRU5BQkxFUjAJCSgweDAxMDApCiAjZGVmaW5lCUdJQ1JfSUNFTkFCTEVSMAkJKDB4MDE4MCkK IAorLyogSVRTIHJlZ2lzdGVycyAqLworI2RlZmluZQlHSVRTX1BJRFIyCQlHSUNSX1BJRFIyCisj ZGVmaW5lCUdJVFNfUElEUjJfQVJDSF9NQVNLCUdJQ1JfUElEUjJfQVJDSF9NQVNLCisjZGVmaW5l CUdJVFNfUElEUjJfQVJDSF9HSUN2MwlHSUNSX1BJRFIyX0FSQ0hfR0lDdjMKKyNkZWZpbmUJR0lU U19QSURSMl9BUkNIX0dJQ3Y0CUdJQ1JfUElEUjJfQVJDSF9HSUN2NAorCisjZGVmaW5lCUdJVFNf Q1RMUgkJKDB4MDAwMCkKKyNkZWZpbmUJCUdJVFNfQ1RMUl9FTgkoMSA8PCAwKQorCisjZGVmaW5l CUdJVFNfQ0JBU0VSCQkoMHgwMDgwKQorI2RlZmluZQkJR0lUU19DQkFTRVJfVkFMSUQJKDFVTCA8 PCA2MykKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAqIDB4MCAtIERldmljZS1uR25SbkUKKyAqIDB4 MSAtIE5vcm1hbCBJbm5lciBOb24tY2FjaGVhYmxlCisgKiAweDIgLSBOb3JtYWwgSW5uZXIgUmVh ZC1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHgzIC0gTm9ybWFsIElubmVyIFJlYWQtYWxs b2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NCAtIE5vcm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwg V3JpdGUtdGhyb3VnaAorICogMHg1IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0 ZS1iYWNrCisgKiAweDYgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2Nh dGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBX cml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICovCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNI RV9TSElGVAkJNTkKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX0RuR25SbkUJMHgwVUwKKyNk ZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX05JTgkJMHgxVUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VS X0NBQ0hFX05JUkFXVAkweDJVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklSQVdCCTB4 M1VMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVdBV1QJMHg0VUwKKyNkZWZpbmUJCUdJ VFNfQ0JBU0VSX0NBQ0hFX05JV0FXQgkweDVVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVf TklSQVdBV1QJMHg2VUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX05JUkFXQVdCCTB4N1VM CisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9NQVNLCSgweDdVTCA8PCBHSVRTX0NCQVNFUl9U WVBFX1NISUZUKQorLyoKKyAqIFNoYXJlYWJpbGl0eQorICogMHgwIC0gTm9uLXNoYXJlYWJsZQor ICogMHgxIC0gSW5uZXItc2hhcmVhYmxlCisgKiAweDIgLSBPdXRlci1zaGFyZWFibGUKKyAqIDB4 MyAtIFJlc2VydmVkLiBUaHJlYXRlZCBhcyAweDAKKyAqLworI2RlZmluZQkJR0lUU19DQkFTRVJf U0hBUkVfU0hJRlQJCTEwCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9OUwkJMHgwVUwKKyNk ZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX0lTCQkweDFVTAorI2RlZmluZQkJR0lUU19DQkFTRVJf U0hBUkVfT1MJCTB4MlVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9SRVMJCTB4M1VMCisj ZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9NQVNLCQlcCisJCSAgICAoMHgzVUwgPDwgR0lUU19D QkFTRVJfU0hBUkVfU0hJRlQpCisKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX1BBX1NISUZUCTEyCisj ZGVmaW5lCQlHSVRTX0NCQVNFUl9QQV9NQVNLCSgweEZGRkZGRkZGRlVMIDw8IEdJVFNfQ0JBU0VS X1BBX1NISUZUKQorCisjZGVmaW5lCUdJVFNfQ1dSSVRFUgkJKDB4MDA4OCkKKyNkZWZpbmUJR0lU U19DUkVBRFIJCSgweDAwOTApCisKKyNkZWZpbmUJR0lUU19CQVNFUl9CQVNFCQkoMHgwMTAwKQor I2RlZmluZQlHSVRTX0JBU0VSKHgpCQkoR0lUU19CQVNFUl9CQVNFICsgKHgpICogOCkKKworI2Rl ZmluZQkJR0lUU19CQVNFUl9WQUxJRAkoMVVMIDw8IDYzKQorCisjZGVmaW5lCQlHSVRTX0JBU0VS X1RZUEVfU0hJRlQJNTYKKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQRSh4KQlcCisJCSAgICAoKCh4 KSAmIEdJVFNfQkFTRVJfVFlQRV9NQVNLKSA+PiBHSVRTX0JBU0VSX1RZUEVfU0hJRlQpCisjZGVm aW5lCQlHSVRTX0JBU0VSX1RZUEVfVU5JTVBMCTB4MFVMCS8qIFVuaW1wbGVtZW50ZWQgKi8KKyNk ZWZpbmUJCUdJVFNfQkFTRVJfVFlQRV9ERVYJMHgxVUwJLyogRGV2aWNlcyAqLworI2RlZmluZQkJ R0lUU19CQVNFUl9UWVBFX1ZQCTB4MlVMCS8qIFZpcnR1YWwgUHJvY2Vzc29ycyAqLworI2RlZmlu ZQkJR0lUU19CQVNFUl9UWVBFX1BQCTB4M1VMCS8qIFBoeXNpY2FsIFByb2Nlc3NvcnMgKi8KKyNk ZWZpbmUJCUdJVFNfQkFTRVJfVFlQRV9JQwkweDRVTAkvKiBJbnRlcnJ1cHQgQ29sbGVjdGlvbnMg Ki8KKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQRV9SRVM1CTB4NVVMCS8qIFJlc2VydmVkICovCisj ZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVfUkVTNgkweDZVTAkvKiBSZXNlcnZlZCAqLworI2RlZmlu ZQkJR0lUU19CQVNFUl9UWVBFX1JFUzcJMHg3VUwJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUJCUdJ VFNfQkFTRVJfVFlQRV9NQVNLCSgweDdVTCA8PCBHSVRTX0JBU0VSX1RZUEVfU0hJRlQpCisvKgor ICogQ2FjaGVhYmlsaXR5CisgKiAweDAgLSBOb24tY2FjaGVhYmxlLCBub24tYnVmZmVyYWJsZQor ICogMHgxIC0gTm9uLWNhY2hlYWJsZQorICogMHgyIC0gUmVhZC1hbGxvY2F0ZSwgV3JpdGUtdGhy b3VnaAorICogMHgzIC0gUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICogMHg0IC0gV3JpdGUt YWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NSAtIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1i YWNrCisgKiAweDYgLSBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhyb3Vn aAorICogMHg3IC0gUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAq LworI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9TSElGVAk1OQorI2RlZmluZQkJR0lUU19CQVNF Ul9DQUNIRV9OQ05CCTB4MFVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX05DCTB4MVVMCisj ZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1JBV1QJMHgyVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf Q0FDSEVfUkFXQgkweDNVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9XQVdUCTB4NFVMCisj ZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1dBV0IJMHg1VUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf Q0FDSEVfUkFXQVdUCTB4NlVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1JBV0FXQgkweDdV TAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9NQVNLCSgweDdVTCA8PCBHSVRTX0JBU0VSX0NB Q0hFX1NISUZUKQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX0VTSVpFX1NISUZUCTQ4CisjZGVmaW5l CQlHSVRTX0JBU0VSX0VTSVpFX01BU0sJKDB4MUZVTCA8PCBHSVRTX0JBU0VSX0VTSVpFX1NISUZU KQorI2RlZmluZQkJR0lUU19CQVNFUl9FU0laRSh4KQlcCisJCSAgICAoKCgoeCkgJiBHSVRTX0JB U0VSX0VTSVpFX01BU0spID4+IEdJVFNfQkFTRVJfRVNJWkVfU0hJRlQpICsgMSkKKworI2RlZmlu ZQkJR0lUU19CQVNFUl9QQV9TSElGVAkxMgorI2RlZmluZQkJR0lUU19CQVNFUl9QQV9NQVNLCSgw eEZGRkZGRkZGRlVMIDw8IEdJVFNfQkFTRVJfUEFfU0hJRlQpCisKKy8qCisgKiBTaGFyZWFiaWxp dHkKKyAqIDB4MCAtIE5vbi1zaGFyZWFibGUKKyAqIDB4MSAtIElubmVyLXNoYXJlYWJsZQorICog MHgyIC0gT3V0ZXItc2hhcmVhYmxlCisgKiAweDMgLSBSZXNlcnZlZC4gVGhyZWF0ZWQgYXMgMHgw CisgKi8KKyNkZWZpbmUJCUdJVFNfQkFTRVJfU0hBUkVfU0hJRlQJMTAKKyNkZWZpbmUJCUdJVFNf QkFTRVJfU0hBUkVfTlMJMHgwVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJfU0hBUkVfSVMJMHgxVUwK KyNkZWZpbmUJCUdJVFNfQkFTRVJfU0hBUkVfT1MJMHgyVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf U0hBUkVfUkVTCTB4M1VMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1NIQVJFX01BU0sJKDB4M1VMIDw8 IEdJVFNfQkFTRVJfU0hBUkVfU0hJRlQpCisKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUFNaX1NISUZU CTgKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUFNaXzRLCTB4MFVMCisjZGVmaW5lCQlHSVRTX0JBU0VS X1BTWl8xNksJMHgxVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUFNaXzY0SwkweDJVTAorI2RlZmlu ZQkJR0lUU19CQVNFUl9QU1pfTUFTSwkoMHgzVUwgPDwgR0lUU19CQVNFUl9QU1pfU0hJRlQpCisK KyNkZWZpbmUJCUdJVFNfQkFTRVJfU0laRV9NQVNLCTB4RkZVTAorCisjZGVmaW5lCQlHSVRTX0JB U0VSX05VTQkJOAorCisjZGVmaW5lCUdJVFNfVFlQRVIJCSgweDAwMDgpCisjZGVmaW5lCQlHSVRT X1RZUEVSX1BUQQkJKDFVTCA8PCAxOSkKKyNkZWZpbmUJCUdJVFNfVFlQRVJfREVWQl9TSElGVAkx MworI2RlZmluZQkJR0lUU19UWVBFUl9ERVZCX01BU0sJKDB4MUZVTCA8PCBHSVRTX1RZUEVSX0RF VkJfU0hJRlQpCisvKiBOdW1iZXIgb2YgZGV2aWNlIGlkZW50aWZpZXJzIGltcGxlbWVudGVkICov CisjZGVmaW5lCQlHSVRTX1RZUEVSX0RFVkIoeCkJXAorCQkgICAgKCgoKHgpICYgR0lUU19UWVBF Ul9ERVZCX01BU0spID4+IEdJVFNfVFlQRVJfREVWQl9TSElGVCkgKyAxKQorI2RlZmluZQkJR0lU U19UWVBFUl9JVFRFU19TSElGVAk0CisjZGVmaW5lCQlHSVRTX1RZUEVSX0lUVEVTX01BU0sJKDB4 RlVMIDw8IEdJVFNfVFlQRVJfSVRURVNfU0hJRlQpCisvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIElU VCBFbnRyeSAqLworI2RlZmluZQkJR0lUU19UWVBFUl9JVFRFUyh4KQlcCisJCSAgICAoKCgoeCkg JiBHSVRTX1RZUEVSX0lUVEVTX01BU0spID4+IEdJVFNfVFlQRVJfSVRURVNfU0hJRlQpICsgMSkK KworI2RlZmluZQlHSVRTX1RSQU5TTEFURVIJCSgweDEwMDQwKQorLyoKKyAqIExQSSByZWxhdGVk CisgKi8KKyNkZWZpbmUJCUxQSV9DT05GX1BSSU9fTUFTSwkoMHhGQykKKyNkZWZpbmUJCUxQSV9D T05GX0dST1VQMQkJKDEgPDwgMSkKKyNkZWZpbmUJCUxQSV9DT05GX0VOQUJMRQkJKDEgPDwgMCkK KwogLyoKICAqIENQVSBpbnRlcmZhY2UKICAqLwpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0 L2dpY192M19pdHMuYyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfaXRzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2l0cy5j CkBAIC0wLDAgKzEsMTQ0NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVC U0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3 YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBv ZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19G QlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8 c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2JpdHNldC5oPgorI2luY2x1ZGUgPHN5cy9iaXRz dHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgor I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8 c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvcm1h bi5oPgorI2luY2x1ZGUgPHN5cy9wY2lpby5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5j bHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvY3B1c2V0Lmg+CisjaW5jbHVkZSA8c3lz L2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9wY2kvcGNp dmFyLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2lu Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4KKyNpbmNsdWRl IDxtYWNoaW5lL2NwdWZ1bmMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KKworI2luY2x1 ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisKK01BTExPQ19ERUZJ TkUoTV9HSUNfVjNfSVRTLCAiR0lDdjMgSVRTIiwgR0lDX1YzX0lUU19ERVZTVFIpOworCitkZXZj bGFzc190IGdpY192M19pdHNfZGV2Y2xhc3M7CisKK3N0YXRpYyBpbnQgaXRzX2FsbG9jX3RhYmxl cyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGl0c19mcmVlX3RhYmxl cyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgaXRzX2luaXRfY29tbWFu ZHEoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgaW50IGl0c19pbml0X2NwdShz dHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgaXRzX2luaXRfY3B1X2NvbGxl Y3Rpb24oc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CisKK3N0YXRpYyBpbnQgaXRzX2NtZF9z ZW5kKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfY21kX2Rlc2MgKik7CisK K3N0YXRpYyB2b2lkIGl0c19jbWRfbWFwYyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqLCBzdHJ1 Y3QgaXRzX2NvbCAqLCB1aW50OF90KTsKK3N0YXRpYyB2b2lkIGl0c19jbWRfbWFwdmkoc3RydWN0 IGdpY192M19pdHNfc29mdGMgKiwgc3RydWN0IGl0c19kZXYgKiwgdWludDMyX3QsCisgICAgdWlu dDMyX3QpOworc3RhdGljIHZvaWQgaXRzX2NtZF9tYXBpKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRj ICosIHN0cnVjdCBpdHNfZGV2ICosIHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIGl0c19jbWRfaW52 KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfZGV2ICosIHVpbnQzMl90KTsK K3N0YXRpYyB2b2lkIGl0c19jbWRfaW52YWxsKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0 cnVjdCBpdHNfY29sICopOworCitzdGF0aWMgaW50IGxwaV9pbml0X2NvbmZ0YWJsZShzdHJ1Y3Qg Z2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgbHBpX2JpdG1hcF9pbml0KHN0cnVjdCBn aWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIGludCBscGlfaW5pdF9jcHUoc3RydWN0IGdpY192 M19pdHNfc29mdGMgKik7CitzdGF0aWMgaW50IGxwaV9jb25maWdfY3B1KHN0cnVjdCBnaWNfdjNf aXRzX3NvZnRjICopOworCitjb25zdCBjaGFyICppdHNfcHRhYl9jYWNoZVtdID0geworCVtHSVRT X0JBU0VSX0NBQ0hFX05DTkJdID0gIihOQyxOQikiLAorCVtHSVRTX0JBU0VSX0NBQ0hFX05DXSA9 ICIoTkMpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9SQVdUXSA9ICIoUkEsV1QpIiwKKwlbR0lUU19C QVNFUl9DQUNIRV9SQVdCXSA9ICIoUkEsV0IpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9XQVdUXSA9 ICIoV0EsV1QpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9XQVdCXSA9ICIoV0EsV0IpIiwKKwlbR0lU U19CQVNFUl9DQUNIRV9SQVdBV1RdID0gIihSQVdBLFdUKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVf UkFXQVdCXSA9ICIoUkFXQSxXQikiLAorfTsKKworY29uc3QgY2hhciAqaXRzX3B0YWJfc2hhcmVb XSA9IHsKKwlbR0lUU19CQVNFUl9TSEFSRV9OU10gPSAibm9uZSIsCisJW0dJVFNfQkFTRVJfU0hB UkVfSVNdID0gImlubmVyIiwKKwlbR0lUU19CQVNFUl9TSEFSRV9PU10gPSAib3V0ZXIiLAorCVtH SVRTX0JBU0VSX1NIQVJFX1JFU10gPSAibm9uZSIsCit9OworCitjb25zdCBjaGFyICppdHNfcHRh Yl90eXBlW10gPSB7CisJW0dJVFNfQkFTRVJfVFlQRV9VTklNUExdID0gIlVuaW1wbGVtZW50ZWQi LAorCVtHSVRTX0JBU0VSX1RZUEVfREVWXSA9ICJEZXZpY2VzIiwKKwlbR0lUU19CQVNFUl9UWVBF X1ZQXSA9ICJWaXJ0dWFsIFByb2Nlc3NvcnMiLAorCVtHSVRTX0JBU0VSX1RZUEVfUFBdID0gIlBo eXNpY2FsIFByb2Nlc3NvcnMiLAorCVtHSVRTX0JBU0VSX1RZUEVfSUNdID0gIkludGVycnVwdCBD b2xsZWN0aW9ucyIsCisJW0dJVFNfQkFTRVJfVFlQRV9SRVM1XSA9ICJSZXNlcnZlZCAoNSkiLAor CVtHSVRTX0JBU0VSX1RZUEVfUkVTNl0gPSAiUmVzZXJ2ZWQgKDYpIiwKKwlbR0lUU19CQVNFUl9U WVBFX1JFUzddID0gIlJlc2VydmVkICg3KSIsCit9OworCitzdGF0aWMgc3RydWN0IGdpY192M19p dHNfc29mdGMgKml0c19zYzsKKworI2RlZmluZQlnaWNfaXRzX3JlYWQoc2MsIGxlbiwgcmVnKQkJ XAorKHsJCQkJCQlcCisJYnVzX3JlYWRfIyNsZW4oJnNjLT5pdHNfcmVzWzBdLAkJXAorCSAgICBy ZWcpOwkJCQlcCit9KQorCisjZGVmaW5lCWdpY19pdHNfd3JpdGUoc2MsIGxlbiwgcmVnLCB2YWwp CVwKKyh7CQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbigmc2MtPml0c19yZXNbMF0sCVwKKwkgICAg cmVnLCB2YWwpOwkJCQlcCit9KQorCitpbnQKK2dpY192M19pdHNfYXR0YWNoKGRldmljZV90IGRl dikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2M7CisJdWludDY0X3QgZ2l0c190bXA7 CisJdWludDMyX3QgZ2l0c19waWRyMjsKKwlpbnQgcmlkOworCWludCByZXQ7CisKKwlzYyA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBzbGVlcCAmIHNwaW4g bXV0ZXggZm9yIElUUworCSAqLworCS8qIFByb3RlY3RzIElUUyBkZXZpY2UgbGlzdCBhbmQgYXNz aWduZWQgTFBJcyBiaXRtYXBzLiAqLworCW10eF9pbml0KCZzYy0+aXRzX210eCwgIklUUyBzbGVl cCBsb2NrIiwgTlVMTCwgTVRYX0RFRik7CisJLyogUHJvdGVjdHMgYWNjZXNzIHRvIElUUyBjb21t YW5kIGNpcmN1bGFyIGJ1ZmZlci4gKi8KKwltdHhfaW5pdCgmc2MtPml0c19zcGluX210eCwgIklU UyBzcGluIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisKKwlyaWQgPSAwOworCXNjLT5pdHNfcmVz ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCSAg ICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXRzX3JlcyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOWElP KTsKKworCXNjLT5kZXYgPSBkZXY7CisKKwlnaXRzX3BpZHIyID0gZ2ljX2l0c19yZWFkKHNjLCA0 LCBHSVRTX1BJRFIyKTsKKwlzd2l0Y2ggKGdpdHNfcGlkcjIgJiBHSVRTX1BJRFIyX0FSQ0hfTUFT SykgeworCWNhc2UgR0lUU19QSURSMl9BUkNIX0dJQ3YzOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlj YXNlIEdJVFNfUElEUjJfQVJDSF9HSUN2NDoKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZp Y2VfcHJpbnRmKGRldiwgIklUUyBmb3VuZC4gQXJjaGl0ZWN0dXJlIHJldi4gJXVcbiIsCisJCQkg ICAgKHVfaW50KShnaXRzX3BpZHIyICYgR0lUU19QSURSMl9BUkNIX01BU0spID4+IDQpOworCQl9 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldmljZV9wcmludGYoZGV2LCAiTm8gSVRTIGZvdW5k IGluIHRoZSBzeXN0ZW1cbiIpOworCQlyZXQgPSBFTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQor CisJLyogMS4gSW5pdGlhbGl6ZSBjb21tYW5kcyBxdWV1ZSAqLworCXJldCA9IGl0c19pbml0X2Nv bW1hbmRxKHNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogMi4gUHJvdmlkZSBt ZW1vcnkgZm9yIGFueSBwcml2YXRlIElUUyB0YWJsZXMgKi8KKwlyZXQgPSBpdHNfYWxsb2NfdGFi bGVzKHNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogMy4gQWxsb2NhdGUgY29s bGVjdGlvbnMuIE9uZSBwZXItQ1BVICovCisJc2MtPml0c19jb2xzID0gbWFsbG9jKHNpemVvZigq c2MtPml0c19jb2xzKSAqIE1BWENQVSwKKwkgICAgTV9HSUNfVjNfSVRTLCBNX1dBSVRPSyB8IE1f WkVSTyk7CisKKwkvKiA0LiBFbmFibGUgSVRTIGluIEdJVFNfQ1RMUiAqLworCWdpdHNfdG1wID0g Z2ljX2l0c19yZWFkKHNjLCA0LCBHSVRTX0NUTFIpOworCWdpY19pdHNfd3JpdGUoc2MsIDQsIEdJ VFNfQ1RMUiwgZ2l0c190bXAgfCBHSVRTX0NUTFJfRU4pOworCisJLyogNS4gSW5pdGlhbGl6ZSBM UElzIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwlyZXQgPSBscGlfaW5pdF9jb25mdGFibGUoc2Mp OworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiA2LiBMUElzIGJpdG1hcCBpbml0ICov CisJcmV0ID0gbHBpX2JpdG1hcF9pbml0KHNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOwor CisJLyogNy4gQ1BVIGluaXQgKi8KKwkodm9pZClpdHNfaW5pdF9jcHUoc2MpOworCisJLyogOC4g SW5pdCBJVFMgZGV2aWNlcyBsaXN0ICovCisJVEFJTFFfSU5JVCgmc2MtPml0c19kZXZfbGlzdCk7 CisKKwlhcm1fcmVnaXN0ZXJfbXNpX3BpYyhkZXYpOworCisJLyoKKwkgKiBYWFg6IFdlIG5lZWQg dG8gaGF2ZSBJVFMgc29mdHdhcmUgY29udGV4dCB3aGVuLgorCSAqIEJlaW5nIGNhbGxlZCBieSB0 aGUgaW50ZXJydXB0IGNvZGUgKG1hc2svdW5tYXNrKS4KKwkgKiBUaGlzIG1heSBiZSB1c2VkIG9u bHkgd2hlbiBvbmUgSVRTIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgc3lzdGVtIGFuZCBldmVudHVh bGx5IHNob3VsZCBiZSByZW1vdmVkLgorCSAqLworCWl0c19zYyA9IHNjOworCisJcmV0dXJuICgw KTsKKworZXJyb3I6CisJZ2ljX3YzX2l0c19kZXRhY2goZGV2KTsKKwlyZXR1cm4gKHJldCk7Cit9 CisKKy8qIFdpbGwgbm90IGRldGFjaCBidXQgdXNlIGl0IGZvciBjb252ZW5pZW5jZSAqLworaW50 CitnaWNfdjNfaXRzX2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3QgcGFyZW50Owor CXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAq c2M7CisJdV9pbnQgY3B1aWQ7CisJaW50IHJpZCA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCS8qIFJlbGVhc2Ugd2hhdCdz IHBvc3NpYmxlICovCisKKwkvKiBDb21tYW5kIHF1ZXVlICovCisJaWYgKCh2b2lkICopc2MtPml0 c19jbWRxX2Jhc2UgIT0gTlVMTCkgeworCQljb250aWdmcmVlKCh2b2lkICopc2MtPml0c19jbWRx X2Jhc2UsCisJCSAgICBJVFNfQ01EUV9TSVpFLCBNX0dJQ19WM19JVFMpOworCX0KKwkvKiBJVFRz ICovCisJaXRzX2ZyZWVfdGFibGVzKHNjKTsKKwkvKiBDb2xsZWN0aW9ucyAqLworCWZyZWUoc2Mt Pml0c19jb2xzLCBNX0dJQ19WM19JVFMpOworCS8qIExQSSBjb25maWcgdGFibGUgKi8KKwlwYXJl bnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3Nv ZnRjKHBhcmVudCk7CisJaWYgKCh2b2lkICopZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZf YmFzZSAhPSBOVUxMKSB7CisJCWNvbnRpZ2ZyZWUoKHZvaWQgKilnaWNfc2MtPmdpY19yZWRpc3Rz LmxwaXMuY29uZl9iYXNlLAorCQkgICAgTFBJX0NPTkZUQUJfU0laRSwgTV9HSUNfVjNfSVRTKTsK Kwl9CisJaWYgKCh2b2lkICopZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVp ZF0gIT0gTlVMTCkgeworCQljb250aWdmcmVlKCh2b2lkICopZ2ljX3NjLT5naWNfcmVkaXN0cy5s cGlzLnBlbmRfYmFzZVtjcHVpZF0sCisJCSAgICByb3VuZHVwMihMUElfUEVORFRBQl9TSVpFLCBQ QUdFX1NJWkVfNjRLKSwgTV9HSUNfVjNfSVRTKTsKKwl9CisKKwkvKiBSZXNvdXJjZS4uLiAqLwor CWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIHJpZCwgc2MtPml0c19y ZXMpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoraXRzX2FsbG9jX3RhYmxlcyhz dHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgZ2l0c19iYXNlciwgZ2l0 c190bXA7CisJdWludDY0X3QgdHlwZSwgZXNpemUsIGNhY2hlLCBzaGFyZSwgcHN6OworCXVpbnQ2 NF90IGdpdHNfdHlwZXI7CisJc2l6ZV90IHBhZ2Vfc2l6ZSwgbnBhZ2VzLCBuaXRzcGFnZXMsIG5p ZGVudHMsIHRuOworCXNpemVfdCBpdHNfdGJsX3NpemU7CisJdm1fb2Zmc2V0X3QgcHRhYl92YWRk cjsKKwl2bV9wYWRkcl90IHB0YWJfcGFkZHI7CisJYm9vbGVhbl90IGZpcnN0ID0gVFJVRTsKKwor CXBhZ2Vfc2l6ZSA9IFBBR0VfU0laRV82NEs7CisKKwkvKiBSZWFkIGZlYXR1cmVzIGZpcnN0ICov CisJZ2l0c190eXBlciA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lUU19UWVBFUik7CisKKwlmb3Ig KHRuID0gMDsgdG4gPCBHSVRTX0JBU0VSX05VTTsgdG4rKykgeworCQlnaXRzX2Jhc2VyID0gZ2lj X2l0c19yZWFkKHNjLCA4LCBHSVRTX0JBU0VSKHRuKSk7CisJCXR5cGUgPSBHSVRTX0JBU0VSX1RZ UEUoZ2l0c19iYXNlcik7CisJCS8qIEdldCB0aGUgVGFibGUgRW50cnkgc2l6ZSAqLworCQllc2l6 ZSA9IEdJVFNfQkFTRVJfRVNJWkUoZ2l0c19iYXNlcik7CisKKwkJc3dpdGNoICh0eXBlKSB7CisJ CWNhc2UgR0lUU19CQVNFUl9UWVBFX1VOSU1QTDoJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2Ug R0lUU19CQVNFUl9UWVBFX1JFUzU6CisJCWNhc2UgR0lUU19CQVNFUl9UWVBFX1JFUzY6CisJCWNh c2UgR0lUU19CQVNFUl9UWVBFX1JFUzc6CisJCQljb250aW51ZTsKKwkJY2FzZSBHSVRTX0JBU0VS X1RZUEVfREVWOgorCQkJbmlkZW50cyA9ICgxIDw8IEdJVFNfVFlQRVJfREVWQihnaXRzX3R5cGVy KSk7CisJCQlpdHNfdGJsX3NpemUgPSBlc2l6ZSAqIG5pZGVudHM7CisJCQlpdHNfdGJsX3NpemUg PSByb3VuZHVwMihpdHNfdGJsX3NpemUsIHBhZ2Vfc2l6ZSk7CisJCQlucGFnZXMgPSBob3dtYW55 KGl0c190Ymxfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbnBh Z2VzID0gaG93bWFueShwYWdlX3NpemUsIFBBR0VfU0laRSk7CisJCQlicmVhazsKKwkJfQorCisJ CS8qIEFsbG9jYXRlIHJlcXVpcmVkIHNwYWNlICovCisJCXB0YWJfdmFkZHIgPSAodm1fb2Zmc2V0 X3QpY29udGlnbWFsbG9jKG5wYWdlcyAqIFBBR0VfU0laRSwKKwkJICAgIE1fR0lDX1YzX0lUUywg TV9XQUlUT0sgfCBNX1pFUk8sIDAsIH4wVUwsIFBBR0VfU0laRSwgMCk7CisKKwkJc2MtPml0c19w dGFic1t0bl0ucHRhYl92YWRkciA9IHB0YWJfdmFkZHI7CisJCXNjLT5pdHNfcHRhYnNbdG5dLnB0 YWJfcGdzeiA9IFBBR0VfU0laRTsKKwkJc2MtPml0c19wdGFic1t0bl0ucHRhYl9ucGFnZXMgPSBu cGFnZXM7CisKKwkJcHRhYl9wYWRkciA9IHZ0b3BoeXMocHRhYl92YWRkcik7CisJCUtBU1NFUlQo KHB0YWJfcGFkZHIgJiBHSVRTX0JBU0VSX1BBX01BU0spID09IHB0YWJfcGFkZHIsCisJCSAgICAo IiVzOiBVbmFsaWduZWQgUEEgZm9yIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSIsCisJCSAg ICBkZXZpY2VfZ2V0X25hbWUoc2MtPmRldikpKTsKKworCQkvKiBTZXQgZGVmYXVsdHM6IFdBV0Is IElTICovCisJCWNhY2hlID0gR0lUU19CQVNFUl9DQUNIRV9XQVdCOworCQlzaGFyZSA9IEdJVFNf QkFTRVJfU0hBUkVfSVM7CisKKwkJd2hpbGUgKDEpIHsKKwkJCW5pdHNwYWdlcyA9IGhvd21hbnko aXRzX3RibF9zaXplLCBwYWdlX3NpemUpOworCisJCQlzd2l0Y2ggKHBhZ2Vfc2l6ZSkgeworCQkJ Y2FzZSAoMSA8PCAxMik6CQkvKiA0S0IgKi8KKwkJCQlwc3ogPSBHSVRTX0JBU0VSX1BTWl80SzsK KwkJCQlicmVhazsKKwkJCWNhc2UgKDEgPDwgMTQpOgkJLyogMTZLQiAqLworCQkJCXBzeiA9IEdJ VFNfQkFTRVJfUFNaXzRLOworCQkJCWJyZWFrOworCQkJY2FzZSAoMSA8PCAxNik6CQkvKiA2NEtC ICovCisJCQkJcHN6ID0gR0lUU19CQVNFUl9QU1pfNjRLOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQkvKiBYWFg6IE90aGVyIHBhZ2Ugc2l6ZXMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9y dGVkICovCisJCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgcGFnZSBzaXpl OiAlenVLQlxuIiwKKwkJCQkgICAgcGFnZV9zaXplIC8gMTAyNCk7CisJCQkJaXRzX2ZyZWVfdGFi bGVzKHNjKTsKKwkJCQlyZXR1cm4gKEVOWElPKTsKKwkJCX0KKworCQkJLyogQ2xlYXIgZmllbGRz IHVuZGVyIG1vZGlmaWNhdGlvbiBmaXJzdCAqLworCQkJZ2l0c19iYXNlciAmPSB+KEdJVFNfQkFT RVJfVkFMSUQgfAorCQkJICAgIEdJVFNfQkFTRVJfQ0FDSEVfTUFTSyB8IEdJVFNfQkFTRVJfVFlQ RV9NQVNLIHwKKwkJCSAgICBHSVRTX0JBU0VSX0VTSVpFX01BU0sgfCBHSVRTX0JBU0VSX1BBX01B U0sgfAorCQkJICAgIEdJVFNfQkFTRVJfU0hBUkVfTUFTSyB8IEdJVFNfQkFTRVJfUFNaX01BU0sg fAorCQkJICAgIEdJVFNfQkFTRVJfU0laRV9NQVNLKTsKKwkJCS8qIENvbnN0cnVjdCByZWdpc3Rl ciB2YWx1ZSAqLworCQkJZ2l0c19iYXNlciB8PQorCQkJICAgICh0eXBlIDw8IEdJVFNfQkFTRVJf VFlQRV9TSElGVCkgfAorCQkJICAgICgoZXNpemUgLSAxKSA8PCBHSVRTX0JBU0VSX0VTSVpFX1NI SUZUKSB8CisJCQkgICAgKGNhY2hlIDw8IEdJVFNfQkFTRVJfQ0FDSEVfU0hJRlQpIHwKKwkJCSAg ICAoc2hhcmUgPDwgR0lUU19CQVNFUl9TSEFSRV9TSElGVCkgfAorCQkJICAgIChwc3ogPDwgR0lU U19CQVNFUl9QU1pfU0hJRlQpIHwKKwkJCSAgICBwdGFiX3BhZGRyIHwgKG5pdHNwYWdlcyAtIDEp IHwKKwkJCSAgICBHSVRTX0JBU0VSX1ZBTElEOworCisJCQlnaWNfaXRzX3dyaXRlKHNjLCA4LCBH SVRTX0JBU0VSKHRuKSwgZ2l0c19iYXNlcik7CisJCQkvKgorCQkJICogVmVyaWZ5LgorCQkJICog RGVwZW5kaW5nIG9uIGltcGxlbWVudGF0aW9uIHdlIG1heSBlbmNvdW50ZXIKKwkJCSAqIHNoYXJl YWJpbGl0eSBhbmQgcGFnZSBzaXplIG1pc21hdGNoLgorCQkJICovCisJCQlnaXRzX3RtcCA9IGdp Y19pdHNfcmVhZChzYywgOCwgR0lUU19CQVNFUih0bikpOworCQkJaWYgKChnaXRzX3RtcCBeIGdp dHNfYmFzZXIpICYgR0lUU19CQVNFUl9TSEFSRV9NQVNLKSB7CisJCQkJc2hhcmUgPSBnaXRzX3Rt cCAmIEdJVFNfQkFTRVJfU0hBUkVfTUFTSzsKKwkJCQlzaGFyZSA+Pj0gR0lUU19CQVNFUl9TSEFS RV9TSElGVDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKChnaXRzX3RtcCBeIGdpdHNf YmFzZXIpICYgR0lUU19CQVNFUl9QU1pfTUFTSykgeworCQkJCXN3aXRjaCAocGFnZV9zaXplKSB7 CisJCQkJY2FzZSAoMSA8PCAxNCk6CisJCQkJCXBhZ2Vfc2l6ZSA9ICgxIDw8IDEyKTsKKwkJCQkJ Y29udGludWU7CisJCQkJY2FzZSAoMSA8PCAxNik6CisJCQkJCXBhZ2Vfc2l6ZSA9ICgxIDw8IDE0 KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJLyogV2UgZGlkIHdoYXQgd2UgY291 bGQgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIERvIG5vdCBjb21wYXJlIENhY2hlYWJp bGl0eSBmaWVsZCBzaW5jZQorCQkgKiBpdCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgorCQkg Ki8KKwkJZ2l0c190bXAgJj0gfkdJVFNfQkFTRVJfQ0FDSEVfTUFTSzsKKwkJZ2l0c19iYXNlciAm PSB+R0lUU19CQVNFUl9DQUNIRV9NQVNLOworCisJCWlmIChnaXRzX3RtcCAhPSBnaXRzX2Jhc2Vy KSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0 ZSBJVFMgdGFibGVzXG4iKTsKKwkJCWl0c19mcmVlX3RhYmxlcyhzYyk7CisJCQlyZXR1cm4gKEVO WElPKTsKKwkJfQorCisJCWlmIChib290dmVyYm9zZSkgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCSAgICAiQWxsb2NhdGVkIElUUyBwcml2YXRlIHRh YmxlczpcbiIpOworCQkJCWZpcnN0ID0gRkFMU0U7CisJCQl9CisJCQlkZXZpY2VfcHJpbnRmKHNj LT5kZXYsCisJCQkgICAgICAgIlx0UFRBQiV6dSBmb3IgJXM6IFBBIDB4JWx4LCAlbHUgZW50cmll cywiCisJCQkgICAgICAgIiBjYWNoZSBwb2xpY3kgJXMsICVzIHNoYXJlYWJsZSwiCisJCQkgICAg ICAgIiBwYWdlIHNpemUgJXp1S0JcbiIsIHRuLCBpdHNfcHRhYl90eXBlW3R5cGVdLAorCQkJICAg ICAgIHB0YWJfcGFkZHIsIChwYWdlX3NpemUgKiBuaXRzcGFnZXMpIC8gZXNpemUsCisJCQkgICAg ICAgaXRzX3B0YWJfY2FjaGVbY2FjaGVdLCBpdHNfcHRhYl9zaGFyZVtzaGFyZV0sCisJCQkgICAg ICAgcGFnZV9zaXplIC8gMTAyNCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgdm9pZAoraXRzX2ZyZWVfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sK Kwl2bV9vZmZzZXRfdCBwdGFiX3ZhZGRyOworCXNpemVfdCBzaXplOworCXNpemVfdCB0bjsKKwor CWZvciAodG4gPSAwOyB0biA8IEdJVFNfQkFTRVJfTlVNOyB0bisrKSB7CisJCXB0YWJfdmFkZHIg PSBzYy0+aXRzX3B0YWJzW3RuXS5wdGFiX3ZhZGRyOworCQlpZiAoIXB0YWJfdmFkZHIpCisJCQlj b250aW51ZTsKKwkJc2l6ZSA9IHNjLT5pdHNfcHRhYnNbdG5dLnB0YWJfcGdzejsKKwkJc2l6ZSAq PSBzYy0+aXRzX3B0YWJzW3RuXS5wdGFiX25wYWdlczsKKworCQlpZiAoKHZvaWQgKilwdGFiX3Zh ZGRyICE9IE5VTEwpCisJCQljb250aWdmcmVlKCh2b2lkICopcHRhYl92YWRkciwgc2l6ZSwgTV9H SUNfVjNfSVRTKTsKKworCQkvKiBDbGVhciB0aGUgdGFibGUgZGVzY3JpcHRpb24gKi8KKwkJbWVt c2V0KCZzYy0+aXRzX3B0YWJzW3RuXSwgMCwKKwkJICAgIHNpemVvZihzYy0+aXRzX3B0YWJzW3Ru XSkpOworCX0KK30KKworc3RhdGljIGludAoraXRzX2luaXRfY29tbWFuZHEoc3RydWN0IGdpY192 M19pdHNfc29mdGMgKnNjKQoreworCXVpbnQ2NF90IGdpdHNfY2Jhc2VyLCBnaXRzX3RtcDsKKwl1 aW50NjRfdCBjYWNoZSwgc2hhcmU7CisJdm1fcGFkZHJfdCBjbWRxX3BhZGRyOworCWRldmljZV90 IGRldjsKKworCWRldiA9IHNjLT5kZXY7CisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjb21tYW5k IHF1ZXVlICovCisJc2MtPml0c19jbWRxX2Jhc2UgPSBjb250aWdtYWxsb2MoSVRTX0NNRFFfU0la RSwgTV9HSUNfVjNfSVRTLAorCSAgICAoTV9XQUlUT0sgfCBNX1pFUk8pLAorCSAgICAwLCB+MFVM LCBJVFNfQ01EUV9TSVpFLCAwKTsKKwkvKiBTZXQgY29tbWFuZCBxdWV1ZSB3cml0ZSBwb2ludGVy IChjb21tYW5kIHF1ZXVlIGVtcHR5KSAqLworCXNjLT5pdHNfY21kcV93cml0ZSA9IHNjLT5pdHNf Y21kcV9iYXNlOworCisJLyogU2F2ZSBjb21tYW5kIHF1ZXVlIHBvaW50ZXIgYW5kIGF0dHJpYnV0 ZXMgKi8KKwljbWRxX3BhZGRyID0gdnRvcGh5cyhzYy0+aXRzX2NtZHFfYmFzZSk7CisJS0FTU0VS VCgoY21kcV9wYWRkciAmIEdJVFNfQ0JBU0VSX1BBX01BU0spID09IGNtZHFfcGFkZHIsCisJICAg ICgiJXM6IFVuYWxpZ25lZCBQQSBmb3IgSVRTIENvbW1hbmRzIFF1ZXVlIiwgZGV2aWNlX2dldF9u YW1lKGRldikpKTsKKworCS8qIFNldCBkZWZhdWx0czogTm9ybWFsIElubmVyIFdBV0IsIElTICov CisJY2FjaGUgPSBHSVRTX0NCQVNFUl9DQUNIRV9OSVdBV0I7CisJc2hhcmUgPSBHSVRTX0NCQVNF Ul9TSEFSRV9JUzsKKworCWdpdHNfY2Jhc2VyID0gKGNtZHFfcGFkZHIgfAorCSAgICAoY2FjaGUg PDwgR0lUU19DQkFTRVJfQ0FDSEVfU0hJRlQpIHwKKwkgICAgKHNoYXJlIDw8IEdJVFNfQ0JBU0VS X1NIQVJFX1NISUZUKSB8CisJICAgIC8qIE51bWJlciBvZiA0S0IgcGFnZXMgLSAxICovCisJICAg IChJVFNfQ01EUV9TSVpFIC8gKDEgPDwgMTIpIC0gMSkgfAorCSAgICAvKiBWYWxpZCBiaXQgKi8K KwkgICAgR0lUU19DQkFTRVJfVkFMSUQpOworCisJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19D QkFTRVIsIGdpdHNfY2Jhc2VyKTsKKwlnaXRzX3RtcCA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lU U19DQkFTRVIpOworCisJaWYgKChnaXRzX3RtcCBeIGdpdHNfY2Jhc2VyKSAmIEdJVFNfQ0JBU0VS X1NIQVJFX01BU0spIHsKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRl diwKKwkJCSAgICAiV2lsbCB1c2UgY2FjaGUgZmx1c2hpbmcgZm9yIGNvbW1hbmRzIHF1ZXVlXG4i KTsKKwkJfQorCQkvKiBDb21tYW5kIHF1ZXVlIG5lZWRzIGNhY2hlIGZsdXNoaW5nICovCisJCXNj LT5pdHNfZmxhZ3MgfD0gSVRTX0ZMQUdTX0NNRFFfRkxVU0g7CisJfQorCisJZ2ljX2l0c193cml0 ZShzYywgOCwgR0lUU19DV1JJVEVSLCAweDApOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj IGludAoraXRzX2luaXRfY3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlkZXZp Y2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCisJLyoKKwkgKiBD aGVjayBmb3IgTFBJcyBzdXBwb3J0IG9uIHRoaXMgUmUtRGlzdHJpYnV0b3IuCisJICovCisJcGFy ZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dldF9z b2Z0YyhwYXJlbnQpOworCWlmICghKGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX1RZUEVSKSAm IEdJQ1JfVFlQRVJfUExQSVMpKSB7CisJCWlmIChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3By aW50ZihzYy0+ZGV2LAorCQkJICAgICJMUElzIG5vdCBzdXBwb3J0ZWQgb24gQ1BVJXVcbiIsIFBD UFVfR0VUKGNwdWlkKSk7CisJCX0KKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJaWYgKGxwaV9p bml0X2NwdShzYykpCisJCXJldHVybiAoRU5YSU8pOworCisJLyogSW5pdCBjb2xsZWN0aW9ucyAq LworCWl0c19pbml0X2NwdV9jb2xsZWN0aW9uKHNjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0 YXRpYyBpbnQKK2l0c19pbml0X2NwdV9jb2xsZWN0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRj ICpzYykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3Nj OworCXVpbnQ2NF90IHR5cGVyOworCXVpbnQ2NF90IHRhcmdldDsKKwl2bV9vZmZzZXRfdCByZWRp c3RfYmFzZTsKKwl1X2ludCBjcHVpZDsKKworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCXBh cmVudCA9IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOworCWdpY19zYyA9IGRldmljZV9nZXRf c29mdGMocGFyZW50KTsKKworCXR5cGVyID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX1RZUEVS KTsKKwlpZiAodHlwZXIgJiBHSVRTX1RZUEVSX1BUQSkgeworCQlyZWRpc3RfYmFzZSA9CisJCSAg ICBybWFuX2dldF9idXNoYW5kbGUoZ2ljX3NjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSk7CisJ CS8qCisJCSAqIFRhcmdldCBBZGRyZXNzIGNvcnJlc3BvbmQgdG8gdGhlIGJhc2UgcGh5c2ljYWwK KwkJICogYWRkcmVzcyBvZiBSZS1EaXN0cmlidXRvcnMuCisJCSAqLworCQl0YXJnZXQgPSB2dG9w aHlzKHJlZGlzdF9iYXNlKTsKKwl9IGVsc2UgeworCQkvKiBUYXJnZXQgQWRkcmVzcyBjb3JyZXNw b25kIHRvIHVuaXF1ZSBwcm9jZXNzb3IgbnVtYmVycyAqLworCQl0eXBlciA9IGdpY19yX3JlYWQo Z2ljX3NjLCA4LCBHSUNSX1RZUEVSKTsKKwkJdGFyZ2V0ID0gR0lDUl9UWVBFUl9DUFVOVU0odHlw ZXIpOworCX0KKworCXNjLT5pdHNfY29sc1tjcHVpZF0uY29sX3RhcmdldCA9IHRhcmdldDsKKwlz Yy0+aXRzX2NvbHNbY3B1aWRdLmNvbF9pZCA9IGNwdWlkOworCisJaXRzX2NtZF9tYXBjKHNjLCAm c2MtPml0c19jb2xzW2NwdWlkXSwgMSk7CisJaXRzX2NtZF9pbnZhbGwoc2MsICZzYy0+aXRzX2Nv bHNbY3B1aWRdKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xwaV9pbml0X2Nv bmZ0YWJsZShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJZGV2aWNlX3QgcGFyZW50 OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl2bV9vZmZzZXRfdCBjb25mX2Jhc2U7 CisJdWludDhfdCBwcmlvX2RlZmF1bHQ7CisKKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChz Yy0+ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJLyoKKwkgKiBM UEkgQ29uZmlndXJhdGlvbiBUYWJsZSBzZXR0aW5ncy4KKwkgKiBOb3RpY2UgdGhhdCBDb25maWd1 cmF0aW9uIFRhYmxlIGlzIHNoYXJlZCBhbW9uZyBhbGwKKwkgKiBSZS1EaXN0cmlidXRvcnMsIHNv IHRoaXMgaXMgZ29pbmcgdG8gYmUgY3JlYXRlZCBqdXN0IG9uY2UuCisJICovCisJY29uZl9iYXNl ID0gKHZtX29mZnNldF90KWNvbnRpZ21hbGxvYyhMUElfQ09ORlRBQl9TSVpFLAorCSAgICBNX0dJ Q19WM19JVFMsIE1fV0FJVE9LIHwgTV9aRVJPLCAwLCB+MFVMLCBQQUdFX1NJWkVfNjRLLCAwKTsK KworCUtBU1NFUlQoKHZ0b3BoeXMoY29uZl9iYXNlKSAmIFBBR0VfTUFTS182NEspID09IDAsCisJ ICAgICgiTFBJIENvbmZpZ3VyYXRpb24gVGFibGUgbm90IGFsaWduZWQgdG8gNjQgS0IiKSk7CisK KwlpZiAoIWNvbmZfYmFzZSkgeworCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCWRldmljZV9wcmlu dGYoc2MtPmRldiwKKwkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgTFBJICIK KwkJCSAgICAiQ29uZmlndXJhdGlvbiBUYWJsZVxuIik7CisJCX0KKwkJcmV0dXJuIChFTk9NRU0p OworCX0KKworCWlmIChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJ CSAgICAiTFBJIENvbmZpZ3VyYXRpb24gVGFibGUgYXQgUEE6IDB4JWx4XG4iLAorCQkgICAgdnRv cGh5cyhjb25mX2Jhc2UpKTsKKwl9CisKKwkvKgorCSAqIExldCB0aGUgZGVmYXVsdCBwcmlvcml0 eSBiZSBhbGlnbmVkIHdpdGggYWxsIG90aGVyCisJICogaW50ZXJydXB0cyBhc3N1bWluZyB0aGF0 IGVhY2ggaW50ZXJydXB0IGlzIGFzc2lnbmVkCisJICogTUFYIHByaW9yaXR5IGF0IHN0YXJ0dXAu IE1BWCBwcmlvcml0eSBvbiB0aGUgb3RoZXIKKwkgKiBoYW5kIGNhbm5vdCBiZSBoaWdoZXIgdGhh biAweEZDIGZvciBMUElzLgorCSAqLworCXByaW9fZGVmYXVsdCA9IEdJQ19QUklPUklUWV9NQVg7 CisKKwkvKiBXcml0ZSBlYWNoIHNldHRpbmdzIGJ5dGUgdG8gTFBJIGNvbmZpZ3VyYXRpb24gdGFi bGUgKi8KKwltZW1zZXQoKHZvaWQgKiljb25mX2Jhc2UsCisJICAgIChwcmlvX2RlZmF1bHQgJiBM UElfQ09ORl9QUklPX01BU0spIHwgTFBJX0NPTkZfR1JPVVAxLAorCSAgICBMUElfQ09ORlRBQl9T SVpFKTsKKworCWNwdV9kY2FjaGVfd2JfcmFuZ2UoKHZtX29mZnNldF90KWNvbmZfYmFzZSwgcm91 bmR1cDIoTFBJX0NPTkZUQUJfU0laRSwKKwkgICAgUEFHRV9TSVpFXzY0SykpOworCisJZ2ljX3Nj LT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZSA9IGNvbmZfYmFzZTsKKworCXJldHVybiAoMCk7 Cit9CisKK3N0YXRpYyBpbnQKK2xwaV9pbml0X2NwdShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAq c2MpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsK Kwl2bV9vZmZzZXRfdCBwZW5kX2Jhc2U7CisJdV9pbnQgY3B1aWQ7CisKKwlwYXJlbnQgPSBkZXZp Y2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVu dCk7CisKKwkvKgorCSAqIExQSSBQZW5kaW5nIFRhYmxlIHNldHRpbmdzLgorCSAqIFRoaXMgaGFz IHRvIGJlIGRvbmUgZm9yIGVhY2ggUmUtRGlzdHJpYnV0b3IsIGhlbmNlIGZvciBlYWNoIENQVS4K KwkgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCXBlbmRfYmFzZSA9ICh2bV9vZmZz ZXRfdCljb250aWdtYWxsb2MoCisJICAgIHJvdW5kdXAyKExQSV9QRU5EVEFCX1NJWkUsIFBBR0Vf U0laRV82NEspLCBNX0dJQ19WM19JVFMsCisJICAgIChNX1dBSVRPSyB8IE1fWkVSTyksIDAsIH4w VUwsIFBBR0VfU0laRV82NEssIDApOworCisJS0FTU0VSVCgodnRvcGh5cyhwZW5kX2Jhc2UpICYg UEFHRV9NQVNLXzY0SykgPT0gMCwKKwkgICAgKCJMUEkgUGVuZGluZyBUYWJsZSBub3QgYWxpZ25l ZCB0byA2NCBLQiIpKTsKKworCS8qIENsZWFuIEQtY2FjaGUgc28gdGhhdCBJVFMgY2FuIHNlZSB6 ZXJvZWQgcGFnZXMgKi8KKwljcHVfZGNhY2hlX3diX3JhbmdlKCh2bV9vZmZzZXRfdClwZW5kX2Jh c2UsCisJICAgIHJvdW5kdXAyKExQSV9QRU5EVEFCX1NJWkUsIFBBR0VfU0laRV82NEspKTsKKwor CWlmICghcGVuZF9iYXNlKSB7CisJCWlmIChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50 ZihzYy0+ZGV2LAorCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBMUEkgIgor CQkJICAgICJQZW5kaW5nIFRhYmxlIG9uIENQVSV1XG4iLCBjcHVpZCk7CisJCX0KKwkJcmV0dXJu IChFTk9NRU0pOworCX0KKwlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ ZGV2LAorCQkgICAgIkxQSSBQZW5kaW5nIFRhYmxlIGZvciBDUFUldSBhdCBQQTogMHglbHhcbiIs CisJCSAgICBjcHVpZCwgdnRvcGh5cyhwZW5kX2Jhc2UpKTsKKwl9CisKKwlnaWNfc2MtPmdpY19y ZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXSA9IHBlbmRfYmFzZTsKKworCWxwaV9jb25maWdf Y3B1KHNjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xwaV9jb25maWdfY3B1 KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3Ry dWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXZtX29mZnNldF90IGNvbmZfYmFzZSwgcGVuZF9i YXNlOworCXVpbnQ2NF90IGdpY3JfeGJhc2VyLCBnaWNyX3RlbXA7CisJdWludDY0X3QgY2FjaGUs IHNoYXJlLCBpZGJpdHM7CisJdWludDMyX3QgZ2ljcl9jdGxyOworCXVfaW50IGNwdWlkOworCisJ cGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dl dF9zb2Z0YyhwYXJlbnQpOworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCisJY29uZl9iYXNl ID0gZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZTsKKwlwZW5kX2Jhc2UgPSBnaWNf c2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXTsKKworCS8qIERpc2FibGUgTFBJ cyAqLworCWdpY3JfY3RsciA9IGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX0NUTFIpOworCWdp Y3JfY3RsciAmPSB+R0lDUl9DVExSX0xQSV9FTkFCTEU7CisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA0 LCBHSUNSX0NUTFIsIGdpY3JfY3Rscik7CisJLyogUGVyZm9ybSBmdWxsIHN5c3RlbSBiYXJyaWVy ICovCisJZHNiKHN5KTsKKworCS8qCisJICogU2V0IEdJQ1JfUFJPUEJBU0VSCisJICovCisKKwkv KgorCSAqIEZpbmQgb3V0IGhvdyBtYW55IGJpdHMgZG8gd2UgbmVlZCBmb3IgTFBJIGlkZW50aWZp ZXJzLgorCSAqIFJlbWFyayAxLjogRXZlbiB0aG91Z2ggd2UgaGF2ZSAoTFBJX0NPTkZUQUJfU0la RSAvIDgpIExQSXMKKwkgKgkgICAgICB0aGUgbm90aWZpZWQgTFBJIElEIHN0aWxsIHN0YXJ0cyBm cm9tIDgxOTIKKwkgKgkgICAgICAoR0lDX0ZJUlNUX0xQSSkuCisJICogUmVtYXJrIDIuOiBUaGlz IGNvdWxkIGJlIGRvbmUgb24gY29tcGlsYXRpb24gdGltZSBidXQgdGhlcmUKKwkgKgkgICAgICBz ZWVtcyB0byBiZSBubyBzdWZmaWNpZW50IG1hY3JvLgorCSAqLworCWlkYml0cyA9IGZsc2woTFBJ X0NPTkZUQUJfU0laRSArIEdJQ19GSVJTVF9MUEkpIC0gMTsKKworCS8qIFNldCBkZWZhdWx0czog Tm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUgPSBHSUNSX1BST1BCQVNFUl9DQUNIRV9O SVdBV0I7CisJc2hhcmUgPSBHSUNSX1BST1BCQVNFUl9TSEFSRV9JUzsKKworCWdpY3JfeGJhc2Vy ID0gdnRvcGh5cyhjb25mX2Jhc2UpIHwKKwkgICAgKChpZGJpdHMgLSAxKSAmIEdJQ1JfUFJPUEJB U0VSX0lEQklUU19NQVNLKSB8CisJICAgIChjYWNoZSA8PCBHSUNSX1BST1BCQVNFUl9DQUNIRV9T SElGVCkgfAorCSAgICAoc2hhcmUgPDwgR0lDUl9QUk9QQkFTRVJfU0hBUkVfU0hJRlQpOworCisJ Z2ljX3Jfd3JpdGUoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUiwgZ2ljcl94YmFzZXIpOworCWdp Y3JfdGVtcCA9IGdpY19yX3JlYWQoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUik7CisKKwlpZiAo KGdpY3JfeGJhc2VyIF4gZ2ljcl90ZW1wKSAmIEdJQ1JfUFJPUEJBU0VSX1NIQVJFX01BU0spIHsK KwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAg IldpbGwgdXNlIGNhY2hlIGZsdXNoaW5nIGZvciBMUEkgIgorCQkJICAgICJDb25maWd1cmF0aW9u IFRhYmxlXG4iKTsKKwkJfQorCQlnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuZmxhZ3MgfD0gTFBJ X0ZMQUdTX0NPTkZfRkxVU0g7CisJfQorCisJLyoKKwkgKiBTZXQgR0lDUl9QRU5EQkFTRVIKKwkg Ki8KKworCS8qIFNldCBkZWZhdWx0czogTm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUg PSBHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSVdBV0I7CisJc2hhcmUgPSBHSUNSX1BFTkRCQVNFUl9T SEFSRV9JUzsKKworCWdpY3JfeGJhc2VyID0gdnRvcGh5cyhwZW5kX2Jhc2UpIHwKKwkgICAgKGNh Y2hlIDw8IEdJQ1JfUEVOREJBU0VSX0NBQ0hFX1NISUZUKSB8CisJICAgIChzaGFyZSA8PCBHSUNS X1BFTkRCQVNFUl9TSEFSRV9TSElGVCk7CisKKwlnaWNfcl93cml0ZShnaWNfc2MsIDgsIEdJQ1Jf UEVOREJBU0VSLCBnaWNyX3hiYXNlcik7CisKKwkvKiBFbmFibGUgTFBJcyAqLworCWdpY3JfY3Rs ciA9IGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX0NUTFIpOworCWdpY3JfY3RsciB8PSBHSUNS X0NUTFJfTFBJX0VOQUJMRTsKKwlnaWNfcl93cml0ZShnaWNfc2MsIDQsIEdJQ1JfQ1RMUiwgZ2lj cl9jdGxyKTsKKworCWRzYihzeSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cits cGlfYml0bWFwX2luaXQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90 IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpnaWNfc2M7CisJdWludDMyX3QgbHBpX2lk X251bTsKKwlzaXplX3QgbHBpX2NodW5rc19udW07CisJc2l6ZV90IGJpdHNfaW5fY2h1bms7CisK KwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2Vf Z2V0X3NvZnRjKHBhcmVudCk7CisKKwlscGlfaWRfbnVtID0gKDEgPDwgZ2ljX3NjLT5naWNfaWRi aXRzKSAtIDE7CisJLyogU3Vic3RyYWN0IElEcyBkZWRpY2F0ZWQgZm9yIFNHSXMsIFBQSXMgYW5k IFNQSXMgKi8KKwlscGlfaWRfbnVtIC09IEdJQ19GSVJTVF9MUEk7CisKKwlzYy0+aXRzX2xwaV9t YXhpZCA9IGxwaV9pZF9udW07CisKKwliaXRzX2luX2NodW5rID0gc2l6ZW9mKCpzYy0+aXRzX2xw aV9iaXRtYXApICogTkJCWTsKKworCS8qCisJICogUm91bmQgdXAgdG8gdGhlIG51bWJlciBvZiBi aXRzIGluIGNodW5rLgorCSAqIFdlIHdpbGwgbmVlZCB0byB0YWtlIGNhcmUgdG8gYXZvaWQgdXNp bmcgaW52YWxpZCBMUEkgSURzIGxhdGVyLgorCSAqLworCWxwaV9pZF9udW0gPSByb3VuZHVwMihs cGlfaWRfbnVtLCBiaXRzX2luX2NodW5rKTsKKwlscGlfY2h1bmtzX251bSA9IGxwaV9pZF9udW0g LyBiaXRzX2luX2NodW5rOworCisJc2MtPml0c19scGlfYml0bWFwID0KKwkgICAgY29udGlnbWFs bG9jKChscGlfY2h1bmtzX251bSAqIHNpemVvZigqc2MtPml0c19scGlfYml0bWFwKSksCisJICAg IE1fR0lDX1YzX0lUUywgTV9XQUlUT0sgfCBNX1pFUk8sIDAsIH4wVUwsCisJICAgIHNpemVvZigq c2MtPml0c19scGlfYml0bWFwKSwgMCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50 CitscGlfYWxsb2NfY2h1bmsoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgbHBp X2NodW5rICpscGljLAorICAgIHVfaW50IG52ZWNzKQoreworCWludCBmY2xyOyAvKiBGaXJzdCBj bGVhcmVkIGJpdCAqLworCXVpbnQ4X3QgKmJpdG1hcDsKKwlzaXplX3QgbmIsIGk7CisKKwliaXRt YXAgPSAodWludDhfdCAqKXNjLT5pdHNfbHBpX2JpdG1hcDsKKworCWZjbHIgPSAwOworcmV0cnk6 CisJLyogQ2hlY2sgb3RoZXIgYml0cyAtIHNsb29vb3cgKi8KKwlmb3IgKGkgPSAwLCBuYiA9IGZj bHI7IGkgPCBudmVjczsgaSsrLCBuYisrKSB7CisJCWlmIChuYiA+IHNjLT5pdHNfbHBpX21heGlk KQorCQkJcmV0dXJuIChFSU5WQUwpOworCisJCWlmIChpc3NldChiaXRtYXAsIG5iKSkgeworCQkJ LyogVG8gbGl0dGxlIGZyZWUgYml0cyBpbiB0aGlzIGFyZWEuIE1vdmUgb24uICovCisJCQlmY2xy ID0gbmIgKyAxOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwkvKiBUaGlzIGFyZWEgaXMgZnJl ZS4gVGFrZSBpdC4gKi8KKwliaXRfbnNldChiaXRtYXAsIGZjbHIsIGZjbHIgKyBudmVjcyAtIDEp OworCWxwaWMtPmxwaV9iYXNlID0gZmNsciArIEdJQ19GSVJTVF9MUEk7CisJbHBpYy0+bHBpX251 bSA9IG52ZWNzOworCWxwaWMtPmxwaV9mcmVlID0gbHBpYy0+bHBpX251bTsKKworCXJldHVybiAo MCk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfY29uZmlndXJlKHN0cnVjdCBnaWNfdjNfaXRzX3Nv ZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWludDMyX3QgbHBpbnVtLCBi b29sZWFuX3QgdW5tYXNrKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3Nv ZnRjICpnaWNfc2M7CisJdWludDhfdCAqY29uZl9ieXRlOworCisJcGFyZW50ID0gZGV2aWNlX2dl dF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOwor CisJY29uZl9ieXRlID0gKHVpbnQ4X3QgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9i YXNlOworCWNvbmZfYnl0ZSArPSAobHBpbnVtIC0gR0lDX0ZJUlNUX0xQSSk7CisKKwlpZiAodW5t YXNrKQorCQkqY29uZl9ieXRlIHw9IExQSV9DT05GX0VOQUJMRTsKKwllbHNlCisJCSpjb25mX2J5 dGUgJj0gfkxQSV9DT05GX0VOQUJMRTsKKworCWlmIChnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMu ZmxhZ3MgJiBMUElfRkxBR1NfQ09ORl9GTFVTSCkgeworCQkvKiBDbGVhbiBELWNhY2hlIHVuZGVy IGNvbmZpZ3VyYXRpb24gYnl0ZSAqLworCQljcHVfZGNhY2hlX3diX3JhbmdlKCh2bV9vZmZzZXRf dCljb25mX2J5dGUsIHNpemVvZigqY29uZl9ieXRlKSk7CisJfSBlbHNlIHsKKwkJLyogRFNCIGlu bmVyIHNoYXJlYWJsZSwgc3RvcmUgKi8KKwkJZHNiKGlzaHN0KTsKKwl9CisKKwlpdHNfY21kX2lu dihzYywgaXRzX2RldiwgbHBpbnVtKTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9tYXBfdG9fZGV2 aWNlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYs CisgICAgdWludDMyX3QgaWQsIHVpbnQzMl90IHBpZCkKK3sKKworCUtBU1NFUlQoKHBpZCA+PSBp dHNfZGV2LT5scGlzLmxwaV9iYXNlKSAmJgorCQkocGlkIDwgKGl0c19kZXYtPmxwaXMubHBpX2Jh c2UgKyBpdHNfZGV2LT5scGlzLmxwaV9udW0pKSwKKwkJKCJUcnlpbmcgdG8gbWFwIGl2YWxpZCBM UEkgJXUgZm9yIHRoaXMgZGV2aWNlXG4iLCBwaWQpKTsKKworCWl0c19jbWRfbWFwdmkoc2MsIGl0 c19kZXYsIGlkLCBwaWQpOworfQorCitzdGF0aWMgdm9pZAorbHBpX3htYXNrX2lycShkZXZpY2Vf dCBwYXJlbnQsIHVpbnQzMl90IGlycSwgYm9vbGVhbl90IHVubWFzaykKK3sKKwlzdHJ1Y3QgaXRz X2RldiAqaXRzX2RldjsKKworCVRBSUxRX0ZPUkVBQ0goaXRzX2RldiwgJml0c19zYy0+aXRzX2Rl dl9saXN0LCBlbnRyeSkgeworCQlpZiAoaXJxID49IGl0c19kZXYtPmxwaXMubHBpX2Jhc2UgJiYK KwkJICAgIGlycSA8IChpdHNfZGV2LT5scGlzLmxwaV9iYXNlICsgaXRzX2Rldi0+bHBpcy5scGlf bnVtKSkgeworCQkJbHBpX2NvbmZpZ3VyZShpdHNfc2MsIGl0c19kZXYsIGlycSwgdW5tYXNrKTsK KwkJCXJldHVybjsKKwkJfQorCX0KKworCUtBU1NFUlQoMCwgKCJUcnlpbmcgdG8gJXMgbm90IGV4 aXN0aW5nIExQSTogJXVcbiIsCisJICAgICh1bm1hc2sgPT0gVFJVRSkgPyAidW5tYXNrIiA6ICJt YXNrIiwgaXJxKSk7Cit9CisKK3ZvaWQKK2xwaV91bm1hc2tfaXJxKGRldmljZV90IHBhcmVudCwg dWludDMyX3QgaXJxKQoreworCisJbHBpX3htYXNrX2lycShwYXJlbnQsIGlycSwgMSk7Cit9CisK K3ZvaWQKK2xwaV9tYXNrX2lycShkZXZpY2VfdCBwYXJlbnQsIHVpbnQzMl90IGlycSkKK3sKKwor CWxwaV94bWFza19pcnEocGFyZW50LCBpcnEsIDApOworfQorCisvKgorICogQ29tbWFuZHMgaGFu ZGxpbmcuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfY29tbWFuZChz dHJ1Y3QgaXRzX2NtZCAqY21kLCB1aW50OF90IGNtZF90eXBlKQoreworCS8qIENvbW1hbmQgZmll bGQ6IERXMCBbNzowXSAqLworCWNtZC0+Y21kX2R3b3JkWzBdICY9IH5DTURfQ09NTUFORF9NQVNL OworCWNtZC0+Y21kX2R3b3JkWzBdIHw9IGNtZF90eXBlOworfQorCitzdGF0aWMgX19pbmxpbmUg dm9pZAorY21kX2Zvcm1hdF9kZXZpZChzdHJ1Y3QgaXRzX2NtZCAqY21kLCB1aW50MzJfdCBkZXZp ZCkKK3sKKwkvKiBEZXZpY2UgSUQgZmllbGQ6IERXMCBbNjM6MzJdICovCisJY21kLT5jbWRfZHdv cmRbMF0gJj0gfkNNRF9ERVZJRF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzBdIHw9ICgodWludDY0 X3QpZGV2aWQgPDwgQ01EX0RFVklEX1NISUZUKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQK K2NtZF9mb3JtYXRfc2l6ZShzdHJ1Y3QgaXRzX2NtZCAqY21kLCB1aW50MTZfdCBzaXplKQorewor CS8qIFNpemUgZmllbGQ6IERXMSBbNDowXSAqLworCWNtZC0+Y21kX2R3b3JkWzFdICY9IH5DTURf U0laRV9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzFdIHw9IChzaXplICYgQ01EX1NJWkVfTUFTSyk7 Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X2lkKHN0cnVjdCBpdHNfY21k ICpjbWQsIHVpbnQzMl90IGlkKQoreworCS8qIElEIGZpZWxkOiBEVzEgWzMxOjBdICovCisJY21k LT5jbWRfZHdvcmRbMV0gJj0gfkNNRF9JRF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzFdIHw9IGlk OworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9waWQoc3RydWN0IGl0c19j bWQgKmNtZCwgdWludDMyX3QgcGlkKQoreworCS8qIFBoeXNpY2FsIElEIGZpZWxkOiBEVzEgWzYz OjMyXSAqLworCWNtZC0+Y21kX2R3b3JkWzFdICY9IH5DTURfUElEX01BU0s7CisJY21kLT5jbWRf ZHdvcmRbMV0gfD0gKCh1aW50NjRfdClwaWQgPDwgQ01EX1BJRF9TSElGVCk7Cit9CisKK3N0YXRp YyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X2NvbChzdHJ1Y3QgaXRzX2NtZCAqY21kLCB1aW50 MTZfdCBjb2xfaWQpCit7CisJLyogQ29sbGVjdGlvbiBmaWVsZDogRFcyIFsxNjowXSAqLworCWNt ZC0+Y21kX2R3b3JkWzJdICY9IH5DTURfQ09MX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMl0gfD0g Y29sX2lkOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF90YXJnZXQoc3Ry dWN0IGl0c19jbWQgKmNtZCwgdWludDY0X3QgdGFyZ2V0KQoreworCS8qIFRhcmdldCBBZGRyZXNz IGZpZWxkOiBEVzIgWzQ3OjE2XSAqLworCWNtZC0+Y21kX2R3b3JkWzJdICY9IH5DTURfVEFSR0VU X01BU0s7CisJY21kLT5jbWRfZHdvcmRbMl0gfD0gKHRhcmdldCAmIENNRF9UQVJHRVRfTUFTSyk7 Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X2l0dChzdHJ1Y3QgaXRzX2Nt ZCAqY21kLCB1aW50NjRfdCBpdHQpCit7CisJLyogSVRUIEFkZHJlc3MgZmllbGQ6IERXMiBbNDc6 OF0gKi8KKwljbWQtPmNtZF9kd29yZFsyXSAmPSB+Q01EX0lUVF9NQVNLOworCWNtZC0+Y21kX2R3 b3JkWzJdIHw9IChpdHQgJiBDTURfSVRUX01BU0spOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p ZAorY21kX2Zvcm1hdF92YWxpZChzdHJ1Y3QgaXRzX2NtZCAqY21kLCB1aW50OF90IHZhbGlkKQor eworCS8qIFZhbGlkIGZpZWxkOiBEVzIgWzYzXSAqLworCWNtZC0+Y21kX2R3b3JkWzJdICY9IH5D TURfVkFMSURfTUFTSzsKKwljbWQtPmNtZF9kd29yZFsyXSB8PSAoKHVpbnQ2NF90KXZhbGlkIDw8 IENNRF9WQUxJRF9TSElGVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZml4X2Vu ZGlhbihzdHJ1Y3QgaXRzX2NtZCAqY21kKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsg aSA8IG5pdGVtcyhjbWQtPmNtZF9kd29yZCk7IGkrKykKKwkJY21kLT5jbWRfZHdvcmRbaV0gPSBo dG9sZTY0KGNtZC0+Y21kX2R3b3JkW2ldKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfbWFw YyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY29sICpjb2wsIHVpbnQ4 X3QgdmFsaWQpCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5jbWRfdHlw ZSA9IElUU19DTURfTUFQQzsKKwlkZXNjLmNtZF9kZXNjX21hcGMuY29sID0gY29sOworCS8qCisJ ICogVmFsaWQgYml0IHNldCAtIG1hcCB0aGUgY29sbGVjdGlvbi4KKwkgKiBWYWxpZCBiaXQgY2xl YXJlZCAtIHVubWFwIHRoZSBjb2xsZWN0aW9uLgorCSAqLworCWRlc2MuY21kX2Rlc2NfbWFwYy52 YWxpZCA9IHZhbGlkOworCisJaXRzX2NtZF9zZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2 b2lkCitpdHNfY21kX21hcHZpKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0 c19kZXYgKml0c19kZXYsCisgICAgdWludDMyX3QgaWQsIHVpbnQzMl90IHBpZCkKK3sKKwlzdHJ1 Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90eXBlID0gSVRTX0NNRF9NQVBWSTsK KwlkZXNjLmNtZF9kZXNjX21hcHZpLml0c19kZXYgPSBpdHNfZGV2OworCWRlc2MuY21kX2Rlc2Nf bWFwdmkuaWQgPSBpZDsKKwlkZXNjLmNtZF9kZXNjX21hcHZpLnBpZCA9IHBpZDsKKworCWl0c19j bWRfc2VuZChzYywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZCBfX3VudXNlZAoraXRzX2NtZF9t YXBpKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYs CisgICAgdWludDMyX3QgbHBpbnVtKQoreworCXN0cnVjdCBpdHNfY21kX2Rlc2MgZGVzYzsKKwor CWRlc2MuY21kX3R5cGUgPSBJVFNfQ01EX01BUEk7CisJZGVzYy5jbWRfZGVzY19tYXBpLml0c19k ZXYgPSBpdHNfZGV2OworCWRlc2MuY21kX2Rlc2NfbWFwaS5scGludW0gPSBscGludW07CisKKwlp dHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfbWFwZChz dHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfZGV2ICppdHNfZGV2LAorICAg IHVpbnQ4X3QgdmFsaWQpCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5j bWRfdHlwZSA9IElUU19DTURfTUFQRDsKKwlkZXNjLmNtZF9kZXNjX21hcGQuaXRzX2RldiA9IGl0 c19kZXY7CisJZGVzYy5jbWRfZGVzY19tYXBkLnZhbGlkID0gdmFsaWQ7CisKKwlpdHNfY21kX3Nl bmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfaW52KHN0cnVjdCBnaWNf djNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWludDMyX3Qg bHBpbnVtKQoreworCXN0cnVjdCBpdHNfY21kX2Rlc2MgZGVzYzsKKworCWRlc2MuY21kX3R5cGUg PSBJVFNfQ01EX0lOVjsKKwlkZXNjLmNtZF9kZXNjX2ludi5scGludW0gPSBscGludW0gLSBpdHNf ZGV2LT5scGlzLmxwaV9iYXNlOworCWRlc2MuY21kX2Rlc2NfaW52Lml0c19kZXYgPSBpdHNfZGV2 OworCisJaXRzX2NtZF9zZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfY21k X2ludmFsbChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY29sICpjb2wp Cit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5jbWRfdHlwZSA9IElUU19D TURfSU5WQUxMOworCWRlc2MuY21kX2Rlc2NfaW52YWxsLmNvbCA9IGNvbDsKKworCWl0c19jbWRf c2VuZChzYywgJmRlc2MpOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmVzIGZvciBjb21tYW5k cyBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgX19pbmxpbmUgYm9vbGVhbl90CitpdHNfY21kX3F1 ZXVlX2Z1bGwoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjKQoreworCXNpemVfdCByZWFkX2lk eCwgd3JpdGVfaWR4OworCisJd3JpdGVfaWR4ID0gKHNpemVfdCkoc2MtPml0c19jbWRxX3dyaXRl IC0gc2MtPml0c19jbWRxX2Jhc2UpOworCXJlYWRfaWR4ID0gZ2ljX2l0c19yZWFkKHNjLCA0LCBH SVRTX0NSRUFEUikgLyBzaXplb2Yoc3RydWN0IGl0c19jbWQpOworCisJLyoKKwkgKiBUaGUgcXVl dWUgaXMgZnVsbCB3aGVuIHRoZSB3cml0ZSBvZmZzZXQgcG9pbnRzCisJICogYXQgdGhlIGNvbW1h bmQgYmVmb3JlIHRoZSBjdXJyZW50IHJlYWQgb2Zmc2V0LgorCSAqLworCWlmICgoKHdyaXRlX2lk eCArIDEpICUgSVRTX0NNRFFfTkVOVFJJRVMpID09IHJlYWRfaWR4KQorCQlyZXR1cm4gKFRSVUUp OworCisJcmV0dXJuIChGQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitpdHNfY21k X3N5bmMoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2NtZCAqY21kKQor eworCisJaWYgKHNjLT5pdHNfZmxhZ3MgJiBJVFNfRkxBR1NfQ01EUV9GTFVTSCkgeworCQkvKiBD bGVhbiBELWNhY2hlIHVuZGVyIGNvbW1hbmQuICovCisJCWNwdV9kY2FjaGVfd2JfcmFuZ2UoKHZt X29mZnNldF90KWNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl9IGVsc2UgeworCQkvKiBEU0IgaW5uZXIg c2hhcmVhYmxlLCBzdG9yZSAqLworCQlkc2IoaXNoc3QpOworCX0KKworfQorCitzdGF0aWMgc3Ry dWN0IGl0c19jbWQgKgoraXRzX2NtZF9hbGxvY19sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29m dGMgKnNjKQoreworCXN0cnVjdCBpdHNfY21kICpjbWQ7CisJc2l6ZV90IHVzX2xlZnQgPSAxMDAw MDAwOworCisJbXR4X2Fzc2VydCgmc2MtPml0c19zcGluX210eCwgTUFfT1dORUQpOworCXdoaWxl IChpdHNfY21kX3F1ZXVlX2Z1bGwoc2MpKSB7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkgeworCQkJ LyogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBmcmVlIGNvbW1hbmQgKi8KKwkJCWRldmljZV9w cmludGYoc2MtPmRldiwKKwkJCSAgICAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBmcmVlIGNv bW1hbmRcbiIpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlERUxBWSgxKTsKKwl9CisKKwlj bWQgPSBzYy0+aXRzX2NtZHFfd3JpdGU7CisJc2MtPml0c19jbWRxX3dyaXRlKys7CisKKwlpZiAo c2MtPml0c19jbWRxX3dyaXRlID09IChzYy0+aXRzX2NtZHFfYmFzZSArIElUU19DTURRX05FTlRS SUVTKSkgeworCQkvKiBXcmFwIHRoZSBxdWV1ZSAqLworCQlzYy0+aXRzX2NtZHFfd3JpdGUgPSBz Yy0+aXRzX2NtZHFfYmFzZTsKKwl9CisKKwlyZXR1cm4gKGNtZCk7Cit9CisKK3N0YXRpYyB1aW50 NjRfdAoraXRzX2NtZF9wcmVwYXJlKHN0cnVjdCBpdHNfY21kICpjbWQsIHN0cnVjdCBpdHNfY21k X2Rlc2MgKmRlc2MpCit7CisJdWludDY0X3QgdGFyZ2V0OworCXVpbnQ4X3QgY21kX3R5cGU7CisJ dV9pbnQgc2l6ZTsKKwlib29sZWFuX3QgZXJyb3I7CisKKwllcnJvciA9IEZBTFNFOworCWNtZF90 eXBlID0gZGVzYy0+Y21kX3R5cGU7CisJdGFyZ2V0ID0gSVRTX1RBUkdFVF9OT05FOworCisJc3dp dGNoIChjbWRfdHlwZSkgeworCWNhc2UgSVRTX0NNRF9TWU5DOgkvKiBXYWl0IGZvciBwcmV2aW91 cyBjb21tYW5kcyBjb21wbGV0aW9uICovCisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNjX3N5bmMu Y29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX1NZTkMp OworCQljbWRfZm9ybWF0X3RhcmdldChjbWQsIHRhcmdldCk7CisJCWJyZWFrOworCWNhc2UgSVRT X0NNRF9NQVBEOgkvKiBBc3NpZ24gSVRUIHRvIGRldmljZSAqLworCQl0YXJnZXQgPSBkZXNjLT5j bWRfZGVzY19tYXBkLml0c19kZXYtPmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21t YW5kKGNtZCwgSVRTX0NNRF9NQVBEKTsKKwkJY21kX2Zvcm1hdF9pdHQoY21kLCB2dG9waHlzKGRl c2MtPmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+aXR0KSk7CisJCS8qCisJCSAqIFNpemUgZGVzY3Jp YmVzIG51bWJlciBvZiBiaXRzIHRvIGVuY29kZSBpbnRlcnJ1cHQgSURzCisJCSAqIHN1cHBvcnRl ZCBieSB0aGUgZGV2aWNlIG1pbnVzIG9uZS4KKwkJICogV2hlbiBWICh2YWxpZCkgYml0IGlzIHpl cm8sIHRoaXMgZmllbGQgc2hvdWxkIGJlIHdyaXR0ZW4KKwkJICogYXMgemVyby4KKwkJICovCisJ CWlmIChkZXNjLT5jbWRfZGVzY19tYXBkLnZhbGlkKSB7CisJCQlzaXplID0KKwkJCSAgICBNQVgo MSwgZmxzbChkZXNjLT5jbWRfZGVzY19tYXBkLml0c19kZXYtPmxwaXMubHBpX251bSkpIC0gMTsK KwkJfSBlbHNlCisJCQlzaXplID0gMDsKKworCQljbWRfZm9ybWF0X3NpemUoY21kLCBzaXplKTsK KwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+ZGV2 aWQpOworCQljbWRfZm9ybWF0X3ZhbGlkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwZC52YWxpZCk7 CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9NQVBDOgkvKiBNYXAgY29sbGVjdGlvbiB0byBSZS1E aXN0cmlidXRvciAqLworCQl0YXJnZXQgPSBkZXNjLT5jbWRfZGVzY19tYXBjLmNvbC0+Y29sX3Rh cmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5kKGNtZCwgSVRTX0NNRF9NQVBDKTsKKwkJY21kX2Zv cm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19tYXBjLmNvbC0+Y29sX2lkKTsKKwkJY21kX2Zv cm1hdF92YWxpZChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcGMudmFsaWQpOworCQljbWRfZm9ybWF0 X3RhcmdldChjbWQsIHRhcmdldCk7CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9NQVBWSToKKwkJ dGFyZ2V0ID0gZGVzYy0+Y21kX2Rlc2NfbWFwdmkuaXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0Owor CQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX01BUFZJKTsKKwkJY21kX2Zvcm1hdF9k ZXZpZChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcHZpLml0c19kZXYtPmRldmlkKTsKKwkJY21kX2Zv cm1hdF9pZChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcHZpLmlkKTsKKwkJY21kX2Zvcm1hdF9waWQo Y21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5waWQpOworCQljbWRfZm9ybWF0X2NvbChjbWQsIGRl c2MtPmNtZF9kZXNjX21hcHZpLml0c19kZXYtPmNvbC0+Y29sX2lkKTsKKwkJYnJlYWs7CisJY2Fz ZSBJVFNfQ01EX01BUEk6CisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNjX21hcGkuaXRzX2Rldi0+ Y29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX01BUEkp OworCQljbWRfZm9ybWF0X2RldmlkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwaS5pdHNfZGV2LT5k ZXZpZCk7CisJCWNtZF9mb3JtYXRfaWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXBpLmxwaW51bSk7 CisJCWNtZF9mb3JtYXRfY29sKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwaS5pdHNfZGV2LT5jb2wt PmNvbF9pZCk7CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9JTlY6CisJCXRhcmdldCA9IGRlc2Mt PmNtZF9kZXNjX2ludi5pdHNfZGV2LT5jb2wtPmNvbF90YXJnZXQ7CisJCWNtZF9mb3JtYXRfY29t bWFuZChjbWQsIElUU19DTURfSU5WKTsKKwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNt ZF9kZXNjX2ludi5pdHNfZGV2LT5kZXZpZCk7CisJCWNtZF9mb3JtYXRfaWQoY21kLCBkZXNjLT5j bWRfZGVzY19pbnYubHBpbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBJVFNfQ01EX0lOVkFMTDoKKwkJ Y21kX2Zvcm1hdF9jb21tYW5kKGNtZCwgSVRTX0NNRF9JTlZBTEwpOworCQljbWRfZm9ybWF0X2Nv bChjbWQsIGRlc2MtPmNtZF9kZXNjX2ludmFsbC5jb2wtPmNvbF9pZCk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWVycm9yID0gVFJVRTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFlcnJvcikKKwkJ Y21kX2ZpeF9lbmRpYW4oY21kKTsKKworCXJldHVybiAodGFyZ2V0KTsKK30KKworc3RhdGljIF9f aW5saW5lIHVpbnQ2NF90CitpdHNfY21kX2N3cml0ZXJfb2Zmc2V0KHN0cnVjdCBnaWNfdjNfaXRz X3NvZnRjICpzYywgc3RydWN0IGl0c19jbWQgKmNtZCkKK3sKKwl1aW50NjRfdCBvZmY7CisKKwlv ZmYgPSAoY21kIC0gc2MtPml0c19jbWRxX2Jhc2UpICogc2l6ZW9mKCpjbWQpOworCisJcmV0dXJu IChvZmYpOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF93YWl0X2NvbXBsZXRpb24oc3RydWN0 IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2NtZCAqY21kX2ZpcnN0LAorICAgIHN0 cnVjdCBpdHNfY21kICpjbWRfbGFzdCkKK3sKKwl1aW50NjRfdCBmaXJzdCwgbGFzdCwgcmVhZDsK KwlzaXplX3QgdXNfbGVmdCA9IDEwMDAwMDA7CisKKwlmaXJzdCA9IGl0c19jbWRfY3dyaXRlcl9v ZmZzZXQoc2MsIGNtZF9maXJzdCk7CisJbGFzdCA9IGl0c19jbWRfY3dyaXRlcl9vZmZzZXQoc2Ms IGNtZF9sYXN0KTsKKworCXdoaWxlICgxKSB7CisJCXJlYWQgPSBnaWNfaXRzX3JlYWQoc2MsIDgs IEdJVFNfQ1JFQURSKTsKKwkJaWYgKHJlYWQgPCBmaXJzdCB8fCByZWFkID49IGxhc3QpCisJCQli cmVhazsKKworCQlpZiAodXNfbGVmdC0tID09IDApIHsKKwkJCS8qIFRoaXMgbWVhbnMgdGltZW91 dCAqLworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJUaW1lb3V0IHdoaWxlIHdh aXRpbmcgZm9yIENNRCBjb21wbGV0aW9uLlxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJREVMQVko MSk7CisJfQorfQorCitzdGF0aWMgaW50CitpdHNfY21kX3NlbmQoc3RydWN0IGdpY192M19pdHNf c29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2NtZF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpdHNfY21k ICpjbWQsICpjbWRfc3luYzsKKwlzdHJ1Y3QgaXRzX2NvbCBjb2xfc3luYzsKKwlzdHJ1Y3QgaXRz X2NtZF9kZXNjIGRlc2Nfc3luYzsKKwl1aW50NjRfdCB0YXJnZXQsIGN3cml0ZXI7CisKKwltdHhf bG9ja19zcGluKCZzYy0+aXRzX3NwaW5fbXR4KTsKKwljbWQgPSBpdHNfY21kX2FsbG9jX2xvY2tl ZChzYyk7CisJbXR4X3VubG9ja19zcGluKCZzYy0+aXRzX3NwaW5fbXR4KTsKKwlpZiAoIWNtZCkg eworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJubyBtZW1vcnkgZm9yIGNtZCBxdWV1ZVxuIik7 CisJCXJldHVybiAoRUJVU1kpOworCX0KKworCXRhcmdldCA9IGl0c19jbWRfcHJlcGFyZShjbWQs IGRlc2MpOworCWl0c19jbWRfc3luYyhzYywgY21kKTsKKworCWlmICh0YXJnZXQgIT0gSVRTX1RB UkdFVF9OT05FKSB7CisJCW10eF9sb2NrX3NwaW4oJnNjLT5pdHNfc3Bpbl9tdHgpOworCQljbWRf c3luYyA9IGl0c19jbWRfYWxsb2NfbG9ja2VkKHNjKTsKKwkJbXR4X3VubG9ja19zcGluKCZzYy0+ aXRzX3NwaW5fbXR4KTsKKwkJaWYgKCFjbWRfc3luYykKKwkJCWdvdG8gZW5kOworCQlkZXNjX3N5 bmMuY21kX3R5cGUgPSBJVFNfQ01EX1NZTkM7CisJCWNvbF9zeW5jLmNvbF90YXJnZXQgPSB0YXJn ZXQ7CisJCWRlc2Nfc3luYy5jbWRfZGVzY19zeW5jLmNvbCA9ICZjb2xfc3luYzsKKwkJaXRzX2Nt ZF9wcmVwYXJlKGNtZF9zeW5jLCAmZGVzY19zeW5jKTsKKwkJaXRzX2NtZF9zeW5jKHNjLCBjbWRf c3luYyk7CisJfQorZW5kOgorCS8qIFVwZGF0ZSBHSVRTX0NXUklURVIgKi8KKwltdHhfbG9ja19z cGluKCZzYy0+aXRzX3NwaW5fbXR4KTsKKwljd3JpdGVyID0gaXRzX2NtZF9jd3JpdGVyX29mZnNl dChzYywgc2MtPml0c19jbWRxX3dyaXRlKTsKKwlnaWNfaXRzX3dyaXRlKHNjLCA4LCBHSVRTX0NX UklURVIsIGN3cml0ZXIpOworCW10eF91bmxvY2tfc3Bpbigmc2MtPml0c19zcGluX210eCk7CisK KwlpdHNfY21kX3dhaXRfY29tcGxldGlvbihzYywgY21kLCBzYy0+aXRzX2NtZHFfd3JpdGUpOwor CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBpdHNfZGV2ICoKK2l0c19kZXZpY2Vf ZmluZF9sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBkZXZpY2VfdCBwY2lfZGV2 KQoreworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJbXR4X2Fzc2VydCgmc2MtPml0c19t dHgsIE1BX09XTkVEKTsKKwkvKiBGaW5kIGV4aXN0aW5nIGRldmljZSBpZiBhbnkgKi8KKwlUQUlM UV9GT1JFQUNIKGl0c19kZXYsICZzYy0+aXRzX2Rldl9saXN0LCBlbnRyeSkgeworCQlpZiAoaXRz X2Rldi0+cGNpX2RldiA9PSBwY2lfZGV2KQorCQkJcmV0dXJuIChpdHNfZGV2KTsKKwl9CisKKwly ZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGl0c19kZXYgKgoraXRzX2RldmljZV9h bGxvY19sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBkZXZpY2VfdCBwY2lfZGV2 LAorICAgIHVfaW50IG52ZWNzKQoreworCXN0cnVjdCBpdHNfZGV2CSpuZXdkZXY7CisJdWludDY0 X3QgdHlwZXI7CisJdWludDMyX3QgZGV2aWQ7CisJdV9pbnQgY3B1aWQ7CisJc2l6ZV90IGVzaXpl OworCisJbXR4X2Fzc2VydCgmc2MtPml0c19tdHgsIE1BX09XTkVEKTsKKwkvKiBGaW5kIGV4aXN0 aW5nIGRldmljZSBpZiBhbnkgKi8KKwluZXdkZXYgPSBpdHNfZGV2aWNlX2ZpbmRfbG9ja2VkKHNj LCBwY2lfZGV2KTsKKwlpZiAobmV3ZGV2ICE9IE5VTEwpCisJCXJldHVybiAobmV3ZGV2KTsKKwor CWRldmlkID0gUENJX0RFVklEKHBjaV9kZXYpOworCisJLyogVGhlcmUgd2FzIG5vIHByZXZpb3Vz bHkgY3JlYXRlZCBkZXZpY2UuIENyZWF0ZSBvbmUgbm93ICovCisJbmV3ZGV2ID0gbWFsbG9jKHNp emVvZigqbmV3ZGV2KSwgTV9HSUNfVjNfSVRTLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJbmV3ZGV2 LT5wY2lfZGV2ID0gcGNpX2RldjsKKwluZXdkZXYtPmRldmlkID0gZGV2aWQ7CisKKwlpZiAobHBp X2FsbG9jX2NodW5rKHNjLCAmbmV3ZGV2LT5scGlzLCBudmVjcykpIHsKKwkJZnJlZShuZXdkZXYs IE1fR0lDX1YzX0lUUyk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyogR2V0IElUVCBlbnRy eSBzaXplICovCisJdHlwZXIgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfVFlQRVIpOworCWVz aXplID0gR0lUU19UWVBFUl9JVFRFUyh0eXBlcik7CisJLyoKKwkgKiBBbGxvY2F0ZSBJVFQgZm9y IHRoaXMgZGV2aWNlLgorCSAqIFBBIGhhcyB0byBiZSAyNTYgQiBhbGlnbmVkLiBBdCBsZWFzdCB0 d28gZW50cmllcyBmb3IgZGV2aWNlLgorCSAqLworCW5ld2Rldi0+aXR0ID0gKHZtX29mZnNldF90 KWNvbnRpZ21hbGxvYygKKwkgICAgcm91bmR1cDIocm91bmR1cDIobnZlY3MsIDIpICogZXNpemUs IDB4MTAwKSwgTV9HSUNfVjNfSVRTLAorCSAgICAoTV9XQUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVM LCAweDEwMCwgMCk7CisKKwkvKiBYWFg6IEJpbmQgZGV2aWNlIGludGVycnVwdHMgdG8gdGhpcyBD UFUgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKwluZXdkZXYtPmNvbCA9ICZzYy0+aXRz X2NvbHNbY3B1aWRdOworCisJVEFJTFFfSU5TRVJUX1RBSUwoJnNjLT5pdHNfZGV2X2xpc3QsIG5l d2RldiwgZW50cnkpOworCisJLyogTWFwIGRldmljZSB0byBpdHMgSVRUICovCisJaXRzX2NtZF9t YXBkKHNjLCBuZXdkZXYsIDEpOworCisJcmV0dXJuIChuZXdkZXYpOworfQorCitzdGF0aWMgX19p bmxpbmUgdm9pZAoraXRzX2RldmljZV9hc2lnbl9scGlfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRz X3NvZnRjICpzYywKKyAgICBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwgdV9pbnQgKmlycSkKK3sK KworCW10eF9hc3NlcnQoJnNjLT5pdHNfbXR4LCBNQV9PV05FRCk7CisJS0FTU0VSVCgoaXRzX2Rl di0+bHBpcy5scGlfZnJlZSA+IDApLAorCSAgICAoIkNhbm5vdCBwcm92aWRlIG1vcmUgTFBJcyBm b3IgdGhpcyBkZXZpY2UuIExQSSBudW06ICV1LCBmcmVlICV1IiwKKwkgICAgaXRzX2Rldi0+bHBp cy5scGlfbnVtLCBpdHNfZGV2LT5scGlzLmxwaV9mcmVlKSk7CisJKmlycSA9IGl0c19kZXYtPmxw aXMubHBpX2Jhc2UgKyAoaXRzX2Rldi0+bHBpcy5scGlfbnVtIC0KKwkgICAgaXRzX2Rldi0+bHBp cy5scGlfZnJlZSk7CisJaXRzX2Rldi0+bHBpcy5scGlfZnJlZS0tOworfQorLyoKKyAqIE1lc3Nh Z2Ugc2lnbmFsbGVkIGludGVycnVwdHMgaGFuZGxpbmcuCisgKi8KKworLyoKKyAqIFhYWCBBUk02 NFRPRE86IFdhdGNoIG91dCBmb3IgImlycSIgdHlwZS4KKyAqCisgKiBJbiB0aGVvcnkgR0lDIGNh biBoYW5kbGUgdXAgdG8gKDJeMzIgLSAxKSBpbnRlcnJ1cHQgSURzIHdoZXJlYXMKKyAqIHdlIHBh c3MgImlycSIgcG9pbnRlciBvZiB0eXBlIGludGVnZXIuIFRoaXMgaXMgb2J2aW91c2x5IHdyb25n IGJ1dAorICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgd2F5IGFzIFBDSSBsYXllciB3YW50cyBpdCB0 byBiZSBkb25lLgorICogV0FSTklORzogZGV2aWQgbXVzdCBiZSBQQ0kgQlVTK0ZVTkNUSU9OIHBh aXIuCisgKi8KK2ludAorZ2ljX3YzX2l0c19hbGxvY19tc2l4KGRldmljZV90IGRldiwgZGV2aWNl X3QgcGNpX2RldiwgaW50ICppcnEpCit7CisJc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjOwor CXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCXVfaW50IG52ZWNzOworCisJc2MgPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CisKKwltdHhfbG9jaygmc2MtPml0c19tdHgpOworCW52ZWNzID0gUENJ X01TSVhfTlVNKHBjaV9kZXYpOworCisJLyoKKwkgKiBUT0RPOiBBbGxvY2F0ZSBkZXZpY2UgYXMg c2VlbiBieSBJVFMgaWYgbm90IGFscmVhZHkgYXZhaWxhYmxlLgorCSAqCSBOb3RpY2UgdGhhdCBN U0ktWCBpbnRlcnJ1cHRzIGFyZSBhbGxvY2F0ZWQgb24gb25lLWJ5LW9uZSBiYXNpcy4KKwkgKi8K KwlpdHNfZGV2ID0gaXRzX2RldmljZV9hbGxvY19sb2NrZWQoc2MsIHBjaV9kZXYsIG52ZWNzKTsK KwlpZiAoaXRzX2RldiA9PSBOVUxMKSB7CisJCW10eF91bmxvY2soJnNjLT5pdHNfbXR4KTsKKwkJ cmV0dXJuIChFTk9NRU0pOworCX0KKworCWl0c19kZXZpY2VfYXNpZ25fbHBpX2xvY2tlZChzYywg aXRzX2RldiwgaXJxKTsKKwltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisKKwlyZXR1cm4gKDAp OworfQorCitpbnQKK2dpY192M19pdHNfYWxsb2NfbXNpKGRldmljZV90IGRldiwgZGV2aWNlX3Qg cGNpX2RldiwgaW50IGNvdW50LCBpbnQgKmlycXMpCit7CisJc3RydWN0IGdpY192M19pdHNfc29m dGMgKnNjOworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJc2MgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CisKKwkvKiBBbGxvY2F0ZSBkZXZpY2UgYXMgc2VlbiBieSBJVFMgaWYgbm90IGFs cmVhZHkgYXZhaWxhYmxlLiAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRzX2RldiA9 IGl0c19kZXZpY2VfYWxsb2NfbG9ja2VkKHNjLCBwY2lfZGV2LCBjb3VudCk7CisJaWYgKGl0c19k ZXYgPT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisJCXJldHVybiAoRU5P TUVNKTsKKwl9CisKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJCWl0c19kZXZpY2Vf YXNpZ25fbHBpX2xvY2tlZChzYywgaXRzX2RldiwgaXJxcyk7CisJCWlycXMrKzsKKwl9CisJbXR4 X3VubG9jaygmc2MtPml0c19tdHgpOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitnaWNfdjNf aXRzX21hcF9tc2l4KGRldmljZV90IGRldiwgZGV2aWNlX3QgcGNpX2RldiwgaW50IGlycSwgdWlu dDY0X3QgKmFkZHIsCisgICAgdWludDMyX3QgKmRhdGEpCit7CisJc3RydWN0IGdpY192M19pdHNf c29mdGMgKnNjOworCWJ1c19zcGFjZV9oYW5kbGVfdCBpdHNfYnNoOworCXN0cnVjdCBpdHNfZGV2 ICppdHNfZGV2OworCXVpbnQ2NF90IGl0c19wYTsKKwl1aW50MzJfdCBpZDsKKworCXNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworCS8qIFZlcmlmeSB0aGF0IHRoaXMgZGV2aWNlIGlzIGFsbG9j YXRlZCBhbmQgb3ducyB0aGlzIExQSSAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRz X2RldiA9IGl0c19kZXZpY2VfZmluZF9sb2NrZWQoc2MsIHBjaV9kZXYpOworCW10eF91bmxvY2so JnNjLT5pdHNfbXR4KTsKKwlpZiAoaXRzX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7 CisKKwlpZCA9IGlycSAtIGl0c19kZXYtPmxwaXMubHBpX2Jhc2U7CisJbHBpX21hcF90b19kZXZp Y2Uoc2MsIGl0c19kZXYsIGlkLCBpcnEpOworCisJaXRzX2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRs ZSgmc2MtPml0c19yZXNbMF0pOworCWl0c19wYSA9IHZ0b3BoeXMoaXRzX2JzaCk7CisKKwkqYWRk ciA9IChpdHNfcGEgKyBHSVRTX1RSQU5TTEFURVIpOworCSpkYXRhID0gaWQ7CisKKwlyZXR1cm4g KDApOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYyBiL3N5cy9h cm02NC9hcm02NC9naWNfdjNfZmR0LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQu YworKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jCkBAIC02NSw2ICs2NSw5IEBACiBz dGF0aWMgaW50IGdpY192M19mZHRfYXR0YWNoKGRldmljZV90KTsKIHN0YXRpYyBpbnQgZ2ljX3Yz X2ZkdF9kZXRhY2goZGV2aWNlX3QpOwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlICogZ2ljX3Yz X2J1c19hbGxvY19yZXMoZGV2aWNlX3QsCisgICAgZGV2aWNlX3QsIGludCwgaW50ICosIHVfbG9u ZywgdV9sb25nLCB1X2xvbmcsIHVfaW50KTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZndfYnVz X2RldmluZm8gKgogZ2ljX3YzX29md19nZXRfZGV2aW5mbyhkZXZpY2VfdCBfX3VudXNlZCwgZGV2 aWNlX3QpOwogCkBAIC04MCw2ICs4MywxOCBAQAogCURFVk1FVEhPRChwaWNfbWFzaywJCWdpY192 M19tYXNrX2lycSksCiAJREVWTUVUSE9EKHBpY191bm1hc2ssCQlnaWNfdjNfdW5tYXNrX2lycSks CiAKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19hbGxvY19yZXNvdXJjZSwJ CWdpY192M19idXNfYWxsb2NfcmVzKSwKKwlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNl LAlidXNfZ2VuZXJpY19hY3RpdmF0ZV9yZXNvdXJjZSksCisKKwkvKiBvZndfYnVzIGludGVyZmFj ZSAqLworCURFVk1FVEhPRChvZndfYnVzX2dldF9kZXZpbmZvLAlnaWNfdjNfb2Z3X2dldF9kZXZp bmZvKSwKKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfY29tcGF0LAlvZndfYnVzX2dlbl9nZXRfY29t cGF0KSwKKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfbW9kZWwsCW9md19idXNfZ2VuX2dldF9tb2Rl bCksCisJREVWTUVUSE9EKG9md19idXNfZ2V0X25hbWUsCW9md19idXNfZ2VuX2dldF9uYW1lKSwK KwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfbm9kZSwJb2Z3X2J1c19nZW5fZ2V0X25vZGUpLAorCURF Vk1FVEhPRChvZndfYnVzX2dldF90eXBlLAlvZndfYnVzX2dlbl9nZXRfdHlwZSksCisKIAkvKiBF bmQgKi8KIAlERVZNRVRIT0RfRU5ECiB9OwpAQCAtOTYsNiArMTExLDExIEBACiAgICAgQlVTX1BB U1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKIAogLyoKKyAqIEhlbHBlciBm dW5jdGlvbnMgZGVjbGFyYXRpb25zLgorICovCitzdGF0aWMgaW50IGdpY192M19mZHRfYnVzX2F0 dGFjaChkZXZpY2VfdCk7CisKKy8qCiAgKiBEZXZpY2UgaW50ZXJmYWNlLgogICovCiBzdGF0aWMg aW50CkBAIC0xMzQsNiArMTU0LDE3IEBACiAJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOwogCWlm IChlcnIpCiAJCWdvdG8gZXJyb3I7CisJLyoKKwkgKiBUcnkgdG8gcmVnaXN0ZXIgSVRTIHRvIHRo aXMgR0lDLgorCSAqIEdJQyB3aWxsIGFjdCBhcyBhIGJ1cyBpbiB0aGF0IGNhc2UuCisJICogRmFp bHVyZSBoZXJlIHdpbGwgbm90IGFmZmVjdCBtYWluIEdJQyBmdW5jdGlvbmFsaXR5LgorCSAqLwor CWlmIChnaWNfdjNfZmR0X2J1c19hdHRhY2goZGV2KSkgeworCQlpZiAoYm9vdHZlcmJvc2UpIHsK KwkJCWRldmljZV9wcmludGYoZGV2LAorCQkJICAgICJGYWlsZWQgdG8gYXR0YWNoIElUUyB0byB0 aGlzIEdJQ1xuIik7CisJCX0KKwl9CiAKIAlyZXR1cm4gKGVycik7CiAKQEAgLTE1NCwzICsxODUs MTY5IEBACiAKIAlyZXR1cm4gKGdpY192M19kZXRhY2goZGV2KSk7CiB9CisKKy8qIG9md19idXMg aW50ZXJmYWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9md19idXNfZGV2aW5mbyAqCitnaWNf djNfb2Z3X2dldF9kZXZpbmZvKGRldmljZV90IGJ1cyBfX3VudXNlZCwgZGV2aWNlX3QgY2hpbGQp Cit7CisJc3RydWN0IGdpY192M19vZndfZGV2aW5mbyAqZGk7CisKKwlkaSA9IGRldmljZV9nZXRf aXZhcnMoY2hpbGQpOworCXJldHVybiAoJmRpLT5kaV9kaW5mbyk7Cit9CisKKy8qIEJ1cyBpbnRl cmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKgorZ2ljX3YzX2J1c19hbGxvY19yZXMo ZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHVf bG9uZyBzdGFydCwgdV9sb25nIGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykKK3sKKwlz dHJ1Y3QgZ2ljX3YzX29md19kZXZpbmZvICpkaTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRy eSAqcmxlOworCWludCByYW5nZXNfbGVuOworCisJaWYgKChzdGFydCA9PSAwVUwpICYmIChlbmQg PT0gfjBVTCkpIHsKKwkJaWYgKChkaSA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpKSA9PSBOVUxM KQorCQkJcmV0dXJuIChOVUxMKTsKKwkJaWYgKHR5cGUgIT0gU1lTX1JFU19NRU1PUlkpCisJCQly ZXR1cm4gKE5VTEwpOworCisJCS8qIEZpbmQgZGVmYXVsdHMgZm9yIHRoaXMgcmlkICovCisJCXJs ZSA9IHJlc291cmNlX2xpc3RfZmluZCgmZGktPmRpX3JsLCB0eXBlLCAqcmlkKTsKKwkJaWYgKHJs ZSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKworCQlzdGFydCA9IHJsZS0+c3RhcnQ7CisJ CWVuZCA9IHJsZS0+ZW5kOworCQljb3VudCA9IHJsZS0+Y291bnQ7CisJfQorCS8qCisJICogWFhY OiBObyByYW5nZXMgcmVtYXAhCisJICoJQWJzb2x1dGUgYWRkcmVzcyBpcyBleHBlY3RlZC4KKwkg Ki8KKwlpZiAob2Z3X2J1c19oYXNfcHJvcChidXMsICJyYW5nZXMiKSkgeworCQlyYW5nZXNfbGVu ID0gT0ZfZ2V0cHJvcGxlbihvZndfYnVzX2dldF9ub2RlKGJ1cyksICJyYW5nZXMiKTsKKwkJaWYg KHJhbmdlc19sZW4gIT0gMCkgeworCQkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQkJZGV2aWNlX3By aW50ZihjaGlsZCwKKwkJCQkgICAgIlJhbmdlcyByZW1hcCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJ CX0KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwl9CisJcmV0dXJuIChidXNfZ2VuZXJpY19hbGxv Y19yZXNvdXJjZShidXMsIGNoaWxkLCB0eXBlLCByaWQsIHN0YXJ0LCBlbmQsCisJICAgIGNvdW50 LCBmbGFncykpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zICovCisKKy8qCisgKiBCdXMgY2Fw YWJpbGl0eSBzdXBwb3J0IGZvciBHSUN2My4KKyAqIENvbGxlY3RzIGFuZCBjb25maWd1cmVzIGRl dmljZSBpbmZvcm1hdGlvbnMgYW5kIGZpbmFsbHkKKyAqIGFkZHMgSVRTIGRldmljZSBhcyBhIGNo aWxkIG9mIEdJQ3YzIGluIE5ld2J1cyBoaWVyYXJjaHkuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192 M19mZHRfYnVzX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19vZndfZGV2 aW5mbyAqZGk7CisJZGV2aWNlX3QgY2hpbGQ7CisJcGhhbmRsZV90IHBhcmVudCwgbm9kZTsKKwlw Y2VsbF90IGFkZHJfY2VsbHMsIHNpemVfY2VsbHM7CisKKwlwYXJlbnQgPSBvZndfYnVzX2dldF9u b2RlKGRldik7CisJaWYgKHBhcmVudCA+IDApIHsKKwkJYWRkcl9jZWxscyA9IDI7CisJCU9GX2dl dGVuY3Byb3AocGFyZW50LCAiI2FkZHJlc3MtY2VsbHMiLCAmYWRkcl9jZWxscywKKwkJICAgIHNp emVvZihhZGRyX2NlbGxzKSk7CisJCXNpemVfY2VsbHMgPSAyOworCQlPRl9nZXRlbmNwcm9wKHBh cmVudCwgIiNzaXplLWNlbGxzIiwgJnNpemVfY2VsbHMsCisJCSAgICBzaXplb2Yoc2l6ZV9jZWxs cykpOworCQkvKiBJdGVyYXRlIHRocm91Z2ggYWxsIEdJQyBzdWJvcmRpbmF0ZXMgKi8KKwkJZm9y IChub2RlID0gT0ZfY2hpbGQocGFyZW50KTsgbm9kZSA+IDA7IG5vZGUgPSBPRl9wZWVyKG5vZGUp KSB7CisJCQkvKiBBbGxvY2F0ZSBhbmQgcG9wdWxhdGUgZGV2aW5mby4gKi8KKwkJCWRpID0gbWFs bG9jKHNpemVvZigqZGkpLCBNX0dJQ19WMywgTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJaWYgKG9m d19idXNfZ2VuX3NldHVwX2RldmluZm8oJmRpLT5kaV9kaW5mbywgbm9kZSkpIHsKKwkJCQlpZiAo Ym9vdHZlcmJvc2UpIHsKKwkJCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkJCSAgICAiQ291bGQg bm90IHNldCB1cCBkZXZpbmZvIGZvciBJVFNcbiIpOworCQkJCX0KKwkJCQlmcmVlKGRpLCBNX0dJ Q19WMyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEluaXRpYWxpemUgYW5kIHBvcHVs YXRlIHJlc291cmNlIGxpc3QuICovCisJCQlyZXNvdXJjZV9saXN0X2luaXQoJmRpLT5kaV9ybCk7 CisJCQlvZndfYnVzX3JlZ190b19ybChkZXYsIG5vZGUsIGFkZHJfY2VsbHMsIHNpemVfY2VsbHMs CisJCQkgICAgJmRpLT5kaV9ybCk7CisKKwkJCS8qIFNob3VsZCBub3QgaGF2ZSBhbnkgaW50ZXJy dXB0cywgc28gZG9uJ3QgYWRkIGFueSAqLworCisJCQkvKiBBZGQgbmV3YnVzIGRldmljZSBmb3Ig dGhpcyBGRFQgbm9kZSAqLworCQkJY2hpbGQgPSBkZXZpY2VfYWRkX2NoaWxkKGRldiwgTlVMTCwg LTEpOworCQkJaWYgKCFjaGlsZCkgeworCQkJCWlmIChib290dmVyYm9zZSkgeworCQkJCQlkZXZp Y2VfcHJpbnRmKGRldiwKKwkJCQkJICAgICJDb3VsZCBub3QgYWRkIGNoaWxkOiAlc1xuIiwKKwkJ CQkJICAgIGRpLT5kaV9kaW5mby5vYmRfbmFtZSk7CisJCQkJfQorCQkJCXJlc291cmNlX2xpc3Rf ZnJlZSgmZGktPmRpX3JsKTsKKwkJCQlvZndfYnVzX2dlbl9kZXN0cm95X2RldmluZm8oJmRpLT5k aV9kaW5mbyk7CisJCQkJZnJlZShkaSwgTV9HSUNfVjMpOworCQkJCWNvbnRpbnVlOworCQkJfQor CisJCQlkZXZpY2Vfc2V0X2l2YXJzKGNoaWxkLCBkaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGJ1 c19nZW5lcmljX2F0dGFjaChkZXYpKTsKK30KKworc3RhdGljIGludCBnaWNfdjNfaXRzX2ZkdF9w cm9iZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBnaWNfdjNfaXRzX2ZkdF9hdHRhY2goZGV2 aWNlX3QgZGV2KTsKKworc3RhdGljIGRldmljZV9tZXRob2RfdCBnaWNfdjNfaXRzX21ldGhvZHNb XSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwJ CWdpY192M19pdHNfZmR0X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJZ2ljX3Yz X2l0c19mZHRfYXR0YWNoKSwKKworCS8qIFBJQyBpbnRlcmZhY2UgKi8KKwkvKiBNU0ktWCAqLwor CURFVk1FVEhPRChwaWNfYWxsb2NfbXNpeCwJZ2ljX3YzX2l0c19hbGxvY19tc2l4KSwKKwlERVZN RVRIT0QocGljX21hcF9tc2l4LAkJZ2ljX3YzX2l0c19tYXBfbXNpeCksCisJLyogTVNJICovCisJ REVWTUVUSE9EKHBpY19hbGxvY19tc2ksCWdpY192M19pdHNfYWxsb2NfbXNpKSwKKwlERVZNRVRI T0QocGljX21hcF9tc2ksCQlnaWNfdjNfaXRzX21hcF9tc2l4KSwKKworCS8qIEVuZCAqLworCURF Vk1FVEhPRF9FTkQKK307CisKK3N0YXRpYyBkcml2ZXJfdCBnaWNfdjNfaXRzX2RyaXZlciA9IHsK KwkiZ2ljLWl0cyIsCisJZ2ljX3YzX2l0c19tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZ2ljX3Yz X2l0c19zb2Z0YyksCit9OworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192M19pdHMsIGdpYywg Z2ljX3YzX2l0c19kcml2ZXIsIGdpY192M19pdHNfZGV2Y2xhc3MsIDAsIDAsCisgICAgQlVTX1BB U1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworc3RhdGljIGludAorZ2lj X3YzX2l0c19mZHRfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJaWYgKCFvZndfYnVzX3N0YXR1 c19va2F5KGRldikpCisJCXJldHVybiAoRU5YSU8pOworCisJaWYgKCFvZndfYnVzX2lzX2NvbXBh dGlibGUoZGV2LCBHSUNfVjNfSVRTX0NPTVBTVFIpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWRl dmljZV9zZXRfZGVzYyhkZXYsIEdJQ19WM19JVFNfREVWU1RSKTsKKwlyZXR1cm4gKEJVU19QUk9C RV9ERUZBVUxUKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX2l0c19mZHRfYXR0YWNoKGRldmlj ZV90IGRldikKK3sKKworCXJldHVybiAoZ2ljX3YzX2l0c19hdHRhY2goZGV2KSk7Cit9CmRpZmYg LS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192My5jCisrKyBiL3N5cy9hcm02NC9hcm02NC9n aWNfdjMuYwpAQCAtMjE5LDE5ICsyMTksMTggQEAKIAkJCWJyZWFrOwogCiAJCWlmIChfX3ByZWRp Y3RfdHJ1ZSgoYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfUFBJICYmCi0JCSAgICBhY3RpdmVfaXJx IDw9IEdJQ19MQVNUX1NQSSkpKSB7CisJCSAgICBhY3RpdmVfaXJxIDw9IEdJQ19MQVNUX1NQSSkg fHwgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJKSkgewogCQkJYXJtX2Rpc3BhdGNoX2ludHIo YWN0aXZlX2lycSwgZnJhbWUpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoYWN0aXZlX2ly cSA8PSBHSUNfTEFTVF9TR0kgfHwgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJKSB7CisJCWlm IChhY3RpdmVfaXJxIDw9IEdJQ19MQVNUX1NHSSkgewogCQkJLyoKLQkJCSAqIFRPRE86IEltcGxl bWVudCBwcm9wZXIgU0dJL0xQSSBoYW5kbGluZy4KKwkJCSAqIFRPRE86IEltcGxlbWVudCBwcm9w ZXIgU0dJIGhhbmRsaW5nLgogCQkJICogICAgICAgTWFzayBpdCBpZiBzdWNoIGlzIHJlY2VpdmVk IGZvciBzb21lIHJlYXNvbi4KIAkJCSAqLwogCQkJZGV2aWNlX3ByaW50ZihkZXYsCi0JCQkgICAg IlJlY2VpdmVkIHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiAlc1xuIiwKLQkJCSAgICBzY3Rp dmVfaXJxID49IEdJQ19GSVJTVF9MUEkgPyAiTFBJIiA6ICJTR0kiKTsKKwkJCSAgICAiUmVjZWl2 ZWQgdW5zdXBwb3J0ZWQgaW50ZXJydXB0IHR5cGU6IFNHSVxuIik7CiAJCQlQSUNfTUFTSyhkZXYs IGFjdGl2ZV9pcnEpOwogCQl9CiAJfQpAQCAtMjYxLDYgKzI2MCw4IEBACiAJfSBlbHNlIGlmIChp cnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4g ZGlzdHJpYnV0b3IgKi8KIAkJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVSKGlycSA+ PiA1KSwgbWFzayk7CiAJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCX0gZWxzZSBp ZiAoaXJxID49IEdJQ19GSVJTVF9MUEkpIHsgLyogTFBJcyAqLworCQlscGlfbWFza19pcnEoZGV2 LCBpcnEpOwogCX0gZWxzZSB7CiAJCUtBU1NFUlQoMCwgKCIlczogVW5zdXBwb3J0ZWQgSVJRIG51 bWJlciAldSIsIF9fZnVuY19fLCBpcnEpKTsKIAl9CkBAIC0yODQsNiArMjg1LDggQEAKIAl9IGVs c2UgaWYgKGlycSA+PSBHSUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyog U1BJcyBpbiBkaXN0cmlidXRvciAqLwogCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JU0VOQUJM RVIoaXJxID4+IDUpLCBtYXNrKTsKIAkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJ fSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX0xQSSkgeyAvKiBMUElzICovCisJCWxwaV91bm1h c2tfaXJxKGRldiwgaXJxKTsKIAl9IGVsc2UgewogCQlLQVNTRVJUKDAsICgiJXM6IFVuc3VwcG9y dGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJxKSk7CiAJfQoK --b1_3d0dd6449082dcf13167e54f7d0d6994--