From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GAxW2-0003WQ-Dg for qemu-devel@nongnu.org; Wed, 09 Aug 2006 19:31:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GAxW1-0003WE-IF for qemu-devel@nongnu.org; Wed, 09 Aug 2006 19:31:10 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GAxW1-0003WA-Dd for qemu-devel@nongnu.org; Wed, 09 Aug 2006 19:31:09 -0400 Received: from [64.233.182.187] (helo=nf-out-0910.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GAxan-00052Y-Tf for qemu-devel@nongnu.org; Wed, 09 Aug 2006 19:36:06 -0400 Received: by nf-out-0910.google.com with SMTP id x37so325948nfc for ; Wed, 09 Aug 2006 16:31:07 -0700 (PDT) Message-ID: Date: Thu, 10 Aug 2006 03:31:07 +0400 From: "Igor Kovalenko" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_72335_8872160.1155166267340" Subject: [Qemu-devel] [PATCH] lance.c emulation corrections Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_72335_8872160.1155166267340 Content-Type: multipart/alternative; boundary="----=_Part_72336_32059954.1155166267340" ------=_Part_72336_32059954.1155166267340 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi! lance.c emulation implements incorrect algorithm to scan receive/transmit descriptors: - it scans a whole ring of descriptors instead of stopping at first owned by host - it skips buffers in corner cases - card is not reset, current rx/tx descriptor number is not reset when card is stopped by driver Attached patch should fix these problems. On-demand packet transmission is also implemented. Without this patch I had ~500 byte/second transfers with qemu-system-sparc, now it network speed is much better :) Looking at 7990 chip docs (main chip on lance card) it seems like there are more features not implemented; e.g. 1.6ms timer is needed to implement "normal" transmission. ------=_Part_72336_32059954.1155166267340 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi!

lance.c emulation implements incorrect algorithm to scan receive/transmit descriptors:
 - it scans a whole ring of descriptors instead of stopping at first owned by host
 - it skips buffers in corner cases
 - card is not reset, current rx/tx descriptor number is not reset when card is stopped by driver

Attached patch should fix these problems.
On-demand packet transmission is also implemented.

Without this patch I had ~500 byte/second transfers with qemu-system-sparc,
now it network speed is much better :)

Looking at 7990 chip docs (main chip on lance card) it seems like there are more features
not implemented; e.g. 1.6ms timer is needed to implement "normal" transmission.

