From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 19183 invoked from network); 21 Aug 2021 22:35:57 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 21 Aug 2021 22:35:57 -0000 Received: from mail-ot1-f50.google.com ([209.85.210.50]) by 1ess; Sat Aug 21 18:29:10 -0400 2021 Received: by mail-ot1-f50.google.com with SMTP id k12-20020a056830150c00b0051abe7f680bso19359180otp.1 for <9front@9front.org>; Sat, 21 Aug 2021 15:29:01 -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=jUAHI301kI/IAKVu5Hc7fHUbfeT1O+W9tR0qsUrBSXY=; b=YUiJD9f9RRYVOGgFAeS5GpPOvC4JqR6ymOUI+tKTK19CwR/h9QUYRMsMUXuf3c1W6X dRhoJbCOTorJ7wEsLYmM2PChdPRBHc0QN9JYFMJuW2h0g3OB97NE1yNAgO51Eef93bWN BKKRGt5diMkbsJ/wVgF+w0OWtnxzziRFLS/vUaPGxKLIope9U3J+/uROCvQCZoMCEi+t mgRjkumwlc4sxLPnqSgw+1M1gsBi0zBTp033Szs0j1i7a2YJ2/9l2ifCvqUzMCjhySL6 yrv2P6v8T6cPCnT9OSELmYOJ4W+RzT56a7nHsZHNEhHoZPfdjacBfbEY35HWGFOuSBnm mxzQ== 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=jUAHI301kI/IAKVu5Hc7fHUbfeT1O+W9tR0qsUrBSXY=; b=daNQzE7atNM7AKS6BmOkpVtn6hCVy+Eha+RNJg7MN38VFvNvpGD6wD2Jaz0pPJfBnA Kf7L0h2W1wOjadrEcNam9m6eAFAtSeLGiPO1doRy4+EpACJZkRnE7KmUsFWUvXb3lu1/ KtSq3aEP1TiQu8gWEzLJfZoePTRqKkeR9c548ADOHZMC/CE07FuJ5S+acTP/u5pBXFaA f3N8xhI+vAowixUMowwBbC0U/gaV8vvgR5+nrKymVobP/L+hJv+44w8wh95OeARbe3qu Y0H1zBxqA5LN9+fu5dxbVJtucZV82mW4Yptv40r4TwH690kMHOzvLvCJd2hsaRcUfGc8 fOjg== X-Gm-Message-State: AOAM531k38l8MbmWALPPylF1LJypTqiJwMUMPKNghF+T/jmiLva4jF6k HV95lqa/61Nk6sbFPMYe9Il1XkGvZkZz6J9hBOY2AG5r0Bk= X-Google-Smtp-Source: ABdhPJyMgKHphO2iR1bJR5+d8ES5yC2nrnfsqWZcAOSXKQJuFZDIIzyvHKjaLXGJiKywOnrysjTJKHTJ5lsti30o5wc= X-Received: by 2002:a9d:bea:: with SMTP id 97mr20489200oth.149.1629584593348; Sat, 21 Aug 2021 15:23:13 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ac9:2842:0:0:0:0:0 with HTTP; Sat, 21 Aug 2021 15:23:12 -0700 (PDT) From: kemal Date: Sat, 21 Aug 2021 22:23:12 +0000 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="000000000000d18e4305ca193a23" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: anonymous encrypted component grid interface DOM solution Subject: [9front] driver for intel wireless 7260 Reply-To: 9front@9front.org Precedence: bulk --000000000000d18e4305ca193a23 Content-Type: text/plain; charset="UTF-8" (due to ml shitting itself hard, i have to send this mail again.) reviving this thread. 2021-08-14 17:50 GMT, kemal : > 1- as driver reads 8 bytes from nvm instead of 6 so fw doesn't > spit us an ADVANCED_SYSASSERT, it was reading 2 more > extra bytes. apparently those 2 extra bytes were put to > the first 2 bytes of our buffer, so we got to skip that. some more thoughts on this, i think as 0x15*2 is not multiple of 8, fw rounds the offset to 0x14*2. i have touched to code to read data from 0x14*2 then ignore the first 2 bytes, just so it's not confusing. if this causes mac to be read wrong again, report. also, some more changes: 1. set the fwname at iwlpci, just to align the behavior with 8000+. this is a cosmetic change. 2. i have discovered that on device boot/reset/shutdown functions, our driver slept way much more than it should. the reason for that is, driver used the function delay() on places where it needs to use microdelay() instead. i have modified the code to use microdelay(). wpi likely needs similar changes too. i hope that this does not break the code. 3. zzz a bit more on tx/rx scheduler shutdowns and niclock. 4. openbsd's iwm and linux apparently does not check if ownership was obtained anymore in their handover functions. instead they just loop until the hw is ready. aligned the behavior. see linux commit: 289e5501c3141191dd830957f1d764d3dc14a54f 5. don't take antenna masks from nvm. it's apparently empty in some cards from 7k family. we will rely on what the fw file gives us. 6. when the calibration is completed, wakeup the proc that runs postboot. otherwise that thing sleeps for like 2 whole seconds even if calibration completed earlier. i honestly don't think any of these changes will fix 7260 not being able to get calibration results, but i don't see anything wrong at all in postboot7000 at this point. i will just hope these changes somehow make it get calibration results. new diff attached. --000000000000d18e4305ca193a23 Content-Type: text/plain; charset="US-ASCII"; name="diff.txt" Content-Disposition: attachment; filename="diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 LS0tIC9zeXMvc3JjLzkvcGMvZXRoZXJpd2wuYworKysgL3N5cy9zcmMvOS9wYy9ldGhlcml3bC5j CkBAIC0zMjksNyArMzI5LDI5IEBACiAJU2NoZWRUcmFuc1RibE9mZgk9IDB4N0UwLAkJLy8gK3Eq MgogfTsKIAorLyoKKyAqIHVDb2RlIFRMViBhcGkKKyAqLwogZW51bSB7CisJLyogYXBpWzBdICov CisJVWNvZGVBcGlTdGEJPSAxPDwzMCwKK307CisKKy8qCisgKiB1Q29kZSBjYXBhYmlsaXRpZXMK KyAqLworZW51bSB7CisJLyogY2FwYVswXSAqLworCVVjb2RlQ2FwTGFyCT0gMTw8MSwKKworCS8q IGNhcGFbMV0gKi8KKwlVY29kZUNhcFF1b3RhCT0gMTw8MTIsCisJCisJLyogY2FwYVsyXSAqLwor CVVjb2RlQ2FwTGFyMgk9IDE8PDksCit9OworCitlbnVtIHsKIAlGaWx0ZXJQcm9taXNjCQk9IDE8 PDAsCiAJRmlsdGVyQ3RsCQk9IDE8PDEsCiAJRmlsdGVyTXVsdGljYXN0CQk9IDE8PDIsCkBAIC00 MTgsNiArNDQwLDcgQEAKIAl1aW50CWJ1aWxkOwogCWNoYXIJZGVzY3JbNjQrMV07CiAKKwl1MzJp bnQJZmxhZ3M7CiAJdTMyaW50CWNhcGFbNF07CiAJdTMyaW50CWFwaVs0XTsKIApAQCAtNjM1LDgg KzY1OCw3IEBACiAJVHlwZTIwMzAJPSAxMiwKIAlUeXBlMjAwMAk9IDE2LAogCi0JVHlwZTcyNjAJ PSAzMCwKLQlUeXBlODI2NQk9IDM1LAorCVR5cGU3MjYwCT0gMjAsCiB9OwogCiBzdGF0aWMgc3Ry dWN0IHJhdGV0YWIgewpAQCAtNjkwLDcgKzcxMiw2IEBACiAJW1R5cGU2MDA1XSAiaXduLTYwMDUi LCAvKiBzZWUgaW4gaXdsYXR0YWNoKCkgYmVsb3cgKi8KIAlbVHlwZTIwMzBdICJpd24tMjAzMCIs CiAJW1R5cGUyMDAwXSAiaXduLTIwMDAiLAotCVtUeXBlNzI2MF0gIml3bS03MjYwLTE3IiwKIH07 CiAKIHN0YXRpYyBjaGFyICpxY21kKEN0bHIgKmN0bHIsIHVpbnQgcWlkLCB1aW50IGNvZGUsIHVj aGFyICpkYXRhLCBpbnQgc2l6ZSwgQmxvY2sgKmJsb2NrKTsKQEAgLTcyOCwxMCArNzQ5LDEyIEBA CiAJaW50IGk7CiAKIAljc3IzMncoY3RsciwgR3BjLCBjc3IzMnIoY3RsciwgR3BjKSB8IE1hY0Fj Y2Vzc1JlcSk7Ci0JZm9yKGk9MDsgaTwxMDAwOyBpKyspeworCWlmKGN0bHItPmZhbWlseSA+PSA4 MDAwKQorCQltaWNyb2RlbGF5KDIpOworCWZvcihpPTA7IGk8MTUwMDsgaSsrKXsKIAkJaWYoKGNz cjMycihjdGxyLCBHcGMpICYgKE5pY1NsZWVwIHwgTWFjQWNjZXNzRW5hKSkgPT0gTWFjQWNjZXNz RW5hKQogCQkJcmV0dXJuIDA7Ci0JCWRlbGF5KDEwKTsKKwkJbWljcm9kZWxheSgxMCk7CiAJfQog CXJldHVybiAibmljbG9jazogdGltZW91dCI7CiB9CkBAIC05NDQsNyArOTY3LDcgQEAKIAkJZm9y KGo9MDsgajwxMDA7IGorKyl7CiAJCQlpZihjc3IzMnIoY3RsciwgQ2ZnKSAmIEVlcHJvbUxvY2tl ZCkKIAkJCQlyZXR1cm4gMDsKLQkJCWRlbGF5KDEwKTsKKwkJCW1pY3JvZGVsYXkoMTApOwogCQl9 CiAJfQogCXJldHVybiAiZWVwcm9tbG9jazogdGltZW91dCI7CkBAIC05NjksNyArOTkyLDcgQEAK IAkJCXcgPSBjc3IzMnIoY3RsciwgRWVwcm9tSW8pOwogCQkJaWYodyAmIDEpCiAJCQkJYnJlYWs7 Ci0JCQlkZWxheSg1KTsKKwkJCW1pY3JvZGVsYXkoNSk7CiAJCX0KIAkJaWYoaSA9PSAxMCkKIAkJ CXJldHVybiAiZWVwcm9tcmVhZDogdGltZW91dCI7CkBAIC05OTAsMTQgKzEwMTMsMTUgQEAKIHN0 YXRpYyBjaGFyKgogaGFuZG92ZXIoQ3RsciAqY3RscikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgajsK IAogCWNzcjMydyhjdGxyLCBDZmcsIGNzcjMycihjdGxyLCBDZmcpIHwgTmljUmVhZHkpOwogCWZv cihpPTA7IGk8NTsgaSsrKXsKIAkJaWYoY3NyMzJyKGN0bHIsIENmZykgJiBOaWNSZWFkeSkKIAkJ CWdvdG8gUmVhZHk7Ci0JCWRlbGF5KDEwKTsKKwkJbWljcm9kZWxheSgxMCk7CiAJfQorCiAJaWYo Y3Rsci0+ZmFtaWx5ID49IDcwMDApewogCQljc3IzMncoY3RsciwgRGJnbGlua3B3cm1nbXQsIGNz cjMycihjdGxyLCBEYmdsaW5rcHdybWdtdCkgfCAoMTw8MzEpKTsKIAkJZGVsYXkoMSk7CkBAIC0x MDA0LDIwICsxMDI4LDE2IEBACiAJfQogCiAJY3NyMzJ3KGN0bHIsIENmZywgY3NyMzJyKGN0bHIs IENmZykgfCBQcmVwYXJlKTsKLQlmb3IoaT0wOyBpPDE1MDAwOyBpKyspewotCQlpZigoY3NyMzJy KGN0bHIsIENmZykgJiBQcmVwYXJlRG9uZSkgPT0gMCkKLQkJCWJyZWFrOwotCQlkZWxheSgxMCk7 CisJZm9yKGk9MDsgaTw3NTA7IGkrKyl7CisJCWNzcjMydyhjdGxyLCBDZmcsIGNzcjMycihjdGxy LCBDZmcpIHwgTmljUmVhZHkpOworCQlmb3Ioaj0wOyBqPDU7IGorKyl7CisJCQlpZihjc3IzMnIo Y3RsciwgQ2ZnKSAmIE5pY1JlYWR5KQorCQkJCWdvdG8gUmVhZHk7CisJCQltaWNyb2RlbGF5KDEw KTsKKwkJfQorCQltaWNyb2RlbGF5KDIwMCk7CiAJfQotCWlmKGkgPj0gMTUwMDApCi0JCXJldHVy biAiaGFuZG92ZXI6IHRpbWVvdXQiOwogCi0JY3NyMzJ3KGN0bHIsIENmZywgY3NyMzJyKGN0bHIs IENmZykgfCBOaWNSZWFkeSk7Ci0JZm9yKGk9MDsgaTw1OyBpKyspewotCQlpZihjc3IzMnIoY3Rs ciwgQ2ZnKSAmIE5pY1JlYWR5KQotCQkJZ290byBSZWFkeTsKLQkJZGVsYXkoMTApOwotCX0KIAly ZXR1cm4gImhhbmRvdmVyOiB0aW1lb3V0IjsKIFJlYWR5OgogCWlmKGN0bHItPmZhbWlseSA+PSA3 MDAwKQpAQCAtMTAzNSw3ICsxMDU1LDcgQEAKIAlmb3IoaT0wOyBpPDI1MDA7IGkrKyl7CiAJCWlm KGNzcjMycihjdGxyLCBHcGMpICYgTWFjQ2xvY2tSZWFkeSkKIAkJCXJldHVybiAwOwotCQlkZWxh eSgxMCk7CisJCW1pY3JvZGVsYXkoMTApOwogCX0KIAlyZXR1cm4gImNsb2Nrd2FpdDogdGltZW91 dCI7CiB9CkBAIC0xMDQ2LDcgKzEwNjYsNiBAQAogCWludCBjYXBvZmY7CiAJY2hhciAqZXJyOwog Ci0KIAlpZihjdGxyLT5mYW1pbHkgPj0gNzAwMCl7CiAJCS8qIFJlc2V0IGVudGlyZSBkZXZpY2Ug Ki8KIAkJY3NyMzJ3KGN0bHIsIFJlc2V0LCAoMTw8NykpOwpAQCAtMTEwMCw3ICsxMTE5LDcgQEAK IAogCQlwcnBocmVhZChjdGxyLCBPc2NDbGspOwogCQlwcnBocmVhZChjdGxyLCBPc2NDbGspOwot CQlkZWxheSgyMCk7CisJCW1pY3JvZGVsYXkoMjApOwogCiAJCXBycGh3cml0ZShjdGxyLCBPc2ND bGssIHBycGhyZWFkKGN0bHIsIE9zY0NsaykgfCBPc2NDbGtDdHJsKTsKIApAQCAtMTExOSw3ICsx MTM4LDcgQEAKIAkJCXBycGh3cml0ZShjdGxyLCBBcG1nQ2xrRW5hLCBEbWFDbGtScXQgfCBCc21D bGtScXQpOwogCQllbHNlCiAJCQlwcnBod3JpdGUoY3RsciwgQXBtZ0Nsa0VuYSwgRG1hQ2xrUnF0 KTsKLQkJZGVsYXkoMjApOworCQltaWNyb2RlbGF5KDIwKTsKIAogCQkvKiBEaXNhYmxlIEwxLUFj dGl2ZS4gKi8KIAkJcHJwaHdyaXRlKGN0bHIsIEFwbWdQY2lTdHQsIHBycGhyZWFkKGN0bHIsIEFw bWdQY2lTdHQpIHwgKDE8PDExKSk7CkBAIC0xMTU4LDcgKzExNzcsNyBAQAogCQkJZm9yKGogPSAw OyBqIDwgMjAwOyBqKyspewogCQkJCWlmKGNzcjMycihjdGxyLCBGaFR4U3RhdHVzKSAmICgweDEw MDAwPDxpKSkKIAkJCQkJYnJlYWs7Ci0JCQkJZGVsYXkoMTApOworCQkJCW1pY3JvZGVsYXkoMjAp OwogCQkJfQogCQl9CiAJCW5pY3VubG9jayhjdGxyKTsKQEAgLTExNjgsMTcgKzExODcsMTcgQEAK IAlpZihuaWNsb2NrKGN0bHIpID09IG5pbCl7CiAJCWlmKGN0bHItPm1xcngpewogCQkJcHJwaHdy aXRlKGN0bHIsIFJmaERtYUNmZywgMCk7Ci0JCQlmb3IoaiA9IDA7IGogPCAyMDA7IGorKyl7CisJ CQlmb3IoaiA9IDA7IGogPCAxMDAwOyBqKyspewogCQkJCWlmKHBycGhyZWFkKGN0bHIsIFJmaEdl blN0YXR1cykgJiBSZmhHZW5TdGF0dXNEbWFJZGxlKQogCQkJCQlicmVhazsKLQkJCQlkZWxheSgx MCk7CisJCQkJbWljcm9kZWxheSgxMCk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQljc3IzMncoY3Rs ciwgRmhSeENvbmZpZywgMCk7Ci0JCQlmb3IoaiA9IDA7IGogPCAyMDA7IGorKyl7CisJCQlmb3Io aiA9IDA7IGogPCAxMDAwOyBqKyspewogCQkJCWlmKGNzcjMycihjdGxyLCBGaFJ4U3RhdHVzKSAm IDB4MTAwMDAwMCkKIAkJCQkJYnJlYWs7Ci0JCQkJZGVsYXkoMTApOworCQkJCW1pY3JvZGVsYXko MTApOwogCQkJfQogCQl9CiAJCW5pY3VubG9jayhjdGxyKTsKQEAgLTExOTAsNyArMTIwOSw3IEBA CiAJCQlwcnBod3JpdGUoY3RsciwgQXBtZ0Nsa0RpcywgRG1hQ2xrUnF0KTsKIAkJCW5pY3VubG9j ayhjdGxyKTsKIAkJfQotCQlkZWxheSg1KTsKKwkJbWljcm9kZWxheSg1KTsKIAl9CiAKIAlpZihj dGxyLT5mYW1pbHkgPj0gNzAwMCl7CkBAIC0xMjA2LDEyICsxMjI1LDEyIEBACiAJZm9yKGogPSAw OyBqIDwgMTAwOyBqKyspewogCQlpZihjc3IzMnIoY3RsciwgUmVzZXQpICYgKDE8PDgpKQogCQkJ YnJlYWs7Ci0JCWRlbGF5KDEwKTsKKwkJbWljcm9kZWxheSgxMCk7CiAJfQogCiAJLyogUmVzZXQg dGhlIGVudGlyZSBkZXZpY2UuICovCiAJY3NyMzJ3KGN0bHIsIFJlc2V0LCBjc3IzMnIoY3Rsciwg UmVzZXQpIHwgKDE8PDcpKTsKLQlkZWxheSgxMCk7CisJZGVsYXkoNSk7CiAKIAkvKiBDbGVhciAi aW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdC4gKi8KIAljc3IzMncoY3RsciwgR3BjLCBjc3Iz MnIoY3RsciwgR3BjKSAmIH5Jbml0RG9uZSk7CkBAIC0xMjM5LDcgKzEyNTgsNyBAQAogCWlmKChl cnIgPSBuaWNsb2NrKGN0bHIpKSAhPSBuaWwpCiAJCXJldHVybiBlcnI7CiAJcHJwaHdyaXRlKGN0 bHIsIEFwbWdQcywgcHJwaHJlYWQoY3RsciwgQXBtZ1BzKSB8IFJlc2V0UmVxKTsKLQlkZWxheSg1 KTsKKwltaWNyb2RlbGF5KDUpOwogCXBycGh3cml0ZShjdGxyLCBBcG1nUHMsIHBycGhyZWFkKGN0 bHIsIEFwbWdQcykgJiB+UmVzZXRSZXEpOwogCW5pY3VubG9jayhjdGxyKTsKIApAQCAtMTMwOCw3 ICsxMzI3LDcgQEAKIAkJY3Rsci0+dHlwZSAmPSAweDFGRjsKIAkJY3Rsci0+ZGFzaCA9IGN0bHIt PnR5cGUgJiAzLCBjdGxyLT50eXBlID4+PSAyOwogCQljdGxyLT5zdGVwID0gY3Rsci0+dHlwZSAm IDMsIGN0bHItPnR5cGUgPj49IDI7Ci0JCWlmKGZ3bmFtZVtjdGxyLT50eXBlXSA9PSBuaWwpewor CQlpZihjdGxyLT5md25hbWUgPT0gbmlsICYmIGZ3bmFtZVtjdGxyLT50eXBlXSA9PSBuaWwpewog CQkJcHJpbnQoIml3bDogdW5zdXBwb3J0ZWQgY29udHJvbGxlciB0eXBlICVkXG4iLCBjdGxyLT50 eXBlKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMTQ3OCw2ICsxNDk3LDExIEBACiAJCQkJcyA9 ICZpLT5ib290LnRleHQ7CiAJCQkJcy0+YWRkciA9IDB4MDAwMDAwMDA7CiAJCQkJZ290byBTZWN0 OworCQkJY2FzZSAxODoKKwkJCQlpZihsIDwgNCkKKwkJCQkJZ290byBUb29zaG9ydDsKKwkJCQlp LT5mbGFncyA9IGdldDMyKHApOworCQkJCWJyZWFrOwogCQkJY2FzZSAxOToKIAkJCQlpZihpLT5t YWluLm5zZWN0ID49IG5lbGVtKGktPm1haW4uc2VjdCkpCiAJCQkJCXJldHVybiAidG9vIG1hbnkg bWFpbiBzZWN0aW9ucyI7CkBAIC0xOTg0LDcgKzIwMDgsNyBAQAogCSpwKysgPSBtY2NbMF07CiAJ KnArKyA9IDA7CiAJKnArKyA9IDA7CS8vIHJlc2VydmVkCi0JaWYoMSl7CisJaWYoY3Rsci0+Znct PmNhcGFbMl0gJiBVY29kZUNhcExhcjIpewogCQlwICs9IDQ7CiAJCXAgKz0gNSo0OwogCX0KQEAg LTIyMzYsMTAgKzIyNjAsNiBAQAogCQljdGxyLT5yZmNmZy5zdGVwID0gKHUgPj4gMikgJiAzOwog CQljdGxyLT5yZmNmZy5kYXNoID0gKHUgPj4gMCkgJiAzOwogCQljdGxyLT5yZmNmZy5wbnVtID0g KHUgPj4gNikgJiAzOwotCi0JCWN0bHItPnJmY2ZnLnR4YW50bWFzayA9ICh1ID4+IDgpICYgMTU7 Ci0JCWN0bHItPnJmY2ZnLnJ4YW50bWFzayA9ICh1ID4+IDEyKSAmIDE1OwotCiAJfSBlbHNlIHsK IAkJaWYocmVhZG52bXNlY3QoY3RsciwgMTIsIGJ1ZiwgOCwgMCkgIT0gOCkKIAkJCXJldHVybiAi Y2FuJ3QgcmVhZCBudm0gcGh5IGNvbmZpZyI7CkBAIC0yMjcyLDcgKzIyOTIsMjAgQEAKIAkJCWVh WzVdID0gYTEgPj4gMDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJlYWRudm1zZWN0KGN0bHIsIDAsIGVh LCBFYWRkcmxlbiwgMHgxNTw8MSk7CisJCS8qCisJCSAqIDcyNjAgZ2V0cyBhbmdyeSBpZiB3ZSBy ZWFkIDYgYnl0ZXMgZnJvbSAweDE1KjIuCisJCSAqIHJlYWRpbmcgOCBieXRlcyBmcm9tIDB4MTQq MiB3b3JrcyBmaW5lLgorCQkgKi8KKwkJaWYocmVhZG52bXNlY3QoY3RsciwgMCwgYnVmLCA4LCAw eDE0PDwxKSAhPSA4KQorCQkJcmV0dXJuICJjYW4ndCByZWFkIGVhIGZyb20gbnZtIjsKKworCQkv KiBieXRlIG9yZGVyIGlzIDE2IGJpdCBsaXR0bGUgZW5kaWFuLiAqLworCQllYVswXSA9IGJ1Zlsz XTsKKwkJZWFbMV0gPSBidWZbMl07CisJCWVhWzJdID0gYnVmWzVdOworCQllYVszXSA9IGJ1Zls0 XTsKKwkJZWFbNF0gPSBidWZbN107CisJCWVhWzVdID0gYnVmWzZdOwogCX0KIAltZW1tb3ZlKGN0 bHItPmVkZXYtPmFkZHIsIGVhLCBFYWRkcmxlbik7CiAKQEAgLTIzNjYsNyArMjM5OSw3IEBACiAJ CXAgKz0gMjsJCQkvKiBzbGVlcF90eF9jb3VudCAqLwogCQlwKys7CQkJLyogc2xlZXAgc3RhdGUg ZmxhZ3MgKi8KIAotCQkqcCsrID0gKGN0bHItPmZ3LT5hcGlbMF0gJiAoMTw8MzApKSAhPSAwID8g dHlwZSA6IDA7CQkvKiBzdGF0aW9uX3R5cGUgKi8KKwkJKnArKyA9IGN0bHItPmZ3LT5hcGlbMF0g JiBVY29kZUFwaVN0YSA/IHR5cGUgOiAwOwkJLyogc3RhdGlvbl90eXBlICovCiAKIAkJcCArPSAy OwkJCS8qIGFzc29jIGlkICovCiAKQEAgLTIzNzUsNyArMjQwOCw3IEBACiAJCXB1dDMyKHAsIDE8 PDApOwogCQlwICs9IDQ7CQkJLyogdGZkX3F1ZXVlX21hc2sgKi8KIAotCQlpZigxKXsKKwkJaWYo Y3Rsci0+ZnctPmFwaVswXSAmIFVjb2RlQXBpU3RhKXsKIAkJCXAgKz0gMjsJCS8qIHJ4X2JhX3dp bmRvdyAqLwogCQkJcCsrOwkJLyogc3BfbGVuZ3RoICovCiAJCQlwKys7CQkvKiB1YXBzZF9hY3Mg Ki8KQEAgLTI2NDAsNyArMjY3Myw3IEBACiBzdGF0aWMgY2hhcioKIHNldHRpbWVldmVudChDdGxy ICpjdGxyLCBpbnQgYW1yLCBpbnQgaXZhbCkKIHsKLQlpbnQgZHVyYXRpb24sIGRlbGF5LCB0aW1l aWQ7CisJaW50IHRpbWVpZDsKIAl1Y2hhciBjWzkqNF0sICpwOwogCWNoYXIgKmVycjsKIApAQCAt MjY2MiwxNCArMjY5NSw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmKGl2YWwpewotCQlkdXJhdGlv biA9IGl2YWwqMjsKLQkJZGVsYXkgPSBpdmFsLzI7Ci0JfSBlbHNlIHsKLQkJZHVyYXRpb24gPSAx MDI0OwotCQlkZWxheSA9IDA7Ci0JfQotCiAJbWVtc2V0KHAgPSBjLCAwLCBzaXplb2YoYykpOwog CXB1dDMyKHAsIGN0bHItPm1hY2lkKTsKIAlwICs9IDQ7CkBAIC0yNjc4LDIzICsyNzAzLDI3IEBA CiAJcHV0MzIocCwgdGltZWlkKTsKIAlwICs9IDQ7CiAKLQlwdXQzMihwLCAwKTsJLy8gYXBwbHkg dGltZQotCXAgKz0gNDsKLQlwdXQzMihwLCBkZWxheSk7Ci0JcCArPSA0OwotCXB1dDMyKHAsIDAp OwkvLyBkZXBlbmRzIG9uCi0JcCArPSA0OwotCXB1dDMyKHAsIDEpOwkvLyBpbnRlcnZhbAotCXAg Kz0gNDsKLQlwdXQzMihwLCBkdXJhdGlvbik7Ci0JcCArPSA0OwotCSpwKysgPSAxOwkvLyByZXBl YXQKLQkqcCsrID0gMDsJLy8gbWF4IGZyYWdzCi0JcHV0MTYocCwgMTw8MCB8IDE8PDEgfCAxPDwx MSk7CS8vIHBvbGljeQotCXAgKz0gMjsKKwlpZihhbXIgPT0gQ21kUmVtb3ZlKQorCQlwICs9IDYq NDsKKwllbHNleworCQlwdXQzMihwLCAwKTsJCQkvLyBhcHBseSB0aW1lCisJCXAgKz0gNDsKKwkJ cHV0MzIocCwgaXZhbC8yKTsJCS8vIG1heCBkZWxheQorCQlwICs9IDQ7CisJCXB1dDMyKHAsIDAp OwkJCS8vIGRlcGVuZHMgb24KKwkJcCArPSA0OworCQlwdXQzMihwLCAxKTsJCQkvLyBpbnRlcnZh bAorCQlwICs9IDQ7CisJCXB1dDMyKHAsIGl2YWw/IGl2YWwqMjogMTAyNCk7CS8vIGR1cmF0aW9u CisJCXAgKz0gNDsKKwkJKnArKyA9IDE7CQkJLy8gcmVwZWF0CisJCSpwKysgPSAwOwkJCS8vIG1h eCBmcmFncworCQlwdXQxNihwLCAxPDwwIHwgMTw8MSB8IDE8PDExKTsJLy8gcG9saWN5CisJCXAg Kz0gMjsKKwl9CiAKIAljdGxyLT50ZS5hY3RpdmUgPSAwOwotCWlmKChlcnIgPSAgY21kKGN0bHIs IDQxLCBjLCBwIC0gYykpICE9IG5pbCkKKwlpZigoZXJyID0gY21kKGN0bHIsIDQxLCBjLCBwIC0g YykpICE9IG5pbCkKIAkJcmV0dXJuIGVycjsKIAogCWlmKGFtciA9PSBDbWRSZW1vdmUpewpAQCAt MjcxMyw2ICsyNzQyLDkgQEAKIAl1Y2hhciBjWzQqKDMqNCldLCAqcDsKIAlpbnQgaTsKIAorCWlm KChjdGxyLT5mdy0+Y2FwYVsxXSAmIFVjb2RlQ2FwUXVvdGEpID09IDApCisJCXJldHVybiBuaWw7 CisKIAlpID0gMDsKIAlwID0gYzsKIApAQCAtMjgyMiwxMyArMjg1NCwxMyBAQAogCXJldHVybiBj bWQoY3RsciwgMjEwLCBjLCAxMSo0KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBjaGFyKgog dHR0eGJhY2tvZmYoQ3RsciAqY3RscikKIHsKIAl1Y2hhciBjWzRdOwogCQogCXB1dDMyKGMsIDAp OwotCWNtZChjdGxyLCAxMjYsIGMsIHNpemVvZihjKSk7CisJcmV0dXJuIGNtZChjdGxyLCAxMjYs IGMsIHNpemVvZihjKSk7CiB9CiAKIHN0YXRpYyBjaGFyKgpAQCAtMjg0OCw2ICsyODgwLDkgQEAK IAljaGFyICplcnI7CiAKIAlpZihjdGxyLT5jYWxpYi5kb25lID09IDApeworCQlpZihjdGxyLT5m YW1pbHkgPT0gNzAwMCkKKwkJCWlmKChlcnIgPSBzZW5kYnRjb2V4YWR2KGN0bHIpKSAhPSBuaWwp CisJCQkJcmV0dXJuIGVycjsKIAkJaWYoKGVyciA9IHJlYWRudm1jb25maWcoY3RscikpICE9IG5p bCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjg5NywxNiArMjkzMiwxNiBAQAogCiAJCS8qIElu aXRpYWxpemUgdHggYmFja29mZnMgdG8gdGhlIG1pbmltdW0uICovCiAJCWlmKGN0bHItPmZhbWls eSA9PSA3MDAwKQotCQkJdHR0eGJhY2tvZmYoY3Rscik7CisJCQlpZigoZXJyID0gdHR0eGJhY2tv ZmYoY3RscikpICE9IG5pbCkKKwkJCQlyZXR1cm4gZXJyOwogCiAJCWlmKChlcnIgPSB1cGRhdGVk ZXZpY2Vwb3dlcihjdGxyKSkgIT0gbmlsKXsKIAkJCXByaW50KCJjYW4ndCB1cGRhdGUgZGV2aWNl IHBvd2VyOiAlc1xuIiwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJaWYoKGVyciA9IHNl bmRtY2N1cGRhdGUoY3RsciwgIlpaIikpICE9IG5pbCl7Ci0JCQlwcmludCgiY2FuJ3QgZGlzYWJs ZSBiZWFjb24gZmlsdGVyOiAlc1xuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYo Y3Rsci0+ZnctPmNhcGFbMF0gJiBVY29kZUNhcExhcikKKwkJCWlmKChlcnIgPSBzZW5kbWNjdXBk YXRlKGN0bHIsICJaWiIpKSAhPSBuaWwpCisJCQkJcmV0dXJuIGVycjsKIAkJaWYoKGVyciA9IGRp c2FibGViZWFjb25maWx0ZXIoY3RscikpICE9IG5pbCl7CiAJCQlwcmludCgiY2FuJ3QgZGlzYWJs ZSBiZWFjb24gZmlsdGVyOiAlc1xuIiwgZXJyKTsKIAkJCXJldHVybiBlcnI7CkBAIC0zMzYyLDcg KzMzOTcsNyBAQAogCWZvcihpPTA7IGk8MTAwMDsgaSsrKXsKIAkJaWYoKHBycGhyZWFkKGN0bHIs IEJzbVdyQ3RybCkgJiAoMTw8MzEpKSA9PSAwKQogCQkJYnJlYWs7Ci0JCWRlbGF5KDEwKTsKKwkJ bWljcm9kZWxheSgxMCk7CiAJfQogCWlmKGkgPT0gMTAwMCl7CiAJCW5pY3VubG9jayhjdGxyKTsK QEAgLTM0MTgsNiArMzQ1Myw3IEBACiBzdGF0aWMgY2hhcioKIHFjbWQoQ3RsciAqY3RsciwgdWlu dCBxaWQsIHVpbnQgY29kZSwgdWNoYXIgKmRhdGEsIGludCBzaXplLCBCbG9jayAqYmxvY2spCiB7 CisJY2hhciAqZXJyOwogCWludCBoZHJsZW47CiAJQmxvY2sgKmJjbWQ7CiAJdWNoYXIgKmQsICpj OwpAQCAtMzQ1MiwxMCArMzQ4OCwxMCBAQAogCQlyZXR1cm4gInFjbWQ6IGJyb2tlbiI7CiAJfQog CS8qIHdha2UgdXAgdGhlIG5pYyAoanVzdCBuZWVkZWQgZm9yIDdrKSAqLwotCWlmKGN0bHItPmZh bWlseSA9PSA3MDAwICYmIHEtPm4gPT0gMCkKLQkJaWYobmljbG9jayhjdGxyKSAhPSBuaWwpewor CWlmKGN0bHItPmZhbWlseSA9PSA3MDAwICYmIHFpZCA9PSA0ICYmIHEtPm4gPT0gMCkKKwkJaWYo KGVyciA9IG5pY2xvY2soY3RscikpICE9IG5pbCl7CiAJCQlpdW5sb2NrKGN0bHIpOwotCQkJcmV0 dXJuICJxY21kOiBidXN5IjsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAlxLT5uKys7CiAJcS0+bGFz dGNtZCA9IGNvZGU7CkBAIC0zNTg2LDkgKzM2MjIsMTYgQEAKIAlpbnQgaTsKIAogCWZvcihpID0g MDsgaSA8IG5lbGVtKGN0bHItPnR4KTsgaSsrKQotCQlmbHVzaHEoY3RsciwgaSk7Ci0Jc2V0dGlt ZWV2ZW50KGN0bHIsIENtZFJlbW92ZSwgMCk7CisJCWlmKChlcnIgPSBmbHVzaHEoY3RsciwgaSkp ICE9IG5pbCl7CisJCQlwcmludCgiY2FuJ3QgZmx1c2ggcXVldWUgJWQ6ICVzXG4iLCBpLCBlcnIp OworCQkJcmV0dXJuIGVycjsKKwkJfQogCisJaWYoKGVyciA9IHNldHRpbWVldmVudChjdGxyLCBD bWRSZW1vdmUsIDApKSAhPSBuaWwpeworCQlwcmludCgiY2FuJ3QgcmVtb3ZlIHRpbWUgZXZlbnQ6 ICVzXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmKChlcnIgPSBzZXRiaW5kaW5n cXVvdGFzKGN0bHIsIC0xKSkgIT0gbmlsKXsKIAkJcHJpbnQoImNhbid0IGRpc2FibGUgcXVvdGFz OiAlc1xuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKQEAgLTM2MzAsNyArMzY3Myw3IEBACiAJCXJl dHVybiBlcnI7CiAJfQogCWlmKChlcnIgPSBzZXRiaW5kaW5nY29udGV4dChjdGxyLCBDbWRBZGQp KSAhPSBuaWwpewotCQlwcmludCgicmVtb3ZpbmcgYmluZGluZ2NvbnRleHQ6ICVzXG4iLCBlcnIp OworCQlwcmludCgiYWRkaW5nIGJpbmRpbmdjb250ZXh0OiAlc1xuIiwgZXJyKTsKIAkJcmV0dXJu IGVycjsKIAl9CiAJaWYoKGVyciA9IHNldG1jYXN0ZmlsdGVyKGN0bHIpKSAhPSBuaWwpewpAQCAt NDE3Niw2ICs0MjE5LDggQEAKIAkJCS8qIHdldCBmbG9vciAqLwogCQljYXNlIDEwMzoJLyogY2Fs aWJyYXRpb24gZG9uZSAoVHlwZTUwMDAgb25seSkgKi8KIAkJCWN0bHItPmNhbGliLmRvbmUgPSAx OworCQkJaWYoY3Rsci0+d2FpdC53ID09IEllcnIpCisJCQkJd2FrZXVwKCZjdGxyLT53YWl0KTsK IAkJCWJyZWFrOwogCQljYXNlIDEwNzoJLyogY2FsaWJyYXRpb24gcmVzdWx0ICg+PSA3MDAwIGZh bWlseSkgKi8KIAkJCWlmKGN0bHItPmZhbWlseSA8IDcwMDApCkBAIC00MjgzLDggKzQzMjgsOCBA QAogCQlpZih0eCAhPSBuaWwgJiYgdHgtPm4gPiAwKXsKIAkJCXR4LT5uLS07CiAJCQl3YWtldXAo dHgpOwotCQkJLyogdW5sb2NrIDdrIGZhbWlseSBuaWNzIGFzIGFsbCBjb21tYW5kcyBhcmUgZG9u ZSAqLwotCQkJaWYoY3Rsci0+ZmFtaWx5ID09IDcwMDAgJiYgdHgtPm4gPT0gMCkKKwkJCS8qIHVu bG9jayA3ayBmYW1pbHkgbmljcyBhcyB0aGUgY29tbWFuZCBpcyBkb25lICovCisJCQlpZihjdGxy LT5mYW1pbHkgPT0gNzAwMCAmJiBxaWQgPT0gNCAmJiB0eC0+biA9PSAwKQogCQkJCW5pY3VubG9j ayhjdGxyKTsKIAkJfQogCX0KQEAgLTQzNTQsMTQgKzQzOTksMTIgQEAKIAlpbnQgZmFtaWx5Owog CQogCXBkZXYgPSBuaWw7Ci0Jd2hpbGUocGRldiA9IHBjaW1hdGNoKHBkZXYsIDAsIDApKSB7CisJ d2hpbGUocGRldiA9IHBjaW1hdGNoKHBkZXYsIFZpbnRlbCwgMCkpIHsKIAkJQ3RsciAqY3RscjsK IAkJdm9pZCAqbWVtOwogCQkKIAkJaWYocGRldi0+Y2NyYiAhPSAyIHx8IHBkZXYtPmNjcnUgIT0g MHg4MCkKIAkJCWNvbnRpbnVlOwotCQlpZihwZGV2LT52aWQgIT0gMHg4MDg2KQotCQkJY29udGlu dWU7CiAJCWlmKHBkZXYtPm1lbVswXS5iYXIgJiAxKQogCQkJY29udGludWU7CiAKQEAgLTQzOTgs NyArNDQ0MSw3IEBACiAJCWNhc2UgMHgwOGIxOgkvKiBXaXJlbGVzcyBBQyA3MjYwICovCiAJCWNh c2UgMHgwOGIyOgkvKiBXaXJlbGVzcyBBQyA3MjYwICovCiAJCQlmYW1pbHkgPSA3MDAwOwotCQkJ ZnduYW1lID0gbmlsOworCQkJZnduYW1lID0gIml3bS03MjYwLTE3IjsKIAkJCWJyZWFrOwogCQlj YXNlIDB4MjRmMzoJLyogV2lyZWxlc3MgQUMgODI2MCAqLwogCQkJZmFtaWx5ID0gODAwMDsK --000000000000d18e4305ca193a23--