Date: Wed, 16 Aug 2000 18:35:13 +0400 (MSD) From: dimmy the wild <diwil@dataart.com> To: freebsd-announce@freebsd.org, freebsd-current@freebsd.org Subject: FW: fm801 sound driver Message-ID: <XFMail.000816183513.diwil@dataart.com>
next in thread | raw e-mail | index | archive | help
This message is in MIME format
--_=XFMail.1.4.0.FreeBSD:000816183513:1038=_
Content-Type: text/plain; charset=KOI8-R
Fellows,
There is a Forte Media FM801 sound chip support attached (one file).
I have browsed the handbook and could not find anything how to
(and whom to) submit the source code.
Anyway, the code should be in /usr/srs/sys/dev/sound/pci/fm801.c
and the file /usr/src/sys/conf/files should contain the line as follows:
dev/sound/pci/fm801.c optional pcm pci
... Ok, if somebody has this hardware, I'll be happy to get some
comments and bug reports.
Have fun,
regards,
Dmitry.
--
**********************************************************************
("`-''-/").___..--''"`-._ (\ Dimmy the Wild UA1ACZ
`6_ 6 ) `-. ( ).`-.__.`) DataArt Enterprises, Inc.
(_Y_.)' ._ ) `._ `. ``-..-' Serpukhovskaja street, 10
_..`--'_..-_/ /--'_.' ,' Saint Petersburg, Russia
(il),-'' (li),' ((!.-' +7 (812) 3261780, 5552490
**********************************************************************
--_=XFMail.1.4.0.FreeBSD:000816183513:1038=_
Content-Disposition: attachment; filename="fm801.c"
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name=fm801.c; SizeOnDisk=19169
LyoKICogQ29weXJpZ2h0IChjKSAyMDAwIERtaXRyeSBEaWNreSBkaXdpbEBkYXRhYXJ0LmNvbQog
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFy
ZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgQVMgSVMnJyBBTkQKICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCiAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCiAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQogKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAq
CiAqICRJZCQKICovCgojaW5jbHVkZSA8ZGV2L3NvdW5kL3BjbS9zb3VuZC5oPgojaW5jbHVkZSA8
ZGV2L3NvdW5kL3BjbS9hYzk3Lmg+CiNpbmNsdWRlIDxwY2kvcGNpcmVnLmg+CiNpbmNsdWRlIDxw
Y2kvcGNpdmFyLmg+CgojZGVmaW5lIFBDSV9WRU5ET1JfRk9SVEVNRURJQQkweDEzMTkKI2RlZmlu
ZSBQQ0lfREVWSUNFX0ZPUlRFTUVESUExCTB4MDgwMTEzMTkKI2RlZmluZSBQQ0lfREVWSUNFX0ZP
UlRFTUVESUEyCTB4MDgwMjEzMTkJLyogPz8/IGhhdmUgbm8gaWRlYSB3aGF0J3MgdGhpcy4uLiAq
LwoKI2RlZmluZSBGTV9QQ01fVk9MVU1FICAgICAgICAgICAweDAwCiNkZWZpbmUgRk1fRk1fVk9M
VU1FICAgICAgICAgICAgMHgwMgojZGVmaW5lIEZNX0kyU19WT0xVTUUgICAgICAgICAgIDB4MDQK
I2RlZmluZSBGTV9SRUNPUkRfU09VUkNFICAgICAgICAweDA2CgojZGVmaW5lIEZNX1BMQVlfQ1RM
ICAgICAgICAgICAgIDB4MDgKI2RlZmluZSAgRk1fUExBWV9SQVRFX01BU0sgICAgICAgICAgICAg
IDB4MGYwMAojZGVmaW5lICBGTV9QTEFZX0JVRjFfTEFTVCAgICAgICAgICAgICAgMHgwMDAxCiNk
ZWZpbmUgIEZNX1BMQVlfQlVGMl9MQVNUICAgICAgICAgICAgICAweDAwMDIKI2RlZmluZSAgRk1f
UExBWV9TVEFSVCAgICAgICAgICAgICAgICAgIDB4MDAyMAojZGVmaW5lICBGTV9QTEFZX1BBVVNF
ICAgICAgICAgICAgICAgICAgMHgwMDQwCiNkZWZpbmUgIEZNX1BMQVlfU1RPUE5PVyAgICAgICAg
ICAgICAgICAweDAwODAKI2RlZmluZSAgRk1fUExBWV8xNkJJVCAgICAgICAgICAgICAgICAgIDB4
NDAwMAojZGVmaW5lICBGTV9QTEFZX1NURVJFTyAgICAgICAgICAgICAgICAgMHg4MDAwCgojZGVm
aW5lIEZNX1BMQVlfRE1BTEVOICAgICAgICAgIDB4MGEKI2RlZmluZSBGTV9QTEFZX0RNQUJVRjEg
ICAgICAgICAweDBjCiNkZWZpbmUgRk1fUExBWV9ETUFCVUYyICAgICAgICAgMHgxMAoKCiNkZWZp
bmUgRk1fUkVDX0NUTCAgICAgICAgICAgICAgMHgxNAojZGVmaW5lICBGTV9SRUNfUkFURV9NQVNL
ICAgICAgICAgICAgICAgMHgwZjAwCiNkZWZpbmUgIEZNX1JFQ19CVUYxX0xBU1QgICAgICAgICAg
ICAgICAweDAwMDEKI2RlZmluZSAgRk1fUkVDX0JVRjJfTEFTVCAgICAgICAgICAgICAgIDB4MDAw
MgojZGVmaW5lICBGTV9SRUNfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwMDIwCiNkZWZpbmUg
IEZNX1JFQ19QQVVTRSAgICAgICAgICAgICAgICAgICAweDAwNDAKI2RlZmluZSAgRk1fUkVDX1NU
T1BOT1cgICAgICAgICAgICAgICAgIDB4MDA4MAojZGVmaW5lICBGTV9SRUNfMTZCSVQgICAgICAg
ICAgICAgICAgICAgMHg0MDAwCiNkZWZpbmUgIEZNX1JFQ19TVEVSRU8gICAgICAgICAgICAgICAg
ICAweDgwMDAKCgojZGVmaW5lIEZNX1JFQ19ETUFMRU4gICAgICAgICAgIDB4MTYKI2RlZmluZSBG
TV9SRUNfRE1BQlVGMSAgICAgICAgICAweDE4CiNkZWZpbmUgRk1fUkVDX0RNQUJVRjIgICAgICAg
ICAgMHgxYwoKI2RlZmluZSBGTV9DT0RFQ19DVEwgICAgICAgICAgICAweDIyCiNkZWZpbmUgRk1f
Vk9MVU1FICAgICAgICAgICAgICAgMHgyNgojZGVmaW5lICBGTV9WT0xVTUVfTVVURSAgICAgICAg
ICAgICAgICAgMHg4MDAwCgojZGVmaW5lIEZNX0NPREVDX0NNRCAgICAgICAgICAgIDB4MmEKI2Rl
ZmluZSAgRk1fQ09ERUNfQ01EX1JFQUQgICAgICAgICAgICAgIDB4MDA4MAojZGVmaW5lICBGTV9D
T0RFQ19DTURfVkFMSUQgICAgICAgICAgICAgMHgwMTAwCiNkZWZpbmUgIEZNX0NPREVDX0NNRF9C
VVNZICAgICAgICAgICAgICAweDAyMDAKCiNkZWZpbmUgRk1fQ09ERUNfREFUQSAgICAgICAgICAg
MHgyYwoKI2RlZmluZSBGTV9JT19DVEwgICAgICAgICAgICAgICAweDUyCiNkZWZpbmUgRk1fQ0FS
RF9DVEwgICAgICAgICAgICAgMHg1NAoKI2RlZmluZSBGTV9JTlRNQVNLICAgICAgICAgICAgICAw
eDU2CiNkZWZpbmUgIEZNX0lOVE1BU0tfUExBWSAgICAgICAgICAgICAgICAweDAwMDEKI2RlZmlu
ZSAgRk1fSU5UTUFTS19SRUMgICAgICAgICAgICAgICAgIDB4MDAwMgojZGVmaW5lICBGTV9JTlRN
QVNLX1ZPTCAgICAgICAgICAgICAgICAgMHgwMDQwCiNkZWZpbmUgIEZNX0lOVE1BU0tfTVBVICAg
ICAgICAgICAgICAgICAweDAwODAKCiNkZWZpbmUgRk1fSU5UU1RBVFVTICAgICAgICAgICAgMHg1
YQojZGVmaW5lICBGTV9JTlRTVEFUVVNfUExBWSAgICAgICAgICAgICAgMHgwMTAwCiNkZWZpbmUg
IEZNX0lOVFNUQVRVU19SRUMgICAgICAgICAgICAgICAweDAyMDAKI2RlZmluZSAgRk1fSU5UU1RB
VFVTX1ZPTCAgICAgICAgICAgICAgIDB4NDAwMAojZGVmaW5lICBGTV9JTlRTVEFUVVNfTVBVICAg
ICAgICAgICAgICAgMHg4MDAwCgojZGVmaW5lIEZNODAxX0JVRkZTSVpFIDEwMjQqNAkvKiBPdGhl
ciB2YWx1ZXMgZG8gbm90IHdvcmshISEgKi8KCi8qIGRlYnVnIHB1cnBvc2VzICovCiNkZWZpbmUg
RFBSSU5UCWlmKDApIHByaW50ZgoKCi8qIGNoYW5uZWwgaW50ZXJmYWNlICovCnN0YXRpYyB2b2lk
ICpmbTgwMWNoX2luaXQodm9pZCAqZGV2aW5mbywgc25kX2RidWYgKmIsIHBjbV9jaGFubmVsICpj
LCBpbnQgZGlyKTsKc3RhdGljIGludCBmbTgwMWNoX3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGly
KTsKc3RhdGljIGludCBmbTgwMWNoX3NldGZvcm1hdCh2b2lkICpkYXRhLCB1X2ludDMyX3QgZm9y
bWF0KTsKc3RhdGljIGludCBmbTgwMWNoX3NldHNwZWVkKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBz
cGVlZCk7CnN0YXRpYyBpbnQgZm04MDFjaF9zZXRibG9ja3NpemUodm9pZCAqZGF0YSwgdV9pbnQz
Ml90IGJsb2Nrc2l6ZSk7CnN0YXRpYyBpbnQgZm04MDFjaF90cmlnZ2VyKHZvaWQgKmRhdGEsIGlu
dCBnbyk7CnN0YXRpYyBpbnQgZm04MDFjaF9nZXRwdHIodm9pZCAqZGF0YSk7CnN0YXRpYyBwY21j
aGFuX2NhcHMgKmZtODAxY2hfZ2V0Y2Fwcyh2b2lkICpkYXRhKTsKLyoKc3RhdGljIGludCBmbTgw
MWNoX3NldHVwKHBjbV9jaGFubmVsICpjKTsKKi8KCnN0YXRpYyBwY21jaGFuX2NhcHMgZm04MDFj
aF9jYXBzID0gewoJNDAwMCwgNDgwMDAsCglBRk1UX1NURVJFTyB8IEFGTVRfVTggfCBBRk1UX1Mx
Nl9MRSwKCUFGTVRfU1RFUkVPIHwgQUZNVF9VOCB8IEFGTVRfUzE2X0xFCn07CiAgICAgICAgICAg
ICAgICAKc3RhdGljIHBjbV9jaGFubmVsIGZtODAxX2NoYW50ZW1wbGF0ZSA9IHsKCWZtODAxY2hf
aW5pdCwKCWZtODAxY2hfc2V0ZGlyLAoJZm04MDFjaF9zZXRmb3JtYXQsCglmbTgwMWNoX3NldHNw
ZWVkLAoJZm04MDFjaF9zZXRibG9ja3NpemUsCglmbTgwMWNoX3RyaWdnZXIsCglmbTgwMWNoX2dl
dHB0ciwKCWZtODAxY2hfZ2V0Y2FwcywKfTsKCnN0cnVjdCBmbTgwMV9pbmZvOwoKc3RydWN0IGZt
ODAxX2NoaW5mbyB7CglzdHJ1Y3QgZm04MDFfaW5mbyAJKnBhcmVudDsKCXBjbV9jaGFubmVsIAkJ
KmNoYW5uZWw7CglzbmRfZGJ1ZiAJCSpidWZmZXI7Cgl1X2ludDMyX3QgCQlzcGQsIGRpciwgZm10
OwkvKiBzcGVlZCwgZGlyZWN0aW9uLCBmb3JtYXQgKi8KCXVfaW50MzJfdAkJc2hpZnQ7Cn07Cgpz
dHJ1Y3QgZm04MDFfaW5mbyB7CglpbnQgCQkJdHlwZTsKCWJ1c19zcGFjZV90YWdfdCAJc3Q7Cgli
dXNfc3BhY2VfaGFuZGxlX3QgCXNoOwoJYnVzX2RtYV90YWdfdCAgIAlwYXJlbnRfZG1hdDsKCQoJ
ZGV2aWNlX3QgCQlkZXY7CglpbnQgCQkJbnVtOwoJdV9pbnQzMl90IAkJdW5pdDsKCQoJc3RydWN0
IHJlc291cmNlIAkqcmVnLCAqaXJxOwoJaW50ICAgICAgICAgICAgIAlyZWd0eXBlLCByZWdpZCwg
aXJxaWQ7Cgl2b2lkICAgICAgICAgICAgCSppaDsKCgl1X2ludDMyX3QJCXBsYXlfZmxpcCwKCQkJ
CXBsYXlfbmV4dGJsaywKCQkJCXBsYXlfc3RhcnQsCgkJCQlwbGF5X2Jsa3NpemUsCgkJCQlwbGF5
X2ZtdCwKCQkJCXBsYXlfc2hpZnQsCgkJCQlwbGF5X3NpemU7CgkKCXVfaW50MzJfdAkJcmVjX2Zs
aXAsCgkJCQlyZWNfbmV4dGJsaywKCQkJCXJlY19zdGFydCwKCQkJCXJlY19ibGtzaXplLAoJCQkJ
cmVjX2ZtdCwKCQkJCXJlY19zaGlmdCwKCQkJCXJlY19zaXplOwoJCglzdHJ1Y3QgZm04MDFfY2hp
bmZvIAlwY2gsIHJjaDsKfTsKCgovKiBzZXZlcmFsIHByb2NlZHVyZXMgdG8gcmVsZWFzZSB0aGUg
dGhpbmcgcHJvcGVybHkgaWYgY29tcGlsZWQgYXMgbW9kdWxlICovCnN0YXRpYyBzdHJ1Y3QgZm04
MDFfaW5mbyAqc2F2ZTgwMTsKc3RydWN0IGZtODAxX2luZm8gKmZtODAxX2dldCBfX1AoKHZvaWQg
KSk7CgpzdGF0aWMgdm9pZApmbTgwMV9zYXZlKHN0cnVjdCBmbTgwMV9pbmZvICpmbTgwMSkKewoJ
c2F2ZTgwMSA9IGZtODAxOwp9CgpzdHJ1Y3QgZm04MDFfaW5mbyAqCmZtODAxX2dldCh2b2lkICkK
ewoJcmV0dXJuIHNhdmU4MDE7Cn0KCi8qIEJ1cyBSZWFkIC8gV3JpdGUgcm91dGluZXMgKi8Kc3Rh
dGljIHVfaW50MzJfdApmbTgwMV9yZChzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEsIGludCByZWdu
bywgaW50IHNpemUpCnsKCXN3aXRjaChzaXplKSB7CgljYXNlIDE6CgkJcmV0dXJuIChidXNfc3Bh
Y2VfcmVhZF8xKGZtODAxLT5zdCwgZm04MDEtPnNoLCByZWdubykpOwoJY2FzZSAyOgoJCXJldHVy
biAoYnVzX3NwYWNlX3JlYWRfMihmbTgwMS0+c3QsIGZtODAxLT5zaCwgcmVnbm8pKTsKCWNhc2Ug
NDoKCQlyZXR1cm4gKGJ1c19zcGFjZV9yZWFkXzQoZm04MDEtPnN0LCBmbTgwMS0+c2gsIHJlZ25v
KSk7CglkZWZhdWx0OgoJCXJldHVybiAweGZmZmZmZmZmOwoJfQp9CgpzdGF0aWMgdm9pZApmbTgw
MV93cihzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEsIGludCByZWdubywgdV9pbnQzMl90IGRhdGEs
IGludCBzaXplKQp7Cglzd2l0Y2goc2l6ZSkgewoJY2FzZSAxOgoJCXJldHVybiBidXNfc3BhY2Vf
d3JpdGVfMShmbTgwMS0+c3QsIGZtODAxLT5zaCwgcmVnbm8sIGRhdGEpOwoJY2FzZSAyOgoJCXJl
dHVybiBidXNfc3BhY2Vfd3JpdGVfMihmbTgwMS0+c3QsIGZtODAxLT5zaCwgcmVnbm8sIGRhdGEp
OwoJY2FzZSA0OgoJCXJldHVybiBidXNfc3BhY2Vfd3JpdGVfNChmbTgwMS0+c3QsIGZtODAxLT5z
aCwgcmVnbm8sIGRhdGEpOwoJZGVmYXVsdDoKCQlyZXR1cm47Cgl9Cn0KCi8qCiAqICBhYzk3IGNv
ZGVjIHJvdXRpbmVzCiAqLwojZGVmaW5lIFRJTU8gNTAKc3RhdGljIHVfaW50MzJfdApmbTgwMV9y
ZGNkKHZvaWQgKmRldmluZm8sIGludCByZWdubykKewoJc3RydWN0IGZtODAxX2luZm8gKmZtODAx
ID0gKHN0cnVjdCBmbTgwMV9pbmZvICopZGV2aW5mbzsKCWludCBpOwoJCglmb3IgKGkgPSAwOyBp
IDwgVElNTyAmJiBmbTgwMV9yZChmbTgwMSxGTV9DT0RFQ19DTUQsMikgJiBGTV9DT0RFQ19DTURf
QlVTWTsgaSsrKSB7CgkJREVMQVkoMTAwMDApOwoJfQoJaWYgKGkgPj0gVElNTykgewoJCXByaW50
ZigiZm04MDEgcmRjZDogY29kZWMgYnVzeVxuIik7CgkJcmV0dXJuIDA7Cgl9CgkKCWZtODAxX3dy
KGZtODAxLEZNX0NPREVDX0NNRCwgcmVnbm98Rk1fQ09ERUNfQ01EX1JFQUQsMik7CgoJZm9yIChp
ID0gMDsgaSA8IFRJTU8gJiYgIShmbTgwMV9yZChmbTgwMSxGTV9DT0RFQ19DTUQsMikgJiBGTV9D
T0RFQ19DTURfVkFMSUQpOyBpKyspCgl7CgkJREVMQVkoMTAwMDApOwoJfQoJaWYgKGkgPj0gVElN
TykgewoJCXByaW50ZigiZm04MDEgcmRjZDogd3JpdGUgY29kZWMgaW52YWxpZFxuIik7CgkJcmV0
dXJuIDA7Cgl9CgkJCglyZXR1cm4gZm04MDFfcmQoZm04MDEsRk1fQ09ERUNfREFUQSwyKTsKfQoK
c3RhdGljIHZvaWQKZm04MDFfd3JjZCh2b2lkICpkZXZpbmZvLCBpbnQgcmVnbm8sIHVfaW50MzJf
dCBkYXRhKQp7CglzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEgPSAoc3RydWN0IGZtODAxX2luZm8g
KilkZXZpbmZvOwoJaW50IGk7CgkKCURQUklOVCgiZm04MDFfd3JjZCByZWcgMHgleFxuIixyZWdu
byk7CgkKCS8qIFBvbGwgdW50aWwgY29kZWMgaXMgcmVhZHkgKi8KCWZvciAoaSA9IDA7IGkgPCBU
SU1PICYmIGZtODAxX3JkKGZtODAxLEZNX0NPREVDX0NNRCwyKSAmIEZNX0NPREVDX0NNRF9CVVNZ
OyBpKyspIHsKCQlERUxBWSgxMDAwMCk7Cgl9CglpZiAoaSA+PSBUSU1PKSB7CgkJcHJpbnRmKCJm
bTgwMSB3cmNkOiByZWFkIGNvZGVjIGJ1c3lcbiIpOwoJCXJldHVybjsKCX0KCQoJZm04MDFfd3Io
Zm04MDEsRk1fQ09ERUNfREFUQSxkYXRhLCAyKTsKCWZtODAxX3dyKGZtODAxLEZNX0NPREVDX0NN
RCwgcmVnbm8sMik7CglyZXR1cm47Cn0KCi8qIAogKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgCiAq
LwpzdGF0aWMgdm9pZApmbTgwMV9pbnRyKHZvaWQgKnApCnsKCXN0cnVjdCBmbTgwMV9pbmZvIAkq
Zm04MDEgPSAoc3RydWN0IGZtODAxX2luZm8gKilwOwoJdV9pbnQzMl90ICAgICAgIAlpbnRzcmMg
PSBmbTgwMV9yZChmbTgwMSwgRk1fSU5UU1RBVFVTLCAyKTsKCXN0cnVjdCBmbTgwMV9jaGluZm8J
KmNoID0gJihmbTgwMS0+cGNoKTsKCXNuZF9kYnVmIAkJKmIgPSBjaC0+YnVmZmVyOwoJCglEUFJJ
TlQoIlxuZm04MDFfaW50ciBpbnRzcmMgMHgleCAiLCBpbnRzcmMpOwoJRFBSSU5UKCJycCAlZCwg
cmwgJWQsIGZwICVkIGZsICVkLCBzaXplPSVkXG4iLAoJCWItPnJwLGItPnJsLCBiLT5mcCxiLT5m
bCwgYi0+Ymxrc3opOwoJCQoJaWYoaW50c3JjICYgRk1fSU5UU1RBVFVTX1BMQVkpIHsKCQlmbTgw
MS0+cGxheV9mbGlwKys7CgkJaWYoZm04MDEtPnBsYXlfZmxpcCAmIDEpIAoJCQlmbTgwMV93cihm
bTgwMSwgRk1fUExBWV9ETUFCVUYxLCBmbTgwMS0+cGxheV9zdGFydCw0KTsKCQllbHNlCgkJCWZt
ODAxX3dyKGZtODAxLCBGTV9QTEFZX0RNQUJVRjIsIGZtODAxLT5wbGF5X25leHRibGssNCk7CgkJ
Y2huX2ludHIoZm04MDEtPnBjaC5jaGFubmVsKTsKCX0gCgkKCWlmKGludHNyYyAmIEZNX0lOVFNU
QVRVU19SRUMpIHsKCQlmbTgwMS0+cmVjX2ZsaXArKzsKCQlpZihmbTgwMS0+cmVjX2ZsaXApIAoJ
CQlmbTgwMV93cihmbTgwMSwgRk1fUkVDX0RNQUJVRjEsIGZtODAxLT5yZWNfc3RhcnQsNCk7CgkJ
ZWxzZQoJCQlmbTgwMV93cihmbTgwMSwgRk1fUkVDX0RNQUJVRjIsIGZtODAxLT5yZWNfbmV4dGJs
ayw0KTsKCQljaG5faW50cihmbTgwMS0+cmNoLmNoYW5uZWwpOwoJfQoJCglpZiAoIGludHNyYyAm
IEZNX0lOVFNUQVRVU19NUFUgKSB7CgkJLyogVGhpcyBpcyBhIFRPRE9pc2ggdGhpbmcuLi4gKi8K
CQlmbTgwMV93cihmbTgwMSwgRk1fSU5UU1RBVFVTLCBpbnRzcmMgJiBGTV9JTlRTVEFUVVNfTVBV
LDIpOwoJfQoJCglpZiAoIGludHNyYyAmIEZNX0lOVFNUQVRVU19WT0wgKSB7CgkJLyogVGhpcyBp
cyBhIFRPRE9pc2ggdGhpbmcuLi4gKi8KCQlmbTgwMV93cihmbTgwMSwgRk1fSU5UU1RBVFVTLCBp
bnRzcmMgJiBGTV9JTlRTVEFUVVNfVk9MLDIpOwoJfQoJCglEUFJJTlQoImZtODAxX2ludHIgY2xl
YXJcblxuIik7CglmbTgwMV93cihmbTgwMSwgRk1fSU5UU1RBVFVTLCBpbnRzcmMgJiAoRk1fSU5U
U1RBVFVTX1BMQVkgfCBGTV9JTlRTVEFUVVNfUkVDKSwgMik7Cn0KCi8qCiAqICBJbml0IHJvdXRp
bmUgaXMgdGFrZW4gZnJvbSBhbiBvcmlnaW5hbCBOZXRCU0QgZHJpdmVyCiAqLwpzdGF0aWMgaW50
CmZtODAxX2luaXQoc3RydWN0IGZtODAxX2luZm8gKmZtODAxKQp7Cgl1X2ludDMyX3QgazE7CgkK
CS8qIHJlc2V0IGNvZGVjICovCglmbTgwMV93cihmbTgwMSwgRk1fQ09ERUNfQ1RMLCAweDAwMjAs
Mik7CglERUxBWSgxMDAwMDApOwoJZm04MDFfd3IoZm04MDEsIEZNX0NPREVDX0NUTCwgMHgwMDAw
LDIpOwoJREVMQVkoMTAwMDAwKTsKCQoJZm04MDFfd3IoZm04MDEsIEZNX1BDTV9WT0xVTUUsIDB4
MDgwOCwyKTsKCWZtODAxX3dyKGZtODAxLCBGTV9GTV9WT0xVTUUsIDB4MDgwOCwyKTsKCWZtODAx
X3dyKGZtODAxLCBGTV9JMlNfVk9MVU1FLCAweDA4MDgsMik7CgkKCWZtODAxX3dyKCh2b2lkICop
Zm04MDEsIEZNX1JFQ09SRF9TT1VSQ0UsIDB4MDAwMCwyKTsKCQoJLyogVW5tYXNrIHBsYXliYWNr
LCByZWNvcmQgYW5kIG1wdSBpbnRlcnJ1cHRzLCBtYXNrIHRoZSByZXN0ICovCglrMSA9IGZtODAx
X3JkKCh2b2lkICopZm04MDEsIEZNX0lOVE1BU0ssMik7CglmbTgwMV93cihmbTgwMSwgRk1fSU5U
TUFTSywKCQkoazEgJiB+KEZNX0lOVE1BU0tfUExBWSB8IEZNX0lOVE1BU0tfUkVDIHwgRk1fSU5U
TUFTS19NUFUpKSB8CgkJRk1fSU5UTUFTS19WT0wsMik7CglmbTgwMV93cihmbTgwMSwgRk1fSU5U
U1RBVFVTLAoJCUZNX0lOVFNUQVRVU19QTEFZIHwgRk1fSU5UU1RBVFVTX1JFQyB8IEZNX0lOVFNU
QVRVU19NUFUgfAoJCUZNX0lOVFNUQVRVU19WT0wsMik7CgkKCURQUklOVCgiRk04MDEgaW5pdCBP
a1xuIik7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludApmbTgwMV9wY2lfYXR0YWNoKGRldmljZV90
IGRldikKewoJc25kZGV2X2luZm8gCQkqZDsKCXVfaW50MzJfdCAJCWRhdGE7CglzdHJ1Y3QgYWM5
N19pbmZvIAkqY29kZWM7CglzdHJ1Y3QgZm04MDFfaW5mbyAJKmZtODAxOwoJaW50IAkJCWk7Cglp
bnQgCQkJbWFwcGVkID0gMDsKCWNoYXIgCQkJc3RhdHVzW1NORF9TVEFUVVNMRU5dOwoJCglkID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoJaWYgKChmbTgwMSA9IChzdHJ1Y3QgZm04MDFfaW5mbyAq
KW1hbGxvYyhzaXplb2YoKmZtODAxKSxNX0RFVkJVRiwgTV9OT1dBSVQpKSA9PSBOVUxMKSB7CgkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJjYW5ub3QgYWxsb2NhdGUgc29mdGNcbiIpOwoJCXJldHVybiBF
TlhJTzsKCX0KCQoJYnplcm8oZm04MDEsIHNpemVvZigqZm04MDEpKTsKCWZtODAxLT50eXBlID0g
cGNpX2dldF9kZXZpZChkZXYpOwoJCglkYXRhID0gcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9D
T01NQU5ELCAyKTsKCWRhdGEgfD0gKFBDSU1fQ01EX1BPUlRFTnxQQ0lNX0NNRF9NRU1FTnxQQ0lN
X0NNRF9CVVNNQVNURVJFTik7CglwY2lfd3JpdGVfY29uZmlnKGRldiwgUENJUl9DT01NQU5ELCBk
YXRhLCAyKTsKCWRhdGEgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIpOwoJ
Cglmb3IgKGkgPSAwOyAobWFwcGVkID09IDApICYmIChpIDwgUENJX01BWE1BUFNfMCk7IGkrKykg
ewoJCWZtODAxLT5yZWdpZCA9IFBDSVJfTUFQUyArIGkqNDsKCQlmbTgwMS0+cmVndHlwZSA9IFNZ
U19SRVNfTUVNT1JZOwoJCWZtODAxLT5yZWcgPSBidXNfYWxsb2NfcmVzb3VyY2UoZGV2LCBmbTgw
MS0+cmVndHlwZSwgJmZtODAxLT5yZWdpZCwKCQkJCQkJMCwgfjAsIDEsIFJGX0FDVElWRSk7CgkJ
aWYoIWZtODAxLT5yZWcpCgkJewoJCQlmbTgwMS0+cmVndHlwZSA9IFNZU19SRVNfSU9QT1JUOwoJ
CQlmbTgwMS0+cmVnID0gYnVzX2FsbG9jX3Jlc291cmNlKGRldiwgZm04MDEtPnJlZ3R5cGUsICZm
bTgwMS0+cmVnaWQsCgkJCQkJCTAsIH4wLCAxLCBSRl9BQ1RJVkUpOwoJCX0KCQkKCQlpZihmbTgw
MS0+cmVnKSB7CgkJCWZtODAxLT5zdCA9IHJtYW5fZ2V0X2J1c3RhZyhmbTgwMS0+cmVnKTsKCQkJ
Zm04MDEtPnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKGZtODAxLT5yZWcpOwoJCQltYXBwZWQrKzsK
CQl9Cgl9CgoJaWYgKG1hcHBlZCA9PSAwKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUg
dG8gbWFwIHJlZ2lzdGVyIHNwYWNlXG4iKTsKCQlnb3RvIG9vcHM7Cgl9CgkKCWZtODAxX2luaXQo
Zm04MDEpOwoJCgljb2RlYyA9IGFjOTdfY3JlYXRlKGRldiwgKHZvaWQgKilmbTgwMSwgTlVMTCwg
Zm04MDFfcmRjZCwgZm04MDFfd3JjZCk7CglpZiAoY29kZWMgPT0gTlVMTCkgZ290byBvb3BzOwoK
CWlmIChtaXhlcl9pbml0KGQsICZhYzk3X21peGVyLCBjb2RlYykgPT0gLTEpIGdvdG8gb29wczsK
CglmbTgwMS0+aXJxaWQgPSAwOwoJZm04MDEtPmlycSA9IGJ1c19hbGxvY19yZXNvdXJjZShkZXYs
IFNZU19SRVNfSVJRLCAmZm04MDEtPmlycWlkLAoJCQkJMCwgfjAsIDEsIFJGX0FDVElWRSB8IFJG
X1NIQVJFQUJMRSk7CglpZiAoIWZtODAxLT5pcnEgfHwKCQlidXNfc2V0dXBfaW50cihkZXYsIGZt
ODAxLT5pcnEsIElOVFJfVFlQRV9UVFksCgkJCQkJZm04MDFfaW50ciwgZm04MDEsICZmbTgwMS0+
aWgpKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gbWFwIGludGVycnVwdFxuIik7
CgkJZ290byBvb3BzOwoJfQoJCglpZiAoYnVzX2RtYV90YWdfY3JlYXRlKC8qcGFyZW50Ki9OVUxM
LCAvKmFsaWdubWVudCovMiwgLypib3VuZGFyeSovMCwKCQkvKmxvd2FkZHIqL0JVU19TUEFDRV9N
QVhBRERSXzMyQklULAoJCS8qaGlnaGFkZHIqL0JVU19TUEFDRV9NQVhBRERSLAoJCS8qZmlsdGVy
Ki9OVUxMLCAvKmZpbHRlcmFyZyovTlVMTCwKCQkvKm1heHNpemUqL0ZNODAxX0JVRkZTSVpFLCAv
Km5zZWdtZW50cyovMSwgLyptYXhzZWd6Ki8weDNmZmZmLAoJCS8qZmxhZ3MqLzAsICZmbTgwMS0+
cGFyZW50X2RtYXQpICE9IDApIHsKCQlkZXZpY2VfcHJpbnRmKGRldiwgInVuYWJsZSB0byBjcmVh
dGUgZG1hIHRhZ1xuIik7CgkJZ290byBvb3BzOwoJfQoJCglzbnByaW50ZihzdGF0dXMsIDY0LCAi
YXQgJXMgMHglbHggaXJxICVsZCIsCgkJKGZtODAxLT5yZWd0eXBlID09IFNZU19SRVNfSU9QT1JU
KT8gImlvIiA6ICJtZW1vcnkiLAoJCXJtYW5fZ2V0X3N0YXJ0KGZtODAxLT5yZWcpLCBybWFuX2dl
dF9zdGFydChmbTgwMS0+aXJxKSk7CgojZGVmaW5lIEZNODAxX01BWFBMQVlDSAkxCglpZiAocGNt
X3JlZ2lzdGVyKGRldiwgZm04MDEsIEZNODAxX01BWFBMQVlDSCwgMSkpIGdvdG8gb29wczsKCXBj
bV9hZGRjaGFuKGRldiwgUENNRElSX1BMQVksICZmbTgwMV9jaGFudGVtcGxhdGUsIGZtODAxKTsK
CXBjbV9hZGRjaGFuKGRldiwgUENNRElSX1JFQywgJmZtODAxX2NoYW50ZW1wbGF0ZSwgZm04MDEp
OwoJcGNtX3NldHN0YXR1cyhkZXYsIHN0YXR1cyk7CgkKCWZtODAxX3NhdmUoZm04MDEpOwoJcmV0
dXJuIDA7CgkKb29wczoJCglwcmludGYoIkZvcnRlIE1lZGlhIEZNODAxIGluaXRpYWxpemF0aW9u
IGZhaWxlZFxuIik7CglpZiAoZm04MDEtPnJlZykgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBm
bTgwMS0+cmVndHlwZSwgZm04MDEtPnJlZ2lkLCBmbTgwMS0+cmVnKTsKCWlmIChmbTgwMS0+aWgp
IGJ1c190ZWFyZG93bl9pbnRyKGRldiwgZm04MDEtPmlycSwgZm04MDEtPmloKTsKCWlmIChmbTgw
MS0+aXJxKSBidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCBmbTgwMS0+aXJx
aWQsIGZtODAxLT5pcnEpOwoJZnJlZShmbTgwMSwgTV9ERVZCVUYpOwoJcmV0dXJuIEVOWElPOwp9
CgpzdGF0aWMgaW50CmZtODAxX3BjaV9wcm9iZSggZGV2aWNlX3QgZGV2ICkKewoJaW50IGlkOwoJ
aWYgKChpZCA9IHBjaV9nZXRfZGV2aWQoZGV2KSkgPT0gUENJX0RFVklDRV9GT1JURU1FRElBMSAp
IHsKCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRm9ydGUgTWVkaWEgRk04MDEgQXVkaW8gQ29udHJv
bGxlciIpOwoJCXJldHVybiAwOwoJfQovKgogICAqKioqKiBObyBhbnkgaW5mbyBhYm91dCB0aGlz
IGZlYXR1cmUgb2YgdGhlIGZtODAxIGluIGEgZGF0YXNoZWV0ICoqKioqCiAgICoqKioqIGJ1dCBt
eSBob3QtNjg3eiBtb3RoZXJib2FyZCB3aXRoIGZtODAxIGVtYmVkZGVkIGhhcyBvbmUuLi4gYW55
IGlkZWFzPyAqKioqKgoJaWYgKChpZCA9IHBjaV9nZXRfZGV2aWQoZGV2KSkgPT0gUENJX0RFVklD
RV9GT1JURU1FRElBMiApIHsKCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRm9ydGUgTWVkaWEgRk04
MDEgSW5wdXQgRGV2aWNlIChNUFU/KSIpOwoJCXJldHVybiAwOwoJfQoqLwoJcmV0dXJuIEVOWElP
Owp9CgoKCi8qIGNoYW5uZWwgaW50ZXJmYWNlICovCnN0YXRpYyB2b2lkICoKZm04MDFjaF9pbml0
KHZvaWQgKmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50IGRpcikKewoJ
c3RydWN0IGZtODAxX2luZm8gKmZtODAxID0gKHN0cnVjdCBmbTgwMV9pbmZvICopZGV2aW5mbzsK
CXN0cnVjdCBmbTgwMV9jaGluZm8gKmNoID0gKGRpciA9PSBQQ01ESVJfUExBWSk/ICZmbTgwMS0+
cGNoIDogJmZtODAxLT5yY2g7CgkKCURQUklOVCgiZm04MDFjaF9pbml0LCBkaXJlY3Rpb24gPSAl
ZFxuIiwgZGlyKTsKCWNoLT5wYXJlbnQgPSBmbTgwMTsKCWNoLT5jaGFubmVsID0gYzsKCWNoLT5i
dWZmZXIgPSBiOwoJY2gtPmJ1ZmZlci0+YnVmc2l6ZSA9IEZNODAxX0JVRkZTSVpFOwoJY2gtPmRp
ciA9IGRpcjsKCWlmKCBjaG5fYWxsb2NidWYoY2gtPmJ1ZmZlciwgZm04MDEtPnBhcmVudF9kbWF0
KSA9PSAtMSkgcmV0dXJuIE5VTEw7CglyZXR1cm4gKHZvaWQgKiljaDsKfQoKc3RhdGljIGludApm
bTgwMWNoX3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKQp7CglzdHJ1Y3QgZm04MDFfY2hpbmZv
ICpjaCA9IGRhdGE7CgljaC0+ZGlyID0gZGlyOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKZm04
MDFjaF9zZXRmb3JtYXQodm9pZCAqZGF0YSwgdV9pbnQzMl90IGZvcm1hdCkKewoJc3RydWN0IGZt
ODAxX2NoaW5mbyAqY2ggPSBkYXRhOwoJc3RydWN0IGZtODAxX2luZm8gKmZtODAxID0gY2gtPnBh
cmVudDsKCQoJRFBSSU5UKCJmbTgwMWNoX3NldGZvcm1hdCAweCV4IDogJXMsICVzLCAlcywgJXNc
biIsIGZvcm1hdCwKCQkoZm9ybWF0ICYgQUZNVF9TVEVSRU8pPyJzdGVyZW8iOiJtb25vIiwKCQko
Zm9ybWF0ICYgKEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUgfCBBRk1UX1UxNl9MRSB8IEFGTVRf
VTE2X0JFKSkgPyAiMTZiaXQiOiI4Yml0IiwKCQkoZm9ybWF0ICYgQUZNVF9TSUdORUQpPyAic2ln
bmVkIjoidW5zaWduZWQiLAoJCShmb3JtYXQgJiBBRk1UX0JJR0VORElBTik/ImJpZ2VuZGlhaCI6
ImxpdHRsZWVuZGlhbiIgKTsKCQoJaWYoY2gtPmRpciA9PSBQQ01ESVJfUExBWSkgewoJCWZtODAx
LT5wbGF5X2ZtdCA9ICAoZm9ybWF0ICYgQUZNVF9TVEVSRU8pPyBGTV9QTEFZX1NURVJFTyA6IDA7
CgkJZm04MDEtPnBsYXlfZm10IHw9IChmb3JtYXQgJiBBRk1UXzE2QklUKSA/IEZNX1BMQVlfMTZC
SVQgOiAwOwoJCXJldHVybiBmbTgwMS0+cGxheV9mbXQ7Cgl9CgkKCWlmKGNoLT5kaXIgPT0gUENN
RElSX1JFQyApIHsKCQlmbTgwMS0+cmVjX2ZtdCA9IChmb3JtYXQgJiBBRk1UX1NURVJFTyk/IEZN
X1JFQ19TVEVSRU86MDsKCQlmbTgwMS0+cmVjX2ZtdCB8PSAoZm9ybWF0ICYgQUZNVF8xNkJJVCkg
PyBGTV9QTEFZXzE2QklUIDogMDsKCQlyZXR1cm4gZm04MDEtPnJlY19mbXQ7Cgl9CgkKCXJldHVy
biAwOwp9CgpzdHJ1Y3QgewoJaW50IGxpbWl0OwoJaW50IHJhdGU7Cn0gZm04MDFfcmF0ZXNbMTFd
ID0gewoJeyAgNjYwMCwgIDU1MDAgfSwgICAgICAgICAKCXsgIDg3NTAsICA4MDAwIH0sICAgICAg
ICAgCgl7IDEwMjUwLCAgOTYwMCB9LCAgICAgICAgIAoJeyAxMzIwMCwgMTEwMjUgfSwgICAgICAg
ICAKCXsgMTc1MDAsIDE2MDAwIH0sICAgICAgICAgCgl7IDIwNTAwLCAxOTIwMCB9LCAgICAgICAg
IAoJeyAyNjUwMCwgMjIwNTAgfSwgICAgICAgICAKCXsgMzUwMDAsIDMyMDAwIH0sICAgICAgICAg
Cgl7IDQxMDAwLCAzODQwMCB9LCAgICAgICAgIAoJeyA0NjAwMCwgNDQxMDAgfSwgICAgICAgICAK
CXsgNDgwMDAsIDQ4MDAwIH0sICAgICAgICAgCi8qIGFueXRoaW5nIGFib3ZlIC0+IDQ4MDAwICov
Cn07CgpzdGF0aWMgaW50CmZtODAxY2hfc2V0c3BlZWQodm9pZCAqZGF0YSwgdV9pbnQzMl90IHNw
ZWVkKQp7CglzdHJ1Y3QgZm04MDFfY2hpbmZvICpjaCA9IGRhdGE7CglzdHJ1Y3QgZm04MDFfaW5m
byAqZm04MDEgPSBjaC0+cGFyZW50OwoJcmVnaXN0ZXIgaW50IGk7CgkKCQoJZm9yIChpID0gMDsg
aSA8IDEwICYmIGZtODAxX3JhdGVzW2ldLmxpbWl0IDw9IHNwZWVkOyBpKyspIDsKCQoJaWYoY2gt
PmRpciA9PSBQQ01ESVJfUExBWSkgewoJCWZtODAxLT5wY2guc3BkID0gZm04MDFfcmF0ZXNbaV0u
cmF0ZTsKCQlmbTgwMS0+cGxheV9zaGlmdCA9IChpPDw4KTsKCQlmbTgwMS0+cGxheV9zaGlmdCAm
PSBGTV9QTEFZX1JBVEVfTUFTSzsKCX0KCQoJaWYoY2gtPmRpciA9PSBQQ01ESVJfUkVDICkgewoJ
CWZtODAxLT5yY2guc3BkID0gZm04MDFfcmF0ZXNbaV0ucmF0ZTsKCQlmbTgwMS0+cmVjX3NoaWZ0
ID0gKGk8PDgpOwoJCWZtODAxLT5yZWNfc2hpZnQgJj0gRk1fUkVDX1JBVEVfTUFTSzsKCX0KCQoJ
Y2gtPnNwZCA9IGZtODAxX3JhdGVzW2ldLnJhdGU7CgkKCXJldHVybiBmbTgwMV9yYXRlc1tpXS5y
YXRlOwp9CgpzdGF0aWMgaW50CmZtODAxY2hfc2V0YmxvY2tzaXplKHZvaWQgKmRhdGEsIHVfaW50
MzJfdCBibG9ja3NpemUpCnsKCXN0cnVjdCBmbTgwMV9jaGluZm8gKmNoID0gZGF0YTsKCXN0cnVj
dCBmbTgwMV9pbmZvICpmbTgwMSA9IGNoLT5wYXJlbnQ7CgkKCWZtODAxLT5wbGF5X2Jsa3NpemUg
PSBibG9ja3NpemU7CglmbTgwMS0+cmVjX2Jsa3NpemUgPSBibG9ja3NpemU7CgkKCURQUklOVCgi
Zm04MDFjaF9zZXRibG9ja3NpemUgJWQgKGRpciAlZClcbiIsYmxvY2tzaXplLCBjaC0+ZGlyKTsK
CglyZXR1cm4gYmxvY2tzaXplOwp9CgpzdGF0aWMgaW50CmZtODAxY2hfdHJpZ2dlcih2b2lkICpk
YXRhLCBpbnQgZ28pCnsKCXN0cnVjdCBmbTgwMV9jaGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBm
bTgwMV9pbmZvICpmbTgwMSA9IGNoLT5wYXJlbnQ7Cgl1X2ludDMyX3QgYmFzZWFkZHIgPSB2dG9w
aHlzKGNoLT5idWZmZXItPmJ1Zik7CglzbmRfZGJ1ZiAqYiA9IGNoLT5idWZmZXI7Cgl1X2ludDMy
X3QgazE7CgkKCURQUklOVCgiZm04MDFjaF90cmlnZ2VyIGdvICVkICwgIiwgZ28pOwoJRFBSSU5U
KCJycCAlZCwgcmwgJWQsIGZwICVkIGZsICVkLCBkbCAlZCwgYmxrc2l6ZT0lZFxuIiwKCQliLT5y
cCxiLT5ybCwgYi0+ZnAsYi0+ZmwsIGItPmRsLCBiLT5ibGtzeik7CgkKCWlmIChnbyA9PSBQQ01U
UklHX0VNTERNQVdSIHx8IGdvID09IFBDTVRSSUdfRU1MRE1BUkQpIHsKCQlyZXR1cm4gMDsKCX0K
CQoJaWYgKGNoLT5kaXIgPT0gUENNRElSX1BMQVkpIHsKCQlpZiAoZ28gPT0gUENNVFJJR19TVEFS
VCkgewoJCQkJCgkJCWZtODAxLT5wbGF5X3N0YXJ0ID0gYmFzZWFkZHI7CgkJCWZtODAxLT5wbGF5
X3NpemUgPSBiLT5ibGtzejsKCQkJZm04MDEtPnBsYXlfYmxrc2l6ZSA9IGZtODAxLT5wbGF5X3Np
emU7CgkJCWZtODAxLT5wbGF5X25leHRibGsgPSBmbTgwMS0+cGxheV9zdGFydCArIGZtODAxLT5w
bGF5X2Jsa3NpemU7CgkJCWZtODAxLT5wbGF5X2ZsaXAgPSAwOwoJCQlmbTgwMV93cihmbTgwMSwg
Rk1fUExBWV9ETUFMRU4sIGZtODAxLT5wbGF5X2Jsa3NpemUgLSAxLCAyKTsKCQkJZm04MDFfd3Io
Zm04MDEsIEZNX1BMQVlfRE1BQlVGMSxmbTgwMS0+cGxheV9zdGFydCw0KTsKCQkJZm04MDFfd3Io
Zm04MDEsIEZNX1BMQVlfRE1BQlVGMixmbTgwMS0+cGxheV9uZXh0YmxrLDQpOwoJCQlmbTgwMV93
cihmbTgwMSwgRk1fUExBWV9DVEwsCgkJCQkJRk1fUExBWV9TVEFSVCB8IEZNX1BMQVlfU1RPUE5P
VyB8IGZtODAxLT5wbGF5X2ZtdCB8IGZtODAxLT5wbGF5X3NoaWZ0LCAKCQkJCQkyICk7CgkJCX0g
ZWxzZSB7CgkJCWsxID0gZm04MDFfcmQoZm04MDEsIEZNX1BMQVlfQ1RMLDIpOwoJCQlmbTgwMV93
cihmbTgwMSwgRk1fUExBWV9DVEwsCgkJCQkoazEgJiB+KEZNX1BMQVlfU1RPUE5PVyB8IEZNX1BM
QVlfU1RBUlQpKSB8CgkJCQlGTV9QTEFZX0JVRjFfTEFTVCB8IEZNX1BMQVlfQlVGMl9MQVNULCAy
ICk7CgkJfQoJfSBlbHNlIGlmKGNoLT5kaXIgPT0gUENNRElSX1JFQykgewoJCWlmIChnbyA9PSBQ
Q01UUklHX1NUQVJUKSB7CgkJCWZtODAxLT5yZWNfc3RhcnQgPSBiYXNlYWRkcjsKCQkJZm04MDEt
PnJlY19zaXplID0gYi0+Ymxrc3o7CgkJCWZtODAxLT5yZWNfYmxrc2l6ZSA9IGZtODAxLT5yZWNf
c2l6ZTsKCQkJZm04MDEtPnJlY19uZXh0YmxrID0gZm04MDEtPnJlY19zdGFydCArIGZtODAxLT5y
ZWNfYmxrc2l6ZTsKCQkJZm04MDEtPnJlY19mbGlwID0gMDsKCQkJZm04MDFfd3IoZm04MDEsIEZN
X1JFQ19ETUFMRU4sIGZtODAxLT5yZWNfYmxrc2l6ZSAtIDEsIDIpOwoJCQlmbTgwMV93cihmbTgw
MSwgRk1fUkVDX0RNQUJVRjEsZm04MDEtPnJlY19zdGFydCw0KTsKCQkJZm04MDFfd3IoZm04MDEs
IEZNX1JFQ19ETUFCVUYyLGZtODAxLT5yZWNfbmV4dGJsayw0KTsKCQkJZm04MDFfd3IoZm04MDEs
IEZNX1JFQ19DVEwsIAoJCQkJCUZNX1JFQ19TVEFSVCB8IEZNX1JFQ19TVE9QTk9XIHwgZm04MDEt
PnJlY19mbXQgfCBmbTgwMS0+cmVjX3NoaWZ0LCAKCQkJCQkyICk7CgkJCX0gZWxzZSB7CgkJCWsx
ID0gZm04MDFfcmQoZm04MDEsIEZNX1JFQ19DVEwsMik7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9S
RUNfQ1RMLAoJCQkJKGsxICYgfihGTV9SRUNfU1RPUE5PVyB8IEZNX1JFQ19TVEFSVCkpIHwKCQkJ
CUZNX1JFQ19CVUYxX0xBU1QgfCBGTV9SRUNfQlVGMl9MQVNULCAyKTsKCQl9Cgl9CgkKCXJldHVy
biAwOwp9CgovKiBBbG1vc3QgQUxTQSBjb3B5ICovCnN0YXRpYyBpbnQKZm04MDFjaF9nZXRwdHIo
dm9pZCAqZGF0YSkKewoJc3RydWN0IGZtODAxX2NoaW5mbyAqY2ggPSBkYXRhOwoJc3RydWN0IGZt
ODAxX2luZm8gKmZtODAxID0gY2gtPnBhcmVudDsKCWludCByZXN1bHQgPSAwOwoJc25kX2RidWYg
KmIgPSBjaC0+YnVmZmVyOwoJCglpZiAoY2gtPmRpciA9PSBQQ01ESVJfUExBWSkgewoJCXJlc3Vs
dCA9IGZtODAxX3JkKGZtODAxLCAKCQkJKGZtODAxLT5wbGF5X2ZsaXAmMSkgPyAKCQkJRk1fUExB
WV9ETUFCVUYyOkZNX1BMQVlfRE1BQlVGMSwgNCkgLSBmbTgwMS0+cGxheV9zdGFydDsKCX0KCQoJ
aWYgKGNoLT5kaXIgPT0gUENNRElSX1JFQykgewoJCXJlc3VsdCA9IGZtODAxX3JkKGZtODAxLAoJ
CQkoZm04MDEtPnJlY19mbGlwJjEpID8KCQkJRk1fUkVDX0RNQUJVRjI6Rk1fUkVDX0RNQUJVRjEs
IDQpIC0gZm04MDEtPnJlY19zdGFydDsKCX0gCgkKCURQUklOVCgiZm04MDFjaF9nZXRwdHI6JWQs
ICBycCAlZCwgcmwgJWQsIGZwICVkIGZsICVkXG4iLAoJICAgICAgICAgICAgICAgIHJlc3VsdCwg
Yi0+cnAsYi0+cmwsIGItPmZwLGItPmZsKTsgICAgICAgICAgICAgICAgCgoJcmV0dXJuIHJlc3Vs
dDsKfQoKc3RhdGljIHBjbWNoYW5fY2FwcyAqCmZtODAxY2hfZ2V0Y2Fwcyh2b2lkICpkYXRhKQp7
CglyZXR1cm4gJmZtODAxY2hfY2FwczsKfQoKc3RhdGljIGludApmbTgwMV9wY2lfZGV0YWNoKGRl
dmljZV90IGRldikKewoJc3RydWN0IGZtODAxX2luZm8gKmZtODAxID0gZm04MDFfZ2V0KCk7CgkK
CURQUklOVCgiRm9ydGUgTWVkaWEgRk04MDEgZGV0YWNoXG4iKTsKCglpZiAoZm04MDEtPnJlZykg
YnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBmbTgwMS0+cmVndHlwZSwgZm04MDEtPnJlZ2lkLCBm
bTgwMS0+cmVnKTsKCWlmIChmbTgwMS0+aWgpIGJ1c190ZWFyZG93bl9pbnRyKGRldiwgZm04MDEt
PmlycSwgZm04MDEtPmloKTsKCWlmIChmbTgwMS0+aXJxKSBidXNfcmVsZWFzZV9yZXNvdXJjZShk
ZXYsIFNZU19SRVNfSVJRLCBmbTgwMS0+aXJxaWQsIGZtODAxLT5pcnEpOwoJZnJlZShmbTgwMSwg
TV9ERVZCVUYpOwoJcmV0dXJuIDA7CQp9CgpzdGF0aWMgZGV2aWNlX21ldGhvZF90IGZtODAxX21l
dGhvZHNbXSA9IHsKCS8qIERldmljZSBpbnRlcmZhY2UgKi8KCURFVk1FVEhPRChkZXZpY2VfcHJv
YmUsCQlmbTgwMV9wY2lfcHJvYmUpLAoJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWZtODAxX3Bj
aV9hdHRhY2gpLAoJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWZtODAxX3BjaV9kZXRhY2gpLAoJ
eyAwLCAwfQp9OwoKc3RhdGljIGRyaXZlcl90IGZtODAxX2RyaXZlciA9IHsKCSJwY20iLAoJZm04
MDFfbWV0aG9kcywKCXNpemVvZihzbmRkZXZfaW5mbyksCn07CgpzdGF0aWMgZGV2Y2xhc3NfdCBw
Y21fZGV2Y2xhc3M7CgpEUklWRVJfTU9EVUxFKGZtODAxLCBwY2ksIGZtODAxX2RyaXZlciwgcGNt
X2RldmNsYXNzLDAsIDApOwo=
--_=XFMail.1.4.0.FreeBSD:000816183513:1038=_--
End of MIME message
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.000816183513.diwil>
