From owner-freebsd-arm@FreeBSD.ORG Mon May 4 16:45:15 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 296C418B for ; Mon, 4 May 2015 16:45:15 +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 F34A21682 for ; Mon, 4 May 2015 16:45:14 +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 t44GjEAW073139 for ; Mon, 4 May 2015 16:45:14 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 t44GjEXJ073138; Mon, 4 May 2015 16:45:14 GMT (envelope-from daemon-user) Date: Mon, 4 May 2015 16:45:14 +0000 To: freebsd-arm@freebsd.org From: "zbb (Zbigniew Bodek)" Subject: [Differential] [Updated, 1, 019 lines] D2377: Introduce ARM GICv3 support Message-ID: <77e3339787d220e369108658a7915513@localhost.localdomain> X-Priority: 3 Thread-Topic: D2377: Introduce ARM GICv3 support 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: X-Phabricator-Cc: In-Reply-To: References: Thread-Index: MjA1ZGZkZWI5MTE4ZDk2Nzk0YzAyZGRiMWRiIFVHoho= 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_77e3339787d220e369108658a7915513" 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, 04 May 2015 16:45:15 -0000 --b1_77e3339787d220e369108658a7915513 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb removed rS FreeBSD src repository as the repository for this revision. zbb updated this revision to Diff 5180. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2377?vs=5024&id=5180 REVISION DETAIL https://reviews.freebsd.org/D2377 AFFECTED FILES sys/arm64/arm64/gic_v3.c sys/arm64/arm64/gic_v3_fdt.c sys/arm64/arm64/gic_v3_reg.h sys/arm64/arm64/gic_v3_var.h sys/arm64/arm64/locore.S sys/conf/files.arm64 EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: zbb, emaste, ian, imp, andrew, brueffer, joel, wblock Cc: kostikbel, emaste, andrew, imp, freebsd-arm --b1_77e3339787d220e369108658a7915513 Content-Type: text/x-patch; charset=utf-8; name="D2377.5180.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2377.5180.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTE4LDYgKzE4LDcgQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0 L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJ CXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJt NjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJt NjQvYXJtNjQvbG9jb3JlLlMgYi9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2Fy bTY0L2FybTY0L2xvY29yZS5TCisrKyBiL3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMzQs NiArMzQsOCBAQAogI2luY2x1ZGUgPG1hY2hpbmUvcGFyYW0uaD4KICNpbmNsdWRlIDxtYWNoaW5l L3B0ZS5oPgogCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorCiAjZGVmaW5lCVZJUlRfQklUUwkz OQogCiAJLmdsb2JsCWtlcm5iYXNlCkBAIC0xODcsNiArMTg5LDE4IEBACiAJbW92CXgyLCAjKFBT Ul9GIHwgUFNSX0kgfCBQU1JfQSB8IFBTUl9EIHwgUFNSX01fRUwxaCkKIAltc3IJc3Bzcl9lbDIs IHgyCiAKKwkvKiBDb25maWd1cmUgR0lDdjMgQ1BVIGludGVyZmFjZSAqLworCW1ycwl4MiwgaWRf YWE2NHBmcjBfZWwxCisJdWJmeAl4MiwgeDIsICMyNCwgIzQJCS8qIEdJQyBmaWVsZCAqLworCWNt cAl4MiwgIzB4MQkJLyogMDAwMSAtIFNSIENQVSBJRiBzdXBwb3J0ZWQgKi8KKwliLm5lCTJmCisK KwltcnMJeDIsIGljY19zcmVfZWwyCisJb3JyCXgyLCB4MiwgI0lDQ19TUkVfRUwyX0VOCS8qIEVu YWJsZSBhY2Nlc3MgZnJvbSBpbnNlY3VyZSBFTDEgKi8KKwltc3IJaWNjX3NyZV9lbDIsIHgyCisJ aXNiCisyOgorCiAJLyogU2V0IHRoZSBhZGRyZXNzIHRvIHJldHVybiB0byBvdXIgcmV0dXJuIGFk ZHJlc3MgKi8KIAltc3IJZWxyX2VsMiwgeDMwCiAKZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02 NC9naWNfdjNfdmFyLmggYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIu aApAQCAtMCwwICsxLDEwNyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVC 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 WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfR0lDX1YzX1ZBUl9IXworI2Rl ZmluZSBfR0lDX1YzX1ZBUl9IXworCisjZGVmaW5lCUdJQ19WM19ERVZTVFIJIkFSTSBHZW5lcmlj IEludGVycnVwdCBDb250cm9sbGVyIHYzLjAiCisKK3N0cnVjdCBnaWNfcmVkaXN0cyB7CisJLyoK KwkgKiBSZS1EaXN0cmlidXRvciByZWdpb24gZGVzY3JpcHRpb24uCisJICogV2Ugd2lsbCBoYXZl IGZldyBvZiB0aG9zZSBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgI3JlZGlzdHJpYnV0b3ItcmVnaW9u cyBwcm9wZXJ0eSBpbiBGRFQuCisJICovCisJc3RydWN0IHJlc291cmNlICoqCXJlZ2lvbnM7CisJ LyogTnVtYmVyIG9mIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMgKi8KKwl1X2ludAkJCW5yZWdpb25z OworCS8qIFBlci1DUFUgUmUtRGlzdHJpYnV0b3IgaGFuZGxlciAqLworCXN0cnVjdCByZXNvdXJj ZQkqCXBjcHVbTUFYQ1BVXTsKK307CisKK3N0cnVjdCBnaWNfdjNfc29mdGMgeworCWRldmljZV90 CQlkZXY7CisJc3RydWN0IHJlc291cmNlCSoqCWdpY19yZXM7CisJc3RydWN0IG10eAkJZ2ljX210 eDsKKwkvKiBEaXN0cmlidXRvciAqLworCXN0cnVjdCByZXNvdXJjZSAqCWdpY19kaXN0OworCS8q IFJlLURpc3RyaWJ1dG9ycyAqLworCXN0cnVjdCBnaWNfcmVkaXN0cwlnaWNfcmVkaXN0czsKKwor CXVfaW50CQkJZ2ljX25pcnFzOworCXVfaW50CQkJZ2ljX2lkYml0czsKK307CisKK2V4dGVybiBk ZXZjbGFzc190IGdpY192M19kZXZjbGFzczsKKworTUFMTE9DX0RFQ0xBUkUoTV9HSUNfVjMpOwor CisvKiBEZXZpY2UgYW5kIFBJQyBtZXRob2RzICovCitpbnQgZ2ljX3YzX2F0dGFjaChkZXZpY2Vf dCBkZXYpOworaW50IGdpY192M19kZXRhY2goZGV2aWNlX3QgZGV2KTsKKwordm9pZCBnaWNfdjNf ZGlzcGF0Y2goZGV2aWNlX3QsIHN0cnVjdCB0cmFwZnJhbWUgKik7Cit2b2lkIGdpY192M19lb2ko ZGV2aWNlX3QsIHVfaW50KTsKK3ZvaWQgZ2ljX3YzX21hc2tfaXJxKGRldmljZV90LCB1X2ludCk7 Cit2b2lkIGdpY192M191bm1hc2tfaXJxKGRldmljZV90LCB1X2ludCk7CisKKy8qCisgKiBHSUMg RGlzdHJpYnV0b3IgYWNjZXNzb3JzLgorICogTm90aWNlIHRoYXQgb25seSBHSUMgc29mYyBjYW4g YmUgcGFzc2VkLgorICovCisjZGVmaW5lCWdpY19kX3JlYWQoc2MsIGxlbiwgcmVnKQkJXAorKHsJ CQkJCQlcCisJYnVzX3JlYWRfIyNsZW4oc2MtPmdpY19kaXN0LCByZWcpOwlcCit9KQorCisjZGVm aW5lCWdpY19kX3dyaXRlKHNjLCBsZW4sIHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJYnVzX3dy aXRlXyMjbGVuKHNjLT5naWNfZGlzdCwgcmVnLCB2YWwpO1wKK30pCisKKy8qIEdJQyBSZS1EaXN0 cmlidXRvciBhY2Nlc3NvcnMgKHBlci1DUFUpICovCisjZGVmaW5lCWdpY19yX3JlYWQoc2MsIGxl biwgcmVnKQkJXAorKHsJCQkJCQlcCisJdV9pbnQgY3B1ID0gUENQVV9HRVQoY3B1aWQpOwkJXAor CQkJCQkJXAorCWJ1c19yZWFkXyMjbGVuKAkJCQlcCisJICAgIHNjLT5naWNfcmVkaXN0cy5wY3B1 W2NwdV0sCQlcCisJICAgIHJlZyk7CQkJCVwKK30pCisKKyNkZWZpbmUJZ2ljX3Jfd3JpdGUoc2Ms IGxlbiwgcmVnLCB2YWwpCQlcCisoewkJCQkJCVwKKwl1X2ludCBjcHUgPSBQQ1BVX0dFVChjcHVp ZCk7CQlcCisJCQkJCQlcCisJYnVzX3dyaXRlXyMjbGVuKAkJCVwKKwkgICAgc2MtPmdpY19yZWRp c3RzLnBjcHVbY3B1XSwJCVwKKwkgICAgcmVnLCB2YWwpOwkJCQlcCit9KQorCisjZW5kaWYgLyog X0dJQ19WM19WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVn LmggYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t LSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApAQCAtMCwwICsx LDE3NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlv bgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZl bG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJT RCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0 OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfR0lDX1YzX1JFR19IXworI2RlZmluZSBfR0lDX1Yz X1JFR19IXworCisvKgorICogUHJpb3JpdHkgTUFYL01JTiB2YWx1ZXMKKyAqLworI2RlZmluZQlH SUNfUFJJT1JJVFlfTUFYCTB4MDBVTAorLyogVXBwZXIgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBM UEkgbWF4IHByaW9yaXR5ICovCisjZGVmaW5lCUdJQ19QUklPUklUWV9NSU4JMHhGQ1VMCisKKy8q IE51bWJlcnMgZm9yIHNvZnR3YXJlIGdlbmVyYXRlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJ Q19GSVJTVF9TR0kJCSgwKQorI2RlZmluZQlHSUNfTEFTVF9TR0kJCSgxNSkKKy8qIE51bWJlcnMg Zm9yIHByaXZhdGUgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9Q UEkJCSgxNikKKyNkZWZpbmUJR0lDX0xBU1RfUFBJCQkoMzEpCisvKiBOdW1iZXJzIGZvciBzcGFy ZWQgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9TUEkJCSgzMikK KyNkZWZpbmUJR0lDX0xBU1RfU1BJCQkoMTAxOSkKKy8qIE51bWJlcnMgZm9yIGxvY2FsIHBlcmlw aGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklSU1RfTFBJCQkoODE5MikKKworLyoK KyAqIFJlZ2lzdGVycyAodjIvdjMpCisgKi8KKyNkZWZpbmUJR0lDRF9DVExSCQkweDAwMDAKKyNk ZWZpbmUJR0lDRF9DVExSX0cxCQkoMSA8PCAwKQorI2RlZmluZQlHSUNEX0NUTFJfRzFBCQkoMSA8 PCAxKQorI2RlZmluZQlHSUNEX0NUTFJfQVJFX05TCSgxIDw8IDQpCisjZGVmaW5lCUdJQ0RfQ1RM Ul9SV1AJCSgxIDw8IDMxKQorCisjZGVmaW5lCUdJQ0RfVFlQRVIJCSgweDAwMDQpCisjZGVmaW5l CQlHSUNEX1RZUEVSX0lEQklUUyh4KQkoKCgoeCkgPj4gMTkpICYgMHgxRikgKyAxKQorCisjZGVm aW5lCUdJQ0RfSVNFTkFCTEVSKG4pCSgweDAxMDAgKyAoKChuKSA+PiA1KSAqIDQpKQorI2RlZmlu ZQlHSUNEX0lDRU5BQkxFUihuKQkoMHgwMTgwICsgKCgobikgPj4gNSkgKiA0KSkKKyNkZWZpbmUJ R0lDRF9JUFJJT1JJVFlSKG4pCSgweDA0MDAgKyAoKChuKSA+PiAyKSAqIDQpKQorI2RlZmluZQlH SUNEX0lfTUFTSyhuKQkJKDEgPDwgKChuKSAlIDMyKSkKKworI2RlZmluZQlHSUNEX0lDRkdSKG4p CQkoMHgwQzAwICsgKChuKSAqIDQpKQorLyogRmlyc3QgYml0IGlzIGEgcG9sYXJpdHkgYml0ICgw IC0gbG93LCAxIC0gaGlnaCkgKi8KKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0xPVwkoMCA8PCAw KQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9QT0xfSElHSAkoMSA8PCAwKQorI2RlZmluZQkJR0lDRF9J Q0ZHUl9QT0xfTUFTSwkweDEKKy8qIFNlY29uZCBiaXQgaXMgYSB0cmlnZ2VyIGJpdCAoMCAtIGxl dmVsLCAxIC0gZWRnZSkgKi8KKyNkZWZpbmUJCUdJQ0RfSUNGR1JfVFJJR19MVkwJKDAgPDwgMSkK KyNkZWZpbmUJCUdJQ0RfSUNGR1JfVFJJR19FREdFCSgxIDw8IDEpCisjZGVmaW5lCQlHSUNEX0lD RkdSX1RSSUdfTUFTSwkweDIKKworLyoKKyAqIFJlZ2lzdGVycyAodjMpCisgKi8KKyNkZWZpbmUJ R0lDRF9JUk9VVEVSKG4pCQkoMHg2MDAwICsgKChuKSAqIDgpKQorI2RlZmluZQlHSUNEX1BJRFIy CQkoMHhGRkU4KQorCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9NQVNLCSgweEYwKQorI2RlZmlu ZQlHSUNSX1BJRFIyX0FSQ0hfR0lDdjMJKDB4MzApCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9H SUN2NAkoMHg0MCkKKworLyogUmVkaXN0cmlidXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lD Ul9QSURSMgkJR0lDRF9QSURSMgorCisjZGVmaW5lCUdJQ1JfVFlQRVIJCSgweDAwMDgpCisjZGVm aW5lCUdJQ1JfVFlQRVJfVkxQSVMJKDEgPDwgMSkKKyNkZWZpbmUJR0lDUl9UWVBFUl9MQVNUCQko MSA8PCA0KQorCisjZGVmaW5lCUdJQ1JfV0FLRVIJCSgweDAwMTQpCisjZGVmaW5lCUdJQ1JfV0FL RVJfUFMJCSgxIDw8IDEpIC8qIFByb2Nlc3NvciBzbGVlcCAqLworI2RlZmluZQlHSUNSX1dBS0VS X0NBCQkoMSA8PCAyKSAvKiBDaGlsZHJlbiBhc2xlZXAgKi8KKworLyogUmUtZGlzdHJpYnV0b3Ig cmVnaXN0ZXJzIGZvciBTR0lzIGFuZCBQUElzICovCisjZGVmaW5lCUdJQ1JfUkRfQkFTRV9TSVpF CVBBR0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9TR0lfQkFTRV9TSVpFCVBBR0VfU0laRV82NEsK KyNkZWZpbmUJR0lDUl9WTFBJX0JBU0VfU0laRQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUdJQ1Jf UkVTRVJWRURfU0laRQlQQUdFX1NJWkVfNjRLCisKKyNkZWZpbmUJR0lDUl9JU0VOQUJMRVIwCQkJ CSgweDAxMDApCisjZGVmaW5lCUdJQ1JfSUNFTkFCTEVSMAkJCQkoMHgwMTgwKQorI2RlZmluZQkJ R0lDUl9JX0VOQUJMRVJfU0dJX01BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZQkJR0lDUl9JX0VO QUJMRVJfUFBJX01BU0sJCSgweEZGRkYwMDAwKQorCisvKgorICogQ1BVIGludGVyZmFjZQorICov CisKKy8qIEVMMiAqLworI2RlZmluZQlJQ0NfU1JFX0VMMl9FTgkJKDFVIDw8IDMpCisvKiBFTDEg Ki8KKyNkZWZpbmUJSUNDX1NSRV9FTDFfU1JFCQkoMVUgPDwgMCkKKyNkZWZpbmUJSUNDX0NUTFJf RUwxX0VPSQkoMVUgPDwgMSkKKyNkZWZpbmUJSUNDX0lHUlBFTjBfRUwxX0VOCSgxVSA8PCAwKQor CisjZGVmaW5lCUlDQ19JQVIxX0VMMV9TUFVSCSgweDAzZmYpCisKKy8qCisgKiBSZWdpc3RlcnMg bGlzdCAoSUNDX3h5el9FTDEpOgorICoKKyAqIFBNUiAgICAgLSBQcmlvcml0eSBNYXNrIFJlZ2lz dGVyCisgKgkJKiBpbnRlcnJ1cHRzIG9mIHByaW9yaXR5IGhpZ2hlciB0aGFuIHNwZWNpZmllZAor ICoJCSAgaW4gdGhpcyBtYXNrIHdpbGwgYmUgc2lnbmFsbGVkIHRvIHRoZSBDUFUuCisgKgkJICAo MHhmZiAtIGxvd2VzdCBwb3NzaWJsZSBwcmlvLiwgMHgwMCAtIGhpZ2hlc3QgcHJpby4pCisgKgor ICogQ1RMUiAgICAtIENvbnRyb2wgUmVnaXN0ZXIKKyAqCQkqIGNvbnRyb2xzIGJlaGF2aW9yIG9m IHRoZSBDUFUgaW50ZXJmYWNlIGFuZCBkaXNwbGF5cworICoJCSAgaW1wbGVtZW50ZWQgZmVhdHVy ZXMuCisgKgorICogSUdSUEVOMSAtIEludGVycnVwdCBHcm91cCAxIEVuYWJsZSBSZWdpc3Rlcgor ICoKKyAqIElBUjEgICAgLSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgR3JvdXAgMQor ICoJCSogY29udGFpbnMgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcKKyAq CQkgIGludGVycnVwdCBmcm9tIHRoZSBHcm91cCAxLgorICoKKyAqIEVPSVIxICAgLSBFbmQgb2Yg SW50ZXJydXB0IFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIFdyaXRlcyBpbmZvcm0gQ1BVIGludGVy ZmFjZSBhYm91dCBjb21wbGV0ZWQgR3JvdXAgMQorICoJCSAgaW50ZXJydXB0cyBwcm9jZXNzaW5n LgorICovCisKKyNkZWZpbmUJZ2ljX2ljY193cml0ZShyZWcsIHZhbCkJCQkJCVwKK2RvIHsJCQkJ CQkJCVwKKwlXUklURV9TUEVDSUFMUkVHKElDQ18gIyNyZWcgIyNfRUwxLCB2YWwpOwkJXAorCWlz YigpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCWdpY19pY2NfcmVhZChyZWcpCQkJ CQlcCisoewkJCQkJCQkJXAorCXVpbnQ2NF90IHZhbDsJCQkJCQlcCisJCQkJCQkJCVwKKwl2YWwg PSBSRUFEX1NQRUNJQUxSRUcoSUNDXyAjI3JlZyAjI19FTDEpOwkJXAorCSh2YWwpOwkJCQkJCQlc Cit9KQorCisjZGVmaW5lCWdpY19pY2Nfc2V0KHJlZywgbWFzaykJCQkJCVwKK2RvIHsJCQkJCQkJ CVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlc CisJdmFsIHw9IChtYXNrKTsJCQkJCQlcCisJZ2ljX2ljY193cml0ZShyZWcsIHZhbCk7CQkJCVwK K30gd2hpbGUgKDApCisKKyNkZWZpbmUJZ2ljX2ljY19jbGVhcihyZWcsIG1hc2spCQkJCVwKK2Rv IHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChy ZWcpOwkJCQlcCisJdmFsICY9IH4obWFzayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2 YWwpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0dJQ19WM19SRUdfSF8gKi8KZGlm ZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMgYi9zeXMvYXJtNjQvYXJtNjQv Z2ljX3YzX2ZkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lz L2FybTY0L2FybTY0L2dpY192M19mZHQuYwpAQCAtMCwwICsxLDE1NiBAQAorLyotCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5k ZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lu Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8 c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5o PgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVk ZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3Bj cHUuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNp bmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8 ZGV2L2ZkdC9mZHRfY29tbW9uLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2lu Y2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJy Lmg+CisKKyNpbmNsdWRlICJwaWNfaWYuaCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNp bmNsdWRlICJnaWNfdjNfdmFyLmgiCisKKy8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RydWN0IGdp Y192M19vZndfZGV2aW5mbyB7CisJc3RydWN0IG9md19idXNfZGV2aW5mbwlkaV9kaW5mbzsKKwlz dHJ1Y3QgcmVzb3VyY2VfbGlzdAlkaV9ybDsKK307CisKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9w cm9iZShkZXZpY2VfdCk7CitzdGF0aWMgaW50IGdpY192M19mZHRfYXR0YWNoKGRldmljZV90KTsK K3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9kZXRhY2goZGV2aWNlX3QpOworCitzdGF0aWMgY29uc3Qg c3RydWN0IG9md19idXNfZGV2aW5mbyAqCitnaWNfdjNfb2Z3X2dldF9kZXZpbmZvKGRldmljZV90 IF9fdW51c2VkLCBkZXZpY2VfdCk7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX21l dGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9w cm9iZSwJCWdpY192M19mZHRfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlnaWNf djNfZmR0X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWdpY192M19mZHRfZGV0 YWNoKSwKKworCS8qIFBJQyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc3BhdGNoLAkJ Z2ljX3YzX2Rpc3BhdGNoKSwKKwlERVZNRVRIT0QocGljX2VvaSwJCWdpY192M19lb2kpLAorCURF Vk1FVEhPRChwaWNfbWFzaywJCWdpY192M19tYXNrX2lycSksCisJREVWTUVUSE9EKHBpY191bm1h c2ssCQlnaWNfdjNfdW5tYXNrX2lycSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9 OworCitzdGF0aWMgZHJpdmVyX3QgZ2ljX3YzX2RyaXZlciA9IHsKKwkiZ2ljIiwKKwlnaWNfdjNf bWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGdpY192M19zb2Z0YyksCit9OworCitFQVJMWV9EUklW RVJfTU9EVUxFKGdpY192Mywgc2ltcGxlYnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZGV2Y2xh c3MsIDAsIDAsCisgICAgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExF KTsKK0VBUkxZX0RSSVZFUl9NT0RVTEUoZ2ljX3YzLCBvZndidXMsIGdpY192M19kcml2ZXIsIGdp Y192M19kZXZjbGFzcywgMCwgMCwKKyAgICBCVVNfUEFTU19JTlRFUlJVUFQgKyBCVVNfUEFTU19P UkRFUl9NSURETEUpOworCisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworc3RhdGljIGlu dAorZ2ljX3YzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlpZiAoIW9md19idXNfc3Rh dHVzX29rYXkoZGV2KSkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAoIW9md19idXNfaXNfY29t cGF0aWJsZShkZXYsICJhcm0sZ2ljLXYzIikpCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2aWNl X3NldF9kZXNjKGRldiwgR0lDX1YzX0RFVlNUUik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVM VCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19mZHRfYXR0YWNoKGRldmljZV90IGRldikKK3sK KwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlwY2VsbF90IHJlZGlzdF9yZWdpb25zOworCWlu dCBlcnI7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2Owor CisJLyoKKwkgKiBSZWNvdmVyIG51bWJlciBvZiB0aGUgUmUtRGlzdHJpYnV0b3IgcmVnaW9ucy4K KwkgKi8KKwlpZiAoT0ZfZ2V0ZW5jcHJvcChvZndfYnVzX2dldF9ub2RlKGRldiksICIjcmVkaXN0 cmlidXRvci1yZWdpb25zIiwKKwkgICAgJnJlZGlzdF9yZWdpb25zLCBzaXplb2YocmVkaXN0X3Jl Z2lvbnMpKSA8PSAwKQorCQlzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgPSAxOworCWVsc2UKKwkJ c2MtPmdpY19yZWRpc3RzLm5yZWdpb25zID0gcmVkaXN0X3JlZ2lvbnM7CisKKwllcnIgPSBnaWNf djNfYXR0YWNoKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAoZXJy KTsKKworZXJyb3I6CisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LAor CQkgICAgIkZhaWxlZCB0byBhdHRhY2guIEVycm9yICVkXG4iLCBlcnIpOworCX0KKwkvKiBGYWls dXJlIHNvIGZyZWUgcmVzb3VyY2VzICovCisJZ2ljX3YzX2ZkdF9kZXRhY2goZGV2KTsKKworCXJl dHVybiAoZXJyKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX2ZkdF9kZXRhY2goZGV2aWNlX3Qg ZGV2KQoreworCisJcmV0dXJuIChnaWNfdjNfZGV0YWNoKGRldikpOworfQpkaWZmIC0tZ2l0IGEv c3lzL2FybTY0L2FybTY0L2dpY192My5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192 My5jCkBAIC0wLDAgKzEsNTY0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgRnJl ZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29m dHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3JzaGlw IG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Citf X0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl IDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l bC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5j bHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lz L3BjcHUuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4K KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVk ZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS9wbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1 cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5jbHVkZSAicGljX2lmLmgiCisK KyNpbmNsdWRlICJnaWNfdjNfcmVnLmgiCisjaW5jbHVkZSAiZ2ljX3YzX3Zhci5oIgorCisvKgor ICogRHJpdmVyLXNwZWNpZmljIGRlZmluaXRpb25zLgorICovCitNQUxMT0NfREVGSU5FKE1fR0lD X1YzLCAiR0lDdjMiLCBHSUNfVjNfREVWU1RSKTsKKworZGV2Y2xhc3NfdCBnaWNfdjNfZGV2Y2xh c3M7CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucy4KKyAqLworLyog RGVzdGluYXRpb24gcmVnaXN0ZXJzLCBlaXRoZXIgRGlzdHJpYnV0b3Igb3IgUmUtRGlzdHJpYnV0 b3IgKi8KK2VudW0gZ2ljX3YzX3hkaXN0IHsKKwlESVNUID0gMCwKKwlSRURJU1QsCit9OworCisv KiBIZWxwZXIgcm91dGluZXMgc3RhcnRpbmcgd2l0aCBnaWNfdjNfICovCitzdGF0aWMgaW50IGdp Y192M19kaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgZ2ljX3Yz X3JlZGlzdF9maW5kKHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgaW50IGdpY192M19y ZWRpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIGludCBnaWNfdjNfY3B1 X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGdpY192M193YWl0X2Zv cl9yd3Aoc3RydWN0IGdpY192M19zb2Z0YyAqLCBlbnVtIGdpY192M194ZGlzdCk7CisKKy8qIEEg c2VxdWVuY2Ugb2YgaW5pdCBmdW5jdGlvbnMgZm9yIHByaW1hcnkgKGJvb3QpIENQVSAqLwordHlw ZWRlZiBpbnQgKCpnaWNfdjNfaW5pdHNlcV90KSAoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKKy8q IFByaW1hcnkgQ1BVIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCitzdGF0aWMgZ2ljX3YzX2lu aXRzZXFfdCBnaWNfdjNfcHJpbWFyeV9pbml0W10gPSB7CisJZ2ljX3YzX2Rpc3RfaW5pdCwKKwln aWNfdjNfcmVkaXN0X2luaXQsCisJZ2ljX3YzX2NwdV9pbml0LAorCU5VTEwKK307CisKKy8qCisg KiBEZXZpY2UgaW50ZXJmYWNlLgorICovCitpbnQKK2dpY192M19hdHRhY2goZGV2aWNlX3QgZGV2 KQoreworCXN0cnVjdCBnaWNfdjNfc29mdGMgKnNjOworCWdpY192M19pbml0c2VxX3QgKmluaXRf ZnVuYzsKKwl1aW50MzJfdCB0eXBlcjsKKwlpbnQgcmlkOworCWludCBlcnI7CisJc2l6ZV90IGk7 CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2OworCWVyciA9 IDA7CisKKwkvKiBJbml0aWFsaXplIG11dGV4ICovCisJbXR4X2luaXQoJnNjLT5naWNfbXR4LCAi R0lDdjMgbG9jayIsIE5VTEwsIE1UWF9TUElOKTsKKworCS8qCisJICogQWxsb2NhdGUgYXJyYXkg b2Ygc3RydWN0IHJlc291cmNlLgorCSAqIE9uZSBlbnRyeSBmb3IgRGlzdHJpYnV0b3IgYW5kIGFs bCByZW1haW5pbmcgZm9yIFJlLURpc3RyaWJ1dG9yLgorCSAqLworCXNjLT5naWNfcmVzID0gbWFs bG9jKAorCSAgICBzaXplb2Yoc2MtPmdpY19yZXMpICogKHNjLT5naWNfcmVkaXN0cy5ucmVnaW9u cyArIDEpLAorCSAgICBNX0dJQ19WMywgTV9XQUlUT0spOworCisJLyogTm93IGFsbG9jYXRlIGNv cnJlc3BvbmRpbmcgcmVzb3VyY2VzICovCisJZm9yIChpID0gMCwgcmlkID0gMDsgaSA8IChzYy0+ Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKTsgaSsrLCByaWQrKykgeworCQlzYy0+Z2ljX3Jlc1ty aWRdID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkgICAg JnJpZCwgUkZfQUNUSVZFKTsKKwkJaWYgKHNjLT5naWNfcmVzW3JpZF0gPT0gTlVMTCkgeworCQkJ ZXJyID0gRU5YSU87CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJLyoKKwkgKiBEaXN0cmli dXRvciBpbnRlcmZhY2UKKwkgKi8KKwlzYy0+Z2ljX2Rpc3QgPSBzYy0+Z2ljX3Jlc1swXTsKKwor CS8qCisJICogUmUtRHJpc3RyaWJ1dG9yIGludGVyZmFjZQorCSAqLworCS8qIEFsbG9jYXRlIHNw YWNlIHVuZGVyIHJlZ2lvbiBkZXNjcmlwdGlvbnMgKi8KKwlzYy0+Z2ljX3JlZGlzdHMucmVnaW9u cyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKCpzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucykgKiBzYy0+ Z2ljX3JlZGlzdHMubnJlZ2lvbnMsCisJICAgIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBG aWxsLXVwIGJ1c19zcGFjZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCByZWdpb24uICovCisJZm9yIChp ID0gMCwgcmlkID0gMTsgaSA8IHNjLT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrLCByaWQrKykK KwkJc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnNbaV0gPSBzYy0+Z2ljX3Jlc1tyaWRdOworCisJLyog R2V0IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIFNQSSBpbnRlcnJ1cHRzICovCisJdHlwZXIgPSBn aWNfZF9yZWFkKHNjLCA0LCBHSUNEX1RZUEVSKTsKKwlzYy0+Z2ljX25pcnFzID0gdHlwZXIgJiAw eDFGOworCXNjLT5naWNfbmlycXMgPSAoc2MtPmdpY19uaXJxcyArIDEpICogMzI7CisJaWYgKHNj LT5naWNfbmlycXMgPiAxMDIwKQorCQlzYy0+Z2ljX25pcnFzID0gMTAyMDsKKworCS8qIEdldCB0 aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBpbnRlcnJ1cHQgaWRlbnRpZmllciBiaXRzICovCisJc2Mt PmdpY19pZGJpdHMgPSBHSUNEX1RZUEVSX0lEQklUUyh0eXBlcik7CisKKwlpZiAoYm9vdHZlcmJv c2UpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTUElzOiAldSwgSURzOiAldVxuIiwKKwkJICAg IHNjLT5naWNfbmlycXMsICgxIDw8IHNjLT5naWNfaWRiaXRzKSAtIDEpOworCX0KKworCS8qIFRy YWluIGluaXQgc2VxdWVuY2UgZm9yIGJvb3QgQ1BVICovCisJZm9yIChpbml0X2Z1bmMgPSBnaWNf djNfcHJpbWFyeV9pbml0OyAqaW5pdF9mdW5jICE9IE5VTEw7IGluaXRfZnVuYysrKSB7CisJCWVy ciA9ICgqaW5pdF9mdW5jKShzYyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCX0KKwkv KgorCSAqIEZ1bGwgc3VjY2Vzcy4KKwkgKiBOb3cgcmVnaXN0ZXIgUElDIHRvIHRoZSBpbnRlcnJ1 cHRzIGhhbmRsaW5nIGxheWVyLgorCSAqLworCWFybV9yZWdpc3Rlcl9yb290X3BpYyhkZXYsIHNj LT5naWNfbmlycXMpOworCitlcnJvcjoKKwlyZXR1cm4gKGVycik7Cit9CisKK2ludAorZ2ljX3Yz X2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJc2l6 ZV90IGk7CisJaW50IHJpZDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYg KGRldmljZV9pc19hdHRhY2hlZChkZXYpKSB7CisJCS8qCisJCSAqIFhYWDogV2Ugc2hvdWxkIHBy b2JhYmx5IGRlcmVnaXN0ZXIgUElDCisJCSAqLworCX0KKwlmb3IgKGkgPSAwLCByaWQgPSAwOyBp IDwgKHNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyArIDEpOyBpKyssIHJpZCsrKQorCQlidXNfcmVs ZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCByaWQsIHNjLT5naWNfcmVzW3JpZF0p OworCisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKQorCQlmcmVlKHNjLT5naWNfcmVkaXN0 cy5wY3B1W2ldLCBNX0dJQ19WMyk7CisKKwlmcmVlKHNjLT5naWNfcmVzLCBNX0dJQ19WMyk7CisJ ZnJlZShzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucywgTV9HSUNfVjMpOworCisJcmV0dXJuICgwKTsK K30KKworLyoKKyAqIFBJQyBpbnRlcmZhY2UuCisgKi8KK3ZvaWQKK2dpY192M19kaXNwYXRjaChk ZXZpY2VfdCBkZXYsIHN0cnVjdCB0cmFwZnJhbWUgKmZyYW1lKQoreworCXVpbnQ2NF90IGFjdGl2 ZV9pcnE7CisKKwl3aGlsZSAoMSkgeworCQlhY3RpdmVfaXJxID0gZ2ljX2ljY19yZWFkKElBUjEp OworCisJCWlmIChfX3ByZWRpY3RfZmFsc2UoYWN0aXZlX2lycSA9PSBJQ0NfSUFSMV9FTDFfU1BV UikpCisJCQlicmVhazsKKworCQlpZiAoX19wcmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lD X0ZJUlNUX1BQSSAmJgorCQkgICAgYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkJ YXJtX2Rpc3BhdGNoX2ludHIoYWN0aXZlX2lycSwgZnJhbWUpOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TR0kgfHwgYWN0aXZlX2lycSA+PSBHSUNf RklSU1RfTFBJKSB7CisJCQkvKgorCQkJICogVE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kvTFBJ IGhhbmRsaW5nLgorCQkJICogICAgICAgTWFzayBpdCBpZiBzdWNoIGlzIHJlY2VpdmVkIGZvciBz b21lIHJlYXNvbi4KKwkJCSAqLworCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIlJlY2Vp dmVkIHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiAlc1xuIiwKKwkJCSAgICBhY3RpdmVfaXJx ID49IEdJQ19GSVJTVF9MUEkgPyAiTFBJIiA6ICJTR0kiKTsKKwkJCVBJQ19NQVNLKGRldiwgYWN0 aXZlX2lycSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK2dpY192M19lb2koZGV2aWNlX3QgZGV2LCB1 X2ludCBpcnEpCit7CisKKwlnaWNfaWNjX3dyaXRlKEVPSVIxLCAodWludDY0X3QpaXJxKTsKK30K Kwordm9pZAorZ2ljX3YzX21hc2tfaXJxKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCXN0 cnVjdCBnaWNfdjNfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisK KwlpZiAoaXJxID49IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQ UElzIGluIGNvcnJlc3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2Ms IDQsCisJCSAgICBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNEX0lDRU5BQkxFUihpcnEpLCBHSUNE X0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVs c2UgaWYgKGlycSA+PSBHSUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyog U1BJcyBpbiBkaXN0cmlidXRvciAqLworCQlnaWNfcl93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJM RVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJ U1QpOworCX0gZWxzZQorCQlwYW5pYygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBf X2Z1bmNfXywgaXJxKTsKK30KKwordm9pZAorZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3QgZGV2 LCB1X2ludCBpcnEpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChpcnEgPj0gR0lDX0ZJUlNUX1BQSSAmJiBpcnEgPD0g R0lDX0xBU1RfUFBJKSB7IC8qIFBQSXMgaW4gY29ycmVzcG9uZGluZyBSZS1EaXN0cmlidXRvciAq LworCQlnaWNfcl93cml0ZShzYywgNCwKKwkJICAgIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ0Rf SVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3Jfcndw KHNjLCBSRURJU1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9 IEdJQ19MQVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCisJCWdpY19kX3dyaXRl KHNjLCA0LCBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3Yz X3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlCisJCXBhbmljKCIlczogVW5zdXBwb3J0 ZWQgSVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOworfQorCisvKgorICogSGVscGVyIHJv dXRpbmVzCisgKi8KK3N0YXRpYyB2b2lkCitnaWNfdjNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNf djNfc29mdGMgKnNjLCBlbnVtIGdpY192M194ZGlzdCB4ZGlzdCkKK3sKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgdXNfbGVmdCA9IDEwMDAwMDA7CisKKwlj cHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCXN3aXRjaCAoeGRpc3QpIHsKKwljYXNlIERJU1Q6 CisJCXJlcyA9IHNjLT5naWNfZGlzdDsKKwkJYnJlYWs7CisJY2FzZSBSRURJU1Q6CisJCXJlcyA9 IHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FT U0VSVCgwLCAoIiVzOiBBdHRlbXB0IHRvIHdhaXQgZm9yIHVua25vd24gUldQIiwgX19mdW5jX18p KTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoYnVzX3JlYWRfNChyZXMsIEdJQ0RfQ1RMUikg JiBHSUNEX0NUTFJfUldQKSAhPSAwKSB7CisJCURFTEFZKDEpOworCQlpZiAodXNfbGVmdC0tID09 IDApIHsKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiR0lDRCBSZWdpc3RlciB3 cml0ZSBwZW5kaW5nIGZvciB0b28gbG9uZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisv KiBDUFUgaW50ZXJmYWNlLiAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2dpY192M19jcHVfcHJp b3JpdHkodWludDY0X3QgbWFzaykKK3sKKworCS8qIFNldCBwcm9yaXR5IG1hc2sgKi8KKwlnaWNf aWNjX3dyaXRlKFBNUiwgbWFzayAmIDB4RkZVTCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19j cHVfZW5hYmxlX3NyZShzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBzcmU7 CisJdV9pbnQgY3B1aWQ7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKwkvKgorCSAqIFNl dCB0aGUgU1JFIGJpdCB0byBlbmFibGUgYWNjZXNzIHRvIEdJQyBDUFUgaW50ZXJmYWNlCisJICog dmlhIHN5c3RlbSByZWdpc3RlcnMuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19z cmVfZWwxKTsKKwlzcmUgfD0gSUNDX1NSRV9FTDFfU1JFOworCVdSSVRFX1NQRUNJQUxSRUcoaWNj X3NyZV9lbDEsIHNyZSk7CisJaXNiKCk7CisJLyoKKwkgKiBOb3cgZW5zdXJlIHRoYXQgdGhlIGJp dCBpcyBzZXQuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19zcmVfZWwxKTsKKwlp ZiAoIShzcmUgJiBJQ0NfU1JFX0VMMV9TUkUpKSB7CisJCS8qIFdlIGFyZSBkb25lLiBUaGlzIHdh cyBkaXNhYmxlZCBpbiBFTDIgKi8KKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiRVJST1I6IENQ VSV1IGNhbm5vdCBlbmFibGUgQ1BVIGludGVyZmFjZSAiCisJCSAgICAidmlhIHN5c3RlbSByZWdp c3RlcnNcbiIsIGNwdWlkKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfSBlbHNlIGlmIChib290dmVy Ym9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAgICAiQ1BVJXUgZW5hYmxlZCBD UFUgaW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLAorCQkgICAgY3B1aWQpOworCX0K KworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19jcHVfaW5pdChzdHJ1Y3Qg Z2ljX3YzX3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCisJLyogRW5hYmxlIGFjY2VzcyB0byBD UFUgaW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzICovCisJZXJyID0gZ2ljX3YzX2NwdV9l bmFibGVfc3JlKHNjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gKGVycik7CisJLyogUHJpb3JpdHkg bWFzayB0byBtaW5pbXVtIC0gYWNjZXB0IGFsbCBpbnRlcnJ1cHRzICovCisJZ2ljX3YzX2NwdV9w cmlvcml0eShHSUNfUFJJT1JJVFlfTUlOKTsKKwkvKiBEaXNhYmxlIEVPSSBtb2RlICovCisJZ2lj X2ljY19jbGVhcihDVExSLCBJQ0NfQ1RMUl9FTDFfRU9JKTsKKwkvKiBFbmFibGUgZ3JvdXAgMSAo aW5zZWN1cmUpIGludGVycnVwcyAqLworCWdpY19pY2Nfc2V0KElHUlBFTjEsIElDQ19JR1JQRU4w X0VMMV9FTik7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBEaXN0cmlidXRvciAqLworc3RhdGlj IGludAorZ2ljX3YzX2Rpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50 NjRfdCBhZmY7CisJdV9pbnQgaTsKKworCS8qCisJICogMS4gRGlzYWJsZSB0aGUgRGlzdHJpYnV0 b3IKKwkgKi8KKwlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9DVExSLCAwKTsKKwlnaWNfdjNfd2Fp dF9mb3JfcndwKHNjLCBESVNUKTsKKworCS8qCisJICogMi4gQ29uZmlndXJlIHRoZSBEaXN0cmli dXRvcgorCSAqLworCS8qIFNldCBhbGwgZ2xvYmFsIGludGVycnVwdHMgdG8gYmUgbGV2ZWwgdHJp Z2dlcmVkLCBhY3RpdmUgbG93LiAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+ Z2ljX25pcnFzOyBpICs9IDE2KQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0ZHUihpID4+ IDQpLCAweDAwMDAwMDAwKTsKKworCS8qIFNldCBwcmlvcml0eSB0byBhbGwgc2hhcmVkIGludGVy cnVwdHMgKi8KKwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSAr PSA0KSB7CisJCS8qIFNldCBoaWdoZXN0IHByaW9yaXR5ICovCisJCWdpY19kX3dyaXRlKHNjLCA0 LCBHSUNEX0lQUklPUklUWVIoaSksIEdJQ19QUklPUklUWV9NQVgpOworCX0KKworCS8qCisJICog RGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gTGVhdmUgUFBJIGFuZCBTR0lzIGFzIHRoZXkgYXJlIGVu YWJsZWQgaW4KKwkgKiBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMuCisJICovCisJZm9yIChpID0g R0lDX0ZJUlNUX1NQSTsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gMzIpCisJCWdpY19kX3dyaXRl KHNjLCA0LCBHSUNEX0lDRU5BQkxFUihpKSwgMHhGRkZGRkZGRik7CisKKwlnaWNfdjNfd2FpdF9m b3JfcndwKHNjLCBESVNUKTsKKworCS8qCisJICogMy4gRW5hYmxlIERpc3RyaWJ1dG9yCisJICov CisJLyogRW5hYmxlIERpc3RyaWJ1dG9yIHdpdGggQVJFLCBHcm91cCAxICovCisJZ2ljX2Rfd3Jp dGUoc2MsIDQsIEdJQ0RfQ1RMUiwgR0lDRF9DVExSX0FSRV9OUyB8IEdJQ0RfQ1RMUl9HMUEgfAor CSAgICBHSUNEX0NUTFJfRzEpOworCisJLyoKKwkgKiA0LiBSb3V0ZSBhbGwgaW50ZXJydXB0cyB0 byBib290IENQVS4KKwkgKi8KKwlhZmYgPSBDUFVfQUZGSU5JVFkoUENQVV9HRVQoY3B1aWQpKTsK Kwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSsrKQorCQlnaWNf ZF93cml0ZShzYywgNCwgR0lDRF9JUk9VVEVSKGkpLCBhZmYpOworCisJcmV0dXJuICgwKTsKK30K KworLyogUmUtRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3RfZmluZChz dHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ugcl9yZXM7CisJYnVz X3NwYWNlX2hhbmRsZV90IHJfYnNoOworCXVpbnQ2NF90IGFmZjsKKwl1aW50NjRfdCB0eXBlcjsK Kwl1aW50MzJfdCBwaWRyMjsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgaTsKKworCWNwdWlkID0g UENQVV9HRVQoY3B1aWQpOworCisJLyogQWxsb2NhdGUgc3RydWN0IHJlc291cmNlIGZvciB0aGlz IENQVSdzIFJlLURpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLworCXNjLT5naWNfcmVkaXN0cy5wY3B1 W2NwdWlkXSA9CisJICAgIG1hbGxvYyhzaXplb2YoKnNjLT5naWNfcmVkaXN0cy5wY3B1WzBdKSwg TV9HSUNfVjMsIE1fV0FJVE9LKTsKKworCWFmZiA9IENQVV9BRkZJTklUWShjcHVpZCk7CisJLyog QWZmaW5pdHkgaW4gZm9ybWF0IGZvciBjb21wYXJpc29uIHdpdGggdHlwZXIgKi8KKwlhZmYgPSAo Q1BVX0FGRjMoYWZmKSA8PCAyNCkgfCAoQ1BVX0FGRjIoYWZmKSA8PCAxNikgfAorCSAgICAoQ1BV X0FGRjEoYWZmKSA8PCA4KSB8IENQVV9BRkYwKGFmZik7CisKKwlpZiAoYm9vdHZlcmJvc2UpIHsK KwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkgICAgIlN0YXJ0IHNlYXJjaGluZyBmb3IgUmUt RGlzdHJpYnV0b3JcbiIpOworCX0KKwkvKiBJdGVyYXRlIHRocm91Z2ggUmUtRGlzdHJpYnV0b3Ig cmVnaW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnM7IGkr KykgeworCQkvKiBUYWtlIGEgY29weSBvZiB0aGUgcmVnaW9uJ3MgcmVzb3VyY2UgKi8KKwkJcl9y ZXMgPSAqc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnNbaV07CisJCXJfYnNoID0gcm1hbl9nZXRfYnVz aGFuZGxlKCZyX3Jlcyk7CisKKwkJcGlkcjIgPSBidXNfcmVhZF80KCZyX3JlcywgR0lDUl9QSURS Mik7CisJCXN3aXRjaCAocGlkcjIgJiBHSUNSX1BJRFIyX0FSQ0hfTUFTSykgeworCQljYXNlIEdJ Q1JfUElEUjJfQVJDSF9HSUN2MzogLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgR0lDUl9QSURS Ml9BUkNIX0dJQ3Y0OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZpY2VfcHJpbnRmKHNj LT5kZXYsCisJCQkgICAgIk5vIFJlLURpc3RyaWJ1dG9yIGZvdW5kIGZvciBDUFUldVxuIiwgY3B1 aWQpOworCQkJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwkJ CXJldHVybiAoRU5PREVWKTsKKwkJfQorCisJCWRvIHsKKwkJCXR5cGVyID0gYnVzX3JlYWRfOCgm cl9yZXMsIEdJQ1JfVFlQRVIpOworCQkJaWYgKCh0eXBlciA+PiAzMikgPT0gYWZmKSB7CisJCQkJ S0FTU0VSVChzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gIT0gTlVMTCwKKwkJCQkgICAgKCJJ bnZhbGlkIHBvaW50ZXIgdG8gcGVyLUNQVSByZWRpc3RyaWJ1dG9yIikpOworCQkJCS8qIENvcHkg cmVzIGNvbnRlbnRzIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbiAqLworCQkJCSpzYy0+Z2ljX3Jl ZGlzdHMucGNwdVtjcHVpZF0gPSByX3JlczsKKwkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCQkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCQkgICAgIkNQVSV1IFJlLURpc3RyaWJ1dG9yIGhh cyBiZWVuIGZvdW5kXG4iLAorCQkJCQkgICAgY3B1aWQpOworCQkJCX0KKwkJCQlyZXR1cm4gKDAp OworCQkJfQorCisJCQlyX2JzaCArPSAoR0lDUl9SRF9CQVNFX1NJWkUgKyBHSUNSX1NHSV9CQVNF X1NJWkUpOworCQkJaWYgKHR5cGVyICYgR0lDUl9UWVBFUl9WTFBJUykgeworCQkJCXJfYnNoICs9 CisJCQkJICAgIChHSUNSX1ZMUElfQkFTRV9TSVpFICsgR0lDUl9SRVNFUlZFRF9TSVpFKTsKKwkJ CX0KKworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKCZyX3Jlcywgcl9ic2gpOworCQl9IHdoaWxlICgh KHR5cGVyICYgR0lDUl9UWVBFUl9MQVNUKSk7CisJfQorCisJZnJlZShzYy0+Z2ljX3JlZGlzdHMu cGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJObyBSZS1E aXN0cmlidXRvciBmb3VuZCBmb3IgQ1BVJXVcbiIsIGNwdWlkKTsKKwlyZXR1cm4gKEVOWElPKTsK K30KKworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF93YWtlKHN0cnVjdCBnaWNfdjNfc29mdGMg KnNjKQoreworCXVpbnQzMl90IHdha2VyOworCXNpemVfdCB1c19sZWZ0ID0gMTAwMDAwMDsKKwor CXdha2VyID0gZ2ljX3JfcmVhZChzYywgNCwgR0lDUl9XQUtFUik7CisJLyogV2FrZSB1cCBSZS1E aXN0cmlidXRvciBmb3IgdGhpcyBDUFUgKi8KKwl3YWtlciAmPSB+R0lDUl9XQUtFUl9QUzsKKwln aWNfcl93cml0ZShzYywgNCwgR0lDUl9XQUtFUiwgd2FrZXIpOworCS8qCisJICogV2hlbiBjbGVh cmluZyBQcm9jZXNzb3JTbGVlcCBiaXQgaXQgaXMgcmVxdWlyZWQgdG8gd2FpdCBmb3IKKwkgKiBD aGlsZHJlbkFzbGVlcCB0byBiZWNvbWUgemVybyBmb2xsb3dpbmcgdGhlIHByb2Nlc3NvciBwb3dl ci1vbi4KKwkgKi8KKwl3aGlsZSAoKGdpY19yX3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpICYgR0lD Ul9XQUtFUl9DQSkgIT0gMCkgeworCQlERUxBWSgxKTsKKwkJaWYgKHVzX2xlZnQtLSA9PSAwKSB7 CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIkNvdWxkIG5vdCB3YWtlIFJlLURp c3RyaWJ1dG9yIGZvciBDUFUldSIsCisJCQkgICAgUENQVV9HRVQoY3B1aWQpKTsKKwkJCXJldHVy biAoRU5YSU8pOworCQl9CisJfQorCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmlu dGYoc2MtPmRldiwgIkNQVSV1IFJlLURpc3RyaWJ1dG9yIHdva2UgdXBcbiIsCisJCSAgICBQQ1BV X0dFVChjcHVpZCkpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192 M19yZWRpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCXNp emVfdCBpOworCisJZXJyID0gZ2ljX3YzX3JlZGlzdF9maW5kKHNjKTsKKwlpZiAoZXJyKQorCQln b3RvIGVycm9yOworCisJZXJyID0gZ2ljX3YzX3JlZGlzdF93YWtlKHNjKTsKKwlpZiAoZXJyKQor CQlnb3RvIGVycm9yOworCisJLyogRGlzYWJsZSBTUElzICovCisJZ2ljX3Jfd3JpdGUoc2MsIDQs IEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ1JfSUNFTkFCTEVSMCwKKwkgICAgR0lDUl9JX0VOQUJM RVJfUFBJX01BU0spOworCS8qIEVuYWJsZSBTR0lzICovCisJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJ Q1JfU0dJX0JBU0VfU0laRSArIEdJQ1JfSVNFTkFCTEVSMCwKKwkgICAgR0lDUl9JX0VOQUJMRVJf U0dJX01BU0spOworCisJLyogU2V0IHByaW9yaXR5IGZvciBTR0lzIGFuZCBQUElzICovCisJZm9y IChpID0gMDsgaSA8PSBHSUNfTEFTVF9QUEk7IGkgKz0gNCkgeworCQlnaWNfcl93cml0ZShzYywg NCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDRF9JUFJJT1JJVFlSKGkpLAorCQkgICAgR0lDX1BS SU9SSVRZX01BWCk7CisJfQorCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwor ZXJyb3I6CisJcmV0dXJuIChlcnIpOworfQoK --b1_77e3339787d220e369108658a7915513--