------=_Part_72336_32059954.1155166267340-- ------=_Part_72335_8872160.1155166267340 Content-Type: text/x-patch; name=lance-20060810-1.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_eqoc2lzu Content-Disposition: attachment; filename="lance-20060810-1.diff" SW5kZXg6IGh3L2xhbmNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvcWVtdS9xZW11 L2h3L2xhbmNlLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1yMS45IGxhbmNl LmMKLS0tIGh3L2xhbmNlLmMJOSBBdWcgMjAwNiAyMjozODoxOSAtMDAwMAkxLjkKKysrIGh3L2xh bmNlLmMJOSBBdWcgMjAwNiAyMzoxNDozNyAtMDAwMApAQCAtMjEsNiArMjEsMjAgQEAKICAqIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MgSU4KICAqIFRIRSBTT0ZUV0FSRS4KICAqLworCisvKgorICogTW9kaWZpY2F0 aW9uczoKKyAqICAyMDA2LUF1Zy0xMCAgSWdvciBLb3ZhbGVua28gOiAgIENvcnJlY3RlZCBTVE9Q IHByb2NlZHVyZSB0byByZXNldCBjaGlwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDb3JyZWN0ZWQgdHJhbnNtaXNzaW9uIHJvdXRpbmUgdG8gc3RvcCByaW5nIHBvbGxpbmcK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIE9XTiBiaXQgaXMgbm90IHNl dCBpbiBjdXJyZW50IGRlc2NyaXB0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEltcGxlbWVudGVkIFRETUQgYml0IG9mIENTUjAgZm9yIHRyYW5zbWl0IG9uIGRlbWFuZAor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9yZSBkZWJ1ZyBzdGF0ZW1lbnRz IGluIHJvdXRpbmVzCisgKgorICogVE9ETyBsaXN0OgorICogICAgICBJbXBsZW1lbnQgYmxvY2sg Y2hhaW5pbmcgZm9yIHNlbmQgYW5kIHJlY2VpdmUgcmluZ3MuCisgKiAgICAgIGxhbmNlX2Nhbl9y ZWNlaXZlKCkgOiBpbXBsZW1lbnQgY2hlY2tpbmcgaWYgY2FyZCBvd25zIGN1cnJlbnQgcnggcmlu ZyBkZXNjcmlwdG9yCisgKgorICovCiAjaW5jbHVkZSAidmwuaCIKIAogLyogZGVidWcgTEFOQ0Ug Y2FyZCAqLwpAQCAtMTc2LDYgKzE5MCw4IEBACiAgICAgbWVtc2V0KHMtPnJlZ3MsIDAsIExFX05S RUdTICogMik7CiAgICAgcy0+cmVnc1tMRV9DU1IwXSA9IExFX0MwX1NUT1A7CiAgICAgbWVtc2V0 KHMtPmxlZG1hcmVncywgMCwgTEVETUFfUkVHUyAqIDQpOworCisgICAgRFBSSU5URigiZG9uZSBy ZXNldFxuIik7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBsYW5jZV9tZW1fcmVhZHcodm9pZCAqb3Bh cXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKQEAgLTIwNCw2ICsyMjAsNyBAQAogICAgIExB TkNFU3RhdGUgKnMgPSBvcGFxdWU7CiAgICAgdWludDMyX3Qgc2FkZHI7CiAgICAgdWludDE2X3Qg cmVnOworICAgIGludCBsYW5jZV90cmFuc21pdF9vbl9kZW1hbmQgPSAwOwogCiAgICAgc2FkZHIg PSBhZGRyICYgTEVfTUFYUkVHOwogICAgIHN3aXRjaCAoc2FkZHIgPj4gMSkgewpAQCAtMjEyLDEz ICsyMjksMjMgQEAKICAgICAgICAgc3dpdGNoIChzLT5hZGRyKSB7CiAgICAgICAgIGNhc2UgTEVf Q1NSMDoKICAgICAgICAgICAgIGlmICh2YWwgJiBMRV9DMF9TVE9QKSB7Ci0gICAgICAgICAgICAg ICAgcy0+cmVnc1tMRV9DU1IwXSA9IExFX0MwX1NUT1A7CisgICAgICAgICAgICAgICAgRFBSSU5U RigiQ1NSMCB3cml0ZSBTVE9QOiBjaGlwIHJlc2V0XG4iKTsKKyAgICAgICAgICAgICAgICBsYW5j ZV9yZXNldChzKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAg ICAgICAgICAgLy8gVHJhbnNtaXQgZGVtYW5kIGJpdAorICAgICAgICAgICAgaWYgKHZhbCAmIExF X0MwX1RETUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFBSSU5URigiQ1NSMCB3 cml0ZSAlMDh4IDogVERNRCB0cmFuc21pdCBkZW1hbmRcbiIsIHZhbCk7CisgICAgICAgICAgICAg ICAgbGFuY2VfdHJhbnNtaXRfb25fZGVtYW5kID0gMTsKKworICAgICAgICAgICAgICAgIC8vIHRo aXMgYml0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCwgc2VlIGJlbG93CisgICAgICAgICAgICB9 CisKICAgICAgICAgICAgIHJlZyA9IHMtPnJlZ3NbTEVfQ1NSMF07CiAKLSAgICAgICAgICAgIC8v IDEgPSBjbGVhciBmb3Igc29tZSBiaXRzCisgICAgICAgICAgICAvLyAxID0gY2xlYXIgZm9yIHNv bWUgYml0cywgaW5jbHVkaW5nIFRETUQKICAgICAgICAgICAgIHJlZyAmPSB+KHZhbCAmIDB4N2Yw MCk7CiAKICAgICAgICAgICAgIC8vIGdlbmVyYXRlZCBiaXRzCkBAIC0yNjUsNyArMjkyLDEyIEBA CiAgICAgICAgIERQUklOVEYoIndyaXRlIHVua25vd24oJWQpID0gJTQuNHhcbiIsIHNhZGRyID4+ IDEsIHZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBsYW5jZV9zZW5kKHMpOworCisg ICAgaWYgKGxhbmNlX3RyYW5zbWl0X29uX2RlbWFuZCkKKyAgICB7CisgICAgICAgIERQUklOVEYo Ij09PSBUcmFuc21pdCBvbiBkZW1hbmRcbiIpOworICAgICAgICBsYW5jZV9zZW5kKHMpOworICAg IH0KIH0KIAogc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICpsYW5jZV9tZW1fcmVhZFszXSA9IHsK QEAgLTI4NSw2ICszMTcsMTYgQEAKIAogc3RhdGljIGludCBsYW5jZV9jYW5fcmVjZWl2ZSh2b2lk ICpvcGFxdWUpCiB7CisgICAgTEFOQ0VTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIGlmICgocy0+ cmVnc1tMRV9DU1IwXSAmIExFX0MwX1NUT1ApID09IExFX0MwX1NUT1ApCisgICAgeworICAgICAg ICBEUFJJTlRGKCJsYW5jZV9jYW5fcmVjZWl2ZSgpIDogU1RPUFxuIik7CisgICAgICAgIHJldHVy biAxOworICAgIH0KKworICAgIC8vIFRPRE86IE5lZWQgdG8gY2hlY2sgaWYgY2FyZCBvd25zIGN1 cnJlbnQgcnggcmluZyBkZXNjcmlwdG9yCisKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMjk5LDMz ICszNDEsNDcgQEAKIAogICAgIERQUklOVEYoInJlY2VpdmUgc2l6ZSAlZFxuIiwgc2l6ZSk7CiAg ICAgaWYgKChzLT5yZWdzW0xFX0NTUjBdICYgTEVfQzBfU1RPUCkgPT0gTEVfQzBfU1RPUCkKKyAg ICB7CisgICAgICAgIERQUklOVEYoImxhbmNlX3JlY2VpdmUoKSA6IFNUT1BcbiIpOwogICAgICAg ICByZXR1cm47CisgICAgfQogCiAgICAgaWIgPSAodm9pZCAqKSBpb21tdV90cmFuc2xhdGUoZG1h cHRyKTsKIAorICAgIERQUklOVEYoIi0tLSBsYW5jZV9yZWNlaXZlIC0tLSBzY2FubmluZy4uLlxu Iik7CisKICAgICBvbGRfcnhwdHIgPSBzLT5yeHB0cjsKICAgICBmb3IgKGkgPSBzLT5yeHB0cjsg aSAhPSAoKG9sZF9yeHB0ciAtIDEpICYgUlhfUklOR19NT0RfTUFTSyk7CiAgICAgICAgICBpID0g KGkgKyAxKSAmIFJYX1JJTkdfTU9EX01BU0spIHsKICAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9y eV9yZWFkKCh1aW50MzJfdCkgJiBpYi0+YnJ4X3JpbmdbaV0ucm1kMV9iaXRzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJnRlbXA4LCAxKTsKLSAgICAgICAgaWYg KHRlbXA4ID09IChMRV9SMV9PV04pKSB7Ci0gICAgICAgICAgICBzLT5yeHB0ciA9IChzLT5yeHB0 ciArIDEpICYgUlhfUklOR19NT0RfTUFTSzsKLSAgICAgICAgICAgIHRlbXAxNiA9IHNpemUgKyA0 OwotICAgICAgICAgICAgYnN3YXAxNnMoJnRlbXAxNik7Ci0gICAgICAgICAgICBjcHVfcGh5c2lj YWxfbWVtb3J5X3dyaXRlKCh1aW50MzJfdCkgJiBpYi0+YnJ4X3JpbmdbaV0uCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ibGVuZ3RoLCAodm9pZCAqKSAmdGVtcDE2LCAy KTsKLSAgICAgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGUoKHVpbnQzMl90KSAmIGli LT5yeF9idWZbaV0sIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZSk7Ci0gICAgICAgICAgICB0ZW1wOCA9IExFX1IxX1BPSzsKLSAgICAgICAgICAgIGNwdV9w aHlzaWNhbF9tZW1vcnlfd3JpdGUoKHVpbnQzMl90KSAmIGliLT5icnhfcmluZ1tpXS4KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1kMV9iaXRzLCAodm9pZCAqKSAmdGVt cDgsIDEpOwotICAgICAgICAgICAgcy0+cmVnc1tMRV9DU1IwXSB8PSBMRV9DMF9SSU5UIHwgTEVf QzBfSU5UUjsKLSAgICAgICAgICAgIGlmIChzLT5yZWdzW0xFX0NTUjBdICYgTEVfQzBfSU5FQSkK LSAgICAgICAgICAgICAgICBwaWNfc2V0X2lycShzLT5pcnEsIDEpOwotICAgICAgICAgICAgRFBS SU5URigiZ290IHBhY2tldCwgbGVuICVkXG4iLCBzaXplKTsKLSAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICBpZiAoISh0ZW1wOCAmIExFX1IxX09XTikpCisgICAgICAgIHsKKyAgICAgICAg ICAgIERQUklOVEYoIiMjIyBsYW5jZV9yZWNlaXZlKCkgOiBPV04gbm90IHNldCBSTUQxIGJpdHM9 JTAyeCBpbiByeCBkZXNjcmlwdG9yICV1XG4iLCB0ZW1wOCwgaSk7CisgICAgICAgICAgICBicmVh azsKICAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE86IGltcGxlbWVudCByZWNlaXZlIGJ1ZmZl ciBjaGFpbmluZworCisgICAgICAgIHMtPnJ4cHRyID0gKHMtPnJ4cHRyICsgMSkgJiBSWF9SSU5H X01PRF9NQVNLOworICAgICAgICB0ZW1wMTYgPSBzaXplICsgNDsKKyAgICAgICAgYnN3YXAxNnMo JnRlbXAxNik7CisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGUoKHVpbnQzMl90KSAm IGliLT5icnhfcmluZ1tpXS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmxl bmd0aCwgKHZvaWQgKikgJnRlbXAxNiwgMik7CisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlf d3JpdGUoKHVpbnQzMl90KSAmIGliLT5yeF9idWZbaV0sIGJ1ZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplKTsKKyAgICAgICAgdGVtcDggPSBMRV9SMV9QT0s7CisgICAg ICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGUoKHVpbnQzMl90KSAmIGliLT5icnhfcmluZ1tp XS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWQxX2JpdHMsICh2b2lkICop ICZ0ZW1wOCwgMSk7CisgICAgICAgIHMtPnJlZ3NbTEVfQ1NSMF0gfD0gTEVfQzBfUklOVCB8IExF X0MwX0lOVFI7CisgICAgICAgIERQUklOVEYoImdvdCBwYWNrZXQsIGxlbiAlZFxuIiwgc2l6ZSk7 CisgICAgICAgIGlmIChzLT5yZWdzW0xFX0NTUjBdICYgTEVfQzBfSU5FQSkKKyAgICAgICAgICAg IHBpY19zZXRfaXJxKHMtPmlycSwgMSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIERQ UklOVEYoImxhbmNlX3JlY2VpdmUoKSA6IGxlYXZlXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgbGFu Y2Vfc2VuZCh2b2lkICpvcGFxdWUpCkBAIC0zNDAsMzUgKzM5Niw4MiBAQAogCiAgICAgRFBSSU5U Rigic2VuZGluZyBwYWNrZXQ/IChjc3IwICU0LjR4KVxuIiwgcy0+cmVnc1tMRV9DU1IwXSk7CiAg ICAgaWYgKChzLT5yZWdzW0xFX0NTUjBdICYgTEVfQzBfU1RPUCkgPT0gTEVfQzBfU1RPUCkKKyAg ICB7CisgICAgICAgIERQUklOVEYoImxhbmNlX3NlbmQoKSA6IFNUT1BcbiIpOwogICAgICAgICBy ZXR1cm47CisgICAgfQogCiAgICAgaWIgPSAodm9pZCAqKSBpb21tdV90cmFuc2xhdGUoZG1hcHRy KTsKIAogICAgIERQUklOVEYoInNlbmRpbmcgcGFja2V0PyAoZG1hcHRyICU4Ljh4KSAoaWIgJXAp IChidHhfcmluZyAlcClcbiIsCiAgICAgICAgICAgICBkbWFwdHIsIGliLCAmaWItPmJ0eF9yaW5n KTsKICAgICBvbGRfdHhwdHIgPSBzLT50eHB0cjsKLSAgICBmb3IgKGkgPSBzLT50eHB0cjsgaSAh PSAoKG9sZF90eHB0ciAtIDEpICYgVFhfUklOR19NT0RfTUFTSyk7Ci0gICAgICAgICBpID0gKGkg KyAxKSAmIFRYX1JJTkdfTU9EX01BU0spIHsKKworICAgIC8vIHRyYW5zbWl0IGRlc2NyaXB0b3Ig cG9sbGluZyBsb29wCisgICAgLy8gdGVybWluYXRlcyBPTkxZIGlmIGxhbmNlIGRvZXMgbm90IG93 biBjdXJyZW50IHRyYW5zbWl0IGRlc2NyaXB0b3IKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAg ICAgIGkgPSBzLT50eHB0cjsKKwogICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3JlYWQoKHVp bnQzMl90KSAmIGliLT5idHhfcmluZ1tpXS50bWQxX2JpdHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZCAqKSAmdGVtcDgsIDEpOwotICAgICAgICBpZiAodGVtcDggPT0g KExFX1QxX1BPSyB8IExFX1QxX09XTikpIHsKKworICAgICAgICBpZiAoISh0ZW1wOCAmIExFX1Qx X09XTikpCisgICAgICAgIHsKKyAgICAgICAgICAgIERQUklOVEYoIiMjIyBPV04gYml0IG5vdCBz ZXQgaW4gdHggZGVzY3JpcHRvciAldSA6IHN0b3AgcG9sbGluZ1xuIiwgaSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0ZW1wOCA9PSAoTEVfVDFfUE9L fExFX1QxX09XTikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE86IE5PREUgdGhpcyBp cyBhIHByb2JlIGZvciBjb21wbGV0ZSBwYWNrZXQgaW4gc2luZ2xlIHR4IGJ1ZmZlcgorCisgICAg ICAgICAgICBEUFJJTlRGKCIrKysgT1dOIGJpdCBzZXQgaW4gdHggZGVzY3JpcHRvciAldVxuIiwg aSk7CiAgICAgICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3JlYWQoKHVpbnQzMl90KSAmIGli LT5idHhfcmluZ1tpXS5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZvaWQgKikgJnRlbXAxNiwgMik7CiAgICAgICAgICAgICBic3dhcDE2cygmdGVtcDE2KTsK ICAgICAgICAgICAgIHRlbXAxNiA9ICh+dGVtcDE2KSArIDE7CiAgICAgICAgICAgICBjcHVfcGh5 c2ljYWxfbWVtb3J5X3JlYWQoKHVpbnQzMl90KSAmIGliLT50eF9idWZbaV0sIHBrdF9idWYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcDE2KTsKLSAgICAgICAgICAg IERQUklOVEYoInNlbmRpbmcgcGFja2V0LCBsZW4gJWRcbiIsIHRlbXAxNik7Ci0gICAgICAgICAg ICBxZW11X3NlbmRfcGFja2V0KHMtPnZjLCBwa3RfYnVmLCB0ZW1wMTYpOwogICAgICAgICAgICAg dGVtcDggPSBMRV9UMV9QT0s7CiAgICAgICAgICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRl KCh1aW50MzJfdCkgJiBpYi0+YnR4X3JpbmdbaV0uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRtZDFfYml0cywgKHZvaWQgKikgJnRlbXA4LCAxKTsKKworICAgICAgICAg ICAgLy8gYWR2YW5jZSB0byBuZXh0IHRyYW5zbWl0IGRlc2NyaXB0b3IKICAgICAgICAgICAgIHMt PnR4cHRyID0gKHMtPnR4cHRyICsgMSkgJiBUWF9SSU5HX01PRF9NQVNLOwogICAgICAgICAgICAg cy0+cmVnc1tMRV9DU1IwXSB8PSBMRV9DMF9USU5UIHwgTEVfQzBfSU5UUjsKKworICAgICAgICAg ICAgLy8gbm90aWZ5IGFib3V0IGNvbXBsZXRlIHBhY2tldCB0cmFuc21pc3Npb24KKyAgICAgICAg ICAgIGlmICgocy0+cmVnc1tMRV9DU1IwXSAmIExFX0MwX0lOVFIpICYmIChzLT5yZWdzW0xFX0NT UjBdICYgTEVfQzBfSU5FQSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFBSSU5U RigiLS0tIGxhbmNlX3NlbmQgKysrIHJhaXNpbmcgaW50ZXJydXB0IGZvciBUSU5UXG4iKTsKKyAg ICAgICAgICAgICAgICBwaWNfc2V0X2lycShzLT5pcnEsIDEpOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAvLyBhY3R1YWxseSBzZW5kIHBhY2tldCBhIGJpdCBsYXRlciwgdG8gcHJldmVu dCBwb3NzaWJsZSByZWN1cnNpb24gKHR4LT5yeC0+dHgpCisgICAgICAgICAgICBEUFJJTlRGKCIt LS0gbGFuY2Vfc2VuZCArKysgc2VuZGluZyBwYWNrZXQsIGxlbiAlZFxuIiwgdGVtcDE2KTsKKyAg ICAgICAgICAgIHFlbXVfc2VuZF9wYWNrZXQocy0+dmMsIHBrdF9idWYsIHRlbXAxNik7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEUFJJTlRGKCIjIyMg bm90IGltcGxlbWVudGVkIGJ1ZmZlciBjaGFpbmluZywgZmxhZ3MgJTAyeCBpbiB0eCBkZXNjcmlw dG9yICV1XG4iLCB0ZW1wOCwgaSk7CisKKyAgICAgICAgICAgIC8vIFRPRE86IG11c3QgaGFuZGxl IGJ1ZmZlciBjaGFpbmluZworCisgICAgICAgICAgICB0ZW1wOCA9IDA7CisKKyAgICAgICAgICAg IGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGUoKHVpbnQzMl90KSZpYi0+YnR4X3JpbmdbaV0udG1k MV9iaXRzLCAodm9pZCAqKSAmdGVtcDgsIDEpOworICAgICAgICAgICAgcy0+cmVnc1tMRV9DU1Iw XSB8PSBMRV9DMF9USU5UIHwgTEVfQzBfSU5UUjsKKworICAgICAgICAgICAgLy8gbm90aWZ5IGFi b3V0IGNvbXBsZXRlIHBhY2tldCB0cmFuc21pc3Npb24KKyAgICAgICAgICAgIGlmICgocy0+cmVn c1tMRV9DU1IwXSAmIExFX0MwX0lOVFIpICYmIChzLT5yZWdzW0xFX0NTUjBdICYgTEVfQzBfSU5F QSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFBSSU5URigiLS0tIGxhbmNlX3Nl bmQgKysrIHJhaXNpbmcgaW50ZXJydXB0IGZvciBUSU5UXG4iKTsKKyAgICAgICAgICAgICAgICBw aWNfc2V0X2lycShzLT5pcnEsIDEpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot ICAgIGlmICgocy0+cmVnc1tMRV9DU1IwXSAmIExFX0MwX0lOVFIpICYmIChzLT5yZWdzW0xFX0NT UjBdICYgTEVfQzBfSU5FQSkpCi0gICAgICAgIHBpY19zZXRfaXJxKHMtPmlycSwgMSk7CisKKyAg ICBEUFJJTlRGKCJsYW5jZV9zZW5kKCkgbGVhdmVcbiIpOwogfQogCiBzdGF0aWMgdWludDMyX3Qg bGVkbWFfbWVtX3JlYWRsKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCg== ------=_Part_72335_8872160.1155166267340--