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

zbb updated this revision to Diff 5327.

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

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_4fd2e56b800518810b82d7f619324eee
Content-Type: text/x-patch; charset=utf-8; name="D2377.5327.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2377.5327.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
X3JlZy5oCkBAIC0wLDAgKzEsMTc3IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUg
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
CisjZGVmaW5lCV9HSUNfVjNfUkVHX0hfCisKKy8qCisgKiBQcmlvcml0eSBNQVgvTUlOIHZhbHVl
cworICovCisjZGVmaW5lCUdJQ19QUklPUklUWV9NQVgJKDB4MDBVTCkKKy8qIFVwcGVyIHZhbHVl
IGlzIGRldGVybWluZWQgYnkgTFBJIG1heCBwcmlvcml0eSAqLworI2RlZmluZQlHSUNfUFJJT1JJ
VFlfTUlOCSgweEZDVUwpCisKKy8qIE51bWJlcnMgZm9yIHNvZnR3YXJlIGdlbmVyYXRlZCBpbnRl
cnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJTVF9TR0kJCSgwKQorI2RlZmluZQlHSUNfTEFTVF9T
R0kJCSgxNSkKKy8qIE51bWJlcnMgZm9yIHByaXZhdGUgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICov
CisjZGVmaW5lCUdJQ19GSVJTVF9QUEkJCSgxNikKKyNkZWZpbmUJR0lDX0xBU1RfUFBJCQkoMzEp
CisvKiBOdW1iZXJzIGZvciBzcGFyZWQgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5l
CUdJQ19GSVJTVF9TUEkJCSgzMikKKyNkZWZpbmUJR0lDX0xBU1RfU1BJCQkoMTAxOSkKKy8qIE51
bWJlcnMgZm9yIGxvY2FsIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklS
U1RfTFBJCQkoODE5MikKKworLyoKKyAqIFJlZ2lzdGVycyAodjIvdjMpCisgKi8KKyNkZWZpbmUJ
R0lDRF9DVExSCQkoMHgwMDAwKQorI2RlZmluZQlHSUNEX0NUTFJfRzEJCSgxIDw8IDApCisjZGVm
aW5lCUdJQ0RfQ1RMUl9HMUEJCSgxIDw8IDEpCisjZGVmaW5lCUdJQ0RfQ1RMUl9BUkVfTlMJKDEg
PDwgNCkKKyNkZWZpbmUJR0lDRF9DVExSX1JXUAkJKDEgPDwgMzEpCisKKyNkZWZpbmUJR0lDRF9U
WVBFUgkJKDB4MDAwNCkKKyNkZWZpbmUJCUdJQ0RfVFlQRVJfSURCSVRTKHgpCSgoKCh4KSA+PiAx
OSkgJiAweDFGKSArIDEpCisKKyNkZWZpbmUJR0lDRF9JU0VOQUJMRVIobikJKDB4MDEwMCArICgo
KG4pID4+IDUpICogNCkpCisjZGVmaW5lCQlHSUNEX0lfUEVSX0lTRU5BQkxFUm4JKDMyKQorCisj
ZGVmaW5lCUdJQ0RfSUNFTkFCTEVSKG4pCSgweDAxODAgKyAoKChuKSA+PiA1KSAqIDQpKQorI2Rl
ZmluZQlHSUNEX0lQUklPUklUWVIobikJKDB4MDQwMCArICgoKG4pID4+IDIpICogNCkpCisjZGVm
aW5lCQlHSUNEX0lfUEVSX0lQUklPUklUWW4JKDQpCisKKyNkZWZpbmUJR0lDRF9JX01BU0sobikJ
CSgxIDw8ICgobikgJSAzMikpCisKKyNkZWZpbmUJR0lDRF9JQ0ZHUihuKQkJKDB4MEMwMCArICgo
KG4pID4+IDQpICogNCkpCisvKiBGaXJzdCBiaXQgaXMgYSBwb2xhcml0eSBiaXQgKDAgLSBsb3cs
IDEgLSBoaWdoKSAqLworI2RlZmluZQkJR0lDRF9JQ0ZHUl9QT0xfTE9XCSgwIDw8IDApCisjZGVm
aW5lCQlHSUNEX0lDRkdSX1BPTF9ISUdICSgxIDw8IDApCisjZGVmaW5lCQlHSUNEX0lDRkdSX1BP
TF9NQVNLCSgweDEpCisvKiBTZWNvbmQgYml0IGlzIGEgdHJpZ2dlciBiaXQgKDAgLSBsZXZlbCwg
MSAtIGVkZ2UpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfTFZMCSgwIDw8IDEpCisjZGVm
aW5lCQlHSUNEX0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9U
UklHX01BU0sJKDB4MikKKworI2RlZmluZQkJR0lDRF9JX1BFUl9JQ0ZHUm4JKDE2KQorCisvKgor
ICogUmVnaXN0ZXJzICh2MykKKyAqLworI2RlZmluZQlHSUNEX0lST1VURVIobikJCSgweDYwMDAg
KyAoKG4pICogOCkpCisjZGVmaW5lCUdJQ0RfUElEUjIJCSgweEZGRTgpCisKKyNkZWZpbmUJR0lD
Ul9QSURSMl9BUkNIX01BU0sJKDB4RjApCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9HSUN2Mwko
MHgzMCkKKyNkZWZpbmUJR0lDUl9QSURSMl9BUkNIX0dJQ3Y0CSgweDQwKQorCisvKiBSZWRpc3Ry
aWJ1dG9yIHJlZ2lzdGVycyAqLworI2RlZmluZQlHSUNSX1BJRFIyCQlHSUNEX1BJRFIyCisKKyNk
ZWZpbmUJR0lDUl9UWVBFUgkJKDB4MDAwOCkKKyNkZWZpbmUJR0lDUl9UWVBFUl9WTFBJUwkoMSA8
PCAxKQorI2RlZmluZQlHSUNSX1RZUEVSX0xBU1QJCSgxIDw8IDQpCisjZGVmaW5lCUdJQ1JfVFlQ
RVJfQUZGX1NISUZUCSgzMikKKworI2RlZmluZQlHSUNSX1dBS0VSCQkoMHgwMDE0KQorI2RlZmlu
ZQlHSUNSX1dBS0VSX1BTCQkoMSA8PCAxKSAvKiBQcm9jZXNzb3Igc2xlZXAgKi8KKyNkZWZpbmUJ
R0lDUl9XQUtFUl9DQQkJKDEgPDwgMikgLyogQ2hpbGRyZW4gYXNsZWVwICovCisKKy8qIFJlLWRp
c3RyaWJ1dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLworI2RlZmluZQlHSUNSX1JE
X0JBU0VfU0laRQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUdJQ1JfU0dJX0JBU0VfU0laRQlQQUdF
X1NJWkVfNjRLCisjZGVmaW5lCUdJQ1JfVkxQSV9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2Rl
ZmluZQlHSUNSX1JFU0VSVkVEX1NJWkUJUEFHRV9TSVpFXzY0SworCisjZGVmaW5lCUdJQ1JfSVNF
TkFCTEVSMAkJCQkoMHgwMTAwKQorI2RlZmluZQlHSUNSX0lDRU5BQkxFUjAJCQkJKDB4MDE4MCkK
KyNkZWZpbmUJCUdJQ1JfSV9FTkFCTEVSX1NHSV9NQVNLCQkoMHgwMDAwRkZGRikKKyNkZWZpbmUJ
CUdJQ1JfSV9FTkFCTEVSX1BQSV9NQVNLCQkoMHhGRkZGMDAwMCkKKworI2RlZmluZQkJR0lDUl9J
X1BFUl9JUFJJT1JJVFluCQkoR0lDRF9JX1BFUl9JUFJJT1JJVFluKQorCisvKgorICogQ1BVIGlu
dGVyZmFjZQorICovCisKKy8qCisgKiBSZWdpc3RlcnMgbGlzdCAoSUNDX3h5el9FTDEpOgorICoK
KyAqIFBNUiAgICAgLSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyCisgKgkJKiBpbnRlcnJ1cHRzIG9m
IHByaW9yaXR5IGhpZ2hlciB0aGFuIHNwZWNpZmllZAorICoJCSAgaW4gdGhpcyBtYXNrIHdpbGwg
YmUgc2lnbmFsbGVkIHRvIHRoZSBDUFUuCisgKgkJICAoMHhmZiAtIGxvd2VzdCBwb3NzaWJsZSBw
cmlvLiwgMHgwMCAtIGhpZ2hlc3QgcHJpby4pCisgKgorICogQ1RMUiAgICAtIENvbnRyb2wgUmVn
aXN0ZXIKKyAqCQkqIGNvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBDUFUgaW50ZXJmYWNlIGFuZCBk
aXNwbGF5cworICoJCSAgaW1wbGVtZW50ZWQgZmVhdHVyZXMuCisgKgorICogSUdSUEVOMSAtIElu
dGVycnVwdCBHcm91cCAxIEVuYWJsZSBSZWdpc3RlcgorICoKKyAqIElBUjEgICAgLSBJbnRlcnJ1
cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgR3JvdXAgMQorICoJCSogY29udGFpbnMgbnVtYmVyIG9m
IHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcKKyAqCQkgIGludGVycnVwdCBmcm9tIHRoZSBH
cm91cCAxLgorICoKKyAqIEVPSVIxICAgLSBFbmQgb2YgSW50ZXJydXB0IFJlZ2lzdGVyIEdyb3Vw
IDEKKyAqCQkqIFdyaXRlcyBpbmZvcm0gQ1BVIGludGVyZmFjZSBhYm91dCBjb21wbGV0ZWQgR3Jv
dXAgMQorICoJCSAgaW50ZXJydXB0cyBwcm9jZXNzaW5nLgorICovCisKKyNkZWZpbmUJZ2ljX2lj
Y193cml0ZShyZWcsIHZhbCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlXUklURV9TUEVDSUFMUkVH
KElDQ18gIyNyZWcgIyNfRUwxLCB2YWwpOwkJXAorCWlzYigpOwkJCQkJCQlcCit9IHdoaWxlICgw
KQorCisjZGVmaW5lCWdpY19pY2NfcmVhZChyZWcpCQkJCQlcCisoewkJCQkJCQkJXAorCXVpbnQ2
NF90IHZhbDsJCQkJCQlcCisJCQkJCQkJCVwKKwl2YWwgPSBSRUFEX1NQRUNJQUxSRUcoSUNDXyAj
I3JlZyAjI19FTDEpOwkJXAorCSh2YWwpOwkJCQkJCQlcCit9KQorCisjZGVmaW5lCWdpY19pY2Nf
c2V0KHJlZywgbWFzaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJ
XAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlcCisJdmFsIHw9IChtYXNrKTsJCQkJCQlc
CisJZ2ljX2ljY193cml0ZShyZWcsIHZhbCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJ
Z2ljX2ljY19jbGVhcihyZWcsIG1hc2spCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2
YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlcCisJdmFsICY9IH4obWFz
ayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxlICgwKQor
CisjZW5kaWYgLyogX0dJQ19WM19SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02
NC9naWNfdjNfZmR0LmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQu
YwpAQCAtMCwwICsxLDEzMiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVC
U0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3
YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBv
ZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19G
QlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8
c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwu
aD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1
ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNsdWRlIDxzeXMvcHJv
Yy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2lu
Y2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29tbW9uLmg+Cisj
aW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5o
PgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRlICJwaWNfaWYu
aCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisK
Ky8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RhdGljIGludCBnaWNfdjNfZmR0X3Byb2JlKGRldmlj
ZV90KTsKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9hdHRhY2goZGV2aWNlX3QpOworCitzdGF0aWMg
ZGV2aWNlX21ldGhvZF90IGdpY192M19mZHRfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRl
cmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJZ2ljX3YzX2ZkdF9wcm9iZSksCisJ
REVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWdpY192M19mZHRfYXR0YWNoKSwKKworCS8qIEVuZCAq
LworCURFVk1FVEhPRF9FTkQKK307CisKK0RFRklORV9DTEFTU18xKGdpY192MywgZ2ljX3YzX2Zk
dF9kcml2ZXIsIGdpY192M19mZHRfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19z
b2Z0YyksIGdpY192M19kcml2ZXIpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBnaWNfdjNfZmR0X2Rl
dmNsYXNzOworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywgc2ltcGxlYnVzLCBnaWNfdjNf
ZHJpdmVyLCBnaWNfdjNfZmR0X2RldmNsYXNzLAorICAgIDAsIDAsIEJVU19QQVNTX0lOVEVSUlVQ
VCArIEJVU19QQVNTX09SREVSX01JRERMRSk7CitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywg
b2Z3YnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZmR0X2RldmNsYXNzLAorICAgIDAsIDAsIEJV
U19QQVNTX0lOVEVSUlVQVCArIEJVU19QQVNTX09SREVSX01JRERMRSk7CisKKy8qCisgKiBEZXZp
Y2UgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50CitnaWNfdjNfZmR0X3Byb2JlKGRldmljZV90
IGRldikKK3sKKworCWlmICghb2Z3X2J1c19zdGF0dXNfb2theShkZXYpKQorCQlyZXR1cm4gKEVO
WElPKTsKKworCWlmICghb2Z3X2J1c19pc19jb21wYXRpYmxlKGRldiwgImFybSxnaWMtdjMiKSkK
KwkJcmV0dXJuIChFTlhJTyk7CisKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCBHSUNfVjNfREVWU1RS
KTsKKwlyZXR1cm4gKEJVU19QUk9CRV9ERUZBVUxUKTsKK30KKworc3RhdGljIGludAorZ2ljX3Yz
X2ZkdF9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBnaWNfdjNfc29mdGMgKnNjOwor
CXBjZWxsX3QgcmVkaXN0X3JlZ2lvbnM7CisJaW50IGVycjsKKworCXNjID0gZGV2aWNlX2dldF9z
b2Z0YyhkZXYpOworCXNjLT5kZXYgPSBkZXY7CisKKwkvKgorCSAqIFJlY292ZXIgbnVtYmVyIG9m
IHRoZSBSZS1EaXN0cmlidXRvciByZWdpb25zLgorCSAqLworCWlmIChPRl9nZXRlbmNwcm9wKG9m
d19idXNfZ2V0X25vZGUoZGV2KSwgIiNyZWRpc3RyaWJ1dG9yLXJlZ2lvbnMiLAorCSAgICAmcmVk
aXN0X3JlZ2lvbnMsIHNpemVvZihyZWRpc3RfcmVnaW9ucykpIDw9IDApCisJCXNjLT5naWNfcmVk
aXN0cy5ucmVnaW9ucyA9IDE7CisJZWxzZQorCQlzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgPSBy
ZWRpc3RfcmVnaW9uczsKKworCWVyciA9IGdpY192M19hdHRhY2goZGV2KTsKKwlpZiAoZXJyKQor
CQlnb3RvIGVycm9yOworCisJcmV0dXJuIChlcnIpOworCitlcnJvcjoKKwlpZiAoYm9vdHZlcmJv
c2UpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsCisJCSAgICAiRmFpbGVkIHRvIGF0dGFjaC4gRXJy
b3IgJWRcbiIsIGVycik7CisJfQorCS8qIEZhaWx1cmUgc28gZnJlZSByZXNvdXJjZXMgKi8KKwln
aWNfdjNfZGV0YWNoKGRldik7CisKKwlyZXR1cm4gKGVycik7Cit9CmRpZmYgLS1naXQgYS9zeXMv
YXJtNjQvYXJtNjQvZ2ljX3YzLmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMK
QEAgLTAsMCArMSw1ODIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNE
IEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2Fy
ZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2Yg
dGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5
cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+
CisjaW5jbHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRl
IDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDxzeXMvcGNw
dS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL2NwdXNldC5oPgorI2lu
Y2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisKKyNpbmNsdWRlIDx2
bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+
CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKyNpbmNsdWRlICJwaWNfaWYuaCIKKworI2lu
Y2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisKKy8qIERldmlj
ZSBhbmQgUElDIG1ldGhvZHMgKi8KK3N0YXRpYyB2b2lkIGdpY192M19kaXNwYXRjaChkZXZpY2Vf
dCwgc3RydWN0IHRyYXBmcmFtZSAqKTsKK3N0YXRpYyB2b2lkIGdpY192M19lb2koZGV2aWNlX3Qs
IHVfaW50KTsKK3N0YXRpYyB2b2lkIGdpY192M19tYXNrX2lycShkZXZpY2VfdCwgdV9pbnQpOwor
c3RhdGljIHZvaWQgZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3QsIHVfaW50KTsKKworc3RhdGlj
IGRldmljZV9tZXRob2RfdCBnaWNfdjNfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRlcmZh
Y2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZ2ljX3YzX2RldGFjaCksCisKKwkvKiBQ
SUMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHBpY19kaXNwYXRjaCwJCWdpY192M19kaXNwYXRj
aCksCisJREVWTUVUSE9EKHBpY19lb2ksCQlnaWNfdjNfZW9pKSwKKwlERVZNRVRIT0QocGljX21h
c2ssCQlnaWNfdjNfbWFza19pcnEpLAorCURFVk1FVEhPRChwaWNfdW5tYXNrLAkJZ2ljX3YzX3Vu
bWFza19pcnEpLAorCisJLyogRW5kICovCisJREVWTUVUSE9EX0VORAorfTsKKworREVGSU5FX0NM
QVNTXzAoZ2ljX3YzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfbWV0aG9kcywKKyAgICBzaXplb2Yo
c3RydWN0IGdpY192M19zb2Z0YykpOworCisvKgorICogRHJpdmVyLXNwZWNpZmljIGRlZmluaXRp
b25zLgorICovCitNQUxMT0NfREVGSU5FKE1fR0lDX1YzLCAiR0lDdjMiLCBHSUNfVjNfREVWU1RS
KTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgYW5kIGRlZmluaXRpb25zLgorICovCisvKiBE
ZXN0aW5hdGlvbiByZWdpc3RlcnMsIGVpdGhlciBEaXN0cmlidXRvciBvciBSZS1EaXN0cmlidXRv
ciAqLworZW51bSBnaWNfdjNfeGRpc3QgeworCURJU1QgPSAwLAorCVJFRElTVCwKK307CisKKy8q
IEhlbHBlciByb3V0aW5lcyBzdGFydGluZyB3aXRoIGdpY192M18gKi8KK3N0YXRpYyBpbnQgZ2lj
X3YzX2Rpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIGludCBnaWNfdjNf
cmVkaXN0X2ZpbmQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgZ2ljX3YzX3Jl
ZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgaW50IGdpY192M19jcHVf
aW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIHZvaWQgZ2ljX3YzX3dhaXRfZm9y
X3J3cChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICosIGVudW0gZ2ljX3YzX3hkaXN0KTsKKworLyogQSBz
ZXF1ZW5jZSBvZiBpbml0IGZ1bmN0aW9ucyBmb3IgcHJpbWFyeSAoYm9vdCkgQ1BVICovCit0eXBl
ZGVmIGludCAoKmdpY192M19pbml0c2VxX3QpIChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworLyog
UHJpbWFyeSBDUFUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KK3N0YXRpYyBnaWNfdjNfaW5p
dHNlcV90IGdpY192M19wcmltYXJ5X2luaXRbXSA9IHsKKwlnaWNfdjNfZGlzdF9pbml0LAorCWdp
Y192M19yZWRpc3RfaW5pdCwKKwlnaWNfdjNfY3B1X2luaXQsCisJTlVMTAorfTsKKworLyoKKyAq
IERldmljZSBpbnRlcmZhY2UuCisgKi8KK2ludAorZ2ljX3YzX2F0dGFjaChkZXZpY2VfdCBkZXYp
Cit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJZ2ljX3YzX2luaXRzZXFfdCAqaW5pdF9m
dW5jOworCXVpbnQzMl90IHR5cGVyOworCWludCByaWQ7CisJaW50IGVycjsKKwlzaXplX3QgaTsK
KworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5kZXYgPSBkZXY7CisJZXJyID0g
MDsKKworCS8qIEluaXRpYWxpemUgbXV0ZXggKi8KKwltdHhfaW5pdCgmc2MtPmdpY19tdHgsICJH
SUN2MyBsb2NrIiwgTlVMTCwgTVRYX1NQSU4pOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhcnJheSBv
ZiBzdHJ1Y3QgcmVzb3VyY2UuCisJICogT25lIGVudHJ5IGZvciBEaXN0cmlidXRvciBhbmQgYWxs
IHJlbWFpbmluZyBmb3IgUmUtRGlzdHJpYnV0b3IuCisJICovCisJc2MtPmdpY19yZXMgPSBtYWxs
b2MoCisJICAgIHNpemVvZihzYy0+Z2ljX3JlcykgKiAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25z
ICsgMSksCisJICAgIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBOb3cgYWxsb2NhdGUgY29y
cmVzcG9uZGluZyByZXNvdXJjZXMgKi8KKwlmb3IgKGkgPSAwLCByaWQgPSAwOyBpIDwgKHNjLT5n
aWNfcmVkaXN0cy5ucmVnaW9ucyArIDEpOyBpKyssIHJpZCsrKSB7CisJCXNjLT5naWNfcmVzW3Jp
ZF0gPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJCSAgICAm
cmlkLCBSRl9BQ1RJVkUpOworCQlpZiAoc2MtPmdpY19yZXNbcmlkXSA9PSBOVUxMKQorCQkJcmV0
dXJuIChFTlhJTyk7CisJfQorCisJLyoKKwkgKiBEaXN0cmlidXRvciBpbnRlcmZhY2UKKwkgKi8K
KwlzYy0+Z2ljX2Rpc3QgPSBzYy0+Z2ljX3Jlc1swXTsKKworCS8qCisJICogUmUtRHJpc3RyaWJ1
dG9yIGludGVyZmFjZQorCSAqLworCS8qIEFsbG9jYXRlIHNwYWNlIHVuZGVyIHJlZ2lvbiBkZXNj
cmlwdGlvbnMgKi8KKwlzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucyA9IG1hbGxvYygKKwkgICAgc2l6
ZW9mKCpzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucykgKiBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMs
CisJICAgIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBGaWxsLXVwIGJ1c19zcGFjZSBpbmZv
cm1hdGlvbiBmb3IgZWFjaCByZWdpb24uICovCisJZm9yIChpID0gMCwgcmlkID0gMTsgaSA8IHNj
LT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrLCByaWQrKykKKwkJc2MtPmdpY19yZWRpc3RzLnJl
Z2lvbnNbaV0gPSBzYy0+Z2ljX3Jlc1tyaWRdOworCisJLyogR2V0IHRoZSBudW1iZXIgb2Ygc3Vw
cG9ydGVkIFNQSSBpbnRlcnJ1cHRzICovCisJdHlwZXIgPSBnaWNfZF9yZWFkKHNjLCA0LCBHSUNE
X1RZUEVSKTsKKwlzYy0+Z2ljX25pcnFzID0gdHlwZXIgJiAweDFGOworCXNjLT5naWNfbmlycXMg
PSAoc2MtPmdpY19uaXJxcyArIDEpICogMzI7CisJaWYgKHNjLT5naWNfbmlycXMgPiAxMDIwKQor
CQlzYy0+Z2ljX25pcnFzID0gMTAyMDsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRl
ZCBpbnRlcnJ1cHQgaWRlbnRpZmllciBiaXRzICovCisJc2MtPmdpY19pZGJpdHMgPSBHSUNEX1RZ
UEVSX0lEQklUUyh0eXBlcik7CisKKwlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50
ZihkZXYsICJTUElzOiAldSwgSURzOiAldVxuIiwKKwkJICAgIHNjLT5naWNfbmlycXMsICgxIDw8
IHNjLT5naWNfaWRiaXRzKSAtIDEpOworCX0KKworCS8qIFRyYWluIGluaXQgc2VxdWVuY2UgZm9y
IGJvb3QgQ1BVICovCisJZm9yIChpbml0X2Z1bmMgPSBnaWNfdjNfcHJpbWFyeV9pbml0OyAqaW5p
dF9mdW5jICE9IE5VTEw7IGluaXRfZnVuYysrKSB7CisJCWVyciA9ICgqaW5pdF9mdW5jKShzYyk7
CisJCWlmIChlcnIgIT0gMCkKKwkJCXJldHVybiAoZXJyKTsKKwl9CisJLyoKKwkgKiBGdWxsIHN1
Y2Nlc3MuCisJICogTm93IHJlZ2lzdGVyIFBJQyB0byB0aGUgaW50ZXJydXB0cyBoYW5kbGluZyBs
YXllci4KKwkgKi8KKwlhcm1fcmVnaXN0ZXJfcm9vdF9waWMoZGV2LCBzYy0+Z2ljX25pcnFzKTsK
KworCXJldHVybiAoMCk7Cit9CisKK2ludAorZ2ljX3YzX2RldGFjaChkZXZpY2VfdCBkZXYpCit7
CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJc2l6ZV90IGk7CisJaW50IHJpZDsKKworCXNj
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGRldmljZV9pc19hdHRhY2hlZChkZXYp
KSB7CisJCS8qCisJCSAqIFhYWDogV2Ugc2hvdWxkIHByb2JhYmx5IGRlcmVnaXN0ZXIgUElDCisJ
CSAqLworCX0KKwlmb3IgKHJpZCA9IDA7IHJpZCA8IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMg
KyAxKTsgcmlkKyspCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlks
IHJpZCwgc2MtPmdpY19yZXNbcmlkXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYQ1BVOyBpKysp
CisJCWZyZWUoc2MtPmdpY19yZWRpc3RzLnBjcHVbaV0sIE1fR0lDX1YzKTsKKworCWZyZWUoc2Mt
PmdpY19yZXMsIE1fR0lDX1YzKTsKKwlmcmVlKHNjLT5naWNfcmVkaXN0cy5yZWdpb25zLCBNX0dJ
Q19WMyk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogUElDIGludGVyZmFjZS4KKyAqLwor
c3RhdGljIHZvaWQKK2dpY192M19kaXNwYXRjaChkZXZpY2VfdCBkZXYsIHN0cnVjdCB0cmFwZnJh
bWUgKmZyYW1lKQoreworCXVpbnQ2NF90IGFjdGl2ZV9pcnE7CisKKwl3aGlsZSAoMSkgeworCQlh
Y3RpdmVfaXJxID0gZ2ljX2ljY19yZWFkKElBUjEpOworCisJCWlmIChfX3ByZWRpY3RfZmFsc2Uo
YWN0aXZlX2lycSA9PSBJQ0NfSUFSMV9FTDFfU1BVUikpCisJCQlicmVhazsKKworCQlpZiAoX19w
cmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX1BQSSAmJgorCQkgICAgYWN0aXZl
X2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkJYXJtX2Rpc3BhdGNoX2ludHIoYWN0aXZlX2ly
cSwgZnJhbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYWN0aXZlX2lycSA8PSBHSUNf
TEFTVF9TR0kgfHwgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJKSB7CisJCQkvKgorCQkJICog
VE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kvTFBJIGhhbmRsaW5nLgorCQkJICogICAgICAgTWFz
ayBpdCBpZiBzdWNoIGlzIHJlY2VpdmVkIGZvciBzb21lIHJlYXNvbi4KKwkJCSAqLworCQkJZGV2
aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIlJlY2VpdmVkIHVuc3VwcG9ydGVkIGludGVycnVwdCB0
eXBlOiAlc1xuIiwKKwkJCSAgICBhY3RpdmVfaXJxID49IEdJQ19GSVJTVF9MUEkgPyAiTFBJIiA6
ICJTR0kiKTsKKwkJCVBJQ19NQVNLKGRldiwgYWN0aXZlX2lycSk7CisJCX0KKwl9Cit9CisKK3N0
YXRpYyB2b2lkCitnaWNfdjNfZW9pKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCisJZ2lj
X2ljY193cml0ZShFT0lSMSwgKHVpbnQ2NF90KWlycSk7Cit9CisKK3N0YXRpYyB2b2lkCitnaWNf
djNfbWFza19pcnEoZGV2aWNlX3QgZGV2LCB1X2ludCBpcnEpCit7CisJc3RydWN0IGdpY192M19z
b2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChpcnEgPj0g
R0lDX0ZJUlNUX1BQSSAmJiBpcnEgPD0gR0lDX0xBU1RfUFBJKSB7IC8qIFBQSXMgaW4gY29ycmVz
cG9uZGluZyBSZS1EaXN0cmlidXRvciAqLworCQlnaWNfcl93cml0ZShzYywgNCwKKwkJICAgIEdJ
Q1JfU0dJX0JBU0VfU0laRSArIEdJQ0RfSUNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkp
OworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBSRURJU1QpOworCX0gZWxzZSBpZiAoaXJxID49
IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3Ry
aWJ1dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNEX0lDRU5BQkxFUihpcnEpLCBHSUNE
X0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNl
CisJCXBhbmljKCIlczogVW5zdXBwb3J0ZWQgSVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEp
OworfQorCitzdGF0aWMgdm9pZAorZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3QgZGV2LCB1X2lu
dCBpcnEpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKKworCWlmIChpcnEgPj0gR0lDX0ZJUlNUX1BQSSAmJiBpcnEgPD0gR0lDX0xB
U1RfUFBJKSB7IC8qIFBQSXMgaW4gY29ycmVzcG9uZGluZyBSZS1EaXN0cmlidXRvciAqLworCQln
aWNfcl93cml0ZShzYywgNCwKKwkJICAgIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ0RfSVNFTkFC
TEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBS
RURJU1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19M
QVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCisJCWdpY19kX3dyaXRlKHNjLCA0
LCBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRf
Zm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlCisJCXBhbmljKCIlczogVW5zdXBwb3J0ZWQgSVJR
IG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmVz
CisgKi8KK3N0YXRpYyB2b2lkCitnaWNfdjNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNfc29m
dGMgKnNjLCBlbnVtIGdpY192M194ZGlzdCB4ZGlzdCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl
czsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgdXNfbGVmdCA9IDEwMDAwMDA7CisKKwljcHVpZCA9
IFBDUFVfR0VUKGNwdWlkKTsKKworCXN3aXRjaCAoeGRpc3QpIHsKKwljYXNlIERJU1Q6CisJCXJl
cyA9IHNjLT5naWNfZGlzdDsKKwkJYnJlYWs7CisJY2FzZSBSRURJU1Q6CisJCXJlcyA9IHNjLT5n
aWNfcmVkaXN0cy5wY3B1W2NwdWlkXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FTU0VSVCgw
LCAoIiVzOiBBdHRlbXB0IHRvIHdhaXQgZm9yIHVua25vd24gUldQIiwgX19mdW5jX18pKTsKKwkJ
cmV0dXJuOworCX0KKworCXdoaWxlICgoYnVzX3JlYWRfNChyZXMsIEdJQ0RfQ1RMUikgJiBHSUNE
X0NUTFJfUldQKSAhPSAwKSB7CisJCURFTEFZKDEpOworCQlpZiAodXNfbGVmdC0tID09IDApIHsK
KwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiR0lDRCBSZWdpc3RlciB3cml0ZSBw
ZW5kaW5nIGZvciB0b28gbG9uZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisvKiBDUFUg
aW50ZXJmYWNlLiAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2dpY192M19jcHVfcHJpb3JpdHko
dWludDY0X3QgbWFzaykKK3sKKworCS8qIFNldCBwcm9yaXR5IG1hc2sgKi8KKwlnaWNfaWNjX3dy
aXRlKFBNUiwgbWFzayAmIElDQ19QTVJfRUwxX1BSSU9fTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQK
K2dpY192M19jcHVfZW5hYmxlX3NyZShzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50
NjRfdCBzcmU7CisJdV9pbnQgY3B1aWQ7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKwkv
KgorCSAqIFNldCB0aGUgU1JFIGJpdCB0byBlbmFibGUgYWNjZXNzIHRvIEdJQyBDUFUgaW50ZXJm
YWNlCisJICogdmlhIHN5c3RlbSByZWdpc3RlcnMuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFM
UkVHKGljY19zcmVfZWwxKTsKKwlzcmUgfD0gSUNDX1NSRV9FTDFfU1JFOworCVdSSVRFX1NQRUNJ
QUxSRUcoaWNjX3NyZV9lbDEsIHNyZSk7CisJaXNiKCk7CisJLyoKKwkgKiBOb3cgZW5zdXJlIHRo
YXQgdGhlIGJpdCBpcyBzZXQuCisJICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19zcmVf
ZWwxKTsKKwlpZiAoKHNyZSAmIElDQ19TUkVfRUwxX1NSRSkgIT0gMCkgeworCQkvKiBXZSBhcmUg
ZG9uZS4gVGhpcyB3YXMgZGlzYWJsZWQgaW4gRUwyICovCisJCWRldmljZV9wcmludGYoc2MtPmRl
diwgIkVSUk9SOiBDUFUldSBjYW5ub3QgZW5hYmxlIENQVSBpbnRlcmZhY2UgIgorCQkgICAgInZp
YSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLCBjcHVpZCk7CisJCXJldHVybiAoRU5YSU8pOworCX0gZWxz
ZSBpZiAoYm9vdHZlcmJvc2UgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAg
ICAiQ1BVJXUgZW5hYmxlZCBDUFUgaW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLAor
CQkgICAgY3B1aWQpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192
M19jcHVfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCisJLyog
RW5hYmxlIGFjY2VzcyB0byBDUFUgaW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzICovCisJ
ZXJyID0gZ2ljX3YzX2NwdV9lbmFibGVfc3JlKHNjKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVy
biAoZXJyKTsKKwkvKiBQcmlvcml0eSBtYXNrIHRvIG1pbmltdW0gLSBhY2NlcHQgYWxsIGludGVy
cnVwdHMgKi8KKwlnaWNfdjNfY3B1X3ByaW9yaXR5KEdJQ19QUklPUklUWV9NSU4pOworCS8qIERp
c2FibGUgRU9JIG1vZGUgKi8KKwlnaWNfaWNjX2NsZWFyKENUTFIsIElDQ19DVExSX0VMMV9FT0lN
T0RFKTsKKwkvKiBFbmFibGUgZ3JvdXAgMSAoaW5zZWN1cmUpIGludGVycnVwcyAqLworCWdpY19p
Y2Nfc2V0KElHUlBFTjEsIElDQ19JR1JQRU4wX0VMMV9FTik7CisKKwlyZXR1cm4gKDApOworfQor
CisvKiBEaXN0cmlidXRvciAqLworc3RhdGljIGludAorZ2ljX3YzX2Rpc3RfaW5pdChzdHJ1Y3Qg
Z2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBhZmY7CisJdV9pbnQgaTsKKworCS8qCisJ
ICogMS4gRGlzYWJsZSB0aGUgRGlzdHJpYnV0b3IKKwkgKi8KKwlnaWNfZF93cml0ZShzYywgNCwg
R0lDRF9DVExSLCAwKTsKKwlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKworCS8qCisJ
ICogMi4gQ29uZmlndXJlIHRoZSBEaXN0cmlidXRvcgorCSAqLworCS8qIFNldCBhbGwgZ2xvYmFs
IGludGVycnVwdHMgdG8gYmUgbGV2ZWwgdHJpZ2dlcmVkLCBhY3RpdmUgbG93LiAqLworCWZvciAo
aSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFzOyBpICs9IEdJQ0RfSV9QRVJfSUNG
R1JuKQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0ZHUihpKSwgMHgwMDAwMDAwMCk7CisK
KwkvKiBTZXQgcHJpb3JpdHkgdG8gYWxsIHNoYXJlZCBpbnRlcnJ1cHRzICovCisJZm9yIChpID0g
R0lDX0ZJUlNUX1NQSTsKKwkgICAgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gR0lDRF9JX1BFUl9J
UFJJT1JJVFluKSB7CisJCS8qIFNldCBoaWdoZXN0IHByaW9yaXR5ICovCisJCWdpY19kX3dyaXRl
KHNjLCA0LCBHSUNEX0lQUklPUklUWVIoaSksIEdJQ19QUklPUklUWV9NQVgpOworCX0KKworCS8q
CisJICogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gTGVhdmUgUFBJIGFuZCBTR0lzIGFzIHRoZXkg
YXJlIGVuYWJsZWQgaW4KKwkgKiBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMuCisJICovCisJZm9y
IChpID0gR0lDX0ZJUlNUX1NQSTsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gR0lDRF9JX1BFUl9J
U0VOQUJMRVJuKQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIoaSksIDB4RkZG
RkZGRkYpOworCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAqIDMu
IEVuYWJsZSBEaXN0cmlidXRvcgorCSAqLworCS8qIEVuYWJsZSBEaXN0cmlidXRvciB3aXRoIEFS
RSwgR3JvdXAgMSAqLworCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0NUTFIsIEdJQ0RfQ1RMUl9B
UkVfTlMgfCBHSUNEX0NUTFJfRzFBIHwKKwkgICAgR0lDRF9DVExSX0cxKTsKKworCS8qCisJICog
NC4gUm91dGUgYWxsIGludGVycnVwdHMgdG8gYm9vdCBDUFUuCisJICovCisJYWZmID0gQ1BVX0FG
RklOSVRZKFBDUFVfR0VUKGNwdWlkKSk7CisJZm9yIChpID0gR0lDX0ZJUlNUX1NQSTsgaSA8IHNj
LT5naWNfbmlycXM7IGkrKykKKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfSVJPVVRFUihpKSwg
YWZmKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFJlLURpc3RyaWJ1dG9yICovCitzdGF0aWMg
aW50CitnaWNfdjNfcmVkaXN0X2ZpbmQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJc3Ry
dWN0IHJlc291cmNlIHJfcmVzOworCWJ1c19zcGFjZV9oYW5kbGVfdCByX2JzaDsKKwl1aW50NjRf
dCBhZmY7CisJdWludDY0X3QgdHlwZXI7CisJdWludDMyX3QgcGlkcjI7CisJdV9pbnQgY3B1aWQ7
CisJc2l6ZV90IGk7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCS8qIEFsbG9jYXRl
IHN0cnVjdCByZXNvdXJjZSBmb3IgdGhpcyBDUFUncyBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMg
Ki8KKwlzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gPQorCSAgICBtYWxsb2Moc2l6ZW9mKCpz
Yy0+Z2ljX3JlZGlzdHMucGNwdVswXSksIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwlhZmYgPSBD
UFVfQUZGSU5JVFkoY3B1aWQpOworCS8qIEFmZmluaXR5IGluIGZvcm1hdCBmb3IgY29tcGFyaXNv
biB3aXRoIHR5cGVyICovCisJYWZmID0gKENQVV9BRkYzKGFmZikgPDwgMjQpIHwgKENQVV9BRkYy
KGFmZikgPDwgMTYpIHwKKwkgICAgKENQVV9BRkYxKGFmZikgPDwgOCkgfCBDUFVfQUZGMChhZmYp
OworCisJaWYgKGJvb3R2ZXJib3NlICE9IDApIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAor
CQkgICAgIlN0YXJ0IHNlYXJjaGluZyBmb3IgUmUtRGlzdHJpYnV0b3JcbiIpOworCX0KKwkvKiBJ
dGVyYXRlIHRocm91Z2ggUmUtRGlzdHJpYnV0b3IgcmVnaW9ucyAqLworCWZvciAoaSA9IDA7IGkg
PCBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnM7IGkrKykgeworCQkvKiBUYWtlIGEgY29weSBvZiB0
aGUgcmVnaW9uJ3MgcmVzb3VyY2UgKi8KKwkJcl9yZXMgPSAqc2MtPmdpY19yZWRpc3RzLnJlZ2lv
bnNbaV07CisJCXJfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKCZyX3Jlcyk7CisKKwkJcGlkcjIg
PSBidXNfcmVhZF80KCZyX3JlcywgR0lDUl9QSURSMik7CisJCXN3aXRjaCAocGlkcjIgJiBHSUNS
X1BJRFIyX0FSQ0hfTUFTSykgeworCQljYXNlIEdJQ1JfUElEUjJfQVJDSF9HSUN2MzogLyogZmFs
bCB0aHJvdWdoICovCisJCWNhc2UgR0lDUl9QSURSMl9BUkNIX0dJQ3Y0OgorCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIk5vIFJlLURpc3Ry
aWJ1dG9yIGZvdW5kIGZvciBDUFUldVxuIiwgY3B1aWQpOworCQkJZnJlZShzYy0+Z2ljX3JlZGlz
dHMucGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwkJCXJldHVybiAoRU5PREVWKTsKKwkJfQorCisJ
CWRvIHsKKwkJCXR5cGVyID0gYnVzX3JlYWRfOCgmcl9yZXMsIEdJQ1JfVFlQRVIpOworCQkJaWYg
KCh0eXBlciA+PiBHSUNSX1RZUEVSX0FGRl9TSElGVCkgPT0gYWZmKSB7CisJCQkJS0FTU0VSVChz
Yy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gIT0gTlVMTCwKKwkJCQkgICAgKCJJbnZhbGlkIHBv
aW50ZXIgdG8gcGVyLUNQVSByZWRpc3RyaWJ1dG9yIikpOworCQkJCS8qIENvcHkgcmVzIGNvbnRl
bnRzIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbiAqLworCQkJCSpzYy0+Z2ljX3JlZGlzdHMucGNw
dVtjcHVpZF0gPSByX3JlczsKKwkJCQlpZiAoYm9vdHZlcmJvc2UgIT0gMCkgeworCQkJCQlkZXZp
Y2VfcHJpbnRmKHNjLT5kZXYsCisJCQkJCSAgICAiQ1BVJXUgUmUtRGlzdHJpYnV0b3IgaGFzIGJl
ZW4gZm91bmRcbiIsCisJCQkJCSAgICBjcHVpZCk7CisJCQkJfQorCQkJCXJldHVybiAoMCk7CisJ
CQl9CisKKwkJCXJfYnNoICs9IChHSUNSX1JEX0JBU0VfU0laRSArIEdJQ1JfU0dJX0JBU0VfU0la
RSk7CisJCQlpZiAoKHR5cGVyICYgR0lDUl9UWVBFUl9WTFBJUykgIT0gMCkgeworCQkJCXJfYnNo
ICs9CisJCQkJICAgIChHSUNSX1ZMUElfQkFTRV9TSVpFICsgR0lDUl9SRVNFUlZFRF9TSVpFKTsK
KwkJCX0KKworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKCZyX3Jlcywgcl9ic2gpOworCQl9IHdoaWxl
ICgodHlwZXIgJiBHSUNSX1RZUEVSX0xBU1QpID09IDApOworCX0KKworCWZyZWUoc2MtPmdpY19y
ZWRpc3RzLnBjcHVbY3B1aWRdLCBNX0dJQ19WMyk7CisJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAi
Tm8gUmUtRGlzdHJpYnV0b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJcmV0dXJuIChF
TlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3Rfd2FrZShzdHJ1Y3QgZ2ljX3Yz
X3NvZnRjICpzYykKK3sKKwl1aW50MzJfdCB3YWtlcjsKKwlzaXplX3QgdXNfbGVmdCA9IDEwMDAw
MDA7CisKKwl3YWtlciA9IGdpY19yX3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpOworCS8qIFdha2Ug
dXAgUmUtRGlzdHJpYnV0b3IgZm9yIHRoaXMgQ1BVICovCisJd2FrZXIgJj0gfkdJQ1JfV0FLRVJf
UFM7CisJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfV0FLRVIsIHdha2VyKTsKKwkvKgorCSAqIFdo
ZW4gY2xlYXJpbmcgUHJvY2Vzc29yU2xlZXAgYml0IGl0IGlzIHJlcXVpcmVkIHRvIHdhaXQgZm9y
CisJICogQ2hpbGRyZW5Bc2xlZXAgdG8gYmVjb21lIHplcm8gZm9sbG93aW5nIHRoZSBwcm9jZXNz
b3IgcG93ZXItb24uCisJICovCisJd2hpbGUgKChnaWNfcl9yZWFkKHNjLCA0LCBHSUNSX1dBS0VS
KSAmIEdJQ1JfV0FLRVJfQ0EpICE9IDApIHsKKwkJREVMQVkoMSk7CisJCWlmICh1c19sZWZ0LS0g
PT0gMCkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJDb3VsZCBub3Qgd2Fr
ZSBSZS1EaXN0cmlidXRvciBmb3IgQ1BVJXUiLAorCQkJICAgIFBDUFVfR0VUKGNwdWlkKSk7CisJ
CQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWlmIChib290dmVyYm9zZSAhPSAwKSB7CisJ
CWRldmljZV9wcmludGYoc2MtPmRldiwgIkNQVSV1IFJlLURpc3RyaWJ1dG9yIHdva2UgdXBcbiIs
CisJCSAgICBQQ1BVX0dFVChjcHVpZCkpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBpbnQKK2dpY192M19yZWRpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwlp
bnQgZXJyOworCXNpemVfdCBpOworCisJZXJyID0gZ2ljX3YzX3JlZGlzdF9maW5kKHNjKTsKKwlp
ZiAoZXJyICE9IDApCisJCXJldHVybiAoZXJyKTsKKworCWVyciA9IGdpY192M19yZWRpc3Rfd2Fr
ZShzYyk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gKGVycik7CisKKwkvKiBEaXNhYmxlIFNQ
SXMgKi8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9JQ0VO
QUJMRVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9QUElfTUFTSyk7CisJLyogRW5hYmxlIFNHSXMg
Ki8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9JU0VOQUJM
RVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9TR0lfTUFTSyk7CisKKwkvKiBTZXQgcHJpb3JpdHkg
Zm9yIFNHSXMgYW5kIFBQSXMgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IEdJQ19MQVNUX1BQSTsgaSAr
PSBHSUNSX0lfUEVSX0lQUklPUklUWW4pIHsKKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfU0dJ
X0JBU0VfU0laRSArIEdJQ0RfSVBSSU9SSVRZUihpKSwKKwkJICAgIEdJQ19QUklPUklUWV9NQVgp
OworCX0KKworCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIFJFRElTVCk7CisKKwlyZXR1cm4gKDAp
OworfQoK


--b1_4fd2e56b800518810b82d7f619324eee--



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