Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Apr 2015 13:48:22 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Request, 1, 025 lines] D2377: Introduce ARM GICv3 support
Message-ID:  <differential-rev-PHID-DREV-piql4a7htwxjub743777-req@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--b1_233c72621ad544eae2ed39aa47890a4a
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb created this revision.
zbb added reviewers: emaste, ian, imp, andrew.
zbb added a subscriber: freebsd-arm.
zbb set the repository for this revision to rS FreeBSD src repository.
Herald added subscribers: imp, andrew, emaste.
Herald added a reviewer: manpages.

REVISION SUMMARY
  Support for GICv3 interrupt controller used by some ARM64 based chips.
  
  Obtained from: Semihalf
  Sponsored by:  The FreeBSD Foundation

REPOSITORY
  rS FreeBSD src repository

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

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, emaste, ian, imp, andrew, brueffer, joel, wblock
Cc: emaste, andrew, imp, freebsd-arm

--b1_233c72621ad544eae2ed39aa47890a4a
Content-Type: text/x-patch; charset=utf-8; name="D2377.5024.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2377.5024.patch"

ZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUyBiL3N5cy9hcm02NC9hcm02NC9s
b2NvcmUuUwotLS0gYS9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMKKysrIGIvc3lzL2FybTY0L2Fy
bTY0L2xvY29yZS5TCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bWFjaGluZS9wYXJhbS5o
PgogI2luY2x1ZGUgPG1hY2hpbmUvcHRlLmg+CiAKKyNpbmNsdWRlICJnaWNfdjNfcmVnLmgiCisK
ICNkZWZpbmUJVklSVF9CSVRTCTM5CiAKIAkuZ2xvYmwJa2VybmJhc2UKQEAgLTE4Nyw2ICsxODks
MTggQEAKIAltb3YJeDIsICMoUFNSX0YgfCBQU1JfSSB8IFBTUl9BIHwgUFNSX0QgfCBQU1JfTV9F
TDFoKQogCW1zcglzcHNyX2VsMiwgeDIKIAorCS8qIENvbmZpZ3VyZSBHSUN2MyBDUFUgaW50ZXJm
YWNlICovCisJbXJzCXgyLCBpZF9hYTY0cGZyMF9lbDEKKwl1YmZ4CXgyLCB4MiwgIzI0LCAjNAkJ
LyogR0lDIGZpZWxkICovCisJY21wCXgyLCAjMHgxCQkvKiAwMDAxIC0gU1IgQ1BVIElGIHN1cHBv
cnRlZCAqLworCWIubmUJMmYKKworCW1ycwl4MiwgaWNjX3NyZV9lbDIKKwlvcnIJeDIsIHgyLCAj
SUNDX1NSRV9FTDJfRU4JLyogRW5hYmxlIGFjY2VzcyBmcm9tIGluc2VjdXJlIEVMMSAqLworCW1z
cglpY2Nfc3JlX2VsMiwgeDIKKwlpc2IKKzI6CisKIAkvKiBTZXQgdGhlIGFkZHJlc3MgdG8gcmV0
dXJuIHRvIG91ciByZXR1cm4gYWRkcmVzcyAqLwogCW1zcgllbHJfZWwyLCB4MzAKIApkaWZmIC0t
Z2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaCBiL3N5cy9hcm02NC9hcm02NC9naWNf
djNfdmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJt
NjQvYXJtNjQvZ2ljX3YzX3Zhci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgor
ICogdGhlIHNwb25zb3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IF9HSUNfVjNfVkFSX0hfCisjZGVmaW5lIF9HSUNfVjNfVkFSX0hfCisKKyNkZWZpbmUJR0lDX1Yz
X0RFVlNUUgkiQVJNIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgdjMuMCIKKworc3RydWN0
IGdpY19yZWRpc3RzIHsKKwkvKgorCSAqIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbiBkZXNjcmlwdGlv
bi4KKwkgKiBXZSB3aWxsIGhhdmUgZmV3IG9mIHRob3NlIGRlcGVuZGluZworCSAqIG9uIHRoZSAj
cmVkaXN0cmlidXRvci1yZWdpb25zIHByb3BlcnR5IGluIEZEVC4KKwkgKi8KKwlzdHJ1Y3QgcmVz
b3VyY2UgKioJcmVnaW9uczsKKwkvKiBOdW1iZXIgb2YgUmUtRGlzdHJpYnV0b3IgcmVnaW9ucyAq
LworCXVfaW50CQkJbnJlZ2lvbnM7CisJLyogUGVyLUNQVSBSZS1EaXN0cmlidXRvciBoYW5kbGVy
ICovCisJc3RydWN0IHJlc291cmNlCSoJcGNwdVtNQVhDUFVdOworfTsKKworc3RydWN0IGdpY192
M19zb2Z0YyB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJKioJZ2ljX3JlczsK
KwlzdHJ1Y3QgbXR4CQlnaWNfbXR4OworCS8qIERpc3RyaWJ1dG9yICovCisJc3RydWN0IHJlc291
cmNlICoJZ2ljX2Rpc3Q7CisJLyogUmUtRGlzdHJpYnV0b3JzICovCisJc3RydWN0IGdpY19yZWRp
c3RzCWdpY19yZWRpc3RzOworCisJdV9pbnQJCQlnaWNfbmlycXM7CisJdV9pbnQJCQlnaWNfaWRi
aXRzOworfTsKKworZXh0ZXJuIGRldmNsYXNzX3QgZ2ljX3YzX2RldmNsYXNzOworCitNQUxMT0Nf
REVDTEFSRShNX0dJQ19WMyk7CisKKy8qIERldmljZSBhbmQgUElDIG1ldGhvZHMgKi8KK2ludCBn
aWNfdjNfYXR0YWNoKGRldmljZV90IGRldik7CitpbnQgZ2ljX3YzX2RldGFjaChkZXZpY2VfdCBk
ZXYpOworCit2b2lkIGdpY192M19kaXNwYXRjaChkZXZpY2VfdCwgc3RydWN0IHRyYXBmcmFtZSAq
KTsKK3ZvaWQgZ2ljX3YzX2VvaShkZXZpY2VfdCwgdV9pbnQpOwordm9pZCBnaWNfdjNfbWFza19p
cnEoZGV2aWNlX3QsIHVfaW50KTsKK3ZvaWQgZ2ljX3YzX3VubWFza19pcnEoZGV2aWNlX3QsIHVf
aW50KTsKKworLyoKKyAqIEdJQyBEaXN0cmlidXRvciBhY2Nlc3NvcnMuCisgKiBOb3RpY2UgdGhh
dCBvbmx5IEdJQyBzb2ZjIGNhbiBiZSBwYXNzZWQuCisgKi8KKyNkZWZpbmUJZ2ljX2RfcmVhZChz
YywgbGVuLCByZWcpCQlcCisoewkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbihzYy0+Z2ljX2Rpc3Qs
IHJlZyk7CVwKK30pCisKKyNkZWZpbmUJZ2ljX2Rfd3JpdGUoc2MsIGxlbiwgcmVnLCB2YWwpCQlc
CisoewkJCQkJCVwKKwlidXNfd3JpdGVfIyNsZW4oc2MtPmdpY19kaXN0LCByZWcsIHZhbCk7XAor
fSkKKworLyogR0lDIFJlLURpc3RyaWJ1dG9yIGFjY2Vzc29ycyAocGVyLUNQVSkgKi8KKyNkZWZp
bmUJZ2ljX3JfcmVhZChzYywgbGVuLCByZWcpCQlcCisoewkJCQkJCVwKKwl1X2ludCBjcHUgPSBQ
Q1BVX0dFVChjcHVpZCk7CQlcCisJCQkJCQlcCisJYnVzX3JlYWRfIyNsZW4oCQkJCVwKKwkgICAg
c2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1XSwJCVwKKwkgICAgcmVnKTsJCQkJXAorfSkKKworI2Rl
ZmluZQlnaWNfcl93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJCVwKKyh7CQkJCQkJXAorCXVfaW50
IGNwdSA9IFBDUFVfR0VUKGNwdWlkKTsJCVwKKwkJCQkJCVwKKwlidXNfd3JpdGVfIyNsZW4oCQkJ
XAorCSAgICBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVdLAkJXAorCSAgICByZWcsIHZhbCk7CQkJ
CVwKK30pCisKKyNlbmRpZiAvKiBfR0lDX1YzX1ZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL2Fy
bTY0L2FybTY0L2dpY192M19yZWcuaCBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2lj
X3YzX3JlZy5oCkBAIC0wLDAgKzEsMTcwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBU
aGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25z
b3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9HSUNfVjNfUkVH
X0hfCisjZGVmaW5lIF9HSUNfVjNfUkVHX0hfCisKKy8qCisgKiBQcmlvcml0eSBNQVgvTUlOIHZh
bHVlcworICovCisjZGVmaW5lCUdJQ19QUklPUklUWV9NQVgJMHgwMFVMCisvKiBVcHBlciB2YWx1
ZSBpcyBkZXRlcm1pbmVkIGJ5IExQSSBtYXggcHJpb3JpdHkgKi8KKyNkZWZpbmUJR0lDX1BSSU9S
SVRZX01JTgkweEZDVUwKKworLyogTnVtYmVycyBmb3Igc29mdHdhcmUgZ2VuZXJhdGVkIGludGVy
cnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1NHSQkJKDApCisjZGVmaW5lCUdJQ19MQVNUX1NH
SQkJKDE1KQorLyogTnVtYmVycyBmb3IgcHJpdmF0ZSBwZXJpcGhlcmFsIGludGVycnVwdHMgKi8K
KyNkZWZpbmUJR0lDX0ZJUlNUX1BQSQkJKDE2KQorI2RlZmluZQlHSUNfTEFTVF9QUEkJCSgzMSkK
Ky8qIE51bWJlcnMgZm9yIHNwYXJlZCBwZXJpcGhlcmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJ
R0lDX0ZJUlNUX1NQSQkJKDMyKQorI2RlZmluZQlHSUNfTEFTVF9TUEkJCSgxMDE5KQorLyogTnVt
YmVycyBmb3IgbG9jYWwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUdJQ19GSVJT
VF9MUEkJCSg4MTkyKQorCisvKgorICogUmVnaXN0ZXJzICh2Mi92MykKKyAqLworI2RlZmluZQlH
SUNEX0NUTFIJCTB4MDAwMAorI2RlZmluZQlHSUNEX0NUTFJfRzEJCSgxIDw8IDApCisjZGVmaW5l
CUdJQ0RfQ1RMUl9HMUEJCSgxIDw8IDEpCisjZGVmaW5lCUdJQ0RfQ1RMUl9BUkVfTlMJKDEgPDwg
NCkKKyNkZWZpbmUJR0lDRF9DVExSX1JXUAkJKDEgPDwgMzEpCisKKyNkZWZpbmUJR0lDRF9UWVBF
UgkJKDB4MDAwNCkKKyNkZWZpbmUJCUdJQ0RfVFlQRVJfSURCSVRTKHgpCSgoKCh4KSA+PiAxOSkg
JiAweDFGKSArIDEpCisKKyNkZWZpbmUJR0lDRF9JU0VOQUJMRVIobikJKDB4MDEwMCArICgobikg
KiA0KSkKKyNkZWZpbmUJR0lDRF9JQ0VOQUJMRVIobikJKDB4MDE4MCArICgobikgKiA0KSkKKyNk
ZWZpbmUJR0lDRF9JUFJJT1JJVFlSKG4pCSgweDA0MDAgKyAoKG4pICogNCkpCisKKyNkZWZpbmUJ
R0lDRF9JQ0ZHUihuKQkJKDB4MEMwMCArICgobikgKiA0KSkKKy8qIEZpcnN0IGJpdCBpcyBhIHBv
bGFyaXR5IGJpdCAoMCAtIGxvdywgMSAtIGhpZ2gpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1BP
TF9MT1cJKDAgPDwgMCkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0hJR0gJKDEgPDwgMCkKKyNk
ZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX01BU0sJMHgxCisvKiBTZWNvbmQgYml0IGlzIGEgdHJpZ2dl
ciBiaXQgKDAgLSBsZXZlbCwgMSAtIGVkZ2UpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdf
TFZMCSgwIDw8IDEpCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQorI2Rl
ZmluZQkJR0lDRF9JQ0ZHUl9UUklHX01BU0sJMHgyCisKKy8qCisgKiBSZWdpc3RlcnMgKHYzKQor
ICovCisjZGVmaW5lCUdJQ0RfSVJPVVRFUihuKQkJKDB4NjAwMCArICgobikgKiA4KSkKKyNkZWZp
bmUJR0lDRF9QSURSMgkJKDB4RkZFOCkKKworI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfTUFTSwko
MHhGMCkKKyNkZWZpbmUJR0lDUl9QSURSMl9BUkNIX0dJQ3YzCSgweDMwKQorI2RlZmluZQlHSUNS
X1BJRFIyX0FSQ0hfR0lDdjQJKDB4NDApCisKKy8qIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzICov
CisjZGVmaW5lCUdJQ1JfUElEUjIJCUdJQ0RfUElEUjIKKworI2RlZmluZQlHSUNSX1RZUEVSCQko
MHgwMDA4KQorI2RlZmluZQlHSUNSX1RZUEVSX1ZMUElTCSgxIDw8IDEpCisjZGVmaW5lCUdJQ1Jf
VFlQRVJfTEFTVAkJKDEgPDwgNCkKKworI2RlZmluZQlHSUNSX1dBS0VSCQkoMHgwMDE0KQorI2Rl
ZmluZQlHSUNSX1dBS0VSX1BTCQkoMSA8PCAxKSAvKiBQcm9jZXNzb3Igc2xlZXAgKi8KKyNkZWZp
bmUJR0lDUl9XQUtFUl9DQQkJKDEgPDwgMikgLyogQ2hpbGRyZW4gYXNsZWVwICovCisKKy8qIFJl
LWRpc3RyaWJ1dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLworI2RlZmluZQlHSUNS
X0lTRU5BQkxFUjAJCSgweDAxMDApCisjZGVmaW5lCUdJQ1JfSUNFTkFCTEVSMAkJKDB4MDE4MCkK
KworLyoKKyAqIENQVSBpbnRlcmZhY2UKKyAqLworCisvKiBFTDIgKi8KKyNkZWZpbmUJSUNDX1NS
RV9FTDJfRU4JCSgxVSA8PCAzKQorLyogRUwxICovCisjZGVmaW5lCUlDQ19TUkVfRUwxX1NSRQkJ
KDFVIDw8IDApCisjZGVmaW5lCUlDQ19DVExSX0VMMV9FT0kJKDFVIDw8IDEpCisjZGVmaW5lCUlD
Q19JR1JQRU4wX0VMMV9FTgkoMVUgPDwgMCkKKworI2RlZmluZQlJQ0NfSUFSMV9FTDFfU1BVUgko
MHgwM2ZmKQorCisvKgorICogUmVnaXN0ZXJzIGxpc3QgKElDQ194eXpfRUwxKToKKyAqCisgKiBQ
TVIgICAgIC0gUHJpb3JpdHkgTWFzayBSZWdpc3RlcgorICoJCSogaW50ZXJydXB0cyBvZiBwcmlv
cml0eSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQKKyAqCQkgIGluIHRoaXMgbWFzayB3aWxsIGJlIHNp
Z25hbGxlZCB0byB0aGUgQ1BVLgorICoJCSAgKDB4ZmYgLSBsb3dlc3QgcG9zc2libGUgcHJpby4s
IDB4MDAgLSBoaWdoZXN0IHByaW8uKQorICoKKyAqIENUTFIgICAgLSBDb250cm9sIFJlZ2lzdGVy
CisgKgkJKiBjb250cm9scyBiZWhhdmlvciBvZiB0aGUgQ1BVIGludGVyZmFjZSBhbmQgZGlzcGxh
eXMKKyAqCQkgIGltcGxlbWVudGVkIGZlYXR1cmVzLgorICoKKyAqIElHUlBFTjEgLSBJbnRlcnJ1
cHQgR3JvdXAgMSBFbmFibGUgUmVnaXN0ZXIKKyAqCisgKiBJQVIxICAgIC0gSW50ZXJydXB0IEFj
a25vd2xlZGdlIFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIGNvbnRhaW5zIG51bWJlciBvZiB0aGUg
aGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nCisgKgkJICBpbnRlcnJ1cHQgZnJvbSB0aGUgR3JvdXAg
MS4KKyAqCisgKiBFT0lSMSAgIC0gRW5kIG9mIEludGVycnVwdCBSZWdpc3RlciBHcm91cCAxCisg
KgkJKiBXcml0ZXMgaW5mb3JtIENQVSBpbnRlcmZhY2UgYWJvdXQgY29tcGxldGVkIEdyb3VwIDEK
KyAqCQkgIGludGVycnVwdHMgcHJvY2Vzc2luZy4KKyAqLworCisjZGVmaW5lCWdpY19pY2Nfd3Jp
dGUocmVnLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZSgJCQkJ
CVwKKwkgICAgIm1zciBJQ0NfIl9fU1RSSU5HKHJlZykiX0VMMSwgJTAJXG4iCQlcCisJICAgICJp
c2IiIDogOiAiciIgKCh2YWwpKSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJZ2ljX2lj
Y19yZWFkKHJlZykJCQkJCVwKKyh7CQkJCQkJCQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwlf
X2FzbSBfX3ZvbGF0aWxlKAkJCQkJXAorCSAgICAibXJzICUwLCBJQ0NfIl9fU1RSSU5HKHJlZyki
X0VMMSIgOiAiPXIiICh2YWwpKTsJXAorCSh2YWwpOwkJCQkJCQlcCit9KQorCisjZGVmaW5lCWdp
Y19pY2Nfc2V0KHJlZywgbWFzaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7
CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlcCisJdmFsIHw9IChtYXNrKTsJ
CQkJCQlcCisJZ2ljX2ljY193cml0ZShyZWcsIHZhbCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNk
ZWZpbmUJZ2ljX2ljY19jbGVhcihyZWcsIG1hc2spCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1aW50
NjRfdCB2YWw7CQkJCQkJXAorCXZhbCA9IGdpY19pY2NfcmVhZChyZWcpOwkJCQlcCisJdmFsICY9
IH4obWFzayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxl
ICgwKQorCisjZW5kaWYgLyogX0dJQ19WM19SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9hcm02
NC9hcm02NC9naWNfdjNfZmR0LmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192
M19mZHQuYwpAQCAtMCwwICsxLDE1NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhl
IEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29y
c2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5j
bHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9r
ZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgor
I2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNsdWRlIDxz
eXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5o
PgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29tbW9u
Lmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3
X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRlICJw
aWNfaWYuaCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFy
LmgiCisKKy8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RydWN0IGdpY192M19vZndfZGV2aW5mbyB7
CisJc3RydWN0IG9md19idXNfZGV2aW5mbwlkaV9kaW5mbzsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlz
dAlkaV9ybDsKK307CisKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9wcm9iZShkZXZpY2VfdCk7Citz
dGF0aWMgaW50IGdpY192M19mZHRfYXR0YWNoKGRldmljZV90KTsKK3N0YXRpYyBpbnQgZ2ljX3Yz
X2ZkdF9kZXRhY2goZGV2aWNlX3QpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9md19idXNfZGV2
aW5mbyAqCitnaWNfdjNfb2Z3X2dldF9kZXZpbmZvKGRldmljZV90IF9fdW51c2VkLCBkZXZpY2Vf
dCk7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX21ldGhvZHNbXSA9IHsKKwkvKiBE
ZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWdpY192M19mZHRf
cHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlnaWNfdjNfZmR0X2F0dGFjaCksCisJ
REVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWdpY192M19mZHRfZGV0YWNoKSwKKworCS8qIFBJQyBp
bnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc3BhdGNoLAkJZ2ljX3YzX2Rpc3BhdGNoKSwK
KwlERVZNRVRIT0QocGljX2VvaSwJCWdpY192M19lb2kpLAorCURFVk1FVEhPRChwaWNfbWFzaywJ
CWdpY192M19tYXNrX2lycSksCisJREVWTUVUSE9EKHBpY191bm1hc2ssCQlnaWNfdjNfdW5tYXNr
X2lycSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJpdmVy
X3QgZ2ljX3YzX2RyaXZlciA9IHsKKwkiZ2ljIiwKKwlnaWNfdjNfbWV0aG9kcywKKwlzaXplb2Yo
c3RydWN0IGdpY192M19zb2Z0YyksCit9OworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywg
c2ltcGxlYnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZGV2Y2xhc3MsIDAsIDAsCisgICAgQlVT
X1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKK0VBUkxZX0RSSVZFUl9N
T0RVTEUoZ2ljX3YzLCBvZndidXMsIGdpY192M19kcml2ZXIsIGdpY192M19kZXZjbGFzcywgMCwg
MCwKKyAgICBCVVNfUEFTU19JTlRFUlJVUFQgKyBCVVNfUEFTU19PUkRFUl9NSURETEUpOworCisv
KgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworc3RhdGljIGludAorZ2ljX3YzX2ZkdF9wcm9i
ZShkZXZpY2VfdCBkZXYpCit7CisKKwlpZiAoIW9md19idXNfc3RhdHVzX29rYXkoZGV2KSkKKwkJ
cmV0dXJuIChFTlhJTyk7CisKKwlpZiAoIW9md19idXNfaXNfY29tcGF0aWJsZShkZXYsICJhcm0s
Z2ljLXYzIikpCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgR0lD
X1YzX0RFVlNUUik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBp
bnQKK2dpY192M19mZHRfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3Nv
ZnRjICpzYzsKKwlwY2VsbF90IHJlZGlzdF9yZWdpb25zOworCWludCBlcnI7CisKKwlzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJLyoKKwkgKiBSZWNvdmVy
IG51bWJlciBvZiB0aGUgUmUtRGlzdHJpYnV0b3IgcmVnaW9ucy4KKwkgKi8KKwlpZiAoT0ZfZ2V0
ZW5jcHJvcChvZndfYnVzX2dldF9ub2RlKGRldiksICIjcmVkaXN0cmlidXRvci1yZWdpb25zIiwK
KwkgICAgJnJlZGlzdF9yZWdpb25zLCBzaXplb2YocmVkaXN0X3JlZ2lvbnMpKSA8PSAwKQorCQlz
Yy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgPSAxOworCWVsc2UKKwkJc2MtPmdpY19yZWRpc3RzLm5y
ZWdpb25zID0gcmVkaXN0X3JlZ2lvbnM7CisKKwllcnIgPSBnaWNfdjNfYXR0YWNoKGRldik7CisJ
aWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAoZXJyKTsKKworZXJyb3I6CisJaWYg
KGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LAorCQkgICAgIkZhaWxlZCB0byBh
dHRhY2guIEVycm9yICVkXG4iLCBlcnIpOworCX0KKwkvKiBGYWlsdXJlIHNvIGZyZWUgcmVzb3Vy
Y2VzICovCisJZ2ljX3YzX2ZkdF9kZXRhY2goZGV2KTsKKworCXJldHVybiAoZXJyKTsKK30KKwor
c3RhdGljIGludAorZ2ljX3YzX2ZkdF9kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCisJcmV0dXJu
IChnaWNfdjNfZGV0YWNoKGRldikpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dp
Y192My5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5jCkBAIC0wLDAgKzEsNTc4
IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3Bl
ZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZv
dW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Qk
Iik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNp
bmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5
cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5o
PgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNsdWRl
IDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvbG9j
ay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNs
dWRlIDx2bS9wbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1h
Y2hpbmUvaW50ci5oPgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNpbmNsdWRlICJnaWNfdjNf
cmVnLmgiCisjaW5jbHVkZSAiZ2ljX3YzX3Zhci5oIgorCisvKgorICogRHJpdmVyLXNwZWNpZmlj
IGRlZmluaXRpb25zLgorICovCitNQUxMT0NfREVGSU5FKE1fR0lDX1YzLCAiR0lDdjMiLCBHSUNf
VjNfREVWU1RSKTsKKworZGV2Y2xhc3NfdCBnaWNfdjNfZGV2Y2xhc3M7CisKKy8qCisgKiBIZWxw
ZXIgZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucy4KKyAqLworLyogRGVzdGluYXRpb24gcmVnaXN0
ZXJzLCBlaXRoZXIgRGlzdHJpYnV0b3Igb3IgUmUtRGlzdHJpYnV0b3IgKi8KK2VudW0gZ2ljX3Yz
X3hkaXN0IHsKKwlESVNUID0gMCwKKwlSRURJU1QsCit9OworCisvKiBIZWxwZXIgcm91dGluZXMg
c3RhcnRpbmcgd2l0aCBnaWNfdjNfICovCitzdGF0aWMgaW50IGdpY192M19kaXN0X2luaXQoc3Ry
dWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgZ2ljX3YzX3JlZGlzdF9maW5kKHN0cnVj
dCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgaW50IGdpY192M19yZWRpc3RfaW5pdChzdHJ1Y3Qg
Z2ljX3YzX3NvZnRjICopOworc3RhdGljIGludCBnaWNfdjNfY3B1X2luaXQoc3RydWN0IGdpY192
M19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGdpY192M193YWl0X2Zvcl9yd3Aoc3RydWN0IGdpY192
M19zb2Z0YyAqLCBlbnVtIGdpY192M194ZGlzdCk7CisKKy8qIEEgc2VxdWVuY2Ugb2YgaW5pdCBm
dW5jdGlvbnMgZm9yIHByaW1hcnkgKGJvb3QpIGFuZCBzZWNvbmRhcnkgQ1BVcyAqLwordHlwZWRl
ZiBpbnQgKCpnaWNfdjNfaW5pdHNlcV90KSAoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKKy8qIFBy
aW1hcnkgQ1BVIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCitzdGF0aWMgZ2ljX3YzX2luaXRz
ZXFfdCBnaWNfdjNfcHJpbWFyeV9pbml0W10gPSB7CisJZ2ljX3YzX2Rpc3RfaW5pdCwKKwlnaWNf
djNfcmVkaXN0X2luaXQsCisJZ2ljX3YzX2NwdV9pbml0LAorCU5VTEwKK307CisvKiBTZWNvbmRh
cnkgQ1BVIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCitzdGF0aWMgZ2ljX3YzX2luaXRzZXFf
dCBnaWNfdjNfc2Vjb25kYXJ5X2luaXRbXSBfX3VudXNlZCA9IHsKKwlOVUxMCit9OworCisvKgor
ICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworaW50CitnaWNfdjNfYXR0YWNoKGRldmljZV90IGRl
dikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlnaWNfdjNfaW5pdHNlcV90ICppbml0
X2Z1bmM7CisJdWludDMyX3QgdHlwZXI7CisJaW50IHJpZDsKKwlpbnQgZXJyOworCXNpemVfdCBp
OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmRldiA9IGRldjsKKwllcnIg
PSAwOworCisJLyogSW5pdGlhbGl6ZSBtdXRleCAqLworCW10eF9pbml0KCZzYy0+Z2ljX210eCwg
IkdJQ3YzIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFycmF5
IG9mIHN0cnVjdCByZXNvdXJjZS4KKwkgKiBPbmUgZW50cnkgZm9yIERpc3RyaWJ1dG9yIGFuZCBh
bGwgcmVtYWluaW5nIGZvciBSZS1EaXN0cmlidXRvci4KKwkgKi8KKwlzYy0+Z2ljX3JlcyA9IG1h
bGxvYygKKwkgICAgc2l6ZW9mKHNjLT5naWNfcmVzKSAqIChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lv
bnMgKyAxKSwKKwkgICAgTV9HSUNfVjMsIE1fV0FJVE9LKTsKKworCS8qIE5vdyBhbGxvY2F0ZSBj
b3JyZXNwb25kaW5nIHJlc291cmNlcyAqLworCWZvciAoaSA9IDAsIHJpZCA9IDA7IGkgPCAoc2Mt
PmdpY19yZWRpc3RzLm5yZWdpb25zICsgMSk7IGkrKywgcmlkKyspIHsKKwkJc2MtPmdpY19yZXNb
cmlkXSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX01FTU9SWSwKKwkJICAg
ICZyaWQsIFJGX0FDVElWRSk7CisJCWlmIChzYy0+Z2ljX3Jlc1tyaWRdID09IE5VTEwpIHsKKwkJ
CWVyciA9IEVOWElPOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCS8qCisJICogRGlzdHJp
YnV0b3IgaW50ZXJmYWNlCisJICovCisJc2MtPmdpY19kaXN0ID0gc2MtPmdpY19yZXNbMF07CisK
KwkvKgorCSAqIFJlLURyaXN0cmlidXRvciBpbnRlcmZhY2UKKwkgKi8KKwkvKiBBbGxvY2F0ZSBz
cGFjZSB1bmRlciByZWdpb24gZGVzY3JpcHRpb25zICovCisJc2MtPmdpY19yZWRpc3RzLnJlZ2lv
bnMgPSBtYWxsb2MoCisJICAgIHNpemVvZigqc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMpICogc2Mt
PmdpY19yZWRpc3RzLm5yZWdpb25zLAorCSAgICBNX0dJQ19WMywgTV9XQUlUT0spOworCisJLyog
RmlsbC11cCBidXNfc3BhY2UgaW5mb3JtYXRpb24gZm9yIGVhY2ggcmVnaW9uLiAqLworCWZvciAo
aSA9IDAsIHJpZCA9IDE7IGkgPCBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnM7IGkrKywgcmlkKysp
CisJCXNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ldID0gc2MtPmdpY19yZXNbcmlkXTsKKworCS8q
IEdldCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBTUEkgaW50ZXJydXB0cyAqLworCXR5cGVyID0g
Z2ljX2RfcmVhZChzYywgNCwgR0lDRF9UWVBFUik7CisJc2MtPmdpY19uaXJxcyA9IHR5cGVyICYg
MHgxRjsKKwlzYy0+Z2ljX25pcnFzID0gKHNjLT5naWNfbmlycXMgKyAxKSAqIDMyOworCWlmIChz
Yy0+Z2ljX25pcnFzID4gMTAyMCkKKwkJc2MtPmdpY19uaXJxcyA9IDEwMjA7CisKKwkvKiBHZXQg
dGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaW50ZXJydXB0IGlkZW50aWZpZXIgYml0cyAqLworCXNj
LT5naWNfaWRiaXRzID0gR0lDRF9UWVBFUl9JREJJVFModHlwZXIpOworCisJaWYgKGJvb3R2ZXJi
b3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiU1BJczogJXUsIElEczogJXVcbiIsCisJCSAg
ICBzYy0+Z2ljX25pcnFzLCAoMSA8PCBzYy0+Z2ljX2lkYml0cykgLSAxKTsKKwl9CisKKwkvKiBU
cmFpbiBpbml0IHNlcXVlbmNlIGZvciBib290IENQVSAqLworCWZvciAoaW5pdF9mdW5jID0gZ2lj
X3YzX3ByaW1hcnlfaW5pdDsgKmluaXRfZnVuYyAhPSBOVUxMOyBpbml0X2Z1bmMrKykgeworCQll
cnIgPSAoKmluaXRfZnVuYykoc2MpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwl9CisJ
LyoKKwkgKiBGdWxsIHN1Y2Nlc3MuCisJICogTm93IHJlZ2lzdGVyIFBJQyB0byB0aGUgaW50ZXJy
dXB0cyBoYW5kbGluZyBsYXllci4KKwkgKi8KKwlhcm1fcmVnaXN0ZXJfcm9vdF9waWMoZGV2LCBz
Yy0+Z2ljX25pcnFzKTsKKworZXJyb3I6CisJcmV0dXJuIChlcnIpOworfQorCitpbnQKK2dpY192
M19kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBnaWNfdjNfc29mdGMgKnNjOworCXNp
emVfdCBpOworCWludCByaWQ7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCWlm
IChkZXZpY2VfaXNfYXR0YWNoZWQoZGV2KSkgeworCQkvKgorCQkgKiBYWFg6IFdlIHNob3VsZCBw
cm9iYWJseSBkZXJlZ2lzdGVyIFBJQworCQkgKi8KKwl9CisJZm9yIChpID0gMCwgcmlkID0gMDsg
aSA8IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKTsgaSsrLCByaWQrKykKKwkJYnVzX3Jl
bGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgcmlkLCBzYy0+Z2ljX3Jlc1tyaWRd
KTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykKKwkJZnJlZShzYy0+Z2ljX3JlZGlz
dHMucGNwdVtpXSwgTV9HSUNfVjMpOworCisJZnJlZShzYy0+Z2ljX3JlcywgTV9HSUNfVjMpOwor
CWZyZWUoc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMsIE1fR0lDX1YzKTsKKworCXJldHVybiAoMCk7
Cit9CisKKy8qCisgKiBQSUMgaW50ZXJmYWNlLgorICovCit2b2lkCitnaWNfdjNfZGlzcGF0Y2go
ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgdHJhcGZyYW1lICpmcmFtZSkKK3sKKwl1aW50NjRfdCBhY3Rp
dmVfaXJxOworCisJd2hpbGUgKDEpIHsKKwkJYWN0aXZlX2lycSA9IGdpY19pY2NfcmVhZChJQVIx
KTsKKworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKGFjdGl2ZV9pcnEgPT0gSUNDX0lBUjFfRUwxX1NQ
VVIpKQorCQkJYnJlYWs7CisKKwkJaWYgKF9fcHJlZGljdF90cnVlKChhY3RpdmVfaXJxID49IEdJ
Q19GSVJTVF9QUEkgJiYKKwkJICAgIGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU1BJKSkpIHsKKwkJ
CWFybV9kaXNwYXRjaF9pbnRyKGFjdGl2ZV9pcnEsIGZyYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9
CisKKwkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU0dJIHx8IGFjdGl2ZV9pcnEgPj0gR0lD
X0ZJUlNUX0xQSSkgeworCQkJLyoKKwkJCSAqIFRPRE86IEltcGxlbWVudCBwcm9wZXIgU0dJL0xQ
SSBoYW5kbGluZy4KKwkJCSAqICAgICAgIE1hc2sgaXQgaWYgc3VjaCBpcyByZWNlaXZlZCBmb3Ig
c29tZSByZWFzb24uCisJCQkgKi8KKwkJCWRldmljZV9wcmludGYoZGV2LAorCQkJICAgICJSZWNl
aXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgdHlwZTogJXNcbiIsCisJCQkgICAgc2N0aXZlX2ly
cSA+PSBHSUNfRklSU1RfTFBJID8gIkxQSSIgOiAiU0dJIik7CisJCQlQSUNfTUFTSyhkZXYsIGFj
dGl2ZV9pcnEpOworCQl9CisJfQorfQorCit2b2lkCitnaWNfdjNfZW9pKGRldmljZV90IGRldiwg
dV9pbnQgaXJxKQoreworCisJZ2ljX2ljY193cml0ZShFT0lSMSwgKHVpbnQ2NF90KWlycSk7Cit9
CisKK3ZvaWQKK2dpY192M19tYXNrX2lycShkZXZpY2VfdCBkZXYsIHVfaW50IGlycSkKK3sKKwlz
dHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwl1aW50MzJfdCBtYXNrOworCisJc2MgPSBkZXZpY2Vf
Z2V0X3NvZnRjKGRldik7CisKKwltYXNrID0gKDEgPDwgKGlycSAlIDMyKSk7CisKKwlpZiAoaXJx
ID49IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQUElzIGluIGNv
cnJlc3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsCisJCSAg
ICBQQUdFX1NJWkVfNjRLICsgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCBtYXNrKTsKKwkJZ2lj
X3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+PSBHSUNfRklS
U1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJcyBpbiBkaXN0cmlidXRvciAq
LworCQlnaWNfcl93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCBtYXNrKTsK
KwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlIHsKKwkJS0FTU0VSVCgw
LCAoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSkpOworCX0K
KworfQorCit2b2lkCitnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCBkZXYsIHVfaW50IGlycSkK
K3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwl1aW50MzJfdCBtYXNrOworCisJc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwltYXNrID0gKDEgPDwgKGlycSAlIDMyKSk7CisKKwlp
ZiAoaXJxID49IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQUElz
IGluIGNvcnJlc3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQs
CisJCSAgICBQQUdFX1NJWkVfNjRLICsgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCBtYXNrKTsK
KwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+PSBH
SUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJcyBpbiBkaXN0cmli
dXRvciAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCBt
YXNrKTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlIHsKKwkJS0FT
U0VSVCgwLCAoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSkp
OworCX0KK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lcworICovCitzdGF0aWMgdm9pZAorZ2lj
X3YzX3dhaXRfZm9yX3J3cChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYywgZW51bSBnaWNfdjNfeGRp
c3QgeGRpc3QpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdV9pbnQgY3B1aWQ7CisJc2l6
ZV90IHVzX2xlZnQgPSAxMDAwMDAwOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisKKwlz
d2l0Y2ggKHhkaXN0KSB7CisJY2FzZSAoRElTVCk6CisJCXJlcyA9IHNjLT5naWNfZGlzdDsKKwkJ
YnJlYWs7CisJY2FzZSAoUkVESVNUKToKKwkJcmVzID0gc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1
aWRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlLQVNTRVJUKDAsICgiJXM6IEF0dGVtcHQgdG8g
d2FpdCBmb3IgdW5rbm93biBSV1AiLCBfX2Z1bmNfXykpOworCQlyZXR1cm47CisJfQorCisJd2hp
bGUgKChidXNfcmVhZF80KHJlcywgR0lDRF9DVExSKSAmIEdJQ0RfQ1RMUl9SV1ApICE9IDApIHsK
KwkJREVMQVkoMSk7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkgeworCQkJZGV2aWNlX3ByaW50Zihz
Yy0+ZGV2LAorCQkJICAgICJHSUNEIFJlZ2lzdGVyIHdyaXRlIHBlbmRpbmcgZm9yIHRvbyBsb25n
Iik7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKy8qIENQVSBpbnRlcmZhY2UuICovCitzdGF0
aWMgX19pbmxpbmUgdm9pZAorZ2ljX3YzX2NwdV9wcmlvcml0eSh1aW50NjRfdCBtYXNrKQorewor
CisJLyogU2V0IHByb3JpdHkgbWFzayAqLworCWdpY19pY2Nfd3JpdGUoUE1SLCBtYXNrICYgMHhG
RlVMKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX2NwdV9lbmFibGVfc3JlKHN0cnVjdCBnaWNf
djNfc29mdGMgKnNjKQoreworCXVpbnQ2NF90IHNyZTsKKwl1X2ludCBjcHVpZDsKKworCWNwdWlk
ID0gUENQVV9HRVQoY3B1aWQpOworCS8qCisJICogU2V0IHRoZSBTUkUgYml0IHRvIGVuYWJsZSBh
Y2Nlc3MgdG8gR0lDIENQVSBpbnRlcmZhY2UKKwkgKiB2aWEgc3lzdGVtIHJlZ2lzdGVycy4KKwkg
Ki8KKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSAgICAibXJzCSUwLCBpY2Nfc3JlX2VsMQlcbiIKKwkg
ICAgIm9ycgklMCwgJTAsICUxCVxuIgorCSAgICAibXNyCWljY19zcmVfZWwxLCAlMAlcbiIKKwkg
ICAgImlzYgkJCVxuIgorCSAgICA6ICI9ciIgKHNyZSkgOiAiTCIgKElDQ19TUkVfRUwxX1NSRSkp
OworCisJLyoKKwkgKiBOb3cgZW5zdXJlIHRoYXQgdGhlIGJpdCBpcyBzZXQuCisJICovCisJX19h
c20gX192b2xhdGlsZSgibXJzCSUwLCBpY2Nfc3JlX2VsMSIgOiAiPXIiIChzcmUpKTsKKwlpZiAo
IShzcmUgJiBJQ0NfU1JFX0VMMV9TUkUpKSB7CisJCS8qIFdlIGFyZSBkb25lLiBUaGlzIHdhcyBk
aXNhYmxlZCBpbiBFTDIgKi8KKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiRVJST1I6IENQVSV1
IGNhbm5vdCBlbmFibGUgQ1BVIGludGVyZmFjZSAiCisJCSAgICAidmlhIHN5c3RlbSByZWdpc3Rl
cnNcbiIsIGNwdWlkKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfSBlbHNlIGlmIChib290dmVyYm9z
ZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAgICAiQ1BVJXUgZW5hYmxlZCBDUFUg
aW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLAorCQkgICAgY3B1aWQpOworCX0KKwor
CXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19jcHVfaW5pdChzdHJ1Y3QgZ2lj
X3YzX3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCisJLyogRW5hYmxlIGFjY2VzcyB0byBDUFUg
aW50ZXJmYWNlIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzICovCisJZXJyID0gZ2ljX3YzX2NwdV9lbmFi
bGVfc3JlKHNjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCS8qIFByaW9yaXR5IG1hc2sg
dG8gbWluaW11bSAtIGFjY2VwdCBhbGwgaW50ZXJydXB0cyAqLworCWdpY192M19jcHVfcHJpb3Jp
dHkoR0lDX1BSSU9SSVRZX01JTik7CisJLyogRGlzYWJsZSBFT0kgbW9kZSAqLworCWdpY19pY2Nf
Y2xlYXIoQ1RMUiwgSUNDX0NUTFJfRUwxX0VPSSk7CisJLyogRW5hYmxlIGdyb3VwIDEgKGluc2Vj
dXJlKSBpbnRlcnJ1cHMgKi8KKwlnaWNfaWNjX3NldChJR1JQRU4xLCBJQ0NfSUdSUEVOMF9FTDFf
RU4pOworCitlcnJvcjoKKwlyZXR1cm4gKGVycik7Cit9CisKKy8qIERpc3RyaWJ1dG9yICovCitz
dGF0aWMgaW50CitnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQorewor
CXVpbnQ2NF90IGFmZjsKKwl1X2ludCBpOworCisJLyoKKwkgKiAxLiBEaXNhYmxlIHRoZSBEaXN0
cmlidXRvcgorCSAqLworCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0NUTFIsIDApOworCWdpY192
M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCisJLyoKKwkgKiAyLiBDb25maWd1cmUgdGhlIERp
c3RyaWJ1dG9yCisJICovCisJLyogU2V0IGFsbCBnbG9iYWwgaW50ZXJydXB0cyB0byBiZSBsZXZl
bCB0cmlnZ2VyZWQsIGFjdGl2ZSBsb3cuICovCisJZm9yIChpID0gMzI7IGkgPCBzYy0+Z2ljX25p
cnFzOyBpICs9IDE2KSB7CisJCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0lDRkdSKGkgPj4gNCks
IDB4MDAwMDAwMDApOworCX0KKwkvKiBTZXQgcHJpb3JpdHkgdG8gYWxsIHNoYXJlZCBpbnRlcnJ1
cHRzICovCisJZm9yIChpID0gMzI7IGkgPCBzYy0+Z2ljX25pcnFzOyBpICs9IDQpIHsKKwkJLyog
U2V0IGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfSVBSSU9S
SVRZUihpID4+IDIpLCBHSUNfUFJJT1JJVFlfTUFYKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUg
YWxsIGludGVycnVwdHMuIExlYXZlIFBQSSBhbmQgU0dJcyBhcyB0aGV5IGFyZSBlbmFibGVkIGlu
CisJICogUmUtRGlzdHJpYnV0b3IgcmVnaXN0ZXJzLgorCSAqLworCWZvciAoaSA9IDMyOyBpIDwg
c2MtPmdpY19uaXJxczsgaSArPSAzMikgeworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0VO
QUJMRVIoaSA+PiA1KSwgMHhGRkZGRkZGRik7CisJfQorCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChz
YywgRElTVCk7CisKKwkvKgorCSAqIDMuIEVuYWJsZSBEaXN0cmlidXRvcgorCSAqLworCS8qIEVu
YWJsZSBEaXN0cmlidXRvciB3aXRoIEFSRSwgR3JvdXAgMSAqLworCWdpY19kX3dyaXRlKHNjLCA0
LCBHSUNEX0NUTFIsIEdJQ0RfQ1RMUl9BUkVfTlMgfCBHSUNEX0NUTFJfRzFBIHwKKwkgICAgR0lD
RF9DVExSX0cxKTsKKworCS8qCisJICogNC4gUm91dGUgYWxsIGludGVycnVwdHMgdG8gYm9vdCBD
UFUuCisJICovCisJYWZmID0gQ1BVX0FGRklOSVRZKFBDUFVfR0VUKGNwdWlkKSk7CisJZm9yIChp
ID0gMzI7IGkgPCBzYy0+Z2ljX25pcnFzOyBpKyspCisJCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNE
X0lST1VURVIoaSksIGFmZik7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBSZS1EaXN0cmlidXRv
ciAqLworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF9maW5kKHN0cnVjdCBnaWNfdjNfc29mdGMg
KnNjKQoreworCXN0cnVjdCByZXNvdXJjZSByX3JlczsKKwlidXNfc3BhY2VfaGFuZGxlX3Qgcl9i
c2g7CisJdWludDY0X3QgYWZmOworCXVpbnQ2NF90IHR5cGVyOworCXVpbnQzMl90IHBpZHIyOwor
CXVfaW50IGNwdWlkOworCXNpemVfdCBpOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisK
KwkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoaXMgQ1BVJ3MgUmUtRGlzdHJpYnV0
b3IgcmVnaXN0ZXJzICovCisJc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdID0KKwkgICAgbWFs
bG9jKHNpemVvZigqc2MtPmdpY19yZWRpc3RzLnBjcHVbMF0pLCBNX0dJQ19WMywgTV9XQUlUT0sp
OworCisJYWZmID0gQ1BVX0FGRklOSVRZKGNwdWlkKTsKKwkvKiBBZmZpbml0eSBpbiBmb3JtYXQg
Zm9yIGNvbXBhcmlzb24gd2l0aCB0eXBlciAqLworCWFmZiA9IChDUFVfQUZGMyhhZmYpIDw8IDI0
KSB8IChDUFVfQUZGMihhZmYpIDw8IDE2KSB8CisJICAgIChDUFVfQUZGMShhZmYpIDw8IDgpIHwg
Q1BVX0FGRjAoYWZmKTsKKworCWlmIChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNj
LT5kZXYsCisJCSAgICAiU3RhcnQgc2VhcmNoaW5nIGZvciBSZS1EaXN0cmlidXRvclxuIik7CisJ
fQorCS8qIEl0ZXJhdGUgdGhyb3VnaCBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJZm9yIChp
ID0gMDsgaSA8IHNjLT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrKSB7CisJCS8qIFRha2UgYSBj
b3B5IG9mIHRoZSByZWdpb24ncyByZXNvdXJjZSAqLworCQlyX3JlcyA9ICpzYy0+Z2ljX3JlZGlz
dHMucmVnaW9uc1tpXTsKKwkJcl9ic2ggPSBybWFuX2dldF9idXNoYW5kbGUoJnJfcmVzKTsKKwor
CQlwaWRyMiA9IGJ1c19yZWFkXzQoJnJfcmVzLCBHSUNSX1BJRFIyKTsKKwkJc3dpdGNoIChwaWRy
MiAmIEdJQ1JfUElEUjJfQVJDSF9NQVNLKSB7CisJCWNhc2UgR0lDUl9QSURSMl9BUkNIX0dJQ3Yz
OiAvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjQ6CisJCQli
cmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiTm8g
UmUtRGlzdHJpYnV0b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJCQlmcmVlKHNjLT5n
aWNfcmVkaXN0cy5wY3B1W2NwdWlkXSwgTV9HSUNfVjMpOworCQkJcmV0dXJuIChFTk9ERVYpOwor
CQl9CisKKwkJZG8geworCQkJdHlwZXIgPSBidXNfcmVhZF84KCZyX3JlcywgR0lDUl9UWVBFUik7
CisJCQlpZiAoKHR5cGVyID4+IDMyKSA9PSBhZmYpIHsKKwkJCQlLQVNTRVJUKHNjLT5naWNfcmVk
aXN0cy5wY3B1W2NwdWlkXSAhPSBOVUxMLAorCQkJCSAgICAoIkludmFsaWQgcG9pbnRlciB0byBw
ZXItQ1BVIHJlZGlzdHJpYnV0b3IiKSk7CisJCQkJLyogQ29weSByZXMgY29udGVudHMgdG8gaXRz
IGZpbmFsIGRlc3RpbmF0aW9uICovCisJCQkJKnNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSA9
IHJfcmVzOworCQkJCWlmIChib290dmVyYm9zZSkgeworCQkJCQlkZXZpY2VfcHJpbnRmKHNjLT5k
ZXYsCisJCQkJCSAgICAiQ1BVJXUgUmUtRGlzdHJpYnV0b3IgaGFzIGJlZW4gZm91bmRcbiIsCisJ
CQkJCSAgICBjcHVpZCk7CisJCQkJfQorCQkJCXJldHVybiAoMCk7CisJCQl9CisKKwkJCXJfYnNo
ICs9IFBBR0VfU0laRV82NEsgKiAyOworCQkJaWYgKHR5cGVyICYgR0lDUl9UWVBFUl9WTFBJUykK
KwkJCQlyX2JzaCArPSBQQUdFX1NJWkVfNjRLICogMjsKKworCQkJcm1hbl9zZXRfYnVzaGFuZGxl
KCZyX3Jlcywgcl9ic2gpOworCQl9IHdoaWxlICghKHR5cGVyICYgR0lDUl9UWVBFUl9MQVNUKSk7
CisJfQorCisJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0sIE1fR0lDX1YzKTsKKwlk
ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJObyBSZS1EaXN0cmlidXRvciBmb3VuZCBmb3IgQ1BVJXVc
biIsIGNwdWlkKTsKKwlyZXR1cm4gKEVOWElPKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX3Jl
ZGlzdF93YWtlKHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQoreworCXVpbnQzMl90IHdha2VyOwor
CXNpemVfdCB1c19sZWZ0ID0gMTAwMDAwMDsKKworCXdha2VyID0gZ2ljX3JfcmVhZChzYywgNCwg
R0lDUl9XQUtFUik7CisJLyogV2FrZSB1cCBSZS1EaXN0cmlidXRvciBmb3IgdGhpcyBDUFUgKi8K
Kwl3YWtlciAmPSB+R0lDUl9XQUtFUl9QUzsKKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9XQUtF
Uiwgd2FrZXIpOworCS8qCisJICogV2hlbiBjbGVhcmluZyBQcm9jZXNzb3JTbGVlcCBiaXQgaXQg
aXMgcmVxdWlyZWQgdG8gd2FpdCBmb3IKKwkgKiBDaGlsZHJlbkFzbGVlcCB0byBiZWNvbWUgemVy
byBmb2xsb3dpbmcgdGhlIHByb2Nlc3NvciBwb3dlci1vbi4KKwkgKi8KKwl3aGlsZSAoKGdpY19y
X3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpICYgR0lDUl9XQUtFUl9DQSkgIT0gMCkgeworCQlERUxB
WSgxKTsKKwkJaWYgKHVzX2xlZnQtLSA9PSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYs
CisJCQkgICAgIkNvdWxkIG5vdCB3YWtlIFJlLURpc3RyaWJ1dG9yIGZvciBDUFUldSIsCisJCQkg
ICAgUENQVV9HRVQoY3B1aWQpKTsKKwkJCXJldHVybiAoRU5YSU8pOworCQl9CisJfQorCisJaWYg
KGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwgIkNQVSV1IFJlLURpc3Ry
aWJ1dG9yIHdva2UgdXBcbiIsCisJCSAgICBQQ1BVX0dFVChjcHVpZCkpOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3RfaW5pdChzdHJ1Y3QgZ2ljX3Yz
X3NvZnRjICpzYykKK3sKKwlpbnQgZXJyOworCXNpemVfdCBpOworCisJZXJyID0gZ2ljX3YzX3Jl
ZGlzdF9maW5kKHNjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gZ2ljX3Yz
X3JlZGlzdF93YWtlKHNjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJLyogRGlzYWJs
ZSBTUElzICovCisJZ2ljX3Jfd3JpdGUoc2MsIDQsIFBBR0VfU0laRV82NEsgKyBHSUNSX0lDRU5B
QkxFUjAsIDB4RkZGRjAwMDApOworCS8qIEVuYWJsZSBTR0lzICovCisJZ2ljX3Jfd3JpdGUoc2Ms
IDQsIFBBR0VfU0laRV82NEsgKyBHSUNSX0lTRU5BQkxFUjAsIDB4MDAwMEZGRkYpOworCisJLyog
U2V0IHByaW9yaXR5IGZvciBTR0lzIGFuZCBQUElzICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBp
ICs9IDQpIHsKKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsIFBBR0VfU0laRV82NEsgKyBHSUNEX0lQUklP
UklUWVIoaSA+PiAyKSwKKwkJICAgIEdJQ19QUklPUklUWV9NQVgpOworCX0KKworCWdpY192M193
YWl0X2Zvcl9yd3Aoc2MsIFJFRElTVCk7CisKK2Vycm9yOgorCXJldHVybiAoZXJyKTsKK30KCg==


--b1_233c72621ad544eae2ed39aa47890a4a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-piql4a7htwxjub743777-req>