From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1BbjaQ-0003AS-Cn for qemu-devel@nongnu.org; Sat, 19 Jun 2004 13:25:02 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1BbjaO-00039g-1W for qemu-devel@nongnu.org; Sat, 19 Jun 2004 13:25:01 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BbjaN-00039W-SH for qemu-devel@nongnu.org; Sat, 19 Jun 2004 13:24:59 -0400 Received: from [213.146.130.142] (helo=trantor.org.uk) by monty-python.gnu.org with esmtp (TLSv1:DES-CBC3-SHA:168) (Exim 4.34) id 1BbjYu-00021z-Uq for qemu-devel@nongnu.org; Sat, 19 Jun 2004 13:23:29 -0400 From: Gianni Tedesco Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-sUaO4TIq0cevUqbzLtiS" Date: Sat, 19 Jun 2004 18:22:20 +0100 Message-Id: <1087665740.3375.260.camel@sherbert> Mime-Version: 1.0 Subject: [Qemu-devel] [PATCH]: USB-OHCI v0.1 (not ready for users) 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 --=-sUaO4TIq0cevUqbzLtiS Content-Type: multipart/mixed; boundary="=-2oSBC5UT8ryPDT2fNoxR" --=-2oSBC5UT8ryPDT2fNoxR Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, I've started working on USB support for qemu, by implementing an OHCI controller frontend, which is usable on any of the architectures qemu supports. It's not ready yet, but thought I'd share what I have after day 1, developments are updated on: http://www.scaramanga.co.uk/stuff/qemu-usb/ All this code does currently is emulate a decent amount of the HC frontend, enough to setup the root hub. All that means is that in linux you should see /proc/bus/usb/ nodes! :) TODO: o Implement ED/TD list handling. ie. make transfers work. o Implement USB device API and test devices mouse/kb/proxy/storage o Make root hub look like standard devices --=20 // Gianni Tedesco (gianni at scaramanga dot co dot uk) lynx --source www.scaramanga.co.uk/scaramanga.asc | gpg --import 8646BE7D: 6D9F 2287 870E A2C9 8F60 3A3C 91B5 7669 8646 BE7D --=-2oSBC5UT8ryPDT2fNoxR Content-Disposition: attachment; filename=qemu-usb-0.1.diff Content-Type: text/x-patch; name=qemu-usb-0.1.diff; charset=UTF-8 Content-Transfer-Encoding: base64 ZGlmZiAtdXJOIHFlbXUub3JpZy9NYWtlZmlsZS50YXJnZXQgcWVtdS51c2IvTWFrZWZpbGUudGFy Z2V0DQotLS0gcWVtdS5vcmlnL01ha2VmaWxlLnRhcmdldAkyMDA0LTA2LTE1IDAzOjAyOjM2LjAw MDAwMDAwMCArMDEwMA0KKysrIHFlbXUudXNiL01ha2VmaWxlLnRhcmdldAkyMDA0LTA2LTE3IDE5 OjM1OjUxLjAwMDAwMDAwMCArMDEwMA0KQEAgLTIzMiw3ICsyMzIsNyBAQA0KIGVuZGlmDQogDQog IyBtdXN0IHVzZSBzdGF0aWMgbGlua2luZyB0byBhdm9pZCBsZWF2aW5nIHN0dWZmIGluIHZpcnR1 YWwgYWRkcmVzcyBzcGFjZQ0KLVZMX09CSlM9dmwubyBvc2RlcC5vIGJsb2NrLm8gbW9uaXRvci5v IHBjaS5vDQorVkxfT0JKUz12bC5vIG9zZGVwLm8gYmxvY2subyBtb25pdG9yLm8gcGNpLm8gdXNi LW9oY2kubw0KIA0KIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLCBpMzg2KQ0KICMgSGFyZHdhcmUgc3Vw cG9ydA0KZGlmZiAtdXJOIHFlbXUub3JpZy9ody9wYy5jIHFlbXUudXNiL2h3L3BjLmMNCi0tLSBx ZW11Lm9yaWcvaHcvcGMuYwkyMDA0LTA2LTE1IDAzOjAyOjM2LjAwMDAwMDAwMCArMDEwMA0KKysr IHFlbXUudXNiL2h3L3BjLmMJMjAwNC0wNi0xOCAxNDoyOTowMC4wMDAwMDAwMDAgKzAxMDANCkBA IC00MzIsNiArNDMyLDkgQEANCiAgICAgICAgICAgICBwY2lfbmUyMDAwX2luaXQoJm5kX3RhYmxl W2ldKTsNCiAgICAgICAgIH0NCiAgICAgICAgIHBjaV9waWl4M19pZGVfaW5pdChic190YWJsZSk7 DQorDQorICAgICAgICAvKiBTaHV0IHVwISAqLw0KKyAgICAgICAgdXNiX29oY2lfaW5pdCgiQXBw bGUgS2V5TGFyZ28vSW50cmVwaWQiLCAweDEwNmIsIDB4MDAzZiwgMCwgLTEpOw0KICAgICB9IGVs c2Ugew0KICAgICAgICAgbmJfbmljczEgPSBuYl9uaWNzOw0KICAgICAgICAgaWYgKG5iX25pY3Mx ID4gTkUyMDAwX05CX01BWCkNCmRpZmYgLXVyTiBxZW11Lm9yaWcvaHcvdXNiLW9oY2kuYyBxZW11 LnVzYi9ody91c2Itb2hjaS5jDQotLS0gcWVtdS5vcmlnL2h3L3VzYi1vaGNpLmMJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisrKyBxZW11LnVzYi9ody91c2Itb2hjaS5jCTIw MDQtMDYtMTkgMTc6NDQ6NTUuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDU4NiBAQA0KKy8q DQorICogUUVNVSBVU0IgT0hDSSBJbnRlcmZhY2UgdjAuMQ0KKyAqIENvcHlyaWdodCAoYykgMjAw NCBHaWFubmkgVGVkZXNjbw0KKyAqDQorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQorICoNCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMNCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl LCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKyAqDQorICogVE9ETzoN CisgKiAgbyBEeW5hbWljYWxseSBtYW5hZ2UgaHViIHBvcnRzDQorICogIG8gSW1wbGVtZW50IGFj dHVhbCBkYXRhIHRyYW5zZmVycw0KKyovDQorDQorc3RhdGljIGNvbnN0IGNoYXIgY29weXJpZ2h0 W10gPQ0KKwkidXNiLW9oY2kuYzogdjAuMSBDb3B5cmlnaHQgKGMpIEdpYW5uaSBUZWRlc2NvIDIw MDQiOw0KKw0KKyNpbmNsdWRlICJ2bC5oIg0KKyNpbmNsdWRlICJjcHUuaCINCisNCisjaWYgMA0K KyNkZWZpbmUgZHByaW50ZiguLi4pDQorI2Vsc2UNCisjZGVmaW5lIGRwcmludGYgcHJpbnRmDQor I2VuZGlmDQorDQorLyogTnVtYmVyIG9mIERvd25zdHJlYW0gUG9ydHMgb24gdGhlIHJvb3QgaHVi LCBpZiB5b3UgY2hhbmdlIHRoaXMNCisgKiB5b3UgbmVlZCB0byBhZGQgbW9yZSBzdGF0dXMgcmVn aXN0ZXIgd29yZHMgdG8gdGhlICdvcHJlZycgYXJyYXkNCisgKi8NCisjZGVmaW5lIE9IQ0lfTkRQ IDgNCisNCitzdHJ1Y3Qgb2hjaSB7DQorCXN0cnVjdCBQQ0lEZXZpY2UgcGNpX2RldjsNCisJdGFy Z2V0X3BoeXNfYWRkcl90IG1lbV9iYXNlOw0KKwlpbnQgbWVtOw0KKw0KKwkvKiBPSENJIHN0YXRl ICovDQorCS8qIENvbnRyb2wgcGFydGl0aW9uICovDQorCXVpbnQzMl90IGN0bCwgc3RhdHVzOw0K Kwl1aW50MzJfdCBpbnRyX3N0YXR1czsNCisJdWludDMyX3QgaW50cjsNCisNCisJLyogbWVtb3J5 IHBvaW50ZXIgcGFydGl0aW9uICovDQorCXVpbnQzMl90IGhjY2E7DQorCXVpbnQzMl90IGN0cmxf aGVhZDsNCisJdWludDMyX3QgYnVsa19oZWFkOw0KKw0KKwkvKiBGcmFtZSBjb3VudGVyIHBhcnRp dGlvbiAqLw0KKwl1aW50MzJfdCBmbWk7DQorCXVpbnQzMl90IHBzdGFydDsNCisNCisJLyogUm9v dCBIdWIgcGFydGl0aW9uICovDQorCXVpbnQzMl90IHJoZGVzY19hLCByaGRlc2NfYjsNCisJdWlu dDMyX3QgcmhzdGF0dXM7DQorCXVpbnQzMl90IHJocG9ydFtPSENJX05EUF07DQorfTsNCisNCitz dHJ1Y3Qgb2hjaV9oY2NhIHsNCisJdWludDMyX3QgaW50clszMl07DQorCXVpbnQxNl90IGZyYW1l LCBwYWQ7DQorCXVpbnQzMl90IGRvbmU7DQorfTsNCisNCitleHRlcm4gc3RydWN0IG9oY2lfb3By ZWcgb3ByZWdbXTsNCitzdHJ1Y3Qgb2hjaV9vcHJlZyB7DQorCWNvbnN0IGNoYXIgKm5hbWU7DQor CXVpbnQzMl90ICgqcmVhZCkoc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IG9mcyk7DQorCXZv aWQgKCp3cml0ZSkoc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IG9mcywgdWludDMyX3QgdmFs KTsNCit9Ow0KKw0KKyNkZWZpbmUgT0hDSV9DVExfSVIJCSgxPDw4KQ0KKw0KKyNkZWZpbmUgT0hD SV9TVEFUVVNfSENSCQkoMTw8MCkNCisjZGVmaW5lIE9IQ0lfU1RBVFVTX1NPQwkJKCgxPDw2KXwo MTw8NykpDQorDQorI2RlZmluZSBPSENJX0lOVFJfU08JCSgxPDwwKSAvKiBTY2hlZHVsaW5nIG92 ZXJydW4gKi8NCisjZGVmaW5lIE9IQ0lfSU5UUl9XREgJCSgxPDwxKSAvKiBIY0RvbmVIZWFkIHdy aXRlYmFjayAqLw0KKyNkZWZpbmUgT0hDSV9JTlRSX1NGCQkoMTw8MikgLyogU3RhcnQgb2YgZnJh bWUgKi8NCisjZGVmaW5lIE9IQ0lfSU5UUl9SRAkJKDE8PDMpIC8qIFJlc3VtZSBkZXRlY3QgKi8N CisjZGVmaW5lIE9IQ0lfSU5UUl9VRQkJKDE8PDQpIC8qIFVucmVjb3ZlcmFibGUgZXJyb3IgKi8N CisjZGVmaW5lIE9IQ0lfSU5UUl9GTk8JCSgxPDw1KSAvKiBGcmFtZSBudW1iZXIgb3ZlcmZsb3cg Ki8NCisjZGVmaW5lIE9IQ0lfSU5UUl9SSFNDCQkoMTw8NikgLyogUm9vdCBodWIgc3RhdHVzIGNo YW5nZSAqLw0KKyNkZWZpbmUgT0hDSV9JTlRSX09DCQkoMTw8MzApIC8qIE93bmVyc2hpcCBjaGFu Z2UgKi8NCisjZGVmaW5lIE9IQ0lfSU5UUl9NSUUJCSgxPDwzMSkgLyogTWFzdGVyIEludGVycnVw dCBFbmFibGUgKi8NCisNCisjZGVmaW5lIE9IQ0lfSENDQV9TSVpFCQkweDEwMA0KKyNkZWZpbmUg T0hDSV9IQ0NBX01BU0sJCTB4ZmZmZmZmMDANCisNCisjZGVmaW5lIE9IQ0lfRk1JX0ZJCQkweDAw MDAzZmZmDQorI2RlZmluZSBPSENJX0ZNSV9GU01QUwkJMHhmZmZmMDAwMA0KKyNkZWZpbmUgT0hD SV9GTUlfRklUCQkweDgwMDAwMDAwDQorDQorI2RlZmluZSBPSENJX0xTX1RIUkVTSAkJMHg2MjgN CisNCisjZGVmaW5lIE9IQ0lfUkhBX05QUwkJKDE8PDkpDQorDQorI2RlZmluZSBPSENJX1JIU19M UFMJCSgxPDwwKQ0KKyNkZWZpbmUgT0hDSV9SSFNfT0NJCQkoMTw8MSkNCisjZGVmaW5lIE9IQ0lf UkhTX0RSV0UJCSgxPDwxNSkNCisjZGVmaW5lIE9IQ0lfUkhTX0xQU0MJCSgxPDwxNikNCisjZGVm aW5lIE9IQ0lfUkhTX09DSUMJCSgxPDwxNykNCisjZGVmaW5lIE9IQ0lfUkhTX0NSV0UJCSgxPDwz MSkNCisNCisjZGVmaW5lIE9IQ0lfUE9SVF9DQ1MJCSgxPDwwKQ0KKyNkZWZpbmUgT0hDSV9QT1JU X1BFUwkJKDE8PDEpDQorI2RlZmluZSBPSENJX1BPUlRfUFNTCQkoMTw8MikNCisjZGVmaW5lIE9I Q0lfUE9SVF9QT0NJCQkoMTw8MykNCisjZGVmaW5lIE9IQ0lfUE9SVF9QUlMJCSgxPDw0KQ0KKyNk ZWZpbmUgT0hDSV9QT1JUX1BQUwkJKDE8PDgpDQorI2RlZmluZSBPSENJX1BPUlRfTFNEQQkJKDE8 PDkpDQorI2RlZmluZSBPSENJX1BPUlRfQ1NDCQkoMTw8MTYpDQorI2RlZmluZSBPSENJX1BPUlRf UEVTQwkJKDE8PDE3KQ0KKyNkZWZpbmUgT0hDSV9QT1JUX1BTU0MJCSgxPDwxOCkNCisjZGVmaW5l IE9IQ0lfUE9SVF9PQ0lDCQkoMTw8MTkpDQorI2RlZmluZSBPSENJX1BPUlRfUFJTQwkJKDE8PDIw KQ0KKw0KKy8qIFJlc2V0IHRoZSBjb250cm9sbGVyICovDQorc3RhdGljIHZvaWQgb2hjaV9yZXNl dChzdHJ1Y3Qgb2hjaSAqb2hjaSkNCit7DQorCWludCBpOw0KKw0KKwlvaGNpLT5jdGwgPSBvaGNp LT5jdGwgJiBPSENJX0NUTF9JUjsNCisJb2hjaS0+c3RhdHVzID0gMDsNCisJb2hjaS0+aW50cl9z dGF0dXMgPSAwOw0KKwlvaGNpLT5pbnRyID0gMDsNCisNCisJb2hjaS0+aGNjYSA9IDA7DQorCW9o Y2ktPmN0cmxfaGVhZCA9IG9oY2ktPmJ1bGtfaGVhZCA9IDA7DQorDQorCS8qIEZTTVBTIGlzIG1h cmtlZCBUQkQgaW4gT0NISSAxLjAsIHdoYXQgZ2l2ZXMgZmZzPw0KKwkgKiBJIHRvb2sgdGhlIHZh bHVlIGxpbnV4IHNldHMgLi4uDQorCSAqLw0KKwlvaGNpLT5mbWkgPSAoMHgyNzc4IDw8IDE2KSB8 IDB4MmVkZjsNCisJb2hjaS0+cHN0YXJ0ID0gMDsNCisNCisJb2hjaS0+cmhkZXNjX2EgPSBPSENJ X1JIQV9OUFMgfCBPSENJX05EUDsNCisJb2hjaS0+cmhkZXNjX2IgPSAweDA7IC8qIEltcGwuIHNw ZWNpZmljICovDQorCW9oY2ktPnJoc3RhdHVzID0gMDsNCisNCisJZm9yKGk9MDsgaSA8IE9IQ0lf TkRQOyBpKyspDQorCQlvaGNpLT5yaHBvcnRbaV0gPSAwOw0KKw0KKwlkcHJpbnRmKCJ1c2Itb2hj aTogUmVzZXQgJXNcbiIsIG9oY2ktPnBjaV9kZXYubmFtZSk7DQorfQ0KKw0KKy8qIENvbnZlcnQg YSBndWVzdCBwb2ludGVyIHRvIGEgcWVtdSBwb2ludGVyICovDQorc3RhdGljIHVpbnQ4X3QgKnJl ZzJwdHIodWludDMyX3QgYWRkciwgdWludDMyX3QgbGVuKQ0KK3sNCisJaWYgKCBhZGRyICsgbGVu ID4gcGh5c19yYW1fc2l6ZSApIHsNCisJCWZwcmludGYoc3RkZXJyLCAidXNiLW9oY2k6IE9TIHRy aWVkIHRvIGFjY2VzcyBvdXRzaWRlIFJBTVxuIik7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0K KwlyZXR1cm4gcGh5c19yYW1fYmFzZSArIGxlbjsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IHJl dl9yKHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJfdCByZWcpDQorew0KKwlyZXR1cm4gMHgxMDsN Cit9DQorDQorLyogSGNDb250cm9sUmVnaXN0ZXIgKi8NCitzdGF0aWMgdWludDMyX3QgY3RsX3Io c3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZykNCit7DQorCXJldHVybiBvaGNpLT5jdGw7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGN0bF93KHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJfdCBy ZWcsIHVpbnQzMl90IHZhbCkNCit7DQorCW9oY2ktPmN0bCA9IHZhbDsNCit9DQorDQorLyogSGND b21tYW5kU3RhdHVzICovDQorc3RhdGljIHVpbnQzMl90IHN0YXR1c19yKHN0cnVjdCBvaGNpICpv aGNpLCB1aW50MzJfdCByZWcpDQorew0KKwlyZXR1cm4gb2hjaS0+c3RhdHVzOw0KK30NCisNCitz dGF0aWMgdm9pZCBzdGF0dXNfdyhzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnLCB1aW50 MzJfdCB2YWwpDQorew0KKwkvKiBTT0MgaXMgcmVhZC1vbmx5ICovDQorCXZhbCA9ICh2YWwgJiB+ T0hDSV9TVEFUVVNfU09DKTsNCisNCisJLyogImJpdHMgd3JpdHRlbiBhcyAnMCcgcmVtYWluIHVu Y2hhbmdlZCBpbiB0aGUgcmVnaXN0ZXIgKi8NCisJb2hjaS0+c3RhdHVzIHw9IHZhbDsNCisNCisJ aWYgKCBvaGNpLT5zdGF0dXMgJiBPSENJX1NUQVRVU19IQ1IgKQ0KKwkJb2hjaV9yZXNldChvaGNp KTsNCit9DQorDQorLyogSGNJbnRlcnJ1cHRTdGF0dXMgKi8NCitzdGF0aWMgdWludDMyX3QgaXNf cihzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0KK3sNCisJcmV0dXJuIG9oY2ktPmlu dHJfc3RhdHVzOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc193KHN0cnVjdCBvaGNpICpvaGNpLCB1 aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkNCit7DQorCS8qICJUaGUgSG9zdCBDb250cm9sbGVy IERyaXZlciBtYXkgY2xlYXIgc3BlY2lmaWMgYml0cyBpbiB0aGlzDQorCSAqIHJlZ2lzdGVyIGJ5 IHdyaXRpbmcgJzEnIHRvIGJpdCBwb3NpdGlvbnMgdG8gYmUgY2xlYXJlZA0KKwkgKi8NCisJb2hj aS0+aW50cl9zdGF0dXMgJj0gfnZhbDsNCit9DQorDQorLyogSGNJbnRlcnJ1cHRFbmFibGUgKi8N CitzdGF0aWMgdWludDMyX3QgaWVfcihzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0K K3sNCisJcmV0dXJuIG9oY2ktPmludHI7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGllX3coc3RydWN0 IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKQ0KK3sNCisJb2hjaS0+aW50 ciB8PSB2YWw7DQorfQ0KKw0KKy8qIEhjSW50ZXJydXB0RGlzYWJsZSAqLw0KK3N0YXRpYyB1aW50 MzJfdCBpZF9yKHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJfdCByZWcpDQorew0KKwlyZXR1cm4g fm9oY2ktPmludHI7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlkX3coc3RydWN0IG9oY2kgKm9oY2ks IHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKQ0KK3sNCisJb2hjaS0+aW50ciAmPSB+dmFsOw0K K30NCisNCisvKiBIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbnMgQXJlYSAqLw0KK3N0YXRp YyB1aW50MzJfdCBoY2NhX3Ioc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZykNCit7DQor CS8qIFdlIHJldHVybiBtaW5pbXVtIGFsbG93ZWQgYWxpZ25tZW50LCBiZWNhdXNlIHdlIGRvbid0 IGNhcmUgKi8NCisJaWYgKCBvaGNpLT5oY2NhICYgMHgxICkgew0KKwkJb2hjaS0+aGNjYSAmPSB+ MTsNCisJCXJldHVybiB+T0hDSV9IQ0NBX01BU0s7DQorCX0NCisNCisJcmV0dXJuIG9oY2ktPmhj Y2E7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGhjY2FfdyhzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMy X3QgcmVnLCB1aW50MzJfdCB2YWwpDQorew0KKwkvKiBIQ0NBIGFsaWdubWVudCBxdWVyeWluZyBt ZWNoYW5pc20sIGxvdyBvcmRlciBiaXRzDQorCSAqIGFyZSBzYWZlIGZvciB1cyB0byB1c2UgcHJp dmF0ZWx5IGFzIHRoZXkgY2FuJ3QgZXZlcg0KKwkgKiBiZSBzZXQuLi4NCisJICovDQorCWlmICgg dmFsID09IDB4ZmZmZmZmZmYgKSB7DQorCQlvaGNpLT5oY2NhIHw9IDB4MTsNCisJCXJldHVybjsN CisJfQ0KKw0KKwlvaGNpLT5oY2NhID0gdmFsICYgT0hDSV9IQ0NBX01BU0s7DQorfQ0KKw0KKy8q IEJ1bGsgYW5kIGNvbnRyb2wgaGVhZCBFRCdzICovDQorc3RhdGljIHVpbnQzMl90IGhlYWRfcihz dHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0KK3sNCisJdWludDMyX3QgKmhlYWQ7DQor DQorCXN3aXRjaCAoIHJlZyApIHsNCisJY2FzZSA4Og0KKwkJaGVhZCA9ICZvaGNpLT5jdHJsX2hl YWQ7DQorCQlicmVhazsNCisJY2FzZSAxMDoNCisJCWhlYWQgPSAmb2hjaS0+YnVsa19oZWFkOw0K KwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlhYm9ydCgpOw0KKwl9DQorDQorCXJldHVybiAqaGVh ZDsNCit9DQorDQorc3RhdGljIHZvaWQgaGVhZF93KHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJf dCByZWcsIHVpbnQzMl90IHZhbCkNCit7DQorCXVpbnQzMl90ICpoZWFkOw0KKw0KKwlzd2l0Y2gg KCByZWcgKSB7DQorCWNhc2UgODoNCisJCWhlYWQgPSAmb2hjaS0+Y3RybF9oZWFkOw0KKwkJYnJl YWs7DQorCWNhc2UgMTA6DQorCQloZWFkID0gJm9oY2ktPmJ1bGtfaGVhZDsNCisJCWJyZWFrOw0K KwlkZWZhdWx0Og0KKwkJYWJvcnQoKTsNCisJfQ0KKw0KKwlpZiAoIHZhbCAmIH4weDcgKSB7DQor CQlmcHJpbnRmKHN0ZGVyciwgInVzYi1vaGNpOiBNaXMtYWxpZ25lZCAlcyBwb2ludGVyXG4iLA0K KwkJCW9wcmVnW3JlZ10ubmFtZSk7DQorCX0NCisNCisJKmhlYWQgPSB2YWwgJiB+MHg3Ow0KK30N CisNCisvKiBGcmFtZSBJbnRlcnZhbCAqLw0KK3N0YXRpYyB1aW50MzJfdCBmbWlfcihzdHJ1Y3Qg b2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0KK3sNCisJcmV0dXJuIG9oY2ktPmZtaTsNCit9DQor DQorc3RhdGljIHZvaWQgZm1pX3coc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZywgdWlu dDMyX3QgdmFsKQ0KK3sNCisJb2hjaS0+Zm1pID0gdmFsOw0KK30NCisNCisvKiBQZXJpb2RpYyBT dGFydCAqLw0KK3N0YXRpYyB1aW50MzJfdCBwc3RhcnRfcihzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWlu dDMyX3QgcmVnKQ0KK3sNCisJcmV0dXJuIG9oY2ktPnBzdGFydDsNCit9DQorDQorc3RhdGljIHZv aWQgcHN0YXJ0X3coc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFs KQ0KK3sNCisJb2hjaS0+cHN0YXJ0ID0gdmFsOw0KK30NCisNCisvKiBMUyB0aHJlc2hvbGQgKi8N CitzdGF0aWMgdWludDMyX3QgbHN0X3Ioc3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZykN Cit7DQorCXJldHVybiBPSENJX0xTX1RIUkVTSDsNCit9DQorDQorc3RhdGljIHZvaWQgbHN0X3co c3RydWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKQ0KK3sNCisJLyog Ik5laXRoZXIgdGhlIEhvc3QgQ29udHJvbGxlciBub3IgdGhlIEhvc3QgQ29udHJvbGxlciBEcml2 ZXINCisJICogYXJlIGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMgdmFsdWUuIiAtLSBIb3dldmVyLCB0 aGV5IGFyZSBhbGxvd2VkDQorCSAqIHRvIHdyaXRlIHRvIGl0IChXVEY/ISksIHNvIHN1cHJlc3Mg YSB3YXJuaW5nIGlmIHRoZXkgd3JpdGUgdGhlDQorCSAqIGNvcnJlY3QgdmFsdWUuDQorCSAqLw0K KwlpZiAoIHZhbCAhPSBPSENJX0xTX1RIUkVTSCApIHsNCisJCWZwcmludGYoc3RkZXJyLCAidXNi LW9oY2k6IEhDRCB0cmllZCB0byB3cml0ZSBiYWQgTFMgIg0KKwkJCSJ0aHJlc2hvbGQ6IDB4JXhc biIsIHZhbCk7DQorCX0NCit9DQorDQorLyogUm9vdCBIdWIgRGVzY3JpcHRvciBBICovDQorc3Rh dGljIHVpbnQzMl90IHJoZGFfcihzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0KK3sN CisJcmV0dXJuIG9oY2ktPnJoZGVzY19hOw0KK30NCisNCitzdGF0aWMgdm9pZCByaGRhX3coc3Ry dWN0IG9oY2kgKm9oY2ksIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKQ0KK3sNCisJLyogQWxs IHRoZSBvcHRpb25hbCBmZWF0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KKwlpZiAoIG9oY2kt PnJoZGVzY19hICE9IHZhbCApDQorCQlmcHJpbnRmKHN0ZGVyciwgInVzYi1vaGNpOiAlczogaW52 YWxpZCB3cml0ZSB0byAiDQorCQkJCSJyb290IGRlY3JpcHRvciBBOiAiDQorCQkJCSIweCUuOHgg LT4gMHglLjh4XG4iLA0KKwkJCQlvaGNpLT5wY2lfZGV2Lm5hbWUsDQorCQkJCW9oY2ktPnJoZGVz Y19hLCB2YWwpOw0KK30NCisNCisvKiBSb290IEh1YiBEZXNjcmlwdG9yIEIgKi8NCitzdGF0aWMg dWludDMyX3QgcmhkYl9yKHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJfdCByZWcpDQorew0KKwly ZXR1cm4gb2hjaS0+cmhkZXNjX2I7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJoZGJfdyhzdHJ1Y3Qg b2hjaSAqb2hjaSwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpDQorew0KKwlpZiAoIG9oY2kt PnJoZGVzY19iICE9IHZhbCApDQorCQlmcHJpbnRmKHN0ZGVyciwgInVzYi1vaGNpOiAlczogaW52 YWxpZCB3cml0ZSB0byAiDQorCQkJCSJyb290IGRlY3JpcHRvciBCOiAiDQorCQkJCSIweCUuOHgg LT4gMHglLjh4XG4iLA0KKwkJCQlvaGNpLT5wY2lfZGV2Lm5hbWUsDQorCQkJCW9oY2ktPnJoZGVz Y19iLCB2YWwpOw0KK30NCisNCisvKiBSb290IGh1YiBzdGF0dXMgKi8NCitzdGF0aWMgdWludDMy X3QgcmhzdGF0dXNfcihzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnKQ0KK3sNCisJcmV0 dXJuIG9oY2ktPnJoc3RhdHVzOw0KK30NCisNCitzdGF0aWMgdm9pZCByaHN0YXR1c193KHN0cnVj dCBvaGNpICpvaGNpLCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkNCit7DQorCWludCBpOw0K Kw0KKwkvKiB3cml0ZSAxIHRvIGNsZWFyIE9DSUMgKi8NCisJaWYgKCB2YWwgJiBPSENJX1JIU19P Q0lDICkNCisJCW9oY2ktPnJoc3RhdHVzICY9IH5PSENJX1JIU19PQ0lDOw0KKw0KKwlpZiAoIHZh bCAmIE9IQ0lfUkhTX0xQUyApIHsNCisJCWZvcihpPTA7IGkgPCBPSENJX05EUDsgaSsrKQ0KKwkJ CW9oY2ktPnJocG9ydFtpXSAmPSB+T0hDSV9QT1JUX1BQUzsNCisJCWRwcmludGYoInVzYi1vaGNp OiAlczogcG93ZXJlZCBkb3duIGFsbCBwb3J0c1xuIiwNCisJCQlvaGNpLT5wY2lfZGV2Lm5hbWUp Ow0KKwl9DQorDQorCWlmICggdmFsICYgT0hDSV9SSFNfTFBTQyApIHsNCisJCWZvcihpPTA7IGkg PCBPSENJX05EUDsgaSsrKQ0KKwkJCW9oY2ktPnJocG9ydFtpXSB8PSBPSENJX1BPUlRfUFBTOw0K KwkJZHByaW50ZigidXNiLW9oY2k6ICVzOiBwb3dlcmVkIHVwIGFsbCBwb3J0c1xuIiwNCisJCQlv aGNpLT5wY2lfZGV2Lm5hbWUpOw0KKwl9DQorDQorCWlmICggdmFsICYgT0hDSV9SSFNfRFJXRSAp IHsNCisJCS8qIFRPRE86IHNldCBEZXZpY2VSZW1vdmVXYWtldXBFbmFibGUgKi8NCisJfQ0KKw0K KwlpZiAoIHZhbCAmIE9IQ0lfUkhTX0NSV0UgKSB7DQorCQkvKiBUT0RPOiBjbGVhciBEZXZpY2VS ZW1vdmVXYWtldXBFbmFibGUgKi8NCisJfQ0KK30NCisNCisvKiBSb290IGh1YiBwb3J0IHN0YXR1 cyAqLw0KK3N0YXRpYyB1aW50MzJfdCBwc19yKHN0cnVjdCBvaGNpICpvaGNpLCB1aW50MzJfdCBy ZWcpDQorew0KKwlyZWcgLT0gMjE7DQorCXJldHVybiBvaGNpLT5yaHBvcnRbcmVnXTsNCit9DQor DQorc3RhdGljIHZvaWQgcHNfdyhzdHJ1Y3Qgb2hjaSAqb2hjaSwgdWludDMyX3QgcmVnLCB1aW50 MzJfdCB2YWwpDQorew0KKwlyZWcgLT0gMjE7DQorCS8vb2hjaS0+cmhwb3J0W3JlZ10gPSB2YWw7 DQorCXJldHVybjsNCit9DQorDQorLyogUmVnaXN0ZXIgZGVzY3JpcHRvciB0YWJsZSAqLw0KK3N0 YXRpYyBzdHJ1Y3Qgb2hjaV9vcHJlZyBvcHJlZ1tdID0gew0KKwl7Lm5hbWUgPSAiSGNSZXZpc2lv biIsIC5yZWFkID0gcmV2X3J9LA0KKwl7Lm5hbWUgPSAiSGNDb250cm9sIiwgLnJlYWQgPSBjdGxf ciwgLndyaXRlID0gY3RsX3d9LA0KKwl7Lm5hbWUgPSAiSGNDb21tYW5kU3RhdHVzIiwgLnJlYWQg PSBzdGF0dXNfciwgLndyaXRlID0gc3RhdHVzX3d9LA0KKwl7Lm5hbWUgPSAiSGNJbnRlcnJ1cHRT dGF0dXMiLCAucmVhZCA9IGlzX3IsIC53cml0ZSA9IGlzX3d9LA0KKwl7Lm5hbWUgPSAiSGNJbnRl cnJ1cHRFbmFibGUiLCAucmVhZCA9IGllX3IsIC53cml0ZSA9IGllX3d9LA0KKwl7Lm5hbWUgPSAi SGNJbnRlcnJ1cHREaXNhYmxlIiwgLnJlYWQgPSBpZF9yLCAud3JpdGUgPSBpZF93fSwNCisJey5u YW1lID0gIkhjSENDQSIsIC5yZWFkID0gaGNjYV9yLCAud3JpdGUgPSBoY2NhX3d9LA0KKwl7Lm5h bWUgPSAiSGNQZXJpb2RDdXJyZW50RUQifSwNCisJey5uYW1lID0gIkhjQ29udHJvbEhlYWRFRCIs IC5yZWFkID0gaGVhZF9yLCAud3JpdGUgPSBoZWFkX3d9LA0KKwl7Lm5hbWUgPSAiSGNDb250cm9s Q3VycmVudEVEIn0sDQorCXsubmFtZSA9ICJIY0J1bGtIZWFkRUQiLCAucmVhZCA9IGhlYWRfciwg LndyaXRlID0gaGVhZF93fSwNCisJey5uYW1lID0gIkhjQnVsa0N1cnJlbnRFRCJ9LA0KKwl7Lm5h bWUgPSAiSGNEb25lSGVhZCJ9LA0KKwl7Lm5hbWUgPSAiSGNGbUludGVydmFsIiwgLnJlYWQgPSBm bWlfciwgLndyaXRlID0gZm1pX3d9LA0KKwl7Lm5hbWUgPSAiSGNGbVJlbWFpbmluZyJ9LA0KKwl7 Lm5hbWUgPSAiSGNGbU51bWJlciJ9LA0KKwl7Lm5hbWUgPSAiSGNQZXJpb2RpY1N0YXJ0IiwgLnJl YWQgPSBwc3RhcnRfciwgLndyaXRlID0gcHN0YXJ0X3d9LA0KKwl7Lm5hbWUgPSAiSGNMU1RocmVz aG9sZCIsIC5yZWFkID0gbHN0X3IsIC53cml0ZSA9IGxzdF93fSwNCisJey5uYW1lID0gIkhjUmhE ZXNjcmlwdG9yQSIsIC5yZWFkID0gcmhkYV9yLCAud3JpdGUgPSByaGRhX3d9LA0KKwl7Lm5hbWUg PSAiSGNSaERlc2NyaXB0b3JCIiwgLnJlYWQgPSByaGRiX3IsIC53cml0ZSA9IHJoZGJfd30sDQor CXsubmFtZSA9ICJIY1JoU3RhdHVzIiwgLnJlYWQgPSByaHN0YXR1c19yLCAud3JpdGUgPSByaHN0 YXR1c193fSwNCisNCisJLyogVGhlIG51bWJlciBvZiBwb3J0IHN0YXR1cyByZWdpc3RlciBkZXBl bmRzIG9uIHRoZSBkZWZpbml0aW9uDQorCSAqIG9mIE9IQ0lfTkRQIG1hY3JvDQorCSAqLw0KKwl7 Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbMF0iLCAucmVhZCA9IHBzX3IsIC53cml0ZSA9IHBzX3d9 LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbMV0iLCAucmVhZCA9IHBzX3IsIC53cml0ZSA9 IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbMl0iLCAucmVhZCA9IHBzX3IsIC53 cml0ZSA9IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbM10iLCAucmVhZCA9IHBz X3IsIC53cml0ZSA9IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbNF0iLCAucmVh ZCA9IHBzX3IsIC53cml0ZSA9IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0dXNbNV0i LCAucmVhZCA9IHBzX3IsIC53cml0ZSA9IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBvcnRTdGF0 dXNbNl0iLCAucmVhZCA9IHBzX3IsIC53cml0ZSA9IHBzX3d9LA0KKwl7Lm5hbWUgPSAiSGNSaFBv cnRTdGF0dXNbN10iLCAucmVhZCA9IHBzX3IsIC53cml0ZSA9IHBzX3d9LA0KK307DQorDQorc3Rh dGljIHNpemVfdCBudW1fb3ByZWcgPSBzaXplb2Yob3ByZWcpL3NpemVvZigqb3ByZWcpOw0KKw0K K3N0YXRpYyB1aW50MzJfdCBtZW1fcmVhZCh2b2lkICpwdHIsIHRhcmdldF9waHlzX2FkZHJfdCBh ZGRyKQ0KK3sNCisJc3RydWN0IG9oY2kgKm9oY2kgPSBwdHI7DQorCXVpbnQzMl90IG9mcyA9IChh ZGRyIC0gb2hjaS0+bWVtX2Jhc2UpID4+IDI7DQorCXN0cnVjdCBvaGNpX29wcmVnICpyZWc7DQor CXVpbnQzMl90IHJldDsNCisNCisJLyogT25seSBhbGlnbmVkIHJlYWRzIGFyZSBhbGxvd2VkIG9u IE9IQ0kgKi8NCisJaWYgKCBhZGRyICYgMyApIHsNCisJCWZwcmludGYoc3RkZXJyLCAidXNiLW9o Y2k6IE1pcy1hbGlnbmVkIHJlYWRcbiIpOw0KKwkJcmV0dXJuIDB4ZmZmZmZmZmY7DQorCX0NCisN CisJaWYgKCBvZnMgPj0gbnVtX29wcmVnICkgew0KKwkJZnByaW50ZihzdGRlcnIsICJ1c2Itb2hj aTogVHJ5aW5nIHRvIHJlYWQgcmVnaXN0ZXIgJXUvJXVcbiIsDQorCQkJb2ZzLCBudW1fb3ByZWcp Ow0KKwkJcmV0dXJuIDB4ZmZmZmZmZmY7DQorCX0NCisNCisJcmVnID0gJm9wcmVnW29mc107DQor DQorCWlmICggIXJlZy0+cmVhZCApIHsNCisJCWZwcmludGYoc3RkZXJyLCAidXNiLW9oY2k6IHJl Z2lzdGVyICV1ICglcykgaXMgbm90IHJlYWRhYmxlXG4iLA0KKwkJCW9mcywgcmVnLT5uYW1lKTsN CisJCXJldHVybiAweGZmZmZmZmZmOw0KKwl9DQorDQorCXJldCA9IHJlZy0+cmVhZChvaGNpLCBv ZnMpOw0KKw0KKwkvL2RwcmludGYoInVzYi1vaGNpOiByZWFkIDB4JS44eCBmcm9tICV1ICglcylc biIsIHJldCwgb2ZzLCByZWctPm5hbWUpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0 aWMgdm9pZCBtZW1fd3JpdGUodm9pZCAqcHRyLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWlu dDMyX3QgdmFsdWUpDQorew0KKwlzdHJ1Y3Qgb2hjaSAqb2hjaSA9IHB0cjsNCisJdWludDMyX3Qg b2ZzID0gKGFkZHIgLSBvaGNpLT5tZW1fYmFzZSkgPj4gMjsNCisJc3RydWN0IG9oY2lfb3ByZWcg KnJlZzsNCisNCisJLyogT25seSBhbGlnbmVkIHdyaXRlcyBhcmUgYWxsb3dlZCBvbiBPSENJICov DQorCWlmICggYWRkciAmIDMgKSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgInVzYi1vaGNpOiBNaXMt YWxpZ25lZCB3cml0ZVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKCBvZnMgPj0gbnVt X29wcmVnICkgew0KKwkJZnByaW50ZihzdGRlcnIsICJ1c2Itb2hjaTogVHJ5aW5nIHRvIHdyaXRl IHJlZ2lzdGVyICV1LyV1XG4iLA0KKwkJCW9mcywgbnVtX29wcmVnKTsNCisJCXJldHVybjsNCisJ fQ0KKw0KKwlyZWcgPSAmb3ByZWdbb2ZzXTsNCisNCisJaWYgKCAhcmVnLT53cml0ZSApIHsNCisJ CWZwcmludGYoc3RkZXJyLCAidXNiLW9oY2k6IHJlZ2lzdGVyICV1ICglcykgaXMgbm90IHdyaXRh YmxlXG4iLA0KKwkJCW9mcywgcmVnLT5uYW1lKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlyZWct PndyaXRlKG9oY2ksIG9mcywgdmFsdWUpOw0KKw0KKwkvL2RwcmludGYoInVzYi1vaGNpOiB3cml0 ZSAweCUuOHggdG8gJXUgKCVzKVxuIiwgdmFsdWUsIG9mcywgcmVnLT5uYW1lKTsNCit9DQorDQor LyogT25seSBkd29yZCByZWFkcyBhcmUgZGVmaW5lZCBvbiBPSENJIHJlZ2lzdGVyIHNwYWNlICov DQorc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICpjcHVfY2FsbGJhY2tfcmVhZFszXT17DQorCU5V TEwsDQorCU5VTEwsDQorCW1lbV9yZWFkLA0KK307DQorDQorLyogT25seSBkd29yZCB3cml0ZXMg YXJlIGRlZmluZWQgb24gT0hDSSByZWdpc3RlciBzcGFjZSAqLw0KK3N0YXRpYyBDUFVXcml0ZU1l bW9yeUZ1bmMgKmNwdV9jYWxsYmFja193cml0ZVszXT17DQorCU5VTEwsDQorCU5VTEwsDQorCW1l bV93cml0ZSwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIG1hcGZ1bmMoUENJRGV2aWNlICpwY2lfZGV2 LCBpbnQgaSwNCisJCQl1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzaXplLCBpbnQgdHlwZSkNCit7 DQorCXN0cnVjdCBvaGNpICpvaGNpID0gKHN0cnVjdCBvaGNpICopcGNpX2RldjsNCisJb2hjaS0+ bWVtX2Jhc2UgPSBhZGRyOw0KKwljcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KGFkZHIsIHNp emUsIG9oY2ktPm1lbSk7DQorfQ0KKw0KK3ZvaWQgdXNiX29oY2lfaW5pdChjb25zdCBjaGFyICpu YW1lLCB1aW50MTZfdCB2aWQsIHVpbnQxNl90IGRpZCwNCisJCQlpbnQgYnVzX251bSwgaW50IGRl dmZuKQ0KK3sNCisJc3RydWN0IG9oY2kgKm9oY2k7DQorDQorCW9oY2kgPSAoc3RydWN0IG9oY2kg KilwY2lfcmVnaXN0ZXJfZGV2aWNlKG5hbWUsIHNpemVvZigqb2hjaSksDQorCQkJCQkJCWJ1c19u dW0sIGRldmZuLA0KKwkJCQkJCQlOVUxMLCBOVUxMKTsNCisJaWYgKCBvaGNpID09IE5VTEwgKSB7 DQorCQlmcHJpbnRmKHN0ZGVyciwgIm9oY2k6ICVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgUENJIGRl dmljZVxuIiwNCisJCQkJbmFtZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJb2hjaS0+cGNpX2Rl di5jb25maWdbMHgwMF0gPSB2aWQgJiAweGZmOw0KKwlvaGNpLT5wY2lfZGV2LmNvbmZpZ1sweDAx XSA9ICh2aWQgPj4gOCkgJiAweGZmOw0KKwlvaGNpLT5wY2lfZGV2LmNvbmZpZ1sweDAyXSA9IGRp ZCAmIDB4ZmY7DQorCW9oY2ktPnBjaV9kZXYuY29uZmlnWzB4MDNdID0gKGRpZCA+PiA4KSAmIDB4 ZmY7DQorCW9oY2ktPnBjaV9kZXYuY29uZmlnWzB4MDldID0gMHgxMDsgLyogT0hDSSAqLw0KKwlv aGNpLT5wY2lfZGV2LmNvbmZpZ1sweDBhXSA9IDB4MzsNCisJb2hjaS0+cGNpX2Rldi5jb25maWdb MHgwYl0gPSAweGM7DQorCW9oY2ktPnBjaV9kZXYuY29uZmlnWzB4M2RdID0gMHgwMTsgLyogaW50 ZXJydXB0IHBpbiAxICovDQorDQorCW9oY2ktPm1lbSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnko MCwNCisJCQkJCQljcHVfY2FsbGJhY2tfcmVhZCwNCisJCQkJCQljcHVfY2FsbGJhY2tfd3JpdGUs DQorCQkJCQkJb2hjaSk7DQorCXBjaV9yZWdpc3Rlcl9pb19yZWdpb24oKHN0cnVjdCBQQ0lEZXZp Y2UgKilvaGNpLCAwLCAyNTYsDQorCQkJCVBDSV9BRERSRVNTX1NQQUNFX01FTSwgbWFwZnVuYyk7 DQorDQorCW9oY2lfcmVzZXQob2hjaSk7DQorfQ0KZGlmZiAtdXJOIHFlbXUub3JpZy92bC5oIHFl bXUudXNiL3ZsLmgNCi0tLSBxZW11Lm9yaWcvdmwuaAkyMDA0LTA2LTE1IDAzOjAyOjM2LjAwMDAw MDAwMCArMDEwMA0KKysrIHFlbXUudXNiL3ZsLmgJMjAwNC0wNi0xNyAxOTozMjoyOS4wMDAwMDAw MDAgKzAxMDANCkBAIC01MTAsNiArNTEwLDkgQEANCiB2b2lkIHBjaV9iaW9zX2luaXQodm9pZCk7 DQogdm9pZCBwY2lfaW5mbyh2b2lkKTsNCiANCit2b2lkIHVzYl9vaGNpX2luaXQoY29uc3QgY2hh ciAqbmFtZSwgdWludDE2X3QgdmlkLCB1aW50MTZfdCBkaWQsDQorCQkJaW50IGJ1c19udW0sIGlu dCBkZXZmbik7DQorDQogLyogdGVtcG9yYXJ5OiB3aWxsIGJlIG1vdmVkIGluIHBsYXRmb3JtIHNw ZWNpZmljIGZpbGUgKi8NCiB2b2lkIHBjaV9wcmVwX2luaXQodm9pZCk7DQogdm9pZCBwY2lfcG1h Y19pbml0KHZvaWQpOw0K --=-2oSBC5UT8ryPDT2fNoxR-- --=-sUaO4TIq0cevUqbzLtiS Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBA1HZMkbV2aYZGvn0RAtzwAJ9cGQqFG3rjR3919uCjc94ENXGfxQCfcxKa XfRHDeUlfzFe9HIWGdPprK4= =qZ3T -----END PGP SIGNATURE----- --=-sUaO4TIq0cevUqbzLtiS--