Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Aug 2000 22:44:21 +0400 (MSD)
From:      dimmy the wild <diwil@dataart.com>
To:        freebsd-hackers@freebsd.org, freebsd-multimedia@freebsd.org
Subject:   fm 801 sound
Message-ID:  <XFMail.000822224421.diwil@dataart.com>

next in thread | raw e-mail | index | archive | help
This message is in MIME format
--_=XFMail.1.4.0.FreeBSD:000822224421:1773=_
Content-Type: text/plain; charset=KOI8-R

Fellows,

Ok, this is a working edition of the fm801 chip driver attached.
It tested with play, rvplayer, x11amp.
I've found no probs so far.

Can anyone put it on the cvs tree?

Put it to /usr/src/sys/dev/sound/pci/fms.c

To add it to the kernel you have to add the line

dev/sound/pci/fms.c
     optional pcm

to the file

/usr/src/sys/conf/files

and rebuild the kernel...

Also the driver is designed to be compiled as a module.
Note, that the current edition works only with latest snapshot of the
system.

To make it working with 4.1
you'll have to apply the following path:


----------------------------------------------------

--- fms.c     Tue Aug 22 22:37:07 2000
+++ fms-4.1.c       Tue Aug 22 22:39:28 2000
@@ -115,19 +115,10 @@
 static int fm801ch_setup(pcm_channel *c);
 */
 
