Date: Tue, 12 May 2015 16:35:10 +0000 From: "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org> To: freebsd-arm@freebsd.org Subject: [Differential] [Updated, 1, 031 lines] D2377: Introduce ARM GICv3 support Message-ID: <5d0214dede86ae74079a9a209dbb7bd0@localhost.localdomain> In-Reply-To: <differential-rev-PHID-DREV-piql4a7htwxjub743777-req@FreeBSD.org> References: <differential-rev-PHID-DREV-piql4a7htwxjub743777-req@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--b1_5d0214dede86ae74079a9a209dbb7bd0 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb updated this revision to Diff 5343. zbb marked an inline comment as done. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2377?vs=5327&id=5343 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_5d0214dede86ae74079a9a209dbb7bd0 Content-Type: text/x-patch; charset=utf-8; name="D2377.5343.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2377.5343.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTE5LDYgKzE5LDggQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0 L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKK2FybTY0L2FybTY0L2dpY192M19mZHQu YwlvcHRpb25hbAlmZHQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJCXN0YW5kYXJkCiBhcm02NC9h cm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQvaW5fY2tzdW0uYwkJb3B0 aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvaW5jbHVkZS9hcm1yZWcu aCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5cy9hcm02NC9pbmNsdWRlL2Fy bXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCkBAIC05Niw2ICs5NiwyNCBA QAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdhdGNocG9pbnQsIGZyb20gc2Ft ZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJlYWtwb2ludCAqLwogCisvKiBJ Q0NfQ1RMUl9FTDEgKi8KKyNkZWZpbmUJSUNDX0NUTFJfRUwxX0VPSU1PREUJKDFVIDw8IDEpCisK Ky8qIElDQ19JQVIxX0VMMSAqLworI2RlZmluZQlJQ0NfSUFSMV9FTDFfU1BVUgkoMHgwM2ZmKQor CisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBfRUwxX0VOCSgxVSA8 PCAwKQorCisvKiBJQ0NfUE1SX0VMMSAqLworI2RlZmluZQlJQ0NfUE1SX0VMMV9QUklPX01BU0sJ KDB4RkZVTCkKKworLyogSUNDX1NSRV9FTDEgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDFfU1JFCQko MVUgPDwgMCkKKworLyogSUNDX1NSRV9FTDIgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDJfRU4JCSgx VSA8PCAzKQorCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURfQUE2NFBGUjBfRUww X01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFTSwkoMHhmIDw8IDQp CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMgYi9zeXMvYXJtNjQvYXJtNjQv bG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2xvY29yZS5TCisrKyBiL3N5cy9hcm02NC9h cm02NC9sb2NvcmUuUwpAQCAtMTg3LDYgKzE4NywxOSBAQAogCW1vdgl4MiwgIyhQU1JfRiB8IFBT Ul9JIHwgUFNSX0EgfCBQU1JfRCB8IFBTUl9NX0VMMWgpCiAJbXNyCXNwc3JfZWwyLCB4MgogCisJ LyogQ29uZmlndXJlIEdJQ3YzIENQVSBpbnRlcmZhY2UgKi8KKwltcnMJeDIsIGlkX2FhNjRwZnIw X2VsMQorCXViZngJeDIsIHgyLCAjMjQsICM0CQkvKiBHSUMgZmllbGQgKi8KKwkvKiBHSUNbMzow XSA9PSAwMDAxIC0gR0lDIENQVSBpbnRlcmZhY2UgdmlhIHNwZWNpYWwgcmVncy4gc3VwcG9ydGVk ICovCisJY21wCXgyLCAjMHgxCisJYi5uZQkyZgorCisJbXJzCXgyLCBpY2Nfc3JlX2VsMgorCW9y cgl4MiwgeDIsICNJQ0NfU1JFX0VMMl9FTgkvKiBFbmFibGUgYWNjZXNzIGZyb20gaW5zZWN1cmUg RUwxICovCisJbXNyCWljY19zcmVfZWwyLCB4MgorCWlzYgorMjoKKwogCS8qIFNldCB0aGUgYWRk cmVzcyB0byByZXR1cm4gdG8gb3VyIHJldHVybiBhZGRyZXNzICovCiAJbXNyCWVscl9lbDIsIHgz MAogCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5oIGIvc3lzL2FybTY0 L2FybTY0L2dpY192M192YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr KyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWlo YWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4K KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICov CisKKyNpZm5kZWYgX0dJQ19WM19WQVJfSF8KKyNkZWZpbmUgX0dJQ19WM19WQVJfSF8KKworI2Rl ZmluZQlHSUNfVjNfREVWU1RSCSJBUk0gR2VuZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciB2My4w IgorCitERUNMQVJFX0NMQVNTKGdpY192M19kcml2ZXIpOworCitzdHJ1Y3QgZ2ljX3JlZGlzdHMg eworCS8qCisJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9uIGRlc2NyaXB0aW9uLgorCSAqIFdlIHdp bGwgaGF2ZSBmZXcgb2YgdGhvc2UgZGVwZW5kaW5nCisJICogb24gdGhlICNyZWRpc3RyaWJ1dG9y LXJlZ2lvbnMgcHJvcGVydHkgaW4gRkRULgorCSAqLworCXN0cnVjdCByZXNvdXJjZSAqKglyZWdp b25zOworCS8qIE51bWJlciBvZiBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJdV9pbnQJCQlu cmVnaW9uczsKKwkvKiBQZXItQ1BVIFJlLURpc3RyaWJ1dG9yIGhhbmRsZXIgKi8KKwlzdHJ1Y3Qg cmVzb3VyY2UgKglwY3B1W01BWENQVV07Cit9OworCitzdHJ1Y3QgZ2ljX3YzX3NvZnRjIHsKKwlk ZXZpY2VfdAkJZGV2OworCXN0cnVjdCByZXNvdXJjZSAqKglnaWNfcmVzOworCXN0cnVjdCBtdHgJ CWdpY19tdHg7CisJLyogRGlzdHJpYnV0b3IgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKglnaWNfZGlz dDsKKwkvKiBSZS1EaXN0cmlidXRvcnMgKi8KKwlzdHJ1Y3QgZ2ljX3JlZGlzdHMJZ2ljX3JlZGlz dHM7CisKKwl1X2ludAkJCWdpY19uaXJxczsKKwl1X2ludAkJCWdpY19pZGJpdHM7Cit9OworCitN QUxMT0NfREVDTEFSRShNX0dJQ19WMyk7CisKKy8qIERldmljZSBtZXRob2RzICovCitpbnQgZ2lj X3YzX2F0dGFjaChkZXZpY2VfdCBkZXYpOworaW50IGdpY192M19kZXRhY2goZGV2aWNlX3QgZGV2 KTsKKworLyoKKyAqIEdJQyBEaXN0cmlidXRvciBhY2Nlc3NvcnMuCisgKiBOb3RpY2UgdGhhdCBv bmx5IEdJQyBzb2ZjIGNhbiBiZSBwYXNzZWQuCisgKi8KKyNkZWZpbmUJZ2ljX2RfcmVhZChzYywg bGVuLCByZWcpCQlcCisoewkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbihzYy0+Z2ljX2Rpc3QsIHJl Zyk7CVwKK30pCisKKyNkZWZpbmUJZ2ljX2Rfd3JpdGUoc2MsIGxlbiwgcmVnLCB2YWwpCQlcCiso ewkJCQkJCVwKKwlidXNfd3JpdGVfIyNsZW4oc2MtPmdpY19kaXN0LCByZWcsIHZhbCk7XAorfSkK KworLyogR0lDIFJlLURpc3RyaWJ1dG9yIGFjY2Vzc29ycyAocGVyLUNQVSkgKi8KKyNkZWZpbmUJ Z2ljX3JfcmVhZChzYywgbGVuLCByZWcpCQlcCisoewkJCQkJCVwKKwl1X2ludCBjcHUgPSBQQ1BV X0dFVChjcHVpZCk7CQlcCisJCQkJCQlcCisJYnVzX3JlYWRfIyNsZW4oCQkJCVwKKwkgICAgc2Mt PmdpY19yZWRpc3RzLnBjcHVbY3B1XSwJCVwKKwkgICAgcmVnKTsJCQkJXAorfSkKKworI2RlZmlu ZQlnaWNfcl93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJCVwKKyh7CQkJCQkJXAorCXVfaW50IGNw dSA9IFBDUFVfR0VUKGNwdWlkKTsJCVwKKwkJCQkJCVwKKwlidXNfd3JpdGVfIyNsZW4oCQkJXAor CSAgICBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVdLAkJXAorCSAgICByZWcsIHZhbCk7CQkJCVwK K30pCisKKyNlbmRpZiAvKiBfR0lDX1YzX1ZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0 L2FybTY0L2dpY192M19yZWcuaCBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz X3JlZy5oCkBAIC0wLDAgKzEsMTgzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUg RnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg c29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3Jz aGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9HSUNfVjNfUkVHX0hf CisjZGVmaW5lCV9HSUNfVjNfUkVHX0hfCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBpbnRl cnJ1cHRzCisgKiBzdXBwb3J0ZWQgYnkgR0lDIChpbmNsdWRpbmcgU0dJcywgUFBJcyBhbmQgU1BJ cykKKyAqLworI2RlZmluZQlHSUNfSV9OVU1fTUFYCQkoMTAyMCkKKy8qCisgKiBQcmlvcml0eSBN QVgvTUlOIHZhbHVlcworICovCisjZGVmaW5lCUdJQ19QUklPUklUWV9NQVgJKDB4MDBVTCkKKy8q IFVwcGVyIHZhbHVlIGlzIGRldGVybWluZWQgYnkgTFBJIG1heCBwcmlvcml0eSAqLworI2RlZmlu ZQlHSUNfUFJJT1JJVFlfTUlOCSgweEZDVUwpCisKKy8qIE51bWJlcnMgZm9yIHNvZnR3YXJlIGdl bmVyYXRlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9TR0kJCSgwKQorI2RlZmlu ZQlHSUNfTEFTVF9TR0kJCSgxNSkKKy8qIE51bWJlcnMgZm9yIHByaXZhdGUgcGVyaXBoZXJhbCBp bnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9QUEkJCSgxNikKKyNkZWZpbmUJR0lDX0xB U1RfUFBJCQkoMzEpCisvKiBOdW1iZXJzIGZvciBzcGFyZWQgcGVyaXBoZXJhbCBpbnRlcnJ1cHRz ICovCisjZGVmaW5lCUdJQ19GSVJTVF9TUEkJCSgzMikKKyNkZWZpbmUJR0lDX0xBU1RfU1BJCQko MTAxOSkKKy8qIE51bWJlcnMgZm9yIGxvY2FsIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2Rl ZmluZQlHSUNfRklSU1RfTFBJCQkoODE5MikKKworLyoKKyAqIFJlZ2lzdGVycyAodjIvdjMpCisg Ki8KKyNkZWZpbmUJR0lDRF9DVExSCQkoMHgwMDAwKQorI2RlZmluZQlHSUNEX0NUTFJfRzEJCSgx IDw8IDApCisjZGVmaW5lCUdJQ0RfQ1RMUl9HMUEJCSgxIDw8IDEpCisjZGVmaW5lCUdJQ0RfQ1RM Ul9BUkVfTlMJKDEgPDwgNCkKKyNkZWZpbmUJR0lDRF9DVExSX1JXUAkJKDEgPDwgMzEpCisKKyNk ZWZpbmUJR0lDRF9UWVBFUgkJKDB4MDAwNCkKKyNkZWZpbmUJCUdJQ0RfVFlQRVJfSURCSVRTKG4p CSgoKChuKSA+PiAxOSkgJiAweDFGKSArIDEpCisjZGVmaW5lCQlHSUNEX1RZUEVSX0lfTlVNKG4p CSgoKChuKSAmIDB4RjEpICsgMSkgKiAzMikKKworI2RlZmluZQlHSUNEX0lTRU5BQkxFUihuKQko MHgwMTAwICsgKCgobikgPj4gNSkgKiA0KSkKKyNkZWZpbmUJCUdJQ0RfSV9QRVJfSVNFTkFCTEVS bgkoMzIpCisKKyNkZWZpbmUJR0lDRF9JQ0VOQUJMRVIobikJKDB4MDE4MCArICgoKG4pID4+IDUp ICogNCkpCisjZGVmaW5lCUdJQ0RfSVBSSU9SSVRZUihuKQkoMHgwNDAwICsgKCgobikgPj4gMikg KiA0KSkKKyNkZWZpbmUJCUdJQ0RfSV9QRVJfSVBSSU9SSVRZbgkoNCkKKworI2RlZmluZQlHSUNE X0lfTUFTSyhuKQkJKDEgPDwgKChuKSAlIDMyKSkKKworI2RlZmluZQlHSUNEX0lDRkdSKG4pCQko MHgwQzAwICsgKCgobikgPj4gNCkgKiA0KSkKKy8qIEZpcnN0IGJpdCBpcyBhIHBvbGFyaXR5IGJp dCAoMCAtIGxvdywgMSAtIGhpZ2gpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1BPTF9MT1cJKDAg PDwgMCkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0hJR0gJKDEgPDwgMCkKKyNkZWZpbmUJCUdJ Q0RfSUNGR1JfUE9MX01BU0sJKDB4MSkKKy8qIFNlY29uZCBiaXQgaXMgYSB0cmlnZ2VyIGJpdCAo MCAtIGxldmVsLCAxIC0gZWRnZSkgKi8KKyNkZWZpbmUJCUdJQ0RfSUNGR1JfVFJJR19MVkwJKDAg PDwgMSkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfVFJJR19FREdFCSgxIDw8IDEpCisjZGVmaW5lCQlH SUNEX0lDRkdSX1RSSUdfTUFTSwkoMHgyKQorCisjZGVmaW5lCQlHSUNEX0lfUEVSX0lDRkdSbgko MTYpCisKKy8qCisgKiBSZWdpc3RlcnMgKHYzKQorICovCisjZGVmaW5lCUdJQ0RfSVJPVVRFUihu KQkJKDB4NjAwMCArICgobikgKiA4KSkKKyNkZWZpbmUJR0lDRF9QSURSMgkJKDB4RkZFOCkKKwor I2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfTUFTSwkoMHhGMCkKKyNkZWZpbmUJR0lDUl9QSURSMl9B UkNIX0dJQ3YzCSgweDMwKQorI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfR0lDdjQJKDB4NDApCisK Ky8qIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lCUdJQ1JfUElEUjIJCUdJQ0Rf UElEUjIKKworI2RlZmluZQlHSUNSX1RZUEVSCQkoMHgwMDA4KQorI2RlZmluZQlHSUNSX1RZUEVS X1ZMUElTCSgxIDw8IDEpCisjZGVmaW5lCUdJQ1JfVFlQRVJfTEFTVAkJKDEgPDwgNCkKKyNkZWZp bmUJR0lDUl9UWVBFUl9BRkZfU0hJRlQJKDMyKQorCisjZGVmaW5lCUdJQ1JfV0FLRVIJCSgweDAw MTQpCisjZGVmaW5lCUdJQ1JfV0FLRVJfUFMJCSgxIDw8IDEpIC8qIFByb2Nlc3NvciBzbGVlcCAq LworI2RlZmluZQlHSUNSX1dBS0VSX0NBCQkoMSA8PCAyKSAvKiBDaGlsZHJlbiBhc2xlZXAgKi8K KworLyogUmUtZGlzdHJpYnV0b3IgcmVnaXN0ZXJzIGZvciBTR0lzIGFuZCBQUElzICovCisjZGVm aW5lCUdJQ1JfUkRfQkFTRV9TSVpFCVBBR0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9TR0lfQkFT RV9TSVpFCVBBR0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9WTFBJX0JBU0VfU0laRQlQQUdFX1NJ WkVfNjRLCisjZGVmaW5lCUdJQ1JfUkVTRVJWRURfU0laRQlQQUdFX1NJWkVfNjRLCisKKyNkZWZp bmUJR0lDUl9JU0VOQUJMRVIwCQkJCSgweDAxMDApCisjZGVmaW5lCUdJQ1JfSUNFTkFCTEVSMAkJ CQkoMHgwMTgwKQorI2RlZmluZQkJR0lDUl9JX0VOQUJMRVJfU0dJX01BU0sJCSgweDAwMDBGRkZG KQorI2RlZmluZQkJR0lDUl9JX0VOQUJMRVJfUFBJX01BU0sJCSgweEZGRkYwMDAwKQorCisjZGVm aW5lCQlHSUNSX0lfUEVSX0lQUklPUklUWW4JCShHSUNEX0lfUEVSX0lQUklPUklUWW4pCisKKy8q CisgKiBDUFUgaW50ZXJmYWNlCisgKi8KKworLyoKKyAqIFJlZ2lzdGVycyBsaXN0IChJQ0NfeHl6 X0VMMSk6CisgKgorICogUE1SICAgICAtIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIKKyAqCQkqIGlu dGVycnVwdHMgb2YgcHJpb3JpdHkgaGlnaGVyIHRoYW4gc3BlY2lmaWVkCisgKgkJICBpbiB0aGlz IG1hc2sgd2lsbCBiZSBzaWduYWxsZWQgdG8gdGhlIENQVS4KKyAqCQkgICgweGZmIC0gbG93ZXN0 IHBvc3NpYmxlIHByaW8uLCAweDAwIC0gaGlnaGVzdCBwcmlvLikKKyAqCisgKiBDVExSICAgIC0g Q29udHJvbCBSZWdpc3RlcgorICoJCSogY29udHJvbHMgYmVoYXZpb3Igb2YgdGhlIENQVSBpbnRl cmZhY2UgYW5kIGRpc3BsYXlzCisgKgkJICBpbXBsZW1lbnRlZCBmZWF0dXJlcy4KKyAqCisgKiBJ R1JQRU4xIC0gSW50ZXJydXB0IEdyb3VwIDEgRW5hYmxlIFJlZ2lzdGVyCisgKgorICogSUFSMSAg ICAtIEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlciBHcm91cCAxCisgKgkJKiBjb250YWlu cyBudW1iZXIgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZworICoJCSAgaW50ZXJydXB0 IGZyb20gdGhlIEdyb3VwIDEuCisgKgorICogRU9JUjEgICAtIEVuZCBvZiBJbnRlcnJ1cHQgUmVn aXN0ZXIgR3JvdXAgMQorICoJCSogV3JpdGVzIGluZm9ybSBDUFUgaW50ZXJmYWNlIGFib3V0IGNv bXBsZXRlZCBHcm91cCAxCisgKgkJICBpbnRlcnJ1cHRzIHByb2Nlc3NpbmcuCisgKi8KKworI2Rl ZmluZQlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCVdSSVRF X1NQRUNJQUxSRUcoSUNDXyAjI3JlZyAjI19FTDEsIHZhbCk7CQlcCisJaXNiKCk7CQkJCQkJCVwK K30gd2hpbGUgKDApCisKKyNkZWZpbmUJZ2ljX2ljY19yZWFkKHJlZykJCQkJCVwKKyh7CQkJCQkJ CQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwkJCQkJCQkJXAorCXZhbCA9IFJFQURfU1BFQ0lB TFJFRyhJQ0NfICMjcmVnICMjX0VMMSk7CQlcCisJKHZhbCk7CQkJCQkJCVwKK30pCisKKyNkZWZp bmUJZ2ljX2ljY19zZXQocmVnLCBtYXNrKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXVpbnQ2NF90 IHZhbDsJCQkJCQlcCisJdmFsID0gZ2ljX2ljY19yZWFkKHJlZyk7CQkJCVwKKwl2YWwgfD0gKG1h c2spOwkJCQkJCVwKKwlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKTsJCQkJXAorfSB3aGlsZSAoMCkK KworI2RlZmluZQlnaWNfaWNjX2NsZWFyKHJlZywgbWFzaykJCQkJXAorZG8gewkJCQkJCQkJXAor CXVpbnQ2NF90IHZhbDsJCQkJCQlcCisJdmFsID0gZ2ljX2ljY19yZWFkKHJlZyk7CQkJCVwKKwl2 YWwgJj0gfihtYXNrKTsJCQkJCQlcCisJZ2ljX2ljY193cml0ZShyZWcsIHZhbCk7CQkJCVwKK30g d2hpbGUgKDApCisKKyNlbmRpZiAvKiBfR0lDX1YzX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvc3lz L2FybTY0L2FybTY0L2dpY192M19mZHQuYyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQv Z2ljX3YzX2ZkdC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAx NSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNw b25zb3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2Nk ZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4K KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8 c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxl Lmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDxzeXMvcGNwdS5oPgorI2luY2x1 ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL2NwdXNldC5oPgorI2luY2x1ZGUgPHN5cy9s b2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisKKyNpbmNsdWRlIDxkZXYvZmR0L2ZkdF9j b21tb24uaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29m dy9vZndfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KKworI2luY2x1 ZGUgInBpY19pZi5oIgorCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1ZGUgImdpY192 M192YXIuaCIKKworLyoKKyAqIEZEVCBnbHVlLgorICovCitzdGF0aWMgaW50IGdpY192M19mZHRf cHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGludCBnaWNfdjNfZmR0X2F0dGFjaChkZXZpY2VfdCk7 CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX2ZkdF9tZXRob2RzW10gPSB7CisJLyog RGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlnaWNfdjNfZmR0 X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJZ2ljX3YzX2ZkdF9hdHRhY2gpLAor CisJLyogRW5kICovCisJREVWTUVUSE9EX0VORAorfTsKKworREVGSU5FX0NMQVNTXzEoZ2ljX3Yz LCBnaWNfdjNfZmR0X2RyaXZlciwgZ2ljX3YzX2ZkdF9tZXRob2RzLAorICAgIHNpemVvZihzdHJ1 Y3QgZ2ljX3YzX3NvZnRjKSwgZ2ljX3YzX2RyaXZlcik7CisKK3N0YXRpYyBkZXZjbGFzc190IGdp Y192M19mZHRfZGV2Y2xhc3M7CisKK0VBUkxZX0RSSVZFUl9NT0RVTEUoZ2ljX3YzLCBzaW1wbGVi dXMsIGdpY192M19kcml2ZXIsIGdpY192M19mZHRfZGV2Y2xhc3MsCisgICAgMCwgMCwgQlVTX1BB U1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKK0VBUkxZX0RSSVZFUl9NT0RV TEUoZ2ljX3YzLCBvZndidXMsIGdpY192M19kcml2ZXIsIGdpY192M19mZHRfZGV2Y2xhc3MsCisg ICAgMCwgMCwgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKwor LyoKKyAqIERldmljZSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19mZHRfcHJv YmUoZGV2aWNlX3QgZGV2KQoreworCisJaWYgKCFvZndfYnVzX3N0YXR1c19va2F5KGRldikpCisJ CXJldHVybiAoRU5YSU8pOworCisJaWYgKCFvZndfYnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYXJt LGdpYy12MyIpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYsIEdJ Q19WM19ERVZTVFIpOworCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMg aW50CitnaWNfdjNfZmR0X2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19z b2Z0YyAqc2M7CisJcGNlbGxfdCByZWRpc3RfcmVnaW9uczsKKwlpbnQgZXJyOworCisJc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmRldiA9IGRldjsKKworCS8qCisJICogUmVjb3Zl ciBudW1iZXIgb2YgdGhlIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMuCisJICovCisJaWYgKE9GX2dl dGVuY3Byb3Aob2Z3X2J1c19nZXRfbm9kZShkZXYpLCAiI3JlZGlzdHJpYnV0b3ItcmVnaW9ucyIs CisJICAgICZyZWRpc3RfcmVnaW9ucywgc2l6ZW9mKHJlZGlzdF9yZWdpb25zKSkgPD0gMCkKKwkJ c2MtPmdpY19yZWRpc3RzLm5yZWdpb25zID0gMTsKKwllbHNlCisJCXNjLT5naWNfcmVkaXN0cy5u cmVnaW9ucyA9IHJlZGlzdF9yZWdpb25zOworCisJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOwor CWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gKGVycik7CisKK2Vycm9yOgorCWlm IChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJICAgICJGYWlsZWQgdG8g YXR0YWNoLiBFcnJvciAlZFxuIiwgZXJyKTsKKwl9CisJLyogRmFpbHVyZSBzbyBmcmVlIHJlc291 cmNlcyAqLworCWdpY192M19kZXRhY2goZGV2KTsKKworCXJldHVybiAoZXJyKTsKK30KZGlmZiAt LWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02 NC9naWNfdjMuYwpAQCAtMCwwICsxLDU4MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg VGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU aGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9u c29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVm cy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5 cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5o PgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1 ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvY3B1 c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKwor I2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorCisjaW5jbHVkZSA8bWFj aGluZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KKworI2luY2x1ZGUgInBpY19p Zi5oIgorCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1ZGUgImdpY192M192YXIuaCIK KworLyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworc3RhdGljIHZvaWQgZ2ljX3YzX2Rpc3Bh dGNoKGRldmljZV90LCBzdHJ1Y3QgdHJhcGZyYW1lICopOworc3RhdGljIHZvaWQgZ2ljX3YzX2Vv aShkZXZpY2VfdCwgdV9pbnQpOworc3RhdGljIHZvaWQgZ2ljX3YzX21hc2tfaXJxKGRldmljZV90 LCB1X2ludCk7CitzdGF0aWMgdm9pZCBnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCwgdV9pbnQp OworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGdpY192M19tZXRob2RzW10gPSB7CisJLyogRGV2 aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAlnaWNfdjNfZGV0YWNo KSwKKworCS8qIFBJQyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc3BhdGNoLAkJZ2lj X3YzX2Rpc3BhdGNoKSwKKwlERVZNRVRIT0QocGljX2VvaSwJCWdpY192M19lb2kpLAorCURFVk1F VEhPRChwaWNfbWFzaywJCWdpY192M19tYXNrX2lycSksCisJREVWTUVUSE9EKHBpY191bm1hc2ss CQlnaWNfdjNfdW5tYXNrX2lycSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9Owor CitERUZJTkVfQ0xBU1NfMChnaWNfdjMsIGdpY192M19kcml2ZXIsIGdpY192M19tZXRob2RzLAor ICAgIHNpemVvZihzdHJ1Y3QgZ2ljX3YzX3NvZnRjKSk7CisKKy8qCisgKiBEcml2ZXItc3BlY2lm aWMgZGVmaW5pdGlvbnMuCisgKi8KK01BTExPQ19ERUZJTkUoTV9HSUNfVjMsICJHSUN2MyIsIEdJ Q19WM19ERVZTVFIpOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBhbmQgZGVmaW5pdGlvbnMu CisgKi8KKy8qIERlc3RpbmF0aW9uIHJlZ2lzdGVycywgZWl0aGVyIERpc3RyaWJ1dG9yIG9yIFJl LURpc3RyaWJ1dG9yICovCitlbnVtIGdpY192M194ZGlzdCB7CisJRElTVCA9IDAsCisJUkVESVNU LAorfTsKKworLyogSGVscGVyIHJvdXRpbmVzIHN0YXJ0aW5nIHdpdGggZ2ljX3YzXyAqLworc3Rh dGljIGludCBnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMg aW50IGdpY192M19yZWRpc3RfZmluZChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIGlu dCBnaWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQg Z2ljX3YzX2NwdV9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgdm9pZCBnaWNf djNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNfc29mdGMgKiwgZW51bSBnaWNfdjNfeGRpc3Qp OworCisvKiBBIHNlcXVlbmNlIG9mIGluaXQgZnVuY3Rpb25zIGZvciBwcmltYXJ5IChib290KSBD UFUgKi8KK3R5cGVkZWYgaW50ICgqZ2ljX3YzX2luaXRzZXFfdCkgKHN0cnVjdCBnaWNfdjNfc29m dGMgKik7CisvKiBQcmltYXJ5IENQVSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworc3RhdGlj IGdpY192M19pbml0c2VxX3QgZ2ljX3YzX3ByaW1hcnlfaW5pdFtdID0geworCWdpY192M19kaXN0 X2luaXQsCisJZ2ljX3YzX3JlZGlzdF9pbml0LAorCWdpY192M19jcHVfaW5pdCwKKwlOVUxMCit9 OworCisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworaW50CitnaWNfdjNfYXR0YWNoKGRl dmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlnaWNfdjNfaW5pdHNl cV90ICppbml0X2Z1bmM7CisJdWludDMyX3QgdHlwZXI7CisJaW50IHJpZDsKKwlpbnQgZXJyOwor CXNpemVfdCBpOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmRldiA9IGRl djsKKwllcnIgPSAwOworCisJLyogSW5pdGlhbGl6ZSBtdXRleCAqLworCW10eF9pbml0KCZzYy0+ Z2ljX210eCwgIkdJQ3YzIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisKKwkvKgorCSAqIEFsbG9j YXRlIGFycmF5IG9mIHN0cnVjdCByZXNvdXJjZS4KKwkgKiBPbmUgZW50cnkgZm9yIERpc3RyaWJ1 dG9yIGFuZCBhbGwgcmVtYWluaW5nIGZvciBSZS1EaXN0cmlidXRvci4KKwkgKi8KKwlzYy0+Z2lj X3JlcyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKHNjLT5naWNfcmVzKSAqIChzYy0+Z2ljX3JlZGlz dHMubnJlZ2lvbnMgKyAxKSwKKwkgICAgTV9HSUNfVjMsIE1fV0FJVE9LKTsKKworCS8qIE5vdyBh bGxvY2F0ZSBjb3JyZXNwb25kaW5nIHJlc291cmNlcyAqLworCWZvciAoaSA9IDAsIHJpZCA9IDA7 IGkgPCAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zICsgMSk7IGkrKywgcmlkKyspIHsKKwkJc2Mt PmdpY19yZXNbcmlkXSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX01FTU9S WSwKKwkJICAgICZyaWQsIFJGX0FDVElWRSk7CisJCWlmIChzYy0+Z2ljX3Jlc1tyaWRdID09IE5V TEwpCisJCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKgorCSAqIERpc3RyaWJ1dG9yIGludGVy ZmFjZQorCSAqLworCXNjLT5naWNfZGlzdCA9IHNjLT5naWNfcmVzWzBdOworCisJLyoKKwkgKiBS ZS1EcmlzdHJpYnV0b3IgaW50ZXJmYWNlCisJICovCisJLyogQWxsb2NhdGUgc3BhY2UgdW5kZXIg cmVnaW9uIGRlc2NyaXB0aW9ucyAqLworCXNjLT5naWNfcmVkaXN0cy5yZWdpb25zID0gbWFsbG9j KAorCSAgICBzaXplb2YoKnNjLT5naWNfcmVkaXN0cy5yZWdpb25zKSAqIHNjLT5naWNfcmVkaXN0 cy5ucmVnaW9ucywKKwkgICAgTV9HSUNfVjMsIE1fV0FJVE9LKTsKKworCS8qIEZpbGwtdXAgYnVz X3NwYWNlIGluZm9ybWF0aW9uIGZvciBlYWNoIHJlZ2lvbi4gKi8KKwlmb3IgKGkgPSAwLCByaWQg PSAxOyBpIDwgc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zOyBpKyssIHJpZCsrKQorCQlzYy0+Z2lj X3JlZGlzdHMucmVnaW9uc1tpXSA9IHNjLT5naWNfcmVzW3JpZF07CisKKwkvKiBHZXQgdGhlIG51 bWJlciBvZiBzdXBwb3J0ZWQgU1BJIGludGVycnVwdHMgKi8KKwl0eXBlciA9IGdpY19kX3JlYWQo c2MsIDQsIEdJQ0RfVFlQRVIpOworCXNjLT5naWNfbmlycXMgPSBHSUNEX1RZUEVSX0lfTlVNKHR5 cGVyKTsKKwlpZiAoc2MtPmdpY19uaXJxcyA+IEdJQ19JX05VTV9NQVgpCisJCXNjLT5naWNfbmly cXMgPSBHSUNfSV9OVU1fTUFYOworCisJLyogR2V0IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGlu dGVycnVwdCBpZGVudGlmaWVyIGJpdHMgKi8KKwlzYy0+Z2ljX2lkYml0cyA9IEdJQ0RfVFlQRVJf SURCSVRTKHR5cGVyKTsKKworCWlmIChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKGRl diwgIlNQSXM6ICV1LCBJRHM6ICV1XG4iLAorCQkgICAgc2MtPmdpY19uaXJxcywgKDEgPDwgc2Mt PmdpY19pZGJpdHMpIC0gMSk7CisJfQorCisJLyogVHJhaW4gaW5pdCBzZXF1ZW5jZSBmb3IgYm9v dCBDUFUgKi8KKwlmb3IgKGluaXRfZnVuYyA9IGdpY192M19wcmltYXJ5X2luaXQ7ICppbml0X2Z1 bmMgIT0gTlVMTDsgaW5pdF9mdW5jKyspIHsKKwkJZXJyID0gKCppbml0X2Z1bmMpKHNjKTsKKwkJ aWYgKGVyciAhPSAwKQorCQkJcmV0dXJuIChlcnIpOworCX0KKwkvKgorCSAqIEZ1bGwgc3VjY2Vz cy4KKwkgKiBOb3cgcmVnaXN0ZXIgUElDIHRvIHRoZSBpbnRlcnJ1cHRzIGhhbmRsaW5nIGxheWVy LgorCSAqLworCWFybV9yZWdpc3Rlcl9yb290X3BpYyhkZXYsIHNjLT5naWNfbmlycXMpOworCisJ cmV0dXJuICgwKTsKK30KKworaW50CitnaWNfdjNfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlz dHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlzaXplX3QgaTsKKwlpbnQgcmlkOworCisJc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAoZGV2aWNlX2lzX2F0dGFjaGVkKGRldikpIHsK KwkJLyoKKwkJICogWFhYOiBXZSBzaG91bGQgcHJvYmFibHkgZGVyZWdpc3RlciBQSUMKKwkJICov CisJfQorCWZvciAocmlkID0gMDsgcmlkIDwgKHNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyArIDEp OyByaWQrKykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgcmlk LCBzYy0+Z2ljX3Jlc1tyaWRdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykKKwkJ ZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtpXSwgTV9HSUNfVjMpOworCisJZnJlZShzYy0+Z2lj X3JlcywgTV9HSUNfVjMpOworCWZyZWUoc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMsIE1fR0lDX1Yz KTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBQSUMgaW50ZXJmYWNlLgorICovCitzdGF0 aWMgdm9pZAorZ2ljX3YzX2Rpc3BhdGNoKGRldmljZV90IGRldiwgc3RydWN0IHRyYXBmcmFtZSAq ZnJhbWUpCit7CisJdWludDY0X3QgYWN0aXZlX2lycTsKKworCXdoaWxlICgxKSB7CisJCWFjdGl2 ZV9pcnEgPSBnaWNfaWNjX3JlYWQoSUFSMSk7CisKKwkJaWYgKF9fcHJlZGljdF9mYWxzZShhY3Rp dmVfaXJxID09IElDQ19JQVIxX0VMMV9TUFVSKSkKKwkJCWJyZWFrOworCisJCWlmIChfX3ByZWRp Y3RfdHJ1ZSgoYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfUFBJICYmCisJCSAgICBhY3RpdmVfaXJx IDw9IEdJQ19MQVNUX1NQSSkpKSB7CisJCQlhcm1fZGlzcGF0Y2hfaW50cihhY3RpdmVfaXJxLCBm cmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhY3RpdmVfaXJxIDw9IEdJQ19MQVNU X1NHSSB8fCBhY3RpdmVfaXJxID49IEdJQ19GSVJTVF9MUEkpIHsKKwkJCS8qCisJCQkgKiBUT0RP OiBJbXBsZW1lbnQgcHJvcGVyIFNHSS9MUEkgaGFuZGxpbmcuCisJCQkgKiAgICAgICBNYXNrIGl0 IGlmIHN1Y2ggaXMgcmVjZWl2ZWQgZm9yIHNvbWUgcmVhc29uLgorCQkJICovCisJCQlkZXZpY2Vf cHJpbnRmKGRldiwKKwkJCSAgICAiUmVjZWl2ZWQgdW5zdXBwb3J0ZWQgaW50ZXJydXB0IHR5cGU6 ICVzXG4iLAorCQkJICAgIGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSA/ICJMUEkiIDogIlNH SSIpOworCQkJUElDX01BU0soZGV2LCBhY3RpdmVfaXJxKTsKKwkJfQorCX0KK30KKworc3RhdGlj IHZvaWQKK2dpY192M19lb2koZGV2aWNlX3QgZGV2LCB1X2ludCBpcnEpCit7CisKKwlnaWNfaWNj X3dyaXRlKEVPSVIxLCAodWludDY0X3QpaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2dpY192M19t YXNrX2lycShkZXZpY2VfdCBkZXYsIHVfaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRj ICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGlycSA+PSBHSUNf RklSU1RfUFBJICYmIGlycSA8PSBHSUNfTEFTVF9QUEkpIHsgLyogUFBJcyBpbiBjb3JyZXNwb25k aW5nIFJlLURpc3RyaWJ1dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LAorCQkgICAgR0lDUl9T R0lfQkFTRV9TSVpFICsgR0lDRF9JQ0VOQUJMRVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJ CWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIFJFRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lD X0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0 b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVSKGlycSksIEdJQ0RfSV9N QVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UKKwkJ cGFuaWMoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSk7Cit9 CisKK3N0YXRpYyB2b2lkCitnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCBkZXYsIHVfaW50IGly cSkKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOworCisJaWYgKGlycSA+PSBHSUNfRklSU1RfUFBJICYmIGlycSA8PSBHSUNfTEFTVF9Q UEkpIHsgLyogUFBJcyBpbiBjb3JyZXNwb25kaW5nIFJlLURpc3RyaWJ1dG9yICovCisJCWdpY19y X3dyaXRlKHNjLCA0LAorCQkgICAgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDRF9JU0VOQUJMRVIo aXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIFJFRElT VCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lDX0xBU1Rf U1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJ Q0RfSVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3Jf cndwKHNjLCBESVNUKTsKKwl9IGVsc2UKKwkJcGFuaWMoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVt YmVyICV1IiwgX19mdW5jX18sIGlycSk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZXMKKyAq Lworc3RhdGljIHZvaWQKK2dpY192M193YWl0X2Zvcl9yd3Aoc3RydWN0IGdpY192M19zb2Z0YyAq c2MsIGVudW0gZ2ljX3YzX3hkaXN0IHhkaXN0KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwor CXVfaW50IGNwdWlkOworCXNpemVfdCB1c19sZWZ0ID0gMTAwMDAwMDsKKworCWNwdWlkID0gUENQ VV9HRVQoY3B1aWQpOworCisJc3dpdGNoICh4ZGlzdCkgeworCWNhc2UgRElTVDoKKwkJcmVzID0g c2MtPmdpY19kaXN0OworCQlicmVhazsKKwljYXNlIFJFRElTVDoKKwkJcmVzID0gc2MtPmdpY19y ZWRpc3RzLnBjcHVbY3B1aWRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlLQVNTRVJUKDAsICgi JXM6IEF0dGVtcHQgdG8gd2FpdCBmb3IgdW5rbm93biBSV1AiLCBfX2Z1bmNfXykpOworCQlyZXR1 cm47CisJfQorCisJd2hpbGUgKChidXNfcmVhZF80KHJlcywgR0lDRF9DVExSKSAmIEdJQ0RfQ1RM Ul9SV1ApICE9IDApIHsKKwkJREVMQVkoMSk7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkgeworCQkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJHSUNEIFJlZ2lzdGVyIHdyaXRlIHBlbmRp bmcgZm9yIHRvbyBsb25nIik7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKy8qIENQVSBpbnRl cmZhY2UuICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAorZ2ljX3YzX2NwdV9wcmlvcml0eSh1aW50 NjRfdCBtYXNrKQoreworCisJLyogU2V0IHByb3JpdHkgbWFzayAqLworCWdpY19pY2Nfd3JpdGUo UE1SLCBtYXNrICYgSUNDX1BNUl9FTDFfUFJJT19NQVNLKTsKK30KKworc3RhdGljIGludAorZ2lj X3YzX2NwdV9lbmFibGVfc3JlKHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQoreworCXVpbnQ2NF90 IHNyZTsKKwl1X2ludCBjcHVpZDsKKworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCS8qCisJ ICogU2V0IHRoZSBTUkUgYml0IHRvIGVuYWJsZSBhY2Nlc3MgdG8gR0lDIENQVSBpbnRlcmZhY2UK KwkgKiB2aWEgc3lzdGVtIHJlZ2lzdGVycy4KKwkgKi8KKwlzcmUgPSBSRUFEX1NQRUNJQUxSRUco aWNjX3NyZV9lbDEpOworCXNyZSB8PSBJQ0NfU1JFX0VMMV9TUkU7CisJV1JJVEVfU1BFQ0lBTFJF RyhpY2Nfc3JlX2VsMSwgc3JlKTsKKwlpc2IoKTsKKwkvKgorCSAqIE5vdyBlbnN1cmUgdGhhdCB0 aGUgYml0IGlzIHNldC4KKwkgKi8KKwlzcmUgPSBSRUFEX1NQRUNJQUxSRUcoaWNjX3NyZV9lbDEp OworCWlmICgoc3JlICYgSUNDX1NSRV9FTDFfU1JFKSAhPSAwKSB7CisJCS8qIFdlIGFyZSBkb25l LiBUaGlzIHdhcyBkaXNhYmxlZCBpbiBFTDIgKi8KKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAi RVJST1I6IENQVSV1IGNhbm5vdCBlbmFibGUgQ1BVIGludGVyZmFjZSAiCisJCSAgICAidmlhIHN5 c3RlbSByZWdpc3RlcnNcbiIsIGNwdWlkKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfSBlbHNlIGlm IChib290dmVyYm9zZSAhPSAwKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJICAgICJD UFUldSBlbmFibGVkIENQVSBpbnRlcmZhY2UgdmlhIHN5c3RlbSByZWdpc3RlcnNcbiIsCisJCSAg ICBjcHVpZCk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX2Nw dV9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQoreworCWludCBlcnI7CisKKwkvKiBFbmFi bGUgYWNjZXNzIHRvIENQVSBpbnRlcmZhY2UgdmlhIHN5c3RlbSByZWdpc3RlcnMgKi8KKwllcnIg PSBnaWNfdjNfY3B1X2VuYWJsZV9zcmUoc2MpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIChl cnIpOworCS8qIFByaW9yaXR5IG1hc2sgdG8gbWluaW11bSAtIGFjY2VwdCBhbGwgaW50ZXJydXB0 cyAqLworCWdpY192M19jcHVfcHJpb3JpdHkoR0lDX1BSSU9SSVRZX01JTik7CisJLyogRGlzYWJs ZSBFT0kgbW9kZSAqLworCWdpY19pY2NfY2xlYXIoQ1RMUiwgSUNDX0NUTFJfRUwxX0VPSU1PREUp OworCS8qIEVuYWJsZSBncm91cCAxIChpbnNlY3VyZSkgaW50ZXJydXBzICovCisJZ2ljX2ljY19z ZXQoSUdSUEVOMSwgSUNDX0lHUlBFTjBfRUwxX0VOKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8q IERpc3RyaWJ1dG9yICovCitzdGF0aWMgaW50CitnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNf djNfc29mdGMgKnNjKQoreworCXVpbnQ2NF90IGFmZjsKKwl1X2ludCBpOworCisJLyoKKwkgKiAx LiBEaXNhYmxlIHRoZSBEaXN0cmlidXRvcgorCSAqLworCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNE X0NUTFIsIDApOworCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCisJLyoKKwkgKiAy LiBDb25maWd1cmUgdGhlIERpc3RyaWJ1dG9yCisJICovCisJLyogU2V0IGFsbCBnbG9iYWwgaW50 ZXJydXB0cyB0byBiZSBsZXZlbCB0cmlnZ2VyZWQsIGFjdGl2ZSBsb3cuICovCisJZm9yIChpID0g R0lDX0ZJUlNUX1NQSTsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gR0lDRF9JX1BFUl9JQ0ZHUm4p CisJCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0lDRkdSKGkpLCAweDAwMDAwMDAwKTsKKworCS8q IFNldCBwcmlvcml0eSB0byBhbGwgc2hhcmVkIGludGVycnVwdHMgKi8KKwlmb3IgKGkgPSBHSUNf RklSU1RfU1BJOworCSAgICBpIDwgc2MtPmdpY19uaXJxczsgaSArPSBHSUNEX0lfUEVSX0lQUklP UklUWW4pIHsKKwkJLyogU2V0IGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkJZ2ljX2Rfd3JpdGUoc2Ms IDQsIEdJQ0RfSVBSSU9SSVRZUihpKSwgR0lDX1BSSU9SSVRZX01BWCk7CisJfQorCisJLyoKKwkg KiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiBMZWF2ZSBQUEkgYW5kIFNHSXMgYXMgdGhleSBhcmUg ZW5hYmxlZCBpbgorCSAqIFJlLURpc3RyaWJ1dG9yIHJlZ2lzdGVycy4KKwkgKi8KKwlmb3IgKGkg PSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSArPSBHSUNEX0lfUEVSX0lTRU5B QkxFUm4pCisJCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0lDRU5BQkxFUihpKSwgMHhGRkZGRkZG Rik7CisKKwlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKworCS8qCisJICogMy4gRW5h YmxlIERpc3RyaWJ1dG9yCisJICovCisJLyogRW5hYmxlIERpc3RyaWJ1dG9yIHdpdGggQVJFLCBH cm91cCAxICovCisJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfQ1RMUiwgR0lDRF9DVExSX0FSRV9O UyB8IEdJQ0RfQ1RMUl9HMUEgfAorCSAgICBHSUNEX0NUTFJfRzEpOworCisJLyoKKwkgKiA0LiBS b3V0ZSBhbGwgaW50ZXJydXB0cyB0byBib290IENQVS4KKwkgKi8KKwlhZmYgPSBDUFVfQUZGSU5J VFkoUENQVV9HRVQoY3B1aWQpKTsKKwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdp Y19uaXJxczsgaSsrKQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JUk9VVEVSKGkpLCBhZmYp OworCisJcmV0dXJuICgwKTsKK30KKworLyogUmUtRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQK K2dpY192M19yZWRpc3RfZmluZChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3Qg cmVzb3VyY2Ugcl9yZXM7CisJYnVzX3NwYWNlX2hhbmRsZV90IHJfYnNoOworCXVpbnQ2NF90IGFm ZjsKKwl1aW50NjRfdCB0eXBlcjsKKwl1aW50MzJfdCBwaWRyMjsKKwl1X2ludCBjcHVpZDsKKwlz aXplX3QgaTsKKworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCisJLyogQWxsb2NhdGUgc3Ry dWN0IHJlc291cmNlIGZvciB0aGlzIENQVSdzIFJlLURpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLwor CXNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSA9CisJICAgIG1hbGxvYyhzaXplb2YoKnNjLT5n aWNfcmVkaXN0cy5wY3B1WzBdKSwgTV9HSUNfVjMsIE1fV0FJVE9LKTsKKworCWFmZiA9IENQVV9B RkZJTklUWShjcHVpZCk7CisJLyogQWZmaW5pdHkgaW4gZm9ybWF0IGZvciBjb21wYXJpc29uIHdp dGggdHlwZXIgKi8KKwlhZmYgPSAoQ1BVX0FGRjMoYWZmKSA8PCAyNCkgfCAoQ1BVX0FGRjIoYWZm KSA8PCAxNikgfAorCSAgICAoQ1BVX0FGRjEoYWZmKSA8PCA4KSB8IENQVV9BRkYwKGFmZik7CisK KwlpZiAoYm9vdHZlcmJvc2UgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAg ICAiU3RhcnQgc2VhcmNoaW5nIGZvciBSZS1EaXN0cmlidXRvclxuIik7CisJfQorCS8qIEl0ZXJh dGUgdGhyb3VnaCBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJZm9yIChpID0gMDsgaSA8IHNj LT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrKSB7CisJCS8qIFRha2UgYSBjb3B5IG9mIHRoZSBy ZWdpb24ncyByZXNvdXJjZSAqLworCQlyX3JlcyA9ICpzYy0+Z2ljX3JlZGlzdHMucmVnaW9uc1tp XTsKKwkJcl9ic2ggPSBybWFuX2dldF9idXNoYW5kbGUoJnJfcmVzKTsKKworCQlwaWRyMiA9IGJ1 c19yZWFkXzQoJnJfcmVzLCBHSUNSX1BJRFIyKTsKKwkJc3dpdGNoIChwaWRyMiAmIEdJQ1JfUElE UjJfQVJDSF9NQVNLKSB7CisJCWNhc2UgR0lDUl9QSURSMl9BUkNIX0dJQ3YzOiAvKiBmYWxsIHRo cm91Z2ggKi8KKwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjQ6CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiTm8gUmUtRGlzdHJpYnV0 b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJCQlmcmVlKHNjLT5naWNfcmVkaXN0cy5w Y3B1W2NwdWlkXSwgTV9HSUNfVjMpOworCQkJcmV0dXJuIChFTk9ERVYpOworCQl9CisKKwkJZG8g eworCQkJdHlwZXIgPSBidXNfcmVhZF84KCZyX3JlcywgR0lDUl9UWVBFUik7CisJCQlpZiAoKHR5 cGVyID4+IEdJQ1JfVFlQRVJfQUZGX1NISUZUKSA9PSBhZmYpIHsKKwkJCQlLQVNTRVJUKHNjLT5n aWNfcmVkaXN0cy5wY3B1W2NwdWlkXSAhPSBOVUxMLAorCQkJCSAgICAoIkludmFsaWQgcG9pbnRl ciB0byBwZXItQ1BVIHJlZGlzdHJpYnV0b3IiKSk7CisJCQkJLyogQ29weSByZXMgY29udGVudHMg dG8gaXRzIGZpbmFsIGRlc3RpbmF0aW9uICovCisJCQkJKnNjLT5naWNfcmVkaXN0cy5wY3B1W2Nw dWlkXSA9IHJfcmVzOworCQkJCWlmIChib290dmVyYm9zZSAhPSAwKSB7CisJCQkJCWRldmljZV9w cmludGYoc2MtPmRldiwKKwkJCQkJICAgICJDUFUldSBSZS1EaXN0cmlidXRvciBoYXMgYmVlbiBm b3VuZFxuIiwKKwkJCQkJICAgIGNwdWlkKTsKKwkJCQl9CisJCQkJcmV0dXJuICgwKTsKKwkJCX0K KworCQkJcl9ic2ggKz0gKEdJQ1JfUkRfQkFTRV9TSVpFICsgR0lDUl9TR0lfQkFTRV9TSVpFKTsK KwkJCWlmICgodHlwZXIgJiBHSUNSX1RZUEVSX1ZMUElTKSAhPSAwKSB7CisJCQkJcl9ic2ggKz0K KwkJCQkgICAgKEdJQ1JfVkxQSV9CQVNFX1NJWkUgKyBHSUNSX1JFU0VSVkVEX1NJWkUpOworCQkJ fQorCisJCQlybWFuX3NldF9idXNoYW5kbGUoJnJfcmVzLCByX2JzaCk7CisJCX0gd2hpbGUgKCh0 eXBlciAmIEdJQ1JfVFlQRVJfTEFTVCkgPT0gMCk7CisJfQorCisJZnJlZShzYy0+Z2ljX3JlZGlz dHMucGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJObyBS ZS1EaXN0cmlidXRvciBmb3VuZCBmb3IgQ1BVJXVcbiIsIGNwdWlkKTsKKwlyZXR1cm4gKEVOWElP KTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF93YWtlKHN0cnVjdCBnaWNfdjNfc29m dGMgKnNjKQoreworCXVpbnQzMl90IHdha2VyOworCXNpemVfdCB1c19sZWZ0ID0gMTAwMDAwMDsK KworCXdha2VyID0gZ2ljX3JfcmVhZChzYywgNCwgR0lDUl9XQUtFUik7CisJLyogV2FrZSB1cCBS ZS1EaXN0cmlidXRvciBmb3IgdGhpcyBDUFUgKi8KKwl3YWtlciAmPSB+R0lDUl9XQUtFUl9QUzsK KwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9XQUtFUiwgd2FrZXIpOworCS8qCisJICogV2hlbiBj bGVhcmluZyBQcm9jZXNzb3JTbGVlcCBiaXQgaXQgaXMgcmVxdWlyZWQgdG8gd2FpdCBmb3IKKwkg KiBDaGlsZHJlbkFzbGVlcCB0byBiZWNvbWUgemVybyBmb2xsb3dpbmcgdGhlIHByb2Nlc3NvciBw b3dlci1vbi4KKwkgKi8KKwl3aGlsZSAoKGdpY19yX3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpICYg R0lDUl9XQUtFUl9DQSkgIT0gMCkgeworCQlERUxBWSgxKTsKKwkJaWYgKHVzX2xlZnQtLSA9PSAw KSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIkNvdWxkIG5vdCB3YWtlIFJl LURpc3RyaWJ1dG9yIGZvciBDUFUldSIsCisJCQkgICAgUENQVV9HRVQoY3B1aWQpKTsKKwkJCXJl dHVybiAoRU5YSU8pOworCQl9CisJfQorCisJaWYgKGJvb3R2ZXJib3NlICE9IDApIHsKKwkJZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LCAiQ1BVJXUgUmUtRGlzdHJpYnV0b3Igd29rZSB1cFxuIiwKKwkJ ICAgIFBDUFVfR0VUKGNwdWlkKSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAorZ2ljX3YzX3JlZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQoreworCWludCBl cnI7CisJc2l6ZV90IGk7CisKKwllcnIgPSBnaWNfdjNfcmVkaXN0X2ZpbmQoc2MpOworCWlmIChl cnIgIT0gMCkKKwkJcmV0dXJuIChlcnIpOworCisJZXJyID0gZ2ljX3YzX3JlZGlzdF93YWtlKHNj KTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybiAoZXJyKTsKKworCS8qIERpc2FibGUgU1BJcyAq LworCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNSX0lDRU5BQkxF UjAsCisJICAgIEdJQ1JfSV9FTkFCTEVSX1BQSV9NQVNLKTsKKwkvKiBFbmFibGUgU0dJcyAqLwor CWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNSX0lTRU5BQkxFUjAs CisJICAgIEdJQ1JfSV9FTkFCTEVSX1NHSV9NQVNLKTsKKworCS8qIFNldCBwcmlvcml0eSBmb3Ig U0dJcyBhbmQgUFBJcyAqLworCWZvciAoaSA9IDA7IGkgPD0gR0lDX0xBU1RfUFBJOyBpICs9IEdJ Q1JfSV9QRVJfSVBSSU9SSVRZbikgeworCQlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFT RV9TSVpFICsgR0lDRF9JUFJJT1JJVFlSKGkpLAorCQkgICAgR0lDX1BSSU9SSVRZX01BWCk7CisJ fQorCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKworCXJldHVybiAoMCk7Cit9 Cgo= --b1_5d0214dede86ae74079a9a209dbb7bd0--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5d0214dede86ae74079a9a209dbb7bd0>