Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 May 2015 12:06:46 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Updated, 1, 024 lines] D2377: Introduce ARM GICv3 support
Message-ID:  <4ccc0ea76f1d3e1812e734a07ba732c5@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_4ccc0ea76f1d3e1812e734a07ba732c5
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb updated this revision to Diff 5256.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D2377?vs=5255&id=5256

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_4ccc0ea76f1d3e1812e734a07ba732c5
Content-Type: text/x-patch; charset=utf-8; name="D2377.5256.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2377.5256.patch"

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTE4LDYgKzE4LDcgQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0
L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk
Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJ
CXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJt
NjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJt
NjQvaW5jbHVkZS9hcm1yZWcuaCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5
cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5o
CkBAIC05Niw2ICs5NiwyMiBAQAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdh
dGNocG9pbnQsIGZyb20gc2FtZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJl
YWtwb2ludCAqLwogCisvKiBJQ0NfU1JFX0VMMiAqLworI2RlZmluZQlJQ0NfU1JFX0VMMl9FTgkJ
KDFVIDw8IDMpCisKKy8qIElDQ19TUkVfRUwxICovCisjZGVmaW5lCUlDQ19TUkVfRUwxX1NSRQkJ
KDFVIDw8IDApCisKKy8qIElDQ19DVExSX0VMMSAqLworI2RlZmluZQlJQ0NfQ1RMUl9FTDFfRU9J
CSgxVSA8PCAxKQorCisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBf
RUwxX0VOCSgxVSA8PCAwKQorCisvKiBJQ0NfSUFSMV9FTDEgKi8KKyNkZWZpbmUJSUNDX0lBUjFf
RUwxX1NQVVIJKDB4MDNmZikKKworCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURf
QUE2NFBGUjBfRUwwX01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFT
SwkoMHhmIDw8IDQpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMgYi9zeXMv
YXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2xvY29yZS5TCisrKyBi
L3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMTg3LDYgKzE4NywxOCBAQAogCW1vdgl4Miwg
IyhQU1JfRiB8IFBTUl9JIHwgUFNSX0EgfCBQU1JfRCB8IFBTUl9NX0VMMWgpCiAJbXNyCXNwc3Jf
ZWwyLCB4MgogCisJLyogQ29uZmlndXJlIEdJQ3YzIENQVSBpbnRlcmZhY2UgKi8KKwltcnMJeDIs
IGlkX2FhNjRwZnIwX2VsMQorCXViZngJeDIsIHgyLCAjMjQsICM0CQkvKiBHSUMgZmllbGQgKi8K
KwljbXAJeDIsICMweDEJCS8qIDAwMDEgLSBTUiBDUFUgSUYgc3VwcG9ydGVkICovCisJYi5uZQky
ZgorCisJbXJzCXgyLCBpY2Nfc3JlX2VsMgorCW9ycgl4MiwgeDIsICNJQ0NfU1JFX0VMMl9FTgkv
KiBFbmFibGUgYWNjZXNzIGZyb20gaW5zZWN1cmUgRUwxICovCisJbXNyCWljY19zcmVfZWwyLCB4
MgorCWlzYgorMjoKKwogCS8qIFNldCB0aGUgYWRkcmVzcyB0byByZXR1cm4gdG8gb3VyIHJldHVy
biBhZGRyZXNzICovCiAJbXNyCWVscl9lbDIsIHgzMAogCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQv
YXJtNjQvZ2ljX3YzX3Zhci5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNf
dmFyLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBG
cmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNo
aXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19WQVJfSF8K
KyNkZWZpbmUgX0dJQ19WM19WQVJfSF8KKworI2RlZmluZQlHSUNfVjNfREVWU1RSCSJBUk0gR2Vu
ZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciB2My4wIgorCitzdHJ1Y3QgZ2ljX3JlZGlzdHMgewor
CS8qCisJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9uIGRlc2NyaXB0aW9uLgorCSAqIFdlIHdpbGwg
aGF2ZSBmZXcgb2YgdGhvc2UgZGVwZW5kaW5nCisJICogb24gdGhlICNyZWRpc3RyaWJ1dG9yLXJl
Z2lvbnMgcHJvcGVydHkgaW4gRkRULgorCSAqLworCXN0cnVjdCByZXNvdXJjZSAqKglyZWdpb25z
OworCS8qIE51bWJlciBvZiBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJdV9pbnQJCQlucmVn
aW9uczsKKwkvKiBQZXItQ1BVIFJlLURpc3RyaWJ1dG9yIGhhbmRsZXIgKi8KKwlzdHJ1Y3QgcmVz
b3VyY2UgKglwY3B1W01BWENQVV07Cit9OworCitzdHJ1Y3QgZ2ljX3YzX3NvZnRjIHsKKwlkZXZp
Y2VfdAkJZGV2OworCXN0cnVjdCByZXNvdXJjZSAqKglnaWNfcmVzOworCXN0cnVjdCBtdHgJCWdp
Y19tdHg7CisJLyogRGlzdHJpYnV0b3IgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKglnaWNfZGlzdDsK
KwkvKiBSZS1EaXN0cmlidXRvcnMgKi8KKwlzdHJ1Y3QgZ2ljX3JlZGlzdHMJZ2ljX3JlZGlzdHM7
CisKKwl1X2ludAkJCWdpY19uaXJxczsKKwl1X2ludAkJCWdpY19pZGJpdHM7Cit9OworCitleHRl
cm4gZGV2Y2xhc3NfdCBnaWNfdjNfZGV2Y2xhc3M7CisKK01BTExPQ19ERUNMQVJFKE1fR0lDX1Yz
KTsKKworLyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworaW50IGdpY192M19hdHRhY2goZGV2
aWNlX3QgZGV2KTsKK2ludCBnaWNfdjNfZGV0YWNoKGRldmljZV90IGRldik7CisKK3ZvaWQgZ2lj
X3YzX2Rpc3BhdGNoKGRldmljZV90LCBzdHJ1Y3QgdHJhcGZyYW1lICopOwordm9pZCBnaWNfdjNf
ZW9pKGRldmljZV90LCB1X2ludCk7Cit2b2lkIGdpY192M19tYXNrX2lycShkZXZpY2VfdCwgdV9p
bnQpOwordm9pZCBnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCwgdV9pbnQpOworCisvKgorICog
R0lDIERpc3RyaWJ1dG9yIGFjY2Vzc29ycy4KKyAqIE5vdGljZSB0aGF0IG9ubHkgR0lDIHNvZmMg
Y2FuIGJlIHBhc3NlZC4KKyAqLworI2RlZmluZQlnaWNfZF9yZWFkKHNjLCBsZW4sIHJlZykJCVwK
Kyh7CQkJCQkJXAorCWJ1c19yZWFkXyMjbGVuKHNjLT5naWNfZGlzdCwgcmVnKTsJXAorfSkKKwor
I2RlZmluZQlnaWNfZF93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJCVwKKyh7CQkJCQkJXAorCWJ1
c193cml0ZV8jI2xlbihzYy0+Z2ljX2Rpc3QsIHJlZywgdmFsKTtcCit9KQorCisvKiBHSUMgUmUt
RGlzdHJpYnV0b3IgYWNjZXNzb3JzIChwZXItQ1BVKSAqLworI2RlZmluZQlnaWNfcl9yZWFkKHNj
LCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCXVfaW50IGNwdSA9IFBDUFVfR0VUKGNwdWlkKTsJ
CVwKKwkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbigJCQkJXAorCSAgICBzYy0+Z2ljX3JlZGlzdHMu
cGNwdVtjcHVdLAkJXAorCSAgICByZWcpOwkJCQlcCit9KQorCisjZGVmaW5lCWdpY19yX3dyaXRl
KHNjLCBsZW4sIHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJdV9pbnQgY3B1ID0gUENQVV9HRVQo
Y3B1aWQpOwkJXAorCQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbigJCQlcCisJICAgIHNjLT5naWNf
cmVkaXN0cy5wY3B1W2NwdV0sCQlcCisJICAgIHJlZywgdmFsKTsJCQkJXAorfSkKKworI2VuZGlm
IC8qIF9HSUNfVjNfVkFSX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz
X3JlZy5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKQEAgLTAs
MCArMSwxNjggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5k
YXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMg
ZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZy
ZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19SRUdfSF8KKyNkZWZpbmUgX0dJ
Q19WM19SRUdfSF8KKworLyoKKyAqIFByaW9yaXR5IE1BWC9NSU4gdmFsdWVzCisgKi8KKyNkZWZp
bmUJR0lDX1BSSU9SSVRZX01BWAkweDAwVUwKKy8qIFVwcGVyIHZhbHVlIGlzIGRldGVybWluZWQg
YnkgTFBJIG1heCBwcmlvcml0eSAqLworI2RlZmluZQlHSUNfUFJJT1JJVFlfTUlOCTB4RkNVTAor
CisvKiBOdW1iZXJzIGZvciBzb2Z0d2FyZSBnZW5lcmF0ZWQgaW50ZXJydXB0cyAqLworI2RlZmlu
ZQlHSUNfRklSU1RfU0dJCQkoMCkKKyNkZWZpbmUJR0lDX0xBU1RfU0dJCQkoMTUpCisvKiBOdW1i
ZXJzIGZvciBwcml2YXRlIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklS
U1RfUFBJCQkoMTYpCisjZGVmaW5lCUdJQ19MQVNUX1BQSQkJKDMxKQorLyogTnVtYmVycyBmb3Ig
c3BhcmVkIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklSU1RfU1BJCQko
MzIpCisjZGVmaW5lCUdJQ19MQVNUX1NQSQkJKDEwMTkpCisvKiBOdW1iZXJzIGZvciBsb2NhbCBw
ZXJpcGhlcmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX0xQSQkJKDgxOTIpCisK
Ky8qCisgKiBSZWdpc3RlcnMgKHYyL3YzKQorICovCisjZGVmaW5lCUdJQ0RfQ1RMUgkJMHgwMDAw
CisjZGVmaW5lCUdJQ0RfQ1RMUl9HMQkJKDEgPDwgMCkKKyNkZWZpbmUJR0lDRF9DVExSX0cxQQkJ
KDEgPDwgMSkKKyNkZWZpbmUJR0lDRF9DVExSX0FSRV9OUwkoMSA8PCA0KQorI2RlZmluZQlHSUNE
X0NUTFJfUldQCQkoMSA8PCAzMSkKKworI2RlZmluZQlHSUNEX1RZUEVSCQkoMHgwMDA0KQorI2Rl
ZmluZQkJR0lDRF9UWVBFUl9JREJJVFMoeCkJKCgoKHgpID4+IDE5KSAmIDB4MUYpICsgMSkKKwor
I2RlZmluZQlHSUNEX0lTRU5BQkxFUihuKQkoMHgwMTAwICsgKCgobikgPj4gNSkgKiA0KSkKKyNk
ZWZpbmUJR0lDRF9JQ0VOQUJMRVIobikJKDB4MDE4MCArICgoKG4pID4+IDUpICogNCkpCisjZGVm
aW5lCUdJQ0RfSVBSSU9SSVRZUihuKQkoMHgwNDAwICsgKCgobikgPj4gMikgKiA0KSkKKyNkZWZp
bmUJR0lDRF9JX01BU0sobikJCSgxIDw8ICgobikgJSAzMikpCisKKyNkZWZpbmUJR0lDRF9JQ0ZH
UihuKQkJKDB4MEMwMCArICgobikgKiA0KSkKKy8qIEZpcnN0IGJpdCBpcyBhIHBvbGFyaXR5IGJp
dCAoMCAtIGxvdywgMSAtIGhpZ2gpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1BPTF9MT1cJKDAg
PDwgMCkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0hJR0gJKDEgPDwgMCkKKyNkZWZpbmUJCUdJ
Q0RfSUNGR1JfUE9MX01BU0sJMHgxCisvKiBTZWNvbmQgYml0IGlzIGEgdHJpZ2dlciBiaXQgKDAg
LSBsZXZlbCwgMSAtIGVkZ2UpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfTFZMCSgwIDw8
IDEpCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQorI2RlZmluZQkJR0lD
RF9JQ0ZHUl9UUklHX01BU0sJMHgyCisKKy8qCisgKiBSZWdpc3RlcnMgKHYzKQorICovCisjZGVm
aW5lCUdJQ0RfSVJPVVRFUihuKQkJKDB4NjAwMCArICgobikgKiA4KSkKKyNkZWZpbmUJR0lDRF9Q
SURSMgkJKDB4RkZFOCkKKworI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfTUFTSwkoMHhGMCkKKyNk
ZWZpbmUJR0lDUl9QSURSMl9BUkNIX0dJQ3YzCSgweDMwKQorI2RlZmluZQlHSUNSX1BJRFIyX0FS
Q0hfR0lDdjQJKDB4NDApCisKKy8qIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5l
CUdJQ1JfUElEUjIJCUdJQ0RfUElEUjIKKworI2RlZmluZQlHSUNSX1RZUEVSCQkoMHgwMDA4KQor
I2RlZmluZQlHSUNSX1RZUEVSX1ZMUElTCSgxIDw8IDEpCisjZGVmaW5lCUdJQ1JfVFlQRVJfTEFT
VAkJKDEgPDwgNCkKKworI2RlZmluZQlHSUNSX1dBS0VSCQkoMHgwMDE0KQorI2RlZmluZQlHSUNS
X1dBS0VSX1BTCQkoMSA8PCAxKSAvKiBQcm9jZXNzb3Igc2xlZXAgKi8KKyNkZWZpbmUJR0lDUl9X
QUtFUl9DQQkJKDEgPDwgMikgLyogQ2hpbGRyZW4gYXNsZWVwICovCisKKy8qIFJlLWRpc3RyaWJ1
dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLworI2RlZmluZQlHSUNSX1JEX0JBU0Vf
U0laRQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUdJQ1JfU0dJX0JBU0VfU0laRQlQQUdFX1NJWkVf
NjRLCisjZGVmaW5lCUdJQ1JfVkxQSV9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlH
SUNSX1JFU0VSVkVEX1NJWkUJUEFHRV9TSVpFXzY0SworCisjZGVmaW5lCUdJQ1JfSVNFTkFCTEVS
MAkJCQkoMHgwMTAwKQorI2RlZmluZQlHSUNSX0lDRU5BQkxFUjAJCQkJKDB4MDE4MCkKKyNkZWZp
bmUJCUdJQ1JfSV9FTkFCTEVSX1NHSV9NQVNLCQkoMHgwMDAwRkZGRikKKyNkZWZpbmUJCUdJQ1Jf
SV9FTkFCTEVSX1BQSV9NQVNLCQkoMHhGRkZGMDAwMCkKKworLyoKKyAqIENQVSBpbnRlcmZhY2UK
KyAqLworCisvKgorICogUmVnaXN0ZXJzIGxpc3QgKElDQ194eXpfRUwxKToKKyAqCisgKiBQTVIg
ICAgIC0gUHJpb3JpdHkgTWFzayBSZWdpc3RlcgorICoJCSogaW50ZXJydXB0cyBvZiBwcmlvcml0
eSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQKKyAqCQkgIGluIHRoaXMgbWFzayB3aWxsIGJlIHNpZ25h
bGxlZCB0byB0aGUgQ1BVLgorICoJCSAgKDB4ZmYgLSBsb3dlc3QgcG9zc2libGUgcHJpby4sIDB4
MDAgLSBoaWdoZXN0IHByaW8uKQorICoKKyAqIENUTFIgICAgLSBDb250cm9sIFJlZ2lzdGVyCisg
KgkJKiBjb250cm9scyBiZWhhdmlvciBvZiB0aGUgQ1BVIGludGVyZmFjZSBhbmQgZGlzcGxheXMK
KyAqCQkgIGltcGxlbWVudGVkIGZlYXR1cmVzLgorICoKKyAqIElHUlBFTjEgLSBJbnRlcnJ1cHQg
R3JvdXAgMSBFbmFibGUgUmVnaXN0ZXIKKyAqCisgKiBJQVIxICAgIC0gSW50ZXJydXB0IEFja25v
d2xlZGdlIFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIGNvbnRhaW5zIG51bWJlciBvZiB0aGUgaGln
aGVzdCBwcmlvcml0eSBwZW5kaW5nCisgKgkJICBpbnRlcnJ1cHQgZnJvbSB0aGUgR3JvdXAgMS4K
KyAqCisgKiBFT0lSMSAgIC0gRW5kIG9mIEludGVycnVwdCBSZWdpc3RlciBHcm91cCAxCisgKgkJ
KiBXcml0ZXMgaW5mb3JtIENQVSBpbnRlcmZhY2UgYWJvdXQgY29tcGxldGVkIEdyb3VwIDEKKyAq
CQkgIGludGVycnVwdHMgcHJvY2Vzc2luZy4KKyAqLworCisjZGVmaW5lCWdpY19pY2Nfd3JpdGUo
cmVnLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJV1JJVEVfU1BFQ0lBTFJFRyhJQ0NfICMj
cmVnICMjX0VMMSwgdmFsKTsJCVwKKwlpc2IoKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Rl
ZmluZQlnaWNfaWNjX3JlYWQocmVnKQkJCQkJXAorKHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7
CQkJCQkJXAorCQkJCQkJCQlcCisJdmFsID0gUkVBRF9TUEVDSUFMUkVHKElDQ18gIyNyZWcgIyNf
RUwxKTsJCVwKKwkodmFsKTsJCQkJCQkJXAorfSkKKworI2RlZmluZQlnaWNfaWNjX3NldChyZWcs
IG1hc2spCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwg
PSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCB8PSAobWFzayk7CQkJCQkJXAorCWdpY19p
Y2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCWdpY19pY2Nf
Y2xlYXIocmVnLCBtYXNrKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWludDY0X3QgdmFsOwkJCQkJ
CVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCAmPSB+KG1hc2spOwkJCQkJ
CVwKKwlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlm
IC8qIF9HSUNfVjNfUkVHX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz
X2ZkdC5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMKQEAgLTAs
MCArMSwxNTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5k
YXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMg
ZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZy
ZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0
bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j
bHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv
cm1hbi5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp
bmNsdWRlIDxzeXMvY3B1c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxz
eXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgorI2luY2x1ZGUg
PGRldi9vZncvb3BlbmZpcm0uaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KKyNpbmNs
dWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNp
bmNsdWRlICJnaWNfdjNfcmVnLmgiCisjaW5jbHVkZSAiZ2ljX3YzX3Zhci5oIgorCisvKgorICog
RkRUIGdsdWUuCisgKi8KK3N0cnVjdCBnaWNfdjNfb2Z3X2RldmluZm8geworCXN0cnVjdCBvZndf
YnVzX2RldmluZm8JZGlfZGluZm87CisJc3RydWN0IHJlc291cmNlX2xpc3QJZGlfcmw7Cit9Owor
CitzdGF0aWMgaW50IGdpY192M19mZHRfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGludCBnaWNf
djNfZmR0X2F0dGFjaChkZXZpY2VfdCk7CitzdGF0aWMgaW50IGdpY192M19mZHRfZGV0YWNoKGRl
dmljZV90KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZndfYnVzX2RldmluZm8gKgorZ2ljX3Yz
X29md19nZXRfZGV2aW5mbyhkZXZpY2VfdCBfX3VudXNlZCwgZGV2aWNlX3QpOworCitzdGF0aWMg
ZGV2aWNlX21ldGhvZF90IGdpY192M19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFj
ZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlnaWNfdjNfZmR0X3Byb2JlKSwKKwlERVZN
RVRIT0QoZGV2aWNlX2F0dGFjaCwJZ2ljX3YzX2ZkdF9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZp
Y2VfZGV0YWNoLAlnaWNfdjNfZmR0X2RldGFjaCksCisKKwkvKiBQSUMgaW50ZXJmYWNlICovCisJ
REVWTUVUSE9EKHBpY19kaXNwYXRjaCwJCWdpY192M19kaXNwYXRjaCksCisJREVWTUVUSE9EKHBp
Y19lb2ksCQlnaWNfdjNfZW9pKSwKKwlERVZNRVRIT0QocGljX21hc2ssCQlnaWNfdjNfbWFza19p
cnEpLAorCURFVk1FVEhPRChwaWNfdW5tYXNrLAkJZ2ljX3YzX3VubWFza19pcnEpLAorCisJLyog
RW5kICovCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IGdpY192M19kcml2
ZXIgPSB7CisJImdpYyIsCisJZ2ljX3YzX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBnaWNfdjNf
c29mdGMpLAorfTsKKworRUFSTFlfRFJJVkVSX01PRFVMRShnaWNfdjMsIHNpbXBsZWJ1cywgZ2lj
X3YzX2RyaXZlciwgZ2ljX3YzX2RldmNsYXNzLCAwLCAwLAorICAgIEJVU19QQVNTX0lOVEVSUlVQ
VCArIEJVU19QQVNTX09SREVSX01JRERMRSk7CitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywg
b2Z3YnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZGV2Y2xhc3MsIDAsIDAsCisgICAgQlVTX1BB
U1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworLyoKKyAqIERldmljZSBp
bnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19mZHRfcHJvYmUoZGV2aWNlX3QgZGV2
KQoreworCisJaWYgKCFvZndfYnVzX3N0YXR1c19va2F5KGRldikpCisJCXJldHVybiAoRU5YSU8p
OworCisJaWYgKCFvZndfYnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYXJtLGdpYy12MyIpKQorCQly
ZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYsIEdJQ19WM19ERVZTVFIpOwor
CXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfZmR0
X2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJcGNl
bGxfdCByZWRpc3RfcmVnaW9uczsKKwlpbnQgZXJyOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisJc2MtPmRldiA9IGRldjsKKworCS8qCisJICogUmVjb3ZlciBudW1iZXIgb2YgdGhl
IFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMuCisJICovCisJaWYgKE9GX2dldGVuY3Byb3Aob2Z3X2J1
c19nZXRfbm9kZShkZXYpLCAiI3JlZGlzdHJpYnV0b3ItcmVnaW9ucyIsCisJICAgICZyZWRpc3Rf
cmVnaW9ucywgc2l6ZW9mKHJlZGlzdF9yZWdpb25zKSkgPD0gMCkKKwkJc2MtPmdpY19yZWRpc3Rz
Lm5yZWdpb25zID0gMTsKKwllbHNlCisJCXNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyA9IHJlZGlz
dF9yZWdpb25zOworCisJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOworCWlmIChlcnIpCisJCWdv
dG8gZXJyb3I7CisKKwlyZXR1cm4gKGVycik7CisKK2Vycm9yOgorCWlmIChib290dmVyYm9zZSkg
eworCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJICAgICJGYWlsZWQgdG8gYXR0YWNoLiBFcnJvciAl
ZFxuIiwgZXJyKTsKKwl9CisJLyogRmFpbHVyZSBzbyBmcmVlIHJlc291cmNlcyAqLworCWdpY192
M19mZHRfZGV0YWNoKGRldik7CisKKwlyZXR1cm4gKGVycik7Cit9CisKK3N0YXRpYyBpbnQKK2dp
Y192M19mZHRfZGV0YWNoKGRldmljZV90IGRldikKK3sKKworCXJldHVybiAoZ2ljX3YzX2RldGFj
aChkZXYpKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYyBiL3N5cy9h
cm02NC9hcm02NC9naWNfdjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYwpAQCAtMCwwICsxLDU2NCBAQAorLyotCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYg
dW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1
cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5j
bHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxz
eXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4K
KyNpbmNsdWRlIDxzeXMvY3B1c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRl
IDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5o
PgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4K
KworI2luY2x1ZGUgInBpY19pZi5oIgorCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1
ZGUgImdpY192M192YXIuaCIKKworLyoKKyAqIERyaXZlci1zcGVjaWZpYyBkZWZpbml0aW9ucy4K
KyAqLworTUFMTE9DX0RFRklORShNX0dJQ19WMywgIkdJQ3YzIiwgR0lDX1YzX0RFVlNUUik7CisK
K2RldmNsYXNzX3QgZ2ljX3YzX2RldmNsYXNzOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBh
bmQgZGVmaW5pdGlvbnMuCisgKi8KKy8qIERlc3RpbmF0aW9uIHJlZ2lzdGVycywgZWl0aGVyIERp
c3RyaWJ1dG9yIG9yIFJlLURpc3RyaWJ1dG9yICovCitlbnVtIGdpY192M194ZGlzdCB7CisJRElT
VCA9IDAsCisJUkVESVNULAorfTsKKworLyogSGVscGVyIHJvdXRpbmVzIHN0YXJ0aW5nIHdpdGgg
Z2ljX3YzXyAqLworc3RhdGljIGludCBnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29m
dGMgKik7CitzdGF0aWMgaW50IGdpY192M19yZWRpc3RfZmluZChzdHJ1Y3QgZ2ljX3YzX3NvZnRj
ICopOworc3RhdGljIGludCBnaWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAq
KTsKK3N0YXRpYyBpbnQgZ2ljX3YzX2NwdV9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7Citz
dGF0aWMgdm9pZCBnaWNfdjNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNfc29mdGMgKiwgZW51
bSBnaWNfdjNfeGRpc3QpOworCisvKiBBIHNlcXVlbmNlIG9mIGluaXQgZnVuY3Rpb25zIGZvciBw
cmltYXJ5IChib290KSBDUFUgKi8KK3R5cGVkZWYgaW50ICgqZ2ljX3YzX2luaXRzZXFfdCkgKHN0
cnVjdCBnaWNfdjNfc29mdGMgKik7CisvKiBQcmltYXJ5IENQVSBpbml0aWFsaXphdGlvbiBzZXF1
ZW5jZSAqLworc3RhdGljIGdpY192M19pbml0c2VxX3QgZ2ljX3YzX3ByaW1hcnlfaW5pdFtdID0g
eworCWdpY192M19kaXN0X2luaXQsCisJZ2ljX3YzX3JlZGlzdF9pbml0LAorCWdpY192M19jcHVf
aW5pdCwKKwlOVUxMCit9OworCisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworaW50Citn
aWNfdjNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsK
KwlnaWNfdjNfaW5pdHNlcV90ICppbml0X2Z1bmM7CisJdWludDMyX3QgdHlwZXI7CisJaW50IHJp
ZDsKKwlpbnQgZXJyOworCXNpemVfdCBpOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
CisJc2MtPmRldiA9IGRldjsKKwllcnIgPSAwOworCisJLyogSW5pdGlhbGl6ZSBtdXRleCAqLwor
CW10eF9pbml0KCZzYy0+Z2ljX210eCwgIkdJQ3YzIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisK
KwkvKgorCSAqIEFsbG9jYXRlIGFycmF5IG9mIHN0cnVjdCByZXNvdXJjZS4KKwkgKiBPbmUgZW50
cnkgZm9yIERpc3RyaWJ1dG9yIGFuZCBhbGwgcmVtYWluaW5nIGZvciBSZS1EaXN0cmlidXRvci4K
KwkgKi8KKwlzYy0+Z2ljX3JlcyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKHNjLT5naWNfcmVzKSAq
IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKSwKKwkgICAgTV9HSUNfVjMsIE1fV0FJVE9L
KTsKKworCS8qIE5vdyBhbGxvY2F0ZSBjb3JyZXNwb25kaW5nIHJlc291cmNlcyAqLworCWZvciAo
aSA9IDAsIHJpZCA9IDA7IGkgPCAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zICsgMSk7IGkrKywg
cmlkKyspIHsKKwkJc2MtPmdpY19yZXNbcmlkXSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2
LCBTWVNfUkVTX01FTU9SWSwKKwkJICAgICZyaWQsIFJGX0FDVElWRSk7CisJCWlmIChzYy0+Z2lj
X3Jlc1tyaWRdID09IE5VTEwpIHsKKwkJCWVyciA9IEVOWElPOworCQkJZ290byBlcnJvcjsKKwkJ
fQorCX0KKworCS8qCisJICogRGlzdHJpYnV0b3IgaW50ZXJmYWNlCisJICovCisJc2MtPmdpY19k
aXN0ID0gc2MtPmdpY19yZXNbMF07CisKKwkvKgorCSAqIFJlLURyaXN0cmlidXRvciBpbnRlcmZh
Y2UKKwkgKi8KKwkvKiBBbGxvY2F0ZSBzcGFjZSB1bmRlciByZWdpb24gZGVzY3JpcHRpb25zICov
CisJc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMgPSBtYWxsb2MoCisJICAgIHNpemVvZigqc2MtPmdp
Y19yZWRpc3RzLnJlZ2lvbnMpICogc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zLAorCSAgICBNX0dJ
Q19WMywgTV9XQUlUT0spOworCisJLyogRmlsbC11cCBidXNfc3BhY2UgaW5mb3JtYXRpb24gZm9y
IGVhY2ggcmVnaW9uLiAqLworCWZvciAoaSA9IDAsIHJpZCA9IDE7IGkgPCBzYy0+Z2ljX3JlZGlz
dHMubnJlZ2lvbnM7IGkrKywgcmlkKyspCisJCXNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ldID0g
c2MtPmdpY19yZXNbcmlkXTsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBTUEkg
aW50ZXJydXB0cyAqLworCXR5cGVyID0gZ2ljX2RfcmVhZChzYywgNCwgR0lDRF9UWVBFUik7CisJ
c2MtPmdpY19uaXJxcyA9IHR5cGVyICYgMHgxRjsKKwlzYy0+Z2ljX25pcnFzID0gKHNjLT5naWNf
bmlycXMgKyAxKSAqIDMyOworCWlmIChzYy0+Z2ljX25pcnFzID4gMTAyMCkKKwkJc2MtPmdpY19u
aXJxcyA9IDEwMjA7CisKKwkvKiBHZXQgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaW50ZXJydXB0
IGlkZW50aWZpZXIgYml0cyAqLworCXNjLT5naWNfaWRiaXRzID0gR0lDRF9UWVBFUl9JREJJVFMo
dHlwZXIpOworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiU1BJ
czogJXUsIElEczogJXVcbiIsCisJCSAgICBzYy0+Z2ljX25pcnFzLCAoMSA8PCBzYy0+Z2ljX2lk
Yml0cykgLSAxKTsKKwl9CisKKwkvKiBUcmFpbiBpbml0IHNlcXVlbmNlIGZvciBib290IENQVSAq
LworCWZvciAoaW5pdF9mdW5jID0gZ2ljX3YzX3ByaW1hcnlfaW5pdDsgKmluaXRfZnVuYyAhPSBO
VUxMOyBpbml0X2Z1bmMrKykgeworCQllcnIgPSAoKmluaXRfZnVuYykoc2MpOworCQlpZiAoZXJy
KQorCQkJZ290byBlcnJvcjsKKwl9CisJLyoKKwkgKiBGdWxsIHN1Y2Nlc3MuCisJICogTm93IHJl
Z2lzdGVyIFBJQyB0byB0aGUgaW50ZXJydXB0cyBoYW5kbGluZyBsYXllci4KKwkgKi8KKwlhcm1f
cmVnaXN0ZXJfcm9vdF9waWMoZGV2LCBzYy0+Z2ljX25pcnFzKTsKKworZXJyb3I6CisJcmV0dXJu
IChlcnIpOworfQorCitpbnQKK2dpY192M19kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVj
dCBnaWNfdjNfc29mdGMgKnNjOworCXNpemVfdCBpOworCWludCByaWQ7CisKKwlzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChkZXZpY2VfaXNfYXR0YWNoZWQoZGV2KSkgeworCQkv
KgorCQkgKiBYWFg6IFdlIHNob3VsZCBwcm9iYWJseSBkZXJlZ2lzdGVyIFBJQworCQkgKi8KKwl9
CisJZm9yIChpID0gMCwgcmlkID0gMDsgaSA8IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAx
KTsgaSsrLCByaWQrKykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9S
WSwgcmlkLCBzYy0+Z2ljX3Jlc1tyaWRdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkr
KykKKwkJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtpXSwgTV9HSUNfVjMpOworCisJZnJlZShz
Yy0+Z2ljX3JlcywgTV9HSUNfVjMpOworCWZyZWUoc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMsIE1f
R0lDX1YzKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBQSUMgaW50ZXJmYWNlLgorICov
Cit2b2lkCitnaWNfdjNfZGlzcGF0Y2goZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgdHJhcGZyYW1lICpm
cmFtZSkKK3sKKwl1aW50NjRfdCBhY3RpdmVfaXJxOworCisJd2hpbGUgKDEpIHsKKwkJYWN0aXZl
X2lycSA9IGdpY19pY2NfcmVhZChJQVIxKTsKKworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKGFjdGl2
ZV9pcnEgPT0gSUNDX0lBUjFfRUwxX1NQVVIpKQorCQkJYnJlYWs7CisKKwkJaWYgKF9fcHJlZGlj
dF90cnVlKChhY3RpdmVfaXJxID49IEdJQ19GSVJTVF9QUEkgJiYKKwkJICAgIGFjdGl2ZV9pcnEg
PD0gR0lDX0xBU1RfU1BJKSkpIHsKKwkJCWFybV9kaXNwYXRjaF9pbnRyKGFjdGl2ZV9pcnEsIGZy
YW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1Rf
U0dJIHx8IGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSkgeworCQkJLyoKKwkJCSAqIFRPRE86
IEltcGxlbWVudCBwcm9wZXIgU0dJL0xQSSBoYW5kbGluZy4KKwkJCSAqICAgICAgIE1hc2sgaXQg
aWYgc3VjaCBpcyByZWNlaXZlZCBmb3Igc29tZSByZWFzb24uCisJCQkgKi8KKwkJCWRldmljZV9w
cmludGYoZGV2LAorCQkJICAgICJSZWNlaXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgdHlwZTog
JXNcbiIsCisJCQkgICAgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJID8gIkxQSSIgOiAiU0dJ
Iik7CisJCQlQSUNfTUFTSyhkZXYsIGFjdGl2ZV9pcnEpOworCQl9CisJfQorfQorCit2b2lkCitn
aWNfdjNfZW9pKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCisJZ2ljX2ljY193cml0ZShF
T0lSMSwgKHVpbnQ2NF90KWlycSk7Cit9CisKK3ZvaWQKK2dpY192M19tYXNrX2lycShkZXZpY2Vf
dCBkZXYsIHVfaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKworCXNjID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGlycSA+PSBHSUNfRklSU1RfUFBJICYmIGly
cSA8PSBHSUNfTEFTVF9QUEkpIHsgLyogUFBJcyBpbiBjb3JyZXNwb25kaW5nIFJlLURpc3RyaWJ1
dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LAorCQkgICAgR0lDUl9TR0lfQkFTRV9TSVpFICsg
R0lDRF9JQ0VOQUJMRVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zv
cl9yd3Aoc2MsIFJFRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBp
cnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jf
d3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQln
aWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UKKwkJcGFuaWMoIiVzOiBVbnN1
cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSk7Cit9CisKK3ZvaWQKK2dpY192
M191bm1hc2tfaXJxKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCXN0cnVjdCBnaWNfdjNf
c29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAoaXJxID49
IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQUElzIGluIGNvcnJl
c3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsCisJCSAgICBH
SUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEp
KTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+
PSBHSUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJcyBpbiBkaXN0
cmlidXRvciAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JU0VOQUJMRVIoaXJxKSwgR0lD
RF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCX0gZWxz
ZQorCQlwYW5pYygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJx
KTsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lcworICovCitzdGF0aWMgdm9pZAorZ2ljX3Yz
X3dhaXRfZm9yX3J3cChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYywgZW51bSBnaWNfdjNfeGRpc3Qg
eGRpc3QpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdV9pbnQgY3B1aWQ7CisJc2l6ZV90
IHVzX2xlZnQgPSAxMDAwMDAwOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisKKwlzd2l0
Y2ggKHhkaXN0KSB7CisJY2FzZSBESVNUOgorCQlyZXMgPSBzYy0+Z2ljX2Rpc3Q7CisJCWJyZWFr
OworCWNhc2UgUkVESVNUOgorCQlyZXMgPSBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF07CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCUtBU1NFUlQoMCwgKCIlczogQXR0ZW1wdCB0byB3YWl0IGZv
ciB1bmtub3duIFJXUCIsIF9fZnVuY19fKSk7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoKGJ1
c19yZWFkXzQocmVzLCBHSUNEX0NUTFIpICYgR0lDRF9DVExSX1JXUCkgIT0gMCkgeworCQlERUxB
WSgxKTsKKwkJaWYgKHVzX2xlZnQtLSA9PSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYs
CisJCQkgICAgIkdJQ0QgUmVnaXN0ZXIgd3JpdGUgcGVuZGluZyBmb3IgdG9vIGxvbmciKTsKKwkJ
CXJldHVybjsKKwkJfQorCX0KK30KKworLyogQ1BVIGludGVyZmFjZS4gKi8KK3N0YXRpYyBfX2lu
bGluZSB2b2lkCitnaWNfdjNfY3B1X3ByaW9yaXR5KHVpbnQ2NF90IG1hc2spCit7CisKKwkvKiBT
ZXQgcHJvcml0eSBtYXNrICovCisJZ2ljX2ljY193cml0ZShQTVIsIG1hc2sgJiAweEZGVUwpOwor
fQorCitzdGF0aWMgaW50CitnaWNfdjNfY3B1X2VuYWJsZV9zcmUoc3RydWN0IGdpY192M19zb2Z0
YyAqc2MpCit7CisJdWludDY0X3Qgc3JlOworCXVfaW50IGNwdWlkOworCisJY3B1aWQgPSBQQ1BV
X0dFVChjcHVpZCk7CisJLyoKKwkgKiBTZXQgdGhlIFNSRSBiaXQgdG8gZW5hYmxlIGFjY2VzcyB0
byBHSUMgQ1BVIGludGVyZmFjZQorCSAqIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzLgorCSAqLworCXNy
ZSA9IFJFQURfU1BFQ0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJc3JlIHw9IElDQ19TUkVfRUwxX1NS
RTsKKwlXUklURV9TUEVDSUFMUkVHKGljY19zcmVfZWwxLCBzcmUpOworCWlzYigpOworCS8qCisJ
ICogTm93IGVuc3VyZSB0aGF0IHRoZSBiaXQgaXMgc2V0LgorCSAqLworCXNyZSA9IFJFQURfU1BF
Q0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJaWYgKCEoc3JlICYgSUNDX1NSRV9FTDFfU1JFKSkgewor
CQkvKiBXZSBhcmUgZG9uZS4gVGhpcyB3YXMgZGlzYWJsZWQgaW4gRUwyICovCisJCWRldmljZV9w
cmludGYoc2MtPmRldiwgIkVSUk9SOiBDUFUldSBjYW5ub3QgZW5hYmxlIENQVSBpbnRlcmZhY2Ug
IgorCQkgICAgInZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLCBjcHVpZCk7CisJCXJldHVybiAoRU5Y
SU8pOworCX0gZWxzZSBpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2
LAorCQkgICAgIkNQVSV1IGVuYWJsZWQgQ1BVIGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVy
c1xuIiwKKwkJICAgIGNwdWlkKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50
CitnaWNfdjNfY3B1X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsK
KworCS8qIEVuYWJsZSBhY2Nlc3MgdG8gQ1BVIGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVy
cyAqLworCWVyciA9IGdpY192M19jcHVfZW5hYmxlX3NyZShzYyk7CisJaWYgKGVycikKKwkJcmV0
dXJuIChlcnIpOworCS8qIFByaW9yaXR5IG1hc2sgdG8gbWluaW11bSAtIGFjY2VwdCBhbGwgaW50
ZXJydXB0cyAqLworCWdpY192M19jcHVfcHJpb3JpdHkoR0lDX1BSSU9SSVRZX01JTik7CisJLyog
RGlzYWJsZSBFT0kgbW9kZSAqLworCWdpY19pY2NfY2xlYXIoQ1RMUiwgSUNDX0NUTFJfRUwxX0VP
SSk7CisJLyogRW5hYmxlIGdyb3VwIDEgKGluc2VjdXJlKSBpbnRlcnJ1cHMgKi8KKwlnaWNfaWNj
X3NldChJR1JQRU4xLCBJQ0NfSUdSUEVOMF9FTDFfRU4pOworCisJcmV0dXJuICgwKTsKK30KKwor
LyogRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQKK2dpY192M19kaXN0X2luaXQoc3RydWN0IGdp
Y192M19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgYWZmOworCXVfaW50IGk7CisKKwkvKgorCSAq
IDEuIERpc2FibGUgdGhlIERpc3RyaWJ1dG9yCisJICovCisJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJ
Q0RfQ1RMUiwgMCk7CisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAq
IDIuIENvbmZpZ3VyZSB0aGUgRGlzdHJpYnV0b3IKKwkgKi8KKwkvKiBTZXQgYWxsIGdsb2JhbCBp
bnRlcnJ1cHRzIHRvIGJlIGxldmVsIHRyaWdnZXJlZCwgYWN0aXZlIGxvdy4gKi8KKwlmb3IgKGkg
PSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSArPSAxNikKKwkJZ2ljX2Rfd3Jp
dGUoc2MsIDQsIEdJQ0RfSUNGR1IoaSA+PiA0KSwgMHgwMDAwMDAwMCk7CisKKwkvKiBTZXQgcHJp
b3JpdHkgdG8gYWxsIHNoYXJlZCBpbnRlcnJ1cHRzICovCisJZm9yIChpID0gR0lDX0ZJUlNUX1NQ
STsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gNCkgeworCQkvKiBTZXQgaGlnaGVzdCBwcmlvcml0
eSAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JUFJJT1JJVFlSKGkpLCBHSUNfUFJJT1JJ
VFlfTUFYKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUgYWxsIGludGVycnVwdHMuIExlYXZlIFBQ
SSBhbmQgU0dJcyBhcyB0aGV5IGFyZSBlbmFibGVkIGluCisJICogUmUtRGlzdHJpYnV0b3IgcmVn
aXN0ZXJzLgorCSAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFz
OyBpICs9IDMyKQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIoaSksIDB4RkZG
RkZGRkYpOworCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAqIDMu
IEVuYWJsZSBEaXN0cmlidXRvcgorCSAqLworCS8qIEVuYWJsZSBEaXN0cmlidXRvciB3aXRoIEFS
RSwgR3JvdXAgMSAqLworCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0NUTFIsIEdJQ0RfQ1RMUl9B
UkVfTlMgfCBHSUNEX0NUTFJfRzFBIHwKKwkgICAgR0lDRF9DVExSX0cxKTsKKworCS8qCisJICog
NC4gUm91dGUgYWxsIGludGVycnVwdHMgdG8gYm9vdCBDUFUuCisJICovCisJYWZmID0gQ1BVX0FG
RklOSVRZKFBDUFVfR0VUKGNwdWlkKSk7CisJZm9yIChpID0gR0lDX0ZJUlNUX1NQSTsgaSA8IHNj
LT5naWNfbmlycXM7IGkrKykKKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfSVJPVVRFUihpKSwg
YWZmKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFJlLURpc3RyaWJ1dG9yICovCitzdGF0aWMg
aW50CitnaWNfdjNfcmVkaXN0X2ZpbmQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJc3Ry
dWN0IHJlc291cmNlIHJfcmVzOworCWJ1c19zcGFjZV9oYW5kbGVfdCByX2JzaDsKKwl1aW50NjRf
dCBhZmY7CisJdWludDY0X3QgdHlwZXI7CisJdWludDMyX3QgcGlkcjI7CisJdV9pbnQgY3B1aWQ7
CisJc2l6ZV90IGk7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCS8qIEFsbG9jYXRl
IHN0cnVjdCByZXNvdXJjZSBmb3IgdGhpcyBDUFUncyBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMg
Ki8KKwlzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gPQorCSAgICBtYWxsb2Moc2l6ZW9mKCpz
Yy0+Z2ljX3JlZGlzdHMucGNwdVswXSksIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwlhZmYgPSBD
UFVfQUZGSU5JVFkoY3B1aWQpOworCS8qIEFmZmluaXR5IGluIGZvcm1hdCBmb3IgY29tcGFyaXNv
biB3aXRoIHR5cGVyICovCisJYWZmID0gKENQVV9BRkYzKGFmZikgPDwgMjQpIHwgKENQVV9BRkYy
KGFmZikgPDwgMTYpIHwKKwkgICAgKENQVV9BRkYxKGFmZikgPDwgOCkgfCBDUFVfQUZGMChhZmYp
OworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJICAg
ICJTdGFydCBzZWFyY2hpbmcgZm9yIFJlLURpc3RyaWJ1dG9yXG4iKTsKKwl9CisJLyogSXRlcmF0
ZSB0aHJvdWdoIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2Mt
PmdpY19yZWRpc3RzLm5yZWdpb25zOyBpKyspIHsKKwkJLyogVGFrZSBhIGNvcHkgb2YgdGhlIHJl
Z2lvbidzIHJlc291cmNlICovCisJCXJfcmVzID0gKnNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ld
OworCQlyX2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZSgmcl9yZXMpOworCisJCXBpZHIyID0gYnVz
X3JlYWRfNCgmcl9yZXMsIEdJQ1JfUElEUjIpOworCQlzd2l0Y2ggKHBpZHIyICYgR0lDUl9QSURS
Ml9BUkNIX01BU0spIHsKKwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjM6IC8qIGZhbGwgdGhy
b3VnaCAqLworCQljYXNlIEdJQ1JfUElEUjJfQVJDSF9HSUN2NDoKKwkJCWJyZWFrOworCQlkZWZh
dWx0OgorCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJObyBSZS1EaXN0cmlidXRv
ciBmb3VuZCBmb3IgQ1BVJXVcbiIsIGNwdWlkKTsKKwkJCWZyZWUoc2MtPmdpY19yZWRpc3RzLnBj
cHVbY3B1aWRdLCBNX0dJQ19WMyk7CisJCQlyZXR1cm4gKEVOT0RFVik7CisJCX0KKworCQlkbyB7
CisJCQl0eXBlciA9IGJ1c19yZWFkXzgoJnJfcmVzLCBHSUNSX1RZUEVSKTsKKwkJCWlmICgodHlw
ZXIgPj4gMzIpID09IGFmZikgeworCQkJCUtBU1NFUlQoc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1
aWRdICE9IE5VTEwsCisJCQkJICAgICgiSW52YWxpZCBwb2ludGVyIHRvIHBlci1DUFUgcmVkaXN0
cmlidXRvciIpKTsKKwkJCQkvKiBDb3B5IHJlcyBjb250ZW50cyB0byBpdHMgZmluYWwgZGVzdGlu
YXRpb24gKi8KKwkJCQkqc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdID0gcl9yZXM7CisJCQkJ
aWYgKGJvb3R2ZXJib3NlKSB7CisJCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCQkJICAg
ICJDUFUldSBSZS1EaXN0cmlidXRvciBoYXMgYmVlbiBmb3VuZFxuIiwKKwkJCQkJICAgIGNwdWlk
KTsKKwkJCQl9CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKworCQkJcl9ic2ggKz0gKEdJQ1JfUkRf
QkFTRV9TSVpFICsgR0lDUl9TR0lfQkFTRV9TSVpFKTsKKwkJCWlmICh0eXBlciAmIEdJQ1JfVFlQ
RVJfVkxQSVMpIHsKKwkJCQlyX2JzaCArPQorCQkJCSAgICAoR0lDUl9WTFBJX0JBU0VfU0laRSAr
IEdJQ1JfUkVTRVJWRURfU0laRSk7CisJCQl9CisKKwkJCXJtYW5fc2V0X2J1c2hhbmRsZSgmcl9y
ZXMsIHJfYnNoKTsKKwkJfSB3aGlsZSAoKHR5cGVyICYgR0lDUl9UWVBFUl9MQVNUKSA9PSAwKTsK
Kwl9CisKKwlmcmVlKHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSwgTV9HSUNfVjMpOworCWRl
dmljZV9wcmludGYoc2MtPmRldiwgIk5vIFJlLURpc3RyaWJ1dG9yIGZvdW5kIGZvciBDUFUldVxu
IiwgY3B1aWQpOworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfcmVk
aXN0X3dha2Uoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJdWludDMyX3Qgd2FrZXI7CisJ
c2l6ZV90IHVzX2xlZnQgPSAxMDAwMDAwOworCisJd2FrZXIgPSBnaWNfcl9yZWFkKHNjLCA0LCBH
SUNSX1dBS0VSKTsKKwkvKiBXYWtlIHVwIFJlLURpc3RyaWJ1dG9yIGZvciB0aGlzIENQVSAqLwor
CXdha2VyICY9IH5HSUNSX1dBS0VSX1BTOworCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1dBS0VS
LCB3YWtlcik7CisJLyoKKwkgKiBXaGVuIGNsZWFyaW5nIFByb2Nlc3NvclNsZWVwIGJpdCBpdCBp
cyByZXF1aXJlZCB0byB3YWl0IGZvcgorCSAqIENoaWxkcmVuQXNsZWVwIHRvIGJlY29tZSB6ZXJv
IGZvbGxvd2luZyB0aGUgcHJvY2Vzc29yIHBvd2VyLW9uLgorCSAqLworCXdoaWxlICgoZ2ljX3Jf
cmVhZChzYywgNCwgR0lDUl9XQUtFUikgJiBHSUNSX1dBS0VSX0NBKSAhPSAwKSB7CisJCURFTEFZ
KDEpOworCQlpZiAodXNfbGVmdC0tID09IDApIHsKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwK
KwkJCSAgICAiQ291bGQgbm90IHdha2UgUmUtRGlzdHJpYnV0b3IgZm9yIENQVSV1IiwKKwkJCSAg
ICBQQ1BVX0dFVChjcHVpZCkpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisKKwlpZiAo
Ym9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiQ1BVJXUgUmUtRGlzdHJp
YnV0b3Igd29rZSB1cFxuIiwKKwkJICAgIFBDUFVfR0VUKGNwdWlkKSk7CisJfQorCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNf
c29mdGMgKnNjKQoreworCWludCBlcnI7CisJc2l6ZV90IGk7CisKKwllcnIgPSBnaWNfdjNfcmVk
aXN0X2ZpbmQoc2MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBnaWNfdjNf
cmVkaXN0X3dha2Uoc2MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBEaXNhYmxl
IFNQSXMgKi8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9J
Q0VOQUJMRVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9QUElfTUFTSyk7CisJLyogRW5hYmxlIFNH
SXMgKi8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9JU0VO
QUJMRVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9TR0lfTUFTSyk7CisKKwkvKiBTZXQgcHJpb3Jp
dHkgZm9yIFNHSXMgYW5kIFBQSXMgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IEdJQ19MQVNUX1BQSTsg
aSArPSA0KSB7CisJCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNE
X0lQUklPUklUWVIoaSksCisJCSAgICBHSUNfUFJJT1JJVFlfTUFYKTsKKwl9CisKKwlnaWNfdjNf
d2FpdF9mb3JfcndwKHNjLCBSRURJU1QpOworCitlcnJvcjoKKwlyZXR1cm4gKGVycik7Cit9Cgo=


--b1_4ccc0ea76f1d3e1812e734a07ba732c5--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4ccc0ea76f1d3e1812e734a07ba732c5>