-static u_int32_t fmts[] = {
-       AFMT_U8,
-       AFMT_STEREO | AFMT_U8,
-       AFMT_S16_LE,
-       AFMT_STEREO | AFMT_S16_LE, /*
-       AFMT_STEREO | (AFMT_S16_LE | AFMT_S16_BE | AFMT_U16_LE |
AFMT_U16_BE),
-       (AFMT_S16_LE | AFMT_S16_BE | AFMT_U16_LE | AFMT_U16_BE), */
-       0
-};
-
 static pcmchan_caps fm801ch_caps = {
        4000, 48000,
-       fmts, 0
+       AFMT_STEREO | AFMT_U8 | AFMT_S16_LE,
+       AFMT_STEREO | AFMT_U8 | AFMT_S16_LE
 };
                 
 static pcm_channel fm801_chantemplate = {

-----------------------------------------------------


Thanks,
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:000822224421:1773=_
Content-Disposition: attachment; filename="fms.c"
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name=fms.c; SizeOnDisk=19735

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
RFBSSU5UCSBpZigwKSBwcmludGYKCgovKiBjaGFubmVsIGludGVyZmFjZSAqLwpzdGF0aWMgdm9p
ZCAqZm04MDFjaF9pbml0KHZvaWQgKmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAq
YywgaW50IGRpcik7CnN0YXRpYyBpbnQgZm04MDFjaF9zZXRkaXIodm9pZCAqZGF0YSwgaW50IGRp
cik7CnN0YXRpYyBpbnQgZm04MDFjaF9zZXRmb3JtYXQodm9pZCAqZGF0YSwgdV9pbnQzMl90IGZv
cm1hdCk7CnN0YXRpYyBpbnQgZm04MDFjaF9zZXRzcGVlZCh2b2lkICpkYXRhLCB1X2ludDMyX3Qg
c3BlZWQpOwpzdGF0aWMgaW50IGZtODAxY2hfc2V0YmxvY2tzaXplKHZvaWQgKmRhdGEsIHVfaW50
MzJfdCBibG9ja3NpemUpOwpzdGF0aWMgaW50IGZtODAxY2hfdHJpZ2dlcih2b2lkICpkYXRhLCBp
bnQgZ28pOwpzdGF0aWMgaW50IGZtODAxY2hfZ2V0cHRyKHZvaWQgKmRhdGEpOwpzdGF0aWMgcGNt
Y2hhbl9jYXBzICpmbTgwMWNoX2dldGNhcHModm9pZCAqZGF0YSk7Ci8qCnN0YXRpYyBpbnQgZm04
MDFjaF9zZXR1cChwY21fY2hhbm5lbCAqYyk7CiovCgpzdGF0aWMgdV9pbnQzMl90IGZtdHNbXSA9
IHsKCUFGTVRfVTgsCglBRk1UX1NURVJFTyB8IEFGTVRfVTgsCglBRk1UX1MxNl9MRSwKCUFGTVRf
U1RFUkVPIHwgQUZNVF9TMTZfTEUsIC8qCglBRk1UX1NURVJFTyB8IChBRk1UX1MxNl9MRSB8IEFG
TVRfUzE2X0JFIHwgQUZNVF9VMTZfTEUgfCBBRk1UX1UxNl9CRSksCgkoQUZNVF9TMTZfTEUgfCBB
Rk1UX1MxNl9CRSB8IEFGTVRfVTE2X0xFIHwgQUZNVF9VMTZfQkUpLCAqLwoJMAp9OwoKc3RhdGlj
IHBjbWNoYW5fY2FwcyBmbTgwMWNoX2NhcHMgPSB7Cgk0MDAwLCA0ODAwMCwKCWZtdHMsIDAKfTsK
ICAgICAgICAgICAgICAgIApzdGF0aWMgcGNtX2NoYW5uZWwgZm04MDFfY2hhbnRlbXBsYXRlID0g
ewoJZm04MDFjaF9pbml0LAoJZm04MDFjaF9zZXRkaXIsCglmbTgwMWNoX3NldGZvcm1hdCwKCWZt
ODAxY2hfc2V0c3BlZWQsCglmbTgwMWNoX3NldGJsb2Nrc2l6ZSwKCWZtODAxY2hfdHJpZ2dlciwK
CWZtODAxY2hfZ2V0cHRyLAoJZm04MDFjaF9nZXRjYXBzLAp9OwoKc3RydWN0IGZtODAxX2luZm87
CgpzdHJ1Y3QgZm04MDFfY2hpbmZvIHsKCXN0cnVjdCBmbTgwMV9pbmZvIAkqcGFyZW50OwoJcGNt
X2NoYW5uZWwgCQkqY2hhbm5lbDsKCXNuZF9kYnVmIAkJKmJ1ZmZlcjsKCXVfaW50MzJfdCAJCXNw
ZCwgZGlyLCBmbXQ7CS8qIHNwZWVkLCBkaXJlY3Rpb24sIGZvcm1hdCAqLwoJdV9pbnQzMl90CQlz
aGlmdDsKfTsKCnN0cnVjdCBmbTgwMV9pbmZvIHsKCWludCAJCQl0eXBlOwoJYnVzX3NwYWNlX3Rh
Z190IAlzdDsKCWJ1c19zcGFjZV9oYW5kbGVfdCAJc2g7CglidXNfZG1hX3RhZ190ICAgCXBhcmVu
dF9kbWF0OwoJCglkZXZpY2VfdCAJCWRldjsKCWludCAJCQludW07Cgl1X2ludDMyX3QgCQl1bml0
OwoJCglzdHJ1Y3QgcmVzb3VyY2UgCSpyZWcsICppcnE7CglpbnQgICAgICAgICAgICAgCXJlZ3R5
cGUsIHJlZ2lkLCBpcnFpZDsKCXZvaWQgICAgICAgICAgICAJKmloOwoKCXVfaW50MzJfdAkJcGxh
eV9mbGlwLAoJCQkJcGxheV9uZXh0YmxrLAoJCQkJcGxheV9zdGFydCwKCQkJCXBsYXlfYmxrc2l6
ZSwKCQkJCXBsYXlfZm10LAoJCQkJcGxheV9zaGlmdCwKCQkJCXBsYXlfc2l6ZTsKCQoJdV9pbnQz
Ml90CQlyZWNfZmxpcCwKCQkJCXJlY19uZXh0YmxrLAoJCQkJcmVjX3N0YXJ0LAoJCQkJcmVjX2Js
a3NpemUsCgkJCQlyZWNfZm10LAoJCQkJcmVjX3NoaWZ0LAoJCQkJcmVjX3NpemU7CgkKCXN0cnVj
dCBmbTgwMV9jaGluZm8gCXBjaCwgcmNoOwp9OwoKCi8qIHNldmVyYWwgcHJvY2VkdXJlcyB0byBy
ZWxlYXNlIHRoZSB0aGluZyBwcm9wZXJseSBpZiBjb21waWxlZCBhcyBtb2R1bGUgKi8Kc3RhdGlj
IHN0cnVjdCBmbTgwMV9pbmZvICpzYXZlODAxOwpzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDFfZ2V0
IF9fUCgodm9pZCApKTsKCnN0YXRpYyB2b2lkCmZtODAxX3NhdmUoc3RydWN0IGZtODAxX2luZm8g
KmZtODAxKQp7CglzYXZlODAxID0gZm04MDE7Cn0KCnN0cnVjdCBmbTgwMV9pbmZvICoKZm04MDFf
Z2V0KHZvaWQgKQp7CglyZXR1cm4gc2F2ZTgwMTsKfQoKLyogQnVzIFJlYWQgLyBXcml0ZSByb3V0
aW5lcyAqLwpzdGF0aWMgdV9pbnQzMl90CmZtODAxX3JkKHN0cnVjdCBmbTgwMV9pbmZvICpmbTgw
MSwgaW50IHJlZ25vLCBpbnQgc2l6ZSkKewoJc3dpdGNoKHNpemUpIHsKCWNhc2UgMToKCQlyZXR1
cm4gKGJ1c19zcGFjZV9yZWFkXzEoZm04MDEtPnN0LCBmbTgwMS0+c2gsIHJlZ25vKSk7CgljYXNl
IDI6CgkJcmV0dXJuIChidXNfc3BhY2VfcmVhZF8yKGZtODAxLT5zdCwgZm04MDEtPnNoLCByZWdu
bykpOwoJY2FzZSA0OgoJCXJldHVybiAoYnVzX3NwYWNlX3JlYWRfNChmbTgwMS0+c3QsIGZtODAx
LT5zaCwgcmVnbm8pKTsKCWRlZmF1bHQ6CgkJcmV0dXJuIDB4ZmZmZmZmZmY7Cgl9Cn0KCnN0YXRp
YyB2b2lkCmZtODAxX3dyKHN0cnVjdCBmbTgwMV9pbmZvICpmbTgwMSwgaW50IHJlZ25vLCB1X2lu
dDMyX3QgZGF0YSwgaW50IHNpemUpCnsKCXN3aXRjaChzaXplKSB7CgljYXNlIDE6CgkJcmV0dXJu
IGJ1c19zcGFjZV93cml0ZV8xKGZtODAxLT5zdCwgZm04MDEtPnNoLCByZWdubywgZGF0YSk7Cglj
YXNlIDI6CgkJcmV0dXJuIGJ1c19zcGFjZV93cml0ZV8yKGZtODAxLT5zdCwgZm04MDEtPnNoLCBy
ZWdubywgZGF0YSk7CgljYXNlIDQ6CgkJcmV0dXJuIGJ1c19zcGFjZV93cml0ZV80KGZtODAxLT5z
dCwgZm04MDEtPnNoLCByZWdubywgZGF0YSk7CglkZWZhdWx0OgoJCXJldHVybjsKCX0KfQoKLyoK
ICogIGFjOTcgY29kZWMgcm91dGluZXMKICovCiNkZWZpbmUgVElNTyA1MApzdGF0aWMgdV9pbnQz
Ml90CmZtODAxX3JkY2Qodm9pZCAqZGV2aW5mbywgaW50IHJlZ25vKQp7CglzdHJ1Y3QgZm04MDFf
aW5mbyAqZm04MDEgPSAoc3RydWN0IGZtODAxX2luZm8gKilkZXZpbmZvOwoJaW50IGk7CgkKCWZv
ciAoaSA9IDA7IGkgPCBUSU1PICYmIGZtODAxX3JkKGZtODAxLEZNX0NPREVDX0NNRCwyKSAmIEZN
X0NPREVDX0NNRF9CVVNZOyBpKyspIHsKCQlERUxBWSgxMDAwMCk7CgkJRFBSSU5UKCJmbTgwMSBy
ZGNkOiAxIC0gREVMQVlcbiIpOwoJfQoJaWYgKGkgPj0gVElNTykgewoJCXByaW50ZigiZm04MDEg
cmRjZDogY29kZWMgYnVzeVxuIik7CgkJcmV0dXJuIDA7Cgl9CgkKCWZtODAxX3dyKGZtODAxLEZN
X0NPREVDX0NNRCwgcmVnbm98Rk1fQ09ERUNfQ01EX1JFQUQsMik7CgoJZm9yIChpID0gMDsgaSA8
IFRJTU8gJiYgIShmbTgwMV9yZChmbTgwMSxGTV9DT0RFQ19DTUQsMikgJiBGTV9DT0RFQ19DTURf
VkFMSUQpOyBpKyspCgl7CgkJREVMQVkoMTAwMDApOwoJCURQUklOVCgiZm04MDEgcmRjZDogMiAt
IERFTEFZXG4iKTsKCX0KCWlmIChpID49IFRJTU8pIHsKCQlwcmludGYoImZtODAxIHJkY2Q6IHdy
aXRlIGNvZGVjIGludmFsaWRcbiIpOwoJCXJldHVybiAwOwoJfQoJCQoJcmV0dXJuIGZtODAxX3Jk
KGZtODAxLEZNX0NPREVDX0RBVEEsMik7Cn0KCnN0YXRpYyB2b2lkCmZtODAxX3dyY2Qodm9pZCAq
ZGV2aW5mbywgaW50IHJlZ25vLCB1X2ludDMyX3QgZGF0YSkKewoJc3RydWN0IGZtODAxX2luZm8g
KmZtODAxID0gKHN0cnVjdCBmbTgwMV9pbmZvICopZGV2aW5mbzsKCWludCBpOwoJCglEUFJJTlQo
ImZtODAxX3dyY2QgcmVnIDB4JXggdmFsIDB4JXhcbiIscmVnbm8sIGRhdGEpOwovKgkKCWlmKHJl
Z25vID09IEFDOTdfUkVHX1JFQ1NFTCkJcmV0dXJuOwoqLwkKCS8qIFBvbGwgdW50aWwgY29kZWMg
aXMgcmVhZHkgKi8KCWZvciAoaSA9IDA7IGkgPCBUSU1PICYmIGZtODAxX3JkKGZtODAxLEZNX0NP
REVDX0NNRCwyKSAmIEZNX0NPREVDX0NNRF9CVVNZOyBpKyspIHsKCQlERUxBWSgxMDAwMCk7CgkJ
RFBSSU5UKCJmbTgwMSByZGNkOiAxIC0gREVMQVlcbiIpOwoJfQoJaWYgKGkgPj0gVElNTykgewoJ
CXByaW50ZigiZm04MDEgd3JjZDogcmVhZCBjb2RlYyBidXN5XG4iKTsKCQlyZXR1cm47Cgl9CgkK
CWZtODAxX3dyKGZtODAxLEZNX0NPREVDX0RBVEEsZGF0YSwgMik7CglmbTgwMV93cihmbTgwMSxG
TV9DT0RFQ19DTUQsIHJlZ25vLDIpOwoJCgkvKiB3YWl0IHVudGlsIGNvZGVjIGlzIHJlYWR5ICov
Cglmb3IgKGkgPSAwOyBpIDwgVElNTyAmJiBmbTgwMV9yZChmbTgwMSxGTV9DT0RFQ19DTUQsMikg
JiBGTV9DT0RFQ19DTURfQlVTWTsgaSsrKSB7CgkJREVMQVkoMTAwMDApOwoJCURQUklOVCgiZm04
MDEgd3JjZDogMiAtIERFTEFZXG4iKTsKCX0KCWlmIChpID49IFRJTU8pIHsKCQlwcmludGYoImZt
ODAxIHdyY2Q6IHJlYWQgY29kZWMgYnVzeVxuIik7CgkJcmV0dXJuOwoJfQoJRFBSSU5UKCJmbTgw
MSB3cmNkIHJlbGVhc2UgcmVnIDB4JXggdmFsIDB4JXhcbiIscmVnbm8sIGRhdGEpOwoJcmV0dXJu
Owp9CgovKiAKICogVGhlIGludGVycnVwdCBoYW5kbGVyIAogKi8Kc3RhdGljIHZvaWQKZm04MDFf
aW50cih2b2lkICpwKQp7CglzdHJ1Y3QgZm04MDFfaW5mbyAJKmZtODAxID0gKHN0cnVjdCBmbTgw
MV9pbmZvICopcDsKCXVfaW50MzJfdCAgICAgICAJaW50c3JjID0gZm04MDFfcmQoZm04MDEsIEZN
X0lOVFNUQVRVUywgMik7CglzdHJ1Y3QgZm04MDFfY2hpbmZvCSpjaCA9ICYoZm04MDEtPnBjaCk7
CglzbmRfZGJ1ZiAJCSpiID0gY2gtPmJ1ZmZlcjsKCQoJRFBSSU5UKCJcbmZtODAxX2ludHIgaW50
c3JjIDB4JXggIiwgaW50c3JjKTsKCURQUklOVCgicnAgJWQsIHJsICVkLCBmcCAlZCBmbCAlZCwg
c2l6ZT0lZFxuIiwKCQliLT5ycCxiLT5ybCwgYi0+ZnAsYi0+ZmwsIGItPmJsa3N6KTsKCQkKCWlm
KGludHNyYyAmIEZNX0lOVFNUQVRVU19QTEFZKSB7CgkJZm04MDEtPnBsYXlfZmxpcCsrOwoJCWlm
KGZtODAxLT5wbGF5X2ZsaXAgJiAxKSB7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9QTEFZX0RNQUJV
RjEsIGZtODAxLT5wbGF5X3N0YXJ0LDQpOwoJCX0gZWxzZQoJCQlmbTgwMV93cihmbTgwMSwgRk1f
UExBWV9ETUFCVUYyLCBmbTgwMS0+cGxheV9uZXh0YmxrLDQpOwoJCWNobl9pbnRyKGZtODAxLT5w
Y2guY2hhbm5lbCk7Cgl9CgkKCWlmKGludHNyYyAmIEZNX0lOVFNUQVRVU19SRUMpIHsKCQlmbTgw
MS0+cmVjX2ZsaXArKzsKCQlpZihmbTgwMS0+cmVjX2ZsaXAgJiAxKSB7CgkJCWZtODAxX3dyKGZt
ODAxLCBGTV9SRUNfRE1BQlVGMSwgZm04MDEtPnJlY19zdGFydCw0KTsKCQl9IGVsc2UKCQkJZm04
MDFfd3IoZm04MDEsIEZNX1JFQ19ETUFCVUYyLCBmbTgwMS0+cmVjX25leHRibGssNCk7CgkJY2hu
X2ludHIoZm04MDEtPnJjaC5jaGFubmVsKTsKCX0KCQoJaWYgKCBpbnRzcmMgJiBGTV9JTlRTVEFU
VVNfTVBVICkgewoJCS8qIFRoaXMgaXMgYSBUT0RPaXNoIHRoaW5nLi4uICovCgkJZm04MDFfd3Io
Zm04MDEsIEZNX0lOVFNUQVRVUywgaW50c3JjICYgRk1fSU5UU1RBVFVTX01QVSwyKTsKCX0KCQoJ
aWYgKCBpbnRzcmMgJiBGTV9JTlRTVEFUVVNfVk9MICkgewoJCS8qIFRoaXMgaXMgYSBUT0RPaXNo
IHRoaW5nLi4uICovCgkJZm04MDFfd3IoZm04MDEsIEZNX0lOVFNUQVRVUywgaW50c3JjICYgRk1f
SU5UU1RBVFVTX1ZPTCwyKTsKCX0KCQoJRFBSSU5UKCJmbTgwMV9pbnRyIGNsZWFyXG5cbiIpOwoJ
Zm04MDFfd3IoZm04MDEsIEZNX0lOVFNUQVRVUywgaW50c3JjICYgKEZNX0lOVFNUQVRVU19QTEFZ
IHwgRk1fSU5UU1RBVFVTX1JFQyksIDIpOwp9CgovKgogKiAgSW5pdCByb3V0aW5lIGlzIHRha2Vu
IGZyb20gYW4gb3JpZ2luYWwgTmV0QlNEIGRyaXZlcgogKi8Kc3RhdGljIGludApmbTgwMV9pbml0
KHN0cnVjdCBmbTgwMV9pbmZvICpmbTgwMSkKewoJdV9pbnQzMl90IGsxOwoJCgkvKiByZXNldCBj
b2RlYyAqLwoJZm04MDFfd3IoZm04MDEsIEZNX0NPREVDX0NUTCwgMHgwMDIwLDIpOwoJREVMQVko
MTAwMDAwKTsKCWZtODAxX3dyKGZtODAxLCBGTV9DT0RFQ19DVEwsIDB4MDAwMCwyKTsKCURFTEFZ
KDEwMDAwMCk7CgkKCWZtODAxX3dyKGZtODAxLCBGTV9QQ01fVk9MVU1FLCAweDA4MDgsMik7Cglm
bTgwMV93cihmbTgwMSwgRk1fRk1fVk9MVU1FLCAweDA4MDgsMik7CglmbTgwMV93cihmbTgwMSwg
Rk1fSTJTX1ZPTFVNRSwgMHgwODA4LDIpOwoJCglmbTgwMV93cigodm9pZCAqKWZtODAxLCBGTV9S
RUNPUkRfU09VUkNFLCAweDAwMDAsMik7CgkKCS8qIFVubWFzayBwbGF5YmFjaywgcmVjb3JkIGFu
ZCBtcHUgaW50ZXJydXB0cywgbWFzayB0aGUgcmVzdCAqLwoJazEgPSBmbTgwMV9yZCgodm9pZCAq
KWZtODAxLCBGTV9JTlRNQVNLLDIpOwoJZm04MDFfd3IoZm04MDEsIEZNX0lOVE1BU0ssCgkJKGsx
ICYgfihGTV9JTlRNQVNLX1BMQVkgfCBGTV9JTlRNQVNLX1JFQyB8IEZNX0lOVE1BU0tfTVBVKSkg
fAoJCUZNX0lOVE1BU0tfVk9MLDIpOwoJZm04MDFfd3IoZm04MDEsIEZNX0lOVFNUQVRVUywKCQlG
TV9JTlRTVEFUVVNfUExBWSB8IEZNX0lOVFNUQVRVU19SRUMgfCBGTV9JTlRTVEFUVVNfTVBVIHwK
CQlGTV9JTlRTVEFUVVNfVk9MLDIpOwoJCglEUFJJTlQoIkZNODAxIGluaXQgT2tcbiIpOwoJcmV0
dXJuIDA7Cn0KCnN0YXRpYyBpbnQKZm04MDFfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpCnsKCXNu
ZGRldl9pbmZvIAkJKmQ7Cgl1X2ludDMyX3QgCQlkYXRhOwoJc3RydWN0IGFjOTdfaW5mbyAJKmNv
ZGVjOwoJc3RydWN0IGZtODAxX2luZm8gCSpmbTgwMTsKCWludCAJCQlpOwoJaW50IAkJCW1hcHBl
ZCA9IDA7CgljaGFyIAkJCXN0YXR1c1tTTkRfU1RBVFVTTEVOXTsKCQoJZCA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKCWlmICgoZm04MDEgPSAoc3RydWN0IGZtODAxX2luZm8gKiltYWxsb2Moc2l6
ZW9mKCpmbTgwMSksTV9ERVZCVUYsIE1fTk9XQUlUKSkgPT0gTlVMTCkgewoJCWRldmljZV9wcmlu
dGYoZGV2LCAiY2Fubm90IGFsbG9jYXRlIHNvZnRjXG4iKTsKCQlyZXR1cm4gRU5YSU87Cgl9CgkK
CWJ6ZXJvKGZtODAxLCBzaXplb2YoKmZtODAxKSk7CglmbTgwMS0+dHlwZSA9IHBjaV9nZXRfZGV2
aWQoZGV2KTsKCQoJZGF0YSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgMik7
CglkYXRhIHw9IChQQ0lNX0NNRF9QT1JURU58UENJTV9DTURfTUVNRU58UENJTV9DTURfQlVTTUFT
VEVSRU4pOwoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgZGF0YSwgMik7Cglk
YXRhID0gcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01NQU5ELCAyKTsKCQoJZm9yIChpID0g
MDsgKG1hcHBlZCA9PSAwKSAmJiAoaSA8IFBDSV9NQVhNQVBTXzApOyBpKyspIHsKCQlmbTgwMS0+
cmVnaWQgPSBQQ0lSX01BUFMgKyBpKjQ7CgkJZm04MDEtPnJlZ3R5cGUgPSBTWVNfUkVTX01FTU9S
WTsKCQlmbTgwMS0+cmVnID0gYnVzX2FsbG9jX3Jlc291cmNlKGRldiwgZm04MDEtPnJlZ3R5cGUs
ICZmbTgwMS0+cmVnaWQsCgkJCQkJCTAsIH4wLCAxLCBSRl9BQ1RJVkUpOwoJCWlmKCFmbTgwMS0+
cmVnKQoJCXsKCQkJZm04MDEtPnJlZ3R5cGUgPSBTWVNfUkVTX0lPUE9SVDsKCQkJZm04MDEtPnJl
ZyA9IGJ1c19hbGxvY19yZXNvdXJjZShkZXYsIGZtODAxLT5yZWd0eXBlLCAmZm04MDEtPnJlZ2lk
LAoJCQkJCQkwLCB+MCwgMSwgUkZfQUNUSVZFKTsKCQl9CgkJCgkJaWYoZm04MDEtPnJlZykgewoJ
CQlmbTgwMS0+c3QgPSBybWFuX2dldF9idXN0YWcoZm04MDEtPnJlZyk7CgkJCWZtODAxLT5zaCA9
IHJtYW5fZ2V0X2J1c2hhbmRsZShmbTgwMS0+cmVnKTsKCQkJbWFwcGVkKys7CgkJfQoJfQoKCWlm
IChtYXBwZWQgPT0gMCkgewoJCWRldmljZV9wcmludGYoZGV2LCAidW5hYmxlIHRvIG1hcCByZWdp
c3RlciBzcGFjZVxuIik7CgkJZ290byBvb3BzOwoJfQoJCglmbTgwMV9pbml0KGZtODAxKTsKCQoJ
Y29kZWMgPSBhYzk3X2NyZWF0ZShkZXYsICh2b2lkICopZm04MDEsIE5VTEwsIGZtODAxX3JkY2Qs
IGZtODAxX3dyY2QpOwoJaWYgKGNvZGVjID09IE5VTEwpIGdvdG8gb29wczsKCglpZiAobWl4ZXJf
aW5pdChkLCAmYWM5N19taXhlciwgY29kZWMpID09IC0xKSBnb3RvIG9vcHM7CgoJZm04MDEtPmly
cWlkID0gMDsKCWZtODAxLT5pcnEgPSBidXNfYWxsb2NfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lS
USwgJmZtODAxLT5pcnFpZCwKCQkJCTAsIH4wLCAxLCBSRl9BQ1RJVkUgfCBSRl9TSEFSRUFCTEUp
OwoJaWYgKCFmbTgwMS0+aXJxIHx8CgkJYnVzX3NldHVwX2ludHIoZGV2LCBmbTgwMS0+aXJxLCBJ
TlRSX1RZUEVfVFRZLAoJCQkJCWZtODAxX2ludHIsIGZtODAxLCAmZm04MDEtPmloKSkgewoJCWRl
dmljZV9wcmludGYoZGV2LCAidW5hYmxlIHRvIG1hcCBpbnRlcnJ1cHRcbiIpOwoJCWdvdG8gb29w
czsKCX0KCQoJaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZSgvKnBhcmVudCovTlVMTCwgLyphbGlnbm1l
bnQqLzIsIC8qYm91bmRhcnkqLzAsCgkJLypsb3dhZGRyKi9CVVNfU1BBQ0VfTUFYQUREUl8zMkJJ
VCwKCQkvKmhpZ2hhZGRyKi9CVVNfU1BBQ0VfTUFYQUREUiwKCQkvKmZpbHRlciovTlVMTCwgLypm
aWx0ZXJhcmcqL05VTEwsCgkJLyptYXhzaXplKi9GTTgwMV9CVUZGU0laRSwgLypuc2VnbWVudHMq
LzEsIC8qbWF4c2VneiovMHgzZmZmZiwKCQkvKmZsYWdzKi8wLCAmZm04MDEtPnBhcmVudF9kbWF0
KSAhPSAwKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8gY3JlYXRlIGRtYSB0YWdc
biIpOwoJCWdvdG8gb29wczsKCX0KCQoJc25wcmludGYoc3RhdHVzLCA2NCwgImF0ICVzIDB4JWx4
IGlycSAlbGQiLAoJCShmbTgwMS0+cmVndHlwZSA9PSBTWVNfUkVTX0lPUE9SVCk/ICJpbyIgOiAi
bWVtb3J5IiwKCQlybWFuX2dldF9zdGFydChmbTgwMS0+cmVnKSwgcm1hbl9nZXRfc3RhcnQoZm04
MDEtPmlycSkpOwoKI2RlZmluZSBGTTgwMV9NQVhQTEFZQ0gJMQoJaWYgKHBjbV9yZWdpc3Rlcihk
ZXYsIGZtODAxLCBGTTgwMV9NQVhQTEFZQ0gsIDEpKSBnb3RvIG9vcHM7CglwY21fYWRkY2hhbihk
ZXYsIFBDTURJUl9QTEFZLCAmZm04MDFfY2hhbnRlbXBsYXRlLCBmbTgwMSk7CglwY21fYWRkY2hh
bihkZXYsIFBDTURJUl9SRUMsICZmbTgwMV9jaGFudGVtcGxhdGUsIGZtODAxKTsKCXBjbV9zZXRz
dGF0dXMoZGV2LCBzdGF0dXMpOwoKCWZtODAxX3NhdmUoZm04MDEpOwoJcmV0dXJuIDA7CgkKb29w
czoJCglwcmludGYoIkZvcnRlIE1lZGlhIEZNODAxIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7
CglpZiAoZm04MDEtPnJlZykgYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBmbTgwMS0+cmVndHlw
ZSwgZm04MDEtPnJlZ2lkLCBmbTgwMS0+cmVnKTsKCWlmIChmbTgwMS0+aWgpIGJ1c190ZWFyZG93
bl9pbnRyKGRldiwgZm04MDEtPmlycSwgZm04MDEtPmloKTsKCWlmIChmbTgwMS0+aXJxKSBidXNf
cmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCBmbTgwMS0+aXJxaWQsIGZtODAxLT5p
cnEpOwoJZnJlZShmbTgwMSwgTV9ERVZCVUYpOwoJcmV0dXJuIEVOWElPOwp9CgpzdGF0aWMgaW50
CmZtODAxX3BjaV9wcm9iZSggZGV2aWNlX3QgZGV2ICkKewoJaW50IGlkOwoJaWYgKChpZCA9IHBj
aV9nZXRfZGV2aWQoZGV2KSkgPT0gUENJX0RFVklDRV9GT1JURU1FRElBMSApIHsKCQlkZXZpY2Vf
c2V0X2Rlc2MoZGV2LCAiRm9ydGUgTWVkaWEgRk04MDEgQXVkaW8gQ29udHJvbGxlciIpOwoJCXJl
dHVybiAwOwoJfQovKgoJaWYgKChpZCA9IHBjaV9nZXRfZGV2aWQoZGV2KSkgPT0gUENJX0RFVklD
RV9GT1JURU1FRElBMiApIHsKCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRm9ydGUgTWVkaWEgRk04
MDEgSm95c3RpY2sgKE5vdCBTdXBwb3J0ZWQpIik7CgkJcmV0dXJuIEVOWElPOwoJfQoqLwoJcmV0
dXJuIEVOWElPOwp9CgoKCi8qIGNoYW5uZWwgaW50ZXJmYWNlICovCnN0YXRpYyB2b2lkICoKZm04
MDFjaF9pbml0KHZvaWQgKmRldmluZm8sIHNuZF9kYnVmICpiLCBwY21fY2hhbm5lbCAqYywgaW50
IGRpcikKewoJc3RydWN0IGZtODAxX2luZm8gKmZtODAxID0gKHN0cnVjdCBmbTgwMV9pbmZvICop
ZGV2aW5mbzsKCXN0cnVjdCBmbTgwMV9jaGluZm8gKmNoID0gKGRpciA9PSBQQ01ESVJfUExBWSk/
ICZmbTgwMS0+cGNoIDogJmZtODAxLT5yY2g7CgkKCURQUklOVCgiZm04MDFjaF9pbml0LCBkaXJl
Y3Rpb24gPSAlZFxuIiwgZGlyKTsKCWNoLT5wYXJlbnQgPSBmbTgwMTsKCWNoLT5jaGFubmVsID0g
YzsKCWNoLT5idWZmZXIgPSBiOwoJY2gtPmJ1ZmZlci0+YnVmc2l6ZSA9IEZNODAxX0JVRkZTSVpF
OwoJY2gtPmRpciA9IGRpcjsKCWlmKCBjaG5fYWxsb2NidWYoY2gtPmJ1ZmZlciwgZm04MDEtPnBh
cmVudF9kbWF0KSA9PSAtMSkgcmV0dXJuIE5VTEw7CglyZXR1cm4gKHZvaWQgKiljaDsKfQoKc3Rh
dGljIGludApmbTgwMWNoX3NldGRpcih2b2lkICpkYXRhLCBpbnQgZGlyKQp7CglzdHJ1Y3QgZm04
MDFfY2hpbmZvICpjaCA9IGRhdGE7CgljaC0+ZGlyID0gZGlyOwoJcmV0dXJuIDA7Cn0KCnN0YXRp
YyBpbnQKZm04MDFjaF9zZXRmb3JtYXQodm9pZCAqZGF0YSwgdV9pbnQzMl90IGZvcm1hdCkKewoJ
c3RydWN0IGZtODAxX2NoaW5mbyAqY2ggPSBkYXRhOwoJc3RydWN0IGZtODAxX2luZm8gKmZtODAx
ID0gY2gtPnBhcmVudDsKCQoJRFBSSU5UKCJmbTgwMWNoX3NldGZvcm1hdCAweCV4IDogJXMsICVz
LCAlcywgJXNcbiIsIGZvcm1hdCwKCQkoZm9ybWF0ICYgQUZNVF9TVEVSRU8pPyJzdGVyZW8iOiJt
b25vIiwKCQkoZm9ybWF0ICYgKEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUgfCBBRk1UX1UxNl9M
RSB8IEFGTVRfVTE2X0JFKSkgPyAiMTZiaXQiOiI4Yml0IiwKCQkoZm9ybWF0ICYgQUZNVF9TSUdO
RUQpPyAic2lnbmVkIjoidW5zaWduZWQiLAoJCShmb3JtYXQgJiBBRk1UX0JJR0VORElBTik/ImJp
Z2VuZGlhaCI6ImxpdHRsZWVuZGlhbiIgKTsKCQoJaWYoY2gtPmRpciA9PSBQQ01ESVJfUExBWSkg
ewoJCWZtODAxLT5wbGF5X2ZtdCA9ICAoZm9ybWF0ICYgQUZNVF9TVEVSRU8pPyBGTV9QTEFZX1NU
RVJFTyA6IDA7CgkJZm04MDEtPnBsYXlfZm10IHw9IChmb3JtYXQgJiBBRk1UXzE2QklUKSA/IEZN
X1BMQVlfMTZCSVQgOiAwOwoJCXJldHVybiAwOwoJfQoJCglpZihjaC0+ZGlyID09IFBDTURJUl9S
RUMgKSB7CgkJZm04MDEtPnJlY19mbXQgPSAoZm9ybWF0ICYgQUZNVF9TVEVSRU8pPyBGTV9SRUNf
U1RFUkVPOjA7CgkJZm04MDEtPnJlY19mbXQgfD0gKGZvcm1hdCAmIEFGTVRfMTZCSVQpID8gRk1f
UExBWV8xNkJJVCA6IDA7CgkJcmV0dXJuIDA7Cgl9CgkKCXJldHVybiAwOwp9CgpzdHJ1Y3QgewoJ
aW50IGxpbWl0OwoJaW50IHJhdGU7Cn0gZm04MDFfcmF0ZXNbMTFdID0gewoJeyAgNjYwMCwgIDU1
MDAgfSwgICAgICAgICAKCXsgIDg3NTAsICA4MDAwIH0sICAgICAgICAgCgl7IDEwMjUwLCAgOTYw
MCB9LCAgICAgICAgIAoJeyAxMzIwMCwgMTEwMjUgfSwgICAgICAgICAKCXsgMTc1MDAsIDE2MDAw
IH0sICAgICAgICAgCgl7IDIwNTAwLCAxOTIwMCB9LCAgICAgICAgIAoJeyAyNjUwMCwgMjIwNTAg
fSwgICAgICAgICAKCXsgMzUwMDAsIDMyMDAwIH0sICAgICAgICAgCgl7IDQxMDAwLCAzODQwMCB9
LCAgICAgICAgIAoJeyA0NjAwMCwgNDQxMDAgfSwgICAgICAgICAKCXsgNDgwMDAsIDQ4MDAwIH0s
ICAgICAgICAgCi8qIGFueXRoaW5nIGFib3ZlIC0+IDQ4MDAwICovCn07CgpzdGF0aWMgaW50CmZt
ODAxY2hfc2V0c3BlZWQodm9pZCAqZGF0YSwgdV9pbnQzMl90IHNwZWVkKQp7CglzdHJ1Y3QgZm04
MDFfY2hpbmZvICpjaCA9IGRhdGE7CglzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEgPSBjaC0+cGFy
ZW50OwoJcmVnaXN0ZXIgaW50IGk7CgkKCQoJZm9yIChpID0gMDsgaSA8IDEwICYmIGZtODAxX3Jh
dGVzW2ldLmxpbWl0IDw9IHNwZWVkOyBpKyspIDsKCQoJaWYoY2gtPmRpciA9PSBQQ01ESVJfUExB
WSkgewoJCWZtODAxLT5wY2guc3BkID0gZm04MDFfcmF0ZXNbaV0ucmF0ZTsKCQlmbTgwMS0+cGxh
eV9zaGlmdCA9IChpPDw4KTsKCQlmbTgwMS0+cGxheV9zaGlmdCAmPSBGTV9QTEFZX1JBVEVfTUFT
SzsKCX0KCQoJaWYoY2gtPmRpciA9PSBQQ01ESVJfUkVDICkgewoJCWZtODAxLT5yY2guc3BkID0g
Zm04MDFfcmF0ZXNbaV0ucmF0ZTsKCQlmbTgwMS0+cmVjX3NoaWZ0ID0gKGk8PDgpOwoJCWZtODAx
LT5yZWNfc2hpZnQgJj0gRk1fUkVDX1JBVEVfTUFTSzsKCX0KCQoJY2gtPnNwZCA9IGZtODAxX3Jh
dGVzW2ldLnJhdGU7CgkKCXJldHVybiBmbTgwMV9yYXRlc1tpXS5yYXRlOwp9CgpzdGF0aWMgaW50
CmZtODAxY2hfc2V0YmxvY2tzaXplKHZvaWQgKmRhdGEsIHVfaW50MzJfdCBibG9ja3NpemUpCnsK
CXN0cnVjdCBmbTgwMV9jaGluZm8gKmNoID0gZGF0YTsKCXN0cnVjdCBmbTgwMV9pbmZvICpmbTgw
MSA9IGNoLT5wYXJlbnQ7CgkKCWlmKGNoLT5kaXIgPT0gUENNRElSX1BMQVkpIHsKCQlpZihmbTgw
MS0+cGxheV9mbGlwKSByZXR1cm4gZm04MDEtPnBsYXlfYmxrc2l6ZTsKCQlmbTgwMS0+cGxheV9i
bGtzaXplID0gYmxvY2tzaXplOwoJfQoJCglpZihjaC0+ZGlyID09IFBDTURJUl9SRUMpIHsKCQlp
ZihmbTgwMS0+cmVjX2ZsaXApIHJldHVybiBmbTgwMS0+cmVjX2Jsa3NpemU7CgkJZm04MDEtPnJl
Y19ibGtzaXplID0gYmxvY2tzaXplOwoJfQoJCglEUFJJTlQoImZtODAxY2hfc2V0YmxvY2tzaXpl
ICVkIChkaXIgJWQpXG4iLGJsb2Nrc2l6ZSwgY2gtPmRpcik7CgoJcmV0dXJuIGJsb2Nrc2l6ZTsK
fQoKc3RhdGljIGludApmbTgwMWNoX3RyaWdnZXIodm9pZCAqZGF0YSwgaW50IGdvKQp7CglzdHJ1
Y3QgZm04MDFfY2hpbmZvICpjaCA9IGRhdGE7CglzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEgPSBj
aC0+cGFyZW50OwoJdV9pbnQzMl90IGJhc2VhZGRyID0gdnRvcGh5cyhjaC0+YnVmZmVyLT5idWYp
OwoJc25kX2RidWYgKmIgPSBjaC0+YnVmZmVyOwoJdV9pbnQzMl90IGsxOwoJCglEUFJJTlQoImZt
ODAxY2hfdHJpZ2dlciBnbyAlZCAsICIsIGdvKTsKCURQUklOVCgicnAgJWQsIHJsICVkLCBmcCAl
ZCBmbCAlZCwgZGwgJWQsIGJsa3NpemU9JWRcbiIsCgkJYi0+cnAsYi0+cmwsIGItPmZwLGItPmZs
LCBiLT5kbCwgYi0+Ymxrc3opOwoJCglpZiAoZ28gPT0gUENNVFJJR19FTUxETUFXUiB8fCBnbyA9
PSBQQ01UUklHX0VNTERNQVJEKSB7CgkJcmV0dXJuIDA7Cgl9CgkKCWlmIChjaC0+ZGlyID09IFBD
TURJUl9QTEFZKSB7CgkJaWYgKGdvID09IFBDTVRSSUdfU1RBUlQpIHsKCQkJCQoJCQlmbTgwMS0+
cGxheV9zdGFydCA9IGJhc2VhZGRyOwoJCQlmbTgwMS0+cGxheV9uZXh0YmxrID0gZm04MDEtPnBs
YXlfc3RhcnQgKyBmbTgwMS0+cGxheV9ibGtzaXplOwoJCQlmbTgwMS0+cGxheV9mbGlwID0gMDsK
CQkJZm04MDFfd3IoZm04MDEsIEZNX1BMQVlfRE1BTEVOLCBmbTgwMS0+cGxheV9ibGtzaXplIC0g
MSwgMik7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9QTEFZX0RNQUJVRjEsZm04MDEtPnBsYXlfc3Rh
cnQsNCk7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9QTEFZX0RNQUJVRjIsZm04MDEtPnBsYXlfbmV4
dGJsayw0KTsKCQkJZm04MDFfd3IoZm04MDEsIEZNX1BMQVlfQ1RMLAoJCQkJCUZNX1BMQVlfU1RB
UlQgfCBGTV9QTEFZX1NUT1BOT1cgfCBmbTgwMS0+cGxheV9mbXQgfCBmbTgwMS0+cGxheV9zaGlm
dCwgCgkJCQkJMiApOwoJCQl9IGVsc2UgewoJCQlmbTgwMS0+cGxheV9mbGlwID0gMDsKCQkJazEg
PSBmbTgwMV9yZChmbTgwMSwgRk1fUExBWV9DVEwsMik7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9Q
TEFZX0NUTCwKCQkJCShrMSAmIH4oRk1fUExBWV9TVE9QTk9XIHwgRk1fUExBWV9TVEFSVCkpIHwK
CQkJCUZNX1BMQVlfQlVGMV9MQVNUIHwgRk1fUExBWV9CVUYyX0xBU1QsIDIgKTsKCQl9Cgl9IGVs
c2UgaWYoY2gtPmRpciA9PSBQQ01ESVJfUkVDKSB7CgkJaWYgKGdvID09IFBDTVRSSUdfU1RBUlQp
IHsKCQkJZm04MDEtPnJlY19zdGFydCA9IGJhc2VhZGRyOwoJCQlmbTgwMS0+cmVjX25leHRibGsg
PSBmbTgwMS0+cmVjX3N0YXJ0ICsgZm04MDEtPnJlY19ibGtzaXplOwoJCQlmbTgwMS0+cmVjX2Zs
aXAgPSAwOwoJCQlmbTgwMV93cihmbTgwMSwgRk1fUkVDX0RNQUxFTiwgZm04MDEtPnJlY19ibGtz
aXplIC0gMSwgMik7CgkJCWZtODAxX3dyKGZtODAxLCBGTV9SRUNfRE1BQlVGMSxmbTgwMS0+cmVj
X3N0YXJ0LDQpOwoJCQlmbTgwMV93cihmbTgwMSwgRk1fUkVDX0RNQUJVRjIsZm04MDEtPnJlY19u
ZXh0YmxrLDQpOwoJCQlmbTgwMV93cihmbTgwMSwgRk1fUkVDX0NUTCwgCgkJCQkJRk1fUkVDX1NU
QVJUIHwgRk1fUkVDX1NUT1BOT1cgfCBmbTgwMS0+cmVjX2ZtdCB8IGZtODAxLT5yZWNfc2hpZnQs
IAoJCQkJCTIgKTsKCQkJfSBlbHNlIHsKCQkJZm04MDEtPnJlY19mbGlwID0gMDsKCQkJazEgPSBm
bTgwMV9yZChmbTgwMSwgRk1fUkVDX0NUTCwyKTsKCQkJZm04MDFfd3IoZm04MDEsIEZNX1JFQ19D
VEwsCgkJCQkoazEgJiB+KEZNX1JFQ19TVE9QTk9XIHwgRk1fUkVDX1NUQVJUKSkgfAoJCQkJRk1f
UkVDX0JVRjFfTEFTVCB8IEZNX1JFQ19CVUYyX0xBU1QsIDIpOwoJCX0KCX0KCQoJcmV0dXJuIDA7
Cn0KCi8qIEFsbW9zdCBBTFNBIGNvcHkgKi8Kc3RhdGljIGludApmbTgwMWNoX2dldHB0cih2b2lk
ICpkYXRhKQp7CglzdHJ1Y3QgZm04MDFfY2hpbmZvICpjaCA9IGRhdGE7CglzdHJ1Y3QgZm04MDFf
aW5mbyAqZm04MDEgPSBjaC0+cGFyZW50OwoJaW50IHJlc3VsdCA9IDA7CglzbmRfZGJ1ZiAqYiA9
IGNoLT5idWZmZXI7CgkKCWlmIChjaC0+ZGlyID09IFBDTURJUl9QTEFZKSB7CgkJcmVzdWx0ID0g
Zm04MDFfcmQoZm04MDEsIAoJCQkoZm04MDEtPnBsYXlfZmxpcCYxKSA/IAoJCQlGTV9QTEFZX0RN
QUJVRjI6Rk1fUExBWV9ETUFCVUYxLCA0KSAtIGZtODAxLT5wbGF5X3N0YXJ0OwoJfQoJCglpZiAo
Y2gtPmRpciA9PSBQQ01ESVJfUkVDKSB7CgkJcmVzdWx0ID0gZm04MDFfcmQoZm04MDEsCgkJCShm
bTgwMS0+cmVjX2ZsaXAmMSkgPwoJCQlGTV9SRUNfRE1BQlVGMjpGTV9SRUNfRE1BQlVGMSwgNCkg
LSBmbTgwMS0+cmVjX3N0YXJ0OwoJfSAKCQoJRFBSSU5UKCJmbTgwMWNoX2dldHB0cjolZCwgIHJw
ICVkLCBybCAlZCwgZnAgJWQgZmwgJWRcbiIsCgkgICAgICAgICAgICAgICAgcmVzdWx0LCBiLT5y
cCxiLT5ybCwgYi0+ZnAsYi0+ZmwpOyAgICAgICAgICAgICAgICAKCglyZXR1cm4gcmVzdWx0Owp9
CgpzdGF0aWMgcGNtY2hhbl9jYXBzICoKZm04MDFjaF9nZXRjYXBzKHZvaWQgKmRhdGEpCnsKCXJl
dHVybiAmZm04MDFjaF9jYXBzOwp9CgpzdGF0aWMgaW50CmZtODAxX3BjaV9kZXRhY2goZGV2aWNl
X3QgZGV2KQp7CglzdHJ1Y3QgZm04MDFfaW5mbyAqZm04MDEgPSBmbTgwMV9nZXQoKTsKCQoJRFBS
SU5UKCJGb3J0ZSBNZWRpYSBGTTgwMSBkZXRhY2hcbiIpOwoKCWlmIChmbTgwMS0+cmVnKSBidXNf
cmVsZWFzZV9yZXNvdXJjZShkZXYsIGZtODAxLT5yZWd0eXBlLCBmbTgwMS0+cmVnaWQsIGZtODAx
LT5yZWcpOwoJaWYgKGZtODAxLT5paCkgYnVzX3RlYXJkb3duX2ludHIoZGV2LCBmbTgwMS0+aXJx
LCBmbTgwMS0+aWgpOwoJaWYgKGZtODAxLT5pcnEpIGJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg
U1lTX1JFU19JUlEsIGZtODAxLT5pcnFpZCwgZm04MDEtPmlycSk7CglmcmVlKGZtODAxLCBNX0RF
VkJVRik7CglyZXR1cm4gMDsJCn0KCnN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZm04MDFfbWV0aG9k
c1tdID0gewoJLyogRGV2aWNlIGludGVyZmFjZSAqLwoJREVWTUVUSE9EKGRldmljZV9wcm9iZSwJ
CWZtODAxX3BjaV9wcm9iZSksCglERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJZm04MDFfcGNpX2F0
dGFjaCksCglERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZm04MDFfcGNpX2RldGFjaCksCgl7IDAs
IDB9Cn07CgpzdGF0aWMgZHJpdmVyX3QgZm04MDFfZHJpdmVyID0gewoJInBjbSIsCglmbTgwMV9t
ZXRob2RzLAoJc2l6ZW9mKHNuZGRldl9pbmZvKSwKfTsKCnN0YXRpYyBkZXZjbGFzc190IHBjbV9k
ZXZjbGFzczsKCkRSSVZFUl9NT0RVTEUoZm04MDEsIHBjaSwgZm04MDFfZHJpdmVyLCBwY21fZGV2
Y2xhc3MsMCwgMCk7Cg==

--_=XFMail.1.4.0.FreeBSD:000822224421:1773=_--
End of MIME message


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?XFMail.000822224421.diwil>