Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Nov 2000 16:53:57 +0000
From:      Jamie Heckford <heckfordj@psi-domain.co.uk>
To:        freebsd-hackers@freebsd.org
Subject:   New sound driver
Message-ID:  <00111616571802.00211@freefire.psi-domain.co.uk>

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

--Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

Hi,

I tried to get my onboard intel AC'97 card to work, and used a third party
driver to get success (written by Katsurajima Naoto)

The following card is:

pcm0: <Intel 82801AA AC'97 audio port 0xdc00-0xdc3f,0xd800-0xd8ff irq 5 at
device 31.5 on pci0

This wasn't supported by FreeBSD first off, but after inclusion of the attached
driver to the kernel, all i did was recompile with

device		pcm

and it worked.

Any chance someone with commit privs. could take a look at the source and
*maybe* include it in FreeBSD?

Thanks,

-- 
Jamie Heckford
Chief Network Engineer
Psi-Domain - Innovative Linux Solutions. Ask Us How.

===================================
email:     heckfordj@psi-domain.co.uk
web:	 http://www.psi-domain.co.uk/

tel:	   +44 (0)1737 789 246
fax:	   +44 (0)1737 789 245
mobile:	   +44 (0)7779 646 529
===================================

--Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ
Content-Type: text/english;
  name="ich.c"
Content-Transfer-Encoding: base64
Content-Description: ICH.C Driver Source
Content-Disposition: attachment; filename="ich.c"

