From owner-freebsd-arm@FreeBSD.ORG Thu May 7 11:59:10 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 51A572FC for ; Thu, 7 May 2015 11:59:10 +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 27EC81A6F for ; Thu, 7 May 2015 11:59:10 +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 t47Bx9hf068076 for ; Thu, 7 May 2015 11:59:09 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 t47Bx9Mi068075; Thu, 7 May 2015 11:59:09 GMT (envelope-from daemon-user) Date: Thu, 7 May 2015 11:59:09 +0000 To: freebsd-arm@freebsd.org From: "zbb (Zbigniew Bodek)" Subject: [Differential] [Updated, 1, 026 lines] D2377: Introduce ARM GICv3 support Message-ID: 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: MjA1ZGZkZWI5MTE4ZDk2Nzk0YzAyZGRiMWRiIFVLU40= 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_da8b1c7776e9b50d88b9b02f12c1bb97" 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: Thu, 07 May 2015 11:59:10 -0000 --b1_da8b1c7776e9b50d88b9b02f12c1bb97 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb updated this revision to Diff 5255. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2377?vs=5180&id=5255 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/arm64/include/armreg.h 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_da8b1c7776e9b50d88b9b02f12c1bb97 Content-Type: text/x-patch; charset=utf-8; name="D2377.5255.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2377.5255.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTE4LDYgKzE4LDcgQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0 L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJ CXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJt NjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJt NjQvaW5jbHVkZS9hcm1yZWcuaCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5 cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5o CkBAIC05Niw2ICs5NiwyMiBAQAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdh dGNocG9pbnQsIGZyb20gc2FtZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJl YWtwb2ludCAqLwogCisvKiBJQ0NfU1JFX0VMMiAqLworI2RlZmluZQlJQ0NfU1JFX0VMMl9FTgkJ KDFVIDw8IDMpCisKKy8qIElDQ19TUkVfRUwxICovCisjZGVmaW5lCUlDQ19TUkVfRUwxX1NSRQkJ KDFVIDw8IDApCisKKy8qIElDQ19DVExSX0VMMSAqLworI2RlZmluZQlJQ0NfQ1RMUl9FTDFfRU9J CSgxVSA8PCAxKQorCisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBf RUwxX0VOCSgxVSA8PCAwKQorCisvKiBJQ0NfSUFSMV9FTDEgKi8KKyNkZWZpbmUJSUNDX0lBUjFf RUwxX1NQVVIJKDB4MDNmZikKKworCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURf QUE2NFBGUjBfRUwwX01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFT SwkoMHhmIDw8IDQpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMgYi9zeXMv YXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2xvY29yZS5TCisrKyBi L3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPG1h Y2hpbmUvcGFyYW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3B0ZS5oPgogCisjaW5jbHVkZSAiZ2lj X3YzX3JlZy5oIgorCiAjZGVmaW5lCVZJUlRfQklUUwkzOQogCiAJLmdsb2JsCWtlcm5iYXNlCkBA IC0xODcsNiArMTg5LDE4IEBACiAJbW92CXgyLCAjKFBTUl9GIHwgUFNSX0kgfCBQU1JfQSB8IFBT Ul9EIHwgUFNSX01fRUwxaCkKIAltc3IJc3Bzcl9lbDIsIHgyCiAKKwkvKiBDb25maWd1cmUgR0lD djMgQ1BVIGludGVyZmFjZSAqLworCW1ycwl4MiwgaWRfYWE2NHBmcjBfZWwxCisJdWJmeAl4Miwg eDIsICMyNCwgIzQJCS8qIEdJQyBmaWVsZCAqLworCWNtcAl4MiwgIzB4MQkJLyogMDAwMSAtIFNS IENQVSBJRiBzdXBwb3J0ZWQgKi8KKwliLm5lCTJmCisKKwltcnMJeDIsIGljY19zcmVfZWwyCisJ b3JyCXgyLCB4MiwgI0lDQ19TUkVfRUwyX0VOCS8qIEVuYWJsZSBhY2Nlc3MgZnJvbSBpbnNlY3Vy ZSBFTDEgKi8KKwltc3IJaWNjX3NyZV9lbDIsIHgyCisJaXNiCisyOgorCiAJLyogU2V0IHRoZSBh ZGRyZXNzIHRvIHJldHVybiB0byBvdXIgcmV0dXJuIGFkZHJlc3MgKi8KIAltc3IJZWxyX2VsMiwg eDMwCiAKZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmggYi9zeXMvYXJt NjQvYXJtNjQvZ2ljX3YzX3Zhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwK KysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaApAQCAtMCwwICsxLDEwNyBAQAorLyot CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2Vt aWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9u LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg Ki8KKworI2lmbmRlZiBfR0lDX1YzX1ZBUl9IXworI2RlZmluZSBfR0lDX1YzX1ZBUl9IXworCisj ZGVmaW5lCUdJQ19WM19ERVZTVFIJIkFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIHYz LjAiCisKK3N0cnVjdCBnaWNfcmVkaXN0cyB7CisJLyoKKwkgKiBSZS1EaXN0cmlidXRvciByZWdp b24gZGVzY3JpcHRpb24uCisJICogV2Ugd2lsbCBoYXZlIGZldyBvZiB0aG9zZSBkZXBlbmRpbmcK KwkgKiBvbiB0aGUgI3JlZGlzdHJpYnV0b3ItcmVnaW9ucyBwcm9wZXJ0eSBpbiBGRFQuCisJICov CisJc3RydWN0IHJlc291cmNlICoqCXJlZ2lvbnM7CisJLyogTnVtYmVyIG9mIFJlLURpc3RyaWJ1 dG9yIHJlZ2lvbnMgKi8KKwl1X2ludAkJCW5yZWdpb25zOworCS8qIFBlci1DUFUgUmUtRGlzdHJp YnV0b3IgaGFuZGxlciAqLworCXN0cnVjdCByZXNvdXJjZSAqCXBjcHVbTUFYQ1BVXTsKK307CisK K3N0cnVjdCBnaWNfdjNfc29mdGMgeworCWRldmljZV90CQlkZXY7CisJc3RydWN0IHJlc291cmNl ICoqCWdpY19yZXM7CisJc3RydWN0IG10eAkJZ2ljX210eDsKKwkvKiBEaXN0cmlidXRvciAqLwor CXN0cnVjdCByZXNvdXJjZSAqCWdpY19kaXN0OworCS8qIFJlLURpc3RyaWJ1dG9ycyAqLworCXN0 cnVjdCBnaWNfcmVkaXN0cwlnaWNfcmVkaXN0czsKKworCXVfaW50CQkJZ2ljX25pcnFzOworCXVf aW50CQkJZ2ljX2lkYml0czsKK307CisKK2V4dGVybiBkZXZjbGFzc190IGdpY192M19kZXZjbGFz czsKKworTUFMTE9DX0RFQ0xBUkUoTV9HSUNfVjMpOworCisvKiBEZXZpY2UgYW5kIFBJQyBtZXRo b2RzICovCitpbnQgZ2ljX3YzX2F0dGFjaChkZXZpY2VfdCBkZXYpOworaW50IGdpY192M19kZXRh Y2goZGV2aWNlX3QgZGV2KTsKKwordm9pZCBnaWNfdjNfZGlzcGF0Y2goZGV2aWNlX3QsIHN0cnVj dCB0cmFwZnJhbWUgKik7Cit2b2lkIGdpY192M19lb2koZGV2aWNlX3QsIHVfaW50KTsKK3ZvaWQg Z2ljX3YzX21hc2tfaXJxKGRldmljZV90LCB1X2ludCk7Cit2b2lkIGdpY192M191bm1hc2tfaXJx KGRldmljZV90LCB1X2ludCk7CisKKy8qCisgKiBHSUMgRGlzdHJpYnV0b3IgYWNjZXNzb3JzLgor ICogTm90aWNlIHRoYXQgb25seSBHSUMgc29mYyBjYW4gYmUgcGFzc2VkLgorICovCisjZGVmaW5l CWdpY19kX3JlYWQoc2MsIGxlbiwgcmVnKQkJXAorKHsJCQkJCQlcCisJYnVzX3JlYWRfIyNsZW4o c2MtPmdpY19kaXN0LCByZWcpOwlcCit9KQorCisjZGVmaW5lCWdpY19kX3dyaXRlKHNjLCBsZW4s IHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJYnVzX3dyaXRlXyMjbGVuKHNjLT5naWNfZGlzdCwg cmVnLCB2YWwpO1wKK30pCisKKy8qIEdJQyBSZS1EaXN0cmlidXRvciBhY2Nlc3NvcnMgKHBlci1D UFUpICovCisjZGVmaW5lCWdpY19yX3JlYWQoc2MsIGxlbiwgcmVnKQkJXAorKHsJCQkJCQlcCisJ dV9pbnQgY3B1ID0gUENQVV9HRVQoY3B1aWQpOwkJXAorCQkJCQkJXAorCWJ1c19yZWFkXyMjbGVu KAkJCQlcCisJICAgIHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdV0sCQlcCisJICAgIHJlZyk7CQkJ CVwKK30pCisKKyNkZWZpbmUJZ2ljX3Jfd3JpdGUoc2MsIGxlbiwgcmVnLCB2YWwpCQlcCisoewkJ CQkJCVwKKwl1X2ludCBjcHUgPSBQQ1BVX0dFVChjcHVpZCk7CQlcCisJCQkJCQlcCisJYnVzX3dy aXRlXyMjbGVuKAkJCVwKKwkgICAgc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1XSwJCVwKKwkgICAg cmVnLCB2YWwpOwkJCQlcCit9KQorCisjZW5kaWYgLyogX0dJQ19WM19WQVJfSF8gKi8KZGlmZiAt LWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmggYi9zeXMvYXJtNjQvYXJtNjQvZ2lj X3YzX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Fy bTY0L2FybTY0L2dpY192M19yZWcuaApAQCAtMCwwICsxLDE2OCBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIK KyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl ZiBfR0lDX1YzX1JFR19IXworI2RlZmluZSBfR0lDX1YzX1JFR19IXworCisvKgorICogUHJpb3Jp dHkgTUFYL01JTiB2YWx1ZXMKKyAqLworI2RlZmluZQlHSUNfUFJJT1JJVFlfTUFYCTB4MDBVTAor LyogVXBwZXIgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBMUEkgbWF4IHByaW9yaXR5ICovCisjZGVm aW5lCUdJQ19QUklPUklUWV9NSU4JMHhGQ1VMCisKKy8qIE51bWJlcnMgZm9yIHNvZnR3YXJlIGdl bmVyYXRlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9TR0kJCSgwKQorI2RlZmlu ZQlHSUNfTEFTVF9TR0kJCSgxNSkKKy8qIE51bWJlcnMgZm9yIHByaXZhdGUgcGVyaXBoZXJhbCBp bnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9QUEkJCSgxNikKKyNkZWZpbmUJR0lDX0xB U1RfUFBJCQkoMzEpCisvKiBOdW1iZXJzIGZvciBzcGFyZWQgcGVyaXBoZXJhbCBpbnRlcnJ1cHRz ICovCisjZGVmaW5lCUdJQ19GSVJTVF9TUEkJCSgzMikKKyNkZWZpbmUJR0lDX0xBU1RfU1BJCQko MTAxOSkKKy8qIE51bWJlcnMgZm9yIGxvY2FsIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2Rl ZmluZQlHSUNfRklSU1RfTFBJCQkoODE5MikKKworLyoKKyAqIFJlZ2lzdGVycyAodjIvdjMpCisg Ki8KKyNkZWZpbmUJR0lDRF9DVExSCQkweDAwMDAKKyNkZWZpbmUJR0lDRF9DVExSX0cxCQkoMSA8 PCAwKQorI2RlZmluZQlHSUNEX0NUTFJfRzFBCQkoMSA8PCAxKQorI2RlZmluZQlHSUNEX0NUTFJf QVJFX05TCSgxIDw8IDQpCisjZGVmaW5lCUdJQ0RfQ1RMUl9SV1AJCSgxIDw8IDMxKQorCisjZGVm aW5lCUdJQ0RfVFlQRVIJCSgweDAwMDQpCisjZGVmaW5lCQlHSUNEX1RZUEVSX0lEQklUUyh4KQko KCgoeCkgPj4gMTkpICYgMHgxRikgKyAxKQorCisjZGVmaW5lCUdJQ0RfSVNFTkFCTEVSKG4pCSgw eDAxMDAgKyAoKChuKSA+PiA1KSAqIDQpKQorI2RlZmluZQlHSUNEX0lDRU5BQkxFUihuKQkoMHgw MTgwICsgKCgobikgPj4gNSkgKiA0KSkKKyNkZWZpbmUJR0lDRF9JUFJJT1JJVFlSKG4pCSgweDA0 MDAgKyAoKChuKSA+PiAyKSAqIDQpKQorI2RlZmluZQlHSUNEX0lfTUFTSyhuKQkJKDEgPDwgKChu KSAlIDMyKSkKKworI2RlZmluZQlHSUNEX0lDRkdSKG4pCQkoMHgwQzAwICsgKChuKSAqIDQpKQor LyogRmlyc3QgYml0IGlzIGEgcG9sYXJpdHkgYml0ICgwIC0gbG93LCAxIC0gaGlnaCkgKi8KKyNk ZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0xPVwkoMCA8PCAwKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9Q T0xfSElHSAkoMSA8PCAwKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9QT0xfTUFTSwkweDEKKy8qIFNl Y29uZCBiaXQgaXMgYSB0cmlnZ2VyIGJpdCAoMCAtIGxldmVsLCAxIC0gZWRnZSkgKi8KKyNkZWZp bmUJCUdJQ0RfSUNGR1JfVFJJR19MVkwJKDAgPDwgMSkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfVFJJ R19FREdFCSgxIDw8IDEpCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfTUFTSwkweDIKKworLyoK KyAqIFJlZ2lzdGVycyAodjMpCisgKi8KKyNkZWZpbmUJR0lDRF9JUk9VVEVSKG4pCQkoMHg2MDAw ICsgKChuKSAqIDgpKQorI2RlZmluZQlHSUNEX1BJRFIyCQkoMHhGRkU4KQorCisjZGVmaW5lCUdJ Q1JfUElEUjJfQVJDSF9NQVNLCSgweEYwKQorI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfR0lDdjMJ KDB4MzApCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9HSUN2NAkoMHg0MCkKKworLyogUmVkaXN0 cmlidXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lDUl9QSURSMgkJR0lDRF9QSURSMgorCisj ZGVmaW5lCUdJQ1JfVFlQRVIJCSgweDAwMDgpCisjZGVmaW5lCUdJQ1JfVFlQRVJfVkxQSVMJKDEg PDwgMSkKKyNkZWZpbmUJR0lDUl9UWVBFUl9MQVNUCQkoMSA8PCA0KQorCisjZGVmaW5lCUdJQ1Jf V0FLRVIJCSgweDAwMTQpCisjZGVmaW5lCUdJQ1JfV0FLRVJfUFMJCSgxIDw8IDEpIC8qIFByb2Nl c3NvciBzbGVlcCAqLworI2RlZmluZQlHSUNSX1dBS0VSX0NBCQkoMSA8PCAyKSAvKiBDaGlsZHJl biBhc2xlZXAgKi8KKworLyogUmUtZGlzdHJpYnV0b3IgcmVnaXN0ZXJzIGZvciBTR0lzIGFuZCBQ UElzICovCisjZGVmaW5lCUdJQ1JfUkRfQkFTRV9TSVpFCVBBR0VfU0laRV82NEsKKyNkZWZpbmUJ R0lDUl9TR0lfQkFTRV9TSVpFCVBBR0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9WTFBJX0JBU0Vf U0laRQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUdJQ1JfUkVTRVJWRURfU0laRQlQQUdFX1NJWkVf NjRLCisKKyNkZWZpbmUJR0lDUl9JU0VOQUJMRVIwCQkJCSgweDAxMDApCisjZGVmaW5lCUdJQ1Jf SUNFTkFCTEVSMAkJCQkoMHgwMTgwKQorI2RlZmluZQkJR0lDUl9JX0VOQUJMRVJfU0dJX01BU0sJ CSgweDAwMDBGRkZGKQorI2RlZmluZQkJR0lDUl9JX0VOQUJMRVJfUFBJX01BU0sJCSgweEZGRkYw MDAwKQorCisvKgorICogQ1BVIGludGVyZmFjZQorICovCisKKy8qCisgKiBSZWdpc3RlcnMgbGlz dCAoSUNDX3h5el9FTDEpOgorICoKKyAqIFBNUiAgICAgLSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVy CisgKgkJKiBpbnRlcnJ1cHRzIG9mIHByaW9yaXR5IGhpZ2hlciB0aGFuIHNwZWNpZmllZAorICoJ CSAgaW4gdGhpcyBtYXNrIHdpbGwgYmUgc2lnbmFsbGVkIHRvIHRoZSBDUFUuCisgKgkJICAoMHhm ZiAtIGxvd2VzdCBwb3NzaWJsZSBwcmlvLiwgMHgwMCAtIGhpZ2hlc3QgcHJpby4pCisgKgorICog Q1RMUiAgICAtIENvbnRyb2wgUmVnaXN0ZXIKKyAqCQkqIGNvbnRyb2xzIGJlaGF2aW9yIG9mIHRo ZSBDUFUgaW50ZXJmYWNlIGFuZCBkaXNwbGF5cworICoJCSAgaW1wbGVtZW50ZWQgZmVhdHVyZXMu CisgKgorICogSUdSUEVOMSAtIEludGVycnVwdCBHcm91cCAxIEVuYWJsZSBSZWdpc3RlcgorICoK KyAqIElBUjEgICAgLSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgR3JvdXAgMQorICoJ CSogY29udGFpbnMgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcKKyAqCQkg IGludGVycnVwdCBmcm9tIHRoZSBHcm91cCAxLgorICoKKyAqIEVPSVIxICAgLSBFbmQgb2YgSW50 ZXJydXB0IFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIFdyaXRlcyBpbmZvcm0gQ1BVIGludGVyZmFj ZSBhYm91dCBjb21wbGV0ZWQgR3JvdXAgMQorICoJCSAgaW50ZXJydXB0cyBwcm9jZXNzaW5nLgor ICovCisKKyNkZWZpbmUJZ2ljX2ljY193cml0ZShyZWcsIHZhbCkJCQkJCVwKK2RvIHsJCQkJCQkJ CVwKKwlXUklURV9TUEVDSUFMUkVHKElDQ18gIyNyZWcgIyNfRUwxLCB2YWwpOwkJXAorCWlzYigp OwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCWdpY19pY2NfcmVhZChyZWcpCQkJCQlc CisoewkJCQkJCQkJXAorCXVpbnQ2NF90IHZhbDsJCQkJCQlcCisJCQkJCQkJCVwKKwl2YWwgPSBS RUFEX1NQRUNJQUxSRUcoSUNDXyAjI3JlZyAjI19FTDEpOwkJXAorCSh2YWwpOwkJCQkJCQlcCit9 KQorCisjZGVmaW5lCWdpY19pY2Nfc2V0KHJlZywgbWFzaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwK Kwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlcCisJ dmFsIHw9IChtYXNrKTsJCQkJCQlcCisJZ2ljX2ljY193cml0ZShyZWcsIHZhbCk7CQkJCVwKK30g d2hpbGUgKDApCisKKyNkZWZpbmUJZ2ljX2ljY19jbGVhcihyZWcsIG1hc2spCQkJCVwKK2RvIHsJ CQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcp OwkJCQlcCisJdmFsICY9IH4obWFzayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwp OwkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0dJQ19WM19SRUdfSF8gKi8KZGlmZiAt LWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2lj X3YzX2ZkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Fy bTY0L2FybTY0L2dpY192M19mZHQuYwpAQCAtMCwwICsxLDE1NiBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIK KyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1 ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lz L3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgor I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8 c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3BjcHUu aD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNpbmNs dWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8ZGV2 L2ZkdC9mZHRfY29tbW9uLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1 ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+ CisKKyNpbmNsdWRlICJwaWNfaWYuaCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNs dWRlICJnaWNfdjNfdmFyLmgiCisKKy8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RydWN0IGdpY192 M19vZndfZGV2aW5mbyB7CisJc3RydWN0IG9md19idXNfZGV2aW5mbwlkaV9kaW5mbzsKKwlzdHJ1 Y3QgcmVzb3VyY2VfbGlzdAlkaV9ybDsKK307CisKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9wcm9i ZShkZXZpY2VfdCk7CitzdGF0aWMgaW50IGdpY192M19mZHRfYXR0YWNoKGRldmljZV90KTsKK3N0 YXRpYyBpbnQgZ2ljX3YzX2ZkdF9kZXRhY2goZGV2aWNlX3QpOworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9md19idXNfZGV2aW5mbyAqCitnaWNfdjNfb2Z3X2dldF9kZXZpbmZvKGRldmljZV90IF9f dW51c2VkLCBkZXZpY2VfdCk7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX21ldGhv ZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9i ZSwJCWdpY192M19mZHRfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlnaWNfdjNf ZmR0X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWdpY192M19mZHRfZGV0YWNo KSwKKworCS8qIFBJQyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc3BhdGNoLAkJZ2lj X3YzX2Rpc3BhdGNoKSwKKwlERVZNRVRIT0QocGljX2VvaSwJCWdpY192M19lb2kpLAorCURFVk1F VEhPRChwaWNfbWFzaywJCWdpY192M19tYXNrX2lycSksCisJREVWTUVUSE9EKHBpY191bm1hc2ss CQlnaWNfdjNfdW5tYXNrX2lycSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9Owor CitzdGF0aWMgZHJpdmVyX3QgZ2ljX3YzX2RyaXZlciA9IHsKKwkiZ2ljIiwKKwlnaWNfdjNfbWV0 aG9kcywKKwlzaXplb2Yoc3RydWN0IGdpY192M19zb2Z0YyksCit9OworCitFQVJMWV9EUklWRVJf TU9EVUxFKGdpY192Mywgc2ltcGxlYnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZGV2Y2xhc3Ms IDAsIDAsCisgICAgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsK K0VBUkxZX0RSSVZFUl9NT0RVTEUoZ2ljX3YzLCBvZndidXMsIGdpY192M19kcml2ZXIsIGdpY192 M19kZXZjbGFzcywgMCwgMCwKKyAgICBCVVNfUEFTU19JTlRFUlJVUFQgKyBCVVNfUEFTU19PUkRF Ul9NSURETEUpOworCisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworc3RhdGljIGludAor Z2ljX3YzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlpZiAoIW9md19idXNfc3RhdHVz X29rYXkoZGV2KSkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAoIW9md19idXNfaXNfY29tcGF0 aWJsZShkZXYsICJhcm0sZ2ljLXYzIikpCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2aWNlX3Nl dF9kZXNjKGRldiwgR0lDX1YzX0RFVlNUUik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7 Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19mZHRfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlz dHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlwY2VsbF90IHJlZGlzdF9yZWdpb25zOworCWludCBl cnI7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJ LyoKKwkgKiBSZWNvdmVyIG51bWJlciBvZiB0aGUgUmUtRGlzdHJpYnV0b3IgcmVnaW9ucy4KKwkg Ki8KKwlpZiAoT0ZfZ2V0ZW5jcHJvcChvZndfYnVzX2dldF9ub2RlKGRldiksICIjcmVkaXN0cmli dXRvci1yZWdpb25zIiwKKwkgICAgJnJlZGlzdF9yZWdpb25zLCBzaXplb2YocmVkaXN0X3JlZ2lv bnMpKSA8PSAwKQorCQlzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgPSAxOworCWVsc2UKKwkJc2Mt PmdpY19yZWRpc3RzLm5yZWdpb25zID0gcmVkaXN0X3JlZ2lvbnM7CisKKwllcnIgPSBnaWNfdjNf YXR0YWNoKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAoZXJyKTsK KworZXJyb3I6CisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LAorCQkg ICAgIkZhaWxlZCB0byBhdHRhY2guIEVycm9yICVkXG4iLCBlcnIpOworCX0KKwkvKiBGYWlsdXJl IHNvIGZyZWUgcmVzb3VyY2VzICovCisJZ2ljX3YzX2ZkdF9kZXRhY2goZGV2KTsKKworCXJldHVy biAoZXJyKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX2ZkdF9kZXRhY2goZGV2aWNlX3QgZGV2 KQoreworCisJcmV0dXJuIChnaWNfdjNfZGV0YWNoKGRldikpOworfQpkaWZmIC0tZ2l0IGEvc3lz L2FybTY0L2FybTY0L2dpY192My5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5j CkBAIC0wLDAgKzEsNTY0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgRnJlZUJT RCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdh cmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3JzaGlwIG9m IHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZC U0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxz eXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5o PgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVk ZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3Bj cHUuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNp bmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8 dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS9wbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5o PgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNp bmNsdWRlICJnaWNfdjNfcmVnLmgiCisjaW5jbHVkZSAiZ2ljX3YzX3Zhci5oIgorCisvKgorICog RHJpdmVyLXNwZWNpZmljIGRlZmluaXRpb25zLgorICovCitNQUxMT0NfREVGSU5FKE1fR0lDX1Yz LCAiR0lDdjMiLCBHSUNfVjNfREVWU1RSKTsKKworZGV2Y2xhc3NfdCBnaWNfdjNfZGV2Y2xhc3M7 CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucy4KKyAqLworLyogRGVz dGluYXRpb24gcmVnaXN0ZXJzLCBlaXRoZXIgRGlzdHJpYnV0b3Igb3IgUmUtRGlzdHJpYnV0b3Ig Ki8KK2VudW0gZ2ljX3YzX3hkaXN0IHsKKwlESVNUID0gMCwKKwlSRURJU1QsCit9OworCisvKiBI ZWxwZXIgcm91dGluZXMgc3RhcnRpbmcgd2l0aCBnaWNfdjNfICovCitzdGF0aWMgaW50IGdpY192 M19kaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgZ2ljX3YzX3Jl ZGlzdF9maW5kKHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgaW50IGdpY192M19yZWRp c3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIGludCBnaWNfdjNfY3B1X2lu aXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGdpY192M193YWl0X2Zvcl9y d3Aoc3RydWN0IGdpY192M19zb2Z0YyAqLCBlbnVtIGdpY192M194ZGlzdCk7CisKKy8qIEEgc2Vx dWVuY2Ugb2YgaW5pdCBmdW5jdGlvbnMgZm9yIHByaW1hcnkgKGJvb3QpIENQVSAqLwordHlwZWRl ZiBpbnQgKCpnaWNfdjNfaW5pdHNlcV90KSAoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKKy8qIFBy aW1hcnkgQ1BVIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCitzdGF0aWMgZ2ljX3YzX2luaXRz ZXFfdCBnaWNfdjNfcHJpbWFyeV9pbml0W10gPSB7CisJZ2ljX3YzX2Rpc3RfaW5pdCwKKwlnaWNf djNfcmVkaXN0X2luaXQsCisJZ2ljX3YzX2NwdV9pbml0LAorCU5VTEwKK307CisKKy8qCisgKiBE ZXZpY2UgaW50ZXJmYWNlLgorICovCitpbnQKK2dpY192M19hdHRhY2goZGV2aWNlX3QgZGV2KQor eworCXN0cnVjdCBnaWNfdjNfc29mdGMgKnNjOworCWdpY192M19pbml0c2VxX3QgKmluaXRfZnVu YzsKKwl1aW50MzJfdCB0eXBlcjsKKwlpbnQgcmlkOworCWludCBlcnI7CisJc2l6ZV90IGk7CisK KwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2OworCWVyciA9IDA7 CisKKwkvKiBJbml0aWFsaXplIG11dGV4ICovCisJbXR4X2luaXQoJnNjLT5naWNfbXR4LCAiR0lD djMgbG9jayIsIE5VTEwsIE1UWF9TUElOKTsKKworCS8qCisJICogQWxsb2NhdGUgYXJyYXkgb2Yg c3RydWN0IHJlc291cmNlLgorCSAqIE9uZSBlbnRyeSBmb3IgRGlzdHJpYnV0b3IgYW5kIGFsbCBy ZW1haW5pbmcgZm9yIFJlLURpc3RyaWJ1dG9yLgorCSAqLworCXNjLT5naWNfcmVzID0gbWFsbG9j KAorCSAgICBzaXplb2Yoc2MtPmdpY19yZXMpICogKHNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyAr IDEpLAorCSAgICBNX0dJQ19WMywgTV9XQUlUT0spOworCisJLyogTm93IGFsbG9jYXRlIGNvcnJl c3BvbmRpbmcgcmVzb3VyY2VzICovCisJZm9yIChpID0gMCwgcmlkID0gMDsgaSA8IChzYy0+Z2lj X3JlZGlzdHMubnJlZ2lvbnMgKyAxKTsgaSsrLCByaWQrKykgeworCQlzYy0+Z2ljX3Jlc1tyaWRd ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkgICAgJnJp ZCwgUkZfQUNUSVZFKTsKKwkJaWYgKHNjLT5naWNfcmVzW3JpZF0gPT0gTlVMTCkgeworCQkJZXJy ID0gRU5YSU87CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJLyoKKwkgKiBEaXN0cmlidXRv ciBpbnRlcmZhY2UKKwkgKi8KKwlzYy0+Z2ljX2Rpc3QgPSBzYy0+Z2ljX3Jlc1swXTsKKworCS8q CisJICogUmUtRHJpc3RyaWJ1dG9yIGludGVyZmFjZQorCSAqLworCS8qIEFsbG9jYXRlIHNwYWNl IHVuZGVyIHJlZ2lvbiBkZXNjcmlwdGlvbnMgKi8KKwlzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucyA9 IG1hbGxvYygKKwkgICAgc2l6ZW9mKCpzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucykgKiBzYy0+Z2lj X3JlZGlzdHMubnJlZ2lvbnMsCisJICAgIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBGaWxs LXVwIGJ1c19zcGFjZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCByZWdpb24uICovCisJZm9yIChpID0g MCwgcmlkID0gMTsgaSA8IHNjLT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrLCByaWQrKykKKwkJ c2MtPmdpY19yZWRpc3RzLnJlZ2lvbnNbaV0gPSBzYy0+Z2ljX3Jlc1tyaWRdOworCisJLyogR2V0 IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIFNQSSBpbnRlcnJ1cHRzICovCisJdHlwZXIgPSBnaWNf ZF9yZWFkKHNjLCA0LCBHSUNEX1RZUEVSKTsKKwlzYy0+Z2ljX25pcnFzID0gdHlwZXIgJiAweDFG OworCXNjLT5naWNfbmlycXMgPSAoc2MtPmdpY19uaXJxcyArIDEpICogMzI7CisJaWYgKHNjLT5n aWNfbmlycXMgPiAxMDIwKQorCQlzYy0+Z2ljX25pcnFzID0gMTAyMDsKKworCS8qIEdldCB0aGUg bnVtYmVyIG9mIHN1cHBvcnRlZCBpbnRlcnJ1cHQgaWRlbnRpZmllciBiaXRzICovCisJc2MtPmdp Y19pZGJpdHMgPSBHSUNEX1RZUEVSX0lEQklUUyh0eXBlcik7CisKKwlpZiAoYm9vdHZlcmJvc2Up IHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTUElzOiAldSwgSURzOiAldVxuIiwKKwkJICAgIHNj LT5naWNfbmlycXMsICgxIDw8IHNjLT5naWNfaWRiaXRzKSAtIDEpOworCX0KKworCS8qIFRyYWlu IGluaXQgc2VxdWVuY2UgZm9yIGJvb3QgQ1BVICovCisJZm9yIChpbml0X2Z1bmMgPSBnaWNfdjNf cHJpbWFyeV9pbml0OyAqaW5pdF9mdW5jICE9IE5VTEw7IGluaXRfZnVuYysrKSB7CisJCWVyciA9 ICgqaW5pdF9mdW5jKShzYyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCX0KKwkvKgor CSAqIEZ1bGwgc3VjY2Vzcy4KKwkgKiBOb3cgcmVnaXN0ZXIgUElDIHRvIHRoZSBpbnRlcnJ1cHRz IGhhbmRsaW5nIGxheWVyLgorCSAqLworCWFybV9yZWdpc3Rlcl9yb290X3BpYyhkZXYsIHNjLT5n aWNfbmlycXMpOworCitlcnJvcjoKKwlyZXR1cm4gKGVycik7Cit9CisKK2ludAorZ2ljX3YzX2Rl dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJc2l6ZV90 IGk7CisJaW50IHJpZDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGRl dmljZV9pc19hdHRhY2hlZChkZXYpKSB7CisJCS8qCisJCSAqIFhYWDogV2Ugc2hvdWxkIHByb2Jh Ymx5IGRlcmVnaXN0ZXIgUElDCisJCSAqLworCX0KKwlmb3IgKGkgPSAwLCByaWQgPSAwOyBpIDwg KHNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyArIDEpOyBpKyssIHJpZCsrKQorCQlidXNfcmVsZWFz ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCByaWQsIHNjLT5naWNfcmVzW3JpZF0pOwor CisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKQorCQlmcmVlKHNjLT5naWNfcmVkaXN0cy5w Y3B1W2ldLCBNX0dJQ19WMyk7CisKKwlmcmVlKHNjLT5naWNfcmVzLCBNX0dJQ19WMyk7CisJZnJl ZShzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucywgTV9HSUNfVjMpOworCisJcmV0dXJuICgwKTsKK30K KworLyoKKyAqIFBJQyBpbnRlcmZhY2UuCisgKi8KK3ZvaWQKK2dpY192M19kaXNwYXRjaChkZXZp Y2VfdCBkZXYsIHN0cnVjdCB0cmFwZnJhbWUgKmZyYW1lKQoreworCXVpbnQ2NF90IGFjdGl2ZV9p cnE7CisKKwl3aGlsZSAoMSkgeworCQlhY3RpdmVfaXJxID0gZ2ljX2ljY19yZWFkKElBUjEpOwor CisJCWlmIChfX3ByZWRpY3RfZmFsc2UoYWN0aXZlX2lycSA9PSBJQ0NfSUFSMV9FTDFfU1BVUikp CisJCQlicmVhazsKKworCQlpZiAoX19wcmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lDX0ZJ UlNUX1BQSSAmJgorCQkgICAgYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkJYXJt X2Rpc3BhdGNoX2ludHIoYWN0aXZlX2lycSwgZnJhbWUpOworCQkJY29udGludWU7CisJCX0KKwor CQlpZiAoYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TR0kgfHwgYWN0aXZlX2lycSA+PSBHSUNfRklS U1RfTFBJKSB7CisJCQkvKgorCQkJICogVE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kvTFBJIGhh bmRsaW5nLgorCQkJICogICAgICAgTWFzayBpdCBpZiBzdWNoIGlzIHJlY2VpdmVkIGZvciBzb21l IHJlYXNvbi4KKwkJCSAqLworCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIlJlY2VpdmVk IHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiAlc1xuIiwKKwkJCSAgICBhY3RpdmVfaXJxID49 IEdJQ19GSVJTVF9MUEkgPyAiTFBJIiA6ICJTR0kiKTsKKwkJCVBJQ19NQVNLKGRldiwgYWN0aXZl X2lycSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK2dpY192M19lb2koZGV2aWNlX3QgZGV2LCB1X2lu dCBpcnEpCit7CisKKwlnaWNfaWNjX3dyaXRlKEVPSVIxLCAodWludDY0X3QpaXJxKTsKK30KKwor dm9pZAorZ2ljX3YzX21hc2tfaXJxKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCXN0cnVj dCBnaWNfdjNfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlp ZiAoaXJxID49IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQUElz IGluIGNvcnJlc3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQs CisJCSAgICBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNEX0lDRU5BQkxFUihpcnEpLCBHSUNEX0lf TUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVsc2Ug aWYgKGlycSA+PSBHSUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJ cyBpbiBkaXN0cmlidXRvciAqLworCQlnaWNfcl93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIo aXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1Qp OworCX0gZWxzZQorCQlwYW5pYygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1 bmNfXywgaXJxKTsKK30KKwordm9pZAorZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3QgZGV2LCB1 X2ludCBpcnEpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9n ZXRfc29mdGMoZGV2KTsKKworCWlmIChpcnEgPj0gR0lDX0ZJUlNUX1BQSSAmJiBpcnEgPD0gR0lD X0xBU1RfUFBJKSB7IC8qIFBQSXMgaW4gY29ycmVzcG9uZGluZyBSZS1EaXN0cmlidXRvciAqLwor CQlnaWNfcl93cml0ZShzYywgNCwKKwkJICAgIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ0RfSVNF TkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNj LCBSRURJU1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJ Q19MQVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCisJCWdpY19kX3dyaXRlKHNj LCA0LCBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dh aXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlCisJCXBhbmljKCIlczogVW5zdXBwb3J0ZWQg SVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOworfQorCisvKgorICogSGVscGVyIHJvdXRp bmVzCisgKi8KK3N0YXRpYyB2b2lkCitnaWNfdjNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNf c29mdGMgKnNjLCBlbnVtIGdpY192M194ZGlzdCB4ZGlzdCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgdXNfbGVmdCA9IDEwMDAwMDA7CisKKwljcHVp ZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCXN3aXRjaCAoeGRpc3QpIHsKKwljYXNlIERJU1Q6CisJ CXJlcyA9IHNjLT5naWNfZGlzdDsKKwkJYnJlYWs7CisJY2FzZSBSRURJU1Q6CisJCXJlcyA9IHNj LT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FTU0VS VCgwLCAoIiVzOiBBdHRlbXB0IHRvIHdhaXQgZm9yIHVua25vd24gUldQIiwgX19mdW5jX18pKTsK KwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoYnVzX3JlYWRfNChyZXMsIEdJQ0RfQ1RMUikgJiBH SUNEX0NUTFJfUldQKSAhPSAwKSB7CisJCURFTEFZKDEpOworCQlpZiAodXNfbGVmdC0tID09IDAp IHsKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiR0lDRCBSZWdpc3RlciB3cml0 ZSBwZW5kaW5nIGZvciB0b28gbG9uZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisvKiBD UFUgaW50ZXJmYWNlLiAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2dpY192M19jcHVfcHJpb3Jp dHkodWludDY0X3QgbWFzaykKK3sKKworCS8qIFNldCBwcm9yaXR5IG1hc2sgKi8KKwlnaWNfaWNj X3dyaXRlKFBNUiwgbWFzayAmIDB4RkZVTCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19jcHVf ZW5hYmxlX3NyZShzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBzcmU7CisJ dV9pbnQgY3B1aWQ7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKwkvKgorCSAqIFNldCB0 aGUgU1JFIGJpdCB0byBlbmFibGUgYWNjZXNzIHRvIEdJQyBDUFUgaW50ZXJmYWNlCisJICogdmlh IHN5c3RlbSByZWdpc3RlcnMuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19zcmVf ZWwxKTsKKwlzcmUgfD0gSUNDX1NSRV9FTDFfU1JFOworCVdSSVRFX1NQRUNJQUxSRUcoaWNjX3Ny ZV9lbDEsIHNyZSk7CisJaXNiKCk7CisJLyoKKwkgKiBOb3cgZW5zdXJlIHRoYXQgdGhlIGJpdCBp cyBzZXQuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19zcmVfZWwxKTsKKwlpZiAo IShzcmUgJiBJQ0NfU1JFX0VMMV9TUkUpKSB7CisJCS8qIFdlIGFyZSBkb25lLiBUaGlzIHdhcyBk aXNhYmxlZCBpbiBFTDIgKi8KKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiRVJST1I6IENQVSV1 IGNhbm5vdCBlbmFibGUgQ1BVIGludGVyZmFjZSAiCisJCSAgICAidmlhIHN5c3RlbSByZWdpc3Rl cnNcbiIsIGNwdWlkKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfSBlbHNlIGlmIChib290dmVyYm9z ZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAgICAiQ1BVJXUgZW5hYmxlZCBDUFUg aW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLAorCQkgICAgY3B1aWQpOworCX0KKwor CXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19jcHVfaW5pdChzdHJ1Y3QgZ2lj X3YzX3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCisJLyogRW5hYmxlIGFjY2VzcyB0byBDUFUg aW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzICovCisJZXJyID0gZ2ljX3YzX2NwdV9lbmFi bGVfc3JlKHNjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gKGVycik7CisJLyogUHJpb3JpdHkgbWFz ayB0byBtaW5pbXVtIC0gYWNjZXB0IGFsbCBpbnRlcnJ1cHRzICovCisJZ2ljX3YzX2NwdV9wcmlv cml0eShHSUNfUFJJT1JJVFlfTUlOKTsKKwkvKiBEaXNhYmxlIEVPSSBtb2RlICovCisJZ2ljX2lj Y19jbGVhcihDVExSLCBJQ0NfQ1RMUl9FTDFfRU9JKTsKKwkvKiBFbmFibGUgZ3JvdXAgMSAoaW5z ZWN1cmUpIGludGVycnVwcyAqLworCWdpY19pY2Nfc2V0KElHUlBFTjEsIElDQ19JR1JQRU4wX0VM MV9FTik7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBEaXN0cmlidXRvciAqLworc3RhdGljIGlu dAorZ2ljX3YzX2Rpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50NjRf dCBhZmY7CisJdV9pbnQgaTsKKworCS8qCisJICogMS4gRGlzYWJsZSB0aGUgRGlzdHJpYnV0b3IK KwkgKi8KKwlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9DVExSLCAwKTsKKwlnaWNfdjNfd2FpdF9m b3JfcndwKHNjLCBESVNUKTsKKworCS8qCisJICogMi4gQ29uZmlndXJlIHRoZSBEaXN0cmlidXRv cgorCSAqLworCS8qIFNldCBhbGwgZ2xvYmFsIGludGVycnVwdHMgdG8gYmUgbGV2ZWwgdHJpZ2dl cmVkLCBhY3RpdmUgbG93LiAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2lj X25pcnFzOyBpICs9IDE2KQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0ZHUihpID4+IDQp LCAweDAwMDAwMDAwKTsKKworCS8qIFNldCBwcmlvcml0eSB0byBhbGwgc2hhcmVkIGludGVycnVw dHMgKi8KKwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSArPSA0 KSB7CisJCS8qIFNldCBoaWdoZXN0IHByaW9yaXR5ICovCisJCWdpY19kX3dyaXRlKHNjLCA0LCBH SUNEX0lQUklPUklUWVIoaSksIEdJQ19QUklPUklUWV9NQVgpOworCX0KKworCS8qCisJICogRGlz YWJsZSBhbGwgaW50ZXJydXB0cy4gTGVhdmUgUFBJIGFuZCBTR0lzIGFzIHRoZXkgYXJlIGVuYWJs ZWQgaW4KKwkgKiBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMuCisJICovCisJZm9yIChpID0gR0lD X0ZJUlNUX1NQSTsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gMzIpCisJCWdpY19kX3dyaXRlKHNj LCA0LCBHSUNEX0lDRU5BQkxFUihpKSwgMHhGRkZGRkZGRik7CisKKwlnaWNfdjNfd2FpdF9mb3Jf cndwKHNjLCBESVNUKTsKKworCS8qCisJICogMy4gRW5hYmxlIERpc3RyaWJ1dG9yCisJICovCisJ LyogRW5hYmxlIERpc3RyaWJ1dG9yIHdpdGggQVJFLCBHcm91cCAxICovCisJZ2ljX2Rfd3JpdGUo c2MsIDQsIEdJQ0RfQ1RMUiwgR0lDRF9DVExSX0FSRV9OUyB8IEdJQ0RfQ1RMUl9HMUEgfAorCSAg ICBHSUNEX0NUTFJfRzEpOworCisJLyoKKwkgKiA0LiBSb3V0ZSBhbGwgaW50ZXJydXB0cyB0byBi b290IENQVS4KKwkgKi8KKwlhZmYgPSBDUFVfQUZGSU5JVFkoUENQVV9HRVQoY3B1aWQpKTsKKwlm b3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSsrKQorCQlnaWNfZF93 cml0ZShzYywgNCwgR0lDRF9JUk9VVEVSKGkpLCBhZmYpOworCisJcmV0dXJuICgwKTsKK30KKwor LyogUmUtRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3RfZmluZChzdHJ1 Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ugcl9yZXM7CisJYnVzX3Nw YWNlX2hhbmRsZV90IHJfYnNoOworCXVpbnQ2NF90IGFmZjsKKwl1aW50NjRfdCB0eXBlcjsKKwl1 aW50MzJfdCBwaWRyMjsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgaTsKKworCWNwdWlkID0gUENQ VV9HRVQoY3B1aWQpOworCisJLyogQWxsb2NhdGUgc3RydWN0IHJlc291cmNlIGZvciB0aGlzIENQ VSdzIFJlLURpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLworCXNjLT5naWNfcmVkaXN0cy5wY3B1W2Nw dWlkXSA9CisJICAgIG1hbGxvYyhzaXplb2YoKnNjLT5naWNfcmVkaXN0cy5wY3B1WzBdKSwgTV9H SUNfVjMsIE1fV0FJVE9LKTsKKworCWFmZiA9IENQVV9BRkZJTklUWShjcHVpZCk7CisJLyogQWZm aW5pdHkgaW4gZm9ybWF0IGZvciBjb21wYXJpc29uIHdpdGggdHlwZXIgKi8KKwlhZmYgPSAoQ1BV X0FGRjMoYWZmKSA8PCAyNCkgfCAoQ1BVX0FGRjIoYWZmKSA8PCAxNikgfAorCSAgICAoQ1BVX0FG RjEoYWZmKSA8PCA4KSB8IENQVV9BRkYwKGFmZik7CisKKwlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkgICAgIlN0YXJ0IHNlYXJjaGluZyBmb3IgUmUtRGlz dHJpYnV0b3JcbiIpOworCX0KKwkvKiBJdGVyYXRlIHRocm91Z2ggUmUtRGlzdHJpYnV0b3IgcmVn aW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnM7IGkrKykg eworCQkvKiBUYWtlIGEgY29weSBvZiB0aGUgcmVnaW9uJ3MgcmVzb3VyY2UgKi8KKwkJcl9yZXMg PSAqc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnNbaV07CisJCXJfYnNoID0gcm1hbl9nZXRfYnVzaGFu ZGxlKCZyX3Jlcyk7CisKKwkJcGlkcjIgPSBidXNfcmVhZF80KCZyX3JlcywgR0lDUl9QSURSMik7 CisJCXN3aXRjaCAocGlkcjIgJiBHSUNSX1BJRFIyX0FSQ0hfTUFTSykgeworCQljYXNlIEdJQ1Jf UElEUjJfQVJDSF9HSUN2MzogLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgR0lDUl9QSURSMl9B UkNIX0dJQ3Y0OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5k ZXYsCisJCQkgICAgIk5vIFJlLURpc3RyaWJ1dG9yIGZvdW5kIGZvciBDUFUldVxuIiwgY3B1aWQp OworCQkJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwkJCXJl dHVybiAoRU5PREVWKTsKKwkJfQorCisJCWRvIHsKKwkJCXR5cGVyID0gYnVzX3JlYWRfOCgmcl9y ZXMsIEdJQ1JfVFlQRVIpOworCQkJaWYgKCh0eXBlciA+PiAzMikgPT0gYWZmKSB7CisJCQkJS0FT U0VSVChzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gIT0gTlVMTCwKKwkJCQkgICAgKCJJbnZh bGlkIHBvaW50ZXIgdG8gcGVyLUNQVSByZWRpc3RyaWJ1dG9yIikpOworCQkJCS8qIENvcHkgcmVz IGNvbnRlbnRzIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbiAqLworCQkJCSpzYy0+Z2ljX3JlZGlz dHMucGNwdVtjcHVpZF0gPSByX3JlczsKKwkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCQkJZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCQkgICAgIkNQVSV1IFJlLURpc3RyaWJ1dG9yIGhhcyBi ZWVuIGZvdW5kXG4iLAorCQkJCQkgICAgY3B1aWQpOworCQkJCX0KKwkJCQlyZXR1cm4gKDApOwor CQkJfQorCisJCQlyX2JzaCArPSAoR0lDUl9SRF9CQVNFX1NJWkUgKyBHSUNSX1NHSV9CQVNFX1NJ WkUpOworCQkJaWYgKHR5cGVyICYgR0lDUl9UWVBFUl9WTFBJUykgeworCQkJCXJfYnNoICs9CisJ CQkJICAgIChHSUNSX1ZMUElfQkFTRV9TSVpFICsgR0lDUl9SRVNFUlZFRF9TSVpFKTsKKwkJCX0K KworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKCZyX3Jlcywgcl9ic2gpOworCQl9IHdoaWxlICgodHlw ZXIgJiBHSUNSX1RZUEVSX0xBU1QpID09IDApOworCX0KKworCWZyZWUoc2MtPmdpY19yZWRpc3Rz LnBjcHVbY3B1aWRdLCBNX0dJQ19WMyk7CisJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiTm8gUmUt RGlzdHJpYnV0b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJcmV0dXJuIChFTlhJTyk7 Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3Rfd2FrZShzdHJ1Y3QgZ2ljX3YzX3NvZnRj ICpzYykKK3sKKwl1aW50MzJfdCB3YWtlcjsKKwlzaXplX3QgdXNfbGVmdCA9IDEwMDAwMDA7CisK Kwl3YWtlciA9IGdpY19yX3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpOworCS8qIFdha2UgdXAgUmUt RGlzdHJpYnV0b3IgZm9yIHRoaXMgQ1BVICovCisJd2FrZXIgJj0gfkdJQ1JfV0FLRVJfUFM7CisJ Z2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfV0FLRVIsIHdha2VyKTsKKwkvKgorCSAqIFdoZW4gY2xl YXJpbmcgUHJvY2Vzc29yU2xlZXAgYml0IGl0IGlzIHJlcXVpcmVkIHRvIHdhaXQgZm9yCisJICog Q2hpbGRyZW5Bc2xlZXAgdG8gYmVjb21lIHplcm8gZm9sbG93aW5nIHRoZSBwcm9jZXNzb3IgcG93 ZXItb24uCisJICovCisJd2hpbGUgKChnaWNfcl9yZWFkKHNjLCA0LCBHSUNSX1dBS0VSKSAmIEdJ Q1JfV0FLRVJfQ0EpICE9IDApIHsKKwkJREVMQVkoMSk7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkg eworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJDb3VsZCBub3Qgd2FrZSBSZS1E aXN0cmlidXRvciBmb3IgQ1BVJXUiLAorCQkJICAgIFBDUFVfR0VUKGNwdWlkKSk7CisJCQlyZXR1 cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWlmIChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJDUFUldSBSZS1EaXN0cmlidXRvciB3b2tlIHVwXG4iLAorCQkgICAgUENQ VV9HRVQoY3B1aWQpKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitnaWNf djNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsKKwlz aXplX3QgaTsKKworCWVyciA9IGdpY192M19yZWRpc3RfZmluZChzYyk7CisJaWYgKGVycikKKwkJ Z290byBlcnJvcjsKKworCWVyciA9IGdpY192M19yZWRpc3Rfd2FrZShzYyk7CisJaWYgKGVycikK KwkJZ290byBlcnJvcjsKKworCS8qIERpc2FibGUgU1BJcyAqLworCWdpY19yX3dyaXRlKHNjLCA0 LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNSX0lDRU5BQkxFUjAsCisJICAgIEdJQ1JfSV9FTkFC TEVSX1BQSV9NQVNLKTsKKwkvKiBFbmFibGUgU0dJcyAqLworCWdpY19yX3dyaXRlKHNjLCA0LCBH SUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNSX0lTRU5BQkxFUjAsCisJICAgIEdJQ1JfSV9FTkFCTEVS X1NHSV9NQVNLKTsKKworCS8qIFNldCBwcmlvcml0eSBmb3IgU0dJcyBhbmQgUFBJcyAqLworCWZv ciAoaSA9IDA7IGkgPD0gR0lDX0xBU1RfUFBJOyBpICs9IDQpIHsKKwkJZ2ljX3Jfd3JpdGUoc2Ms IDQsIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ0RfSVBSSU9SSVRZUihpKSwKKwkJICAgIEdJQ19Q UklPUklUWV9NQVgpOworCX0KKworCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIFJFRElTVCk7CisK K2Vycm9yOgorCXJldHVybiAoZXJyKTsKK30KCg== --b1_da8b1c7776e9b50d88b9b02f12c1bb97--