From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f50.google.com ([209.85.219.50]) by ewsd; Thu Jul 30 17:19:01 EDT 2020 Received: by mail-qv1-f50.google.com with SMTP id j10so6540692qvo.13 for <9front@9front.org>; Thu, 30 Jul 2020 14:18:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=JcoRVKIP+GLWdGpVo0tf/Dx60zFyVSGdVHlQ0kw7KQE=; b=JmnbnoiUZF9hwLndUsZEDkdNie9yfamMarMENMj4CL1KAxqgDA7LoVMABEkXIbgSoE nS/d4fNyWvwdIV/6AmYLcfQTJqihE6qZkpnrboeo1QCfute+6Bq0PvCr5+0Bs1+7bWQJ zGwAsNGOp9X9GVBspm7JTCGi34n/98z3ZxGCCV+MTQTKXk3dYAjIG1kl4MBuSmh6h0Fd IR1lAEEWlGln/W8mkvRTN8j1tzRrpfWu6FshujIKqwRwsFhqLf+EsaaAQXNQnJdxhSky YFPxyj7FQqzXI3Luz0bg4HKkshD4lvabTwVBWNwLZsaNs5rMCRpMYc7NXA04jJ5HGid3 DSSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=JcoRVKIP+GLWdGpVo0tf/Dx60zFyVSGdVHlQ0kw7KQE=; b=Liy5DWObqm6aHyE+QsoJjro63MEkJWYBGWfJu2KuBNRKX3dSfiUgPC31x1OlYONVao m/fSIjeKLfMp0Ibj4MkWx6+la2voMBlr38yn8p3M0w8pBxhrweT7zDQvpHt9sG52Zvk2 k+vg9bhW+egQeDZ2Z6ZbCq1EqqZNGOQakoVb5fnCUQJ7eW4vyuTbUBZFGwzRT/xWES5X 3qTNkcIL0nZJY4TAimTh6n5Ul/CZJ0pxNU7G+4a5e/FicbZJ/PJSJx2t+82/zKhbMmmi o+lGWfZSGQnFKP0hGxIciobckuz8WJCD68OJgUcD0+5fwcOkk0XtQmfMgApFtwNpvolF dFlg== X-Gm-Message-State: AOAM530UN3L/wg7y+Va3j47PLGeUhWcgmGmGBCPBkJVmaxcPeE0accpT CeXGPNgmMAgYLwg9LH8Pq7lAzUqElG9xanOhcwcU/tiS X-Google-Smtp-Source: ABdhPJxyt7zG/HVtmL25awhj3/+BMct6myGCl+H3TMw1p2gy3NwPY8kYZBsHW8Z0lT60IPHF8b8ES0qrYcEepFUkxd4= X-Received: by 2002:a0c:ea21:: with SMTP id t1mr1129629qvp.62.1596143938047; Thu, 30 Jul 2020 14:18:58 -0700 (PDT) MIME-Version: 1.0 From: Eli Cohen Date: Thu, 30 Jul 2020 14:18:47 -0700 Message-ID: Subject: CDC ACM nusb/serial driver To: 9front@9front.org Content-Type: multipart/mixed; boundary="00000000000070372105abaf3803" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: NoSQL package scripting content-driven backend --00000000000070372105abaf3803 Content-Type: text/plain; charset="UTF-8" I've cleaned up this driver to closely reflect the OpenBSD umodem driver and address the issue of changing serial.c in a cleaner way. cinap, we talked about having to support multiple serial interfaces on one device, from the looks of it the OpenBSD driver may actually *not* support this. this patch attempts to do so, but I have no such devices to test it with... the nusb/serial driver still needs work. I'm mounting 9p over the serial port and it's flaky, it eventually screws up. I also did this with an FTDI device and that was flaky too, before I made any changes. I'm not sure what's going on, in kprint I see 9p errors when it screws up... dropped data maybe...? the devices I'm working with, Arduino Megas, work pretty well with nusb/serial, both FTDI and with this patch CDC ACM devices, but like I said above, I have no other devices to test this with --00000000000070372105abaf3803 Content-Type: text/x-patch; charset="US-ASCII"; name="serial.patch" Content-Disposition: attachment; filename="serial.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kd9aq2dg0 ZGlmZiAtciAyM2JjMWQwZTJkZDIgc3lzL3NyYy9jbWQvbnVzYi9zZXJpYWwvY2RjLmMKLS0tIC9k ZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvc3lzL3NyYy9jbWQv bnVzYi9zZXJpYWwvY2RjLmMJVGh1IEp1bCAzMCAyMTowNjoyOSAyMDIwIC0wNzAwCkBAIC0wLDAg KzEsMzAxIEBACisjaW5jbHVkZSA8dS5oPgorI2luY2x1ZGUgPGxpYmMuaD4KKyNpbmNsdWRlIDx0 aHJlYWQuaD4KKyNpbmNsdWRlIDxmY2FsbC5oPgorI2luY2x1ZGUgPDlwLmg+CisjaW5jbHVkZSAi dXNiLmgiCisjaW5jbHVkZSAic2VyaWFsLmgiCisKK2VudW0geworCUt5b2NlcmEJCT0gMHgwNDgy LAorCUFISzMwMDFWCT0gMHgwMjAzLAorfTsKKworZW51bSB7CisJU2NBQ00JPSAyLAorCUFUCQk9 IDEsCisJTm9uZQk9IDAsCisJTGluZUNvZGluZwk9IDB4MjAsCisJU2V0QnJlYWsJPSAweDIzLAor CUNvbnRyb2xTdGF0ZSA9IDB4MjIsCit9OworCitlbnVtIHsKKwlDbGFzc0NEQ0RhdGEgPSAweDBh LAorCVN1YmNsYXNzRGF0YSA9IDAsCit9OworCitlbnVtIHsKKwlTdWJDRENDTQk9IDEsCisJU3Vi Q0RDQUNNCT0gMiwKKwlTdWJDRENVbmlvbgk9IDYsCit9OworCit0eXBlZGVmIHN0cnVjdCByYXdf ZGVzYyB7CisJdWNoYXIgYkxlbmd0aDsKKwl1Y2hhciBiRGVzY3JpcHRvclR5cGU7CisJdWNoYXIg YkRlc2NyaXB0b3JTdWJ0eXBlOworCXVjaGFyIGJieXRlc1sxXTsKK30gcmF3X2Rlc2M7CisKK3R5 cGVkZWYgc3RydWN0IGNtX2Rlc2MgeworCXVjaGFyIGJMZW5ndGg7CisJdWNoYXIgYkRlc2NyaXB0 b3JUeXBlOworCXVjaGFyIGJEZXNjcmlwdG9yU3VidHlwZTsKKwl1Y2hhciBibUNhcGFiaWxpdGll czsKKwl1Y2hhciBiRGF0YUludGVyZmFjZTsKK30gY21fZGVzYzsKKworZW51bSB7CisJQ01Eb2Vz Q00JPSAxLAorCUNNT3ZlckRhdGEJPSAyLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgYWNtX2Rlc2Mg eworCXVjaGFyIGJMZW5ndGg7CisJdWNoYXIgYkRlc2NyaXB0b3JUeXBlOworCXVjaGFyIGJEZXNj cmlwdG9yU3VidHlwZTsKKwl1Y2hhciBibUNhcGFiaWxpdGllczsKK30gYWNtX2Rlc2M7CisKK2Vu dW0geworCUFDTUhhc0ZlYXR1cmUJPSAxLAorCUFDTUhhc0xpbmUJCT0gMiwKKwlBQ01IYXNCcmVh awkJPSA0LAorCUFDTUhhc05ldHdvcmsJPSA4LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgdW5pb25f ZGVzYyB7CisJdWNoYXIgYkxlbmd0aDsKKwl1Y2hhciBiRGVzY3JpcHRvclR5cGU7CisJdWNoYXIg YkRlc2NyaXB0b3JTdWJ0eXBlOworCXVjaGFyIGJNYXN0ZXJJbnRlcmZhY2U7CisJdWNoYXIgYlNs YXZlSW50ZXJmYWNlWzFdOworfSB1bmlvbl9kZXNjOworCit0eXBlZGVmIHN0cnVjdCBjZGNfbm90 aWZ5IHsKKwl1Y2hhciBibVJlcXVlc3RUeXBlOworCXVjaGFyIGJOb3RpZmljYXRpb247CisJdXNo b3J0IHdWYWx1ZTsKKwl1c2hvcnQgd0luZGV4OworCXVzaG9ydCB3TGVuZ3RoOworCXVjaGFyIGRh dGFbMTZdOworfSBjZGNfbm90aWZ5OworCitlbnVtIHsKKwlOb3RpZmljYXRpb24gPSAweGExLAor CVNlcmlhbFN0YXRlID0gMHgyMCwKK307CisKK2VudW0geworCURjZFN0YXR1cwk9IDB4MDEsCisJ RHNyU3RhdHVzCT0gMHgwMiwKKwlSaW5nU3RhdHVzCT0gMHgwOCwKK307CisKK3N0YXRpYyBpbnQK K2NkY3NldHBhcmFtKFNlcmlhbHBvcnQgKnApCit7CisJaW50IHJlczsKKwl1Y2hhciB2YWxzWzdd OworCisJUFVUNCh2YWxzLCBwLT5iYXVkKTsKKworCXZhbHNbNF0gPSAwOworCWlmKHAtPnN0b3Ag PT0gMSkKKwkJdmFsc1s0XSA9IDA7CisJaWYocC0+c3RvcCA9PSAxNSkKKwkJdmFsc1s0XSA9IDE7 CisJaWYocC0+c3RvcCA9PSAyKQorCQl2YWxzWzRdID0gMjsKKworCXZhbHNbNV0gPSBwLT5wYXJp dHk7CisKKwl2YWxzWzZdID0gcC0+Yml0czsKKworCXJlcyA9IHVzYmNtZChwLT5zLT5kZXYsIFJo MmQgfCBSY2xhc3MgfCBSaWZhY2UsIExpbmVDb2RpbmcsIDAsIDAsIHZhbHMsIDcpOworCisJcmV0 dXJuIHJlczsKK30KKwordm9pZAorZ2V0Y2FwcyhTZXJpYWxwb3J0ICpwKQoreworCWludCBpLCBq OworCURlc2MgKmRlc2M7CisJSWZhY2UgKmlmYWNlOworCXJhd19kZXNjIGRkZXNjOworCWNtX2Rl c2MgZGNtOworCWFjbV9kZXNjIGRhY207CisJdW5pb25fZGVzYyBkdW5pb247CisJaW50IGN1cl9p ZmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgTmlmYWNlOyBpKyspIHsKKwkJaWZhY2UgPSBwLT5zLT5k ZXYtPnVzYi0+Y29uZlswXS0+aWZhY2VbaV07CisJCWlmIChpZmFjZSA9PSBuaWwpCisJCQljb250 aW51ZTsKKworCQljdXJfaWZjID0gaWZhY2UtPmlkOworCQlpZiAoY3VyX2lmYyAhPSBwLT5jdGxf aWZjICYmIENsYXNzKGlmYWNlLT5jc3ApID09IENsYXNzQ0RDRGF0YSAmJiBTdWJjbGFzcyhpZmFj ZS0+Y3NwKSA9PSBTdWJjbGFzc0RhdGEgJiYgcC0+ZGF0YV9pZmMgPT0gLTEpCisJCQlwLT5kYXRh X2lmYyA9IGN1cl9pZmM7CisKKwkJaWYgKGN1cl9pZmMgPT0gcC0+Y3RsX2lmYykKKwkJCWZvciAo aiA9IDA7IGogPCBOZGRlc2M7IGorKykgeworCQkJCWRlc2MgPSBwLT5zLT5kZXYtPnVzYi0+ZGRl c2Nbal07CisJCQkJaWYgKGRlc2MgPT0gbmlsKQorCQkJCQljb250aW51ZTsKKworCQkJCWRkZXNj ID0gKHJhd19kZXNjKWRlc2MtPmRhdGE7CisJCQkJaWYgKGRkZXNjLmJEZXNjcmlwdG9yVHlwZSA9 PSBEZnVuY3Rpb24pIHsKKwkJCQkJc3dpdGNoIChkZGVzYy5iRGVzY3JpcHRvclN1YnR5cGUpIHsK KwkJCQkJY2FzZSBTdWJDRENDTToKKwkJCQkJCWRjbSA9IChjbV9kZXNjKWRkZXNjOworCQkJCQkJ cC0+ZGF0YV9pZmMgPSBkY20uYkRhdGFJbnRlcmZhY2U7CisJCQkJCQlicmVhazsKKwkJCQkJY2Fz ZSBTdWJDRENBQ006CisJCQkJCQlkYWNtID0gKGFjbV9kZXNjKWRkZXNjOworCQkJCQkJcC0+aGFz YnJlYWsgPSBkYWNtLmJtQ2FwYWJpbGl0aWVzICYgQUNNSGFzQnJlYWs7CisJCQkJCQlicmVhazsK KwkJCQkJY2FzZSBTdWJDRENVbmlvbjoKKwkJCQkJCWR1bmlvbiA9ICh1bmlvbl9kZXNjKWRkZXNj OworCQkJCQkJcC0+ZGF0YV9pZmMgPSBkdW5pb24uYlNsYXZlSW50ZXJmYWNlWzBdOworCQkJCQkJ YnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJfQorfQorCit2b2lkCitzdGF0dXNyZWFkZXIo dm9pZCAqdSkKK3sKKwlTZXJpYWxwb3J0ICpwID0gdTsKKwl1Y2hhciBidWZbc2l6ZW9mKGNkY19u b3RpZnkpXTsKKwljZGNfbm90aWZ5ICpub3RpZnk7CisKKwlub3RpZnkgPSAoY2RjX25vdGlmeSop YnVmOworCXRocmVhZHNldG5hbWUoInN0YXR1c3JlYWRlcnByb2MiKTsKKworCXdoaWxlKHJlYWQo cC0+ZXBpbnRyLT5kZmQsIGJ1Ziwgc2l6ZW9mKGNkY19ub3RpZnkpKSA+IDApIHsKKwkJaWYgKG5v dGlmeS0+Ym1SZXF1ZXN0VHlwZSA9PSBOb3RpZmljYXRpb24gJiYgbm90aWZ5LT5iTm90aWZpY2F0 aW9uID09IFNlcmlhbFN0YXRlICYmIG5vdGlmeS0+d0xlbmd0aCA9PSAyKSB7CisJCQlwLT5kY2Qg PSBub3RpZnktPmRhdGFbMF0gJiBEY2RTdGF0dXM7CisJCQlwLT5kc3IgPSBub3RpZnktPmRhdGFb MF0gJiBEc3JTdGF0dXM7CisJCQlwLT5yaW5nID0gbm90aWZ5LT5kYXRhWzBdICYgUmluZ1N0YXR1 czsKKwkJfSBlbHNlIHsKKwkJCWZwcmludCgyLCAic2VyaWFsOiB1bmtub3duIGludHIgbWVzc2Fn ZTogcmVxdHlwZTolMDJ4IG5vdGlmeTolMDJ4IGxlbjolZCBzdGF0ZTolMDJ4XG4iLCBub3RpZnkt PmJtUmVxdWVzdFR5cGUsIG5vdGlmeS0+Yk5vdGlmaWNhdGlvbiwgbm90aWZ5LT53TGVuZ3RoLCBu b3RpZnktPmRhdGFbMF0pOworCQl9CisJfQorCisJZnByaW50KDIsICJzZXJpYWw6IHN0YXR1c3Jl YWRlciBleGl0aW5nOiAlclxuIik7CisJY2xvc2VkZXYocC0+cy0+ZGV2KTsKK30KKworc3RhdGlj IGludAorY2RjaW5pdChTZXJpYWxwb3J0ICpwKQoreworCXAtPmJhdWQgPSAxMTUyMDA7CisJcC0+ Yml0cyA9IDg7CisJcC0+cGFyaXR5ID0gMDsKKwlwLT5zdG9wID0gMTsKKwljZGNzZXRwYXJhbShw KTsKKworCWluY3JlZihwLT5zLT5kZXYpOworCXByb2NjcmVhdGUoc3RhdHVzcmVhZGVyLCBwLCA4 KjEwMjQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NkY3NldGJyZWFrKFNlcmlh bHBvcnQgKnAsIGludCB2YWwpCit7CisJaWYocC0+aGFzYnJlYWsgPT0gMCkKKwkJcmV0dXJuIDA7 CisKKwlyZXR1cm4gdXNiY21kKHAtPnMtPmRldiwgUmgyZCB8IFJjbGFzcyB8IFJpZmFjZSwgU2V0 QnJlYWssICh2YWwgIT0gMD8gMHhmZmZmOiAweDAwMDApLCAwLCBuaWwsIDApOworfQorCitzdGF0 aWMgaW50CitjZGNzZW5kbGluZXMoU2VyaWFscG9ydCAqcCkKK3sKKwlpZihwLT5ydHMpCisJCXAt PmN0bHN0YXRlIHw9IEN0bFJUUzsKKwllbHNlCisJCXAtPmN0bHN0YXRlICY9IH5DdGxSVFM7CisJ aWYocC0+ZHRyKQorCQlwLT5jdGxzdGF0ZSB8PSBDdGxEVFI7CisJZWxzZQorCQlwLT5jdGxzdGF0 ZSAmPSB+Q3RsRFRSOworCisJcmV0dXJuIHVzYmNtZChwLT5zLT5kZXYsIFJoMmQgfCBSY2xhc3Mg fCBSaWZhY2UsIENvbnRyb2xTdGF0ZSwgcC0+Y3Rsc3RhdGUsIDAsIG5pbCwgMCk7Cit9CisKK3N0 YXRpYyBpbnQKK2NkY2NsZWFycGlwZXMoU2VyaWFscG9ydCAqcCkKK3sKKwlpZih1bnN0YWxsKHAt PnMtPmRldiwgcC0+ZXBvdXQsIEVvdXQpIDwgMCkKKwkJZHByaW50KDIsICJzZXJpYWw6IHVuc3Rh bGwgZXBvdXQ6ICVyXG4iKTsKKwlpZih1bnN0YWxsKHAtPnMtPmRldiwgcC0+ZXBpbiwgRWluKSA8 IDApCisJCWRwcmludCgyLCAic2VyaWFsOiB1bnN0YWxsIGVwaW46ICVyXG4iKTsKKwlpZih1bnN0 YWxsKHAtPnMtPmRldiwgcC0+ZXBpbnRyLCBFaW4pIDwgMCkKKwkJZHByaW50KDIsICJzZXJpYWw6 IHVuc3RhbGwgZXBpbnRyOiAlclxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor Y2Rjd2FpdDRkYXRhKFNlcmlhbHBvcnQgKnAsIHVjaGFyICpkYXRhLCBpbnQgY291bnQpCit7CisJ aW50IG47CisKKwlxdW5sb2NrKHAtPnMpOworCXdoaWxlICgobiA9IHJlYWQocC0+ZXBpbi0+ZGZk LCBkYXRhLCBjb3VudCkpID09IDApCisJCTsKKwlxbG9jayhwLT5zKTsKKworCXJldHVybiBuOwor fQorCitzdGF0aWMgU2VyaWFsb3BzIGNkY29wcyA9IHsKKwkuaW5pdAkJPSBjZGNpbml0LAorCS5z ZXRwYXJhbQk9IGNkY3NldHBhcmFtLAorCS5zZXRicmVhawk9IGNkY3NldGJyZWFrLAorCS5zZW5k bGluZXMJPSBjZGNzZW5kbGluZXMsCisJLmNsZWFycGlwZXMJPSBjZGNjbGVhcnBpcGVzLAorCS53 YWl0NGRhdGEJPSBjZGN3YWl0NGRhdGEsCit9OworCitpbnQKK2NkY3Byb2JlKFNlcmlhbCAqc2Vy KQoreworCWludCBpLCBpZmNzOworCVVzYmRldiAqdWQgPSBzZXItPmRldi0+dXNiOworCUlmYWNl ICppZmFjZTsKKwl1bG9uZyBjc3A7CisKKwlpZmNzID0gMDsKKwlpZiAodWQtPnZpZCA9PSBLeW9j ZXJhIHx8IHVkLT5kaWQgPT0gQUhLMzAwMVYpCisJCWlmY3MrKzsKKwllbHNlIGZvciAoaSA9IDA7 IGkgPCBOaWZhY2U7IGkrKykgeworCQlpZmFjZSA9IHVkLT5jb25mWzBdLT5pZmFjZVtpXTsKKwkJ aWYgKGlmYWNlID09IG5pbCkKKwkJCWNvbnRpbnVlOworCisJCWNzcCA9IGlmYWNlLT5jc3A7CisJ CWlmIChDbGFzcyhjc3ApID09IENsY29tbXMgJiYgU3ViY2xhc3MoY3NwKSA9PSBTY0FDTSAmJiAo UHJvdG8oY3NwKSA9PSBBVCB8fCBQcm90byhjc3ApID09IE5vbmUpKSB7CisJCQlzZXItPnBbaWZj c10uY3RsX2lmYyA9IGk7CisJCQlzZXItPnBbaWZjc10ucyA9IHNlcjsKKwkJCWdldGNhcHMoJnNl ci0+cFtpZmNzXSk7CisJCQlpZmNzKys7CisJCX0KKwl9CisKKwlpZiAoaWZjcyA9PSAwKQorCQly ZXR1cm4gLTE7CisKKwlzZXItPm5pZmNzID0gaWZjczsKKwlzZXItPmlzYWNtID0gMTsKKwlzZXIt Pm91dGhkcnN6ID0gMDsKKwlzZXItPmhhc2VwaW50ciA9IDE7CisJc2VyLT5TZXJpYWxvcHMgPSBj ZGNvcHM7CisJcmV0dXJuIDA7Cit9CmRpZmYgLXIgMjNiYzFkMGUyZGQyIHN5cy9zcmMvY21kL251 c2Ivc2VyaWFsL21rZmlsZQotLS0gYS9zeXMvc3JjL2NtZC9udXNiL3NlcmlhbC9ta2ZpbGUJVHVl IEp1biAwOSAxMjoyMzoyNCAyMDIwIC0wNzAwCisrKyBiL3N5cy9zcmMvY21kL251c2Ivc2VyaWFs L21rZmlsZQlUaHUgSnVsIDMwIDIxOjA2OjI5IDIwMjAgLTA3MDAKQEAgLTEsNyArMSw3IEBACiA8 LyRvYmp0eXBlL21rZmlsZQogCiBUQVJHPXNlcmlhbAotT0ZJTEVTPWZ0ZGkuJE8gc2VyaWFsLiRP IHByb2xpZmljLiRPIHVjb25zLiRPIHNpbGFicy4kTyBjaDM0MC4kTworT0ZJTEVTPWZ0ZGkuJE8g c2VyaWFsLiRPIHByb2xpZmljLiRPIHVjb25zLiRPIHNpbGFicy4kTyBjaDM0MC4kTyBjZGMuJE8K IEhGSUxFUz1cCiAJLi4vbGliL3VzYi5oXAogCXNlcmlhbC5oXApkaWZmIC1yIDIzYmMxZDBlMmRk MiBzeXMvc3JjL2NtZC9udXNiL3NlcmlhbC9zZXJpYWwuYwotLS0gYS9zeXMvc3JjL2NtZC9udXNi L3NlcmlhbC9zZXJpYWwuYwlUdWUgSnVuIDA5IDEyOjIzOjI0IDIwMjAgLTA3MDAKKysrIGIvc3lz L3NyYy9jbWQvbnVzYi9zZXJpYWwvc2VyaWFsLmMJVGh1IEp1bCAzMCAyMTowNjoyOSAyMDIwIC0w NzAwCkBAIC02MjQsMjMgKzYyNCw0NiBAQAogCiAJZXBpbnRyID0gZXBpbiA9IGVwb3V0ID0gLTE7 CiAKLQkvKgotCSAqIGludGVyZmMgMCBtZWFucyBzdGFydCBmcm9tIHRoZSBzdGFydCB3aGljaCBp cyBlcXVpdiB0bwotCSAqIGl0ZXJhdGUgdGhyb3VnaCBlbmRwb2ludHMgcHJvYmFibHksIGNvdWxk IGJlIGRvbmUgYmV0dGVyCi0JICovCi0JZXBzID0gc2VyLT5kZXYtPnVzYi0+Y29uZlswXS0+aWZh Y2VbaWZjXS0+ZXA7CisJaWYoc2VyLT5pc2FjbSl7CisJCWVwcyA9IHNlci0+ZGV2LT51c2ItPmNv bmZbMF0tPmlmYWNlW3Nlci0+cFtpZmNdLmN0bF9pZmNdLT5lcDsKIAotCWZvcihpID0gMDsgaSA8 IE5lcDsgaSsrKXsKLQkJaWYoKGVwID0gZXBzW2ldKSA9PSBuaWwpCi0JCQljb250aW51ZTsKLQkJ aWYoc2VyLT5oYXNlcGludHIgJiYgZXAtPnR5cGUgPT0gRWludHIgJiYKLQkJICAgIGVwLT5kaXIg PT0gRWluICYmIGVwaW50ciA9PSAtMSkKLQkJCWVwaW50ciA9IGVwLT5pZDsKLQkJaWYoZXAtPnR5 cGUgPT0gRWJ1bGspewotCQkJaWYoKGVwLT5kaXIgPT0gRWluIHx8IGVwLT5kaXIgPT0gRWJvdGgp ICYmIGVwaW4gPT0gLTEpCi0JCQkJZXBpbiA9IGVwLT5pZDsKLQkJCWlmKChlcC0+ZGlyID09IEVv dXQgfHwgZXAtPmRpciA9PSBFYm90aCkgJiYgZXBvdXQgPT0gLTEpCi0JCQkJZXBvdXQgPSBlcC0+ aWQ7CisJCWZvcihpID0gMDsgaSA8IE5lcDsgaSsrKXsKKwkJCWlmKChlcCA9IGVwc1tpXSkgPT0g bmlsKQorCQkJCWNvbnRpbnVlOworCQkJaWYoZXAtPnR5cGUgPT0gRWludHIgJiYgZXAtPmRpciA9 PSBFaW4gJiYgZXBpbnRyID09IC0xKQorCQkJCWVwaW50ciA9IGVwLT5pZDsKKwkJfQorCisJCWVw cyA9IHNlci0+ZGV2LT51c2ItPmNvbmZbMF0tPmlmYWNlW3Nlci0+cFtpZmNdLmRhdGFfaWZjXS0+ ZXA7CisJCWZvcihpID0gMDsgaSA8IE5lcDsgaSsrKXsKKwkJCWlmKChlcCA9IGVwc1tpXSkgPT0g bmlsKQorCQkJCWNvbnRpbnVlOworCQkJaWYoZXAtPnR5cGUgPT0gRWJ1bGspeworCQkJCWlmKChl cC0+ZGlyID09IEVpbiB8fCBlcC0+ZGlyID09IEVib3RoKSAmJiBlcGluID09IC0xKQorCQkJCQll cGluID0gZXAtPmlkOworCQkJCWlmKChlcC0+ZGlyID09IEVvdXQgfHwgZXAtPmRpciA9PSBFYm90 aCkgJiYgZXBvdXQgPT0gLTEpCisJCQkJCWVwb3V0ID0gZXAtPmlkOworCQkJfQorCQl9CisJfSBl bHNlIHsKKwkJLyoKKwkJICogaW50ZXJmYyAwIG1lYW5zIHN0YXJ0IGZyb20gdGhlIHN0YXJ0IHdo aWNoIGlzIGVxdWl2IHRvCisJCSAqIGl0ZXJhdGUgdGhyb3VnaCBlbmRwb2ludHMgcHJvYmFibHks IGNvdWxkIGJlIGRvbmUgYmV0dGVyCisJCSAqLworCQllcHMgPSBzZXItPmRldi0+dXNiLT5jb25m WzBdLT5pZmFjZVtpZmNdLT5lcDsKKworCQlmb3IoaSA9IDA7IGkgPCBOZXA7IGkrKyl7CisJCQlp ZigoZXAgPSBlcHNbaV0pID09IG5pbCkKKwkJCQljb250aW51ZTsKKwkJCWlmKHNlci0+aGFzZXBp bnRyICYmIGVwLT50eXBlID09IEVpbnRyICYmCisJCQkgICAgZXAtPmRpciA9PSBFaW4gJiYgZXBp bnRyID09IC0xKQorCQkJCWVwaW50ciA9IGVwLT5pZDsKKwkJCWlmKGVwLT50eXBlID09IEVidWxr KXsKKwkJCQlpZigoZXAtPmRpciA9PSBFaW4gfHwgZXAtPmRpciA9PSBFYm90aCkgJiYgZXBpbiA9 PSAtMSkKKwkJCQkJZXBpbiA9IGVwLT5pZDsKKwkJCQlpZigoZXAtPmRpciA9PSBFb3V0IHx8IGVw LT5kaXIgPT0gRWJvdGgpICYmIGVwb3V0ID09IC0xKQorCQkJCQllcG91dCA9IGVwLT5pZDsKKwkJ CX0KIAkJfQogCX0KIAlkcHJpbnQoMiwgInNlcmlhbFslZF06IGVwIGlkczogaW4gJWQgb3V0ICVk IGludHIgJWRcbiIsIGlmYywgZXBpbiwgZXBvdXQsIGVwaW50cik7CkBAIC03MTQsNiArNzM3LDcg QEAKIGV4dGVybiBpbnQgc2xwcm9iZShTZXJpYWwgKnNlcik7CiBleHRlcm4gaW50IGNocHJvYmUo U2VyaWFsICpzZXIpOwogZXh0ZXJuIGludCB1Y29uc3Byb2JlKFNlcmlhbCAqc2VyKTsKK2V4dGVy biBpbnQgY2RjcHJvYmUoU2VyaWFsICpzZXIpOwogCiB2b2lkCiB0aHJlYWRtYWluKGludCBhcmdj LCBjaGFyKiBhcmd2W10pCkBAIC03NTAsNyArNzc0LDggQEAKIAkmJiBmdHByb2JlKHNlcikKIAkm JiBzbHByb2JlKHNlcikKIAkmJiBwbHByb2JlKHNlcikKLQkmJiBjaHByb2JlKHNlcikpCisJJiYg Y2hwcm9iZShzZXIpCisJJiYgY2RjcHJvYmUoc2VyKSkKIAkJc3lzZmF0YWwoIm5vIHNlcmlhbCBk ZXZpY2VzIGZvdW5kIik7CiAKIAlmb3IoaSA9IDA7IGkgPCBzZXItPm5pZmNzOyBpKyspewpkaWZm IC1yIDIzYmMxZDBlMmRkMiBzeXMvc3JjL2NtZC9udXNiL3NlcmlhbC9zZXJpYWwuaAotLS0gYS9z eXMvc3JjL2NtZC9udXNiL3NlcmlhbC9zZXJpYWwuaAlUdWUgSnVuIDA5IDEyOjIzOjI0IDIwMjAg LTA3MDAKKysrIGIvc3lzL3NyYy9jbWQvbnVzYi9zZXJpYWwvc2VyaWFsLmgJVGh1IEp1bCAzMCAy MTowNjoyOSAyMDIwIC0wNzAwCkBAIC02MCw2ICs2MCwxMCBAQAogCiAJaW50CWludGVyZmM7CS8q IGludGVyZmMgb24gdGhlIGRldmljZSBmb3IgZnRkaSAqLwogCisJaW50IGhhc2JyZWFrOwkvKiBD REMgQUNNIG1heSBub3QgaGF2ZSBicmVhayAqLworCWludCBjdGxfaWZjOwkvKiBlcGludHIgaWZh Y2UgZm9yIENEQyBBQ00gKi8KKwlpbnQgZGF0YV9pZmM7CS8qIGVwaW4vb3V0IGlmYWNlIGZvciBD REMgQUNNICovCisKIAlDaGFubmVsICp3NGRhdGE7CiAJQ2hhbm5lbCAqZ290ZGF0YTsKIAlpbnQJ bmRhdGE7CkBAIC04MSw2ICs4NSw3IEBACiAKIAlpbnQJanRhZzsJCS8qIGluZGV4IG9mIGp0YWcg aW50ZXJmYWNlLCAtMSBub25lICovCiAJaW50CW5pZmNzOwkJLyogIyBvZiBzZXJpYWwgaW50ZXJm YWNlcywgaW5jbHVkaW5nIEpUQUcgKi8KKwlpbnQgaXNhY207IAkJLyogQ0RDIEFDTSBpbnRlcmZh Y2VzIGhhbmRsZWQgZGlmZmVyZW50bHkgKi8KIAlTZXJpYWxwb3J0IHBbTWF4aWZjXTsKIAlpbnQJ bWF4cnRyYW5zOwogCWludAltYXh3dHJhbnM7Cg== --00000000000070372105abaf3803--