LyoKICogQ29weXJpZ2h0IChjKSAyMDAwIEthdHN1cmFqaW1hIE5hb3RvIDxyYXZlbkBrYXRzdXJh
amltYS5zZXlhLnlva29oYW1hLmpwPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSSU4gQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVQT1NTSUJJTElU
WSBPRgogKiBTVUNIIERBTUFHRS4KICoKICogJEZyZWVCU0QkCiAqLwoKI2luY2x1ZGUgPGRldi9z
b3VuZC9wY20vc291bmQuaD4KI2luY2x1ZGUgPGRldi9zb3VuZC9wY20vYWM5Ny5oPgoKI2luY2x1
ZGUgPHBjaS9wY2lyZWcuaD4KI2luY2x1ZGUgPHBjaS9wY2l2YXIuaD4KCgovKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwoKI2RlZmluZSBJQ0hfUkVDUFJJTUFSWSAwCgojZGVmaW5lIElDSF9USU1FT1VUIDEwMDAg
Lyogc2VtYXBob3JlIHRpbWVvdXQgcG9sbGluZyBjb3VudCAqLwoKI2RlZmluZSBQQ0lSX05BTUJB
UiAweDEwCiNkZWZpbmUgUENJUl9OQUJNQkFSIDB4MTQKCi8qIE5hdGl2ZSBBdWRpbyBCdXMgTWFz
dGVyIENvbnRyb2wgUmVnaXN0ZXJzICovCiNkZWZpbmUgSUNIX1JFR19QSV9CREJBUiAweDAwCiNk
ZWZpbmUgSUNIX1JFR19QSV9DSVYgICAweDA0CiNkZWZpbmUgSUNIX1JFR19QSV9MVkkgICAweDA1
CiNkZWZpbmUgSUNIX1JFR19QSV9TUiAgICAweDA2CiNkZWZpbmUgSUNIX1JFR19QSV9QSUNCICAw
eDA4CiNkZWZpbmUgSUNIX1JFR19QSV9QSVYgICAweDBhCiNkZWZpbmUgSUNIX1JFR19QSV9DUiAg
ICAweDBiCiNkZWZpbmUgSUNIX1JFR19QT19CREJBUiAweDEwCiNkZWZpbmUgSUNIX1JFR19QT19D
SVYgICAweDE0CiNkZWZpbmUgSUNIX1JFR19QT19MVkkgICAweDE1CiNkZWZpbmUgSUNIX1JFR19Q
T19TUiAgICAweDE2CiNkZWZpbmUgSUNIX1JFR19QT19QSUNCICAweDE4CiNkZWZpbmUgSUNIX1JF
R19QT19QSVYgICAweDFhCiNkZWZpbmUgSUNIX1JFR19QT19DUiAgICAweDFiCiNkZWZpbmUgSUNI
X1JFR19NQ19CREJBUiAweDIwCiNkZWZpbmUgSUNIX1JFR19NQ19DSVYgICAweDI0CiNkZWZpbmUg
SUNIX1JFR19NQ19MVkkgICAweDI1CiNkZWZpbmUgSUNIX1JFR19NQ19TUiAgICAweDI2CiNkZWZp
bmUgSUNIX1JFR19NQ19QSUNCICAweDI4CiNkZWZpbmUgSUNIX1JFR19NQ19QSVYgICAweDJhCiNk
ZWZpbmUgSUNIX1JFR19NQ19DUiAgICAweDJiCiNkZWZpbmUgSUNIX1JFR19HTE9CX0NOVCAweDJj
CiNkZWZpbmUgSUNIX1JFR19HTE9CX1NUQSAweDMwCiNkZWZpbmUgSUNIX1JFR19BQ0NfU0VNQSAw
eDM0Ci8qIFN0YXR1cyBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJQ0hfWF9TUl9EQ0ggICAw
eDAwMDEKI2RlZmluZSBJQ0hfWF9TUl9DRUxWICAweDAwMDIKI2RlZmluZSBJQ0hfWF9TUl9MVkJD
SSAweDAwMDQKI2RlZmluZSBJQ0hfWF9TUl9CQ0lTICAweDAwMDgKI2RlZmluZSBJQ0hfWF9TUl9G
SUZPRSAweDAwMTAKLyogQ29udHJvbCBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJQ0hfWF9D
Ul9SUEJNICAweDAxCiNkZWZpbmUgSUNIX1hfQ1JfUlIgICAgMHgwMgojZGVmaW5lIElDSF9YX0NS
X0xWQklFIDB4MDQKI2RlZmluZSBJQ0hfWF9DUl9GRUlFICAweDA4CiNkZWZpbmUgSUNIX1hfQ1Jf
SU9DRSAgMHgxMAovKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciBWYWx1ZXMgKi8KI2RlZmluZSBJ
Q0hfR0xPQl9DVExfR0lFICAweDAwMDAwMDAxCiNkZWZpbmUgSUNIX0dMT0JfQ1RMX0NPTEQgMHgw
MDAwMDAwMiAvKiBuZWdhdGUgKi8KI2RlZmluZSBJQ0hfR0xPQl9DVExfV0FSTSAweDAwMDAwMDA0
CiNkZWZpbmUgSUNIX0dMT0JfQ1RMX1NIVVQgMHgwMDAwMDAwOAojZGVmaW5lIElDSF9HTE9CX0NU
TF9QUkVTIDB4MDAwMDAwMTAKI2RlZmluZSBJQ0hfR0xPQl9DVExfU1JFUyAweDAwMDAwMDIwCi8q
IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgVmFsdWVzICovCiNkZWZpbmUgSUNIX0dMT0JfU1RBX0dT
Q0kgICAweDAwMDAwMDAxCiNkZWZpbmUgSUNIX0dMT0JfU1RBX01JSU5UICAweDAwMDAwMDAyCiNk
ZWZpbmUgSUNIX0dMT0JfU1RBX01PSU5UICAweDAwMDAwMDA0CiNkZWZpbmUgSUNIX0dMT0JfU1RB
X1BJSU5UICAweDAwMDAwMDIwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1BPSU5UICAweDAwMDAwMDQw
CiNkZWZpbmUgSUNIX0dMT0JfU1RBX01JTlQgICAweDAwMDAwMDgwCiNkZWZpbmUgSUNIX0dMT0Jf
U1RBX1BDUiAgICAweDAwMDAwMTAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1NDUiAgICAweDAwMDAw
MjAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1BSRVMgICAweDAwMDAwNDAwCiNkZWZpbmUgSUNIX0dM
T0JfU1RBX1NSRVMgICAweDAwMDAwODAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1NMT1QxMiAweDAw
MDA3MDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX1JDT0RFQyAweDAwMDA4MDAwCiNkZWZpbmUgSUNI
X0dMT0JfU1RBX0FEMyAgICAweDAwMDEwMDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX01EMyAgICAw
eDAwMDIwMDAwCiNkZWZpbmUgSUNIX0dMT0JfU1RBX0lNQVNLICAoSUNIX0dMT0JfU1RBX01JSU5U
IHwgSUNIX0dMT0JfU1RBX01PSU5UIHwgSUNIX0dMT0JfU1RBX1BJSU5UIHwgSUNIX0dMT0JfU1RB
X1BPSU5UIHwgSUNIX0dMT0JfU1RBX01JTlQgfCBJQ0hfR0xPQl9TVEFfUFJFUyB8IElDSF9HTE9C
X1NUQV9TUkVTKQoKLyogQUMnOTcgcG93ZXIvcmVhZHkgZnVuY3Rpb25zICovCiNkZWZpbmUgQUM5
N19QT1dFUl9QSU5QT1dFUiAgMHgwMTAwCiNkZWZpbmUgQUM5N19QT1dFUl9QSU5SRUFEWSAgMHgw
MDAxCiNkZWZpbmUgQUM5N19QT1dFUl9QT1VUUE9XRVIgMHgwMjAwCiNkZWZpbmUgQUM5N19QT1dF
Ul9QT1VUUkVBRFkgMHgwMDAyCgovKiBwbGF5L3JlY29yZCBidWZmZXIgKi8KI2RlZmluZSBJQ0hf
RklGT0lOREVYIDMyCiNkZWZpbmUgSUNIX0JEQ19JT0MgMHg4MDAwMDAwMAojZGVmaW5lIElDSF9C
RENfQlVQIDB4NDAwMDAwMDAKI2RlZmluZSBJQ0hfREVGQVVMVF9CTE9DS1NaIDIwNDgKLyogYnVm
ZmVyIGRlc2NyaXB0b3IgKi8Kc3RydWN0IGljaF9kZXNjIHsKCXZvbGF0aWxlIHVfaW50MzJfdCBi
dWZmZXI7Cgl2b2xhdGlsZSB1X2ludDMyX3QgbGVuZ3RoOwp9OwoKc3RydWN0IHNjX2luZm87Cgov
KiBjaGFubmVsIHJlZ2lzdGVycyAqLwpzdHJ1Y3Qgc2NfY2hpbmZvIHsKCWludCBydW4sIHNwZCwg
ZGlyLCBmbXQ7CglzbmRfZGJ1ZiAqYnVmZmVyOwoJcGNtX2NoYW5uZWwgKmNoYW5uZWw7CglzdHJ1
Y3Qgc2NfaW5mbyAqcGFyZW50OwoJc3RydWN0IGljaF9kZXNjICppbmRleDsKCXVfaW50MzJfdCBs
dmk7Cn07CgovKiBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCnN0cnVjdCBzY19pbmZvIHsKCWRldmlj
ZV90CWRldjsKCXVfaW50MzJfdCAJdHlwZSwgcmV2OwoJdV9pbnQzMl90CWNkMmlkLCBjdHJsYmFz
ZTsKCglzdHJ1Y3QgcmVzb3VyY2UgKm5hbWJhciwgKm5hYm1iYXI7CglpbnQJCW5hbWJhcmlkLCBu
YWJtYmFyaWQ7CglidXNfc3BhY2VfdGFnX3QgbmFtYmFydCwgbmFibWJhcnQ7CglidXNfc3BhY2Vf
aGFuZGxlX3QgbmFtYmFyaCwgbmFibWJhcmg7CglidXNfZG1hX3RhZ190IHBhcmVudF9kbWF0OwoJ
c3RydWN0IHJlc291cmNlICppcnE7CglpbnQJCWlycWlkOwoJdm9pZAkJKmloOwoKCXN0cnVjdCBh
Yzk3X2luZm8gKmNvZGVjOwoJc3RydWN0IHNjX2NoaW5mbyAqcGksICpwbzsKfTsKCnN0cnVjdCB7
Cgl1X2ludDMyX3QgZGV2LCBzdWJkZXY7CgljaGFyICpuYW1lOwoJdV9pbnQzMl90ICptY29kZTsK
fSBpY2hfZGV2c1tdID0gewovKiBCZXdhcmUsIHRoaW5ncyBrbm93IHRoZSBpbmRleGVzIGhlcmUg
Ki8KCXsweDcxOTU4MDg2LCAwLCAiSW50ZWwgNDQzTVggQUMnOTcgYXVkaW8iLCBOVUxMfSwKCXsw
eDI0MTU4MDg2LCAwLCAiSW50ZWwgODI4MDFBQSBBQyc5NyBhdWRpbyIsIE5VTEx9LAoJezB4MjQy
NTgwODYsIDAsICJJbnRlbCA4MjkwMUFCIEFDJzk3IGF1ZGlvIiwgTlVMTH0sCgl7MHgyNDQ1ODA4
NiwgMCwgIkludGVsIDgyODAxQkEgQUMnOTcgYXVkaW8iLCBOVUxMfSwKCXswLCAwLCBOVUxMLCBO
VUxMfQp9OwoKLyogdmFyaWFibGUgcmF0ZSBhdWRpbyAqLwpzdGF0aWMgdV9pbnQxNl90IGljaF9y
YXRlW10gPSB7CiAgICA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCA0NDEwMCwgNDgwMDAsIDAK
fTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCgovKgogKiBwcm90b3R5cGVzCiAqLwoKLyogY2hhbm5lbCBp
bnRlcmZhY2UgKi8Kc3RhdGljIHZvaWQgKmljaHBjaGFuX2luaXQodm9pZCAqZGV2aW5mbywgc25k
X2RidWYgKmIsIHBjbV9jaGFubmVsICpjLCBpbnQgZGlyKTsKc3RhdGljIGludCBpY2hwY2hhbl9z
ZXRkaXIodm9pZCAqZGF0YSwgaW50IGRpcik7CnN0YXRpYyBpbnQgaWNocGNoYW5fc2V0Zm9ybWF0
KHZvaWQgKmRhdGEsIHVfaW50MzJfdCBmb3JtYXQpOwpzdGF0aWMgaW50IGljaHBjaGFuX3NldHNw
ZWVkKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBzcGVlZCk7CnN0YXRpYyBpbnQgaWNocGNoYW5fc2V0
YmxvY2tzaXplKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBibG9ja3NpemUpOwpzdGF0aWMgaW50IGlj
aHBjaGFuX3RyaWdnZXIodm9pZCAqZGF0YSwgaW50IGdvKTsKc3RhdGljIGludCBpY2hwY2hhbl9n
ZXRwdHIodm9pZCAqZGF0YSk7CnN0YXRpYyBwY21jaGFuX2NhcHMgKmljaHBjaGFuX2dldGNhcHMo
dm9pZCAqZGF0YSk7CgpzdGF0aWMgdm9pZCAqaWNocmNoYW5faW5pdCh2b2lkICpkZXZpbmZvLCBz
bmRfZGJ1ZiAqYiwgcGNtX2NoYW5uZWwgKmMsIGludCBkaXIpOwpzdGF0aWMgaW50IGljaHJjaGFu
X3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKTsKc3RhdGljIGludCBpY2hyY2hhbl9zZXRmb3Jt
YXQodm9pZCAqZGF0YSwgdV9pbnQzMl90IGZvcm1hdCk7CnN0YXRpYyBpbnQgaWNocmNoYW5fc2V0
c3BlZWQodm9pZCAqZGF0YSwgdV9pbnQzMl90IHNwZWVkKTsKc3RhdGljIGludCBpY2hyY2hhbl9z
ZXRibG9ja3NpemUodm9pZCAqZGF0YSwgdV9pbnQzMl90IGJsb2Nrc2l6ZSk7CnN0YXRpYyBpbnQg
aWNocmNoYW5fdHJpZ2dlcih2b2lkICpkYXRhLCBpbnQgZ28pOwpzdGF0aWMgaW50IGljaHJjaGFu
X2dldHB0cih2b2lkICpkYXRhKTsKc3RhdGljIHBjbWNoYW5fY2FwcyAqaWNocmNoYW5fZ2V0Y2Fw
cyh2b2lkICpkYXRhKTsKCi8qIHRhbGsgdG8gdGhlIGNvZGVjIC0gY2FsbGVkIGZyb20gYWM5Ny5j
ICovCnN0YXRpYyB1X2ludDMyX3QgaWNoX3JkY2Qodm9pZCAqLCBpbnQpOwpzdGF0aWMgdm9pZCAg
CSBpY2hfd3JjZCh2b2lkICosIGludCwgdV9pbnQzMl90KTsKCi8qIHN0dWZmICovCnN0YXRpYyBp
bnQgICAgICAgaWNoX2luaXQoc3RydWN0IHNjX2luZm8gKik7CnN0YXRpYyB2b2lkICAgICAgaWNo
X2ludHIodm9pZCAqKTsKCi8qIHRhbGsgdG8gdGhlIGNhcmQgKi8Kc3RhdGljIHVfaW50MzJfdCBp
Y2hfcmQoc3RydWN0IHNjX2luZm8gKiwgaW50LCBpbnQpOwpzdGF0aWMgdm9pZCAJIGljaF93cihz
dHJ1Y3Qgc2NfaW5mbyAqLCBpbnQsIHVfaW50MzJfdCwgaW50KTsKCi8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CgpzdGF0aWMgdV9pbnQzMl90IGljaF9yZWNmbXRbXSA9IHsKCUFGTVRfU1RFUkVPIHwgQUZNVF9T
MTZfTEUsCgkwCn07CnN0YXRpYyBwY21jaGFuX2NhcHMgaWNoX3JlY2NhcHMgPSB7ODAwMCwgNDgw
MDAsIGljaF9yZWNmbXQsIDB9OwoKc3RhdGljIHVfaW50MzJfdCBpY2hfcGxheWZtdFtdID0gewoJ
QUZNVF9TVEVSRU8gfCBBRk1UX1MxNl9MRSwKCTAKfTsKc3RhdGljIHBjbWNoYW5fY2FwcyBpY2hf
cGxheWNhcHMgPSB7ODAwMCwgNDgwMDAsIGljaF9wbGF5Zm10LCAwfTsKCnN0YXRpYyBwY21fY2hh
bm5lbCBpY2hfcGNoYW50ZW1wbGF0ZSA9IHsKCWljaHBjaGFuX2luaXQsCglpY2hwY2hhbl9zZXRk
aXIsCglpY2hwY2hhbl9zZXRmb3JtYXQsCglpY2hwY2hhbl9zZXRzcGVlZCwKCWljaHBjaGFuX3Nl
dGJsb2Nrc2l6ZSwKCWljaHBjaGFuX3RyaWdnZXIsCglpY2hwY2hhbl9nZXRwdHIsCglpY2hwY2hh
bl9nZXRjYXBzLAp9OwoKc3RhdGljIHBjbV9jaGFubmVsIGljaF9yY2hhbnRlbXBsYXRlID0gewoJ
aWNocmNoYW5faW5pdCwKCWljaHJjaGFuX3NldGRpciwKCWljaHJjaGFuX3NldGZvcm1hdCwKCWlj
aHJjaGFuX3NldHNwZWVkLAoJaWNocmNoYW5fc2V0YmxvY2tzaXplLAoJaWNocmNoYW5fdHJpZ2dl
ciwKCWljaHJjaGFuX2dldHB0ciwKCWljaHJjaGFuX2dldGNhcHMsCn07CgovKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwovKiBIYXJkd2FyZSAqLwpzdGF0aWMgdV9pbnQzMl90CmljaF9yZChzdHJ1Y3Qgc2NfaW5m
byAqc2MsIGludCByZWdubywgaW50IHNpemUpCnsKCXN3aXRjaCAoc2l6ZSkgewoJY2FzZSAxOgoJ
CXJldHVybiBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8p
OwoJY2FzZSAyOgoJCXJldHVybiBidXNfc3BhY2VfcmVhZF8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFt
YmFyaCwgcmVnbm8pOwoJY2FzZSA0OgoJCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHNjLT5uYW1i
YXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8pOwoJZGVmYXVsdDoKCQlyZXR1cm4gMHhmZmZmZmZmZjsK
CX0KfQoKc3RhdGljIHZvaWQKaWNoX3dyKHN0cnVjdCBzY19pbmZvICpzYywgaW50IHJlZ25vLCB1
X2ludDMyX3QgZGF0YSwgaW50IHNpemUpCnsKCXN3aXRjaCAoc2l6ZSkgewoJY2FzZSAxOgoJCWJ1
c19zcGFjZV93cml0ZV8xKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8sIGRhdGEpOwoJ
CWJyZWFrOwoJY2FzZSAyOgoJCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFt
YmFyaCwgcmVnbm8sIGRhdGEpOwoJCWJyZWFrOwoJY2FzZSA0OgoJCWJ1c19zcGFjZV93cml0ZV80
KHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgcmVnbm8sIGRhdGEpOwoJCWJyZWFrOwoJfQp9Cgov
KiBhYzk3IGNvZGVjICovCnN0YXRpYyBpbnQKaWNoX3dhaXRjZCh2b2lkICpkZXZpbmZvKQp7Cglp
bnQgaTsKCXVfaW50MzJfdCBkYXRhOwoJc3RydWN0IHNjX2luZm8gKnNjID0gKHN0cnVjdCBzY19p
bmZvICopZGV2aW5mbzsKCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCWRhdGEg
PSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLAoJCSAgICBJQ0hf
UkVHX0FDQ19TRU1BKTsKCQlpZiAoKGRhdGEgJiAweDAxKSA9PSAwKQoJCQlyZXR1cm4gMDsKCX0K
CWRldmljZV9wcmludGYoc2MtPmRldiwgIkNPREVDIHNlbWFwaG9yZSB0aW1lb3V0XG4iKTsKCXJl
dHVybiBFVElNRURPVVQ7Cn0KCnN0YXRpYyB1X2ludDMyX3QKaWNoX3JkY2Qodm9pZCAqZGV2aW5m
bywgaW50IHJlZ25vKQp7CglzdHJ1Y3Qgc2NfaW5mbyAqc2MgPSAoc3RydWN0IHNjX2luZm8gKilk
ZXZpbmZvOwoJcmVnbm8gJj0gMHhmZjsKI2lmKDApCglkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJp
Y2hfcmRjZChzYywgMHglMDJ4KVxuIiwgcmVnbm8pOwojZW5kaWYKCWljaF93YWl0Y2Qoc2MpOwoJ
cmV0dXJuIGljaF9yZChzYywgcmVnbm8sIDIpOwp9CgpzdGF0aWMgdm9pZAppY2hfd3JjZCh2b2lk
ICpkZXZpbmZvLCBpbnQgcmVnbm8sIHVfaW50MzJfdCBkYXRhKQp7CglzdHJ1Y3Qgc2NfaW5mbyAq
c2MgPSAoc3RydWN0IHNjX2luZm8gKilkZXZpbmZvOwoJcmVnbm8gJj0gMHhmZjsKI2lmKDApCglk
ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJpY2hfd3JjZChzYywgMHglMDJ4LCAweCUwNHgpXG4iLCBy
ZWdubywgZGF0YSk7CiNlbmRpZgoJaWNoX3dhaXRjZChzYyk7CglpY2hfd3Ioc2MsIHJlZ25vLCBk
YXRhLCAyKTsKfQoKLyogY2hhbm5lbCBjb21tb24gcm91dGluZXMgKi8Kc3RhdGljIHZvaWQKaWNo
Y2hhbl9zZXRtYXAodm9pZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWcs
IGludCBlcnJvcikKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBhcmc7CgoJaWYgKGJvb3R2ZXJi
b3NlKSB7CgkJZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJzZXRtYXAoMHglbHgsIDB4
JWx4KVxuIiwgKHVuc2lnbmVkIGxvbmcpc2Vncy0+ZHNfYWRkciwgKHVuc2lnbmVkIGxvbmcpc2Vn
cy0+ZHNfbGVuKTsKCX0KfQoKc3RhdGljIGludAppY2hjaGFuX2luaXRidWYoc3RydWN0IHNjX2No
aW5mbyAqY2gpCnsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7CglidXNfZG1hbWFw
X3QgbWFwOwoJaW50IGk7CgoJY2gtPmJ1ZmZlci0+YnVmID0gTlVMTDsKCWNoLT5idWZmZXItPmJ1
ZnNpemUgPSBJQ0hfREVGQVVMVF9CTE9DS1NaICogSUNIX0ZJRk9JTkRFWDsKCWlmIChjaG5fYWxs
b2NidWYoY2gtPmJ1ZmZlciwgc2MtPnBhcmVudF9kbWF0KSkgewoJCWZyZWUoY2gsIE1fREVWQlVG
KTsKCQlyZXR1cm4gLTE7Cgl9CglpZiAoYnVzX2RtYW1lbV9hbGxvYyhzYy0+cGFyZW50X2RtYXQs
KHZvaWQgKiopJmNoLT5pbmRleCwgQlVTX0RNQV9OT1dBSVQsICZtYXApKSB7CgkJZnJlZShjaCwg
TV9ERVZCVUYpOwoJCXJldHVybiAtMTsKCX0KCWlmIChidXNfZG1hbWFwX2xvYWQoc2MtPnBhcmVu
dF9kbWF0LCBtYXAsIGNoLT5pbmRleCwKCSAgICBzaXplb2Yoc3RydWN0IGljaF9kZXNjKSAqIElD
SF9GSUZPSU5ERVgsIGljaGNoYW5fc2V0bWFwLCBjaCwgMCkpIHsKCQlmcmVlKGNoLCBNX0RFVkJV
Rik7CgkJcmV0dXJuIC0xOwoJfQoJZm9yIChpID0gMDtpIDwgSUNIX0ZJRk9JTkRFWDtpKyspIHsK
CQljaC0+aW5kZXhbaV0uYnVmZmVyID0gdnRvcGh5cyhjaC0+YnVmZmVyLT5idWYpICsKCQkgICAg
SUNIX0RFRkFVTFRfQkxPQ0tTWiAqIGk7CgkJaWYgKGNoLT5kaXIgPT0gUENNRElSX1BMQVkpCgkJ
CWNoLT5pbmRleFtpXS5sZW5ndGggPSAwOwoJCWVsc2UKCQkJY2gtPmluZGV4W2ldLmxlbmd0aCA9
IElDSF9CRENfSU9DICsKCQkJICAgIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJfQoJcmV0dXJu
IDA7Cn0KCi8qIHBsYXkgY2hhbm5lbCBpbnRlcmZhY2UgKi8Kc3RhdGljIGludAppY2hwY2hhbl9w
b3dlcihzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCBzdykKewoJdV9pbnQzMl90IGNyOwoJaW50IGk7
CgoJY3IgPSBpY2hfcmRjZChzYywgQUM5N19SRUdfUE9XRVIpOwoJaWYgKHN3KSB7IC8qIHBvd2Vy
IG9uICovCgkJY3IgJj0gfkFDOTdfUE9XRVJfUE9VVFBPV0VSOwoJCWljaF93cmNkKHNjLCBBQzk3
X1JFR19QT1dFUiwgY3IpOwoJCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCQlj
ciA9IGljaF9yZGNkKHNjLCBBQzk3X1JFR19QT1dFUik7CgkJCWlmICgoY3IgJiBBQzk3X1BPV0VS
X1BPVVRSRUFEWSkgIT0gMCkKCQkJCWJyZWFrOwoJCX0KCX0KCWVsc2UgeyAvKiBwb3dlciBvZmYg
Ki8KCQljciB8PSBBQzk3X1BPV0VSX1BPVVRQT1dFUjsKCQlpY2hfd3JjZChzYywgQUM5N19SRUdf
UE9XRVIsIGNyKTsKCQlmb3IgKGkgPSAwO2kgPCBJQ0hfVElNRU9VVDtpKyspIHsKCQkJY3IgPSBp
Y2hfcmRjZChzYywgQUM5N19SRUdfUE9XRVIpOwoJCQlpZiAoKGNyICYgQUM5N19QT1dFUl9QT1VU
UkVBRFkpID09IDApCgkJCQlicmVhazsKCQl9Cgl9CglpZiAoaSA9PSBJQ0hfVElNRU9VVCkKCQly
ZXR1cm4gLTE7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgKgppY2hwY2hhbl9pbml0KHZvaWQg
KmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50IGRpcikKewoJc3RydWN0
IHNjX2luZm8gKnNjID0gZGV2aW5mbzsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQzMl90
IGNyOwoJaW50IGk7CgojaWYoMCkKCWRldmljZV9wcmludGYoc2MtPmRldiwgImljaHBjaGFuX2lu
aXQoMHglMDh4LCAweCUwOHgsIDB4JTA4eCwgJWQpXG4iLCBkZXZpbmZvLCBiLCBjLCBkaXIpOwoj
ZW5kaWYKCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hf
UkVHX1BPX0NSLCAwKTsKCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1i
YXJoLCBJQ0hfUkVHX1BPX0NSLAoJICAgIElDSF9YX0NSX1JSKTsKCWZvciAoaSA9IDA7aSA8IElD
SF9USU1FT1VUO2krKykgewoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNj
LT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QT19DUik7CgkJaWYgKGNyID09IDApCgkJCWJyZWFr
OwoJfQoJaWYgKGkgPT0gSUNIX1RJTUVPVVQpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJj
YW5ub3QgcmVzZXQgcGxheSBjb2RlY1xuIik7CgkJcmV0dXJuIE5VTEw7Cgl9CglpZiAoaWNocGNo
YW5fcG93ZXIoc2MsIDEpID09IC0xKSB7CgkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAicGxheSBE
QUMgbm90IHJlYWR5XG4iKTsKCQlyZXR1cm4gTlVMTDsKCX0KCWljaHBjaGFuX3Bvd2VyKHNjLCAw
KTsKCWlmICgoY2ggPSBtYWxsb2Moc2l6ZW9mKCpjaCksIE1fREVWQlVGLCBNX05PV0FJVCkpID09
IE5VTEwpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgY2hhbm5l
bCBpbmZvIGFyZWFcbiIpOwoJCXJldHVybiBOVUxMOwoJfQoJY2gtPmJ1ZmZlciA9IGI7CgljaC0+
Y2hhbm5lbCA9IGM7CgljaC0+cGFyZW50ID0gc2M7CgljaC0+ZGlyID0gUENNRElSX1BMQVk7Cglj
aC0+cnVuID0gMDsKCWNoLT5sdmkgPSAwOwoJaWYgKGljaGNoYW5faW5pdGJ1ZihjaCkpIHsKCQlk
ZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgY2hhbm5lbCBidWZmZXJcbiIp
OwoJCXJldHVybiBOVUxMOwoJfQoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+
bmFibWJhcmgsIElDSF9SRUdfUE9fQkRCQVIsCgkgICAgKHVfaW50MzJfdCl2dG9waHlzKGNoLT5p
bmRleCkpOwoJc2MtPnBvID0gY2g7CglpZiAoYm9vdHZlcmJvc2UpIHsKCQlkZXZpY2VfcHJpbnRm
KHNjLT5kZXYsIlBsYXkgY29kZWMgc3VwcG9ydCByYXRlKEh6KTogIik7CgkJZm9yIChpID0gMDtp
Y2hfcmF0ZVtpXSAhPSAwO2krKykgewoJCQlpZiAoaWNocGNoYW5fc2V0c3BlZWQoY2gsIGljaF9y
YXRlW2ldKSA9PSBpY2hfcmF0ZVtpXSkgewoJCQkJcHJpbnRmKCIlZCAiLCBpY2hfcmF0ZVtpXSk7
CgkJCX0KCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQoJcmV0dXJuIGNoOwp9CgpzdGF0aWMgaW50Cmlj
aHBjaGFuX3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKQp7CiNpZigwKQoJc3RydWN0IHNjX2No
aW5mbyAqY2ggPSBkYXRhOwoJZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hh
bl9zZXRkaXIoMHglMDh4LCAlZClcbiIsIGRhdGEsIGRpcik7CiNlbmRpZgoJcmV0dXJuIDA7Cn0K
CnN0YXRpYyBpbnQKaWNocGNoYW5fc2V0Zm9ybWF0KHZvaWQgKmRhdGEsIHVfaW50MzJfdCBmb3Jt
YXQpCnsKCXN0cnVjdCBzY19jaGluZm8gKmNoID0gZGF0YTsKCiNpZigwKQoJZGV2aWNlX3ByaW50
ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl9zZXRmb3JtYXQoMHglMDh4LCAweCUwOHgpXG4i
LCBkYXRhLCBmb3JtYXQpOwojZW5kaWYKCWNoLT5mbXQgPSBmb3JtYXQ7CglyZXR1cm4gMDsKfQoK
c3RhdGljIGludAppY2hwY2hhbl9zZXRzcGVlZCh2b2lkICpkYXRhLCB1X2ludDMyX3Qgc3BlZWQp
CnsKCXN0cnVjdCBzY19jaGluZm8gKmNoID0gZGF0YTsKCXVfaW50MzJfdCBleHRjYXA7CgojaWYo
MCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fc2V0c3BlZWQoMHgl
MDh4LCAlZClcbiIsIGRhdGEsIHNwZWVkKTsKI2VuZGlmCglleHRjYXAgPSBpY2hfcmRjZChjaC0+
cGFyZW50LCBBQzk3X1JFR0VYVF9JRCk7CglpZiAoZXh0Y2FwICYgQUM5N19FWFRDQVBfVlJBKSB7
CgkJaWNoX3dyY2QoY2gtPnBhcmVudCwgQUM5N19SRUdFWFRfRkRBQ1JBVEUsIHNwZWVkKTsKCQlj
aC0+c3BkID0gaWNoX3JkY2QoY2gtPnBhcmVudCwgQUM5N19SRUdFWFRfRkRBQ1JBVEUpOwoJfQoJ
ZWxzZSB7CgkJY2gtPnNwZCA9IDQ4MDAwOyAvKiBiZWZvcmUgQUMnOTcgUjIuMCAqLwoJfQojaWYo
MCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fc2V0c3BlZWQoKTpj
aC0+c3BkID0gJWRcbiIsIGNoLT5zcGQpOwojZW5kaWYKCXJldHVybiBjaC0+c3BkOwp9CgpzdGF0
aWMgaW50CmljaHBjaGFuX3NldGJsb2Nrc2l6ZSh2b2lkICpkYXRhLCB1X2ludDMyX3QgYmxvY2tz
aXplKQp7CglyZXR1cm4gYmxvY2tzaXplOwp9CgovKiB1cGRhdGUgaW5kZXggKi8Kc3RhdGljIHZv
aWQKaWNocGNoYW5fdXBkYXRlKHN0cnVjdCBzY19jaGluZm8gKmNoKQp7CglzdHJ1Y3Qgc2NfaW5m
byAqc2MgPSBjaC0+cGFyZW50OwoJdV9pbnQzMl90IGx2aTsKCWludCBmcDsKCWludCBsYXN0OwoJ
aW50IGk7CgojaWYoMCkKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5f
dXBkYXRlKClcbiIpOwojZW5kaWYKCWZwID0gY2gtPmJ1ZmZlci0+ZnA7CglsYXN0ID0gZnAgLSAx
OwoJaWYgKGxhc3QgPCAwKQoJCWxhc3QgPSBJQ0hfREVGQVVMVF9CTE9DS1NaICogSUNIX0ZJRk9J
TkRFWCAtIDE7CglsdmkgPSBsYXN0IC8gSUNIX0RFRkFVTFRfQkxPQ0tTWjsKCWlmIChsdmkgPj0g
Y2gtPmx2aSkgewoJCWZvciAoaSA9IGNoLT5sdmk7aSA8IGx2aTtpKyspCgkJCWNoLT5pbmRleFtp
XS5sZW5ndGggPQoJCQkgICAgSUNIX0JEQ19JT0MgKyBJQ0hfREVGQVVMVF9CTE9DS1NaIC8gMjsK
CQljaC0+aW5kZXhbaV0ubGVuZ3RoID0gSUNIX0JEQ19JT0MgKyBJQ0hfQkRDX0JVUAoJCSAgICAr
IChsYXN0ICUgSUNIX0RFRkFVTFRfQkxPQ0tTWiArIDEpIC8gMjsKCX0KCWVsc2UgewoJCWZvciAo
aSA9IGNoLT5sdmk7aSA8IElDSF9GSUZPSU5ERVg7aSsrKQoJCQljaC0+aW5kZXhbaV0ubGVuZ3Ro
ID0KCQkJICAgIElDSF9CRENfSU9DICsgSUNIX0RFRkFVTFRfQkxPQ0tTWiAvIDI7CgkJZm9yIChp
ID0gMDtpIDwgbHZpO2krKykKCQkJY2gtPmluZGV4W2ldLmxlbmd0aCA9CgkJCSAgICBJQ0hfQkRD
X0lPQyArIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJCWNoLT5pbmRleFtpXS5sZW5ndGggPSBJ
Q0hfQkRDX0lPQyArIElDSF9CRENfQlVQCgkJICAgICsgKGxhc3QgJSBJQ0hfREVGQVVMVF9CTE9D
S1NaICsgMSkgLyAyOwoJfQoJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFi
bWJhcmgsIElDSF9SRUdfUE9fTFZJLCBsdmkpOwoJY2gtPmx2aSA9IGx2aTsKI2lmKDApCglkZXZp
Y2VfcHJpbnRmKGNoLT5wYXJlbnQtPmRldiwgImljaHBjaGFuX3VwZGF0ZSgpOmZwID0gJWQsIGx2
aSA9ICVkXG4iLCBmcCwgbHZpKTsKI2VuZGlmCglyZXR1cm47Cn0Kc3RhdGljIHZvaWQKaWNocGNo
YW5fZmlsbGJsYW5rKHN0cnVjdCBzY19jaGluZm8gKmNoKQp7CglzdHJ1Y3Qgc2NfaW5mbyAqc2Mg
PSBjaC0+cGFyZW50OwoKCWNoLT5sdmkrKzsKCWlmIChjaC0+bHZpID09IElDSF9GSUZPSU5ERVgp
CgkJY2gtPmx2aSA9IDA7CgliemVybyhjaC0+YnVmZmVyLT5idWYgKyBJQ0hfREVGQVVMVF9CTE9D
S1NaICogY2gtPmx2aSwKCSAgICBJQ0hfREVGQVVMVF9CTE9DS1NaKTsKCWNoLT5pbmRleFtjaC0+
bHZpXS5sZW5ndGggPSBJQ0hfQkRDX0JVUCArIElDSF9ERUZBVUxUX0JMT0NLU1ogLyAyOwoJYnVz
X3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fTFZJ
LCBjaC0+bHZpKTsKCXJldHVybjsKfQovKiBzZW1hbnRpYyBub3RlOiBtdXN0IHN0YXJ0IGF0IGJl
Z2lubmluZyBvZiBidWZmZXIgKi8Kc3RhdGljIGludAppY2hwY2hhbl90cmlnZ2VyKHZvaWQgKmRh
dGEsIGludCBnbykKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBkYXRhOwoJc3RydWN0IHNjX2lu
Zm8gKnNjID0gY2gtPnBhcmVudDsKCXVfaW50MzJfdCBjcjsKCWludCBpOwoKI2lmKDApCglkZXZp
Y2VfcHJpbnRmKGNoLT5wYXJlbnQtPmRldiwgImljaHBjaGFuX3RyaWdnZXIoMHglMDh4LCAlZClc
biIsIGRhdGEsIGdvKTsKI2VuZGlmCglzd2l0Y2ggKGdvKSB7CgljYXNlIFBDTVRSSUdfU1RBUlQ6
CiNpZigwKQoJCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fdHJpZ2dl
cigpOlBDTVRSSUdfU1RBUlRcbiIpOwojZW5kaWYKCQljaC0+cnVuID0gMTsKCQlpY2hwY2hhbl9w
b3dlcihzYywgMSk7CgkJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJh
cmgsIElDSF9SRUdfUE9fQkRCQVIsCgkJICAgICh1X2ludDMyX3QpdnRvcGh5cyhjaC0+aW5kZXgp
KTsKCQljaC0+bHZpID0gSUNIX0ZJRk9JTkRFWCAtIDE7CgkJaWNocGNoYW5fdXBkYXRlKGNoKTsK
CQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19Q
T19DUiwKCQkgICAgSUNIX1hfQ1JfUlBCTSB8IElDSF9YX0NSX0xWQklFIHwgSUNIX1hfQ1JfSU9D
RSB8CgkJICAgIElDSF9YX0NSX0ZFSUUpOwoJCWJyZWFrOwoJY2FzZSBQQ01UUklHX1NUT1A6CiNp
ZigwKQoJCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAiaWNocGNoYW5fdHJpZ2dlcigp
OlBDTVRSSUdfU1RPUFxuIik7CiNlbmRpZgoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFi
bWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QT19DUik7CgkJYnVzX3NwYWNlX3dy
aXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fQ1IsCgkJICAgIGNy
ICYgfklDSF9YX0NSX1JQQk0pOwoJCWljaHBjaGFuX3Bvd2VyKHNjLCAwKTsKCQljaC0+cnVuID0g
MDsKCQlicmVhazsKCWNhc2UgUENNVFJJR19BQk9SVDoKI2lmKDApCgkJZGV2aWNlX3ByaW50Zihj
aC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl90cmlnZ2VyKCk6UENNVFJJR19BQk9SVFxuIik7CiNl
bmRpZgoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hf
UkVHX1BPX0NSLAoJCSAgICAwKTsKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNj
LT5uYWJtYmFyaCwgSUNIX1JFR19QT19DUiwKCQkgICAgSUNIX1hfQ1JfUlIpOwoJCWZvciAoaSA9
IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCQljciA9IGJ1c19zcGFjZV9yZWFkXzEoc2MtPm5h
Ym1iYXJ0LCBzYy0+bmFibWJhcmgsCgkJCSAgICBJQ0hfUkVHX1BPX0NSKTsKCQkJaWYgKGNyID09
IDApCgkJCQlicmVhazsKCQl9CgkJaWNocGNoYW5fcG93ZXIoc2MsIDApOwoJCWNoLT5ydW4gPSAw
OwoJCWNoLT5sdmkgPSAwOwoJCWNoLT5jaGFubmVsLT5mbGFncyAmPSB+Q0hOX0ZfREVBRDsKCQli
cmVhazsKCWRlZmF1bHQ6CgkJYnJlYWs7Cgl9CglyZXR1cm4gMDsKfQoKc3RhdGljIGludAppY2hw
Y2hhbl9nZXRwdHIodm9pZCAqZGF0YSkKewoJc3RydWN0IHNjX2NoaW5mbyAqY2ggPSBkYXRhOwoJ
c3RydWN0IHNjX2luZm8gKnNjID0gY2gtPnBhcmVudDsKCXVfaW50MzJfdCBjaTsKCiNpZigwKQoJ
ZGV2aWNlX3ByaW50ZihjaC0+cGFyZW50LT5kZXYsICJpY2hwY2hhbl9nZXRwdHIoMHglMDh4KVxu
IiwgZGF0YSk7CiNlbmRpZgoJY2kgPSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2Mt
Pm5hYm1iYXJoLCBJQ0hfUkVHX1BPX0NJVik7CiNpZigwKQoJZGV2aWNlX3ByaW50ZihjaC0+cGFy
ZW50LT5kZXYsICJpY2hwY2hhbl9nZXRwdHIoKTpJQ0hfUkVHX1BPX0NJViA9ICVkXG4iLCBjaSk7
CiNlbmRpZgoJLyoKCWlmIChjaSA9PSAwKQoJCXJldHVybiBJQ0hfREVGQVVMVF9CTE9DS1NaICog
SUNIX0ZJRk9JTkRFWCAtIDE7CgllbHNlCgkJcmV0dXJuIElDSF9ERUZBVUxUX0JMT0NLU1ogKiBj
aSAtIDE7CgkqLwoJcmV0dXJuIElDSF9ERUZBVUxUX0JMT0NLU1ogKiBjaTsKfQoKc3RhdGljIHBj
bWNoYW5fY2FwcyAqCmljaHBjaGFuX2dldGNhcHModm9pZCAqZGF0YSkKewojaWYoMCkKCXN0cnVj
dCBzY19jaGluZm8gKmNoID0gZGF0YTsKCWRldmljZV9wcmludGYoY2gtPnBhcmVudC0+ZGV2LCAi
aWNocGNoYW5fZ2V0Y2FwcygweCUwOHgpXG4iLCBkYXRhKTsKI2VuZGlmCglyZXR1cm4gJmljaF9w
bGF5Y2FwczsKfQoKLyogcmVjb3JkIGNoYW5uZWwgaW50ZXJmYWNlICovCnN0YXRpYyBpbnQKaWNo
cmNoYW5fcG93ZXIoc3RydWN0IHNjX2luZm8gKnNjLCBpbnQgc3cpCnsKCXVfaW50MzJfdCBjcjsK
CWludCBpOwoKCWNyID0gaWNoX3JkY2Qoc2MsIEFDOTdfUkVHX1BPV0VSKTsKCWlmIChzdykgeyAv
KiBwb3dlciBvbiAqLwoJCWNyICY9IH5BQzk3X1BPV0VSX1BJTlBPV0VSOwoJCWljaF93cmNkKHNj
LCBBQzk3X1JFR19QT1dFUiwgY3IpOwoJCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykg
ewoJCQljciA9IGljaF9yZGNkKHNjLCBBQzk3X1JFR19QT1dFUik7CgkJCWlmICgoY3IgJiBBQzk3
X1BPV0VSX1BJTlJFQURZKSAhPSAwKQoJCQkJYnJlYWs7CgkJfQoJfQoJZWxzZSB7IC8qIHBvd2Vy
IG9mZiAqLwoJCWNyIHw9IEFDOTdfUE9XRVJfUElOUE9XRVI7CgkJaWNoX3dyY2Qoc2MsIEFDOTdf
UkVHX1BPV0VSLCBjcik7CgkJZm9yIChpID0gMDtpIDwgSUNIX1RJTUVPVVQ7aSsrKSB7CgkJCWNy
ID0gaWNoX3JkY2Qoc2MsIEFDOTdfUkVHX1BPV0VSKTsKCQkJaWYgKChjciAmIEFDOTdfUE9XRVJf
UElOUkVBRFkpID09IDApCgkJCQlicmVhazsKCQl9Cgl9CglpZiAoaSA9PSBJQ0hfVElNRU9VVCkK
CQlyZXR1cm4gLTE7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgKgppY2hyY2hhbl9pbml0KHZv
aWQgKmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50IGRpcikKewoJc3Ry
dWN0IHNjX2luZm8gKnNjID0gZGV2aW5mbzsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQz
Ml90IGNyOwoJaW50IGk7CgoJLyogcmVzZXQgY29kZWMgKi8KCWJ1c19zcGFjZV93cml0ZV8xKHNj
LT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NSLCAwKTsKCWJ1c19zcGFjZV93
cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NSLAoJICAgIElD
SF9YX0NSX1JSKTsKCWZvciAoaSA9IDA7aSA8IElDSF9USU1FT1VUO2krKykgewoJCWNyID0gYnVz
X3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19Q
SV9DUik7CgkJaWYgKGNyID09IDApCgkJCWJyZWFrOwoJfQoJaWYgKGkgPT0gSUNIX1RJTUVPVVQp
IHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjYW5ub3QgcmVzZXQgcmVjb3JkIGNvZGVjXG4i
KTsKCQlyZXR1cm4gTlVMTDsKCX0KCWlmIChpY2hyY2hhbl9wb3dlcihzYywgMSkgPT0gLTEpIHsK
CQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJyZWNvcmQgQURDIG5vdCByZWFkeVxuIik7CgkJcmV0
dXJuIE5VTEw7Cgl9CglpY2hyY2hhbl9wb3dlcihzYywgMCk7CglpZiAoKGNoID0gbWFsbG9jKHNp
emVvZigqY2gpLCBNX0RFVkJVRiwgTV9OT1dBSVQpKSA9PSBOVUxMKSB7CgkJZGV2aWNlX3ByaW50
ZihzYy0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIGNoYW5uZWwgaW5mbyBhcmVhXG4iKTsKCQlyZXR1
cm4gTlVMTDsKCX0KCWNoLT5idWZmZXIgPSBiOwoJY2gtPmNoYW5uZWwgPSBjOwoJY2gtPnBhcmVu
dCA9IHNjOwoJY2gtPmRpciA9IFBDTURJUl9SRUM7CgljaC0+cnVuID0gMDsKCWNoLT5sdmkgPSAw
OwoJaWYgKGljaGNoYW5faW5pdGJ1ZihjaCkpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJj
YW5ub3QgYWxsb2NhdGUgY2hhbm5lbCBidWZmZXJcbiIpOwoJCXJldHVybiBOVUxMOwoJfQoJYnVz
X3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQkRC
QVIsCgkgICAgKHVfaW50MzJfdCl2dG9waHlzKGNoLT5pbmRleCkpOwoJc2MtPnBpID0gY2g7Cglp
ZiAoYm9vdHZlcmJvc2UpIHsKCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsIlJlY29yZCBjb2RlYyBz
dXBwb3J0IHJhdGUoSHopOiAiKTsKCQlmb3IgKGkgPSAwO2ljaF9yYXRlW2ldICE9IDA7aSsrKSB7
CgkJCWlmIChpY2hwY2hhbl9zZXRzcGVlZChjaCwgaWNoX3JhdGVbaV0pID09IGljaF9yYXRlW2ld
KSB7CgkJCQlwcmludGYoIiVkICIsIGljaF9yYXRlW2ldKTsKCQkJfQoJCX0KCQlwcmludGYoIlxu
Iik7Cgl9CglyZXR1cm4gY2g7Cn0KCnN0YXRpYyBpbnQKaWNocmNoYW5fc2V0ZGlyKHZvaWQgKmRh
dGEsIGludCBkaXIpCnsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CmljaHJjaGFuX3NldGZvcm1h
dCh2b2lkICpkYXRhLCB1X2ludDMyX3QgZm9ybWF0KQp7CglzdHJ1Y3Qgc2NfY2hpbmZvICpjaCA9
IGRhdGE7CgoJY2gtPmZtdCA9IGZvcm1hdDsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludAppY2hy
Y2hhbl9zZXRzcGVlZCh2b2lkICpkYXRhLCB1X2ludDMyX3Qgc3BlZWQpCnsKCXN0cnVjdCBzY19j
aGluZm8gKmNoID0gZGF0YTsKCXVfaW50MzJfdCBleHRjYXA7CgoJZXh0Y2FwID0gaWNoX3JkY2Qo
Y2gtPnBhcmVudCwgQUM5N19SRUdFWFRfSUQpOwoJaWYgKGV4dGNhcCAmIEFDOTdfRVhUQ0FQX1ZS
TSkgewoJCWljaF93cmNkKGNoLT5wYXJlbnQsIEFDOTdfUkVHRVhUX0xBRENSQVRFLCBzcGVlZCk7
CgkJY2gtPnNwZCA9IGljaF9yZGNkKGNoLT5wYXJlbnQsIEFDOTdfUkVHRVhUX0xBRENSQVRFKTsK
CX0KCWVsc2UgewoJCWNoLT5zcGQgPSA0ODAwMDsgLyogYmVmb3JlIEFDJzk3IFIyLjAgKi8KCX0K
CglyZXR1cm4gY2gtPnNwZDsKfQoKc3RhdGljIGludAppY2hyY2hhbl9zZXRibG9ja3NpemUodm9p
ZCAqZGF0YSwgdV9pbnQzMl90IGJsb2Nrc2l6ZSkKewoJcmV0dXJuIGJsb2Nrc2l6ZTsKfQoKLyog
c2VtYW50aWMgbm90ZTogbXVzdCBzdGFydCBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyICovCnN0YXRp
YyBpbnQKaWNocmNoYW5fdHJpZ2dlcih2b2lkICpkYXRhLCBpbnQgZ28pCnsKCXN0cnVjdCBzY19j
aGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7Cgl1X2lu
dDMyX3QgY3I7CglpbnQgaTsKCglzd2l0Y2ggKGdvKSB7CgljYXNlIFBDTVRSSUdfU1RBUlQ6CgkJ
Y2gtPnJ1biA9IDE7CgkJaWNocmNoYW5fcG93ZXIoc2MsIDEpOwoJCWJ1c19zcGFjZV93cml0ZV80
KHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0JEQkFSLAoJCSAgICAodV9p
bnQzMl90KXZ0b3BoeXMoY2gtPmluZGV4KSk7CgkJY2gtPmx2aSA9IElDSF9GSUZPSU5ERVggLSAx
OwoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVH
X1BJX0xWSSwKCQkgICAgY2gtPmx2aSk7CgkJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0
LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAgIElDSF9YX0NSX1JQQk0gfCBJQ0hf
WF9DUl9MVkJJRSB8IElDSF9YX0NSX0lPQ0UgfAoJCSAgICBJQ0hfWF9DUl9GRUlFKTsKCQlicmVh
azsKCWNhc2UgUENNVFJJR19TVE9QOgoJCWNyID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJh
cnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNIX1JFR19QSV9DUik7CgkJYnVzX3NwYWNlX3dyaXRl
XzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAgIGNyICYg
fklDSF9YX0NSX1JQQk0pOwoJCWljaHJjaGFuX3Bvd2VyKHNjLCAwKTsKCQljaC0+cnVuID0gMDsK
CQlicmVhazsKCWNhc2UgUENNVFJJR19BQk9SVDoKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFi
bWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9DUiwKCQkgICAgMCk7CgkJYnVzX3NwYWNl
X3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUElfQ1IsCgkJICAg
IElDSF9YX0NSX1JSKTsKCQlmb3IgKGkgPSAwO2kgPCBJQ0hfVElNRU9VVDtpKyspIHsKCQkJY3Ig
PSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLAoJCQkgICAgSUNI
X1JFR19QSV9DUik7CgkJCWlmIChjciA9PSAwKQoJCQkJYnJlYWs7CgkJfQoJCWljaHJjaGFuX3Bv
d2VyKHNjLCAwKTsKCQljaC0+cnVuID0gMDsKCQljaC0+bHZpID0gMDsKCQljaC0+Y2hhbm5lbC0+
ZmxhZ3MgJj0gfkNITl9GX0RFQUQ7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWJyZWFrOwoJfQoJcmV0
dXJuIDA7Cn0KCnN0YXRpYyBpbnQKaWNocmNoYW5fZ2V0cHRyKHZvaWQgKmRhdGEpCnsKCXN0cnVj
dCBzY19jaGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBzY19pbmZvICpzYyA9IGNoLT5wYXJlbnQ7
Cgl1X2ludDMyX3QgY2k7CgoJY2kgPSBidXNfc3BhY2VfcmVhZF8xKHNjLT5uYWJtYmFydCwgc2Mt
Pm5hYm1iYXJoLCBJQ0hfUkVHX1BJX0NJVik7CglyZXR1cm4gY2kgKiBJQ0hfREVGQVVMVF9CTE9D
S1NaOwp9CgpzdGF0aWMgcGNtY2hhbl9jYXBzICoKaWNocmNoYW5fZ2V0Y2Fwcyh2b2lkICpkYXRh
KQp7CglyZXR1cm4gJmljaF9yZWNjYXBzOwp9CgovKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgKi8K
c3RhdGljIHZvaWQKaWNoX2ludHIodm9pZCAqcCkKewoJc3RydWN0IHNjX2luZm8gKnNjID0gKHN0
cnVjdCBzY19pbmZvICopcDsKCXN0cnVjdCBzY19jaGluZm8gKmNoOwoJdV9pbnQzMl90IGNwOwoJ
dV9pbnQzMl90IHNnOwoJdV9pbnQzMl90IHN0OwoJdV9pbnQzMl90IGx2aTsKCiNpZigwKQoJZGV2
aWNlX3ByaW50ZihzYy0+ZGV2LCAiaWNoX2ludHIoMHglMDh4KVxuIiwgcCk7CiNlbmRpZgoJLyog
Y2hlY2sgaW50ZXJmYWNlIHN0YXR1cyAqLwoJc2cgPSBidXNfc3BhY2VfcmVhZF80KHNjLT5uYWJt
YmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX0dMT0JfU1RBKTsKI2lmKDApCglkZXZpY2VfcHJp
bnRmKHNjLT5kZXYsICJpY2hfaW50cigpOlJFR19HTE9CX1NUQSA9IDB4JTA4eFxuIiwgc2cpOwoj
ZW5kaWYKCWlmIChzZyAmIElDSF9HTE9CX1NUQV9QT0lOVCkgewoJCS8qIFBDTSBPdXQgSU5UZXJy
dXB0ICovCgkJLyogbWFzayBpbnRlcnJ1cHQgKi8KCQljcCA9IGJ1c19zcGFjZV9yZWFkXzEoc2Mt
Pm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkJICAgIElDSF9SRUdfUE9fQ1IpOwoJCWNwICY9IH4o
SUNIX1hfQ1JfTFZCSUUgfCBJQ0hfWF9DUl9JT0NFIHwgSUNIX1hfQ1JfRkVJRSk7CgkJYnVzX3Nw
YWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsIElDSF9SRUdfUE9fQ1IsCgkJ
ICAgIGNwKTsKCQkvKiBjaGVjayBjaGFubmVsIHN0YXR1cyAqLwoJCWNoID0gc2MtPnBvOwoJCXN0
ID0gYnVzX3NwYWNlX3JlYWRfMihzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNI
X1JFR19QT19TUik7CiNpZigwKQoJCWRldmljZV9wcmludGYoc2MtPmRldiwgImljaF9pbnRyKCk6
UkVHX1BPX1NSID0gMHglMDJ4XG4iLCBzdCk7CiNlbmRpZgoJCWlmIChzdCAmIChJQ0hfWF9TUl9C
Q0lTIHwgSUNIX1hfU1JfTFZCQ0kpKSB7CgkJCS8qIHBsYXkgYnVmZmVyIGJsb2NrIGNvbXBsZXRl
ICovCgkJCWlmIChzdCAmIElDSF9YX1NSX0xWQkNJKQoJCQkJbHZpID0gY2gtPmx2aTsKCQkJLyog
dXBkYXRlIGJ1ZmZlciAqLwoJCQljaG5faW50cihjaC0+Y2hhbm5lbCk7CgkJCWljaHBjaGFuX3Vw
ZGF0ZShjaCk7CgkJCWlmIChzdCAmIElDSF9YX1NSX0xWQkNJKSB7CgkJCQkvKiByZS1jaGVjayB1
bmRlcmZsb3cgc3RhdHVzICovCgkJCQlpZiAobHZpID09IGNoLT5sdmkpIHsKCQkJCQljaC0+YnVm
ZmVyLT51bmRlcmZsb3cgPSAxOwoJCQkJCWljaHBjaGFuX2ZpbGxibGFuayhjaCk7CgkJCQl9CgkJ
CX0KCQl9CgkJLyogY2xlYXIgc3RhdHVzIGJpdCAqLwoJCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5u
YWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX1BPX1NSLAoJCSAgICBzdCAmIChJQ0hfWF9T
Ul9GSUZPRSB8IElDSF9YX1NSX0JDSVMgfCBJQ0hfWF9TUl9MVkJDSSkpOwoJCS8qIHNldCBpbnRl
cnJ1cHQgKi8KCQljcCB8PSAoSUNIX1hfQ1JfTFZCSUUgfCBJQ0hfWF9DUl9JT0NFIHwgSUNIX1hf
Q1JfRkVJRSk7CgkJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgs
IElDSF9SRUdfUE9fQ1IsCgkJICAgIGNwKTsKCX0KCWlmIChzZyAmIElDSF9HTE9CX1NUQV9QSUlO
VCkgewoJCS8qIFBDTSBJbiBJTlRlcnJ1cHQgKi8KCQkvKiBtYXNrIGludGVycnVwdCAqLwoJCWNw
ID0gYnVzX3NwYWNlX3JlYWRfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkgICAgSUNI
X1JFR19QSV9DUik7CgkJY3AgJj0gfihJQ0hfWF9DUl9MVkJJRSB8IElDSF9YX0NSX0lPQ0UgfCBJ
Q0hfWF9DUl9GRUlFKTsKCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJt
YmFyaCwgSUNIX1JFR19QSV9DUiwKCQkgICAgY3ApOwoJCS8qIGNoZWNrIGNoYW5uZWwgc3RhdHVz
ICovCgkJY2ggPSBzYy0+cGk7CgkJc3QgPSBidXNfc3BhY2VfcmVhZF8yKHNjLT5uYWJtYmFydCwg
c2MtPm5hYm1iYXJoLAoJCSAgICBJQ0hfUkVHX1BJX1NSKTsKI2lmKDApCgkJZGV2aWNlX3ByaW50
ZihzYy0+ZGV2LCAiaWNoX2ludHIoKTpSRUdfUElfU1IgPSAweCUwMnhcbiIsIHN0KTsKI2VuZGlm
CgkJaWYgKHN0ICYgKElDSF9YX1NSX0JDSVMgfCBJQ0hfWF9TUl9MVkJDSSkpIHsKCQkJLyogcmVj
b3JkIGJ1ZmZlciBibG9jayBmaWxsZWQgKi8KCQkJaWYgKHN0ICYgSUNIX1hfU1JfTFZCQ0kpCgkJ
CQlsdmkgPSBjaC0+bHZpOwoJCQkvKiB1cGRhdGUgc3BhY2UgKi8KCQkJY2huX2ludHIoY2gtPmNo
YW5uZWwpOwoJCQljaC0+bHZpID0gY2gtPmJ1ZmZlci0+cnAgLyBJQ0hfREVGQVVMVF9CTE9DS1Na
IC0gMTsKCQkJaWYgKGNoLT5sdmkgPCAwKQoJCQkJY2gtPmx2aSA9IElDSF9GSUZPSU5ERVggLSAx
OwoJCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwKCQkJICAg
IElDSF9SRUdfUElfTFZJLCBjaC0+bHZpKTsKCQkJaWYgKHN0ICYgSUNIX1hfU1JfTFZCQ0kpIHsK
CQkJCS8qIHJlLWNoZWNrIHVuZGVyZmxvdyBzdGF0dXMgKi8KCQkJCWlmIChsdmkgPT0gY2gtPmx2
aSkgewoJCQkJCWNoLT5sdmkrKzsKCQkJCQlpZiAoY2gtPmx2aSA9PSBJQ0hfRklGT0lOREVYKQoJ
CQkJCQljaC0+bHZpID0gMDsKCQkJCQlidXNfc3BhY2Vfd3JpdGVfMShzYy0+bmFibWJhcnQsCgkJ
CQkJICAgIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9MVkksCgkJCQkJICAgIGNoLT5sdmkpOwoJ
CQkJfQoJCQl9CgkJfQoJCS8qIGNsZWFyIHN0YXR1cyBiaXQgKi8KCQlidXNfc3BhY2Vfd3JpdGVf
MihzYy0+bmFibWJhcnQsIHNjLT5uYWJtYmFyaCwgSUNIX1JFR19QSV9TUiwKCQkgICAgc3QgJiAo
SUNIX1hfU1JfRklGT0UgfCBJQ0hfWF9TUl9CQ0lTIHwgSUNIX1hfU1JfTFZCQ0kpKTsKCQkvKiBz
ZXQgaW50ZXJydXB0ICovCgkJY3AgfD0gKElDSF9YX0NSX0xWQklFIHwgSUNIX1hfQ1JfSU9DRSB8
IElDSF9YX0NSX0ZFSUUpOwoJCWJ1c19zcGFjZV93cml0ZV8xKHNjLT5uYWJtYmFydCwgc2MtPm5h
Ym1iYXJoLCBJQ0hfUkVHX1BJX0NSLAoJCSAgICBjcCk7Cgl9Cn0KCi8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CgovKgogKiBQcm9iZSBhbmQgYXR0YWNoIHRoZSBjYXJkCiAqLwoKc3RhdGljIGludAppY2hfaW5p
dChzdHJ1Y3Qgc2NfaW5mbyAqc2MpCnsKCXVfaW50MzJfdCBzdGF0OwoJdV9pbnQzMl90IHNhdmU7
CgoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkgICAgSUNI
X1JFR19HTE9CX0NOVCwgSUNIX0dMT0JfQ1RMX0NPTEQpOwoJREVMQVkoNjAwMDAwKTsKCXN0YXQg
PSBidXNfc3BhY2VfcmVhZF80KHNjLT5uYWJtYmFydCwgc2MtPm5hYm1iYXJoLCBJQ0hfUkVHX0dM
T0JfU1RBKTsKCWlmICgoc3RhdCAmIElDSF9HTE9CX1NUQV9QQ1IpID09IDApCgkJcmV0dXJuIC0x
OwoJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPm5hYm1iYXJ0LCBzYy0+bmFibWJhcmgsCgkgICAgSUNI
X1JFR19HTE9CX0NOVCwgSUNIX0dMT0JfQ1RMX0NPTEQgfCBJQ0hfR0xPQl9DVExfUFJFUyk7Cglz
YXZlID0gYnVzX3NwYWNlX3JlYWRfMihzYy0+bmFtYmFydCwgc2MtPm5hbWJhcmgsIEFDOTdfTUlY
X01BU1RFUik7CglidXNfc3BhY2Vfd3JpdGVfMihzYy0+bmFtYmFydCwgc2MtPm5hbWJhcmgsIEFD
OTdfTUlYX01BU1RFUiwKCQkJICBBQzk3X01VVEUpOwoJaWYgKGljaF93YWl0Y2Qoc2MpID09IEVU
SU1FRE9VVCkKCQlyZXR1cm4gLTE7CglERUxBWSg2MDApOyAvKiBpdCBpcyBuZWVkIGZvciBzb21l
IHN5c3RlbSAqLwoJc3RhdCA9IGJ1c19zcGFjZV9yZWFkXzIoc2MtPm5hbWJhcnQsIHNjLT5uYW1i
YXJoLCBBQzk3X01JWF9NQVNURVIpOwoJaWYgKHN0YXQgIT0gQUM5N19NVVRFKQoJCXJldHVybiAt
MTsKCWJ1c19zcGFjZV93cml0ZV8yKHNjLT5uYW1iYXJ0LCBzYy0+bmFtYmFyaCwgQUM5N19NSVhf
TUFTVEVSLCBzYXZlKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CmljaF9maW5kZGV2KHVfaW50
MzJfdCBkZXYsIHVfaW50MzJfdCBzdWJkZXYpCnsKCWludCBpOwoKCWZvciAoaSA9IDA7IGljaF9k
ZXZzW2ldLmRldjsgaSsrKSB7CgkJaWYgKGljaF9kZXZzW2ldLmRldiA9PSBkZXYgJiYKCQkgICAg
KGljaF9kZXZzW2ldLnN1YmRldiA9PSBzdWJkZXYgfHwgaWNoX2RldnNbaV0uc3ViZGV2ID09IDAp
KQoJCQlyZXR1cm4gaTsKCX0KCXJldHVybiAtMTsKfQoKc3RhdGljIGludAppY2hfcGNpX3Byb2Jl
KGRldmljZV90IGRldikKewoJaW50IGk7Cgl1X2ludDMyX3Qgc3ViZGV2OwoKCXN1YmRldiA9IChw
Y2lfZ2V0X3N1YmRldmljZShkZXYpIDw8IDE2KSB8IHBjaV9nZXRfc3VidmVuZG9yKGRldik7Cglp
ID0gaWNoX2ZpbmRkZXYocGNpX2dldF9kZXZpZChkZXYpLCBzdWJkZXYpOwoJaWYgKGkgPj0gMCkg
ewoJCWRldmljZV9zZXRfZGVzYyhkZXYsIGljaF9kZXZzW2ldLm5hbWUpOwoJCXJldHVybiAwOwoJ
fSBlbHNlCgkJcmV0dXJuIEVOWElPOwp9CgpzdGF0aWMgaW50CmljaF9wY2lfYXR0YWNoKGRldmlj
ZV90IGRldikKewoJdV9pbnQzMl90CWRhdGE7Cgl1X2ludDMyX3QJc3ViZGV2OwoJdV9pbnQzMl90
CWV4dGNhcDsKCXN0cnVjdCBzY19pbmZvICpzYzsKCWNoYXIgCQlzdGF0dXNbU05EX1NUQVRVU0xF
Tl07CgoJaWYgKChzYyA9IG1hbGxvYyhzaXplb2YoKnNjKSwgTV9ERVZCVUYsIE1fTk9XQUlUKSkg
PT0gTlVMTCkgewoJCWRldmljZV9wcmludGYoZGV2LCAiY2Fubm90IGFsbG9jYXRlIHNvZnRjXG4i
KTsKCQlyZXR1cm4gRU5YSU87Cgl9CgoJYnplcm8oc2MsIHNpemVvZigqc2MpKTsKCXNjLT5kZXYg
PSBkZXY7CglzdWJkZXYgPSAocGNpX2dldF9zdWJkZXZpY2UoZGV2KSA8PCAxNikgfCBwY2lfZ2V0
X3N1YnZlbmRvcihkZXYpOwoJc2MtPnR5cGUgPSBpY2hfZmluZGRldihwY2lfZ2V0X2RldmlkKGRl
diksIHN1YmRldik7CglzYy0+cmV2ID0gcGNpX2dldF9yZXZpZChkZXYpOwoKCWRhdGEgPSBwY2lf
cmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOwoJZGF0YSB8PSAoUENJTV9DTURfUE9S
VEVOIHwgUENJTV9DTURfTUVNRU4gfCBQQ0lNX0NNRF9CVVNNQVNURVJFTik7CglwY2lfd3JpdGVf
Y29uZmlnKGRldiwgUENJUl9DT01NQU5ELCBkYXRhLCAyKTsKCWRhdGEgPSBwY2lfcmVhZF9jb25m
aWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOwoKCXNjLT5uYW1iYXJpZCA9IFBDSVJfTkFNQkFSOwoJ
c2MtPm5hYm1iYXJpZCA9IFBDSVJfTkFCTUJBUjsKCXNjLT5uYW1iYXIgPSBidXNfYWxsb2NfcmVz
b3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwKCSAgICAmc2MtPm5hbWJhcmlkLCAwLCB+MCwgMjU2
LCBSRl9BQ1RJVkUpOwoJc2MtPm5hYm1iYXIgPSBidXNfYWxsb2NfcmVzb3VyY2UoZGV2LCBTWVNf
UkVTX0lPUE9SVCwKCSAgICAmc2MtPm5hYm1iYXJpZCwgMCwgfjAsIDY0LCBSRl9BQ1RJVkUpOwoJ
aWYgKCFzYy0+bmFtYmFyIHx8ICFzYy0+bmFibWJhcikgewoJCWRldmljZV9wcmludGYoZGV2LCAi
dW5hYmxlIHRvIG1hcCBJTyBwb3J0IHNwYWNlXG4iKTsKCQlnb3RvIGJhZDsKCX0KCXNjLT5uYW1i
YXJ0ID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5uYW1iYXIpOwoJc2MtPm5hbWJhcmggPSBybWFuX2dl
dF9idXNoYW5kbGUoc2MtPm5hbWJhcik7CglzYy0+bmFibWJhcnQgPSBybWFuX2dldF9idXN0YWco
c2MtPm5hYm1iYXIpOwoJc2MtPm5hYm1iYXJoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5uYWJt
YmFyKTsKCglpZiAoYnVzX2RtYV90YWdfY3JlYXRlKC8qcGFyZW50Ki9OVUxMLCAvKmFsaWdubWVu
dCovNCwgLypib3VuZGFyeSovMCwKCSAgICAvKmxvd2FkZHIqL0JVU19TUEFDRV9NQVhBRERSXzMy
QklULAoJICAgIC8qaGlnaGFkZHIqL0JVU19TUEFDRV9NQVhBRERSLAoJICAgIC8qZmlsdGVyKi9O
VUxMLCAvKmZpbHRlcmFyZyovTlVMTCwKCSAgICAvKm1heHNpemUqLzY1NTM2LCAvKm5zZWdtZW50
cyovMSwgLyptYXhzZWdzeiovMHgzZmZmZiwKCSAgICAvKmZsYWdzKi8wLCAmc2MtPnBhcmVudF9k
bWF0KSAhPSAwKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gY3JlYXRlIGRtYSB0
YWdcbiIpOwoJCWdvdG8gYmFkOwoJfQoKCWlmIChpY2hfaW5pdChzYykgPT0gLTEpIHsKCQlkZXZp
Y2VfcHJpbnRmKGRldiwgInVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBjYXJkXG4iKTsKCQlnb3Rv
IGJhZDsKCX0KCglzYy0+Y29kZWMgPSBhYzk3X2NyZWF0ZShkZXYsIHNjLCBOVUxMLCBpY2hfcmRj
ZCwgaWNoX3dyY2QpOwoJaWYgKHNjLT5jb2RlYyA9PSBOVUxMKQoJCWdvdG8gYmFkOwoJbWl4ZXJf
aW5pdChkZXYsICZhYzk3X21peGVyLCBzYy0+Y29kZWMpOwoJLyogY2hlY2sgYW5kIHNldCBWUkEg
ZnVuY3Rpb24gKi8KCWRhdGEgPSBpY2hfcmRjZChzYywgQUM5N19SRUdFWFRfSUQpOwoJZXh0Y2Fw
ID0gMDsKCWlmIChkYXRhICYgQUM5N19FWFRDQVBfVlJBKQoJCWV4dGNhcCA9IEFDOTdfRVhUQ0FQ
X1ZSQTsKCWlmIChkYXRhICYgQUM5N19FWFRDQVBfVlJNKQoJCWV4dGNhcCB8PSBBQzk3X0VYVENB
UF9WUk07CglpY2hfd3JjZChzYywgQUM5N19SRUdFWFRfU1RBVCwgZXh0Y2FwKTsKCglzYy0+aXJx
aWQgPSAwOwoJc2MtPmlycSA9IGJ1c19hbGxvY19yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAm
c2MtPmlycWlkLAoJCQkJIDAsIH4wLCAxLCBSRl9BQ1RJVkUgfCBSRl9TSEFSRUFCTEUpOwoJaWYg
KCFzYy0+aXJxIHx8CgkgICAgYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxLCBJTlRSX1RZUEVf
VFRZLCBpY2hfaW50ciwgc2MsICZzYy0+aWgpKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFi
bGUgdG8gbWFwIGludGVycnVwdFxuIik7CgkJZ290byBiYWQ7Cgl9CgoJc25wcmludGYoc3RhdHVz
LCBTTkRfU1RBVFVTTEVOLAoJICAgICJhdCBpbyAweCVseC0weCVseCwgMHglbHgtMHglbHggaXJx
ICVsZCIsCgkgICAgcm1hbl9nZXRfc3RhcnQoc2MtPm5hbWJhciksIHJtYW5fZ2V0X2VuZChzYy0+
bmFtYmFyKSwKCSAgICBybWFuX2dldF9zdGFydChzYy0+bmFibWJhciksIHJtYW5fZ2V0X2VuZChz
Yy0+bmFibWJhciksCgkgICAgcm1hbl9nZXRfc3RhcnQoc2MtPmlycSkpOwoKCWlmIChwY21fcmVn
aXN0ZXIoZGV2LCBzYywgMSwgMSkpCgkJZ290byBiYWQ7CglwY21fYWRkY2hhbihkZXYsIFBDTURJ
Ul9QTEFZLCAmaWNoX3BjaGFudGVtcGxhdGUsIHNjKTsKCXBjbV9hZGRjaGFuKGRldiwgUENNRElS
X1JFQywgJmljaF9yY2hhbnRlbXBsYXRlLCBzYyk7CglwY21fc2V0c3RhdHVzKGRldiwgc3RhdHVz
KTsKCglyZXR1cm4gMDsKCmJhZDoKCWlmIChzYy0+bmFtYmFyKQoJCWJ1c19yZWxlYXNlX3Jlc291
cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsCgkJICAgIHNjLT5uYW1iYXJpZCwgc2MtPm5hbWJhcik7
CglpZiAoc2MtPm5hYm1iYXIpCgkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lP
UE9SVCwKCQkgICAgc2MtPm5hYm1iYXJpZCwgc2MtPm5hYm1iYXIpOwoJaWYgKHNjLT5paCkKCQli
dXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnEsIHNjLT5paCk7CglpZiAoc2MtPmlycSkKCQli
dXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCBzYy0+aXJxaWQsIHNjLT5pcnEp
OwoJZnJlZShzYywgTV9ERVZCVUYpOwoJcmV0dXJuIEVOWElPOwp9CgpzdGF0aWMgaW50CmljaF9w
Y2lfcmVzdW1lKGRldmljZV90IGRldikKewoJc25kZGV2X2luZm8gKmQ7CglzdHJ1Y3Qgc2NfaW5m
byAqc2M7Cgl1X2ludDMyX3QJZGF0YTsKCXVfaW50MzJfdAlleHRjYXA7CgoJc2MgPSBwY21fZ2V0
ZGV2aW5mbyhkZXYpOwoKCS8qIFJlaW5pdCBhdWRpbyBkZXZpY2UgKi8KICAgIAlpZiAoaWNoX2lu
aXQoc2MpID09IC0xKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gcmVpbml0aWFs
aXplIHRoZSBjYXJkXG4iKTsKCQlyZXR1cm4gRU5YSU87Cgl9CgkvKiBSZWluaXQgbWl4ZXIgKi8K
ICAgIAlpZiAobWl4ZXJfcmVpbml0KGRldikgPT0gLTEpIHsKCQlkZXZpY2VfcHJpbnRmKGRldiwg
InVuYWJsZSB0byByZWluaXRpYWxpemUgdGhlIG1peGVyXG4iKTsKCQlyZXR1cm4gRU5YSU87Cgl9
CgkvKiBjaGVjayBhbmQgc2V0IFZSQSBmdW5jdGlvbiAqLwoJZGF0YSA9IGljaF9yZGNkKHNjLCBB
Qzk3X1JFR0VYVF9JRCk7CglleHRjYXAgPSAwOwoJaWYgKGRhdGEgJiBBQzk3X0VYVENBUF9WUkEp
CgkJZXh0Y2FwID0gQUM5N19FWFRDQVBfVlJBOwoJaWYgKGRhdGEgJiBBQzk3X0VYVENBUF9WUk0p
CgkJZXh0Y2FwIHw9IEFDOTdfRVhUQ0FQX1ZSTTsKCWljaF93cmNkKHNjLCBBQzk3X1JFR0VYVF9T
VEFULCBleHRjYXApOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaWNoX21l
dGhvZHNbXSA9IHsKCS8qIERldmljZSBpbnRlcmZhY2UgKi8KCURFVk1FVEhPRChkZXZpY2VfcHJv
YmUsCQlpY2hfcGNpX3Byb2JlKSwKCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAlpY2hfcGNpX2F0
dGFjaCksCglERVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwJaWNoX3BjaV9yZXN1bWUpLAoJeyAwLCAw
IH0KfTsKCnN0YXRpYyBkcml2ZXJfdCBpY2hfZHJpdmVyID0gewoJInBjbSIsCglpY2hfbWV0aG9k
cywKCXNpemVvZihzbmRkZXZfaW5mbyksCn07CgpzdGF0aWMgZGV2Y2xhc3NfdCBwY21fZGV2Y2xh
c3M7CgpEUklWRVJfTU9EVUxFKHNuZF9pY2gsIHBjaSwgaWNoX2RyaXZlciwgcGNtX2RldmNsYXNz
LCAwLCAwKTsKTU9EVUxFX0RFUEVORChzbmRfaWNoLCBzbmRfcGNtLCBQQ01fTUlOVkVSLCBQQ01f
UFJFRlZFUixQQ01fTUFYVkVSKTsKTU9EVUxFX1ZFUlNJT04oc25kX2ljaCwgMSk7Cg==

--Boundary-=_WfAZyzAZOHsNGHcxSfUBSnsNWfUJ--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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