From owner-freebsd-bluetooth@FreeBSD.ORG Mon Apr 20 17:53:27 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 41A99106566C for ; Mon, 20 Apr 2009 17:53:27 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from mail-gx0-f220.google.com (mail-gx0-f220.google.com [209.85.217.220]) by mx1.freebsd.org (Postfix) with ESMTP id D5F4E8FC19 for ; Mon, 20 Apr 2009 17:53:26 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by gxk20 with SMTP id 20so5170297gxk.19 for ; Mon, 20 Apr 2009 10:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=yOiVVl64S/1LtmBPgwgLRPTqCDGLtQxPoBbAULfZbwU=; b=C7Mgwcd4nQQ4mW/G0At4f9wEsJYJJKgfX3pVXriWc7UdYLsQftrrsHGAo4H3w5gvdO usIez4mkOwO6idV5XN4TLawr0i0OwFrq/ZYMfNwnm06DKrAp6HIImHjXTNDet1Toc1ap FpqDO+P6odnsufnJ0QLKIBZAHWnNr4Hctrl+8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=F/RA6sOF2iUcbPX62Jax3J1sGSMcJ0eqyXih1AapvndhtMWvPHJg8ERg9KHOs4Zo+O HY7L5Agvvm2uOTeL4ZOAzAyud08ijAh+ngzs7j5jS+fzauIXoatHVkITJxoWE0pAvsR4 AxpZULe6n7yEwBTQPutZj8eXRP8UhDM6HQxtU= MIME-Version: 1.0 Received: by 10.90.97.16 with SMTP id u16mr7689697agb.105.1240250006171; Mon, 20 Apr 2009 10:53:26 -0700 (PDT) In-Reply-To: References: Date: Mon, 20 Apr 2009 10:53:26 -0700 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=0016361e891e0cf2e0046800354d Cc: freebsd-bluetooth@freebsd.org Subject: Re: libhci update X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Apr 2009 17:53:27 -0000 --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--