Skip site navigation (1)Skip section navigation (2)
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>