Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Apr 2009 10:53:26 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
To:        Iain Hibbert <plunky@rya-online.net>
Cc:        freebsd-bluetooth@freebsd.org
Subject:   Re: libhci update
Message-ID:  <bb4a86c70904201053y1a04d76el336432d3e1a23576@mail.gmail.com>
In-Reply-To: <E1Lv5La-00058x-HH@smtpbarns01>
References:  <E1Lv5La-00058x-HH@smtpbarns01>

next in thread | previous in thread | raw e-mail | index | archive | help
--0016361e891e0cf2e0046800354d
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

>> thanks for the feedback. i'm attaching revisited patch. please take a
>> look and let me know if this is something you happy with.
>
> (pls ignore typos & bad formatting, am on mobile device :)
>
> Bt_devrecv() should probably take void * for buffer?  Also manpage suggests it
> will only receive hci events. Do you think its worth doing some validation of received
> data? (eg return EIO for truncated reads?)

i will change uint8_t * to void *, no problem. i also updated man page
and removed 'event' word :)

> Bt_devinquiry() should probably  restore the filter after use? Also needs to ensure hci
> event packets are enabled?

its an implementation detail :) bt_devinqury() opens completely new
socket. in freebsd, filter is attached to the socket and is already
set to "sensible" defaults. so, all we need to do is to enable events
that we care about, i.e. inquiry result and inquiry complete. also
since bt_devinqury() is closing the socket after its done, there is no
need to restore original filter.

> Bt_devreq() needs to set/restore a filter too

well, maybe. bt_devreq() operates on already opened socket. the
assumption i'm making here is that application will set appropriate
filter before calling bt_devreq(). otherwise, application would have
to always set 'event' field to acceptable value (or zero). i could go
either way here. just need to document implemented behavior better.

> In bt_devreq structure event should be uint8_t? Also clen and rlen should be size_t

ok :) i was trying to get rid of hole with uint16_t event, but it does
not matter. also clen/rlen are size_t in bluetooth.h, its just i did
not update man page :)

> Do you think its worth to cook dev_class into a normalised host numeric value rather than 3 bytes ?

right, hmm, i guess we could turn dev_class into uint32_t in le16 byte
order (since everything else in bluetooth hci is in le16 order), but
maybe its too much? spec breaks out dev_class as 3 bytes array and
talks about bytes and bits within each byte. i'm kinda leaning towards
leaving it as is, because otherwise application would have to
translate byte/bit into uint32_t mask. it could be somewhat
convenient, i guess. again, no strong feeling about it. could go
either way.

> Probably need to specifically mention that the inquiry response to be released using free() in manpage?

it says so, i.e.

The
.Fa ii
parameter specifies where to place inquiry results.
On success, the function will return total number of inquiry results,
will allocate buffer to store all the inquiry results and
will return pointer to the allocated buffer in the
.Fa ii
parameter.
It is up to the caller of the function to dispose of the buffer.

> Something i thought about on the train yesterday but can't visualise on the small
> screen. For device inquiry did you consider using a callback method (as per devenum)
> in stead of returning the structure array? At least i recall my nokia would show the
> list building (but perhaps that was when it got the names) and this windows mobile
> device does show the raw list in progress (though stupidly just displays a list of
> 'unknown device' until it gets the names :)

yes, i thought about it. the only difference is that it would be not
so close to linux/bluez api. i guess, we could provide another
function?

i'm attaching revised diff for your review.

thanks,
max

--0016361e891e0cf2e0046800354d
Content-Type: text/plain; charset=US-ASCII; name="bluetooth.hci.diff.txt"
Content-Disposition: attachment; filename="bluetooth.hci.diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ftrgtjgb0

SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTEzMjgpCisrKyBo
Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDQ0NSBAQAogICogJEZyZWVCU0QkCiAg
Ki8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSA8dW5pc3RkLmg+CiAKK3N0YXRpYyBpbnQgICAgYnRfZGV2YW55X2NiKGludCBzLCBz
dHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQgKnhkZXZuYW1lKTsKIHN0YXRpYyBjaGFy
ICogYnRfZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQg
bm5sZW4pOwogCiBpbnQKK2J0X2Rldm9wZW4oY2hhciBjb25zdCAqZGV2bmFtZSkKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHJfaGNpCWhhOworCWJkYWRkcl90CQliYTsKKwlpbnQJCQlzOworCisJaWYgKGRl
dm5hbWUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQor
CisJbWVtc2V0KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJaGEuaGNpX2xlbiA9IHNpemVvZihoYSk7
CisJaGEuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKKworCWlmIChidF9hdG9uKGRldm5hbWUs
ICZiYSkpIHsKKwkJaWYgKCFidF9kZXZuYW1lKGhhLmhjaV9ub2RlLCAmYmEpKQorCQkJcmV0dXJu
ICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShkZXZuYW1lLCBoYS5oY2lfbm9kZSwKKwkJ
CQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgeworCQllcnJubyA9IEVOWElPOworCQly
ZXR1cm4gKC0xKTsKKwl9CisKKwlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJM
VUVUT09USF9QUk9UT19IQ0kpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAo
YmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgc2l6ZW9mKGhhKSkgPCAwIHx8CisJICAg
IGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCkgewor
CQljbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChzKTsKK30KKworaW50
CitidF9kZXZjbG9zZShpbnQgcykKK3sKKwlyZXR1cm4gKGNsb3NlKHMpKTsKK30KKworaW50Citi
dF9kZXZzZW5kKGludCBzLCB1aW50MTZfdCBvcGNvZGUsIHZvaWQgKnBhcmFtLCBzaXplX3QgcGxl
bikKK3sKKwluZ19oY2lfY21kX3BrdF90CWg7CisJc3RydWN0IGlvdmVjCQlpdlsyXTsKKwlpbnQJ
CQlpdm47CisKKwlpZiAocGxlbiA8IDAgfHwgKHBsZW4gPiAwICYmIHBhcmFtID09IE5VTEwpKSB7
IAorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaXZbMF0uaW92X2Jh
c2UgPSAmaDsKKwlpdlswXS5pb3ZfbGVuID0gc2l6ZW9mKGgpOworCWl2biA9IDE7CisKKwloLnR5
cGUgPSBOR19IQ0lfQ01EX1BLVDsKKwloLm9wY29kZSA9IGh0b2xlMTYob3Bjb2RlKTsKKwlpZiAo
cGxlbiA+IDApIHsKKwkJaC5sZW5ndGggPSBwbGVuOworCisJCWl2WzFdLmlvdl9iYXNlID0gcGFy
YW07CisJCWl2WzFdLmlvdl9sZW4gPSBwbGVuOworCQlpdm4gPSAyOworCX0gZWxzZQorCQloLmxl
bmd0aCA9IDA7CisKKwl3aGlsZSAod3JpdGV2KHMsIGl2LCBpdm4pIDwgMCkgeworCQlpZiAoZXJy
bm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisKKwkJcmV0dXJu
ICgtMSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworaW50CitidF9kZXZyZWN2KGludCBzLCB2
b2lkICpidWYsIHNpemVfdCBzaXplLCB0aW1lX3QgdG8pCit7CisJZmRfc2V0CQlyZmQ7CisJc3Ry
dWN0IHRpbWV2YWwJdHY7CisJaW50CQluOworCisJaWYgKGJ1ZiA9PSBOVUxMIHx8IHNpemUgPD0g
MCB8fCB0byA8IDApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKwor
CUZEX1pFUk8oJnJmZCk7CisJRkRfU0VUKHMsICZyZmQpOworCisJdHYudHZfc2VjID0gdG87CisJ
dHYudHZfdXNlYyA9IDA7CisKKwl3aGlsZSAoKG4gPSBzZWxlY3QocyArIDEsICZyZmQsIE5VTEws
IE5VTEwsICZ0dikpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJ
TlRSKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYgKG4gPT0gMCkg
eworCQllcnJubyA9IEVUSU1FRE9VVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJYXNzZXJ0KEZE
X0lTU0VUKHMsICZyZmQpKTsKKworCXdoaWxlICgobiA9IHJlYWQocywgYnVmLCBzaXplKSkgPCAw
KSB7CisJCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51
ZTsKKworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKG4pOworfQorCitpbnQKK2J0X2Rl
dnJlcShpbnQgcywgc3RydWN0IGJ0X2RldnJlcSAqciwgdGltZV90IHRvKQoreworCXVpbnQ4X3QJ
CQkJYnVmWzMyMF07IC8qIG1vcmUgdGhhbiBlbm91Z2ggKi8KKwluZ19oY2lfZXZlbnRfcGt0X3QJ
CSplID0gKG5nX2hjaV9ldmVudF9wa3RfdCAqKSBidWY7CisJbmdfaGNpX2NvbW1hbmRfY29tcGxf
ZXAJCSpjYyA9IChuZ19oY2lfY29tbWFuZF9jb21wbF9lcCAqKShlKzEpOworCW5nX2hjaV9jb21t
YW5kX3N0YXR1c19lcAkqY3MgPSAobmdfaGNpX2NvbW1hbmRfc3RhdHVzX2VwKikoZSsxKTsKKwl0
aW1lX3QJCQkJdF9lbmQ7CisJdWludDE2X3QJCQlvcGNvZGU7CisJaW50CQkJCW47CisKKwlpZiAo
cyA8IDAgfHwgciA9PSBOVUxMIHx8IHRvIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0
dXJuICgtMSk7CisJfQorCisJaWYgKHItPnJsZW4gPCAwIHx8IChyLT5ybGVuID4gMCAmJiByLT5y
cGFyYW0gPT0gTlVMTCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0K
KworCW4gPSBidF9kZXZzZW5kKHMsIHItPm9wY29kZSwgci0+Y3BhcmFtLCByLT5jbGVuKTsKKwlp
ZiAobiA8IDApCisJCXJldHVybiAoLTEpOworCisJb3Bjb2RlID0gaHRvbGUxNihyLT5vcGNvZGUp
OworCXRfZW5kID0gdGltZShOVUxMKSArIHRvOworCisJZG8geworCQl0byA9IHRfZW5kIC0gdGlt
ZShOVUxMKTsKKwkJaWYgKHRvIDwgMCkKKwkJCXRvID0gMDsKKworCQluID0gYnRfZGV2cmVjdihz
LCBidWYsIHNpemVvZihidWYpLCB0byk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiAoLTEpOwor
CisJCWlmIChuIDwgc2l6ZW9mKCplKSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVy
biAoLTEpOworCQl9CisKKwkJaWYgKGUtPnR5cGUgIT0gTkdfSENJX0VWRU5UX1BLVCkgeworCQkJ
ZXJybm8gPSBFSU87CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCisJCW4gLT0gc2l6ZW9mKCplKTsK
KworCQlzd2l0Y2ggKGUtPmV2ZW50KSB7CisJCWNhc2UgTkdfSENJX0VWRU5UX0NPTU1BTkRfQ09N
UEw6CisJCQlpZiAoY2MtPm9wY29kZSA9PSBvcGNvZGUpIHsKKwkJCQluIC09IHNpemVvZigqY2Mp
OworCisJCQkJaWYgKHItPnJsZW4gPj0gbikgeworCQkJCQlyLT5ybGVuID0gbjsKKwkJCQkJbWVt
Y3B5KHItPnJwYXJhbSwgY2MgKyAxLCByLT5ybGVuKTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gKDAp
OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBOR19IQ0lfRVZFTlRfQ09NTUFORF9TVEFUVVM6
CisJCQlpZiAoY3MtPm9wY29kZSA9PSBvcGNvZGUpIHsKKwkJCQlpZiAoci0+ZXZlbnQgIT0gTkdf
SENJX0VWRU5UX0NPTU1BTkRfU1RBVFVTKSB7CisJCQkJCWlmIChjcy0+c3RhdHVzICE9IDApIHsK
KwkJCQkJCWVycm5vID0gRUlPOworCQkJCQkJcmV0dXJuICgtMSk7CisJCQkJCX0KKwkJCQl9IGVs
c2UgeworCQkJCQlpZiAoci0+cmxlbiA+PSBuKSB7CisJCQkJCQlyLT5ybGVuID0gbjsKKwkJCQkJ
CW1lbWNweShyLT5ycGFyYW0sIGNzLCByLT5ybGVuKTsKKwkJCQkJfQorCisJCQkJCXJldHVybiAo
MCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWlmIChlLT5ldmVu
dCA9PSByLT5ldmVudCkgeworCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9
IG47CisJCQkJCW1lbWNweShyLT5ycGFyYW0sIGUgKyAxLCByLT5ybGVuKTsKKwkJCQl9CisKKwkJ
CQlyZXR1cm4gKDApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICh0byA+IDApOwor
CisJZXJybm8gPSBFVElNRURPVVQ7CisKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitidF9kZXZm
aWx0ZXIoaW50IHMsIHN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKm5ldywgc3RydWN0IGJ0X2Rl
dmZpbHRlciAqb2xkKQoreworCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X2ZpbHRlcglmOwor
CXNvY2tsZW5fdAkJCQlsZW47CisKKwlpZiAobmV3ID09IE5VTEwgJiYgb2xkID09IE5VTEwpIHsK
KwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChvbGQgIT0gTlVM
TCkgeworCQlsZW4gPSBzaXplb2YoZik7CisJCWlmIChnZXRzb2Nrb3B0KHMsIFNPTF9IQ0lfUkFX
LCBTT19IQ0lfUkFXX0ZJTFRFUiwgJmYsICZsZW4pIDwgMCkKKwkJCXJldHVybiAoLTEpOworCisJ
CW1lbXNldChvbGQsIDAsIHNpemVvZigqb2xkKSk7CisJCW1lbWNweShvbGQtPnBhY2tldF9tYXNr
LCAmZi5wYWNrZXRfbWFzaywKKwkJCXNpemVvZihvbGQtPnBhY2tldF9tYXNrKSk7CisJCW1lbWNw
eShvbGQtPmV2ZW50X21hc2ssICZmLmV2ZW50X21hc2ssCisJCQlzaXplb2Yob2xkLT5ldmVudF9t
YXNrKSk7CisJfQorCisJaWYgKG5ldyAhPSBOVUxMKSB7CisJCW1lbXNldCgmZiwgMCwgc2l6ZW9m
KGYpKTsKKwkJbWVtY3B5KCZmLnBhY2tldF9tYXNrLCBuZXctPnBhY2tldF9tYXNrLCBzaXplb2Yo
Zi5wYWNrZXRfbWFzaykpOworCQltZW1jcHkoJmYuZXZlbnRfbWFzaywgbmV3LT5ldmVudF9tYXNr
LCBzaXplb2YoZi5ldmVudF9tYXNrKSk7CisKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlpZiAoc2V0
c29ja29wdChzLCBTT0xfSENJX1JBVywgU09fSENJX1JBV19GSUxURVIsICZmLCBsZW4pIDwgMCkK
KwkJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK2J0X2RldmZp
bHRlcl9wa3Rfc2V0KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgaW50IHR5cGUpCit7CisJ
Yml0X3NldChmaWx0ZXItPnBhY2tldF9tYXNrLCB0eXBlIC0gMSk7Cit9CisKK3ZvaWQKK2J0X2Rl
dmZpbHRlcl9wa3RfY2xyKHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgaW50IHR5cGUpCit7
CisJYml0X2NsZWFyKGZpbHRlci0+cGFja2V0X21hc2ssIHR5cGUgLSAxKTsKK30KKworaW50Citi
dF9kZXZmaWx0ZXJfcGt0X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpmaWx0ZXIsIGlu
dCB0eXBlKQoreworCXJldHVybiAoYml0X3Rlc3QoZmlsdGVyLT5wYWNrZXRfbWFzaywgdHlwZSAt
IDEpKTsKK30KKwordm9pZAorYnRfZGV2ZmlsdGVyX2V2dF9zZXQoc3RydWN0IGJ0X2RldmZpbHRl
ciAqZmlsdGVyLCBpbnQgZXZlbnQpCit7CisJYml0X3NldChmaWx0ZXItPmV2ZW50X21hc2ssIGV2
ZW50IC0gMSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9ldnRfY2xyKHN0cnVjdCBidF9kZXZm
aWx0ZXIgKmZpbHRlciwgaW50IGV2ZW50KQoreworCWJpdF9jbGVhcihmaWx0ZXItPmV2ZW50X21h
c2ssIGV2ZW50IC0gMSk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVyX2V2dF90c3Qoc3RydWN0IGJ0
X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCBpbnQgZXZlbnQpCit7CisJcmV0dXJuIChiaXRfdGVz
dChmaWx0ZXItPmV2ZW50X21hc2ssIGV2ZW50IC0gMSkpOworfQorCitpbnQKK2J0X2RldmlucXVp
cnkoY2hhciBjb25zdCAqZGV2bmFtZSwgdGltZV90IGxlbmd0aCwgaW50IG51bV9yc3AsCisJCXN0
cnVjdCBidF9kZXZpbnF1aXJ5ICoqaWkpCit7CisJdWludDhfdAkJCQlidWZbMzIwXTsKKwljaGFy
CQkJCV9kZXZuYW1lW0hDSV9ERVZOQU1FX1NJWkVdOworCXN0cnVjdCBidF9kZXZmaWx0ZXIJCWY7
CisJbmdfaGNpX2lucXVpcnlfY3AJCSpjcCA9IChuZ19oY2lfaW5xdWlyeV9jcCAqKSBidWY7CisJ
bmdfaGNpX2V2ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZlbnRfcGt0X3QgKikgYnVmOworCW5n
X2hjaV9pbnF1aXJ5X3Jlc3VsdF9lcAkqZXAgPSAobmdfaGNpX2lucXVpcnlfcmVzdWx0X2VwICop
KGUrMSk7CisJbmdfaGNpX2lucXVpcnlfcmVzcG9uc2UJCSppcjsKKwlzdHJ1Y3QgYnRfZGV2aW5x
dWlyeQkJKmk7CisJaW50CQkJCXMsIG47CisJdGltZV90CQkJCXRvOworCisJaWYgKGlpID09IE5V
TEwpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChkZXZu
YW1lID09IE5VTEwpIHsKKwkJbWVtc2V0KF9kZXZuYW1lLCAwLCBzaXplb2YoX2Rldm5hbWUpKTsK
KwkJZGV2bmFtZSA9IF9kZXZuYW1lOworCisJCW4gPSBidF9kZXZlbnVtKGJ0X2RldmFueV9jYiwg
X2Rldm5hbWUpOworCQlpZiAobiA8PSAwKSB7CisJCQlpZiAobiA9PSAwKQorCQkJCSppaSA9IE5V
TEw7CisKKwkJCXJldHVybiAobik7CisJCX0KKwl9CisKKwlzID0gYnRfZGV2b3BlbihkZXZuYW1l
KTsKKwlpZiAocyA8IDApCisJCXJldHVybiAoLTEpOworCisJaWYgKGJ0X2RldmZpbHRlcihzLCBO
VUxMLCAmZikgPCAwKSB7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0xKTsKKwl9CisK
KwlidF9kZXZmaWx0ZXJfZXZ0X3NldCgmZiwgTkdfSENJX0VWRU5UX0lOUVVJUllfQ09NUEwpOwor
CWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZmLCBOR19IQ0lfRVZFTlRfSU5RVUlSWV9SRVNVTFQpOwor
CisJaWYgKGJ0X2RldmZpbHRlcihzLCAmZiwgTlVMTCkgPCAwKSB7CisJCWJ0X2RldmNsb3NlKHMp
OworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKiBBbHdheXMgdXNlIEdJQUMgTEFQICovCisJY3At
PmxhcFswXSA9IDB4MzM7CisJY3AtPmxhcFsxXSA9IDB4OGI7CisJY3AtPmxhcFsyXSA9IDB4OWU7
CisKKwkvKiBDYWxjdWxhdGUgaW5xdWlyZSBsZW5ndGggaW4gMS4yOCBzZWNvbmQgdW5pdHMgKi8K
Kwl0byA9ICh0aW1lX3QpICgoZG91YmxlKSBsZW5ndGggLyAxLjI4KTsKKwlpZiAodG8gPD0gMCkK
KwkJY3AtPmlucXVpcnlfbGVuZ3RoID0gNDsJCS8qIDUuMTIgc2Vjb25kcyAqLworCWVsc2UgaWYg
KHRvID4gMjU0KQorCQljcC0+aW5xdWlyeV9sZW5ndGggPSAyNTU7CS8qIDMyNi40MCBzZWNvbmRz
ICovCisJZWxzZQorCQljcC0+aW5xdWlyeV9sZW5ndGggPSB0byArIDE7CisKKwl0byA9ICh0aW1l
X3QpKChkb3VibGUpIGNwLT5pbnF1aXJ5X2xlbmd0aCAqIDEuMjgpICsgMTsKKworCWlmIChudW1f
cnNwIDw9IDAgfHwgbnVtX3JzcCA+IDI1NSkKKwkJbnVtX3JzcCA9IDg7CisJY3AtPm51bV9yZXNw
b25zZXMgPSAodWludDhfdCkgbnVtX3JzcDsKKworCWkgPSAqaWkgPSBjYWxsb2MobnVtX3JzcCwg
c2l6ZW9mKHN0cnVjdCBidF9kZXZpbnF1aXJ5KSk7CisJaWYgKGkgPT0gTlVMTCkgeworCQlidF9k
ZXZjbG9zZShzKTsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKworCWlm
IChidF9kZXZzZW5kKHMsCisJCU5HX0hDSV9PUENPREUoTkdfSENJX09HRl9MSU5LX0NPTlRST0ws
IE5HX0hDSV9PQ0ZfSU5RVUlSWSksCisJCQljcCwgc2l6ZW9mKCpjcCkpIDwgMCkgeworCQlmcmVl
KGkpOworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCit3YWl0X2Zvcl9t
b3JlOgorCisJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBzaXplb2YoYnVmKSwgdG8pOworCWlmIChu
IDwgMCkgeworCQlmcmVlKGkpOworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJ
fQorCisJaWYgKG4gPCBzaXplb2YobmdfaGNpX2V2ZW50X3BrdF90KSkgeworCQlmcmVlKGkpOwor
CQlidF9kZXZjbG9zZShzKTsKKwkJZXJybm8gPSBFSU87CisJCXJldHVybiAoLTEpOworCX0KKwor
CXN3aXRjaCAoZS0+ZXZlbnQpIHsKKwljYXNlIE5HX0hDSV9FVkVOVF9JTlFVSVJZX0NPTVBMOgor
CQlicmVhazsKKworCWNhc2UgTkdfSENJX0VWRU5UX0lOUVVJUllfUkVTVUxUOgorCQlpciA9IChu
Z19oY2lfaW5xdWlyeV9yZXNwb25zZSAqKShlcCArIDEpOworCisjdW5kZWYJTUlOCisjZGVmaW5l
CU1JTihhLCBiKQkoKChhKSA8IChiKSk/IChhKSA6IChiKSkKKworCQlmb3IgKG4gPSAwOyBuIDwg
TUlOKGVwLT5udW1fcmVzcG9uc2VzLCBudW1fcnNwKTsgbiArKykgeworCQkJYmRhZGRyX2NvcHko
JmktPmJkYWRkciwgJmlyLT5iZGFkZHIpOworCQkJaS0+cHNjYW5fcmVwX21vZGUgPSBpci0+cGFn
ZV9zY2FuX3JlcF9tb2RlOworCQkJaS0+cHNjYW5fcGVyaW9kX21vZGUgPSBpci0+cGFnZV9zY2Fu
X3BlcmlvZF9tb2RlOworCQkJbWVtY3B5KGktPmRldl9jbGFzcywgaXItPnVjbGFzcywgc2l6ZW9m
KGktPmRldl9jbGFzcykpOworCQkJaS0+Y2xvY2tfb2Zmc2V0ID0gbGUxNnRvaChpci0+Y2xvY2tf
b2Zmc2V0KTsKKworCQkJaXIgKys7CisJCQlpICsrOworCQkJbnVtX3JzcCAtLTsKKwkJfQorCQkv
KiBGQUxMVEhST1VHSCAqLworCisJZGVmYXVsdDoKKwkJZ290byB3YWl0X2Zvcl9tb3JlOworCQkv
KiBOT1QgUkVBQ0hFRCAqLworCX0KKworCWJ0X2RldmNsb3NlKHMpOworCQkKKwlyZXR1cm4gKGkg
LSAqaWkpOworfQorCitpbnQKIGJ0X2RldmluZm8oc3RydWN0IGJ0X2RldmluZm8gKmRpKQogewog
CXVuaW9uIHsKQEAgLTUzLDYgKzQ4Myw3IEBACiAJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3
X25vZGVfZGVidWcJCXI4OwogCX0JCQkJCQlycDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaGNpCQkJCWhh
OworCXNvY2tsZW5fdAkJCQkJaGFsZW47CiAJaW50CQkJCQkJcywgcnZhbDsKIAogCWlmIChkaSA9
PSBOVUxMKSB7CkBAIC02MCwyNyArNDkxLDE0IEBACiAJCXJldHVybiAoLTEpOwogCX0KIAotCW1l
bXNldCgmaGEsIDAsIHNpemVvZihoYSkpOwotCWhhLmhjaV9sZW4gPSBzaXplb2YoaGEpOwotCWhh
LmhjaV9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7Ci0KLQlpZiAoYnRfYXRvbihkaS0+ZGV2bmFtZSwg
JnJwLnIxLmJkYWRkcikpIHsKLQkJaWYgKCFidF9kZXZuYW1lKGhhLmhjaV9ub2RlLCAmcnAucjEu
YmRhZGRyKSkKLQkJCXJldHVybiAoLTEpOwotCX0gZWxzZSBpZiAoYnRfZGV2Mm5vZGUoZGktPmRl
dm5hbWUsIGhhLmhjaV9ub2RlLAotCQkJCQlzaXplb2YoaGEuaGNpX25vZGUpKSA9PSBOVUxMKSB7
Ci0JCWVycm5vID0gRU5YSU87Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXMgPSBzb2NrZXQoUEZf
QkxVRVRPT1RILCBTT0NLX1JBVywgQkxVRVRPT1RIX1BST1RPX0hDSSk7CisJcyA9IGJ0X2Rldm9w
ZW4oZGktPmRldm5hbWUpOwogCWlmIChzIDwgMCkKIAkJcmV0dXJuICgtMSk7CiAKIAlydmFsID0g
LTE7CiAKLQlpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgc2l6ZW9mKGhhKSkg
PCAwIHx8Ci0JICAgIGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZiho
YSkpIDwgMCkKKwloYWxlbiA9IHNpemVvZihoYSk7CisJaWYgKGdldHNvY2tuYW1lKHMsIChzdHJ1
Y3Qgc29ja2FkZHIgKikgJmhhLCAmaGFsZW4pIDwgMCkKIAkJZ290byBiYWQ7CiAJc3RybGNweShk
aS0+ZGV2bmFtZSwgaGEuaGNpX25vZGUsIHNpemVvZihkaS0+ZGV2bmFtZSkpOwogCkBAIC0xMzgs
NyArNTU2LDcgQEAKIAogCXJ2YWwgPSAwOwogYmFkOgotCWNsb3NlKHMpOworCWJ0X2RldmNsb3Nl
KHMpOwogCiAJcmV0dXJuIChydmFsKTsKIH0KQEAgLTIwNSw2ICs2MjMsMTMgQEAKIAlyZXR1cm4g
KGNvdW50KTsKIH0KIAorc3RhdGljIGludAorYnRfZGV2YW55X2NiKGludCBzLCBzdHJ1Y3QgYnRf
ZGV2aW5mbyBjb25zdCAqZGksIHZvaWQgKnhkZXZuYW1lKQoreworCXN0cmxjcHkoKGNoYXIgKikg
eGRldm5hbWUsIGRpLT5kZXZuYW1lLCBIQ0lfREVWTkFNRV9TSVpFKTsKKwlyZXR1cm4gKDEpOwor
fQorCiBzdGF0aWMgY2hhciAqCiBidF9kZXYybm9kZShjaGFyIGNvbnN0ICpkZXZuYW1lLCBjaGFy
ICpub2RlbmFtZSwgaW50IG5ubGVuKQogewpJbmRleDogYmx1ZXRvb3RoLjMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmx1ZXRvb3RoLjMJKHJldmlzaW9uIDE5MTMyOCkKKysrIGJsdWV0b290aC4zCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAuXCIgJElkOiBibHVldG9vdGguMyx2IDEuNSAyMDAz
LzA1LzIwIDIzOjA0OjMwIG1heCBFeHAgJAogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgRmVicnVh
cnkgMTMsIDIwMDkKKy5EZCBBcHJpbCA5LCAyMDA5CiAuRHQgQkxVRVRPT1RIIDMKIC5PcwogLlNo
IE5BTUUKQEAgLTQxLDYgKzQxLDIzIEBACiAuTm0gYnRfZW5kcHJvdG9lbnQgLAogLk5tIGJ0X2F0
b24gLAogLk5tIGJ0X250b2EgLAorLk5tIGJ0X2RldmFkZHIgLAorLk5tIGJ0X2Rldm5hbWUgLAor
Lk5tIGJ0X2RldmluZm8gLAorLk5tIGJ0X2RldmVudW0gLAorLk5tIGJ0X2Rldm9wZW4gLAorLk5t
IGJ0X2RldmNsb3NlICwKKy5ObSBidF9kZXZzZW5kICwKKy5ObSBidF9kZXZyZWN2ICwKKy5ObSBi
dF9kZXZyZXEgLAorLk5tIGJ0X2RldmZpbHRlciAsCisuTm0gYnRfZGV2ZmlsdGVyX3BrdF9zZXQg
LAorLk5tIGJ0X2RldmZpbHRlcl9wa3RfY2xyICwKKy5ObSBidF9kZXZmaWx0ZXJfcGt0X3RzdCAs
CisuTm0gYnRfZGV2ZmlsdGVyX2V2dF9zZXQgLAorLk5tIGJ0X2RldmZpbHRlcl9ldnRfY2xyICwK
Ky5ObSBidF9kZXZmaWx0ZXJfZXZ0X3RzdCAsCisuTm0gYnRfZGV2aW5xdWlyeSAsCiAuTm0gYmRh
ZGRyX3NhbWUgLAogLk5tIGJkYWRkcl9hbnkgLAogLk5tIGJkYWRkcl9jb3B5CkBAIC04NCw2ICsx
MDEsMzIgQEAKIC5GdCBpbnQKIC5GbiBidF9kZXZlbnVtICJidF9kZXZlbnVtX2NiX3QgKmNiIiAi
dm9pZCAqYXJnIgogLkZ0IGludAorLkZuIGJ0X2Rldm9wZW4gImNoYXIgY29uc3QgKmRldm5hbWUi
CisuRnQgaW50CisuRm4gYnRfZGV2Y2xvc2UgImludCBzIgorLkZ0IGludAorLkZuIGJ0X2RldnNl
bmQgImludCBzIiAidWludDE2X3Qgb3Bjb2RlIiAidm9pZCAqcGFyYW0iICJzaXplX3QgcGxlbiIK
Ky5GdCBpbnQKKy5GbiBidF9kZXZyZWN2ICJpbnQgcyIgInZvaWQgKmJ1ZiIgInNpemVfdCBzaXpl
IiAidGltZV90IHRvIgorLkZ0IGludAorLkZuIGJ0X2RldnJlcSAiaW50IHMiICJzdHJ1Y3QgYnRf
ZGV2cmVxICpyIiAidGltZV90IHRvIgorLkZ0IGludAorLkZuIGJ0X2RldmZpbHRlciAiaW50IHMi
ICJzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXciICJzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpv
bGQiCisuRnQgdm9pZAorLkZuIGJ0X2RldmZpbHRlcl9wa3Rfc2V0ICJzdHJ1Y3QgYnRfZGV2Zmls
dGVyICpmaWx0ZXIiICJpbnQgdHlwZSIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9j
bHQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgImludCB0eXBlIgorLkZ0IGludAorLkZu
IGJ0X2RldmZpbHRlcl9wa3RfdHN0ICJzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpmaWx0ZXIi
ICJpbnQgdHlwZSIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9zZXQgInN0cnVjdCBi
dF9kZXZmaWx0ZXIgKmZpbHRlciIgImludCBldmVudCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2Zmls
dGVyX2V2dF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgImludCBldmVudCIKKy5G
dCBpbnQKKy5GbiBidF9kZXZmaWx0ZXJfZXZ0X3RzdCAic3RydWN0IGJ0X2RldmZpbHRlciBjb25z
dCAqZmlsdGVyIiAiaW50IGV2ZW50IgorLkZ0IGludAorLkZuIGJ0X2RldmlucXVpcnkgImNoYXIg
Y29uc3QgKmRldm5hbWUiICJ0aW1lX3QgbGVuZ3RoIiAiaW50IG51bV9yc3AiICJzdHJ1Y3QgYnRf
ZGV2aW5xdWlyeSAqKmlpIgorLkZ0IGludAogLkZuIGJkYWRkcl9zYW1lICJjb25zdCBiZGFkZHJf
dCAqYSIgImNvbnN0IGJkYWRkcl90ICpiIgogLkZ0IGludAogLkZuIGJkYWRkcl9hbnkgImNvbnN0
IGJkYWRkcl90ICphIgpAQCAtMzExLDYgKzM1NCwyMjkgQEAKIG9yIC0xIGlmIGFuIGVycm9yIG9j
Y3VycmVkLgogLlBwCiBUaGUKKy5GbiBidF9kZXZvcGVuCitmdW5jdGlvbiBvcGVucyBCbHVldG9v
dGggZGV2aWNlIHdpdGggdGhlIGdpdmVuCisuRmEgZGV2bmFtZQorYW5kIHJldHVybnMgY29ubmVj
dGVkIGFuZCBib3VuZAorLkR2IEhDSQorc29ja2V0LgorVGhlIGZ1bmN0aW9uIHJldHVybnMgLTEg
aWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBidF9kZXZjbG9zZQorY2xv
c2VzIHBhc3NlZAorLkR2IEhDSQorc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVk
IHdpdGgKKy5YciBidF9kZXZvcGVuIDMgLgorLlBwCitUaGUKKy5GbiBidF9kZXZzZW5kCitmdW5j
dGlvbiBzZW5kcyBCbHVldG9vdGgKKy5EdiBIQ0kKK2NvbW1hbmQgd2l0aCB0aGUgZ2l2ZW4KKy5G
YSBvcGNvZGUKK3RvIHRoZSBwcm92aWRlZCBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0
YWluZWQgd2l0aAorLlhyIGJ0X2Rldm9wZW4gMyAuCitUaGUKKy5GYSBvcGNvZGUKK3BhcmFtZXRl
ciBpcyBleHBwZWN0ZWQgdG8gYmUgaW4gdGhlIGhvc3QgYnl0ZSBvcmRlci4KK1RoZQorLkZhIHBh
cmFtCithbmQKKy5GYSBwbGVuCitwYXJhbWV0ZXJzIHNwZWNpZnkgY29tbWFuZCBwYXJhbWV0ZXJz
LgorVGhlCisuRm4gYnRfZGV2c2VuZAorZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5CisuRHYgSENJ
CitmaWx0ZXIgb24gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLgorVGhlIGZ1bmN0aW9uIHJl
dHVybnMgMCBvbiBzdWNjZXNzLAorb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAKK1Ro
ZQorLkZuIGJ0X2RldnJlY3YKK2Z1bmN0aW9uIHJlY2VpdmVzIG9uZSBCbHVldG9vdGgKKy5EdiBI
Q0kKK3BhY2tldCBmcm9tIHRoZSBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQg
d2l0aAorLlhyIGJ0X2Rldm9wZW4gMyAuCitUaGUgcGFja2V0IGlzIHBsYWNlZCBpbnRvIHRoZSBw
cm92aWRlZCBidWZmZXIKKy5GYSBidWYKK29mIHNpemUKKy5GYSBzaXplIC4KK1RoZQorLkZhIHRv
CitwYXJhbWV0ZXIgc3BlY2lmaWVzIHJlY2VpdmUgdGltZW91dCBpbiBzZWNvbmRzLgorVGhlCisu
Rm4gYnRfZGV2cmVjdgorZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5CisuRHYgSENJCitmaWx0ZXIg
b24gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgdG90
YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2V2aWVkLAorb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQu
CisuUHAKK1RoZQorLkZuIGJ0X2RldnJlcQorZnVuY3Rpb24gbWFrZXMgQmx1ZXRvb3RoCisuRHYg
SENJCityZXF1ZXN0IHRvIHRoZSBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQg
d2l0aAorLlhyIGJ0X2Rldm9wZW4gMyAuCitUaGUgZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBzcGVj
aWZpZWQgY29tbWFuZCBhbmQgd2lsbCB3YWl0IGZvciB0aGUgc3BlY2lmaWVkCitldmVudCwKK29y
IHRpbWVvdXQKKy5GYSB0bworc2Vjb25kcyB0byBvY2N1ci4KK1RoZQorLlZ0IGJ0X2RldnJlcQor
c3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93cworLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5k
ZW50CitzdHJ1Y3QgYnRfZGV2cmVxCit7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBvcGNvZGU7
CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBldmVudDsKKyAgICAgICAgdm9pZCAgICAgICAgICAg
ICpjcGFyYW07CisgICAgICAgIHNpemVfdCAgICAgICAgICBjbGVuOworICAgICAgICB2b2lkICAg
ICAgICAgICAgKnJwYXJhbTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIHJsZW47Cit9OworLkVk
CisuUHAKK1RoZQorLkZhIG9wY29kZQorZmllbGQgc3BlY2lmaWVzIHRoZSBjb21tYW5kIGFuZCBp
cyBleHBlY3RlZCB0byBiZSBpbiB0aGUgaG9zdCBieXRlIG9yZGVyLgorVGhlCisuRmEgY3BhcmFt
CithbmQKKy5GYSBjbGVuCitmaWVsZHMgc3BlY2lmeSBjb21tYW5kIHBhcmFtZXRlcnMgZGF0YSBh
bmQgY29tbWFuZCBwYXJhbWV0ZXJzIGRhdGEgc2l6ZQorcmVzcGVjdGl2ZWx5LgorVGhlCisuRmEg
ZXZlbnQKK2ZpZWxkIHNwZWNpZmllcyB3aGljaCBCbHVldG9vdGgKKy5EdiBIQ0kKK2V2ZW50IElE
IHRoZSBmdW5jdGlvbiBzaG91bGQgd2FpdCBmb3IuCitUaGUKKy5GYSBycGFyYW0KK2FuZAorLkZh
IHJsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBidWZmZXIgYW5kIGJ1ZmZlciBzaXplIHJlc3BlY3Rp
dmVseSB3aGVyZSByZXR1cm4KK3BhcmFtZXRlcnMgc2hvdWxkIGJlIHBsYWNlZC4KK1RoZQorLkZu
IGJ0X2RldnJlcQorZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGZpbHRlciBvbiB0aGUgcHJvdmlk
ZWQKKy5EdiBIQ0kKK3NvY2tldAorLkZhIHMgLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBz
dWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAorVGhlCisuRm4gYnRfZGV2
ZmlsdGVyCitjb250cm9scyB0aGUgbG9jYWwKKy5EdiBIQ0kKK2ZpbHRlciBhc3NvY2lhdGVkIHdp
dGggdGhlIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoCisuWHIgYnRf
ZGV2b3BlbiAzIC4KK0ZpbHRlcmluZyBjYW4gYmUgZG9uZSBvbiBwYWNrZXQgdHlwZXMsIGkuZS4K
Ky5EdiBBQ0wgLAorLkR2IFNDTyBvcgorLkR2IEhDSQorZXZlbnQgcGFja2V0cywgYW5kLCBpbiBh
ZGRpdGlvbiwgb24KKy5EdiBIQ0kKK2V2ZW50IElEcy4KK0JlZm9yZSBhcHBseWluZworLkZhIG5l
dworZmlsdGVyIChpZiBwcm92aWRlZCkgdGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIG9idGFpbiBj
dXJyZW50IGZpbHRlcgorZnJvbSB0aGUgc29ja2V0CisuRmEgcworYW5kIHBsYWNlIGl0IGludG8g
dGhlCisuRmEgb2xkCitwYXJhbWV0ZXIgKGlmIHByb3ZpZGVkKS4KK1RoZSBmdW5jdGlvbiByZXR1
cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAKK1RoZQor
LkZuIGJ0X2RldmZpbHRlcl9wa3Rfc2V0ICwKKy5GbiBidF9kZXZmaWx0ZXJfcGt0X2NsciAKK2Fu
ZAorLkZuIGJ0X2RldmZpbHRlcl9wa3RfdHN0CitmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW9k
aWZ5IGFuZCB0ZXN0CisuRHYgSENJCitmaWx0ZXIKKy5GYSBmaWx0ZXIgLgorVGhlCisuRmEgdHlw
ZQorcGFyYW1ldGVyIHNwZWNpZmllcworLkR2IEhDSQorcGFja2V0IHR5cGUuCisuUHAKK1RoZQor
LkZuIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5GbiBidF9kZXZmaWx0ZXJfZXZ0X2NsciAKK2Fu
ZAorLkZuIGJ0X2RldmZpbHRlcl9ldnRfdHN0CitmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW9k
aWZ5IGFuZCB0ZXN0CisuRHYgSENJCitldmVudCBmaWx0ZXIKKy5GYSBmaWx0ZXIgLgorVGhlCisu
RmEgZXZlbnQKK3BhcmFtZXRlciBzcGVjaWZpZXMKKy5EdiBIQ0kKK2V2ZW50IElELgorLlBwCitU
aGUKKy5GbiBidF9kZXZpbnF1aXJ5CitmdW5jdGlvbiBwZXJmb3JtcyBCbHVldG9vdGggaW5xdWly
eS4KK1RoZQorLkZhIGRldm5hbWUKK3BhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggbG9jYWwgQmx1
ZXRvb3RoIGRldmljZSBzaG91bGQgcGVyZm9ybSBhbiBpbnF1aXJ5LgorSWYgbm90IHNlY2lmaWVk
LCBpLmUuCisuRHYgTlVMTCAsCit0aGVuIGZpcnN0IGF2YWlsYWJsZSBkZXZpY2Ugd2lsbCBiZSB1
c2VkLgorVGhlCisuRmEgbGVuZ3RoCitwYXJhbWV0ZXJzIHNwZWNpZmllcyB0aGUgdG90YWwgbGVu
Z3RoIG9mIGFuIGlucXVpcnkgaW4gc2Vjb25kcy4KK0lmIG5vdCBzcGVjaWZpZWQsIGkuZS4gMCwg
ZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCitUaGUKKy5GYSBudW1fcnNwCitwYXJhbWV0ZXIg
c3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmVzcG9uc2VzIHRoYXQgY2FuIGJlIHJlY2VpdmVkIGJl
Zm9yZQordGhlIGlucXVpcnkgaXMgaGFsdGVkLgorSWYgbm90IHNwZWNpZmllZCwgaS5lLiAwLCBk
ZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4KK1RoZQorLkZhIGlpCitwYXJhbWV0ZXIgc3BlY2lm
aWVzIHdoZXJlIHRvIHBsYWNlIGlucXVpcnkgcmVzdWx0cy4KK09uIHN1Y2Nlc3MsIHRoZSBmdW5j
dGlvbiB3aWxsIHJldHVybiB0b3RhbCBudW1iZXIgb2YgaW5xdWlyeSByZXN1bHRzLAord2lsbCBh
bGxvY2F0ZSBidWZmZXIgdG8gc3RvcmUgYWxsIHRoZSBpbnF1aXJ5IHJlc3VsdHMgYW5kCit3aWxs
IHJldHVybiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGluIHRoZQorLkZhIGlpCitw
YXJhbWV0ZXIuCitJdCBpcyB1cCB0byB0aGUgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiB0byBkaXNw
b3NlIG9mIHRoZSBidWZmZXIuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBhbiBlcnJvciBo
YXMgb2NjdXJyZWQuCitUaGUKKy5WdCBidF9kZXZpbnF1aXJ5CitzdHJ1Y3R1cmUgaXMgZGVmaW5l
ZCBhcyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKK3N0cnVjdCBidF9kZXZp
bnF1aXJ5IHsKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAgICAgdWludDhf
dCAgICAgICAgIHBzY2FuX3JlcF9tb2RlOworICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5f
cGVyaW9kX21vZGU7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBkZXZfY2xhc3NbM107CisgICAg
ICAgIHVpbnQxNl90ICAgICAgICBjbG9ja19vZmZzZXQ7CisgICAgICAgIGludDhfdCAgICAgICAg
ICByc3NpOworICAgICAgICB1aW50OF90ICAgICAgICAgZGF0YVsyNDBdOworfTsKKy5FZAorLlBw
CitUaGUKIC5GbiBiZGFkZHJfc2FtZSAsCiAuRm4gYmRhZGRyX2FueQogYW5kCkBAIC00NDQsNiAr
NzEwLDYgQEAKIC5TaCBBVVRIT1JTCiAuQW4gTWFrc2ltIFlldm1lbmtpbiBBcSBtX2V2bWVua2lu
QHlhaG9vLmNvbQogLlNoIEJVR1MKLVRoZXNlIGZ1bmN0aW9ucyB1c2Ugc3RhdGljIGRhdGEgc3Rv
cmFnZTsKK1NvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSBzdGF0aWMgZGF0YSBzdG9yYWdlOwog
aWYgdGhlIGRhdGEgaXMgbmVlZGVkIGZvciBmdXR1cmUgdXNlLCBpdCBzaG91bGQgYmUKIGNvcGll
ZCBiZWZvcmUgYW55IHN1YnNlcXVlbnQgY2FsbHMgb3ZlcndyaXRlIGl0LgpJbmRleDogYmx1ZXRv
b3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmgJKHJldmlzaW9uIDE5MTMyOCkKKysrIGJs
dWV0b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8c3lz
L2VuZGlhbi5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQu
aD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8
ZXJybm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUg
PG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2hjaS5oPgogI2luY2x1ZGUgPG5ldGdyYXBo
L2JsdWV0b290aC9pbmNsdWRlL25nX2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRv
b3RoL2luY2x1ZGUvbmdfYnRzb2NrZXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAKIF9fQkVHSU5f
REVDTFMKIApAQCAtMTI5LDggKzEzMSw0OCBAQAogCXVpbnQ4X3QJCV9wYWRkaW5nWzIwXTsJLyog
bGVhdmUgc3BhY2UgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgKi8KIH07CiAKK3N0cnVjdCBidF9kZXZy
ZXEKK3sKKwl1aW50MTZfdAlvcGNvZGU7CisJdWludDhfdAkJZXZlbnQ7CisJdm9pZAkJKmNwYXJh
bTsKKwlzaXplX3QJCWNsZW47CisJdm9pZAkJKnJwYXJhbTsKKwlzaXplX3QJCXJsZW47Cit9Owor
CitzdHJ1Y3QgYnRfZGV2ZmlsdGVyIHsKKwliaXRzdHJfdAliaXRfZGVjbChwYWNrZXRfbWFzaywg
OCk7CisJYml0c3RyX3QJYml0X2RlY2woZXZlbnRfbWFzaywgMjU2KTsKK307CisKK3N0cnVjdCBi
dF9kZXZpbnF1aXJ5IHsKKwliZGFkZHJfdCAgICAgICAgYmRhZGRyOworCXVpbnQ4X3QgICAgICAg
ICBwc2Nhbl9yZXBfbW9kZTsKKwl1aW50OF90ICAgICAgICAgcHNjYW5fcGVyaW9kX21vZGU7CisJ
dWludDhfdCAgICAgICAgIGRldl9jbGFzc1szXTsKKwl1aW50MTZfdCAgICAgICAgY2xvY2tfb2Zm
c2V0OworCWludDhfdCAgICAgICAgICByc3NpOworCXVpbnQ4X3QgICAgICAgICBkYXRhWzI0MF07
Cit9OworCiB0eXBlZGVmIGludAkoYnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZp
bmZvIGNvbnN0ICosIHZvaWQgKik7CiAKK2ludAkJYnRfZGV2b3BlbiAoY2hhciBjb25zdCAqZGV2
bmFtZSk7CitpbnQJCWJ0X2RldmNsb3NlKGludCBzKTsKK2ludAkJYnRfZGV2c2VuZCAoaW50IHMs
IHVpbnQxNl90IG9wY29kZSwgdm9pZCAqcGFyYW0sIHNpemVfdCBwbGVuKTsKK2ludAkJYnRfZGV2
cmVjdiAoaW50IHMsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHRpbWVfdCB0byk7CitpbnQJCWJ0
X2RldnJlcSAgKGludCBzLCBzdHJ1Y3QgYnRfZGV2cmVxICpyLCB0aW1lX3QgdG8pOworaW50CQli
dF9kZXZmaWx0ZXIoaW50IHMsIHN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKm5ldywKKwkJCSAg
ICAgc3RydWN0IGJ0X2RldmZpbHRlciAqb2xkKTsKK3ZvaWQJCWJ0X2RldmZpbHRlcl9wa3Rfc2V0
KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgaW50IHR5cGUpOwordm9pZAkJYnRfZGV2Zmls
dGVyX3BrdF9jbHIoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCBpbnQgdHlwZSk7CitpbnQJ
CWJ0X2RldmZpbHRlcl9wa3RfdHN0KHN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRlciwg
aW50IHR5cGUpOwordm9pZAkJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoc3RydWN0IGJ0X2RldmZpbHRl
ciAqZmlsdGVyLCBpbnQgZXZlbnQpOwordm9pZAkJYnRfZGV2ZmlsdGVyX2V2dF9jbHIoc3RydWN0
IGJ0X2RldmZpbHRlciAqZmlsdGVyLCBpbnQgZXZlbnQpOworaW50CQlidF9kZXZmaWx0ZXJfZXZ0
X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpmaWx0ZXIsIGludCBldmVudCk7CitpbnQJ
CWJ0X2RldmlucXVpcnkoY2hhciBjb25zdCAqZGV2bmFtZSwgdGltZV90IGxlbmd0aCwgaW50IG51
bV9yc3AsCisJCQkgICAgICBzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKTsKIGludAkJYnRfZGV2
aW5mbyAoc3RydWN0IGJ0X2RldmluZm8gKmRpKTsKIGludAkJYnRfZGV2ZW51bSAoYnRfZGV2ZW51
bV9jYl90ICpjYiwgdm9pZCAqYXJnKTsKIApJbmRleDogTWFrZWZpbGUKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TWFrZWZpbGUJKHJldmlzaW9uIDE5MTMyOCkKKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMywxOSBAQAogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5mby4zCiBNTElO
S1MrPQlibHVldG9vdGguMyBidF9kZXZlbnVtLjMKIAorTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRf
ZGV2b3Blbi4zCitNTElOS1MrPQlibHVldG9vdGguMyBidF9kZXZjbG9zZS4zCitNTElOS1MrPQli
bHVldG9vdGguMyBidF9kZXZzZW5kLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldnJlcS4z
CitNTElOS1MrPQlibHVldG9vdGguMyBidF9kZXZmaWx0ZXIuMworTUxJTktTKz0JYmx1ZXRvb3Ro
LjMgYnRfZGV2ZmlsdGVyX3BrdF9zZXQuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2Zmls
dGVyX3BrdF9jbHIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX3BrdF90c3Qu
MworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2dF9zZXQuMworTUxJTktTKz0J
Ymx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2dF9jbHIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMg
YnRfZGV2ZmlsdGVyX2V2dF90c3QuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5xdWly
eS4zCisKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1MSU5LUys9CWJsdWV0
b290aC4zIGJkYWRkcl9hbnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRhZGRyX2NvcHkuMwo=
--0016361e891e0cf2e0046800354d--



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