From owner-freebsd-bluetooth@FreeBSD.ORG Sun Apr 19 23:05:56 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 44852106564A for ; Sun, 19 Apr 2009 23:05:56 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from yx-out-2324.google.com (yx-out-2324.google.com [74.125.44.29]) by mx1.freebsd.org (Postfix) with ESMTP id 00B118FC13 for ; Sun, 19 Apr 2009 23:05:55 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by yx-out-2324.google.com with SMTP id 31so508432yxl.13 for ; Sun, 19 Apr 2009 16:05:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=C3AyIhSs5h0ly4QDs3rA2oWPXm3lbuUbxT2+z03snuo=; b=bvep7VrrWywo8IY3PX4rIualtvuw5xJ7L9TDM8RCDaD14jN+Rwbtrz7ZTiA/D9s5py aAfKpRdW+l2OobPZVgXlK9hs5oRVNoptXyl+H+RegiBDPlWVxhXLXDMfsq6dD/TQb/yx NnBEV/8g2f0Kgu7QKKoz+7mi954+dCfnYx/IU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=j8la9aD6L+hEh9wtb+5cY02nHuh7JtVg7RZ0p4xsN9bokMRrVA4f6u8Id3UsvlHn9P /Jt1X7kLu5QTv0pOcq0E5cKEq33lasJ6Bb6t2PAFVTpYHJJaQmLmHjlTE2zctVRLUzE4 8DxkkV8cHpK9+nYhvseq/N2wfr5PqrlK/5dsA= MIME-Version: 1.0 Received: by 10.90.120.14 with SMTP id s14mr5656926agc.69.1240182355260; Sun, 19 Apr 2009 16:05:55 -0700 (PDT) Date: Sun, 19 Apr 2009 16:05:55 -0700 Message-ID: From: Maksim Yevmenkin To: "freebsd-bluetooth@freebsd.org" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: sb_mbtail is not set in sbappendrecord_locked() 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: Sun, 19 Apr 2009 23:05:57 -0000 hello, i'm fairly certain that sbappendrecord_locked() has bug in it. the bug is triggered by the kernel SOCKBUF_DEBUG option. the easiest way to trigger the bug is to 1) compile kernel with the SOCKBUF_DEBUG option enabled; 2) call sbappendrecord_locked() and try to append mbuf chain with exactly one mbuf (i.e. m0->m_next is NULL) to an empty sockbuf; there is a kern/126742 pr that basically shows the problem and stack traces. initial investigation was done by "pluknet" < pluknet -at- gmail -dot- com >, who confirmed the bug. see http://lists.freebsd.org/pipermail/freebsd-net/2008-August/019345.html for more details. i'm proposing the following patch. please review. == > svn diff Index: uipc_sockbuf.c =================================================================== --- uipc_sockbuf.c (revision 191012) +++ uipc_sockbuf.c (working copy) @@ -577,10 +577,6 @@ if (m0 == 0) return; - m = sb->sb_mb; - if (m) - while (m->m_nextpkt) - m = m->m_nextpkt; /* * Put the first mbuf on the queue. Note this permits zero length * records. @@ -588,17 +584,17 @@ sballoc(sb, m0); SBLASTRECORDCHK(sb); SBLINKRECORD(sb, m0); - if (m) - m->m_nextpkt = m0; - else - sb->sb_mb = m0; + sb->sb_mbtail = m0; m = m0->m_next; m0->m_next = 0; - if (m && (m0->m_flags & M_EOR)) { - m0->m_flags &= ~M_EOR; - m->m_flags |= M_EOR; + if (m != NULL) { + if (m0->m_flags & M_EOR) { + m0->m_flags &= ~M_EOR; + m->m_flags |= M_EOR; + } + + sbcompress(sb, m, m0); } - sbcompress(sb, m, m0); } /* == thanks, max 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-- From owner-freebsd-bluetooth@FreeBSD.ORG Tue Apr 21 10:54:41 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 88099106564A for ; Tue, 21 Apr 2009 10:54:41 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp02.one2one.net (smtp02.one2one.net [149.254.192.174]) by mx1.freebsd.org (Postfix) with ESMTP id 277E68FC14 for ; Tue, 21 Apr 2009 10:54:40 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by localhost.t-mobile.co.uk with esmtp (Exim 4.50) id 1LwDca-0005lQ-P5; Tue, 21 Apr 2009 11:54:36 +0100 Received: from localhost.t-mobile.co.uk ([127.0.0.1]) by localhost (smtpbeckt01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 22013-05; Tue, 21 Apr 2009 11:54:36 +0100 (BST) Received: from [10.215.108.93] (helo=rya-online.net) by localhost.t-mobile.co.uk with smtp (Exim 4.50) id 1LwDcR-0005lJ-Q1; Tue, 21 Apr 2009 11:54:36 +0100 Received: (nullmailer pid 2530 invoked by uid 1000); Tue, 21 Apr 2009 10:53:22 -0000 Date: Tue, 21 Apr 2009 11:53:22 +0100 (BST) To: Maksim Yevmenkin In-Reply-To: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Message-Id: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> From: Iain Hibbert X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on localhost.t-mobile.co.uk); SAEximRunCond expanded to false 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: Tue, 21 Apr 2009 10:54:41 -0000 On Mon, 20 Apr 2009, Maksim Yevmenkin wrote: > >> 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 :) Ok also in bt_devrecv() - return type should be ssize_t - size cannot be < 0 (use "size == 0")? and what of validation of received data here? It could be worth checking that the buffer is not truncated so that the caller does not have to worry about it, but that does require checking the packet type.. > > 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. Mm, its a good point - there are arguments either way (bloat vs guaranteed success) but I think since the difference between devreq() and devrecv() is that devreq() handles all the fiddly details for you, I think its worth doing that aswell.. > > 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. My thought was that some of the 'fields' do seem to cross over into multiple bytes (eg the service class flags in the default format type) and perhaps its easier to interpret as a single value where bits can be tested in host order by such as (class & (1 << N))? I don't know how much that helps but the assigned numbers document does seem to show it as a bit array. (I'm not having a strong opinion either :) > > 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. No, I mean to specifically mention ".Xr free 3" as the method used 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 thought about that some yesterday (on another train :) and I think there could be some other problems in any case, eg some devices (at least, maybe all?) can not handle RemoteNameReq etc while in inquiry mode so the amount of things that can be done is minimal - btconfig(8) does print a dot each time a result is returned but I think thats probably about the limit of what is useful. So, perhaps just leave it for now.. if somebody requires something like that its not difficult to cut and paste library code to work something out. iain From owner-freebsd-bluetooth@FreeBSD.ORG Tue Apr 21 11:02:59 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 60C60106564A for ; Tue, 21 Apr 2009 11:02:59 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp02.one2one.net (smtp02.one2one.net [149.254.192.174]) by mx1.freebsd.org (Postfix) with ESMTP id 226CB8FC0A for ; Tue, 21 Apr 2009 11:02:59 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by localhost.t-mobile.co.uk with esmtp (Exim 4.50) id 1LwDkg-0005vo-E4; Tue, 21 Apr 2009 12:02:58 +0100 Received: from localhost.t-mobile.co.uk ([127.0.0.1]) by localhost (smtpbeckt01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 22490-10; Tue, 21 Apr 2009 12:02:58 +0100 (BST) Received: from [10.215.108.93] (helo=rya-online.net) by localhost.t-mobile.co.uk with smtp (Exim 4.50) id 1LwDke-0005vb-Pu; Tue, 21 Apr 2009 12:02:58 +0100 Received: (nullmailer pid 2862 invoked by uid 1000); Tue, 21 Apr 2009 11:01:50 -0000 Date: Tue, 21 Apr 2009 12:01:50 +0100 (BST) To: Maksim Yevmenkin In-Reply-To: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Message-Id: <1240311710.547959.2200.nullmailer@galant.ukfsn.org> From: Iain Hibbert X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on localhost.t-mobile.co.uk); SAEximRunCond expanded to false 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: Tue, 21 Apr 2009 11:02:59 -0000 On Tue, 21 Apr 2009, Iain Hibbert wrote: > > > 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. > > Mm, its a good point - there are arguments either way (bloat vs guaranteed > success) but I think since the difference between devreq() and devrecv() > is that devreq() handles all the fiddly details for you, I think its worth > doing that aswell.. the bluez hci_send_req() does set the filters btw iain From owner-freebsd-bluetooth@FreeBSD.ORG Tue Apr 21 16:59:51 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 5B05D106566B for ; Tue, 21 Apr 2009 16:59:51 +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 EC20E8FC1B for ; Tue, 21 Apr 2009 16:59:50 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by gxk20 with SMTP id 20so6288092gxk.19 for ; Tue, 21 Apr 2009 09:59:50 -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=tQ1A9eu3A82/ZRAmzUEQS5a8b8gyTDAFq2LcREWONwQ=; b=gE6a4oY8IRWtxStVeA9YPOqak9nsMfLQ4ZJ1zl7COJBInEn331EwMo438C4sWDvmWq vzdhHp132kzyc9ljJe+YBUyYpTKuyHrkvZbxNySKJTR8lB1LQ5OF/SMitS7bfP2QaDx8 0oTPG6Wc9sOGZxZWTetDrPsGwx4ugwcU5FnkA= 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=e2EuhmMiOP23U0T4fTVQRqqH9QETNB8t3x4hiI7Hrc0G8bk4yqjUcHODQ3hQ7DjN9H aifaX45ce2Cbd0DqTg1HoRpBIAlUVVwWvxoIqjq4effuF2jW78KdOlwdkHpHxyLUEB1C oIF0jRmjZpVEFbJTBkpIEkF6RuEDqW7cLAjp0= MIME-Version: 1.0 Received: by 10.90.98.13 with SMTP id v13mr1426930agb.0.1240333190258; Tue, 21 Apr 2009 09:59:50 -0700 (PDT) In-Reply-To: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> Date: Tue, 21 Apr 2009 09:59:49 -0700 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=0016364ed650356495046813930a 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: Tue, 21 Apr 2009 16:59:51 -0000 --0016364ed650356495046813930a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Tue, Apr 21, 2009 at 3:53 AM, Iain Hibbert wrote: > On Mon, 20 Apr 2009, Maksim Yevmenkin wrote: > >> >> 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 :) > > Ok also in bt_devrecv() > - return type should be ssize_t > - size cannot be < 0 (use "size == 0")? sure. i changed it. > and what of validation of received data here? It could be worth checking > that the buffer is not truncated so that the caller does not have to worry > about it, but that does require checking the packet type.. why not? :) i added it as well. >> > 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. > > Mm, its a good point - there are arguments either way (bloat vs guaranteed > success) but I think since the difference between devreq() and devrecv() > is that devreq() handles all the fiddly details for you, I think its worth > doing that aswell.. fine. it now sets and restores filter :) >> > 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. > > My thought was that some of the 'fields' do seem to cross over into > multiple bytes (eg the service class flags in the default format type) and > perhaps its easier to interpret as a single value where bits can be tested > in host order by such as (class & (1 << N))? I don't know how much that > helps but the assigned numbers document does seem to show it as a bit > array. (I'm not having a strong opinion either :) left it as 3 bytes array for now. >> > 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. > > No, I mean to specifically mention ".Xr free 3" as the method used to > dispose of the buffer. ah, i see. man page was updated. the revised diff is attached. please review. thanks, max --0016364ed650356495046813930a 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_ftsuch0v0 SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTEzMjkpCisrKyBo Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDQ5NyBAQAogICogJEZyZWVCU0QkCiAg 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 CQlpdm47CisKKwlpZiAoKHBsZW4gPT0gMCAmJiBwYXJhbSAhPSBOVUxMKSB8fCAocGxlbiA+IDAg JiYgcGFyYW0gPT0gTlVMTCkpIHsgCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsK Kwl9CisKKwlpdlswXS5pb3ZfYmFzZSA9ICZoOworCWl2WzBdLmlvdl9sZW4gPSBzaXplb2YoaCk7 CisJaXZuID0gMTsKKworCWgudHlwZSA9IE5HX0hDSV9DTURfUEtUOworCWgub3Bjb2RlID0gaHRv bGUxNihvcGNvZGUpOworCWlmIChwbGVuID4gMCkgeworCQloLmxlbmd0aCA9IHBsZW47CisKKwkJ aXZbMV0uaW92X2Jhc2UgPSBwYXJhbTsKKwkJaXZbMV0uaW92X2xlbiA9IHBsZW47CisJCWl2biA9 IDI7CisJfSBlbHNlCisJCWgubGVuZ3RoID0gMDsKKworCXdoaWxlICh3cml0ZXYocywgaXYsIGl2 bikgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJCQlj b250aW51ZTsKKworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzc2l6 ZV90CitidF9kZXZyZWN2KGludCBzLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB0aW1lX3QgdG8p Cit7CisJZmRfc2V0CQlyZmQ7CisJc3RydWN0IHRpbWV2YWwJdHY7CisJc3NpemVfdAkJbjsKKwor CWlmIChidWYgPT0gTlVMTCB8fCBzaXplID09IDAgfHwgdG8gPCAwKSB7CisJCWVycm5vID0gRUlO VkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlGRF9aRVJPKCZyZmQpOworCUZEX1NFVChzLCAm cmZkKTsKKworCXR2LnR2X3NlYyA9IHRvOworCXR2LnR2X3VzZWMgPSAwOworCisJd2hpbGUgKChu ID0gc2VsZWN0KHMgKyAxLCAmcmZkLCBOVUxMLCBOVUxMLCAmdHYpKSA8IDApIHsKKwkJaWYgKGVy cm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCisJCXJldHVy biAoLTEpOworCX0KKworCWlmIChuID09IDApIHsKKwkJZXJybm8gPSBFVElNRURPVVQ7CisJCXJl dHVybiAoLTEpOworCX0KKworCWFzc2VydChGRF9JU1NFVChzLCAmcmZkKSk7CisKKwl3aGlsZSAo KG4gPSByZWFkKHMsIGJ1Ziwgc2l6ZSkpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8 IGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJ c3dpdGNoICgqKCh1aW50OF90ICopIGJ1ZikpIHsKKwljYXNlIE5HX0hDSV9DTURfUEtUOiB7CisJ CW5nX2hjaV9jbWRfcGt0X3QJKmggPSAobmdfaGNpX2NtZF9wa3RfdCAqKSBidWY7CisKKwkJaWYg KG4gPj0gc2l6ZW9mKCpoKSAmJiBuID09IChzaXplb2YoKmgpICsgaC0+bGVuZ3RoKSkKKwkJCXJl dHVybiAobik7CisJCX0gYnJlYWs7CisKKwljYXNlIE5HX0hDSV9BQ0xfREFUQV9QS1Q6IHsKKwkJ bmdfaGNpX2FjbGRhdGFfcGt0X3QJKmggPSAobmdfaGNpX2FjbGRhdGFfcGt0X3QgKikgYnVmOwor CisJCWlmIChuID49IHNpemVvZigqaCkgJiYgbiA9PSAoc2l6ZW9mKCpoKSArIGxlMTZ0b2goaC0+ bGVuZ3RoKSkpCisJCQlyZXR1cm4gKG4pOworCQl9IGJyZWFrOworCisJY2FzZSBOR19IQ0lfU0NP X0RBVEFfUEtUOiB7CisJCW5nX2hjaV9zY29kYXRhX3BrdF90CSpoID0gKG5nX2hjaV9zY29kYXRh X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBzaXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigq aCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChuKTsKKwkJfSBicmVhazsKKworCWNhc2UgTkdf SENJX0VWRU5UX1BLVDogeworCQluZ19oY2lfZXZlbnRfcGt0X3QJKmggPSAobmdfaGNpX2V2ZW50 X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBzaXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigq aCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChuKTsKKwkJfSBicmVhazsKKwl9CisKKwllcnJu byA9IEVJTzsKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitidF9kZXZyZXEoaW50IHMsIHN0cnVj dCBidF9kZXZyZXEgKnIsIHRpbWVfdCB0bykKK3sKKwl1aW50OF90CQkJCWJ1ZlszMjBdOyAvKiBt b3JlIHRoYW4gZW5vdWdoICovCisJbmdfaGNpX2V2ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZl bnRfcGt0X3QgKikgYnVmOworCW5nX2hjaV9jb21tYW5kX2NvbXBsX2VwCQkqY2MgPSAobmdfaGNp X2NvbW1hbmRfY29tcGxfZXAgKikoZSsxKTsKKwluZ19oY2lfY29tbWFuZF9zdGF0dXNfZXAJKmNz ID0gKG5nX2hjaV9jb21tYW5kX3N0YXR1c19lcCopKGUrMSk7CisJc3RydWN0IGJ0X2RldmZpbHRl cgkJb2xkLCBuZXc7CisJdGltZV90CQkJCXRfZW5kOworCXVpbnQxNl90CQkJb3Bjb2RlOworCXNz aXplX3QJCQkJbjsKKwlpbnQJCQkJZXJyb3I7CisKKwlpZiAocyA8IDAgfHwgciA9PSBOVUxMIHx8 IHRvIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYg KChyLT5ybGVuID09IDAgJiYgci0+cnBhcmFtICE9IE5VTEwpIHx8CisJICAgIChyLT5ybGVuID4g MCAmJiByLT5ycGFyYW0gPT0gTlVMTCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAo LTEpOworCX0KKworCW1lbXNldCgmbmV3LCAwLCBzaXplb2YobmV3KSk7CisJYnRfZGV2ZmlsdGVy X3BrdF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX1BLVCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQo Jm5ldywgTkdfSENJX0VWRU5UX0NPTU1BTkRfQ09NUEwpOworCWJ0X2RldmZpbHRlcl9ldnRfc2V0 KCZuZXcsIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUyk7CisJaWYgKHItPmV2ZW50ICE9IDAp CisJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcsIHItPmV2ZW50KTsKKworCWlmIChidF9kZXZm aWx0ZXIocywgJm5ldywgJm9sZCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCWVycm9yID0gMDsK KworCW4gPSBidF9kZXZzZW5kKHMsIHItPm9wY29kZSwgci0+Y3BhcmFtLCByLT5jbGVuKTsKKwlp ZiAobiA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKKwkJZ290byBvdXQ7CQorCX0KKworCW9wY29k ZSA9IGh0b2xlMTYoci0+b3Bjb2RlKTsKKwl0X2VuZCA9IHRpbWUoTlVMTCkgKyB0bzsKKworCWRv IHsKKwkJdG8gPSB0X2VuZCAtIHRpbWUoTlVMTCk7CisJCWlmICh0byA8IDApCisJCQl0byA9IDA7 CisKKwkJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBzaXplb2YoYnVmKSwgdG8pOworCQlpZiAobiA8 IDApIHsKKwkJCWVycm9yID0gZXJybm87CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChlLT50 eXBlICE9IE5HX0hDSV9FVkVOVF9QS1QpIHsKKwkJCWVycm9yID0gRUlPOworCQkJZ290byBvdXQ7 CisJCX0KKworCQluIC09IHNpemVvZigqZSk7CisKKwkJc3dpdGNoIChlLT5ldmVudCkgeworCQlj YXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX0NPTVBMOgorCQkJaWYgKGNjLT5vcGNvZGUgPT0gb3Bj b2RlKSB7CisJCQkJbiAtPSBzaXplb2YoKmNjKTsKKworCQkJCWlmIChyLT5ybGVuID49IG4pIHsK KwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNweShyLT5ycGFyYW0sIGNjICsgMSwgci0+cmxl bik7CisJCQkJfQorCisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE5H X0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUzoKKwkJCWlmIChjcy0+b3Bjb2RlID09IG9wY29kZSkg eworCQkJCWlmIChyLT5ldmVudCAhPSBOR19IQ0lfRVZFTlRfQ09NTUFORF9TVEFUVVMpIHsKKwkJ CQkJaWYgKGNzLT5zdGF0dXMgIT0gMCkgeworCQkJCQkJZXJyb3IgPSBFSU87CisJCQkJCQlnb3Rv IG91dDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJ CQkJCXItPnJsZW4gPSBuOworCQkJCQkJbWVtY3B5KHItPnJwYXJhbSwgY3MsIHItPnJsZW4pOwor CQkJCQl9CisKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWlmIChlLT5ldmVudCA9PSByLT5ldmVudCkgeworCQkJCWlmIChyLT5ybGVuID49 IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNweShyLT5ycGFyYW0sIGUgKyAxLCBy LT5ybGVuKTsKKwkJCQl9CisKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJ fSB3aGlsZSAodG8gPiAwKTsKKworCWVycm9yID0gRVRJTUVET1VUOworb3V0OgorCWJ0X2RldmZp bHRlcihzLCAmb2xkLCBOVUxMKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWVycm5vID0gZXJy b3I7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK2ludAorYnRfZGV2 ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXcsIHN0cnVjdCBidF9k ZXZmaWx0ZXIgKm9sZCkKK3sKKwlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19maWx0ZXIJZjsK Kwlzb2NrbGVuX3QJCQkJbGVuOworCisJaWYgKG5ldyA9PSBOVUxMICYmIG9sZCA9PSBOVUxMKSB7 CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAob2xkICE9IE5V TEwpIHsKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlpZiAoZ2V0c29ja29wdChzLCBTT0xfSENJX1JB VywgU09fSENJX1JBV19GSUxURVIsICZmLCAmbGVuKSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwor CQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkpOworCQltZW1jcHkob2xkLT5wYWNrZXRfbWFz aywgJmYucGFja2V0X21hc2ssCisJCQlzaXplb2Yob2xkLT5wYWNrZXRfbWFzaykpOworCQltZW1j cHkob2xkLT5ldmVudF9tYXNrLCAmZi5ldmVudF9tYXNrLAorCQkJc2l6ZW9mKG9sZC0+ZXZlbnRf bWFzaykpOworCX0KKworCWlmIChuZXcgIT0gTlVMTCkgeworCQltZW1zZXQoJmYsIDAsIHNpemVv ZihmKSk7CisJCW1lbWNweSgmZi5wYWNrZXRfbWFzaywgbmV3LT5wYWNrZXRfbWFzaywgc2l6ZW9m KGYucGFja2V0X21hc2spKTsKKwkJbWVtY3B5KCZmLmV2ZW50X21hc2ssIG5ldy0+ZXZlbnRfbWFz aywgc2l6ZW9mKGYuZXZlbnRfbWFzaykpOworCisJCWxlbiA9IHNpemVvZihmKTsKKwkJaWYgKHNl dHNvY2tvcHQocywgU09MX0hDSV9SQVcsIFNPX0hDSV9SQVdfRklMVEVSLCAmZiwgbGVuKSA8IDAp CisJCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCit2b2lkCitidF9kZXZm aWx0ZXJfcGt0X3NldChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlwZSkK K3sKKwliaXRfc2V0KGZpbHRlci0+cGFja2V0X21hc2ssIHR5cGUgLSAxKTsKK30KKwordm9pZAor YnRfZGV2ZmlsdGVyX3BrdF9jbHIoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90 IHR5cGUpCit7CisJYml0X2NsZWFyKGZpbHRlci0+cGFja2V0X21hc2ssIHR5cGUgLSAxKTsKK30K KworaW50CitidF9kZXZmaWx0ZXJfcGt0X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpm aWx0ZXIsIHVpbnQ4X3QgdHlwZSkKK3sKKwlyZXR1cm4gKGJpdF90ZXN0KGZpbHRlci0+cGFja2V0 X21hc2ssIHR5cGUgLSAxKSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9ldnRfc2V0KHN0cnVj dCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwliaXRfc2V0KGZpbHRl ci0+ZXZlbnRfbWFzaywgZXZlbnQgLSAxKTsKK30KKwordm9pZAorYnRfZGV2ZmlsdGVyX2V2dF9j bHIoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IGV2ZW50KQoreworCWJpdF9j bGVhcihmaWx0ZXItPmV2ZW50X21hc2ssIGV2ZW50IC0gMSk7Cit9CisKK2ludAorYnRfZGV2Zmls dGVyX2V2dF90c3Qoc3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IGV2 ZW50KQoreworCXJldHVybiAoYml0X3Rlc3QoZmlsdGVyLT5ldmVudF9tYXNrLCBldmVudCAtIDEp KTsKK30KKworaW50CitidF9kZXZpbnF1aXJ5KGNoYXIgY29uc3QgKmRldm5hbWUsIHRpbWVfdCBs ZW5ndGgsIGludCBudW1fcnNwLAorCQlzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKQoreworCXVp bnQ4X3QJCQkJYnVmWzMyMF07CisJY2hhcgkJCQlfZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsK KwlzdHJ1Y3QgYnRfZGV2ZmlsdGVyCQlmOworCW5nX2hjaV9pbnF1aXJ5X2NwCQkqY3AgPSAobmdf aGNpX2lucXVpcnlfY3AgKikgYnVmOworCW5nX2hjaV9ldmVudF9wa3RfdAkJKmUgPSAobmdfaGNp X2V2ZW50X3BrdF90ICopIGJ1ZjsKKwluZ19oY2lfaW5xdWlyeV9yZXN1bHRfZXAJKmVwID0gKG5n X2hjaV9pbnF1aXJ5X3Jlc3VsdF9lcCAqKShlKzEpOworCW5nX2hjaV9pbnF1aXJ5X3Jlc3BvbnNl CQkqaXI7CisJc3RydWN0IGJ0X2RldmlucXVpcnkJCSppOworCWludAkJCQlzLCBuOworCXRpbWVf dAkJCQl0bzsKKworCWlmIChpaSA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1 cm4gKC0xKTsKKwl9CisKKwlpZiAoZGV2bmFtZSA9PSBOVUxMKSB7CisJCW1lbXNldChfZGV2bmFt ZSwgMCwgc2l6ZW9mKF9kZXZuYW1lKSk7CisJCWRldm5hbWUgPSBfZGV2bmFtZTsKKworCQluID0g YnRfZGV2ZW51bShidF9kZXZhbnlfY2IsIF9kZXZuYW1lKTsKKwkJaWYgKG4gPD0gMCkgeworCQkJ aWYgKG4gPT0gMCkKKwkJCQkqaWkgPSBOVUxMOworCisJCQlyZXR1cm4gKG4pOworCQl9CisJfQor CisJcyA9IGJ0X2Rldm9wZW4oZGV2bmFtZSk7CisJaWYgKHMgPCAwKQorCQlyZXR1cm4gKC0xKTsK KworCWlmIChidF9kZXZmaWx0ZXIocywgTlVMTCwgJmYpIDwgMCkgeworCQlidF9kZXZjbG9zZShz KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJmYsIE5HX0hD SV9FVkVOVF9JTlFVSVJZX0NPTVBMKTsKKwlidF9kZXZmaWx0ZXJfZXZ0X3NldCgmZiwgTkdfSENJ X0VWRU5UX0lOUVVJUllfUkVTVUxUKTsKKworCWlmIChidF9kZXZmaWx0ZXIocywgJmYsIE5VTEwp IDwgMCkgeworCQlidF9kZXZjbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogQWx3 YXlzIHVzZSBHSUFDIExBUCAqLworCWNwLT5sYXBbMF0gPSAweDMzOworCWNwLT5sYXBbMV0gPSAw eDhiOworCWNwLT5sYXBbMl0gPSAweDllOworCisJLyogQ2FsY3VsYXRlIGlucXVpcmUgbGVuZ3Ro IGluIDEuMjggc2Vjb25kIHVuaXRzICovCisJdG8gPSAodGltZV90KSAoKGRvdWJsZSkgbGVuZ3Ro IC8gMS4yOCk7CisJaWYgKHRvIDw9IDApCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IDQ7CQkvKiA1 LjEyIHNlY29uZHMgKi8KKwllbHNlIGlmICh0byA+IDI1NCkKKwkJY3AtPmlucXVpcnlfbGVuZ3Ro ID0gMjU1OwkvKiAzMjYuNDAgc2Vjb25kcyAqLworCWVsc2UKKwkJY3AtPmlucXVpcnlfbGVuZ3Ro ID0gdG8gKyAxOworCisJdG8gPSAodGltZV90KSgoZG91YmxlKSBjcC0+aW5xdWlyeV9sZW5ndGgg KiAxLjI4KSArIDE7CisKKwlpZiAobnVtX3JzcCA8PSAwIHx8IG51bV9yc3AgPiAyNTUpCisJCW51 bV9yc3AgPSA4OworCWNwLT5udW1fcmVzcG9uc2VzID0gKHVpbnQ4X3QpIG51bV9yc3A7CisKKwlp ID0gKmlpID0gY2FsbG9jKG51bV9yc3AsIHNpemVvZihzdHJ1Y3QgYnRfZGV2aW5xdWlyeSkpOwor CWlmIChpID09IE5VTEwpIHsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCWVycm5vID0gRU5PTUVNOwor CQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAoYnRfZGV2c2VuZChzLAorCQlOR19IQ0lfT1BDT0RF KE5HX0hDSV9PR0ZfTElOS19DT05UUk9MLCBOR19IQ0lfT0NGX0lOUVVJUlkpLAorCQkJY3AsIHNp emVvZigqY3ApKSA8IDApIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCXJldHVy biAoLTEpOworCX0KKword2FpdF9mb3JfbW9yZToKKworCW4gPSBidF9kZXZyZWN2KHMsIGJ1Ziwg c2l6ZW9mKGJ1ZiksIHRvKTsKKwlpZiAobiA8IDApIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xv c2Uocyk7CisJCXJldHVybiAoLTEpOworCX0KKworCWlmIChuIDwgc2l6ZW9mKG5nX2hjaV9ldmVu dF9wa3RfdCkpIHsKKwkJZnJlZShpKTsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCWVycm5vID0gRUlP OworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlzd2l0Y2ggKGUtPmV2ZW50KSB7CisJY2FzZSBOR19I Q0lfRVZFTlRfSU5RVUlSWV9DT01QTDoKKwkJYnJlYWs7CisKKwljYXNlIE5HX0hDSV9FVkVOVF9J TlFVSVJZX1JFU1VMVDoKKwkJaXIgPSAobmdfaGNpX2lucXVpcnlfcmVzcG9uc2UgKikoZXAgKyAx KTsKKworI3VuZGVmCU1JTgorI2RlZmluZQlNSU4oYSwgYikJKCgoYSkgPCAoYikpPyAoYSkgOiAo YikpCisKKwkJZm9yIChuID0gMDsgbiA8IE1JTihlcC0+bnVtX3Jlc3BvbnNlcywgbnVtX3JzcCk7 IG4gKyspIHsKKwkJCWJkYWRkcl9jb3B5KCZpLT5iZGFkZHIsICZpci0+YmRhZGRyKTsKKwkJCWkt PnBzY2FuX3JlcF9tb2RlID0gaXItPnBhZ2Vfc2Nhbl9yZXBfbW9kZTsKKwkJCWktPnBzY2FuX3Bl cmlvZF9tb2RlID0gaXItPnBhZ2Vfc2Nhbl9wZXJpb2RfbW9kZTsKKwkJCW1lbWNweShpLT5kZXZf Y2xhc3MsIGlyLT51Y2xhc3MsIHNpemVvZihpLT5kZXZfY2xhc3MpKTsKKwkJCWktPmNsb2NrX29m ZnNldCA9IGxlMTZ0b2goaXItPmNsb2NrX29mZnNldCk7CisKKwkJCWlyICsrOworCQkJaSArKzsK KwkJCW51bV9yc3AgLS07CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWRlZmF1bHQ6CisJ CWdvdG8gd2FpdF9mb3JfbW9yZTsKKwkJLyogTk9UIFJFQUNIRUQgKi8KKwl9CisKKwlidF9kZXZj bG9zZShzKTsKKwkJCisJcmV0dXJuIChpIC0gKmlpKTsKK30KKworaW50CiBidF9kZXZpbmZvKHN0 cnVjdCBidF9kZXZpbmZvICpkaSkKIHsKIAl1bmlvbiB7CkBAIC01Myw2ICs1MzUsNyBAQAogCQlz dHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2RlYnVnCQlyODsKIAl9CQkJCQkJcnA7CiAJ c3RydWN0IHNvY2thZGRyX2hjaQkJCQloYTsKKwlzb2NrbGVuX3QJCQkJCWhhbGVuOwogCWludAkJ CQkJCXMsIHJ2YWw7CiAKIAlpZiAoZGkgPT0gTlVMTCkgewpAQCAtNjAsMjcgKzU0MywxNCBAQAog CQlyZXR1cm4gKC0xKTsKIAl9CiAKLQltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKLQloYS5o Y2lfbGVuID0gc2l6ZW9mKGhhKTsKLQloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwotCi0J aWYgKGJ0X2F0b24oZGktPmRldm5hbWUsICZycC5yMS5iZGFkZHIpKSB7Ci0JCWlmICghYnRfZGV2 bmFtZShoYS5oY2lfbm9kZSwgJnJwLnIxLmJkYWRkcikpCi0JCQlyZXR1cm4gKC0xKTsKLQl9IGVs c2UgaWYgKGJ0X2RldjJub2RlKGRpLT5kZXZuYW1lLCBoYS5oY2lfbm9kZSwKLQkJCQkJc2l6ZW9m KGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkgewotCQllcnJubyA9IEVOWElPOwotCQlyZXR1cm4gKC0x KTsKLQl9Ci0KLQlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9Q Uk9UT19IQ0kpOworCXMgPSBidF9kZXZvcGVuKGRpLT5kZXZuYW1lKTsKIAlpZiAocyA8IDApCiAJ CXJldHVybiAoLTEpOwogCiAJcnZhbCA9IC0xOwogCi0JaWYgKGJpbmQocywgKHN0cnVjdCBzb2Nr YWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAotCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qg c29ja2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDApCisJaGFsZW4gPSBzaXplb2YoaGEpOwor CWlmIChnZXRzb2NrbmFtZShzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgJmhhbGVuKSA8IDAp CiAJCWdvdG8gYmFkOwogCXN0cmxjcHkoZGktPmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2Yo ZGktPmRldm5hbWUpKTsKIApAQCAtMTM4LDcgKzYwOCw3IEBACiAKIAlydmFsID0gMDsKIGJhZDoK LQljbG9zZShzKTsKKwlidF9kZXZjbG9zZShzKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0y MDUsNiArNjc1LDEzIEBACiAJcmV0dXJuIChjb3VudCk7CiB9CiAKK3N0YXRpYyBpbnQKK2J0X2Rl dmFueV9jYihpbnQgcywgc3RydWN0IGJ0X2RldmluZm8gY29uc3QgKmRpLCB2b2lkICp4ZGV2bmFt ZSkKK3sKKwlzdHJsY3B5KChjaGFyICopIHhkZXZuYW1lLCBkaS0+ZGV2bmFtZSwgSENJX0RFVk5B TUVfU0laRSk7CisJcmV0dXJuICgxKTsKK30KKwogc3RhdGljIGNoYXIgKgogYnRfZGV2Mm5vZGUo Y2hhciBjb25zdCAqZGV2bmFtZSwgY2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKIHsKSW5kZXg6 IGJsdWV0b290aC4zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC4zCShyZXZpc2lvbiAxOTEzMjkp CisrKyBibHVldG9vdGguMwkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogLlwiICRJ ZDogYmx1ZXRvb3RoLjMsdiAxLjUgMjAwMy8wNS8yMCAyMzowNDozMCBtYXggRXhwICQKIC5cIiAk RnJlZUJTRCQKIC5cIgotLkRkIEZlYnJ1YXJ5IDEzLCAyMDA5CisuRGQgQXByaWwgOSwgMjAwOQog LkR0IEJMVUVUT09USCAzCiAuT3MKIC5TaCBOQU1FCkBAIC00MSw2ICs0MSwyMyBAQAogLk5tIGJ0 X2VuZHByb3RvZW50ICwKIC5ObSBidF9hdG9uICwKIC5ObSBidF9udG9hICwKKy5ObSBidF9kZXZh ZGRyICwKKy5ObSBidF9kZXZuYW1lICwKKy5ObSBidF9kZXZpbmZvICwKKy5ObSBidF9kZXZlbnVt ICwKKy5ObSBidF9kZXZvcGVuICwKKy5ObSBidF9kZXZjbG9zZSAsCisuTm0gYnRfZGV2c2VuZCAs CisuTm0gYnRfZGV2cmVjdiAsCisuTm0gYnRfZGV2cmVxICwKKy5ObSBidF9kZXZmaWx0ZXIgLAor Lk5tIGJ0X2RldmZpbHRlcl9wa3Rfc2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfcGt0X2NsciAsCisu Tm0gYnRfZGV2ZmlsdGVyX3BrdF90c3QgLAorLk5tIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5O bSBidF9kZXZmaWx0ZXJfZXZ0X2NsciAsCisuTm0gYnRfZGV2ZmlsdGVyX2V2dF90c3QgLAorLk5t IGJ0X2RldmlucXVpcnkgLAogLk5tIGJkYWRkcl9zYW1lICwKIC5ObSBiZGFkZHJfYW55ICwKIC5O bSBiZGFkZHJfY29weQpAQCAtODQsNiArMTAxLDMyIEBACiAuRnQgaW50CiAuRm4gYnRfZGV2ZW51 bSAiYnRfZGV2ZW51bV9jYl90ICpjYiIgInZvaWQgKmFyZyIKIC5GdCBpbnQKKy5GbiBidF9kZXZv cGVuICJjaGFyIGNvbnN0ICpkZXZuYW1lIgorLkZ0IGludAorLkZuIGJ0X2RldmNsb3NlICJpbnQg cyIKKy5GdCBpbnQKKy5GbiBidF9kZXZzZW5kICJpbnQgcyIgInVpbnQxNl90IG9wY29kZSIgInZv aWQgKnBhcmFtIiAic2l6ZV90IHBsZW4iCisuRnQgc3NpemVfdAorLkZuIGJ0X2RldnJlY3YgImlu dCBzIiAidm9pZCAqYnVmIiAic2l6ZV90IHNpemUiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4g YnRfZGV2cmVxICJpbnQgcyIgInN0cnVjdCBidF9kZXZyZXEgKnIiICJ0aW1lX3QgdG8iCisuRnQg aW50CisuRm4gYnRfZGV2ZmlsdGVyICJpbnQgcyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3Qg Km5ldyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2Zmls dGVyX3BrdF9zZXQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlwZSIK Ky5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIg KmZpbHRlciIgInVpbnQ4X3QgdHlwZSIKKy5GdCBpbnQKKy5GbiBidF9kZXZmaWx0ZXJfcGt0X3Rz dCAic3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyIiAidWludDhfdCB0eXBlIgorLkZ0 IHZvaWQKKy5GbiBidF9kZXZmaWx0ZXJfZXZ0X3NldCAic3RydWN0IGJ0X2RldmZpbHRlciAqZmls dGVyIiAidWludDhfdCBldmVudCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9jbHQg InN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50Cisu Rm4gYnRfZGV2ZmlsdGVyX2V2dF90c3QgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRl ciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50CisuRm4gYnRfZGV2aW5xdWlyeSAiY2hhciBjb25z dCAqZGV2bmFtZSIgInRpbWVfdCBsZW5ndGgiICJpbnQgbnVtX3JzcCIgInN0cnVjdCBidF9kZXZp bnF1aXJ5ICoqaWkiCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICph IiAiY29uc3QgYmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRh ZGRyX3QgKmEiCkBAIC0zMTEsNiArMzU0LDIzNyBAQAogb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJy ZWQuCiAuUHAKIFRoZQorLkZuIGJ0X2Rldm9wZW4KK2Z1bmN0aW9uIG9wZW5zIEJsdWV0b290aCBk ZXZpY2Ugd2l0aCB0aGUgZ2l2ZW4KKy5GYSBkZXZuYW1lCithbmQgcmV0dXJucyBjb25uZWN0ZWQg YW5kIGJvdW5kCisuRHYgSENJCitzb2NrZXQuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBh biBlcnJvciBoYXMgb2NjdXJyZWQuCisuUHAKK1RoZQorLkZuIGJ0X2RldmNsb3NlCitjbG9zZXMg cGFzc2VkCisuRHYgSENJCitzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0 aAorLlhyIGJ0X2Rldm9wZW4gMyAuCisuUHAKK1RoZQorLkZuIGJ0X2RldnNlbmQKK2Z1bmN0aW9u IHNlbmRzIEJsdWV0b290aAorLkR2IEhDSQorY29tbWFuZCB3aXRoIHRoZSBnaXZlbgorLkZhIG9w Y29kZQordG8gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5l ZCB3aXRoCisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZQorLkZhIG9wY29kZQorcGFyYW1ldGVyIGlz IGV4cHBlY3RlZCB0byBiZSBpbiB0aGUgaG9zdCBieXRlIG9yZGVyLgorVGhlCisuRmEgcGFyYW0K K2FuZAorLkZhIHBsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBjb21tYW5kIHBhcmFtZXRlcnMuCitU aGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkKKy5EdiBIQ0kKK2Zp bHRlciBvbiB0aGUgcHJvdmlkZWQgc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJu cyAwIG9uIHN1Y2Nlc3MsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAorVGhlCisu Rm4gYnRfZGV2cmVjdgorZnVuY3Rpb24gcmVjZWl2ZXMgb25lIEJsdWV0b290aAorLkR2IEhDSQor cGFja2V0IGZyb20gdGhlIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5lZCB3aXRo CisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZSBwYWNrZXQgaXMgcGxhY2VkIGludG8gdGhlIHByb3Zp ZGVkIGJ1ZmZlcgorLkZhIGJ1Zgorb2Ygc2l6ZQorLkZhIHNpemUgLgorVGhlCisuRmEgdG8KK3Bh cmFtZXRlciBzcGVjaWZpZXMgcmVjZWl2ZSB0aW1lb3V0IGluIHNlY29uZHMuCitUaGUKKy5GbiBi dF9kZXZyZWN2CitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkKKy5EdiBIQ0kKK2ZpbHRlciBvbiB0 aGUgcHJvdmlkZWQgc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0b3RhbCBu dW1iZXIgb2YgYnl0ZXMgcmVjZXZpZWQsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5Q cAorVGhlCisuRm4gYnRfZGV2cmVxCitmdW5jdGlvbiBtYWtlcyBCbHVldG9vdGgKKy5EdiBIQ0kK K3JlcXVlc3QgdG8gdGhlIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRhaW5lZCB3aXRo CisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZSBmdW5jdGlvbiB3aWxsIHNlbmQgdGhlIHNwZWNpZmll ZCBjb21tYW5kIGFuZCB3aWxsIHdhaXQgZm9yIHRoZSBzcGVjaWZpZWQKK2V2ZW50LAorb3IgdGlt ZW91dAorLkZhIHRvCitzZWNvbmRzIHRvIG9jY3VyLgorVGhlCisuVnQgYnRfZGV2cmVxCitzdHJ1 Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQK K3N0cnVjdCBidF9kZXZyZXEKK3sKKyAgICAgICAgdWludDE2X3QgICAgICAgIG9wY29kZTsKKyAg ICAgICAgdWludDhfdCAgICAgICAgIGV2ZW50OworICAgICAgICB2b2lkICAgICAgICAgICAgKmNw YXJhbTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGNsZW47CisgICAgICAgIHZvaWQgICAgICAg ICAgICAqcnBhcmFtOworICAgICAgICBzaXplX3QgICAgICAgICAgcmxlbjsKK307CisuRWQKKy5Q cAorVGhlCisuRmEgb3Bjb2RlCitmaWVsZCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgYW5kIGlzIGV4 cGVjdGVkIHRvIGJlIGluIHRoZSBob3N0IGJ5dGUgb3JkZXIuCitUaGUKKy5GYSBjcGFyYW0KK2Fu ZAorLkZhIGNsZW4KK2ZpZWxkcyBzcGVjaWZ5IGNvbW1hbmQgcGFyYW1ldGVycyBkYXRhIGFuZCBj b21tYW5kIHBhcmFtZXRlcnMgZGF0YSBzaXplCityZXNwZWN0aXZlbHkuCitUaGUKKy5GYSBldmVu dAorZmllbGQgc3BlY2lmaWVzIHdoaWNoIEJsdWV0b290aAorLkR2IEhDSQorZXZlbnQgSUQgdGhl IGZ1bmN0aW9uIHNob3VsZCB3YWl0IGZvciwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8g emVyby4KK1RoZQorLkR2IEhDSQorQ29tbWFuZCBDb21wbGV0ZSBhbmQgQ29tbWFuZCBTdGF0dXMg ZXZlbnRzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCitUaGUKKy5GYSBycGFyYW0KK2FuZAorLkZh IHJsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBidWZmZXIgYW5kIGJ1ZmZlciBzaXplIHJlc3BlY3Rp dmVseSB3aGVyZSByZXR1cm4KK3BhcmFtZXRlcnMgc2hvdWxkIGJlIHBsYWNlZC4KK1RoZQorLkZu IGJ0X2RldnJlcQorZnVuY3Rpb24gdGVtcG9yYXJpbHkgbW9kaWZpZXMgZmlsdGVyIG9uIHRoZSBw cm92aWRlZAorLkR2IEhDSQorc29ja2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAw IG9uIHN1Y2Nlc3MsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorLlBwCitUaGUKKy5GbiBi dF9kZXZmaWx0ZXIKK2NvbnRyb2xzIHRoZSBsb2NhbAorLkR2IEhDSQorZmlsdGVyIGFzc29jaWF0 ZWQgd2l0aCB0aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5Y ciBidF9kZXZvcGVuIDMgLgorRmlsdGVyaW5nIGNhbiBiZSBkb25lIG9uIHBhY2tldCB0eXBlcywg aS5lLgorLkR2IEFDTCAsCisuRHYgU0NPIG9yCisuRHYgSENJCitldmVudCBwYWNrZXRzLCBhbmQs IGluIGFkZGl0aW9uLCBvbgorLkR2IEhDSQorZXZlbnQgSURzLgorQmVmb3JlIGFwcGx5aW5nCisu RmEgbmV3CitmaWx0ZXIgKGlmIHByb3ZpZGVkKSB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gb2J0 YWluIGN1cnJlbnQgZmlsdGVyCitmcm9tIHRoZSBzb2NrZXQKKy5GYSBzCithbmQgcGxhY2UgaXQg aW50byB0aGUKKy5GYSBvbGQKK3BhcmFtZXRlciAoaWYgcHJvdmlkZWQpLgorVGhlIGZ1bmN0aW9u IHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAor VGhlCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgLAorLkZuIGJ0X2RldmZpbHRlcl9wa3RfY2xy IAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF90c3QKK2Z1bmN0aW9ucyBjYW4gYmUgdXNlZCB0 byBtb2RpZnkgYW5kIHRlc3QKKy5EdiBIQ0kKK2ZpbHRlcgorLkZhIGZpbHRlciAuCitUaGUKKy5G YSB0eXBlCitwYXJhbWV0ZXIgc3BlY2lmaWVzCisuRHYgSENJCitwYWNrZXQgdHlwZS4KKy5QcAor VGhlCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9zZXQgLAorLkZuIGJ0X2RldmZpbHRlcl9ldnRfY2xy IAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF90c3QKK2Z1bmN0aW9ucyBjYW4gYmUgdXNlZCB0 byBtb2RpZnkgYW5kIHRlc3QKKy5EdiBIQ0kKK2V2ZW50IGZpbHRlcgorLkZhIGZpbHRlciAuCitU aGUKKy5GYSBldmVudAorcGFyYW1ldGVyIHNwZWNpZmllcworLkR2IEhDSQorZXZlbnQgSUQuCisu UHAKK1RoZQorLkZuIGJ0X2RldmlucXVpcnkKK2Z1bmN0aW9uIHBlcmZvcm1zIEJsdWV0b290aCBp bnF1aXJ5LgorVGhlCisuRmEgZGV2bmFtZQorcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBsb2Nh bCBCbHVldG9vdGggZGV2aWNlIHNob3VsZCBwZXJmb3JtIGFuIGlucXVpcnkuCitJZiBub3Qgc2Vj aWZpZWQsIGkuZS4KKy5EdiBOVUxMICwKK3RoZW4gZmlyc3QgYXZhaWxhYmxlIGRldmljZSB3aWxs IGJlIHVzZWQuCitUaGUKKy5GYSBsZW5ndGgKK3BhcmFtZXRlcnMgc3BlY2lmaWVzIHRoZSB0b3Rh bCBsZW5ndGggb2YgYW4gaW5xdWlyeSBpbiBzZWNvbmRzLgorSWYgbm90IHNwZWNpZmllZCwgaS5l LiAwLCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4KK1RoZQorLkZhIG51bV9yc3AKK3BhcmFt ZXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZXNwb25zZXMgdGhhdCBjYW4gYmUgcmVjZWl2 ZWQgYmVmb3JlCit0aGUgaW5xdWlyeSBpcyBoYWx0ZWQuCitJZiBub3Qgc3BlY2lmaWVkLCBpLmUu IDAsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgorVGhlCisuRmEgaWkKK3BhcmFtZXRlciBz cGVjaWZpZXMgd2hlcmUgdG8gcGxhY2UgaW5xdWlyeSByZXN1bHRzLgorT24gc3VjY2VzcywgdGhl IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRvdGFsIG51bWJlciBvZiBpbnF1aXJ5IHJlc3VsdHMsCit3 aWxsIGFsbG9jYXRlLAordXNpbmcKKy5YciBjYWxsb2MgMyAsCitidWZmZXIgdG8gc3RvcmUgYWxs IHRoZSBpbnF1aXJ5IHJlc3VsdHMgYW5kCit3aWxsIHJldHVybiBwb2ludGVyIHRvIHRoZSBhbGxv Y2F0ZWQgYnVmZmVyIGluIHRoZQorLkZhIGlpCitwYXJhbWV0ZXIuCitJdCBpcyB1cCB0byB0aGUg Y2FsbGVyIG9mIHRoZSBmdW5jdGlvbiB0byBkaXNwb3NlIG9mIHRoZSBidWZmZXIgdXNpbmcKKy5Y ciBmcmVlIDMKK2NhbGwuCitUaGUgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBhbiBlcnJvciBoYXMg b2NjdXJyZWQuCitUaGUKKy5WdCBidF9kZXZpbnF1aXJ5CitzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBh cyBmb2xsb3dzCisuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKK3N0cnVjdCBidF9kZXZpbnF1 aXJ5IHsKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsKKyAgICAgICAgdWludDhfdCAg ICAgICAgIHBzY2FuX3JlcF9tb2RlOworICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5fcGVy aW9kX21vZGU7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBkZXZfY2xhc3NbM107CisgICAgICAg IHVpbnQxNl90ICAgICAgICBjbG9ja19vZmZzZXQ7CisgICAgICAgIGludDhfdCAgICAgICAgICBy c3NpOworICAgICAgICB1aW50OF90ICAgICAgICAgZGF0YVsyNDBdOworfTsKKy5FZAorLlBwCitU aGUKIC5GbiBiZGFkZHJfc2FtZSAsCiAuRm4gYmRhZGRyX2FueQogYW5kCkBAIC00NDQsNiArNzE4 LDYgQEAKIC5TaCBBVVRIT1JTCiAuQW4gTWFrc2ltIFlldm1lbmtpbiBBcSBtX2V2bWVua2luQHlh aG9vLmNvbQogLlNoIEJVR1MKLVRoZXNlIGZ1bmN0aW9ucyB1c2Ugc3RhdGljIGRhdGEgc3RvcmFn ZTsKK1NvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIHVzZSBzdGF0aWMgZGF0YSBzdG9yYWdlOwogaWYg dGhlIGRhdGEgaXMgbmVlZGVkIGZvciBmdXR1cmUgdXNlLCBpdCBzaG91bGQgYmUKIGNvcGllZCBi ZWZvcmUgYW55IHN1YnNlcXVlbnQgY2FsbHMgb3ZlcndyaXRlIGl0LgpJbmRleDogYmx1ZXRvb3Ro LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gYmx1ZXRvb3RoLmgJKHJldmlzaW9uIDE5MTMyOSkKKysrIGJsdWV0 b290aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8c3lzL2Vu ZGlhbi5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K KyNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8ZXJy bm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPG5l dGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2hjaS5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2Js dWV0b290aC9pbmNsdWRlL25nX2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3Ro L2luY2x1ZGUvbmdfYnRzb2NrZXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAKIF9fQkVHSU5fREVD TFMKIApAQCAtMTI5LDggKzEzMSw0OCBAQAogCXVpbnQ4X3QJCV9wYWRkaW5nWzIwXTsJLyogbGVh dmUgc3BhY2UgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgKi8KIH07CiAKK3N0cnVjdCBidF9kZXZyZXEK K3sKKwl1aW50MTZfdAlvcGNvZGU7CisJdWludDhfdAkJZXZlbnQ7CisJdm9pZAkJKmNwYXJhbTsK KwlzaXplX3QJCWNsZW47CisJdm9pZAkJKnJwYXJhbTsKKwlzaXplX3QJCXJsZW47Cit9OworCitz dHJ1Y3QgYnRfZGV2ZmlsdGVyIHsKKwliaXRzdHJfdAliaXRfZGVjbChwYWNrZXRfbWFzaywgOCk7 CisJYml0c3RyX3QJYml0X2RlY2woZXZlbnRfbWFzaywgMjU2KTsKK307CisKK3N0cnVjdCBidF9k ZXZpbnF1aXJ5IHsKKwliZGFkZHJfdCAgICAgICAgYmRhZGRyOworCXVpbnQ4X3QgICAgICAgICBw c2Nhbl9yZXBfbW9kZTsKKwl1aW50OF90ICAgICAgICAgcHNjYW5fcGVyaW9kX21vZGU7CisJdWlu dDhfdCAgICAgICAgIGRldl9jbGFzc1szXTsKKwl1aW50MTZfdCAgICAgICAgY2xvY2tfb2Zmc2V0 OworCWludDhfdCAgICAgICAgICByc3NpOworCXVpbnQ4X3QgICAgICAgICBkYXRhWzI0MF07Cit9 OworCiB0eXBlZGVmIGludAkoYnRfZGV2ZW51bV9jYl90KShpbnQsIHN0cnVjdCBidF9kZXZpbmZv IGNvbnN0ICosIHZvaWQgKik7CiAKK2ludAkJYnRfZGV2b3BlbiAoY2hhciBjb25zdCAqZGV2bmFt ZSk7CitpbnQJCWJ0X2RldmNsb3NlKGludCBzKTsKK2ludAkJYnRfZGV2c2VuZCAoaW50IHMsIHVp bnQxNl90IG9wY29kZSwgdm9pZCAqcGFyYW0sIHNpemVfdCBwbGVuKTsKK3NzaXplX3QJCWJ0X2Rl dnJlY3YgKGludCBzLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB0aW1lX3QgdG8pOworaW50CQli dF9kZXZyZXEgIChpbnQgcywgc3RydWN0IGJ0X2RldnJlcSAqciwgdGltZV90IHRvKTsKK2ludAkJ YnRfZGV2ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpuZXcsCisJCQkg ICAgIHN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCk7Cit2b2lkCQlidF9kZXZmaWx0ZXJfcGt0X3Nl dChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlwZSk7Cit2b2lkCQlidF9k ZXZmaWx0ZXJfcGt0X2NscihzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgdHlw ZSk7CitpbnQJCWJ0X2RldmZpbHRlcl9wa3RfdHN0KHN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3Qg KmZpbHRlciwgdWludDhfdCB0eXBlKTsKK3ZvaWQJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KHN0cnVj dCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCk7Cit2b2lkCQlidF9kZXZmaWx0 ZXJfZXZ0X2NscihzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0ZXIsIHVpbnQ4X3QgZXZlbnQpOwor aW50CQlidF9kZXZmaWx0ZXJfZXZ0X3RzdChzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGNvbnN0ICpmaWx0 ZXIsIHVpbnQ4X3QgZXZlbnQpOworaW50CQlidF9kZXZpbnF1aXJ5KGNoYXIgY29uc3QgKmRldm5h bWUsIHRpbWVfdCBsZW5ndGgsIGludCBudW1fcnNwLAorCQkJICAgICAgc3RydWN0IGJ0X2Rldmlu cXVpcnkgKippaSk7CiBpbnQJCWJ0X2RldmluZm8gKHN0cnVjdCBidF9kZXZpbmZvICpkaSk7CiBp bnQJCWJ0X2RldmVudW0gKGJ0X2RldmVudW1fY2JfdCAqY2IsIHZvaWQgKmFyZyk7CiAKSW5kZXg6 IE1ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAxOTEzMjkpCisrKyBN YWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTkgQEAKIE1MSU5LUys9CWJsdWV0 b290aC4zIGJ0X2RldmluZm8uMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZW51bS4zCiAK K01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2Rldm9wZW4uMworTUxJTktTKz0JYmx1ZXRvb3RoLjMg YnRfZGV2Y2xvc2UuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2c2VuZC4zCitNTElOS1Mr PQlibHVldG9vdGguMyBidF9kZXZyZXEuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2Zmls dGVyLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9wa3Rfc2V0LjMKK01MSU5L Uys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9wa3RfY2xyLjMKK01MSU5LUys9CWJsdWV0b290 aC4zIGJ0X2RldmZpbHRlcl9wa3RfdHN0LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZp bHRlcl9ldnRfc2V0LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9ldnRfY2xy LjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldmZpbHRlcl9ldnRfdHN0LjMKK01MSU5LUys9 CWJsdWV0b290aC4zIGJ0X2RldmlucXVpcnkuMworCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFk ZHJfc2FtZS4zCiBNTElOS1MrPQlibHVldG9vdGguMyBiZGFkZHJfYW55LjMKIE1MSU5LUys9CWJs dWV0b290aC4zIGJkYWRkcl9jb3B5LjMK --0016364ed650356495046813930a-- From owner-freebsd-bluetooth@FreeBSD.ORG Tue Apr 21 22:18:49 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 BA34E106564A for ; Tue, 21 Apr 2009 22:18:49 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp02.one2one.net (smtp02.one2one.net [149.254.192.174]) by mx1.freebsd.org (Postfix) with ESMTP id 4E5668FC1A for ; Tue, 21 Apr 2009 22:18:49 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by localhost.t-mobile.co.uk with esmtp (Exim 4.50) id 1LwOIe-0006Jj-Dx; Tue, 21 Apr 2009 23:18:44 +0100 Received: from localhost.t-mobile.co.uk ([127.0.0.1]) by localhost (smtpbeckt01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24150-05; Tue, 21 Apr 2009 23:18:43 +0100 (BST) Received: from [10.214.201.207] (helo=rya-online.net) by localhost.t-mobile.co.uk with smtp (Exim 4.50) id 1LwOIZ-0006Jd-Hz; Tue, 21 Apr 2009 23:18:43 +0100 Received: (nullmailer pid 820 invoked by uid 1000); Tue, 21 Apr 2009 22:17:34 -0000 Date: Tue, 21 Apr 2009 23:17:34 +0100 (BST) To: Maksim Yevmenkin In-Reply-To: References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Message-Id: <1240352254.082638.416.nullmailer@galant.ukfsn.org> From: Iain Hibbert X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on localhost.t-mobile.co.uk); SAEximRunCond expanded to false 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: Tue, 21 Apr 2009 22:18:50 -0000 On Tue, 21 Apr 2009, Maksim Yevmenkin wrote: > the revised diff is attached. please review. Its all looking good, though some small tuneups still occurring :) in bt_devsend() you might also want to check for "plen > UINT8_MAX"? for bt_devrecv() should there also be a method for not timing out? I can see that being used to wait for any packet which could be some time. (bt_devreq() does not need that I think?) In bt_devreq() you used buf[320] is that truly enough? I didn't check that part of the radio specification dedicated to baseband packet size but the Broadcom BCM2045B device in my laptop claims to have max_acl_size of 1017.. Also, I think rlen and rparam can be empty in bt_devreq(), is that intentional and what does it mean? and finally some language improvements in the manpage below iain +.Fn bt_devopen +function opens Bluetooth device with the given ^a +.Fa devname +and returns connected and bound ^a +.Dv HCI +socket. ^handle +The function returns -1 if an error has occurred. +.Pp +The +.Fn bt_devclose +closes passed ^the +.Dv HCI +socket ^handle +.Fa s , +previously obtained with +.Xr bt_devopen 3 . +.Pp +The +.Fn bt_devsend +function sends Bluetooth ^a +.Dv HCI +command with the given +.Fa opcode +to the provided socket +.Fa s , +previously obtained with +.Xr bt_devopen 3 . +The +.Fa opcode +parameter is exppected to be in the host byte order. +The +.Fa param +and +.Fa plen +parameters specify command parameters. +The +.Fn bt_devsend +function does not modify ^the +.Dv HCI +filter on the provided socket +.Fa s . +The function returns 0 on success, +or -1 if an error occurred. +.Pp +The +.Fn bt_devrecv +function receives one Bluetooth +.Dv HCI +packet from the socket +.Fa s , +previously obtained with +.Xr bt_devopen 3 . +The packet is placed into the provided buffer +.Fa buf +of size +.Fa size . +The +.Fa to +parameter specifies receive timeout in seconds. +The +.Fn bt_devrecv +function does not modify ^the +.Dv HCI +filter on the provided socket +.Fa s . +The function returns total number of bytes recevied, +or -1 if an error occurred. +.Pp +The +.Fn bt_devreq +function makes Bluetooth ^a +.Dv HCI +request to the socket +.Fa s , +previously obtained with +.Xr bt_devopen 3 . +The function will send the specified command and will wait for the specified +event, +or timeout +.Fa to +seconds to occur. +The +.Vt bt_devreq +structure is defined as follows +.Bd -literal -offset indent +struct bt_devreq +{ + uint16_t opcode; + uint8_t event; + void *cparam; + size_t clen; + void *rparam; + size_t rlen; +}; +.Ed +.Pp +The +.Fa opcode +field specifies the command and is expected to be in the host byte order. +The +.Fa cparam +and +.Fa clen +fields specify command parameters data and command parameters data size +respectively. +The +.Fa event +field specifies which Bluetooth +.Dv HCI +event ID the function should wait for, otherwise it should be set to zero. +The +.Dv HCI +Command Complete and Command Status events are enabled by default. +The +.Fa rparam +and +.Fa rlen +parameters specify buffer and buffer size respectively where return +parameters should be placed. +The +.Fn bt_devreq +function temporarily modifies filter on the provided +.Dv HCI +socket +.Fa s . +The function returns 0 on success, or -1 if an error occurred. +.Pp +The +.Fn bt_devfilter +controls the local +.Dv HCI +filter associated with the socket +.Fa s , +previously obtained with +.Xr bt_devopen 3 . +Filtering can be done on packet types, i.e. +.Dv ACL , +.Dv SCO or +.Dv HCI +event packets, and, in addition, on ^command and +.Dv HCI +event IDs. +Before applying ^the +.Fa new +filter (if provided) the function will try to obtain current filter ^the +from the socket +.Fa s +and place it into the +.Fa old +parameter (if provided). +The function returns 0 on success, or -1 if an error occurred. +.Pp +The +.Fn bt_devfilter_pkt_set , +.Fn bt_devfilter_pkt_clr +and +.Fn bt_devfilter_pkt_tst +functions can be used to modify and test ^the +.Dv HCI +filter +.Fa filter . +The +.Fa type +parameter specifies +.Dv HCI +packet type. +.Pp +The +.Fn bt_devfilter_evt_set , +.Fn bt_devfilter_evt_clr +and +.Fn bt_devfilter_evt_tst +functions can be used to modify and test ^the +.Dv HCI +event filter +.Fa filter . +The +.Fa event +parameter specifies +.Dv HCI +event ID. +.Pp +The +.Fn bt_devinquiry +function performs Bluetooth inquiry. +The +.Fa devname +parameter specifies which local Bluetooth device should perform an inquiry. +If not secified, i.e. +.Dv NULL , +then first available device will be used. +The +.Fa length +parameters specifies the total length of an inquiry in seconds. +If not specified, i.e. 0, default value will be used. +The +.Fa num_rsp +parameter specifies the number of responses that can be received before +the inquiry is halted. +If not specified, i.e. 0, default value will be used. +The +.Fa ii +parameter specifies where to place inquiry results. +On success, the function will return total number of inquiry results, +will allocate, +using +.Xr calloc 3 , +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 using +.Xr free 3 +call. +The function returns -1 if an error has occurred. +The +.Vt bt_devinquiry +structure is defined as follows +.Bd -literal -offset indent +struct bt_devinquiry { + bdaddr_t bdaddr; + uint8_t pscan_rep_mode; + uint8_t pscan_period_mode; + uint8_t dev_class[3]; + uint16_t clock_offset; + int8_t rssi; + uint8_t data[240]; +}; +.Ed +.Pp +The .Fn bdaddr_same , .Fn bdaddr_any and @@ -444,6 +718,6 @@ .Sh AUTHORS .An Maksim Yevmenkin Aq m_evmenkin@yahoo.com .Sh BUGS -These functions use static data storage; +Some of those functions use static data storage; if the data is needed for future use, it should be copied before any subsequent calls overwrite it. Index: bluetooth.h From owner-freebsd-bluetooth@FreeBSD.ORG Tue Apr 21 23:51:10 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 C2471106566C for ; Tue, 21 Apr 2009 23:51:10 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from yx-out-2324.google.com (yx-out-2324.google.com [74.125.44.28]) by mx1.freebsd.org (Postfix) with ESMTP id 4CC098FC13 for ; Tue, 21 Apr 2009 23:51:10 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by yx-out-2324.google.com with SMTP id 8so608444yxb.13 for ; Tue, 21 Apr 2009 16:51:09 -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=sntOwon7YIzujgsAziqHnBchGeGxF8VRWrdOO7H/qxo=; b=vYIoSrJZeCpS0uQ74bN31IroGmqAIAP2+iQs+8gDO4Z1Sn+me4xuPKogbnNMCnj5MC YRBACysJPEbNEh/a7Ex1lZic/lBWwCG00NhSGAMRcMZFxcPA68jAiP+YEUJ3OeRyiBy/ NzdUkm4FHU95+eA8uhtfQF1Ql2EUfXQEcEdhw= 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=Iiam9g9cBDfU6Q5zYLsaZp1rPPkWSaYwutQDxs3KdoFpFo4BkUMOYRyIKoenjLVY1E Cy6f3Cma5rndVWViMjZeY0xrYKFfYi0s1YKpZxDV7tfoRTvM0MBADBmre1ugfFzGnYcJ jqXc6JcWwFQrUObzF8dzjKtTaNr47u1mi8vX8= MIME-Version: 1.0 Received: by 10.90.115.13 with SMTP id n13mr9517520agc.16.1240357869639; Tue, 21 Apr 2009 16:51:09 -0700 (PDT) In-Reply-To: <1240352254.082638.416.nullmailer@galant.ukfsn.org> References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> <1240352254.082638.416.nullmailer@galant.ukfsn.org> Date: Tue, 21 Apr 2009 16:51:09 -0700 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=0016363104f536d91f04681952b1 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: Tue, 21 Apr 2009 23:51:11 -0000 --0016363104f536d91f04681952b1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Tue, Apr 21, 2009 at 3:17 PM, Iain Hibbert wrote: > On Tue, 21 Apr 2009, Maksim Yevmenkin wrote: > >> the revised diff is attached. please review. > > Its all looking good, though some small tuneups still occurring :) thanks for the review. > in bt_devsend() you might also want to check for "plen > UINT8_MAX"? done > for bt_devrecv() should there also be a method for not timing out? I can > see that being used to wait for any packet which could be some time. > (bt_devreq() does not need that I think?) done > In bt_devreq() you used buf[320] is that truly enough? I didn't check that > part of the radio specification dedicated to baseband packet size but the > Broadcom BCM2045B device in my laptop claims to have max_acl_size of 1017.. yes, but we are not dealing with acl packets in bt_devreq() only commands and event that have up to 255 bytes of payload. > Also, I think rlen and rparam can be empty in bt_devreq(), is that > intentional and what does it mean? if someone wants to just send request and does not really care about return parameters. > and finally some language improvements in the manpage below fixed. please see attached revised patch. thanks, max --0016363104f536d91f04681952b1 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_ftt91jr80 SW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhjaS5jCShyZXZpc2lvbiAxOTEzNjMpCisrKyBo Y2kuYwkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDUwNSBAQAogICogJEZyZWVCU0QkCiAg Ki8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsdWV0b290aC5oPgorI2luY2x1 ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4K ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI3VuZGVmCU1JTgor I2RlZmluZQlNSU4oYSwgYikJKCgoYSkgPCAoYikpPyAoYSkgOiAoYikpCisKK3N0YXRpYyBpbnQg ICAgYnRfZGV2YW55X2NiKGludCBzLCBzdHJ1Y3QgYnRfZGV2aW5mbyBjb25zdCAqZGksIHZvaWQg KnhkZXZuYW1lKTsKIHN0YXRpYyBjaGFyICogYnRfZGV2Mm5vZGUgKGNoYXIgY29uc3QgKmRldm5h bWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4pOwogCiBpbnQKK2J0X2Rldm9wZW4oY2hhciBj b25zdCAqZGV2bmFtZSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaGNpCWhhOworCWJkYWRkcl90CQli YTsKKwlpbnQJCQlzOworCisJaWYgKGRldm5hbWUgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZB TDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0KCZoYSwgMCwgc2l6ZW9mKGhhKSk7CisJ aGEuaGNpX2xlbiA9IHNpemVvZihoYSk7CisJaGEuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsK KworCWlmIChidF9hdG9uKGRldm5hbWUsICZiYSkpIHsKKwkJaWYgKCFidF9kZXZuYW1lKGhhLmhj aV9ub2RlLCAmYmEpKQorCQkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmIChidF9kZXYybm9kZShk ZXZuYW1lLCBoYS5oY2lfbm9kZSwKKwkJCQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVMTCkg eworCQllcnJubyA9IEVOWElPOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlzID0gc29ja2V0KFBG X0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9QUk9UT19IQ0kpOworCWlmIChzIDwgMCkK KwkJcmV0dXJuICgtMSk7CisKKwlpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwg c2l6ZW9mKGhhKSkgPCAwIHx8CisJICAgIGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAm aGEsIHNpemVvZihoYSkpIDwgMCkgeworCQljbG9zZShzKTsKKwkJcmV0dXJuICgtMSk7CisJfQor CisJcmV0dXJuIChzKTsKK30KKworaW50CitidF9kZXZjbG9zZShpbnQgcykKK3sKKwlyZXR1cm4g KGNsb3NlKHMpKTsKK30KKworaW50CitidF9kZXZzZW5kKGludCBzLCB1aW50MTZfdCBvcGNvZGUs IHZvaWQgKnBhcmFtLCBzaXplX3QgcGxlbikKK3sKKwluZ19oY2lfY21kX3BrdF90CWg7CisJc3Ry dWN0IGlvdmVjCQlpdlsyXTsKKwlpbnQJCQlpdm47CisKKwlpZiAoKHBsZW4gPT0gMCAmJiBwYXJh bSAhPSBOVUxMKSB8fAorCSAgICAocGxlbiA+IDAgJiYgcGFyYW0gPT0gTlVMTCkgfHwKKwkgICAg cGxlbiA+IFVJTlQ4X01BWCkgeyAKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOwor CX0KKworCWl2WzBdLmlvdl9iYXNlID0gJmg7CisJaXZbMF0uaW92X2xlbiA9IHNpemVvZihoKTsK Kwlpdm4gPSAxOworCisJaC50eXBlID0gTkdfSENJX0NNRF9QS1Q7CisJaC5vcGNvZGUgPSBodG9s ZTE2KG9wY29kZSk7CisJaWYgKHBsZW4gPiAwKSB7CisJCWgubGVuZ3RoID0gcGxlbjsKKworCQlp dlsxXS5pb3ZfYmFzZSA9IHBhcmFtOworCQlpdlsxXS5pb3ZfbGVuID0gcGxlbjsKKwkJaXZuID0g MjsKKwl9IGVsc2UKKwkJaC5sZW5ndGggPSAwOworCisJd2hpbGUgKHdyaXRldihzLCBpdiwgaXZu KSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCWNv bnRpbnVlOworCisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3NzaXpl X3QKK2J0X2RldnJlY3YoaW50IHMsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHRpbWVfdCB0bykK K3sKKwlzc2l6ZV90CW47CisKKwlpZiAoYnVmID09IE5VTEwgfHwgc2l6ZSA9PSAwKSB7CisJCWVy cm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpZiAodG8gPj0gMCkgeworCQlm ZF9zZXQJCXJmZDsKKwkJc3RydWN0IHRpbWV2YWwJdHY7CisKKwkJRkRfWkVSTygmcmZkKTsKKwkJ RkRfU0VUKHMsICZyZmQpOworCisJCXR2LnR2X3NlYyA9IHRvOworCQl0di50dl91c2VjID0gMDsK KworCQl3aGlsZSAoKG4gPSBzZWxlY3QocyArIDEsICZyZmQsIE5VTEwsIE5VTEwsICZ0dikpIDwg MCkgeworCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKwkJCQljb250 aW51ZTsKKworCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQlpZiAobiA9PSAwKSB7CisJCQllcnJu byA9IEVUSU1FRE9VVDsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJYXNzZXJ0KEZEX0lTU0VU KHMsICZyZmQpKTsKKwl9CisKKwl3aGlsZSAoKG4gPSByZWFkKHMsIGJ1Ziwgc2l6ZSkpIDwgMCkg eworCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7 CisKKwkJcmV0dXJuICgtMSk7CisJfQorCisJc3dpdGNoICgqKCh1aW50OF90ICopIGJ1ZikpIHsK KwljYXNlIE5HX0hDSV9DTURfUEtUOiB7CisJCW5nX2hjaV9jbWRfcGt0X3QJKmggPSAobmdfaGNp X2NtZF9wa3RfdCAqKSBidWY7CisKKwkJaWYgKG4gPj0gc2l6ZW9mKCpoKSAmJiBuID09IChzaXpl b2YoKmgpICsgaC0+bGVuZ3RoKSkKKwkJCXJldHVybiAobik7CisJCX0gYnJlYWs7CisKKwljYXNl IE5HX0hDSV9BQ0xfREFUQV9QS1Q6IHsKKwkJbmdfaGNpX2FjbGRhdGFfcGt0X3QJKmggPSAobmdf aGNpX2FjbGRhdGFfcGt0X3QgKikgYnVmOworCisJCWlmIChuID49IHNpemVvZigqaCkgJiYgbiA9 PSAoc2l6ZW9mKCpoKSArIGxlMTZ0b2goaC0+bGVuZ3RoKSkpCisJCQlyZXR1cm4gKG4pOworCQl9 IGJyZWFrOworCisJY2FzZSBOR19IQ0lfU0NPX0RBVEFfUEtUOiB7CisJCW5nX2hjaV9zY29kYXRh X3BrdF90CSpoID0gKG5nX2hjaV9zY29kYXRhX3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBz aXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigqaCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChu KTsKKwkJfSBicmVhazsKKworCWNhc2UgTkdfSENJX0VWRU5UX1BLVDogeworCQluZ19oY2lfZXZl bnRfcGt0X3QJKmggPSAobmdfaGNpX2V2ZW50X3BrdF90ICopIGJ1ZjsKKworCQlpZiAobiA+PSBz aXplb2YoKmgpICYmIG4gPT0gKHNpemVvZigqaCkgKyBoLT5sZW5ndGgpKQorCQkJcmV0dXJuIChu KTsKKwkJfSBicmVhazsKKwl9CisKKwllcnJubyA9IEVJTzsKKwlyZXR1cm4gKC0xKTsKK30KKwor aW50CitidF9kZXZyZXEoaW50IHMsIHN0cnVjdCBidF9kZXZyZXEgKnIsIHRpbWVfdCB0bykKK3sK Kwl1aW50OF90CQkJCWJ1ZlszMjBdOyAvKiBtb3JlIHRoYW4gZW5vdWdoICovCisJbmdfaGNpX2V2 ZW50X3BrdF90CQkqZSA9IChuZ19oY2lfZXZlbnRfcGt0X3QgKikgYnVmOworCW5nX2hjaV9jb21t YW5kX2NvbXBsX2VwCQkqY2MgPSAobmdfaGNpX2NvbW1hbmRfY29tcGxfZXAgKikoZSsxKTsKKwlu Z19oY2lfY29tbWFuZF9zdGF0dXNfZXAJKmNzID0gKG5nX2hjaV9jb21tYW5kX3N0YXR1c19lcCop KGUrMSk7CisJc3RydWN0IGJ0X2RldmZpbHRlcgkJb2xkLCBuZXc7CisJdGltZV90CQkJCXRfZW5k OworCXVpbnQxNl90CQkJb3Bjb2RlOworCXNzaXplX3QJCQkJbjsKKwlpbnQJCQkJZXJyb3I7CisK KwlpZiAocyA8IDAgfHwgciA9PSBOVUxMIHx8IHRvIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsK KwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYgKChyLT5ybGVuID09IDAgJiYgci0+cnBhcmFtICE9 IE5VTEwpIHx8CisJICAgIChyLT5ybGVuID4gMCAmJiByLT5ycGFyYW0gPT0gTlVMTCkpIHsKKwkJ ZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCW1lbXNldCgmbmV3LCAwLCBz aXplb2YobmV3KSk7CisJYnRfZGV2ZmlsdGVyX3BrdF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX1BL VCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJm5ldywgTkdfSENJX0VWRU5UX0NPTU1BTkRfQ09N UEwpOworCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcsIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NU QVRVUyk7CisJaWYgKHItPmV2ZW50ICE9IDApCisJCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZuZXcs IHItPmV2ZW50KTsKKworCWlmIChidF9kZXZmaWx0ZXIocywgJm5ldywgJm9sZCkgPCAwKQorCQly ZXR1cm4gKC0xKTsKKworCWVycm9yID0gMDsKKworCW4gPSBidF9kZXZzZW5kKHMsIHItPm9wY29k ZSwgci0+Y3BhcmFtLCByLT5jbGVuKTsKKwlpZiAobiA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK KwkJZ290byBvdXQ7CQorCX0KKworCW9wY29kZSA9IGh0b2xlMTYoci0+b3Bjb2RlKTsKKwl0X2Vu ZCA9IHRpbWUoTlVMTCkgKyB0bzsKKworCWRvIHsKKwkJdG8gPSB0X2VuZCAtIHRpbWUoTlVMTCk7 CisJCWlmICh0byA8IDApCisJCQl0byA9IDA7CisKKwkJbiA9IGJ0X2RldnJlY3YocywgYnVmLCBz aXplb2YoYnVmKSwgdG8pOworCQlpZiAobiA8IDApIHsKKwkJCWVycm9yID0gZXJybm87CisJCQln b3RvIG91dDsKKwkJfQorCisJCWlmIChlLT50eXBlICE9IE5HX0hDSV9FVkVOVF9QS1QpIHsKKwkJ CWVycm9yID0gRUlPOworCQkJZ290byBvdXQ7CisJCX0KKworCQluIC09IHNpemVvZigqZSk7CisK KwkJc3dpdGNoIChlLT5ldmVudCkgeworCQljYXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX0NPTVBM OgorCQkJaWYgKGNjLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQkJbiAtPSBzaXplb2YoKmNjKTsK KworCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJCW1lbWNw eShyLT5ycGFyYW0sIGNjICsgMSwgci0+cmxlbik7CisJCQkJfQorCisJCQkJZ290byBvdXQ7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE5HX0hDSV9FVkVOVF9DT01NQU5EX1NUQVRVUzoKKwkJ CWlmIChjcy0+b3Bjb2RlID09IG9wY29kZSkgeworCQkJCWlmIChyLT5ldmVudCAhPSBOR19IQ0lf RVZFTlRfQ09NTUFORF9TVEFUVVMpIHsKKwkJCQkJaWYgKGNzLT5zdGF0dXMgIT0gMCkgeworCQkJ CQkJZXJyb3IgPSBFSU87CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJ CQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJCXItPnJsZW4gPSBuOworCQkJCQkJbWVtY3B5 KHItPnJwYXJhbSwgY3MsIHItPnJsZW4pOworCQkJCQl9CisKKwkJCQkJZ290byBvdXQ7CisJCQkJ fQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWlmIChlLT5ldmVudCA9PSByLT5l dmVudCkgeworCQkJCWlmIChyLT5ybGVuID49IG4pIHsKKwkJCQkJci0+cmxlbiA9IG47CisJCQkJ CW1lbWNweShyLT5ycGFyYW0sIGUgKyAxLCByLT5ybGVuKTsKKwkJCQl9CisKKwkJCQlnb3RvIG91 dDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodG8gPiAwKTsKKworCWVycm9yID0g RVRJTUVET1VUOworb3V0OgorCWJ0X2RldmZpbHRlcihzLCAmb2xkLCBOVUxMKTsKKworCWlmIChl cnJvciAhPSAwKSB7CisJCWVycm5vID0gZXJyb3I7CisJCXJldHVybiAoLTEpOworCX0KKworCXJl dHVybiAoMCk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVyKGludCBzLCBzdHJ1Y3QgYnRfZGV2Zmls dGVyIGNvbnN0ICpuZXcsIHN0cnVjdCBidF9kZXZmaWx0ZXIgKm9sZCkKK3sKKwlzdHJ1Y3Qgbmdf YnRzb2NrZXRfaGNpX3Jhd19maWx0ZXIJZjsKKwlzb2NrbGVuX3QJCQkJbGVuOworCisJaWYgKG5l dyA9PSBOVUxMICYmIG9sZCA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4g KC0xKTsKKwl9CisKKwlpZiAob2xkICE9IE5VTEwpIHsKKwkJbGVuID0gc2l6ZW9mKGYpOworCQlp ZiAoZ2V0c29ja29wdChzLCBTT0xfSENJX1JBVywgU09fSENJX1JBV19GSUxURVIsICZmLCAmbGVu KSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKworCQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkp OworCQltZW1jcHkob2xkLT5wYWNrZXRfbWFzaywgJmYucGFja2V0X21hc2ssCisJCQlNSU4oc2l6 ZW9mKG9sZC0+cGFja2V0X21hc2spLCBzaXplb2YoZi5wYWNrZXRfbWFzaykpKTsKKwkJbWVtY3B5 KG9sZC0+ZXZlbnRfbWFzaywgJmYuZXZlbnRfbWFzaywKKwkJCU1JTihzaXplb2Yob2xkLT5ldmVu dF9tYXNrKSwgc2l6ZW9mKGYucGFja2V0X21hc2spKSk7CisJfQorCisJaWYgKG5ldyAhPSBOVUxM KSB7CisJCW1lbXNldCgmZiwgMCwgc2l6ZW9mKGYpKTsKKwkJbWVtY3B5KCZmLnBhY2tldF9tYXNr LCBuZXctPnBhY2tldF9tYXNrLAorCQkJTUlOKHNpemVvZihmLnBhY2tldF9tYXNrKSwgc2l6ZW9m KG5ldy0+ZXZlbnRfbWFzaykpKTsKKwkJbWVtY3B5KCZmLmV2ZW50X21hc2ssIG5ldy0+ZXZlbnRf bWFzaywKKwkJCU1JTihzaXplb2YoZi5ldmVudF9tYXNrKSwgc2l6ZW9mKG5ldy0+ZXZlbnRfbWFz aykpKTsKKworCQlsZW4gPSBzaXplb2YoZik7CisJCWlmIChzZXRzb2Nrb3B0KHMsIFNPTF9IQ0lf UkFXLCBTT19IQ0lfUkFXX0ZJTFRFUiwgJmYsIGxlbikgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJ fQorCisJcmV0dXJuICgwKTsKK30KKwordm9pZAorYnRfZGV2ZmlsdGVyX3BrdF9zZXQoc3RydWN0 IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IHR5cGUpCit7CisJYml0X3NldChmaWx0ZXIt PnBhY2tldF9tYXNrLCB0eXBlIC0gMSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9wa3RfY2xy KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCB0eXBlKQoreworCWJpdF9jbGVh cihmaWx0ZXItPnBhY2tldF9tYXNrLCB0eXBlIC0gMSk7Cit9CisKK2ludAorYnRfZGV2ZmlsdGVy X3BrdF90c3Qoc3RydWN0IGJ0X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IHR5cGUp Cit7CisJcmV0dXJuIChiaXRfdGVzdChmaWx0ZXItPnBhY2tldF9tYXNrLCB0eXBlIC0gMSkpOwor fQorCit2b2lkCitidF9kZXZmaWx0ZXJfZXZ0X3NldChzdHJ1Y3QgYnRfZGV2ZmlsdGVyICpmaWx0 ZXIsIHVpbnQ4X3QgZXZlbnQpCit7CisJYml0X3NldChmaWx0ZXItPmV2ZW50X21hc2ssIGV2ZW50 IC0gMSk7Cit9CisKK3ZvaWQKK2J0X2RldmZpbHRlcl9ldnRfY2xyKHN0cnVjdCBidF9kZXZmaWx0 ZXIgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwliaXRfY2xlYXIoZmlsdGVyLT5ldmVudF9t YXNrLCBldmVudCAtIDEpOworfQorCitpbnQKK2J0X2RldmZpbHRlcl9ldnRfdHN0KHN0cnVjdCBi dF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRlciwgdWludDhfdCBldmVudCkKK3sKKwlyZXR1cm4gKGJp dF90ZXN0KGZpbHRlci0+ZXZlbnRfbWFzaywgZXZlbnQgLSAxKSk7Cit9CisKK2ludAorYnRfZGV2 aW5xdWlyeShjaGFyIGNvbnN0ICpkZXZuYW1lLCB0aW1lX3QgbGVuZ3RoLCBpbnQgbnVtX3JzcCwK KwkJc3RydWN0IGJ0X2RldmlucXVpcnkgKippaSkKK3sKKwl1aW50OF90CQkJCWJ1ZlszMjBdOwor CWNoYXIJCQkJX2Rldm5hbWVbSENJX0RFVk5BTUVfU0laRV07CisJc3RydWN0IGJ0X2RldmZpbHRl cgkJZjsKKwluZ19oY2lfaW5xdWlyeV9jcAkJKmNwID0gKG5nX2hjaV9pbnF1aXJ5X2NwICopIGJ1 ZjsKKwluZ19oY2lfZXZlbnRfcGt0X3QJCSplID0gKG5nX2hjaV9ldmVudF9wa3RfdCAqKSBidWY7 CisJbmdfaGNpX2lucXVpcnlfcmVzdWx0X2VwCSplcCA9IChuZ19oY2lfaW5xdWlyeV9yZXN1bHRf ZXAgKikoZSsxKTsKKwluZ19oY2lfaW5xdWlyeV9yZXNwb25zZQkJKmlyOworCXN0cnVjdCBidF9k ZXZpbnF1aXJ5CQkqaTsKKwlpbnQJCQkJcywgbjsKKwl0aW1lX3QJCQkJdG87CisKKwlpZiAoaWkg PT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaWYg KGRldm5hbWUgPT0gTlVMTCkgeworCQltZW1zZXQoX2Rldm5hbWUsIDAsIHNpemVvZihfZGV2bmFt ZSkpOworCQlkZXZuYW1lID0gX2Rldm5hbWU7CisKKwkJbiA9IGJ0X2RldmVudW0oYnRfZGV2YW55 X2NiLCBfZGV2bmFtZSk7CisJCWlmIChuIDw9IDApIHsKKwkJCWlmIChuID09IDApCisJCQkJKmlp ID0gTlVMTDsKKworCQkJcmV0dXJuIChuKTsKKwkJfQorCX0KKworCXMgPSBidF9kZXZvcGVuKGRl dm5hbWUpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAoYnRfZGV2ZmlsdGVy KHMsIE5VTEwsICZmKSA8IDApIHsKKwkJYnRfZGV2Y2xvc2Uocyk7CisJCXJldHVybiAoLTEpOwor CX0KKworCWJ0X2RldmZpbHRlcl9ldnRfc2V0KCZmLCBOR19IQ0lfRVZFTlRfSU5RVUlSWV9DT01Q TCk7CisJYnRfZGV2ZmlsdGVyX2V2dF9zZXQoJmYsIE5HX0hDSV9FVkVOVF9JTlFVSVJZX1JFU1VM VCk7CisKKwlpZiAoYnRfZGV2ZmlsdGVyKHMsICZmLCBOVUxMKSA8IDApIHsKKwkJYnRfZGV2Y2xv c2Uocyk7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qIEFsd2F5cyB1c2UgR0lBQyBMQVAgKi8K KwljcC0+bGFwWzBdID0gMHgzMzsKKwljcC0+bGFwWzFdID0gMHg4YjsKKwljcC0+bGFwWzJdID0g MHg5ZTsKKworCS8qIENhbGN1bGF0ZSBpbnF1aXJlIGxlbmd0aCBpbiAxLjI4IHNlY29uZCB1bml0 cyAqLworCXRvID0gKHRpbWVfdCkgKChkb3VibGUpIGxlbmd0aCAvIDEuMjgpOworCWlmICh0byA8 PSAwKQorCQljcC0+aW5xdWlyeV9sZW5ndGggPSA0OwkJLyogNS4xMiBzZWNvbmRzICovCisJZWxz ZSBpZiAodG8gPiAyNTQpCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IDI1NTsJLyogMzI2LjQwIHNl Y29uZHMgKi8KKwllbHNlCisJCWNwLT5pbnF1aXJ5X2xlbmd0aCA9IHRvICsgMTsKKworCXRvID0g KHRpbWVfdCkoKGRvdWJsZSkgY3AtPmlucXVpcnlfbGVuZ3RoICogMS4yOCkgKyAxOworCisJaWYg KG51bV9yc3AgPD0gMCB8fCBudW1fcnNwID4gMjU1KQorCQludW1fcnNwID0gODsKKwljcC0+bnVt X3Jlc3BvbnNlcyA9ICh1aW50OF90KSBudW1fcnNwOworCisJaSA9ICppaSA9IGNhbGxvYyhudW1f cnNwLCBzaXplb2Yoc3RydWN0IGJ0X2RldmlucXVpcnkpKTsKKwlpZiAoaSA9PSBOVUxMKSB7CisJ CWJ0X2RldmNsb3NlKHMpOworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQor CisJaWYgKGJ0X2RldnNlbmQocywKKwkJTkdfSENJX09QQ09ERShOR19IQ0lfT0dGX0xJTktfQ09O VFJPTCwgTkdfSENJX09DRl9JTlFVSVJZKSwKKwkJCWNwLCBzaXplb2YoKmNwKSkgPCAwKSB7CisJ CWZyZWUoaSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKK3dhaXRf Zm9yX21vcmU6CisKKwluID0gYnRfZGV2cmVjdihzLCBidWYsIHNpemVvZihidWYpLCB0byk7CisJ aWYgKG4gPCAwKSB7CisJCWZyZWUoaSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQlyZXR1cm4gKC0x KTsKKwl9CisKKwlpZiAobiA8IHNpemVvZihuZ19oY2lfZXZlbnRfcGt0X3QpKSB7CisJCWZyZWUo aSk7CisJCWJ0X2RldmNsb3NlKHMpOworCQllcnJubyA9IEVJTzsKKwkJcmV0dXJuICgtMSk7CisJ fQorCisJc3dpdGNoIChlLT5ldmVudCkgeworCWNhc2UgTkdfSENJX0VWRU5UX0lOUVVJUllfQ09N UEw6CisJCWJyZWFrOworCisJY2FzZSBOR19IQ0lfRVZFTlRfSU5RVUlSWV9SRVNVTFQ6CisJCWly ID0gKG5nX2hjaV9pbnF1aXJ5X3Jlc3BvbnNlICopKGVwICsgMSk7CisKKwkJZm9yIChuID0gMDsg biA8IE1JTihlcC0+bnVtX3Jlc3BvbnNlcywgbnVtX3JzcCk7IG4gKyspIHsKKwkJCWJkYWRkcl9j b3B5KCZpLT5iZGFkZHIsICZpci0+YmRhZGRyKTsKKwkJCWktPnBzY2FuX3JlcF9tb2RlID0gaXIt PnBhZ2Vfc2Nhbl9yZXBfbW9kZTsKKwkJCWktPnBzY2FuX3BlcmlvZF9tb2RlID0gaXItPnBhZ2Vf c2Nhbl9wZXJpb2RfbW9kZTsKKwkJCW1lbWNweShpLT5kZXZfY2xhc3MsIGlyLT51Y2xhc3MsIHNp emVvZihpLT5kZXZfY2xhc3MpKTsKKwkJCWktPmNsb2NrX29mZnNldCA9IGxlMTZ0b2goaXItPmNs b2NrX29mZnNldCk7CisKKwkJCWlyICsrOworCQkJaSArKzsKKwkJCW51bV9yc3AgLS07CisJCX0K KwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWRlZmF1bHQ6CisJCWdvdG8gd2FpdF9mb3JfbW9yZTsK KwkJLyogTk9UIFJFQUNIRUQgKi8KKwl9CisKKwlidF9kZXZjbG9zZShzKTsKKwkJCisJcmV0dXJu IChpIC0gKmlpKTsKK30KKworaW50CiBidF9kZXZpbmZvKHN0cnVjdCBidF9kZXZpbmZvICpkaSkK IHsKIAl1bmlvbiB7CkBAIC01Myw2ICs1NDMsNyBAQAogCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNp X3Jhd19ub2RlX2RlYnVnCQlyODsKIAl9CQkJCQkJcnA7CiAJc3RydWN0IHNvY2thZGRyX2hjaQkJ CQloYTsKKwlzb2NrbGVuX3QJCQkJCWhhbGVuOwogCWludAkJCQkJCXMsIHJ2YWw7CiAKIAlpZiAo ZGkgPT0gTlVMTCkgewpAQCAtNjAsMjcgKzU1MSwxNCBAQAogCQlyZXR1cm4gKC0xKTsKIAl9CiAK LQltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKLQloYS5oY2lfbGVuID0gc2l6ZW9mKGhhKTsK LQloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwotCi0JaWYgKGJ0X2F0b24oZGktPmRldm5h bWUsICZycC5yMS5iZGFkZHIpKSB7Ci0JCWlmICghYnRfZGV2bmFtZShoYS5oY2lfbm9kZSwgJnJw LnIxLmJkYWRkcikpCi0JCQlyZXR1cm4gKC0xKTsKLQl9IGVsc2UgaWYgKGJ0X2RldjJub2RlKGRp LT5kZXZuYW1lLCBoYS5oY2lfbm9kZSwKLQkJCQkJc2l6ZW9mKGhhLmhjaV9ub2RlKSkgPT0gTlVM TCkgewotCQllcnJubyA9IEVOWElPOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlzID0gc29ja2V0 KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9QUk9UT19IQ0kpOworCXMgPSBidF9k ZXZvcGVuKGRpLT5kZXZuYW1lKTsKIAlpZiAocyA8IDApCiAJCXJldHVybiAoLTEpOwogCiAJcnZh bCA9IC0xOwogCi0JaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZiho YSkpIDwgMCB8fAotCSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBzaXpl b2YoaGEpKSA8IDApCisJaGFsZW4gPSBzaXplb2YoaGEpOworCWlmIChnZXRzb2NrbmFtZShzLCAo c3RydWN0IHNvY2thZGRyICopICZoYSwgJmhhbGVuKSA8IDApCiAJCWdvdG8gYmFkOwogCXN0cmxj cHkoZGktPmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2YoZGktPmRldm5hbWUpKTsKIApAQCAt MTM4LDcgKzYxNiw3IEBACiAKIAlydmFsID0gMDsKIGJhZDoKLQljbG9zZShzKTsKKwlidF9kZXZj bG9zZShzKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0yMDUsNiArNjgzLDEzIEBACiAJcmV0 dXJuIChjb3VudCk7CiB9CiAKK3N0YXRpYyBpbnQKK2J0X2RldmFueV9jYihpbnQgcywgc3RydWN0 IGJ0X2RldmluZm8gY29uc3QgKmRpLCB2b2lkICp4ZGV2bmFtZSkKK3sKKwlzdHJsY3B5KChjaGFy ICopIHhkZXZuYW1lLCBkaS0+ZGV2bmFtZSwgSENJX0RFVk5BTUVfU0laRSk7CisJcmV0dXJuICgx KTsKK30KKwogc3RhdGljIGNoYXIgKgogYnRfZGV2Mm5vZGUoY2hhciBjb25zdCAqZGV2bmFtZSwg Y2hhciAqbm9kZW5hbWUsIGludCBubmxlbikKIHsKSW5kZXg6IGJsdWV0b290aC4zCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGJsdWV0b290aC4zCShyZXZpc2lvbiAxOTEzNjMpCisrKyBibHVldG9vdGguMwkod29y a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogLlwiICRJZDogYmx1ZXRvb3RoLjMsdiAxLjUg MjAwMy8wNS8yMCAyMzowNDozMCBtYXggRXhwICQKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEZl YnJ1YXJ5IDEzLCAyMDA5CisuRGQgQXByaWwgOSwgMjAwOQogLkR0IEJMVUVUT09USCAzCiAuT3MK IC5TaCBOQU1FCkBAIC00MSw2ICs0MSwyMyBAQAogLk5tIGJ0X2VuZHByb3RvZW50ICwKIC5ObSBi dF9hdG9uICwKIC5ObSBidF9udG9hICwKKy5ObSBidF9kZXZhZGRyICwKKy5ObSBidF9kZXZuYW1l ICwKKy5ObSBidF9kZXZpbmZvICwKKy5ObSBidF9kZXZlbnVtICwKKy5ObSBidF9kZXZvcGVuICwK Ky5ObSBidF9kZXZjbG9zZSAsCisuTm0gYnRfZGV2c2VuZCAsCisuTm0gYnRfZGV2cmVjdiAsCisu Tm0gYnRfZGV2cmVxICwKKy5ObSBidF9kZXZmaWx0ZXIgLAorLk5tIGJ0X2RldmZpbHRlcl9wa3Rf c2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfcGt0X2NsciAsCisuTm0gYnRfZGV2ZmlsdGVyX3BrdF90 c3QgLAorLk5tIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5ObSBidF9kZXZmaWx0ZXJfZXZ0X2Ns ciAsCisuTm0gYnRfZGV2ZmlsdGVyX2V2dF90c3QgLAorLk5tIGJ0X2RldmlucXVpcnkgLAogLk5t IGJkYWRkcl9zYW1lICwKIC5ObSBiZGFkZHJfYW55ICwKIC5ObSBiZGFkZHJfY29weQpAQCAtODQs NiArMTAxLDMyIEBACiAuRnQgaW50CiAuRm4gYnRfZGV2ZW51bSAiYnRfZGV2ZW51bV9jYl90ICpj YiIgInZvaWQgKmFyZyIKIC5GdCBpbnQKKy5GbiBidF9kZXZvcGVuICJjaGFyIGNvbnN0ICpkZXZu YW1lIgorLkZ0IGludAorLkZuIGJ0X2RldmNsb3NlICJpbnQgcyIKKy5GdCBpbnQKKy5GbiBidF9k ZXZzZW5kICJpbnQgcyIgInVpbnQxNl90IG9wY29kZSIgInZvaWQgKnBhcmFtIiAic2l6ZV90IHBs ZW4iCisuRnQgc3NpemVfdAorLkZuIGJ0X2RldnJlY3YgImludCBzIiAidm9pZCAqYnVmIiAic2l6 ZV90IHNpemUiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4gYnRfZGV2cmVxICJpbnQgcyIgInN0 cnVjdCBidF9kZXZyZXEgKnIiICJ0aW1lX3QgdG8iCisuRnQgaW50CisuRm4gYnRfZGV2ZmlsdGVy ICJpbnQgcyIgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKm5ldyIgInN0cnVjdCBidF9kZXZm aWx0ZXIgKm9sZCIKKy5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgInN0cnVjdCBi dF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlwZSIKKy5GdCB2b2lkCisuRm4gYnRfZGV2 ZmlsdGVyX3BrdF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciIgInVpbnQ4X3QgdHlw ZSIKKy5GdCBpbnQKKy5GbiBidF9kZXZmaWx0ZXJfcGt0X3RzdCAic3RydWN0IGJ0X2RldmZpbHRl ciBjb25zdCAqZmlsdGVyIiAidWludDhfdCB0eXBlIgorLkZ0IHZvaWQKKy5GbiBidF9kZXZmaWx0 ZXJfZXZ0X3NldCAic3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyIiAidWludDhfdCBldmVudCIK Ky5GdCB2b2lkCisuRm4gYnRfZGV2ZmlsdGVyX2V2dF9jbHQgInN0cnVjdCBidF9kZXZmaWx0ZXIg KmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisuRnQgaW50CisuRm4gYnRfZGV2ZmlsdGVyX2V2dF90 c3QgInN0cnVjdCBidF9kZXZmaWx0ZXIgY29uc3QgKmZpbHRlciIgInVpbnQ4X3QgZXZlbnQiCisu RnQgaW50CisuRm4gYnRfZGV2aW5xdWlyeSAiY2hhciBjb25zdCAqZGV2bmFtZSIgInRpbWVfdCBs ZW5ndGgiICJpbnQgbnVtX3JzcCIgInN0cnVjdCBidF9kZXZpbnF1aXJ5ICoqaWkiCisuRnQgaW50 CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAiY29uc3QgYmRhZGRyX3QgKmIi CiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRyX3QgKmEiCkBAIC0zMTEsNiAr MzU0LDI0MCBAQAogb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAuUHAKIFRoZQorLkZuIGJ0 X2Rldm9wZW4KK2Z1bmN0aW9uIG9wZW5zIGEgQmx1ZXRvb3RoIGRldmljZSB3aXRoIHRoZSBnaXZl bgorLkZhIGRldm5hbWUKK2FuZCByZXR1cm5zIGEgY29ubmVjdGVkIGFuZCBib3VuZAorLkR2IEhD SQorc29ja2V0IGhhbmRsZS4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGFuIGVycm9yIGhh cyBvY2N1cnJlZC4KKy5QcAorVGhlCisuRm4gYnRfZGV2Y2xvc2UKK2Nsb3NlcyB0aGUgcGFzc2Vk CisuRHYgSENJCitzb2NrZXQgaGFuZGxlCisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdp dGgKKy5YciBidF9kZXZvcGVuIDMgLgorLlBwCitUaGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlv biBzZW5kcyBhIEJsdWV0b290aAorLkR2IEhDSQorY29tbWFuZCB3aXRoIHRoZSBnaXZlbgorLkZh IG9wY29kZQordG8gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLAorcHJldmlvdXNseSBvYnRh aW5lZCB3aXRoCisuWHIgYnRfZGV2b3BlbiAzIC4KK1RoZQorLkZhIG9wY29kZQorcGFyYW1ldGVy IGlzIGV4cHBlY3RlZCB0byBiZSBpbiB0aGUgaG9zdCBieXRlIG9yZGVyLgorVGhlCisuRmEgcGFy YW0KK2FuZAorLkZhIHBsZW4KK3BhcmFtZXRlcnMgc3BlY2lmeSBjb21tYW5kIHBhcmFtZXRlcnMu CitUaGUKKy5GbiBidF9kZXZzZW5kCitmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgdGhlCisuRHYg SENJCitmaWx0ZXIgb24gdGhlIHByb3ZpZGVkIHNvY2tldAorLkZhIHMgLgorVGhlIGZ1bmN0aW9u IHJldHVybnMgMCBvbiBzdWNjZXNzLAorb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAK K1RoZQorLkZuIGJ0X2RldnJlY3YKK2Z1bmN0aW9uIHJlY2VpdmVzIG9uZSBCbHVldG9vdGgKKy5E diBIQ0kKK3BhY2tldCBmcm9tIHRoZSBzb2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWlu ZWQgd2l0aAorLlhyIGJ0X2Rldm9wZW4gMyAuCitUaGUgcGFja2V0IGlzIHBsYWNlZCBpbnRvIHRo ZSBwcm92aWRlZCBidWZmZXIKKy5GYSBidWYKK29mIHNpemUKKy5GYSBzaXplIC4KK1RoZQorLkZh IHRvCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHJlY2VpdmUgdGltZW91dCBpbiBzZWNvbmRzLgorSW5m aW5pdGUgdGltZW91dCBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhc3NpbmcgbmVnYXRpdmUgdmFsdWUg aW4gdGhlCisuRmEgdG8KK3BhcmFtZXRlci4KK1RoZQorLkZuIGJ0X2RldnJlY3YKK2Z1bmN0aW9u IGRvZXMgbm90IG1vZGlmeSB0aGUKKy5EdiBIQ0kKK2ZpbHRlciBvbiB0aGUgcHJvdmlkZWQgc29j a2V0CisuRmEgcyAuCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0b3RhbCBudW1iZXIgb2YgYnl0ZXMg cmVjZXZpZWQsCitvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QcAorVGhlCisuRm4gYnRf ZGV2cmVxCitmdW5jdGlvbiBtYWtlcyBhIEJsdWV0b290aAorLkR2IEhDSQorcmVxdWVzdCB0byB0 aGUgc29ja2V0CisuRmEgcyAsCitwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKy5YciBidF9kZXZv cGVuIDMgLgorVGhlIGZ1bmN0aW9uIHdpbGwgc2VuZCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgYW5k IHdpbGwgd2FpdCBmb3IgdGhlIHNwZWNpZmllZAorZXZlbnQsCitvciB0aW1lb3V0CisuRmEgdG8K K3NlY29uZHMgdG8gb2NjdXIuCitUaGUKKy5WdCBidF9kZXZyZXEKK3N0cnVjdHVyZSBpcyBkZWZp bmVkIGFzIGZvbGxvd3MKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAorc3RydWN0IGJ0X2Rl dnJlcQoreworICAgICAgICB1aW50MTZfdCAgICAgICAgb3Bjb2RlOworICAgICAgICB1aW50OF90 ICAgICAgICAgZXZlbnQ7CisgICAgICAgIHZvaWQgICAgICAgICAgICAqY3BhcmFtOworICAgICAg ICBzaXplX3QgICAgICAgICAgY2xlbjsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpycGFyYW07 CisgICAgICAgIHNpemVfdCAgICAgICAgICBybGVuOworfTsKKy5FZAorLlBwCitUaGUKKy5GYSBv cGNvZGUKK2ZpZWxkIHNwZWNpZmllcyB0aGUgY29tbWFuZCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUg aW4gdGhlIGhvc3QgYnl0ZSBvcmRlci4KK1RoZQorLkZhIGNwYXJhbQorYW5kCisuRmEgY2xlbgor ZmllbGRzIHNwZWNpZnkgY29tbWFuZCBwYXJhbWV0ZXJzIGRhdGEgYW5kIGNvbW1hbmQgcGFyYW1l dGVycyBkYXRhIHNpemUKK3Jlc3BlY3RpdmVseS4KK1RoZQorLkZhIGV2ZW50CitmaWVsZCBzcGVj aWZpZXMgd2hpY2ggQmx1ZXRvb3RoCisuRHYgSENJCitldmVudCBJRCB0aGUgZnVuY3Rpb24gc2hv dWxkIHdhaXQgZm9yLCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorVGhlCisu RHYgSENJCitDb21tYW5kIENvbXBsZXRlIGFuZCBDb21tYW5kIFN0YXR1cyBldmVudHMgYXJlIGVu YWJsZWQgYnkgZGVmYXVsdC4KK1RoZQorLkZhIHJwYXJhbQorYW5kCisuRmEgcmxlbgorcGFyYW1l dGVycyBzcGVjaWZ5IGJ1ZmZlciBhbmQgYnVmZmVyIHNpemUgcmVzcGVjdGl2ZWx5IHdoZXJlIHJl dHVybgorcGFyYW1ldGVycyBzaG91bGQgYmUgcGxhY2VkLgorVGhlCisuRm4gYnRfZGV2cmVxCitm dW5jdGlvbiB0ZW1wb3JhcmlseSBtb2RpZmllcyBmaWx0ZXIgb24gdGhlIHByb3ZpZGVkCisuRHYg SENJCitzb2NrZXQKKy5GYSBzIC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vzcywg b3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisuUHAKK1RoZQorLkZuIGJ0X2RldmZpbHRlcgor Y29udHJvbHMgdGhlIGxvY2FsCisuRHYgSENJCitmaWx0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBz b2NrZXQKKy5GYSBzICwKK3ByZXZpb3VzbHkgb2J0YWluZWQgd2l0aAorLlhyIGJ0X2Rldm9wZW4g MyAuCitGaWx0ZXJpbmcgY2FuIGJlIGRvbmUgb24gcGFja2V0IHR5cGVzLCBpLmUuCisuRHYgQUNM ICwKKy5EdiBTQ08gb3IKKy5EdiBIQ0kgLAorY29tbWFuZCBhbmQgZXZlbnQgcGFja2V0cywgYW5k LCBpbiBhZGRpdGlvbiwgb24KKy5EdiBIQ0kKK2V2ZW50IElEcy4KK0JlZm9yZSBhcHBseWluZyB0 aGUKKy5GYSBuZXcKK2ZpbHRlciAoaWYgcHJvdmlkZWQpIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0 byBvYnRhaW4gdGhlIGN1cnJlbnQgZmlsdGVyCitmcm9tIHRoZSBzb2NrZXQKKy5GYSBzCithbmQg cGxhY2UgaXQgaW50byB0aGUKKy5GYSBvbGQKK3BhcmFtZXRlciAoaWYgcHJvdmlkZWQpLgorVGhl IGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJl ZC4KKy5QcAorVGhlCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF9zZXQgLAorLkZuIGJ0X2RldmZpbHRl cl9wa3RfY2xyIAorYW5kCisuRm4gYnRfZGV2ZmlsdGVyX3BrdF90c3QKK2Z1bmN0aW9ucyBjYW4g YmUgdXNlZCB0byBtb2RpZnkgYW5kIHRlc3QgdGhlCisuRHYgSENJCitmaWx0ZXIKKy5GYSBmaWx0 ZXIgLgorVGhlCisuRmEgdHlwZQorcGFyYW1ldGVyIHNwZWNpZmllcworLkR2IEhDSQorcGFja2V0 IHR5cGUuCisuUHAKK1RoZQorLkZuIGJ0X2RldmZpbHRlcl9ldnRfc2V0ICwKKy5GbiBidF9kZXZm aWx0ZXJfZXZ0X2NsciAKK2FuZAorLkZuIGJ0X2RldmZpbHRlcl9ldnRfdHN0CitmdW5jdGlvbnMg Y2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGFuZCB0ZXN0IHRoZQorLkR2IEhDSQorZXZlbnQgZmlsdGVy CisuRmEgZmlsdGVyIC4KK1RoZQorLkZhIGV2ZW50CitwYXJhbWV0ZXIgc3BlY2lmaWVzCisuRHYg SENJCitldmVudCBJRC4KKy5QcAorVGhlCisuRm4gYnRfZGV2aW5xdWlyeQorZnVuY3Rpb24gcGVy Zm9ybXMgQmx1ZXRvb3RoIGlucXVpcnkuCitUaGUKKy5GYSBkZXZuYW1lCitwYXJhbWV0ZXIgc3Bl Y2lmaWVzIHdoaWNoIGxvY2FsIEJsdWV0b290aCBkZXZpY2Ugc2hvdWxkIHBlcmZvcm0gYW4gaW5x dWlyeS4KK0lmIG5vdCBzZWNpZmllZCwgaS5lLgorLkR2IE5VTEwgLAordGhlbiBmaXJzdCBhdmFp bGFibGUgZGV2aWNlIHdpbGwgYmUgdXNlZC4KK1RoZQorLkZhIGxlbmd0aAorcGFyYW1ldGVycyBz cGVjaWZpZXMgdGhlIHRvdGFsIGxlbmd0aCBvZiBhbiBpbnF1aXJ5IGluIHNlY29uZHMuCitJZiBu b3Qgc3BlY2lmaWVkLCBpLmUuIDAsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgorVGhlCisu RmEgbnVtX3JzcAorcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlc3BvbnNlcyB0 aGF0IGNhbiBiZSByZWNlaXZlZCBiZWZvcmUKK3RoZSBpbnF1aXJ5IGlzIGhhbHRlZC4KK0lmIG5v dCBzcGVjaWZpZWQsIGkuZS4gMCwgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCitUaGUKKy5G YSBpaQorcGFyYW1ldGVyIHNwZWNpZmllcyB3aGVyZSB0byBwbGFjZSBpbnF1aXJ5IHJlc3VsdHMu CitPbiBzdWNjZXNzLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdG90YWwgbnVtYmVyIG9mIGlu cXVpcnkgcmVzdWx0cywKK3dpbGwgYWxsb2NhdGUsCit1c2luZworLlhyIGNhbGxvYyAzICwKK2J1 ZmZlciB0byBzdG9yZSBhbGwgdGhlIGlucXVpcnkgcmVzdWx0cyBhbmQKK3dpbGwgcmV0dXJuIHBv aW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIgaW4gdGhlCisuRmEgaWkKK3BhcmFtZXRlci4K K0l0IGlzIHVwIHRvIHRoZSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIHRvIGRpc3Bvc2Ugb2YgdGhl IGJ1ZmZlciB1c2luZworLlhyIGZyZWUgMworY2FsbC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIC0x IGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KK1RoZQorLlZ0IGJ0X2RldmlucXVpcnkKK3N0cnVj dHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3MKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAor c3RydWN0IGJ0X2RldmlucXVpcnkgeworICAgICAgICBiZGFkZHJfdCAgICAgICAgYmRhZGRyOwor ICAgICAgICB1aW50OF90ICAgICAgICAgcHNjYW5fcmVwX21vZGU7CisgICAgICAgIHVpbnQ4X3Qg ICAgICAgICBwc2Nhbl9wZXJpb2RfbW9kZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgIGRldl9j bGFzc1szXTsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGNsb2NrX29mZnNldDsKKyAgICAgICAg aW50OF90ICAgICAgICAgIHJzc2k7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICBkYXRhWzI0MF07 Cit9OworLkVkCisuUHAKK1RoZQogLkZuIGJkYWRkcl9zYW1lICwKIC5GbiBiZGFkZHJfYW55CiBh bmQKQEAgLTQ0NCw2ICs3MjEsNiBAQAogLlNoIEFVVEhPUlMKIC5BbiBNYWtzaW0gWWV2bWVua2lu IEFxIG1fZXZtZW5raW5AeWFob28uY29tCiAuU2ggQlVHUwotVGhlc2UgZnVuY3Rpb25zIHVzZSBz dGF0aWMgZGF0YSBzdG9yYWdlOworU29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgdXNlIHN0YXRpYyBk YXRhIHN0b3JhZ2U7CiBpZiB0aGUgZGF0YSBpcyBuZWVkZWQgZm9yIGZ1dHVyZSB1c2UsIGl0IHNo b3VsZCBiZQogY29waWVkIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBjYWxscyBvdmVyd3JpdGUgaXQu CkluZGV4OiBibHVldG9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBibHVldG9vdGguaAkocmV2aXNpb24g MTkxMzYzKQorKysgYmx1ZXRvb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAK ICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVk ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDxzeXMvdW4u aD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CkBAIC00Niw2ICs0Nyw3 IEBACiAjaW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfaGNpLmg+CiAjaW5j bHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfbDJjYXAuaD4KICNpbmNsdWRlIDxu ZXRncmFwaC9ibHVldG9vdGgvaW5jbHVkZS9uZ19idHNvY2tldC5oPgorI2luY2x1ZGUgPHRpbWUu aD4KIAogX19CRUdJTl9ERUNMUwogCkBAIC0xMjksOCArMTMxLDQ4IEBACiAJdWludDhfdAkJX3Bh ZGRpbmdbMjBdOwkvKiBsZWF2ZSBzcGFjZSBmb3IgZnV0dXJlIGFkZGl0aW9ucyAqLwogfTsKIAor c3RydWN0IGJ0X2RldnJlcQoreworCXVpbnQxNl90CW9wY29kZTsKKwl1aW50OF90CQlldmVudDsK Kwl2b2lkCQkqY3BhcmFtOworCXNpemVfdAkJY2xlbjsKKwl2b2lkCQkqcnBhcmFtOworCXNpemVf dAkJcmxlbjsKK307CisKK3N0cnVjdCBidF9kZXZmaWx0ZXIgeworCWJpdHN0cl90CWJpdF9kZWNs KHBhY2tldF9tYXNrLCA4KTsKKwliaXRzdHJfdAliaXRfZGVjbChldmVudF9tYXNrLCAyNTYpOwor fTsKKworc3RydWN0IGJ0X2RldmlucXVpcnkgeworCWJkYWRkcl90ICAgICAgICBiZGFkZHI7CisJ dWludDhfdCAgICAgICAgIHBzY2FuX3JlcF9tb2RlOworCXVpbnQ4X3QgICAgICAgICBwc2Nhbl9w ZXJpb2RfbW9kZTsKKwl1aW50OF90ICAgICAgICAgZGV2X2NsYXNzWzNdOworCXVpbnQxNl90ICAg ICAgICBjbG9ja19vZmZzZXQ7CisJaW50OF90ICAgICAgICAgIHJzc2k7CisJdWludDhfdCAgICAg ICAgIGRhdGFbMjQwXTsKK307CisKIHR5cGVkZWYgaW50CShidF9kZXZlbnVtX2NiX3QpKGludCwg c3RydWN0IGJ0X2RldmluZm8gY29uc3QgKiwgdm9pZCAqKTsKIAoraW50CQlidF9kZXZvcGVuIChj aGFyIGNvbnN0ICpkZXZuYW1lKTsKK2ludAkJYnRfZGV2Y2xvc2UoaW50IHMpOworaW50CQlidF9k ZXZzZW5kIChpbnQgcywgdWludDE2X3Qgb3Bjb2RlLCB2b2lkICpwYXJhbSwgc2l6ZV90IHBsZW4p Oworc3NpemVfdAkJYnRfZGV2cmVjdiAoaW50IHMsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHRp bWVfdCB0byk7CitpbnQJCWJ0X2RldnJlcSAgKGludCBzLCBzdHJ1Y3QgYnRfZGV2cmVxICpyLCB0 aW1lX3QgdG8pOworaW50CQlidF9kZXZmaWx0ZXIoaW50IHMsIHN0cnVjdCBidF9kZXZmaWx0ZXIg Y29uc3QgKm5ldywKKwkJCSAgICAgc3RydWN0IGJ0X2RldmZpbHRlciAqb2xkKTsKK3ZvaWQJCWJ0 X2RldmZpbHRlcl9wa3Rfc2V0KHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwgdWludDhfdCB0 eXBlKTsKK3ZvaWQJCWJ0X2RldmZpbHRlcl9wa3RfY2xyKHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZp bHRlciwgdWludDhfdCB0eXBlKTsKK2ludAkJYnRfZGV2ZmlsdGVyX3BrdF90c3Qoc3RydWN0IGJ0 X2RldmZpbHRlciBjb25zdCAqZmlsdGVyLCB1aW50OF90IHR5cGUpOwordm9pZAkJYnRfZGV2Zmls dGVyX2V2dF9zZXQoc3RydWN0IGJ0X2RldmZpbHRlciAqZmlsdGVyLCB1aW50OF90IGV2ZW50KTsK K3ZvaWQJCWJ0X2RldmZpbHRlcl9ldnRfY2xyKHN0cnVjdCBidF9kZXZmaWx0ZXIgKmZpbHRlciwg dWludDhfdCBldmVudCk7CitpbnQJCWJ0X2RldmZpbHRlcl9ldnRfdHN0KHN0cnVjdCBidF9kZXZm aWx0ZXIgY29uc3QgKmZpbHRlciwgdWludDhfdCBldmVudCk7CitpbnQJCWJ0X2RldmlucXVpcnko Y2hhciBjb25zdCAqZGV2bmFtZSwgdGltZV90IGxlbmd0aCwgaW50IG51bV9yc3AsCisJCQkgICAg ICBzdHJ1Y3QgYnRfZGV2aW5xdWlyeSAqKmlpKTsKIGludAkJYnRfZGV2aW5mbyAoc3RydWN0IGJ0 X2RldmluZm8gKmRpKTsKIGludAkJYnRfZGV2ZW51bSAoYnRfZGV2ZW51bV9jYl90ICpjYiwgdm9p ZCAqYXJnKTsKIApJbmRleDogTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTWFrZWZpbGUJKHJldmlz aW9uIDE5MTM2MykKKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxOSBA QAogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5mby4zCiBNTElOS1MrPQlibHVldG9vdGgu MyBidF9kZXZlbnVtLjMKIAorTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2b3Blbi4zCitNTElO S1MrPQlibHVldG9vdGguMyBidF9kZXZjbG9zZS4zCitNTElOS1MrPQlibHVldG9vdGguMyBidF9k ZXZzZW5kLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2RldnJlcS4zCitNTElOS1MrPQlibHVl dG9vdGguMyBidF9kZXZmaWx0ZXIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVy X3BrdF9zZXQuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX3BrdF9jbHIuMwor TUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX3BrdF90c3QuMworTUxJTktTKz0JYmx1 ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2dF9zZXQuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRf ZGV2ZmlsdGVyX2V2dF9jbHIuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2ZmlsdGVyX2V2 dF90c3QuMworTUxJTktTKz0JYmx1ZXRvb3RoLjMgYnRfZGV2aW5xdWlyeS4zCisKIE1MSU5LUys9 CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9h bnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRhZGRyX2NvcHkuMwo= --0016363104f536d91f04681952b1-- From owner-freebsd-bluetooth@FreeBSD.ORG Wed Apr 22 07:50:41 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 01F1A106566B for ; Wed, 22 Apr 2009 07:50:41 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from smtp02.one2one.net (smtp02.one2one.net [149.254.192.174]) by mx1.freebsd.org (Postfix) with ESMTP id B4E988FC16 for ; Wed, 22 Apr 2009 07:50:40 +0000 (UTC) (envelope-from plunky@rya-online.net) Received: from [127.0.0.1] (helo=localhost) by localhost.t-mobile.co.uk with esmtp (Exim 4.50) id 1LwXE3-0001Sb-Eu; Wed, 22 Apr 2009 08:50:35 +0100 Received: from localhost.t-mobile.co.uk ([127.0.0.1]) by localhost (smtpbeckt01 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 05597-01; Wed, 22 Apr 2009 08:50:35 +0100 (BST) Received: from [10.214.201.207] (helo=rya-online.net) by localhost.t-mobile.co.uk with smtp (Exim 4.50) id 1LwXE1-0001SW-RL; Wed, 22 Apr 2009 08:50:35 +0100 Received: (nullmailer pid 225 invoked by uid 1000); Wed, 22 Apr 2009 07:49:29 -0000 Date: Wed, 22 Apr 2009 08:49:29 +0100 (BST) To: Maksim Yevmenkin In-Reply-To: References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> <1240352254.082638.416.nullmailer@galant.ukfsn.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Message-Id: <1240386569.369073.696.nullmailer@galant.ukfsn.org> From: Iain Hibbert X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at example.com X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: plunky@rya-online.net X-SA-Exim-Scanned: No (on localhost.t-mobile.co.uk); SAEximRunCond expanded to false 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: Wed, 22 Apr 2009 07:50:41 -0000 On Tue, 21 Apr 2009, Maksim Yevmenkin wrote: > > In bt_devreq() you used buf[320] is that truly enough? I didn't check that > > part of the radio specification dedicated to baseband packet size but the > > Broadcom BCM2045B device in my laptop claims to have max_acl_size of 1017.. > > yes, but we are not dealing with acl packets in bt_devreq() only > commands and event that have up to 255 bytes of payload. Doh > please see attached revised patch. I've got no more comments here iain From owner-freebsd-bluetooth@FreeBSD.ORG Wed Apr 22 16:09:51 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 D2B941065675 for ; Wed, 22 Apr 2009 16:09:51 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from yx-out-2324.google.com (yx-out-2324.google.com [74.125.44.30]) by mx1.freebsd.org (Postfix) with ESMTP id 8A38E8FC13 for ; Wed, 22 Apr 2009 16:09:51 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by yx-out-2324.google.com with SMTP id 8so26337yxb.13 for ; Wed, 22 Apr 2009 09:09:50 -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 :content-transfer-encoding; bh=/PMNx/p25CZGifSSXng/bcOdoOrqdCFJ+9Eix1W6dDE=; b=Rufmh+3ikoB6PwNFMUJOJOShNfLrYxM1vVDcK63eNQp98E2zD/xci6KFICJpiFbjTy w23QqgHWnFQoYq00yFQ0vV2A8tSTwhrBqoNLWJszOKFWP2+VPIM0GsDDy4ay8fTgP0ew 32wtRziVF/MtdZeSBSLIj6x9JhbkjPHqsMGQc= 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:content-transfer-encoding; b=uQ0aVhW/cc5SzNB2YGsNBfCkgyXIMlUsYy+fUxAxtytIdkHl0A2BbF7CiMTemqKQca dWJjFnsMHTPFBDXSpeGI4gRI+RKAuFpsF40D+0w+nYkr06AIZd/tVtKXrjFzt/OC8/Js /fMEFntzwAlOo8ruKL2YrJpWhpfwybtsNLNsw= MIME-Version: 1.0 Received: by 10.90.98.13 with SMTP id v13mr2840693agb.0.1240416590756; Wed, 22 Apr 2009 09:09:50 -0700 (PDT) In-Reply-To: <1240386569.369073.696.nullmailer@galant.ukfsn.org> References: <1240311202.361300.1366.nullmailer@galant.ukfsn.org> <1240352254.082638.416.nullmailer@galant.ukfsn.org> <1240386569.369073.696.nullmailer@galant.ukfsn.org> Date: Wed, 22 Apr 2009 09:09:50 -0700 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: Wed, 22 Apr 2009 16:09:52 -0000 Iain & All, >> please see attached revised patch. > > I've got no more comments here thanks for the review. i committed it to -head. thanks, max