Linux-Hardware Digest #437, Volume #10 Mon, 7 Jun 99 23:13:39 EDT
Contents:
How do I compile drivers? ("Robert Schapiro")
----------------------------------------------------------------------------
From: "Robert Schapiro" <[EMAIL PROTECTED]>
Subject: How do I compile drivers?
Date: Tue, 08 Jun 1999 01:56:13 GMT
This is a multi-part message in MIME format.
=======_NextPart_000_0006_01BEB130.8E0B3BC0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0007_01BEB130.8E0B3BC0"
=======_NextPart_001_0007_01BEB130.8E0B3BC0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
How do I compile this kernel?
=======_NextPart_001_0007_01BEB130.8E0B3BC0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN">
<HTML>
<HEAD>
<META content=3Dtext/html;charset=3Diso-8859-1 =
http-equiv=3DContent-Type>
<META content=3D'"MSHTML 4.72.3110.7"' name=3DGENERATOR>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT color=3D#000000 size=3D2>How do I compile this =
kernel?</FONT></DIV>
<DIV> </DIV></BODY></HTML>
=======_NextPart_001_0007_01BEB130.8E0B3BC0==
=======_NextPart_000_0006_01BEB130.8E0B3BC0
Content-Type: application/octet-stream;
name="epic100.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="epic100.c"
LyogZXBpYzEwMC5jOiBBIFNNQyA4M2MxNzAgRVBJQy8xMDAgRmFzdCBFdGhlcm5ldCBkcml2ZXIg
Zm9yIExpbnV4LiAqLwovKgoJV3JpdHRlbi9jb3B5cmlnaHQgMTk5Ny0xOTk5IGJ5IERvbmFsZCBC
ZWNrZXIuCgoJVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3Jk
aW5nIHRvIHRoZSB0ZXJtcwoJb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVk
IGhlcmVpbiBieSByZWZlcmVuY2UuCglBbGwgb3RoZXIgcmlnaHRzIHJlc2VydmVkLgoKCVRoaXMg
ZHJpdmVyIGlzIGZvciB0aGUgU01DODNjMTcwLzE3NSAiRVBJQyIgc2VyaWVzLCBhcyB1c2VkIG9u
IHRoZQoJU01DIEV0aGVyUG93ZXIgSUkgOTQzMiBQQ0kgYWRhcHRlciwgYW5kIHNldmVyYWwgQ2Fy
ZEJ1cyBjYXJkcy4KCglUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBDRVNESVMu
Z3NmYy5uYXNhLmdvdiwgb3IgQy9PCglVU1JBIENlbnRlciBvZiBFeGNlbGxlbmNlIGluIFNwYWNl
IERhdGEgYW5kIEluZm9ybWF0aW9uIFNjaWVuY2VzCgkgICBDb2RlIDkzMC41LCBHb2RkYXJkIFNw
YWNlIEZsaWdodCBDZW50ZXIsIEdyZWVuYmVsdCBNRCAyMDc3MQoKCUluZm9ybWF0aW9uIGFuZCB1
cGRhdGVzIGF2YWlsYWJsZSBhdAoJaHR0cDovL2Nlc2Rpcy5nc2ZjLm5hc2EuZ292L2xpbnV4L2Ry
aXZlcnMvZXBpYzEwMC5odG1sCiovCgpzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CiJlcGlj
MTAwLmM6djEuMDYgMi8xMC85OCBEb25hbGQgQmVja2VyIGh0dHA6Ly9jZXNkaXMuZ3NmYy5uYXNh
Lmdvdi9saW51eC9kcml2ZXJzL2VwaWMxMDAuaHRtbFxuIjsKCi8qIEEgZmV3IHVzZXItY29uZmln
dXJhYmxlIHZhbHVlcy4gKi8KCi8qIEtlZXAgdGhlIHJpbmcgc2l6ZXMgYSBwb3dlciBvZiB0d28g
Zm9yIGVmZmljaWVuY3kuCiAgIE1ha2luZyB0aGUgVHggcmluZyB0b28gbGFyZ2UgZGVjcmVhc2Vz
IHRoZSBlZmZlY3RpdmVuZXNzIG9mIGNoYW5uZWwKICAgYm9uZGluZyBhbmQgcGFja2V0IHByaW9y
aXR5LgogICBUaGVyZSBhcmUgbm8gaWxsIGVmZmVjdHMgZnJvbSB0b28tbGFyZ2UgcmVjZWl2ZSBy
aW5ncy4gKi8KI2RlZmluZSBUWF9SSU5HX1NJWkUJMTYKI2RlZmluZSBSWF9SSU5HX1NJWkUJMzIK
Ci8qIFNldCB0aGUgY29weSBicmVha3BvaW50IGZvciB0aGUgY29weS1vbmx5LXRpbnktZnJhbWVz
IHNjaGVtZS4KICAgU2V0dGluZyB0byA+IDE1MTggZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhpcyBm
ZWF0dXJlLiAqLwpzdGF0aWMgaW50IHJ4X2NvcHlicmVhayA9IDIwMDsKCi8qIE1heGltdW0gZXZl
bnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCnN0
YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gMzI7CgovKiBPcGVyYXRpb25hbCBwYXJhbWV0
ZXJzIHRoYXQgdXN1YWxseSBhcmUgbm90IGNoYW5nZWQuICovCi8qIFRpbWUgaW4gamlmZmllcyBi
ZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZy4gKi8KI2RlZmluZSBUWF9U
SU1FT1VUICAoKDIwMDAqSFopLzEwMDApCgojZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYJCQkvKiBT
aXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwoKLyogQnl0ZXMgdHJhbnNmZXJyZWQg
dG8gY2hpcCBiZWZvcmUgdHJhbnNtaXNzaW9uIHN0YXJ0cy4gKi8KI2RlZmluZSBUWF9GSUZPX1RI
UkVTSCAyNTYJCS8qIFJvdW5kZWQgZG93biB0byA0IGJ5dGUgdW5pdHMuICovCiNkZWZpbmUgUlhf
RklGT19USFJFU0ggMQkJLyogMC0zLCAwPT0zMiwgNjQsOTYsIG9yIDM9PTEyOCBieXRlcyAgKi8K
CiNpZm5kZWYgX19PUFRJTUlaRV9fCiN3YXJuaW5nICBZb3UgbXVzdCBjb21waWxlIHRoaXMgZmls
ZSB3aXRoIHRoZSBjb3JyZWN0IG9wdGlvbnMhCiN3YXJuaW5nICBTZWUgdGhlIGxhc3QgbGluZXMg
b2YgdGhlIHNvdXJjZSBmaWxlLgojZXJyb3IgWW91IG11c3QgY29tcGlsZSB0aGlzIGRyaXZlciB3
aXRoICItTyIuCiNlbmRpZgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51
eC92ZXJzaW9uLmg+CQkvKiBFdmlsLCBidXQgbmVjY2Vzc2FyeSAqLwojaWZkZWYgTU9EVUxFCiNp
ZmRlZiBNT0RWRVJTSU9OUwojaW5jbHVkZSA8bGludXgvbW9kdmVyc2lvbnMuaD4KI2VuZGlmCiNp
bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2Vsc2UKI2RlZmluZSBNT0RfSU5DX1VTRV9DT1VOVAoj
ZGVmaW5lIE1PRF9ERUNfVVNFX0NPVU5UCiNlbmRpZgoKI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o
PgojaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiNpbmNsdWRlIDxsaW51eC90aW1lci5oPgojaW5j
bHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgojaW5jbHVkZSA8
bGludXgvbWFsbG9jLmg+CiNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KI2luY2x1ZGUgPGxp
bnV4L3BjaS5oPgojaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IDB4MjAxNTUKI2RlZmluZSBQQ0lf
U1VQUE9SVF9WRVIyCiNlbHNlCiNpbmNsdWRlIDxsaW51eC9iaW9zMzIuaD4KI2VuZGlmCiNpbmNs
dWRlIDxsaW51eC9kZWxheS5oPgoKI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIFByb2Nl
c3NvciB0eXBlIGZvciBjYWNoZSBhbGlnbm1lbnQuICovCiNpbmNsdWRlIDxhc20vYml0b3BzLmg+
CiNpbmNsdWRlIDxhc20vaW8uaD4KCiNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KI2luY2x1
ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KCi8qIEtl
cm5lbCBjb21wYXRpYmlsaXR5IGRlZmluZXMsIGNvbW1vbiB0byBEYXZpZCBIaW5kJ3MgUENNQ0lB
IHBhY2thZ2UuCiAgIFRoaXMgaXMgb25seSBpbiB0aGUgc3VwcG9ydC1hbGwta2VybmVscyBzb3Vy
Y2UgY29kZS4gKi8KCiNpZiAhIGRlZmluZWQgKExJTlVYX1ZFUlNJT05fQ09ERSkgfHwgTElOVVhf
VkVSU0lPTl9DT0RFIDwgMHgyMDAwMAojd2FybmluZyBUaGlzIGRyaXZlciB2ZXJzaW9uIGlzIG9u
bHkgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjAuMCBhbmQgbGF0ZXIuCiNlbmRpZgoKI2RlZmluZSBS
VU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCgojaWYgZGVmaW5lZChNT0RVTEUpICYmIChMSU5VWF9W
RVJTSU9OX0NPREUgPj0gMHgyMDExNSkKTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVj
a2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292PiIpOwpNT0RVTEVfREVTQ1JJUFRJT04oIlNNQyA4M2Mx
NzAgRVBJQyBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIik7Ck1PRFVMRV9QQVJNKGRlYnVnLCAiaSIp
OwpNT0RVTEVfUEFSTShvcHRpb25zLCAiMS0iIF9fTU9EVUxFX1NUUklORyg4KSAiaSIpOwpNT0RV
TEVfUEFSTShmdWxsX2R1cGxleCwgIjEtIiBfX01PRFVMRV9TVFJJTkcoOCkgImkiKTsKTU9EVUxF
X1BBUk0ocnhfY29weWJyZWFrLCAiaSIpOwpNT0RVTEVfUEFSTShtYXhfaW50ZXJydXB0X3dvcmss
ICJpIik7CiNlbmRpZgojaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgMHgyMDEyMwojZGVmaW5lIHRl
c3RfYW5kX3NldF9iaXQodmFsLCBhZGRyKSBzZXRfYml0KHZhbCwgYWRkcikKI2VuZGlmCiNpZiBM
SU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDEzOQojZGVmaW5lCW5ldF9kZXZpY2Vfc3RhdHMgZW5l
dF9zdGF0aXN0aWNzCiNkZWZpbmUgTkVUU1RBVFNfVkVSMgojZW5kaWYKI2lmIExJTlVYX1ZFUlNJ
T05fQ09ERSA8IDB4MjAxNTkKI2RlZmluZSBERVZfRlJFRV9TS0Ioc2tiKSBkZXZfa2ZyZWVfc2ti
KHNrYiwgRlJFRV9XUklURSk7CiNlbHNlICAvKiBHcnJyLCB1bm5lZWRlZCBpbmNvbXBhdGlibGUg
Y2hhbmdlLiAqLwojZGVmaW5lIERFVl9GUkVFX1NLQihza2IpIGRldl9rZnJlZV9za2Ioc2tiKTsK
I2VuZGlmCgovKiBUaGUgSS9PIGV4dGVudC4gKi8KI2RlZmluZSBFUElDX1RPVEFMX1NJWkUgMHgx
MDAKCiNkZWZpbmUgZXBpY19kZWJ1ZyBkZWJ1ZwpzdGF0aWMgaW50IGVwaWNfZGVidWcgPSAxOwoK
LyoKCQkJCVRoZW9yeSBvZiBPcGVyYXRpb24KCkkuIEJvYXJkIENvbXBhdGliaWxpdHkKClRoaXMg
ZGV2aWNlIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgdGhlIFNNQyAiRVBJQy8xMDAiLCB0aGUgU01D
CnNpbmdsZS1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvciBQQ0kuICBUaGlzIGNoaXAgaXMg
dXNlZCBvbgp0aGUgU01DIEV0aGVyUG93ZXIgSUkgYm9hcmRzLgoKSUkuIEJvYXJkLXNwZWNpZmlj
IHNldHRpbmdzCgpQQ0kgYnVzIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgYnkgdGhlIHN5c3RlbSBh
dCBib290IHRpbWUsIHNvIG5vIGp1bXBlcnMKbmVlZCB0byBiZSBzZXQgb24gdGhlIGJvYXJkLiAg
VGhlIHN5c3RlbSBCSU9TIHdpbGwgYXNzaWduIHRoZQpQQ0kgSU5UQSBzaWduYWwgdG8gYSAocHJl
ZmVyYWJseSBvdGhlcndpc2UgdW51c2VkKSBzeXN0ZW0gSVJRIGxpbmUuCk5vdGU6IEtlcm5lbCB2
ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS4zLjczIGRvIG5vdCBzdXBwb3J0IHNoYXJlZCBQQ0kKaW50
ZXJydXB0IGxpbmVzLgoKSUlJLiBEcml2ZXIgb3BlcmF0aW9uCgpJSUlhLiBSaW5nIGJ1ZmZlcnMK
CklWYi4gUmVmZXJlbmNlcwoKaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL2RhdGFzaGVldHMvODNj
MTcxLnBkZgpodHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy84M2MxNzUucGRmCmh0
dHA6Ly9jZXNkaXMuZ3NmYy5uYXNhLmdvdi9saW51eC9taXNjL05XYXkuaHRtbApodHRwOi8vd3d3
Lm5hdGlvbmFsLmNvbS9wZi9EUC9EUDgzODQwQS5odG1sCgpJVmMuIEVycmF0YQoKKi8KCi8qIFRo
ZSByZXN0IG9mIHRoZXNlIHZhbHVlcyBzaG91bGQgbmV2ZXIgY2hhbmdlLiAqLwoKc3RhdGljIHN0
cnVjdCBkZXZpY2UgKmVwaWNfcHJvYmUxKGludCBwY2lfYnVzLCBpbnQgcGNpX2RldmZuLAoJCQkJ
CQkJCSAgc3RydWN0IGRldmljZSAqZGV2LCBsb25nIGlvYWRkciwgaW50IGlycSwKCQkJCQkJCQkg
IGludCBjaGlwX2lkLCBpbnQgY2FyZF9pZHgpOwoKZW51bSBwY2lfZmxhZ3NfYml0IHsKCVBDSV9V
U0VTX0lPPTEsIFBDSV9VU0VTX01FTT0yLCBQQ0lfVVNFU19NQVNURVI9NCwKCVBDSV9BRERSMD0w
eDEwPDwwLCBQQ0lfQUREUjE9MHgxMDw8MSwgUENJX0FERFIyPTB4MTA8PDIsIFBDSV9BRERSMz0w
eDEwPDwzLAp9OwoKc3RydWN0IGNoaXBfaW5mbyB7Cgljb25zdCBjaGFyICpuYW1lOwoJdTE2CXZl
bmRvcl9pZCwgZGV2aWNlX2lkLCBkZXZpY2VfaWRfbWFzaywgcGNpX2ZsYWdzOwoJaW50IGlvX3Np
emUsIG1pbl9sYXRlbmN5OwoJc3RydWN0IGRldmljZSAqKCpwcm9iZTEpKGludCBwY2lfYnVzLCBp
bnQgcGNpX2RldmZuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCgkJCQkJCQkgbG9uZyBpb2FkZHIsIGlu
dCBpcnEsIGludCBjaGlwX2lkeCwgaW50IGZuZF9jbnQpOwp9IHN0YXRpYyBjaGlwX3RibFtdID0g
ewoJeyJTTVNDIEVQSUMvMTAwIDgzYzE3MCIsIDB4MTBCOCwgMHgwMDA1LCAweDdmZmYsCgkgUENJ
X1VTRVNfSU98UENJX1VTRVNfTUFTVEVSfFBDSV9BRERSMCwgRVBJQ19UT1RBTF9TSVpFLCAzMiwg
ZXBpY19wcm9iZTF9LAoJeyJTTVNDIEVQSUMvQyA4M2MxNzUiLCAweDEwQjgsIDB4MDAwNiwgMHg3
ZmZmLAoJIFBDSV9VU0VTX0lPfFBDSV9VU0VTX01BU1RFUnxQQ0lfQUREUjAsIEVQSUNfVE9UQUxf
U0laRSwgMzIsIGVwaWNfcHJvYmUxfSwKCXswLH0sCn07Ci8qIFRoaXMgbWF0Y2hlcyB0aGUgdGFi
bGUgYWJvdmUuICovCnN0YXRpYyBlbnVtIHsgTUlJX1BXUkRXTj0xLCBUWVBFMl9JTlRSPTIgfSBj
aGlwX2ZlYXR1cmVzW10gPXsKCVRZUEUyX0lOVFIsIFRZUEUyX0lOVFIgfCBNSUlfUFdSRFdOLCB9
OwoKLyogT2Zmc2V0cyB0byByZWdpc3RlcnMsIHVzaW5nIHRoZSAodWdoKSBTTUMgbmFtZXMuICov
CmVudW0gZXBpY19yZWdpc3RlcnMgewogIENPTU1BTkQ9MCwgSU5UU1RBVD00LCBJTlRNQVNLPTgs
IEdFTkNUTD0weDBDLCBOVkNUTD0weDEwLCBFRUNUTD0weDE0LAogIFBDSUJ1cnN0Q250PTB4MTgs
CiAgVEVTVDE9MHgxQywgQ1JDQ05UPTB4MjAsIEFMSUNOVD0weDI0LCBNUENOVD0weDI4LAkvKiBS
eCBlcnJvciBjb3VudGVycy4gKi8KICBNSUlDdHJsPTB4MzAsIE1JSURhdGE9MHgzNCwgTUlJQ2Zn
PTB4MzgsCiAgTEFOMD02NCwJCQkJCQkvKiBNQUMgYWRkcmVzcy4gKi8KICBNQzA9ODAsCQkJCQkJ
LyogTXVsdGljYXN0IGZpbHRlciB0YWJsZS4gKi8KICBSeEN0cmw9OTYsIFR4Q3RybD0xMTIsIFR4
U1RBVD0weDc0LAogIFBSeENEQVI9MHg4NCwgUnhTVEFUPTB4QTQsIEVhcmx5Ung9MHhCMCwgUFR4
Q0RBUj0weEM0LCBUeFRocmVzaD0weERDLAp9OwoKLyogSW50ZXJydXB0IHJlZ2lzdGVyIGJpdHMs
IHVzaW5nIG15IG93biBtZWFuaW5nZnVsIG5hbWVzLiAqLwplbnVtIEludHJTdGF0dXMgewoJVHhJ
ZGxlPTB4NDAwMDAsIFJ4SWRsZT0weDIwMDAwLCBJbnRyU3VtbWFyeT0weDAxMDAwMCwKCVBDSUJ1
c0VycjE3MD0weDcwMDAsIFBDSUJ1c0VycjE3NT0weDEwMDAsIFBoeUV2ZW50MTc1PTB4ODAwMCwK
CVJ4U3RhcnRlZD0weDA4MDAsIFJ4RWFybHlXYXJuPTB4MDQwMCwgQ250RnVsbD0weDAyMDAsIFR4
VW5kZXJydW49MHgwMTAwLAoJVHhFbXB0eT0weDAwODAsIFR4RG9uZT0weDAwMjAsIFJ4RXJyb3I9
MHgwMDEwLAoJUnhPdmVyZmxvdz0weDAwMDgsIFJ4RnVsbD0weDAwMDQsIFJ4SGVhZGVyPTB4MDAw
MiwgUnhEb25lPTB4MDAwMSwKfTsKZW51bSBDb21tYW5kQml0cyB7CglTdG9wUng9MSwgU3RhcnRS
eD0yLCBUeFF1ZXVlZD00LCBSeFF1ZXVlZD04LAoJU3RvcFR4RE1BPTB4MjAsIFN0b3BSeERNQT0w
eDQwLCBSZXN0YXJ0VHg9MHg4MCwKfTsKCi8qIFRoZSBFUElDMTAwIFJ4IGFuZCBUeCBidWZmZXIg
ZGVzY3JpcHRvcnMuICovCgpzdHJ1Y3QgZXBpY190eF9kZXNjIHsKCXMxNiBzdGF0dXM7Cgl1MTYg
dHhsZW5ndGg7Cgl1MzIgYnVmYWRkcjsKCXUxNiBidWZsZW5ndGg7Cgl1MTYgY29udHJvbDsKCXUz
MiBuZXh0Owp9OwoKc3RydWN0IGVwaWNfcnhfZGVzYyB7CglzMTYgc3RhdHVzOwoJdTE2IHJ4bGVu
Z3RoOwoJdTMyIGJ1ZmFkZHI7Cgl1MzIgYnVmbGVuZ3RoOwoJdTMyIG5leHQ7Cn07CgpzdHJ1Y3Qg
ZXBpY19wcml2YXRlIHsKCWNoYXIgZGV2bmFtZVs4XTsJCQkvKiBVc2VkIG9ubHkgZm9yIGtlcm5l
bCBkZWJ1Z2dpbmcuICovCgljb25zdCBjaGFyICpwcm9kdWN0X25hbWU7CglzdHJ1Y3QgZGV2aWNl
ICpuZXh0X21vZHVsZTsKCgkvKiBUeCBhbmQgUnggcmluZ3MgaGVyZSBzbyB0aGF0IHRoZXkgcmVt
YWluIHBhcmFncmFwaCBhbGlnbmVkLiAqLwoJc3RydWN0IGVwaWNfcnhfZGVzYyByeF9yaW5nW1JY
X1JJTkdfU0laRV07CglzdHJ1Y3QgZXBpY190eF9kZXNjIHR4X3JpbmdbVFhfUklOR19TSVpFXTsK
CS8qIFRoZSBzYXZlZCBhZGRyZXNzIG9mIGEgc2VudC1pbi1wbGFjZSBwYWNrZXQvYnVmZmVyLCBm
b3Igc2tmcmVlKCkuICovCglzdHJ1Y3Qgc2tfYnVmZiogdHhfc2tidWZmW1RYX1JJTkdfU0laRV07
CgkvKiBUaGUgYWRkcmVzc2VzIG9mIHJlY2VpdmUtaW4tcGxhY2Ugc2tidWZmcy4gKi8KCXN0cnVj
dCBza19idWZmKiByeF9za2J1ZmZbUlhfUklOR19TSVpFXTsKCgkvKiBSaW5nIHBvaW50ZXJzLiAq
LwoJdW5zaWduZWQgaW50IGN1cl9yeCwgY3VyX3R4OwkJLyogVGhlIG5leHQgZnJlZSByaW5nIGVu
dHJ5ICovCgl1bnNpZ25lZCBpbnQgZGlydHlfcngsIGRpcnR5X3R4OwkvKiBUaGUgcmluZyBlbnRy
aWVzIHRvIGJlIGZyZWUoKWVkLiAqLwoKCXU4IHBjaV9idXMsIHBjaV9kZXZfZm47CQkJCS8qIFBD
SSBidXMgbG9jYXRpb24uICovCgl1MTYgY2hpcF9mbGFnczsKCglzdHJ1Y3QgbmV0X2RldmljZV9z
dGF0cyBzdGF0czsKCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkJCS8qIE1lZGlhIHNlbGVjdGlv
biB0aW1lci4gKi8KCXVuc2lnbmVkIGNoYXIgbWNfZmlsdGVyWzhdOwoJc2lnbmVkIGNoYXIgcGh5
c1s0XTsJCQkJLyogTUlJIGRldmljZSBhZGRyZXNzZXMuICovCgl1bnNpZ25lZCBpbnQgdHhfZnVs
bDoxOwkJCQkvKiBUaGUgVHggcXVldWUgaXMgZnVsbC4gKi8KCXVuc2lnbmVkIGludCBmdWxsX2R1
cGxleDoxOwkJCS8qIEN1cnJlbnQgZHVwbGV4IHNldHRpbmcuICovCgl1bnNpZ25lZCBpbnQgZm9y
Y2VfZmQ6MTsJCQkvKiBGdWxsLWR1cGxleCBvcGVyYXRpb24gcmVxdWVzdGVkLiAqLwoJdW5zaWdu
ZWQgaW50IGRlZmF1bHRfcG9ydDo0OwkJLyogTGFzdCBkZXYtPmlmX3BvcnQgdmFsdWUuICovCgl1
bnNpZ25lZCBpbnQgbWVkaWEyOjQ7CQkJCS8qIFNlY29uZGFyeSBtb25pdG9yZWQgbWVkaWEgcG9y
dC4gKi8KCXVuc2lnbmVkIGludCBtZWRpYWxvY2s6MTsJCQkvKiBEb24ndCBzZW5zZSBtZWRpYSB0
eXBlLiAqLwoJdW5zaWduZWQgaW50IG1lZGlhc2Vuc2U6MTsJCQkvKiBNZWRpYSBzZW5zaW5nIGlu
IHByb2dyZXNzLiAqLwoJaW50IHBhZDAsIHBhZDE7CQkJCQkJLyogVXNlZCBmb3IgOC1ieXRlIGFs
aWdubWVudCAqLwp9OwoKLyogVXNlZCB0byBwYXNzIHRoZSBmdWxsLWR1cGxleCBmbGFnLCBldGMu
ICovCiNkZWZpbmUgTUFYX1VOSVRTIDgKc3RhdGljIGludCBmdWxsX2R1cGxleFtNQVhfVU5JVFNd
ID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CnN0YXRpYyBpbnQgb3B0aW9uc1tN
QVhfVU5JVFNdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CgpzdGF0aWMgaW50
IGVwaWNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpOwpzdGF0aWMgaW50IHJlYWRfZWVwcm9tKGxv
bmcgaW9hZGRyLCBpbnQgbG9jYXRpb24pOwpzdGF0aWMgaW50IG1kaW9fcmVhZChsb25nIGlvYWRk
ciwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKc3RhdGljIHZvaWQgbWRpb193cml0ZShsb25n
IGlvYWRkciwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwpzdGF0aWMgdm9p
ZCBlcGljX3Jlc3RhcnQoc3RydWN0IGRldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgZXBpY190aW1l
cih1bnNpZ25lZCBsb25nIGRhdGEpOwpzdGF0aWMgdm9pZCBlcGljX3R4X3RpbWVvdXQoc3RydWN0
IGRldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgZXBpY19pbml0X3Jpbmcoc3RydWN0IGRldmljZSAq
ZGV2KTsKc3RhdGljIGludCBlcGljX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry
dWN0IGRldmljZSAqZGV2KTsKc3RhdGljIGludCBlcGljX3J4KHN0cnVjdCBkZXZpY2UgKmRldik7
CnN0YXRpYyB2b2lkIGVwaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwg
c3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpzdGF0aWMgaW50IG1paV9pb2N0bChzdHJ1Y3QgZGV2aWNl
ICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpzdGF0aWMgaW50IGVwaWNfY2xvc2Uo
c3RydWN0IGRldmljZSAqZGV2KTsKc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplcGlj
X2dldF9zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShz
dHJ1Y3QgZGV2aWNlICpkZXYpOwoKDAovKiBBIGxpc3Qgb2YgYWxsIGluc3RhbGxlZCBFUElDIGRl
dmljZXMsIGZvciByZW1vdmluZyB0aGUgZHJpdmVyIG1vZHVsZS4gKi8Kc3RhdGljIHN0cnVjdCBk
ZXZpY2UgKnJvb3RfZXBpY19kZXYgPSBOVUxMOwoKI2lmbmRlZiBDQVJEQlVTCmludCBlcGljMTAw
X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKewoJaW50IGNhcmRzX2ZvdW5kID0gMDsKCWludCBj
aGlwX2lkeCwgaXJxOwoJdTE2IHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZDsKCXVuc2lnbmVkIGNo
YXIgcGNpX2J1cywgcGNpX2RldmljZV9mbjsKCiNpZmRlZiBQQ0lfU1VQUE9SVF9WRVIyCglzdHJ1
Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKCXdoaWxlICgocGNpZGV2ID0gcGNpX2ZpbmRfY2xh
c3MoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCwgcGNpZGV2KSkKCQkJIT0gTlVMTCkg
ewoJCWxvbmcgcGNpX2lvYWRkciA9IHBjaWRldi0+YmFzZV9hZGRyZXNzWzBdICYgfjM7CgkJaW50
IHZlbmRvciA9IHBjaWRldi0+dmVuZG9yOwoJCWludCBkZXZpY2UgPSBwY2lkZXYtPmRldmljZTsK
CgkJZm9yIChjaGlwX2lkeCA9IDA7IGNoaXBfdGJsW2NoaXBfaWR4XS52ZW5kb3JfaWQ7IGNoaXBf
aWR4KyspCgkJCWlmICh2ZW5kb3IgPT0gY2hpcF90YmxbY2hpcF9pZHhdLnZlbmRvcl9pZAoJCQkJ
JiYgKGRldmljZSAmIGNoaXBfdGJsW2NoaXBfaWR4XS5kZXZpY2VfaWRfbWFzaykgPT0KCQkJCWNo
aXBfdGJsW2NoaXBfaWR4XS5kZXZpY2VfaWQpCgkJCQlicmVhazsKCQlpZiAoY2hpcF90YmxbY2hp
cF9pZHhdLnZlbmRvcl9pZCA9PSAwCQkvKiBDb21waWxlZCBvdXQhICovCgkJCXx8CWNoZWNrX3Jl
Z2lvbihwY2lfaW9hZGRyLCBjaGlwX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSkpCgkJCWNvbnRpbnVl
OwoJCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOwoJCXBjaV9kZXZpY2VfZm4gPSBwY2lk
ZXYtPmRldmZuOwoJCWlycSA9IHBjaWRldi0+aXJxOwojZWxzZQoJaW50IHBjaV9pbmRleDsKCglp
ZiAoICEgcGNpYmlvc19wcmVzZW50KCkpCgkJcmV0dXJuIC1FTk9ERVY7CgoJZm9yIChwY2lfaW5k
ZXggPSAwOyBwY2lfaW5kZXggPCAweGZmOyBwY2lfaW5kZXgrKykgewoJCXU4IHBjaV9pcnFfbGlu
ZTsKCQl1MTYgdmVuZG9yLCBkZXZpY2U7CgkJdTMyIHBjaV9pb2FkZHI7CgoJCWlmIChwY2liaW9z
X2ZpbmRfY2xhc3MgKFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsCgkJCQkJCQkJcGNp
X2luZGV4LCAmcGNpX2J1cywgJnBjaV9kZXZpY2VfZm4pCgkJCSE9IFBDSUJJT1NfU1VDQ0VTU0ZV
TCkKCQkJYnJlYWs7CgkJcGNpYmlvc19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIHBjaV9kZXZp
Y2VfZm4sCgkJCQkJCQkJIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3IpOwoJCXBjaWJpb3NfcmVhZF9j
b25maWdfd29yZChwY2lfYnVzLCBwY2lfZGV2aWNlX2ZuLAoJCQkJCQkJCSBQQ0lfREVWSUNFX0lE
LCAmZGV2aWNlKTsKCgkJZm9yIChjaGlwX2lkeCA9IDA7IGNoaXBfdGJsW2NoaXBfaWR4XS52ZW5k
b3JfaWQ7IGNoaXBfaWR4KyspCgkJCWlmICh2ZW5kb3IgPT0gY2hpcF90YmxbY2hpcF9pZHhdLnZl
bmRvcl9pZAoJCQkJJiYgKGRldmljZSAmIGNoaXBfdGJsW2NoaXBfaWR4XS5kZXZpY2VfaWRfbWFz
aykgPT0KCQkJCWNoaXBfdGJsW2NoaXBfaWR4XS5kZXZpY2VfaWQpCgkJCQlicmVhazsKCQlpZiAo
Y2hpcF90YmxbY2hpcF9pZHhdLnZlbmRvcl9pZCA9PSAwKQkJLyogQ29tcGlsZWQgb3V0ISAqLwoJ
CQljb250aW51ZTsKCgkJcGNpYmlvc19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBwY2lfZGV2
aWNlX2ZuLAoJCQkJCQkJCSAgUENJX0JBU0VfQUREUkVTU18wLCAmcGNpX2lvYWRkcik7CgkJcGNp
Ymlvc19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIHBjaV9kZXZpY2VfZm4sCgkJCQkJCQkJIFBD
SV9JTlRFUlJVUFRfTElORSwgJnBjaV9pcnFfbGluZSk7CgkJLyogUmVtb3ZlIEkvTyBzcGFjZSBt
YXJrZXIgaW4gYml0IDAuICovCgkJcGNpX2lvYWRkciAmPSB+MzsKCQlpcnEgPSBwY2lfaXJxX2xp
bmU7CgoJCWlmIChjaGVja19yZWdpb24ocGNpX2lvYWRkciwgY2hpcF90YmxbY2hpcF9pZHhdLmlv
X3NpemUpKQoJCQljb250aW51ZTsKI2VuZGlmCgoJCS8qIEVQSUMtc3BlY2lmaWMgY29kZTogU29m
dC1yZXNldCB0aGUgY2hpcCBlcmUgc2V0dGluZyBhcyBtYXN0ZXIuICovCgkJb3V0bCgweDAwMDEs
IHBjaV9pb2FkZHIgKyBHRU5DVEwpOwoKCQkvKiBBY3RpdmF0ZSB0aGUgY2FyZDogZml4IGZvciBi
cmFpbi1kYW1hZ2VkIFdpbjk4IEJJT1Nlcy4gKi8KCQlwY2liaW9zX3JlYWRfY29uZmlnX3dvcmQo
cGNpX2J1cywgcGNpX2RldmljZV9mbiwKCQkJCQkJCQkgUENJX0NPTU1BTkQsICZwY2lfY29tbWFu
ZCk7CgkJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUnxQQ0lf
Q09NTUFORF9JTzsKCQlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKCQkJcHJpbnRr
KEtFUk5fSU5GTyAiICBUaGUgUENJIEJJT1MgaGFzIG5vdCBlbmFibGVkIEV0aGVybmV0IgoJCQkJ
ICAgIiBkZXZpY2UgJTQuNHgtJTQuNHguIgoJCQkJICAgIiAgVXBkYXRpbmcgUENJIGNvbW1hbmQg
JTQuNHgtPiU0LjR4LlxuIiwKCQkJCSAgIHZlbmRvciwgZGV2aWNlLCBwY2lfY29tbWFuZCwgbmV3
X2NvbW1hbmQpOwoJCQlwY2liaW9zX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIHBjaV9kZXZp
Y2VfZm4sCgkJCQkJCQkJCSAgUENJX0NPTU1BTkQsIG5ld19jb21tYW5kKTsKCQl9CgoJCWRldiA9
IGNoaXBfdGJsW2NoaXBfaWR4XS5wcm9iZTEocGNpX2J1cywgcGNpX2RldmljZV9mbiwgZGV2LCBw
Y2lfaW9hZGRyLAoJCQkJCQkJCQkgICBpcnEsIGNoaXBfaWR4LCBjYXJkc19mb3VuZCk7CgoJCS8q
IENoZWNrIHRoZSBsYXRlbmN5IHRpbWVyLiAqLwoJCWlmIChkZXYpIHsKCQkJdTggcGNpX2xhdGVu
Y3k7CgkJCXBjaWJpb3NfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBwY2lfZGV2aWNlX2ZuLAoJ
CQkJCQkJCQkgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CgkJCWlmIChwY2lfbGF0
ZW5jeSA8IGNoaXBfdGJsW2NoaXBfaWR4XS5taW5fbGF0ZW5jeSkgewoJCQkJcHJpbnRrKEtFUk5f
SU5GTyAiICBQQ0kgbGF0ZW5jeSB0aW1lciAoQ0ZMVCkgdmFsdWUgb2YgJWQgaXMgIgoJCQkJCSAg
ICJ1bnJlYXNvbmFibHkgbG93LCBzZXR0aW5nIHRvICVkLlxuIiwgcGNpX2xhdGVuY3ksCgkJCQkJ
ICAgY2hpcF90YmxbY2hpcF9pZHhdLm1pbl9sYXRlbmN5KTsKCQkJCXBjaWJpb3Nfd3JpdGVfY29u
ZmlnX2J5dGUocGNpX2J1cywgcGNpX2RldmljZV9mbiwKCQkJCQkJCQkJCSAgUENJX0xBVEVOQ1lf
VElNRVIsCgkJCQkJCQkJCQkgIGNoaXBfdGJsW2NoaXBfaWR4XS5taW5fbGF0ZW5jeSk7CgkJCX0K
CQkJZGV2ID0gMDsKCQkJY2FyZHNfZm91bmQrKzsKCQl9Cgl9CgoJcmV0dXJuIGNhcmRzX2ZvdW5k
ID8gMCA6IC1FTk9ERVY7Cn0KI2VuZGlmICAvKiBub3QgQ0FSREJVUyAqLwoKc3RhdGljIHN0cnVj
dCBkZXZpY2UgKmVwaWNfcHJvYmUxKGludCBwY2lfYnVzLCBpbnQgcGNpX2RldmZuLAoJCQkJCQkJ
CSAgc3RydWN0IGRldmljZSAqZGV2LCBsb25nIGlvYWRkciwgaW50IGlycSwKCQkJCQkJCQkgIGlu
dCBjaGlwX2lkeCwgaW50IGNhcmRfaWR4KQp7CglzdHJ1Y3QgZXBpY19wcml2YXRlICplcDsKCWlu
dCBpLCBvcHRpb24gPSAwLCBkdXBsZXggPSAwOwoKCWlmIChkZXYgJiYgZGV2LT5tZW1fc3RhcnQp
IHsKCQlvcHRpb24gPSBkZXYtPm1lbV9zdGFydDsKCQlkdXBsZXggPSAoZGV2LT5tZW1fc3RhcnQg
JiAxNikgPyAxIDogMDsKCX0gZWxzZSBpZiAoY2FyZF9pZHggPj0gMCAgJiYgIGNhcmRfaWR4IDwg
TUFYX1VOSVRTKSB7CgkJaWYgKG9wdGlvbnNbY2FyZF9pZHhdID49IDApCgkJCW9wdGlvbiA9IG9w
dGlvbnNbY2FyZF9pZHhdOwoJCWlmIChmdWxsX2R1cGxleFtjYXJkX2lkeF0gPj0gMCkKCQkJZHVw
bGV4ID0gZnVsbF9kdXBsZXhbY2FyZF9pZHhdOwoJfQoKCWRldiA9IGluaXRfZXRoZXJkZXYoZGV2
LCAwKTsKCglkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKCWRldi0+aXJxID0gaXJxOwoJcHJpbnRr
KEtFUk5fSU5GTyAiJXM6ICVzIGF0ICUjbHgsIElSUSAlZCwgIiwKCQkgICBkZXYtPm5hbWUsIGNo
aXBfdGJsW2NoaXBfaWR4XS5uYW1lLCBpb2FkZHIsIGRldi0+aXJxKTsKCgkvKiBCcmluZyB0aGUg
Y2hpcCBvdXQgb2YgbG93LXBvd2VyIG1vZGUuICovCglvdXRsKDB4NDIwMCwgaW9hZGRyICsgR0VO
Q1RMKTsKCS8qIE1hZ2ljPyEgIElmIHdlIGRvbid0IHNldCB0aGlzIGJpdCB0aGUgTUlJIGludGVy
ZmFjZSB3b24ndCB3b3JrLiAqLwoJb3V0bCgweDAwMDgsIGlvYWRkciArIFRFU1QxKTsKCgkvKiBU
dXJuIG9uIHRoZSBNSUkgdHJhbnNjZWl2ZXIuICovCglvdXRsKDB4MTIsIGlvYWRkciArIE1JSUNm
Zyk7CglpZiAoY2hpcF9pZHggPT0gMSkKCQlvdXRsKChpbmwoaW9hZGRyICsgTlZDVEwpICYgfjB4
MDAzQykgfCAweDQ4MDAsIGlvYWRkciArIE5WQ1RMKTsKCW91dGwoMHgwMjAwLCBpb2FkZHIgKyBH
RU5DVEwpOwoKCS8qIFRoaXMgY291bGQgYWxzbyBiZSByZWFkIGZyb20gdGhlIEVFUFJPTS4gKi8K
CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCgkJKCh1MTYgKilkZXYtPmRldl9hZGRyKVtpXSA9IGlu
dyhpb2FkZHIgKyBMQU4wICsgaSo0KTsKCglmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQoJCXByaW50
aygiJTIuMng6IiwgZGV2LT5kZXZfYWRkcltpXSk7CglwcmludGsoIiUyLjJ4LlxuIiwgZGV2LT5k
ZXZfYWRkcltpXSk7CgoJaWYgKGVwaWNfZGVidWcgPiAyKSB7CgkJcHJpbnRrKEtFUk5fREVCVUcg
IiVzOiBFRVBST00gY29udGVudHNcbiIsIGRldi0+bmFtZSk7CgkJZm9yIChpID0gMDsgaSA8IDY0
OyBpKyspCgkJCXByaW50aygiICU0LjR4JXMiLCByZWFkX2VlcHJvbShpb2FkZHIsIGkpLAoJCQkJ
ICAgaSAlIDE2ID09IDE1ID8gIlxuIiA6ICIiKTsKCX0KCgkvKiBXZSBkbyBhIHJlcXVlc3RfcmVn
aW9uKCkgdG8gcmVnaXN0ZXIgL3Byb2MvaW9wb3J0cyBpbmZvLiAqLwoJcmVxdWVzdF9yZWdpb24o
aW9hZGRyLCBFUElDX1RPVEFMX1NJWkUsIGRldi0+bmFtZSk7CgoJLyogVGhlIGRhdGEgc3RydWN0
dXJlcyBtdXN0IGJlIHF1YWR3b3JkIGFsaWduZWQuICovCgllcCA9IGttYWxsb2Moc2l6ZW9mKCpl
cCksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKCW1lbXNldChlcCwgMCwgc2l6ZW9mKCplcCkpOwoJ
ZGV2LT5wcml2ID0gZXA7CgoJZXAtPm5leHRfbW9kdWxlID0gcm9vdF9lcGljX2RldjsKCXJvb3Rf
ZXBpY19kZXYgPSBkZXY7CgoJZXAtPnBjaV9idXMgPSBwY2lfYnVzOwoJZXAtPnBjaV9kZXZfZm4g
PSBwY2lfZGV2Zm47CgllcC0+Y2hpcF9mbGFncyA9IGNoaXBfZmVhdHVyZXNbY2hpcF9pZHhdOwoK
CS8qIEZpbmQgdGhlIGNvbm5lY3RlZCBNSUkgeGN2cnMuCgkgICBEb2luZyB0aGlzIGluIG9wZW4o
KSB3b3VsZCBhbGxvdyBkZXRlY3RpbmcgZXh0ZXJuYWwgeGN2cnMgbGF0ZXIsIGJ1dAoJICAgdGFr
ZXMgdG9vIG11Y2ggdGltZS4gKi8KCXsKCQlpbnQgcGh5LCBwaHlfaWR4OwoJCWZvciAocGh5ID0g
MSwgcGh5X2lkeCA9IDA7IHBoeSA8IDMyICYmIHBoeV9pZHggPCBzaXplb2YoZXAtPnBoeXMpOwoJ
CQkgcGh5KyspIHsKCQkJaW50IG1paV9zdGF0dXMgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHksIDEp
OwoJCQlpZiAobWlpX3N0YXR1cyAhPSAweGZmZmYgICYmIG1paV9zdGF0dXMgIT0gMHgwMDAwKSB7
CgkJCQllcC0+cGh5c1twaHlfaWR4KytdID0gcGh5OwoJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6
IE1JSSB0cmFuc2NlaXZlciAjJWQgY29udHJvbCAiCgkJCQkJICAgIiU0LjR4IHN0YXR1cyAlNC40
eC5cbiIKCQkJCQkgICBLRVJOX0lORk8gIiVzOiAgQXV0b25lZ290aWF0aW9uIGFkdmVydGlzaW5n
ICU0LjR4ICIKCQkJCQkgICAibGluayBwYXJ0bmVyICU0LjR4LlxuIiwKCQkJCQkgICBkZXYtPm5h
bWUsIHBoeSwgbWRpb19yZWFkKGlvYWRkciwgcGh5LCAwKSwgbWlpX3N0YXR1cywKCQkJCQkgICBk
ZXYtPm5hbWUsIG1kaW9fcmVhZChpb2FkZHIsIHBoeSwgNCksCgkJCQkJICAgbWRpb19yZWFkKGlv
YWRkciwgcGh5LCA1KSk7CgkJCX0KCQl9CgkJaWYgKHBoeV9pZHggPT0gMCkgewoJCQlwcmludGso
S0VSTl9XQVJOSU5HICIlczogKioqV0FSTklORyoqKjogTm8gTUlJIHRyYW5zY2VpdmVyIGZvdW5k
IVxuIiwKCQkJCSAgIGRldi0+bmFtZSk7CgkJCS8qIFVzZSB0aGUga25vd24gUEhZIGFkZHJlc3Mg
b2YgdGhlIEVQSUkuICovCgkJCWVwLT5waHlzWzBdID0gMzsKCQl9Cgl9CgoJLyogVHVybiBvZmYg
dGhlIE1JSSB4Y3ZyICgxNzUgb25seSEpLCBsZWF2ZSB0aGUgY2hpcCBpbiBsb3ctcG93ZXIgbW9k
ZS4gKi8KCWlmIChjaGlwX2lkeCA9PSAxKQoJCW91dGwoaW5sKGlvYWRkciArIE5WQ1RMKSAmIH4w
eDQ4M0MsIGlvYWRkciArIE5WQ1RMKTsKCW91dGwoMHgwMDA4LCBpb2FkZHIgKyBHRU5DVEwpOwoK
CS8qIFRoZSBsb3dlciBmb3VyIGJpdHMgYXJlIHRoZSBtZWRpYSB0eXBlLiAqLwoJZXAtPmZvcmNl
X2ZkID0gZHVwbGV4OwoJZGV2LT5pZl9wb3J0ID0gZXAtPmRlZmF1bHRfcG9ydCA9IG9wdGlvbjsK
CWlmIChlcC0+ZGVmYXVsdF9wb3J0KQoJCWVwLT5tZWRpYWxvY2sgPSAxOwoKCS8qIFRoZSBFcGlj
LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCglkZXYtPm9wZW4g
PSAmZXBpY19vcGVuOwoJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZXBpY19zdGFydF94bWl0OwoJ
ZGV2LT5zdG9wID0gJmVwaWNfY2xvc2U7CglkZXYtPmdldF9zdGF0cyA9ICZlcGljX2dldF9zdGF0
czsKCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwoJZGV2LT5kb19pb2N0
bCA9ICZtaWlfaW9jdGw7CgoJcmV0dXJuIGRldjsKfQoMCi8qIFNlcmlhbCBFRVBST00gc2VjdGlv
bi4gKi8KCi8qICBFRVBST01fQ3RybCBiaXRzLiAqLwojZGVmaW5lIEVFX1NISUZUX0NMSwkweDA0
CS8qIEVFUFJPTSBzaGlmdCBjbG9jay4gKi8KI2RlZmluZSBFRV9DUwkJCTB4MDIJLyogRUVQUk9N
IGNoaXAgc2VsZWN0LiAqLwojZGVmaW5lIEVFX0RBVEFfV1JJVEUJMHgwOAkvKiBFRVBST00gY2hp
cCBkYXRhIGluLiAqLwojZGVmaW5lIEVFX1dSSVRFXzAJCTB4MDEKI2RlZmluZSBFRV9XUklURV8x
CQkweDA5CiNkZWZpbmUgRUVfREFUQV9SRUFECTB4MTAJLyogRUVQUk9NIGNoaXAgZGF0YSBvdXQu
ICovCiNkZWZpbmUgRUVfRU5CCQkJKDB4MDAwMSB8IEVFX0NTKQoKLyogRGVsYXkgYmV0d2VlbiBF
RVBST00gY2xvY2sgdHJhbnNpdGlvbnMuCiAgIE5vIGV4dHJhIGRlbGF5IGlzIG5lZWRlZCB3aXRo
IDMzTWh6IFBDSSwgYnV0IDY2TWh6IGlzIHVudGVzdGVkLgogKi8KCiNkZWZpbmUgZWVwcm9tX2Rl
bGF5KCkJaW5sKGVlX2FkZHIpCgovKiBUaGUgRUVQUk9NIGNvbW1hbmRzIGluY2x1ZGUgdGhlIGFs
d2F5LXNldCBsZWFkaW5nIGJpdC4gKi8KI2RlZmluZSBFRV9XUklURV9DTUQJKDUgPDwgNikKI2Rl
ZmluZSBFRV9SRUFENjRfQ01ECSg2IDw8IDYpCiNkZWZpbmUgRUVfUkVBRDI1Nl9DTUQJKDYgPDwg
OCkKI2RlZmluZSBFRV9FUkFTRV9DTUQJKDcgPDwgNikKCnN0YXRpYyBpbnQgcmVhZF9lZXByb20o
bG9uZyBpb2FkZHIsIGludCBsb2NhdGlvbikKewoJaW50IGk7CglpbnQgcmV0dmFsID0gMDsKCWxv
bmcgZWVfYWRkciA9IGlvYWRkciArIEVFQ1RMOwoJaW50IHJlYWRfY21kID0gbG9jYXRpb24gfAoJ
CShpbmwoZWVfYWRkcikgJiAweDQwID8gRUVfUkVBRDY0X0NNRCA6IEVFX1JFQUQyNTZfQ01EKTsK
CglvdXRsKEVFX0VOQiAmIH5FRV9DUywgZWVfYWRkcik7CglvdXRsKEVFX0VOQiwgZWVfYWRkcik7
CgoJLyogU2hpZnQgdGhlIHJlYWQgY29tbWFuZCBiaXRzIG91dC4gKi8KCWZvciAoaSA9IDEyOyBp
ID49IDA7IGktLSkgewoJCXNob3J0IGRhdGF2YWwgPSAocmVhZF9jbWQgJiAoMSA8PCBpKSkgPyBF
RV9XUklURV8xIDogRUVfV1JJVEVfMDsKCQlvdXRsKEVFX0VOQiB8IGRhdGF2YWwsIGVlX2FkZHIp
OwoJCWVlcHJvbV9kZWxheSgpOwoJCW91dGwoRUVfRU5CIHwgZGF0YXZhbCB8IEVFX1NISUZUX0NM
SywgZWVfYWRkcik7CgkJZWVwcm9tX2RlbGF5KCk7Cgl9CglvdXRsKEVFX0VOQiwgZWVfYWRkcik7
CgoJZm9yIChpID0gMTY7IGkgPiAwOyBpLS0pIHsKCQlvdXRsKEVFX0VOQiB8IEVFX1NISUZUX0NM
SywgZWVfYWRkcik7CgkJZWVwcm9tX2RlbGF5KCk7CgkJcmV0dmFsID0gKHJldHZhbCA8PCAxKSB8
ICgoaW5sKGVlX2FkZHIpICYgRUVfREFUQV9SRUFEKSA/IDEgOiAwKTsKCQlvdXRsKEVFX0VOQiwg
ZWVfYWRkcik7CgkJZWVwcm9tX2RlbGF5KCk7Cgl9CgoJLyogVGVybWluYXRlIHRoZSBFRVBST00g
YWNjZXNzLiAqLwoJb3V0bChFRV9FTkIgJiB+RUVfQ1MsIGVlX2FkZHIpOwoJcmV0dXJuIHJldHZh
bDsKfQoKI2RlZmluZSBNSUlfUkVBRE9QCQkxCiNkZWZpbmUgTUlJX1dSSVRFT1AJCTIKc3RhdGlj
IGludCBtZGlvX3JlYWQobG9uZyBpb2FkZHIsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKewoJ
aW50IGk7CgoJb3V0bCgocGh5X2lkIDw8IDkpIHwgKGxvY2F0aW9uIDw8IDQpIHwgTUlJX1JFQURP
UCwgaW9hZGRyICsgTUlJQ3RybCk7CgkvKiBUeXBpY2FsIG9wZXJhdGlvbiB0YWtlcyA8IDUwIHRp
Y2tzLiAqLwoJZm9yIChpID0gNDAwMDsgaSA+IDA7IGktLSkKCQlpZiAoKGlubChpb2FkZHIgKyBN
SUlDdHJsKSAmIE1JSV9SRUFET1ApID09IDApCgkJCXJldHVybiBpbncoaW9hZGRyICsgTUlJRGF0
YSk7CglyZXR1cm4gMHhmZmZmOwp9CgpzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKGxvbmcgaW9hZGRy
LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSkKewoJaW50IGk7CgoJb3V0dyh2
YWx1ZSwgaW9hZGRyICsgTUlJRGF0YSk7CglvdXRsKChwaHlfaWQgPDwgOSkgfCAobG9jYXRpb24g
PDwgNCkgfCBNSUlfV1JJVEVPUCwgaW9hZGRyICsgTUlJQ3RybCk7Cglmb3IgKGkgPSAxMDAwMDsg
aSA+IDA7IGktLSkgewoJCWlmICgoaW5sKGlvYWRkciArIE1JSUN0cmwpICYgTUlJX1dSSVRFT1Ap
ID09IDApCgkJCWJyZWFrOwoJfQoJcmV0dXJuOwp9CgoMCnN0YXRpYyBpbnQKZXBpY19vcGVuKHN0
cnVjdCBkZXZpY2UgKmRldikKewoJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSAoc3RydWN0IGVw
aWNfcHJpdmF0ZSAqKWRldi0+cHJpdjsKCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Cglp
bnQgaTsKCWludCBtaWlfcmVnNTsKCWVwLT5mdWxsX2R1cGxleCA9IGVwLT5mb3JjZV9mZDsKCgkv
KiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwoJb3V0bCgweDQwMDEsIGlvYWRkciArIEdFTkNUTCk7
CgoJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmZXBpY19pbnRlcnJ1cHQsIFNBX1NISVJRLCBk
ZXYtPm5hbWUsIGRldikpCgkJcmV0dXJuIC1FQUdBSU47CgoJTU9EX0lOQ19VU0VfQ09VTlQ7CgoJ
ZXBpY19pbml0X3JpbmcoZGV2KTsKCglvdXRsKDB4NDAwMCwgaW9hZGRyICsgR0VOQ1RMKTsKCS8q
IFRoaXMgbmV4dCBtYWdpYyEgbGluZSBieSBLZW4gWWFtYWd1Y2hpLi4gPz8gKi8KCW91dGwoMHgw
MDA4LCBpb2FkZHIgKyBURVNUMSk7CgoJLyogUHVsbCB0aGUgY2hpcCBvdXQgb2YgbG93LXBvd2Vy
IG1vZGUsIGVuYWJsZSBpbnRlcnJ1cHRzLCBhbmQgc2V0IGZvcgoJICAgUENJIHJlYWQgbXVsdGlw
bGUuICBUaGUgTUlJY2ZnIHNldHRpbmcgYW5kIHN0cmFuZ2Ugd3JpdGUgb3JkZXIgYXJlCgkgICBy
ZXF1aXJlZCBieSB0aGUgZGV0YWlscyBvZiB3aGljaCBiaXRzIGFyZSByZXNldCBhbmQgdGhlIHRy
YW5zY2VpdmVyCgkgICB3aXJpbmcgb24gdGhlIE9zaXRlY2ggQ2FyZEJ1cyBjYXJkLgoJKi8KCW91
dGwoMHgxMiwgaW9hZGRyICsgTUlJQ2ZnKTsKCWlmIChlcC0+Y2hpcF9mbGFncyAmIE1JSV9QV1JE
V04pCgkJb3V0bCgoaW5sKGlvYWRkciArIE5WQ1RMKSAmIH4weDAwM0MpIHwgMHg0ODAwLCBpb2Fk
ZHIgKyBOVkNUTCk7CgojaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJj
X18pCQkvKiBCaWcgZW5kaWFuICovCglvdXRsKDB4NDQzMiB8IChSWF9GSUZPX1RIUkVTSDw8OCks
IGlvYWRkciArIEdFTkNUTCk7CglpbmwoaW9hZGRyICsgR0VOQ1RMKTsKCW91dGwoMHgwNDMyIHwg
KFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKI2Vsc2UKCW91dGwoMHg0NDEy
IHwgKFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKCWlubChpb2FkZHIgKyBH
RU5DVEwpOwoJb3V0bCgweDA0MTIgfCAoUlhfRklGT19USFJFU0g8PDgpLCBpb2FkZHIgKyBHRU5D
VEwpOwojZW5kaWYKCglmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQoJCW91dGwoKCh1MTYqKWRldi0+
ZGV2X2FkZHIpW2ldLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKCglvdXRsKFRYX0ZJRk9fVEhSRVNI
LCBpb2FkZHIgKyBUeFRocmVzaCk7CgoJaWYgKGRldi0+aWZfcG9ydCA9PSAxKSB7CgkJaWYgKGVw
aWNfZGVidWcgPiAxKQoJCQlwcmludGsoS0VSTl9JTkZPICIlczogVXNpbmcgdGhlIDEwYmFzZTIg
dHJhbnNjZWl2ZXIsIE1JSSAiCgkJCQkgICAic3RhdHVzICU0LjR4LlxuIiwKCQkJCSAgIGRldi0+
bmFtZSwgbWRpb19yZWFkKGlvYWRkciwgZXAtPnBoeXNbMF0sIDEpKTsKCQltZGlvX3dyaXRlKGlv
YWRkciwgZXAtPnBoeXNbMF0sIDAsIDB4MDQwMCk7CS8qIElzb2xhdGUgTUlJIHhjdnIuICovCgkJ
b3V0bCgweDEzLCBpb2FkZHIgKyBNSUlDZmcpOwoJfSBlbHNlIHsKCQltaWlfcmVnNSA9IG1kaW9f
cmVhZChpb2FkZHIsIGVwLT5waHlzWzBdLCA1KTsKCQlpZiAobWlpX3JlZzUgIT0gMHhmZmZmKSB7
CgkJCWlmICgobWlpX3JlZzUgJiAweDAxMDApIHx8IChtaWlfcmVnNSAmIDB4MDFDMCkgPT0gMHgw
MDQwKQoJCQkJZXAtPmZ1bGxfZHVwbGV4ID0gMTsKCQllbHNlIGlmICghIChtaWlfcmVnNSAmIDB4
NDAwMCkpCgkJCW1kaW9fd3JpdGUoaW9hZGRyLCBlcC0+cGh5c1swXSwgMCwgMHgxMjAwKTsKCQkJ
aWYgKGVwaWNfZGVidWcgPiAxKQoJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgJXMt
ZHVwbGV4IGJhc2VkIG9uIE1JSSB4Y3ZyICVkIgoJCQkJCSAgICIgcmVnaXN0ZXIgcmVhZCBvZiAl
NC40eC5cbiIsIGRldi0+bmFtZSwKCQkJCQkgICBlcC0+ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAi
aGFsZiIsCgkJCQkJICAgZXAtPnBoeXNbMF0sIG1paV9yZWc1KTsKCQl9Cgl9CgoJb3V0bChlcC0+
ZnVsbF9kdXBsZXggPyAweDdGIDogMHg3OSwgaW9hZGRyICsgVHhDdHJsKTsKCW91dGwodmlydF90
b19idXMoZXAtPnJ4X3JpbmcpLCBpb2FkZHIgKyBQUnhDREFSKTsKCW91dGwodmlydF90b19idXMo
ZXAtPnR4X3JpbmcpLCBpb2FkZHIgKyBQVHhDREFSKTsKCgkvKiBTdGFydCB0aGUgY2hpcCdzIFJ4
IHByb2Nlc3MuICovCglzZXRfcnhfbW9kZShkZXYpOwoJb3V0bChTdGFydFJ4IHwgUnhRdWV1ZWQs
IGlvYWRkciArIENPTU1BTkQpOwoKCWRldi0+dGJ1c3kgPSAwOwoJZGV2LT5pbnRlcnJ1cHQgPSAw
OwoJZGV2LT5zdGFydCA9IDE7CgoJLyogRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUg
aW50ZXJydXB0IG1hc2suICovCglvdXRsKChlcC0+Y2hpcF9mbGFncyAmIFRZUEUyX0lOVFIgPyBQ
Q0lCdXNFcnIxNzUgOiBQQ0lCdXNFcnIxNzApCgkJIHwgQ250RnVsbCB8IFR4VW5kZXJydW4gfCBU
eERvbmUgfCBUeEVtcHR5CgkJIHwgUnhFcnJvciB8IFJ4T3ZlcmZsb3cgfCBSeEZ1bGwgfCBSeEhl
YWRlciB8IFJ4RG9uZSwKCQkgaW9hZGRyICsgSU5UTUFTSyk7CgoJaWYgKGVwaWNfZGVidWcgPiAx
KQoJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXBpY19vcGVuKCkgaW9hZGRyICVseCBJUlEgJWQg
c3RhdHVzICU0LjR4ICIKCQkJICAgIiVzLWR1cGxleC5cbiIsCgkJCSAgIGRldi0+bmFtZSwgaW9h
ZGRyLCBkZXYtPmlycSwgaW5sKGlvYWRkciArIEdFTkNUTCksCgkJCSAgIGVwLT5mdWxsX2R1cGxl
eCA/ICJmdWxsIiA6ICJoYWxmIik7CgoJLyogU2V0IHRoZSB0aW1lciB0byBzd2l0Y2ggdG8gY2hl
Y2sgZm9yIGxpbmsgYmVhdCBhbmQgcGVyaGFwcyBzd2l0Y2gKCSAgIHRvIGFuIGFsdGVybmF0ZSBt
ZWRpYSB0eXBlLiAqLwoJaW5pdF90aW1lcigmZXAtPnRpbWVyKTsKCWVwLT50aW1lci5leHBpcmVz
ID0gUlVOX0FUKCgyNCpIWikvMTApOwkJCS8qIDIuNCBzZWMuICovCgllcC0+dGltZXIuZGF0YSA9
ICh1bnNpZ25lZCBsb25nKWRldjsKCWVwLT50aW1lci5mdW5jdGlvbiA9ICZlcGljX3RpbWVyOwkJ
CQkvKiB0aW1lciBoYW5kbGVyICovCglhZGRfdGltZXIoJmVwLT50aW1lcik7CgoJcmV0dXJuIDA7
Cn0KCi8qIFJlc2V0IHRoZSBjaGlwIHRvIHJlY292ZXIgZnJvbSBhIFBDSSB0cmFuc2FjdGlvbiBl
cnJvci4KICAgVGhpcyBtYXkgb2NjdXIgYXQgaW50ZXJydXB0IHRpbWUuICovCnN0YXRpYyB2b2lk
IGVwaWNfcGF1c2Uoc3RydWN0IGRldmljZSAqZGV2KQp7Cglsb25nIGlvYWRkciA9IGRldi0+YmFz
ZV9hZGRyOwoJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSAoc3RydWN0IGVwaWNfcHJpdmF0ZSAq
KWRldi0+cHJpdjsKCgkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVy
cnVwdCBtYXNrLiAqLwoJb3V0bCgweDAwMDAwMDAwLCBpb2FkZHIgKyBJTlRNQVNLKTsKCS8qIFN0
b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggRE1BIHByb2Nlc3Nlcy4gKi8KCW91dHcoU3RvcFJ4IHwg
U3RvcFR4RE1BIHwgU3RvcFJ4RE1BLCBpb2FkZHIgKyBDT01NQU5EKTsKCgkvKiBVcGRhdGUgdGhl
IGVycm9yIGNvdW50cy4gKi8KCWlmIChpbncoaW9hZGRyICsgQ09NTUFORCkgIT0gMHhmZmZmKSB7
CgkJZXAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5iKGlvYWRkciArIE1QQ05UKTsKCQll
cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGluYihpb2FkZHIgKyBBTElDTlQpOwoJCWVwLT5z
dGF0cy5yeF9jcmNfZXJyb3JzICs9IGluYihpb2FkZHIgKyBDUkNDTlQpOwoJfQoKCS8qIFJlbW92
ZSB0aGUgcGFja2V0cyBvbiB0aGUgUnggcXVldWUuICovCgllcGljX3J4KGRldik7Cn0KCnN0YXRp
YyB2b2lkIGVwaWNfcmVzdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpCnsKCWxvbmcgaW9hZGRyID0g
ZGV2LT5iYXNlX2FkZHI7CglzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IChzdHJ1Y3QgZXBpY19w
cml2YXRlICopZGV2LT5wcml2OwoJaW50IGk7CgoJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXN0
YXJ0aW5nIHRoZSBFUElDIGNoaXAsIFJ4ICVkLyVkIFR4ICVkLyVkLlxuIiwKCQkgICBkZXYtPm5h
bWUsIGVwLT5jdXJfcngsIGVwLT5kaXJ0eV9yeCwgZXAtPmRpcnR5X3R4LCBlcC0+Y3VyX3R4KTsK
CS8qIFNvZnQgcmVzZXQgdGhlIGNoaXAuICovCglvdXRsKDB4MDAwMSwgaW9hZGRyICsgR0VOQ1RM
KTsKCgl1ZGVsYXkoMSk7CgkvKiBEdXBsaWNhdGUgY29kZSBmcm9tIGVwaWNfb3BlbigpLiAqLwoJ
b3V0bCgweDAwMDgsIGlvYWRkciArIFRFU1QxKTsKCiNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8
fCBkZWZpbmVkKF9fc3BhcmNfXykJCS8qIEJpZyBlbmRpYW4gKi8KCW91dGwoMHgwNDMyIHwgKFJY
X0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKI2Vsc2UKCW91dGwoMHgwNDEyIHwg
KFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKI2VuZGlmCglvdXRsKGRldi0+
aWZfcG9ydCA9PSAxID8gMHgxMyA6IDB4MTIsIGlvYWRkciArIE1JSUNmZyk7CglpZiAoZXAtPmNo
aXBfZmxhZ3MgJiBNSUlfUFdSRFdOKQoJCW91dGwoKGlubChpb2FkZHIgKyBOVkNUTCkgJiB+MHgw
MDNDKSB8IDB4NDgwMCwgaW9hZGRyICsgTlZDVEwpOwoKCWZvciAoaSA9IDA7IGkgPCAzOyBpKysp
CgkJb3V0bCgoKHUxNiopZGV2LT5kZXZfYWRkcilbaV0sIGlvYWRkciArIExBTjAgKyBpKjQpOwoK
CW91dGwoVFhfRklGT19USFJFU0gsIGlvYWRkciArIFR4VGhyZXNoKTsKCW91dGwoZXAtPmZ1bGxf
ZHVwbGV4ID8gMHg3RiA6IDB4NzksIGlvYWRkciArIFR4Q3RybCk7CglvdXRsKHZpcnRfdG9fYnVz
KCZlcC0+cnhfcmluZ1tlcC0+Y3VyX3J4JVJYX1JJTkdfU0laRV0pLCBpb2FkZHIgKyBQUnhDREFS
KTsKCW91dGwodmlydF90b19idXMoJmVwLT50eF9yaW5nW2VwLT5kaXJ0eV90eCVUWF9SSU5HX1NJ
WkVdKSwKCQkgaW9hZGRyICsgUFR4Q0RBUik7CgoJLyogU3RhcnQgdGhlIGNoaXAncyBSeCBwcm9j
ZXNzLiAqLwoJc2V0X3J4X21vZGUoZGV2KTsKCW91dGwoU3RhcnRSeCB8IFJ4UXVldWVkLCBpb2Fk
ZHIgKyBDT01NQU5EKTsKCgkvKiBFbmFibGUgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBpbnRl
cnJ1cHQgbWFzay4gKi8KCW91dGwoKGVwLT5jaGlwX2ZsYWdzICYgVFlQRTJfSU5UUiA/IFBDSUJ1
c0VycjE3NSA6IFBDSUJ1c0VycjE3MCkKCQkgfCBDbnRGdWxsIHwgVHhVbmRlcnJ1biB8IFR4RG9u
ZSB8IFR4RW1wdHkKCQkgfCBSeEVycm9yIHwgUnhPdmVyZmxvdyB8IFJ4RnVsbCB8IFJ4SGVhZGVy
IHwgUnhEb25lLAoJCSBpb2FkZHIgKyBJTlRNQVNLKTsKCXByaW50ayhLRVJOX0RFQlVHICIlczog
ZXBpY19yZXN0YXJ0KCkgZG9uZSwgY21kIHN0YXR1cyAlNC40eCwgY3RsICU0LjR4IgoJCSAgICIg
aW50ZXJydXB0ICU0LjR4LlxuIiwKCQkJICAgZGV2LT5uYW1lLCBpbmwoaW9hZGRyICsgQ09NTUFO
RCksIGlubChpb2FkZHIgKyBHRU5DVEwpLAoJCSAgIGlubChpb2FkZHIgKyBJTlRTVEFUKSk7Cgly
ZXR1cm47Cn0KCnN0YXRpYyB2b2lkIGVwaWNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQp7Cglz
dHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CglzdHJ1Y3QgZXBpY19w
cml2YXRlICplcCA9IChzdHJ1Y3QgZXBpY19wcml2YXRlICopZGV2LT5wcml2OwoJbG9uZyBpb2Fk
ZHIgPSBkZXYtPmJhc2VfYWRkcjsKCWludCBuZXh0X3RpY2sgPSA2MCpIWjsKCWludCBtaWlfcmVn
NSA9IG1kaW9fcmVhZChpb2FkZHIsIGVwLT5waHlzWzBdLCA1KTsKCglpZiAoZXBpY19kZWJ1ZyA+
IDMpIHsKCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1lZGlhIG1vbml0b3IgdGljaywgVHggc3Rh
dHVzICU4Ljh4LlxuIiwKCQkJICAgZGV2LT5uYW1lLCBpbmwoaW9hZGRyICsgVHhTVEFUKSk7CgkJ
cHJpbnRrKEtFUk5fREVCVUcgIiVzOiBPdGhlciByZWdpc3RlcnMgYXJlIEludE1hc2sgJTQuNHgg
IgoJCQkgICAiSW50U3RhdHVzICU0LjR4IFJ4U3RhdHVzICU0LjR4LlxuIiwKCQkJICAgZGV2LT5u
YW1lLCBpbmwoaW9hZGRyICsgSU5UTUFTSyksIGlubChpb2FkZHIgKyBJTlRTVEFUKSwKCQkJICAg
aW5sKGlvYWRkciArIFJ4U1RBVCkpOwoJfQoKCWlmIChlcC0+Y3VyX3R4IC0gZXAtPmRpcnR5X3R4
ID4gVFhfUklOR19TSVpFLzIgICYmCgkJamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQgPiBUWF9U
SU1FT1VUKSB7CgkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFR4IGh1bmcsICVkIHZzLiAlZC5c
biIsCgkJCSAgIGRldi0+bmFtZSwgZXAtPmN1cl90eCwgZXAtPmRpcnR5X3R4KTsKCQllcGljX3R4
X3RpbWVvdXQoZGV2KTsKCX0KCglpZiAoISBlcC0+Zm9yY2VfZmQgICYmICBtaWlfcmVnNSAhPSAw
eGZmZmYpIHsKCQlpbnQgZHVwbGV4ID0gKG1paV9yZWc1JjB4MDEwMCkgfHwgKG1paV9yZWc1ICYg
MHgwMUMwKSA9PSAweDAwNDA7CgkJaWYgKGVwLT5mdWxsX2R1cGxleCAhPSBkdXBsZXgpIHsKCQkJ
ZXAtPmZ1bGxfZHVwbGV4ID0gZHVwbGV4OwoJCQlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGlu
ZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJICMlZCBsaW5rIgoJCQkJICAgIiBwYXJ0bmVyIGNhcGFi
aWxpdHkgb2YgJTQuNHguXG4iLCBkZXYtPm5hbWUsCgkJCQkgICBlcC0+ZnVsbF9kdXBsZXggPyAi
ZnVsbCIgOiAiaGFsZiIsIGVwLT5waHlzWzBdLCBtaWlfcmVnNSk7CgkJCW91dGwoZXAtPmZ1bGxf
ZHVwbGV4ID8gMHg3RiA6IDB4NzksIGlvYWRkciArIFR4Q3RybCk7CgkJfQoJfQoKCWVwLT50aW1l
ci5leHBpcmVzID0gUlVOX0FUKG5leHRfdGljayk7CglhZGRfdGltZXIoJmVwLT50aW1lcik7Cn0K
CnN0YXRpYyB2b2lkIGVwaWNfdHhfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYpCnsKCXN0cnVj
dCBlcGljX3ByaXZhdGUgKmVwID0gKHN0cnVjdCBlcGljX3ByaXZhdGUgKilkZXYtPnByaXY7Cgls
b25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwoKCWlmIChlcGljX2RlYnVnID4gMCkgewoJCXBy
aW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCB0aW1lb3V0IHVzaW5nIE1JSSBkZXZpY2Us
ICIKCQkJICAgIlR4IHN0YXR1cyAlNC40eC5cbiIsCgkJCSAgIGRldi0+bmFtZSwgaW53KGlvYWRk
ciArIFR4U1RBVCkpOwoJCWlmIChlcGljX2RlYnVnID4gMSkgewoJCQlwcmludGsoS0VSTl9ERUJV
RyAiJXM6IFR4IGluZGljZXM6IGRpcnR5X3R4ICVkLCBjdXJfdHggJWQuXG4iLAoJCQkJICAgZGV2
LT5uYW1lLCBlcC0+ZGlydHlfdHgsIGVwLT5jdXJfdHgpOwoJCX0KCX0KCWlmIChpbncoaW9hZGRy
ICsgVHhTVEFUKSAmIDB4MTApIHsJCS8qIFR4IEZJRk8gdW5kZXJmbG93LiAqLwoJCWVwLT5zdGF0
cy50eF9maWZvX2Vycm9ycysrOwoJCW91dGwoUmVzdGFydFR4LCBpb2FkZHIgKyBDT01NQU5EKTsK
CX0gZWxzZSB7CgkJZXBpY19yZXN0YXJ0KGRldik7CgkJb3V0bChUeFF1ZXVlZCwgZGV2LT5iYXNl
X2FkZHIgKyBDT01NQU5EKTsKCX0KCglkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKCWVwLT5z
dGF0cy50eF9lcnJvcnMrKzsKCXJldHVybjsKfQoKLyogSW5pdGlhbGl6ZSB0aGUgUnggYW5kIFR4
IHJpbmdzLCBhbG9uZyB3aXRoIHZhcmlvdXMgJ2RldicgYml0cy4gKi8Kc3RhdGljIHZvaWQKZXBp
Y19pbml0X3Jpbmcoc3RydWN0IGRldmljZSAqZGV2KQp7CglzdHJ1Y3QgZXBpY19wcml2YXRlICpl
cCA9IChzdHJ1Y3QgZXBpY19wcml2YXRlICopZGV2LT5wcml2OwoJaW50IGk7CgoJZXAtPnR4X2Z1
bGwgPSAwOwoJZXAtPmN1cl9yeCA9IGVwLT5jdXJfdHggPSAwOwoJZXAtPmRpcnR5X3J4ID0gZXAt
PmRpcnR5X3R4ID0gMDsKCglmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKCQll
cC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAweDgwMDA7CQkvKiBPd25lZCBieSBFcGljIGNoaXAgKi8K
CQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSBQS1RfQlVGX1NaOwoJCXsKCQkJLyogTm90ZSB0
aGUgcmVjZWl2ZSBidWZmZXIgbXVzdCBiZSBsb25nd29yZCBhbGlnbmVkLgoJCQkgICBkZXZfYWxs
b2Nfc2tiKCkgcHJvdmlkZXMgMTYgYnl0ZSBhbGlnbm1lbnQuICBCdXQgZG8gKm5vdCoKCQkJICAg
dXNlIHNrYl9yZXNlcnZlKCkgdG8gYWxpZ24gdGhlIElQIGhlYWRlciEgKi8KCQkJc3RydWN0IHNr
X2J1ZmYgKnNrYjsKCQkJc2tiID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKCQkJZXAtPnJ4
X3NrYnVmZltpXSA9IHNrYjsKCQkJaWYgKHNrYiA9PSBOVUxMKQoJCQkJYnJlYWs7CQkJLyogQmFk
IG5ld3MhICAqLwoJCQlza2ItPmRldiA9IGRldjsJCQkvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkg
dGhpcyBkZXZpY2UuICovCgkJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIEFsaWduIElQIG9uIDE2
IGJ5dGUgYm91bmRhcmllcyAqLwoJCQllcC0+cnhfcmluZ1tpXS5idWZhZGRyID0gdmlydF90b19i
dXMoc2tiLT50YWlsKTsKCQl9CgkJZXAtPnJ4X3JpbmdbaV0ubmV4dCA9IHZpcnRfdG9fYnVzKCZl
cC0+cnhfcmluZ1tpKzFdKTsKCX0KCS8qIE1hcmsgdGhlIGxhc3QgZW50cnkgYXMgd3JhcHBpbmcg
dGhlIHJpbmcuICovCgllcC0+cnhfcmluZ1tpLTFdLm5leHQgPSB2aXJ0X3RvX2J1cygmZXAtPnJ4
X3JpbmdbMF0pOwoKCS8qIFRoZSBUeCBidWZmZXIgZGVzY3JpcHRvciBpcyBmaWxsZWQgaW4gYXMg
bmVlZGVkLCBidXQgd2UKCSAgIGRvIG5lZWQgdG8gY2xlYXIgdGhlIG93bmVyc2hpcCBiaXQuICov
Cglmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKCQllcC0+dHhfc2tidWZmW2ld
ID0gMDsKCQllcC0+dHhfcmluZ1tpXS5zdGF0dXMgPSAweDAwMDA7CgkJZXAtPnR4X3JpbmdbaV0u
bmV4dCA9IHZpcnRfdG9fYnVzKCZlcC0+dHhfcmluZ1tpKzFdKTsKCX0KCWVwLT50eF9yaW5nW2kt
MV0ubmV4dCA9IHZpcnRfdG9fYnVzKCZlcC0+dHhfcmluZ1swXSk7Cn0KCnN0YXRpYyBpbnQKZXBp
Y19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkZXZpY2UgKmRldikKewoJ
c3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSAoc3RydWN0IGVwaWNfcHJpdmF0ZSAqKWRldi0+cHJp
djsKCWludCBlbnRyeTsKCXUzMiBmbGFnOwoKCS8qIEJsb2NrIGEgdGltZXItYmFzZWQgdHJhbnNt
aXQgZnJvbSBvdmVybGFwcGluZy4gIFRoaXMgY291bGQgYmV0dGVyIGJlCgkgICBkb25lIHdpdGgg
YXRvbWljX3N3YXAoMSwgZGV2LT50YnVzeSksIGJ1dCBzZXRfYml0KCkgd29ya3MgYXMgd2VsbC4g
Ki8KCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkKikmZGV2LT50YnVzeSkgIT0gMCkgewoJ
CWlmIChqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydCA8IFRYX1RJTUVPVVQpCgkJCXJldHVybiAx
OwoJCWVwaWNfdHhfdGltZW91dChkZXYpOwoJCXJldHVybiAxOwoJfQoKCS8qIENhdXRpb246IHRo
ZSB3cml0ZSBvcmRlciBpcyBpbXBvcnRhbnQgaGVyZSwgc2V0IHRoZSBiYXNlIGFkZHJlc3MKCSAg
IHdpdGggdGhlICJvd25lcnNoaXAiIGJpdHMgbGFzdC4gKi8KCgkvKiBDYWxjdWxhdGUgdGhlIG5l
eHQgVHggZGVzY3JpcHRvciBlbnRyeS4gKi8KCWVudHJ5ID0gZXAtPmN1cl90eCAlIFRYX1JJTkdf
U0laRTsKCgllcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKCWVwLT50eF9yaW5nW2VudHJ5XS50
eGxlbmd0aCA9IChza2ItPmxlbiA+PSBFVEhfWkxFTiA/IHNrYi0+bGVuIDogRVRIX1pMRU4pOwoJ
ZXAtPnR4X3JpbmdbZW50cnldLmJ1ZmFkZHIgPSB2aXJ0X3RvX2J1cyhza2ItPmRhdGEpOwoJZXAt
PnR4X3JpbmdbZW50cnldLmJ1Zmxlbmd0aCA9IHNrYi0+bGVuOwoKCWlmIChlcC0+Y3VyX3R4IC0g
ZXAtPmRpcnR5X3R4IDwgVFhfUklOR19TSVpFLzIpIHsvKiBUeXBpY2FsIHBhdGggKi8KCQlmbGFn
ID0gMHgxMDsgLyogTm8gaW50ZXJydXB0ICovCgkJY2xlYXJfYml0KDAsICh2b2lkKikmZGV2LT50
YnVzeSk7Cgl9IGVsc2UgaWYgKGVwLT5jdXJfdHggLSBlcC0+ZGlydHlfdHggPT0gVFhfUklOR19T
SVpFLzIpIHsKCQlmbGFnID0gMHgxNDsgLyogVHgtZG9uZSBpbnRyLiAqLwoJCWNsZWFyX2JpdCgw
LCAodm9pZCopJmRldi0+dGJ1c3kpOwoJfSBlbHNlIGlmIChlcC0+Y3VyX3R4IC0gZXAtPmRpcnR5
X3R4IDwgVFhfUklOR19TSVpFIC0gMikgewoJCWZsYWcgPSAweDEwOyAvKiBObyBUeC1kb25lIGlu
dHIuICovCgkJY2xlYXJfYml0KDAsICh2b2lkKikmZGV2LT50YnVzeSk7Cgl9IGVsc2UgewoJCS8q
IExlYXZlIHJvb20gZm9yIHR3byBhZGRpdGlvbmFsIGVudHJpZXMuICovCgkJZmxhZyA9IDB4MTQ7
IC8qIFR4LWRvbmUgaW50ci4gKi8KCQllcC0+dHhfZnVsbCA9IDE7Cgl9CgoJZXAtPnR4X3Jpbmdb
ZW50cnldLmNvbnRyb2wgPSBmbGFnOwoJZXAtPnR4X3JpbmdbZW50cnldLnN0YXR1cyA9IDB4ODAw
MDsJLyogUGFzcyBvd25lcnNoaXAgdG8gdGhlIGNoaXAuICovCgllcC0+Y3VyX3R4Kys7CgkvKiBU
cmlnZ2VyIGFuIGltbWVkaWF0ZSB0cmFuc21pdCBkZW1hbmQuICovCglvdXRsKFR4UXVldWVkLCBk
ZXYtPmJhc2VfYWRkciArIENPTU1BTkQpOwoKCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwoJ
aWYgKGVwaWNfZGVidWcgPiA0KQoJCXByaW50ayhLRVJOX0RFQlVHICIlczogUXVldWVkIFR4IHBh
Y2tldCBzaXplICVkIHRvIHNsb3QgJWQsICIKCQkJICAgImZsYWcgJTIuMnggVHggc3RhdHVzICU4
Ljh4LlxuIiwKCQkJICAgZGV2LT5uYW1lLCAoaW50KXNrYi0+bGVuLCBlbnRyeSwgZmxhZywKCQkJ
ICAgaW5sKGRldi0+YmFzZV9hZGRyICsgVHhTVEFUKSk7CgoJcmV0dXJuIDA7Cn0KCi8qIFRoZSBp
bnRlcnJ1cHQgaGFuZGxlciBkb2VzIGFsbCBvZiB0aGUgUnggdGhyZWFkIHdvcmsgYW5kIGNsZWFu
cyB1cAogICBhZnRlciB0aGUgVHggdGhyZWFkLiAqLwpzdGF0aWMgdm9pZCBlcGljX2ludGVycnVw
dChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7Cglz
dHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRldl9pbnN0YW5jZTsKCXN0cnVj
dCBlcGljX3ByaXZhdGUgKmVwID0gKHN0cnVjdCBlcGljX3ByaXZhdGUgKilkZXYtPnByaXY7Cgls
b25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwoJaW50IHN0YXR1cywgYm9ndXNjbnQgPSBtYXhf
aW50ZXJydXB0X3dvcms7CgojaWYgZGVmaW5lZChfX2kzODZfXykKCS8qIEEgbG9jayB0byBwcmV2
ZW50IHNpbXVsdGFuZW91cyBlbnRyeSBidWcgb24gSW50ZWwgU01QIG1hY2hpbmVzLiAqLwoJaWYg
KHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQqKSZkZXYtPmludGVycnVwdCkpIHsKCQlwcmludGso
S0VSTl9FUlIgIiVzOiBTTVAgc2ltdWx0YW5lb3VzIGVudHJ5IG9mIGFuIGludGVycnVwdCBoYW5k
bGVyLlxuIiwKCQkJICAgZGV2LT5uYW1lKTsKCQlkZXYtPmludGVycnVwdCA9IDA7CS8qIEF2b2lk
IGhhbHRpbmcgbWFjaGluZS4gKi8KCQlyZXR1cm47Cgl9CiNlbHNlCglpZiAoZGV2LT5pbnRlcnJ1
cHQpIHsKCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZS1lbnRlcmluZyB0aGUgaW50ZXJydXB0IGhh
bmRsZXIuXG4iLCBkZXYtPm5hbWUpOwoJCXJldHVybjsKCX0KCWRldi0+aW50ZXJydXB0ID0gMTsK
I2VuZGlmCgoJZG8gewoJCXN0YXR1cyA9IGlubChpb2FkZHIgKyBJTlRTVEFUKTsKCQkvKiBBY2tu
b3dsZWRnZSBhbGwgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHNvdXJjZXMgQVNBUC4gKi8KCQlv
dXRsKHN0YXR1cyAmIDB4MDAwMDdmZmYsIGlvYWRkciArIElOVFNUQVQpOwoKCQlpZiAoZXBpY19k
ZWJ1ZyA+IDQpCgkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBpbnRlcnJ1cHQ9
JSM4Ljh4IG5ldyAiCgkJCQkgICAiaW50c3RhdD0lIzguOHguXG4iLAoJCQkJICAgZGV2LT5uYW1l
LCBzdGF0dXMsIGlubChpb2FkZHIgKyBJTlRTVEFUKSk7CgoJCWlmICgoc3RhdHVzICYgSW50clN1
bW1hcnkpID09IDApCgkJCWJyZWFrOwoKCQlpZiAoc3RhdHVzICYgKFJ4RG9uZSB8IFJ4U3RhcnRl
ZCB8IFJ4RWFybHlXYXJuIHwgUnhPdmVyZmxvdykpCgkJCWVwaWNfcngoZGV2KTsKCgkJaWYgKHN0
YXR1cyAmIChUeEVtcHR5IHwgVHhEb25lKSkgewoJCQlpbnQgZGlydHlfdHg7CgoJCQlmb3IgKGRp
cnR5X3R4ID0gZXAtPmRpcnR5X3R4OyBkaXJ0eV90eCA8IGVwLT5jdXJfdHg7IGRpcnR5X3R4Kysp
IHsKCQkJCWludCBlbnRyeSA9IGRpcnR5X3R4ICUgVFhfUklOR19TSVpFOwoJCQkJaW50IHR4c3Rh
dHVzID0gZXAtPnR4X3JpbmdbZW50cnldLnN0YXR1czsKCgkJCQlpZiAodHhzdGF0dXMgPCAwKQoJ
CQkJCWJyZWFrOwkJCS8qIEl0IHN0aWxsIGhhc24ndCBiZWVuIFR4ZWQgKi8KCgkJCQlpZiAoICEg
KHR4c3RhdHVzICYgMHgwMDAxKSkgewoJCQkJCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwg
bG9nIGl0LiAqLwojaWZuZGVmIGZpbmFsX3ZlcnNpb24KCQkJCQlpZiAoZXBpY19kZWJ1ZyA+IDEp
CgkJCQkJCXByaW50aygiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAoJ
CQkJCQkJICAgZGV2LT5uYW1lLCB0eHN0YXR1cyk7CiNlbmRpZgoJCQkJCWVwLT5zdGF0cy50eF9l
cnJvcnMrKzsKCQkJCQlpZiAodHhzdGF0dXMgJiAweDEwNTApIGVwLT5zdGF0cy50eF9hYm9ydGVk
X2Vycm9ycysrOwoJCQkJCWlmICh0eHN0YXR1cyAmIDB4MDAwOCkgZXAtPnN0YXRzLnR4X2NhcnJp
ZXJfZXJyb3JzKys7CgkJCQkJaWYgKHR4c3RhdHVzICYgMHgwMDQwKSBlcC0+c3RhdHMudHhfd2lu
ZG93X2Vycm9ycysrOwoJCQkJCWlmICh0eHN0YXR1cyAmIDB4MDAxMCkgZXAtPnN0YXRzLnR4X2Zp
Zm9fZXJyb3JzKys7CiNpZmRlZiBFVEhFUl9TVEFUUwoJCQkJCWlmICh0eHN0YXR1cyAmIDB4MTAw
MCkgZXAtPnN0YXRzLmNvbGxpc2lvbnMxNisrOwojZW5kaWYKCQkJCX0gZWxzZSB7CiNpZmRlZiBF
VEhFUl9TVEFUUwoJCQkJCWlmICgodHhzdGF0dXMgJiAweDAwMDIpICE9IDApIGVwLT5zdGF0cy50
eF9kZWZlcnJlZCsrOwojZW5kaWYKCQkJCQllcC0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhzdGF0
dXMgPj4gOCkgJiAxNTsKCQkJCQllcC0+c3RhdHMudHhfcGFja2V0cysrOwojaWYgTElOVVhfVkVS
U0lPTl9DT0RFID4gMHgyMDEyNwoJCQkJCWVwLT5zdGF0cy50eF9ieXRlcyArPSBlcC0+dHhfcmlu
Z1tlbnRyeV0udHhsZW5ndGg7CiNlbmRpZgoJCQkJfQoKCQkJCS8qIEZyZWUgdGhlIG9yaWdpbmFs
IHNrYi4gKi8KCQkJCURFVl9GUkVFX1NLQihlcC0+dHhfc2tidWZmW2VudHJ5XSk7CgkJCQllcC0+
dHhfc2tidWZmW2VudHJ5XSA9IDA7CgkJCX0KCiNpZm5kZWYgZmluYWxfdmVyc2lvbgoJCQlpZiAo
ZXAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7CgkJCQlwcmludGsoIiVzOiBP
dXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWQuXG4iLAoJCQkJCSAg
IGRldi0+bmFtZSwgZGlydHlfdHgsIGVwLT5jdXJfdHgsIGVwLT50eF9mdWxsKTsKCQkJCWRpcnR5
X3R4ICs9IFRYX1JJTkdfU0laRTsKCQkJfQojZW5kaWYKCgkJCWlmIChlcC0+dHhfZnVsbCAmJiBk
ZXYtPnRidXN5CgkJCQkmJiBkaXJ0eV90eCA+IGVwLT5jdXJfdHggLSBUWF9SSU5HX1NJWkUgKyAy
KSB7CgkJCQkvKiBUaGUgcmluZyBpcyBubyBsb25nZXIgZnVsbCwgY2xlYXIgdGJ1c3kuICovCgkJ
CQllcC0+dHhfZnVsbCA9IDA7CgkJCQljbGVhcl9iaXQoMCwgKHZvaWQqKSZkZXYtPnRidXN5KTsK
CQkJCW1hcmtfYmgoTkVUX0JIKTsKCQkJfQoKCQkJZXAtPmRpcnR5X3R4ID0gZGlydHlfdHg7CgkJ
fQoKCQkvKiBDaGVjayB1bmNvbW1vbiBldmVudHMgYWxsIGF0IG9uY2UuICovCgkJaWYgKHN0YXR1
cyAmIChDbnRGdWxsIHwgVHhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfCBSeEZ1bGwgfAoJCQkJCSAg
UENJQnVzRXJyMTcwIHwgUENJQnVzRXJyMTc1KSkgewoJCQlpZiAoc3RhdHVzID09IDB4ZmZmZmZm
ZmYpIC8qIENoaXAgZmFpbGVkIG9yIHJlbW92ZWQgKENhcmRCdXMpLiAqLwoJCQkJYnJlYWs7CgkJ
CS8qIEFsd2F5cyB1cGRhdGUgdGhlIGVycm9yIGNvdW50cyB0byBhdm9pZCBvdmVyaGVhZCBsYXRl
ci4gKi8KCQkJZXAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5iKGlvYWRkciArIE1QQ05U
KTsKCQkJZXAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmIoaW9hZGRyICsgQUxJQ05UKTsK
CQkJZXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaW5iKGlvYWRkciArIENSQ0NOVCk7CgoJCQlp
ZiAoc3RhdHVzICYgVHhVbmRlcnJ1bikgeyAvKiBUeCBGSUZPIHVuZGVyZmxvdy4gKi8KCQkJCWVw
LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwoJCQkJb3V0bCgxNTM2LCBpb2FkZHIgKyBUeFRocmVz
aCk7CgkJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwoJCQkJb3V0bChSZXN0
YXJ0VHgsIGlvYWRkciArIENPTU1BTkQpOwoJCQl9CgkJCWlmIChzdGF0dXMgJiBSeE92ZXJmbG93
KSB7CQkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KCQkJCWVwLT5zdGF0cy5yeF9lcnJvcnMrKzsK
CQkJfQoJCQlpZiAoc3RhdHVzICYgKFJ4T3ZlcmZsb3cgfCBSeEZ1bGwpKQoJCQkJb3V0dyhSeFF1
ZXVlZCwgaW9hZGRyICsgQ09NTUFORCk7CgkJCWlmIChzdGF0dXMgJiBQQ0lCdXNFcnIxNzApIHsK
CQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBCdXMgRXJyb3IhICBFUElDIHN0YXR1cyAlNC40
eC5cbiIsCgkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOwoJCQkJZXBpY19wYXVzZShkZXYpOwoJ
CQkJZXBpY19yZXN0YXJ0KGRldik7CgkJCX0KCQkJLyogQ2xlYXIgYWxsIGVycm9yIHNvdXJjZXMu
ICovCgkJCW91dGwoc3RhdHVzICYgMHg3ZjE4LCBpb2FkZHIgKyBJTlRTVEFUKTsKCQl9CgkJaWYg
KC0tYm9ndXNjbnQgPCAwKSB7CgkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRvbyBtdWNoIHdvcmsg
YXQgaW50ZXJydXB0LCAiCgkJCQkgICAiSW50clN0YXR1cz0weCU4Ljh4LlxuIiwKCQkJCSAgIGRl
di0+bmFtZSwgc3RhdHVzKTsKCQkJLyogQ2xlYXIgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLwoJ
CQlvdXRsKDB4MDAwMWZmZmYsIGlvYWRkciArIElOVFNUQVQpOwoJCQlicmVhazsKCQl9Cgl9IHdo
aWxlICgxKTsKCglpZiAoZXBpY19kZWJ1ZyA+IDMpCgkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBl
eGl0aW5nIGludGVycnVwdCwgaW50cl9zdGF0dXM9JSM0LjR4LlxuIiwKCQkJICAgZGV2LT5uYW1l
LCBpbmwoaW9hZGRyICsgSU5UU1RBVCkpOwoKI2lmIGRlZmluZWQoX19pMzg2X18pCgljbGVhcl9i
aXQoMCwgKHZvaWQqKSZkZXYtPmludGVycnVwdCk7CiNlbHNlCglkZXYtPmludGVycnVwdCA9IDA7
CiNlbmRpZgoJcmV0dXJuOwp9CgpzdGF0aWMgaW50IGVwaWNfcngoc3RydWN0IGRldmljZSAqZGV2
KQp7CglzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IChzdHJ1Y3QgZXBpY19wcml2YXRlICopZGV2
LT5wcml2OwoJaW50IGVudHJ5ID0gZXAtPmN1cl9yeCAlIFJYX1JJTkdfU0laRTsKCWludCByeF93
b3JrX2xpbWl0ID0gZXAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gZXAtPmN1cl9yeDsKCWlu
dCB3b3JrX2RvbmUgPSAwOwoKCWlmIChlcGljX2RlYnVnID4gNCkKCQlwcmludGsoS0VSTl9ERUJV
RyAiIEluIGVwaWNfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLCBlbnRyeSwKCQkJICAgZXAtPnJ4
X3JpbmdbZW50cnldLnN0YXR1cyk7CgkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0J3Mg
YSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwoJd2hpbGUgKGVwLT5yeF9yaW5nW2VudHJ5XS5z
dGF0dXMgPj0gMCkgewoJCWludCBzdGF0dXMgPSBlcC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzOwoK
CQlpZiAoZXBpY19kZWJ1ZyA+IDQpCgkJCXByaW50ayhLRVJOX0RFQlVHICIgIGVwaWNfcngoKSBz
dGF0dXMgd2FzICU4Ljh4LlxuIiwgc3RhdHVzKTsKCQlpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkK
CQkJYnJlYWs7CgkJaWYgKHN0YXR1cyAmIDB4MjAwNikgewoJCQlpZiAoc3RhdHVzICYgMHgyMDAw
KSB7CgkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1l
IHNwYW5uZWQgIgoJCQkJCSAgICJtdWx0aXBsZSBidWZmZXJzLCBzdGF0dXMgJTQuNHghXG4iLCBk
ZXYtPm5hbWUsIHN0YXR1cyk7CgkJCQllcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwoJCQl9
IGVsc2UgaWYgKHN0YXR1cyAmIDB4MDAwNikKCQkJCS8qIFJ4IEZyYW1lIGVycm9ycyBhcmUgY291
bnRlZCBpbiBoYXJkd2FyZS4gKi8KCQkJCWVwLT5zdGF0cy5yeF9lcnJvcnMrKzsKCQl9IGVsc2Ug
ewoJCQkvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlciwgY29tcGF0aWJsZSB3aXRoIG5ldC0yZS4gKi8K
CQkJLyogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLiAqLwoJCQlzaG9y
dCBwa3RfbGVuID0gZXAtPnJ4X3JpbmdbZW50cnldLnJ4bGVuZ3RoIC0gNDsKCQkJc3RydWN0IHNr
X2J1ZmYgKnNrYjsKCgkJCWlmIChwa3RfbGVuID4gUEtUX0JVRl9TWiAtIDQpIHsKCQkJCXByaW50
ayhLRVJOX0VSUiAiJXM6IE92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSwgc3RhdHVzICV4ICIKCQkJ
CQkgICAiJWQgYnl0ZXMuXG4iLAoJCQkJCSAgIGRldi0+bmFtZSwgcGt0X2xlbiwgc3RhdHVzKTsK
CQkJCXBrdF9sZW4gPSAxNTE0OwoJCQl9CgkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9u
ZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwoJCQkgICB0byBhIG1pbmltYWxseS1z
aXplZCBza2J1ZmYuICovCgkJCWlmIChwa3RfbGVuIDwgcnhfY29weWJyZWFrCgkJCQkmJiAoc2ti
ID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMikpICE9IE5VTEwpIHsKCQkJCXNrYi0+ZGV2ID0g
ZGV2OwoJCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBhbGlnbiB0aGUgSVAgaGVh
ZGVyICovCiNpZiAxIC8qIFVTRV9JUF9DT1BZU1VNICovCgkJCQlldGhfY29weV9hbmRfc3VtKHNr
YiwgYnVzX3RvX3ZpcnQoZXAtPnJ4X3JpbmdbZW50cnldLmJ1ZmFkZHIpLAoJCQkJCQkJCSBwa3Rf
bGVuLCAwKTsKCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKI2Vsc2UKCQkJCW1lbWNweShza2Jf
cHV0KHNrYiwgcGt0X2xlbiksCgkJCQkJICAgYnVzX3RvX3ZpcnQoZXAtPnJ4X3JpbmdbZW50cnld
LmJ1ZmFkZHIpLCBwa3RfbGVuKTsKI2VuZGlmCgkJCX0gZWxzZSB7CgkJCQlza2JfcHV0KHNrYiA9
IGVwLT5yeF9za2J1ZmZbZW50cnldLCBwa3RfbGVuKTsKCQkJCWVwLT5yeF9za2J1ZmZbZW50cnld
ID0gTlVMTDsKCQkJfQoJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYp
OwoJCQluZXRpZl9yeChza2IpOwoJCQllcC0+c3RhdHMucnhfcGFja2V0cysrOwojaWYgTElOVVhf
VkVSU0lPTl9DT0RFID4gMHgyMDEyNwoJCQllcC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsK
I2VuZGlmCgkJfQoJCXdvcmtfZG9uZSsrOwoJCWVudHJ5ID0gKCsrZXAtPmN1cl9yeCkgJSBSWF9S
SU5HX1NJWkU7Cgl9CgoJLyogUmVmaWxsIHRoZSBSeCByaW5nIGJ1ZmZlcnMuICovCglmb3IgKDsg
ZXAtPmN1cl9yeCAtIGVwLT5kaXJ0eV9yeCA+IDA7IGVwLT5kaXJ0eV9yeCsrKSB7CgkJZW50cnkg
PSBlcC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkU7CgkJaWYgKGVwLT5yeF9za2J1ZmZbZW50cnld
ID09IE5VTEwpIHsKCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCQkJc2tiID0gZXAtPnJ4X3NrYnVm
ZltlbnRyeV0gPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opOwoJCQlpZiAoc2tiID09IE5VTEwp
CgkJCQlicmVhazsKCQkJc2tiLT5kZXYgPSBkZXY7CQkJLyogTWFyayBhcyBiZWluZyB1c2VkIGJ5
IHRoaXMgZGV2aWNlLiAqLwoJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiBBbGlnbiBJUCBvbiAx
NiBieXRlIGJvdW5kYXJpZXMgKi8KCQkJZXAtPnJ4X3JpbmdbZW50cnldLmJ1ZmFkZHIgPSB2aXJ0
X3RvX2J1cyhza2ItPnRhaWwpOwoJCQl3b3JrX2RvbmUrKzsKCQl9CgkJZXAtPnJ4X3JpbmdbZW50
cnldLnN0YXR1cyA9IDB4ODAwMDsKCX0KCXJldHVybiB3b3JrX2RvbmU7Cn0KCnN0YXRpYyBpbnQg
ZXBpY19jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXYpCnsKCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNl
X2FkZHI7CglzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IChzdHJ1Y3QgZXBpY19wcml2YXRlICop
ZGV2LT5wcml2OwoJaW50IGk7CgoJZGV2LT5zdGFydCA9IDA7CglkZXYtPnRidXN5ID0gMTsKCglp
ZiAoZXBpY19kZWJ1ZyA+IDEpCgkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3du
IGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMi4yeC5cbiIsCgkJCSAgIGRldi0+bmFtZSwgaW5sKGlv
YWRkciArIElOVFNUQVQpKTsKCgllcGljX3BhdXNlKGRldik7CglkZWxfdGltZXIoJmVwLT50aW1l
cik7CglmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKCgkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBp
biB0aGUgUnggcXVldWUuICovCglmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsK
CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZXAtPnJ4X3NrYnVmZltpXTsKCQllcC0+cnhfc2tidWZm
W2ldID0gMDsKCQllcC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwkJLyogTm90IG93bmVkIGJ5IEVw
aWMgY2hpcC4gKi8KCQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSAwOwoJCWVwLT5yeF9yaW5n
W2ldLmJ1ZmFkZHIgPSAweEJBREYwMEQwOyAvKiBBbiBpbnZhbGlkIGFkZHJlc3MuICovCgkJaWYg
KHNrYikgewojaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgMHgyMDEwMAoJCQlza2ItPmZyZWUgPSAx
OwojZW5kaWYKCQkJREVWX0ZSRUVfU0tCKHNrYik7CgkJfQoJfQoJZm9yIChpID0gMDsgaSA8IFRY
X1JJTkdfU0laRTsgaSsrKSB7CgkJaWYgKGVwLT50eF9za2J1ZmZbaV0pCgkJCURFVl9GUkVFX1NL
QihlcC0+dHhfc2tidWZmW2ldKTsKCQllcC0+dHhfc2tidWZmW2ldID0gMDsKCX0KCgkvKiBHcmVl
biEgTGVhdmUgdGhlIGNoaXAgaW4gbG93LXBvd2VyIG1vZGUuICovCglvdXRsKDB4MDAwOCwgaW9h
ZGRyICsgR0VOQ1RMKTsKCglNT0RfREVDX1VTRV9DT1VOVDsKCXJldHVybiAwOwp9CgpzdGF0aWMg
c3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVwaWNfZ2V0X3N0YXRzKHN0cnVjdCBkZXZpY2UgKmRl
dikKewoJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSAoc3RydWN0IGVwaWNfcHJpdmF0ZSAqKWRl
di0+cHJpdjsKCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CgoJaWYgKGRldi0+c3RhcnQp
IHsKCQkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KCQllcC0+c3RhdHMucnhfbWlzc2Vk
X2Vycm9ycyArPSBpbmIoaW9hZGRyICsgTVBDTlQpOwoJCWVwLT5zdGF0cy5yeF9mcmFtZV9lcnJv
cnMgKz0gaW5iKGlvYWRkciArIEFMSUNOVCk7CgkJZXAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0g
aW5iKGlvYWRkciArIENSQ0NOVCk7Cgl9CgoJcmV0dXJuICZlcC0+c3RhdHM7Cn0KCi8qIFNldCBv
ciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLgogICBOb3RlIHRo
YXQgd2Ugb25seSB1c2UgZXhjbHVzaW9uIGFyb3VuZCBhY3R1YWxseSBxdWV1ZWluZyB0aGUKICAg
bmV3IGZyYW1lLCBub3QgYXJvdW5kIGZpbGxpbmcgZXAtPnNldHVwX2ZyYW1lLiAgVGhpcyBpcyBu
b24tZGV0ZXJtaW5pc3RpYwogICB3aGVuIHJlLWVudGVyZWQgYnV0IHN0aWxsIGNvcnJlY3QuICov
CgovKiBUaGUgbGl0dGxlLWVuZGlhbiBBVVRPRElOIElJIGV0aGVybmV0IENSQyBjYWxjdWxhdGlv
bi4KICAgTi5CLiBEbyBub3QgdXNlIGZvciBidWxrIGRhdGEsIHVzZSBhIHRhYmxlLWJhc2VkIHJv
dXRpbmUgaW5zdGVhZC4KICAgVGhpcyBpcyBjb21tb24gY29kZSBhbmQgc2hvdWxkIGJlIG1vdmVk
IHRvIG5ldC9jb3JlL2NyYy5jICovCnN0YXRpYyB1bnNpZ25lZCBjb25zdCBldGhlcm5ldF9wb2x5
bm9taWFsX2xlID0gMHhlZGI4ODMyMFU7CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZXRoZXJfY3Jj
X2xlKGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCnsKCXVuc2lnbmVkIGludCBjcmMg
PSAweGZmZmZmZmZmOwkvKiBJbml0aWFsIHZhbHVlLiAqLwoJd2hpbGUoLS1sZW5ndGggPj0gMCkg
ewoJCXVuc2lnbmVkIGNoYXIgY3VycmVudF9vY3RldCA9ICpkYXRhKys7CgkJaW50IGJpdDsKCQlm
b3IgKGJpdCA9IDg7IC0tYml0ID49IDA7IGN1cnJlbnRfb2N0ZXQgPj49IDEpIHsKCQkJaWYgKChj
cmMgXiBjdXJyZW50X29jdGV0KSAmIDEpIHsKCQkJCWNyYyA+Pj0gMTsKCQkJCWNyYyBePSBldGhl
cm5ldF9wb2x5bm9taWFsX2xlOwoJCQl9IGVsc2UKCQkJCWNyYyA+Pj0gMTsKCQl9Cgl9CglyZXR1
cm4gY3JjOwp9CgoKc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IGRldmljZSAqZGV2KQp7
Cglsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwoJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAg
PSAoc3RydWN0IGVwaWNfcHJpdmF0ZSAqKWRldi0+cHJpdjsKCXVuc2lnbmVkIGNoYXIgbWNfZmls
dGVyWzhdOwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwoJaW50IGk7CgoJaWYgKGRldi0+
ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KCQlvdXRsKDB4
MDAyQywgaW9hZGRyICsgUnhDdHJsKTsKCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBz
LiAqLwoJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4i
LCBkZXYtPm5hbWUpOwoJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIp
KTsKCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiAwKSAgfHwgIChkZXYtPmZsYWdzICYgSUZG
X0FMTE1VTFRJKSkgewoJCS8qIFRoZXJlIGlzIGFwcGFyZW50bHkgYSBjaGlwIGJ1Zywgc28gdGhl
IG11bHRpY2FzdCBmaWx0ZXIKCQkgICBpcyBuZXZlciBlbmFibGVkLiAqLwoJCS8qIFRvbyBtYW55
IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwoJCW1lbXNl
dChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKCQlvdXRsKDB4MDAwQywgaW9h
ZGRyICsgUnhDdHJsKTsKCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA9PSAwKSB7CgkJb3V0bCgw
eDAwMDQsIGlvYWRkciArIFJ4Q3RybCk7CgkJcmV0dXJuOwoJfSBlbHNlIHsJCQkJCS8qIE5ldmVy
IGV4ZWN1dGVkLCBmb3Igbm93LiAqLwoJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwoKCQlt
ZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7CgkJZm9yIChpID0gMCwgbWNs
aXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7CgkJCSBpKyss
IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkKCQkJc2V0X2JpdChldGhlcl9jcmNfbGUoRVRIX0FMRU4s
IG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgzZiwKCQkJCQltY19maWx0ZXIpOwoJfQoJLyogVG9Ebzog
cGVyaGFwcyB3ZSBuZWVkIHRvIHN0b3AgdGhlIFR4IGFuZCBSeCBwcm9jZXNzIGhlcmU/ICovCglp
ZiAobWVtY21wKG1jX2ZpbHRlciwgZXAtPm1jX2ZpbHRlciwgc2l6ZW9mKG1jX2ZpbHRlcikpKSB7
CgkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKCQkJb3V0dygoKHUxNiAqKW1jX2ZpbHRlcilbaV0s
IGlvYWRkciArIE1DMCArIGkqNCk7CgkJbWVtY3B5KGVwLT5tY19maWx0ZXIsIG1jX2ZpbHRlciwg
c2l6ZW9mKG1jX2ZpbHRlcikpOwoJfQoJcmV0dXJuOwp9CgpzdGF0aWMgaW50IG1paV9pb2N0bChz
dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCnsKCWxvbmcgaW9h
ZGRyID0gZGV2LT5iYXNlX2FkZHI7Cgl1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfZGF0YTsK
Cglzd2l0Y2goY21kKSB7CgljYXNlIFNJT0NERVZQUklWQVRFOgkJLyogR2V0IHRoZSBhZGRyZXNz
IG9mIHRoZSBQSFkgaW4gdXNlLiAqLwoJCWRhdGFbMF0gPSAoKHN0cnVjdCBlcGljX3ByaXZhdGUg
KilkZXYtPnByaXYpLT5waHlzWzBdICYgMHgxZjsKCQkvKiBGYWxsIFRocm91Z2ggKi8KCWNhc2Ug
U0lPQ0RFVlBSSVZBVEUrMToJCS8qIFJlYWQgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIuICov
CgkJaWYgKCEgZGV2LT5zdGFydCkgewoJCQlvdXRsKDB4MDIwMCwgaW9hZGRyICsgR0VOQ1RMKTsK
CQkJb3V0bCgoaW5sKGlvYWRkciArIE5WQ1RMKSAmIH4weDAwM0MpIHwgMHg0ODAwLCBpb2FkZHIg
KyBOVkNUTCk7CgkJfQoJCWRhdGFbM10gPSBtZGlvX3JlYWQoaW9hZGRyLCBkYXRhWzBdICYgMHgx
ZiwgZGF0YVsxXSAmIDB4MWYpOwoJCWlmICghIGRldi0+c3RhcnQpIHsKI2lmZGVmIG5vdGRlZgoJ
CQlvdXRsKDB4MDAwOCwgaW9hZGRyICsgR0VOQ1RMKTsKCQkJb3V0bCgoaW5sKGlvYWRkciArIE5W
Q1RMKSAmIH4weDQ4M0MpIHwgMHgwMDAwLCBpb2FkZHIgKyBOVkNUTCk7CiNlbmRpZgoJCX0KCQly
ZXR1cm4gMDsKCWNhc2UgU0lPQ0RFVlBSSVZBVEUrMjoJCS8qIFdyaXRlIHRoZSBzcGVjaWZpZWQg
TUlJIHJlZ2lzdGVyICovCgkJaWYgKCFzdXNlcigpKQoJCQlyZXR1cm4gLUVQRVJNOwoJCWlmICgh
IGRldi0+c3RhcnQpIHsKCQkJb3V0bCgweDAyMDAsIGlvYWRkciArIEdFTkNUTCk7CgkJCW91dGwo
KGlubChpb2FkZHIgKyBOVkNUTCkgJiB+MHgwMDNDKSB8IDB4NDgwMCwgaW9hZGRyICsgTlZDVEwp
OwoJCX0KCQltZGlvX3dyaXRlKGlvYWRkciwgZGF0YVswXSAmIDB4MWYsIGRhdGFbMV0gJiAweDFm
LCBkYXRhWzJdKTsKCQlpZiAoISBkZXYtPnN0YXJ0KSB7CiNpZmRlZiBub3RkZWYKCQkJb3V0bCgw
eDAwMDgsIGlvYWRkciArIEdFTkNUTCk7CgkJCW91dGwoKGlubChpb2FkZHIgKyBOVkNUTCkgJiB+
MHg0ODNDKSB8IDB4MDAwMCwgaW9hZGRyICsgTlZDVEwpOwojZW5kaWYKCQl9CgkJcmV0dXJuIDA7
CglkZWZhdWx0OgoJCXJldHVybiAtRU9QTk9UU1VQUDsKCX0KfQoKDAojaWZkZWYgQ0FSREJVUwoK
I2luY2x1ZGUgPHBjbWNpYS9kcml2ZXJfb3BzLmg+CgpzdGF0aWMgZGV2X25vZGVfdCAqZXBpY19h
dHRhY2goZGV2X2xvY2F0b3JfdCAqbG9jKQp7CglzdHJ1Y3QgZGV2aWNlICpkZXY7Cgl1MTYgZGV2
X2lkOwoJdTMyIGlvOwoJdTggYnVzLCBkZXZmbiwgaXJxOwoKCWlmIChsb2MtPmJ1cyAhPSBMT0Nf
UENJKSByZXR1cm4gTlVMTDsKCWJ1cyA9IGxvYy0+Yi5wY2kuYnVzOyBkZXZmbiA9IGxvYy0+Yi5w
Y2kuZGV2Zm47CglwcmludGsoS0VSTl9ERUJVRyAiZXBpY19hdHRhY2goYnVzICVkLCBmdW5jdGlv
biAlZClcbiIsIGJ1cywgZGV2Zm4pOwoJcGNpYmlvc19yZWFkX2NvbmZpZ19kd29yZChidXMsIGRl
dmZuLCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpbyk7CglwY2liaW9zX3JlYWRfY29uZmlnX2J5dGUo
YnVzLCBkZXZmbiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxKTsKCXBjaWJpb3NfcmVhZF9jb25m
aWdfd29yZChidXMsIGRldmZuLCBQQ0lfREVWSUNFX0lELCAmZGV2X2lkKTsKCWlvICY9IH4zOwoJ
aWYgKGlvID09IDAgfHwgaXJxID09IDApIHsKCQlwcmludGsoS0VSTl9FUlIgIlRoZSBFUElDL0Mg
Q2FyZEJ1cyBFdGhlcm5ldCBpbnRlcmZhY2Ugd2FzIG5vdCAiCgkJCSAgICJhc3NpZ25lZCBhbiAl
cy5cbiIgS0VSTl9FUlIgIiAgSXQgd2lsbCBub3QgYmUgYWN0aXZhdGVkLlxuIiwKCQkJICAgaW8g
PT0gMCA/ICJJL08gYWRkcmVzcyIgOiAiSVJRIik7CgkJcmV0dXJuIE5VTEw7Cgl9CglkZXYgPSBl
cGljX3Byb2JlMShidXMsIGRldmZuLCBOVUxMLCBpbywgaXJxLCAxLCAtMSk7CglpZiAoZGV2KSB7
CgkJZGV2X25vZGVfdCAqbm9kZSA9IGttYWxsb2Moc2l6ZW9mKGRldl9ub2RlX3QpLCBHRlBfS0VS
TkVMKTsKCQlzdHJjcHkobm9kZS0+ZGV2X25hbWUsIGRldi0+bmFtZSk7CgkJbm9kZS0+bWFqb3Ig
PSBub2RlLT5taW5vciA9IDA7CgkJbm9kZS0+bmV4dCA9IE5VTEw7CgkJTU9EX0lOQ19VU0VfQ09V
TlQ7CgkJcmV0dXJuIG5vZGU7Cgl9CglyZXR1cm4gTlVMTDsKfQoKc3RhdGljIHZvaWQgZXBpY19z
dXNwZW5kKGRldl9ub2RlX3QgKm5vZGUpCnsKCXN0cnVjdCBkZXZpY2UgKipkZXZwLCAqKm5leHQ7
CglwcmludGsoS0VSTl9JTkZPICJlcGljX3N1c3BlbmQoJXMpXG4iLCBub2RlLT5kZXZfbmFtZSk7
Cglmb3IgKGRldnAgPSAmcm9vdF9lcGljX2RldjsgKmRldnA7IGRldnAgPSBuZXh0KSB7CgkJbmV4
dCA9ICYoKHN0cnVjdCBlcGljX3ByaXZhdGUgKikoKmRldnApLT5wcml2KS0+bmV4dF9tb2R1bGU7
CgkJaWYgKHN0cmNtcCgoKmRldnApLT5uYW1lLCBub2RlLT5kZXZfbmFtZSkgPT0gMCkgYnJlYWs7
Cgl9CglpZiAoKmRldnApIHsKCQlsb25nIGlvYWRkciA9ICgqZGV2cCktPmJhc2VfYWRkcjsKCQll
cGljX3BhdXNlKCpkZXZwKTsKCQkvKiBQdXQgdGhlIGNoaXAgaW50byBsb3ctcG93ZXIgbW9kZS4g
Ki8KCQlvdXRsKDB4MDAwOCwgaW9hZGRyICsgR0VOQ1RMKTsKCX0KfQpzdGF0aWMgdm9pZCBlcGlj
X3Jlc3VtZShkZXZfbm9kZV90ICpub2RlKQp7CglzdHJ1Y3QgZGV2aWNlICoqZGV2cCwgKipuZXh0
OwoJcHJpbnRrKEtFUk5fSU5GTyAiZXBpY19yZXN1bWUoJXMpXG4iLCBub2RlLT5kZXZfbmFtZSk7
Cglmb3IgKGRldnAgPSAmcm9vdF9lcGljX2RldjsgKmRldnA7IGRldnAgPSBuZXh0KSB7CgkJbmV4
dCA9ICYoKHN0cnVjdCBlcGljX3ByaXZhdGUgKikoKmRldnApLT5wcml2KS0+bmV4dF9tb2R1bGU7
CgkJaWYgKHN0cmNtcCgoKmRldnApLT5uYW1lLCBub2RlLT5kZXZfbmFtZSkgPT0gMCkgYnJlYWs7
Cgl9CglpZiAoKmRldnApIHsKCQllcGljX3Jlc3RhcnQoKmRldnApOwoJfQp9CnN0YXRpYyB2b2lk
IGVwaWNfZGV0YWNoKGRldl9ub2RlX3QgKm5vZGUpCnsKCXN0cnVjdCBkZXZpY2UgKipkZXZwLCAq
Km5leHQ7CglwcmludGsoS0VSTl9JTkZPICJlcGljX2RldGFjaCglcylcbiIsIG5vZGUtPmRldl9u
YW1lKTsKCWZvciAoZGV2cCA9ICZyb290X2VwaWNfZGV2OyAqZGV2cDsgZGV2cCA9IG5leHQpIHsK
CQluZXh0ID0gJigoc3RydWN0IGVwaWNfcHJpdmF0ZSAqKSgqZGV2cCktPnByaXYpLT5uZXh0X21v
ZHVsZTsKCQlpZiAoc3RyY21wKCgqZGV2cCktPm5hbWUsIG5vZGUtPmRldl9uYW1lKSA9PSAwKSBi
cmVhazsKCX0KCWlmICgqZGV2cCkgewoJCXVucmVnaXN0ZXJfbmV0ZGV2KCpkZXZwKTsKCQlrZnJl
ZSgqZGV2cCk7CgkJKmRldnAgPSAqbmV4dDsKCQlrZnJlZShub2RlKTsKCQlNT0RfREVDX1VTRV9D
T1VOVDsKCX0KfQoKc3RydWN0IGRyaXZlcl9vcGVyYXRpb25zIGVwaWNfb3BzID0gewoJImVwaWNf
Y2IiLCBlcGljX2F0dGFjaCwgZXBpY19zdXNwZW5kLCBlcGljX3Jlc3VtZSwgZXBpY19kZXRhY2gK
fTsKCiNlbmRpZiAgLyogQ2FyZGJ1cyBzdXBwb3J0ICovCgoMCiNpZmRlZiBNT0RVTEUKCmludCBp
bml0X21vZHVsZSh2b2lkKQp7CglpZiAoZXBpY19kZWJ1ZykKCQlwcmludGsoS0VSTl9JTkZPICIl
cyIsIHZlcnNpb24pOwoKI2lmZGVmIENBUkRCVVMKCXJlZ2lzdGVyX2RyaXZlcigmZXBpY19vcHMp
OwoJcmV0dXJuIDA7CiNlbHNlCglyZXR1cm4gZXBpYzEwMF9wcm9iZSgwKTsKI2VuZGlmCn0KCnZv
aWQgY2xlYW51cF9tb2R1bGUodm9pZCkKewoJc3RydWN0IGRldmljZSAqbmV4dF9kZXY7CgojaWZk
ZWYgQ0FSREJVUwoJdW5yZWdpc3Rlcl9kcml2ZXIoJmVwaWNfb3BzKTsKI2VuZGlmCgoJLyogTm8g
bmVlZCB0byBjaGVjayBNT0RfSU5fVVNFLCBhcyBzeXNfZGVsZXRlX21vZHVsZSgpIGNoZWNrcy4g
Ki8KCXdoaWxlIChyb290X2VwaWNfZGV2KSB7CgkJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSAo
c3RydWN0IGVwaWNfcHJpdmF0ZSAqKXJvb3RfZXBpY19kZXYtPnByaXY7CgkJbmV4dF9kZXYgPSBl
cC0+bmV4dF9tb2R1bGU7CgkJdW5yZWdpc3Rlcl9uZXRkZXYocm9vdF9lcGljX2Rldik7CgkJcmVs
ZWFzZV9yZWdpb24ocm9vdF9lcGljX2Rldi0+YmFzZV9hZGRyLCBFUElDX1RPVEFMX1NJWkUpOwoJ
CWtmcmVlKHJvb3RfZXBpY19kZXYpOwoJCXJvb3RfZXBpY19kZXYgPSBuZXh0X2RldjsKCQlrZnJl
ZShlcCk7Cgl9Cn0KCiNlbmRpZiAgLyogTU9EVUxFICovCgwKLyoKICogTG9jYWwgdmFyaWFibGVz
OgogKiAgY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1ETU9EVUxFIC1EX19LRVJORUxfXyAtV2FsbCAt
V3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBlcGljMTAwLmMgYFsgLWYgL3Vzci9pbmNsdWRlL2xp
bnV4L21vZHZlcnNpb25zLmggXSAmJiBlY2hvIC1ETU9EVkVSU0lPTlNgIgogKiAgY2FyZGJ1cy1j
b21waWxlLWNvbW1hbmQ6ICJnY2MgLURDQVJEQlVTIC1ETU9EVUxFIC1EX19LRVJORUxfXyAtV2Fs
bCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBlcGljMTAwLmMgLW8gZXBpY19jYi5vIC1JL3Vz
ci9zcmMvcGNtY2lhLWNzLTMuMC41L2luY2x1ZGUvIgogKiAgYy1pbmRlbnQtbGV2ZWw6IDQKICog
IGMtYmFzaWMtb2Zmc2V0OiA0CiAqICB0YWItd2lkdGg6IDQKICogRW5kOgogKi8K
=======_NextPart_000_0006_01BEB130.8E0B3BC0==
------------------------------
** FOR YOUR REFERENCE **
The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:
Internet: [EMAIL PROTECTED]
You can send mail to the entire list (and comp.os.linux.hardware) via:
Internet: [EMAIL PROTECTED]
Linux may be obtained via one of these FTP sites:
ftp.funet.fi pub/Linux
tsx-11.mit.edu pub/linux
sunsite.unc.edu pub/Linux
End of Linux-Hardware Digest
******************************